dkist-processing-cryonirsp 1.7.5__tar.gz → 1.7.7__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.

Potentially problematic release.


This version of dkist-processing-cryonirsp might be problematic. Click here for more details.

Files changed (125) hide show
  1. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/CHANGELOG.rst +18 -0
  2. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/PKG-INFO +19 -18
  3. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/models/parameters.py +6 -6
  4. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/cryonirsp_base.py +1 -3
  5. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/parse.py +2 -3
  6. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py +1 -2
  7. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/write_l1.py +2 -3
  8. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/conftest.py +69 -39
  9. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +44 -14
  10. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +1 -1
  11. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +1 -1
  12. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_ci_science.py +1 -1
  13. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_corrections.py +2 -3
  14. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_cryo_base.py +1 -1
  15. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_dark.py +2 -2
  16. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_gain.py +2 -2
  17. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_instrument_polarization.py +10 -4
  18. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_linearity_correction.py +1 -1
  19. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_parameters.py +16 -24
  20. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_parse.py +1 -1
  21. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +1 -1
  22. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py +1 -1
  23. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_sp_geometric.py +2 -2
  24. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_sp_science.py +1 -1
  25. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_sp_solar.py +1 -1
  26. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp.egg-info/PKG-INFO +19 -18
  27. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp.egg-info/requires.txt +18 -17
  28. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/pyproject.toml +20 -19
  29. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/.gitignore +0 -0
  30. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/.pre-commit-config.yaml +0 -0
  31. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/.readthedocs.yml +0 -0
  32. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/.snyk +0 -0
  33. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/README.rst +0 -0
  34. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/SCIENCE_CHANGELOG.rst +0 -0
  35. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/bitbucket-pipelines.yml +0 -0
  36. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/changelog/.gitempty +0 -0
  37. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/__init__.py +0 -0
  38. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/codecs/__init__.py +0 -0
  39. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/codecs/fits.py +0 -0
  40. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/config.py +0 -0
  41. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/models/__init__.py +0 -0
  42. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/models/beam_boundaries.py +0 -0
  43. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/models/constants.py +0 -0
  44. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/models/exposure_conditions.py +0 -0
  45. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/models/tags.py +0 -0
  46. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/models/task_name.py +0 -0
  47. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/__init__.py +0 -0
  48. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/check_for_gains.py +0 -0
  49. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +0 -0
  50. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +0 -0
  51. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/exposure_conditions.py +0 -0
  52. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/map_repeats.py +0 -0
  53. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/measurements.py +0 -0
  54. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/modstates.py +0 -0
  55. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/optical_density_filters.py +0 -0
  56. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/polarimetric_check.py +0 -0
  57. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/scan_step.py +0 -0
  58. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/time.py +0 -0
  59. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/parsers/wavelength.py +0 -0
  60. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/__init__.py +0 -0
  61. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/assemble_movie.py +0 -0
  62. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/bad_pixel_map.py +0 -0
  63. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +0 -0
  64. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +0 -0
  65. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/ci_science.py +0 -0
  66. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/dark.py +0 -0
  67. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/gain.py +0 -0
  68. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/instrument_polarization.py +0 -0
  69. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/l1_output_data.py +0 -0
  70. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/linearity_correction.py +0 -0
  71. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/make_movie_frames.py +0 -0
  72. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/mixin/__init__.py +0 -0
  73. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/mixin/corrections.py +0 -0
  74. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +0 -0
  75. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/quality_metrics.py +0 -0
  76. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/science_base.py +0 -0
  77. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +0 -0
  78. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/sp_geometric.py +0 -0
  79. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/sp_science.py +0 -0
  80. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tasks/sp_solar_gain.py +0 -0
  81. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/__init__.py +0 -0
  82. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/header_models.py +0 -0
  83. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/local_trial_workflows/__init__.py +0 -0
  84. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  85. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  86. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +0 -0
  87. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_assemble_movie.py +0 -0
  88. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_assemble_qualilty.py +0 -0
  89. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_cryo_constants.py +0 -0
  90. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_make_movie_frames.py +0 -0
  91. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_quality.py +0 -0
  92. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +0 -0
  93. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py +0 -0
  94. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_workflows.py +0 -0
  95. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/tests/test_write_l1.py +0 -0
  96. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/workflows/__init__.py +0 -0
  97. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/workflows/ci_l0_processing.py +0 -0
  98. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/workflows/sp_l0_processing.py +0 -0
  99. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp/workflows/trial_workflows.py +0 -0
  100. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp.egg-info/SOURCES.txt +0 -0
  101. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp.egg-info/dependency_links.txt +0 -0
  102. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/dkist_processing_cryonirsp.egg-info/top_level.txt +0 -0
  103. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/Makefile +0 -0
  104. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/bad_pixel_calibration.rst +0 -0
  105. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/beam_angle_calculation.rst +0 -0
  106. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/beam_boundary_computation.rst +0 -0
  107. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/changelog.rst +0 -0
  108. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/ci_science_calibration.rst +0 -0
  109. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/conf.py +0 -0
  110. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/index.rst +0 -0
  111. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/l0_to_l1_cryonirsp_ci-full-trial.rst +0 -0
  112. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/l0_to_l1_cryonirsp_ci.rst +0 -0
  113. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/l0_to_l1_cryonirsp_sp-full-trial.rst +0 -0
  114. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/l0_to_l1_cryonirsp_sp.rst +0 -0
  115. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/landing_page.rst +0 -0
  116. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/linearization.rst +0 -0
  117. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/make.bat +0 -0
  118. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/requirements.txt +0 -0
  119. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/requirements_table.rst +0 -0
  120. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/scientific_changelog.rst +0 -0
  121. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/docs/sp_science_calibration.rst +0 -0
  122. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/licenses/LICENSE.rst +0 -0
  123. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/science_towncrier.sh +0 -0
  124. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/setup.cfg +0 -0
  125. {dkist_processing_cryonirsp-1.7.5 → dkist_processing_cryonirsp-1.7.7}/towncrier_science.toml +0 -0
