dkist-processing-cryonirsp 1.4.3__py3-none-any.whl → 1.4.5rc1__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.

Potentially problematic release.


This version of dkist-processing-cryonirsp might be problematic. Click here for more details.

@@ -46,6 +46,7 @@ class CryonirspBudName(Enum):
46
46
  roi_1_size_y = "ROI_1_SIZE_Y"
47
47
  optical_density_filter_picky_bud = "OPTICAL_DENSITY_FILTER_PICKY_BUD"
48
48
  solar_gain_ip_start_time = "SOLAR_GAIN_IP_START_TIME"
49
+ gain_frame_type_list = "GAIN_FRAME_TYPE_LIST"
49
50
 
50
51
 
51
52
  class CryonirspConstants(ConstantsBase):
@@ -124,6 +125,11 @@ class CryonirspConstants(ConstantsBase):
124
125
  """Construct a sorted tuple of all the dateobs for this dataset."""
125
126
  return self._db_dict[CryonirspBudName.time_obs_list.value]
126
127
 
128
+ @property
129
+ def gain_frame_type_list(self) -> list[str]:
130
+ """Construct a list of all the types of gain frames for this dataset."""
131
+ return self._db_dict[CryonirspBudName.gain_frame_type_list.value]
132
+
127
133
  @property
128
134
  def exposure_conditions_list(self) -> [ExposureConditions]:
129
135
  """Construct a list of ExposureConditions tuples for the dataset."""
@@ -0,0 +1,58 @@
1
+ """Pickybud to check for lamp gain and solar gain frames."""
2
+ from typing import Hashable
3
+ from typing import Type
4
+
5
+ from dkist_processing_common.models.flower_pot import SpilledDirt
6
+ from dkist_processing_common.models.flower_pot import Stem
7
+ from dkist_processing_common.models.flower_pot import Thorn
8
+ from dkist_processing_common.models.task_name import TaskName
9
+ from dkist_processing_common.parsers.task import parse_header_ip_task_with_gains
10
+
11
+ from dkist_processing_cryonirsp.models.constants import CryonirspBudName
12
+ from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspL0FitsAccess
13
+
14
+
15
+ class CheckGainFramesPickyBud(Stem):
16
+ """Pickybud to check for lamp gain and solar gain frames."""
17
+
18
+ def __init__(self):
19
+ super().__init__(stem_name=CryonirspBudName.gain_frame_type_list.value)
20
+
21
+ def setter(self, fits_obj: CryonirspL0FitsAccess) -> Type[SpilledDirt] | str:
22
+ """
23
+ Set the calibration frame type for this fits object.
24
+
25
+ Parameters
26
+ ----------
27
+ fits_obj
28
+ The input fits object
29
+ Returns
30
+ -------
31
+ The calibration frame object associated with this fits object
32
+ """
33
+ task = parse_header_ip_task_with_gains(fits_obj).casefold()
34
+
35
+ if task in [TaskName.lamp_gain.value.casefold(), TaskName.solar_gain.value.casefold()]:
36
+ return task
37
+ return SpilledDirt
38
+
39
+ def getter(self, key: Hashable) -> Thorn:
40
+ """
41
+ Check that lamp and solar gain frames exist. If they do, return a Thorn.
42
+
43
+ Parameters
44
+ ----------
45
+ key
46
+ The input key
47
+
48
+ Returns
49
+ -------
50
+ Thorn
51
+ """
52
+ gain_task_types = list(self.key_to_petal_dict.values())
53
+
54
+ if TaskName.lamp_gain.value.casefold() not in gain_task_types:
55
+ raise ValueError("Lamp gain frames not found.")
56
+ if TaskName.solar_gain.value.casefold() not in gain_task_types:
57
+ raise ValueError("Solar gain frames not found.")
58
+ return Thorn
@@ -25,6 +25,7 @@ from dkist_processing_cryonirsp.models.constants import CryonirspBudName
25
25
  from dkist_processing_cryonirsp.models.parameters import CryonirspParsingParameters
26
26
  from dkist_processing_cryonirsp.models.tags import CryonirspStemName
27
27
  from dkist_processing_cryonirsp.models.tags import CryonirspTag
28
+ from dkist_processing_cryonirsp.parsers.check_for_gains import CheckGainFramesPickyBud
28
29
  from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspL0FitsAccess
