dkist-processing-dlnirsp 0.32.1rc3__py3-none-any.whl → 0.32.3__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.
@@ -0,0 +1,32 @@
1
+ """DLNIRSP control of FITS key names and values."""
2
+
3
+ from enum import StrEnum
4
+
5
+ from dkist_processing_common.models.fits_access import MetadataKey
6
+
7
+
8
+ class DlnirspMetadataKey(StrEnum):
9
+ """Controlled list of names for FITS metadata header keys."""
10
+
11
+ crpix_1 = "CRPIX1"
12
+ crpix_2 = "CRPIX2"
13
+ modulator_spin_mode = "DLMOD"
14
+ camera_readout_mode = "DLCAMSMD"
15
+ num_frames_in_ramp = "DLCAMNS"
16
+ current_frame_in_ramp = "DLCAMCUR"
17
+ arm_id = "DLARMID"
18
+ camera_sample_sequence = "DLCAMSSQ"
19
+ polarimeter_mode = "DLPOLMD"
20
+ number_of_modulator_states = "DLNUMST"
21
+ modulator_state = "DLSTNUM"
22
+ num_mosaic_repeats = "DLMOSNRP"
23
+ mosaic_num = "DLCURMOS"
24
+ num_X_tiles = "DLNSSTPX"
25
+ X_tile_num = "DLCSTPX"
26
+ num_Y_tiles = "DLNSSTPY"
27
+ Y_tile_num = "DLCSTPY"
28
+ num_dither_steps = "DLDMODE"
29
+ dither_step = "DLCURSTP"
30
+ arm_position_mm = "DLARMPS"
31
+ grating_position_deg = "DLGRTAN"
32
+ grating_constant_inverse_mm = "DLGRTCN"
@@ -3,6 +3,8 @@
3
3
  from astropy.io import fits
4
4
  from dkist_processing_common.parsers.l0_fits_access import L0FitsAccess
5
5
 
6
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
7
+
6
8
 
7
9
  class DlnirspRampFitsAccess(L0FitsAccess):
8
10
  """
@@ -30,12 +32,18 @@ class DlnirspRampFitsAccess(L0FitsAccess):
30
32
  ):
31
33
  super().__init__(hdu=hdu, name=name, auto_squeeze=auto_squeeze)
32
34
 
33
- self.modulator_spin_mode: str = self.header["DLMOD"]
34
- self.camera_readout_mode: str = self.header.get("DLCAMSMD", "DEFAULT_VISIBLE_CAMERA")
35
- self.num_frames_in_ramp: int = self.header.get("DLCAMNS", -99)
36
- self.current_frame_in_ramp: int = self.header.get("DLCAMCUR", -88)
37
- self.arm_id: str = self.header["DLARMID"]
38
- self.camera_sample_sequence: str = self.header.get("DLCAMSSQ", "VISIBLE_CAMERA_SEQUENCE")
35
+ self.modulator_spin_mode: str = self.header[DlnirspMetadataKey.modulator_spin_mode]
36
+ self.camera_readout_mode: str = self.header.get(
37
+ DlnirspMetadataKey.camera_readout_mode, "DEFAULT_VISIBLE_CAMERA"
38
+ )
39
+ self.num_frames_in_ramp: int = self.header.get(DlnirspMetadataKey.num_frames_in_ramp, -99)
40
+ self.current_frame_in_ramp: int = self.header.get(
41
+ DlnirspMetadataKey.current_frame_in_ramp, -88
42
+ )
43
+ self.arm_id: str = self.header[DlnirspMetadataKey.arm_id]
44
+ self.camera_sample_sequence: str = self.header.get(
45
+ DlnirspMetadataKey.camera_sample_sequence, "VISIBLE_CAMERA_SEQUENCE"
46
+ )
39
47
 
40
48
 
41
49
  class DlnirspL0FitsAccess(L0FitsAccess):
@@ -64,24 +72,28 @@ class DlnirspL0FitsAccess(L0FitsAccess):
64
72
  ):
65
73
  super().__init__(hdu=hdu, name=name, auto_squeeze=auto_squeeze)
66
74
 
67
- self.crpix_1: float = self.header["CRPIX1"]
68
- self.crpix_2: float = self.header["CRPIX2"]
69
- self.arm_id: str = self.header["DLARMID"]
70
- self.polarimeter_mode: str = self.header["DLPOLMD"]
71
- self.number_of_modulator_states: int = self.header["DLNUMST"]
72
- self.modulator_state: int = self.header["DLSTNUM"]
73
- self.num_mosaic_repeats: int = self.header["DLMOSNRP"]
74
- self.mosaic_num: int = self.header["DLCURMOS"]
75
- self.num_X_tiles: int = self.header["DLNSSTPX"]
76
- self.X_tile_num: int = self.header["DLCSTPX"]
77
- self.num_Y_tiles: int = self.header["DLNSSTPY"]
78
- self.Y_tile_num: int = self.header["DLCSTPY"]
75
+ self.crpix_1: float = self.header[DlnirspMetadataKey.crpix_1]
76
+ self.crpix_2: float = self.header[DlnirspMetadataKey.crpix_2]
77
+ self.arm_id: str = self.header[DlnirspMetadataKey.arm_id]
78
+ self.polarimeter_mode: str = self.header[DlnirspMetadataKey.polarimeter_mode]
79
+ self.number_of_modulator_states: int = self.header[
80
+ DlnirspMetadataKey.number_of_modulator_states
81
+ ]
82
+ self.modulator_state: int = self.header[DlnirspMetadataKey.modulator_state]
83
+ self.num_mosaic_repeats: int = self.header[DlnirspMetadataKey.num_mosaic_repeats]
84
+ self.mosaic_num: int = self.header[DlnirspMetadataKey.mosaic_num]
85
+ self.num_X_tiles: int = self.header[DlnirspMetadataKey.num_X_tiles]
86
+ self.X_tile_num: int = self.header[DlnirspMetadataKey.X_tile_num]
87
+ self.num_Y_tiles: int = self.header[DlnirspMetadataKey.num_Y_tiles]
88
+ self.Y_tile_num: int = self.header[DlnirspMetadataKey.Y_tile_num]
79
89
  # DLDMODE is a bool in the header; the number of dither steps is either 1 or 2, corresponding to dither
80
90
  # mode being True or False, respectively
81
- self.num_dither_steps: int = int(self.header["DLDMODE"]) + 1
91
+ self.num_dither_steps: int = int(self.header[DlnirspMetadataKey.num_dither_steps]) + 1
82
92
  # Same with DLCURSTP. We'll index the dither loop at 0 so `False` is the first step and `True` is the second
83
93
  # Use `get` because this key only exists if DLDMODE is `True`
84
- self.dither_step: int = int(self.header.get("DLCURSTP", False))
85
- self.arm_position_mm: float = self.header["DLARMPS"]
86
- self.grating_position_deg: float = self.header["DLGRTAN"]
87
- self.grating_constant_inverse_mm: float = self.header["DLGRTCN"]
94
+ self.dither_step: int = int(self.header.get(DlnirspMetadataKey.dither_step, False))
95
+ self.arm_position_mm: float = self.header[DlnirspMetadataKey.arm_position_mm]
96
+ self.grating_position_deg: float = self.header[DlnirspMetadataKey.grating_position_deg]
97
+ self.grating_constant_inverse_mm: float = self.header[
98
+ DlnirspMetadataKey.grating_constant_inverse_mm
99
+ ]
@@ -1,15 +1,11 @@
1
1
  """Custom parsers to identify task sub-groupings not captured by a single header key."""
2
2
 
3
- from typing import Callable
4
-
5
- from dkist_processing_common.models.flower_pot import SpilledDirt
3
+ from dkist_processing_common.models.fits_access import MetadataKey
6
4
  from dkist_processing_common.models.tags import StemName
7
5
  from dkist_processing_common.models.task_name import TaskName
8
- from dkist_processing_common.parsers.near_bud import NearFloatBud
9
6
  from dkist_processing_common.parsers.single_value_single_key_flower import (
10
7
  SingleValueSingleKeyFlower,
11
8
  )
12
- from dkist_processing_common.parsers.unique_bud import UniqueBud
13
9
 
14
10
  from dkist_processing_dlnirsp.parsers.dlnirsp_l0_fits_access import DlnirspL0FitsAccess
15
11
 
@@ -41,7 +37,7 @@ class DlnirspTaskTypeFlower(SingleValueSingleKeyFlower):
41
37
  """Flower to find the DLNIRSP task type."""
42
38
 
43
39
  def __init__(self):
44
- super().__init__(tag_stem_name=StemName.task.value, metadata_key="ip_task_type")
40
+ super().__init__(tag_stem_name=StemName.task.value, metadata_key=MetadataKey.ip_task_type)
45
41
 
46
42
  def setter(self, fits_obj: DlnirspL0FitsAccess):
47
43
  """