@@ -1,3 +1,21 @@
1
+ v1.7.7 (2025-06-02)
2
+ ===================
3
+
4
+ Misc
5
+ ----
6
+
7
+ - Remove use of input dataset mixin imported from dkist-processing-common. (`#190 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/190>`__)
8
+
9
+
10
+ v1.7.6 (2025-05-30)
11
+ ===================
12
+
13
+ Misc
14
+ ----
15
+
16
+ - Update `dkist-fits-specifications` to v4.17.0 (`#205 <https://bitbucket.org/dkistdc/dkist-processing-cryonirsp/pull-requests/205>`__)
17
+
18
+
1
19
  v1.7.5 (2025-05-28)
2
20
  ===================
3
21
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-cryonirsp
3
- Version: 1.7.5
3
+ Version: 1.7.7
4
4
  Summary: Science processing code for the Cryo-NIRSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -15,9 +15,9 @@ Requires-Python: >=3.11
15
15
  Description-Content-Type: text/x-rst
16
16
  Requires-Dist: Pillow==10.4.0
17
17
  Requires-Dist: astropy==7.0.2
18
- Requires-Dist: dkist-fits-specifications==4.16.0
18
+ Requires-Dist: dkist-fits-specifications==4.17.0
19
19
  Requires-Dist: dkist-header-validator==5.2.1
20
- Requires-Dist: dkist-processing-common==10.8.3
20
+ Requires-Dist: dkist-processing-common==10.9.0
21
21
  Requires-Dist: dkist-processing-math==2.2.0
22
22
  Requires-Dist: dkist-processing-pac==3.1.1
23
23
  Requires-Dist: dkist-spectral-lines==3.0.0
@@ -88,7 +88,7 @@ Requires-Dist: WTForms==3.2.1; extra == "frozen"
88
88
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
89
89
  Requires-Dist: aioftp==0.25.1; extra == "frozen"
90
90
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
91
- Requires-Dist: aiohttp==3.12.2; extra == "frozen"
91
+ Requires-Dist: aiohttp==3.12.7; extra == "frozen"
92
92
  Requires-Dist: aiosignal==1.3.2; extra == "frozen"
93
93
  Requires-Dist: alembic==1.16.1; extra == "frozen"
94
94
  Requires-Dist: amqp==5.3.1; extra == "frozen"
@@ -114,16 +114,16 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
114
114
  Requires-Dist: asgiref==3.8.1; extra == "frozen"
115
115
  Requires-Dist: asteval==1.0.6; extra == "frozen"
116
116
  Requires-Dist: astropy==7.0.2; extra == "frozen"
117
- Requires-Dist: astropy-iers-data==0.2025.5.26.0.37.21; extra == "frozen"
117
+ Requires-Dist: astropy-iers-data==0.2025.6.2.0.38.23; extra == "frozen"
118
118
  Requires-Dist: asyncpg==0.30.0; extra == "frozen"
119
119
  Requires-Dist: attrs==25.3.0; extra == "frozen"
120
120
  Requires-Dist: babel==2.17.0; extra == "frozen"
121
121
  Requires-Dist: billiard==4.2.1; extra == "frozen"
122
122
  Requires-Dist: blinker==1.9.0; extra == "frozen"
123
- Requires-Dist: boto3==1.38.24; extra == "frozen"
124
- Requires-Dist: botocore==1.38.24; extra == "frozen"
123
+ Requires-Dist: boto3==1.38.28; extra == "frozen"
124
+ Requires-Dist: botocore==1.38.28; extra == "frozen"
125
125
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
126
- Requires-Dist: celery==5.5.2; extra == "frozen"
126
+ Requires-Dist: celery==5.5.3; extra == "frozen"
127
127
  Requires-Dist: certifi==2025.4.26; extra == "frozen"
128
128
  Requires-Dist: cffi==1.17.1; extra == "frozen"
129
129
  Requires-Dist: charset-normalizer==3.4.2; extra == "frozen"
@@ -144,14 +144,14 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
144
144
  Requires-Dist: decorator==5.2.1; extra == "frozen"
145
145
  Requires-Dist: dill==0.4.0; extra == "frozen"
146
146
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
147
- Requires-Dist: dkist-processing-common==10.8.3; extra == "frozen"
147
+ Requires-Dist: dkist-processing-common==10.9.0; extra == "frozen"
148
148
  Requires-Dist: dkist-processing-core==5.1.1; extra == "frozen"
149
- Requires-Dist: dkist-processing-cryonirsp==1.7.5; extra == "frozen"
149
+ Requires-Dist: dkist-processing-cryonirsp==1.7.7; extra == "frozen"
150
150
  Requires-Dist: dkist-processing-math==2.2.0; extra == "frozen"
