Coverage for pesummary/cli/summarypages.py: 92.0%

87 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.utils import logger, gw_results_file 

6import pesummary.core.cli.inputs 

7import pesummary.gw.cli.inputs 

8 

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

10 

11 

12class WebpageGeneration(object): 

13 """Wrapper class for _GWWebpageGeneration and _CoreWebpageGeneration 

14 

15 Parameters 

16 ---------- 

17 inputs: argparse.Namespace 

18 Namespace object containing the command line options 

19 colors: list, optional 

20 colors that you wish to use to distinguish different result files 

21 """ 

22 def __init__(self, inputs, colors="default", gw=False): 

23 self.inputs = inputs 

24 self.colors = colors 

25 self.gw = gw 

26 self.generate_webpages() 

27 

28 def generate_webpages(self): 

29 """Generate all plots for all result files passed 

30 """ 

31 logger.info("Starting to generate webpages") 

32 if self.gw and self.inputs.public: 

33 object = _PublicGWWebpageGeneration(self.inputs, colors=self.colors) 

34 elif self.gw: 

35 object = _GWWebpageGeneration(self.inputs, colors=self.colors) 

36 else: 

37 object = _CoreWebpageGeneration(self.inputs, colors=self.colors) 

38 object.generate_webpages() 

39 logger.info("Finished generating webpages") 

40 

41 

42class _CoreWebpageGeneration(object): 

43 """Class to generate all webpages for all result files with the Core module 

44 

45 Parameters 

46 ---------- 

47 inputs: argparse.Namespace 

48 Namespace object containing the command line options 

49 colors: list, optional 

50 colors that you wish to use to distinguish different result files 

51 """ 

52 def __init__(self, inputs, colors="default"): 

53 from pesummary.core.webpage.main import _WebpageGeneration 

54 key_data = inputs.grab_key_data_from_result_files() 

55 self.webpage_object = _WebpageGeneration( 

56 webdir=inputs.webdir, samples=inputs.samples, labels=inputs.labels, 

57 publication=inputs.publication, user=inputs.user, config=inputs.config, 

58 same_parameters=inputs.same_parameters, base_url=inputs.baseurl, 

59 file_versions=inputs.file_version, hdf5=inputs.hdf5, colors=inputs.colors, 

60 custom_plotting=inputs.custom_plotting, 

61 existing_labels=inputs.existing_labels, 

62 existing_config=inputs.existing_config, 

63 existing_file_version=inputs.existing_file_version, 

64 existing_injection_data=inputs.existing_injection_data, 

65 existing_samples=inputs.existing_samples, 

66 existing_metafile=inputs.existing, 

67 existing_file_kwargs=inputs.existing_file_kwargs, 

68 existing_weights=inputs.existing_weights, 

69 add_to_existing=inputs.add_to_existing, notes=inputs.notes, 

70 disable_comparison=inputs.disable_comparison, 

71 disable_interactive=inputs.disable_interactive, 

72 package_information=inputs.package_information, 

73 mcmc_samples=inputs.mcmc_samples, 

74 external_hdf5_links=inputs.external_hdf5_links, key_data=key_data, 

75 existing_plot=inputs.existing_plot, disable_expert=inputs.disable_expert, 

76 analytic_priors=inputs.analytic_prior_dict 

77 ) 

78 

79 def generate_webpages(self): 

80 """Generate all webpages within the Core module 

81 """ 

82 self.webpage_object.generate_webpages() 

83 

84 

85class _GWWebpageGeneration(object): 

86 """Class to generate all webpages for all result files with the GW module 

87 

88 Parameters 

89 ---------- 

90 inputs: argparse.Namespace 

91 Namespace object containing the command line options 

92 colors: list, optional 

93 colors that you wish to use to distinguish different result files 

94 """ 

95 def __init__(self, inputs, colors="default"): 

96 from pesummary.gw.webpage.main import _WebpageGeneration 

97 key_data = inputs.grab_key_data_from_result_files() 

98 self.webpage_object = _WebpageGeneration( 

99 webdir=inputs.webdir, samples=inputs.samples, labels=inputs.labels, 

100 publication=inputs.publication, user=inputs.user, config=inputs.config, 

101 same_parameters=inputs.same_parameters, base_url=inputs.baseurl, 

102 file_versions=inputs.file_version, hdf5=inputs.hdf5, colors=inputs.colors, 

103 custom_plotting=inputs.custom_plotting, gracedb=inputs.gracedb, 

104 pepredicates_probs=inputs.pepredicates_probs, 

105 approximant=inputs.approximant, key_data=key_data, 

106 file_kwargs=inputs.file_kwargs, existing_labels=inputs.existing_labels, 

107 existing_config=inputs.existing_config, 

108 existing_file_version=inputs.existing_file_version, 

109 existing_injection_data=inputs.existing_injection_data, 

110 existing_samples=inputs.existing_samples, 

111 existing_metafile=inputs.existing, 

112 add_to_existing=inputs.add_to_existing, 

113 existing_file_kwargs=inputs.existing_file_kwargs, 

114 existing_weights=inputs.existing_weights, 

115 result_files=inputs.result_files, notes=inputs.notes, 

116 disable_comparison=inputs.disable_comparison, 

117 disable_interactive=inputs.disable_interactive, 

118 pastro_probs=inputs.pastro_probs, gwdata=inputs.gwdata, 

119 publication_kwargs=inputs.publication_kwargs, 

120 no_ligo_skymap=inputs.no_ligo_skymap, 

121 psd=inputs.psd, priors=inputs.priors, 

122 package_information=inputs.package_information, 

123 mcmc_samples=inputs.mcmc_samples, existing_plot=inputs.existing_plot, 

124 external_hdf5_links=inputs.external_hdf5_links, 

125 preliminary_pages=inputs.preliminary_pages, 

126 disable_expert=inputs.disable_expert, 

127 analytic_priors=inputs.analytic_prior_dict 

128 ) 