@@ -2,6 +2,7 @@
2
2
 
3
3
  from typing import Hashable
4
4
 
5
+ from dkist_processing_common.models.fits_access import MetadataKey
5
6
  from dkist_processing_common.models.flower_pot import Stem
6
7
  from dkist_processing_common.models.task_name import TaskName
7
8
  from dkist_processing_common.parsers.unique_bud import TaskUniqueBud
@@ -17,7 +18,7 @@ class DLnirspSolarGainIpStartTimeBud(TaskUniqueBud):
17
18
  def __init__(self):
18
19
  super().__init__(
19
20
  constant_name=DlnirspBudName.solar_gain_ip_start_time.value,
20
- metadata_key="ip_start_time",
21
+ metadata_key=MetadataKey.ip_start_time,
21
22
  ip_task_types=TaskName.solar_gain.value,
22
23
  task_type_parsing_function=parse_header_ip_task,
23
24
  )
@@ -1,5 +1,6 @@
1
1
  """Bud to get the wavelength."""
2
2
 
3
+ from dkist_processing_common.models.fits_access import MetadataKey
3
4
  from dkist_processing_common.models.flower_pot import SpilledDirt
4
5
  from dkist_processing_common.parsers.unique_bud import UniqueBud
5
6
 
@@ -11,7 +12,10 @@ class ObserveWavelengthBud(UniqueBud):
11
12
  """Bud to find the wavelength."""
12
13
 
13
14
  def __init__(self):
14
- super().__init__(constant_name=DlnirspBudName.wavelength.value, metadata_key="wavelength")
15
+ super().__init__(
16
+ constant_name=DlnirspBudName.wavelength.value,
17
+ metadata_key=MetadataKey.wavelength,
18
+ )
15
19
 
16
20
  def setter(self, fits_obj: DlnirspL0FitsAccess):
