nullpol 0.2.3__tar.gz → 0.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/ci.yml +2 -2
  2. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/codeql.yml +3 -3
  3. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/scheduled-release.yml +1 -1
  4. {nullpol-0.2.3 → nullpol-0.2.5}/.pre-commit-config.yaml +4 -4
  5. {nullpol-0.2.3 → nullpol-0.2.5}/PKG-INFO +1 -1
  6. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/input.py +13 -3
  7. nullpol-0.2.5/tests/cli/test_input.py +179 -0
  8. {nullpol-0.2.3 → nullpol-0.2.5}/uv.lock +463 -447
  9. {nullpol-0.2.3 → nullpol-0.2.5}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  10. {nullpol-0.2.3 → nullpol-0.2.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  11. {nullpol-0.2.3 → nullpol-0.2.5}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  12. {nullpol-0.2.3 → nullpol-0.2.5}/.github/pull_request_template.md +0 -0
  13. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/documentation.yml +0 -0
  14. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/draft-release.yml +0 -0
  15. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/publish.yml +0 -0
  16. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/publish_testpypi.yml +0 -0
  17. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/release.yml +0 -0
  18. {nullpol-0.2.3 → nullpol-0.2.5}/.github/workflows/semantic-pr-check.yml +0 -0
  19. {nullpol-0.2.3 → nullpol-0.2.5}/.gitignore +0 -0
  20. {nullpol-0.2.3 → nullpol-0.2.5}/.markdownlint.yaml +0 -0
  21. {nullpol-0.2.3 → nullpol-0.2.5}/.prettierignore +0 -0
  22. {nullpol-0.2.3 → nullpol-0.2.5}/.prettierrc.yaml +0 -0
  23. {nullpol-0.2.3 → nullpol-0.2.5}/.typos.toml +0 -0
  24. {nullpol-0.2.3 → nullpol-0.2.5}/CITATION.cff +0 -0
  25. {nullpol-0.2.3 → nullpol-0.2.5}/CODE_OF_CONDUCT.md +0 -0
  26. {nullpol-0.2.3 → nullpol-0.2.5}/CONTRIBUTING.md +0 -0
  27. {nullpol-0.2.3 → nullpol-0.2.5}/LICENSE +0 -0
  28. {nullpol-0.2.3 → nullpol-0.2.5}/README.md +0 -0
  29. {nullpol-0.2.3 → nullpol-0.2.5}/SECURITY.md +0 -0
  30. {nullpol-0.2.3 → nullpol-0.2.5}/cliff.toml +0 -0
  31. {nullpol-0.2.3 → nullpol-0.2.5}/docs/.gitignore +0 -0
  32. {nullpol-0.2.3 → nullpol-0.2.5}/docs/asimov.md +0 -0
  33. {nullpol-0.2.3 → nullpol-0.2.5}/docs/citing.md +0 -0
  34. {nullpol-0.2.3 → nullpol-0.2.5}/docs/contributing.md +0 -0
  35. {nullpol-0.2.3 → nullpol-0.2.5}/docs/examples/scalar-tensor.md +0 -0
  36. {nullpol-0.2.3 → nullpol-0.2.5}/docs/index.md +0 -0
  37. {nullpol-0.2.3 → nullpol-0.2.5}/docs/injections.md +0 -0
  38. {nullpol-0.2.3 → nullpol-0.2.5}/docs/installation.md +0 -0
  39. {nullpol-0.2.3 → nullpol-0.2.5}/docs/javascripts/mathjax.js +0 -0
  40. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/index.md +0 -0
  41. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/analysis/antenna_patterns/index.md +0 -0
  42. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/analysis/clustering/index.md +0 -0
  43. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/analysis/index.md +0 -0
  44. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/analysis/likelihood/index.md +0 -0
  45. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/analysis/null_stream/index.md +0 -0
  46. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/analysis/prior/index.md +0 -0
  47. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/analysis/tf_transforms/index.md +0 -0
  48. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/cli/index.md +0 -0
  49. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/index.md +0 -0
  50. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/integrations/asimov/index.md +0 -0
  51. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/integrations/htcondor/index.md +0 -0
  52. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/integrations/index.md +0 -0
  53. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/simulation/index.md +0 -0
  54. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/utils/index.md +0 -0
  55. {nullpol-0.2.3 → nullpol-0.2.5}/docs/reference/nullpol/version.md +0 -0
  56. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/generate_injection_file.sh +0 -0
  57. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/injections.json +0 -0
  58. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/data/scalar_tensor_injection_data0_0_generation_data_dump.pickle +0 -0
  59. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1.err +0 -0
  60. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1.out +0 -0
  61. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1_final_result.err +0 -0
  62. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1_final_result.out +0 -0
  63. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_generation/scalar_tensor_injection_data0_0_generation.err +0 -0
  64. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_generation/scalar_tensor_injection_data0_0_generation.out +0 -0
  65. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/result/scalar_tensor_injection_data0_0_analysis_H1L1V1_dynesty.pickle +0 -0
  66. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/result/scalar_tensor_injection_data0_0_analysis_H1L1V1_resume.pickle +0 -0
  67. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/results_page/overview.html +0 -0
  68. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/scalar_tensor_injection_config_complete.ini +0 -0
  69. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/bash_scalar_tensor_injection.sh +0 -0
  70. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit +0 -0
  71. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.condor.sub +0 -0
  72. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.dagman.out +0 -0
  73. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.lib.err +0 -0
  74. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.lib.out +0 -0
  75. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.metrics +0 -0
  76. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_analysis_H1L1V1.submit +0 -0
  77. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_analysis_H1L1V1_final_result.submit +0 -0
  78. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_generation.submit +0 -0
  79. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/prior.prior +0 -0
  80. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/scalar_tensor_injection.ini +0 -0
  81. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor/scalar_tensor_injection.prior +0 -0
  82. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_fractional_projection/generate_injection_file.sh +0 -0
  83. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_fractional_projection/scalar_tensor_injection.ini +0 -0
  84. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_fractional_projection/scalar_tensor_injection.prior +0 -0
  85. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_gaussian/generate_injection_file.sh +0 -0
  86. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_gaussian/scalar_tensor_injection.ini +0 -0
  87. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_gaussian/scalar_tensor_injection.prior +0 -0
  88. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_h_marginalized/generate_injection_file.sh +0 -0
  89. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_h_marginalized/scalar_tensor_injection.ini +0 -0
  90. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_h_marginalized/scalar_tensor_injection.prior +0 -0
  91. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_weighted_gaussian/generate_injection_file.sh +0 -0
  92. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_weighted_gaussian/scalar_tensor_injection.ini +0 -0
  93. {nullpol-0.2.3 → nullpol-0.2.5}/examples/injection/scalar_tensor_weighted_gaussian/scalar_tensor_injection.prior +0 -0
  94. {nullpol-0.2.3 → nullpol-0.2.5}/pyproject.toml +0 -0
  95. {nullpol-0.2.3 → nullpol-0.2.5}/renovate.json +0 -0
  96. {nullpol-0.2.3 → nullpol-0.2.5}/scripts/README.md +0 -0
  97. {nullpol-0.2.3 → nullpol-0.2.5}/scripts/auto_generate_init.py +0 -0
  98. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/.gitignore +0 -0
  99. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/__init__.py +0 -0
  100. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/__init__.py +0 -0
  101. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/antenna_patterns/__init__.py +0 -0
  102. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/antenna_patterns/base.py +0 -0
  103. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/antenna_patterns/conditioning.py +0 -0
  104. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/antenna_patterns/encoding.py +0 -0
  105. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/antenna_patterns/processor.py +0 -0
  106. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/clustering/__init__.py +0 -0
  107. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/clustering/algorithm.py +0 -0
  108. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/clustering/application.py +0 -0
  109. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/clustering/coherent_sky_scan.py +0 -0
  110. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/clustering/plotting.py +0 -0
  111. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/clustering/threshold_filter.py +0 -0
  112. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/data_context.py +0 -0
  113. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/likelihood/__init__.py +0 -0
  114. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/likelihood/chi2_tf_likelihood.py +0 -0
  115. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/likelihood/time_frequency_likelihood.py +0 -0
  116. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/null_stream/__init__.py +0 -0
  117. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/null_stream/calculator.py +0 -0
  118. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/null_stream/projections.py +0 -0
  119. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/prior/__init__.py +0 -0
  120. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/prior/default.py +0 -0
  121. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/prior/prior_files/polarization.prior +0 -0
  122. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/result.py +0 -0
  123. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/__init__.py +0 -0
  124. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/inverse_wavelet_freq.py +0 -0
  125. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/inverse_wavelet_time.py +0 -0
  126. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/stft.py +0 -0
  127. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/utils.py +0 -0
  128. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/wavelet_freq.py +0 -0
  129. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/wavelet_time.py +0 -0
  130. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/analysis/tf_transforms/wavelet_transforms.py +0 -0
  131. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/__init__.py +0 -0
  132. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/create_injection.py +0 -0
  133. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/create_time_frequency_filter_from_sample.py +0 -0
  134. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/data_analysis.py +0 -0
  135. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/data_generation.py +0 -0
  136. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/get_asimov_yaml.py +0 -0
  137. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/main.py +0 -0
  138. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/parser.py +0 -0
  139. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/templates/__init__.py +0 -0
  140. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/templates/config.ini +0 -0
  141. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/templates/default_config_create_injection.ini +0 -0
  142. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/templates/default_config_create_time_frequency_filter_from_sample.ini +0 -0
  143. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/cli/templates/example_signal_parameters_create_injection.json +0 -0
  144. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/__init__.py +0 -0
  145. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/__init__.py +0 -0
  146. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/asimov.py +0 -0
  147. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/pesummary.py +0 -0
  148. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/templates/__init__.py +0 -0
  149. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/templates/analysis_defaults.yaml +0 -0
  150. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/templates/nullpol.ini +0 -0
  151. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/templates/nullpol_analysis.yaml +0 -0
  152. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/tgrflow.py +0 -0
  153. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/asimov/utility.py +0 -0
  154. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/htcondor/__init__.py +0 -0
  155. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/htcondor/analysis_node.py +0 -0
  156. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/htcondor/generation_node.py +0 -0
  157. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/integrations/htcondor/nullpol_pipe_dag_creator.py +0 -0
  158. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/simulation/__init__.py +0 -0
  159. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/simulation/injection.py +0 -0
  160. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/simulation/source.py +0 -0
  161. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/utils/__init__.py +0 -0
  162. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/utils/error.py +0 -0
  163. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/utils/filesystem.py +0 -0
  164. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/utils/imports.py +0 -0
  165. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/utils/json_utils.py +0 -0
  166. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/utils/log.py +0 -0
  167. {nullpol-0.2.3 → nullpol-0.2.5}/src/nullpol/version.py +0 -0
  168. {nullpol-0.2.3 → nullpol-0.2.5}/tests/.gitignore +0 -0
  169. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/__init__.py +0 -0
  170. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/antenna_patterns/__init__.py +0 -0
  171. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/antenna_patterns/test_base.py +0 -0
  172. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/antenna_patterns/test_conditioning.py +0 -0
  173. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/antenna_patterns/test_encoding.py +0 -0
  174. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/antenna_patterns/test_processor.py +0 -0
  175. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/clustering/__init__.py +0 -0
  176. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/clustering/test_algorithm.py +0 -0
  177. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/clustering/test_application.py +0 -0
  178. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/clustering/test_plotting.py +0 -0
  179. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/clustering/test_threshold_filter.py +0 -0
  180. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/fixtures/injections.json +0 -0
  181. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/likelihood/test_chi2_tf_likelihood.py +0 -0
  182. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/likelihood/test_time_frequency_likelihood.py +0 -0
  183. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/null_stream/__init__.py +0 -0
  184. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/null_stream/test_calculator.py +0 -0
  185. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/null_stream/test_projections.py +0 -0
  186. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/prior/__init__.py +0 -0
  187. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/prior/test_default.py +0 -0
  188. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/test_data_context.py +0 -0
  189. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/test_result.py +0 -0
  190. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/__init__.py +0 -0
  191. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/test_inverse_wavelet_freq.py +0 -0
  192. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/test_inverse_wavelet_time.py +0 -0
  193. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/test_stft.py +0 -0
  194. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/test_utils.py +0 -0
  195. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/test_wavelet_freq.py +0 -0
  196. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/test_wavelet_time.py +0 -0
  197. {nullpol-0.2.3 → nullpol-0.2.5}/tests/analysis/tf_transforms/test_wavelet_transforms.py +0 -0
  198. {nullpol-0.2.3 → nullpol-0.2.5}/tests/cli/__init__.py +0 -0
  199. {nullpol-0.2.3 → nullpol-0.2.5}/tests/cli/fixtures/mock_psd.txt +0 -0
  200. {nullpol-0.2.3 → nullpol-0.2.5}/tests/cli/test_create_injection.py +0 -0
  201. {nullpol-0.2.3 → nullpol-0.2.5}/tests/cli/test_create_time_frequency_filter.py +0 -0
  202. {nullpol-0.2.3 → nullpol-0.2.5}/tests/cli/test_data_analysis_validation.py +0 -0
  203. {nullpol-0.2.3 → nullpol-0.2.5}/tests/integrations/__init__.py +0 -0
  204. {nullpol-0.2.3 → nullpol-0.2.5}/tests/integrations/asimov/__init__.py +0 -0
  205. {nullpol-0.2.3 → nullpol-0.2.5}/tests/integrations/asimov/conftest.py +0 -0
  206. {nullpol-0.2.3 → nullpol-0.2.5}/tests/integrations/asimov/test_tgrflow.py +0 -0
  207. {nullpol-0.2.3 → nullpol-0.2.5}/tests/integrations/asimov/test_tgrflow_integration.py +0 -0
  208. {nullpol-0.2.3 → nullpol-0.2.5}/tests/integrations/asimov/test_utility.py +0 -0
  209. {nullpol-0.2.3 → nullpol-0.2.5}/tests/simulation/__init__.py +0 -0
  210. {nullpol-0.2.3 → nullpol-0.2.5}/tests/simulation/test_injection.py +0 -0
  211. {nullpol-0.2.3 → nullpol-0.2.5}/tests/simulation/test_source.py +0 -0
  212. {nullpol-0.2.3 → nullpol-0.2.5}/tests/smoke_test.py +0 -0
  213. {nullpol-0.2.3 → nullpol-0.2.5}/tests/test_import.py +0 -0
  214. {nullpol-0.2.3 → nullpol-0.2.5}/tests/test_version.py +0 -0
  215. {nullpol-0.2.3 → nullpol-0.2.5}/tests/utils/__init__.py +0 -0
  216. {nullpol-0.2.3 → nullpol-0.2.5}/tests/utils/test_error.py +0 -0
  217. {nullpol-0.2.3 → nullpol-0.2.5}/tests/utils/test_filesystem.py +0 -0
  218. {nullpol-0.2.3 → nullpol-0.2.5}/tests/utils/test_imports.py +0 -0
  219. {nullpol-0.2.3 → nullpol-0.2.5}/tests/utils/test_json_utils.py +0 -0
  220. {nullpol-0.2.3 → nullpol-0.2.5}/tests/utils/test_log.py +0 -0
  221. {nullpol-0.2.3 → nullpol-0.2.5}/zensical.toml +0 -0
@@ -20,7 +20,7 @@ jobs:
20
20
  persist-credentials: false
21
21
 
22
22
  - name: Install uv
23
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
23
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
24
24
  with:
25
25
  python-version: ${{ matrix.python-version }}
26
26
  enable-cache: 'true'
@@ -50,7 +50,7 @@ jobs:
50
50
  persist-credentials: false
51
51
 
52
52
  - name: Install uv
53
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
53
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
54
54
  with:
55
55
  python-version: '3.13'
56
56
  enable-cache: 'true'
@@ -18,12 +18,12 @@ jobs:
18
18
  - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
19
19
 
20
20
  - name: Initialize CodeQL
21
- uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4
21
+ uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4
22
22
  with:
23
23
  languages: python
24
24
 
25
25
  - name: Autobuild
26
- uses: github/codeql-action/autobuild@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4
26
+ uses: github/codeql-action/autobuild@7188fc363630916deb702c7fdcf4e481b751f97a # v4
27
27
 
28
28
  - name: Perform CodeQL Analysis
29
- uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4
29
+ uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4
@@ -20,7 +20,7 @@ jobs:
20
20
 
21
21
  - name: Check for new commits
22
22
  id: check_commits
23
- uses: isaac-cf-wong/detect-git-changes-action@ecc6bf915a7987eb27f70d560c8067a69b943cb5 # v0.0.14
23
+ uses: isaac-cf-wong/detect-git-changes-action@cd2bc7a539b89312d0d7bca70991988083157e21 # v0.0.16
24
24
  with:
25
25
  use-latest-tag: true
26
26
 
@@ -17,7 +17,7 @@ repos:
17
17
  - id: check-json
18
18
 
19
19
  - repo: https://github.com/astral-sh/ruff-pre-commit
20
- rev: v0.15.20
20
+ rev: v0.15.22
21
21
  hooks:
22
22
  - id: ruff
23
23
  args: [--fix, --config=pyproject.toml]
@@ -35,12 +35,12 @@ repos:
35
35
  args: []
36
36
 
37
37
  - repo: https://github.com/rbubley/mirrors-prettier
38
- rev: v3.9.4
38
+ rev: v3.9.5
39
39
  hooks:
40
40
  - id: prettier
41
41
 
42
42
  - repo: https://github.com/DavidAnson/markdownlint-cli2
43
- rev: v0.23.0
43
+ rev: v0.23.1
44
44
  hooks:
45
45
  - id: markdownlint-cli2
46
46
  args:
@@ -48,7 +48,7 @@ repos:
48
48
  - .markdownlint.yaml
49
49
 
50
50
  - repo: https://github.com/astral-sh/uv-pre-commit
51
- rev: 0.11.26
51
+ rev: 0.11.29
52
52
  hooks:
53
53
  # Update the uv lockfile
54
54
  - id: uv-lock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nullpol
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: A package to perform model-independent polarization test of gravitational-wave signals.
5
5
  Project-URL: Documentation, https://isaac-cf-wong.github.io/nullpol/
6
6
  Project-URL: Source, https://github.com/isaac-cf-wong/nullpol
@@ -113,22 +113,32 @@ class Input(BilbyInput):
113
113
  "time_frequency_filter": self.meta_data["time_frequency_filter"], # pylint: disable=no-member
114
114
  "priors": self.search_priors,
115
115
  }
