dkist-processing-visp 5.0.0rc3__tar.gz → 5.1.1__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 (118) hide show
  1. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/CHANGELOG.rst +52 -0
  2. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/PKG-INFO +74 -70
  3. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/README.rst +10 -6
  4. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/SCIENCE_CHANGELOG.rst +19 -0
  5. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/bitbucket-pipelines.yml +1 -0
  6. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/models/parameters.py +11 -1
  7. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/geometric.py +6 -1
  8. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/solar.py +1 -9
  9. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_parameters.py +49 -1
  10. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_solar.py +3 -14
  11. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/workflows/l0_processing.py +7 -2
  12. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/workflows/trial_workflows.py +7 -2
  13. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp.egg-info/PKG-INFO +74 -70
  14. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp.egg-info/SOURCES.txt +0 -10
  15. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp.egg-info/requires.txt +63 -63
  16. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/pyproject.toml +65 -65
  17. dkist_processing_visp-5.0.0rc3/changelog/246.doc.2.rst +0 -2
  18. dkist_processing_visp-5.0.0rc3/changelog/246.doc.rst +0 -2
  19. dkist_processing_visp-5.0.0rc3/changelog/246.feature.2.rst +0 -1
  20. dkist_processing_visp-5.0.0rc3/changelog/246.feature.3.rst +0 -1
  21. dkist_processing_visp-5.0.0rc3/changelog/246.feature.4.rst +0 -1
  22. dkist_processing_visp-5.0.0rc3/changelog/246.feature.rst +0 -4
  23. dkist_processing_visp-5.0.0rc3/changelog/246.misc.2.rst +0 -1
  24. dkist_processing_visp-5.0.0rc3/changelog/246.misc.3.rst +0 -1
  25. dkist_processing_visp-5.0.0rc3/changelog/246.misc.rst +0 -2
  26. dkist_processing_visp-5.0.0rc3/changelog/246.science.rst +0 -11
  27. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/.gitignore +0 -0
  28. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/.pre-commit-config.yaml +0 -0
  29. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/.readthedocs.yml +0 -0
  30. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/.snyk +0 -0
  31. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/changelog/.gitempty +0 -0
  32. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/__init__.py +0 -0
  33. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/config.py +0 -0
  34. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/fonts/Lato-Regular.ttf +0 -0
  35. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/models/__init__.py +0 -0
  36. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/models/constants.py +0 -0
  37. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/models/fits_access.py +0 -0
  38. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/models/metric_code.py +0 -0
  39. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/models/tags.py +0 -0
  40. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/models/task_name.py +0 -0
  41. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/__init__.py +0 -0
  42. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/map_repeats.py +0 -0
  43. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/modulator_states.py +0 -0
  44. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/polarimeter_mode.py +0 -0
  45. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/raster_step.py +0 -0
  46. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/spectrograph_configuration.py +0 -0
  47. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/time.py +0 -0
  48. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/visp_l0_fits_access.py +0 -0
  49. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/parsers/visp_l1_fits_access.py +0 -0
  50. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/__init__.py +0 -0
  51. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/assemble_movie.py +0 -0
  52. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/background_light.py +0 -0
  53. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/dark.py +0 -0
  54. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/instrument_polarization.py +0 -0
  55. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/l1_output_data.py +0 -0
  56. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/lamp.py +0 -0
  57. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/make_movie_frames.py +0 -0
  58. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/mixin/__init__.py +0 -0
  59. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/mixin/beam_access.py +0 -0
  60. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/mixin/corrections.py +0 -0
  61. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/mixin/downsample.py +0 -0
  62. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/parse.py +0 -0
  63. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/quality_metrics.py +0 -0
  64. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/science.py +0 -0
  65. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/visp_base.py +0 -0
  66. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tasks/write_l1.py +0 -0
  67. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/README.rst +0 -0
  68. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/__init__.py +0 -0
  69. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/conftest.py +0 -0
  70. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/header_models.py +0 -0
  71. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/local_trial_workflows/__init__.py +0 -0
  72. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  73. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
  74. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
  75. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  76. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
  77. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_assemble_movie.py +0 -0
  78. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_assemble_quality.py +0 -0
  79. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_background_light.py +0 -0
  80. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_dark.py +0 -0
  81. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_downsample.py +0 -0
  82. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_fits_access.py +0 -0
  83. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_geometric.py +0 -0
  84. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_instrument_polarization.py +0 -0
  85. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_lamp.py +0 -0
  86. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_make_movie_frames.py +0 -0
  87. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_map_repeats.py +0 -0
  88. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_parse.py +0 -0
  89. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_quality.py +0 -0
  90. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_science.py +0 -0
  91. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_trial_create_quality_report.py +0 -0
  92. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_visp_constants.py +0 -0
  93. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_workflows.py +0 -0
  94. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/tests/test_write_l1.py +0 -0
  95. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/workflows/__init__.py +0 -0
  96. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp/workflows/single_task_workflows.py +0 -0
  97. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp.egg-info/dependency_links.txt +0 -0
  98. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/dkist_processing_visp.egg-info/top_level.txt +0 -0
  99. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/Makefile +0 -0
  100. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/background_light.rst +0 -0
  101. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/changelog.rst +0 -0
  102. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/conf.py +0 -0
  103. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/gain_correction.rst +0 -0
  104. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/geometric.rst +0 -0
  105. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/index.rst +0 -0
  106. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/l0_to_l1_visp.rst +0 -0
  107. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/l0_to_l1_visp_full-trial.rst +0 -0
  108. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/landing_page.rst +0 -0
  109. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/make.bat +0 -0
  110. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/polarization_calibration.rst +0 -0
  111. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/requirements.txt +0 -0
  112. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/requirements_table.rst +0 -0
  113. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/science_calibration.rst +0 -0
  114. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/docs/scientific_changelog.rst +0 -0
  115. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/licenses/LICENSE.rst +0 -0
  116. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/science_towncrier.sh +0 -0
  117. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/setup.cfg +0 -0
  118. {dkist_processing_visp-5.0.0rc3 → dkist_processing_visp-5.1.1}/towncrier_science.toml +0 -0
