dkist-processing-dlnirsp 0.32.2__py3-none-any.whl → 0.32.4__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 (21) hide show
  1. dkist_processing_dlnirsp/models/fits_access.py +32 -0
  2. dkist_processing_dlnirsp/parsers/dlnirsp_l0_fits_access.py +35 -23
  3. dkist_processing_dlnirsp/parsers/task.py +2 -6
  4. dkist_processing_dlnirsp/parsers/time.py +2 -1
  5. dkist_processing_dlnirsp/parsers/wavelength.py +5 -1
  6. dkist_processing_dlnirsp/tasks/linearity_correction.py +55 -24
  7. dkist_processing_dlnirsp/tasks/parse.py +21 -12
  8. dkist_processing_dlnirsp/tasks/science.py +7 -5
  9. dkist_processing_dlnirsp/tasks/write_l1.py +5 -4
  10. dkist_processing_dlnirsp/tests/conftest.py +13 -5
  11. dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py +18 -16
  12. dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_helpers.py +2 -1
  13. dkist_processing_dlnirsp/tests/test_dlnirsp_fits_access.py +56 -3
  14. dkist_processing_dlnirsp/tests/test_linearity_correction.py +120 -21
  15. dkist_processing_dlnirsp/tests/test_parse.py +3 -2
  16. dkist_processing_dlnirsp/tests/test_science.py +7 -6
  17. {dkist_processing_dlnirsp-0.32.2.dist-info → dkist_processing_dlnirsp-0.32.4.dist-info}/METADATA +42 -41
  18. {dkist_processing_dlnirsp-0.32.2.dist-info → dkist_processing_dlnirsp-0.32.4.dist-info}/RECORD +21 -20
  19. {dkist_processing_dlnirsp-0.32.2.dist-info → dkist_processing_dlnirsp-0.32.4.dist-info}/WHEEL +0 -0
  20. {dkist_processing_dlnirsp-0.32.2.dist-info → dkist_processing_dlnirsp-0.32.4.dist-info}/entry_points.txt +0 -0
  21. {dkist_processing_dlnirsp-0.32.2.dist-info → dkist_processing_dlnirsp-0.32.4.dist-info}/top_level.txt +0 -0
@@ -2,8 +2,10 @@ import pytest
2
2
  from astropy.io import fits
3
3
  from dkist_header_validator.translator import translate_spec122_to_spec214_l0
4
4
 
5
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
5
6
  from dkist_processing_dlnirsp.parsers.dlnirsp_l0_fits_access import DlnirspL0FitsAccess
6
7
  from dkist_processing_dlnirsp.parsers.dlnirsp_l0_fits_access import DlnirspRampFitsAccess
8
+ from dkist_processing_dlnirsp.parsers.dlnirsp_l1_fits_acess import DlnirspL1FitsAccess
7
9
  from dkist_processing_dlnirsp.tests.conftest import DlnirspHeaders
8
10
 
9
11
 
@@ -48,9 +50,11 @@ def test_dlnirsp_ramp_fits_access(ramp_header, arm_id):
48
50
  assert fits_obj.current_frame_in_ramp == -88
49
51
 
50
52
  else:
51
- assert fits_obj.camera_readout_mode == ramp_header["DLCAMSMD"]
52
- assert fits_obj.num_frames_in_ramp == ramp_header["DLCAMNS"]
53
- assert fits_obj.current_frame_in_ramp == ramp_header["DLCAMCUR"]
53
+ assert fits_obj.camera_readout_mode == ramp_header[DlnirspMetadataKey.camera_readout_mode]
54
+ assert fits_obj.num_frames_in_ramp == ramp_header[DlnirspMetadataKey.num_frames_in_ramp]
55
+ assert (
56
+ fits_obj.current_frame_in_ramp == ramp_header[DlnirspMetadataKey.current_frame_in_ramp]
57
+ )
54
58
 
55
59
 
