dkist-processing-visp 5.8.6__tar.gz → 5.9.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.
Files changed (122) hide show
  1. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/CHANGELOG.rst +9 -0
  2. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/PKG-INFO +24 -23
  3. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/corrections.py +18 -83
  4. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_geometric.py +25 -7
  5. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/PKG-INFO +24 -23
  6. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/requires.txt +23 -22
  7. dkist_processing_visp-5.9.0/dkist_processing_visp.egg-info/scm_version.json +8 -0
  8. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/pyproject.toml +25 -24
  9. dkist_processing_visp-5.8.6/dkist_processing_visp.egg-info/scm_version.json +0 -8
  10. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/.gitignore +0 -0
  11. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/.pre-commit-config.yaml +0 -0
  12. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/.readthedocs.yml +0 -0
  13. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/.rovodev/.review-agent.md +0 -0
  14. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/.snyk +0 -0
  15. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/README.rst +0 -0
  16. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/SCIENCE_CHANGELOG.rst +0 -0
  17. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/bitbucket-pipelines.yml +0 -0
  18. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/changelog/.gitempty +0 -0
  19. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/__init__.py +0 -0
  20. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/config.py +0 -0
  21. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/fonts/Lato-Regular.ttf +0 -0
  22. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/__init__.py +0 -0
  23. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/constants.py +0 -0
  24. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/dataset_extras.py +0 -0
  25. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/fits_access.py +0 -0
  26. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/metric_code.py +0 -0
  27. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/parameters.py +0 -0
  28. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/tags.py +0 -0
  29. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/task_name.py +0 -0
  30. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/__init__.py +0 -0
  31. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/map_repeats.py +0 -0
  32. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/modulator_states.py +0 -0
  33. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/polarimeter_mode.py +0 -0
  34. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/raster_step.py +0 -0
  35. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/spectrograph_configuration.py +0 -0
  36. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/time.py +0 -0
  37. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/visp_l0_fits_access.py +0 -0
  38. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/visp_l1_fits_access.py +0 -0
  39. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/__init__.py +0 -0
  40. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/assemble_movie.py +0 -0
  41. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/background_light.py +0 -0
  42. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/dark.py +0 -0
  43. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/geometric.py +0 -0
  44. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/instrument_polarization.py +0 -0
  45. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/l1_output_data.py +0 -0
  46. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/lamp.py +0 -0
  47. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/make_movie_frames.py +0 -0
  48. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/__init__.py +0 -0
  49. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/beam_access.py +0 -0
  50. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/downsample.py +0 -0
  51. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/parse.py +0 -0
  52. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/polcal_as_science.py +0 -0
  53. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/quality_metrics.py +0 -0
  54. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/science.py +0 -0
  55. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/solar.py +0 -0
  56. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/visp_base.py +0 -0
  57. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/wavelength_calibration.py +0 -0
  58. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/write_dataset_extras.py +0 -0
  59. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/write_l1.py +0 -0
  60. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/README.rst +0 -0
  61. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/__init__.py +0 -0
  62. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/conftest.py +0 -0
  63. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/header_models.py +0 -0
  64. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/__init__.py +0 -0
  65. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  66. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
  67. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
  68. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  69. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
  70. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_assemble_movie.py +0 -0
  71. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_assemble_quality.py +0 -0
  72. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_background_light.py +0 -0
  73. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_dark.py +0 -0
  74. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_downsample.py +0 -0
  75. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_fits_access.py +0 -0
  76. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_instrument_polarization.py +0 -0
  77. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_lamp.py +0 -0
  78. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_make_movie_frames.py +0 -0
  79. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_map_repeats.py +0 -0
  80. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_parameters.py +0 -0
  81. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_parse.py +0 -0
  82. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_polcal_as_science.py +0 -0
  83. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_quality.py +0 -0
  84. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_science.py +0 -0
  85. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_solar.py +0 -0
  86. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_trial_create_quality_report.py +0 -0
  87. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_visp_base.py +0 -0
  88. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_visp_constants.py +0 -0
  89. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_wavelength_calibration.py +0 -0
  90. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_workflows.py +0 -0
  91. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_write_dataset_extras.py +0 -0
  92. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_write_l1.py +0 -0
  93. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/__init__.py +0 -0
  94. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/l0_processing.py +0 -0
  95. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/single_task_workflows.py +0 -0
  96. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/trial_workflows.py +0 -0
  97. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/SOURCES.txt +0 -0
  98. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/dependency_links.txt +0 -0
  99. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/scm_file_list.json +0 -0
  100. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/top_level.txt +0 -0
  101. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/Makefile +0 -0
  102. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/background_light.rst +0 -0
  103. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/changelog.rst +0 -0
  104. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/conf.py +0 -0
  105. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/dataset_extras.rst +0 -0
  106. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/gain_correction.rst +0 -0
  107. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/geometric.rst +0 -0
  108. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/index.rst +0 -0
  109. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/l0_to_l1_visp.rst +0 -0
  110. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/l0_to_l1_visp_full-trial.rst +0 -0
  111. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/landing_page.rst +0 -0
  112. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/make.bat +0 -0
  113. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/polarization_calibration.rst +0 -0
  114. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/requirements.txt +0 -0
  115. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/requirements_table.rst +0 -0
  116. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/science_calibration.rst +0 -0
  117. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/scientific_changelog.rst +0 -0
  118. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/docs/wavelength_calibration.rst +0 -0
  119. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/licenses/LICENSE.rst +0 -0
  120. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/science_towncrier.sh +0 -0
  121. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/setup.cfg +0 -0
  122. {dkist_processing_visp-5.8.6 → dkist_processing_visp-5.9.0}/towncrier_science.toml +0 -0