@@ -1,3 +1,55 @@
1
+ v5.1.1 (2025-12-05)
2
+ ===================
3
+
4
+ Misc
5
+ ----
6
+
7
+ - Update dkist-processing-common to 11.9.0 to take advantage of globus account pools for inbound and outbound transfers. (`#252 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/252>`__)
8
+
9
+
10
+ v5.1.0 (2025-12-03)
11
+ ===================
12
+
13
+ Misc
14
+ ----
15
+
16
+ - Update workflows to remove `InstrumentPolarizationCalibration`'s dependency on `SolarCalibration`. These two tasks can
17
+ now run in parallel. (`#248 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/248>`__)
18
+
19
+
20
+ v5.0.0 (2025-12-02)
21
+ ===================
22
+
23
+ Features
24
+ --------
25
+
26
+ - Only compute a single lamp gain for each beam. In the past a single map gain was also computed for each modulation state. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
27
+ - Add quality report metrics that show the quality of the vignette estimation in the Solar Gain tasks. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
28
+ - Update the Solar Gain task to measure vignetting signal, compute a single gain for each beam (as opposed to for each beam and modulator state),
29
+ and stop applying residual spectral shifts to the characteristic spectra before removing from the input gain array.
30
+ See the `Science Changelog <https://docs.dkist.nso.edu/projects/visp/en/stable/scientific_changelog.html>`_ and
31
+ `gain algorithm docs <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_ for more information. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
32
+ - Add Buds to parse the spectrograph setup into pipeline constants to be used when fitting a solar atlas. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
33
+
34
+
35
+ Misc
36
+ ----
37
+
38
+ - Remove the `LineZonesMixin` and move its methods directly to the Geometric calibration task, which is now the only task that uses them. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
39
+ - Rename the ``solar_spectral_avg_window`` to ``solar_spatial_median_filter_width_px`` to more accurately capture what it does. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
40
+ - Rename all line-zone parameters to be "geo*" parameters instead of "solar*" parameters. These parameters are now only used in the
41
+ Geometric calibration task. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
42
+
43
+
44
+ Documentation
45
+ -------------
46
+
47
+ - Update the online doc page for `gain calibration <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_
48
+ to reflect the updates to the Solar Gain task. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
49
+ - Add intersphinx mappings for `lmfit <https://lmfit.github.io/lmfit-py/>`_ and `scikit-learn <https://scikit-learn.org/stable/>`_
50
+ for linking bliss. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
51
+
52
+
1
53
  v4.0.0 (2025-11-12)
2
54
  ===================
3
55
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.0.0rc3
3
+ Version: 5.1.1
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,14 +13,14 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Requires-Python: >=3.12
15
15
  Description-Content-Type: text/x-rst
16
- Requires-Dist: dkist-processing-common==11.8.1rc3
16
+ Requires-Dist: dkist-processing-common==11.9.0
17
17
  Requires-Dist: dkist-processing-math==2.2.1
18
18
  Requires-Dist: dkist-processing-pac==3.1.1
19
19
  Requires-Dist: dkist-header-validator==5.2.1
20
20
  Requires-Dist: dkist-fits-specifications==4.17.0
21
- Requires-Dist: dkist-service-configuration==4.1.7
21
+ Requires-Dist: dkist-service-configuration==4.1.13
22
22
  Requires-Dist: dkist-spectral-lines==3.0.0
23
- Requires-Dist: solar-wavelength-calibration==2.0.0rc4
23
+ Requires-Dist: solar-wavelength-calibration==2.0.0
24
24
  Requires-Dist: astropy==7.0.2
25
25
  Requires-Dist: numpy==2.2.5
26
26
  Requires-Dist: sunpy==6.1.1
@@ -98,20 +98,20 @@ Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
98
98
  Requires-Dist: alembic==1.17.2; extra == "frozen"
99
99
  Requires-Dist: amqp==5.3.1; extra == "frozen"
100
100
  Requires-Dist: annotated-types==0.7.0; extra == "frozen"
