Coverage for pythia/parameter.py: 100%

35 statements  

« 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 

10 

11 

12@dataclass 

13class Parameter: 

14 """Class used for stochasic parameters. 

15 

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 """ 

33 

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 

41 

42 def __post_init__(self) -> None: 

43 """Sanity checks.""" 

44 assert isinstance(self.name, str) 

45 assert isinstance(self.distribution, str) 

46 

47 self.domain = np.array(self.domain) 

48 assert self.domain.shape == (2,) 

49 

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}'")