116
+ extra_likelihood_kwargs = self.extra_likelihood_kwargs
116
117
  if self.likelihood_type == "Chi2TimeFrequencyLikelihood":
117
118
  Likelihood = Chi2TimeFrequencyLikelihood
118
- likelihood_kwargs.update(self.extra_likelihood_kwargs)
119
+ likelihood_kwargs.update(extra_likelihood_kwargs)
119
120
  elif "." in self.likelihood_type:
120
121
  split_path = self.likelihood_type.split(".")
121
122
  module = ".".join(split_path[:-1])
122
123
  likelihood_class = split_path[-1]
123
124
  Likelihood = getattr(import_module(module), likelihood_class)
124
- likelihood_kwargs.update(self.extra_likelihood_kwargs)
125
+ likelihood_kwargs.update(extra_likelihood_kwargs)
125
126
  else:
126
127
  raise ValueError(f"Unknown Likelihood class {self.likelihood_type}")
127
128
 
129
+ likelihood_signature = inspect.signature(Likelihood.__init__)
130
+ accepted_keyword_names = {
131
+ name
132
+ for name, parameter in likelihood_signature.parameters.items()
133
+ if parameter.kind in (inspect.Parameter.POSITIONAL_OR_KEYWORD, inspect.Parameter.KEYWORD_ONLY)
134
+ }
135
+ accepts_extra_kwargs = any(
136
+ parameter.kind == inspect.Parameter.VAR_KEYWORD for parameter in likelihood_signature.parameters.values()
137
+ )
128
138
  likelihood_kwargs = {
129
139
  key: value
130
140
  for key, value in likelihood_kwargs.items()
131
- if key in inspect.getfullargspec(Likelihood.__init__).args
141
+ if key in accepted_keyword_names or (accepts_extra_kwargs and key in extra_likelihood_kwargs)
132
142
  }
