nullpol 0.2.3__tar.gz → 0.2.4__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.
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/ci.yml +2 -2
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/codeql.yml +3 -3
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/scheduled-release.yml +1 -1
- {nullpol-0.2.3 → nullpol-0.2.4}/.pre-commit-config.yaml +3 -3
- {nullpol-0.2.3 → nullpol-0.2.4}/PKG-INFO +1 -1
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/input.py +13 -3
- nullpol-0.2.4/tests/cli/test_input.py +179 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/uv.lock +401 -385
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/pull_request_template.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/documentation.yml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/draft-release.yml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/publish.yml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/publish_testpypi.yml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/release.yml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.github/workflows/semantic-pr-check.yml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.gitignore +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.markdownlint.yaml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.prettierignore +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.prettierrc.yaml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/.typos.toml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/CITATION.cff +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/CODE_OF_CONDUCT.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/CONTRIBUTING.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/LICENSE +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/README.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/SECURITY.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/cliff.toml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/.gitignore +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/asimov.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/citing.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/contributing.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/examples/scalar-tensor.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/injections.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/installation.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/javascripts/mathjax.js +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/analysis/antenna_patterns/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/analysis/clustering/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/analysis/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/analysis/likelihood/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/analysis/null_stream/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/analysis/prior/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/analysis/tf_transforms/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/cli/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/integrations/asimov/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/integrations/htcondor/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/integrations/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/simulation/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/utils/index.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/docs/reference/nullpol/version.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/generate_injection_file.sh +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/injections.json +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/data/scalar_tensor_injection_data0_0_generation_data_dump.pickle +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1.err +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1.out +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1_final_result.err +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1_final_result.out +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_generation/scalar_tensor_injection_data0_0_generation.err +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_generation/scalar_tensor_injection_data0_0_generation.out +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/result/scalar_tensor_injection_data0_0_analysis_H1L1V1_dynesty.pickle +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/result/scalar_tensor_injection_data0_0_analysis_H1L1V1_resume.pickle +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/results_page/overview.html +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/scalar_tensor_injection_config_complete.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/bash_scalar_tensor_injection.sh +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.condor.sub +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.dagman.out +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.lib.err +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.lib.out +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.metrics +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_analysis_H1L1V1.submit +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_analysis_H1L1V1_final_result.submit +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_generation.submit +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/prior.prior +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/scalar_tensor_injection.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor/scalar_tensor_injection.prior +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_fractional_projection/generate_injection_file.sh +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_fractional_projection/scalar_tensor_injection.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_fractional_projection/scalar_tensor_injection.prior +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_gaussian/generate_injection_file.sh +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_gaussian/scalar_tensor_injection.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_gaussian/scalar_tensor_injection.prior +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_h_marginalized/generate_injection_file.sh +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_h_marginalized/scalar_tensor_injection.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_h_marginalized/scalar_tensor_injection.prior +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_weighted_gaussian/generate_injection_file.sh +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_weighted_gaussian/scalar_tensor_injection.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/examples/injection/scalar_tensor_weighted_gaussian/scalar_tensor_injection.prior +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/pyproject.toml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/renovate.json +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/scripts/README.md +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/scripts/auto_generate_init.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/.gitignore +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/antenna_patterns/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/antenna_patterns/base.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/antenna_patterns/conditioning.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/antenna_patterns/encoding.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/antenna_patterns/processor.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/clustering/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/clustering/algorithm.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/clustering/application.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/clustering/coherent_sky_scan.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/clustering/plotting.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/clustering/threshold_filter.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/data_context.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/likelihood/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/likelihood/chi2_tf_likelihood.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/likelihood/time_frequency_likelihood.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/null_stream/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/null_stream/calculator.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/null_stream/projections.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/prior/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/prior/default.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/prior/prior_files/polarization.prior +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/result.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/inverse_wavelet_freq.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/inverse_wavelet_time.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/stft.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/utils.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/wavelet_freq.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/wavelet_time.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/analysis/tf_transforms/wavelet_transforms.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/create_injection.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/create_time_frequency_filter_from_sample.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/data_analysis.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/data_generation.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/get_asimov_yaml.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/main.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/parser.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/templates/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/templates/config.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/templates/default_config_create_injection.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/templates/default_config_create_time_frequency_filter_from_sample.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/cli/templates/example_signal_parameters_create_injection.json +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/asimov.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/pesummary.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/templates/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/templates/analysis_defaults.yaml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/templates/nullpol.ini +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/templates/nullpol_analysis.yaml +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/tgrflow.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/asimov/utility.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/htcondor/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/htcondor/analysis_node.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/htcondor/generation_node.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/integrations/htcondor/nullpol_pipe_dag_creator.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/simulation/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/simulation/injection.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/simulation/source.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/utils/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/utils/error.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/utils/filesystem.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/utils/imports.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/utils/json_utils.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/utils/log.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/src/nullpol/version.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/.gitignore +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/antenna_patterns/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/antenna_patterns/test_base.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/antenna_patterns/test_conditioning.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/antenna_patterns/test_encoding.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/antenna_patterns/test_processor.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/clustering/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/clustering/test_algorithm.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/clustering/test_application.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/clustering/test_plotting.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/clustering/test_threshold_filter.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/fixtures/injections.json +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/likelihood/test_chi2_tf_likelihood.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/likelihood/test_time_frequency_likelihood.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/null_stream/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/null_stream/test_calculator.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/null_stream/test_projections.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/prior/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/prior/test_default.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/test_data_context.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/test_result.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/test_inverse_wavelet_freq.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/test_inverse_wavelet_time.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/test_stft.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/test_utils.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/test_wavelet_freq.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/test_wavelet_time.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/analysis/tf_transforms/test_wavelet_transforms.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/cli/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/cli/fixtures/mock_psd.txt +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/cli/test_create_injection.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/cli/test_create_time_frequency_filter.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/cli/test_data_analysis_validation.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/integrations/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/integrations/asimov/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/integrations/asimov/conftest.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/integrations/asimov/test_tgrflow.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/integrations/asimov/test_tgrflow_integration.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/integrations/asimov/test_utility.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/simulation/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/simulation/test_injection.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/simulation/test_source.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/smoke_test.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/test_import.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/test_version.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/utils/__init__.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/utils/test_error.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/utils/test_filesystem.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/utils/test_imports.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/utils/test_json_utils.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/tests/utils/test_log.py +0 -0
- {nullpol-0.2.3 → nullpol-0.2.4}/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@
|
|
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@
|
|
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@
|
|
21
|
+
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4
|
|
22
22
|
with:
|
|
23
23
|
languages: python
|
|
24
24
|
|
|
25
25
|
- name: Autobuild
|
|
26
|
-
uses: github/codeql-action/autobuild@
|
|
26
|
+
uses: github/codeql-action/autobuild@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4
|
|
27
27
|
|
|
28
28
|
- name: Perform CodeQL Analysis
|
|
29
|
-
uses: github/codeql-action/analyze@
|
|
29
|
+
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # 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@
|
|
23
|
+
uses: isaac-cf-wong/detect-git-changes-action@c49bec37fa3496222c70649af3a09e2c2612310e # v0.0.15
|
|
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
|
+
rev: v0.15.21
|
|
21
21
|
hooks:
|
|
22
22
|
- id: ruff
|
|
23
23
|
args: [--fix, --config=pyproject.toml]
|
|
@@ -35,7 +35,7 @@ repos:
|
|
|
35
35
|
args: []
|
|
36
36
|
|
|
37
37
|
- repo: https://github.com/rbubley/mirrors-prettier
|
|
38
|
-
rev: v3.9.
|
|
38
|
+
rev: v3.9.5
|
|
39
39
|
hooks:
|
|
40
40
|
- id: prettier
|
|
41
41
|
|
|
@@ -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.
|
|
51
|
+
rev: 0.11.28
|
|
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
|
+
Version: 0.2.4
|
|
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(
|
|
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(
|
|
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
|
|
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}
|