101
- Requires-Dist: anyio==4.11.0; extra == "frozen"
101
+ Requires-Dist: anyio==4.12.0; extra == "frozen"
102
102
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
103
- Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
104
- Requires-Dist: apache-airflow-providers-common-compat==1.9.0; extra == "frozen"
105
- Requires-Dist: apache-airflow-providers-common-io==1.6.5; extra == "frozen"
106
- Requires-Dist: apache-airflow-providers-common-sql==1.29.0; extra == "frozen"
103
+ Requires-Dist: apache-airflow-providers-celery==3.14.0; extra == "frozen"
104
+ Requires-Dist: apache-airflow-providers-common-compat==1.10.0; extra == "frozen"
105
+ Requires-Dist: apache-airflow-providers-common-io==1.7.0; extra == "frozen"
106
+ Requires-Dist: apache-airflow-providers-common-sql==1.30.0; extra == "frozen"
107
107
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-ftp==3.13.3; extra == "frozen"
109
- Requires-Dist: apache-airflow-providers-http==5.5.0; extra == "frozen"
110
- Requires-Dist: apache-airflow-providers-imap==3.9.4; extra == "frozen"
111
- Requires-Dist: apache-airflow-providers-postgres==6.4.1; extra == "frozen"
112
- Requires-Dist: apache-airflow-providers-smtp==2.3.2; extra == "frozen"
113
- Requires-Dist: apache-airflow-providers-sqlite==4.1.3; extra == "frozen"
114
- Requires-Dist: apispec==6.8.4; extra == "frozen"
108
+ Requires-Dist: apache-airflow-providers-ftp==3.14.0; extra == "frozen"
109
+ Requires-Dist: apache-airflow-providers-http==5.6.0; extra == "frozen"
110
+ Requires-Dist: apache-airflow-providers-imap==3.10.0; extra == "frozen"
111
+ Requires-Dist: apache-airflow-providers-postgres==6.5.0; extra == "frozen"
112
+ Requires-Dist: apache-airflow-providers-smtp==2.4.0; extra == "frozen"
113
+ Requires-Dist: apache-airflow-providers-sqlite==4.2.0; extra == "frozen"
114
+ Requires-Dist: apispec==6.9.0; extra == "frozen"
115
115
  Requires-Dist: argcomplete==3.6.3; extra == "frozen"
116
116
  Requires-Dist: asdf==3.5.0; extra == "frozen"
117
117
  Requires-Dist: asdf_standard==1.4.0; extra == "frozen"
@@ -119,16 +119,16 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
119
119
  Requires-Dist: asgiref==3.11.0; extra == "frozen"
120
120
  Requires-Dist: asteval==1.0.7; extra == "frozen"
121
121
  Requires-Dist: astropy==7.0.2; extra == "frozen"
122
- Requires-Dist: astropy-iers-data==0.2025.11.10.0.38.31; extra == "frozen"
123
- Requires-Dist: asyncpg==0.30.0; extra == "frozen"
122
+ Requires-Dist: astropy-iers-data==0.2025.12.1.0.45.12; extra == "frozen"
123
+ Requires-Dist: asyncpg==0.31.0; extra == "frozen"
124
124
  Requires-Dist: attrs==25.4.0; extra == "frozen"
125
125
  Requires-Dist: babel==2.17.0; extra == "frozen"
126
- Requires-Dist: billiard==4.2.3; extra == "frozen"
126
+ Requires-Dist: billiard==4.2.4; extra == "frozen"
127
127
  Requires-Dist: blinker==1.9.0; extra == "frozen"
128
- Requires-Dist: boto3==1.41.1; extra == "frozen"
129
- Requires-Dist: botocore==1.41.1; extra == "frozen"
128
+ Requires-Dist: boto3==1.42.3; extra == "frozen"
129
+ Requires-Dist: botocore==1.42.3; extra == "frozen"
130
130
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
131
- Requires-Dist: celery==5.3.1; extra == "frozen"
131
+ Requires-Dist: celery==5.6.0; extra == "frozen"
132
132
  Requires-Dist: certifi==2025.11.12; extra == "frozen"
133
133
  Requires-Dist: cffi==2.0.0; extra == "frozen"
134
134
  Requires-Dist: charset-normalizer==3.4.4; extra == "frozen"
@@ -149,26 +149,26 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
149
149
  Requires-Dist: decorator==5.2.1; extra == "frozen"
150
150
  Requires-Dist: dill==0.4.0; extra == "frozen"
151
151
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
152
- Requires-Dist: dkist-processing-common==11.8.1rc3; extra == "frozen"
153
- Requires-Dist: dkist-processing-core==6.0.0; extra == "frozen"
152
+ Requires-Dist: dkist-processing-common==11.9.0; extra == "frozen"
153
+ Requires-Dist: dkist-processing-core==6.0.1; extra == "frozen"
154
154
  Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
155
155
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
156
- Requires-Dist: dkist-processing-visp==5.0.0rc3; extra == "frozen"
157
- Requires-Dist: dkist-service-configuration==4.1.7; extra == "frozen"
156
+ Requires-Dist: dkist-processing-visp==5.1.1; extra == "frozen"
157
+ Requires-Dist: dkist-service-configuration==4.1.13; extra == "frozen"
158
158
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
159
159
  Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
160
160
  Requires-Dist: dnspython==2.8.0; extra == "frozen"
161
161
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
162
+ Requires-Dist: exceptiongroup==1.3.1; extra == "frozen"
162
163
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
163
164
  Requires-Dist: flower==2.0.1; extra == "frozen"