133
143
 
134
144
  logger.debug(f"Initialise likelihood {Likelihood} with kwargs: \n{likelihood_kwargs}")
@@ -0,0 +1,179 @@
1
+ """Tests for likelihood construction from CLI input."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import types
6
+
7
+ from bilby_pipe.main import parse_args
8
+
9
+ from nullpol.cli import input as input_module
10
+ from nullpol.cli.data_analysis import DataAnalysisInput
11
+ from nullpol.cli.parser import create_nullpol_parser
12
+
13
+
14
+ class _KeywordOnlyLikelihood:
15
+ """Capture the arguments supplied by :attr:`Input.likelihood`."""
16
+
17
+ def __init__(
18
+ self,
19
+ interferometers,
20
+ wavelet_frequency_resolution,
21
+ wavelet_nx,
22
+ polarization_modes,
23
+ *args,
24
+ polarization_basis=None,
25
+ time_frequency_filter=None,
26
+ **kwargs,
27
+ ):
28
+ self.interferometers = interferometers
29
+ self.wavelet_frequency_resolution = wavelet_frequency_resolution
30
+ self.wavelet_nx = wavelet_nx
31
+ self.polarization_modes = polarization_modes
32
+ self.polarization_basis = polarization_basis
33
+ self.time_frequency_filter = time_frequency_filter
34
+ self.extra_kwargs = kwargs
35
+
36
+
37
+ class _StrictLikelihood:
38
+ """Likelihood without ``**kwargs``; unknown extras must be dropped, not forwarded."""
39
+
40
+ def __init__(
41
+ self,
42
+ interferometers,
43
+ wavelet_frequency_resolution,
44
+ wavelet_nx,
45
+ polarization_modes,
46
+ polarization_basis=None,
47
+ time_frequency_filter=None,
48
+ priors=None,
49
+ ):
50
+ self.interferometers = interferometers
51
+ self.wavelet_frequency_resolution = wavelet_frequency_resolution
52
+ self.wavelet_nx = wavelet_nx
53
+ self.polarization_modes = polarization_modes
54
+ self.polarization_basis = polarization_basis
55
+ self.time_frequency_filter = time_frequency_filter
56
+ self.priors = priors
57
+
58
+
59
+ def _build_inputs(args, *, interferometers, time_frequency_filter, priors, likelihood_type=None):
60
+ """Assemble a :class:`DataAnalysisInput` wired for :attr:`Input.likelihood`."""
61
+ inputs = object.__new__(DataAnalysisInput)
62
+ inputs._interferometers = interferometers
63
+ inputs.search_priors = priors
64
+ inputs.wavelet_frequency_resolution = 16.0
65
+ inputs.wavelet_nx = 4.0
66
+ inputs.polarization_modes = args.polarization_modes
67
+ inputs.polarization_basis = args.polarization_basis
68
+ inputs.meta_data = {"time_frequency_filter": time_frequency_filter}
69
+ inputs.likelihood_type = likelihood_type if likelihood_type is not None else args.likelihood_type
70
+ inputs.extra_likelihood_kwargs = args.extra_likelihood_kwargs
71
+ return inputs
72
+
73
+
74
+ def _parse_config(tmp_path, body):
75
+ config_file = tmp_path / "analysis.ini"
76
+ config_file.write_text(body, encoding="utf-8")
77
+ args, unknown_args = parse_args([str(config_file)], create_nullpol_parser(top_level=False))
78
+ assert unknown_args == []
79
+ return args
80
+
81
+
82
+ def test_analysis_config_forwards_keyword_only_parameters(monkeypatch, tmp_path):
83
+ """A configured analysis forwards its normalized basis to the likelihood."""
84
+ args = _parse_config(
85
+ tmp_path,
86
+ "polarization-modes = pc\n"
87
+ "polarization-basis = p\n"
88
+ "extra-likelihood-kwargs = {'regularization_constant': 0.99}\n",
89
+ )
90
+
91
+ assert args.polarization_modes == ["pc"]
92
+ assert args.polarization_basis == ["p"]
93
+
94
+ interferometers = object()
95
+ time_frequency_filter = object()
96
+ priors = object()
97
+ inputs = _build_inputs(
98
+ args,
99
+ interferometers=interferometers,
100
+ time_frequency_filter=time_frequency_filter,
101
+ priors=priors,
102
+ )
103
+
104
+ assert inputs.polarization_modes == "pc"
105
+ assert inputs.polarization_basis == "p"
106
+
107
+ monkeypatch.setattr(input_module, "Chi2TimeFrequencyLikelihood", _KeywordOnlyLikelihood)
108
+
109
+ likelihood = input_module.Input.likelihood.fget(inputs)
110
+
111
+ assert likelihood.interferometers is interferometers
112
+ assert likelihood.wavelet_frequency_resolution == 16.0
113
+ assert likelihood.wavelet_nx == 4.0
114
+ assert likelihood.polarization_modes == "pc"
115
+ assert likelihood.polarization_basis == "p"
116
+ assert likelihood.time_frequency_filter is time_frequency_filter
117
+ assert likelihood.extra_kwargs == {"regularization_constant": 0.99}
118
+
119
+
120
+ def test_extra_kwargs_dropped_when_likelihood_rejects_variadic(monkeypatch, tmp_path):
121
+ """A likelihood without ``**kwargs`` must not receive unknown extras (no TypeError)."""
122
+ args = _parse_config(
123
+ tmp_path,
124
+ "polarization-modes = pc\n"
125
+ "polarization-basis = p\n"
126
+ "extra-likelihood-kwargs = {'regularization_constant': 0.99}\n",
127
+ )
128
+
129
+ interferometers = object()
130
+ time_frequency_filter = object()
131
+ priors = object()
132
+ inputs = _build_inputs(
133
+ args,
134
+ interferometers=interferometers,
135
+ time_frequency_filter=time_frequency_filter,
136
+ priors=priors,
137
+ )
138
+
139
+ monkeypatch.setattr(input_module, "Chi2TimeFrequencyLikelihood", _StrictLikelihood)
140
+
141
+ # Would raise ``TypeError: unexpected keyword argument 'regularization_constant'``
142
+ # if the unknown extra were forwarded to a signature without ``**kwargs``.
143
+ likelihood = input_module.Input.likelihood.fget(inputs)
144
+
145
+ assert likelihood.interferometers is interferometers
146
+ assert likelihood.polarization_basis == "p"
147
+ assert likelihood.time_frequency_filter is time_frequency_filter
148
+ assert likelihood.priors is priors
149
+
150
+
151
+ def test_dotted_path_forwards_keyword_only_parameters(monkeypatch, tmp_path):
152
+ """The ``module.Class`` likelihood_type branch also forwards keyword-only params."""
153
+ args = _parse_config(
154
+ tmp_path,
155
+ "polarization-modes = pc\n"
156
+ "polarization-basis = p\n"
157
+ "extra-likelihood-kwargs = {'regularization_constant': 0.99}\n",
158
+ )
159
+
160
+ interferometers = object()
161
+ time_frequency_filter = object()
162
+ priors = object()
163
+ inputs = _build_inputs(
164
+ args,
165
+ interferometers=interferometers,
166
+ time_frequency_filter=time_frequency_filter,
167
+ priors=priors,
168
+ likelihood_type="my_pkg.CustomLikelihood",
169
+ )
170
+
171
+ fake_module = types.ModuleType("my_pkg")
172
+ fake_module.CustomLikelihood = _KeywordOnlyLikelihood
173
+ monkeypatch.setattr(input_module, "import_module", lambda name: fake_module)
174
+
175
+ likelihood = input_module.Input.likelihood.fget(inputs)
176
+
177
+ assert likelihood.polarization_basis == "p"
178
+ assert likelihood.time_frequency_filter is time_frequency_filter
179
+ assert likelihood.extra_kwargs == {"regularization_constant": 0.99}