dkist-processing-dlnirsp 0.31.0__py3-none-any.whl → 0.32.0__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.
@@ -70,7 +70,7 @@ class BadPixelCalibration(DlnirspTaskBase):
70
70
  logger.info("VIS data detected. Setting dynamic bad pixel map to empty.")
71
71
  dynamic_bad_pixel_map = np.zeros_like(static_bad_pixel_map)
72
72
 
73
- with self.apm_writing_step("Combine dynamic and static maps and write"):
73
+ with self.telemetry_span("Combine dynamic and static maps and write"):
74
74
  logger.info("Combining dynamic and static bad pixel maps")
75
75
  logger.info(f"Static map has {int(np.sum(static_bad_pixel_map))} bad pixels")
76
76
  logger.info(f"Dynamic map has {int(np.sum(dynamic_bad_pixel_map))} bad pixels")
@@ -99,7 +99,7 @@ class BadPixelCalibration(DlnirspTaskBase):
99
99
  (a settable pipeline parameter) are flagged as bad pixels. Prior to computing the standard deviation of the
100
100
  difference image the illuminated array mask is applied so non-illuminated regions don't impact the results.
101
101
  """
102
- with self.apm_processing_step("Smooth average lamp gain image"):
102
+ with self.telemetry_span("Smooth average lamp gain image"):
103
103
  avg_lamp_gain = next(
104
104
  self.read(
105
105
  tags=[
@@ -117,7 +117,7 @@ class BadPixelCalibration(DlnirspTaskBase):
117
117
  mode="constant",
118
118
  cval=np.nanmedian(avg_lamp_gain),
119
119
  )
120
- with self.apm_processing_step("Compute gain dynamic bad pixel map"):
120
+ with self.telemetry_span("Compute gain dynamic bad pixel map"):
121
121
  logger.info("Finding bad pixel locations in lamp gain")
122
122
  diff = smoothed_array - avg_lamp_gain
123
123
  diff[~self.group_id_illuminated_idx] = np.nan
@@ -146,7 +146,7 @@ class BadPixelCalibration(DlnirspTaskBase):
146
146
  is then subtracted from the original array. Pixels in this difference array that are deviant by a large amount
147
147
  (a settable pipeline parameter) are flagged as bad pixels.
148
148
  """
149
- with self.apm_processing_step("Compute lamp dark sigma image"):
149
+ with self.telemetry_span("Compute lamp dark sigma image"):
150
150
  smallest_lamp_exp_time = sorted(self.constants.lamp_gain_exposure_times)[0]
151
151
  logger.info(f"Using darks from exposure time = {smallest_lamp_exp_time}")
152
152
  lamp_darks = self.read(
@@ -159,7 +159,7 @@ class BadPixelCalibration(DlnirspTaskBase):
159
159
  )
160
160
  dark_sigma = stddev_numpy_arrays(lamp_darks)
161
161
 
162
- with self.apm_processing_step("Smooth dark sigma array"):
162
+ with self.telemetry_span("Smooth dark sigma array"):
163
163
  logger.info("Smoothing dark sigma array")
164
164
  smoothed_array = spnd.median_filter(
165
165
  dark_sigma,
@@ -168,7 +168,7 @@ class BadPixelCalibration(DlnirspTaskBase):
168
168
  cval=np.nanmedian(dark_sigma),
169
169
  )
170
170
 
171
- with self.apm_processing_step("Compute dark dynamic bad pixel map"):
171
+ with self.telemetry_span("Compute dark dynamic bad pixel map"):
172
172
  logger.info("Finding bad pixel locations in dark sigma")
173
173
  diff = smoothed_array - dark_sigma
174
174
 
@@ -45,7 +45,7 @@ class DarkCalibration(DlnirspTaskBase, QualityMixin):
45
45
  """
46
46
  target_exp_times = self.constants.non_dark_task_exposure_times
47
47
  logger.info(f"{target_exp_times = }")
48
- with self.apm_task_step(
48
+ with self.telemetry_span(
49
49
  f"Calculating dark frames for {self.constants.num_beams} beams and {len(target_exp_times)} exp times"
50
50
  ):
51
51
  total_dark_frames_used = 0
@@ -62,11 +62,11 @@ class DarkCalibration(DlnirspTaskBase, QualityMixin):
62
62
  total_dark_frames_used += current_exp_dark_count
63
63
  input_dark_arrays = self.read(tags=dark_tags, decoder=fits_array_decoder)
64
64
 
65
- with self.apm_processing_step(f"Calculating dark for {exp_time = }"):
65
+ with self.telemetry_span(f"Calculating dark for {exp_time = }"):
66
66
  logger.info(f"Calculating dark for {exp_time = }")
67
67
  averaged_dark_array = average_numpy_arrays(input_dark_arrays)
68
68
 
69
- with self.apm_writing_step(f"Writing dark for {exp_time = }"):
69
+ with self.telemetry_span(f"Writing dark for {exp_time = }"):
70
70
  logger.info(f"Writing dark for {exp_time = }")
71
71
  self.write(
72
72
  data=averaged_dark_array,
@@ -74,7 +74,7 @@ class DarkCalibration(DlnirspTaskBase, QualityMixin):
74
74
  encoder=fits_array_encoder,
75
75
  )
76
76
 
77
- with self.apm_processing_step("Computing and logger quality metrics"):
77
+ with self.telemetry_span("Computing and logger quality metrics"):
78
78
  no_of_raw_dark_frames: int = self.scratch.count_all(
79
79
  tags=[
80
80
  DlnirspTag.linearized_frame(),
@@ -57,25 +57,25 @@ class GeometricCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
57
57
 
58
58
  6. Write shifts, scales, and reference wavelength axis to a file
59
59
  """
60
- with self.apm_task_step("Apply dark and lamp corrections"):
60
+ with self.telemetry_span("Apply dark and lamp corrections"):
61
61
  logger.info("Computing average dark/lamp corrected gain image")
62
62
  self.compute_average_corrected_gain()
63
63
 
64
- with self.apm_task_step("Compute spectral curvature"):
64
+ with self.telemetry_span("Compute spectral curvature"):
65
65
  logger.info("Computing spectral curvature")
66
66
  shift_dict, scale_dict = self.compute_spectral_curvature_and_dispersion()
67
67
 
68
- with self.apm_task_step("Compute reference wavelength grid"):
68
+ with self.telemetry_span("Compute reference wavelength grid"):
69
69
  logger.info("Computing reference wavelength grid")
70
70
  reference_wavelength_axis = self.compute_reference_wavelength_axis(
71
71
  shift_dict, scale_dict
72
72
  )
73
73
 
74
- with self.apm_writing_step("Write geometric calibration calibration"):
74
+ with self.telemetry_span("Write geometric calibration calibration"):
75
75
  logger.info("Writing geometric calibration")
76
76
  self.write_geometric_calibration(shift_dict, scale_dict, reference_wavelength_axis)
77
77
 
78
- with self.apm_processing_step("Computing and logging quality metrics"):
78
+ with self.telemetry_span("Computing and logging quality metrics"):
79
79
  no_of_raw_solar_frames: int = self.scratch.count_all(
80
80
  tags=[DlnirspTag.linearized_frame(), DlnirspTag.task_solar_gain()],
81
81
  )
@@ -50,7 +50,7 @@ class IfuDriftCalibration(DlnirspTaskBase):
50
50
 
51
51
  4. Apply this shift to the IFU metrology files and save for use in the downstream pipeline.