129 

130 def generate_webpages(self): 

131 """Generate all webpages within the Core module 

132 """ 

133 self.webpage_object.generate_webpages() 

134 

135 

136class _PublicGWWebpageGeneration(object): 

137 """Class to generate all webpages for all result files with the GW module 

138 

139 Parameters 

140 ---------- 

141 inputs: argparse.Namespace 

142 Namespace object containing the command line options 

143 colors: list, optional 

144 colors that you wish to use to distinguish different result files 

145 """ 

146 def __init__(self, inputs, colors="default"): 

147 from pesummary.gw.webpage.public import _PublicWebpageGeneration 

148 key_data = inputs.grab_key_data_from_result_files() 

149 self.webpage_object = _PublicWebpageGeneration( 

150 webdir=inputs.webdir, samples=inputs.samples, labels=inputs.labels, 

151 publication=inputs.publication, user=inputs.user, config=inputs.config, 

152 same_parameters=inputs.same_parameters, base_url=inputs.baseurl, 

153 file_versions=inputs.file_version, hdf5=inputs.hdf5, colors=inputs.colors, 

154 custom_plotting=inputs.custom_plotting, gracedb=inputs.gracedb, 

155 pepredicates_probs=inputs.pepredicates_probs, 

156 approximant=inputs.approximant, key_data=key_data, 

157 file_kwargs=inputs.file_kwargs, existing_labels=inputs.existing_labels, 

158 existing_config=inputs.existing_config, 

159 existing_file_version=inputs.existing_file_version, 

160 existing_injection_data=inputs.existing_injection_data, 

161 existing_samples=inputs.existing_samples, 

162 existing_metafile=inputs.existing, 

163 add_to_existing=inputs.add_to_existing, 

164 existing_file_kwargs=inputs.existing_file_kwargs, 

165 existing_weights=inputs.existing_weights, 

166 result_files=inputs.result_files, notes=inputs.notes, 

167 disable_comparison=inputs.disable_comparison, 

168 disable_interactive=inputs.disable_interactive, 

169 pastro_probs=inputs.pastro_probs, gwdata=inputs.gwdata, 

170 publication_kwargs=inputs.publication_kwargs, 

171 no_ligo_skymap=inputs.no_ligo_skymap, 

172 psd=inputs.psd, priors=inputs.priors, 

173 package_information=inputs.package_information, 

174 mcmc_samples=inputs.mcmc_samples, existing_plot=inputs.existing_plot, 

175 external_hdf5_links=inputs.external_hdf5_links, 

176 preliminary_pages=inputs.preliminary_pages, 

177 disable_expert=inputs.disable_expert, 

178 analytic_priors=inputs.analytic_prior_dict 

179 ) 

180 

181 def generate_webpages(self): 

182 """Generate all webpages within the Core module 

183 """ 

184 self.webpage_object.generate_webpages() 

185 

186 

187def main( 

188 args=None, 

189 _parser=None, 

190 _core_input_cls=pesummary.core.cli.inputs.WebpagePlusPlottingPlusMetaFileInput, 

191 _gw_input_cls=pesummary.gw.cli.inputs.WebpagePlusPlottingPlusMetaFileInput 

192): 

193 """Top level interface for `summarypages` 

194 """ 

195 from pesummary.utils import history_dictionary 

196 from .summaryplots import PlotGeneration 

197 

198 if _parser is None: 

199 from pesummary.gw.cli.parser import ArgumentParser 

200 _parser = ArgumentParser() 

201 _parser.add_all_groups_to_parser() 

202 

203 opts, unknown = _parser.parse_known_args(args=args) 

204 _gw = False 

205 if opts.restart_from_checkpoint: 

206 from pesummary import conf 

207 import os 

208 if opts.webdir is None: 

209 raise ValueError( 

210 "In order to restart from checkpoint please provide a webdir" 

211 ) 

212 resume_file_dir = conf.checkpoint_dir(opts.webdir) 

213 resume_file = conf.resume_file 

214 state = pesummary.core.cli.inputs.load_current_state( 

215 os.path.join(resume_file_dir, resume_file) 

216 ) 

217 if state is not None: 

218 _gw = state.gw 

219 input_args = (opts,) 

220 input_kwargs = {"checkpoint": state} 

221 else: 

222 if opts.gw or gw_results_file(opts): 

223 _gw = True 

224 input_args = (opts,) 

225 input_kwargs = {} 

226 

227 if _gw: 

228 from pesummary.gw.file.meta_file import GWMetaFile 

229 from pesummary.gw.finish import GWFinishingTouches 

230 input_cls = _gw_input_cls 

231 meta_file_cls = GWMetaFile 

232 finish_cls = GWFinishingTouches 

233 else: 

234 from pesummary.core.file.meta_file import MetaFile 

235 from pesummary.core.finish import FinishingTouches 

236 input_cls = _core_input_cls 

237 meta_file_cls = MetaFile 

238 finish_cls = FinishingTouches 

239 

240 args = input_cls(*input_args, **input_kwargs) 

241 plotting_object = PlotGeneration(args, gw=args.gw) 

242 WebpageGeneration(args, gw=args.gw) 

243 _history = history_dictionary( 

244 program=_parser.prog, creator=args.user, 

245 command_line=_parser.command_line 

246 ) 

247 meta_file_cls(args, history=_history) 

248 if gw_results_file(opts): 

249 kwargs = dict(ligo_skymap_PID=plotting_object.ligo_skymap_PID) 

250 else: 

251 kwargs = {} 

252 finish_cls(args, **kwargs) 

253 

254 

255if __name__ == "__main__": 

256 main()