dkist-processing-visp 5.0.0rc1__tar.gz → 5.0.0rc3__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.0rc1 → dkist_processing_visp-5.0.0rc3}/PKG-INFO +26 -26
  2. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/models/parameters.py +26 -0
  3. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/l1_output_data.py +2 -0
  4. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/solar.py +71 -12
  5. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/conftest.py +3 -0
  6. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_assemble_quality.py +8 -0
  7. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_parameters.py +1 -0
  8. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_solar.py +25 -8
  9. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp.egg-info/PKG-INFO +26 -26
  10. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp.egg-info/requires.txt +25 -25
  11. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/pyproject.toml +27 -27
  12. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/.gitignore +0 -0
  13. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/.pre-commit-config.yaml +0 -0
  14. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/.readthedocs.yml +0 -0
  15. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/.snyk +0 -0
  16. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/CHANGELOG.rst +0 -0
  17. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/README.rst +0 -0
  18. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/SCIENCE_CHANGELOG.rst +0 -0
  19. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/bitbucket-pipelines.yml +0 -0
  20. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/.gitempty +0 -0
  21. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.doc.2.rst +0 -0
  22. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.doc.rst +0 -0
  23. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.feature.2.rst +0 -0
  24. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.feature.3.rst +0 -0
  25. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.feature.4.rst +0 -0
  26. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.feature.rst +0 -0
  27. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.misc.2.rst +0 -0
  28. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.misc.3.rst +0 -0
  29. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.misc.rst +0 -0
  30. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/changelog/246.science.rst +0 -0
  31. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/__init__.py +0 -0
  32. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/config.py +0 -0
  33. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/fonts/Lato-Regular.ttf +0 -0
  34. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/models/__init__.py +0 -0
  35. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/models/constants.py +0 -0
  36. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/models/fits_access.py +0 -0
  37. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/models/metric_code.py +0 -0
  38. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/models/tags.py +0 -0
  39. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/models/task_name.py +0 -0
  40. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/__init__.py +0 -0
  41. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/map_repeats.py +0 -0
  42. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/modulator_states.py +0 -0
  43. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/polarimeter_mode.py +0 -0
  44. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/raster_step.py +0 -0
  45. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/spectrograph_configuration.py +0 -0
  46. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/time.py +0 -0
  47. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/visp_l0_fits_access.py +0 -0
  48. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/parsers/visp_l1_fits_access.py +0 -0
  49. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/__init__.py +0 -0
  50. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/assemble_movie.py +0 -0
  51. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/background_light.py +0 -0
  52. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/dark.py +0 -0
  53. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/geometric.py +0 -0
  54. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/instrument_polarization.py +0 -0
  55. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/lamp.py +0 -0
  56. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/make_movie_frames.py +0 -0
  57. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/mixin/__init__.py +0 -0
  58. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/mixin/beam_access.py +0 -0
  59. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/mixin/corrections.py +0 -0
  60. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/mixin/downsample.py +0 -0
  61. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/parse.py +0 -0
  62. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/quality_metrics.py +0 -0
  63. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/science.py +0 -0
  64. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/visp_base.py +0 -0
  65. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tasks/write_l1.py +0 -0
  66. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/README.rst +0 -0
  67. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/__init__.py +0 -0
  68. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/header_models.py +0 -0
  69. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/local_trial_workflows/__init__.py +0 -0
  70. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  71. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
  72. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
  73. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  74. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
  75. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_assemble_movie.py +0 -0
  76. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_background_light.py +0 -0
  77. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_dark.py +0 -0
  78. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_downsample.py +0 -0
  79. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_fits_access.py +0 -0
  80. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_geometric.py +0 -0
  81. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_instrument_polarization.py +0 -0
  82. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_lamp.py +0 -0
  83. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_make_movie_frames.py +0 -0
  84. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_map_repeats.py +0 -0
  85. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_parse.py +0 -0
  86. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_quality.py +0 -0
  87. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_science.py +0 -0
  88. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_trial_create_quality_report.py +0 -0
  89. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_visp_constants.py +0 -0
  90. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_workflows.py +0 -0
  91. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/tests/test_write_l1.py +0 -0
  92. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/workflows/__init__.py +0 -0
  93. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/workflows/l0_processing.py +0 -0
  94. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/workflows/single_task_workflows.py +0 -0
  95. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp/workflows/trial_workflows.py +0 -0
  96. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp.egg-info/SOURCES.txt +0 -0
  97. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp.egg-info/dependency_links.txt +0 -0
  98. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/dkist_processing_visp.egg-info/top_level.txt +0 -0
  99. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/Makefile +0 -0
  100. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/background_light.rst +0 -0
  101. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/changelog.rst +0 -0
  102. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/conf.py +0 -0
  103. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/gain_correction.rst +0 -0
  104. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/geometric.rst +0 -0
  105. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/index.rst +0 -0
  106. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/l0_to_l1_visp.rst +0 -0
  107. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/l0_to_l1_visp_full-trial.rst +0 -0
  108. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/landing_page.rst +0 -0
  109. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/make.bat +0 -0
  110. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/polarization_calibration.rst +0 -0
  111. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/requirements.txt +0 -0
  112. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/requirements_table.rst +0 -0
  113. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/science_calibration.rst +0 -0
  114. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/docs/scientific_changelog.rst +0 -0
  115. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/licenses/LICENSE.rst +0 -0
  116. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/science_towncrier.sh +0 -0
  117. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/setup.cfg +0 -0
  118. {dkist_processing_visp-5.0.0rc1 → dkist_processing_visp-5.0.0rc3}/towncrier_science.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.0.0rc1
