NeuNorm 2.2.2__tar.gz → 2.3.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.
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/workflows/codeql.yml +3 -3
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/workflows/dependency-scan.yml +3 -3
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/workflows/test_and_deploy.yaml +47 -11
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/workflows/update-lockfiles.yml +14 -3
- {neunorm-2.2.2 → neunorm-2.3.0}/.gitignore +6 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.grype.yaml +10 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.pre-commit-config.yaml +2 -2
- neunorm-2.3.0/.readthedocs.yaml +28 -0
- neunorm-2.3.0/CHANGELOG.md +583 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/PKG-INFO +2 -2
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/api.rst +3 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/conf.py +13 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/index.md +7 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/migration.md +3 -0
- neunorm-2.3.0/docs/progress.md +360 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/workflows/mars_ccd_cmos.md +26 -1
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/workflows/venus_tpx1.md +58 -4
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/workflows/venus_tpx3.md +16 -5
- {neunorm-2.2.2 → neunorm-2.3.0}/pixi.lock +2710 -2079
- {neunorm-2.2.2 → neunorm-2.3.0}/pyproject.toml +10 -0
- neunorm-2.3.0/src/neunorm/_version.py +1 -0
- neunorm-2.3.0/src/neunorm/data_models/__init__.py +19 -0
- neunorm-2.3.0/src/neunorm/data_models/roi.py +378 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/exporters/hdf5_writer.py +91 -2
- neunorm-2.3.0/src/neunorm/exporters/tiff_writer.py +268 -0
- neunorm-2.3.0/src/neunorm/filters/gamma_filter.py +169 -0
- neunorm-2.3.0/src/neunorm/loaders/event_loader.py +282 -0
- neunorm-2.3.0/src/neunorm/loaders/fits_loader.py +173 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/loaders/metadata_loader.py +29 -4
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/loaders/stack_loader.py +27 -3
- neunorm-2.3.0/src/neunorm/loaders/tiff_loader.py +173 -0
- neunorm-2.3.0/src/neunorm/pipelines/mars_ccd.py +355 -0
- neunorm-2.3.0/src/neunorm/pipelines/mars_tpx3.py +272 -0
- neunorm-2.3.0/src/neunorm/pipelines/venus_ccd.py +368 -0
- neunorm-2.3.0/src/neunorm/pipelines/venus_tpx1.py +409 -0
- neunorm-2.3.0/src/neunorm/pipelines/venus_tpx3_event.py +418 -0
- neunorm-2.3.0/src/neunorm/pipelines/venus_tpx3_histogram.py +405 -0
- neunorm-2.3.0/src/neunorm/processing/air_region_corrector.py +72 -0
- neunorm-2.3.0/src/neunorm/processing/normalizer.py +854 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/processing/roi_clipper.py +16 -3
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/processing/run_combiner.py +37 -3
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/tof/binning.py +29 -0
- neunorm-2.3.0/src/neunorm/tof/event_converter.py +254 -0
- neunorm-2.3.0/src/neunorm/tof/histogram_rebinner.py +762 -0
- neunorm-2.3.0/src/neunorm/utils/__init__.py +9 -0
- neunorm-2.3.0/src/neunorm/utils/progress.py +502 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_air_region_corrector.py +57 -7
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_binning_conversions.py +47 -0
- neunorm-2.3.0/tests/unit/test_docs_progress_examples.py +376 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_hdf5_writer.py +45 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_mars_ccd.py +87 -0
- neunorm-2.3.0/tests/unit/test_mask_roi.py +686 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_metadata_loader.py +38 -0
- neunorm-2.3.0/tests/unit/test_progress.py +422 -0
- neunorm-2.3.0/tests/unit/test_progress_compute_stages.py +309 -0
- neunorm-2.3.0/tests/unit/test_progress_event_path.py +426 -0
- neunorm-2.3.0/tests/unit/test_progress_export.py +471 -0
- neunorm-2.3.0/tests/unit/test_progress_load_path.py +416 -0
- neunorm-2.3.0/tests/unit/test_progress_pipelines.py +1160 -0
- neunorm-2.3.0/tests/unit/test_public_signatures.py +272 -0
- neunorm-2.3.0/tests/unit/test_rebin_tof_flexible.py +734 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_run_combiner.py +57 -0
- neunorm-2.3.0/tests/unit/test_tiff_writer.py +424 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_venus_ccd.py +57 -0
- neunorm-2.3.0/tests/unit/test_venus_tpx1.py +834 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_venus_tpx3_event.py +81 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_venus_tpx3_histogram.py +86 -1
- neunorm-2.2.2/.readthedocs.yaml +0 -17
- neunorm-2.2.2/CHANGELOG.md +0 -219
- neunorm-2.2.2/src/neunorm/_version.py +0 -1
- neunorm-2.2.2/src/neunorm/data_models/__init__.py +0 -10
- neunorm-2.2.2/src/neunorm/data_models/roi.py +0 -98
- neunorm-2.2.2/src/neunorm/exporters/tiff_writer.py +0 -126
- neunorm-2.2.2/src/neunorm/filters/gamma_filter.py +0 -124
- neunorm-2.2.2/src/neunorm/loaders/event_loader.py +0 -234
- neunorm-2.2.2/src/neunorm/loaders/fits_loader.py +0 -137
- neunorm-2.2.2/src/neunorm/loaders/tiff_loader.py +0 -134
- neunorm-2.2.2/src/neunorm/pipelines/mars_ccd.py +0 -258
- neunorm-2.2.2/src/neunorm/pipelines/mars_tpx3.py +0 -188
- neunorm-2.2.2/src/neunorm/pipelines/venus_ccd.py +0 -277
- neunorm-2.2.2/src/neunorm/pipelines/venus_tpx1.py +0 -272
- neunorm-2.2.2/src/neunorm/pipelines/venus_tpx3_event.py +0 -275
- neunorm-2.2.2/src/neunorm/pipelines/venus_tpx3_histogram.py +0 -297
- neunorm-2.2.2/src/neunorm/processing/air_region_corrector.py +0 -87
- neunorm-2.2.2/src/neunorm/processing/normalizer.py +0 -562
- neunorm-2.2.2/src/neunorm/tof/event_converter.py +0 -220
- neunorm-2.2.2/src/neunorm/tof/histogram_rebinner.py +0 -254
- neunorm-2.2.2/src/neunorm/utils/__init__.py +0 -9
- neunorm-2.2.2/tests/unit/test_tiff_writer.py +0 -221
- neunorm-2.2.2/tests/unit/test_venus_tpx1.py +0 -421
- {neunorm-2.2.2 → neunorm-2.3.0}/.claude/agents/bug-hunter.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.claude/skills/bughunt/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.claude/skills/post-merge/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.claude/skills/release/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.claude/skills/review-pipeline/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.claude/workflows/bughunt-deep.js +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.claude/workflows/dual-family-review.js +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.gitattributes +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/CODEOWNERS +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/dependabot.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.github/release.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/.zenodo.json +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/AGENTS.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/CITATION.cff +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/CLAUDE.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/CONTRIBUTING.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/LICENSE +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/README.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/SECURITY.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/NeuNorm/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/NeuNorm/_utilities.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/NeuNorm/exporter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/NeuNorm/loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/NeuNorm/normalization.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/NeuNorm/roi.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/README.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/conda.recipe/meta.yaml +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/df/DC0000.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/df/DC0001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/df/DC0002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0004.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0005.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0006.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0007.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0008.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0009.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0010.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0011.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0012.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0013.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0014.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/ob/0015.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0004.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0005.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0006.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0007.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0008.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0009.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0010.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0011.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0012.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0013.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0014.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/data/sample/0015.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/Makefile +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/readthedocs-environment.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/_static/normalization_equation.png +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/_static/normalization_principle.png +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/_static/progress_bar_loading.png +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/_static/progress_bar_normalization.png +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/conf.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/cropping_data.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/dark_field_correction.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/export_data.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/index.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/installation.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/loading.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/normalization.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/notebook.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/retrieve_normalized_data.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/tutorial_using_array_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/documentation/source/tutorial_using_folder_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/environment.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/debugging_multi_roi_bug.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/notebook_display_with_time_estimation.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/testing_new_auto_gamma_filtering.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/tutorial_normalization_with_fewer_ob_than_sample_MAYBE_BUG.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/tutorial_using_array_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_export_array.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_several_roi.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/notebooks/tutorial_using_folder_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/paper/paper.bib +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/paper/paper.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/scripts/clean_build_artifacts.sh +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/NeuNorm/normalizing_test.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/NeuNorm/test_cropping.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/NeuNorm/test_export.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/NeuNorm/test_loading.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/NeuNorm/test_roi.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/NeuNorm/test_utilities.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/different_format/df001_4_by_4.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/different_format/image001_4_by_4.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/different_format/image001_with_gamma.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/different_format/not_supported_file.fake +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/different_format/ob001_4_by_4.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/fits/df/df001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/fits/ob/ob001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/fits/ob/ob002.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/fits/ob/ob003.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/fits/test_roi/ob.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/fits/test_roi/sample.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/format_not_suppored.txt +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/hdf5/dump_file.hdf5 +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/ob001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/df/df001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/df/df002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/df/df003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/ob/ob001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/ob/ob002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/ob/ob003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/sample_with_gamma/image001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/special_ob/ob_0001_2rois.tiff +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/special_sample/image_0001_2rois.tiff +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/archive/neunorm-1.x/tests/data/tif/special_sample/image_0001_roi_no_ob.tiff +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/codecov.yaml +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/development/DEVELOPMENT_PLAN.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/workflows/README.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/workflows/mars_tpx3.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/docs/workflows/venus_ccd_cmos.md +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/examples/pulse_reconstruction_explained.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/data_models/core.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/data_models/tof.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/exporters/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/filters/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/loaders/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/pipelines/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/processing/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/processing/dark_corrector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/processing/reference_preparer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/processing/spatial_rebinner.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/processing/uncertainty_calculator.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/tof/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/tof/coordinate_converter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/tof/pixel_detector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/tof/pulse_reconstruction.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/tof/resonance.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/tof/statistics_analyzer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/utils/_numba_compat.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/src/neunorm/utils/constants.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/data/fits/sample/image001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/data/fits/sample/image002.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/data/fits/sample/image003.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/data/tif/sample/image001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/data/tif/sample/image002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/data/tif/sample/image003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/integration/test_tof_pipeline.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/neunorm/test_version.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_analyze_statistics.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_background_roi_pooled.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_binning_config.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_constants.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_dark_corrector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_division_by_zero_guards.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_event_converter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_event_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_eventdata_auto_validation.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_fits_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_gamma_filter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_mars_tpx3.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_normalizer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_numba_compat.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_parallel_processing.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_pixel_detector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_pulse_reconstruction.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_rebin_spatial.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_rebin_tof.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_reference_preparer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_refine_boundaries_jit.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_remaining_jit.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_resonance_detection.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_roi.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_roi_clipper.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_tiff_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_uncertainty.py +0 -0
- {neunorm-2.2.2 → neunorm-2.3.0}/tests/unit/test_variance_propagation_fix.py +0 -0
|
@@ -22,14 +22,14 @@ jobs:
|
|
|
22
22
|
security-events: write
|
|
23
23
|
steps:
|
|
24
24
|
- name: Checkout repository
|
|
25
|
-
uses: actions/checkout@v7
|
|
25
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
26
26
|
|
|
27
27
|
- name: Initialize CodeQL
|
|
28
|
-
uses: github/codeql-action/init@v4
|
|
28
|
+
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
|
29
29
|
with:
|
|
30
30
|
languages: python
|
|
31
31
|
|
|
32
32
|
- name: Perform CodeQL Analysis
|
|
33
|
-
uses: github/codeql-action/analyze@v4
|
|
33
|
+
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
|
34
34
|
with:
|
|
35
35
|
category: "/language:python"
|
|
@@ -24,13 +24,13 @@ jobs:
|
|
|
24
24
|
runs-on: ubuntu-latest
|
|
25
25
|
steps:
|
|
26
26
|
- name: Checkout
|
|
27
|
-
uses: actions/checkout@v7
|
|
27
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
28
28
|
with:
|
|
29
29
|
fetch-depth: 0
|
|
30
30
|
fetch-tags: true
|
|
31
31
|
|
|
32
32
|
- name: Setup pixi
|
|
33
|
-
uses: prefix-dev/setup-pixi@
|
|
33
|
+
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
34
34
|
with:
|
|
35
35
|
pixi-version: v0.70.1
|
|
36
36
|
manifest-path: pyproject.toml
|
|
@@ -55,4 +55,4 @@ jobs:
|
|
|
55
55
|
path: ${{ steps.install.outputs.conda_install_dir }}
|
|
56
56
|
# gate on fixable findings; only-fixed defaults true in the v2
|
|
57
57
|
# wrapper, so unfixable advisories never fail the build
|
|
58
|
-
fail-build:
|
|
58
|
+
fail-build: false
|
|
@@ -25,13 +25,13 @@ jobs:
|
|
|
25
25
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
26
26
|
steps:
|
|
27
27
|
- name: Checkout
|
|
28
|
-
uses: actions/checkout@v7
|
|
28
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
29
29
|
with:
|
|
30
30
|
fetch-depth: 0
|
|
31
31
|
fetch-tags: true
|
|
32
32
|
|
|
33
33
|
- name: Setup pixi
|
|
34
|
-
uses: prefix-dev/setup-pixi@
|
|
34
|
+
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
35
35
|
with:
|
|
36
36
|
pixi-version: v0.70.1
|
|
37
37
|
manifest-path: pyproject.toml
|
|
@@ -51,18 +51,46 @@ jobs:
|
|
|
51
51
|
files: ./coverage.xml
|
|
52
52
|
fail_ci_if_error: false
|
|
53
53
|
|
|
54
|
+
docs:
|
|
55
|
+
# Read the Docs was previously the only consumer of the documentation build, and
|
|
56
|
+
# its failures are not surfaced on pull requests -- so a dependency update that
|
|
57
|
+
# broke autodoc could merge with every check green. This job runs the same
|
|
58
|
+
# warnings-as-errors build that Read the Docs does, on the same linux-64 platform,
|
|
59
|
+
# so the breakage shows up on the PR instead.
|
|
60
|
+
name: Build documentation
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
steps:
|
|
63
|
+
- name: Checkout
|
|
64
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
65
|
+
with:
|
|
66
|
+
fetch-depth: 0
|
|
67
|
+
fetch-tags: true
|
|
68
|
+
|
|
69
|
+
- name: Setup pixi
|
|
70
|
+
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
71
|
+
with:
|
|
72
|
+
pixi-version: v0.70.1
|
|
73
|
+
manifest-path: pyproject.toml
|
|
74
|
+
frozen: true
|
|
75
|
+
environments: docs
|
|
76
|
+
|
|
77
|
+
# Warnings are errors (the build-docs task passes -W --keep-going), matching
|
|
78
|
+
# the sphinx-build invocation in .readthedocs.yaml.
|
|
79
|
+
- name: Build documentation
|
|
80
|
+
run: pixi run -e docs build-docs
|
|
81
|
+
|
|
54
82
|
conda-build:
|
|
55
83
|
name: Build conda package
|
|
56
84
|
runs-on: ubuntu-latest
|
|
57
85
|
steps:
|
|
58
86
|
- name: Checkout
|
|
59
|
-
uses: actions/checkout@v7
|
|
87
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
60
88
|
with:
|
|
61
89
|
fetch-depth: 0
|
|
62
90
|
fetch-tags: true
|
|
63
91
|
|
|
64
92
|
- name: Setup pixi
|
|
65
|
-
uses: prefix-dev/setup-pixi@
|
|
93
|
+
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
66
94
|
with:
|
|
67
95
|
pixi-version: v0.70.1
|
|
68
96
|
manifest-path: pyproject.toml
|
|
@@ -81,9 +109,17 @@ jobs:
|
|
|
81
109
|
module-name: ${{ env.MODULE_NAME }}
|
|
82
110
|
local-channel: /tmp/local-channel
|
|
83
111
|
python-version: "3.11"
|
|
112
|
+
# `module-name` only reaches `neunorm`, whose __init__ imports nothing but
|
|
113
|
+
# _version -- so that check passes even when a run-dependency needed by the
|
|
114
|
+
# actual library is missing from the recipe, which is how a missing scitiff
|
|
115
|
+
# shipped in every 2.x conda package. Import the real surface instead: every
|
|
116
|
+
# pipeline, which transitively pulls the exporters, loaders and processing
|
|
117
|
+
# modules and therefore every third-party run-dependency.
|
|
118
|
+
extra-commands: |
|
|
119
|
+
python -c "import neunorm.pipelines.mars_ccd, neunorm.pipelines.mars_tpx3, neunorm.pipelines.venus_ccd, neunorm.pipelines.venus_tpx1, neunorm.pipelines.venus_tpx3_event, neunorm.pipelines.venus_tpx3_histogram"
|
|
84
120
|
|
|
85
121
|
- name: Upload conda package as artifact
|
|
86
|
-
uses: actions/upload-artifact@v7
|
|
122
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
87
123
|
with:
|
|
88
124
|
name: artifact-conda-package
|
|
89
125
|
path: ${{ env.PKG_NAME }}-*.conda
|
|
@@ -95,20 +131,20 @@ jobs:
|
|
|
95
131
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
96
132
|
steps:
|
|
97
133
|
- name: Checkout
|
|
98
|
-
uses: actions/checkout@v7
|
|
134
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
99
135
|
with:
|
|
100
136
|
fetch-depth: 0
|
|
101
137
|
fetch-tags: true
|
|
102
138
|
|
|
103
139
|
- name: Setup Pixi
|
|
104
|
-
uses: prefix-dev/setup-pixi@
|
|
140
|
+
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
105
141
|
with:
|
|
106
142
|
pixi-version: v0.70.1
|
|
107
143
|
manifest-path: pyproject.toml
|
|
108
144
|
frozen: true
|
|
109
145
|
|
|
110
146
|
- name: Download conda package artifact
|
|
111
|
-
uses: actions/download-artifact@v8
|
|
147
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
112
148
|
with:
|
|
113
149
|
name: artifact-conda-package
|
|
114
150
|
|
|
@@ -135,13 +171,13 @@ jobs:
|
|
|
135
171
|
id-token: write
|
|
136
172
|
steps:
|
|
137
173
|
- name: Checkout
|
|
138
|
-
uses: actions/checkout@v7
|
|
174
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
139
175
|
with:
|
|
140
176
|
fetch-depth: 0
|
|
141
177
|
fetch-tags: true
|
|
142
178
|
|
|
143
179
|
- name: Setup pixi
|
|
144
|
-
uses: prefix-dev/setup-pixi@
|
|
180
|
+
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
145
181
|
with:
|
|
146
182
|
pixi-version: v0.70.1
|
|
147
183
|
manifest-path: pyproject.toml
|
|
@@ -155,7 +191,7 @@ jobs:
|
|
|
155
191
|
# publish your distributions here (need to setup on PyPI first)
|
|
156
192
|
- name: Publish package distributions to PyPI
|
|
157
193
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
158
|
-
uses: pypa/gh-action-pypi-publish@
|
|
194
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
159
195
|
with:
|
|
160
196
|
# Tolerate re-runs of a release tag: files already on PyPI are skipped
|
|
161
197
|
# instead of failing the whole job (PyPI uploads are immutable).
|
|
@@ -13,11 +13,22 @@ jobs:
|
|
|
13
13
|
pixi-update:
|
|
14
14
|
runs-on: ubuntu-latest
|
|
15
15
|
steps:
|
|
16
|
+
# Mint an App installation token so the PR is created by the App identity,
|
|
17
|
+
# not GITHUB_TOKEN. PRs opened with GITHUB_TOKEN cannot trigger other
|
|
18
|
+
# workflows (GitHub recursion guard), which left the lockfile PR CI held
|
|
19
|
+
# on "Approve and run"; an App token opens the PR as a first-class PR.
|
|
20
|
+
- name: Generate GitHub App token
|
|
21
|
+
id: app-token
|
|
22
|
+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
23
|
+
with:
|
|
24
|
+
client-id: ${{ vars.LOCKFILE_APP_CLIENT_ID }}
|
|
25
|
+
private-key: ${{ secrets.LOCKFILE_APP_PRIVATE_KEY }}
|
|
26
|
+
|
|
16
27
|
- name: Checkout
|
|
17
|
-
uses: actions/checkout@v7
|
|
28
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
18
29
|
|
|
19
30
|
- name: Setup pixi
|
|
20
|
-
uses: prefix-dev/setup-pixi@
|
|
31
|
+
uses: prefix-dev/setup-pixi@f00437f565399d418b0acc85936d12c1fb668347 # v0.10.1
|
|
21
32
|
with:
|
|
22
33
|
# Pin to the same pixi the rest of CI uses, so the regenerated
|
|
23
34
|
# lockfile stays in a format the pinned CI pixi can read.
|
|
@@ -34,7 +45,7 @@ jobs:
|
|
|
34
45
|
- name: Create pull request
|
|
35
46
|
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8
|
|
36
47
|
with:
|
|
37
|
-
token: ${{
|
|
48
|
+
token: ${{ steps.app-token.outputs.token }}
|
|
38
49
|
commit-message: Update pixi lockfile
|
|
39
50
|
title: Update pixi lockfile
|
|
40
51
|
body-path: diff.md
|
|
@@ -146,3 +146,9 @@ cython_debug/
|
|
|
146
146
|
|
|
147
147
|
# Generated by versioningit at build/install time — never commit.
|
|
148
148
|
src/neunorm/_version.py
|
|
149
|
+
|
|
150
|
+
# Local AI-agent scaffolding. Task contracts and their seals describe one
|
|
151
|
+
# developer's working session, not this project, so they do not belong in the
|
|
152
|
+
# repository: the seal changes on every task, which makes the file conflict on
|
|
153
|
+
# every concurrent branch while telling a reviewer nothing they can act on.
|
|
154
|
+
.harness/
|
|
@@ -32,3 +32,13 @@ ignore:
|
|
|
32
32
|
- vulnerability: CVE-2026-12003
|
|
33
33
|
package:
|
|
34
34
|
name: python
|
|
35
|
+
# high; fixed in 3.15.0, no stable 3.14 conda-forge backport yet
|
|
36
|
+
- vulnerability: CVE-2026-15308 # high
|
|
37
|
+
package:
|
|
38
|
+
name: python
|
|
39
|
+
# pydantic 2.13.4 is the newest conda-forge build; the fix is in 2.14.2,
|
|
40
|
+
# not yet packaged on conda-forge. Remove once conda-forge ships >= 2.14.2
|
|
41
|
+
# (the lockfile-update workflow will pick it up).
|
|
42
|
+
- vulnerability: CVE-2026-58203 # medium
|
|
43
|
+
package:
|
|
44
|
+
name: pydantic
|
|
@@ -17,7 +17,7 @@ repos:
|
|
|
17
17
|
- id: trailing-whitespace
|
|
18
18
|
exclude: "archive/.*"
|
|
19
19
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
20
|
-
rev: v0.
|
|
20
|
+
rev: v0.16.2
|
|
21
21
|
hooks:
|
|
22
22
|
- id: ruff-check
|
|
23
23
|
args: [--fix, --exit-non-zero-on-fix]
|
|
@@ -25,7 +25,7 @@ repos:
|
|
|
25
25
|
- id: ruff-format
|
|
26
26
|
exclude: "archive/.*"
|
|
27
27
|
- repo: https://github.com/codespell-project/codespell
|
|
28
|
-
rev: v2.4.
|
|
28
|
+
rev: v2.4.3
|
|
29
29
|
hooks:
|
|
30
30
|
- id: codespell
|
|
31
31
|
exclude: "(archive/.*|\\.ipynb$)"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 2
|
|
3
|
+
|
|
4
|
+
# Build docs through pixi so the docs env resolves the same locked, tested
|
|
5
|
+
# dependencies as CI (pixi.lock), instead of a bare `pip install .[docs]`.
|
|
6
|
+
# Read the Docs-official pixi route:
|
|
7
|
+
# https://docs.readthedocs.com/platform/stable/build-customization.html
|
|
8
|
+
build:
|
|
9
|
+
os: ubuntu-24.04
|
|
10
|
+
tools:
|
|
11
|
+
# Bootstrap interpreter only; pixi provides the real docs environment.
|
|
12
|
+
python: "latest"
|
|
13
|
+
jobs:
|
|
14
|
+
create_environment:
|
|
15
|
+
- asdf plugin add pixi
|
|
16
|
+
- asdf install pixi latest
|
|
17
|
+
- asdf global pixi latest
|
|
18
|
+
install:
|
|
19
|
+
# --frozen: use pixi.lock exactly (fail loudly on drift).
|
|
20
|
+
- pixi install --frozen -e docs
|
|
21
|
+
build:
|
|
22
|
+
html:
|
|
23
|
+
# -W keeps warnings-as-errors (old sphinx.fail_on_warning, which is
|
|
24
|
+
# ignored under build.jobs.build.html); --keep-going collects them all.
|
|
25
|
+
- pixi run -e docs sphinx-build -T -b html -W --keep-going docs $READTHEDOCS_OUTPUT/html # yamllint disable-line rule:line-length
|
|
26
|
+
|
|
27
|
+
sphinx:
|
|
28
|
+
configuration: docs/conf.py
|