Coverage for pythia/parameter.py: 100%
35 statements
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-08 17:13 +0000
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-08 17:13 +0000
1"""
2File: pythia/parameter.py
3Author: Nando Hegemann
4Gitlab: https://gitlab.com/Nando-Hegemann
5Description: PyThia classes containing Parameter information.
6SPDX-License-Identifier: LGPL-3.0-or-later OR Hippocratic-3.0-ECO-MEDIA-MIL
7"""
8from dataclasses import dataclass
9import numpy as np
12@dataclass
13class Parameter:
14 """Class used for stochasic parameters.
16 Parameters
17 ----------
18 name : str
19 Parameter name.
20 domain : array_like
21 Supported domain of the parameter distribution.
22 distribution : str
23 Distribution identifier of the parameter.
24 mean : float, default=None
25 Mean of parameter probability.
26 var : float, default=None
27 Variance of parameter probability.
28 alpha : float, default=None
29 Alpha value of Beta and Gamma distribution.
30 beta : float, default=None
31 Beta value of Beta and Gamma distribution.
32 """
34 name: str
35 domain: list | tuple | np.ndarray
36 distribution: str
37 mean: float | None = None
38 var: float | None = None
39 alpha: float | None = None
40 beta: float | None = None
42 def __post_init__(self) -> None:
43 """Sanity checks."""
44 assert isinstance(self.name, str)
45 assert isinstance(self.distribution, str)
47 self.domain = np.array(self.domain)
48 assert self.domain.shape == (2,)
50 if self.distribution == "uniform":
51 assert self.mean is None
52 assert self.var is None
53 assert self.alpha is None
54 assert self.beta is None
55 elif self.distribution == "normal":
56 assert isinstance(self.mean, (float, int))
57 assert isinstance(self.var, (float, int))
58 assert self.var > 0
59 assert self.alpha is None
60 assert self.beta is None
61 elif self.distribution in ["gamma", "beta"]:
62 assert self.mean is None
63 assert self.var is None
64 assert isinstance(self.alpha, (float, int))
65 assert isinstance(self.beta, (float, int))
66 assert self.alpha >= 0
67 assert self.beta >= 0
68 else:
69 raise ValueError(f"Unknown distribution: '{self.distribution}'")