nullpol 0.1.1__tar.gz → 0.2.0__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.0/.github/ISSUE_TEMPLATE/bug-report.md +56 -0
- nullpol-0.2.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- nullpol-0.2.0/.github/ISSUE_TEMPLATE/feature-request.md +47 -0
- nullpol-0.2.0/.github/pull_request_template.md +40 -0
- nullpol-0.2.0/.github/workflows/ci.yml +36 -0
- nullpol-0.2.0/.github/workflows/codeql.yml +29 -0
- nullpol-0.2.0/.github/workflows/documentation.yml +42 -0
- nullpol-0.2.0/.github/workflows/draft-release.yml +50 -0
- nullpol-0.2.0/.github/workflows/publish.yml +59 -0
- nullpol-0.2.0/.github/workflows/publish_testpypi.yml +76 -0
- nullpol-0.2.0/.github/workflows/release.yml +58 -0
- nullpol-0.2.0/.github/workflows/scheduled-release.yml +137 -0
- nullpol-0.2.0/.github/workflows/semantic-pr-check.yml +18 -0
- nullpol-0.2.0/.gitignore +194 -0
- nullpol-0.2.0/.markdownlint.yaml +46 -0
- nullpol-0.2.0/.pre-commit-config.yaml +59 -0
- nullpol-0.2.0/.prettierignore +1 -0
- nullpol-0.2.0/.prettierrc.yaml +7 -0
- nullpol-0.2.0/.typos.toml +24 -0
- nullpol-0.2.0/CITATION.cff +21 -0
- nullpol-0.2.0/CODE_OF_CONDUCT.md +131 -0
- nullpol-0.2.0/CONTRIBUTING.md +170 -0
- nullpol-0.2.0/LICENSE +674 -0
- nullpol-0.2.0/PKG-INFO +210 -0
- nullpol-0.2.0/README.md +171 -0
- nullpol-0.2.0/SECURITY.md +53 -0
- nullpol-0.2.0/cliff.toml +123 -0
- nullpol-0.2.0/docs/.gitignore +1 -0
- nullpol-0.2.0/docs/asimov.md +18 -0
- nullpol-0.2.0/docs/citing.md +16 -0
- nullpol-0.2.0/docs/contributing.md +1 -0
- nullpol-0.2.0/docs/examples/scalar-tensor.md +20 -0
- nullpol-0.2.0/docs/index.md +31 -0
- nullpol-0.2.0/docs/injections.md +13 -0
- nullpol-0.2.0/docs/installation.md +49 -0
- nullpol-0.2.0/docs/javascripts/mathjax.js +12 -0
- nullpol-0.2.0/docs/reference/index.md +21 -0
- nullpol-0.2.0/docs/reference/nullpol/analysis/antenna_patterns/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/analysis/clustering/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/analysis/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/analysis/likelihood/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/analysis/null_stream/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/analysis/prior/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/analysis/tf_transforms/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/cli/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/integrations/asimov/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/integrations/htcondor/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/integrations/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/simulation/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/utils/index.md +11 -0
- nullpol-0.2.0/docs/reference/nullpol/version.md +11 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/generate_injection_file.sh +3 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/injections.json +28 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/data/scalar_tensor_injection_data0_0_generation_data_dump.pickle +0 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1.err +41 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_analysis/scalar_tensor_injection_data0_0_analysis_H1L1V1.out +19 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_generation/scalar_tensor_injection_data0_0_generation.err +193 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/log_data_generation/scalar_tensor_injection_data0_0_generation.out +0 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/result/scalar_tensor_injection_data0_0_analysis_H1L1V1_dynesty.pickle +0 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/result/scalar_tensor_injection_data0_0_analysis_H1L1V1_resume.pickle +0 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/results_page/overview.html +1047 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/scalar_tensor_injection_config_complete.ini +213 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/bash_scalar_tensor_injection.sh +25 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit +13 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.condor.sub +20 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.dagman.out +253 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.lib.err +0 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.lib.out +1 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/dag_scalar_tensor_injection.submit.metrics +30 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_analysis_H1L1V1.submit +24 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_analysis_H1L1V1_final_result.submit +16 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/outdir_scalar_tensor_injection/submit/scalar_tensor_injection_data0_0_generation.submit +23 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/prior.prior +2 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/scalar_tensor_injection.ini +47 -0
- nullpol-0.2.0/examples/injection/scalar_tensor/scalar_tensor_injection.prior +21 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_fractional_projection/generate_injection_file.sh +3 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_fractional_projection/scalar_tensor_injection.ini +47 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_fractional_projection/scalar_tensor_injection.prior +21 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_gaussian/generate_injection_file.sh +3 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_gaussian/scalar_tensor_injection.ini +46 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_gaussian/scalar_tensor_injection.prior +21 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_h_marginalized/generate_injection_file.sh +3 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_h_marginalized/scalar_tensor_injection.ini +46 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_h_marginalized/scalar_tensor_injection.prior +21 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_weighted_gaussian/generate_injection_file.sh +3 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_weighted_gaussian/scalar_tensor_injection.ini +49 -0
- nullpol-0.2.0/examples/injection/scalar_tensor_weighted_gaussian/scalar_tensor_injection.prior +21 -0
- nullpol-0.2.0/pyproject.toml +181 -0
- nullpol-0.2.0/renovate.json +79 -0
- nullpol-0.2.0/scripts/README.md +247 -0
- nullpol-0.2.0/scripts/auto_generate_init.py +379 -0
- nullpol-0.2.0/src/nullpol/__init__.py +41 -0
- nullpol-0.2.0/src/nullpol/analysis/__init__.py +26 -0
- nullpol-0.2.0/src/nullpol/analysis/antenna_patterns/__init__.py +41 -0
- nullpol-0.2.0/src/nullpol/analysis/antenna_patterns/base.py +152 -0
- nullpol-0.1.1/src/nullpol/detector/whiten.py → nullpol-0.2.0/src/nullpol/analysis/antenna_patterns/conditioning.py +30 -26
- nullpol-0.2.0/src/nullpol/analysis/antenna_patterns/encoding.py +101 -0
- nullpol-0.2.0/src/nullpol/analysis/antenna_patterns/processor.py +267 -0
- nullpol-0.2.0/src/nullpol/analysis/clustering/__init__.py +18 -0
- nullpol-0.2.0/src/nullpol/analysis/clustering/algorithm.py +121 -0
- nullpol-0.2.0/src/nullpol/analysis/clustering/application.py +106 -0
- nullpol-0.2.0/src/nullpol/analysis/clustering/coherent_sky_scan.py +115 -0
- nullpol-0.2.0/src/nullpol/analysis/clustering/plotting.py +79 -0
- nullpol-0.2.0/src/nullpol/analysis/clustering/threshold_filter.py +22 -0
- nullpol-0.2.0/src/nullpol/analysis/data_context.py +438 -0
- nullpol-0.2.0/src/nullpol/analysis/likelihood/__init__.py +11 -0
- nullpol-0.2.0/src/nullpol/analysis/likelihood/chi2_tf_likelihood.py +96 -0
- nullpol-0.2.0/src/nullpol/analysis/likelihood/time_frequency_likelihood.py +115 -0
- nullpol-0.2.0/src/nullpol/analysis/null_stream/__init__.py +17 -0
- nullpol-0.2.0/src/nullpol/analysis/null_stream/calculator.py +151 -0
- nullpol-0.2.0/src/nullpol/analysis/null_stream/projections.py +103 -0
- nullpol-0.2.0/src/nullpol/analysis/prior/__init__.py +10 -0
- nullpol-0.2.0/src/nullpol/analysis/prior/default.py +93 -0
- nullpol-0.2.0/src/nullpol/analysis/result.py +297 -0
- nullpol-0.2.0/src/nullpol/analysis/tf_transforms/__init__.py +37 -0
- nullpol-0.2.0/src/nullpol/analysis/tf_transforms/inverse_wavelet_freq.py +119 -0
- nullpol-0.2.0/src/nullpol/analysis/tf_transforms/inverse_wavelet_time.py +213 -0
- {nullpol-0.1.1/src/nullpol/time_frequency_transform → nullpol-0.2.0/src/nullpol/analysis/tf_transforms}/stft.py +15 -2
- nullpol-0.2.0/src/nullpol/analysis/tf_transforms/utils.py +38 -0
- nullpol-0.2.0/src/nullpol/analysis/tf_transforms/wavelet_freq.py +218 -0
- nullpol-0.2.0/src/nullpol/analysis/tf_transforms/wavelet_time.py +140 -0
- {nullpol-0.1.1/src/nullpol/time_frequency_transform → nullpol-0.2.0/src/nullpol/analysis/tf_transforms}/wavelet_transforms.py +45 -76
- nullpol-0.2.0/src/nullpol/cli/__init__.py +40 -0
- nullpol-0.2.0/src/nullpol/cli/create_injection.py +185 -0
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli}/create_time_frequency_filter_from_sample.py +65 -71
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli}/data_analysis.py +76 -88
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli}/data_generation.py +188 -143
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli}/get_asimov_yaml.py +11 -10
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli}/input.py +73 -40
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli}/main.py +32 -10
- nullpol-0.2.0/src/nullpol/cli/parser.py +271 -0
- nullpol-0.2.0/src/nullpol/cli/templates/__init__.py +1 -0
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli/templates}/config.ini +1 -1
- nullpol-0.2.0/src/nullpol/cli/templates/example_signal_parameters_create_injection.json +19 -0
- nullpol-0.2.0/src/nullpol/integrations/__init__.py +23 -0
- nullpol-0.2.0/src/nullpol/integrations/asimov/__init__.py +24 -0
- {nullpol-0.1.1/src/nullpol → nullpol-0.2.0/src/nullpol/integrations}/asimov/asimov.py +60 -87
- {nullpol-0.1.1/src/nullpol → nullpol-0.2.0/src/nullpol/integrations}/asimov/pesummary.py +37 -53
- nullpol-0.2.0/src/nullpol/integrations/asimov/templates/__init__.py +1 -0
- nullpol-0.2.0/src/nullpol/integrations/asimov/templates/analysis_defaults.yaml +56 -0
- {nullpol-0.1.1/src/nullpol → nullpol-0.2.0/src/nullpol/integrations}/asimov/tgrflow.py +113 -237
- nullpol-0.2.0/src/nullpol/integrations/asimov/utility.py +284 -0
- nullpol-0.2.0/src/nullpol/integrations/htcondor/__init__.py +14 -0
- {nullpol-0.1.1/src/nullpol/job_creation → nullpol-0.2.0/src/nullpol/integrations/htcondor}/analysis_node.py +53 -41
- nullpol-0.2.0/src/nullpol/integrations/htcondor/generation_node.py +41 -0
- {nullpol-0.1.1/src/nullpol/job_creation → nullpol-0.2.0/src/nullpol/integrations/htcondor}/nullpol_pipe_dag_creator.py +53 -10
- nullpol-0.2.0/src/nullpol/simulation/__init__.py +11 -0
- nullpol-0.2.0/src/nullpol/simulation/injection.py +69 -0
- nullpol-0.2.0/src/nullpol/simulation/source.py +101 -0
- nullpol-0.2.0/src/nullpol/utils/__init__.py +19 -0
- {nullpol-0.1.1 → nullpol-0.2.0}/src/nullpol/utils/error.py +4 -0
- {nullpol-0.1.1 → nullpol-0.2.0}/src/nullpol/utils/filesystem.py +2 -12
- nullpol-0.2.0/src/nullpol/utils/imports.py +20 -0
- nullpol-0.2.0/src/nullpol/utils/json_utils.py +19 -0
- nullpol-0.2.0/src/nullpol/utils/log.py +53 -0
- nullpol-0.2.0/src/nullpol/version.py +7 -0
- nullpol-0.2.0/tests/.gitignore +3 -0
- nullpol-0.2.0/tests/analysis/__init__.py +27 -0
- nullpol-0.2.0/tests/analysis/antenna_patterns/__init__.py +42 -0
- nullpol-0.2.0/tests/analysis/antenna_patterns/test_base.py +350 -0
- nullpol-0.2.0/tests/analysis/antenna_patterns/test_conditioning.py +294 -0
- nullpol-0.2.0/tests/analysis/antenna_patterns/test_encoding.py +204 -0
- nullpol-0.2.0/tests/analysis/antenna_patterns/test_processor.py +395 -0
- nullpol-0.2.0/tests/analysis/clustering/__init__.py +16 -0
- nullpol-0.2.0/tests/analysis/clustering/test_algorithm.py +298 -0
- nullpol-0.2.0/tests/analysis/clustering/test_application.py +472 -0
- nullpol-0.2.0/tests/analysis/clustering/test_plotting.py +435 -0
- nullpol-0.2.0/tests/analysis/clustering/test_threshold_filter.py +143 -0
- nullpol-0.2.0/tests/analysis/fixtures/injections.json +28 -0
- nullpol-0.2.0/tests/analysis/likelihood/test_chi2_tf_likelihood.py +542 -0
- nullpol-0.2.0/tests/analysis/likelihood/test_time_frequency_likelihood.py +51 -0
- nullpol-0.2.0/tests/analysis/null_stream/__init__.py +37 -0
- nullpol-0.2.0/tests/analysis/null_stream/test_calculator.py +506 -0
- nullpol-0.2.0/tests/analysis/null_stream/test_projections.py +378 -0
- nullpol-0.2.0/tests/analysis/prior/__init__.py +10 -0
- nullpol-0.2.0/tests/analysis/prior/test_default.py +254 -0
- nullpol-0.2.0/tests/analysis/test_data_context.py +509 -0
- nullpol-0.2.0/tests/analysis/test_result.py +591 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/__init__.py +60 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/test_inverse_wavelet_freq.py +344 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/test_inverse_wavelet_time.py +278 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/test_stft.py +337 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/test_utils.py +235 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/test_wavelet_freq.py +440 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/test_wavelet_time.py +315 -0
- nullpol-0.2.0/tests/analysis/tf_transforms/test_wavelet_transforms.py +208 -0
- nullpol-0.2.0/tests/cli/__init__.py +25 -0
- nullpol-0.2.0/tests/cli/fixtures/mock_psd.txt +32769 -0
- nullpol-0.2.0/tests/cli/test_create_injection.py +266 -0
- nullpol-0.2.0/tests/cli/test_create_time_frequency_filter.py +111 -0
- nullpol-0.2.0/tests/integrations/__init__.py +1 -0
- nullpol-0.2.0/tests/simulation/__init__.py +22 -0
- nullpol-0.2.0/tests/simulation/test_injection.py +122 -0
- nullpol-0.2.0/tests/simulation/test_source.py +312 -0
- nullpol-0.2.0/tests/smoke_test.py +42 -0
- nullpol-0.2.0/tests/test_import.py +147 -0
- nullpol-0.2.0/tests/test_version.py +28 -0
- nullpol-0.2.0/tests/utils/__init__.py +62 -0
- nullpol-0.2.0/tests/utils/test_error.py +36 -0
- nullpol-0.2.0/tests/utils/test_filesystem.py +33 -0
- nullpol-0.2.0/tests/utils/test_imports.py +68 -0
- nullpol-0.2.0/tests/utils/test_json_utils.py +96 -0
- nullpol-0.2.0/tests/utils/test_log.py +61 -0
- nullpol-0.2.0/uv.lock +3479 -0
- nullpol-0.2.0/zensical.toml +383 -0
- nullpol-0.1.1/LICENSE +0 -21
- nullpol-0.1.1/PKG-INFO +0 -72
- nullpol-0.1.1/README.rst +0 -16
- nullpol-0.1.1/pyproject.toml +0 -349
- nullpol-0.1.1/src/nullpol/__init__.py +0 -43
- nullpol-0.1.1/src/nullpol/asimov/analysis_defaults.yaml +0 -56
- nullpol-0.1.1/src/nullpol/asimov/utility.py +0 -281
- nullpol-0.1.1/src/nullpol/calibration/__init__.py +0 -3
- nullpol-0.1.1/src/nullpol/calibration/antenna_pattern.py +0 -32
- nullpol-0.1.1/src/nullpol/clustering/__init__.py +0 -7
- nullpol-0.1.1/src/nullpol/clustering/clustering.py +0 -60
- nullpol-0.1.1/src/nullpol/clustering/plot.ipynb +0 -120
- nullpol-0.1.1/src/nullpol/clustering/plot.py +0 -43
- nullpol-0.1.1/src/nullpol/clustering/single.py +0 -77
- nullpol-0.1.1/src/nullpol/clustering/sky_maximized_spectrogram.py +0 -70
- nullpol-0.1.1/src/nullpol/clustering/test.png +0 -0
- nullpol-0.1.1/src/nullpol/clustering/threshold_filter.py +0 -29
- nullpol-0.1.1/src/nullpol/detector/__init__.py +0 -4
- nullpol-0.1.1/src/nullpol/detector/networks.py +0 -103
- nullpol-0.1.1/src/nullpol/injection/__init__.py +0 -3
- nullpol-0.1.1/src/nullpol/injection/injection.py +0 -68
- nullpol-0.1.1/src/nullpol/job_creation/__init__.py +0 -5
- nullpol-0.1.1/src/nullpol/job_creation/generation_node.py +0 -17
- nullpol-0.1.1/src/nullpol/likelihood/__init__.py +0 -6
- nullpol-0.1.1/src/nullpol/likelihood/chi2_time_frequency_likelihood.py +0 -80
- nullpol-0.1.1/src/nullpol/likelihood/fractional_projection_time_frequency_likelihood.py +0 -78
- nullpol-0.1.1/src/nullpol/likelihood/gaussian_time_frequency_likelihood.py +0 -72
- nullpol-0.1.1/src/nullpol/likelihood/time_frequency_likelihood.py +0 -516
- nullpol-0.1.1/src/nullpol/null_stream/__init__.py +0 -7
- nullpol-0.1.1/src/nullpol/null_stream/antenna_pattern.py +0 -130
- nullpol-0.1.1/src/nullpol/null_stream/encoding.py +0 -23
- nullpol-0.1.1/src/nullpol/null_stream/null_stream.py +0 -94
- nullpol-0.1.1/src/nullpol/null_stream/projector.py +0 -61
- nullpol-0.1.1/src/nullpol/null_stream/signal_estimator.py +0 -37
- nullpol-0.1.1/src/nullpol/null_stream/time_shift.py +0 -52
- nullpol-0.1.1/src/nullpol/prior/__init__.py +0 -3
- nullpol-0.1.1/src/nullpol/prior/default.py +0 -24
- nullpol-0.1.1/src/nullpol/result/__init__.py +0 -3
- nullpol-0.1.1/src/nullpol/result/result.py +0 -257
- nullpol-0.1.1/src/nullpol/source/__init__.py +0 -3
- nullpol-0.1.1/src/nullpol/source/simple_map.py +0 -30
- nullpol-0.1.1/src/nullpol/time_frequency_transform/__init__.py +0 -5
- nullpol-0.1.1/src/nullpol/time_frequency_transform/helper.py +0 -34
- nullpol-0.1.1/src/nullpol/time_frequency_transform/inverse_wavelet_freq_funcs.py +0 -136
- nullpol-0.1.1/src/nullpol/time_frequency_transform/inverse_wavelet_time_funcs.py +0 -231
- nullpol-0.1.1/src/nullpol/time_frequency_transform/transform_freq_funcs.py +0 -268
- nullpol-0.1.1/src/nullpol/time_frequency_transform/transform_time_funcs.py +0 -168
- nullpol-0.1.1/src/nullpol/tools/create_injection.py +0 -180
- nullpol-0.1.1/src/nullpol/tools/example_signal_parameters_create_injection.json +0 -17
- nullpol-0.1.1/src/nullpol/tools/parser.py +0 -238
- nullpol-0.1.1/src/nullpol/utils/__init__.py +0 -9
- nullpol-0.1.1/src/nullpol/utils/config.py +0 -22
- nullpol-0.1.1/src/nullpol/utils/convert_type.py +0 -45
- nullpol-0.1.1/src/nullpol/utils/log.py +0 -58
- /nullpol-0.1.1/src/nullpol/asimov/__init__.py → /nullpol-0.2.0/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.1.1/src/nullpol/tools/__init__.py → /nullpol-0.2.0/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.1.1 → nullpol-0.2.0}/src/nullpol/.gitignore +0 -0
- {nullpol-0.1.1/src/nullpol → nullpol-0.2.0/src/nullpol/analysis}/prior/prior_files/polarization.prior +0 -0
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli/templates}/default_config_create_injection.ini +0 -0
- {nullpol-0.1.1/src/nullpol/tools → nullpol-0.2.0/src/nullpol/cli/templates}/default_config_create_time_frequency_filter_from_sample.ini +0 -0
- {nullpol-0.1.1/src/nullpol/asimov → nullpol-0.2.0/src/nullpol/integrations/asimov/templates}/nullpol.ini +0 -0
- {nullpol-0.1.1/src/nullpol/asimov → nullpol-0.2.0/src/nullpol/integrations/asimov/templates}/nullpol_analysis.yaml +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 🐛 Bug Report
|
|
3
|
+
about: Create a report to help us improve
|
|
4
|
+
title: '[BUG]: '
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📝 Description
|
|
10
|
+
|
|
11
|
+
A clear and concise description of what the bug is.
|
|
12
|
+
|
|
13
|
+
## 🚀 Reproduction Steps
|
|
14
|
+
|
|
15
|
+
Steps to reproduce the behavior:
|
|
16
|
+
|
|
17
|
+
1. '...'
|
|
18
|
+
2. '...'
|
|
19
|
+
3. '...'
|
|
20
|
+
|
|
21
|
+
## 💻 Minimal Reproducible Example
|
|
22
|
+
|
|
23
|
+
Please provide a short snippet of Python code that demonstrates the issue. Use
|
|
24
|
+
code blocks for readability:
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
# Your code here
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 📋 Expected Behavior
|
|
31
|
+
|
|
32
|
+
A clear and concise description of what you expected to happen.
|
|
33
|
+
|
|
34
|
+
## 💥 Actual Behavior / Traceback
|
|
35
|
+
|
|
36
|
+
If applicable, add the Python error traceback here **after redacting secrets**
|
|
37
|
+
(API keys, tokens, credentials, private URLs/paths, personal data). If this is a
|
|
38
|
+
potential security vulnerability, do **not** post it publicly; use the Security
|
|
39
|
+
reporting channel instead.
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Traceback (most recent call last):
|
|
43
|
+
...
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 🛠 Environment Information
|
|
48
|
+
|
|
49
|
+
- **Python Version:** (e.g., 3.13)
|
|
50
|
+
- **Package Version:** (e.g., 1.2.3)
|
|
51
|
+
- **Operating System:** (e.g., Windows 11, Ubuntu 22.04, macOS)
|
|
52
|
+
- **Relevant Dependencies:** (e.g., numpy, pandas version if applicable)
|
|
53
|
+
|
|
54
|
+
## 📎 Additional Context
|
|
55
|
+
|
|
56
|
+
Add any other context about the problem here (e.g., screenshots, logs).
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ✨ Feature Request
|
|
3
|
+
about: Suggest an idea or improvement for this package
|
|
4
|
+
title: '[FEATURE]: '
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🎯 Problem Statement
|
|
10
|
+
|
|
11
|
+
Is your feature request related to a problem? Please describe.
|
|
12
|
+
|
|
13
|
+
> _Ex: "I'm always frustrated when I have to manually loop over X to achieve
|
|
14
|
+
> Y..."_
|
|
15
|
+
|
|
16
|
+
## 💡 Proposed Solution
|
|
17
|
+
|
|
18
|
+
A clear and concise description of what you want to happen. Describe the new
|
|
19
|
+
functionality or the change to existing behavior.
|
|
20
|
+
|
|
21
|
+
## 💻 Proposed API / Usage Example
|
|
22
|
+
|
|
23
|
+
If applicable, show how you would imagine the Python code looking with this new
|
|
24
|
+
feature:
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
import nullpol
|
|
28
|
+
|
|
29
|
+
# How you'd like to use the new feature
|
|
30
|
+
result = nullpol.new_function(param="example")
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 🌈 Use Case & Benefits
|
|
35
|
+
|
|
36
|
+
Why is this feature important to you and other users? How does it improve the
|
|
37
|
+
package?
|
|
38
|
+
|
|
39
|
+
## 🔄 Alternatives Considered
|
|
40
|
+
|
|
41
|
+
A clear and concise description of any alternative solutions or workarounds
|
|
42
|
+
you've considered (e.g., using a different library or a custom wrapper).
|
|
43
|
+
|
|
44
|
+
## ⚠️ Additional Context
|
|
45
|
+
|
|
46
|
+
Add any other context, screenshots, or links to similar implementations in other
|
|
47
|
+
libraries here.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 🚀 Pull Request
|
|
3
|
+
about: Submit your changes for review
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 📝 Summary
|
|
7
|
+
|
|
8
|
+
Briefly describe the changes introduced by this PR. Mention any related issues
|
|
9
|
+
using keywords (e.g., `Closes #123`).
|
|
10
|
+
|
|
11
|
+
## ✨ Type of Change
|
|
12
|
+
|
|
13
|
+
- [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
|
|
14
|
+
- [ ] ✨ New feature (non-breaking change which adds functionality)
|
|
15
|
+
- [ ] 💥 Breaking change (fix or feature that would cause existing functionality
|
|
16
|
+
to not work as expected)
|
|
17
|
+
- [ ] 📝 Documentation update
|
|
18
|
+
- [ ] 🎨 Refactoring (no functional changes, no API changes)
|
|
19
|
+
|
|
20
|
+
## 🧪 How Has This Been Tested?
|
|
21
|
+
|
|
22
|
+
Please describe the tests that you ran to verify your changes.
|
|
23
|
+
|
|
24
|
+
- [ ] **Unit Tests:** `uv run pytest tests/test_feature.py`
|
|
25
|
+
- [ ] **Manual Test:** (Describe steps)
|
|
26
|
+
|
|
27
|
+
## 🏗️ Checklist
|
|
28
|
+
|
|
29
|
+
- [ ] My code follows the style guidelines of this project (PEP 8).
|
|
30
|
+
- [ ] I have performed a self-review of my own code.
|
|
31
|
+
- [ ] I have commented my code, particularly in hard-to-understand areas.
|
|
32
|
+
- [ ] I have made corresponding changes to the documentation.
|
|
33
|
+
- [ ] My changes generate no new warnings.
|
|
34
|
+
- [ ] I have added tests that prove my fix is effective or that my feature
|
|
35
|
+
works.
|
|
36
|
+
|
|
37
|
+
## 📷 Screenshots (if applicable)
|
|
38
|
+
|
|
39
|
+
If this is a UI change or produces a specific output/graph, add screenshots
|
|
40
|
+
here.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [main]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
workflow_call:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ['3.12', '3.13', '3.14']
|
|
15
|
+
os: [ubuntu-latest, macos-latest]
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
19
|
+
|
|
20
|
+
- name: Install uv
|
|
21
|
+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
22
|
+
with:
|
|
23
|
+
python-version: ${{ matrix.python-version }}
|
|
24
|
+
enable-cache: 'true'
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: uv sync --group dev --frozen
|
|
28
|
+
|
|
29
|
+
- name: Run tests with pytest
|
|
30
|
+
run: uv run --frozen pytest
|
|
31
|
+
|
|
32
|
+
- name: Upload coverage to Codecov
|
|
33
|
+
if: ${{ !cancelled() }}
|
|
34
|
+
uses: codecov/codecov-action@0fb7174895f61a3b6b78fc075e0cd60383518dac # v5
|
|
35
|
+
with:
|
|
36
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: CodeQL
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [main]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
workflow_call:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
security-events: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
codeql:
|
|
15
|
+
name: codeql
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
19
|
+
|
|
20
|
+
- name: Initialize CodeQL
|
|
21
|
+
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
|
|
22
|
+
with:
|
|
23
|
+
languages: python
|
|
24
|
+
|
|
25
|
+
- name: Autobuild
|
|
26
|
+
uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
|
|
27
|
+
|
|
28
|
+
- name: Perform CodeQL Analysis
|
|
29
|
+
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
pages: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: pages
|
|
15
|
+
cancel-in-progress: false
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
deploy:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
environment:
|
|
21
|
+
name: github-pages
|
|
22
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
25
|
+
|
|
26
|
+
- name: Install uv
|
|
27
|
+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
|
|
28
|
+
with:
|
|
29
|
+
python-version: '3.13'
|
|
30
|
+
enable-cache: 'true'
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: uv sync --group docs --frozen
|
|
34
|
+
|
|
35
|
+
- run: uv run --frozen zensical build
|
|
36
|
+
|
|
37
|
+
- uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4
|
|
38
|
+
with:
|
|
39
|
+
path: site
|
|
40
|
+
|
|
41
|
+
- id: deployment
|
|
42
|
+
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Draft Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
pull-requests: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: draft-release
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
draft-release:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0
|
|
22
|
+
|
|
23
|
+
- name: Generate changelog
|
|
24
|
+
id: changelog
|
|
25
|
+
uses: orhun/git-cliff-action@f50e11560dce63f7c33227798f90b924471a88b5 # v4.8.0
|
|
26
|
+
with:
|
|
27
|
+
config: cliff.toml
|
|
28
|
+
args: --unreleased --verbose
|
|
29
|
+
env:
|
|
30
|
+
OUTPUT: CHANGELOG.md
|
|
31
|
+
|
|
32
|
+
- name: Delete existing draft release
|
|
33
|
+
continue-on-error: true
|
|
34
|
+
run: |
|
|
35
|
+
gh release delete next-release --yes
|
|
36
|
+
env:
|
|
37
|
+
GH_TOKEN: ${{ github.token }}
|
|
38
|
+
|
|
39
|
+
- name: Create or Update Draft Release
|
|
40
|
+
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
|
|
41
|
+
with:
|
|
42
|
+
tag_name: next-release
|
|
43
|
+
name: 'Next Release (Draft)'
|
|
44
|
+
body: |
|
|
45
|
+
${{ steps.changelog.outputs.content }}
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
*This is an automatically generated draft release.*
|
|
49
|
+
draft: true
|
|
50
|
+
prerelease: false
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
tag_name:
|
|
7
|
+
description: 'Tag name for the publish (e.g., v1.2.3)'
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
workflow_call:
|
|
11
|
+
inputs:
|
|
12
|
+
tag_name:
|
|
13
|
+
description: 'Tag name for the publish (e.g., v1.2.3)'
|
|
14
|
+
required: true
|
|
15
|
+
type: string
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
publish:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
environment:
|
|
21
|
+
name: pypi
|
|
22
|
+
permissions:
|
|
23
|
+
id-token: write
|
|
24
|
+
contents: read
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
27
|
+
with:
|
|
28
|
+
ref: ${{ inputs.tag_name || github.event.inputs.tag_name }}
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
|
|
31
|
+
- name: Output build information
|
|
32
|
+
run: |
|
|
33
|
+
echo "### Publishing Build :package:" >> $GITHUB_STEP_SUMMARY
|
|
34
|
+
echo "- **Version tag**: ${{ inputs.tag_name || github.event.inputs.tag_name }}" >> $GITHUB_STEP_SUMMARY
|
|
35
|
+
|
|
36
|
+
- name: Install uv
|
|
37
|
+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
|
|
38
|
+
with:
|
|
39
|
+
python-version: '3.13'
|
|
40
|
+
enable-cache: 'true'
|
|
41
|
+
|
|
42
|
+
- name: Install dependencies
|
|
43
|
+
run: uv sync --group dev --frozen
|
|
44
|
+
|
|
45
|
+
- name: Build distribution
|
|
46
|
+
run: uv build
|
|
47
|
+
|
|
48
|
+
- name: Smoke test (wheel)
|
|
49
|
+
run:
|
|
50
|
+
uv run --isolated --no-project --with dist/*.whl
|
|
51
|
+
tests/smoke_test.py
|
|
52
|
+
|
|
53
|
+
- name: Smoke test (source distribution)
|
|
54
|
+
run:
|
|
55
|
+
uv run --isolated --no-project --with dist/*.tar.gz
|
|
56
|
+
tests/smoke_test.py
|
|
57
|
+
|
|
58
|
+
- name: Publish to PyPI
|
|
59
|
+
run: uv publish
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
name: Publish to TestPyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
tag_name:
|
|
10
|
+
description: 'Tag name for the publish (e.g., v1.2.3)'
|
|
11
|
+
required: false
|
|
12
|
+
type: string
|
|
13
|
+
workflow_call:
|
|
14
|
+
inputs:
|
|
15
|
+
tag_name:
|
|
16
|
+
description: 'Tag name for the publish (e.g., v1.2.3)'
|
|
17
|
+
required: false
|
|
18
|
+
type: string
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
publish:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
environment:
|
|
24
|
+
name: testpypi
|
|
25
|
+
permissions:
|
|
26
|
+
id-token: write
|
|
27
|
+
contents: read
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
30
|
+
with:
|
|
31
|
+
ref: ${{ inputs.tag_name || github.sha }}
|
|
32
|
+
fetch-depth: 0
|
|
33
|
+
|
|
34
|
+
- name: Output build information
|
|
35
|
+
run: |
|
|
36
|
+
echo "### Publishing Build :package:" >> $GITHUB_STEP_SUMMARY
|
|
37
|
+
echo "- **Version tag**: ${{ inputs.tag_name || github.sha }}" >> $GITHUB_STEP_SUMMARY
|
|
38
|
+
|
|
39
|
+
- name: Install uv
|
|
40
|
+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
|
|
41
|
+
with:
|
|
42
|
+
python-version: '3.13'
|
|
43
|
+
enable-cache: 'true'
|
|
44
|
+
|
|
45
|
+
- name: Install dependencies
|
|
46
|
+
run: uv sync --group dev --group build --frozen
|
|
47
|
+
|
|
48
|
+
- name: Set version for publishing
|
|
49
|
+
run: |
|
|
50
|
+
if [ -n "${{ inputs.tag_name }}" ]; then
|
|
51
|
+
# Use the tag, stripping 'v' prefix if present
|
|
52
|
+
VERSION=$(echo "${{ inputs.tag_name }}" | sed 's/^v//')
|
|
53
|
+
else
|
|
54
|
+
# For untagged builds, use a dev version without local part
|
|
55
|
+
# Get the dev version from hatch-vcs, then strip +local
|
|
56
|
+
VERSION=$(uv run --frozen hatch version | sed 's/+.*//')
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# Update pyproject.toml with sed
|
|
60
|
+
sed -i "s/dynamic = \[\"version\"\]/version = \"$VERSION\"\ndynamic = []/" pyproject.toml
|
|
61
|
+
|
|
62
|
+
- name: Build distribution
|
|
63
|
+
run: uv build
|
|
64
|
+
|
|
65
|
+
- name: Smoke test (wheel)
|
|
66
|
+
run:
|
|
67
|
+
uv run --isolated --no-project --with dist/*.whl
|
|
68
|
+
tests/smoke_test.py
|
|
69
|
+
|
|
70
|
+
- name: Smoke test (source distribution)
|
|
71
|
+
run:
|
|
72
|
+
uv run --isolated --no-project --with dist/*.tar.gz
|
|
73
|
+
tests/smoke_test.py
|
|
74
|
+
|
|
75
|
+
- name: Publish to TestPyPI
|
|
76
|
+
run: uv publish --index testpypi
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
tag_name:
|
|
7
|
+
description: 'Tag name for the release (e.g., v1.2.3)'
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
workflow_call:
|
|
11
|
+
inputs:
|
|
12
|
+
tag_name:
|
|
13
|
+
description: 'Tag name for the release (e.g., v1.2.3)'
|
|
14
|
+
required: true
|
|
15
|
+
type: string
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
release:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
permissions:
|
|
24
|
+
contents: write
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
27
|
+
with:
|
|
28
|
+
fetch-depth: 0
|
|
29
|
+
ref: ${{ inputs.tag_name || github.event.inputs.tag_name }}
|
|
30
|
+
|
|
31
|
+
- name: Generate changelog
|
|
32
|
+
id: changelog
|
|
33
|
+
uses: orhun/git-cliff-action@f50e11560dce63f7c33227798f90b924471a88b5 # v4.8.0
|
|
34
|
+
with:
|
|
35
|
+
config: cliff.toml
|
|
36
|
+
args: --current --verbose
|
|
37
|
+
env:
|
|
38
|
+
OUTPUT: CHANGELOG.md
|
|
39
|
+
|
|
40
|
+
- name: Delete draft release
|
|
41
|
+
continue-on-error: true
|
|
42
|
+
run: |
|
|
43
|
+
gh release delete next-release --yes
|
|
44
|
+
env:
|
|
45
|
+
GH_TOKEN: ${{ github.token }}
|
|
46
|
+
|
|
47
|
+
- name: Create Release
|
|
48
|
+
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
|
|
49
|
+
with:
|
|
50
|
+
tag_name:
|
|
51
|
+
${{ inputs.tag_name || github.event.inputs.tag_name }}
|
|
52
|
+
body: ${{ steps.changelog.outputs.content }}
|
|
53
|
+
draft: false
|
|
54
|
+
prerelease:
|
|
55
|
+
${{ contains(inputs.tag_name ||
|
|
56
|
+
github.event.inputs.tag_name, 'alpha') ||
|
|
57
|
+
contains(inputs.tag_name || github.event.inputs.tag_name,
|
|
58
|
+
'beta') }}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
name: Scheduled Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 0 * * 2'
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check_new_commits:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
outputs:
|
|
15
|
+
has-changes: ${{ steps.check_commits.outputs.has-changes }}
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
18
|
+
with:
|
|
19
|
+
fetch-depth: 0
|
|
20
|
+
|
|
21
|
+
- name: Check for new commits
|
|
22
|
+
id: check_commits
|
|
23
|
+
uses: isaac-cf-wong/detect-git-changes-action@a67357ee6ce349a844983224faa2d0e3dfb29c7e # v0.0.12
|
|
24
|
+
with:
|
|
25
|
+
use-latest-tag: true
|
|
26
|
+
|
|
27
|
+
ci:
|
|
28
|
+
needs: check_new_commits
|
|
29
|
+
if: ${{ needs.check_new_commits.outputs.has-changes == 'true' }}
|
|
30
|
+
uses: ./.github/workflows/ci.yml
|
|
31
|
+
|
|
32
|
+
codeql:
|
|
33
|
+
needs: check_new_commits
|
|
34
|
+
if: ${{ needs.check_new_commits.outputs.has-changes == 'true'}}
|
|
35
|
+
uses: ./.github/workflows/codeql.yml
|
|
36
|
+
permissions:
|
|
37
|
+
security-events: write
|
|
38
|
+
|
|
39
|
+
create_tag:
|
|
40
|
+
needs: [ci, codeql]
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
outputs:
|
|
43
|
+
new_tag: ${{ steps.tag_version.outputs.new_tag }}
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
46
|
+
with:
|
|
47
|
+
fetch-depth: 0
|
|
48
|
+
|
|
49
|
+
- name: Install uv
|
|
50
|
+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
|
|
51
|
+
with:
|
|
52
|
+
python-version: '3.13'
|
|
53
|
+
enable-cache: 'true'
|
|
54
|
+
|
|
55
|
+
- name: Install dependencies
|
|
56
|
+
run: uv sync --group release --frozen
|
|
57
|
+
|
|
58
|
+
- name: Bump version and push tag
|
|
59
|
+
id: tag_version
|
|
60
|
+
run: |
|
|
61
|
+
PREVIOUS_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "none")
|
|
62
|
+
if [ "$PREVIOUS_TAG" = "none" ]; then
|
|
63
|
+
NEW_TAG="v0.1.0"
|
|
64
|
+
else
|
|
65
|
+
NEW_TAG=$(uv run --frozen git-cliff --bumped-version --config cliff.toml 2>/dev/null)
|
|
66
|
+
fi
|
|
67
|
+
if ! git rev-parse "$NEW_TAG" >/dev/null 2>&1; then
|
|
68
|
+
echo "Creating annotated tag $NEW_TAG"
|
|
69
|
+
|
|
70
|
+
git config user.name "github-actions[bot]"
|
|
71
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
72
|
+
|
|
73
|
+
git tag -a "$NEW_TAG" -m "Release $NEW_TAG"
|
|
74
|
+
git push origin "$NEW_TAG"
|
|
75
|
+
else
|
|
76
|
+
echo "Tag $NEW_TAG already exists, skipping."
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
echo "new_tag=$NEW_TAG" >> $GITHUB_OUTPUT
|
|
80
|
+
echo "previous_tag=$PREVIOUS_TAG" >> $GITHUB_OUTPUT
|
|
81
|
+
|
|
82
|
+
- name: Output tag information
|
|
83
|
+
if: ${{ steps.check_commits.outputs.has-changes == 'true' }}
|
|
84
|
+
run: |
|
|
85
|
+
echo "### Tag Created :rocket:" >> $GITHUB_STEP_SUMMARY
|
|
86
|
+
echo "- **New tag**: ${{ steps.tag_version.outputs.new_tag }}" >> $GITHUB_STEP_SUMMARY
|
|
87
|
+
echo "- **Previous tag**: ${{ steps.tag_version.outputs.previous_tag }}" >> $GITHUB_STEP_SUMMARY
|
|
88
|
+
echo "- **Changelog**: ${{ steps.tag_version.outputs.changelog }}" >> $GITHUB_STEP_SUMMARY
|
|
89
|
+
|
|
90
|
+
release:
|
|
91
|
+
needs: create_tag
|
|
92
|
+
uses: ./.github/workflows/release.yml
|
|
93
|
+
permissions:
|
|
94
|
+
contents: write
|
|
95
|
+
id-token: write
|
|
96
|
+
with:
|
|
97
|
+
tag_name: ${{ needs.create_tag.outputs.new_tag }}
|
|
98
|
+
|
|
99
|
+
publish:
|
|
100
|
+
needs: release
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
environment:
|
|
103
|
+
name: pypi
|
|
104
|
+
permissions:
|
|
105
|
+
id-token: write
|
|
106
|
+
contents: read
|
|
107
|
+
steps:
|
|
108
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
109
|
+
with:
|
|
110
|
+
ref: ${{ needs.create_tag.outputs.new_tag }}
|
|
111
|
+
fetch-depth: 0
|
|
112
|
+
|
|
113
|
+
- name: Output build information
|
|
114
|
+
run: |
|
|
115
|
+
echo "### Publishing Build :package:" >> $GITHUB_STEP_SUMMARY
|
|
116
|
+
echo "- **Version tag**: ${{ needs.create_tag.outputs.new_tag }}" >> $GITHUB_STEP_SUMMARY
|
|
117
|
+
|
|
118
|
+
- name: Install uv
|
|
119
|
+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
|
|
120
|
+
with:
|
|
121
|
+
python-version: '3.13'
|
|
122
|
+
|
|
123
|
+
- name: Build distribution
|
|
124
|
+
run: uv build
|
|
125
|
+
|
|
126
|
+
- name: Smoke test (wheel)
|
|
127
|
+
run:
|
|
128
|
+
uv run --isolated --no-project --with dist/*.whl
|
|
129
|
+
tests/smoke_test.py
|
|
130
|
+
|
|
131
|
+
- name: Smoke test (source distribution)
|
|
132
|
+
run:
|
|
133
|
+
uv run --isolated --no-project --with dist/*.tar.gz
|
|
134
|
+
tests/smoke_test.py
|
|
135
|
+
|
|
136
|
+
- name: Publish
|
|
137
|
+
run: uv publish
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: 'Semantic PR Check'
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request_target:
|
|
5
|
+
types:
|
|
6
|
+
- opened
|
|
7
|
+
- reopened
|
|
8
|
+
- edited
|
|
9
|
+
- synchronize
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
main:
|
|
13
|
+
name: Validate PR title
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
|
|
17
|
+
env:
|
|
18
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|