164
- Requires-Dist: fonttools==4.60.1; extra == "frozen"
165
+ Requires-Dist: fonttools==4.61.0; extra == "frozen"
165
166
  Requires-Dist: frozenlist==1.8.0; extra == "frozen"
166
- Requires-Dist: fsspec==2025.10.0; extra == "frozen"
167
- Requires-Dist: globus-sdk==3.65.0; extra == "frozen"
167
+ Requires-Dist: fsspec==2025.12.0; extra == "frozen"
168
+ Requires-Dist: globus-sdk==4.2.0; extra == "frozen"
168
169
  Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
169
170
  Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
170
171
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
171
- Requires-Dist: greenlet==3.2.4; extra == "frozen"
172
172
  Requires-Dist: grpcio==1.76.0; extra == "frozen"
173
173
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
174
174
  Requires-Dist: h11==0.16.0; extra == "frozen"
@@ -186,7 +186,7 @@ Requires-Dist: jsonschema==4.25.1; extra == "frozen"
186
186
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
187
187
  Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
188
188
  Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
189
- Requires-Dist: kombu==5.6.0; extra == "frozen"
189
+ Requires-Dist: kombu==5.6.1; extra == "frozen"
190
190
  Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
191
191
  Requires-Dist: lazy_loader==0.4; extra == "frozen"
192
192
  Requires-Dist: limits==5.6.0; extra == "frozen"
@@ -206,33 +206,33 @@ Requires-Dist: more-itertools==10.8.0; extra == "frozen"
206
206
  Requires-Dist: moviepy==2.1.2; extra == "frozen"
207
207
  Requires-Dist: multidict==6.7.0; extra == "frozen"
208
208
  Requires-Dist: nbformat==5.10.4; extra == "frozen"
209
- Requires-Dist: networkx==3.5; extra == "frozen"
209
+ Requires-Dist: networkx==3.6; extra == "frozen"
210
210
  Requires-Dist: numpy==2.2.5; extra == "frozen"
211
211
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
212
- Requires-Dist: opentelemetry-api==1.38.0; extra == "frozen"
213
- Requires-Dist: opentelemetry-exporter-otlp==1.38.0; extra == "frozen"
214
- Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.38.0; extra == "frozen"
215
- Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.38.0; extra == "frozen"
216
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.38.0; extra == "frozen"
217
- Requires-Dist: opentelemetry-instrumentation==0.59b0; extra == "frozen"
218
- Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.59b0; extra == "frozen"
219
- Requires-Dist: opentelemetry-instrumentation-asgi==0.59b0; extra == "frozen"
220
- Requires-Dist: opentelemetry-instrumentation-botocore==0.59b0; extra == "frozen"
221
- Requires-Dist: opentelemetry-instrumentation-celery==0.59b0; extra == "frozen"
222
- Requires-Dist: opentelemetry-instrumentation-dbapi==0.59b0; extra == "frozen"
223
- Requires-Dist: opentelemetry-instrumentation-fastapi==0.59b0; extra == "frozen"
224
- Requires-Dist: opentelemetry-instrumentation-pika==0.59b0; extra == "frozen"
225
- Requires-Dist: opentelemetry-instrumentation-psycopg2==0.59b0; extra == "frozen"
226
- Requires-Dist: opentelemetry-instrumentation-pymongo==0.59b0; extra == "frozen"
227
- Requires-Dist: opentelemetry-instrumentation-redis==0.59b0; extra == "frozen"
228
- Requires-Dist: opentelemetry-instrumentation-requests==0.59b0; extra == "frozen"
229
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.59b0; extra == "frozen"
230
- Requires-Dist: opentelemetry-instrumentation-system-metrics==0.59b0; extra == "frozen"
212
+ Requires-Dist: opentelemetry-api==1.39.0; extra == "frozen"
213
+ Requires-Dist: opentelemetry-exporter-otlp==1.39.0; extra == "frozen"
214
+ Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.39.0; extra == "frozen"
215
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.39.0; extra == "frozen"
216
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.39.0; extra == "frozen"
217
+ Requires-Dist: opentelemetry-instrumentation==0.60b0; extra == "frozen"
218
+ Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.60b0; extra == "frozen"
219
+ Requires-Dist: opentelemetry-instrumentation-asgi==0.60b0; extra == "frozen"
220
+ Requires-Dist: opentelemetry-instrumentation-botocore==0.60b0; extra == "frozen"
221
+ Requires-Dist: opentelemetry-instrumentation-celery==0.60b0; extra == "frozen"
222
+ Requires-Dist: opentelemetry-instrumentation-dbapi==0.60b0; extra == "frozen"
223
+ Requires-Dist: opentelemetry-instrumentation-fastapi==0.60b0; extra == "frozen"
224
+ Requires-Dist: opentelemetry-instrumentation-pika==0.60b0; extra == "frozen"
225
+ Requires-Dist: opentelemetry-instrumentation-psycopg2==0.60b0; extra == "frozen"
226
+ Requires-Dist: opentelemetry-instrumentation-pymongo==0.60b0; extra == "frozen"
227
+ Requires-Dist: opentelemetry-instrumentation-redis==0.60b0; extra == "frozen"
228
+ Requires-Dist: opentelemetry-instrumentation-requests==0.60b0; extra == "frozen"
229
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.60b0; extra == "frozen"
230
+ Requires-Dist: opentelemetry-instrumentation-system-metrics==0.60b0; extra == "frozen"
231
231
  Requires-Dist: opentelemetry-propagator-aws-xray==1.0.2; extra == "frozen"