@@ -1,3 +1,12 @@
1
+ v5.9.0 (2026-10-12)
2
+ ===================
3
+
4
+ Misc
5
+ ----
6
+
7
+ - Remove ``_geometry_inverse_transform`` and updated ``corrections_correct_geometry`` to delegate directly to ``dkist-processing-math``'s ``apply_affine_transform`` which handles array application, non-finite value replacement, and matrix caching. Corrected output is numerically unchanged. (`#331 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/331>`__)
8
+
9
+
1
10
  v5.8.6 (2026-10-08)
2
11
  ===================
3
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.8.6
3
+ Version: 5.9.0
4
4
  Summary: Science processing code for the ViSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/x-rst
16
16
  Requires-Dist: dkist-processing-common==14.6.0
17
- Requires-Dist: dkist-processing-math==2.2.3
17
+ Requires-Dist: dkist-processing-math==3.0.0
18
18
  Requires-Dist: dkist-processing-pac==3.1.2
19
19
  Requires-Dist: dkist-header-validator==6.0.0
20
20
  Requires-Dist: dkist-fits-specifications==4.30.0
@@ -80,7 +80,7 @@ Requires-Dist: Send2Trash==2.1.0; extra == "frozen"
80
80
  Requires-Dist: a2wsgi==1.10.10; extra == "frozen"
81
81
  Requires-Dist: aioftp==0.28.3; extra == "frozen"
82
82
  Requires-Dist: aiohappyeyeballs==2.7.1; extra == "frozen"
83
- Requires-Dist: aiohttp==3.14.4; extra == "frozen"
83
+ Requires-Dist: aiohttp==3.14.5; extra == "frozen"
84
84
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
85
85
  Requires-Dist: aiosmtplib==5.1.3; extra == "frozen"
86
86
  Requires-Dist: aiosqlite==0.22.1; extra == "frozen"
@@ -99,6 +99,7 @@ Requires-Dist: apache-airflow-providers-postgres==7.1.0; extra == "frozen"
99
99
  Requires-Dist: apache-airflow-providers-smtp==3.1.0; extra == "frozen"
100
100
  Requires-Dist: apache-airflow-providers-standard==1.20.0; extra == "frozen"
101
101
  Requires-Dist: apache-airflow-task-sdk==1.3.1; extra == "frozen"
102
+ Requires-Dist: appnope==1.0.0; extra == "frozen"
102
103
  Requires-Dist: argcomplete==3.7.2; extra == "frozen"
103
104
  Requires-Dist: argon2-cffi==25.1.0; extra == "frozen"
104
105
  Requires-Dist: argon2-cffi-bindings==26.1.0; extra == "frozen"
@@ -108,17 +109,17 @@ Requires-Dist: asdf_standard==1.5.0; extra == "frozen"
108
109
  Requires-Dist: asgiref==3.12.1; extra == "frozen"
109
110
  Requires-Dist: asteval==1.0.10; extra == "frozen"
110
111
  Requires-Dist: astropy==7.0.2; extra == "frozen"
111
- Requires-Dist: astropy-iers-data==0.2026.10.5.1.0.7; extra == "frozen"
112
+ Requires-Dist: astropy-iers-data==0.2026.10.12.1.3.27; extra == "frozen"
112
113
  Requires-Dist: asttokens==3.0.2; extra == "frozen"
113
- Requires-Dist: async-lru==2.3.0; extra == "frozen"
114
+ Requires-Dist: async-lru==2.4.0; extra == "frozen"
114
115
  Requires-Dist: asyncpg==0.32.0; extra == "frozen"
115
116
  Requires-Dist: attrs==26.1.0; extra == "frozen"
116
117
  Requires-Dist: babel==2.18.0; extra == "frozen"
117
118
  Requires-Dist: beautifulsoup4==4.15.0; extra == "frozen"
118
119
  Requires-Dist: billiard==4.3.1; extra == "frozen"
119
120
  Requires-Dist: bleach==6.4.0; extra == "frozen"
120
- Requires-Dist: boto3==1.43.109; extra == "frozen"
121
- Requires-Dist: botocore==1.43.109; extra == "frozen"
121
+ Requires-Dist: boto3==1.43.112; extra == "frozen"
122
+ Requires-Dist: botocore==1.43.112; extra == "frozen"
122
123
  Requires-Dist: cachetools==7.2.1; extra == "frozen"
123
124
  Requires-Dist: cadwyn==7.0.0; extra == "frozen"
124
125
  Requires-Dist: celery==5.6.3; extra == "frozen"
@@ -144,15 +145,15 @@ Requires-Dist: dill==0.4.1; extra == "frozen"
144
145
  Requires-Dist: dkist-header-validator==6.0.0; extra == "frozen"
145
146
  Requires-Dist: dkist-processing-common==14.6.0; extra == "frozen"
146
147
  Requires-Dist: dkist-processing-core==7.5.0; extra == "frozen"
147
- Requires-Dist: dkist-processing-math==2.2.3; extra == "frozen"
148
+ Requires-Dist: dkist-processing-math==3.0.0; extra == "frozen"
148
149
  Requires-Dist: dkist-processing-pac==3.1.2; extra == "frozen"
149
- Requires-Dist: dkist-processing-visp==5.8.6; extra == "frozen"
150
+ Requires-Dist: dkist-processing-visp==5.9.0; extra == "frozen"
150
151
  Requires-Dist: dkist-service-configuration==4.3.0; extra == "frozen"
151
152
  Requires-Dist: dkist-spectral-lines==3.0.1; extra == "frozen"
152
153
  Requires-Dist: dkist_fits_specifications==4.30.0; extra == "frozen"