3
+ Version: 5.0.0rc3
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.1rc2
16
+ Requires-Dist: dkist-processing-common==11.8.1rc3
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
21
  Requires-Dist: dkist-service-configuration==4.1.7
22
22
  Requires-Dist: dkist-spectral-lines==3.0.0
23
- Requires-Dist: solar-wavelength-calibration==2.0.0rc3
23
+ Requires-Dist: solar-wavelength-calibration==2.0.0rc4
24
24
  Requires-Dist: astropy==7.0.2
25
25
  Requires-Dist: numpy==2.2.5
26
26
  Requires-Dist: sunpy==6.1.1
@@ -95,44 +95,44 @@ Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
95
95
  Requires-Dist: aiohttp==3.13.2; extra == "frozen"
96
96
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
97
97
  Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
98
- Requires-Dist: alembic==1.17.1; extra == "frozen"
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
101
  Requires-Dist: anyio==4.11.0; extra == "frozen"
102
102
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
103
103
  Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
104
- Requires-Dist: apache-airflow-providers-common-compat==1.8.0; extra == "frozen"
105
- Requires-Dist: apache-airflow-providers-common-io==1.6.4; extra == "frozen"
106
- Requires-Dist: apache-airflow-providers-common-sql==1.28.2; 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"
107
107
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
109
- Requires-Dist: apache-airflow-providers-http==5.4.0; extra == "frozen"
110
- Requires-Dist: apache-airflow-providers-imap==3.9.3; extra == "frozen"
111
- Requires-Dist: apache-airflow-providers-postgres==6.4.0; extra == "frozen"
112
- Requires-Dist: apache-airflow-providers-smtp==2.3.1; extra == "frozen"
113
- Requires-Dist: apache-airflow-providers-sqlite==4.1.2; 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
114
  Requires-Dist: apispec==6.8.4; 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"
118
118
  Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
119
- Requires-Dist: asgiref==3.10.0; extra == "frozen"
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
122
  Requires-Dist: astropy-iers-data==0.2025.11.10.0.38.31; extra == "frozen"
123
123
  Requires-Dist: asyncpg==0.30.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.2; extra == "frozen"
126
+ Requires-Dist: billiard==4.2.3; extra == "frozen"
127
127
  Requires-Dist: blinker==1.9.0; extra == "frozen"
128
- Requires-Dist: boto3==1.40.71; extra == "frozen"
129
- Requires-Dist: botocore==1.40.71; extra == "frozen"
128
+ Requires-Dist: boto3==1.41.1; extra == "frozen"
129
+ Requires-Dist: botocore==1.41.1; extra == "frozen"
130
130
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
131
131
  Requires-Dist: celery==5.3.1; 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"
135
- Requires-Dist: click==8.3.0; extra == "frozen"
135
+ Requires-Dist: click==8.3.1; extra == "frozen"
136
136
  Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
