dkist-processing-common 14.5.2__tar.gz → 14.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/.pre-commit-config.yaml +9 -0
  2. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/CHANGELOG.rst +20 -0
  3. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/PKG-INFO +18 -1
  4. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/README.rst +17 -0
  5. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/extras.py +1 -0
  6. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/quality_metrics.py +11 -6
  7. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/write_l1.py +1 -2
  8. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_quality.py +53 -1
  9. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common.egg-info/PKG-INFO +18 -1
  10. dkist_processing_common-14.6.1/dkist_processing_common.egg-info/scm_version.json +8 -0
  11. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/pyproject.toml +9 -0
  12. dkist_processing_common-14.5.2/dkist_processing_common.egg-info/scm_version.json +0 -8
  13. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/.gitignore +0 -0
  14. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/.readthedocs.yml +0 -0
  15. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/.rovodev/.review-agent.md +0 -0
  16. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/.snyk +0 -0
  17. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/bitbucket-pipelines.yml +0 -0
  18. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/changelog/.gitempty +0 -0
  19. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/__init__.py +0 -0
  20. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/_util/__init__.py +0 -0
  21. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/_util/constants.py +0 -0
  22. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/_util/graphql.py +0 -0
  23. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/_util/scratch.py +0 -0
  24. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/_util/tags.py +0 -0
  25. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/__init__.py +0 -0
  26. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/array.py +0 -0
  27. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/asdf.py +0 -0
  28. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/basemodel.py +0 -0
  29. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/bytes.py +0 -0
  30. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/fits.py +0 -0
  31. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/iobase.py +0 -0
  32. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/json.py +0 -0
  33. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/path.py +0 -0
  34. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/quality.py +0 -0
  35. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/codecs/str.py +0 -0
  36. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/config.py +0 -0
  37. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
  38. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/fonts/__init__.py +0 -0
  39. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/manual.py +0 -0
  40. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/__init__.py +0 -0
  41. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/constants.py +0 -0
  42. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/dkist_location.py +0 -0
  43. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/fits_access.py +0 -0
  44. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/flower_pot.py +0 -0
  45. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/fried_parameter.py +0 -0
  46. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/graphql.py +0 -0
  47. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/input_dataset.py +0 -0
  48. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/message.py +0 -0
  49. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/message_queue_binding.py +0 -0
  50. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/metric_code.py +0 -0
  51. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/parameters.py +0 -0
  52. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/quality.py +0 -0
  53. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/tags.py +0 -0
  54. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/task_name.py +0 -0
  55. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/telemetry.py +0 -0
  56. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/models/wavelength.py +0 -0
  57. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/__init__.py +0 -0
  58. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/average_bud.py +0 -0
  59. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/cs_step.py +0 -0
  60. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
  61. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
  62. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/id_bud.py +0 -0
  63. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
  64. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
  65. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/lookup_bud.py +0 -0
  66. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/near_bud.py +0 -0
  67. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/observing_program_id_bud.py +0 -0
  68. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
  69. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/quality.py +0 -0
  70. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/retarder.py +0 -0
  71. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
  72. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/task.py +0 -0
  73. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/time.py +0 -0
  74. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/unique_bud.py +0 -0
  75. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/parsers/wavelength.py +0 -0
  76. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/__init__.py +0 -0
  77. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/assemble_movie.py +0 -0
  78. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/base.py +0 -0
  79. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/l1_output_data.py +0 -0
  80. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
  81. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/globus.py +0 -0
  82. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
  83. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/metadata_store.py +0 -0
  84. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
  85. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
  86. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
  87. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/mixin/quality/_metrics.py +0 -0
  88. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/output_data_base.py +0 -0
  89. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/parse_l0_input_data.py +0 -0
  90. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/teardown.py +0 -0
  91. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
  92. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/trial_catalog.py +0 -0
  93. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/trial_output_data.py +0 -0
  94. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/write_extra.py +0 -0
  95. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tasks/write_l1_base.py +0 -0
  96. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/__init__.py +0 -0
  97. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/conftest.py +0 -0
  98. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/mock_metadata_store.py +0 -0
  99. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
  100. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_assemble_quality.py +0 -0
  101. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_base.py +0 -0
  102. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_codecs.py +0 -0
  103. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_constants.py +0 -0
  104. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_construct_dataset_extras.py +0 -0
  105. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_cs_step.py +0 -0
  106. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_dkist_location.py +0 -0
  107. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_fits_access.py +0 -0
  108. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_flower_pot.py +0 -0
  109. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_fried_parameter.py +0 -0
  110. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_input_dataset.py +0 -0
  111. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_interservice_bus.py +0 -0
  112. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_interservice_bus_mixin.py +0 -0
  113. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_manual_processing.py +0 -0
  114. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_output_data_base.py +0 -0
  115. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_parameters.py +0 -0
  116. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_parse_l0_input_data.py +0 -0
  117. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
  118. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_quality_mixin.py +0 -0
  119. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_scratch.py +0 -0
  120. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_stems.py +0 -0
  121. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
  122. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_tags.py +0 -0
  123. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_task_name.py +0 -0
  124. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_task_parsing.py +0 -0
  125. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_teardown.py +0 -0
  126. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
  127. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
  128. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_trial_catalog.py +0 -0
  129. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
  130. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_workflow_task_base.py +0 -0
  131. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common/tests/test_write_l1.py +0 -0
  132. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common.egg-info/SOURCES.txt +0 -0
  133. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
  134. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common.egg-info/requires.txt +0 -0
  135. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common.egg-info/scm_file_list.json +0 -0
  136. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/dkist_processing_common.egg-info/top_level.txt +0 -0
  137. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/docs/Makefile +0 -0
  138. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/docs/changelog.rst +0 -0
  139. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/docs/conf.py +0 -0
  140. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/docs/index.rst +0 -0
  141. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/docs/landing_page.rst +0 -0
  142. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/docs/make.bat +0 -0
  143. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/docs/requirements.txt +0 -0
  144. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/licenses/LICENSE.rst +0 -0
  145. {dkist_processing_common-14.5.2 → dkist_processing_common-14.6.1}/setup.cfg +0 -0