153
- Requires-Dist: dnspython==2.8.0; extra == "frozen"
154
+ Requires-Dist: dnspython==2.9.0; extra == "frozen"
154
155
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
155
- Requires-Dist: executing==2.2.1; extra == "frozen"
156
+ Requires-Dist: executing==2.3.0; extra == "frozen"
156
157
  Requires-Dist: fastapi==0.136.3; extra == "frozen"
157
158
  Requires-Dist: fastapi-cli==0.0.32; extra == "frozen"
158
159
  Requires-Dist: fastjsonschema==2.22.2; extra == "frozen"
@@ -169,7 +170,7 @@ Requires-Dist: greenlet==3.5.6; extra == "frozen"
169
170
  Requires-Dist: grpcio==1.84.0; extra == "frozen"
170
171
  Requires-Dist: h11==0.16.0; extra == "frozen"
171
172
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
172
- Requires-Dist: httptools==0.8.0; extra == "frozen"
173
+ Requires-Dist: httptools==0.9.0; extra == "frozen"
173
174
  Requires-Dist: httpx==0.28.1; extra == "frozen"
174
175
  Requires-Dist: humanize==4.16.0; extra == "frozen"
175
176
  Requires-Dist: idna==3.20; extra == "frozen"
@@ -180,11 +181,11 @@ Requires-Dist: ipython==9.17.1; extra == "frozen"
180
181
  Requires-Dist: ipython_pygments_lexers==1.1.1; extra == "frozen"
181
182
  Requires-Dist: isoduration==20.11.0; extra == "frozen"
182
183
  Requires-Dist: itsdangerous==2.2.0; extra == "frozen"
183
- Requires-Dist: jedi==0.20.0; extra == "frozen"
184
+ Requires-Dist: jedi==0.20.1; extra == "frozen"
184
185
  Requires-Dist: jmespath==1.1.0; extra == "frozen"
185
186
  Requires-Dist: joblib==1.6.0; extra == "frozen"
186
- Requires-Dist: json5==0.16.0; extra == "frozen"
187
- Requires-Dist: jsonpointer==3.2.0; extra == "frozen"
187
+ Requires-Dist: json5==0.17.3; extra == "frozen"
188
+ Requires-Dist: jsonpointer==3.2.1; extra == "frozen"
188
189
  Requires-Dist: jsonschema==4.26.0; extra == "frozen"
189
190
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
190
191
  Requires-Dist: jupyter-events==0.12.1; extra == "frozen"
@@ -216,10 +217,10 @@ Requires-Dist: mistune==3.3.4; extra == "frozen"
216
217
  Requires-Dist: more-itertools==11.1.0; extra == "frozen"
217
218
  Requires-Dist: moviepy==2.1.2; extra == "frozen"
218
219
  Requires-Dist: msgspec==0.22.0; extra == "frozen"
219
- Requires-Dist: multidict==6.9.1; extra == "frozen"
220
+ Requires-Dist: multidict==7.1.0; extra == "frozen"
220
221
  Requires-Dist: natsort==8.4.0; extra == "frozen"
221
222
  Requires-Dist: nbclient==0.11.0; extra == "frozen"
222
- Requires-Dist: nbconvert==7.17.1; extra == "frozen"
223
+ Requires-Dist: nbconvert==7.17.2; extra == "frozen"
223
224
  Requires-Dist: nbformat==5.11.1; extra == "frozen"
224
225
  Requires-Dist: nest-asyncio2==1.7.4; extra == "frozen"
225
226
  Requires-Dist: networkx==3.7; extra == "frozen"
@@ -261,12 +262,12 @@ Requires-Dist: parfive==2.3.1; extra == "frozen"
261
262
  Requires-Dist: parso==0.8.7; extra == "frozen"
262
263
  Requires-Dist: pathlib_abc==0.5.2; extra == "frozen"
263
264
  Requires-Dist: pathspec==1.1.1; extra == "frozen"
264
- Requires-Dist: pendulum==3.2.0; extra == "frozen"
265
+ Requires-Dist: pendulum==3.3.0; extra == "frozen"
265
266
  Requires-Dist: pexpect==4.9.0; extra == "frozen"
266
267
  Requires-Dist: pika==1.4.4; extra == "frozen"
267
268
  Requires-Dist: pillow==10.4.0; extra == "frozen"
268
269
  Requires-Dist: pip==26.2.1; extra == "frozen"
269
- Requires-Dist: platformdirs==4.12.4; extra == "frozen"
270
+ Requires-Dist: platformdirs==4.13.0; extra == "frozen"
270
271
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
271
272
  Requires-Dist: pooch==1.9.0; extra == "frozen"
272
273
  Requires-Dist: proglog==0.1.12; extra == "frozen"
@@ -280,11 +281,11 @@ Requires-Dist: psycopg-binary==3.3.6; extra == "frozen"
280
281
  Requires-Dist: psycopg2-binary==2.9.13; extra == "frozen"
281
282
  Requires-Dist: ptyprocess==0.7.0; extra == "frozen"
282
283
  Requires-Dist: pure_eval==0.2.4; extra == "frozen"
283
- Requires-Dist: pycparser==3.1; extra == "frozen"
284
- Requires-Dist: pydantic==2.14.0; extra == "frozen"
284
+ Requires-Dist: pycparser==3.11; extra == "frozen"
285
+ Requires-Dist: pydantic==2.14.1; extra == "frozen"
285
286
  Requires-Dist: pydantic-extra-types==2.11.1; extra == "frozen"
286
287
  Requires-Dist: pydantic-settings==2.15.0; extra == "frozen"