232
- Requires-Dist: opentelemetry-proto==1.38.0; extra == "frozen"
233
- Requires-Dist: opentelemetry-sdk==1.38.0; extra == "frozen"
234
- Requires-Dist: opentelemetry-semantic-conventions==0.59b0; extra == "frozen"
235
- Requires-Dist: opentelemetry-util-http==0.59b0; extra == "frozen"
232
+ Requires-Dist: opentelemetry-proto==1.39.0; extra == "frozen"
233
+ Requires-Dist: opentelemetry-sdk==1.39.0; extra == "frozen"
234
+ Requires-Dist: opentelemetry-semantic-conventions==0.60b0; extra == "frozen"
235
+ Requires-Dist: opentelemetry-util-http==0.60b0; extra == "frozen"
236
236
  Requires-Dist: ordered-set==4.1.0; extra == "frozen"
237
237
  Requires-Dist: packaging==25.0; extra == "frozen"
238
238
  Requires-Dist: pandas==2.3.3; extra == "frozen"
@@ -243,7 +243,7 @@ Requires-Dist: pendulum==3.1.0; extra == "frozen"
243
243
  Requires-Dist: pika==1.3.2; extra == "frozen"
244
244
  Requires-Dist: pillow==10.4.0; extra == "frozen"
245
245
  Requires-Dist: pip==25.3; extra == "frozen"
246
- Requires-Dist: platformdirs==4.5.0; extra == "frozen"
246
+ Requires-Dist: platformdirs==4.5.1; extra == "frozen"
247
247
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
248
248
  Requires-Dist: pooch==1.8.2; extra == "frozen"
249
249
  Requires-Dist: prison==0.2.1; extra == "frozen"
@@ -255,7 +255,7 @@ Requires-Dist: protobuf==6.33.1; extra == "frozen"
255
255
  Requires-Dist: psutil==7.1.3; extra == "frozen"
256
256
  Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
257
257
  Requires-Dist: pycparser==2.23; extra == "frozen"
258
- Requires-Dist: pydantic==2.12.4; extra == "frozen"
258
+ Requires-Dist: pydantic==2.12.5; extra == "frozen"
259
259
  Requires-Dist: pydantic-settings==2.12.0; extra == "frozen"
260
260
  Requires-Dist: pydantic_core==2.41.5; extra == "frozen"
261
261
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
@@ -273,18 +273,17 @@ Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
273
273
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
274
274
  Requires-Dist: rich==13.9.4; extra == "frozen"
275
275
  Requires-Dist: rich-argparse==1.7.2; extra == "frozen"
276
- Requires-Dist: rpds-py==0.29.0; extra == "frozen"
277
- Requires-Dist: s3transfer==0.15.0; extra == "frozen"
276
+ Requires-Dist: rpds-py==0.30.0; extra == "frozen"
277
+ Requires-Dist: s3transfer==0.16.0; extra == "frozen"
278
278
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
279
279
  Requires-Dist: scikit-learn==1.6.1; extra == "frozen"
280
280
  Requires-Dist: scipy==1.15.3; extra == "frozen"
281
281
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
282
282
  Requires-Dist: setproctitle==1.3.7; extra == "frozen"
283
283
  Requires-Dist: six==1.17.0; extra == "frozen"
284
- Requires-Dist: sniffio==1.3.1; extra == "frozen"
285
- Requires-Dist: solar-wavelength-calibration==2.0.0rc4; extra == "frozen"
284
+ Requires-Dist: solar-wavelength-calibration==2.0.0; extra == "frozen"
286
285
  Requires-Dist: sqids==0.5.1; extra == "frozen"
287
- Requires-Dist: sqlparse==0.5.3; extra == "frozen"
286
+ Requires-Dist: sqlparse==0.5.4; extra == "frozen"
288
287
  Requires-Dist: sunpy==6.1.1; extra == "frozen"
289
288
  Requires-Dist: tabulate==0.9.0; extra == "frozen"
290
289
  Requires-Dist: talus==1.3.4; extra == "frozen"
@@ -299,10 +298,11 @@ Requires-Dist: traitlets==5.14.3; extra == "frozen"
299
298
  Requires-Dist: typing-inspection==0.4.2; extra == "frozen"
300
299
  Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
301
300
  Requires-Dist: tzdata==2025.2; extra == "frozen"
301
+ Requires-Dist: tzlocal==5.3.1; extra == "frozen"
302
302
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
303
303
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
304
- Requires-Dist: universal_pathlib==0.3.6; extra == "frozen"
305
- Requires-Dist: urllib3==2.5.0; extra == "frozen"
304
+ Requires-Dist: universal_pathlib==0.3.7; extra == "frozen"
305
+ Requires-Dist: urllib3==2.6.0; extra == "frozen"
306
306
  Requires-Dist: vine==5.1.0; extra == "frozen"