137
137
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
138
138
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
@@ -149,11 +149,11 @@ 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.1rc2; extra == "frozen"
152
+ Requires-Dist: dkist-processing-common==11.8.1rc3; extra == "frozen"
153
153
  Requires-Dist: dkist-processing-core==6.0.0; 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.0rc1; extra == "frozen"
156
+ Requires-Dist: dkist-processing-visp==5.0.0rc3; extra == "frozen"
157
157
  Requires-Dist: dkist-service-configuration==4.1.7; 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"
@@ -251,7 +251,7 @@ Requires-Dist: proglog==0.1.12; extra == "frozen"
251
251
  Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
252
252
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
253
253
  Requires-Dist: propcache==0.4.1; extra == "frozen"
254
- Requires-Dist: protobuf==6.33.0; extra == "frozen"
254
+ 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"
@@ -273,8 +273,8 @@ 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.28.0; extra == "frozen"
277
- Requires-Dist: s3transfer==0.14.0; extra == "frozen"
276
+ Requires-Dist: rpds-py==0.29.0; extra == "frozen"
277
+ Requires-Dist: s3transfer==0.15.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"
@@ -282,7 +282,7 @@ 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
284
  Requires-Dist: sniffio==1.3.1; extra == "frozen"
285
- Requires-Dist: solar-wavelength-calibration==2.0.0rc3; extra == "frozen"
285
+ Requires-Dist: solar-wavelength-calibration==2.0.0rc4; extra == "frozen"
286
286
  Requires-Dist: sqids==0.5.1; extra == "frozen"
287
287
  Requires-Dist: sqlparse==0.5.3; extra == "frozen"
288
288
  Requires-Dist: sunpy==6.1.1; extra == "frozen"
@@ -301,14 +301,14 @@ Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
301
301
  Requires-Dist: tzdata==2025.2; 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.5; extra == "frozen"
304
+ Requires-Dist: universal_pathlib==0.3.6; extra == "frozen"
305
305
  Requires-Dist: urllib3==2.5.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"
309
309
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
310
310
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
311
- Requires-Dist: yamale==6.0.0; extra == "frozen"
311
+ Requires-Dist: yamale==6.1.0; extra == "frozen"
312
312
  Requires-Dist: yarl==1.22.0; extra == "frozen"
313
313
  Requires-Dist: zipp==3.23.0; extra == "frozen"
314
314
 
@@ -186,6 +186,25 @@ class VispParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmIdMixi
186
186
  "visp_solar_vignette_initial_continuum_poly_fit_order"
187
187
  )
188
188
 
189
+ @property
190
+ def solar_vignette_crval_bounds_px(self) -> float:
191
+ """
192
+ Define the bounds (in *pixels*) on crval when fitting the initial vignette signal.
193
+
194
+ The actual bounds on the value of crval are equal to ± the initial dispersion times this number. Note that the
195
+ total range searched by the fitting algorithm will be twice this number (in pixels).
196
+ """
197
+ return self._find_most_recent_past_value("visp_solar_vignette_crval_bounds_px") * u.pix
198
+
199
+ @property
200
+ def solar_vignette_dispersion_bounds_fraction(self) -> float:
201
+ """
202
+ Define the ± fraction away from the initial value for bounds on dispersion when fitting the initial vignette signal.
203
+
204
+ This value should be between 0 and 1. For example, the minimum bound is `init_value * (1 - solar_vignette_dispersion_bounds_fraction)`.
205
+ """
206
+ return self._find_most_recent_past_value("visp_solar_vignette_dispersion_bounds_fraction")
207
+
189
208
  @property
190
209
  def solar_vignette_wavecal_fit_kwargs(self) -> dict[str, Any]:
191
210
  """Define extra keyword arguments to pass to the wavelength calibration fitter."""
@@ -228,6 +247,13 @@ class VispParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmIdMixi
228
247
  config_dict = self._find_most_recent_past_value("visp_wavecal_atlas_download_config")
229
248
  return DownloadConfig.model_validate(config_dict)
230
249
 
250
+ @property
251
+ def wavecal_init_crval_guess_normalization_percentile(self) -> float | None:
252
+ """Define the CDF percentage used to normalize the Atlas to the input spectrum level when computing an initial CRVAL guess."""
253
+ return self._find_most_recent_past_value(
254
+ "visp_wavecal_init_crval_guess_normalization_percentile"
255
+ )
256
+
231
257
  @property
