Coverage for pesummary/cli/summarypageslw.py: 94.6%

56 statements  

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

1#! /usr/bin/env python 

2 

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

4 

5from pesummary.utils.exceptions import InputError 

6from pesummary.core.cli import inputs as core_inputs 

7from pesummary.gw.cli import inputs as gw_inputs 

8from pesummary.utils.utils import logger 

9from pesummary.gw.cli.parser import ArgumentParser as _ArgumentParser 

10 

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

12__doc__ = """This executable is a lightweight version of summarypages. It 

13allows you to customise which parameters you wish to view rather than plotting 

14every single parameter in the result file""" 

15 

16 

17class ArgumentParser(_ArgumentParser): 

18 def _pesummary_options(self): 

19 options = super(ArgumentParser, self)._pesummary_options() 

20 options.update( 

21 { 

22 "--parameters": { 

23 "nargs": "+", 

24 "help": ( 

25 "list of parameters you wish to include in the " 

26 "summary pages" 

27 ), 

28 "key": "webpage" 

29 } 

30 } 

31 ) 

32 return options 

33 

34 

35class LWInput(core_inputs.WebpagePlusPlottingPlusMetaFileInput): 

36 """ 

37 """ 

38 def __init__(self, *args, **kwargs): 

39 super(LWInput, self).__init__(*args, **kwargs) 

40 self.parameters_to_include = self.opts.parameters 

41 self._same_parameters = self.intersect_samples_dict(self.samples) 

42 

43 @property 

44 def parameters_to_include(self): 

45 return self._parameters_to_include 

46 

47 @parameters_to_include.setter 

48 def parameters_to_include(self, parameters_to_include): 

49 self._parameters_to_include = parameters_to_include 

50 if parameters_to_include is None: 

51 raise InputError( 

52 "Please provide a list of parameters you wish to plot" 

53 ) 

54 removed_labels = [] 

55 for num, label in enumerate(self.labels): 

56 params = [ 

57 i for i in parameters_to_include if i in 

58 list(self.samples[label].keys()) 

59 ] 

60 not_included_params = [ 

61 i for i in parameters_to_include if i not in 

62 list(self.samples[label].keys()) 

63 ] 

64 if len(not_included_params) == len(parameters_to_include): 

65 logger.warning( 

66 "Unable to find specified parameters {} in the file {}. " 

67 "The file {} will not be included in the final " 

68 "pages".format( 

69 ", ".join(parameters_to_include), self.result_files[num], 

70 self.result_files[num] 

71 ) 

72 ) 

73 removed_labels.append(label) 

74 elif len(not_included_params) != 0: 

75 logger.warning( 

76 "The parameters {} are not in the file {}. They will not " 

77 "be included in the final pages".format( 

78 ", ".join(not_included_params), self.result_files[num] 

79 ) 

80 ) 

81 original = list(self.samples[label].keys()) 

82 for i in original: 

83 if i not in params: 

84 self.samples[label].pop(i) 

85 if len(removed_labels) == len(self.labels): 

86 raise InputError("Please provide a results file") 

87 for label in removed_labels: 

88 self.samples.pop(label) 

89 self.labels.remove(label) 

90 

91 def intersect_samples_dict(self, samples): 

92 if hasattr(self, "_parameters_to_include"): 

93 return super(LWInput, self).intersect_samples_dict(samples) 

94 return self.opts.parameters 

95 

96 

97class GWLWInput(gw_inputs.WebpagePlusPlottingPlusMetaFileInput, LWInput): 

98 pass 

99 

100 

101def main(args=None): 

102 """The main interface to `summarypageslw` 

103 """ 

104 from .summarypages import main as _main 

105 _parser = ArgumentParser(description=__doc__) 

106 _parser.add_all_groups_to_parser() 

107 _main( 

108 args=args, _parser=_parser, _core_input_cls=LWInput, 

109 _gw_input_cls=GWLWInput 

110 ) 

111 

112 

113if __name__ == "__main__": 

114 main()