@@ -29,3 +29,12 @@ repos:
29
29
  args:
30
30
  - --convention=numpy
31
31
  - --add-ignore=D105
32
+ - repo: https://bitbucket.org/dkistdc/pre-commit-hooks.git
33
+ rev: v1.1.0
34
+ hooks:
35
+ - id: dkist-env-table
36
+ language_version: python3.13
37
+ require_serial: true
38
+ additional_dependencies:
39
+ - dkist-processing-core
40
+ - dkist-service-configuration
@@ -1,3 +1,23 @@
1
+ v14.6.1 (2026-10-14)
2
+ ====================
3
+
4
+ Bugfixes
5
+ --------
6
+
7
+ - Exclude negative light-level readings from the LIGHT_LEVEL quality plot and summary statistics. Omit the metric when only negative readings remain. (`#355 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/355>`__)
8
+
9
+
10
+ v14.6.0 (2026-10-08)
11
+ ====================
12
+
13
+ Misc
14
+ ----
15
+
16
+ - Add `beam_boundaries` to the `DatasetExtraType` model. This is a new extra produced by `dkist-processing-cryonirsp`. (`#352 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/352>`__)
17
+ - Integrated the ``dkist-env-table`` pre-commit hook and updated the README environment-variable table to match the current configuration. (`#351 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/351>`__)
18
+ - Always write the IDSOBSID key to L1 output data. We will never be in a situation where the input dataset does NOT contain an observe frame part. (`#353 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/353>`__)
19
+
20
+
1
21
  v14.5.2 (2026-09-30)
2
22
  ====================
