dkist-processing-visp 5.8.5__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.
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/.pre-commit-config.yaml +8 -2
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/CHANGELOG.rst +20 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/PKG-INFO +77 -59
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/README.rst +17 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/corrections.py +18 -83
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_geometric.py +25 -7
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/PKG-INFO +77 -59
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/requires.txt +59 -58
- dkist_processing_visp-5.9.0/dkist_processing_visp.egg-info/scm_version.json +8 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/pyproject.toml +70 -60
- dkist_processing_visp-5.8.5/dkist_processing_visp.egg-info/scm_version.json +0 -8
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/.gitignore +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/.readthedocs.yml +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/.rovodev/.review-agent.md +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/.snyk +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/SCIENCE_CHANGELOG.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/changelog/.gitempty +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/config.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/fonts/Lato-Regular.ttf +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/constants.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/dataset_extras.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/fits_access.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/metric_code.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/parameters.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/tags.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/models/task_name.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/map_repeats.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/modulator_states.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/polarimeter_mode.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/raster_step.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/spectrograph_configuration.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/time.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/visp_l0_fits_access.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/parsers/visp_l1_fits_access.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/assemble_movie.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/background_light.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/dark.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/geometric.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/instrument_polarization.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/l1_output_data.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/lamp.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/make_movie_frames.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/beam_access.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/mixin/downsample.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/parse.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/polcal_as_science.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/quality_metrics.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/science.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/solar.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/visp_base.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/wavelength_calibration.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/write_dataset_extras.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tasks/write_l1.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/README.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/conftest.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/header_models.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_assemble_movie.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_assemble_quality.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_background_light.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_dark.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_downsample.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_fits_access.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_instrument_polarization.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_lamp.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_make_movie_frames.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_map_repeats.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_parameters.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_parse.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_polcal_as_science.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_quality.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_science.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_solar.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_trial_create_quality_report.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_visp_base.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_visp_constants.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_wavelength_calibration.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_workflows.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_write_dataset_extras.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/tests/test_write_l1.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/__init__.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/l0_processing.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/single_task_workflows.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp/workflows/trial_workflows.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/SOURCES.txt +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/dependency_links.txt +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/scm_file_list.json +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/dkist_processing_visp.egg-info/top_level.txt +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/Makefile +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/background_light.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/changelog.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/conf.py +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/dataset_extras.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/gain_correction.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/geometric.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/index.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/l0_to_l1_visp.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/l0_to_l1_visp_full-trial.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/landing_page.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/make.bat +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/polarization_calibration.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/requirements.txt +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/requirements_table.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/science_calibration.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/scientific_changelog.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/docs/wavelength_calibration.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/licenses/LICENSE.rst +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/science_towncrier.sh +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/setup.cfg +0 -0
- {dkist_processing_visp-5.8.5 → dkist_processing_visp-5.9.0}/towncrier_science.toml +0 -0
|
@@ -27,7 +27,13 @@ repos:
|
|
|
27
27
|
args:
|
|
28
28
|
- --convention=numpy
|
|
29
29
|
- --add-ignore=D105
|
|
30
|
-
- repo: https://bitbucket.org/dkistdc/pre-commit-hooks
|
|
31
|
-
rev: v1.0
|
|
30
|
+
- repo: https://bitbucket.org/dkistdc/pre-commit-hooks.git
|
|
31
|
+
rev: v1.1.0
|
|
32
32
|
hooks:
|
|
33
33
|
- id: calibration-workflow-name
|
|
34
|
+
- id: dkist-env-table
|
|
35
|
+
language_version: python3.13
|
|
36
|
+
require_serial: true
|
|
37
|
+
additional_dependencies:
|
|
38
|
+
- dkist-processing-common
|
|
39
|
+
- dkist-service-configuration
|
|
@@ -1,3 +1,23 @@
|
|
|
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
|
+
|
|
10
|
+
v5.8.6 (2026-10-08)
|
|
11
|
+
===================
|
|
12
|
+
|
|
13
|
+
Misc
|
|
14
|
+
----
|
|
15
|
+
|
|
16
|
+
- Integrated the ``dkist-env-table`` pre-commit hook and updated the README environment-variable table to match the current configuration. (`#337 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/337>`__)
|
|
17
|
+
- Bump `dkist-processing-common` to v14.6.0. No major changes. (`#341 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/341>`__)
|
|
18
|
+
- Bump `dkist-fits-specifications` to v4.30.0, which adds support for the BEAM BOUNDARIES dataset extra. (`#341 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/341>`__)
|
|
19
|
+
|
|
20
|
+
|
|
1
21
|
v5.8.5 (2026-10-06)
|
|
2
22
|
===================
|
|
3
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-visp
|
|
3
|
-
Version: 5.
|
|
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
|
|
@@ -13,11 +13,11 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/x-rst
|
|
16
|
-
Requires-Dist: dkist-processing-common==14.
|
|
17
|
-
Requires-Dist: dkist-processing-math==
|
|
16
|
+
Requires-Dist: dkist-processing-common==14.6.0
|
|
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
|
-
Requires-Dist: dkist-fits-specifications==4.
|
|
20
|
+
Requires-Dist: dkist-fits-specifications==4.30.0
|
|
21
21
|
Requires-Dist: solar-wavelength-calibration==2.0.4
|
|
22
22
|
Requires-Dist: dkist-service-configuration==4.3.0
|
|
23
23
|
Requires-Dist: dkist-spectral-lines==3.0.1
|
|
@@ -66,7 +66,7 @@ Requires-Dist: dkist-sphinx-theme; extra == "docs"
|
|
|
66
66
|
Requires-Dist: packaging; extra == "docs"
|
|
67
67
|
Provides-Extra: frozen
|
|
68
68
|
Requires-Dist: Deprecated==3.0.0; extra == "frozen"
|
|
69
|
-
Requires-Dist: ImageIO==2.38.
|
|
69
|
+
Requires-Dist: ImageIO==2.38.1; extra == "frozen"
|
|
70
70
|
Requires-Dist: Jinja2==3.1.6; extra == "frozen"
|
|
71
71
|
Requires-Dist: Mako==1.4.3; extra == "frozen"
|
|
72
72
|
Requires-Dist: MarkupSafe==3.0.4; extra == "frozen"
|
|
@@ -75,12 +75,12 @@ Requires-Dist: PyJWT==2.15.1; extra == "frozen"
|
|
|
75
75
|
Requires-Dist: PyYAML==6.0.3; extra == "frozen"
|
|
76
76
|
Requires-Dist: PyYAML-ft==8.0.0; extra == "frozen"
|
|
77
77
|
Requires-Dist: Pygments==2.21.0; extra == "frozen"
|
|
78
|
-
Requires-Dist: SQLAlchemy==2.1.
|
|
78
|
+
Requires-Dist: SQLAlchemy==2.1.4; extra == "frozen"
|
|
79
79
|
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.
|
|
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.
|
|
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.
|
|
114
|
-
Requires-Dist: asyncpg==0.
|
|
114
|
+
Requires-Dist: async-lru==2.4.0; extra == "frozen"
|
|
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.
|
|
121
|
-
Requires-Dist: botocore==1.43.
|
|
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"
|
|
@@ -142,17 +143,17 @@ Requires-Dist: decorator==5.3.1; extra == "frozen"
|
|
|
142
143
|
Requires-Dist: defusedxml==0.7.1; extra == "frozen"
|
|
143
144
|
Requires-Dist: dill==0.4.1; extra == "frozen"
|
|
144
145
|
Requires-Dist: dkist-header-validator==6.0.0; extra == "frozen"
|
|
145
|
-
Requires-Dist: dkist-processing-common==14.
|
|
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==
|
|
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.
|
|
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
|
-
Requires-Dist: dkist_fits_specifications==4.
|
|
153
|
-
Requires-Dist: dnspython==2.
|
|
153
|
+
Requires-Dist: dkist_fits_specifications==4.30.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.
|
|
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.
|
|
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.
|
|
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.
|
|
187
|
-
Requires-Dist: jsonpointer==3.
|
|
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,43 +217,43 @@ 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==
|
|
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.
|
|
223
|
+
Requires-Dist: nbconvert==7.17.2; extra == "frozen"
|
|
223
224
|
Requires-Dist: nbformat==5.11.1; extra == "frozen"
|
|
224
|
-
Requires-Dist: nest-asyncio2==1.7.
|
|
225
|
+
Requires-Dist: nest-asyncio2==1.7.4; extra == "frozen"
|
|
225
226
|
Requires-Dist: networkx==3.7; extra == "frozen"
|
|
226
227
|
Requires-Dist: notebook==7.6.3; extra == "frozen"
|
|
227
228
|
Requires-Dist: notebook_shim==0.2.4; extra == "frozen"
|
|
228
229
|
Requires-Dist: numpy==2.2.5; extra == "frozen"
|
|
229
230
|
Requires-Dist: object-clerk==1.0.0; extra == "frozen"
|
|
230
|
-
Requires-Dist: opentelemetry-api==1.45.
|
|
231
|
-
Requires-Dist: opentelemetry-exporter-http-transport==0.
|
|
232
|
-
Requires-Dist: opentelemetry-exporter-otlp==1.45.
|
|
233
|
-
Requires-Dist: opentelemetry-exporter-otlp-common==0.
|
|
234
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.45.
|
|
235
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.45.
|
|
236
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.45.
|
|
237
|
-
Requires-Dist: opentelemetry-instrumentation==0.
|
|
238
|
-
Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.
|
|
239
|
-
Requires-Dist: opentelemetry-instrumentation-asgi==0.
|
|
240
|
-
Requires-Dist: opentelemetry-instrumentation-botocore==0.
|
|
241
|
-
Requires-Dist: opentelemetry-instrumentation-celery==0.
|
|
242
|
-
Requires-Dist: opentelemetry-instrumentation-dbapi==0.
|
|
243
|
-
Requires-Dist: opentelemetry-instrumentation-fastapi==0.
|
|
244
|
-
Requires-Dist: opentelemetry-instrumentation-pika==0.
|
|
245
|
-
Requires-Dist: opentelemetry-instrumentation-psycopg2==0.
|
|
246
|
-
Requires-Dist: opentelemetry-instrumentation-pymongo==0.
|
|
247
|
-
Requires-Dist: opentelemetry-instrumentation-redis==0.
|
|
248
|
-
Requires-Dist: opentelemetry-instrumentation-requests==0.
|
|
249
|
-
Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.
|
|
250
|
-
Requires-Dist: opentelemetry-instrumentation-system-metrics==0.
|
|
231
|
+
Requires-Dist: opentelemetry-api==1.45.1; extra == "frozen"
|
|
232
|
+
Requires-Dist: opentelemetry-exporter-http-transport==0.66b1; extra == "frozen"
|
|
233
|
+
Requires-Dist: opentelemetry-exporter-otlp==1.45.1; extra == "frozen"
|
|
234
|
+
Requires-Dist: opentelemetry-exporter-otlp-common==0.66b1; extra == "frozen"
|
|
235
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.45.1; extra == "frozen"
|
|
236
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.45.1; extra == "frozen"
|
|
237
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.45.1; extra == "frozen"
|
|
238
|
+
Requires-Dist: opentelemetry-instrumentation==0.66b1; extra == "frozen"
|
|
239
|
+
Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.66b1; extra == "frozen"
|
|
240
|
+
Requires-Dist: opentelemetry-instrumentation-asgi==0.66b1; extra == "frozen"
|
|
241
|
+
Requires-Dist: opentelemetry-instrumentation-botocore==0.66b1; extra == "frozen"
|
|
242
|
+
Requires-Dist: opentelemetry-instrumentation-celery==0.66b1; extra == "frozen"
|
|
243
|
+
Requires-Dist: opentelemetry-instrumentation-dbapi==0.66b1; extra == "frozen"
|
|
244
|
+
Requires-Dist: opentelemetry-instrumentation-fastapi==0.66b1; extra == "frozen"
|
|
245
|
+
Requires-Dist: opentelemetry-instrumentation-pika==0.66b1; extra == "frozen"
|
|
246
|
+
Requires-Dist: opentelemetry-instrumentation-psycopg2==0.66b1; extra == "frozen"
|
|
247
|
+
Requires-Dist: opentelemetry-instrumentation-pymongo==0.66b1; extra == "frozen"
|
|
248
|
+
Requires-Dist: opentelemetry-instrumentation-redis==0.66b1; extra == "frozen"
|
|
249
|
+
Requires-Dist: opentelemetry-instrumentation-requests==0.66b1; extra == "frozen"
|
|
250
|
+
Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.66b1; extra == "frozen"
|
|
251
|
+
Requires-Dist: opentelemetry-instrumentation-system-metrics==0.66b1; extra == "frozen"
|
|
251
252
|
Requires-Dist: opentelemetry-propagator-aws-xray==1.0.2; extra == "frozen"
|
|
252
|
-
Requires-Dist: opentelemetry-proto==1.45.
|
|
253
|
-
Requires-Dist: opentelemetry-sdk==1.45.
|
|
254
|
-
Requires-Dist: opentelemetry-semantic-conventions==0.
|
|
255
|
-
Requires-Dist: opentelemetry-util-http==0.
|
|
253
|
+
Requires-Dist: opentelemetry-proto==1.45.1; extra == "frozen"
|
|
254
|
+
Requires-Dist: opentelemetry-sdk==1.45.1; extra == "frozen"
|
|
255
|
+
Requires-Dist: opentelemetry-semantic-conventions==0.66b1; extra == "frozen"
|
|
256
|
+
Requires-Dist: opentelemetry-util-http==0.66b1; extra == "frozen"
|
|
256
257
|
Requires-Dist: outcome==1.3.0.post0; extra == "frozen"
|
|
257
258
|
Requires-Dist: packaging==26.3; extra == "frozen"
|
|
258
259
|
Requires-Dist: pandas==3.0.6; 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.
|
|
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.
|
|
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.
|
|
284
|
-
Requires-Dist: pydantic==2.
|
|
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.
|
|
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"
|
|
@@ -293,7 +294,7 @@ Requires-Dist: python-dateutil==2.9.0.post0; extra == "frozen"
|
|
|
293
294
|
Requires-Dist: python-dotenv==1.2.4; extra == "frozen"
|
|
294
295
|
Requires-Dist: python-json-logger==4.2.0; extra == "frozen"
|
|
295
296
|
Requires-Dist: python-multipart==0.0.32; extra == "frozen"
|
|
296
|
-
Requires-Dist: python-slugify==9.1.
|
|
297
|
+
Requires-Dist: python-slugify==9.1.3; extra == "frozen"
|
|
297
298
|
Requires-Dist: pytz==2026.5; extra == "frozen"
|
|
298
299
|
Requires-Dist: pyzmq==27.2.0; extra == "frozen"
|
|
299
300
|
Requires-Dist: redis==6.4.0; extra == "frozen"
|
|
@@ -304,7 +305,7 @@ Requires-Dist: rfc3986-validator==0.1.1; extra == "frozen"
|
|
|
304
305
|
Requires-Dist: rfc3987-syntax==1.1.0; extra == "frozen"
|
|
305
306
|
Requires-Dist: rich==15.0.0; extra == "frozen"
|
|
306
307
|
Requires-Dist: rich-argparse==1.8.0; extra == "frozen"
|
|
307
|
-
Requires-Dist: rich-toolkit==0.20.
|
|
308
|
+
Requires-Dist: rich-toolkit==0.20.6; extra == "frozen"
|
|
308
309
|
Requires-Dist: rpds-py==2026.9.1; extra == "frozen"
|
|
309
310
|
Requires-Dist: s3transfer==0.19.2; extra == "frozen"
|
|
310
311
|
Requires-Dist: scikit-image==0.25.2; 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==
|
|
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"
|
|
@@ -336,7 +337,7 @@ Requires-Dist: tinycss2==1.5.1; extra == "frozen"
|
|
|
336
337
|
Requires-Dist: tornado==6.5.10; extra == "frozen"
|
|
337
338
|
Requires-Dist: tqdm==4.70.1; extra == "frozen"
|
|
338
339
|
Requires-Dist: traitlets==5.16.1; extra == "frozen"
|
|
339
|
-
Requires-Dist: typer==0.27.
|
|
340
|
+
Requires-Dist: typer==0.27.3; extra == "frozen"
|
|
340
341
|
Requires-Dist: typing-inspection==0.4.4; extra == "frozen"
|
|
341
342
|
Requires-Dist: typing_extensions==4.16.0; extra == "frozen"
|
|
342
343
|
Requires-Dist: tzdata==2026.5; extra == "frozen"
|
|
@@ -379,6 +380,8 @@ in their own package facilitates using the build_utils to test the integrity of
|
|
|
379
380
|
Environment Variables
|
|
380
381
|
---------------------
|
|
381
382
|
|
|
383
|
+
.. dkist-env-table: start
|
|
384
|
+
|
|
382
385
|
.. list-table::
|
|
383
386
|
:widths: 10 90
|
|
384
387
|
:header-rows: 1
|
|
@@ -470,6 +473,21 @@ Environment Variables
|
|
|
470
473
|
* - FTS_ATLAS_DATA_DIR
|
|
471
474
|
- annotation=Union[str, NoneType] required=False default=None description='Common cached directory for downloaded FTS Atlas.'
|
|
472
475
|
|
|
476
|
+
.. dkist-env-table: end
|
|
477
|
+
|
|
478
|
+
Maintaining the generated table
|
|
479
|
+
###############################
|
|
480
|
+
|
|
481
|
+
The hook's additional dependencies are intentionally unpinned to avoid duplicating
|
|
482
|
+
versions maintained in ``pyproject.toml``. Consequently, the generated table may
|
|
483
|
+
temporarily reflect a newer published parent configuration than the version pinned
|
|
484
|
+
by this project.
|
|
485
|
+
|
|
486
|
+
When developing against an upstream release candidate that changes configuration
|
|
487
|
+
fields, temporarily pin the relevant hook dependency in
|
|
488
|
+
``.pre-commit-config.yaml`` to that RC. Remove the temporary pin after the final
|
|
489
|
+
upstream release is available.
|
|
490
|
+
|
|
473
491
|
Development
|
|
474
492
|
-----------
|
|
475
493
|
.. code-block:: bash
|
|
@@ -15,6 +15,8 @@ in their own package facilitates using the build_utils to test the integrity of
|
|
|
15
15
|
Environment Variables
|
|
16
16
|
---------------------
|
|
17
17
|
|
|
18
|
+
.. dkist-env-table: start
|
|
19
|
+
|
|
18
20
|
.. list-table::
|
|
19
21
|
:widths: 10 90
|
|
20
22
|
:header-rows: 1
|
|
@@ -106,6 +108,21 @@ Environment Variables
|
|
|
106
108
|
* - FTS_ATLAS_DATA_DIR
|
|
107
109
|
- annotation=Union[str, NoneType] required=False default=None description='Common cached directory for downloaded FTS Atlas.'
|
|
108
110
|
|
|
111
|
+
.. dkist-env-table: end
|
|
112
|
+
|
|
113
|
+
Maintaining the generated table
|
|
114
|
+
###############################
|
|
115
|
+
|
|
116
|
+
The hook's additional dependencies are intentionally unpinned to avoid duplicating
|
|
117
|
+
versions maintained in ``pyproject.toml``. Consequently, the generated table may
|
|
118
|
+
temporarily reflect a newer published parent configuration than the version pinned
|
|
119
|
+
by this project.
|
|
120
|
+
|
|
121
|
+
When developing against an upstream release candidate that changes configuration
|
|
122
|
+
fields, temporarily pin the relevant hook dependency in
|
|
123
|
+
``.pre-commit-config.yaml`` to that RC. Remove the temporary pin after the final
|
|
124
|
+
upstream release is available.
|
|
125
|
+
|
|
109
126
|
Development
|
|
110
127
|
-----------
|
|
111
128
|
.. code-block:: bash
|
|
@@ -1,40 +1,16 @@
|
|
|
1
1
|
"""Helper for ViSP array corrections."""
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
from
|
|
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
|
|
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
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
116
|
-
|
|
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
|
-
|
|
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
|
|