287
- Requires-Dist: pydantic_core==2.50.0; extra == "frozen"
288
+ Requires-Dist: pydantic_core==2.50.1; extra == "frozen"
288
289
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
289
290
  Requires-Dist: pygtrie==2.6.2; extra == "frozen"
290
291
  Requires-Dist: pyparsing==3.3.3; extra == "frozen"
@@ -316,7 +317,7 @@ Requires-Dist: shellingham==1.5.4; extra == "frozen"
316
317
  Requires-Dist: six==1.17.0; extra == "frozen"
317
318
  Requires-Dist: sniffio==1.3.1; extra == "frozen"
318
319
  Requires-Dist: solar-wavelength-calibration==2.0.4; extra == "frozen"
319
- Requires-Dist: soupsieve==2.10; extra == "frozen"
320
+ Requires-Dist: soupsieve==3.0.3; extra == "frozen"
320
321
  Requires-Dist: sqids==0.5.1; extra == "frozen"
321
322
  Requires-Dist: sqlparse==0.6.0; extra == "frozen"
322
323
  Requires-Dist: stack-data==0.6.3; extra == "frozen"
@@ -1,40 +1,16 @@
1
1
  """Helper for ViSP array corrections."""
2
2
 
3
- from typing import Generator
4
- from typing import Iterable
3
+ from collections.abc import Generator
4
+ from collections.abc import Iterable
5
5
 
6
6
  import numpy as np
7
7
  import scipy.ndimage as spnd
8
- from scipy.ndimage import affine_transform
8
+ from dkist_processing_math.transform import apply_affine_transform
9
9
 
10
10
 
11
11
  class CorrectionsMixin:
12
12
  """Mixin to provide support for various array corrections used by the workflow tasks."""
13
13
 
14
- @staticmethod
15
- def _geometry_inverse_transform(
16
- array_shape: tuple[int, ...], shift: np.ndarray, angle: float
17
- ) -> tuple[np.ndarray, np.ndarray]:
18
- """
19
- Build the inverse transform used by `scipy.ndimage.affine_transform`.
20
-
21
- The forward correction translates by `-shift` and then rotates by `-angle`
22
- about the array center. `affine_transform` instead wants the mapping from
23
- output coordinates back to input coordinates, so we supply the inverse
24
- rotation matrix and the corresponding center-preserving offset here.
25
- """
26
- cosine_angle = np.cos(angle)
27
- sine_angle = np.sin(angle)
28
- inverse_rotation_matrix = np.array(
29
- [[cosine_angle, -sine_angle], [sine_angle, cosine_angle]],
30
- dtype=np.float64,
31
- )
32
-
33
- rotation_center = 0.5 * (np.asarray(array_shape, dtype=np.float64) - 1.0)
34
- transform_offset = rotation_center + shift - inverse_rotation_matrix @ rotation_center
35
-
36
- return inverse_rotation_matrix, transform_offset
37
-
38
14
  @staticmethod