52
52
  """
53
- with self.apm_processing_step("Average solar gain images"):
53
+ with self.telemetry_span("Average solar gain images"):
54
54
  logger.info("Computing average solar gain array")
55
55
  solar_gain_data = self.get_avg_solar_gain()
56
56
 
@@ -60,7 +60,7 @@ class IfuDriftCalibration(DlnirspTaskBase):
60
60
  encoder=fits_array_encoder,
61
61
  )
62
62
 
63
- with self.apm_processing_step("Compute binary arrays"):
63
+ with self.telemetry_span("Compute binary arrays"):
64
64
  logger.info("Computing solar binary image")
65
65
  solar_binary = self.compute_solar_binary(solar_gain_data)
66
66
 
@@ -79,12 +79,12 @@ class IfuDriftCalibration(DlnirspTaskBase):
79
79
  encoder=fits_array_encoder,
80
80
  )
81
81
 
82
- with self.apm_processing_step("Compute IFU drift"):
82
+ with self.telemetry_span("Compute IFU drift"):
83
83
  logger.info("Computing IFU drift amount")
84
84
  drift = self.compute_ifu_drift(solar_binary, ifu_binary)
85
85
  logger.info(f"IFU drift = {drift}")
86
86
 
87
- with self.apm_processing_step("Drift IFU metrology arrays"):
87
+ with self.telemetry_span("Drift IFU metrology arrays"):
88
88
  logger.info("Drifting IFU group ID array")
89
89
  drifted_ifu_id_array = self.apply_drift_to_array(raw_ifu_id_array, drift)
90
90
 
@@ -121,7 +121,7 @@ class IfuDriftCalibration(DlnirspTaskBase):
121
121
  )
122
122
  drifted_arrays_dict[tag] = drifted_array * beam_correction_array
123
123
 
124
- with self.apm_writing_step("Write drifted IFU metrology arrays"):
124
+ with self.telemetry_span("Write drifted IFU metrology arrays"):
125
125
  logger.info("Writing drifted IFU metrology arrays")
126
126
  self.write_drifted_metrology_arrays(drifted_arrays_dict)
127
127
 
@@ -70,21 +70,21 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
70
70
  )
71
71
  logger.info(f"{polcal_exposure_times = }")
72
72
 
73
- with self.apm_processing_step("Generate polcal DARK frame"):
73
+ with self.telemetry_span("Generate polcal DARK frame"):
74
74
  logger.info("Generating polcal dark frame")
75
75
  self.generate_polcal_dark_calibration(exp_times=polcal_exposure_times)
76
76
 
77
- with self.apm_processing_step("Generate polcal GAIN frame"):
77
+ with self.telemetry_span("Generate polcal GAIN frame"):
78
78
  logger.info("Generating polcal gain frame")
79
79
  self.generate_polcal_gain_calibration(exp_times=polcal_exposure_times)
80
80
 
81
- with self.apm_task_step("Process CS steps"):
81
+ with self.telemetry_span("Process CS steps"):
82
82
  logger.info("Processing CS steps")
83
83
  local_data_dict, global_data_dict = self.process_cs_steps()
84
84
 
85
85
  beam_results_dict = dict()
86
86
  for beam in [1, 2]:
87
- with self.apm_processing_step(f"Fit CU parameters for beam {beam}"):
87
+ with self.telemetry_span(f"Fit CU parameters for beam {beam}"):
88
88
  logger.info(f"Fitting CU parameters for {beam = }")
89
89
 
90
90
  remove_I_trend = self.parameters.pac_remove_linear_I_trend
@@ -110,7 +110,7 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
110
110
  self.save_intermediate_polcal_files(polcal_fitter=pac_fitter, beam=beam)
111
111
  beam_results_dict[beam] = pac_fitter
112
112
 
113
- with self.apm_processing_step("Resample demodulation matrices"):
113
+ with self.telemetry_span("Resample demodulation matrices"):
114
114
  raw_demod_dict = {
115
115
  beam: beam_results.demodulation_matrices
116
116
  for beam, beam_results in beam_results_dict.items()
@@ -141,7 +141,7 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
141
141
  beam_group_fit_demod_dict, full_array_shape
142
142
  )
143
143
 
144
- with self.apm_writing_step("Write full-frame demodulation matrices"):
144
+ with self.telemetry_span("Write full-frame demodulation matrices"):
145
145
  logger.info("Writing full-frame demodulation matrices")
146
146
  self.write(
147
147
  data=final_demod,
@@ -152,10 +152,10 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
152
152
  ],
153
153
  )
154
154
 
155
- with self.apm_processing_step("Computing and recording polcal quality metrics"):
155
+ with self.telemetry_span("Computing and recording polcal quality metrics"):
156
156
  self.record_polcal_quality_metrics(polcal_fitter_dict=beam_results_dict)
157
157
 
158
- with self.apm_processing_step("Computing and recording frame count quality metrics"):
158
+ with self.telemetry_span("Computing and recording frame count quality metrics"):
159
159
  no_of_raw_lamp_frames: int = self.scratch.count_all(
160
160
  tags=[DlnirspTag.linearized_frame(), DlnirspTag.task_polcal()],
161
161
  )
@@ -249,7 +249,7 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
249
249
  global_dict = {1: defaultdict(list), 2: defaultdict(list)}
250
250
  local_dict = {1: defaultdict(list), 2: defaultdict(list)}
251
251
 
252
- with self.apm_task_step("Collect dark, gain, and bad pixel arrays"):
252
+ with self.telemetry_span("Collect dark, gain, and bad pixel arrays"):
253
253
  dark_array_dict = self.collect_polcal_calibrations_by_exp_time(
254
254
  TaskName.polcal_dark.value
255
255
  )
@@ -266,7 +266,7 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
266
266
  )
267
267
  )
268
268
 
269
- with self.apm_processing_step("Correct and extract polcal data"):
269
+ with self.telemetry_span("Correct and extract polcal data"):
270
270
  for cs_step in range(self.constants.num_cs_steps):
271
271
  for modstate in range(1, self.constants.num_modstates + 1):
272
272
  log_str = f"{cs_step = }, {modstate = }"
@@ -569,7 +569,7 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
569
569
  I_cal, _ = dresser[idx]
570
570
  input_flux[idx] = I_cal.T.reshape(socc_shape)
571
571
 
572
- with self.apm_writing_step("Writing input flux"):
572
+ with self.telemetry_span("Writing input flux"):
573
573
  path = self.write(data=input_flux, tags=input_flux_tags, encoder=fits_array_encoder)
574
574
  logger.info(f"Wrote input flux with tags {input_flux_tags = } to {str(path)}")
575
575
 
@@ -581,7 +581,7 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
581
581
  DlnirspTag.beam(beam),
582
582
  DlnirspTag.task("CU_FIT_PARS"),
583
583
  ]
584
- with self.apm_writing_step("Writing CU fit parameters"):
584
+ with self.telemetry_span("Writing CU fit parameters"):
585
585
  cu_dict = defaultdict(lambda: np.zeros(fov_shape) * np.nan)
586
586
  for i in range(np.prod(fov_shape)):
587
587
  idx = np.unravel_index(i, fov_shape)
@@ -600,10 +600,10 @@ class InstrumentPolarizationCalibration(DlnirspTaskBase, QualityMixin):
600
600
  DlnirspTag.beam(beam),
601
601
  DlnirspTag.task("BEST_FIT_FLUX"),
602
602
  ]
603
- with self.apm_processing_step("Computing best-fit flux"):
603
+ with self.telemetry_span("Computing best-fit flux"):
604
604
  best_fit_flux = self.compute_best_fit_flux(polcal_fitter)
605
605
 
606
- with self.apm_writing_step("Writing best-fit flux"):
606
+ with self.telemetry_span("Writing best-fit flux"):
607
607
  path = self.write(data=best_fit_flux, tags=fit_flux_tags, encoder=fits_array_encoder)
608
608
  logger.info(f"Wrote best-fit flux with {fit_flux_tags = } to {str(path)}")
609
609
 
@@ -51,7 +51,7 @@ class LampCalibration(DlnirspTaskBase, QualityMixin):
51
51
  None
52
52
 
53
53
  """
54
- with self.apm_task_step(
54
+ with self.telemetry_span(
55
55
  f"Generate lamp gains for {len(self.constants.lamp_gain_exposure_times)} exposure times"
56
56
  ):
57
57
  all_exp_time_gains = []
@@ -86,7 +86,7 @@ class LampCalibration(DlnirspTaskBase, QualityMixin):
86
86
  )
87
87
  final_gain_array = average_numpy_arrays(all_exp_time_gains)
88
88
 
89
- with self.apm_writing_step(f"Writing lamp gain"):
89
+ with self.telemetry_span(f"Writing lamp gain"):
90
90
  logger.info(f"Writing lamp gain")