56
60
  @pytest.mark.parametrize(
@@ -74,3 +78,52 @@ def test_dlnirsp_l0_fits_access(dither_header, dither_mode_on, dither_step):
74
78
  assert fits_obj.dither_step is 0
75
79
  else:
76
80
  assert fits_obj.dither_step == int(dither_step)
81
+
82
+
83
+ @pytest.mark.parametrize("arm_id", [pytest.param("VIS", id="vis_arm")])
84
+ def test_metadata_keys_in_access_bases(ramp_header, arm_id):
85
+ """
86
+ Given: the set of metadata key names in DlnirspMetadataKey
87
+ When: the Dlnirsp FITS access classes define a set of new attributes
88
+ Then: the sets are the same and the attributes have the correct values
89
+ """
90
+ dlnirsp_metadata_key_names = {dmk.name for dmk in DlnirspMetadataKey}
91
+ all_dlnirsp_fits_access_attrs = set()
92
+ for access_class in [DlnirspRampFitsAccess, DlnirspL0FitsAccess, DlnirspL1FitsAccess]:
93
+ fits_obj = access_class.from_header(ramp_header)
94
+ dlnirsp_instance_attrs = set(vars(fits_obj).keys())
95
+ parent_class = access_class.mro()[1]
96
+ parent_fits_obj = parent_class.from_header(ramp_header)
97
+ parent_instance_attrs = set(vars(parent_fits_obj).keys())
98
+ dlnirsp_fits_access_attrs = dlnirsp_instance_attrs - parent_instance_attrs
99
+ for attr in dlnirsp_fits_access_attrs:
100
+ match attr:
101
+ case "num_frames_in_ramp":
102
+ assert getattr(fits_obj, attr) == fits_obj.header.get(
103
+ DlnirspMetadataKey[attr], -99
104
+ )
105
+ case "current_frame_in_ramp":
106
+ assert getattr(fits_obj, attr) == fits_obj.header.get(
107
+ DlnirspMetadataKey[attr], -88
108
+ )
109
+ case "camera_sample_sequence":
110
+ assert getattr(fits_obj, attr) == fits_obj.header.get(
111
+ DlnirspMetadataKey[attr], "VISIBLE_CAMERA_SEQUENCE"
112
+ )
113
+ case "camera_readout_mode":
114
+ assert getattr(fits_obj, attr) == fits_obj.header.get(
115
+ DlnirspMetadataKey[attr], "DEFAULT_VISIBLE_CAMERA"
116
+ )
117
+ case "num_dither_steps":
118
+ assert (
119
+ getattr(fits_obj, attr)
120
+ == int(fits_obj.header[DlnirspMetadataKey[attr]]) + 1
121
+ )
122
+ case "dither_step":
123
+ assert getattr(fits_obj, attr) == int(
124
+ fits_obj.header.get(DlnirspMetadataKey[attr], False)
125
+ )
126
+ case _:
127
+ assert getattr(fits_obj, attr) == fits_obj.header[DlnirspMetadataKey[attr]]
128
+ all_dlnirsp_fits_access_attrs |= dlnirsp_fits_access_attrs
129
+ assert dlnirsp_metadata_key_names == all_dlnirsp_fits_access_attrs
@@ -10,6 +10,7 @@ from astropy.time import Time
10
10
  from astropy.time import TimeDelta
11
11
  from dkist_processing_common._util.scratch import WorkflowFileSystem
12
12
  from dkist_processing_common.models.fits_access import FitsAccessBase
13
+ from dkist_processing_common.models.fits_access import MetadataKey
13
14
  from dkist_processing_common.models.task_name import TaskName
14
15
  from dkist_service_configuration.logging import logger
15
16
  from scipy.optimize import fsolve
@@ -83,21 +84,31 @@ def write_ramps_to_task(
83
84
  poly_coeffs = task.parameters.linearization_poly_coeffs
84
85
  correction_poly = np.poly1d(poly_coeffs)
85
86
 
86
- match modulator_spin_mode:
87
- case "Continuous":
88
- ramp_data_func = partial(
89
- make_continuous_ramp_data, bias=bias_value, correction_poly=correction_poly
90
- )
91
- case "Discrete":
92
- ramp_data_func = partial(
93
- make_discrete_ramp_data,
94
- slopes=slopes,
95
- intercepts=intercepts,
96
- bias=bias_value,
97
- correction_poly=correction_poly,
98
- )
87
+ match camera_readout_mode:
88
+ case "UpTheRamp":
89
+ match modulator_spin_mode:
90
+ case "Continuous":
91
+ ramp_data_func = partial(
92
+ make_continuous_ramp_data, bias=bias_value, correction_poly=correction_poly
93
+ )
94
+ case "Discrete":
95
+ ramp_data_func = partial(
96
+ make_discrete_ramp_data,
97
+ slopes=slopes,
98
+ intercepts=intercepts,
99
+ bias=bias_value,
100
+ correction_poly=correction_poly,
101
+ )
102
+ case _:
103
+ raise ValueError(
104
+ f"Don't know how to make data for {camera_readout_mode = } and {modulator_spin_mode = }"
105
+ )
106
+ case "SubFrame":
107
+ ramp_data_func = partial(make_subframe_data, correction_poly=correction_poly)
108
+ num_line = 0
109
+ num_read = 1
99
110
  case _:
100
- raise ValueError(f"Don't know how to make data for {modulator_spin_mode = }")
111
+ raise ValueError(f"Don't know how to make data for {camera_readout_mode = }")
101
112
 
102
113
  dataset = RawRampHeaders(
103
114
  array_shape=array_shape,
@@ -238,6 +249,27 @@ def make_discrete_ramp_data(
238
249
  return array
239
250
 
240
251
 
252
+ def make_subframe_data(
253
+ frame: RawRampHeaders, correction_poly: np.poly1d = np.poly1d([1])
254
+ ) -> np.ndarray:
255
+ shape = frame.array_shape
256
+ if frame.frame_in_ramp("") <= frame.num_coadd:
257
+ # One of the subframes. These are the values we use
258
+ true_value = (frame.current_coadd_in_ramp + 1) * 1000
259
+
260
+ else:
261
+ # A reset frame. Who cares
262
+ true_value = np.nan
263
+
264
+ # We want the polynomial corrected frame value to equal `true_value`, but the value of the polynomial will change
265
+ # depending on the "raw" value (`value`). So here we solve for the raw value numerically.
266
+ # Basically, solve for x such that `x / poly(x) == true_value`
267
+ fit_func = lambda x: x / correction_poly(x) - true_value
268
+ value = fsolve(fit_func, true_value)
269
+
270
+ return np.ones(shape) * value
271
+
272
+
241
273
  def write_vis_inputs_to_task(task, num_frames):
242
274
  dataset = SimpleModulatedHeaders(
243
275
  num_modstates=num_frames,
@@ -282,10 +314,9 @@ def up_the_ramp_continuous_expected_value(
282
314
  def subframe_expected_value(
283
315
  *, ramp_num: int, num_line: int, num_read: int, expected_avg_coadd_value: float, **unused_args
284
316
  ) -> float:
285
- # See `make_discrete_ramp_data` for where this comes from
286
- # Unlike the continuous data methods, the discrete data already includes the bias, so we don't need
287
- # to subtract it here
288
- return ramp_num * 100 + (num_line + num_read) * 10 + expected_avg_coadd_value
317
+ # See `make_subframe_ramp_data` for where this comes from; each coadd has the value of it's coadd number (1-indexed)
318
+ # times 1000
319
+ return expected_avg_coadd_value * 1000
289
320
 
290
321
 
291
322
  def discrete_expected_value(
@@ -414,8 +445,8 @@ def test_linearity_correction(
414
445
  np.testing.assert_allclose(data, expected_value, rtol=1e-13)
415
446
 
416
447
  header = fits.getheader(files[0])
417
- assert header["XPOSURE"] == expected_total_exp
418
- assert header["TEXPOSUR"] == expected_NDR_exp
448
+ assert header[MetadataKey.fpa_exposure_time_ms] == expected_total_exp
449
+ assert header[MetadataKey.sensor_readout_exposure_time_ms] == expected_NDR_exp
419
450
 
420
451
 
421
452
  def test_VIS_linearity_correction(
@@ -471,6 +502,8 @@ def test_VIS_linearity_correction(
471
502
  [[3, 2], [3, 2], [3, 2]],
472
503
  id="3line,2read,3line,2read,3line,2read,1line",
473
504
  ),
505
+ pytest.param("3subframe", [[1], [1], [1]], id="3subframe"),
506
+ pytest.param("5subframe,37line", [[1], [1], [1], [1], [1]], id="5subframe,37line"),
474
507
  ],
475
508
  )
476
509
  def test_parse_camera_sample_sequence(linearity_correction_task, camera_sequence, expected_results):
@@ -572,6 +605,19 @@ def test_linearity_correction_with_invalid_ramps(
572
605
  "Missing some ramp frames. Expected 10 from sample sequence",
573
606
  id="wrong_number_from_seq",
574
607
  ),
608
+ pytest.param(
609
+ [
610
+ DummyRampFitsAccess(
611
+ num_frames_in_ramp=2, camera_sample_sequence="5subframe,23line"
612
+ ),
613
+ DummyRampFitsAccess(
614
+ num_frames_in_ramp=2, camera_sample_sequence="5subframe,23line"
615
+ ),
616
+ ],
617
+ False,
618
+ "Missing some ramp frames. Expected 28 from sample sequence",
619
+ id="wrong_number_from_seq_subframe",
620
+ ),
575
621
  pytest.param(
576
622
  [
577
623
  DummyRampFitsAccess(
@@ -583,6 +629,39 @@ def test_linearity_correction_with_invalid_ramps(
583
629
  "Malformed camera sample sequence",
584
630
  id="bad_cam_seq",
585
631
  ),
632
+ pytest.param(
633
+ [
634
+ DummyRampFitsAccess(
635
+ num_frames_in_ramp=1,
636
+ camera_sample_sequence="3subframe,2read",
637
+ ),
638
+ ],
639
+ False,
640
+ "Malformed camera sample sequence",
641
+ id="bad_cam_seq_subframe_mix",
642
+ ),
643
+ pytest.param(
644
+ [
645
+ DummyRampFitsAccess(
646
+ num_frames_in_ramp=1,
647
+ camera_sample_sequence="10line,3subframe",
648
+ ),
649
+ ],
650
+ False,
651
+ "Malformed camera sample sequence",
652
+ id="bad_cam_seq_line_subframe",
653
+ ),
654
+ pytest.param(
655
+ [
656
+ DummyRampFitsAccess(
657
+ num_frames_in_ramp=1,
658
+ camera_sample_sequence="3subframe,3subframe",
659
+ ),
660
+ ],
661
+ False,
662
+ "Malformed camera sample sequence",
663
+ id="bad_cam_seq_multiple_subframe",
664
+ ),
586
665
  pytest.param(
587
666
  [
588
667
  DummyRampFitsAccess(camera_readout_mode="UpTheRamp"),
@@ -622,6 +701,26 @@ def test_linearity_correction_with_invalid_ramps(
622
701
  "",
623
702
  id="valid",
624
703
  ),
704
+ pytest.param(
705
+ [
706
+ DummyRampFitsAccess(num_frames_in_ramp=2, camera_sample_sequence="2subframe"),
707
+ DummyRampFitsAccess(num_frames_in_ramp=2, camera_sample_sequence="2subframe"),
708
+ ],
709
+ True,
710
+ "",
711
+ id="valid_subframe",
712
+ ),
713
+ pytest.param(
714
+ [
715
+ DummyRampFitsAccess(num_frames_in_ramp=4, camera_sample_sequence="3subframe,1line"),
716
+ DummyRampFitsAccess(num_frames_in_ramp=4, camera_sample_sequence="3subframe,1line"),
717
+ DummyRampFitsAccess(num_frames_in_ramp=4, camera_sample_sequence="3subframe,1line"),
718
+ DummyRampFitsAccess(num_frames_in_ramp=4, camera_sample_sequence="3subframe,1line"),
719
+ ],
720
+ True,
721
+ "",
722
+ id="valid_subframe_reset",
723
+ ),
625
724
  ],
626
725
  )
627
726
  def test_is_ramp_valid(linearity_correction_task, ramp_list, valid, message, caplog):
@@ -633,7 +732,7 @@ def test_is_ramp_valid(linearity_correction_task, ramp_list, valid, message, cap
633
732
  logger.add(caplog.handler)
634
733
  assert linearity_correction_task.is_ramp_valid(ramp_list) is valid
635
734
  if not valid:
636
- assert re.search(message, caplog.text)
735
+ assert re.search(message, caplog.text), f"Did not find {message} in {caplog.text}"
637
736
 
638
737
 
639
738
  def test_correction_polynomial(linearity_correction_task, assign_input_dataset_doc_to_task):
@@ -11,6 +11,7 @@ from dkist_processing_common.models.constants import BudName
11
11
  from dkist_processing_common.models.task_name import TaskName
12
12
 
13
13
  from dkist_processing_dlnirsp.models.constants import DlnirspBudName
14
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
14
15
  from dkist_processing_dlnirsp.models.parameters import DlnirspParsingParameters
15
16
  from dkist_processing_dlnirsp.models.tags import DlnirspStemName
16
17
  from dkist_processing_dlnirsp.models.tags import DlnirspTag
@@ -45,7 +46,7 @@ def raw_ramp_parse_task(tmp_path, recipe_run_id, arm_id):
45
46
  ramp_length_sec = 1.0
46
47
  array_shape = (3, 3)
47
48
  modulator_spin_mode = "Really fast"
48
- camera_readout_mode = "Super cool"
49
+ camera_readout_mode = "UpTheRamp"
49
50
  with ParseL0DlnirspRampData(
50
51
  recipe_run_id=recipe_run_id,
51
52
  workflow_name="workflow_name",
@@ -123,7 +124,7 @@ def test_parse_ramp_data(raw_ramp_parse_task, arm_id):
123
124
  )
124
125
  assert len(fits_obj_list) == num_line + num_read + num_reset
125
126
  for fits_obj in fits_obj_list:
126
- header_curr_frame = fits_obj.header["DLCAMCUR"]
127
+ header_curr_frame = fits_obj.header[DlnirspMetadataKey.current_frame_in_ramp]
127
128
  tags = task.tags(fits_obj.name)
128
129
  tag_curr_frame = [
129
130
  int(t.split("_")[-1])
@@ -9,6 +9,7 @@ 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.models.task_name import TaskName
11
11
 
12
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
12
13
  from dkist_processing_dlnirsp.models.parameters import DlnirspParameters
13
14
  from dkist_processing_dlnirsp.models.tags import DlnirspTag
14
15
  from dkist_processing_dlnirsp.tasks.science import CalibrationCollection
@@ -370,8 +371,8 @@ def test_science_task_completes(science_task_with_data, is_polarimetric, mocker,
370
371
  OG_PC_ij_matrix[1, 0] = obs_header["PC2_1"]
371
372
  OG_PC_ij_matrix[1, 1] = obs_header["PC2_2"]
372
373
 
373
- OG_CRPIX1 = obs_header["CRPIX1"]
374
- OG_CRPIX2 = obs_header["CRPIX2"]
374
+ OG_CRPIX1 = obs_header[DlnirspMetadataKey.crpix_1]
375
+ OG_CRPIX2 = obs_header[DlnirspMetadataKey.crpix_2]
375
376
 
376
377
  expected_WCS_values = compute_expected_WCS_values(
377
378
  OG_PC_ij_matrix, OG_CRPIX1, OG_CRPIX2, task.parameters
@@ -405,8 +406,8 @@ def test_science_task_completes(science_task_with_data, is_polarimetric, mocker,
405
406
  assert "DATE-END" in header
406
407
  # Need to check inequality because some randomness is added to the CRPIX
407
408
  # values in `ModulatedObserveHeaders`.
408
- assert header["CRPIX1"] - expected_CRPIX1 < 3
409
- assert header["CRPIX2"] - expected_CRPIX2 < 3
409
+ assert header[DlnirspMetadataKey.crpix_1] - expected_CRPIX1 < 3
410
+ assert header[DlnirspMetadataKey.crpix_2] - expected_CRPIX2 < 3
410
411
  assert header["PC1_1"] == expected_PC_ij_matrix[0, 0]
411
412
  assert header["PC1_2"] == expected_PC_ij_matrix[0, 1]
412
413
  assert header["PC2_1"] == expected_PC_ij_matrix[1, 0]
@@ -560,5 +561,5 @@ def test_WCS_correction(science_task_with_no_data, pc_correction_matrix, crpix_m
560
561
  assert corrected_header["PC1_2"] == expected_pc_matrix[0, 1]
561
562
  assert corrected_header["PC2_1"] == expected_pc_matrix[1, 0]
562
563
  assert corrected_header["PC2_2"] == expected_pc_matrix[1, 1]
563
- assert corrected_header["CRPIX1"] == expected_crpix1
564
- assert corrected_header["CRPIX2"] == expected_crpix2
564
+ assert corrected_header[DlnirspMetadataKey.crpix_1] == expected_crpix1
565
+ assert corrected_header[DlnirspMetadataKey.crpix_2] == expected_crpix2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-dlnirsp
3
- Version: 0.32.2
3
+ Version: 0.32.4
4
4
  Summary: Science processing code for the DLNIRSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -76,6 +76,7 @@ Requires-Dist: Flask-Login==0.6.3; extra == "frozen"
76
76
  Requires-Dist: Flask-SQLAlchemy==2.5.1; extra == "frozen"
77
77
  Requires-Dist: Flask-Session==0.5.0; extra == "frozen"
78
78
  Requires-Dist: Flask-WTF==1.2.2; extra == "frozen"
79
+ Requires-Dist: ImageIO==2.37.2; extra == "frozen"
79
80
  Requires-Dist: Jinja2==3.1.6; extra == "frozen"
80
81
  Requires-Dist: Mako==1.3.10; extra == "frozen"
81
82
  Requires-Dist: MarkupSafe==3.0.3; extra == "frozen"
@@ -93,44 +94,44 @@ Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
93
94
  Requires-Dist: aiohttp==3.13.2; extra == "frozen"
94
95
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
95
96
  Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
96
- Requires-Dist: alembic==1.17.1; extra == "frozen"
97
+ Requires-Dist: alembic==1.17.2; extra == "frozen"
97
98
  Requires-Dist: amqp==5.3.1; extra == "frozen"
98
99
  Requires-Dist: annotated-types==0.7.0; extra == "frozen"
99
- Requires-Dist: anyio==4.11.0; extra == "frozen"
100
+ Requires-Dist: anyio==4.12.0; extra == "frozen"
100
101
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
101
- Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
102
- Requires-Dist: apache-airflow-providers-common-compat==1.8.0; extra == "frozen"
103
- Requires-Dist: apache-airflow-providers-common-io==1.6.4; extra == "frozen"
104
- Requires-Dist: apache-airflow-providers-common-sql==1.28.2; extra == "frozen"
102
+ Requires-Dist: apache-airflow-providers-celery==3.13.1; extra == "frozen"
103
+ Requires-Dist: apache-airflow-providers-common-compat==1.10.0; extra == "frozen"
104
+ Requires-Dist: apache-airflow-providers-common-io==1.7.0; extra == "frozen"
105
+ Requires-Dist: apache-airflow-providers-common-sql==1.29.0; extra == "frozen"
105
106
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
106
- Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
107
- Requires-Dist: apache-airflow-providers-http==5.4.0; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-imap==3.9.3; extra == "frozen"
109
- Requires-Dist: apache-airflow-providers-postgres==6.4.0; extra == "frozen"
110
- Requires-Dist: apache-airflow-providers-smtp==2.3.1; extra == "frozen"
111
- Requires-Dist: apache-airflow-providers-sqlite==4.1.2; extra == "frozen"
112
- Requires-Dist: apispec==6.8.4; extra == "frozen"
107
+ Requires-Dist: apache-airflow-providers-ftp==3.14.0; extra == "frozen"
108
+ Requires-Dist: apache-airflow-providers-http==5.6.0; extra == "frozen"
109
+ Requires-Dist: apache-airflow-providers-imap==3.10.0; extra == "frozen"
110
+ Requires-Dist: apache-airflow-providers-postgres==6.5.0; extra == "frozen"
111
+ Requires-Dist: apache-airflow-providers-smtp==2.4.0; extra == "frozen"
112
+ Requires-Dist: apache-airflow-providers-sqlite==4.2.0; extra == "frozen"
113
+ Requires-Dist: apispec==6.9.0; extra == "frozen"
113
114
  Requires-Dist: argcomplete==3.6.3; extra == "frozen"
114
115
  Requires-Dist: asdf==3.5.0; extra == "frozen"
115
116
  Requires-Dist: asdf_standard==1.4.0; extra == "frozen"
116
117
  Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
117
- Requires-Dist: asgiref==3.10.0; extra == "frozen"
118
- Requires-Dist: asteval==1.0.6; extra == "frozen"
118
+ Requires-Dist: asgiref==3.11.0; extra == "frozen"
119
+ Requires-Dist: asteval==1.0.7; extra == "frozen"
119
120
  Requires-Dist: astropy==7.0.2; extra == "frozen"
120
- Requires-Dist: astropy-iers-data==0.2025.11.3.0.38.37; extra == "frozen"
121
- Requires-Dist: asyncpg==0.30.0; extra == "frozen"
121
+ Requires-Dist: astropy-iers-data==0.2025.12.1.0.45.12; extra == "frozen"
122
+ Requires-Dist: asyncpg==0.31.0; extra == "frozen"
122
123
  Requires-Dist: attrs==25.4.0; extra == "frozen"
123
124
  Requires-Dist: babel==2.17.0; extra == "frozen"
124
- Requires-Dist: billiard==4.2.2; extra == "frozen"
125
+ Requires-Dist: billiard==4.2.4; extra == "frozen"
125
126
  Requires-Dist: blinker==1.9.0; extra == "frozen"
126
- Requires-Dist: boto3==1.40.64; extra == "frozen"
127
- Requires-Dist: botocore==1.40.64; extra == "frozen"
127
+ Requires-Dist: boto3==1.42.0; extra == "frozen"
128
+ Requires-Dist: botocore==1.41.6; extra == "frozen"
128
129
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
129
- Requires-Dist: celery==5.3.1; extra == "frozen"
130
- Requires-Dist: certifi==2025.10.5; extra == "frozen"
130
+ Requires-Dist: celery==5.6.0; extra == "frozen"
131
+ Requires-Dist: certifi==2025.11.12; extra == "frozen"
131
132
  Requires-Dist: cffi==2.0.0; extra == "frozen"
132
133
  Requires-Dist: charset-normalizer==3.4.4; extra == "frozen"
133
- Requires-Dist: click==8.3.0; extra == "frozen"
134
+ Requires-Dist: click==8.3.1; extra == "frozen"
134
135
  Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
135
136
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
136
137
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
@@ -149,7 +150,7 @@ Requires-Dist: dill==0.4.0; extra == "frozen"
149
150
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
150
151
  Requires-Dist: dkist-processing-common==11.8.0; extra == "frozen"
151
152
  Requires-Dist: dkist-processing-core==6.0.0; extra == "frozen"
152
- Requires-Dist: dkist-processing-dlnirsp==0.32.2; extra == "frozen"
153
+ Requires-Dist: dkist-processing-dlnirsp==0.32.4; extra == "frozen"
153
154
  Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
154
155
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
155
156
  Requires-Dist: dkist-service-configuration==4.1.7; extra == "frozen"
@@ -157,14 +158,15 @@ Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
157
158
  Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
158
159
  Requires-Dist: dnspython==2.8.0; extra == "frozen"
159
160
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
161
+ Requires-Dist: exceptiongroup==1.3.1; extra == "frozen"
160
162
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
161
163
  Requires-Dist: flower==2.0.1; extra == "frozen"
162
- Requires-Dist: fonttools==4.60.1; extra == "frozen"
164
+ Requires-Dist: fonttools==4.61.0; extra == "frozen"
163
165
  Requires-Dist: frozenlist==1.8.0; extra == "frozen"
164
166
  Requires-Dist: fsspec==2025.10.0; extra == "frozen"
165
167
  Requires-Dist: globus-sdk==3.65.0; extra == "frozen"
166
- Requires-Dist: google-re2==1.1.20250805; extra == "frozen"
167
- Requires-Dist: googleapis-common-protos==1.71.0; extra == "frozen"
168
+ Requires-Dist: google-re2==1.1.20251105; extra == "frozen"
169
+ Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
168
170
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
169
171
  Requires-Dist: greenlet==3.2.4; extra == "frozen"
170
172
  Requires-Dist: grpcio==1.76.0; extra == "frozen"
@@ -174,7 +176,6 @@ Requires-Dist: httpcore==1.0.9; extra == "frozen"
174
176
  Requires-Dist: httpx==0.28.1; extra == "frozen"
175
177
  Requires-Dist: humanize==4.14.0; extra == "frozen"
176
178
  Requires-Dist: idna==3.11; extra == "frozen"
177
- Requires-Dist: imageio==2.37.0; extra == "frozen"
178
179
  Requires-Dist: imageio-ffmpeg==0.6.0; extra == "frozen"
179
180
  Requires-Dist: importlib_metadata==8.7.0; extra == "frozen"
180
181
  Requires-Dist: inflection==0.5.1; extra == "frozen"
@@ -184,7 +185,7 @@ Requires-Dist: jsonschema==4.25.1; extra == "frozen"
184
185
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
185
186
  Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
186
187
  Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
187
- Requires-Dist: kombu==5.6.0; extra == "frozen"
188
+ Requires-Dist: kombu==5.6.1; extra == "frozen"
188
189
  Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
189
190
  Requires-Dist: lazy_loader==0.4; extra == "frozen"
190
191
  Requires-Dist: limits==5.6.0; extra == "frozen"
@@ -205,7 +206,7 @@ Requires-Dist: more-itertools==10.8.0; extra == "frozen"
205
206
  Requires-Dist: moviepy==2.1.2; extra == "frozen"
206
207
  Requires-Dist: multidict==6.7.0; extra == "frozen"
207
208
  Requires-Dist: nbformat==5.10.4; extra == "frozen"
208
- Requires-Dist: networkx==3.5; extra == "frozen"
209
+ Requires-Dist: networkx==3.6; extra == "frozen"
209
210
  Requires-Dist: numba==0.61.2; extra == "frozen"
210
211
  Requires-Dist: numpy==2.2.5; extra == "frozen"
211
212
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
@@ -251,13 +252,13 @@ Requires-Dist: proglog==0.1.12; extra == "frozen"
251
252
  Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
252
253
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
253
254
  Requires-Dist: propcache==0.4.1; extra == "frozen"
254
- Requires-Dist: protobuf==6.33.0; extra == "frozen"
255
+ Requires-Dist: protobuf==6.33.1; extra == "frozen"
255
256
  Requires-Dist: psutil==7.1.3; extra == "frozen"
256
257
  Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
257
258
  Requires-Dist: pycparser==2.23; extra == "frozen"
258
- Requires-Dist: pydantic==2.12.3; extra == "frozen"
259
- Requires-Dist: pydantic-settings==2.11.0; extra == "frozen"
260
- Requires-Dist: pydantic_core==2.41.4; extra == "frozen"
259
+ Requires-Dist: pydantic==2.12.5; extra == "frozen"
260
+ Requires-Dist: pydantic-settings==2.12.0; extra == "frozen"
261
+ Requires-Dist: pydantic_core==2.41.5; extra == "frozen"
261
262
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
262
263
  Requires-Dist: pyparsing==3.2.5; extra == "frozen"
263
264
  Requires-Dist: python-daemon==3.1.2; extra == "frozen"
@@ -273,17 +274,16 @@ Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
273
274
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
274
275
  Requires-Dist: rich==13.9.4; extra == "frozen"
275
276
  Requires-Dist: rich-argparse==1.7.2; extra == "frozen"
276
- Requires-Dist: rpds-py==0.28.0; extra == "frozen"
277
- Requires-Dist: s3transfer==0.14.0; extra == "frozen"
277
+ Requires-Dist: rpds-py==0.30.0; extra == "frozen"
278
+ Requires-Dist: s3transfer==0.16.0; extra == "frozen"
278
279
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
279
280
  Requires-Dist: scipy==1.15.3; extra == "frozen"
280
281
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
281
282
  Requires-Dist: setproctitle==1.3.7; extra == "frozen"
282
283
  Requires-Dist: six==1.17.0; extra == "frozen"
283
- Requires-Dist: sniffio==1.3.1; extra == "frozen"
284
284
  Requires-Dist: solar-wavelength-calibration==1.0.1; extra == "frozen"
285
285
  Requires-Dist: sqids==0.5.1; extra == "frozen"
286
- Requires-Dist: sqlparse==0.5.3; extra == "frozen"
286
+ Requires-Dist: sqlparse==0.5.4; extra == "frozen"
287
287
  Requires-Dist: sunpy==6.1.1; extra == "frozen"
288
288
  Requires-Dist: tabulate==0.9.0; extra == "frozen"
289
289
  Requires-Dist: talus==1.3.4; extra == "frozen"
@@ -297,16 +297,17 @@ Requires-Dist: traitlets==5.14.3; extra == "frozen"
297
297
  Requires-Dist: typing-inspection==0.4.2; extra == "frozen"
298
298
  Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
299
299
  Requires-Dist: tzdata==2025.2; extra == "frozen"
300
+ Requires-Dist: tzlocal==5.3.1; extra == "frozen"
300
301
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
301
302
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
302
- Requires-Dist: universal_pathlib==0.3.4; extra == "frozen"
303
+ Requires-Dist: universal_pathlib==0.3.6; extra == "frozen"
303
304
  Requires-Dist: urllib3==2.5.0; extra == "frozen"
304
305
  Requires-Dist: vine==5.1.0; extra == "frozen"
305
306
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
306
307
  Requires-Dist: wcwidth==0.2.14; extra == "frozen"
307
308
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
308
309
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
309
- Requires-Dist: yamale==6.0.0; extra == "frozen"
310
+ Requires-Dist: yamale==6.1.0; extra == "frozen"
310
311
  Requires-Dist: yarl==1.22.0; extra == "frozen"
311
312
  Requires-Dist: zipp==3.23.0; extra == "frozen"
312
313
 
@@ -5,16 +5,17 @@ dkist_processing_dlnirsp/dev_scripts/__init__.py,sha256=tITkbcFg1a-24sdFaWK8OyLr
5
5
  dkist_processing_dlnirsp/dev_scripts/test_slitbeam_group_assignment.py,sha256=ac-8G-P2L_xW6m3tOooFlHs1N5_C6F_7k2VAU2a9_1A,4171
6
6
  dkist_processing_dlnirsp/models/__init__.py,sha256=ItaZgbjndT5uwEv2YDQZCVAHGbiB_sjzkX8MMbIgcSo,45
7
7
  dkist_processing_dlnirsp/models/constants.py,sha256=0TV_K6WbvUlDQdNRxx_qblQ_dwN7RGU7ng2iDOBQedo,6386
8
+ dkist_processing_dlnirsp/models/fits_access.py,sha256=iXaAxey-apXzj68b33-YLk7O7o0GtKAiJ_0JLoc6VOc,963
8
9
  dkist_processing_dlnirsp/models/parameters.py,sha256=PsaZSNE4Uyov1xGMqRqh6kb5F8NnDDm3QRHkoiDAsYY,15812
9
10
  dkist_processing_dlnirsp/models/tags.py,sha256=xD_XaCjMXmd70P0FoHy92XSdlabIk07RGVEyFpXpGfM,5791
10
11
  dkist_processing_dlnirsp/models/task_name.py,sha256=LmEoI_h4UecvIMGcO5U8mGTqfToPjABuFbsYkC_rZyw,506
11
12
  dkist_processing_dlnirsp/parsers/__init__.py,sha256=O6KcssCD39an60pqLISt1aHQ4u5ADg0TMNw1dB694Ug,81
12
- dkist_processing_dlnirsp/parsers/dlnirsp_l0_fits_access.py,sha256=l9ftyYvH5oi-WIVTtkD8jua87Cyc2Li5N6hoG-Paf8g,3561
13
+ dkist_processing_dlnirsp/parsers/dlnirsp_l0_fits_access.py,sha256=ziUeSWPOiFV0HdkCCfFZGPOZB-PB1OhK2qjYbVdsAb4,4314
13
14
  dkist_processing_dlnirsp/parsers/dlnirsp_l1_fits_acess.py,sha256=K-9HRVZ02IUl0wRnhlTMnwSikTt7vYi_zSWYs0V_6-Y,878
14
15
  dkist_processing_dlnirsp/parsers/mosaic.py,sha256=0z0sTbDQFhg2hyCp6hSKFpuaS-rOSUBvuBOT6mSSadA,31061
15
- dkist_processing_dlnirsp/parsers/task.py,sha256=3s5aWiNJ5gYZQ001CduDWSivtvrvrBN16EHnS6m2iI4,1768
16
- dkist_processing_dlnirsp/parsers/time.py,sha256=KFDHIX5YN3ToA9jxT-u_qqJiZDtcEGEyA9lUKCx4Gcs,1995
17
- dkist_processing_dlnirsp/parsers/wavelength.py,sha256=FPpvFSBTy3OxjUXJhjRirR_sINbgvysMUmNKvvfi0PE,860
16
+ dkist_processing_dlnirsp/parsers/task.py,sha256=9_JzhqfU9os-6uUpn1FlNd2d1yWfD0dB4u0H0OruTbs,1619
17
+ dkist_processing_dlnirsp/parsers/time.py,sha256=DsnGxT4coH6FjiHsLr5gimW8lGExE5y_E6zzUH89HMM,2072
18
+ dkist_processing_dlnirsp/parsers/wavelength.py,sha256=CHZDFqOpzErhaR0MSbzQ6NiagdmkVkZ-6HWRERH5TNY,972
18
19
  dkist_processing_dlnirsp/parsers/wcs_corrections.py,sha256=yeTLowmtAIs5sjNStIKmBTZUxttOtldJSeW_adsXFYQ,1786
19
20
  dkist_processing_dlnirsp/tasks/__init__.py,sha256=6N5xdCM3FeTpzmBUgUnJ5mKF2N3vBfcj-SNqVQ9ZHiw,996
20
21
  dkist_processing_dlnirsp/tasks/assemble_movie.py,sha256=BxUO7_Zj_QGLXqNpp87bLawyLo4G0I0DTLZPMXpi5Mo,5539
@@ -26,19 +27,19 @@ dkist_processing_dlnirsp/tasks/ifu_drift.py,sha256=JeFgl6uk6lYU4jJ-gBYtRESyUa9mb
26
27
  dkist_processing_dlnirsp/tasks/instrument_polarization.py,sha256=G79qXg1080zsd8ZwwYSSupUGWPRNBevyag49H32gh60,28201
27
28
  dkist_processing_dlnirsp/tasks/l1_output_data.py,sha256=Psta0476jih-cfmpdnzmquys030sW4f4VX6ksAb-g1o,465
28
29
  dkist_processing_dlnirsp/tasks/lamp.py,sha256=twoMHMnE2jm2OYxkeHFcjqcyQYVtEjSU2_z2mmn3Ybs,5390
29
- dkist_processing_dlnirsp/tasks/linearity_correction.py,sha256=fz16nK5q7isKz9l7_AFeDkMTaX08omlusKoIDS8wj5k,21107
30
+ dkist_processing_dlnirsp/tasks/linearity_correction.py,sha256=dYiGcBzKF0Lr_sTdwQ2OUguYgm00ky5oJ3KV4mJo6UI,22633
30
31
  dkist_processing_dlnirsp/tasks/make_movie_frames.py,sha256=zxyAWNnPFbG7jpUEe3ekRyJGjk706T9a-yiA3eoWi5M,6290
31
- dkist_processing_dlnirsp/tasks/parse.py,sha256=-v7pkkxaAjSMxTXQCHTU-M6P9ODZmJG73TstQMicJHk,10465
32
+ dkist_processing_dlnirsp/tasks/parse.py,sha256=ZtqM6dyxxnnbVTAun040EuxfQZEQcnkXzZffXSBTYkk,10919
32
33
  dkist_processing_dlnirsp/tasks/quality_metrics.py,sha256=1ScLAinv3WG-0M7u_26gnogbJ_D84K9CP7eRvEuwb9E,7346
33
- dkist_processing_dlnirsp/tasks/science.py,sha256=JGBmJGePGGowOzN2N57TOdxCt4zALLn5mNi1v7aor6I,35513
34
+ dkist_processing_dlnirsp/tasks/science.py,sha256=sNI4AYO10qe3JL62KWXR87MnfX9m85Jo4_PkQ0qd5TQ,35737
34
35
  dkist_processing_dlnirsp/tasks/solar.py,sha256=NyLYkRophfXaVtvnGuNEvkcE8JNcmCJVuobNYAZ7KjQ,11135
35
36
  dkist_processing_dlnirsp/tasks/wavelength_calibration.py,sha256=6jidRwMbGoZcuVbnFv3IizEFFkGxHMTI249Q8pyVIUA,17023
36
- dkist_processing_dlnirsp/tasks/write_l1.py,sha256=cm2dB4n5LjwauxUfv_jtkG8ZRZCHYE4DBZWRXQYjok4,9578
37
+ dkist_processing_dlnirsp/tasks/write_l1.py,sha256=Smd9Fzp3Kx4F3nHYJJRAXqNy9n71TsYovuvFjLcUYs4,9732
37
38
  dkist_processing_dlnirsp/tasks/mixin/__init__.py,sha256=5PMbkD6K0zTfhCxv8vg2lvJCNP81qItJ_R_7Yy3Mpwc,26
38
39
  dkist_processing_dlnirsp/tasks/mixin/corrections.py,sha256=MRZXCEc0KBE-9cQUpRP-K3ioDYRH8_ORFlJcH2SsmWA,6803
39
40
  dkist_processing_dlnirsp/tasks/mixin/group_id.py,sha256=u28XLVtvZ_lmzzaSX2SuA2MOiY69GC8AJsic2Vi2OSQ,11137
40
41
  dkist_processing_dlnirsp/tests/__init__.py,sha256=UHIAs0SglAXeB7UeDgVwo1EE9QPRq3rG3BZkiCpBq7M,42
41
- dkist_processing_dlnirsp/tests/conftest.py,sha256=o_a-tRAfgLKgD7YOLOSJ-B3nM3dagT-UV7v30XWOI8w,68406
42
+ dkist_processing_dlnirsp/tests/conftest.py,sha256=Xp02ZyHi6X3FzyY_IQOjLsH3gOA9zK7KGo9gpeeO6jw,68768
42
43
  dkist_processing_dlnirsp/tests/test_assemble_movie.py,sha256=hKAIHCRQu8fZwCuWsX_4WHFrDpC0bDQ9CCI9A5bRkqg,5665
43
44
  dkist_processing_dlnirsp/tests/test_assemble_quality.py,sha256=djZsVSuRGl3akH3LmYjWvYuNSUFFQfS5y0S3Op7lQIE,1327
44
45
  dkist_processing_dlnirsp/tests/test_bad_pixel_map.py,sha256=g5jWhVGSHMOtkcdiZ27G51ciud4ySjoDAjvMGLlgTIM,6093
@@ -46,18 +47,18 @@ dkist_processing_dlnirsp/tests/test_corrections.py,sha256=hefVNm3bgwfGQ7Wn0hi077
46
47
  dkist_processing_dlnirsp/tests/test_dark.py,sha256=qv7SvUNgafzfdyIW11I6eSFeaXjw34-9X1ipnqKE1cY,3726
47
48
  dkist_processing_dlnirsp/tests/test_dlnirsp_base.py,sha256=PCFklqGEqrgIhTYcatu7RfOxr_b_XjHotc36MRbUvnk,1853
48
49
  dkist_processing_dlnirsp/tests/test_dlnirsp_constants.py,sha256=RFNf-Hj835NlE45vygxh01kJm8YdCJJ3UUwzJRYJHE8,6411
49
- dkist_processing_dlnirsp/tests/test_dlnirsp_fits_access.py,sha256=x9TMXUSTLFkWIKrPcNLrcwkKoYRTdubGdP7FZU6Z1Jo,2855
50
+ dkist_processing_dlnirsp/tests/test_dlnirsp_fits_access.py,sha256=5C5NPOkNigoNhIFNUKyrJvyt_mRjke1tkfXQcv1cnPI,5639
50
51
  dkist_processing_dlnirsp/tests/test_geometric.py,sha256=94RDg1mGEMTibD2oPOoCKil5yUQMp_0vO4cDWzG3644,7742
51
52
  dkist_processing_dlnirsp/tests/test_group_id.py,sha256=TpNllN6OZuYF8almsayk7pRTc4J8TcLGp1SHCBG6QAU,6279
52
53
  dkist_processing_dlnirsp/tests/test_ifu_drift.py,sha256=K6ushbVQVE6AATjiP3hEgF6oyZp41SbGkI_Sa_kyrNs,9066
53
54
  dkist_processing_dlnirsp/tests/test_instrument_polarization_calibration.py,sha256=pPXjfzi3EcaawNqvXsz3OcCF1XITEJeCzQ8-iOjlm7U,23430
54
55
  dkist_processing_dlnirsp/tests/test_lamp.py,sha256=umy4ydYR5M3dqXTQP14qbamOleutyD1jSj3325aitl0,3940
55
- dkist_processing_dlnirsp/tests/test_linearity_correction.py,sha256=e0XAuUwthhDSl4V4UPd2mRwpUsX-B7kVkI3juCGP4a4,27879
56
+ dkist_processing_dlnirsp/tests/test_linearity_correction.py,sha256=JkPNtsRad2JQQ2QiJjQar9tJuCi9-ksOdEYHW_-kl58,31793
56
57
  dkist_processing_dlnirsp/tests/test_make_movie_frames.py,sha256=fR1xJEFJMK0xUu8-EyOS_6mIX_ZO2J_nM0k3ud8xtYM,3648
57
58
  dkist_processing_dlnirsp/tests/test_parameters.py,sha256=KpBeisM4BIF5Kl6ZxZqk3yCozndmLMlzNgo0ij0hmYw,10328
58
- dkist_processing_dlnirsp/tests/test_parse.py,sha256=VixU-tfpS-Y2bOddCXZ_xBfKpAm9DV9qBx6xdi2XtaA,37901
59
+ dkist_processing_dlnirsp/tests/test_parse.py,sha256=UIII4R6JruUEFIlYDRwTwiBqyf4ldYxAhCWHM-jcd6E,38005
59
60
  dkist_processing_dlnirsp/tests/test_quality.py,sha256=OBWva_E6T5RfDuo73LiTdTr7uh2FO04VpBAsSOLfjVQ,6122
60
- dkist_processing_dlnirsp/tests/test_science.py,sha256=vA7bVQWG0dxs8IuU8hEZ8KMgjtGqrxEGYPG5i47k2Og,20719
61
+ dkist_processing_dlnirsp/tests/test_science.py,sha256=1DKqKNAEZEsVCffYz_TiEc2REG7cBIfGeig1kJK4ZtE,20902
61
62
  dkist_processing_dlnirsp/tests/test_solar.py,sha256=jTNnxs5fE8R_hLvmdAU9x4RXJaSpJWGQajL7kzXTxPQ,12111
62
63
  dkist_processing_dlnirsp/tests/test_trial_create_quality_report.py,sha256=3RUOVYs5b87oHZAXcd0cH_IX9qpL9gFhlcKBRr3ThXQ,2784
63
64
  dkist_processing_dlnirsp/tests/test_wavelength_calibration.py,sha256=GFGXtl0KdClolknAwfR0aG5t-Ux5N5mynol4dKp0cn8,14830
@@ -68,8 +69,8 @@ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_linearize_only.py,sha256
68
69
  dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=ZDefUSKggIH2ebzUziQWU_A2yWeX68vjqzC11MNkzJU,19338
69
70
  dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=Nv8qi-U2mUpWRn8rfx0ckn6v9OUGbfSND-fX9WVRaU0,20102
70
71
  dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=MfCqHOO9RC24FRqGUKfPiTGUZh7rft9NklYKej-oM00,17757
71
- dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py,sha256=PukJUm83qiDnE7fcVGdbBMZN-RrkLutbB-XkOsMKMqY,11697
72
- dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_helpers.py,sha256=eZ7Z0BgLazGPPTuDpmItyY36yd8s243z4OGmJnGTxjw,21284
72
+ dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py,sha256=zEnx_mOTwF8QRM8BZ2Nn0MntfFIkrMVQZDUbmqCmDJk,12191
73
+ dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_helpers.py,sha256=5abEDqLyJ1mH6RYlV6ReHOqUkUste0vC6raENFQeDNY,21375
73
74
  dkist_processing_dlnirsp/tests/local_trial_workflows/translate_files.py,sha256=bsOqBtGE9SdOZL2ROJ-murJHjymYrE_nEPNHJgy7pDc,1882
74
75
  dkist_processing_dlnirsp/workflows/__init__.py,sha256=bDRNGCIayR8Z-dcOClvk5nTmHgKORTrZUVX9e3UpCc8,165
75
76
  dkist_processing_dlnirsp/workflows/l0_processing.py,sha256=qEBPV7xOacZTO3y4Pkjrxq1IxkOiPUPKjDHQ1xs98_M,4106
@@ -93,8 +94,8 @@ docs/science_calibration.rst,sha256=JUMeS7KyIsL9cUuy-IdV2tQ-wQ2lBx6j8u_51ThJzVg,
93
94
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
94
95
  docs/wavelength_calibration.rst,sha256=VP45e0g4r-dReQmypQVqduvezQiKwq47STlAJn0w8iQ,4095
95
96
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
96
- dkist_processing_dlnirsp-0.32.2.dist-info/METADATA,sha256=ah-VSUvrZz2t55nmak8wmM8g5tdbngYI-Kl4_DtgqhY,29311
97
- dkist_processing_dlnirsp-0.32.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
- dkist_processing_dlnirsp-0.32.2.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
99
- dkist_processing_dlnirsp-0.32.2.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
100
- dkist_processing_dlnirsp-0.32.2.dist-info/RECORD,,
97
+ dkist_processing_dlnirsp-0.32.4.dist-info/METADATA,sha256=GK82oJCthMugdfm892PLdLdJv9z3qKqzbA1QBWfT0EI,29368
98
+ dkist_processing_dlnirsp-0.32.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
99
+ dkist_processing_dlnirsp-0.32.4.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
100
+ dkist_processing_dlnirsp-0.32.4.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
101
+ dkist_processing_dlnirsp-0.32.4.dist-info/RECORD,,