Source code for finance_datagen._base
"""Shared generator base model."""
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import Annotated, Generic, TypeVar
from pydantic import BaseModel, ConfigDict, Field, PrivateAttr
OutputT = TypeVar("OutputT")
PositiveInt = Annotated[int, Field(gt=0)]
PositiveFloat = Annotated[float, Field(gt=0)]
NonNegativeFloat = Annotated[float, Field(ge=0)]
[docs]
class DataGenerator(BaseModel, Generic[OutputT], ABC):
"""Pydantic base class for table-generating models."""
model_config = ConfigDict(arbitrary_types_allowed=True, validate_assignment=True, validate_default=True)
_yielded: bool = PrivateAttr(default=False)
[docs]
@abstractmethod
def generate(self) -> OutputT:
"""Generate and return the synthetic dataset."""
def __iter__(self) -> DataGenerator[OutputT]:
self._yielded = False
return self
def __next__(self) -> OutputT:
if self._yielded:
raise StopIteration
self._yielded = True
return self.generate()