xinjie.wang
update
7734c01
Raw
History Blame Contribute Delete
1.94 kB
# Copyright (c) Meta Platforms, Inc. and affiliates.
import torch
from typing import Optional, Union
class Base(torch.nn.Module):
def __init__(self, seed_or_generator: Optional[Union[int, torch.Generator]] = None):
super().__init__()
if isinstance(seed_or_generator, torch.Generator):
self.random_generator = seed_or_generator
elif isinstance(seed_or_generator, int):
self.seed = seed_or_generator
elif seed_or_generator is None:
self.random_generator = torch.default_generator
else:
raise RuntimeError(
f"cannot use argument of type {type(seed_or_generator)} to set random generator"
)
@property
def seed(self):
raise AttributeError(f"Cannot read attribute 'seed'.")
@seed.setter
def seed(self, value: int):
self._random_generator = torch.Generator().manual_seed(value)
@property
def random_generator(self):
return self._random_generator
@random_generator.setter
def random_generator(self, generator: torch.Generator):
self._random_generator = generator
def forward(self, x_shape, x_device, *args_conditionals, **kwargs_conditionals):
return self.generate(
x_shape,
x_device,
*args_conditionals,
**kwargs_conditionals,
)
def generate(self, x_shape, x_device, *args_conditionals, **kwargs_conditionals):
for _, xt, _ in self.generate_iter(
x_shape,
x_device,
*args_conditionals,
**kwargs_conditionals,
):
pass
return xt
def generate_iter(
self,
x_shape,
x_device,
*args_conditionals,
**kwargs_conditionals,
):
raise NotImplementedError
def loss(self, x, *args_conditionals, **kwargs_conditionals):
raise NotImplementedError