3
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 14.5.2
3
+ Version: 14.6.1
4
4
  Summary: Common task classes used by the DKIST science data processing pipelines
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -100,6 +100,8 @@ dkist-processing-common is deployed to `PyPI <https://pypi.org/project/dkist-pro
100
100
  Environment Variables
101
101
  ---------------------
102
102
 
103
+ .. dkist-env-table: start
104
+
103
105
  .. list-table::
104
106
  :widths: 10 90
105
107
  :header-rows: 1
@@ -189,6 +191,21 @@ Environment Variables
189
191
  * - DOCS_BASE_URL
190
192
  - annotation=str required=False default='my_test_url' description='Base URL for the documentation site.'
191
193
 
194
+ .. dkist-env-table: end
195
+
196
+ Maintaining the generated table
197
+ ###############################
198
+
199
+ The hook's additional dependencies are intentionally unpinned to avoid duplicating
200
+ versions maintained in ``pyproject.toml``. Consequently, the generated table may
201
+ temporarily reflect a newer published parent configuration than the version pinned
202
+ by this project.
203
+
204
+ When developing against an upstream release candidate that changes configuration
205
+ fields, temporarily pin the relevant hook dependency in
206
+ ``.pre-commit-config.yaml`` to that RC. Remove the temporary pin after the final
207
+ upstream release is available.
208
+
192
209
  Development
193
210
  -----------
194
211
 
@@ -35,6 +35,8 @@ dkist-processing-common is deployed to `PyPI <https://pypi.org/project/dkist-pro
35
35
  Environment Variables
36
36
  ---------------------
37
37
 
38
+ .. dkist-env-table: start
39
+
38
40
  .. list-table::
39
41
  :widths: 10 90
40
42
  :header-rows: 1
@@ -124,6 +126,21 @@ Environment Variables
124
126
  * - DOCS_BASE_URL
125
127
  - annotation=str required=False default='my_test_url' description='Base URL for the documentation site.'
126
128
 
129
+ .. dkist-env-table: end
130
+
131
+ Maintaining the generated table
132
+ ###############################
133
+
134
+ The hook's additional dependencies are intentionally unpinned to avoid duplicating
135
+ versions maintained in ``pyproject.toml``. Consequently, the generated table may
136
+ temporarily reflect a newer published parent configuration than the version pinned
137
+ by this project.
138
+
139
+ When developing against an upstream release candidate that changes configuration
140
+ fields, temporarily pin the relevant hook dependency in
141
+ ``.pre-commit-config.yaml`` to that RC. Remove the temporary pin after the final
142
+ upstream release is available.
143
+
127
144
  Development
128
145
  -----------
129
146
 
@@ -42,6 +42,7 @@ class DatasetExtraType(StrEnum):
42
42
  bad_pixel_map = "BAD PIXEL MAP"
43
43
  beam_offsets = "BEAM OFFSETS"
44
44
  spectral_curvature_scales = "SPECTRAL CURVATURE SCALES"
45
+ beam_boundaries = "BEAM BOUNDARIES"
45
46
 
46
47
 
47
48
  class DatasetExtraHeaderData(BaseModel):
@@ -620,10 +620,13 @@ class QualityL1Metrics(WorkflowTaskBase, QualityMixin):
620
620
  self.write(metric, tags=Tag.quality("GENERIC"), encoder=basemodel_encoder)
621
621
 
622
622
  def compute_and_write_light_level(self, l1_quality_data: L1QualityData) -> None:
623
- """Write LIGHT_LEVEL quality metric."""
624
- # don't need to check for None - l1_quality_data.light_level_values does not allow None
625
- datetimes = l1_quality_data.datetimes
626
- light_level_values = l1_quality_data.light_level_values
623
+ """Write LIGHT_LEVEL quality metric using only nonnegative measurements."""
624
+ datetimes: list[datetime] = []
625
+ light_level_values: list[float] = []
626
+ for date, light_level in zip(l1_quality_data.datetimes, l1_quality_data.light_level_values):
627
+ if light_level >= 0:
628
+ datetimes.append(date)
629
+ light_level_values.append(light_level)
627
630
 
