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.
Files changed (241) hide show
  1. {neunorm-2.2.2 → neunorm-2.2.3}/.github/workflows/codeql.yml +3 -3
  2. {neunorm-2.2.2 → neunorm-2.2.3}/.github/workflows/dependency-scan.yml +3 -3
  3. {neunorm-2.2.2 → neunorm-2.2.3}/.github/workflows/test_and_deploy.yaml +10 -10
  4. {neunorm-2.2.2 → neunorm-2.2.3}/.github/workflows/update-lockfiles.yml +14 -3
  5. {neunorm-2.2.2 → neunorm-2.2.3}/.grype.yaml +10 -0
  6. {neunorm-2.2.2 → neunorm-2.2.3}/.pre-commit-config.yaml +1 -1
  7. neunorm-2.2.3/.readthedocs.yaml +28 -0
  8. {neunorm-2.2.2 → neunorm-2.2.3}/CHANGELOG.md +26 -0
  9. {neunorm-2.2.2 → neunorm-2.2.3}/PKG-INFO +1 -1
  10. {neunorm-2.2.2 → neunorm-2.2.3}/pixi.lock +690 -12
  11. {neunorm-2.2.2 → neunorm-2.2.3}/pyproject.toml +4 -0
  12. neunorm-2.2.3/src/neunorm/_version.py +1 -0
  13. neunorm-2.2.2/.readthedocs.yaml +0 -17
  14. neunorm-2.2.2/src/neunorm/_version.py +0 -1
  15. {neunorm-2.2.2 → neunorm-2.2.3}/.claude/agents/bug-hunter.md +0 -0
  16. {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/bughunt/SKILL.md +0 -0
  17. {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/post-merge/SKILL.md +0 -0
  18. {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/release/SKILL.md +0 -0
  19. {neunorm-2.2.2 → neunorm-2.2.3}/.claude/skills/review-pipeline/SKILL.md +0 -0
  20. {neunorm-2.2.2 → neunorm-2.2.3}/.claude/workflows/bughunt-deep.js +0 -0
  21. {neunorm-2.2.2 → neunorm-2.2.3}/.claude/workflows/dual-family-review.js +0 -0
  22. {neunorm-2.2.2 → neunorm-2.2.3}/.gitattributes +0 -0
  23. {neunorm-2.2.2 → neunorm-2.2.3}/.github/CODEOWNERS +0 -0
  24. {neunorm-2.2.2 → neunorm-2.2.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  25. {neunorm-2.2.2 → neunorm-2.2.3}/.github/dependabot.yml +0 -0
  26. {neunorm-2.2.2 → neunorm-2.2.3}/.github/release.yml +0 -0
  27. {neunorm-2.2.2 → neunorm-2.2.3}/.gitignore +0 -0
  28. {neunorm-2.2.2 → neunorm-2.2.3}/.zenodo.json +0 -0
  29. {neunorm-2.2.2 → neunorm-2.2.3}/AGENTS.md +0 -0
  30. {neunorm-2.2.2 → neunorm-2.2.3}/CITATION.cff +0 -0
  31. {neunorm-2.2.2 → neunorm-2.2.3}/CLAUDE.md +0 -0
  32. {neunorm-2.2.2 → neunorm-2.2.3}/CONTRIBUTING.md +0 -0
  33. {neunorm-2.2.2 → neunorm-2.2.3}/LICENSE +0 -0
  34. {neunorm-2.2.2 → neunorm-2.2.3}/README.md +0 -0
  35. {neunorm-2.2.2 → neunorm-2.2.3}/SECURITY.md +0 -0
  36. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/__init__.py +0 -0
  37. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/_utilities.py +0 -0
  38. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/exporter.py +0 -0
  39. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/loader.py +0 -0
  40. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/normalization.py +0 -0
  41. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/NeuNorm/roi.py +0 -0
  42. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/README.md +0 -0
  43. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/conda.recipe/meta.yaml +0 -0
  44. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/df/DC0000.tif +0 -0
  45. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/df/DC0001.tif +0 -0
  46. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/df/DC0002.tif +0 -0
  47. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0001.tif +0 -0
  48. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0002.tif +0 -0
  49. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0003.tif +0 -0
  50. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0004.tif +0 -0
  51. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0005.tif +0 -0
  52. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0006.tif +0 -0
  53. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0007.tif +0 -0
  54. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0008.tif +0 -0
  55. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0009.tif +0 -0
  56. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0010.tif +0 -0
  57. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0011.tif +0 -0
  58. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0012.tif +0 -0
  59. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0013.tif +0 -0
  60. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0014.tif +0 -0
  61. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/ob/0015.tif +0 -0
  62. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0002.tif +0 -0
  63. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0003.tif +0 -0
  64. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0004.tif +0 -0
  65. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0005.tif +0 -0
  66. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0006.tif +0 -0
  67. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0007.tif +0 -0
  68. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0008.tif +0 -0
  69. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0009.tif +0 -0
  70. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0010.tif +0 -0
  71. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0011.tif +0 -0
  72. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0012.tif +0 -0
  73. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0013.tif +0 -0
  74. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0014.tif +0 -0
  75. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/data/sample/0015.tif +0 -0
  76. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/Makefile +0 -0
  77. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/readthedocs-environment.yml +0 -0
  78. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/normalization_equation.png +0 -0
  79. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/normalization_principle.png +0 -0
  80. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/progress_bar_loading.png +0 -0
  81. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/_static/progress_bar_normalization.png +0 -0
  82. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/conf.py +0 -0
  83. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/cropping_data.rst +0 -0
  84. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/dark_field_correction.rst +0 -0
  85. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/export_data.rst +0 -0
  86. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/index.rst +0 -0
  87. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/installation.rst +0 -0
  88. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/loading.rst +0 -0
  89. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/normalization.rst +0 -0
  90. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/notebook.rst +0 -0
  91. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/retrieve_normalized_data.rst +0 -0
  92. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
  93. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/tutorial_using_array_input.ipynb +0 -0
  94. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/documentation/source/tutorial_using_folder_input.ipynb +0 -0
  95. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/environment.yml +0 -0
  96. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/debugging_multi_roi_bug.ipynb +0 -0
  97. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/notebook_display_with_time_estimation.ipynb +0 -0
  98. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/testing_new_auto_gamma_filtering.ipynb +0 -0
  99. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_normalization_with_fewer_ob_than_sample.ipynb +0 -0
  100. {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
  101. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_array_input.ipynb +0 -0
  102. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_export_array.ipynb +0 -0
  103. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_array_input_and_several_roi.ipynb +0 -0
  104. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/notebooks/tutorial_using_folder_input.ipynb +0 -0
  105. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/paper/paper.bib +0 -0
  106. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/paper/paper.md +0 -0
  107. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/scripts/clean_build_artifacts.sh +0 -0
  108. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/normalizing_test.py +0 -0
  109. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_cropping.py +0 -0
  110. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_export.py +0 -0
  111. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_loading.py +0 -0
  112. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_roi.py +0 -0
  113. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/NeuNorm/test_utilities.py +0 -0
  114. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/df001_4_by_4.tif +0 -0
  115. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/image001_4_by_4.tif +0 -0
  116. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/image001_with_gamma.tif +0 -0
  117. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/not_supported_file.fake +0 -0
  118. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/different_format/ob001_4_by_4.tif +0 -0
  119. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/df/df001.fits +0 -0
  120. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/ob/ob001.fits +0 -0
  121. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/ob/ob002.fits +0 -0
  122. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/ob/ob003.fits +0 -0
  123. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/test_roi/ob.fits +0 -0
  124. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/fits/test_roi/sample.fits +0 -0
  125. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/format_not_suppored.txt +0 -0
  126. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/hdf5/dump_file.hdf5 +0 -0
  127. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/ob001.fits +0 -0
  128. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/df/df001.tif +0 -0
  129. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/df/df002.tif +0 -0
  130. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/df/df003.tif +0 -0
  131. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/ob/ob001.tif +0 -0
  132. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/ob/ob002.tif +0 -0
  133. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/ob/ob003.tif +0 -0
  134. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/sample_with_gamma/image001.tif +0 -0
  135. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/special_ob/ob_0001_2rois.tiff +0 -0
  136. {neunorm-2.2.2 → neunorm-2.2.3}/archive/neunorm-1.x/tests/data/tif/special_sample/image_0001_2rois.tiff +0 -0
  137. {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
  138. {neunorm-2.2.2 → neunorm-2.2.3}/codecov.yaml +0 -0
  139. {neunorm-2.2.2 → neunorm-2.2.3}/docs/api.rst +0 -0
  140. {neunorm-2.2.2 → neunorm-2.2.3}/docs/conf.py +0 -0
  141. {neunorm-2.2.2 → neunorm-2.2.3}/docs/development/DEVELOPMENT_PLAN.md +0 -0
  142. {neunorm-2.2.2 → neunorm-2.2.3}/docs/index.md +0 -0
  143. {neunorm-2.2.2 → neunorm-2.2.3}/docs/migration.md +0 -0
  144. {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/README.md +0 -0
  145. {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/mars_ccd_cmos.md +0 -0
  146. {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/mars_tpx3.md +0 -0
  147. {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/venus_ccd_cmos.md +0 -0
  148. {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/venus_tpx1.md +0 -0
  149. {neunorm-2.2.2 → neunorm-2.2.3}/docs/workflows/venus_tpx3.md +0 -0
  150. {neunorm-2.2.2 → neunorm-2.2.3}/examples/pulse_reconstruction_explained.ipynb +0 -0
  151. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/__init__.py +0 -0
  152. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/__init__.py +0 -0
  153. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/core.py +0 -0
  154. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/roi.py +0 -0
  155. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/data_models/tof.py +0 -0
  156. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/exporters/__init__.py +0 -0
  157. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/exporters/hdf5_writer.py +0 -0
  158. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/exporters/tiff_writer.py +0 -0
  159. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/filters/__init__.py +0 -0
  160. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/filters/gamma_filter.py +0 -0
  161. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/__init__.py +0 -0
  162. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/event_loader.py +0 -0
  163. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/fits_loader.py +0 -0
  164. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/metadata_loader.py +0 -0
  165. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/stack_loader.py +0 -0
  166. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/loaders/tiff_loader.py +0 -0
  167. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/__init__.py +0 -0
  168. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/mars_ccd.py +0 -0
  169. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/mars_tpx3.py +0 -0
  170. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_ccd.py +0 -0
  171. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_tpx1.py +0 -0
  172. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_tpx3_event.py +0 -0
  173. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/pipelines/venus_tpx3_histogram.py +0 -0
  174. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/__init__.py +0 -0
  175. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/air_region_corrector.py +0 -0
  176. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/dark_corrector.py +0 -0
  177. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/normalizer.py +0 -0
  178. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/reference_preparer.py +0 -0
  179. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/roi_clipper.py +0 -0
  180. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/run_combiner.py +0 -0
  181. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/spatial_rebinner.py +0 -0
  182. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/processing/uncertainty_calculator.py +0 -0
  183. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/__init__.py +0 -0
  184. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/binning.py +0 -0
  185. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/coordinate_converter.py +0 -0
  186. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/event_converter.py +0 -0
  187. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/histogram_rebinner.py +0 -0
  188. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/pixel_detector.py +0 -0
  189. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/pulse_reconstruction.py +0 -0
  190. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/resonance.py +0 -0
  191. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/tof/statistics_analyzer.py +0 -0
  192. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/utils/__init__.py +0 -0
  193. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/utils/_numba_compat.py +0 -0
  194. {neunorm-2.2.2 → neunorm-2.2.3}/src/neunorm/utils/constants.py +0 -0
  195. {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/fits/sample/image001.fits +0 -0
  196. {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/fits/sample/image002.fits +0 -0
  197. {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/fits/sample/image003.fits +0 -0
  198. {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/tif/sample/image001.tif +0 -0
  199. {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/tif/sample/image002.tif +0 -0
  200. {neunorm-2.2.2 → neunorm-2.2.3}/tests/data/tif/sample/image003.tif +0 -0
  201. {neunorm-2.2.2 → neunorm-2.2.3}/tests/integration/test_tof_pipeline.py +0 -0
  202. {neunorm-2.2.2 → neunorm-2.2.3}/tests/neunorm/test_version.py +0 -0
  203. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_air_region_corrector.py +0 -0
  204. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_analyze_statistics.py +0 -0
  205. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_background_roi_pooled.py +0 -0
  206. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_binning_config.py +0 -0
  207. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_binning_conversions.py +0 -0
  208. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_constants.py +0 -0
  209. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_dark_corrector.py +0 -0
  210. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_division_by_zero_guards.py +0 -0
  211. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_event_converter.py +0 -0
  212. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_event_loader.py +0 -0
  213. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_eventdata_auto_validation.py +0 -0
  214. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_fits_loader.py +0 -0
  215. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_gamma_filter.py +0 -0
  216. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_hdf5_writer.py +0 -0
  217. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_mars_ccd.py +0 -0
  218. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_mars_tpx3.py +0 -0
  219. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_metadata_loader.py +0 -0
  220. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_normalizer.py +0 -0
  221. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_numba_compat.py +0 -0
  222. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_parallel_processing.py +0 -0
  223. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_pixel_detector.py +0 -0
  224. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_pulse_reconstruction.py +0 -0
  225. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_rebin_spatial.py +0 -0
  226. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_rebin_tof.py +0 -0
  227. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_reference_preparer.py +0 -0
  228. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_refine_boundaries_jit.py +0 -0
  229. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_remaining_jit.py +0 -0
  230. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_resonance_detection.py +0 -0
  231. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_roi.py +0 -0
  232. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_roi_clipper.py +0 -0
  233. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_run_combiner.py +0 -0
  234. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_tiff_loader.py +0 -0
  235. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_tiff_writer.py +0 -0
  236. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_uncertainty.py +0 -0
  237. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_variance_propagation_fix.py +0 -0
  238. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_venus_ccd.py +0 -0
  239. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_venus_tpx1.py +0 -0
  240. {neunorm-2.2.2 → neunorm-2.2.3}/tests/unit/test_venus_tpx3_event.py +0 -0
  241. {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@5185adfbffb4bd703da3010310260805d89ebb11 # v0.9.6
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: true
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@5185adfbffb4bd703da3010310260805d89ebb11 # v0.9.6
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@5185adfbffb4bd703da3010310260805d89ebb11 # v0.9.6
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@5185adfbffb4bd703da3010310260805d89ebb11 # v0.9.6
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@5185adfbffb4bd703da3010310260805d89ebb11 # v0.9.6
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@5185adfbffb4bd703da3010310260805d89ebb11 # v0.9.6
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: ${{ secrets.GITHUB_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
@@ -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.15.20
20
+ rev: v0.15.21
21
21
  hooks:
22
22
  - id: ruff-check
23
23
  args: [--fix, --exit-non-zero-on-fix]
@@ -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.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