91
91
  self.write(
92
92
  data=final_gain_array,
@@ -94,7 +94,7 @@ class LampCalibration(DlnirspTaskBase, QualityMixin):
94
94
  encoder=fits_array_encoder,
95
95
  )
96
96
 
97
- with self.apm_processing_step("Computing and logging quality metrics"):
97
+ with self.telemetry_span("Computing and logging quality metrics"):
98
98
  no_of_raw_lamp_frames: int = self.scratch.count_all(
99
99
  tags=[DlnirspTag.linearized_frame(), DlnirspTag.task_lamp_gain()],
100
100
  )
@@ -45,11 +45,11 @@ class LinearityCorrection(DlnirspTaskBase):
45
45
  None
46
46
  """
47
47
  if self.constants.is_ir_data:
48
- with self.apm_task_step("Linearizing input IR frames"):
48
+ with self.telemetry_span("Linearizing input IR frames"):
49
49
  self.linearize_IR_data()
50
50
  return
51
51
 
52
- with self.apm_task_step("Tagging non-IR frames as LINEARIZED"):
52
+ with self.telemetry_span("Tagging non-IR frames as LINEARIZED"):
53
53
  self.tag_VIS_data_as_linearized()
54
54
 
55
55
  def tag_VIS_data_as_linearized(self):
@@ -106,20 +106,20 @@ class DlnirspL1QualityMetrics(DlnirspTaskBase, QualityMixin):
106
106
  stokes_params = self.constants.stokes_params[:1]
107
107
 
108
108
  for stokes in stokes_params:
109
- with self.apm_processing_step(f"Computing L1 quality metrics for Stokes {stokes}"):
110
- with self.apm_processing_step("Computing noise and sensitivity"):
109
+ with self.telemetry_span(f"Computing L1 quality metrics for Stokes {stokes}"):
110
+ with self.telemetry_span("Computing noise and sensitivity"):
111
111
  sensitivity_data, noise_data = self.compile_sensitivity_and_noise_data(
112
112
  stokes=stokes
113
113
  )
114
114
 
115
- with self.apm_writing_step(f"Writing sensitivity"):
115
+ with self.telemetry_span(f"Writing sensitivity"):
116
116
  self.quality_store_sensitivity(
117
117
  datetimes=sensitivity_data.datetimes,
118
118
  values=sensitivity_data.values,
119
119
  stokes=stokes,
120
120
  )
121
121
 
122
- with self.apm_writing_step(f"Writing noise"):
122
+ with self.telemetry_span(f"Writing noise"):
123
123
  self.quality_store_noise(
124
124
  datetimes=noise_data.datetimes, values=noise_data.values, stokes=stokes
125
125
  )
@@ -146,19 +146,19 @@ class ScienceCalibration(
146
146
  - Collect all calibration objects needed
147
147
  - Process all science frames
148
148
  """
149
- with self.apm_task_step("Load calibration objects"):
149
+ with self.telemetry_span("Load calibration objects"):
150
150
  logger.info("Loading calibration objects")
151
151
  calibrations = self.collect_calibration_objects()
152
152
 
153
- with self.apm_task_step("Generate remapped bad pixel mask"):
153
+ with self.telemetry_span("Generate remapped bad pixel mask"):
154
154
  logger.info("Generating remapped bad pixel mask")
155
155
  self.save_bad_pixel_cube(calibrations)
156
156
 
157
- with self.apm_task_step("Process science frames"):
157
+ with self.telemetry_span("Process science frames"):
158
158
  logger.info("Processing science frames")
159
159
  self.process_science_frames(calibrations=calibrations)
160
160
 