17
21
  """
@@ -2,6 +2,7 @@
2
2
 
3
3
  from typing import TypeVar
4
4
 
5
+ from dkist_processing_common.models.fits_access import MetadataKey
5
6
  from dkist_processing_common.models.flower_pot import Stem
6
7
  from dkist_processing_common.models.task_name import TaskName
7
8
  from dkist_processing_common.parsers.cs_step import CSStepFlower
@@ -22,6 +23,7 @@ from dkist_processing_common.tasks import default_constant_bud_factory
22
23
  from dkist_processing_common.tasks import default_tag_flower_factory
23
24
 
24
25
  from dkist_processing_dlnirsp.models.constants import DlnirspBudName
26
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
25
27
  from dkist_processing_dlnirsp.models.parameters import DlnirspParsingParameters
26
28
  from dkist_processing_dlnirsp.models.tags import DlnirspStemName
27
29
  from dkist_processing_dlnirsp.models.tags import DlnirspTag
@@ -72,7 +74,9 @@ class ParseL0DlnirspRampData(ParseDataBase):
72
74
  # Time Obs is the unique identifier for each ramp in the data set
73
75
  DlnirspTimeObsBud(),
74
76
  # This is used to determine whether we need to do any linearity correction at all.
75
- UniqueBud(constant_name=DlnirspBudName.arm_id.value, metadata_key="arm_id"),
77
+ UniqueBud(
78
+ constant_name=DlnirspBudName.arm_id.value, metadata_key=DlnirspMetadataKey.arm_id
79
+ ),
76
80
  ]
77
81
 
78
82
  @property
@@ -81,12 +85,12 @@ class ParseL0DlnirspRampData(ParseDataBase):
81
85
  return [
82
86
  SingleValueSingleKeyFlower(
83
87
  tag_stem_name=DlnirspStemName.current_frame_in_ramp.value,
84
- metadata_key="current_frame_in_ramp",
88
+ metadata_key=DlnirspMetadataKey.current_frame_in_ramp,
85
89
  ),
86
90
  # time_obs is a unique identifier for all raw frames in a single ramp
87
91
  SingleValueSingleKeyFlower(
88
92
  tag_stem_name=DlnirspStemName.time_obs.value,
89
- metadata_key="time_obs",
93
+ metadata_key=MetadataKey.time_obs,
90
94
  ),
91
95
  ]
92
96
 
@@ -144,12 +148,13 @@ class ParseL0DlnirspLinearizedData(ParseDataBase):
144
148
  DLnirspSolarGainIpStartTimeBud(),
145
149
  NumCSStepBud(max_cs_step_time_sec=self.parameters.max_cs_step_time_sec),
146
150
  UniqueBud(
147
- constant_name=DlnirspBudName.polarimeter_mode.value, metadata_key="polarimeter_mode"
151
+ constant_name=DlnirspBudName.polarimeter_mode.value,
152
+ metadata_key=DlnirspMetadataKey.polarimeter_mode,
148
153
  ),
149
154
  RetarderNameBud(),
150
155
  UniqueBud(
151
156
  constant_name=DlnirspBudName.num_modstates.value,
152
- metadata_key="number_of_modulator_states",
157
+ metadata_key=DlnirspMetadataKey.number_of_modulator_states,
153
158
  ),
154
159
  NumMosaicRepeatsBud(
155
160
  crpix_correction_method=self.parameters.wcs_crpix_correction_method,
@@ -189,20 +194,20 @@ class ParseL0DlnirspLinearizedData(ParseDataBase):
189
194
  ),
190
195
  TaskNearFloatBud(
191
196
  constant_name=DlnirspBudName.arm_position_mm.value,
192
- metadata_key="arm_position_mm",
197
+ metadata_key=DlnirspMetadataKey.arm_position_mm,
193
198
  ip_task_types=[TaskName.solar_gain.value, TaskName.observe.value],
194
199
  tolerance=0.01,
195
200
  task_type_parsing_function=parse_header_ip_task,
196
201
  ),
197
202
  TaskUniqueBud(
198
203
  constant_name=DlnirspBudName.grating_constant_inverse_mm.value,
199
- metadata_key="grating_constant_inverse_mm",
204
+ metadata_key=DlnirspMetadataKey.grating_constant_inverse_mm,
200
205
  ip_task_types=[TaskName.solar_gain.value, TaskName.observe.value],
201
206
  task_type_parsing_function=parse_header_ip_task,
202
207
  ),
203
208
  TaskNearFloatBud(
204
209
  constant_name=DlnirspBudName.grating_position_deg.value,
205
- metadata_key="grating_position_deg",
210
+ metadata_key=DlnirspMetadataKey.grating_position_deg,
206
211
  ip_task_types=[TaskName.solar_gain.value, TaskName.observe.value],
207
212
  tolerance=0.01,
208
213
  task_type_parsing_function=parse_header_ip_task,
@@ -216,14 +221,17 @@ class ParseL0DlnirspLinearizedData(ParseDataBase):
216
221
  DlnirspTaskTypeFlower(),
217
222
  PolcalTaskFlower(),
218
223
  SingleValueSingleKeyFlower(
219
- tag_stem_name=DlnirspStemName.arm_id.value, metadata_key="arm_id"
224
+ tag_stem_name=DlnirspStemName.arm_id.value,
225
+ metadata_key=DlnirspMetadataKey.arm_id,
220
226
  ),
221
227
  ExposureTimeFlower(),
222
228
  SingleValueSingleKeyFlower(
223
- tag_stem_name=DlnirspStemName.modstate.value, metadata_key="modulator_state"
229
+ tag_stem_name=DlnirspStemName.modstate.value,
230
+ metadata_key=DlnirspMetadataKey.modulator_state,
224
231
  ),
225
232
  SingleValueSingleKeyFlower(
226
- tag_stem_name=DlnirspStemName.mosaic_num.value, metadata_key="mosaic_num"
233
+ tag_stem_name=DlnirspStemName.mosaic_num.value,
234
+ metadata_key=DlnirspMetadataKey.mosaic_num,
227
235
  ),
228
236
  MosaicStepXFlower(
229
237
  crpix_correction_method=self.parameters.wcs_crpix_correction_method,
@@ -234,7 +242,8 @@ class ParseL0DlnirspLinearizedData(ParseDataBase):
234
242
  bin_crpix_to_multiple_of=self.parameters.parse_bin_crpix_to_multiple_of,
235
243
  ),
236
244
  SingleValueSingleKeyFlower(
237
- tag_stem_name=DlnirspStemName.dither_step.value, metadata_key="dither_step"
245
+ tag_stem_name=DlnirspStemName.dither_step.value,
246
+ metadata_key=DlnirspMetadataKey.dither_step,
238
247
  ),
239
248
  CSStepFlower(max_cs_step_time_sec=self.parameters.max_cs_step_time_sec),
240
249
  ]
@@ -18,6 +18,7 @@ from dkist_processing_common.codecs.fits import fits_access_decoder
18
18
  from dkist_processing_common.codecs.fits import fits_array_decoder
19
19
  from dkist_processing_common.codecs.fits import fits_array_encoder
20
20
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
21
+ from dkist_processing_common.models.fits_access import MetadataKey
21
22
  from dkist_processing_common.models.tags import EXP_TIME_ROUND_DIGITS
22
23
  from dkist_processing_common.models.task_name import TaskName
23
24
  from dkist_processing_common.tasks.mixin.quality import QualityMixin
@@ -29,6 +30,7 @@ from dkist_processing_pac.optics.telescope import Telescope
29
30
  from dkist_service_configuration.logging import logger
30
31
  from scipy.spatial import Delaunay
31
32
 
33
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
32
34
  from dkist_processing_dlnirsp.models.tags import DlnirspTag
33
35
  from dkist_processing_dlnirsp.parsers.dlnirsp_l0_fits_access import DlnirspL0FitsAccess
34
36
  from dkist_processing_dlnirsp.parsers.wcs_corrections import correct_crpix_values
@@ -738,7 +740,7 @@ class ScienceCalibration(
738
740
  date_end = (Time(sorted_obj_list[-1].time_obs) + exp_time).isot
739
741
 
740
742
  header = sorted_obj_list[0].header
741
- header["DATE-BEG"] = date_beg
743
+ header[MetadataKey.time_obs] = date_beg
742
744
  header["DATE-END"] = date_end
743
745
 
744
746
  return header
@@ -773,13 +775,13 @@ class ScienceCalibration(
773
775
 
774
776
  crpix_correction_method = self.parameters.wcs_crpix_correction_method
775
777
  cached_info_logger(f"Applying CRPIX correction method '{crpix_correction_method}'")
776
- OG_crpix1 = header["CRPIX1"]
777
- OG_crpix2 = header["CRPIX2"]
778
+ OG_crpix1 = header[DlnirspMetadataKey.crpix_1]
779
+ OG_crpix2 = header[DlnirspMetadataKey.crpix_2]
778
780
 
779
781
  new_crpix1, new_crpix2 = correct_crpix_values(OG_crpix1, OG_crpix2, crpix_correction_method)
780
782
 
781
- header["CRPIX1"] = new_crpix1
782
- header["CRPIX2"] = new_crpix2
783
+ header[DlnirspMetadataKey.crpix_1] = new_crpix1
784
+ header[DlnirspMetadataKey.crpix_2] = new_crpix2
783
785
 
784
786
  return header
785
787
 
@@ -12,6 +12,7 @@ from dkist_processing_common.tasks import WriteL1Frame
12
12
  from dkist_service_configuration.logging import logger
13
13
 
14
14
  from dkist_processing_dlnirsp.models.constants import DlnirspConstants
15
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
15
16
  from dkist_processing_dlnirsp.models.tags import DlnirspTag
16
17
 
17
18
  cached_info_logger = cache(logger.info)
@@ -83,7 +84,7 @@ class DlnirspWriteL1Frame(WriteL1Frame):
83
84
  header[f"DPNAME{axis_index}"] = "dither step"
84
85
  header[f"DWNAME{axis_index}"] = "time"
85
86
  header[f"DUNIT{axis_index}"] = "s"
86
- header[f"DINDEX{axis_index}"] = int(header["DLCURSTP"]) + 1
87
+ header[f"DINDEX{axis_index}"] = int(header[DlnirspMetadataKey.dither_step]) + 1
87
88
 
88
89
  if self.constants.correct_for_polarization:
89
90
  cached_info_logger("Polarimetric data detected")
@@ -211,7 +212,7 @@ class DlnirspWriteL1Frame(WriteL1Frame):
211
212
  tile_as_temporal_axis = False
212
213
  temporal_axis_size = num_mosaic_repeats
213
214
  pname = "mosaic repeat number"
214
- dindex = header["DLCURMOS"]
215
+ dindex = header[DlnirspMetadataKey.mosaic_num]
215
216
 
216
217
  elif num_mosaic_repeats == 1 and (
217
218
  (num_X_tiles == 1 and num_Y_tiles == 1) or (num_X_tiles > 1 and num_Y_tiles > 1)
@@ -224,14 +225,14 @@ class DlnirspWriteL1Frame(WriteL1Frame):
224
225
  tile_as_temporal_axis = True
225
226
  temporal_axis_size = num_X_tiles
226
227
  pname = "repeat number"
227
- dindex = header["DLCSTPX"]
228
+ dindex = header[DlnirspMetadataKey.X_tile_num]
228
229
 
229
230
  elif num_mosaic_repeats == 1 and num_X_tiles == 1 and num_Y_tiles > 1:
230
231
  has_temporal_axis = True
231
232
  tile_as_temporal_axis = True
232
233
  temporal_axis_size = num_Y_tiles
233
234
  pname = "repeat number"
234
- dindex = header["DLCSTPY"]
235
+ dindex = header[DlnirspMetadataKey.Y_tile_num]
235
236
 
236
237
  else:
237
238
  raise ValueError(
@@ -9,6 +9,7 @@ from dkist_processing_common.codecs.fits import fits_array_decoder
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
11
  from dkist_processing_common.models.constants import BudName
12
+ from dkist_processing_common.models.fits_access import MetadataKey
12
13
  from dkist_processing_common.models.task_name import TaskName
13
14
  from dkist_processing_common.tasks import TransferTrialData
14
15
  from dkist_processing_common.tasks import WorkflowTaskBase
@@ -17,6 +18,7 @@ from dkist_processing_math.statistics import average_numpy_arrays
17
18
  from dkist_service_configuration.logging import logger
18
19
 
19
20
  from dkist_processing_dlnirsp.models.constants import DlnirspBudName
21
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
20
22
  from dkist_processing_dlnirsp.models.tags import DlnirspTag
21
23
  from dkist_processing_dlnirsp.tasks import DlnirspWriteL1Frame
22
24
  from dkist_processing_dlnirsp.tasks.dlnirsp_base import DlnirspTaskBase
@@ -87,7 +89,7 @@ def permissive_write_l1_task(force_intensity_only: bool):
87
89
  self, header: fits.Header, stokes: Literal["I", "Q", "U", "V"]
88
90
  ) -> fits.Header:
89
91
  if force_intensity_only:
90
- header["DLPOLMD"] = "Stokes I"
92
+ header[MetadataKey.polarimeter_mode] = "Stokes I"
91
93
 
92
94
  return super().add_dataset_headers(header=header, stokes=stokes)
93
95
 
@@ -138,11 +140,11 @@ class TagPolcasAsScience(DlnirspTaskBase):
138
140
  avg_array = average_numpy_arrays(arrays=arrays)
139
141
 
140
142
  hdul = fits.HDUList([fits.PrimaryHDU(data=avg_array, header=first_header)])
141
- hdul[0].header["DLCSTPX"] = 1
142
- hdul[0].header["DLCSTPY"] = 1
143
- hdul[0].header["DLMOSNRP"] = self.constants.num_cs_steps
144
- hdul[0].header["DLCURMOS"] = cs_step
145
- hdul[0].header["XPOSURE"] = obs_exp_time
143
+ hdul[0].header[DlnirspMetadataKey.X_tile_num] = 1
144
+ hdul[0].header[DlnirspMetadataKey.Y_tile_num] = 1
145
+ hdul[0].header[DlnirspMetadataKey.num_mosaic_repeats] = self.constants.num_cs_steps
146
+ hdul[0].header[DlnirspMetadataKey.mosaic_num] = cs_step
147
+ hdul[0].header[MetadataKey.fpa_exposure_time_ms] = obs_exp_time
146
148
 
147
149
  new_tags = [
148
150
  DlnirspTag.task_observe(),
@@ -186,11 +188,11 @@ class TagSingleSolarGainAsScience(DlnirspTaskBase):
186
188
  avg_array = average_numpy_arrays(arrays=arrays)
187
189
 
188
190
  hdul = fits.HDUList([fits.PrimaryHDU(data=avg_array, header=first_header)])
189
- hdul[0].header["DLCSTPX"] = 1
190
- hdul[0].header["DLCSTPY"] = 1
191
- hdul[0].header["DLMOSNRP"] = 1
192
- hdul[0].header["DLCURMOS"] = 0
193
- hdul[0].header["DLDMODE"] = False
191
+ hdul[0].header[DlnirspMetadataKey.X_tile_num] = 1
192
+ hdul[0].header[DlnirspMetadataKey.Y_tile_num] = 1
193
+ hdul[0].header[DlnirspMetadataKey.num_mosaic_repeats] = 1
194
+ hdul[0].header[DlnirspMetadataKey.mosaic_num] = 0
195
+ hdul[0].header[DlnirspMetadataKey.num_dither_steps] = False
194
196
 
195
197
  new_tags = [
196
198
  DlnirspTag.task_observe(),
@@ -237,11 +239,11 @@ class TagModulatedSolarGainsAsScience(DlnirspTaskBase):
237
239
  avg_array = average_numpy_arrays(arrays=arrays)
238
240
 
239
241
  hdul = fits.HDUList([fits.PrimaryHDU(data=avg_array, header=first_header)])
240
- hdul[0].header["DLCSTPX"] = 1
241
- hdul[0].header["DLCSTPY"] = 1
242
- hdul[0].header["DLMOSNRP"] = 1
243
- hdul[0].header["DLCURMOS"] = 0
244
- hdul[0].header["DLDMODE"] = False
242
+ hdul[0].header[DlnirspMetadataKey.X_tile_num] = 1
243
+ hdul[0].header[DlnirspMetadataKey.Y_tile_num] = 1
244
+ hdul[0].header[DlnirspMetadataKey.num_mosaic_repeats] = 1
245
+ hdul[0].header[DlnirspMetadataKey.mosaic_num] = 0
246
+ hdul[0].header[DlnirspMetadataKey.num_dither_steps] = False
245
247
 
246
248
  new_tags = [
247
249
  DlnirspTag.task_observe(),
@@ -20,6 +20,7 @@ from loguru import logger
20
20
 
21
21
  from dkist_processing_dlnirsp.models.constants import DlnirspBudName
22
22
  from dkist_processing_dlnirsp.models.constants import DlnirspConstants
23
+ from dkist_processing_dlnirsp.models.fits_access import DlnirspMetadataKey
23
24
  from dkist_processing_dlnirsp.models.tags import DlnirspTag
24
25
  from dkist_processing_dlnirsp.models.task_name import DlnirspTaskName
25
26
  from dkist_processing_dlnirsp.tasks.dlnirsp_base import DlnirspTaskBase
@@ -38,7 +39,7 @@ def get_camera_number(scratch_dir: Path, suffix: str = "FITS", data_ext: int = 1
38
39
  header_list = [fits.getheader(f, ext=data_ext) for f in file_list]
39
40
  table = Table(header_list)
40
41
 
41
- camera_IDs = np.unique(table["DLARMID"])
42
+ camera_IDs = np.unique(table[DlnirspMetadataKey.arm_id])
42
43
  if camera_IDs.size > 1:
43
44
  raise ValueError(f"Found more than one arm in scratch dir. Found {camera_IDs}")
44
45
 
@@ -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
@@ -414,8 +415,8 @@ def test_linearity_correction(
414
415
  np.testing.assert_allclose(data, expected_value, rtol=1e-13)
415
416
 
416
417
  header = fits.getheader(files[0])
417
- assert header["XPOSURE"] == expected_total_exp
418
- assert header["TEXPOSUR"] == expected_NDR_exp
418
+ assert header[MetadataKey.fpa_exposure_time_ms] == expected_total_exp
419
+ assert header[MetadataKey.sensor_readout_exposure_time_ms] == expected_NDR_exp
419
420
 
420
421
 
421
422
  def test_VIS_linearity_correction(
@@ -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
@@ -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.1rc3
3
+ Version: 0.32.3
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
@@ -13,7 +13,7 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Requires-Python: >=3.12
15
15
  Description-Content-Type: text/x-rst
16
- Requires-Dist: dkist-processing-common==11.7.0rc6
16
+ Requires-Dist: dkist-processing-common==11.8.0
17
17
  Requires-Dist: dkist-processing-math==2.2.1
18
18
  Requires-Dist: dkist-processing-pac==3.1.1
19
19
  Requires-Dist: dkist-header-validator==5.2.1
@@ -43,10 +43,10 @@ Requires-Dist: dkist-processing-dlnirsp[asdf]; extra == "test"
43
43
  Requires-Dist: dkist-processing-dlnirsp[quality]; extra == "test"
44
44
  Provides-Extra: inventory
45
45
  Requires-Dist: dkist-processing-common[inventory]; extra == "inventory"
46
- Requires-Dist: dkist-inventory==1.10.0; extra == "inventory"
46
+ Requires-Dist: dkist-inventory==1.11.1; extra == "inventory"
47
47
  Provides-Extra: asdf
48
48
  Requires-Dist: dkist-processing-common[asdf]; extra == "asdf"
49
- Requires-Dist: dkist-inventory[asdf]==1.10.0; extra == "asdf"
49
+ Requires-Dist: dkist-inventory[asdf]==1.11.1; extra == "asdf"
50
50
  Provides-Extra: quality
51
51
  Requires-Dist: dkist-quality==2.0.0; extra == "quality"
52
52
  Provides-Extra: grogu
@@ -65,7 +65,7 @@ Requires-Dist: towncrier; extra == "docs"
65
65
  Requires-Dist: dkist-sphinx-theme; extra == "docs"
66
66
  Provides-Extra: frozen
67
67
  Requires-Dist: ConfigUpdater==3.2; extra == "frozen"
68
- Requires-Dist: Deprecated==1.2.18; extra == "frozen"
68
+ Requires-Dist: Deprecated==1.3.1; extra == "frozen"
69
69
  Requires-Dist: Flask==2.2.5; extra == "frozen"
70
70
  Requires-Dist: Flask-AppBuilder==4.5.3; extra == "frozen"
71
71
  Requires-Dist: Flask-Babel==2.0.0; extra == "frozen"
@@ -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"
@@ -90,66 +91,66 @@ Requires-Dist: WTForms==3.2.1; extra == "frozen"
90
91
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
91
92
  Requires-Dist: aioftp==0.27.2; extra == "frozen"
92
93
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
93
- Requires-Dist: aiohttp==3.13.0; extra == "frozen"
94
+ Requires-Dist: aiohttp==3.13.2; extra == "frozen"
94
95
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
95
- Requires-Dist: aiosmtplib==4.0.2; extra == "frozen"
96
- Requires-Dist: alembic==1.16.5; extra == "frozen"
96
+ Requires-Dist: aiosmtplib==5.0.0; extra == "frozen"
97
+ Requires-Dist: alembic==1.17.1; extra == "frozen"
97
98
  Requires-Dist: amqp==5.3.1; extra == "frozen"
98
99
  Requires-Dist: annotated-types==0.7.0; extra == "frozen"
99
100
  Requires-Dist: anyio==4.11.0; extra == "frozen"
100
101
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
101
102
  Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
102
- Requires-Dist: apache-airflow-providers-common-compat==1.7.4; extra == "frozen"
103
- Requires-Dist: apache-airflow-providers-common-io==1.6.3; extra == "frozen"
104
- Requires-Dist: apache-airflow-providers-common-sql==1.28.1; extra == "frozen"
103
+ Requires-Dist: apache-airflow-providers-common-compat==1.8.0; extra == "frozen"
104
+ Requires-Dist: apache-airflow-providers-common-io==1.6.4; extra == "frozen"
105
+ Requires-Dist: apache-airflow-providers-common-sql==1.28.2; extra == "frozen"
105
106
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
106
107
  Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
107
- Requires-Dist: apache-airflow-providers-http==5.3.4; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-imap==3.9.2; extra == "frozen"
109
- Requires-Dist: apache-airflow-providers-postgres==6.3.0; extra == "frozen"
108
+ Requires-Dist: apache-airflow-providers-http==5.4.0; extra == "frozen"
109
+ Requires-Dist: apache-airflow-providers-imap==3.9.3; extra == "frozen"
110
+ Requires-Dist: apache-airflow-providers-postgres==6.4.0; extra == "frozen"
110
111
  Requires-Dist: apache-airflow-providers-smtp==2.3.1; extra == "frozen"
111
112
  Requires-Dist: apache-airflow-providers-sqlite==4.1.2; extra == "frozen"
112
113
  Requires-Dist: apispec==6.8.4; extra == "frozen"
113
- Requires-Dist: argcomplete==3.6.2; extra == "frozen"
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
118
  Requires-Dist: asgiref==3.10.0; extra == "frozen"
118
119
  Requires-Dist: asteval==1.0.6; extra == "frozen"
119
120
  Requires-Dist: astropy==7.0.2; extra == "frozen"
120
- Requires-Dist: astropy-iers-data==0.2025.10.6.0.35.25; extra == "frozen"
121
+ Requires-Dist: astropy-iers-data==0.2025.11.3.0.38.37; extra == "frozen"
121
122
  Requires-Dist: asyncpg==0.30.0; extra == "frozen"
122
123
  Requires-Dist: attrs==25.4.0; extra == "frozen"
123
124
  Requires-Dist: babel==2.17.0; extra == "frozen"
124
125
  Requires-Dist: billiard==4.2.2; extra == "frozen"
125
126
  Requires-Dist: blinker==1.9.0; extra == "frozen"
126
- Requires-Dist: boto3==1.40.48; extra == "frozen"
127
- Requires-Dist: botocore==1.40.48; extra == "frozen"
127
+ Requires-Dist: boto3==1.40.65; extra == "frozen"
128
+ Requires-Dist: botocore==1.40.65; extra == "frozen"
128
129
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
129
130
  Requires-Dist: celery==5.3.1; extra == "frozen"
130
131
  Requires-Dist: certifi==2025.10.5; extra == "frozen"
131
132
  Requires-Dist: cffi==2.0.0; extra == "frozen"
132
- Requires-Dist: charset-normalizer==3.4.3; extra == "frozen"
133
+ Requires-Dist: charset-normalizer==3.4.4; extra == "frozen"
133
134
  Requires-Dist: click==8.3.0; 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"
137
138
  Requires-Dist: clickclick==20.10.2; extra == "frozen"
138
139
  Requires-Dist: colorama==0.4.6; extra == "frozen"
139
- Requires-Dist: colorlog==6.9.0; extra == "frozen"
140
+ Requires-Dist: colorlog==6.10.1; extra == "frozen"
140
141
  Requires-Dist: connexion==2.14.2; extra == "frozen"
141
142
  Requires-Dist: contourpy==1.3.3; extra == "frozen"
142
143
  Requires-Dist: cron_descriptor==2.0.6; extra == "frozen"
143
144
  Requires-Dist: croniter==6.0.0; extra == "frozen"
144
- Requires-Dist: cryptography==46.0.2; extra == "frozen"
145
+ Requires-Dist: cryptography==46.0.3; extra == "frozen"
145
146
  Requires-Dist: cycler==0.12.1; extra == "frozen"
146
147
  Requires-Dist: dacite==1.9.2; extra == "frozen"
147
148
  Requires-Dist: decorator==5.2.1; extra == "frozen"
148
149
  Requires-Dist: dill==0.4.0; extra == "frozen"
149
150
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
150
- Requires-Dist: dkist-processing-common==11.7.0rc6; extra == "frozen"
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.1rc3; extra == "frozen"
153
+ Requires-Dist: dkist-processing-dlnirsp==0.32.3; 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"
@@ -161,19 +162,19 @@ Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
161
162
  Requires-Dist: flower==2.0.1; extra == "frozen"
162
163
  Requires-Dist: fonttools==4.60.1; extra == "frozen"
163
164
  Requires-Dist: frozenlist==1.8.0; extra == "frozen"
164
- Requires-Dist: fsspec==2025.9.0; extra == "frozen"
165
+ Requires-Dist: fsspec==2025.10.0; extra == "frozen"
165
166
  Requires-Dist: globus-sdk==3.65.0; extra == "frozen"
166
167
  Requires-Dist: google-re2==1.1.20250805; extra == "frozen"
167
- Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
168
+ Requires-Dist: googleapis-common-protos==1.71.0; extra == "frozen"
168
169
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
169
- Requires-Dist: grpcio==1.75.1; extra == "frozen"
170
+ Requires-Dist: greenlet==3.2.4; extra == "frozen"
171
+ Requires-Dist: grpcio==1.76.0; extra == "frozen"
170
172
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
171
173
  Requires-Dist: h11==0.16.0; extra == "frozen"
172
174
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
173
175
  Requires-Dist: httpx==0.28.1; extra == "frozen"
174
- Requires-Dist: humanize==4.13.0; extra == "frozen"
175
- Requires-Dist: idna==3.10; extra == "frozen"
176
- Requires-Dist: imageio==2.37.0; extra == "frozen"
176
+ Requires-Dist: humanize==4.14.0; extra == "frozen"
177
+ Requires-Dist: idna==3.11; extra == "frozen"
177
178
  Requires-Dist: imageio-ffmpeg==0.6.0; extra == "frozen"
178
179
  Requires-Dist: importlib_metadata==8.7.0; extra == "frozen"
179
180
  Requires-Dist: inflection==0.5.1; extra == "frozen"
@@ -181,9 +182,9 @@ Requires-Dist: itsdangerous==2.2.0; extra == "frozen"
181
182
  Requires-Dist: jmespath==1.0.1; extra == "frozen"
182
183
  Requires-Dist: jsonschema==4.25.1; extra == "frozen"
183
184
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
184
- Requires-Dist: jupyter_core==5.8.1; extra == "frozen"
185
+ Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
185
186
  Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
186
- Requires-Dist: kombu==5.5.4; extra == "frozen"
187
+ Requires-Dist: kombu==5.6.0; extra == "frozen"
187
188
  Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
188
189
  Requires-Dist: lazy_loader==0.4; extra == "frozen"
189
190
  Requires-Dist: limits==5.6.0; extra == "frozen"
@@ -208,40 +209,40 @@ Requires-Dist: networkx==3.5; extra == "frozen"
208
209
  Requires-Dist: numba==0.61.2; extra == "frozen"
209
210
  Requires-Dist: numpy==2.2.5; extra == "frozen"
210
211
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
211
- Requires-Dist: opentelemetry-api==1.37.0; extra == "frozen"
212
- Requires-Dist: opentelemetry-exporter-otlp==1.37.0; extra == "frozen"
213
- Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.37.0; extra == "frozen"
214
- Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.37.0; extra == "frozen"
215
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.37.0; extra == "frozen"
216
- Requires-Dist: opentelemetry-instrumentation==0.58b0; extra == "frozen"
217
- Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.58b0; extra == "frozen"
218
- Requires-Dist: opentelemetry-instrumentation-asgi==0.58b0; extra == "frozen"
219
- Requires-Dist: opentelemetry-instrumentation-botocore==0.58b0; extra == "frozen"
220
- Requires-Dist: opentelemetry-instrumentation-celery==0.58b0; extra == "frozen"
221
- Requires-Dist: opentelemetry-instrumentation-dbapi==0.58b0; extra == "frozen"
222
- Requires-Dist: opentelemetry-instrumentation-fastapi==0.58b0; extra == "frozen"
223
- Requires-Dist: opentelemetry-instrumentation-pika==0.58b0; extra == "frozen"
224
- Requires-Dist: opentelemetry-instrumentation-psycopg2==0.58b0; extra == "frozen"
225
- Requires-Dist: opentelemetry-instrumentation-pymongo==0.58b0; extra == "frozen"
226
- Requires-Dist: opentelemetry-instrumentation-redis==0.58b0; extra == "frozen"
227
- Requires-Dist: opentelemetry-instrumentation-requests==0.58b0; extra == "frozen"
228
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.58b0; extra == "frozen"
229
- Requires-Dist: opentelemetry-instrumentation-system-metrics==0.58b0; extra == "frozen"
212
+ Requires-Dist: opentelemetry-api==1.38.0; extra == "frozen"
213
+ Requires-Dist: opentelemetry-exporter-otlp==1.38.0; extra == "frozen"
214
+ Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.38.0; extra == "frozen"
215
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.38.0; extra == "frozen"
216
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.38.0; extra == "frozen"
217
+ Requires-Dist: opentelemetry-instrumentation==0.59b0; extra == "frozen"
218
+ Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.59b0; extra == "frozen"
219
+ Requires-Dist: opentelemetry-instrumentation-asgi==0.59b0; extra == "frozen"
220
+ Requires-Dist: opentelemetry-instrumentation-botocore==0.59b0; extra == "frozen"
221
+ Requires-Dist: opentelemetry-instrumentation-celery==0.59b0; extra == "frozen"
222
+ Requires-Dist: opentelemetry-instrumentation-dbapi==0.59b0; extra == "frozen"
223
+ Requires-Dist: opentelemetry-instrumentation-fastapi==0.59b0; extra == "frozen"
224
+ Requires-Dist: opentelemetry-instrumentation-pika==0.59b0; extra == "frozen"
225
+ Requires-Dist: opentelemetry-instrumentation-psycopg2==0.59b0; extra == "frozen"
226
+ Requires-Dist: opentelemetry-instrumentation-pymongo==0.59b0; extra == "frozen"
227
+ Requires-Dist: opentelemetry-instrumentation-redis==0.59b0; extra == "frozen"
228
+ Requires-Dist: opentelemetry-instrumentation-requests==0.59b0; extra == "frozen"
229
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.59b0; extra == "frozen"
230
+ Requires-Dist: opentelemetry-instrumentation-system-metrics==0.59b0; extra == "frozen"
230
231
  Requires-Dist: opentelemetry-propagator-aws-xray==1.0.2; extra == "frozen"
231
- Requires-Dist: opentelemetry-proto==1.37.0; extra == "frozen"
232
- Requires-Dist: opentelemetry-sdk==1.37.0; extra == "frozen"
233
- Requires-Dist: opentelemetry-semantic-conventions==0.58b0; extra == "frozen"
234
- Requires-Dist: opentelemetry-util-http==0.58b0; extra == "frozen"
232
+ Requires-Dist: opentelemetry-proto==1.38.0; extra == "frozen"
233
+ Requires-Dist: opentelemetry-sdk==1.38.0; extra == "frozen"
234
+ Requires-Dist: opentelemetry-semantic-conventions==0.59b0; extra == "frozen"
235
+ Requires-Dist: opentelemetry-util-http==0.59b0; extra == "frozen"
235
236
  Requires-Dist: ordered-set==4.1.0; extra == "frozen"
236
237
  Requires-Dist: packaging==25.0; extra == "frozen"
237
238
  Requires-Dist: pandas==2.3.3; extra == "frozen"
238
239
  Requires-Dist: parfive==2.2.0; extra == "frozen"
239
- Requires-Dist: pathlib_abc==0.5.1; extra == "frozen"
240
+ Requires-Dist: pathlib_abc==0.5.2; extra == "frozen"
240
241
  Requires-Dist: pathspec==0.12.1; extra == "frozen"
241
242
  Requires-Dist: pendulum==3.1.0; extra == "frozen"
242
243
  Requires-Dist: pika==1.3.2; extra == "frozen"
243
244
  Requires-Dist: pillow==10.4.0; extra == "frozen"
244
- Requires-Dist: pip==25.2; extra == "frozen"
245
+ Requires-Dist: pip==25.3; extra == "frozen"
245
246
  Requires-Dist: platformdirs==4.5.0; extra == "frozen"
246
247
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
247
248
  Requires-Dist: pooch==1.8.2; extra == "frozen"
@@ -250,29 +251,29 @@ Requires-Dist: proglog==0.1.12; extra == "frozen"
250
251
  Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
251
252
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
252
253
  Requires-Dist: propcache==0.4.1; extra == "frozen"
253
- Requires-Dist: protobuf==6.32.1; extra == "frozen"
254
- Requires-Dist: psutil==7.1.0; extra == "frozen"
255
- Requires-Dist: psycopg2-binary==2.9.10; extra == "frozen"
254
+ Requires-Dist: protobuf==6.33.0; extra == "frozen"
255
+ Requires-Dist: psutil==7.1.3; extra == "frozen"
256
+ Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
256
257
  Requires-Dist: pycparser==2.23; extra == "frozen"
257
- Requires-Dist: pydantic==2.12.0; extra == "frozen"
258
+ Requires-Dist: pydantic==2.12.3; extra == "frozen"
258
259
  Requires-Dist: pydantic-settings==2.11.0; extra == "frozen"
259
- Requires-Dist: pydantic_core==2.41.1; extra == "frozen"
260
+ Requires-Dist: pydantic_core==2.41.4; extra == "frozen"
260
261
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
261
262
  Requires-Dist: pyparsing==3.2.5; extra == "frozen"
262
263
  Requires-Dist: python-daemon==3.1.2; extra == "frozen"
263
264
  Requires-Dist: python-dateutil==2.9.0.post0; extra == "frozen"
264
- Requires-Dist: python-dotenv==1.1.1; extra == "frozen"
265
+ Requires-Dist: python-dotenv==1.2.1; extra == "frozen"
265
266
  Requires-Dist: python-nvd3==0.16.0; extra == "frozen"
266
267
  Requires-Dist: python-slugify==8.0.4; extra == "frozen"
267
268
  Requires-Dist: pytz==2025.2; extra == "frozen"
268
269
  Requires-Dist: redis==6.4.0; extra == "frozen"
269
- Requires-Dist: referencing==0.36.2; extra == "frozen"
270
+ Requires-Dist: referencing==0.37.0; extra == "frozen"
270
271
  Requires-Dist: requests==2.32.5; extra == "frozen"
271
272
  Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
272
273
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
273
274
  Requires-Dist: rich==13.9.4; extra == "frozen"
274
- Requires-Dist: rich-argparse==1.7.1; extra == "frozen"
275
- Requires-Dist: rpds-py==0.27.1; extra == "frozen"
275
+ Requires-Dist: rich-argparse==1.7.2; extra == "frozen"
276
+ Requires-Dist: rpds-py==0.28.0; extra == "frozen"
276
277
  Requires-Dist: s3transfer==0.14.0; extra == "frozen"
277
278
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
278
279
  Requires-Dist: scipy==1.15.3; extra == "frozen"
@@ -287,9 +288,9 @@ Requires-Dist: sunpy==6.1.1; extra == "frozen"
287
288
  Requires-Dist: tabulate==0.9.0; extra == "frozen"
288
289
  Requires-Dist: talus==1.3.4; extra == "frozen"
289
290
  Requires-Dist: tenacity==8.5.0; extra == "frozen"
290
- Requires-Dist: termcolor==3.1.0; extra == "frozen"
291
+ Requires-Dist: termcolor==3.2.0; extra == "frozen"
291
292
  Requires-Dist: text-unidecode==1.3; extra == "frozen"
292
- Requires-Dist: tifffile==2025.10.4; extra == "frozen"
293
+ Requires-Dist: tifffile==2025.10.16; extra == "frozen"
293
294
  Requires-Dist: tornado==6.5.2; extra == "frozen"
294
295
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
295
296
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
@@ -298,7 +299,7 @@ Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
298
299
  Requires-Dist: tzdata==2025.2; extra == "frozen"
299
300
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
300
301
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
301
- Requires-Dist: universal_pathlib==0.3.3; extra == "frozen"
302
+ Requires-Dist: universal_pathlib==0.3.4; extra == "frozen"
302
303
  Requires-Dist: urllib3==2.5.0; extra == "frozen"
303
304
  Requires-Dist: vine==5.1.0; extra == "frozen"
304
305
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
@@ -1,21 +1,21 @@
1
1
  changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- changelog/113.misc.rst,sha256=YoX7N7k2NKgC-P0z-Aqv8D_Z07-XxhS0lzpm-rQVCdw,91
3
2
  dkist_processing_dlnirsp/__init__.py,sha256=GQ9EBnYhkOnt-qODclAoLS_g5YVhurxfg1tjVtI9rDI,320
4
3
  dkist_processing_dlnirsp/config.py,sha256=3jM7P00T-Xlzfnvc3jwRiFtinW5GoTczQ6qNLLpwQCo,624
5
4
  dkist_processing_dlnirsp/dev_scripts/__init__.py,sha256=tITkbcFg1a-24sdFaWK8OyLrQSQk7AI6Ycs8PHHfHEM,83
6
5
  dkist_processing_dlnirsp/dev_scripts/test_slitbeam_group_assignment.py,sha256=ac-8G-P2L_xW6m3tOooFlHs1N5_C6F_7k2VAU2a9_1A,4171
7
6
  dkist_processing_dlnirsp/models/__init__.py,sha256=ItaZgbjndT5uwEv2YDQZCVAHGbiB_sjzkX8MMbIgcSo,45
8
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
9
9
  dkist_processing_dlnirsp/models/parameters.py,sha256=PsaZSNE4Uyov1xGMqRqh6kb5F8NnDDm3QRHkoiDAsYY,15812
10
10
  dkist_processing_dlnirsp/models/tags.py,sha256=xD_XaCjMXmd70P0FoHy92XSdlabIk07RGVEyFpXpGfM,5791
11
11
  dkist_processing_dlnirsp/models/task_name.py,sha256=LmEoI_h4UecvIMGcO5U8mGTqfToPjABuFbsYkC_rZyw,506
12
12
  dkist_processing_dlnirsp/parsers/__init__.py,sha256=O6KcssCD39an60pqLISt1aHQ4u5ADg0TMNw1dB694Ug,81
13
- 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
14
14
  dkist_processing_dlnirsp/parsers/dlnirsp_l1_fits_acess.py,sha256=K-9HRVZ02IUl0wRnhlTMnwSikTt7vYi_zSWYs0V_6-Y,878
15
15
  dkist_processing_dlnirsp/parsers/mosaic.py,sha256=0z0sTbDQFhg2hyCp6hSKFpuaS-rOSUBvuBOT6mSSadA,31061
16
- dkist_processing_dlnirsp/parsers/task.py,sha256=3s5aWiNJ5gYZQ001CduDWSivtvrvrBN16EHnS6m2iI4,1768
17
- dkist_processing_dlnirsp/parsers/time.py,sha256=KFDHIX5YN3ToA9jxT-u_qqJiZDtcEGEyA9lUKCx4Gcs,1995
18
- 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
19
19
  dkist_processing_dlnirsp/parsers/wcs_corrections.py,sha256=yeTLowmtAIs5sjNStIKmBTZUxttOtldJSeW_adsXFYQ,1786
20
20
  dkist_processing_dlnirsp/tasks/__init__.py,sha256=6N5xdCM3FeTpzmBUgUnJ5mKF2N3vBfcj-SNqVQ9ZHiw,996
21
21
  dkist_processing_dlnirsp/tasks/assemble_movie.py,sha256=BxUO7_Zj_QGLXqNpp87bLawyLo4G0I0DTLZPMXpi5Mo,5539
@@ -29,12 +29,12 @@ dkist_processing_dlnirsp/tasks/l1_output_data.py,sha256=Psta0476jih-cfmpdnzmquys
29
29
  dkist_processing_dlnirsp/tasks/lamp.py,sha256=twoMHMnE2jm2OYxkeHFcjqcyQYVtEjSU2_z2mmn3Ybs,5390
30
30
  dkist_processing_dlnirsp/tasks/linearity_correction.py,sha256=fz16nK5q7isKz9l7_AFeDkMTaX08omlusKoIDS8wj5k,21107
31
31
  dkist_processing_dlnirsp/tasks/make_movie_frames.py,sha256=zxyAWNnPFbG7jpUEe3ekRyJGjk706T9a-yiA3eoWi5M,6290
32
- dkist_processing_dlnirsp/tasks/parse.py,sha256=-v7pkkxaAjSMxTXQCHTU-M6P9ODZmJG73TstQMicJHk,10465
32
+ dkist_processing_dlnirsp/tasks/parse.py,sha256=ZtqM6dyxxnnbVTAun040EuxfQZEQcnkXzZffXSBTYkk,10919
33
33
  dkist_processing_dlnirsp/tasks/quality_metrics.py,sha256=1ScLAinv3WG-0M7u_26gnogbJ_D84K9CP7eRvEuwb9E,7346
34
- dkist_processing_dlnirsp/tasks/science.py,sha256=JGBmJGePGGowOzN2N57TOdxCt4zALLn5mNi1v7aor6I,35513
34
+ dkist_processing_dlnirsp/tasks/science.py,sha256=sNI4AYO10qe3JL62KWXR87MnfX9m85Jo4_PkQ0qd5TQ,35737
35
35
  dkist_processing_dlnirsp/tasks/solar.py,sha256=NyLYkRophfXaVtvnGuNEvkcE8JNcmCJVuobNYAZ7KjQ,11135
36
36
  dkist_processing_dlnirsp/tasks/wavelength_calibration.py,sha256=6jidRwMbGoZcuVbnFv3IizEFFkGxHMTI249Q8pyVIUA,17023
37
- dkist_processing_dlnirsp/tasks/write_l1.py,sha256=cm2dB4n5LjwauxUfv_jtkG8ZRZCHYE4DBZWRXQYjok4,9578
37
+ dkist_processing_dlnirsp/tasks/write_l1.py,sha256=Smd9Fzp3Kx4F3nHYJJRAXqNy9n71TsYovuvFjLcUYs4,9732
38
38
  dkist_processing_dlnirsp/tasks/mixin/__init__.py,sha256=5PMbkD6K0zTfhCxv8vg2lvJCNP81qItJ_R_7Yy3Mpwc,26
39
39
  dkist_processing_dlnirsp/tasks/mixin/corrections.py,sha256=MRZXCEc0KBE-9cQUpRP-K3ioDYRH8_ORFlJcH2SsmWA,6803
40
40
  dkist_processing_dlnirsp/tasks/mixin/group_id.py,sha256=u28XLVtvZ_lmzzaSX2SuA2MOiY69GC8AJsic2Vi2OSQ,11137
@@ -47,18 +47,18 @@ dkist_processing_dlnirsp/tests/test_corrections.py,sha256=hefVNm3bgwfGQ7Wn0hi077
47
47
  dkist_processing_dlnirsp/tests/test_dark.py,sha256=qv7SvUNgafzfdyIW11I6eSFeaXjw34-9X1ipnqKE1cY,3726
48
48
  dkist_processing_dlnirsp/tests/test_dlnirsp_base.py,sha256=PCFklqGEqrgIhTYcatu7RfOxr_b_XjHotc36MRbUvnk,1853
49
49
  dkist_processing_dlnirsp/tests/test_dlnirsp_constants.py,sha256=RFNf-Hj835NlE45vygxh01kJm8YdCJJ3UUwzJRYJHE8,6411
50
- 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
51
51
  dkist_processing_dlnirsp/tests/test_geometric.py,sha256=94RDg1mGEMTibD2oPOoCKil5yUQMp_0vO4cDWzG3644,7742
52
52
  dkist_processing_dlnirsp/tests/test_group_id.py,sha256=TpNllN6OZuYF8almsayk7pRTc4J8TcLGp1SHCBG6QAU,6279
53
53
  dkist_processing_dlnirsp/tests/test_ifu_drift.py,sha256=K6ushbVQVE6AATjiP3hEgF6oyZp41SbGkI_Sa_kyrNs,9066
54
54
  dkist_processing_dlnirsp/tests/test_instrument_polarization_calibration.py,sha256=pPXjfzi3EcaawNqvXsz3OcCF1XITEJeCzQ8-iOjlm7U,23430
55
55
  dkist_processing_dlnirsp/tests/test_lamp.py,sha256=umy4ydYR5M3dqXTQP14qbamOleutyD1jSj3325aitl0,3940
56
- dkist_processing_dlnirsp/tests/test_linearity_correction.py,sha256=e0XAuUwthhDSl4V4UPd2mRwpUsX-B7kVkI3juCGP4a4,27879
56
+ dkist_processing_dlnirsp/tests/test_linearity_correction.py,sha256=-XiA6uBxoESEFyyS538gFlAShD_NMkhshFVfpDg2xbY,28002
57
57
  dkist_processing_dlnirsp/tests/test_make_movie_frames.py,sha256=fR1xJEFJMK0xUu8-EyOS_6mIX_ZO2J_nM0k3ud8xtYM,3648
58
58
  dkist_processing_dlnirsp/tests/test_parameters.py,sha256=KpBeisM4BIF5Kl6ZxZqk3yCozndmLMlzNgo0ij0hmYw,10328
59
- dkist_processing_dlnirsp/tests/test_parse.py,sha256=VixU-tfpS-Y2bOddCXZ_xBfKpAm9DV9qBx6xdi2XtaA,37901
59
+ dkist_processing_dlnirsp/tests/test_parse.py,sha256=Zp-LWUaiIfCJi2S3GX9DrrKg7hrRU1wnNgiFlJ-CJC8,38006
60
60
  dkist_processing_dlnirsp/tests/test_quality.py,sha256=OBWva_E6T5RfDuo73LiTdTr7uh2FO04VpBAsSOLfjVQ,6122
61
- dkist_processing_dlnirsp/tests/test_science.py,sha256=vA7bVQWG0dxs8IuU8hEZ8KMgjtGqrxEGYPG5i47k2Og,20719
61
+ dkist_processing_dlnirsp/tests/test_science.py,sha256=1DKqKNAEZEsVCffYz_TiEc2REG7cBIfGeig1kJK4ZtE,20902
62
62
  dkist_processing_dlnirsp/tests/test_solar.py,sha256=jTNnxs5fE8R_hLvmdAU9x4RXJaSpJWGQajL7kzXTxPQ,12111
63
63
  dkist_processing_dlnirsp/tests/test_trial_create_quality_report.py,sha256=3RUOVYs5b87oHZAXcd0cH_IX9qpL9gFhlcKBRr3ThXQ,2784
64
64
  dkist_processing_dlnirsp/tests/test_wavelength_calibration.py,sha256=GFGXtl0KdClolknAwfR0aG5t-Ux5N5mynol4dKp0cn8,14830
@@ -69,8 +69,8 @@ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_linearize_only.py,sha256
69
69
  dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=ZDefUSKggIH2ebzUziQWU_A2yWeX68vjqzC11MNkzJU,19338
70
70
  dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=Nv8qi-U2mUpWRn8rfx0ckn6v9OUGbfSND-fX9WVRaU0,20102
71
71
  dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=MfCqHOO9RC24FRqGUKfPiTGUZh7rft9NklYKej-oM00,17757
72
- dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py,sha256=PukJUm83qiDnE7fcVGdbBMZN-RrkLutbB-XkOsMKMqY,11697
73
- 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
74
74
  dkist_processing_dlnirsp/tests/local_trial_workflows/translate_files.py,sha256=bsOqBtGE9SdOZL2ROJ-murJHjymYrE_nEPNHJgy7pDc,1882
75
75
  dkist_processing_dlnirsp/workflows/__init__.py,sha256=bDRNGCIayR8Z-dcOClvk5nTmHgKORTrZUVX9e3UpCc8,165
76
76
  dkist_processing_dlnirsp/workflows/l0_processing.py,sha256=qEBPV7xOacZTO3y4Pkjrxq1IxkOiPUPKjDHQ1xs98_M,4106
@@ -94,8 +94,8 @@ docs/science_calibration.rst,sha256=JUMeS7KyIsL9cUuy-IdV2tQ-wQ2lBx6j8u_51ThJzVg,
94
94
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
95
95
  docs/wavelength_calibration.rst,sha256=VP45e0g4r-dReQmypQVqduvezQiKwq47STlAJn0w8iQ,4095
96
96
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
97
- dkist_processing_dlnirsp-0.32.1rc3.dist-info/METADATA,sha256=Op3zDUPw8SP8PFUXvwwmRbSsUv3mRmwX59aSu5wqPQk,29271
98
- dkist_processing_dlnirsp-0.32.1rc3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
99
- dkist_processing_dlnirsp-0.32.1rc3.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
100
- dkist_processing_dlnirsp-0.32.1rc3.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
101
- dkist_processing_dlnirsp-0.32.1rc3.dist-info/RECORD,,
97
+ dkist_processing_dlnirsp-0.32.3.dist-info/METADATA,sha256=zWE2u7yocvTgqksWAwv_PMO1IfDwc3kca3TKQ79Vavo,29311
98
+ dkist_processing_dlnirsp-0.32.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
99
+ dkist_processing_dlnirsp-0.32.3.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
100
+ dkist_processing_dlnirsp-0.32.3.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
101
+ dkist_processing_dlnirsp-0.32.3.dist-info/RECORD,,
changelog/113.misc.rst DELETED
@@ -1 +0,0 @@
1
- Update `dkist-processing-common` to v11.7.0, which makes constants for the dataset extras.