232
258
  def wavecal_init_resolving_power(self) -> int:
233
259
  """Define the initial guess for ViSP resolving power in wavecal fits."""
@@ -132,6 +132,7 @@ class VispAssembleQualityData(AssembleQualityData):
132
132
  description="These plots show the solar atlas fit used to estimate the initial, 1D spectral vignette "
133
133
  "present in solar gain frames. The vignette signature is taken to be the fit continuum shown.",
134
134
  metric_code=VispMetricCode.solar_first_vignette,
135
+ facet=self._format_facet(f"Beam {beam}"),
135
136
  multi_plot_data=full_plot,
136
137
  )
137
138
 
@@ -208,6 +209,7 @@ class VispAssembleQualityData(AssembleQualityData):
208
209
  "The 5th and 9th percentile ranges show how stable this spectrum is along the spatial dimension "
209
210
  "after removing the vignette signal.",
210
211
  metric_code=VispMetricCode.solar_final_vignette,
212
+ facet=self._format_facet(f"Beam {beam}"),
211
213
  multi_plot_data=full_plot,
212
214
  )
213
215
 
@@ -70,6 +70,7 @@ class WavelengthCalibrationParametersWithContinuum(WavelengthCalibrationParamete
70
70
 
71
71
  continuum_poly_fit_order: int
72
72
  normalized_abscissa: np.ndarray
73
+ zeroth_order_continuum_coefficient: float
73
74
 
74
75
  @property
75
76
  def continuum_function(self) -> Callable[[np.ndarray, Parameters], np.ndarray]:
@@ -93,16 +94,26 @@ class WavelengthCalibrationParametersWithContinuum(WavelengthCalibrationParamete
93
94
  # dynamically create the required number of "poly_coeff_{o:02n}" fields. Sorry if this bites you!
94
95
  params = super().lmfit_parameters
95
96
  for o in range(self.continuum_poly_fit_order + 1):
97
+ # `np.polyval` uses its input coefficient list "backwards", so `poly_coeff_{self.continuum_poly_fit_order}`
98
+ # is the 0th order polynomial term.
96
99
  params.add(
97
100
  f"poly_coeff_{o:02n}",
98
101
  vary=True,
99
- value=o // self.continuum_poly_fit_order,
102
+ value=(
103
+ self.zeroth_order_continuum_coefficient
104
+ if o == self.continuum_poly_fit_order
105
+ else 0
106
+ ),
100
107
  min=-1,
101
108
  max=1,
102
109
  )
103
110
 
104
- params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].min = 0.7
105
- params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].max = 1.3
111
+ params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].min = (
112
+ self.zeroth_order_continuum_coefficient * 0.5
113
+ )
114
+ params[f"poly_coeff_{self.continuum_poly_fit_order:02n}"].max = (
115
+ self.zeroth_order_continuum_coefficient * 1.5
116
+ )
106
117
 
107
118
  # Remove the default continuum parameterization
108
119
  del params["continuum_level"]