307
307
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
308
308
  Requires-Dist: wcwidth==0.2.14; extra == "frozen"
@@ -347,6 +347,10 @@ Environment Variables
347
347
  - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
348
348
  * - NOMAD_ALLOC_ID
349
349
  - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
350
+ * - NOMAD_ALLOC_NAME
351
+ - annotation=str required=False default='unknown-allocation-name' alias='NOMAD_ALLOC_NAME' alias_priority=2 description='Allocation name for the deployed container the task is running on.'
352
+ * - NOMAD_GROUP_NAME
353
+ - annotation=str required=False default='unknown-allocation-group' alias='NOMAD_GROUP_NAME' alias_priority=2 description='Allocation group for the deployed container the task is running on'
350
354
  * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
351
355
  - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
352
356
  * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
@@ -387,12 +391,12 @@ Environment Variables
387
391
  - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
388
392
  * - S3_DOWNLOAD_CONFIG
389
393
  - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
390
- * - GLOBUS_TRANSPORT_PARAMS
391
- - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
392
- * - GLOBUS_CLIENT_ID
393
- - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
394
- * - GLOBUS_CLIENT_SECRET
395
- - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
394
+ * - GLOBUS_MAX_RETRIES
395
+ - annotation=int required=False default=5 description='Max retries for transient errors on calls to the globus api.'
396
+ * - GLOBUS_INBOUND_CLIENT_CREDENTIALS
397
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for inbound transfers.' examples=[[{'client_id': 'id1', 'client_secret': 'secret1'}, {'client_id': 'id2', 'client_secret': 'secret2'}]]
398
+ * - GLOBUS_OUTBOUND_CLIENT_CREDENTIALS
399
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for outbound transfers.' examples=[[{'client_id': 'id3', 'client_secret': 'secret3'}, {'client_id': 'id4', 'client_secret': 'secret4'}]]
396
400
  * - OBJECT_STORE_ENDPOINT
397
401
  - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
398
402
  * - SCRATCH_ENDPOINT
@@ -33,6 +33,10 @@ Environment Variables
33
33
  - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
34
34
  * - NOMAD_ALLOC_ID
35
35
  - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
36
+ * - NOMAD_ALLOC_NAME
37
+ - annotation=str required=False default='unknown-allocation-name' alias='NOMAD_ALLOC_NAME' alias_priority=2 description='Allocation name for the deployed container the task is running on.'
38
+ * - NOMAD_GROUP_NAME
39
+ - annotation=str required=False default='unknown-allocation-group' alias='NOMAD_GROUP_NAME' alias_priority=2 description='Allocation group for the deployed container the task is running on'
36
40
  * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
37
41
  - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
38
42
  * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
@@ -73,12 +77,12 @@ Environment Variables
73
77
  - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
74
78
  * - S3_DOWNLOAD_CONFIG
75
79
  - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
76
- * - GLOBUS_TRANSPORT_PARAMS
77
- - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
78
- * - GLOBUS_CLIENT_ID
79
- - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
80
- * - GLOBUS_CLIENT_SECRET
81
- - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
80
+ * - GLOBUS_MAX_RETRIES
81
+ - annotation=int required=False default=5 description='Max retries for transient errors on calls to the globus api.'
82
+ * - GLOBUS_INBOUND_CLIENT_CREDENTIALS
83
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for inbound transfers.' examples=[[{'client_id': 'id1', 'client_secret': 'secret1'}, {'client_id': 'id2', 'client_secret': 'secret2'}]]
84
+ * - GLOBUS_OUTBOUND_CLIENT_CREDENTIALS
85
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for outbound transfers.' examples=[[{'client_id': 'id3', 'client_secret': 'secret3'}, {'client_id': 'id4', 'client_secret': 'secret4'}]]
82
86
  * - OBJECT_STORE_ENDPOINT
83
87
  - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
84
88
  * - SCRATCH_ENDPOINT
@@ -1,3 +1,22 @@
1
+ v5.0.0 (2025-12-02)
2
+ ===================
3
+
4
+
5
+
6
+
7
+ - Major update to the gain algorithm to mitigate polarization artifacts in L1 science frames. This change can be split into
8
+ three parts. See the `gain correction <https://docs.dkist.nso.edu/projects/visp/en/stable/gain_correction.html>`_ page for more information.
9
+
10
+ #. Compute a single gain correction image for each beam. In the past we had computed a separate gain image for each modstate as well, but this was found to couple residual polarization structure into the final science frames.
11
+
12
+ #. Stop "refining" (i.e., applying small spectral offsets to) the characteristic solar spectrum on a per-spatial-pixel basis. This was initially done to minimize line residuals in Telluric lines but was found to have a more-negative on polarimetric residuals.
13
+
14
+ #. Separate vignetting caused by aperture masks from the solar signal used to remove spectral lines in the final gain image. This is done by fitting a solar atlas and taking the deviation in continuum to be the vignetting signal.
15
+
16
+ Computing a single gain per beam will greatly reduce the polarization artifacts in L1 data. Measuring the vignette
17
+ signal directly will further reduce these artifacts and improve flatness across the array. (`#246 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/246>`__)
18
+
19
+
1
20
  v4.0.0 (2025-11-12)