151
151
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
152
152
  Requires-Dist: dkist-service-configuration==2.2; extra == "frozen"
153
153
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
154
- Requires-Dist: dkist_fits_specifications==4.16.0; extra == "frozen"
154
+ Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
155
155
  Requires-Dist: dnspython==2.7.0; extra == "frozen"
156
156
  Requires-Dist: ecs-logging==2.2.0; extra == "frozen"
157
157
  Requires-Dist: elastic-apm==6.23.0; extra == "frozen"
@@ -165,7 +165,8 @@ Requires-Dist: globus-sdk==3.56.1; extra == "frozen"
165
165
  Requires-Dist: google-re2==1.1.20240702; extra == "frozen"
166
166
  Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
167
167
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
168
- Requires-Dist: grpcio==1.71.0; extra == "frozen"
168
+ Requires-Dist: greenlet==3.2.2; extra == "frozen"
169
+ Requires-Dist: grpcio==1.72.1; extra == "frozen"
169
170
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
170
171
  Requires-Dist: h11==0.16.0; extra == "frozen"
171
172
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
@@ -182,7 +183,7 @@ Requires-Dist: jsonschema==4.24.0; extra == "frozen"
182
183
  Requires-Dist: jsonschema-specifications==2025.4.1; extra == "frozen"
183
184
  Requires-Dist: jupyter_core==5.8.1; extra == "frozen"
184
185
  Requires-Dist: kiwisolver==1.4.8; extra == "frozen"
185
- Requires-Dist: kombu==5.5.3; extra == "frozen"
186
+ Requires-Dist: kombu==5.5.4; extra == "frozen"
186
187
  Requires-Dist: largestinteriorrectangle==0.2.1; extra == "frozen"
187
188
  Requires-Dist: lazy-object-proxy==1.11.0; extra == "frozen"
188
189
  Requires-Dist: lazy_loader==0.4; extra == "frozen"
@@ -204,7 +205,7 @@ Requires-Dist: more-itertools==10.7.0; extra == "frozen"
204
205
  Requires-Dist: moviepy==2.1.2; extra == "frozen"
205
206
  Requires-Dist: multidict==6.4.4; extra == "frozen"
206
207
  Requires-Dist: nbformat==5.10.4; extra == "frozen"
207
- Requires-Dist: networkx==3.4.2; extra == "frozen"
208
+ Requires-Dist: networkx==3.5; extra == "frozen"
208
209
  Requires-Dist: numba==0.61.2; extra == "frozen"
209
210
  Requires-Dist: numpy==2.2.5; extra == "frozen"
210
211
  Requires-Dist: object-clerk==0.1.2; extra == "frozen"
@@ -229,10 +230,10 @@ Requires-Dist: platformdirs==4.3.8; extra == "frozen"
229
230
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
230
231
  Requires-Dist: prison==0.2.1; extra == "frozen"
231
232
  Requires-Dist: proglog==0.1.12; extra == "frozen"
232
- Requires-Dist: prometheus_client==0.22.0; extra == "frozen"
233
+ Requires-Dist: prometheus_client==0.22.1; extra == "frozen"
233
234
  Requires-Dist: prompt_toolkit==3.0.51; extra == "frozen"
234
235
  Requires-Dist: propcache==0.3.1; extra == "frozen"
235
- Requires-Dist: protobuf==5.29.4; extra == "frozen"
236
+ Requires-Dist: protobuf==5.29.5; extra == "frozen"
236
237
  Requires-Dist: psutil==7.0.0; extra == "frozen"
237
238
  Requires-Dist: psycopg2-binary==2.9.10; extra == "frozen"
238
239
  Requires-Dist: py==1.11.0; extra == "frozen"
@@ -273,12 +274,12 @@ Requires-Dist: talus==1.1.0; extra == "frozen"
273
274
  Requires-Dist: tenacity==9.1.2; extra == "frozen"
274
275
  Requires-Dist: termcolor==3.1.0; extra == "frozen"
275
276
  Requires-Dist: text-unidecode==1.3; extra == "frozen"
276
- Requires-Dist: tifffile==2025.5.26; extra == "frozen"
277
+ Requires-Dist: tifffile==2025.6.1; extra == "frozen"
277
278
  Requires-Dist: tornado==6.5.1; extra == "frozen"
278
279
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
279
280
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
280
281
  Requires-Dist: typing-inspection==0.4.1; extra == "frozen"
281
- Requires-Dist: typing_extensions==4.13.2; extra == "frozen"
282
+ Requires-Dist: typing_extensions==4.14.0; extra == "frozen"
282
283
  Requires-Dist: tzdata==2025.2; extra == "frozen"
283
284
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
284
285
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
@@ -136,8 +136,8 @@ class CryonirspParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmI
136
136
  @cached_property
137
137
  def linearization_thresholds(self) -> np.ndarray:
138
138
  """Name of parameter associated with the linearization thresholds."""
139
- param_dict = self._find_parameter_for_arm("cryonirsp_linearization_thresholds")
140
- value = self._load_param_value_from_numpy_save(param_dict)
139
+ param_obj = self._find_parameter_for_arm("cryonirsp_linearization_thresholds")
140
+ value = self._load_param_value_from_numpy_save(param_obj=param_obj)
141
141
  # float64 data can blow up the memory required for linearization - convert to float32
