Coverage for pesummary/cli/summarypageslw.py: 94.6%
56 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-12-09 22:34 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-12-09 22:34 +0000
1#! /usr/bin/env python
3# Licensed under an MIT style license -- see LICENSE.md
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
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"""
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
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)
43 @property
44 def parameters_to_include(self):
45 return self._parameters_to_include
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)
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
97class GWLWInput(gw_inputs.WebpagePlusPlottingPlusMetaFileInput, LWInput):
98 pass
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 )
113if __name__ == "__main__":
114 main()