39
15
  def corrections_correct_geometry(
40
16
  arrays: Iterable[np.ndarray] | np.ndarray,
@@ -47,7 +23,8 @@ class CorrectionsMixin:
47
23
  """
48
24
  Shift and then rotate data.
49
25
 
50
- This method applies the inverse of the given shift and angle.
26
+ This method applies the inverse of the given shift and angle in a single interpolation
27
+ pass via `dkist_processing_math.transform.apply_affine_transform`.
51
28
 
52
29
  Parameters
53
30
  ----------
@@ -55,8 +32,8 @@ class CorrectionsMixin:
55
32
  2D array(s) containing the data for the un-shifted beam
56
33
 
57
34
  shift : np.ndarray
58
- The shift in the spectral dimension needed to "straighten" the spectra
59
- so a single wavelength is at the same pixel for all slit positions.
35
+ The (row, col) shift, in pixels, needed to bring this array into alignment with the
36
+ other modstates and beams.
60
37
 
61
38
  angle : float
62
39
  The angle (in radians) between slit hairlines and pixel axes.
@@ -78,65 +55,23 @@ class CorrectionsMixin:
78
55
  Used in conjunction with mode 'constant', the value outside
79
56
  the image boundaries.
80
57
 
81
-
82
58
  Returns
83
59
  -------
84
60
  Generator
85
61
  2D array(s) containing the data of the rotated and shifted beam
86
62
  """
87
- uncorrected_arrays = (arrays,) if isinstance(arrays, np.ndarray) else arrays
63
+ # `-shift` and `-angle` because the pipeline defines shift/angle as the distortion to
64
+ # correct for; the forward correction moves content in the opposite direction.
88
65
  shift = np.asarray(shift, dtype=np.float64)
89
-
90
- previous_array_shape = None
91
- inverse_transform_matrix = None
92
- transform_offset = None
93
-
94
- for array in uncorrected_arrays:
95
- input_array = np.asarray(array, dtype=np.float64)
96
-
97
- # `affine_transform` does not handle NaN and inf values well, so normalize them
98
- # before interpolation. We identify the finite pixels once and reuse those
99
- # results instead of rescanning the full array for each replacement case.
100
- finite_pixel_mask = np.isfinite(input_array)
101
- if not finite_pixel_mask.all():
102
- finite_pixel_values = input_array[finite_pixel_mask]
103
-
104
- if finite_pixel_values.size == 0:
105
- input_array.fill(cval if np.isfinite(cval) else np.nan)
106
- else:
107
- # Replace +inf, -inf, and NaN using the finite pixels we already
108
- # collected, and only computing the replacement values if necessary.
109
- positive_infinity_mask = np.isposinf(input_array)
110
- if positive_infinity_mask.any():
111
- input_array[positive_infinity_mask] = finite_pixel_values.max()
112
-
113
- negative_infinity_mask = np.isneginf(input_array)
114
- if negative_infinity_mask.any():
115
- input_array[negative_infinity_mask] = finite_pixel_values.min()
116
-
117
- nan_pixel_mask = np.isnan(input_array)
118
- if nan_pixel_mask.any():
119
- input_array[nan_pixel_mask] = np.nanmedian(input_array)
120
-
121
- if input_array.shape != previous_array_shape:
122
- inverse_transform_matrix, transform_offset = (
123
- CorrectionsMixin._geometry_inverse_transform(
124
- array_shape=input_array.shape,
125
- shift=shift,
126
- angle=angle,
127
- )
128
- )
129
- previous_array_shape = input_array.shape
130
-
131
- yield affine_transform(
132
- input_array,
133
- matrix=inverse_transform_matrix,
134
- offset=transform_offset,
135
- order=order,
136
- mode=mode,
137
- cval=cval,
138
- prefilter=(order > 1),
139
- )
66
+ yield from apply_affine_transform(
67
+ arrays,
68
+ shift=-shift,
69
+ angle=-angle,
70
+ order="shift_then_rotate",
71
+ interp_order=order,
72
+ mode=mode,
73
+ cval=cval,
74
+ )
140
75
 
141
76
  @staticmethod
142
77
  def corrections_remove_spec_geometry(
@@ -7,7 +7,7 @@ from dkist_processing_common._util.scratch import WorkflowFileSystem
7
7
  from dkist_processing_common.codecs.basemodel import basemodel_decoder
8
8
  from dkist_processing_common.codecs.fits import fits_array_decoder
9
9
  from dkist_processing_common.models.quality import TaskCount
10
- from dkist_processing_math import transform
10
+ from dkist_processing_math.transform import apply_affine_transform
11
11
 
12
12
  from dkist_processing_visp.models.tags import VispTag
13
13
  from dkist_processing_visp.tasks.geometric import GeometricCalibration
@@ -33,9 +33,13 @@ def make_solar_array_data(
33
33
  beam_list = []
34
34
  for beam in [1, 2]:
35
35
  true_solar = 10 * (np.ones(intermediate_shape) + modstate + beam)
36
+
36
37
  translated_solar = next(
37
- transform.translate_arrays(
38
- arrays=true_solar, translation=offsets[beam - 1][modstate - 1]
38
+ apply_affine_transform(
39
+ true_solar,
40
+ shift=np.asarray(offsets[beam - 1][modstate - 1]),
41
+ angle=0.0,
42
+ order="shift_then_rotate",
39
43
  )
40
44
  )
41
45
  translated_solar[translated_solar == 0] = 10 * (modstate + beam + 1)
@@ -44,7 +48,12 @@ def make_solar_array_data(
44
48
  translated_solar[:, 30] = 5.0
45
49
  translated_solar[:, 70] = 5.0
46
50
  distorted_solar = next(
47
- transform.rotate_arrays_about_point(arrays=translated_solar, angle=angles[beam - 1])
51
+ apply_affine_transform(
52
+ translated_solar,
53
+ shift=np.zeros(2),
54
+ angle=angles[beam - 1],
55
+ order="shift_then_rotate",
56
+ )
48
57
  )
49
58
  beam_list.append((distorted_solar + dark_signal) * num_raw_per_fpa)
50
59
 
@@ -111,9 +120,13 @@ def make_lamp_array_data(
111
120
  beam_list = []
112
121
  for beam in [1, 2]:
113
122
  true_lamp = 10 * (np.ones(intermediate_shape) + modstate + beam)
123
+
114
124
  translated_lamp = next(
115
- transform.translate_arrays(
116
- arrays=true_lamp, translation=offsets[beam - 1][modstate - 1]
125
+ apply_affine_transform(
126
+ true_lamp,
127
+ shift=np.asarray(offsets[beam - 1][modstate - 1]),
128
+ angle=0.0,
129
+ order="shift_then_rotate",
117
130
  )
118
131
  )
119
132
  translated_lamp[translated_lamp == 0] = 10 * (modstate + beam + 1)
@@ -124,7 +137,12 @@ def make_lamp_array_data(
124
137
  # Chop out part of the second hairline so the fitter has to skip over these pixels
125
138
  translated_lamp[5:9, 70] = 10 * (modstate + beam + 1)
126
139
  distorted_lamp = next(
127
- transform.rotate_arrays_about_point(arrays=translated_lamp, angle=angles[beam - 1])
140
+ apply_affine_transform(
141
+ translated_lamp,
142
+ shift=np.zeros(2),
143
+ angle=angles[beam - 1],
144
+ order="shift_then_rotate",
145
+ )
128
146
  )
129
147
  beam_list.append((distorted_lamp + dark_signal) * num_raw_per_fpa)
130
148
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.8.6
3
+ Version: 5.9.0
4
4
  Summary: Science processing code for the ViSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/x-rst
16
16
  Requires-Dist: dkist-processing-common==14.6.0
17
- Requires-Dist: dkist-processing-math==2.2.3
17
+ Requires-Dist: dkist-processing-math==3.0.0
18
18
  Requires-Dist: dkist-processing-pac==3.1.2
19
19
  Requires-Dist: dkist-header-validator==6.0.0
20
20
  Requires-Dist: dkist-fits-specifications==4.30.0
@@ -80,7 +80,7 @@ Requires-Dist: Send2Trash==2.1.0; extra == "frozen"
80
80
  Requires-Dist: a2wsgi==1.10.10; extra == "frozen"
81
81
  Requires-Dist: aioftp==0.28.3; extra == "frozen"
82
82
  Requires-Dist: aiohappyeyeballs==2.7.1; extra == "frozen"
83
- Requires-Dist: aiohttp==3.14.4; extra == "frozen"
83
+ Requires-Dist: aiohttp==3.14.5; extra == "frozen"
84
84
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
85
85
  Requires-Dist: aiosmtplib==5.1.3; extra == "frozen"
86
86
  Requires-Dist: aiosqlite==0.22.1; extra == "frozen"
@@ -99,6 +99,7 @@ Requires-Dist: apache-airflow-providers-postgres==7.1.0; extra == "frozen"
99
99
  Requires-Dist: apache-airflow-providers-smtp==3.1.0; extra == "frozen"
100
100
  Requires-Dist: apache-airflow-providers-standard==1.20.0; extra == "frozen"
101
101
  Requires-Dist: apache-airflow-task-sdk==1.3.1; extra == "frozen"
102
+ Requires-Dist: appnope==1.0.0; extra == "frozen"
102
103
  Requires-Dist: argcomplete==3.7.2; extra == "frozen"
103
104
  Requires-Dist: argon2-cffi==25.1.0; extra == "frozen"
104
105
  Requires-Dist: argon2-cffi-bindings==26.1.0; extra == "frozen"
@@ -108,17 +109,17 @@ Requires-Dist: asdf_standard==1.5.0; extra == "frozen"
108
109
  Requires-Dist: asgiref==3.12.1; extra == "frozen"
109
110
  Requires-Dist: asteval==1.0.10; extra == "frozen"
110
111
  Requires-Dist: astropy==7.0.2; extra == "frozen"
111
- Requires-Dist: astropy-iers-data==0.2026.10.5.1.0.7; extra == "frozen"
112
+ Requires-Dist: astropy-iers-data==0.2026.10.12.1.3.27; extra == "frozen"
112
113
  Requires-Dist: asttokens==3.0.2; extra == "frozen"
113
- Requires-Dist: async-lru==2.3.0; extra == "frozen"
114
+ Requires-Dist: async-lru==2.4.0; extra == "frozen"
114
115
  Requires-Dist: asyncpg==0.32.0; extra == "frozen"
115
116
  Requires-Dist: attrs==26.1.0; extra == "frozen"
116
117
  Requires-Dist: babel==2.18.0; extra == "frozen"
117
118
  Requires-Dist: beautifulsoup4==4.15.0; extra == "frozen"
118
119
  Requires-Dist: billiard==4.3.1; extra == "frozen"
119
120
  Requires-Dist: bleach==6.4.0; extra == "frozen"
120
- Requires-Dist: boto3==1.43.109; extra == "frozen"
121
- Requires-Dist: botocore==1.43.109; extra == "frozen"
121
+ Requires-Dist: boto3==1.43.112; extra == "frozen"
122
+ Requires-Dist: botocore==1.43.112; extra == "frozen"
122
123
  Requires-Dist: cachetools==7.2.1; extra == "frozen"
123
124
  Requires-Dist: cadwyn==7.0.0; extra == "frozen"
124
125
  Requires-Dist: celery==5.6.3; extra == "frozen"
@@ -144,15 +145,15 @@ Requires-Dist: dill==0.4.1; extra == "frozen"
144
145
  Requires-Dist: dkist-header-validator==6.0.0; extra == "frozen"
145
146
  Requires-Dist: dkist-processing-common==14.6.0; extra == "frozen"
146
147
  Requires-Dist: dkist-processing-core==7.5.0; extra == "frozen"
147
- Requires-Dist: dkist-processing-math==2.2.3; extra == "frozen"
148
+ Requires-Dist: dkist-processing-math==3.0.0; extra == "frozen"
148
149
  Requires-Dist: dkist-processing-pac==3.1.2; extra == "frozen"
149
- Requires-Dist: dkist-processing-visp==5.8.6; extra == "frozen"
150
+ Requires-Dist: dkist-processing-visp==5.9.0; extra == "frozen"
150
151
  Requires-Dist: dkist-service-configuration==4.3.0; extra == "frozen"
151
152
  Requires-Dist: dkist-spectral-lines==3.0.1; extra == "frozen"
152
153
  Requires-Dist: dkist_fits_specifications==4.30.0; extra == "frozen"
153
- Requires-Dist: dnspython==2.8.0; extra == "frozen"
154
+ Requires-Dist: dnspython==2.9.0; extra == "frozen"
154
155
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
155
- Requires-Dist: executing==2.2.1; extra == "frozen"
156
+ Requires-Dist: executing==2.3.0; extra == "frozen"
156
157
  Requires-Dist: fastapi==0.136.3; extra == "frozen"
157
158
  Requires-Dist: fastapi-cli==0.0.32; extra == "frozen"
158
159
  Requires-Dist: fastjsonschema==2.22.2; extra == "frozen"
@@ -169,7 +170,7 @@ Requires-Dist: greenlet==3.5.6; extra == "frozen"
169
170
  Requires-Dist: grpcio==1.84.0; extra == "frozen"
170
171
  Requires-Dist: h11==0.16.0; extra == "frozen"
171
172
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
172
- Requires-Dist: httptools==0.8.0; extra == "frozen"
173
+ Requires-Dist: httptools==0.9.0; extra == "frozen"
173
174
  Requires-Dist: httpx==0.28.1; extra == "frozen"
174
175
  Requires-Dist: humanize==4.16.0; extra == "frozen"
175
176
  Requires-Dist: idna==3.20; extra == "frozen"
@@ -180,11 +181,11 @@ Requires-Dist: ipython==9.17.1; extra == "frozen"
180
181
  Requires-Dist: ipython_pygments_lexers==1.1.1; extra == "frozen"
181
182
  Requires-Dist: isoduration==20.11.0; extra == "frozen"
182
183
  Requires-Dist: itsdangerous==2.2.0; extra == "frozen"
183
- Requires-Dist: jedi==0.20.0; extra == "frozen"
184
+ Requires-Dist: jedi==0.20.1; extra == "frozen"
184
185
  Requires-Dist: jmespath==1.1.0; extra == "frozen"
185
186
  Requires-Dist: joblib==1.6.0; extra == "frozen"
186
- Requires-Dist: json5==0.16.0; extra == "frozen"
187
- Requires-Dist: jsonpointer==3.2.0; extra == "frozen"
187
+ Requires-Dist: json5==0.17.3; extra == "frozen"
188
+ Requires-Dist: jsonpointer==3.2.1; extra == "frozen"
188
189
  Requires-Dist: jsonschema==4.26.0; extra == "frozen"
189
190
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
190
191
  Requires-Dist: jupyter-events==0.12.1; extra == "frozen"
@@ -216,10 +217,10 @@ Requires-Dist: mistune==3.3.4; extra == "frozen"
216
217
  Requires-Dist: more-itertools==11.1.0; extra == "frozen"
217
218
  Requires-Dist: moviepy==2.1.2; extra == "frozen"
218
219
  Requires-Dist: msgspec==0.22.0; extra == "frozen"
219
- Requires-Dist: multidict==6.9.1; extra == "frozen"
220
+ Requires-Dist: multidict==7.1.0; extra == "frozen"
220
221
  Requires-Dist: natsort==8.4.0; extra == "frozen"
221
222
  Requires-Dist: nbclient==0.11.0; extra == "frozen"
222
- Requires-Dist: nbconvert==7.17.1; extra == "frozen"
223
+ Requires-Dist: nbconvert==7.17.2; extra == "frozen"
223
224
  Requires-Dist: nbformat==5.11.1; extra == "frozen"
224
225
  Requires-Dist: nest-asyncio2==1.7.4; extra == "frozen"
225
226
  Requires-Dist: networkx==3.7; extra == "frozen"
@@ -261,12 +262,12 @@ Requires-Dist: parfive==2.3.1; extra == "frozen"
261
262
  Requires-Dist: parso==0.8.7; extra == "frozen"
262
263
  Requires-Dist: pathlib_abc==0.5.2; extra == "frozen"
263
264
  Requires-Dist: pathspec==1.1.1; extra == "frozen"
264
- Requires-Dist: pendulum==3.2.0; extra == "frozen"
265
+ Requires-Dist: pendulum==3.3.0; extra == "frozen"
265
266
  Requires-Dist: pexpect==4.9.0; extra == "frozen"
266
267
  Requires-Dist: pika==1.4.4; extra == "frozen"
267
268
  Requires-Dist: pillow==10.4.0; extra == "frozen"
268
269
  Requires-Dist: pip==26.2.1; extra == "frozen"
269
- Requires-Dist: platformdirs==4.12.4; extra == "frozen"
270
+ Requires-Dist: platformdirs==4.13.0; extra == "frozen"
270
271
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
271
272
  Requires-Dist: pooch==1.9.0; extra == "frozen"
272
273
  Requires-Dist: proglog==0.1.12; extra == "frozen"
@@ -280,11 +281,11 @@ Requires-Dist: psycopg-binary==3.3.6; extra == "frozen"
280
281
  Requires-Dist: psycopg2-binary==2.9.13; extra == "frozen"
281
282
  Requires-Dist: ptyprocess==0.7.0; extra == "frozen"
282
283
  Requires-Dist: pure_eval==0.2.4; extra == "frozen"
283
- Requires-Dist: pycparser==3.1; extra == "frozen"
284
- Requires-Dist: pydantic==2.14.0; extra == "frozen"
284
+ Requires-Dist: pycparser==3.11; extra == "frozen"
285
+ Requires-Dist: pydantic==2.14.1; extra == "frozen"
285
286
  Requires-Dist: pydantic-extra-types==2.11.1; extra == "frozen"
286
287
  Requires-Dist: pydantic-settings==2.15.0; extra == "frozen"
287
- Requires-Dist: pydantic_core==2.50.0; extra == "frozen"
288
+ Requires-Dist: pydantic_core==2.50.1; extra == "frozen"
288
289
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
289
290
  Requires-Dist: pygtrie==2.6.2; extra == "frozen"
290
291
  Requires-Dist: pyparsing==3.3.3; extra == "frozen"
@@ -316,7 +317,7 @@ Requires-Dist: shellingham==1.5.4; extra == "frozen"
316
317
  Requires-Dist: six==1.17.0; extra == "frozen"
317
318
  Requires-Dist: sniffio==1.3.1; extra == "frozen"
318
319
  Requires-Dist: solar-wavelength-calibration==2.0.4; extra == "frozen"
319
- Requires-Dist: soupsieve==2.10; extra == "frozen"
320
+ Requires-Dist: soupsieve==3.0.3; extra == "frozen"
320
321
  Requires-Dist: sqids==0.5.1; extra == "frozen"
321
322
  Requires-Dist: sqlparse==0.6.0; extra == "frozen"
322
323
  Requires-Dist: stack-data==0.6.3; extra == "frozen"
@@ -1,5 +1,5 @@
1
1
  dkist-processing-common==14.6.0
2
- dkist-processing-math==2.2.3
2
+ dkist-processing-math==3.0.0
3
3
  dkist-processing-pac==3.1.2
4
4
  dkist-header-validator==6.0.0
5
5
  dkist-fits-specifications==4.30.0
@@ -45,7 +45,7 @@ Send2Trash==2.1.0
45
45
  a2wsgi==1.10.10
46
46
  aioftp==0.28.3
47
47
  aiohappyeyeballs==2.7.1
48
- aiohttp==3.14.4
48
+ aiohttp==3.14.5
49
49
  aiosignal==1.4.0
50
50
  aiosmtplib==5.1.3
51
51
  aiosqlite==0.22.1
@@ -64,6 +64,7 @@ apache-airflow-providers-postgres==7.1.0
64
64
  apache-airflow-providers-smtp==3.1.0
65
65
  apache-airflow-providers-standard==1.20.0
66
66
  apache-airflow-task-sdk==1.3.1
67
+ appnope==1.0.0
67
68
  argcomplete==3.7.2
68
69
  argon2-cffi==25.1.0
69
70
  argon2-cffi-bindings==26.1.0
@@ -73,17 +74,17 @@ asdf_standard==1.5.0
73
74
  asgiref==3.12.1
74
75
  asteval==1.0.10
75
76
  astropy==7.0.2
76
- astropy-iers-data==0.2026.10.5.1.0.7
77
+ astropy-iers-data==0.2026.10.12.1.3.27
77
78
  asttokens==3.0.2
78
- async-lru==2.3.0
79
+ async-lru==2.4.0
79
80
  asyncpg==0.32.0
80
81
  attrs==26.1.0
81
82
  babel==2.18.0
82
83
  beautifulsoup4==4.15.0
83
84
  billiard==4.3.1
84
85
  bleach==6.4.0
85
- boto3==1.43.109
86
- botocore==1.43.109
86
+ boto3==1.43.112
87
+ botocore==1.43.112
87
88
  cachetools==7.2.1
88
89
  cadwyn==7.0.0
89
90
  celery==5.6.3
@@ -109,15 +110,15 @@ dill==0.4.1
109
110
  dkist-header-validator==6.0.0
110
111
  dkist-processing-common==14.6.0
111
112
  dkist-processing-core==7.5.0
112
- dkist-processing-math==2.2.3
113
+ dkist-processing-math==3.0.0
113
114
  dkist-processing-pac==3.1.2
114
- dkist-processing-visp==5.8.6
115
+ dkist-processing-visp==5.9.0
115
116
  dkist-service-configuration==4.3.0
116
117
  dkist-spectral-lines==3.0.1
117
118
  dkist_fits_specifications==4.30.0
118
- dnspython==2.8.0
119
+ dnspython==2.9.0
119
120
  email-validator==2.3.0
120
- executing==2.2.1
121
+ executing==2.3.0
121
122
  fastapi==0.136.3
122
123
  fastapi-cli==0.0.32
123
124
  fastjsonschema==2.22.2
@@ -134,7 +135,7 @@ greenlet==3.5.6
134
135
  grpcio==1.84.0
135
136
  h11==0.16.0
136
137
  httpcore==1.0.9
137
- httptools==0.8.0
138
+ httptools==0.9.0
138
139
  httpx==0.28.1
139
140
  humanize==4.16.0
140
141
  idna==3.20
@@ -145,11 +146,11 @@ ipython==9.17.1
145
146
  ipython_pygments_lexers==1.1.1
146
147
  isoduration==20.11.0
147
148
  itsdangerous==2.2.0
148
- jedi==0.20.0
149
+ jedi==0.20.1
149
150
  jmespath==1.1.0
150
151
  joblib==1.6.0
151
- json5==0.16.0
152
- jsonpointer==3.2.0
152
+ json5==0.17.3
153
+ jsonpointer==3.2.1
153
154
  jsonschema==4.26.0
154
155
  jsonschema-specifications==2025.9.1
155
156
  jupyter-events==0.12.1
@@ -181,10 +182,10 @@ mistune==3.3.4
181
182
  more-itertools==11.1.0
182
183
  moviepy==2.1.2
183
184
  msgspec==0.22.0
184
- multidict==6.9.1
185
+ multidict==7.1.0
185
186
  natsort==8.4.0
186
187
  nbclient==0.11.0
187
- nbconvert==7.17.1
188
+ nbconvert==7.17.2
188
189
  nbformat==5.11.1
189
190
  nest-asyncio2==1.7.4
190
191
  networkx==3.7
@@ -226,12 +227,12 @@ parfive==2.3.1
226
227
  parso==0.8.7
227
228
  pathlib_abc==0.5.2
228
229
  pathspec==1.1.1
229
- pendulum==3.2.0
230
+ pendulum==3.3.0
230
231
  pexpect==4.9.0
231
232
  pika==1.4.4
232
233
  pillow==10.4.0
233
234
  pip==26.2.1
234
- platformdirs==4.12.4
235
+ platformdirs==4.13.0
235
236
  pluggy==1.6.0
236
237
  pooch==1.9.0
237
238
  proglog==0.1.12
@@ -245,11 +246,11 @@ psycopg-binary==3.3.6
245
246
  psycopg2-binary==2.9.13
246
247
  ptyprocess==0.7.0
247
248
  pure_eval==0.2.4
248
- pycparser==3.1
249
- pydantic==2.14.0
249
+ pycparser==3.11
250
+ pydantic==2.14.1
250
251
  pydantic-extra-types==2.11.1
251
252
  pydantic-settings==2.15.0
252
- pydantic_core==2.50.0
253
+ pydantic_core==2.50.1
253
254
  pyerfa==2.0.1.5
254
255
  pygtrie==2.6.2
255
256
  pyparsing==3.3.3
@@ -281,7 +282,7 @@ shellingham==1.5.4
281
282
  six==1.17.0
282
283
  sniffio==1.3.1
283
284
  solar-wavelength-calibration==2.0.4
284
- soupsieve==2.10
285
+ soupsieve==3.0.3
285
286
  sqids==0.5.1
286
287
  sqlparse==0.6.0
287
288
  stack-data==0.6.3