142
142
  if np.issubdtype(value.dtype, np.float64):
143
143
  value = value.astype(np.float32, casting="same_kind")
@@ -275,8 +275,8 @@ class CryonirspParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmI
275
275
  - wavelength in nanometers
276
276
  - transmission at given wavelength
277
277
  """
278
- param_dict = self._find_most_recent_past_value("cryonirsp_solar_atlas")
279
- return self._load_param_value_from_numpy_save(param_dict)
278
+ param_obj = self._find_most_recent_past_value("cryonirsp_solar_atlas")
279
+ return self._load_param_value_from_numpy_save(param_obj=param_obj)
280
280
 
281
281
  @cached_property
282
282
  def telluric_atlas(self) -> np.ndarray:
@@ -286,5 +286,5 @@ class CryonirspParameters(ParameterBase, ParameterWavelengthMixin, ParameterArmI
286
286
  - wavelength in nanometers
287
287
  - transmission at given wavelength
288
288
  """
289
- param_dict = self._find_most_recent_past_value("cryonirsp_telluric_atlas")
290
- return self._load_param_value_from_numpy_save(param_dict)
289
+ param_obj = self._find_most_recent_past_value("cryonirsp_telluric_atlas")
290
+ return self._load_param_value_from_numpy_save(param_obj=param_obj)
@@ -2,7 +2,6 @@
2
2
  from abc import ABC
3
3
 
4
4
  from dkist_processing_common.tasks import WorkflowTaskBase
5
- from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
6
5
  from dkist_processing_common.tasks.mixin.quality import QualityMixin
7
6
 
8
7
  from dkist_processing_cryonirsp.models.constants import CryonirspConstants
@@ -12,7 +11,6 @@ from dkist_processing_cryonirsp.tasks.mixin.corrections import CorrectionsMixin
12
11
 