628
631
  # don't write anything if there is no data
629
632
  if not light_level_values:
@@ -642,8 +645,10 @@ class QualityL1Metrics(WorkflowTaskBase, QualityMixin):
642
645
  series_data=series_data,
643
646
  )
644
647
 
645
- statement = f"Average Light Level for L1 dataset: "
646
- f"{round(np.mean(light_level_values), 2)} ± {round(np.std(light_level_values), 2)} adu"
648
+ statement = (
649
+ f"Average Light Level for L1 dataset: "
650
+ f"{round(np.mean(light_level_values), 2)} ± {round(np.std(light_level_values), 2)} adu"
651
+ )
647
652
 
648
653
  metric = QualityMetric(
649
654
  name="Light Level",
@@ -181,8 +181,7 @@ class WriteL1Frame(WriteL1Base, ABC):
181
181
  # Keywords to support reprocessing
182
182
  if parameters := self.metadata_store_input_dataset_parameters:
183
183
  header["IDSPARID"] = parameters.inputDatasetPartId
184
- if observe_frames := self.metadata_store_input_dataset_observe_frames:
185
- header["IDSOBSID"] = observe_frames.inputDatasetPartId
184
+ header["IDSOBSID"] = self.metadata_store_input_dataset_observe_frames.inputDatasetPartId
186
185
  if calibration_frames := self.metadata_store_input_dataset_calibration_frames:
187
186
  header["IDSCALID"] = calibration_frames.inputDatasetPartId
188
187
  header["WKFLNAME"] = self.workflow_name
@@ -1084,7 +1084,7 @@ def test_compute_and_write_light_level(
1084
1084
  all_statements = metric.statement
1085
1085
  assert isinstance(all_statements, list)
1086
1086
  assert len(all_statements) == 1
1087
- assert all_statements[0].startswith("Average Light Level for L1 dataset")
1087
+ assert all_statements == ["Average Light Level for L1 dataset: 0.45 ± 0.2 adu"]
1088
1088
  assert metric.warnings is None
1089
1089
  # data
1090
1090
  all_plot_data = metric.plot_data
@@ -1112,6 +1112,58 @@ def test_compute_and_write_light_level(
1112
1112
  assert len(time_series.x_values) == 7
1113
1113
 
1114
1114
 
1115
+ def test_light_level_excludes_negative_values(
1116
+ quality_l1_task_no_scratch_data: QualityL1Metrics, l1_quality_data: L1QualityData
1117
+ ):
1118
+ """
1119
+ Given: negative, zero, and positive light levels with distinct timestamps
1120
+ When: the light level quality metric is written
1121
+ Then: only nonnegative readings and their timestamps contribute to the plot and statistics
1122
+ """
1123
+ task = quality_l1_task_no_scratch_data
1124
+ l1_quality_data.light_level_values = (-1.0, 0.0, 2.0, -0.01, 4.0, -2.0, 6.0)
1125
+ original_quality_data = l1_quality_data.model_dump()
1126
+
1127
+ task.compute_and_write_light_level(l1_quality_data)
1128
+
1129
+ metrics = list(
1130
+ task.read(tags=[Tag.quality("GENERIC")], decoder=basemodel_decoder, model=QualityMetric)
1131
+ )
1132
+ assert len(metrics) == 1
1133
+ metric = metrics[0]
1134
+ time_series = metric.plot_data[0].series_data[""]
1135
+ assert time_series.x_values == tuple(l1_quality_data.datetimes[i] for i in (1, 2, 4, 6))
1136
+ assert time_series.y_values == (0.0, 2.0, 4.0, 6.0)
1137
+ assert metric.statement == ["Average Light Level for L1 dataset: 3.0 ± 2.24 adu"]
1138
+ assert l1_quality_data.model_dump() == original_quality_data
1139
+
1140
+
1141
+ def test_light_level_all_negative_values(
1142
+ quality_l1_task_with_calibrated_frames: QualityL1Metrics,
1143
+ ):
1144
+ """
1145
+ Given: calibrated frames whose light levels are all negative
1146
+ When: the L1 quality workflow task runs
1147
+ Then: light level is omitted, other metrics are written, and FITS headers retain their readings
1148
+ """
1149
+ task = quality_l1_task_with_calibrated_frames
1150
+ frame_paths = list(task.read(tags=[Tag.calibrated(), Tag.frame()]))
1151
+ for frame_path in frame_paths:
1152
+ with fits.open(frame_path, mode="update") as hdul:
1153
+ hdul[0].header["LIGHTLVL"] = -1.0
1154
+
1155
+ task()
1156
+
1157
+ metrics = list(
1158
+ task.read(tags=[Tag.quality("GENERIC")], decoder=basemodel_decoder, model=QualityMetric)
1159
+ )
1160
+ assert "LIGHT_LEVEL" not in {metric.metric_code for metric in metrics}
1161
+ assert "HEALTH_STATUS" in {metric.metric_code for metric in metrics}
1162
+ for frame_path in frame_paths:
1163
+ with fits.open(frame_path) as hdul:
1164
+ assert hdul[0].header["LIGHTLVL"] == -1.0
1165
+
1166
+
1115
1167
  def test_no_calibration_frames_no_l1_metrics(quality_l1_task_no_scratch_data: QualityL1Metrics):
1116
1168
  """
1117
1169
  Given: No calibrated frames
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 14.5.2
3
+ Version: 14.6.1
4
4
  Summary: Common task classes used by the DKIST science data processing pipelines
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -100,6 +100,8 @@ dkist-processing-common is deployed to `PyPI <https://pypi.org/project/dkist-pro
100
100
  Environment Variables
101
101
  ---------------------
102
102
 
103
+ .. dkist-env-table: start
104
+
103
105
  .. list-table::
104
106
  :widths: 10 90
105
107
  :header-rows: 1
@@ -189,6 +191,21 @@ Environment Variables
189
191
  * - DOCS_BASE_URL
190
192
  - annotation=str required=False default='my_test_url' description='Base URL for the documentation site.'
191
193
 
194
+ .. dkist-env-table: end
195
+
196
+ Maintaining the generated table
197
+ ###############################
198
+
199
+ The hook's additional dependencies are intentionally unpinned to avoid duplicating
200
+ versions maintained in ``pyproject.toml``. Consequently, the generated table may
201
+ temporarily reflect a newer published parent configuration than the version pinned
202
+ by this project.
203
+
204
+ When developing against an upstream release candidate that changes configuration
205
+ fields, temporarily pin the relevant hook dependency in
206
+ ``.pre-commit-config.yaml`` to that RC. Remove the temporary pin after the final
207
+ upstream release is available.
208
+
192
209
  Development
193
210
  -----------
194
211
 
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "14.6.1",
3
+ "distance": 0,
4
+ "node": "g973c26e0f5932cfa29522cda89e3be9cedc1b8d2",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-14"
8
+ }
@@ -151,3 +151,12 @@ profile = "black"
151
151
  force_single_line = true
152
152
  combine_as_imports = false
153
153
  line_length = 100
154
+
155
+ [tool.dkist-env-table]
156
+ object = "dkist_processing_common.config:common_configurations"
157
+ readme = "README.rst"
158
+ source-root = "."
159
+ watch = [
160
+ "dkist_processing_common/config.py",
161
+ "pyproject.toml",
162
+ ]
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "14.5.2",
3
- "distance": 0,
4
- "node": "gf93069e0e842156bf351e4926a627624f09b2c1c",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-09-30"
8
- }