29
30
  from dkist_processing_cryonirsp.parsers.cryonirsp_l0_fits_access import CryonirspRampFitsAccess
30
31
  from dkist_processing_cryonirsp.parsers.exposure_conditions import (
@@ -179,6 +180,7 @@ class ParseL0CryonirspLinearizedData(ParseDataBase, InputDatasetMixin):
179
180
  NumberOfScanStepsBud(),
180
181
  NumberOfMeasurementsBud(),
181
182
  CryonirspSolarGainStartTimeBud(),
183
+ CheckGainFramesPickyBud(),
182
184
  NumCSStepBud(self.parameters.max_cs_step_time_sec),
183
185
  CryonirspTaskExposureConditionsBud(
184
186
  stem_name=CryonirspBudName.dark_frame_exposure_conditions_list.value,
@@ -130,6 +130,7 @@ class CryonirspWriteL1Frame(WriteL1Frame, ABC, InputDatasetMixin):
130
130
  header[f"DTYPE{axis_num}"] = "SPATIAL"
131
131
  header[f"DPNAME{axis_num}"] = self.latitude_pixel_name
132
132
  header[f"DWNAME{axis_num}"] = "helioprojective latitude"
133
+ header[f"CNAME{axis_num}"] = "helioprojective latitude"
133
134
  header[f"DUNIT{axis_num}"] = header[f"CUNIT{axis_num}"]
134
135
  next_axis = axis_num + 1
135
136
  return next_axis
@@ -140,6 +141,7 @@ class CryonirspWriteL1Frame(WriteL1Frame, ABC, InputDatasetMixin):
140
141
  header[f"DTYPE{axis_num}"] = "TEMPORAL"
141
142
  header[f"DPNAME{axis_num}"] = "measurement number"
142
143
  header[f"DWNAME{axis_num}"] = "time"
144
+ header[f"CNAME{axis_num}"] = "time"
143
145
  header[f"DUNIT{axis_num}"] = "s"
144
146
  # DINDEX and CNCMEAS are both one-based
145
147
  header[f"DINDEX{axis_num}"] = header["CNCMEAS"]
@@ -157,6 +159,7 @@ class CryonirspWriteL1Frame(WriteL1Frame, ABC, InputDatasetMixin):
157
159
  header[f"DTYPE{axis_num}"] = "TEMPORAL"
158
160
  header[f"DPNAME{axis_num}"] = "map scan number"
159
161
  header[f"DWNAME{axis_num}"] = "time"
162
+ header[f"CNAME{axis_num}"] = "time"
160
163
  header[f"DUNIT{axis_num}"] = "s"
161
164
  # Temporal position in dataset
162
165
  # DINDEX and CNMAP are both one-based
@@ -172,6 +175,7 @@ class CryonirspWriteL1Frame(WriteL1Frame, ABC, InputDatasetMixin):
172
175
  header[f"DTYPE{axis_num}"] = "STOKES"
173
176
  header[f"DPNAME{axis_num}"] = "polarization state"
174
177
  header[f"DWNAME{axis_num}"] = "polarization state"
178
+ header[f"CNAME{axis_num}"] = "polarization state"
175
179
  header[f"DUNIT{axis_num}"] = ""
176
180
  # Stokes position in dataset - stokes axis goes from 1-4
177
181
  header[f"DINDEX{axis_num}"] = self.constants.stokes_params.index(stokes.upper()) + 1
@@ -502,6 +506,7 @@ class CIWriteL1Frame(CryonirspWriteL1Frame):
502
506
  header[f"DNAXIS{axis_num}"] = header[f"NAXIS{axis_num}"]
503
507
  header[f"DTYPE{axis_num}"] = "SPATIAL"
504
508
  header[f"DWNAME{axis_num}"] = "helioprojective longitude"
509
+ header[f"CNAME{axis_num}"] = "helioprojective longitude"
505
510
  header[f"DUNIT{axis_num}"] = header[f"CUNIT{axis_num}"]
506
511
  header[f"DPNAME{axis_num}"] = "detector y axis"
507
512
  next_axis = axis_num + 1
@@ -513,6 +518,7 @@ class CIWriteL1Frame(CryonirspWriteL1Frame):
513
518
  header[f"DTYPE{axis_num}"] = "TEMPORAL"
514
519
  header[f"DPNAME{axis_num}"] = "scan step number"
515
520
  header[f"DWNAME{axis_num}"] = "time"
521
+ header[f"CNAME{axis_num}"] = "time"
516
522
  header[f"DUNIT{axis_num}"] = "s"
517
523
  # DINDEX and CNCURSCN are both one-based
518
524
  header[f"DINDEX{axis_num}"] = header["CNCURSCN"]
@@ -777,6 +783,7 @@ class SPWriteL1Frame(CryonirspWriteL1Frame):
777
783
  header[f"DTYPE{axis_num}"] = "SPECTRAL"
778
784
  header[f"DPNAME{axis_num}"] = "dispersion axis"
779
785
  header[f"DWNAME{axis_num}"] = "wavelength"
786
+ header[f"CNAME{axis_num}"] = "wavelength"
780
787
  header[f"DUNIT{axis_num}"] = header[f"CUNIT{axis_num}"]
781
788
  next_axis = axis_num + 1
782
789
  return next_axis
@@ -794,6 +801,7 @@ class SPWriteL1Frame(CryonirspWriteL1Frame):
794
801
  header[f"DTYPE{axis_num}"] = "SPATIAL"
795
802
  header[f"DPNAME{axis_num}"] = "scan step number"
796
803
  header[f"DWNAME{axis_num}"] = "helioprojective longitude"
804
+ header[f"CNAME{axis_num}"] = "helioprojective longitude"
797
805
  # NB: CUNIT axis number is hard coded here
798
806
  header[f"DUNIT{axis_num}"] = header[f"CUNIT3"]
799
807
  # DINDEX and CNCURSCN are both one-based
@@ -72,7 +72,7 @@ def generate_214_l1_fits_frame(
72
72
  ) -> fits.HDUList:
73
73
  """Convert S122 header into 214 L1 only.
74
74
 
75
- This does NOT include populating all L1 headers, just removing 214 L0 only headers
75
+ This does NOT include populating all L1 headers, just removing 214 L0 only headers.
76
76
 
77
77
  NOTE: The stuff you care about will be in hdulist[1]
78
78
  """
@@ -1437,3 +1437,61 @@ def test_polarimetric_checking_unique_bud(dummy_fits_obj):
1437
1437
  Bud.update("key1", nonpol_obs_frame2)
1438
1438
  Bud.update("key2", pol_frame2)
1439
1439
  assert Bud.getter("key1") == "Bad"
1440
+
1441
+
1442
+ @pytest.mark.parametrize("arm_id", ["CI", "SP"])
1443
+ def test_missing_solar_gain_frames(parse_linearized_task, arm_id):
1444
+ """
1445
+ Given: A dataset missing solar gain frames
1446
+ When: Parsing
1447
+ Then: The 'CheckGainFramesPickyBud' raises an error
1448
+ """
1449
+ task = parse_linearized_task
1450
+
1451
+ lin_tag = [CryonirspTag.linearized()]
1452
+ gain_exposure_condition = ExposureConditions(
1453
+ 10.0, AllowableOpticalDensityFilterNames.OPEN.value
1454
+ )
1455
+ dark_exp_condition = ExposureConditions(10.0, AllowableOpticalDensityFilterNames.OPEN.value)
1456
+
1457
+ # Needed so the dark picky bud is happy
1458
+ write_dark_frames_to_task(task, exposure_condition=dark_exp_condition, tags=lin_tag)
1459
+
1460
+ write_lamp_gain_frames_to_task(
1461
+ task,
1462
+ tags=lin_tag,
1463
+ exposure_condition=gain_exposure_condition,
1464
+ num_modstates=1,
1465
+ )
1466
+
1467
+ with pytest.raises(ValueError, match="Solar gain frames not found."):
1468
+ task()
1469
+
1470
+
1471
+ @pytest.mark.parametrize("arm_id", ["CI", "SP"])
1472
+ def test_missing_lamp_gain_frames(parse_linearized_task, arm_id):
1473
+ """
1474
+ Given: A dataset missing lamp gain frames
1475
+ When: Parsing
1476
+ Then: The 'CheckGainFramesPickyBud' raises an error
1477
+ """
1478
+ task = parse_linearized_task
1479
+
1480
+ lin_tag = [CryonirspTag.linearized()]
1481
+ gain_exposure_condition = ExposureConditions(
1482
+ 10.0, AllowableOpticalDensityFilterNames.OPEN.value
1483
+ )
1484
+ dark_exp_condition = ExposureConditions(10.0, AllowableOpticalDensityFilterNames.OPEN.value)
1485
+
1486
+ # Needed so the dark picky bud is happy
1487
+ write_dark_frames_to_task(task, exposure_condition=dark_exp_condition, tags=lin_tag)
1488
+
1489
+ write_solar_gain_frames_to_task(
1490
+ task,
1491
+ tags=lin_tag,
1492
+ exposure_condition=gain_exposure_condition,
1493
+ num_modstates=1,
1494
+ )
1495
+
1496
+ with pytest.raises(ValueError, match="Lamp gain frames not found."):
1497
+ task()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dkist-processing-cryonirsp
3
- Version: 1.4.3
3
+ Version: 1.4.5rc1
4
4
  Summary: Science processing code for the Cryo-NIRSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -15,9 +15,9 @@ Requires-Python: >=3.11
15
15
  Description-Content-Type: text/x-rst
16
16
  Requires-Dist: Pillow==10.3.0
17
17
  Requires-Dist: astropy==6.1.0
18
- Requires-Dist: dkist-fits-specifications==4.7.0
18
+ Requires-Dist: dkist-fits-specifications==4.10.0
19
19
  Requires-Dist: dkist-header-validator==5.1.1
20
- Requires-Dist: dkist-processing-common==10.5.2
20
+ Requires-Dist: dkist-processing-common==10.5.3
21
21
  Requires-Dist: dkist-processing-math==2.1.1
22
22
  Requires-Dist: dkist-processing-pac==3.1.0
23
23
  Requires-Dist: dkist-spectral-lines==3.0.0
@@ -2,12 +2,13 @@ changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  dkist_processing_cryonirsp/__init__.py,sha256=Z6-kB7fXXUI-F7Vz1HnEaja2h8qgH9IZExRl1lUxvZg,350
3
3
  dkist_processing_cryonirsp/config.py,sha256=xNkUNJ1BeBxJX881mTCIEbirZlD5_5txpV1QqkbfRM0,507
4
4
  dkist_processing_cryonirsp/models/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
5
- dkist_processing_cryonirsp/models/constants.py,sha256=1R3rWj__ay6lHZJpXBaSdfSozmi7K6ceU2U9PkdIJwc,9360
5
+ dkist_processing_cryonirsp/models/constants.py,sha256=qjXu7iaA-8cw5wZF-EaudWrDb8WDt3ALmRkX0lzBm7g,9629
6
6
  dkist_processing_cryonirsp/models/exposure_conditions.py,sha256=slFq5-Qz4fRpJKDBabbm4evPWLQVYmT-Uf9rk7nI734,813
7
7
  dkist_processing_cryonirsp/models/parameters.py,sha256=oAB_68AY2HdxK8IkvzisPKDI-c2agZeKiE5VIkHkkRI,13422
8
8
  dkist_processing_cryonirsp/models/tags.py,sha256=1Q2ag0ud9gx3su-XUqa--gwSnf5di7CGnlkyiEFreRs,4388
9
9
  dkist_processing_cryonirsp/models/task_name.py,sha256=xK4AKwgOx2uANbjhr0Q5Q3R9iPxLfkVKxWYY8wWjKhE,439
10
10
  dkist_processing_cryonirsp/parsers/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
11
+ dkist_processing_cryonirsp/parsers/check_for_gains.py,sha256=z5DZ4b4gQILb2mv1SowVulpiVGBZPYZNFsM6i6PjM24,2021
11
12
  dkist_processing_cryonirsp/parsers/cryonirsp_l0_fits_access.py,sha256=e4vDjsG5ye6N8cSg6WCJDHmlGAgM_2w1DRpp_KSddJw,4453
12
13
  dkist_processing_cryonirsp/parsers/cryonirsp_l1_fits_access.py,sha256=sc8MzxYMc8E1eFrL5KguAGHViCMJhaDfiBtZPml4ELg,886
13
14
  dkist_processing_cryonirsp/parsers/exposure_conditions.py,sha256=Xj466IJyaMXUCudrdTOUFmjsOr_CYENI7BegwwmEjoA,6098
@@ -32,7 +33,7 @@ dkist_processing_cryonirsp/tasks/instrument_polarization.py,sha256=uaQWIcQkw61az
32
33
  dkist_processing_cryonirsp/tasks/l1_output_data.py,sha256=FdL_Dv-YTLgT-xH_uOOUjk4GUYMjbaSDPIg1rIQu_iY,1621
33
34
  dkist_processing_cryonirsp/tasks/linearity_correction.py,sha256=-R0iBJDNF9o57GUd5C8YlOL6wyVUzKf5rSDFgu0kpgA,24310
34
35
  dkist_processing_cryonirsp/tasks/make_movie_frames.py,sha256=Ql_bg1r1W1m-tTOParAdkllFJEJFdNoE16GgHyhDgdw,13900
35
- dkist_processing_cryonirsp/tasks/parse.py,sha256=4qHU_Zy0gfoRBDY94jZhkRqKXwz-QPM42eUY9Db7e5Y,12326
36
+ dkist_processing_cryonirsp/tasks/parse.py,sha256=MeqdHk1pb5dBlYQBlJrH3qXm9vzJ7d6nV-eh2cMDJqs,12452
36
37
  dkist_processing_cryonirsp/tasks/quality_metrics.py,sha256=r4mS1Qp88tHlbNKsqed-MOsFT_6Zbhr5H8-4hrx9OGw,11424
37
38
  dkist_processing_cryonirsp/tasks/science_base.py,sha256=-BjPNPI5jjiBR7K8p_9fa4vYCEUEdOFx7c2AC5EmFoE,17619
38
39
  dkist_processing_cryonirsp/tasks/sp_beam_boundaries.py,sha256=3bdj6W2H_UiOhmj2xHvADwOzojteLsTL9RkTwvzB6_M,10300
@@ -40,7 +41,7 @@ dkist_processing_cryonirsp/tasks/sp_dispersion_axis_correction.py,sha256=y9TKJCt
40
41
  dkist_processing_cryonirsp/tasks/sp_geometric.py,sha256=Ym5M1DJR_ZYGqjD1Cy5IQiult3GN5dp0hnJ9sLfMDQM,21860
41
42
  dkist_processing_cryonirsp/tasks/sp_science.py,sha256=FubmQSg_ZrVy08TcT6dRK2nuA2cmGMrMYMmjT6_bYQM,12091
42
43
  dkist_processing_cryonirsp/tasks/sp_solar_gain.py,sha256=WJKenRlqFlsP3zb3IPqRFdxCGcmJZMVlM9Me-myyvn0,18541
43
- dkist_processing_cryonirsp/tasks/write_l1.py,sha256=7xM4Uy66BCZzFhNPNHkiov6zIcfkZH45SadsJJr6QKc,41023
44
+ dkist_processing_cryonirsp/tasks/write_l1.py,sha256=hIjTun-zs35sXqVrcFhWqWA2gX2HpoGZxotvfHj_KpA,41457
44
45
  dkist_processing_cryonirsp/tasks/mixin/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
45
46
  dkist_processing_cryonirsp/tasks/mixin/beam_access.py,sha256=DiPRbsAyfhX-juHL0slypcXi5C8PJT-DNMX6ck1IH1w,1627
46
47
  dkist_processing_cryonirsp/tasks/mixin/corrections.py,sha256=rcKmckBJkoExcX0XW1i3OZzuMu1i7tX5Hgwy15chU50,6566
@@ -48,7 +49,7 @@ dkist_processing_cryonirsp/tasks/mixin/intermediate_frame.py,sha256=fFeIvuA4AtkQ
48
49
  dkist_processing_cryonirsp/tasks/mixin/linearized_frame.py,sha256=oyiMA_rzBUYtlmh1ilfE5DkuIe4FFiyptaYjcU8-joA,10176
49
50
  dkist_processing_cryonirsp/tasks/mixin/shift_measurements.py,sha256=7ToSy9uOJ_JrFfd-X225wqW_laq4xoRJkBiAPanfb_g,11225
50
51
  dkist_processing_cryonirsp/tests/__init__.py,sha256=m6UekKftTahNJ3W5K3mZSz4Y4ZZpHRxF_ZAxuaKYL7o,12
51
- dkist_processing_cryonirsp/tests/conftest.py,sha256=SiE_QHRy5IQ5SNOjBYdm9OhZBFqCB7Lx_FrTELqYS4M,17103
52
+ dkist_processing_cryonirsp/tests/conftest.py,sha256=QZSEWZvgmWsqv2310AInV4m6NqweNJYJt-HNWgec-B4,17104
52
53
  dkist_processing_cryonirsp/tests/header_models.py,sha256=Ny4h5lS54bGRPDo4nOzvJgNWMzFY9DDs1IQorr_r3s8,20591
53
54
  dkist_processing_cryonirsp/tests/test_assemble_movie.py,sha256=YNZINIFXR9kZBlE1AIvjlVmwwhZJeVYOOPk7Q8IVkcI,6222
54
55
  dkist_processing_cryonirsp/tests/test_assemble_qualilty.py,sha256=upk-oUqVBHGK3F0eemshLpAPrnfh9mbeuZXow4E1Rmc,16859
@@ -64,7 +65,7 @@ dkist_processing_cryonirsp/tests/test_instrument_polarization.py,sha256=GgZmPJVt
64
65
  dkist_processing_cryonirsp/tests/test_linearity_correction.py,sha256=y9gDWlHsOaTMP7K5-lIIVmboa6nd0ozaqEtl6Fvt5T0,9406
65
66
  dkist_processing_cryonirsp/tests/test_make_movie_frames.py,sha256=WznHp9dV2-jbJYzRniCAIbSHCGNc0SpSzyVDSrZkYd4,4904
66
67
  dkist_processing_cryonirsp/tests/test_parameters.py,sha256=CbaEnxx3HGZmqZJbNzQ2IJpIg6AKlK26BT3TXUMGYAE,11438
67
- dkist_processing_cryonirsp/tests/test_parse.py,sha256=8SN3Dw3OE50nORZelRM7epznz6CGiNL0cPkziM4kVto,51693
68
+ dkist_processing_cryonirsp/tests/test_parse.py,sha256=PsTco2G1_APKEPeSpqpYfsIkNXSM_GtY_jbgkNtj8r8,53539
68
69
  dkist_processing_cryonirsp/tests/test_quality.py,sha256=DWuL7q8x2RtPz3LN9-KEw541sv6Law9WyVQKaamkOmE,8169
69
70
  dkist_processing_cryonirsp/tests/test_sp_beam_boundaries.py,sha256=4hONuVLQAqkQjNtpNzvmqEWLg3LI1XJLWaekkeS3SJo,4815
70
71
  dkist_processing_cryonirsp/tests/test_sp_dispersion_axis_correction.py,sha256=lhwT_I0HQuH66I0TRvARfuNnWWjxeAvQ4fEEVmbhp_E,6098
@@ -103,7 +104,7 @@ docs/requirements_table.rst,sha256=FaqSag9kPi77gWPhzeo_tFEhRFjb3qUuNqqQe1K76NM,2
103
104
  docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
104
105
  docs/sp_science_calibration.rst,sha256=fHBOZ2cqySxLjNi737KfynlmHZy9W4EwvuzxnyjDNvk,2597
105
106
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
106
- dkist_processing_cryonirsp-1.4.3.dist-info/METADATA,sha256=YWUV6EMV6A8nBbRWNZeHHjD7tqfO2wksUk4zelJEdPw,8403
107
- dkist_processing_cryonirsp-1.4.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
108
- dkist_processing_cryonirsp-1.4.3.dist-info/top_level.txt,sha256=Sm9b1ddKnsF9Bh3mqDOct1Sm7k8I9aN7vGHgpmu-MlQ,51
109
- dkist_processing_cryonirsp-1.4.3.dist-info/RECORD,,
107
+ dkist_processing_cryonirsp-1.4.5rc1.dist-info/METADATA,sha256=tBZtHiTAJWwXpKt7b9YgpBMus8iHTr4sJiaAX5Gy8AU,8407
108
+ dkist_processing_cryonirsp-1.4.5rc1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
109
+ dkist_processing_cryonirsp-1.4.5rc1.dist-info/top_level.txt,sha256=Sm9b1ddKnsF9Bh3mqDOct1Sm7k8I9aN7vGHgpmu-MlQ,51
110
+ dkist_processing_cryonirsp-1.4.5rc1.dist-info/RECORD,,