13
12
  class CryonirspTaskBase(
14
13
  WorkflowTaskBase,
15
- InputDatasetMixin,
16
14
  CorrectionsMixin,
17
15
  QualityMixin,
18
16
  ABC,
@@ -50,7 +48,7 @@ class CryonirspTaskBase(
50
48
  workflow_version=workflow_version,
51
49
  )
52
50
  self.parameters = CryonirspParameters(
53
- self.input_dataset_parameters,
51
+ scratch=self.scratch,
54
52
  obs_ip_start_time=self.constants.obs_ip_start_time,
55
53
  wavelength=self.constants.wavelength,
56
54
  arm_id=self.constants.arm_id,
@@ -20,7 +20,6 @@ from dkist_processing_common.parsers.unique_bud import UniqueBud
20
20
  from dkist_processing_common.tasks import default_constant_bud_factory
21
21
  from dkist_processing_common.tasks import default_tag_flower_factory
22
22
  from dkist_processing_common.tasks import ParseDataBase
23
- from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
24
23
 
25
24
  from dkist_processing_cryonirsp.models.constants import CryonirspBudName
26
25
  from dkist_processing_cryonirsp.models.parameters import CryonirspParsingParameters
@@ -142,7 +141,7 @@ class ParseL0CryonirspRampData(ParseDataBase):
142
141
  return [Tag.input(), Tag.frame()]
143
142
 
144
143
 
145
- class ParseL0CryonirspLinearizedData(ParseDataBase, InputDatasetMixin):
144
+ class ParseL0CryonirspLinearizedData(ParseDataBase):
146
145
  """
147
146
  Parse linearity corrected CryoNIRSP input data to add common and Cryonirsp specific constants.
148
147
 
@@ -168,7 +167,7 @@ class ParseL0CryonirspLinearizedData(ParseDataBase, InputDatasetMixin):
168
167
  workflow_name=workflow_name,
169
168
  workflow_version=workflow_version,
170
169
  )
171
- self.parameters = CryonirspParsingParameters(self.input_dataset_parameters)
170
+ self.parameters = CryonirspParsingParameters(scratch=self.scratch)
172
171
 
173
172
  @property
174
173
  def fits_parsing_class(self):
@@ -10,7 +10,6 @@ from astropy.io import fits
10
10
  from astropy.time import Time
11
11
  from astropy.wcs import WCS
12
12
  from dkist_processing_common.codecs.asdf import asdf_encoder
13
- from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
14
13
  from dkist_service_configuration.logging import logger
15
14
  from scipy.ndimage import gaussian_filter1d
16
15
  from scipy.optimize import differential_evolution
@@ -26,7 +25,7 @@ from dkist_processing_cryonirsp.tasks.cryonirsp_base import CryonirspTaskBase
26
25
  __all__ = ["SPDispersionAxisCorrection"]
27
26
 
28
27
 
29
- class SPDispersionAxisCorrection(CryonirspTaskBase, InputDatasetMixin):
28
+ class SPDispersionAxisCorrection(CryonirspTaskBase):
30
29
  """Task class for correcting the dispersion axis wavelength values.
31
30
 
32
31
  Parameters
@@ -14,7 +14,6 @@ from astropy.time.core import Time
14
14
  from dkist_processing_common.codecs.asdf import asdf_decoder
15
15
  from dkist_processing_common.models.wavelength import WavelengthRange
16
16
  from dkist_processing_common.tasks import WriteL1Frame
17
- from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
18
17
  from sunpy.coordinates import GeocentricEarthEquatorial
19
18
  from sunpy.coordinates import Helioprojective
20
19
 
@@ -25,7 +24,7 @@ from dkist_processing_cryonirsp.models.tags import CryonirspTag
25
24
  __all__ = ["CIWriteL1Frame", "SPWriteL1Frame"]
26
25
 
27
26
 
28
- class CryonirspWriteL1Frame(WriteL1Frame, ABC, InputDatasetMixin):
27
+ class CryonirspWriteL1Frame(WriteL1Frame, ABC):
29
28
  """
30
29
  Task class for writing out calibrated l1 CryoNIRSP frames.
31
30
 
@@ -51,7 +50,7 @@ class CryonirspWriteL1Frame(WriteL1Frame, ABC, InputDatasetMixin):
51
50
  workflow_version=workflow_version,
52
51
  )
53
52
  self.parameters = CryonirspParameters(
54
- self.input_dataset_parameters,
53
+ scratch=self.scratch,
55
54
  obs_ip_start_time=self.constants.obs_ip_start_time,
56
55
  wavelength=self.constants.wavelength,
57
56
  arm_id=self.constants.arm_id,
@@ -1,11 +1,9 @@
1
1
  import json
2
- import os
3
2
  from collections.abc import Iterable
4
3
  from dataclasses import asdict
5
4
  from dataclasses import dataclass
6
5
  from dataclasses import field
7
6
  from dataclasses import is_dataclass
8
- from pathlib import Path
9
7
  from random import randint
10
8
  from typing import Any
11
9
  from typing import Callable
@@ -21,8 +19,15 @@ from dkist_data_simulator.spec122 import Spec122Dataset
21
19
  from dkist_header_validator import spec122_validator
22
20
  from dkist_header_validator.translator import sanitize_to_spec214_level1
23
21
  from dkist_header_validator.translator import translate_spec122_to_spec214_l0
22
+ from dkist_processing_common.codecs.array import array_encoder
23
+ from dkist_processing_common.codecs.basemodel import basemodel_encoder
24
24
  from dkist_processing_common.codecs.fits import fits_array_encoder
25
+ from dkist_processing_common.models.input_dataset import InputDatasetFilePointer
26
+ from dkist_processing_common.models.input_dataset import InputDatasetObject
27
+ from dkist_processing_common.models.input_dataset import InputDatasetPartDocumentList
25
28
  from dkist_processing_common.tasks import WorkflowTaskBase
29
+ from pydantic import Field
30
+ from pydantic import model_validator
26
31
 
27
32
  from dkist_processing_cryonirsp.models.constants import CryonirspConstants
28
33
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
@@ -250,58 +255,70 @@ class WavelengthParameter:
250
255
  return hash((self.values, self.wavelength))
251
256
 
252
257
 
253
- @dataclass
254
- class FileParameter:
255
- """For parameters that are files on disk."""
256
-
257
- param_path: str
258
- is_file: bool = True
259
- objectKey: str = "not_used_because_its_already_converted"
260
- bucket: str = "not_used_because_we_dont_transfer"
261
- # Note: we have these as already-parsed file parameter (i.e., no "__file__") mainly because it allows us to have
262
- # parameter files that are outside of the workflow basepath (where they would not be able to be tagged with
263
- # PARAMETER_FILE). This is a pattern that we see in grogu testing.
264
- # A downside of this approach is that we are slightly more fragile to changes in the underlying __file__ parsing
265
- # in `*-common`. Apologies to any future devs who run into this problem. To fix it you'll need to make
266
- # downstream fixtures aware of the actual files so they can be tagged prior to the instantiation of the
267
- # Parameter object on some Task.
258
+ class FileObject(InputDatasetObject):
259
+ """For files on disk, with attributes overridden to have defaults."""
260
+
261
+ bucket: str | None = None
262
+ object_key: str | None = None
263
+
264
+ def __hash__(self):
265
+ return hash((self.bucket, self.object_key, self.tag))
266
+
267
+
268
+ class FileParameter(InputDatasetFilePointer):
269
+ """For parameters that are files, with additional attributes to make FileObjects."""
270
+
271
+ object_key: str | None = Field(
272
+ default="dummy_default_value", exclude=True
273
+ ) # Not necessary, but useful for GROGU
274
+ file_pointer: FileObject = Field(default_factory=lambda: FileObject(), alias="__file__")
275
+
276
+ @model_validator(mode="after")
277
+ def _populate_file_object(self):
278
+ self.file_pointer = FileObject(
279
+ bucket="not_used_because_we_dont_transfer",
280
+ object_key=self.object_key,
281
+ tag=CryonirspTag.parameter((self.object_key)),
282
+ )
283
+ return self
268
284
 
269
285
 
270
286
  # These constants are used to prevent name errors in _create_parameter_files
271
- # and in CryonirspTestingParameters
287
+ # and in CryonirspTestingParameters.
272
288
  LINEARIZATION_THRESHOLDS_CI = "cryonirsp_linearization_thresholds_ci.npy"
273
289
  LINEARIZATION_THRESHOLDS_SP = "cryonirsp_linearization_thresholds_sp.npy"
274
290
  SOLAR_ATLAS = "cryonirsp_solar_atlas.npy"
275
291
  TELLURIC_ATLAS = "cryonirsp_telluric_atlas.npy"
276
292
 
277
293
 
278
- def _create_parameter_files(param_path: Path) -> None:
294
+ def _create_parameter_files(task: WorkflowTaskBase) -> None:
279
295
  # linearization thresholds
280
296
  thresh = np.ones((10, 10), dtype=np.float64) * 100.0
281
- np.save(os.path.join(param_path, LINEARIZATION_THRESHOLDS_CI), thresh)
282
- np.save(os.path.join(param_path, LINEARIZATION_THRESHOLDS_SP), thresh)
297
+ task.write(
298
+ data=thresh, tags=CryonirspTag.parameter(LINEARIZATION_THRESHOLDS_CI), encoder=array_encoder
299
+ )
300
+ task.write(
301
+ data=thresh, tags=CryonirspTag.parameter(LINEARIZATION_THRESHOLDS_SP), encoder=array_encoder
302
+ )
283
303
 
284
304
  # solar and telluric atlases
285
305
  atlas_wavelengths = range(300, 16600)
286
306
  atlas_transmission = np.random.rand(16300)
287
307
  atlas = [atlas_wavelengths, atlas_transmission]
288
- np.save(os.path.join(param_path, SOLAR_ATLAS), atlas)
289
- np.save(os.path.join(param_path, TELLURIC_ATLAS), atlas)
308
+ task.write(data=atlas, tags=CryonirspTag.parameter(SOLAR_ATLAS), encoder=array_encoder)
309
+ task.write(data=atlas, tags=CryonirspTag.parameter(TELLURIC_ATLAS), encoder=array_encoder)
290
310
 
291
311
 
292
312
  TestingParameters = TypeVar("TestingParameters", bound="CryonirspTestingParameters")
293
313
 
294
314
 
295
315
  def cryonirsp_testing_parameters_factory(
296
- param_path: Path | str = "", create_files: bool = True
316
+ task: WorkflowTaskBase, create_files: bool = True
297
317
  ) -> TestingParameters:
298
318
  """Create the InputDatasetParameterValue objects and write the parameter files."""
299
- if isinstance(param_path, str):
300
- param_path = Path(param_path)
301
- absolute_path = param_path.absolute()
302
319
 
303
320
  if create_files:
304
- _create_parameter_files(absolute_path)
321
+ _create_parameter_files(task=task)
305
322
 
306
323
  @dataclass
307
324
  class CryonirspTestingParameters:
@@ -339,7 +356,7 @@ def cryonirsp_testing_parameters_factory(
339
356
  cryonirsp_fringe_correction_lowpass_cutoff_period: float = 40.0
340
357
  cryonirsp_linearization_thresholds_ci: FileParameter = field(
341
358
  default_factory=lambda: FileParameter(
342
- param_path=str(absolute_path / LINEARIZATION_THRESHOLDS_CI)
359
+ object_key=LINEARIZATION_THRESHOLDS_CI,
343
360
  )
344
361
  )
345
362
  cryonirsp_linearization_polyfit_coeffs_ci: list[float] = field(
@@ -347,7 +364,7 @@ def cryonirsp_testing_parameters_factory(
347
364
  )
348
365
  cryonirsp_linearization_thresholds_sp: FileParameter = field(
349
366
  default_factory=lambda: FileParameter(
350
- param_path=str(absolute_path / LINEARIZATION_THRESHOLDS_SP)
367
+ object_key=LINEARIZATION_THRESHOLDS_SP,
351
368
  )
352
369
  )
353
370
  cryonirsp_linearization_polyfit_coeffs_sp: list[float] = field(
@@ -364,10 +381,14 @@ def cryonirsp_testing_parameters_factory(
364
381
  WavelengthParameter(values=(-4.26, -4.26, -4.26, -4.26))
365
382
  )
366
383
  cryonirsp_solar_atlas: FileParameter = field(
367
- default_factory=lambda: FileParameter(param_path=str(absolute_path / SOLAR_ATLAS))
384
+ default_factory=lambda: FileParameter(
385
+ object_key=SOLAR_ATLAS,
386
+ )
368
387
  )
369
388
  cryonirsp_telluric_atlas: FileParameter = field(
370
- default_factory=lambda: FileParameter(param_path=str(absolute_path / TELLURIC_ATLAS))
389
+ default_factory=lambda: FileParameter(
390
+ object_key=TELLURIC_ATLAS,
391
+ )
371
392
  )
372
393
  cryonirsp_camera_mirror_focal_length_mm: float = 932.0
373
394
  cryonirsp_pixel_pitch_micron: float = 18.0
@@ -387,11 +408,15 @@ def testing_obs_ip_start_time() -> str:
387
408
 
388
409
  @pytest.fixture(scope="session")
389
410
  def input_dataset_document_simple_parameters_part():
390
- def get_input_dataset_parameters_part(parameters):
411
+ """Convert a dataclass of parameterValues into an actual input dataset parameters part."""
412
+
413
+ def make_input_dataset_parameters_part(parameters):
391
414
  parameters_list = []
392
415
 
393
416
  value_id = randint(1000, 2000)
394
417
  for pn, pv in asdict(parameters).items():
418
+ if isinstance(pv, FileParameter):
419
+ pv = pv.model_dump()
395
420
  values = [
396
421
  {
397
422
  "parameterValueId": value_id,
@@ -403,7 +428,7 @@ def input_dataset_document_simple_parameters_part():
403
428
  parameters_list.append(parameter)
404
429
  return parameters_list
405
430
 
406
- return get_input_dataset_parameters_part
431
+ return make_input_dataset_parameters_part
407
432
 
408
433
 
409
434
  @pytest.fixture(scope="session")
@@ -412,6 +437,8 @@ def assign_input_dataset_doc_to_task(
412
437
  testing_wavelength,
413
438
  testing_obs_ip_start_time,
414
439
  ):
440
+ """Load the parameters the way that tasks load the parameters in task init."""
441
+
415
442
  def update_task(
416
443
  task,
417
444
  parameters,
@@ -419,12 +446,15 @@ def assign_input_dataset_doc_to_task(
419
446
  arm_id: str = "SP",
420
447
  obs_ip_start_time=testing_obs_ip_start_time,
421
448
  ):
422
- doc_path = task.scratch.workflow_base_path / "dataset_doc.json"
423
- with open(doc_path, "w") as f:
424
- f.write(json.dumps(input_dataset_document_simple_parameters_part(parameters)))
425
- task.tag(doc_path, CryonirspTag.input_dataset_parameters())
449
+ task.write(
450
+ data=InputDatasetPartDocumentList(
451
+ doc_list=input_dataset_document_simple_parameters_part(parameters)
452
+ ),
453
+ tags=CryonirspTag.input_dataset_parameters(),
454
+ encoder=basemodel_encoder,
455
+ )
426
456
  task.parameters = parameter_class(
427
- task.input_dataset_parameters,
457
+ scratch=task.scratch,
428
458
  wavelength=testing_wavelength,
429
459
  arm_id=arm_id,
430
460
  obs_ip_start_time=obs_ip_start_time,
@@ -8,6 +8,8 @@ from random import randint
8
8
  import asdf
9
9
  from astropy.io import fits
10
10
  from dkist_header_validator import spec122_validator
11
+ from dkist_processing_common.codecs.basemodel import basemodel_encoder
12
+ from dkist_processing_common.models.input_dataset import InputDatasetPartDocumentList
11
13
  from dkist_processing_common.models.task_name import TaskName
12
14
  from dkist_processing_common.tasks import TransferTrialData
13
15
  from dkist_processing_common.tasks import WorkflowTaskBase
@@ -18,7 +20,7 @@ from dkist_processing_cryonirsp.models.tags import CryonirspTag
18
20
  from dkist_processing_cryonirsp.models.task_name import CryonirspTaskName
19
21
  from dkist_processing_cryonirsp.tasks.cryonirsp_base import CryonirspTaskBase
20
22
  from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
21
-
23
+ from dkist_processing_cryonirsp.tests.conftest import FileParameter
22
24
 
23
25
  # These are the workflow versions of the polyfit coefficient parameters
24
26
  WORKFLOW_LINEARIZATION_POLYFIT_COEFFS_CI = [
@@ -424,13 +426,13 @@ class LoadInstPolCal(LoadTaskTags):
424
426
  def translate_122_to_214_task(suffix: str):
425
427
  class Translate122To214L0(WorkflowTaskBase):
426
428
  def run(self) -> None:
427
- raw_dir = Path(self.scratch.scratch_base_path) / f"CRYO-NIRSP{self.recipe_run_id:03n}"
429
+ raw_dir = Path(self.scratch.scratch_base_path) / f"CRYONIRSP{self.recipe_run_id:03n}"
428
430
  if not os.path.exists(self.scratch.workflow_base_path):
429
431
  os.makedirs(self.scratch.workflow_base_path)
430
432
 
431
433
  if not raw_dir.exists():
432
434
  raise FileNotFoundError(
433
- f"Expected to find a raw CRYO-NIRSP{self.recipe_run_id:03n} folder in {self.scratch.scratch_base_path}"
435
+ f"Expected to find a raw CRYONIRSP{self.recipe_run_id:03n} folder in {self.scratch.scratch_base_path}"
434
436
  )
435
437
 
436
438
  for file in raw_dir.glob(f"*.{suffix}"):
@@ -465,26 +467,38 @@ def translate_122_to_214_task(suffix: str):
465
467
  def create_input_dataset_parameter_document(param_path: Path):
466
468
  class CreateInputDatasetParameterDocument(WorkflowTaskBase):
467
469
  def run(self) -> None:
468
- doc_path = self.scratch.workflow_base_path / "input_dataset_parameters.json"
469
- with open(doc_path, "w") as f:
470
- f.write(json.dumps(self.input_dataset_document_simple_parameters_part))
471
- self.tag(doc_path, CryonirspTag.input_dataset_parameters())
472
- logger.info(f"Wrote input dataset doc to {doc_path}")
470
+ relative_path = "input_dataset_parameters.json"
471
+ self.write(
472
+ data=InputDatasetPartDocumentList(
473
+ doc_list=self.input_dataset_document_simple_parameters_part
474
+ ),
475
+ relative_path=relative_path,
476
+ tags=CryonirspTag.input_dataset_parameters(),
477
+ encoder=basemodel_encoder,
478
+ )
479
+ logger.info(f"Wrote input dataset parameter doc to {relative_path}")
480
+ self.copy_and_tag_parameter_files(param_path=param_path)
481
+ logger.info(f"Copied input dataset parameter files from {param_path}")
473
482
 
474
483
  @property
475
- def input_dataset_document_simple_parameters_part(self):
476
- parameters_list = []
477
- value_id = randint(1000, 2000)
478
- param_class = cryonirsp_testing_parameters_factory(
479
- param_path=param_path, create_files=False
480
- )
484
+ def parameter_dict(self):
485
+ param_class = cryonirsp_testing_parameters_factory(task=self, create_files=False)
481
486
  params = asdict(
482
487
  param_class(
483
488
  cryonirsp_linearization_polyfit_coeffs_ci=WORKFLOW_LINEARIZATION_POLYFIT_COEFFS_CI,
484
489
  cryonirsp_linearization_polyfit_coeffs_sp=WORKFLOW_LINEARIZATION_POLYFIT_COEFFS_SP,
485
490
  )
486
491
  )
492
+ return params
493
+
494
+ @property
495
+ def input_dataset_document_simple_parameters_part(self):
496
+ parameters_list = []
497
+ value_id = randint(1000, 2000)
498
+ params = self.parameter_dict
487
499
  for pn, pv in params.items():
500
+ if isinstance(pv, FileParameter):
501
+ pv = pv.model_dump()
488
502
  values = [
489
503
  {
490
504
  "parameterValueId": value_id,
@@ -497,6 +511,22 @@ def create_input_dataset_parameter_document(param_path: Path):
497
511
 
498
512
  return parameters_list
499
513
 
514
+ def copy_and_tag_parameter_files(self, param_path=param_path):
515
+ # Copy parameter files from param_path to a place where they can be tagged
516
+ params = self.parameter_dict
517
+ destination_dir = Path(self.scratch.workflow_base_path) / "parameters"
518
+ destination_dir.mkdir(parents=True, exist_ok=True)
519
+ for pn, pv in params.items():
520
+ if isinstance(pv, FileParameter):
521
+ file_path = next(param_path.rglob(pv.file_pointer.object_key))
522
+ if file_path.parent != destination_dir:
523
+ shutil.copy(file_path, destination_dir)
524
+ logger.info(
525
+ f"Copied parameter file for '{pn}' to {destination_dir / file_path}"
526
+ )
527
+ file_path = next(destination_dir.rglob(pv.file_pointer.object_key))
528
+ self.tag(path=file_path, tags=pv.file_pointer.tag)
529
+
500
530
  return CreateInputDatasetParameterDocument
501
531
 
502
532
 
@@ -43,7 +43,7 @@ def compute_bad_pixel_map_task(
43
43
  task.scratch = WorkflowFileSystem(
44
44
  scratch_base_path=tmp_path, recipe_run_id=recipe_run_id
45
45
  )
46
- param_class = cryonirsp_testing_parameters_factory(param_path=tmp_path)
46
+ param_class = cryonirsp_testing_parameters_factory(task)
47
47
  assign_input_dataset_doc_to_task(task, param_class())
48
48
  start_time = datetime.now()
49
49
  ds = CryonirspHeadersValidCISolarGainFrames(
@@ -38,7 +38,7 @@ def compute_beam_boundaries_task(
38
38
  task.scratch = WorkflowFileSystem(
39
39
  scratch_base_path=tmp_path, recipe_run_id=recipe_run_id
40
40
  )
41
- param_class = cryonirsp_testing_parameters_factory(param_path=tmp_path)
41
+ param_class = cryonirsp_testing_parameters_factory(task)
42
42
  assign_input_dataset_doc_to_task(task, param_class())
43
43
  # Create fake bad pixel map
44
44
  task.write(
@@ -70,7 +70,7 @@ def ci_science_calibration_task(
70
70
  scratch_base_path=tmp_path, recipe_run_id=recipe_run_id
71
71
  )
72
72
 
73
- param_class = cryonirsp_testing_parameters_factory(param_path=tmp_path)
73
+ param_class = cryonirsp_testing_parameters_factory(task)
74
74
  assign_input_dataset_doc_to_task(task, param_class())
75
75
 
76
76
  # Need a beam boundary file
@@ -4,7 +4,6 @@ import numpy as np
4
4
  import pytest
5
5
  from dkist_processing_common._util.scratch import WorkflowFileSystem
6
6
  from dkist_processing_common.tasks import WorkflowTaskBase
7
- from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
8
7
  from dkist_processing_common.tests.conftest import FakeGQLClient
9
8
 
10
9
  from dkist_processing_cryonirsp.models.constants import CryonirspConstants
@@ -21,7 +20,7 @@ column_error_bad_pixel_map = base_bad_pixel_map.copy()
21
20
  column_error_bad_pixel_map[:, 6] = 1
22
21
 
23
22
 
24
- class BadPixelMapTask(WorkflowTaskBase, CorrectionsMixin, InputDatasetMixin):
23
+ class BadPixelMapTask(WorkflowTaskBase, CorrectionsMixin):
25
24
  constants: CryonirspConstants
26
25
 
27
26
  @property
@@ -58,7 +57,7 @@ def bad_pixel_mask_task(
58
57
  task.scratch = WorkflowFileSystem(
59
58
  scratch_base_path=tmp_path, recipe_run_id=recipe_run_id
60
59
  )
61
- param_class = cryonirsp_testing_parameters_factory(param_path=tmp_path)
60
+ param_class = cryonirsp_testing_parameters_factory(task)
62
61
  assign_input_dataset_doc_to_task(task, param_class())
63
62
  yield task
64
63
  finally: