dkist-processing-cryonirsp 1.10.0rc1__py3-none-any.whl → 1.14.9rc1__py3-none-any.whl

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 (92) hide show
  1. changelog/232.misc.rst +1 -0
  2. dkist_processing_cryonirsp/__init__.py +1 -0
  3. dkist_processing_cryonirsp/codecs/fits.py +1 -0
  4. dkist_processing_cryonirsp/config.py +1 -0
  5. dkist_processing_cryonirsp/models/beam_boundaries.py +1 -0
  6. dkist_processing_cryonirsp/models/constants.py +8 -30
  7. dkist_processing_cryonirsp/models/exposure_conditions.py +6 -5
  8. dkist_processing_cryonirsp/models/fits_access.py +40 -0
  9. dkist_processing_cryonirsp/models/parameters.py +1 -0
  10. dkist_processing_cryonirsp/models/tags.py +1 -0
  11. dkist_processing_cryonirsp/models/task_name.py +1 -0
  12. dkist_processing_cryonirsp/parsers/check_for_gains.py +1 -0
  13. dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py +40 -48
  14. dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py +1 -0
  15. dkist_processing_cryonirsp/parsers/exposure_conditions.py +14 -13
  16. dkist_processing_cryonirsp/parsers/map_repeats.py +1 -0
  17. dkist_processing_cryonirsp/parsers/measurements.py +29 -16
  18. dkist_processing_cryonirsp/parsers/modstates.py +5 -1
  19. dkist_processing_cryonirsp/parsers/optical_density_filters.py +1 -0
  20. dkist_processing_cryonirsp/parsers/polarimetric_check.py +18 -7
  21. dkist_processing_cryonirsp/parsers/scan_step.py +12 -4
  22. dkist_processing_cryonirsp/parsers/time.py +7 -7
  23. dkist_processing_cryonirsp/parsers/wavelength.py +6 -1
  24. dkist_processing_cryonirsp/tasks/__init__.py +1 -0
  25. dkist_processing_cryonirsp/tasks/assemble_movie.py +1 -0
  26. dkist_processing_cryonirsp/tasks/bad_pixel_map.py +6 -5
  27. dkist_processing_cryonirsp/tasks/beam_boundaries_base.py +9 -10
  28. dkist_processing_cryonirsp/tasks/ci_beam_boundaries.py +1 -0
  29. dkist_processing_cryonirsp/tasks/ci_science.py +1 -0
  30. dkist_processing_cryonirsp/tasks/cryonirsp_base.py +1 -0
  31. dkist_processing_cryonirsp/tasks/dark.py +5 -4
  32. dkist_processing_cryonirsp/tasks/gain.py +7 -6
  33. dkist_processing_cryonirsp/tasks/instrument_polarization.py +16 -15
  34. dkist_processing_cryonirsp/tasks/l1_output_data.py +1 -0
  35. dkist_processing_cryonirsp/tasks/linearity_correction.py +1 -0
  36. dkist_processing_cryonirsp/tasks/make_movie_frames.py +3 -2
  37. dkist_processing_cryonirsp/tasks/mixin/corrections.py +1 -0
  38. dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py +1 -0
  39. dkist_processing_cryonirsp/tasks/parse.py +66 -61
  40. dkist_processing_cryonirsp/tasks/quality_metrics.py +15 -14
  41. dkist_processing_cryonirsp/tasks/science_base.py +8 -6
  42. dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py +2 -1
  43. dkist_processing_cryonirsp/tasks/sp_geometric.py +11 -10
  44. dkist_processing_cryonirsp/tasks/sp_science.py +1 -0
  45. dkist_processing_cryonirsp/tasks/sp_solar_gain.py +15 -12
  46. dkist_processing_cryonirsp/tasks/sp_wavelength_calibration.py +9 -9
  47. dkist_processing_cryonirsp/tasks/write_l1.py +36 -7
  48. dkist_processing_cryonirsp/tests/conftest.py +6 -7
  49. dkist_processing_cryonirsp/tests/header_models.py +40 -3
  50. dkist_processing_cryonirsp/tests/local_trial_workflows/l0_cals_only.py +11 -31
  51. dkist_processing_cryonirsp/tests/local_trial_workflows/l0_to_l1.py +11 -30
  52. dkist_processing_cryonirsp/tests/local_trial_workflows/linearize_only.py +3 -3
  53. dkist_processing_cryonirsp/tests/local_trial_workflows/local_trial_helpers.py +3 -2
  54. dkist_processing_cryonirsp/tests/test_assemble_movie.py +4 -5
  55. dkist_processing_cryonirsp/tests/test_assemble_qualilty.py +5 -1
  56. dkist_processing_cryonirsp/tests/test_bad_pixel_maps.py +3 -4
  57. dkist_processing_cryonirsp/tests/test_ci_beam_boundaries.py +3 -4
  58. dkist_processing_cryonirsp/tests/test_ci_science.py +3 -4
  59. dkist_processing_cryonirsp/tests/test_corrections.py +3 -3
  60. dkist_processing_cryonirsp/tests/test_cryo_base.py +3 -5
  61. dkist_processing_cryonirsp/tests/test_cryo_constants.py +1 -2
  62. dkist_processing_cryonirsp/tests/test_dark.py +5 -6
  63. dkist_processing_cryonirsp/tests/test_fits_access.py +44 -0
  64. dkist_processing_cryonirsp/tests/test_gain.py +5 -6
  65. dkist_processing_cryonirsp/tests/test_instrument_polarization.py +9 -6
  66. dkist_processing_cryonirsp/tests/test_linearity_correction.py +4 -3
  67. dkist_processing_cryonirsp/tests/test_make_movie_frames.py +2 -3
  68. dkist_processing_cryonirsp/tests/test_parameters.py +3 -4
  69. dkist_processing_cryonirsp/tests/test_parse.py +14 -8
  70. dkist_processing_cryonirsp/tests/test_quality.py +2 -3
  71. dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py +4 -4
  72. dkist_processing_cryonirsp/tests/test_sp_geometric.py +3 -4
  73. dkist_processing_cryonirsp/tests/test_sp_make_movie_frames.py +2 -3
  74. dkist_processing_cryonirsp/tests/test_sp_science.py +3 -4
  75. dkist_processing_cryonirsp/tests/test_sp_solar.py +5 -4
  76. dkist_processing_cryonirsp/tests/test_sp_wavelength_calibration.py +4 -5
  77. dkist_processing_cryonirsp/tests/test_trial_create_quality_report.py +1 -1
  78. dkist_processing_cryonirsp/tests/test_workflows.py +1 -0
  79. dkist_processing_cryonirsp/tests/test_write_l1.py +12 -16
  80. dkist_processing_cryonirsp/workflows/__init__.py +1 -0
  81. dkist_processing_cryonirsp/workflows/ci_l0_processing.py +6 -5
  82. dkist_processing_cryonirsp/workflows/sp_l0_processing.py +6 -5
  83. dkist_processing_cryonirsp/workflows/trial_workflows.py +9 -8
  84. dkist_processing_cryonirsp-1.14.9rc1.dist-info/METADATA +552 -0
  85. dkist_processing_cryonirsp-1.14.9rc1.dist-info/RECORD +115 -0
  86. docs/conf.py +1 -0
  87. docs/wavelength_calibration.rst +1 -1
  88. changelog/167.feature.rst +0 -1
  89. dkist_processing_cryonirsp-1.10.0rc1.dist-info/METADATA +0 -458
  90. dkist_processing_cryonirsp-1.10.0rc1.dist-info/RECORD +0 -113
  91. {dkist_processing_cryonirsp-1.10.0rc1.dist-info → dkist_processing_cryonirsp-1.14.9rc1.dist-info}/WHEEL +0 -0
  92. {dkist_processing_cryonirsp-1.10.0rc1.dist-info → dkist_processing_cryonirsp-1.14.9rc1.dist-info}/top_level.txt +0 -0
@@ -11,15 +11,14 @@ from dkist_header_validator import spec122_validator
11
11
  from dkist_processing_common._util.scratch import WorkflowFileSystem
12
12
  from dkist_processing_common.codecs.fits import fits_array_encoder
13
13
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
14
- from dkist_processing_common.tests.conftest import FakeGQLClient
15
14
 
16
15
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
17
16
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
18
17
  from dkist_processing_cryonirsp.models.tags import CryonirspStemName
19
18
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
20
19
  from dkist_processing_cryonirsp.tasks.ci_science import CIScienceCalibration
21
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
22
20
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
21
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
23
22
  from dkist_processing_cryonirsp.tests.conftest import generate_fits_frame
24
23
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidObserveFrames
25
24
 
@@ -228,7 +227,7 @@ def ci_compressed_headers_with_dates(
228
227
  return comp_headers, start_time, exp_time, time_delta
229
228
 
230
229
 
231
- def test_ci_science_calibration_task(ci_science_calibration_task, mocker):
230
+ def test_ci_science_calibration_task(ci_science_calibration_task, mocker, fake_gql_client):
232
231
  """
233
232
  Given: A CIScienceCalibration task
234
233
  When: Calling the task instance
@@ -236,7 +235,7 @@ def test_ci_science_calibration_task(ci_science_calibration_task, mocker):
236
235
  """
237
236
 
238
237
  mocker.patch(
239
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
238
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
240
239
  )
241
240
 
242
241
  # When
@@ -4,12 +4,11 @@ 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.tests.conftest import FakeGQLClient
8
7
 
9
8
  from dkist_processing_cryonirsp.models.constants import CryonirspConstants
10
9
  from dkist_processing_cryonirsp.tasks.mixin.corrections import CorrectionsMixin
11
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
12
10
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
11
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
13
12
 
14
13
  base_bad_pixel_map = np.zeros(shape=(10, 10))
15
14
 
@@ -38,11 +37,12 @@ def bad_pixel_mask_task(
38
37
  recipe_run_id,
39
38
  assign_input_dataset_doc_to_task,
40
39
  mocker,
40
+ fake_gql_client,
41
41
  request,
42
42
  init_cryonirsp_constants_db,
43
43
  ):
44
44
  mocker.patch(
45
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
45
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
46
46
  )
47
47
  constants_db = CryonirspConstantsDb(
48
48
  ARM_ID=request.param,
@@ -8,8 +8,8 @@ from dkist_processing_common.codecs.fits import fits_hdu_decoder
8
8
  from dkist_processing_cryonirsp.codecs.fits import cryo_fits_array_decoder
9
9
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
10
10
  from dkist_processing_cryonirsp.tasks.cryonirsp_base import CryonirspTaskBase
11
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
12
11
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
12
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
13
13
 
14
14
  NUM_BEAMS = 2
15
15
  NUM_MODSTATES = 8
@@ -23,8 +23,7 @@ def cryo_science_task(
23
23
  tmp_path, recipe_run_id, assign_input_dataset_doc_to_task, init_cryonirsp_constants_db
24
24
  ):
25
25
  class Task(CryonirspTaskBase):
26
- def run(self):
27
- ...
26
+ def run(self): ...
28
27
 
29
28
  constants_db = CryonirspConstantsDb(
30
29
  NUM_MODSTATES=NUM_MODSTATES,
@@ -153,8 +152,7 @@ def cryo_science_task_with_tagged_intermediates(
153
152
  recipe_run_id, tmpdir_factory, init_cryonirsp_constants_db
154
153
  ):
155
154
  class Task(CryonirspTaskBase):
156
- def run(self):
157
- ...
155
+ def run(self): ...
158
156
 
159
157
  init_cryonirsp_constants_db(recipe_run_id, CryonirspConstantsDb())
160
158
  with Task(
@@ -49,8 +49,7 @@ def cryo_science_task_with_constants(
49
49
  recipe_run_id, expected_constant_dict, init_cryonirsp_constants_db
50
50
  ):
51
51
  class Task(CryonirspTaskBase):
52
- def run(self):
53
- ...
52
+ def run(self): ...
54
53
 
55
54
  init_cryonirsp_constants_db(recipe_run_id, expected_constant_dict)
56
55
  task = Task(
@@ -7,14 +7,13 @@ from dkist_header_validator import spec122_validator
7
7
  from dkist_processing_common._util.scratch import WorkflowFileSystem
8
8
  from dkist_processing_common.codecs.fits import fits_array_encoder
9
9
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
10
- from dkist_processing_common.tests.conftest import FakeGQLClient
11
10
 
12
11
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
13
12
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
14
13
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
15
14
  from dkist_processing_cryonirsp.tasks.dark import DarkCalibration
16
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
17
15
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
16
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
18
17
  from dkist_processing_cryonirsp.tests.conftest import generate_fits_frame
19
18
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidDarkFrames
20
19
 
@@ -176,14 +175,14 @@ def ci_dark_calibration_task(
176
175
  task._purge()
177
176
 
178
177
 
179
- def test_sp_dark_calibration_task(sp_dark_calibration_task, mocker):
178
+ def test_sp_dark_calibration_task(sp_dark_calibration_task, mocker, fake_gql_client):
180
179
  """
181
180
  Given: A DarkCalibration task with multiple task exposure times
182
181
  When: Calling the task instance
183
182
  Then: Only one average intermediate dark frame exists for each exposure time and unused times are not made
184
183
  """
185
184
  mocker.patch(
186
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
185
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
187
186
  )
188
187
  # When
189
188
  (
@@ -232,14 +231,14 @@ def test_sp_dark_calibration_task(sp_dark_calibration_task, mocker):
232
231
  assert data["frames_not_used"] == 3
233
232
 
234
233
 
235
- def test_ci_dark_calibration_task(ci_dark_calibration_task, mocker):
234
+ def test_ci_dark_calibration_task(ci_dark_calibration_task, mocker, fake_gql_client):
236
235
  """
237
236
  Given: A DarkCalibration task with multiple task exposure times
238
237
  When: Calling the task instance
239
238
  Then: Only one average intermediate dark frame exists for each exposure time and unused times are not made
240
239
  """
241
240
  mocker.patch(
242
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
241
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
243
242
  )
244
243
  # When
245
244
  task, exp_conditions, unused_condition = ci_dark_calibration_task
@@ -0,0 +1,44 @@
1
+ import pytest
2
+ from dkist_header_validator.translator import translate_spec122_to_spec214_l0
3
+
4
+ from dkist_processing_cryonirsp.models.fits_access import CryonirspMetadataKey
5
+ from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspL0FitsAccess
6
+ from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspRampFitsAccess
7
+ from dkist_processing_cryonirsp.parsers.cryonirsp_l1_fits_access import CryonirspL1FitsAccess
8
+ from dkist_processing_cryonirsp.tests.header_models import Cryonirsp122ObserveFrames
9
+
10
+
11
+ @pytest.fixture(scope="session")
12
+ def complete_header():
13
+ dataset = Cryonirsp122ObserveFrames(array_shape=(1, 2, 2))
14
+ header = [translate_spec122_to_spec214_l0(d.header()) for d in dataset]
15
+ return header
16
+
17
+
18
+ def test_metadata_keys_in_access_bases(complete_header):
19
+ """
20
+ Given: the set of metadata key names in CryonirspMetadataKey
21
+ When: the Cryo FITS access classes define a set of new attributes
22
+ Then: the sets are the same and the attributes have the correct values
23
+ """
24
+ cryo_metadata_key_names = {cmk.name for cmk in CryonirspMetadataKey}
25
+ all_cryo_fits_access_attrs = set()
26
+ for access_class in [CryonirspRampFitsAccess, CryonirspL0FitsAccess, CryonirspL1FitsAccess]:
27
+ fits_obj = access_class.from_header(complete_header[0])
28
+ cryo_instance_attrs = set(vars(fits_obj).keys())
29
+ parent_class = access_class.mro()[1]
30
+ parent_fits_obj = parent_class.from_header(complete_header[0])
31
+ parent_instance_attrs = set(vars(parent_fits_obj).keys())
32
+ cryo_fits_access_attrs = cryo_instance_attrs - parent_instance_attrs
33
+ # exposure_conditions is created from multiple header keys, so it is not in CryonirspMetadataKey:
34
+ cryo_fits_access_attrs -= {"exposure_conditions"}
35
+ for attr in cryo_fits_access_attrs:
36
+ match attr:
37
+ case "cn1_scan_step":
38
+ assert getattr(fits_obj, attr) == int(
39
+ fits_obj.header[CryonirspMetadataKey[attr]]
40
+ )
41
+ case _:
42
+ assert getattr(fits_obj, attr) == fits_obj.header[CryonirspMetadataKey[attr]]
43
+ all_cryo_fits_access_attrs |= cryo_fits_access_attrs
44
+ assert cryo_metadata_key_names == all_cryo_fits_access_attrs
@@ -8,15 +8,14 @@ from dkist_header_validator import spec122_validator
8
8
  from dkist_processing_common._util.scratch import WorkflowFileSystem
9
9
  from dkist_processing_common.codecs.fits import fits_array_encoder
10
10
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
11
- from dkist_processing_common.tests.conftest import FakeGQLClient
12
11
 
13
12
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
14
13
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
15
14
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
16
15
  from dkist_processing_cryonirsp.tasks.gain import CISolarGainCalibration
17
16
  from dkist_processing_cryonirsp.tasks.gain import LampGainCalibration
18
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
19
17
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
18
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
20
19
  from dkist_processing_cryonirsp.tests.conftest import generate_fits_frame
21
20
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidLampGainFrames
22
21
 
@@ -201,14 +200,14 @@ def lamp_calibration_task(
201
200
  task._purge()
202
201
 
203
202
 
204
- def test_ci_solar_gain_calibration_task(ci_solar_gain_calibration_task, mocker):
203
+ def test_ci_solar_gain_calibration_task(ci_solar_gain_calibration_task, mocker, fake_gql_client):
205
204
  """
206
205
  Given: A CISolarGainCalibration task
207
206
  When: Calling the task instance
208
207
  Then: The correct number of output solar gain frames exists, are tagged correctly, and are not normalized
209
208
  """
210
209
  mocker.patch(
211
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
210
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
212
211
  )
213
212
  # When
214
213
  task, solar_signal = ci_solar_gain_calibration_task
@@ -242,14 +241,14 @@ def test_ci_solar_gain_calibration_task(ci_solar_gain_calibration_task, mocker):
242
241
 
243
242
 
244
243
  @pytest.mark.parametrize("number_of_beams", [pytest.param(1, id="CI"), pytest.param(2, id="SP")])
245
- def test_lamp_calibration_task(lamp_calibration_task, number_of_beams, mocker):
244
+ def test_lamp_calibration_task(lamp_calibration_task, number_of_beams, mocker, fake_gql_client):
246
245
  """
247
246
  Given: A LampGainCalibration task
248
247
  When: Calling the task instance
249
248
  Then: The correct number of output lamp gain frames exists, are tagged correctly, and are normalized
250
249
  """
251
250
  mocker.patch(
252
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
251
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
253
252
  )
254
253
  # When
255
254
  task = lamp_calibration_task
@@ -10,7 +10,6 @@ from dkist_processing_common._util.scratch import WorkflowFileSystem
10
10
  from dkist_processing_common.codecs.fits import fits_array_encoder
11
11
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
12
12
  from dkist_processing_common.models.task_name import TaskName
13
- from dkist_processing_common.tests.conftest import FakeGQLClient
14
13
  from dkist_processing_pac.fitter.polcal_fitter import PolcalFitter
15
14
  from dkist_processing_pac.input_data.dresser import Dresser
16
15
 
@@ -23,8 +22,8 @@ from dkist_processing_cryonirsp.tasks.instrument_polarization import (
23
22
  from dkist_processing_cryonirsp.tasks.instrument_polarization import (
24
23
  SPInstrumentPolarizationCalibration,
25
24
  )
26
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
27
25
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
26
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
28
27
  from dkist_processing_cryonirsp.tests.conftest import generate_fits_frame
29
28
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidPolcalFrames
30
29
 
@@ -399,7 +398,9 @@ def multiple_demodulation_matrices() -> np.ndarray:
399
398
 
400
399
 
401
400
  def test_ci_instrument_polarization_calibration_task(
402
- ci_instrument_polarization_calibration_task, mocker
401
+ ci_instrument_polarization_calibration_task,
402
+ mocker,
403
+ fake_gql_client,
403
404
  ):
404
405
  """
405
406
  Given: An InstrumentPolarizationCalibration task
@@ -408,7 +409,7 @@ def test_ci_instrument_polarization_calibration_task(
408
409
  """
409
410
 
410
411
  mocker.patch(
411
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
412
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
412
413
  )
413
414
 
414
415
  # When
@@ -438,7 +439,9 @@ def test_ci_instrument_polarization_calibration_task(
438
439
 
439
440
 
440
441
  def test_sp_instrument_polarization_calibration_task(
441
- sp_instrument_polarization_calibration_task, mocker
442
+ sp_instrument_polarization_calibration_task,
443
+ mocker,
444
+ fake_gql_client,
442
445
  ):
443
446
  """
444
447
  Given: An InstrumentPolarizationCalibration task
@@ -447,7 +450,7 @@ def test_sp_instrument_polarization_calibration_task(
447
450
  """
448
451
 
449
452
  mocker.patch(
450
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
453
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
451
454
  )
452
455
 
453
456
  # When
@@ -1,4 +1,5 @@
1
1
  """Test the linearity correction task."""
2
+
2
3
  import re
3
4
  from dataclasses import dataclass
4
5
  from datetime import datetime
@@ -10,15 +11,14 @@ from dkist_header_validator import spec122_validator
10
11
  from dkist_processing_common._util.scratch import WorkflowFileSystem
11
12
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
12
13
  from dkist_processing_common.models.tags import Tag
13
- from dkist_processing_common.tests.conftest import FakeGQLClient
14
14
  from dkist_service_configuration.logging import logger
15
15
 
16
16
  from dkist_processing_cryonirsp.models.constants import CryonirspBudName
17
17
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
18
18
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
19
19
  from dkist_processing_cryonirsp.tasks.linearity_correction import LinearityCorrection
20
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
21
20
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
21
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
22
22
  from dkist_processing_cryonirsp.tests.conftest import generate_fits_frame
23
23
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidNonLinearizedFrames
24
24
 
@@ -143,6 +143,7 @@ def linearity_correction(
143
143
  def test_linearity_correction(
144
144
  linearity_correction,
145
145
  mocker,
146
+ fake_gql_client,
146
147
  arm_id,
147
148
  frames_in_ramp,
148
149
  num_chunks,
@@ -154,7 +155,7 @@ def test_linearity_correction(
154
155
  Then: The non-linearized frames are linearized and produce the correct results.
155
156
  """
156
157
  mocker.patch(
157
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
158
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
158
159
  )
159
160
  if num_chunks == 2:
160
161
  mocker.patch(
@@ -5,7 +5,6 @@ from astropy.io import fits
5
5
  from dkist_header_validator import spec122_validator
6
6
  from dkist_processing_common._util.scratch import WorkflowFileSystem
7
7
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
8
- from dkist_processing_common.tests.conftest import FakeGQLClient
9
8
 
10
9
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
11
10
  from dkist_processing_cryonirsp.tasks.make_movie_frames import MakeCryonirspMovieFrames
@@ -90,14 +89,14 @@ def movie_frames_task(tmp_path, recipe_run_id, init_cryonirsp_constants_db, requ
90
89
  task._purge()
91
90
 
92
91
 
93
- def test_make_movie_frames(movie_frames_task, mocker):
92
+ def test_make_movie_frames(movie_frames_task, mocker, fake_gql_client):
94
93
  """
95
94
  Given: A MakeCryonirspMovieFrames task
96
95
  When: Calling the task instance
97
96
  Then: a fits file is made for each scan containing the movie frame for that scan
98
97
  """
99
98
  mocker.patch(
100
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
99
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
101
100
  )
102
101
  task, map_scans, scan_steps, array_shape, is_polarimetric = movie_frames_task
103
102
  expected_shape = array_shape
@@ -7,9 +7,9 @@ from astropy.units import Quantity
7
7
  from dkist_processing_common._util.scratch import WorkflowFileSystem
8
8
  from dkist_processing_common.codecs.array import array_decoder
9
9
  from dkist_processing_common.models.input_dataset import InputDatasetFilePointer
10
+ from hypothesis import HealthCheck
10
11
  from hypothesis import example
11
12
  from hypothesis import given
12
- from hypothesis import HealthCheck
13
13
  from hypothesis import settings
14
14
  from hypothesis import strategies as st
15
15
  from pydantic import BaseModel
@@ -20,9 +20,9 @@ from dkist_processing_cryonirsp.parsers.optical_density_filters import (
20
20
  ALLOWABLE_OPTICAL_DENSITY_FILTERS,
21
21
  )
22
22
  from dkist_processing_cryonirsp.tasks.cryonirsp_base import CryonirspTaskBase
23
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
24
23
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
25
24
  from dkist_processing_cryonirsp.tests.conftest import TestingParameters
25
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
26
26
 
27
27
  # The property names of all parameters on `CryonirspParsingParameters`
28
28
  PARSE_PARAMETER_NAMES = [
@@ -44,8 +44,7 @@ def basic_science_task_with_parameter_mixin(
44
44
  obs_ip_start_time: str = testing_obs_ip_start_time,
45
45
  ):
46
46
  class Task(CryonirspTaskBase):
47
- def run(self):
48
- ...
47
+ def run(self): ...
49
48
 
50
49
  init_cryonirsp_constants_db(recipe_run_id, CryonirspConstantsDb())
51
50
  with Task(
@@ -11,7 +11,6 @@ from astropy.io import fits
11
11
  from dkist_processing_common._util.scratch import WorkflowFileSystem
12
12
  from dkist_processing_common.models.constants import BudName
13
13
  from dkist_processing_common.tasks import WorkflowTaskBase
14
- from dkist_processing_common.tests.conftest import FakeGQLClient
15
14
 
16
15
  from dkist_processing_cryonirsp.models.constants import CryonirspBudName
17
16
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
@@ -345,10 +344,10 @@ def make_non_linearized_test_frames(
345
344
 
346
345
  @pytest.fixture
347
346
  def parse_linearized_task(
348
- tmp_path, recipe_run_id, assign_input_dataset_doc_to_task, mocker, arm_id
347
+ tmp_path, recipe_run_id, assign_input_dataset_doc_to_task, mocker, fake_gql_client, arm_id
349
348
  ):
350
349
  mocker.patch(
351
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
350
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
352
351
  )
353
352
  if arm_id == "CI":
354
353
  parsing_class = ParseL0CryonirspCILinearizedData
@@ -376,9 +375,9 @@ def parse_linearized_task(
376
375
 
377
376
 
378
377
  @pytest.fixture
379
- def parse_non_linearized_task(tmp_path, recipe_run_id, mocker):
378
+ def parse_non_linearized_task(tmp_path, recipe_run_id, mocker, fake_gql_client):
380
379
  mocker.patch(
381
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
380
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
382
381
  )
383
382
  with ParseL0CryonirspRampData(
384
383
  recipe_run_id=recipe_run_id,
@@ -981,6 +980,7 @@ def test_parse_cryonirsp_linearized_incomplete_raster_scan(
981
980
 
982
981
  assert task.constants._db_dict[CryonirspBudName.num_scan_steps.value] == num_scan_steps - 1
983
982
  assert task.constants._db_dict[CryonirspBudName.num_map_scans.value] == num_map_scans
983
+ assert task.constants._db_dict[CryonirspBudName.num_meas.value] == 2
984
984
 
985
985
 
986
986
  @pytest.mark.parametrize("arm_id", ["CI", "SP"])
@@ -1275,6 +1275,12 @@ def test_parse_cryonirsp_linearized_data_constants(
1275
1275
  task.constants._db_dict[CryonirspBudName.grating_constant.value] == 770970.3576216539
1276
1276
  ) # From `SimpleModulatedHeaders`
1277
1277
 
1278
+ assert task.constants._db_dict["CAMERA_NAME"] == "camera_name"
1279
+ assert task.constants._db_dict["DARK_GOS_LEVEL3_STATUS"] == "lamp"
1280
+ assert task.constants._db_dict["SOLAR_GAIN_GOS_LEVEL3_STATUS"] == "clear"
1281
+ assert task.constants._db_dict["SOLAR_GAIN_NUM_RAW_FRAMES_PER_FPA"] == 10
1282
+ assert task.constants._db_dict["POLCAL_NUM_RAW_FRAMES_PER_FPA"] == 10
1283
+
1278
1284
 
1279
1285
  @pytest.mark.parametrize("arm_id", ["SP"])
1280
1286
  def test_parse_cryonirsp_linearized_data_internal_scan_loops_as_map_scan_and_scan_step(
@@ -1307,9 +1313,9 @@ def test_parse_cryonirsp_linearized_data_internal_scan_loops_as_map_scan_and_sca
1307
1313
  num_alt_scan_steps = 3
1308
1314
 
1309
1315
  def make_dual_scan_loop_headers(translated_header):
1310
- translated_header[
1311
- "CNP2DSS"
1312
- ] = 0.0 # This triggers the parsing of the dual internal scan loops
1316
+ translated_header["CNP2DSS"] = (
1317
+ 0.0 # This triggers the parsing of the dual internal scan loops
1318
+ )
1313
1319
  translated_header["CNP1DNSP"] = num_alt_scan_steps # inner loop -- becomes num scan steps
1314
1320
  translated_header["CNP2DNSP"] = num_alt_maps # outer loop -- becomes num map scans
1315
1321
  translated_header["CNP1DCUR"] = (translated_header["CNCURSCN"] - 1) % num_alt_scan_steps + 1
@@ -8,7 +8,6 @@ from dkist_processing_common._util.scratch import WorkflowFileSystem
8
8
  from dkist_processing_common.codecs.fits import fits_array_encoder
9
9
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
10
10
  from dkist_processing_common.models.task_name import TaskName
11
- from dkist_processing_common.tests.conftest import FakeGQLClient
12
11
 
13
12
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
14
13
  from dkist_processing_cryonirsp.tasks.quality_metrics import CryonirspL0QualityMetrics
@@ -161,7 +160,7 @@ def test_l0_quality_task(
161
160
  assert len(files) > 0
162
161
 
163
162
 
164
- def test_l1_quality_task(cryo_l1_quality_task, mocker):
163
+ def test_l1_quality_task(cryo_l1_quality_task, mocker, fake_gql_client):
165
164
  """
166
165
  Given: A CryonirspL1QualityMetrics task
167
166
  When: Calling the task instance
@@ -169,7 +168,7 @@ def test_l1_quality_task(cryo_l1_quality_task, mocker):
169
168
  and a single noise measurement and datetime is recorded for L1 file for each Stokes Q, U, and V
170
169
  """
171
170
  mocker.patch(
172
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
171
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
173
172
  )
174
173
  # When
175
174
  task = cryo_l1_quality_task
@@ -7,12 +7,12 @@ from dkist_header_validator import spec122_validator
7
7
  from dkist_processing_common._util.scratch import WorkflowFileSystem
8
8
  from dkist_processing_common.codecs.fits import fits_array_encoder
9
9
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
10
- from dkist_processing_common.tests.conftest import FakeGQLClient
11
10
 
12
11
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
13
12
  from dkist_processing_cryonirsp.tasks.sp_beam_boundaries import SPBeamBoundariesCalibration
14
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
15
13
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
14
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
15
+ from dkist_processing_cryonirsp.tests.conftest import fake_gql_client
16
16
  from dkist_processing_cryonirsp.tests.conftest import generate_fits_frame
17
17
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidSPSolarGainFrames
18
18
 
@@ -85,14 +85,14 @@ def compute_beam_boundaries_task(
85
85
  task._purge()
86
86
 
87
87
 
88
- def test_compute_beam_boundaries_task(compute_beam_boundaries_task, mocker):
88
+ def test_compute_beam_boundaries_task(compute_beam_boundaries_task, mocker, fake_gql_client):
89
89
  """
90
90
  Given: A SPBeamBoundariesCalibration task
91
91
  When: Calling the task instance with known input data
92
92
  Then: The correct beam boundary values are created and saved as intermediate files
93
93
  """
94
94
  mocker.patch(
95
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
95
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
96
96
  )
97
97
  # Given
98
98
  task, arm_id = compute_beam_boundaries_task
@@ -5,7 +5,6 @@ import pytest
5
5
  from dkist_processing_common._util.scratch import WorkflowFileSystem
6
6
  from dkist_processing_common.codecs.fits import fits_array_encoder
7
7
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
8
- from dkist_processing_common.tests.conftest import FakeGQLClient
9
8
  from dkist_processing_math import transform
10
9
 
11
10
  from dkist_processing_cryonirsp.codecs.fits import cryo_fits_array_decoder
@@ -13,8 +12,8 @@ from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOptic
13
12
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
14
13
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
15
14
  from dkist_processing_cryonirsp.tasks.sp_geometric import SPGeometricCalibration
16
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
17
15
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
16
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
18
17
  from dkist_processing_cryonirsp.tests.conftest import generate_214_l0_fits_frame
19
18
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidSPSolarGainFrames
20
19
 
@@ -287,7 +286,7 @@ def geometric_calibration_task_with_simple_raw_data(
287
286
  task._purge()
288
287
 
289
288
 
290
- def test_geometric_task(geometric_calibration_task_that_completes, mocker):
289
+ def test_geometric_task(geometric_calibration_task_that_completes, mocker, fake_gql_client):
291
290
  """
292
291
  Given: A set of raw solar gain images and necessary intermediate calibrations
293
292
  When: Running the geometric task
@@ -295,7 +294,7 @@ def test_geometric_task(geometric_calibration_task_that_completes, mocker):
295
294
  """
296
295
  # See the note in the fixture above: this test does NOT test for accuracy of the calibration
297
296
  mocker.patch(
298
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
297
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
299
298
  )
300
299
  task, beam_shape = geometric_calibration_task_that_completes
301
300
  task()
@@ -6,7 +6,6 @@ from astropy.io import fits
6
6
  from dkist_header_validator import spec122_validator
7
7
  from dkist_processing_common._util.scratch import WorkflowFileSystem
8
8
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
9
- from dkist_processing_common.tests.conftest import FakeGQLClient
10
9
 
11
10
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
12
11
  from dkist_processing_cryonirsp.tasks.make_movie_frames import SPMakeCryonirspMovieFrames
@@ -95,14 +94,14 @@ def sp_movie_frames_task(tmp_path, recipe_run_id, init_cryonirsp_constants_db, r
95
94
  task._purge()
96
95
 
97
96
 
98
- def test_sp_make_movie_frames(sp_movie_frames_task, mocker):
97
+ def test_sp_make_movie_frames(sp_movie_frames_task, mocker, fake_gql_client):
99
98
  """
100
99
  Given: A SPMakeCryonirspMovieFrames task
101
100
  When: Calling the task instance
102
101
  Then: a fits file is made for each scan containing the movie frame for that scan
103
102
  """
104
103
  mocker.patch(
105
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
104
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
106
105
  )
107
106
  task, map_scans, scan_steps, array_shape, is_polarimetric = sp_movie_frames_task
108
107
  if scan_steps > 1:
@@ -11,7 +11,6 @@ from dkist_header_validator import spec122_validator
11
11
  from dkist_processing_common._util.scratch import WorkflowFileSystem
12
12
  from dkist_processing_common.codecs.fits import fits_array_encoder
13
13
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
14
- from dkist_processing_common.tests.conftest import FakeGQLClient
15
14
 
16
15
  from dkist_processing_cryonirsp.models.exposure_conditions import AllowableOpticalDensityFilterNames
17
16
  from dkist_processing_cryonirsp.models.exposure_conditions import ExposureConditions
@@ -20,8 +19,8 @@ from dkist_processing_cryonirsp.models.tags import CryonirspTag
20
19
  from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspL0FitsAccess
21
20
  from dkist_processing_cryonirsp.tasks.sp_science import CalibrationCollection
22
21
  from dkist_processing_cryonirsp.tasks.sp_science import SPScienceCalibration
23
- from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
24
22
  from dkist_processing_cryonirsp.tests.conftest import CryonirspConstantsDb
23
+ from dkist_processing_cryonirsp.tests.conftest import cryonirsp_testing_parameters_factory
25
24
  from dkist_processing_cryonirsp.tests.conftest import generate_fits_frame
26
25
  from dkist_processing_cryonirsp.tests.header_models import CryonirspHeadersValidObserveFrames
27
26
 
@@ -320,7 +319,7 @@ def calibrated_array_and_header_dicts(
320
319
  return array_dict, header_dict, array_shape
321
320
 
322
321
 
323
- def test_sp_science_calibration_task(sp_science_calibration_task, mocker):
322
+ def test_sp_science_calibration_task(sp_science_calibration_task, mocker, fake_gql_client):
324
323
  """
325
324
  Given: A SPScienceCalibration task
326
325
  When: Calling the task instance
@@ -328,7 +327,7 @@ def test_sp_science_calibration_task(sp_science_calibration_task, mocker):
328
327
  """
329
328
 
330
329
  mocker.patch(
331
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
330
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
332
331
  )
333
332
 
334
333
  # When