161
- with self.apm_processing_step("Computing and logging quality metrics"):
161
+ with self.telemetry_span("Computing and logging quality metrics"):
162
162
  no_of_raw_science_frames: int = self.scratch.count_all(
163
163
  tags=[
164
164
  DlnirspTag.linearized_frame(),
@@ -218,7 +218,7 @@ class ScienceCalibration(
218
218
  spec_scales = geometric_correction["spectral_scales"]
219
219
  reference_wavelength_axis = geometric_correction["reference_wavelength_axis"]
220
220
 
221
- with self.apm_processing_step("Prepare IFU remapping information"):
221
+ with self.telemetry_span("Prepare IFU remapping information"):
222
222
  logger.info("Prepping IFU remapping data.")
223
223
  ifu_x_points, ifu_y_points = self.apply_geometry_to_ifu_files(
224
224
  spec_shifts=spec_shifts,
@@ -45,11 +45,11 @@ class SolarCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
45
45
 
46
46
  6. Write the final, solar-spectrum-removed, solar gain image.
47
47
  """
48
- with self.apm_task_step("Apply dark and lamp corrections"):
48
+ with self.telemetry_span("Apply dark and lamp corrections"):
49
49
  logger.info("Computing average dark/lamp corrected gains")
50
50
  self.compute_average_corrected_gains()
51
51
 
52
- with self.apm_task_step("Compute characteristic spectra"):
52
+ with self.telemetry_span("Compute characteristic spectra"):
53
53
  logger.info("Computing characteristic spectra")
54
54
  characteristic_spectra = self.compute_characteristic_spectra()
55
55
 
@@ -59,7 +59,7 @@ class SolarCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
59
59
  encoder=fits_array_encoder,
60
60
  )
61
61
 
62
- with self.apm_task_step("Re-distort characteristic spectra"):
62
+ with self.telemetry_span("Re-distort characteristic spectra"):
63
63
  logger.info("Re-distorting characteristic spectra")
64
64
  distorted_char_spectra = self.redistort_characteristic_spectra(characteristic_spectra)
65
65
 
@@ -75,11 +75,11 @@ class SolarCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
75
75
  encoder=fits_array_encoder,
76
76
  )
77
77
 
78
- with self.apm_task_step("Remove characteristic spectra"):
78
+ with self.telemetry_span("Remove characteristic spectra"):
79
79
  logger.info("Removing characteristic spectra")
80
80
  cleaned_gain = self.remove_solar_signal(distorted_char_spectra)
81
81
 
82
- with self.apm_writing_step("Write solar flat calibration"):
82
+ with self.telemetry_span("Write solar flat calibration"):
83
83
  logger.info("Writing solar flat calibration")
84
84
  self.write(
85
85
  data=cleaned_gain,
@@ -87,7 +87,7 @@ class SolarCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
87
87
  encoder=fits_array_encoder,
88
88
  )
89
89
 
90
- with self.apm_processing_step("Computing and logging quality metrics"):
90
+ with self.telemetry_span("Computing and logging quality metrics"):
91
91
  no_of_raw_solar_frames: int = self.scratch.count_all(
92
92
  tags=[DlnirspTag.linearized_frame(), DlnirspTag.task_solar_gain()],
93
93
  )
@@ -73,7 +73,7 @@ class WavelengthCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
73
73
  -------
74
74
  None
75
75
  """
76
- with self.apm_processing_step("Compute input spectrum and wavelength"):
76
+ with self.telemetry_span("Compute input spectrum and wavelength"):
77
77
  dispersion = (
78
78
  next(
79
79
  self.read(
@@ -114,7 +114,7 @@ class WavelengthCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
114
114
  incident_light_angle=incident_light_angle,
115
115
  )
116
116
 
117
- with self.apm_processing_step("Compute brute-force CRVAL initial guess"):
117
+ with self.telemetry_span("Compute brute-force CRVAL initial guess"):
118
118
  atlas = Atlas(config=self.parameters.wavecal_atlas_download_config)
119
119
  wavelength_range = input_wavelength_vector.max() - input_wavelength_vector.min()
120
120
  crval_init = calculate_initial_crval_guess(
@@ -130,7 +130,7 @@ class WavelengthCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
130
130
  doppler_velocity = self.compute_doppler_velocity()
131
131
  logger.info(f"{doppler_velocity = !s}")
132
132
 
133
- with self.apm_task_step("Set up wavelength fit"):
133
+ with self.telemetry_span("Set up wavelength fit"):
134
134
  bounds = BoundsModel(
135
135
  # This is basically saying "we think the correct CRVAL is *somewhere* in our input vector"
136
136
  # and lines up with the range of values considered when computing the brute-force initial guess above
@@ -176,14 +176,14 @@ class WavelengthCalibration(DlnirspTaskBase, CorrectionsMixin, QualityMixin):
176
176
  )
177
177
  logger.info(f"Input parameters: {input_parameters.lmfit_parameters.pretty_repr()}")
178
178
 
179
- with self.apm_processing_step("Run wavelength solution fit"):
179
+ with self.telemetry_span("Run wavelength solution fit"):
180
180
  fit_result = fitter(
181
181
  input_wavelength_vector=input_wavelength_vector,
182
182
  input_spectrum=input_spectrum,
183
183
  method="leastsq",
184
184
  )
185
185
 
186
- with self.apm_writing_step("Save wavelength solution and quality metrics"):
186
+ with self.telemetry_span("Save wavelength solution and quality metrics"):
187
187
  self.write_fit_results(fit_result, nan_chop_amount)
188
188
  self.quality_store_wavecal_results(
189
189
  input_wavelength=input_wavelength_vector,
@@ -85,21 +85,6 @@ def tag_inputs_task(suffix: str):
85
85
  return TagInputs
86
86
 
87
87
 
88
- def setup_APM_config() -> None:
89
- mesh_config = {
90
- "system-monitoring-log-apm": {
91
- "mesh_address": "system-monitoring-log-apm.service.sim.consul",
92
- "mesh_port": 8200,
93
- },
94
- "automated-processing-scratch-inventory": {"mesh_address": "localhost", "mesh_port": 6379},
95
- "internal-api-gateway": {"mesh_address": "localhost", "mesh_port": 80},
96
- }
97
- apm_options = {"TRANSACTION_MAX_SPANS": 10000}
98
- os.environ["MESH_CONFIG"] = json.dumps(mesh_config)
99
- os.environ["ELASTIC_APM_ENABLED"] = "true"
100
- os.environ["ELASTIC_APM_OTHER_OPTIONS"] = json.dumps(apm_options)
101
-
102
-
103
88
  def main(
104
89
  scratch_path: str,
105
90
  suffix: str = "FITS",
@@ -109,10 +94,7 @@ def main(
109
94
  only_translate: bool = False,
110
95
  load_input_parsing: bool = False,
111
96
  cals_only: bool = False,
112
- use_apm: bool = False,
113
97
  ):
114
- if use_apm:
115
- setup_APM_config()
116
98
  with ManualProcessing(
117
99
  workflow_path=Path(scratch_path),
118
100
  recipe_run_id=recipe_run_id,
@@ -181,7 +163,6 @@ if __name__ == "__main__":
181
163
  help="Load tags and constants on input files",
182
164
  action="store_true",
183
165
  )
184
- parser.add_argument("-A", "--use-apm", help="Send APM spans to SIM", action="store_true")
185
166
  parser.add_argument(
186
167
  "-p",
187
168
  "--param-dir",
@@ -201,6 +182,5 @@ if __name__ == "__main__":
201
182
  only_translate=args.only_translate,
202
183
  load_input_parsing=args.load_input_parsing,
203
184
  cals_only=args.cals_only,
204
- use_apm=args.use_apm,
205
185
  )
206
186
  )
@@ -181,21 +181,6 @@ def tag_linearized_task(suffix: str):
181
181
  return TagLinearized
182
182
 
183
183
 
184
- def setup_APM_config() -> None:
185
- mesh_config = {
186
- "system-monitoring-log-apm": {
187
- "mesh_address": "system-monitoring-log-apm.service.sim.consul",
188
- "mesh_port": 8200,
189
- },
190
- "automated-processing-scratch-inventory": {"mesh_address": "localhost", "mesh_port": 6379},
191
- "internal-api-gateway": {"mesh_address": "localhost", "mesh_port": 80},
192
- }
193
- apm_options = {"TRANSACTION_MAX_SPANS": 10000}
194
- os.environ["MESH_CONFIG"] = json.dumps(mesh_config)
195
- os.environ["ELASTIC_APM_ENABLED"] = "true"
196
- os.environ["ELASTIC_APM_OTHER_OPTIONS"] = json.dumps(apm_options)
197
-
198
-
199
184
  def main(
200
185
  scratch_path: str,
201
186
  suffix: str = "FITS",
@@ -217,10 +202,7 @@ def main(
217
202
  load_polcals_as_science: bool = False,
218
203
  load_calibrated_data: bool = False,
219
204
  transfer_trial_data: str | None = None,
220
- use_apm: bool = False,
221
205
  ):
222
- if use_apm:
223
- setup_APM_config()
224
206
  with ManualProcessing(
225
207
  workflow_path=Path(scratch_path),
226
208
  recipe_run_id=recipe_run_id,
@@ -464,7 +446,6 @@ if __name__ == "__main__":
464
446
  parser.add_argument(
465
447
  "-C", "--load-calibrated-data", help="Load CALIBRATED 'science' frames", action="store_true"
466
448
  )
467
- parser.add_argument("-A", "--use-apm", help="Send APM spans to SIM", action="store_true")
468
449
  parser.add_argument(
469
450
  "-p",
470
451
  "--param-dir",
@@ -496,6 +477,5 @@ if __name__ == "__main__":
496
477
  load_polcals_as_science=args.load_polcals_as_science,
497
478
  load_calibrated_data=args.load_calibrated_data,
498
479
  transfer_trial_data=args.transfer_trial_data,
499
- use_apm=args.use_apm,
500
480
  )
501
481
  )
@@ -187,21 +187,6 @@ def tag_linearized_task(suffix: str):
187
187
  return TagLinearized
188
188
 
189
189
 
190
- def setup_APM_config() -> None:
191
- mesh_config = {
192
- "system-monitoring-log-apm": {
193
- "mesh_address": "system-monitoring-log-apm.service.sim.consul",
194
- "mesh_port": 8200,
195
- },
196
- "automated-processing-scratch-inventory": {"mesh_address": "localhost", "mesh_port": 6379},
197
- "internal-api-gateway": {"mesh_address": "localhost", "mesh_port": 80},
198
- }
199
- apm_options = {"TRANSACTION_MAX_SPANS": 10000}
200
- os.environ["MESH_CONFIG"] = json.dumps(mesh_config)
201
- os.environ["ELASTIC_APM_ENABLED"] = "true"
202
- os.environ["ELASTIC_APM_OTHER_OPTIONS"] = json.dumps(apm_options)
203
-
204
-
205
190
  def main(
206
191
  scratch_path: str,
207
192
  suffix: str = "FITS",
@@ -224,10 +209,7 @@ def main(
224
209
  load_calibrated_data: bool = False,
225
210
  force_intensity_only: bool = False,
226
211
  transfer_trial_data: str | None = None,
227
- use_apm: bool = False,
228
212
  ):
229
- if use_apm:
230
- setup_APM_config()
231
213
  with ManualProcessing(
232
214
  workflow_path=Path(scratch_path),
233
215
  recipe_run_id=recipe_run_id,
@@ -483,7 +465,6 @@ if __name__ == "__main__":
483
465
  parser.add_argument(
484
466
  "-C", "--load-calibrated-data", help="Load CALIBRATED 'science' frames", action="store_true"
485
467
  )
486
- parser.add_argument("-A", "--use-apm", help="Send APM spans to SIM", action="store_true")
487
468
  parser.add_argument(
488
469
  "-p",
489
470
  "--param-dir",
@@ -516,6 +497,5 @@ if __name__ == "__main__":
516
497
  load_calibrated_data=args.load_calibrated_data,
517
498
  force_intensity_only=args.force_I_only,
518
499
  transfer_trial_data=args.transfer_trial_data,
519
- use_apm=args.use_apm,
520
500
  )
521
501
  )
@@ -1,5 +1,4 @@
1
1
  import argparse
2
- import json
3
2
  import os
4
3
  import sys
5
4
  from pathlib import Path
@@ -156,21 +155,6 @@ def tag_linearized_task(suffix: str):
156
155
  return TagLinearized
157
156
 
158
157
 
159
- def setup_APM_config() -> None:
160
- mesh_config = {
161
- "system-monitoring-log-apm": {
162
- "mesh_address": "system-monitoring-log-apm.service.sim.consul",
163
- "mesh_port": 8200,
164
- },
165
- "automated-processing-scratch-inventory": {"mesh_address": "localhost", "mesh_port": 6379},
166
- "internal-api-gateway": {"mesh_address": "localhost", "mesh_port": 80},
167
- }
168
- apm_options = {"TRANSACTION_MAX_SPANS": 10000}
169
- os.environ["MESH_CONFIG"] = json.dumps(mesh_config)
170
- os.environ["ELASTIC_APM_ENABLED"] = "true"
171
- os.environ["ELASTIC_APM_OTHER_OPTIONS"] = json.dumps(apm_options)
172
-
173
-
174
158
  def main(
175
159
  scratch_path: str,
176
160
  suffix: str = "FITS",
@@ -191,10 +175,7 @@ def main(
191
175
  load_inst_polcal: bool = False,
192
176
  load_calibrated_data: bool = False,
193
177
  transfer_trial_data: str | None = None,
194
- use_apm: bool = False,
195
178
  ):
196
- if use_apm:
197
- setup_APM_config()
198
179
  with ManualProcessing(
199
180
  workflow_path=Path(scratch_path),
200
181
  recipe_run_id=recipe_run_id,
@@ -425,7 +406,6 @@ if __name__ == "__main__":
425
406
  parser.add_argument(
426
407
  "-C", "--load-calibrated-data", help="Load CALIBRATED science frames", action="store_true"
427
408
  )
428
- parser.add_argument("-A", "--use-apm", help="Send APM spans to SIM", action="store_true")
429
409
  parser.add_argument(
430
410
  "-p",
431
411
  "--param-dir",
@@ -456,6 +436,5 @@ if __name__ == "__main__":
456
436
  load_inst_polcal=args.load_inst_polcal,
457
437
  load_calibrated_data=args.load_calibrated_data,
458
438
  transfer_trial_data=args.transfer_trial_data,
459
- use_apm=args.use_apm,
460
439
  )
461
440
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-dlnirsp
3
- Version: 0.31.0
3
+ Version: 0.32.0
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,13 +13,13 @@ 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.5.0
16
+ Requires-Dist: dkist-processing-common==11.6.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
20
20
  Requires-Dist: dkist-fits-specifications==4.17.0
21
21
  Requires-Dist: dkist-spectral-lines==3.0.0
22
- Requires-Dist: dkist-service-configuration==2.2
22
+ Requires-Dist: dkist-service-configuration==4.1.7
23
23
  Requires-Dist: astropy==7.0.2
24
24
  Requires-Dist: numpy==2.2.5
25
25
  Requires-Dist: numba==0.61.2
@@ -71,7 +71,7 @@ Requires-Dist: Flask-AppBuilder==4.5.3; extra == "frozen"
71
71
  Requires-Dist: Flask-Babel==2.0.0; extra == "frozen"
72
72
  Requires-Dist: Flask-Caching==2.3.1; extra == "frozen"
73
73
  Requires-Dist: Flask-JWT-Extended==4.7.1; extra == "frozen"
74
- Requires-Dist: Flask-Limiter==3.12; extra == "frozen"
74
+ Requires-Dist: Flask-Limiter==3.13; extra == "frozen"
75
75
  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"
@@ -81,55 +81,56 @@ Requires-Dist: Mako==1.3.10; extra == "frozen"
81
81
  Requires-Dist: MarkupSafe==3.0.2; extra == "frozen"
82
82
  Requires-Dist: PeakUtils==1.3.5; extra == "frozen"
83
83
  Requires-Dist: PyJWT==2.10.1; extra == "frozen"
84
- Requires-Dist: PyYAML==6.0.2; extra == "frozen"
84
+ Requires-Dist: PyYAML==6.0.3; extra == "frozen"
85
85
  Requires-Dist: Pygments==2.19.2; extra == "frozen"
86
86
  Requires-Dist: SQLAlchemy==1.4.54; extra == "frozen"
87
87
  Requires-Dist: SQLAlchemy-JSONField==1.0.2; extra == "frozen"
88
88
  Requires-Dist: SQLAlchemy-Utils==0.42.0; extra == "frozen"
89
89
  Requires-Dist: WTForms==3.2.1; extra == "frozen"
90
90
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
91
- Requires-Dist: aioftp==0.26.2; extra == "frozen"
91
+ Requires-Dist: aioftp==0.27.2; extra == "frozen"
92
92
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
93
93
  Requires-Dist: aiohttp==3.12.15; extra == "frozen"
94
94
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
95
+ Requires-Dist: aiosmtplib==4.0.2; extra == "frozen"
95
96
  Requires-Dist: alembic==1.16.5; extra == "frozen"
96
97
  Requires-Dist: amqp==5.3.1; extra == "frozen"
97
98
  Requires-Dist: annotated-types==0.7.0; extra == "frozen"
98
- Requires-Dist: anyio==4.10.0; extra == "frozen"
99
+ Requires-Dist: anyio==4.11.0; extra == "frozen"
99
100
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
100
- Requires-Dist: apache-airflow-providers-celery==3.12.2; extra == "frozen"
101
- Requires-Dist: apache-airflow-providers-common-compat==1.7.3; extra == "frozen"
102
- Requires-Dist: apache-airflow-providers-common-io==1.6.2; extra == "frozen"
103
- Requires-Dist: apache-airflow-providers-common-sql==1.27.5; extra == "frozen"
101
+ 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"
104
105
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
105
106
  Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
106
- Requires-Dist: apache-airflow-providers-http==5.3.3; extra == "frozen"
107
+ Requires-Dist: apache-airflow-providers-http==5.3.4; extra == "frozen"
107
108
  Requires-Dist: apache-airflow-providers-imap==3.9.2; extra == "frozen"
108
- Requires-Dist: apache-airflow-providers-postgres==6.2.3; extra == "frozen"
109
- Requires-Dist: apache-airflow-providers-smtp==2.2.0; extra == "frozen"
109
+ Requires-Dist: apache-airflow-providers-postgres==6.3.0; extra == "frozen"
110
+ Requires-Dist: apache-airflow-providers-smtp==2.3.0; extra == "frozen"
110
111
  Requires-Dist: apache-airflow-providers-sqlite==4.1.2; extra == "frozen"
111
- Requires-Dist: apispec==6.8.3; extra == "frozen"
112
+ Requires-Dist: apispec==6.8.4; extra == "frozen"
112
113
  Requires-Dist: argcomplete==3.6.2; extra == "frozen"
113
114
  Requires-Dist: asdf==3.5.0; extra == "frozen"
114
115
  Requires-Dist: asdf_standard==1.4.0; extra == "frozen"
115
116
  Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
116
- Requires-Dist: asgiref==3.9.1; extra == "frozen"
117
+ Requires-Dist: asgiref==3.9.2; extra == "frozen"
117
118
  Requires-Dist: asteval==1.0.6; extra == "frozen"
118
119
  Requires-Dist: astropy==7.0.2; extra == "frozen"
119
- Requires-Dist: astropy-iers-data==0.2025.9.8.0.36.17; extra == "frozen"
120
+ Requires-Dist: astropy-iers-data==0.2025.9.22.0.37.25; extra == "frozen"
120
121
  Requires-Dist: asyncpg==0.30.0; extra == "frozen"
121
122
  Requires-Dist: attrs==25.3.0; extra == "frozen"
122
123
  Requires-Dist: babel==2.17.0; extra == "frozen"
123
- Requires-Dist: billiard==4.2.1; extra == "frozen"
124
+ Requires-Dist: billiard==4.2.2; extra == "frozen"
124
125
  Requires-Dist: blinker==1.9.0; extra == "frozen"
125
- Requires-Dist: boto3==1.40.25; extra == "frozen"
126
- Requires-Dist: botocore==1.40.25; extra == "frozen"
126
+ Requires-Dist: boto3==1.40.39; extra == "frozen"
127
+ Requires-Dist: botocore==1.40.39; extra == "frozen"
127
128
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
128
- Requires-Dist: celery==5.5.3; extra == "frozen"
129
+ Requires-Dist: celery==5.3.1; extra == "frozen"
129
130
  Requires-Dist: certifi==2025.8.3; extra == "frozen"
130
- Requires-Dist: cffi==1.17.1; extra == "frozen"
131
+ Requires-Dist: cffi==2.0.0; extra == "frozen"
131
132
  Requires-Dist: charset-normalizer==3.4.3; extra == "frozen"
132
- Requires-Dist: click==8.2.1; extra == "frozen"
133
+ Requires-Dist: click==8.3.0; extra == "frozen"
133
134
  Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
134
135
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
135
136
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
@@ -140,34 +141,32 @@ Requires-Dist: connexion==2.14.2; extra == "frozen"
140
141
  Requires-Dist: contourpy==1.3.3; extra == "frozen"
141
142
  Requires-Dist: cron_descriptor==2.0.6; extra == "frozen"
142
143
  Requires-Dist: croniter==6.0.0; extra == "frozen"
143
- Requires-Dist: cryptography==45.0.7; extra == "frozen"
144
+ Requires-Dist: cryptography==46.0.1; extra == "frozen"
144
145
  Requires-Dist: cycler==0.12.1; extra == "frozen"
145
146
  Requires-Dist: dacite==1.9.2; extra == "frozen"
146
147
  Requires-Dist: decorator==5.2.1; extra == "frozen"
147
148
  Requires-Dist: dill==0.4.0; extra == "frozen"
148
149
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
149
- Requires-Dist: dkist-processing-common==11.5.0; extra == "frozen"
150
- Requires-Dist: dkist-processing-core==5.2.1; extra == "frozen"
151
- Requires-Dist: dkist-processing-dlnirsp==0.31.0; extra == "frozen"
150
+ Requires-Dist: dkist-processing-common==11.6.0; extra == "frozen"
151
+ Requires-Dist: dkist-processing-core==6.0.0; extra == "frozen"
152
+ Requires-Dist: dkist-processing-dlnirsp==0.32.0; extra == "frozen"
152
153
  Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
153
154
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
154
- Requires-Dist: dkist-service-configuration==2.2; extra == "frozen"
155
+ Requires-Dist: dkist-service-configuration==4.1.7; extra == "frozen"
155
156
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
156
157
  Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
157
158
  Requires-Dist: dnspython==2.8.0; extra == "frozen"
158
- Requires-Dist: ecs-logging==2.2.0; extra == "frozen"
159
- Requires-Dist: elastic-apm==6.24.0; extra == "frozen"
160
159
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
161
160
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
162
161
  Requires-Dist: flower==2.0.1; extra == "frozen"
163
- Requires-Dist: fonttools==4.59.2; extra == "frozen"
162
+ Requires-Dist: fonttools==4.60.0; extra == "frozen"
164
163
  Requires-Dist: frozenlist==1.7.0; extra == "frozen"
165
164
  Requires-Dist: fsspec==2025.9.0; extra == "frozen"
166
- Requires-Dist: globus-sdk==3.63.0; extra == "frozen"
165
+ Requires-Dist: globus-sdk==3.64.0; extra == "frozen"
167
166
  Requires-Dist: google-re2==1.1.20250805; extra == "frozen"
168
167
  Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
169
168
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
170
- Requires-Dist: grpcio==1.74.0; extra == "frozen"
169
+ Requires-Dist: grpcio==1.75.1; extra == "frozen"
171
170
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
172
171
  Requires-Dist: h11==0.16.0; extra == "frozen"
173
172
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
@@ -209,14 +208,30 @@ Requires-Dist: networkx==3.5; extra == "frozen"
209
208
  Requires-Dist: numba==0.61.2; extra == "frozen"
210
209
  Requires-Dist: numpy==2.2.5; extra == "frozen"
211
210
  Requires-Dist: object-clerk==1.0.0; extra == "frozen"
212
- Requires-Dist: opentelemetry-api==1.36.0; extra == "frozen"
213
- Requires-Dist: opentelemetry-exporter-otlp==1.36.0; extra == "frozen"
214
- Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.36.0; extra == "frozen"
215
- Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.36.0; extra == "frozen"
216
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.36.0; extra == "frozen"
217
- Requires-Dist: opentelemetry-proto==1.36.0; extra == "frozen"
218
- Requires-Dist: opentelemetry-sdk==1.36.0; extra == "frozen"
219
- Requires-Dist: opentelemetry-semantic-conventions==0.57b0; 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"
230
+ 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"
220
235
  Requires-Dist: ordered-set==4.1.0; extra == "frozen"
221
236
  Requires-Dist: packaging==25.0; extra == "frozen"
222
237
  Requires-Dist: pandas==2.3.2; extra == "frozen"
@@ -231,33 +246,33 @@ Requires-Dist: pluggy==1.6.0; extra == "frozen"
231
246
  Requires-Dist: pooch==1.8.2; extra == "frozen"
232
247
  Requires-Dist: prison==0.2.1; extra == "frozen"
233
248
  Requires-Dist: proglog==0.1.12; extra == "frozen"
234
- Requires-Dist: prometheus_client==0.22.1; extra == "frozen"
249
+ Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
235
250
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
236
251
  Requires-Dist: propcache==0.3.2; extra == "frozen"
237
- Requires-Dist: protobuf==6.32.0; extra == "frozen"
238
- Requires-Dist: psutil==7.0.0; extra == "frozen"
252
+ Requires-Dist: protobuf==6.32.1; extra == "frozen"
253
+ Requires-Dist: psutil==7.1.0; extra == "frozen"
239
254
  Requires-Dist: psycopg2-binary==2.9.10; extra == "frozen"
240
- Requires-Dist: pycparser==2.22; extra == "frozen"
241
- Requires-Dist: pydantic==2.11.7; extra == "frozen"
242
- Requires-Dist: pydantic-settings==2.10.1; extra == "frozen"
255
+ Requires-Dist: pycparser==2.23; extra == "frozen"
256
+ Requires-Dist: pydantic==2.11.9; extra == "frozen"
257
+ Requires-Dist: pydantic-settings==2.11.0; extra == "frozen"
243
258
  Requires-Dist: pydantic_core==2.33.2; extra == "frozen"
244
259
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
245
- Requires-Dist: pyparsing==3.2.3; extra == "frozen"
260
+ Requires-Dist: pyparsing==3.2.5; extra == "frozen"
246
261
  Requires-Dist: python-daemon==3.1.2; extra == "frozen"
247
262
  Requires-Dist: python-dateutil==2.9.0.post0; extra == "frozen"
248
263
  Requires-Dist: python-dotenv==1.1.1; extra == "frozen"
249
264
  Requires-Dist: python-nvd3==0.16.0; extra == "frozen"
250
265
  Requires-Dist: python-slugify==8.0.4; extra == "frozen"
251
266
  Requires-Dist: pytz==2025.2; extra == "frozen"
252
- Requires-Dist: redis==4.6.0; extra == "frozen"
267
+ Requires-Dist: redis==6.4.0; extra == "frozen"
253
268
  Requires-Dist: referencing==0.36.2; extra == "frozen"
254
269
  Requires-Dist: requests==2.32.5; extra == "frozen"
255
270
  Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
256
271
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
257
- Requires-Dist: rich==13.9.4; extra == "frozen"
272
+ Requires-Dist: rich==14.1.0; extra == "frozen"
258
273
  Requires-Dist: rich-argparse==1.7.1; extra == "frozen"
259
274
  Requires-Dist: rpds-py==0.27.1; extra == "frozen"
260
- Requires-Dist: s3transfer==0.13.1; extra == "frozen"
275
+ Requires-Dist: s3transfer==0.14.0; extra == "frozen"
261
276
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
262
277
  Requires-Dist: scipy==1.15.3; extra == "frozen"
263
278
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
@@ -273,7 +288,7 @@ Requires-Dist: talus==1.3.4; extra == "frozen"
273
288
  Requires-Dist: tenacity==8.5.0; extra == "frozen"
274
289
  Requires-Dist: termcolor==3.1.0; extra == "frozen"
275
290
  Requires-Dist: text-unidecode==1.3; extra == "frozen"
276
- Requires-Dist: tifffile==2025.8.28; extra == "frozen"
291
+ Requires-Dist: tifffile==2025.9.20; extra == "frozen"
277
292
  Requires-Dist: tornado==6.5.2; extra == "frozen"
278
293
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
279
294
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
@@ -286,7 +301,7 @@ Requires-Dist: universal_pathlib==0.2.6; extra == "frozen"
286
301
  Requires-Dist: urllib3==2.5.0; extra == "frozen"
287
302
  Requires-Dist: vine==5.1.0; extra == "frozen"
288
303
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
289
- Requires-Dist: wcwidth==0.2.13; extra == "frozen"
304
+ Requires-Dist: wcwidth==0.2.14; extra == "frozen"
290
305
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
291
306
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
292
307
  Requires-Dist: yamale==6.0.0; extra == "frozen"
@@ -309,7 +324,83 @@ in their own package facilitates using the build_utils to test the integrity of
309
324
 
310
325
  Environment Variables
311
326
  ---------------------
312
- Only those specified by `dkist-processing-core <https://pypi.org/project/dkist-processing-core/>`_ and `dkist-processing-common <https://pypi.org/project/dkist-processing-common/>`_.
327
+
328
+ .. list-table::
329
+ :widths: 10 90
330
+ :header-rows: 1
331
+
332
+ * - Variable
333
+ - Field Info
334
+ * - LOGURU_LEVEL
335
+ - annotation=str required=False default='INFO' alias_priority=2 validation_alias='LOGURU_LEVEL' description='Log level for the application'
336
+ * - MESH_CONFIG
337
+ - annotation=dict[str, MeshService] required=False default_factory=dict alias_priority=2 validation_alias='MESH_CONFIG' description='Service mesh configuration' examples=[{'upstream_service_name': {'mesh_address': 'localhost', 'mesh_port': 6742}}]
338
+ * - RETRY_CONFIG
339
+ - annotation=RetryConfig required=False default_factory=RetryConfig description='Retry configuration for the service'
340
+ * - OTEL_SERVICE_NAME
341
+ - annotation=str required=False default='unknown-service-name' alias_priority=2 validation_alias='OTEL_SERVICE_NAME' description='Service name for OpenTelemetry'
342
+ * - DKIST_SERVICE_VERSION
343
+ - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
344
+ * - NOMAD_ALLOC_ID
345
+ - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
346
+ * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
347
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
348
+ * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
349
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP metrics'
350
+ * - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
351
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP traces endpoint. Overrides mesh configuration' examples=['localhost:4317']
352
+ * - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
353
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP metrics endpoint. Overrides mesh configuration' examples=['localhost:4317']
354
+ * - OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
355
+ - annotation=list[str] required=False default_factory=list description='List of instrumentations to disable. https://opentelemetry.io/docs/zero-code/python/configuration/' examples=[['pika', 'requests']]
356
+ * - OTEL_PYTHON_FASTAPI_EXCLUDED_URLS
357
+ - annotation=str required=False default='health' description='Comma separated list of URLs to exclude from OpenTelemetry instrumentation in FastAPI.' examples=['client/.*/info,healthcheck']
358
+ * - SYSTEM_METRIC_INSTRUMENTATION_CONFIG
359
+ - annotation=Union[dict[str, bool], NoneType] required=False default=None description='Configuration for system metric instrumentation. https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/system_metrics/system_metrics.html' examples=[{'system.memory.usage': ['used', 'free', 'cached'], 'system.cpu.time': ['idle', 'user', 'system', 'irq'], 'system.network.io': ['transmit', 'receive'], 'process.runtime.memory': ['rss', 'vms'], 'process.runtime.cpu.time': ['user', 'system'], 'process.runtime.context_switches': ['involuntary', 'voluntary']}]
360
+ * - ISB_USERNAME
361
+ - annotation=str required=False default='guest' description='Username for the interservice-bus.'
362
+ * - ISB_PASSWORD
363
+ - annotation=str required=False default='guest' description='Password for the interservice-bus.'
364
+ * - ISB_EXCHANGE
365
+ - annotation=str required=False default='master.direct.x' description='Exchange for the interservice-bus.'
366
+ * - ISB_QUEUE_TYPE
367
+ - annotation=str required=False default='classic' description='Queue type for the interservice-bus.' examples=['quorum', 'classic']
368
+ * - BUILD_VERSION
369
+ - annotation=str required=False default='dev' description='Fallback build version for workflow tasks.'
370
+ * - GQL_AUTH_TOKEN
371
+ - annotation=Union[str, NoneType] required=False default='dev' description='The auth token for the metadata-store-api.'
372
+ * - OBJECT_STORE_ACCESS_KEY
373
+ - annotation=Union[str, NoneType] required=False default=None description='The access key for the object store.'
374
+ * - OBJECT_STORE_SECRET_KEY
375
+ - annotation=Union[str, NoneType] required=False default=None description='The secret key for the object store.'
376
+ * - OBJECT_STORE_USE_SSL
377
+ - annotation=bool required=False default=False description='Whether to use SSL for the object store connection.'
378
+ * - MULTIPART_THRESHOLD
379
+ - annotation=Union[int, NoneType] required=False default=None description='Multipart threshold for the object store.'
380
+ * - S3_CLIENT_CONFIG
381
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 client configuration for the object store.'
382
+ * - S3_UPLOAD_CONFIG
383
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
384
+ * - S3_DOWNLOAD_CONFIG
385
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
386
+ * - GLOBUS_TRANSPORT_PARAMS
387
+ - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
388
+ * - GLOBUS_CLIENT_ID
389
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
390
+ * - GLOBUS_CLIENT_SECRET
391
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
392
+ * - OBJECT_STORE_ENDPOINT
393
+ - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
394
+ * - SCRATCH_ENDPOINT
395
+ - annotation=Union[str, NoneType] required=False default=None description='Scratch Globus Endpoint ID.'
396
+ * - SCRATCH_BASE_PATH
397
+ - annotation=str required=False default='scratch/' description='Base path for scratch storage.'
398
+ * - SCRATCH_INVENTORY_DB_COUNT
399
+ - annotation=int required=False default=16 description='Number of databases in the scratch inventory (redis).'
400
+ * - DOCS_BASE_URL
401
+ - annotation=str required=False default='my_test_url' description='Base URL for the documentation site.'
402
+ * - FTS_ATLAS_DATA_DIR
403
+ - annotation=Union[str, NoneType] required=False default=None description='Common cached directory for downloaded FTS Atlas.'
313
404
 
314
405
  Development
315
406
  -----------
@@ -18,21 +18,21 @@ dkist_processing_dlnirsp/parsers/wavelength.py,sha256=FPpvFSBTy3OxjUXJhjRirR_sIN
18
18
  dkist_processing_dlnirsp/parsers/wcs_corrections.py,sha256=yeTLowmtAIs5sjNStIKmBTZUxttOtldJSeW_adsXFYQ,1786
19
19
  dkist_processing_dlnirsp/tasks/__init__.py,sha256=6N5xdCM3FeTpzmBUgUnJ5mKF2N3vBfcj-SNqVQ9ZHiw,996
20
20
  dkist_processing_dlnirsp/tasks/assemble_movie.py,sha256=BxUO7_Zj_QGLXqNpp87bLawyLo4G0I0DTLZPMXpi5Mo,5539
21
- dkist_processing_dlnirsp/tasks/bad_pixel_map.py,sha256=vmKqOkAiQE6MeWjgr_05j37M9btO9PlYktv185-DVfY,8221
22
- dkist_processing_dlnirsp/tasks/dark.py,sha256=pPYfjKEa7tSb-grSOs95yAhNVU5NCURVKwHGISlLVGo,3591
21
+ dkist_processing_dlnirsp/tasks/bad_pixel_map.py,sha256=ZzG86mXped2k2PjX7okKAi3JCQGJHalBhBgFU-T8K_8,8194
22
+ dkist_processing_dlnirsp/tasks/dark.py,sha256=rFnVULAunChEdxEXcosxNJM_iqRGslia9cUnV1FAOQQ,3580
23
23
  dkist_processing_dlnirsp/tasks/dlnirsp_base.py,sha256=dIpQGE0COLAXPAUbKn6dpLJj5VDCxfAVYFfX8fR6OSo,1519
24
- dkist_processing_dlnirsp/tasks/geometric.py,sha256=gDEvrAMf0UrBYiUl1Yme4u2FWG-kznwRoJag3G9Daus,28118
25
- dkist_processing_dlnirsp/tasks/ifu_drift.py,sha256=nyqRX2FbqPXMeOc5sh0qIatmbn_YDk-KLG2KzuIr8sI,16159
26
- dkist_processing_dlnirsp/tasks/instrument_polarization.py,sha256=tdRlavbbWqBTR-K8DOiwS1CXYKEdVQ-jsIsTlrq3nxo,28247
24
+ dkist_processing_dlnirsp/tasks/geometric.py,sha256=lZanX2vPATqxK5ux_nFDkv3RseCf1sLXj0HrLb8O7uQ,28114
25
+ dkist_processing_dlnirsp/tasks/ifu_drift.py,sha256=JeFgl6uk6lYU4jJ-gBYtRESyUa9mbWuW-hFAN2iWb_s,16137
26
+ dkist_processing_dlnirsp/tasks/instrument_polarization.py,sha256=G79qXg1080zsd8ZwwYSSupUGWPRNBevyag49H32gh60,28201
27
27
  dkist_processing_dlnirsp/tasks/l1_output_data.py,sha256=Psta0476jih-cfmpdnzmquys030sW4f4VX6ksAb-g1o,465
28
- dkist_processing_dlnirsp/tasks/lamp.py,sha256=VIEr0pdD2G-FjpqQ5tUDyOV-36TQ392MZZBa0h_dhwo,5396
29
- dkist_processing_dlnirsp/tasks/linearity_correction.py,sha256=pTc0R20MIWEGM33zdyE1WenWR89FZxm_HNGX00HAieA,21105
28
+ dkist_processing_dlnirsp/tasks/lamp.py,sha256=twoMHMnE2jm2OYxkeHFcjqcyQYVtEjSU2_z2mmn3Ybs,5390
29
+ dkist_processing_dlnirsp/tasks/linearity_correction.py,sha256=fz16nK5q7isKz9l7_AFeDkMTaX08omlusKoIDS8wj5k,21107
30
30
  dkist_processing_dlnirsp/tasks/make_movie_frames.py,sha256=zxyAWNnPFbG7jpUEe3ekRyJGjk706T9a-yiA3eoWi5M,6290
31
31
  dkist_processing_dlnirsp/tasks/parse.py,sha256=-v7pkkxaAjSMxTXQCHTU-M6P9ODZmJG73TstQMicJHk,10465
32
- dkist_processing_dlnirsp/tasks/quality_metrics.py,sha256=RaHBrftuLXsycmW3CVCT6Wg9nOxVMxcH_Xs9_f5FysM,7360
33
- dkist_processing_dlnirsp/tasks/science.py,sha256=QwHuqJID20m8age8WivgRfGqhvyQXKB9s6cbanOqUsc,35520
34
- dkist_processing_dlnirsp/tasks/solar.py,sha256=Fr5Rc9Ml2yTjBvGlUOiVdYwMk3PJfS57-p__fMTr07w,11138
35
- dkist_processing_dlnirsp/tasks/wavelength_calibration.py,sha256=ceIjWtIYJ8DAOgHkpb7DkWuYrtTh_vuI-J94Xp9okTk,17039
32
+ 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/solar.py,sha256=NyLYkRophfXaVtvnGuNEvkcE8JNcmCJVuobNYAZ7KjQ,11135
35
+ dkist_processing_dlnirsp/tasks/wavelength_calibration.py,sha256=6jidRwMbGoZcuVbnFv3IizEFFkGxHMTI249Q8pyVIUA,17023
36
36
  dkist_processing_dlnirsp/tasks/write_l1.py,sha256=cm2dB4n5LjwauxUfv_jtkG8ZRZCHYE4DBZWRXQYjok4,9578
37
37
  dkist_processing_dlnirsp/tasks/mixin/__init__.py,sha256=5PMbkD6K0zTfhCxv8vg2lvJCNP81qItJ_R_7Yy3Mpwc,26
38
38
  dkist_processing_dlnirsp/tasks/mixin/corrections.py,sha256=MRZXCEc0KBE-9cQUpRP-K3ioDYRH8_ORFlJcH2SsmWA,6803
@@ -64,10 +64,10 @@ dkist_processing_dlnirsp/tests/test_wavelength_calibration.py,sha256=GFGXtl0KdCl
64
64
  dkist_processing_dlnirsp/tests/test_workflows.py,sha256=cRw_c90B-ZXGaw0vVWymYCE-_Ll6mBeM7aHsu-uXewo,290
65
65
  dkist_processing_dlnirsp/tests/test_write_l1.py,sha256=J9D1QqCDe0IzYsphA4s_ciDEL0tUUSV1KLm8yo9mxyM,13335
66
66
  dkist_processing_dlnirsp/tests/local_trial_workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- dkist_processing_dlnirsp/tests/local_trial_workflows/l0_linearize_only.py,sha256=4fRg8YYa9COZwdT51uKnzkl6c87CYh5HNXYDPqwJg_c,7569
68
- dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=4NnF1IMiLFA_0RloEKmxqOI0rnwXg5PGxO1ycuIBWrs,20157
69
- dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=o8j5vcumYhzkP_NmCrizcu38p8QmjG8ljR84mj9wSWk,20921
70
- dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=aB5Oa2TQ_xg9ixPlyYVIpNh_qK-cSqeSGdU1Bjzja74,18588
67
+ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_linearize_only.py,sha256=WpO2T2PRDiglwBB3zQDV_3Cq1RSw-ufu_iFjT5aLFJk,6750
68
+ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_polcals_as_science.py,sha256=ZDefUSKggIH2ebzUziQWU_A2yWeX68vjqzC11MNkzJU,19338
69
+ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_solar_gain_as_science.py,sha256=Nv8qi-U2mUpWRn8rfx0ckn6v9OUGbfSND-fX9WVRaU0,20102
70
+ dkist_processing_dlnirsp/tests/local_trial_workflows/l0_to_l1.py,sha256=MfCqHOO9RC24FRqGUKfPiTGUZh7rft9NklYKej-oM00,17757
71
71
  dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_dev_mockers.py,sha256=PukJUm83qiDnE7fcVGdbBMZN-RrkLutbB-XkOsMKMqY,11697
72
72
  dkist_processing_dlnirsp/tests/local_trial_workflows/local_trial_helpers.py,sha256=eZ7Z0BgLazGPPTuDpmItyY36yd8s243z4OGmJnGTxjw,21284
73
73
  dkist_processing_dlnirsp/tests/local_trial_workflows/translate_files.py,sha256=bsOqBtGE9SdOZL2ROJ-murJHjymYrE_nEPNHJgy7pDc,1882
@@ -93,8 +93,8 @@ docs/science_calibration.rst,sha256=JUMeS7KyIsL9cUuy-IdV2tQ-wQ2lBx6j8u_51ThJzVg,
93
93
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
94
94
  docs/wavelength_calibration.rst,sha256=VP45e0g4r-dReQmypQVqduvezQiKwq47STlAJn0w8iQ,4095
95
95
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
96
- dkist_processing_dlnirsp-0.31.0.dist-info/METADATA,sha256=0yrSyfmB4hlqVu6gcJQbp5uyT3uUKBNGTmwTyZbVkUY,21953
97
- dkist_processing_dlnirsp-0.31.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
- dkist_processing_dlnirsp-0.31.0.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
99
- dkist_processing_dlnirsp-0.31.0.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
100
- dkist_processing_dlnirsp-0.31.0.dist-info/RECORD,,
96
+ dkist_processing_dlnirsp-0.32.0.dist-info/METADATA,sha256=O7BbgPXIEVbl5Xau_c0PJxaedq0PWuInWY_h8NppmPs,29205
97
+ dkist_processing_dlnirsp-0.32.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
+ dkist_processing_dlnirsp-0.32.0.dist-info/entry_points.txt,sha256=p4-7cpIfxmQGFUDIP5n5noE5KADHN2-JvV03e0gOx9s,140
99
+ dkist_processing_dlnirsp-0.32.0.dist-info/top_level.txt,sha256=4WmLV9LQM78KTFnkHmtaOJvVHAPpz0m9ruzDS-B_cUo,49
100
+ dkist_processing_dlnirsp-0.32.0.dist-info/RECORD,,