dkist-processing-common 11.1.0rc1__tar.gz → 11.2.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.
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/CHANGELOG.rst +55 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/PKG-INFO +2 -2
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/graphql.py +6 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/quality.py +1 -1
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/assemble_movie.py +2 -2
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/metadata_store.py +1 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/quality/_metrics.py +29 -10
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/write_l1.py +9 -1
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_assemble_quality.py +5 -5
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_quality_mixin.py +18 -7
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_workflow_task_base.py +2 -3
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_write_l1.py +1 -1
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common.egg-info/PKG-INFO +2 -2
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common.egg-info/SOURCES.txt +0 -1
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common.egg-info/requires.txt +1 -1
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/pyproject.toml +1 -1
- dkist_processing_common-11.1.0rc1/changelog/255.misc.rst +0 -3
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/.gitignore +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/.pre-commit-config.yaml +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/.readthedocs.yml +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/.snyk +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/README.rst +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/changelog/.gitempty +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/_util/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/_util/constants.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/_util/graphql.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/_util/scratch.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/_util/tags.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/array.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/asdf.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/basemodel.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/bytes.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/fits.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/iobase.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/json.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/path.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/quality.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/codecs/str.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/config.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/fonts/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/manual.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/constants.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/dkist_location.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/fits_access.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/flower_pot.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/fried_parameter.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/input_dataset.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/message.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/message_queue_binding.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/metric_code.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/parameters.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/tags.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/task_name.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/models/wavelength.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/cs_step.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/id_bud.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/near_bud.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/quality.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/retarder.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/task.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/time.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/unique_bud.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/parsers/wavelength.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/base.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/l1_output_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/globus.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/output_data_base.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/parse_l0_input_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/quality_metrics.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/teardown.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/trial_catalog.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tasks/trial_output_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/__init__.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/conftest.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/mock_metadata_store.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_base.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_codecs.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_constants.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_cs_step.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_dkist_location.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_fits_access.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_flower_pot.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_fried_parameter.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_input_dataset.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_interservice_bus.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_interservice_bus_mixin.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_manual_processing.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_output_data_base.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_parameters.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_parse_l0_input_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_quality.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_scratch.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_stems.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_tags.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_task_name.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_task_parsing.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_teardown.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_trial_catalog.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/dkist_processing_common.egg-info/top_level.txt +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/docs/Makefile +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/docs/changelog.rst +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/docs/conf.py +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/docs/index.rst +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/docs/landing_page.rst +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/docs/make.bat +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/docs/requirements.txt +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/licenses/LICENSE.rst +0 -0
- {dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/setup.cfg +0 -0
|
@@ -1,3 +1,58 @@
|
|
|
1
|
+
v11.2.1 (2025-08-12)
|
|
2
|
+
====================
|
|
3
|
+
|
|
4
|
+
Bugfixes
|
|
5
|
+
--------
|
|
6
|
+
|
|
7
|
+
- Add `multi_plot_data` to quality creation mutation when submitting quality report data. (`#262 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/262>`__)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
Misc
|
|
11
|
+
----
|
|
12
|
+
|
|
13
|
+
- Explicitly set color and ordering of lines in wavecal metric plots.
|
|
14
|
+
This gets around issues with order not being preserved in the quality database. (`#262 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/262>`__)
|
|
15
|
+
- Update database name for vertical multi-pane plot metric data. It's now called "multi_plot_data". (`#262 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/262>`__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
v11.2.0 (2025-07-18)
|
|
19
|
+
====================
|
|
20
|
+
|
|
21
|
+
Bugfixes
|
|
22
|
+
--------
|
|
23
|
+
|
|
24
|
+
- Move the writing of spectral line keys in L1 data to later in the process, after the instruments have had a chance to rewrite the WCS info. (`#252 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/252>`__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
v11.1.0 (2025-07-15)
|
|
28
|
+
====================
|
|
29
|
+
|
|
30
|
+
Misc
|
|
31
|
+
----
|
|
32
|
+
|
|
33
|
+
- The graphql and input dataset models are now set to validate whenever attributes are assigned, including after instantiation. (`#255 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/255>`__)
|
|
34
|
+
- Create a factory for custom `FakeGQLClient` used in tests. The factory and associated default returns live in a
|
|
35
|
+
new `mock_metadata_store.py` module in the tests directory. `FakeGQLClient` is now a test fixture and does not need to
|
|
36
|
+
be imported in tests. (`#255 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/255>`__)
|
|
37
|
+
- Fix a Pydantic warning in the graphql model. Because we validate the `RecipeRunConfiguration` as a JSON dictionary and
|
|
38
|
+
convert it to a model after validation, we need a serializer so Pydantic knows what to expect back out. (`#258 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/258>`__)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
v11.0.1 (2025-07-10)
|
|
42
|
+
====================
|
|
43
|
+
|
|
44
|
+
Bugfixes
|
|
45
|
+
--------
|
|
46
|
+
|
|
47
|
+
- Ignore NaN and Inf values when storing the quality results of a wavelength calibration fit. (`#260 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/260>`__)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
Misc
|
|
51
|
+
----
|
|
52
|
+
|
|
53
|
+
- Removing usages of `pkg_resources`, which is on track to be deprecated. (`#254 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/254>`__)
|
|
54
|
+
|
|
55
|
+
|
|
1
56
|
v11.0.0 (2025-07-02)
|
|
2
57
|
====================
|
|
3
58
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-common
|
|
3
|
-
Version: 11.1
|
|
3
|
+
Version: 11.2.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
|
|
@@ -61,7 +61,7 @@ Requires-Dist: dkist-inventory<2.0,>=1.6.0; extra == "inventory"
|
|
|
61
61
|
Provides-Extra: asdf
|
|
62
62
|
Requires-Dist: dkist-inventory[asdf]<2.0,>=1.6.0; extra == "asdf"
|
|
63
63
|
Provides-Extra: quality
|
|
64
|
-
Requires-Dist: dkist-quality<
|
|
64
|
+
Requires-Dist: dkist-quality<3.0,>=2.0.0; extra == "quality"
|
|
65
65
|
|
|
66
66
|
dkist-processing-common
|
|
67
67
|
=======================
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""GraphQL Data models for the metadata store api."""
|
|
2
2
|
from pydantic import BaseModel
|
|
3
3
|
from pydantic import ConfigDict
|
|
4
|
+
from pydantic import field_serializer
|
|
4
5
|
from pydantic import field_validator
|
|
5
6
|
from pydantic import Json
|
|
6
7
|
|
|
@@ -129,6 +130,10 @@ class RecipeRunResponse(GraphqlBaseModel):
|
|
|
129
130
|
return RecipeRunConfiguration()
|
|
130
131
|
return RecipeRunConfiguration.model_validate(value)
|
|
131
132
|
|
|
133
|
+
@field_serializer("configuration")
|
|
134
|
+
def _serialize_as_basemodel(self, config: RecipeRunConfiguration):
|
|
135
|
+
return config.model_dump()
|
|
136
|
+
|
|
132
137
|
|
|
133
138
|
class RecipeRunMutationResponse(GraphqlBaseModel):
|
|
134
139
|
"""Recipe run mutation response."""
|
|
@@ -185,6 +190,7 @@ class QualityCreation(GraphqlBaseModel):
|
|
|
185
190
|
warnings: str | None = None
|
|
186
191
|
# JSON objects
|
|
187
192
|
plotData: str | None = None
|
|
193
|
+
multiPlotData: str | None = None
|
|
188
194
|
tableData: str | None = None
|
|
189
195
|
histogramData: str | None = None
|
|
190
196
|
modmatData: str | None = None
|
|
@@ -112,7 +112,7 @@ class ReportMetric(BaseModel):
|
|
|
112
112
|
facet: str | None = None
|
|
113
113
|
statement: str | list[str] | None = None
|
|
114
114
|
plot_data: Plot2D | list[Plot2D] | None = None
|
|
115
|
-
|
|
115
|
+
multi_plot_data: VerticalMultiPanePlot2D | None = None
|
|
116
116
|
histogram_data: PlotHistogram | list[PlotHistogram] | None = None
|
|
117
117
|
table_data: SimpleTable | list[SimpleTable] | None = None
|
|
118
118
|
modmat_data: ModulationMatrixHistograms | None = None
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import logging
|
|
3
3
|
from abc import ABC
|
|
4
4
|
from abc import abstractmethod
|
|
5
|
+
from importlib.resources import files
|
|
5
6
|
from typing import Literal
|
|
6
7
|
|
|
7
8
|
import numpy as np
|
|
8
|
-
import pkg_resources
|
|
9
9
|
from matplotlib import colormaps
|
|
10
10
|
from moviepy import VideoClip
|
|
11
11
|
from PIL import Image
|
|
@@ -66,7 +66,7 @@ class AssembleMovie(WorkflowTaskBase, ABC):
|
|
|
66
66
|
MINIMUM_DURATION = 10 # seconds
|
|
67
67
|
MAXIMUM_DURATION = 60 # seconds
|
|
68
68
|
FPS = 15
|
|
69
|
-
FONT_FILE =
|
|
69
|
+
FONT_FILE = files("dkist_processing_common").joinpath("fonts/Lato-Regular.ttf")
|
|
70
70
|
TEXT_MARGIN_PX = 5
|
|
71
71
|
MPL_COLOR_MAP = "viridis"
|
|
72
72
|
|
|
@@ -171,6 +171,7 @@ class MetadataStoreMixin:
|
|
|
171
171
|
warnings=json.dumps(metric.get("warnings")),
|
|
172
172
|
# JSON objects
|
|
173
173
|
plotData=json.dumps(metric.get("plot_data"), cls=QualityDataEncoder),
|
|
174
|
+
multiPlotData=json.dumps(metric.get("multi_plot_data"), cls=QualityDataEncoder),
|
|
174
175
|
tableData=json.dumps(metric.get("table_data"), cls=QualityDataEncoder),
|
|
175
176
|
histogramData=json.dumps(metric.get("histogram_data"), cls=QualityDataEncoder),
|
|
176
177
|
modmatData=json.dumps(metric.get("modmat_data"), cls=QualityDataEncoder),
|
|
@@ -1365,13 +1365,22 @@ class _WavecalQualityMixin:
|
|
|
1365
1365
|
wcs = WCS(best_fit_header)
|
|
1366
1366
|
best_fit_wavelength = wcs.spectral.pixel_to_world(np.arange(input_spectrum.size))
|
|
1367
1367
|
|
|
1368
|
+
finite_idx = (
|
|
1369
|
+
np.isfinite(input_wavelength)
|
|
1370
|
+
* np.isfinite(input_spectrum)
|
|
1371
|
+
* np.isfinite(best_fit_wavelength)
|
|
1372
|
+
* np.isfinite(best_fit_atlas)
|
|
1373
|
+
* np.isfinite(normalized_residuals)
|
|
1374
|
+
* np.isfinite(weight_data)
|
|
1375
|
+
)
|
|
1376
|
+
|
|
1368
1377
|
data = {
|
|
1369
|
-
"input_wavelength_nm": input_wavelength.to_value(u.nm).tolist(),
|
|
1370
|
-
"input_spectrum": input_spectrum.tolist(),
|
|
1371
|
-
"best_fit_wavelength_nm": best_fit_wavelength.to_value(u.nm).tolist(),
|
|
1372
|
-
"best_fit_atlas": best_fit_atlas.tolist(),
|
|
1373
|
-
"normalized_residuals": normalized_residuals.tolist(),
|
|
1374
|
-
"weights": None if weights is None else weight_data.tolist(),
|
|
1378
|
+
"input_wavelength_nm": input_wavelength.to_value(u.nm)[finite_idx].tolist(),
|
|
1379
|
+
"input_spectrum": input_spectrum[finite_idx].tolist(),
|
|
1380
|
+
"best_fit_wavelength_nm": best_fit_wavelength.to_value(u.nm)[finite_idx].tolist(),
|
|
1381
|
+
"best_fit_atlas": best_fit_atlas[finite_idx].tolist(),
|
|
1382
|
+
"normalized_residuals": normalized_residuals[finite_idx].tolist(),
|
|
1383
|
+
"weights": None if weights is None else weight_data[finite_idx].tolist(),
|
|
1375
1384
|
}
|
|
1376
1385
|
|
|
1377
1386
|
self._record_values(values=data, tags=[Tag.quality(MetricCode.wavecal_fit)])
|
|
@@ -1392,10 +1401,20 @@ class _WavecalQualityMixin:
|
|
|
1392
1401
|
"Input Spectrum": [input_wave_list, input_spectrum_list],
|
|
1393
1402
|
"Best Fit Atlas": [best_fit_wave_list, best_fit_atlas_list],
|
|
1394
1403
|
}
|
|
1404
|
+
|
|
1405
|
+
# Set the colors and zorder here manually because the JSON-ization of the quality data means we can't be sure of
|
|
1406
|
+
# the order these will be plotted in and thus can't rely on the default color-cycler in `dkist-quality`.
|
|
1395
1407
|
fit_plot_kwargs = {
|
|
1396
|
-
"Best Fit Observations": {
|
|
1397
|
-
|
|
1398
|
-
|
|
1408
|
+
"Best Fit Observations": {
|
|
1409
|
+
"ls": "-",
|
|
1410
|
+
"lw": 4,
|
|
1411
|
+
"alpha": 0.8,
|
|
1412
|
+
"ms": 0,
|
|
1413
|
+
"color": "#FAA61C",
|
|
1414
|
+
"zorder": 2,
|
|
1415
|
+
},
|
|
1416
|
+
"Input Spectrum": {"ls": "-", "alpha": 0.4, "ms": 0, "color": "#1E317A", "zorder": 2.1},
|
|
1417
|
+
"Best Fit Atlas": {"color": "k", "ls": "-", "ms": 0, "zorder": 2.2},
|
|
1399
1418
|
}
|
|
1400
1419
|
|
|
1401
1420
|
fit_plot = Plot2D(
|
|
@@ -1449,7 +1468,7 @@ class _WavecalQualityMixin:
|
|
|
1449
1468
|
"The top plot shows the input and best-fit spectra along with the best-fit atlas, which is "
|
|
1450
1469
|
"a combination of Solar and Telluric spectra. The bottom plot shows the fit residuals.",
|
|
1451
1470
|
metric_code=MetricCode.wavecal_fit,
|
|
1452
|
-
|
|
1471
|
+
multi_plot_data=full_plot,
|
|
1453
1472
|
)
|
|
1454
1473
|
|
|
1455
1474
|
return metric.model_dump()
|
|
@@ -230,7 +230,13 @@ class WriteL1Frame(WorkflowTaskBase, MetadataStoreMixin, ABC):
|
|
|
230
230
|
header = self.add_contributing_id_headers(header=header)
|
|
231
231
|
header["MANPROCD"] = self.workflow_had_manual_intervention
|
|
232
232
|
header["PRODUCT"] = self.compute_product_id(header["IDSOBSID"], header["PROCTYPE"])
|
|
233
|
-
|
|
233
|
+
return header
|
|
234
|
+
|
|
235
|
+
def add_spectral_line_headers(
|
|
236
|
+
self,
|
|
237
|
+
header: fits.Header,
|
|
238
|
+
) -> fits.Header:
|
|
239
|
+
"""Add datacenter table keys relating to spectral lines."""
|
|
234
240
|
wavelength_range = self.get_wavelength_range(header=header)
|
|
235
241
|
spectral_lines = get_spectral_lines(
|
|
236
242
|
wavelength_min=wavelength_range.min,
|
|
@@ -364,6 +370,8 @@ class WriteL1Frame(WorkflowTaskBase, MetadataStoreMixin, ABC):
|
|
|
364
370
|
header = self.add_doc_headers(header=header)
|
|
365
371
|
# Add the dataset headers (abstract - implement in instrument task)
|
|
366
372
|
header = self.add_dataset_headers(header=header, stokes=stokes_param)
|
|
373
|
+
# Add the spectral line headers
|
|
374
|
+
header = self.add_spectral_line_headers(header=header)
|
|
367
375
|
# Remove any headers not contained in spec 214
|
|
368
376
|
header = remove_spec_122_keys_and_spec_214_l0_keys(input_headers=header)
|
|
369
377
|
# Remove any keys referring to axes that don't exist
|
|
@@ -259,11 +259,11 @@ def plot_data_expected() -> Callable[[str], bool]:
|
|
|
259
259
|
|
|
260
260
|
|
|
261
261
|
@pytest.fixture()
|
|
262
|
-
def
|
|
262
|
+
def multi_plot_data_expected() -> Callable[[str], bool]:
|
|
263
263
|
"""
|
|
264
264
|
Tightly coupled with quality_metrics fixture and resultant report metric name
|
|
265
265
|
"""
|
|
266
|
-
# names where
|
|
266
|
+
# names where multi_plot_data is expected to be populated
|
|
267
267
|
names = {"Wavelength Calibration Results"}
|
|
268
268
|
|
|
269
269
|
def expected(name: str) -> bool:
|
|
@@ -451,7 +451,7 @@ def test_assemble_quality_data(
|
|
|
451
451
|
assemble_quality_data_task,
|
|
452
452
|
recipe_run_id,
|
|
453
453
|
plot_data_expected,
|
|
454
|
-
|
|
454
|
+
multi_plot_data_expected,
|
|
455
455
|
table_data_expected,
|
|
456
456
|
modmat_data_expected,
|
|
457
457
|
histogram_data_expected,
|
|
@@ -481,8 +481,8 @@ def test_assemble_quality_data(
|
|
|
481
481
|
assert isinstance(rm.description, str)
|
|
482
482
|
if plot_data_expected(rm.name):
|
|
483
483
|
assert rm.plot_data
|
|
484
|
-
if
|
|
485
|
-
assert rm.
|
|
484
|
+
if multi_plot_data_expected(rm.name):
|
|
485
|
+
assert rm.multi_plot_data
|
|
486
486
|
if table_data_expected(rm.name):
|
|
487
487
|
assert rm.table_data
|
|
488
488
|
if modmat_data_expected(rm.name):
|
|
@@ -114,7 +114,7 @@ def test_create_2d_plot_with_datetime_metric(quality_task):
|
|
|
114
114
|
"facet",
|
|
115
115
|
"statement",
|
|
116
116
|
"plot_data",
|
|
117
|
-
"
|
|
117
|
+
"multi_plot_data",
|
|
118
118
|
"histogram_data",
|
|
119
119
|
"table_data",
|
|
120
120
|
"modmat_data",
|
|
@@ -1201,12 +1201,16 @@ def wavecal_input_wavelength() -> u.Quantity:
|
|
|
1201
1201
|
|
|
1202
1202
|
@pytest.fixture(scope="session")
|
|
1203
1203
|
def wavecal_input_spectrum(wavecal_input_wavelength) -> np.ndarray:
|
|
1204
|
-
|
|
1204
|
+
spec = (wavecal_input_wavelength.value - wavecal_input_wavelength.size // 2) ** 2 + 10.0
|
|
1205
|
+
spec[spec.size // 2] = np.nan
|
|
1206
|
+
return spec
|
|
1205
1207
|
|
|
1206
1208
|
|
|
1207
1209
|
@pytest.fixture(scope="session")
|
|
1208
1210
|
def wavecal_weights(wavecal_input_wavelength) -> np.ndarray:
|
|
1209
|
-
|
|
1211
|
+
weights = np.arange(wavecal_input_wavelength.size, dtype=float)
|
|
1212
|
+
weights[0] = np.inf
|
|
1213
|
+
return weights
|
|
1210
1214
|
|
|
1211
1215
|
|
|
1212
1216
|
@pytest.fixture(scope="session")
|
|
@@ -1313,7 +1317,7 @@ def test_build_wavecal_results(quality_task, wavecal_data_json):
|
|
|
1313
1317
|
assert metric["raincloud_data"] is None
|
|
1314
1318
|
assert metric["warnings"] is None
|
|
1315
1319
|
|
|
1316
|
-
multi_plot_data = metric["
|
|
1320
|
+
multi_plot_data = metric["multi_plot_data"]
|
|
1317
1321
|
assert multi_plot_data["match_x_axes"] is True
|
|
1318
1322
|
assert multi_plot_data["no_gap"] is True
|
|
1319
1323
|
assert (
|
|
@@ -1335,9 +1339,16 @@ def test_build_wavecal_results(quality_task, wavecal_data_json):
|
|
|
1335
1339
|
"Best Fit Atlas": [[1001.5, 1002.6, 1003.7, 1004.8], [1.0, 1.0, 0.4, 1.0]],
|
|
1336
1340
|
}
|
|
1337
1341
|
assert fit_plot["plot_kwargs"] == {
|
|
1338
|
-
"Input Spectrum": {"ls": "-", "alpha": 0.4, "ms": 0},
|
|
1339
|
-
"Best Fit Observations": {
|
|
1340
|
-
|
|
1342
|
+
"Input Spectrum": {"ls": "-", "alpha": 0.4, "ms": 0, "color": "#1E317A", "zorder": 2.1},
|
|
1343
|
+
"Best Fit Observations": {
|
|
1344
|
+
"ls": "-",
|
|
1345
|
+
"lw": 4,
|
|
1346
|
+
"alpha": 0.8,
|
|
1347
|
+
"ms": 0,
|
|
1348
|
+
"color": "#FAA61C",
|
|
1349
|
+
"zorder": 2.0,
|
|
1350
|
+
},
|
|
1351
|
+
"Best Fit Atlas": {"color": "k", "ls": "-", "ms": 0, "zorder": 2.2},
|
|
1341
1352
|
}
|
|
1342
1353
|
|
|
1343
1354
|
residuals_plot = plot_list[1]
|
|
@@ -2,12 +2,11 @@ import json
|
|
|
2
2
|
import logging
|
|
3
3
|
import re
|
|
4
4
|
import tomllib
|
|
5
|
-
from
|
|
5
|
+
from importlib.metadata import version
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from string import ascii_uppercase
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
|
-
from pkg_resources import get_distribution
|
|
11
10
|
from sqids import Sqids
|
|
12
11
|
|
|
13
12
|
import dkist_processing_common
|
|
@@ -272,7 +271,7 @@ def test_library_versions(provenance_task, package_dependencies):
|
|
|
272
271
|
# installed packages.
|
|
273
272
|
for package in package_dependencies:
|
|
274
273
|
assert package in libraries
|
|
275
|
-
assert libraries[package] ==
|
|
274
|
+
assert libraries[package] == version(package)
|
|
276
275
|
|
|
277
276
|
|
|
278
277
|
def test_record_provenance(provenance_task):
|
|
@@ -677,7 +677,7 @@ def test_spectral_line_keys(write_l1_task, mocker, fake_gql_client):
|
|
|
677
677
|
new=fake_gql_client,
|
|
678
678
|
)
|
|
679
679
|
task, _, header = write_l1_task
|
|
680
|
-
header = task.
|
|
680
|
+
header = task.add_spectral_line_headers(header=header)
|
|
681
681
|
assert header["SPECLN01"] == "Fe XIII (1079.8 nm)"
|
|
682
682
|
assert header["SPECLN02"] == "He I (1083.0 nm)"
|
|
683
683
|
assert header["NSPECLNS"] == 2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-common
|
|
3
|
-
Version: 11.1
|
|
3
|
+
Version: 11.2.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
|
|
@@ -61,7 +61,7 @@ Requires-Dist: dkist-inventory<2.0,>=1.6.0; extra == "inventory"
|
|
|
61
61
|
Provides-Extra: asdf
|
|
62
62
|
Requires-Dist: dkist-inventory[asdf]<2.0,>=1.6.0; extra == "asdf"
|
|
63
63
|
Provides-Extra: quality
|
|
64
|
-
Requires-Dist: dkist-quality<
|
|
64
|
+
Requires-Dist: dkist-quality<3.0,>=2.0.0; extra == "quality"
|
|
65
65
|
|
|
66
66
|
dkist-processing-common
|
|
67
67
|
=======================
|
|
File without changes
|
{dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/.pre-commit-config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_common-11.1.0rc1 → dkist_processing_common-11.2.1}/bitbucket-pipelines.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|