Coverage for pesummary/utils/parameters.py: 93.3%

45 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-05-02 08:42 +0000

1# Licensed under an MIT style license -- see LICENSE.md 

2 

3from .list import List 

4from pesummary.gw.file.standard_names import descriptive_names 

5 

6__author__ = ["Charlie Hoy <charlie.hoy@ligo.org>"] 

7 

8 

9class Parameter(str): 

10 """Class to handle a single parameter 

11 

12 Parameters 

13 ---------- 

14 parameter: str 

15 name of the parameter 

16 description: str, optional 

17 text describing what parameter represents. Default, look to see if 

18 pesummary has a descriptive name for parameter else 'Unknown parameter 

19 description 

20 

21 Attributes 

22 ---------- 

23 description: str 

24 return text describing what parameter represents 

25 """ 

26 def __new__(self, parameter, **kwargs): 

27 return super(Parameter, self).__new__(self, parameter) 

28 

29 def __init__(self, parameter, description=None): 

30 self._parameter = parameter 

31 self._description = "Unknown parameter description" 

32 if description is None: 

33 if parameter in descriptive_names.keys(): 

34 self._description = descriptive_names[parameter] 

35 else: 

36 self._description = description 

37 

38 @property 

39 def description(self): 

40 return self._description 

41 

42 def __repr__(self): 

43 return repr(self._parameter) 

44 

45 

46class Parameters(List): 

47 """Class to store the list of parameters 

48 

49 Parameters 

50 ---------- 

51 args: tuple 

52 all arguments are passed to the list class 

53 **kwargs: dict 

54 all kwargs are passed to the list class 

55 

56 Attributes 

57 ---------- 

58 added: list 

59 list of parameters that have been appended to the original list 

60 """ 

61 def __init__(self, *args, cls=Parameter, **kwargs): 

62 self._cls = cls 

63 if len(args) == 1: 

64 super(Parameters, self).__init__(*args, cls=Parameter, **kwargs) 

65 else: 

66 _args = list(args) 

67 _args[2] = Parameter 

68 super(Parameters, self).__init__(*_args, **kwargs) 

69 

70 def __iter__(self, *args, **kwargs): 

71 _iter = super(Parameters, self).__iter__(*args, **kwargs) 

72 for _value in _iter: 

73 yield self._cls(_value) 

74 

75 

76class MultiAnalysisParameters(List): 

77 """Class to store a multidimensional list of parameters 

78 

79 Parameters 

80 ---------- 

81 args: tuple 

82 all arguments are passed to the list class 

83 **kwargs: dict 

84 all kwargs are passed to the list class 

85 

86 Attributes 

87 ---------- 

88 added: list 

89 list of parameters that have been appended to the original list 

90 """ 

91 def __init__(self, *args, cls=Parameters, **kwargs): 

92 self._cls = cls 

93 if len(args) == 1: 

94 super(MultiAnalysisParameters, self).__init__( 

95 *args, cls=cls, **kwargs 

96 ) 

97 else: 

98 _args = list(args) 

99 _args[2] = Parameters 

100 super(MultiAnalysisParameters, self).__init__(*_args, **kwargs) 

101 

102 def __getitem__(self, *args, **kwargs): 

103 self.cls = None 

104 output = super(List, self).__getitem__(*args, **kwargs) 

105 self.cls = self._cls 

106 if isinstance(output[0], list): 

107 return [self.cls(value) for value in output] 

108 return self.cls(output)