@@ -551,9 +562,19 @@ class SolarCalibration(
551
562
 
552
563
  fitter = WavelengthCalibrationFitter(input_parameters=init_parameters, atlas=atlas)
553
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
574
+ logger.info(f"Calling fitter with extra kwargs: {extra_kwargs}")
554
575
  fit_result = fitter(
555
576
  input_spectrum=representative_spectrum,
556
- **self.parameters.solar_vignette_wavecal_fit_kwargs,
577
+ **extra_kwargs,
557
578
  )
558
579
 
559
580
  return fit_result
@@ -610,6 +631,7 @@ class SolarCalibration(
610
631
  negative_limit=-wavelength_range / 2,
611
632
  positive_limit=wavelength_range / 2,
612
633
  num_steps=500,
634
+ normalization_percentile=self.parameters.wavecal_init_crval_guess_normalization_percentile,
613
635
  )
614
636
 
615
637
  logger.info(f"{crval_init = !s}")
@@ -627,18 +649,22 @@ class SolarCalibration(
627
649
  resolving_power = self.parameters.wavecal_init_resolving_power
628
650
  opacity_factor = self.parameters.wavecal_init_opacity_factor
629
651
  straylight_faction = self.parameters.wavecal_init_straylight_fraction
652
+ relative_atlas_scaling = self.estimate_relative_continuum_level(
653
+ crval_init=crval_init,
654
+ wavelength_range=wavelength_range,
655
+ atlas=atlas,
656
+ representative_spectrum=representative_spectrum,
657
+ )
658
+ logger.info(f"0th order coefficient initial guess: {relative_atlas_scaling}")
630
659
 
631
- # The first time we have to change these ranges (which may never happen!) we should at least consider making
632
- # them parameters.
633
- wavelength_search_width = wavelength_range * 0.15
660
+ wavelength_search_width = dispersion * self.parameters.solar_vignette_crval_bounds_px
634
661
  bounds = BoundsModel(
635
- # An alternative for the crval bounds would be `[input_wavelength_vector.min(), input_wavelength_vector.max()]`
636
662
  crval=LengthBoundRange(
637
663
  min=crval_init - wavelength_search_width, max=crval_init + wavelength_search_width
638
664
  ),
639
665
  dispersion=DispersionBoundRange(
640
- min=dispersion * 0.96,
641
- max=dispersion * 1.04,
666
+ min=dispersion * (1 - self.parameters.solar_vignette_dispersion_bounds_fraction),
667
+ max=dispersion * (1 + self.parameters.solar_vignette_dispersion_bounds_fraction),
642
668
  ),
643
669
  incident_light_angle=AngleBoundRange(
644
670
  min=incident_light_angle - 1 * u.deg, max=incident_light_angle + 1 * u.deg
@@ -646,7 +672,6 @@ class SolarCalibration(
646
672
  resolving_power=UnitlessBoundRange(min=1e5, max=5e5),
647
673
  opacity_factor=UnitlessBoundRange(min=1.0, max=10),
648
674
  straylight_fraction=UnitlessBoundRange(min=0.0, max=0.8),
649
- continuum_level=UnitlessBoundRange(min=0.99, max=1.1),
650
675
  )
651
676
 
652
677
  init_params = WavelengthCalibrationParametersWithContinuum(
@@ -656,7 +681,7 @@ class SolarCalibration(
656
681
  grating_constant=grating_constant,
657
682
  doppler_velocity=doppler_velocity,
658
683
  order=spectral_order,
659
- continuum_level=1.0,
684
+ continuum_level=1,
660
685
  resolving_power=resolving_power,
661
686
  opacity_factor=opacity_factor,
662
687
  straylight_fraction=straylight_faction,
@@ -664,10 +689,44 @@ class SolarCalibration(
664
689
  bounds=bounds,
665
690
  continuum_poly_fit_order=self.parameters.solar_vignette_initial_continuum_poly_fit_order,
666
691
  normalized_abscissa=normalized_abscissa,
692
+ zeroth_order_continuum_coefficient=relative_atlas_scaling,
667
693
  )
668
694
 
669
695
  return init_params
670
696
 
697
+ def estimate_relative_continuum_level(
698
+ self,
699
+ *,
700
+ crval_init: Quantity,
701
+ wavelength_range: Quantity,
702
+ atlas: Atlas,
703
+ representative_spectrum: np.ndarray,
704
+ ) -> float:
705
+ """
706
+ Estimate the multiplicative scaling between the representative spectrum and atlas solar transmission.
707
+
708
+ This scaling is used to set the initial guess of 0th-order polynomial fit coefficient. We estimate the scaling
709
+ factor by comparing the values of the two spectra at a given percent of the CDF. This percent is taken from
710
+ the `~dkist_processing_visp.models.parameters.VispParameters.wavecal_init_crval_guess_normalization_percentile`
711
+ pipeline parameter.
712
+ """
713
+ wave_min = crval_init - wavelength_range / 2
714
+ wave_max = crval_init + wavelength_range / 2
715
+
716
+ atlas_idx = np.where(
717
+ (atlas.solar_atlas_wavelength >= wave_min) & (atlas.solar_atlas_wavelength <= wave_max)
718
+ )
719
+ atlas_norm = np.nanpercentile(
720
+ atlas.solar_atlas_transmission[atlas_idx],
721
+ self.parameters.wavecal_init_crval_guess_normalization_percentile,
722
+ )
723
+ spec_norm = np.nanpercentile(
724
+ representative_spectrum,
725
+ self.parameters.wavecal_init_crval_guess_normalization_percentile,
726
+ )
727
+
728
+ return spec_norm / atlas_norm
729
+
671
730
  def compute_final_vignette_estimate(self, init_vignette_correction: np.ndarray) -> np.ndarray:
672
731
  """
673
732
  Fit the spectral shape of continuum residuals for each spatial pixel.
@@ -149,6 +149,8 @@ class VispInputDatasetParameterValues:
149
149
  )
150
150
  visp_solar_characteristic_spatial_normalization_percentile: float = 90.0
151
151
  visp_solar_vignette_initial_continuum_poly_fit_order: int = 6
152
+ visp_solar_vignette_crval_bounds_px: float = 7
153
+ visp_solar_vignette_dispersion_bounds_fraction: float = 0.02
152
154
  visp_solar_vignette_wavecal_fit_kwargs: dict[str, Any] = field(
153
155
  default_factory=lambda: {
154
156
  "method": "differential_evolution",
@@ -184,6 +186,7 @@ class VispInputDatasetParameterValues:
184
186
  "solar_reference_atlas_hash_id": "md5:84ab4c50689ef235fe5ed4f7ee905ca0",
185
187
  }
186
188
  )
189
+ visp_wavecal_init_crval_guess_normalization_percentile: float = 95
187
190
  visp_wavecal_init_resolving_power: int = 150000
188
191
  visp_wavecal_init_straylight_fraction: float = 0.2
189
192
  visp_wavecal_init_opacity_factor: float = 5.0
@@ -86,19 +86,27 @@ def test_vignette_metrics_built(visp_assemble_quality_data_task):
86
86
  filter(lambda i: i["name"].startswith("Initial Vignette Estimation"), final_report)
87
87
  )
88
88
  assert len(initial_vignette_metrics) == 2
89
+ facet_set = set()
89
90
  for m in initial_vignette_metrics:
90
91
  assert m["metric_code"] == VispMetricCode.solar_first_vignette.value
91
92
  assert m["description"]
92
93
  assert m["multi_plot_data"]
94
+ facet_set.add(m["facet"])
95
+
96
+ assert facet_set == {"BEAM_1", "BEAM_2"}
93
97
 
94
98
  final_vignette_metrics = list(
95
99
  filter(lambda i: i["name"].startswith("Final Vignette Estimation"), final_report)
96
100
  )
97
101
  assert len(final_vignette_metrics) == 2
102
+ facet_set = set()
98
103
  for m in final_vignette_metrics:
99
104
  assert m["metric_code"] == VispMetricCode.solar_final_vignette.value
100
105
  assert m["description"]
101
106
  assert m["multi_plot_data"]
107
+ facet_set.add(m["facet"])
108
+
109
+ assert facet_set == {"BEAM_1", "BEAM_2"}
102
110
 
103
111
 
104
112
  def test_correct_polcal_label_list(
@@ -34,6 +34,7 @@ def arm_parameter_names() -> list[str]:
34
34
  @pytest.fixture(scope="session")
35
35
  def unit_parameter_names_and_units() -> dict[str, u.Unit | list[u.Unit]]:
36
36
  return {
37
+ "solar_vignette_crval_bounds_px": u.pix,
37
38
  "wavecal_camera_lens_parameters": [u.m, u.m / u.nm, u.m / u.nm**2],
38
39
  "wavecal_pixel_pitch_micron_per_pix": u.um / u.pix,
39
40
  }
@@ -310,8 +310,17 @@ def solar_gain_task(
310
310
 
311
311
 
312
312
  @pytest.mark.parametrize(
313
- "background_on",
314
- [pytest.param(True, id="background_on"), pytest.param(False, id="background_off")],
313
+ "background_on, fit_kwargs",
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"),
323
+ ],
315
324
  )
316
325
  def test_solar_gain_task(
317
326
  solar_gain_task,
@@ -326,6 +335,7 @@ def test_solar_gain_task(
326
335
  assign_input_dataset_doc_to_task,
327
336
  mocker,
328
337
  fake_gql_client,
338
+ fit_kwargs,
329
339
  ):
330
340
  """
331
341
  Given: A set of raw solar gain images and necessary intermediate calibrations
@@ -341,6 +351,7 @@ def test_solar_gain_task(
341
351
  input_shape = (num_wave_pix * 2, 100)
342
352
  intermediate_shape = (num_wave_pix, 100)
343
353
  beam_border = input_shape[0] // 2
354
+ conftest_fit_kwargs = VispInputDatasetParameterValues().visp_solar_vignette_wavecal_fit_kwargs
344
355
  assign_input_dataset_doc_to_task(
345
356
  task,
346
357
  VispInputDatasetParameterValues(
@@ -350,6 +361,9 @@ def test_solar_gain_task(
350
361
  visp_wavecal_init_resolving_power=resolving_power,
351
362
  visp_wavecal_camera_lens_parameters_1=lens_parameters_no_units,
352
363
  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
+ ),
353
367
  ),
354
368
  arm_id=1,
355
369
  )
@@ -447,8 +461,10 @@ def test_continuum_wavecal_parameters():
447
461
  Then: The polynomial coefficients are present
448
462
  """
449
463
  order = 3
464
+ zeroth_order = 6.28
450
465
  param_object = WavelengthCalibrationParametersWithContinuum(
451
466
  continuum_poly_fit_order=order,
467
+ zeroth_order_continuum_coefficient=zeroth_order,
452
468
  crval=400 * u.nm,
453
469
  dispersion=3 * u.nm / u.pix,
454
470
  incident_light_angle=4 * u.deg,
@@ -456,6 +472,7 @@ def test_continuum_wavecal_parameters():
456
472
  doppler_velocity=0 * u.km / u.s,
457
473
  order=1,
458
474
  normalized_abscissa=np.arange(10),
475
+ continuum_level=99999.9,
459
476
  )
460
477
  lmfit_params = param_object.lmfit_parameters
461
478
 
@@ -464,13 +481,13 @@ def test_continuum_wavecal_parameters():
464
481
  assert "poly_coeff_01" in lmfit_params
465
482
  assert "poly_coeff_00" in lmfit_params
466
483
 
467
- assert lmfit_params["poly_coeff_03"].value == 1
468
- assert lmfit_params["poly_coeff_02"].value == 0
469
- assert lmfit_params["poly_coeff_01"].value == 0
470
- assert lmfit_params["poly_coeff_00"].value == 0
484
+ assert lmfit_params["poly_coeff_03"].init_value == zeroth_order
485
+ assert lmfit_params["poly_coeff_02"].init_value == 0
486
+ assert lmfit_params["poly_coeff_01"].init_value == 0
487
+ assert lmfit_params["poly_coeff_00"].init_value == 0
471
488
 
472
- assert lmfit_params["poly_coeff_03"].min == 0.7
473
- assert lmfit_params["poly_coeff_03"].max == 1.3
489
+ assert lmfit_params["poly_coeff_03"].min == zeroth_order * 0.5
490
+ assert lmfit_params["poly_coeff_03"].max == zeroth_order * 1.5
474
491
  assert lmfit_params["poly_coeff_02"].min == -1
475
492
  assert lmfit_params["poly_coeff_02"].max == 1
476
493
  assert lmfit_params["poly_coeff_01"].min == -1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.0.0rc1
3
+ Version: 5.0.0rc3
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.1rc2
16
+ Requires-Dist: dkist-processing-common==11.8.1rc3
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
21
  Requires-Dist: dkist-service-configuration==4.1.7
22
22
  Requires-Dist: dkist-spectral-lines==3.0.0
23
- Requires-Dist: solar-wavelength-calibration==2.0.0rc3
23
+ Requires-Dist: solar-wavelength-calibration==2.0.0rc4
24
24
  Requires-Dist: astropy==7.0.2
25
25
  Requires-Dist: numpy==2.2.5
26
26
  Requires-Dist: sunpy==6.1.1
@@ -95,44 +95,44 @@ Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
95
95
  Requires-Dist: aiohttp==3.13.2; extra == "frozen"
96
96
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
97
97
  Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
98
- Requires-Dist: alembic==1.17.1; extra == "frozen"
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
101
  Requires-Dist: anyio==4.11.0; extra == "frozen"
102
102
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
103
103
  Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
104
- Requires-Dist: apache-airflow-providers-common-compat==1.8.0; extra == "frozen"
105
- Requires-Dist: apache-airflow-providers-common-io==1.6.4; extra == "frozen"
106
- Requires-Dist: apache-airflow-providers-common-sql==1.28.2; 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"
107
107
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
109
- Requires-Dist: apache-airflow-providers-http==5.4.0; extra == "frozen"
110
- Requires-Dist: apache-airflow-providers-imap==3.9.3; extra == "frozen"
111
- Requires-Dist: apache-airflow-providers-postgres==6.4.0; extra == "frozen"
112
- Requires-Dist: apache-airflow-providers-smtp==2.3.1; extra == "frozen"
113
- Requires-Dist: apache-airflow-providers-sqlite==4.1.2; 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
114
  Requires-Dist: apispec==6.8.4; 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"
118
118
  Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
119
- Requires-Dist: asgiref==3.10.0; extra == "frozen"
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
122
  Requires-Dist: astropy-iers-data==0.2025.11.10.0.38.31; extra == "frozen"
123
123
  Requires-Dist: asyncpg==0.30.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.2; extra == "frozen"
126
+ Requires-Dist: billiard==4.2.3; extra == "frozen"
127
127
  Requires-Dist: blinker==1.9.0; extra == "frozen"
128
- Requires-Dist: boto3==1.40.71; extra == "frozen"
129
- Requires-Dist: botocore==1.40.71; extra == "frozen"
128
+ Requires-Dist: boto3==1.41.1; extra == "frozen"
129
+ Requires-Dist: botocore==1.41.1; extra == "frozen"
130
130
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
131
131
  Requires-Dist: celery==5.3.1; 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"
135
- Requires-Dist: click==8.3.0; extra == "frozen"
135
+ Requires-Dist: click==8.3.1; extra == "frozen"
136
136
  Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
137
137
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
138
138
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
@@ -149,11 +149,11 @@ 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.1rc2; extra == "frozen"
152
+ Requires-Dist: dkist-processing-common==11.8.1rc3; extra == "frozen"
153
153
  Requires-Dist: dkist-processing-core==6.0.0; 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.0rc1; extra == "frozen"
156
+ Requires-Dist: dkist-processing-visp==5.0.0rc3; extra == "frozen"
157
157
  Requires-Dist: dkist-service-configuration==4.1.7; 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"
@@ -251,7 +251,7 @@ Requires-Dist: proglog==0.1.12; extra == "frozen"
251
251
  Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
252
252
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
253
253
  Requires-Dist: propcache==0.4.1; extra == "frozen"
254
- Requires-Dist: protobuf==6.33.0; extra == "frozen"
254
+ 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"
@@ -273,8 +273,8 @@ 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.28.0; extra == "frozen"
277
- Requires-Dist: s3transfer==0.14.0; extra == "frozen"
276
+ Requires-Dist: rpds-py==0.29.0; extra == "frozen"
277
+ Requires-Dist: s3transfer==0.15.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"
@@ -282,7 +282,7 @@ 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
284
  Requires-Dist: sniffio==1.3.1; extra == "frozen"
285
- Requires-Dist: solar-wavelength-calibration==2.0.0rc3; extra == "frozen"
285
+ Requires-Dist: solar-wavelength-calibration==2.0.0rc4; extra == "frozen"
286
286
  Requires-Dist: sqids==0.5.1; extra == "frozen"
287
287
  Requires-Dist: sqlparse==0.5.3; extra == "frozen"
288
288
  Requires-Dist: sunpy==6.1.1; extra == "frozen"
@@ -301,14 +301,14 @@ Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
301
301
  Requires-Dist: tzdata==2025.2; 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.5; extra == "frozen"
304
+ Requires-Dist: universal_pathlib==0.3.6; extra == "frozen"
305
305
  Requires-Dist: urllib3==2.5.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"
309
309
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
310
310
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
311
- Requires-Dist: yamale==6.0.0; extra == "frozen"
311
+ Requires-Dist: yamale==6.1.0; extra == "frozen"
312
312
  Requires-Dist: yarl==1.22.0; extra == "frozen"
313
313
  Requires-Dist: zipp==3.23.0; extra == "frozen"
314
314