NeuNorm 2.2.2__tar.gz → 2.2.3__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.2.3}/.github/workflows/codeql.yml +3 -3
- {neunorm-2.2.2 → neunorm-2.2.3}/.github/workflows/dependency-scan.yml +3 -3
- {neunorm-2.2.2 → neunorm-2.2.3}/.github/workflows/test_and_deploy.yaml +10 -10
- {neunorm-2.2.2 → neunorm-2.2.3}/.github/workflows/update-lockfiles.yml +14 -3
- {neunorm-2.2.2 → neunorm-2.2.3}/.grype.yaml +10 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.pre-commit-config.yaml +1 -1
- neunorm-2.2.3/.readthedocs.yaml +28 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/CHANGELOG.md +26 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/PKG-INFO +1 -1
- {neunorm-2.2.2 → neunorm-2.2.3}/pixi.lock +690 -12
- {neunorm-2.2.2 → neunorm-2.2.3}/pyproject.toml +4 -0
- neunorm-2.2.3/src/neunorm/_version.py +1 -0
- neunorm-2.2.2/.readthedocs.yaml +0 -17
- neunorm-2.2.2/src/neunorm/_version.py +0 -1
- {neunorm-2.2.2 → neunorm-2.2.3}/.claude/agents/bug-hunter.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/bughunt/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/post-merge/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/release/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/review-pipeline/SKILL.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.claude/workflows/bughunt-deep.js +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.claude/workflows/dual-family-review.js +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.gitattributes +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.github/CODEOWNERS +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.github/dependabot.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.github/release.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.gitignore +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/.zenodo.json +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/AGENTS.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/CITATION.cff +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/CLAUDE.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/CONTRIBUTING.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/LICENSE +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/README.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/SECURITY.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/_utilities.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/exporter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/normalization.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/roi.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/README.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/conda.recipe/meta.yaml +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/df/DC0000.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/df/DC0001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/df/DC0002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0004.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0005.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0006.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0007.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0008.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0009.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0010.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0011.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0012.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0013.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0014.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0015.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0004.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0005.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0006.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0007.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0008.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0009.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0010.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0011.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0012.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0013.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0014.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0015.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/Makefile +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/readthedocs-environment.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/normalization_equation.png +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/normalization_principle.png +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/progress_bar_loading.png +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/progress_bar_normalization.png +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/conf.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/cropping_data.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/dark_field_correction.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/export_data.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/index.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/installation.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/loading.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/normalization.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/notebook.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/retrieve_normalized_data.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/tutorial_using_array_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/tutorial_using_folder_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/environment.yml +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/debugging_multi_roi_bug.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/notebook_display_with_time_estimation.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/testing_new_auto_gamma_filtering.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_normalization_with_fewer_ob_than_sample_MAYBE_BUG.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_array_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_export_array.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_several_roi.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_folder_input.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/paper/paper.bib +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/paper/paper.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/scripts/clean_build_artifacts.sh +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/normalizing_test.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_cropping.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_export.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_loading.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_roi.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_utilities.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/df001_4_by_4.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/image001_4_by_4.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/image001_with_gamma.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/not_supported_file.fake +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/ob001_4_by_4.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/df/df001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/ob/ob001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/ob/ob002.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/ob/ob003.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/test_roi/ob.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/test_roi/sample.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/format_not_suppored.txt +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/hdf5/dump_file.hdf5 +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/ob001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/df/df001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/df/df002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/df/df003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/ob/ob001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/ob/ob002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/ob/ob003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/sample_with_gamma/image001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/special_ob/ob_0001_2rois.tiff +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/special_sample/image_0001_2rois.tiff +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/special_sample/image_0001_roi_no_ob.tiff +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/codecov.yaml +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/api.rst +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/conf.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/development/DEVELOPMENT_PLAN.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/index.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/migration.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/README.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/mars_ccd_cmos.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/mars_tpx3.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/venus_ccd_cmos.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/venus_tpx1.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/venus_tpx3.md +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/examples/pulse_reconstruction_explained.ipynb +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/core.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/roi.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/tof.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/exporters/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/exporters/hdf5_writer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/exporters/tiff_writer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/filters/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/filters/gamma_filter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/event_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/fits_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/metadata_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/stack_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/tiff_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/mars_ccd.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/mars_tpx3.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_ccd.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_tpx1.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_tpx3_event.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_tpx3_histogram.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/air_region_corrector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/dark_corrector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/normalizer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/reference_preparer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/roi_clipper.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/run_combiner.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/spatial_rebinner.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/uncertainty_calculator.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/binning.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/coordinate_converter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/event_converter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/histogram_rebinner.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/pixel_detector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/pulse_reconstruction.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/resonance.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/statistics_analyzer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/utils/__init__.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/utils/_numba_compat.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/utils/constants.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/fits/sample/image001.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/fits/sample/image002.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/fits/sample/image003.fits +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/tif/sample/image001.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/tif/sample/image002.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/tif/sample/image003.tif +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/integration/test_tof_pipeline.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/neunorm/test_version.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_air_region_corrector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_analyze_statistics.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_background_roi_pooled.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_binning_config.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_binning_conversions.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_constants.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_dark_corrector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_division_by_zero_guards.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_event_converter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_event_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_eventdata_auto_validation.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_fits_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_gamma_filter.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_hdf5_writer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_mars_ccd.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_mars_tpx3.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_metadata_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_normalizer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_numba_compat.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_parallel_processing.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_pixel_detector.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_pulse_reconstruction.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_rebin_spatial.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_rebin_tof.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_reference_preparer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_refine_boundaries_jit.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_remaining_jit.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_resonance_detection.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_roi.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_roi_clipper.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_run_combiner.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_tiff_loader.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_tiff_writer.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_uncertainty.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_variance_propagation_fix.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_venus_ccd.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_venus_tpx1.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_venus_tpx3_event.py +0 -0
- {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_venus_tpx3_histogram.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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
26
26
|
|
|
27
27
|
- name: Initialize CodeQL
|
|
28
|
-
uses: github/codeql-action/init@v4
|
|
28
|
+
uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
|
|
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@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
|
|
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
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@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
|
|
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
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@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
|
|
35
35
|
with:
|
|
36
36
|
pixi-version: v0.70.1
|
|
37
37
|
manifest-path: pyproject.toml
|
|
@@ -56,13 +56,13 @@ jobs:
|
|
|
56
56
|
runs-on: ubuntu-latest
|
|
57
57
|
steps:
|
|
58
58
|
- name: Checkout
|
|
59
|
-
uses: actions/checkout@v7
|
|
59
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
60
60
|
with:
|
|
61
61
|
fetch-depth: 0
|
|
62
62
|
fetch-tags: true
|
|
63
63
|
|
|
64
64
|
- name: Setup pixi
|
|
65
|
-
uses: prefix-dev/setup-pixi@
|
|
65
|
+
uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
|
|
66
66
|
with:
|
|
67
67
|
pixi-version: v0.70.1
|
|
68
68
|
manifest-path: pyproject.toml
|
|
@@ -83,7 +83,7 @@ jobs:
|
|
|
83
83
|
python-version: "3.11"
|
|
84
84
|
|
|
85
85
|
- name: Upload conda package as artifact
|
|
86
|
-
uses: actions/upload-artifact@v7
|
|
86
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
87
87
|
with:
|
|
88
88
|
name: artifact-conda-package
|
|
89
89
|
path: ${{ env.PKG_NAME }}-*.conda
|
|
@@ -95,20 +95,20 @@ jobs:
|
|
|
95
95
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
96
96
|
steps:
|
|
97
97
|
- name: Checkout
|
|
98
|
-
uses: actions/checkout@v7
|
|
98
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
99
99
|
with:
|
|
100
100
|
fetch-depth: 0
|
|
101
101
|
fetch-tags: true
|
|
102
102
|
|
|
103
103
|
- name: Setup Pixi
|
|
104
|
-
uses: prefix-dev/setup-pixi@
|
|
104
|
+
uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
|
|
105
105
|
with:
|
|
106
106
|
pixi-version: v0.70.1
|
|
107
107
|
manifest-path: pyproject.toml
|
|
108
108
|
frozen: true
|
|
109
109
|
|
|
110
110
|
- name: Download conda package artifact
|
|
111
|
-
uses: actions/download-artifact@v8
|
|
111
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
112
112
|
with:
|
|
113
113
|
name: artifact-conda-package
|
|
114
114
|
|
|
@@ -135,13 +135,13 @@ jobs:
|
|
|
135
135
|
id-token: write
|
|
136
136
|
steps:
|
|
137
137
|
- name: Checkout
|
|
138
|
-
uses: actions/checkout@v7
|
|
138
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
139
139
|
with:
|
|
140
140
|
fetch-depth: 0
|
|
141
141
|
fetch-tags: true
|
|
142
142
|
|
|
143
143
|
- name: Setup pixi
|
|
144
|
-
uses: prefix-dev/setup-pixi@
|
|
144
|
+
uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
|
|
145
145
|
with:
|
|
146
146
|
pixi-version: v0.70.1
|
|
147
147
|
manifest-path: pyproject.toml
|
|
@@ -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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
18
29
|
|
|
19
30
|
- name: Setup pixi
|
|
20
|
-
uses: prefix-dev/setup-pixi@
|
|
31
|
+
uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0
|
|
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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -5,6 +5,32 @@ All notable changes to NeuNorm are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.2.3] - 2026-07-14
|
|
9
|
+
|
|
10
|
+
Maintenance release — CI, documentation-build, and dependency updates only. There are
|
|
11
|
+
**no `neunorm` library or API changes** since 2.2.2; the PyPI and conda artifacts are
|
|
12
|
+
functionally identical to 2.2.2.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- **Read the Docs builds reliably again.** The documentation now builds through pixi
|
|
17
|
+
(`pixi install -e docs` + `pixi run -e docs sphinx-build`, the Read the Docs-official
|
|
18
|
+
route) so it resolves the same locked, tested dependencies as CI instead of a bare
|
|
19
|
+
`pip install .[docs]`, which floated `scitiff`/`pydantic` to an untested combination and
|
|
20
|
+
broke autodoc at import.
|
|
21
|
+
([#184](https://github.com/ornlneutronimaging/NeuNorm/pull/184))
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- CI and security hardening: GitHub Actions pinned to full commit SHAs with version
|
|
26
|
+
comments, `setup-pixi` bumped, Grype switched to a non-blocking SARIF upload, lockfile
|
|
27
|
+
update PRs authored via a GitHub App token, and accepted upstream CVEs recorded in
|
|
28
|
+
`.grype.yaml`.
|
|
29
|
+
([#178](https://github.com/ornlneutronimaging/NeuNorm/pull/178),
|
|
30
|
+
[#179](https://github.com/ornlneutronimaging/NeuNorm/pull/179),
|
|
31
|
+
[#181](https://github.com/ornlneutronimaging/NeuNorm/pull/181),
|
|
32
|
+
[#183](https://github.com/ornlneutronimaging/NeuNorm/pull/183))
|
|
33
|
+
|
|
8
34
|
## [2.2.2] - 2026-07-02
|
|
9
35
|
|
|
10
36
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: NeuNorm
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.3
|
|
4
4
|
Summary: Neutron imaging normalization and TOF data processing for ORNL facilities
|
|
5
5
|
Project-URL: homepage, https://github.com/ornlneutronimaging/NeuNorm
|
|
6
6
|
Project-URL: repository, https://github.com/ornlneutronimaging/NeuNorm
|