Source code for pythia.parameter

"""PyThia classes containing Parameter information."""

from dataclasses import dataclass
from typing import Optional, TypeAlias

import numpy as np

Real: TypeAlias = int | float | np.floating


[docs]@dataclass class Parameter: """Class used for stochasic parameters. Parameters ---------- name : str Parameter name. domain : array_like Supported domain of the parameter distribution. distribution : str Distribution identifier of the parameter. mean : float, default=None Mean of parameter probability. var : float, default=None Variance of parameter probability. alpha : float, default=None Alpha value of Beta and Gamma distribution. beta : float, default=None Beta value of Beta and Gamma distribution. """ name: str domain: tuple[Real, Real] distribution: str mean: Optional[Real] = None var: Optional[Real] = None alpha: Optional[Real] = None beta: Optional[Real] = None def __post_init__(self) -> None: """Sanity checks.""" assert isinstance(self.name, str) assert isinstance(self.distribution, str) self.domain = tuple(self.domain) # type: ignore assert len(self.domain) == 2 assert isinstance(self.domain[0], Real) and isinstance(self.domain[1], Real) if self.distribution == "uniform": assert self.mean is None assert self.var is None assert self.alpha is None assert self.beta is None elif self.distribution == "normal": assert isinstance(self.mean, Real) assert isinstance(self.var, Real) assert self.var > 0 assert self.alpha is None assert self.beta is None elif self.distribution in ["gamma", "beta"]: assert self.mean is None assert self.var is None assert isinstance(self.alpha, Real) assert isinstance(self.beta, Real) assert self.alpha >= 0 assert self.beta >= 0 else: raise ValueError(f"Unknown distribution: '{self.distribution}'")