2
21
  ===================
3
22
 
@@ -42,6 +42,7 @@ definitions:
42
42
  caches:
43
43
  - pip
44
44
  name: Test
45
+ size: 2x
45
46
  script:
46
47
  - pip install -U pip wheel build setuptools_scm setuptools
47
48
  - pip install .[test]
@@ -1,6 +1,7 @@
1
1
  """Visp calibration pipeline parameters."""
2
2
 
3
3
  from datetime import datetime
4
+ from random import randint
4
5
  from typing import Any
5
6
 
6
7
  import astropy.units as u
@@ -208,7 +209,16 @@ class VispParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmIdMixi
208
209
  @property
209
210
  def solar_vignette_wavecal_fit_kwargs(self) -> dict[str, Any]:
210
211
  """Define extra keyword arguments to pass to the wavelength calibration fitter."""
211
- return self._find_most_recent_past_value("visp_solar_vignette_wavecal_fit_kwargs")
212
+ doc_dict = self._find_most_recent_past_value("visp_solar_vignette_wavecal_fit_kwargs")
213
+ rng_kwarg = dict()
214
+ fitting_method = doc_dict.get("method", False)
215
+ if fitting_method in ["basinhopping", "differential_evolution", "dual_annealing"]:
216
+ rng = randint(1, 1_000_000)
217
+ rng_kwarg["rng"] = rng
218
+
219
+ # The order here allows us to override `rng` in a parameter value
220
+ fit_kwargs = rng_kwarg | doc_dict
221
+ return fit_kwargs
212
222
 
213
223
  @property
214
224
  def solar_vignette_spectral_poly_fit_order(self) -> int:
@@ -274,7 +274,12 @@ class GeometricCalibration(
274
274
  self.prep_input_solar_gain()
275
275
 
276
276
  def prep_lamp_gain(self):
277
- """Apply dark corrections fo INPUT lamp frames."""
277
+ """
278
+ Create average, dark-corrected lamp gain images for each modstate from INPUT lamp gains.
279
+
280
+ This is different from the results of the `~dkist_processing_visp.tasks.lamp.LampCalibration` task because in
281
+ that task the hairlines are masked out, but here we *need* the hairlines to compute the rotation angle.
282
+ """
278
283
  for readout_exp_time in self.constants.lamp_readout_exp_times:
279
284
  for beam in range(1, self.constants.num_beams + 1):
280
285
  logger.info(
@@ -562,15 +562,7 @@ class SolarCalibration(
562
562
 
563
563
  fitter = WavelengthCalibrationFitter(input_parameters=init_parameters, atlas=atlas)
564
564
  with self.telemetry_span("Fit atlas and continuum"):
565
- rng_kwarg = dict()
566
- fitting_method = self.parameters.solar_vignette_wavecal_fit_kwargs.get("method", False)
567
- if fitting_method in ["basinhopping", "differential_evolution", "dual_annealing"]:
568
- # For methods that support the `rng` kwarg we use the recipe run id as the rng seed
569
- rng = self.recipe_run_id
570
- rng_kwarg["rng"] = rng
571
-
572
- # The order here allows us to override the default `rng` (above) in a parameter value
573
- extra_kwargs = rng_kwarg | self.parameters.solar_vignette_wavecal_fit_kwargs
565
+ extra_kwargs = self.parameters.solar_vignette_wavecal_fit_kwargs
574
566
  logger.info(f"Calling fitter with extra kwargs: {extra_kwargs}")
575
567
  fit_result = fitter(
576
568
  input_spectrum=representative_spectrum,
@@ -103,7 +103,11 @@ def test_non_wave_parameters(
103
103
  pn = f"{pn}_{arm_id}"
104
104
  pv = expected[pn]
105
105
  is_wavelength_param = isinstance(pv, dict) and "wavelength" in pv
106
- if parameter_name not in parse_parameter_names and not is_wavelength_param:
106
+ if (
107
+ parameter_name not in parse_parameter_names
108
+ and not is_wavelength_param
109
+ and parameter_name != "solar_vignette_wavecal_fit_kwargs"
110
+ ):
107
111
  param_obj_value = getattr(task_param_attr, parameter_name)
108
112
  if isinstance(pv, tuple):
109
113
  pv = list(pv)
@@ -171,3 +175,47 @@ def test_wave_parameters(
171
175
  is_wavelength_param = isinstance(pv, dict) and "wavelength" in pv
172
176
  if is_wavelength_param and property_name not in parse_parameter_names + arm_parameter_names:
173
177
  assert getattr(task_param_attr, property_name) == pv["values"][idx]
178
+
179
+
180
+ class AnyInt:
181
+ pass
182
+
183
+
184
+ @pytest.mark.parametrize("arm_id", [pytest.param("1")])
185
+ @pytest.mark.parametrize(
186
+ "db_value, expected",
187
+ [
188
+ pytest.param({"method": "nelder"}, {"method": "nelder"}, id="non_rng_method"),
189
+ pytest.param(
190
+ {"method": "basinhopping"}, {"method": "basinhopping", "rng": AnyInt}, id="random_rng"
191
+ ),
192
+ pytest.param(
193
+ {"method": "differential_evolution", "rng": 6.28},
194
+ {"method": "differential_evolution", "rng": 6.28},
195
+ id="override_rng",
196
+ ),
197
+ pytest.param(dict(), dict(), id="no_kwargs"),
198
+ ],
199
+ )
200
+ def test_fit_kwarg_parameters(
201
+ basic_science_task_with_parameter_mixin,
202
+ db_value,
203
+ expected,
204
+ ):
205
+ """
206
+ Given: A Science task with the parameter mixin
207
+ When: Accessing properties for parameters that do not depend on wavelength
208
+ Then: The correct value is returned
209
+ """
210
+ task, _ = next(
211
+ basic_science_task_with_parameter_mixin(
212
+ VispInputDatasetParameterValues(visp_solar_vignette_wavecal_fit_kwargs=db_value)
213
+ )
214
+ )
215
+ kwarg_dict = task.parameters.solar_vignette_wavecal_fit_kwargs
216
+ assert kwarg_dict.keys() == expected.keys()
217
+ for k in expected.keys():
218
+ if expected[k] is AnyInt:
219
+ assert type(kwarg_dict[k]) is int
220
+ else:
221
+ assert expected[k] == kwarg_dict[k]
@@ -310,16 +310,10 @@ def solar_gain_task(
310
310
 
311
311
 
312
312
  @pytest.mark.parametrize(
313
- "background_on, fit_kwargs",
313
+ "background_on",
314
314
  [
315
- pytest.param(True, {"method": "nelder"}, id="background_on-non_rng_method"),
316
- pytest.param(False, "conftest", id="background_off-conftest_fit_kwargs"),
317
- pytest.param(
318
- False,
319
- {"method": "differential_evolution", "rng": 6.28},
320
- id="background_off-override_rng",
321
- ),
322
- pytest.param(False, dict(), id="background_off-no_fit_kwargs"),
315
+ pytest.param(True, id="background_on"),
316
+ pytest.param(False, id="background_off"),
323
317
  ],
324
318
  )
325
319
  def test_solar_gain_task(
@@ -335,7 +329,6 @@ def test_solar_gain_task(
335
329
  assign_input_dataset_doc_to_task,
336
330
  mocker,
337
331
  fake_gql_client,
338
- fit_kwargs,
339
332
  ):
340
333
  """
341
334
  Given: A set of raw solar gain images and necessary intermediate calibrations
@@ -351,7 +344,6 @@ def test_solar_gain_task(
351
344
  input_shape = (num_wave_pix * 2, 100)
352
345
  intermediate_shape = (num_wave_pix, 100)
353
346
  beam_border = input_shape[0] // 2
354
- conftest_fit_kwargs = VispInputDatasetParameterValues().visp_solar_vignette_wavecal_fit_kwargs
355
347
  assign_input_dataset_doc_to_task(
356
348
  task,
357
349
  VispInputDatasetParameterValues(
@@ -361,9 +353,6 @@ def test_solar_gain_task(
361
353
  visp_wavecal_init_resolving_power=resolving_power,
362
354
  visp_wavecal_camera_lens_parameters_1=lens_parameters_no_units,
363
355
  visp_solar_vignette_initial_continuum_poly_fit_order=1,
364
- visp_solar_vignette_wavecal_fit_kwargs=(
365
- conftest_fit_kwargs if fit_kwargs == "conftest" else fit_kwargs
366
- ),
367
356
  ),
368
357
  arm_id=1,
369
358
  )
@@ -41,8 +41,13 @@ l0_pipeline.add_node(
41
41
  task=SolarCalibration,
42
42
  upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
43
43
  )
44
- l0_pipeline.add_node(task=InstrumentPolarizationCalibration, upstreams=SolarCalibration)
45
- l0_pipeline.add_node(task=ScienceCalibration, upstreams=InstrumentPolarizationCalibration)
44
+ l0_pipeline.add_node(
45
+ task=InstrumentPolarizationCalibration,
46
+ upstreams=[BackgroundLightCalibration, GeometricCalibration],
47
+ )
48
+ l0_pipeline.add_node(
49
+ task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
50
+ )
46
51
  l0_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
47
52
 
48
53
  # Movie flow
@@ -43,8 +43,13 @@ full_trial_pipeline.add_node(
43
43
  task=SolarCalibration,
44
44
  upstreams=[LampCalibration, GeometricCalibration, BackgroundLightCalibration],
45
45
  )
46
- full_trial_pipeline.add_node(task=InstrumentPolarizationCalibration, upstreams=SolarCalibration)
47
- full_trial_pipeline.add_node(task=ScienceCalibration, upstreams=InstrumentPolarizationCalibration)
46
+ full_trial_pipeline.add_node(
47
+ task=InstrumentPolarizationCalibration,
48
+ upstreams=[BackgroundLightCalibration, GeometricCalibration],
49
+ )
50
+ full_trial_pipeline.add_node(
51
+ task=ScienceCalibration, upstreams=[SolarCalibration, InstrumentPolarizationCalibration]
52
+ )
48
53
  full_trial_pipeline.add_node(task=VispWriteL1Frame, upstreams=ScienceCalibration)
49
54
 
50
55
  # Movie flow