dkist-processing-visp 5.3.0rc5__py3-none-any.whl → 5.3.1__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.
- dkist_processing_visp/models/constants.py +6 -3
- dkist_processing_visp/parsers/modulator_states.py +30 -33
- dkist_processing_visp/parsers/raster_step.py +11 -16
- dkist_processing_visp/parsers/spectrograph_configuration.py +6 -9
- dkist_processing_visp/parsers/time.py +11 -16
- dkist_processing_visp/tasks/dark.py +1 -1
- dkist_processing_visp/tests/README.rst +1 -1
- dkist_processing_visp/tests/conftest.py +1 -1
- dkist_processing_visp/tests/test_dark.py +1 -1
- dkist_processing_visp/tests/test_parse.py +25 -3
- {dkist_processing_visp-5.3.0rc5.dist-info → dkist_processing_visp-5.3.1.dist-info}/METADATA +32 -32
- {dkist_processing_visp-5.3.0rc5.dist-info → dkist_processing_visp-5.3.1.dist-info}/RECORD +14 -15
- {dkist_processing_visp-5.3.0rc5.dist-info → dkist_processing_visp-5.3.1.dist-info}/WHEEL +1 -1
- changelog/261.misc.rst +0 -1
- {dkist_processing_visp-5.3.0rc5.dist-info → dkist_processing_visp-5.3.1.dist-info}/top_level.txt +0 -0
|
@@ -23,7 +23,7 @@ class VispBudName(Enum):
|
|
|
23
23
|
observe_readout_exp_times = "OBSERVE_READOUT_EXP_TIMES"
|
|
24
24
|
polcal_exposure_times = "POLCAL_EXPOSURE_TIMES"
|
|
25
25
|
polcal_readout_exp_times = "POLCAL_READOUT_EXP_TIMES"
|
|
26
|
-
|
|
26
|
+
non_dark_or_polcal_readout_exp_times = "NON_DARK_OR_POLCAL_READOUT_EXP_TIMES"
|
|
27
27
|
num_map_scans = "NUM_MAP_SCANS"
|
|
28
28
|
incident_light_angle_deg = "INCIDENT_LIGHT_ANGLE_DEG"
|
|
29
29
|
reflected_light_angle_deg = "REFLECTED_LIGHT_ANGLE_DEG"
|
|
@@ -134,14 +134,17 @@ class VispConstants(ConstantsBase):
|
|
|
134
134
|
return []
|
|
135
135
|
|
|
136
136
|
@property
|
|
137
|
-
def
|
|
137
|
+
def non_dark_or_polcal_readout_exp_times(self) -> list[float]:
|
|
138
138
|
"""
|
|
139
139
|
Find all readout exposure times that *need* to exist in a dark IP.
|
|
140
140
|
|
|
141
141
|
Every non-dark task needs to be corrected with an average dark frame of the same readout exp time, which means
|
|
142
142
|
we need DARK IP task frames for all of these readout exposure times.
|
|
143
|
+
|
|
144
|
+
We don't care about the readout exposure time of the POLCAL frames because they do their own dark correction from
|
|
145
|
+
the polcal Calibration Sequence.
|
|
143
146
|
"""
|
|
144
|
-
return self._db_dict[VispBudName.
|
|
147
|
+
return self._db_dict[VispBudName.non_dark_or_polcal_readout_exp_times.value]
|
|
145
148
|
|
|
146
149
|
@property
|
|
147
150
|
def observe_readout_exp_times(self) -> list[float]:
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"""ViSP modulator state parser."""
|
|
2
2
|
|
|
3
3
|
from dkist_processing_common.models.constants import BudName
|
|
4
|
-
from dkist_processing_common.models.flower_pot import Stem
|
|
5
4
|
from dkist_processing_common.models.tags import StemName
|
|
5
|
+
from dkist_processing_common.parsers.single_value_single_key_flower import (
|
|
6
|
+
SingleValueSingleKeyFlower,
|
|
7
|
+
)
|
|
8
|
+
from dkist_processing_common.parsers.unique_bud import UniqueBud
|
|
6
9
|
|
|
10
|
+
from dkist_processing_visp.models.fits_access import VispMetadataKey
|
|
7
11
|
from dkist_processing_visp.parsers.visp_l0_fits_access import VispL0FitsAccess
|
|
8
12
|
|
|
9
13
|
|
|
@@ -13,15 +17,17 @@ class ObserveFrameError(BaseException):
|
|
|
13
17
|
pass
|
|
14
18
|
|
|
15
19
|
|
|
16
|
-
class NumberModulatorStatesBud(
|
|
20
|
+
class NumberModulatorStatesBud(UniqueBud):
|
|
17
21
|
"""Bud to check the number of modulator states."""
|
|
18
22
|
|
|
19
23
|
def __init__(self):
|
|
20
|
-
super().__init__(
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
super().__init__(
|
|
25
|
+
constant_name=BudName.num_modstates.value,
|
|
26
|
+
metadata_key=VispMetadataKey.number_of_modulator_states,
|
|
27
|
+
)
|
|
28
|
+
self.polarimeter_mode_set = set()
|
|
23
29
|
|
|
24
|
-
def setter(self, fits_obj: VispL0FitsAccess):
|
|
30
|
+
def setter(self, fits_obj: VispL0FitsAccess) -> int:
|
|
25
31
|
"""
|
|
26
32
|
Set the value of the bud.
|
|
27
33
|
|
|
@@ -30,41 +36,34 @@ class NumberModulatorStatesBud(Stem):
|
|
|
30
36
|
fits_obj:
|
|
31
37
|
A single FitsAccess object
|
|
32
38
|
"""
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
39
|
+
pol_mode = getattr(fits_obj, VispMetadataKey.polarimeter_mode.name)
|
|
40
|
+
self.polarimeter_mode_set.add(pol_mode)
|
|
41
|
+
return super().setter(fits_obj)
|
|
36
42
|
|
|
37
|
-
def getter(self
|
|
43
|
+
def getter(self):
|
|
38
44
|
"""Get the value of the bud, checking for restrictions on polarimetric observe data."""
|
|
39
|
-
|
|
40
|
-
num_modstates_set = set([v[0] for v in values])
|
|
41
|
-
polmode_list = list(set([v[1] for v in values]))
|
|
42
|
-
|
|
43
|
-
if "observe_intensity" in polmode_list:
|
|
45
|
+
if "observe_intensity" in self.polarimeter_mode_set:
|
|
44
46
|
return 1
|
|
45
47
|
|
|
46
48
|
# Polarimetric data must have the same number of modulator states in all frames
|
|
47
|
-
if "observe_polarimetric" in
|
|
48
|
-
|
|
49
|
-
raise ValueError(
|
|
50
|
-
f"Polarimetric data must all have the same number of modulator states. Found frames with modstates: {num_modstates_set}"
|
|
51
|
-
)
|
|
52
|
-
return num_modstates_set.pop()
|
|
49
|
+
if "observe_polarimetric" in self.polarimeter_mode_set:
|
|
50
|
+
return super().getter()
|
|
53
51
|
|
|
54
52
|
raise ObserveFrameError(
|
|
55
53
|
"No valid observe frames types were found in the headers of the data. Check the input data."
|
|
56
54
|
)
|
|
57
55
|
|
|
58
56
|
|
|
59
|
-
class ModulatorStateFlower(
|
|
57
|
+
class ModulatorStateFlower(SingleValueSingleKeyFlower):
|
|
60
58
|
"""Flower to find the ip task type."""
|
|
61
59
|
|
|
62
60
|
def __init__(self):
|
|
63
|
-
super().__init__(
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
super().__init__(
|
|
62
|
+
tag_stem_name=StemName.modstate.value, metadata_key=VispMetadataKey.modulator_state
|
|
63
|
+
)
|
|
64
|
+
self.polarimeter_mode_set = set()
|
|
66
65
|
|
|
67
|
-
def setter(self, fits_obj: VispL0FitsAccess):
|
|
66
|
+
def setter(self, fits_obj: VispL0FitsAccess) -> int:
|
|
68
67
|
"""
|
|
69
68
|
Set value of the flower.
|
|
70
69
|
|
|
@@ -73,14 +72,12 @@ class ModulatorStateFlower(Stem):
|
|
|
73
72
|
fits_obj:
|
|
74
73
|
A single FitsAccess object
|
|
75
74
|
"""
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
)
|
|
75
|
+
pol_mode = getattr(fits_obj, VispMetadataKey.polarimeter_mode.name)
|
|
76
|
+
self.polarimeter_mode_set.add(pol_mode)
|
|
77
|
+
return super().setter(fits_obj)
|
|
79
78
|
|
|
80
79
|
def getter(self, key: str) -> int:
|
|
81
80
|
"""Return the modulator state given in the header of each file unless it is in intensity mode - then return modulator state = 1 for everything."""
|
|
82
|
-
|
|
83
|
-
obs_mode_set = set([v[0] for v in values])
|
|
84
|
-
if "observe_intensity" in obs_mode_set:
|
|
81
|
+
if "observe_intensity" in self.polarimeter_mode_set:
|
|
85
82
|
return 1
|
|
86
|
-
return
|
|
83
|
+
return super().getter(key)
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from typing import Type
|
|
4
4
|
|
|
5
|
+
from dkist_processing_common.models.flower_pot import SetStem
|
|
5
6
|
from dkist_processing_common.models.flower_pot import SpilledDirt
|
|
6
|
-
from dkist_processing_common.models.flower_pot import Stem
|
|
7
7
|
from dkist_processing_common.models.task_name import TaskName
|
|
8
8
|
from dkist_processing_common.parsers.single_value_single_key_flower import (
|
|
9
9
|
SingleValueSingleKeyFlower,
|
|
@@ -15,14 +15,12 @@ from dkist_processing_visp.models.tags import VispStemName
|
|
|
15
15
|
from dkist_processing_visp.parsers.visp_l0_fits_access import VispL0FitsAccess
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class TotalRasterStepsBud(
|
|
18
|
+
class TotalRasterStepsBud(SetStem):
|
|
19
19
|
"""Bud for finding the total number of raster steps."""
|
|
20
20
|
|
|
21
21
|
def __init__(self):
|
|
22
22
|
super().__init__(stem_name=VispBudName.num_raster_steps.value)
|
|
23
|
-
|
|
24
|
-
self.total_num_key = "total_raster_steps"
|
|
25
|
-
self.single_step_key = "raster_scan_step"
|
|
23
|
+
self.num_steps_set = set()
|
|
26
24
|
|
|
27
25
|
def setter(self, fits_obj: VispL0FitsAccess) -> Type[SpilledDirt] | tuple[int, int]:
|
|
28
26
|
"""
|
|
@@ -36,29 +34,26 @@ class TotalRasterStepsBud(Stem):
|
|
|
36
34
|
if fits_obj.ip_task_type.casefold() != TaskName.observe.value.casefold():
|
|
37
35
|
return SpilledDirt
|
|
38
36
|
|
|
39
|
-
num_raster = getattr(fits_obj,
|
|
40
|
-
|
|
37
|
+
num_raster = getattr(fits_obj, VispMetadataKey.total_raster_steps.name)
|
|
38
|
+
self.num_steps_set.add(num_raster)
|
|
39
|
+
single_step = getattr(fits_obj, VispMetadataKey.raster_scan_step.name)
|
|
41
40
|
|
|
42
|
-
return
|
|
41
|
+
return single_step
|
|
43
42
|
|
|
44
|
-
def getter(self
|
|
43
|
+
def getter(self) -> int:
|
|
45
44
|
"""
|
|
46
45
|
Getter and check for bud.
|
|
47
46
|
|
|
48
47
|
Return value if only a single value was found in dataset. Error if multiple values were found or if the actual
|
|
49
48
|
raster steps found do not form a complete set based on the number-of-raster-steps header key.
|
|
50
49
|
"""
|
|
51
|
-
|
|
52
|
-
num_steps_set = set([v[0] for v in values])
|
|
53
|
-
|
|
54
|
-
# This is copied from UniqueBud because we still want to check this
|
|
55
|
-
if len(num_steps_set) > 1:
|
|
50
|
+
if len(self.num_steps_set) > 1:
|
|
56
51
|
raise ValueError(
|
|
57
|
-
f"
|
|
52
|
+
f"Found multiple values for total number of raster steps. Values: {self.num_steps_set}"
|
|
58
53
|
)
|
|
59
54
|
|
|
60
55
|
# Now check that all the steps we expect are present
|
|
61
|
-
all_steps = sorted(
|
|
56
|
+
all_steps = sorted(self.value_set)
|
|
62
57
|
if all_steps != list(range(0, max(all_steps) + 1)):
|
|
63
58
|
raise ValueError(f"Not all sequential steps could be found. Found {all_steps}")
|
|
64
59
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Buds for parsing the incident and reflected light angles of the ViSP spectrograph."""
|
|
2
2
|
|
|
3
|
+
from dkist_processing_common.models.flower_pot import SetStem
|
|
3
4
|
from dkist_processing_common.models.flower_pot import SpilledDirt
|
|
4
|
-
from dkist_processing_common.models.flower_pot import Stem
|
|
5
5
|
from dkist_processing_common.models.task_name import TaskName
|
|
6
6
|
from dkist_processing_common.parsers.task import parse_header_ip_task_with_gains
|
|
7
7
|
from dkist_processing_common.parsers.unique_bud import TaskUniqueBud
|
|
@@ -37,11 +37,9 @@ class IncidentLightAngleBud(TaskUniqueBud):
|
|
|
37
37
|
return convert_grating_angle_to_incident_light_angle(grating_angle)
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
class ReflectedLightAngleBud(
|
|
40
|
+
class ReflectedLightAngleBud(SetStem):
|
|
41
41
|
"""Bud that combines the incident light angle and arm position header values to compute the reflected light angle."""
|
|
42
42
|
|
|
43
|
-
key_to_petal_dict: dict[str, float]
|
|
44
|
-
|
|
45
43
|
def __init__(self):
|
|
46
44
|
super().__init__(stem_name=VispBudName.reflected_light_angle_deg.value)
|
|
47
45
|
self.ip_task_types = [
|
|
@@ -65,11 +63,10 @@ class ReflectedLightAngleBud(Stem):
|
|
|
65
63
|
|
|
66
64
|
return SpilledDirt
|
|
67
65
|
|
|
68
|
-
def getter(self
|
|
66
|
+
def getter(self) -> float:
|
|
69
67
|
"""Get the value for the reflected light angle and raise an error if it is not unique."""
|
|
70
|
-
|
|
71
|
-
if len(value_set) > 1:
|
|
68
|
+
if len(self.value_set) > 1:
|
|
72
69
|
raise ValueError(
|
|
73
|
-
f"Multiple {self.stem_name} values found for key
|
|
70
|
+
f"Multiple {self.stem_name} values found for key. Values: {self.value_set}"
|
|
74
71
|
)
|
|
75
|
-
return value_set.pop()
|
|
72
|
+
return self.value_set.pop()
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"""Stems for parsing constants and tags related to time header keys."""
|
|
2
2
|
|
|
3
|
-
from pathlib import Path
|
|
4
3
|
from typing import NamedTuple
|
|
4
|
+
from typing import Type
|
|
5
5
|
|
|
6
6
|
from dkist_processing_common.models.fits_access import MetadataKey
|
|
7
|
+
from dkist_processing_common.models.flower_pot import ListStem
|
|
8
|
+
from dkist_processing_common.models.flower_pot import SetStem
|
|
7
9
|
from dkist_processing_common.models.flower_pot import SpilledDirt
|
|
8
|
-
from dkist_processing_common.models.flower_pot import Stem
|
|
9
10
|
from dkist_processing_common.models.flower_pot import Thorn
|
|
10
11
|
from dkist_processing_common.models.tags import EXP_TIME_ROUND_DIGITS
|
|
11
12
|
from dkist_processing_common.models.task_name import TaskName
|
|
@@ -14,14 +15,14 @@ from dkist_processing_visp.models.constants import VispBudName
|
|
|
14
15
|
from dkist_processing_visp.parsers.visp_l0_fits_access import VispL0FitsAccess
|
|
15
16
|
|
|
16
17
|
|
|
17
|
-
class NonDarkNonPolcalTaskReadoutExpTimesBud(
|
|
18
|
+
class NonDarkNonPolcalTaskReadoutExpTimesBud(SetStem):
|
|
18
19
|
"""Produce a tuple of all exposure times present in the dataset for ip task types that are not DARK or POLCAL."""
|
|
19
20
|
|
|
20
21
|
def __init__(self):
|
|
21
|
-
super().__init__(stem_name=VispBudName.
|
|
22
|
+
super().__init__(stem_name=VispBudName.non_dark_or_polcal_readout_exp_times.value)
|
|
22
23
|
self.metadata_key = MetadataKey.sensor_readout_exposure_time_ms.name
|
|
23
24
|
|
|
24
|
-
def setter(self, fits_obj: VispL0FitsAccess) -> float | SpilledDirt:
|
|
25
|
+
def setter(self, fits_obj: VispL0FitsAccess) -> float | Type[SpilledDirt]:
|
|
25
26
|
"""
|
|
26
27
|
Set the task exposure time for this fits object.
|
|
27
28
|
|
|
@@ -41,20 +42,15 @@ class NonDarkNonPolcalTaskReadoutExpTimesBud(Stem):
|
|
|
41
42
|
|
|
42
43
|
return SpilledDirt
|
|
43
44
|
|
|
44
|
-
def getter(self
|
|
45
|
+
def getter(self) -> tuple[float, ...]:
|
|
45
46
|
"""
|
|
46
47
|
Get the list of exposure times.
|
|
47
48
|
|
|
48
|
-
Parameters
|
|
49
|
-
----------
|
|
50
|
-
key
|
|
51
|
-
The input key
|
|
52
|
-
|
|
53
49
|
Returns
|
|
54
50
|
-------
|
|
55
51
|
A tuple of exposure times
|
|
56
52
|
"""
|
|
57
|
-
exposure_times = tuple(sorted(
|
|
53
|
+
exposure_times = tuple(sorted(self.value_set))
|
|
58
54
|
return exposure_times
|
|
59
55
|
|
|
60
56
|
|
|
@@ -66,11 +62,10 @@ class ReadoutExposureTimeContainer(NamedTuple):
|
|
|
66
62
|
readout_exposure_time: float
|
|
67
63
|
|
|
68
64
|
|
|
69
|
-
class DarkReadoutExpTimePickyBud(
|
|
65
|
+
class DarkReadoutExpTimePickyBud(ListStem):
|
|
70
66
|
"""Parse exposure times to ensure existence of the necessary DARK exposure times."""
|
|
71
67
|
|
|
72
68
|
ReadoutExposureTime: ReadoutExposureTimeContainer = ReadoutExposureTimeContainer
|
|
73
|
-
key_to_petal_dict: dict[str | Path, ReadoutExposureTimeContainer] # For type hinting
|
|
74
69
|
|
|
75
70
|
def __init__(self):
|
|
76
71
|
super().__init__(stem_name=VispBudName.dark_readout_exp_time_picky_bud.value)
|
|
@@ -97,7 +92,7 @@ class DarkReadoutExpTimePickyBud(Stem):
|
|
|
97
92
|
is_dark=is_dark, is_polcal=is_polcal, readout_exposure_time=exposure_time
|
|
98
93
|
)
|
|
99
94
|
|
|
100
|
-
def getter(self
|
|
95
|
+
def getter(self) -> Type[Thorn]:
|
|
101
96
|
"""
|
|
102
97
|
Parse all exposure times and raise an error if any non-dark exposure time is missing from the set of dark exposure times.
|
|
103
98
|
|
|
@@ -110,7 +105,7 @@ class DarkReadoutExpTimePickyBud(Stem):
|
|
|
110
105
|
-------
|
|
111
106
|
Thorn
|
|
112
107
|
"""
|
|
113
|
-
readout_exp_tuples =
|
|
108
|
+
readout_exp_tuples = self.value_list
|
|
114
109
|
|
|
115
110
|
dark_readout_exp_times = {
|
|
116
111
|
exp_time.readout_exposure_time for exp_time in readout_exp_tuples if exp_time.is_dark
|
|
@@ -47,7 +47,7 @@ class DarkCalibration(VispTaskBase, BeamAccessMixin, QualityMixin):
|
|
|
47
47
|
None
|
|
48
48
|
|
|
49
49
|
"""
|
|
50
|
-
required_readout_exp_times = list(self.constants.
|
|
50
|
+
required_readout_exp_times = list(self.constants.non_dark_or_polcal_readout_exp_times)
|
|
51
51
|
logger.info(f"{required_readout_exp_times = }")
|
|
52
52
|
|
|
53
53
|
with self.telemetry_span(
|
|
@@ -254,7 +254,7 @@ Here is a set of example tests showing usage of all the patterns discussed above
|
|
|
254
254
|
task = dark_calibration_task
|
|
255
255
|
|
|
256
256
|
# This test needs some unique constants
|
|
257
|
-
init_visp_constants_db(task.recipe_run_id, VispConstantsDb(
|
|
257
|
+
init_visp_constants_db(task.recipe_run_id, VispConstantsDb(NON_DARK_OR_POLCAL_READOUT_EXP_TIMES=(10.,)))
|
|
258
258
|
|
|
259
259
|
assert True
|
|
260
260
|
|
|
@@ -63,7 +63,7 @@ class VispConstantsDb:
|
|
|
63
63
|
MAXIMUM_CADENCE: float = 10.0
|
|
64
64
|
VARIANCE_CADENCE: float = 0.0
|
|
65
65
|
WAVELENGTH: float = 588.0
|
|
66
|
-
|
|
66
|
+
NON_DARK_OR_POLCAL_READOUT_EXP_TIMES: tuple[float, ...] = (200.0, 2.0, 0.02)
|
|
67
67
|
LAMP_EXPOSURE_TIMES: tuple[float] = (100.0,)
|
|
68
68
|
SOLAR_EXPOSURE_TIMES: tuple[float] = (1.0,)
|
|
69
69
|
OBSERVE_EXPOSURE_TIMES: tuple[float] = (0.01,)
|
|
@@ -70,7 +70,7 @@ def write_darks_to_task(
|
|
|
70
70
|
def dark_calibration_task(tmp_path, init_visp_constants_db, recipe_run_id):
|
|
71
71
|
readout_exp_times = [0.02, 2.0, 200.0]
|
|
72
72
|
constants_db = VispConstantsDb(
|
|
73
|
-
|
|
73
|
+
NON_DARK_OR_POLCAL_READOUT_EXP_TIMES=tuple(readout_exp_times),
|
|
74
74
|
)
|
|
75
75
|
init_visp_constants_db(recipe_run_id, constants_db)
|
|
76
76
|
with DarkCalibration(
|
|
@@ -394,12 +394,13 @@ def test_parse_visp_input_data(
|
|
|
394
394
|
)
|
|
395
395
|
task = parse_task_with_no_data
|
|
396
396
|
write_input_cal_frames_to_task(task)
|
|
397
|
+
num_steps = 3
|
|
397
398
|
for obs_readout_exp_time, obs_exp_time in zip(observe_readout_exp_times, observe_exp_times):
|
|
398
399
|
write_input_observe_frames_to_task(
|
|
399
400
|
task,
|
|
400
401
|
num_maps=1,
|
|
401
402
|
num_modstates=num_modstates,
|
|
402
|
-
num_steps=
|
|
403
|
+
num_steps=num_steps,
|
|
403
404
|
readout_exp_time=obs_readout_exp_time,
|
|
404
405
|
exp_time=obs_exp_time,
|
|
405
406
|
arm_id=testing_arm_id,
|
|
@@ -421,10 +422,24 @@ def test_parse_visp_input_data(
|
|
|
421
422
|
assert (
|
|
422
423
|
len(list(task.read(tags=[Tag.input(), Tag.task_polcal()]))) == 6
|
|
423
424
|
) # 2 polcal observes, 2 darks, 2 gains
|
|
424
|
-
assert list(task.read(tags=[Tag.input(), Tag.task_observe()]))
|
|
425
425
|
assert len(list(task.read(tags=[Tag.input(), Tag.task_polcal_dark()]))) == 2 # 2 polcal darks
|
|
426
426
|
assert len(list(task.read(tags=[Tag.input(), Tag.task_polcal_gain()]))) == 2 # 2 polcal gains
|
|
427
427
|
|
|
428
|
+
for m in range(1, num_modstates + 1):
|
|
429
|
+
for s in range(num_steps):
|
|
430
|
+
assert len(
|
|
431
|
+
list(
|
|
432
|
+
task.read(
|
|
433
|
+
tags=[
|
|
434
|
+
Tag.input(),
|
|
435
|
+
Tag.task_observe(),
|
|
436
|
+
VispTag.modstate(m),
|
|
437
|
+
VispTag.raster_step(s),
|
|
438
|
+
]
|
|
439
|
+
)
|
|
440
|
+
)
|
|
441
|
+
) == len(observe_exp_times)
|
|
442
|
+
|
|
428
443
|
|
|
429
444
|
def test_parse_visp_input_data_constants(
|
|
430
445
|
parse_task_with_no_data,
|
|
@@ -515,6 +530,13 @@ def test_parse_visp_input_data_constants(
|
|
|
515
530
|
assert task.constants._db_dict["SOLAR_GAIN_GOS_LEVEL3_STATUS"] == "clear"
|
|
516
531
|
assert task.constants._db_dict["SOLAR_GAIN_NUM_RAW_FRAMES_PER_FPA"] == 10
|
|
517
532
|
assert task.constants._db_dict["POLCAL_NUM_RAW_FRAMES_PER_FPA"] == 10
|
|
533
|
+
expected_non_dark_polcal_readout_times = sorted(
|
|
534
|
+
[lamp_readout_exp_time, solar_readout_exp_time] + observe_readout_exp_times
|
|
535
|
+
)
|
|
536
|
+
assert (
|
|
537
|
+
task.constants._db_dict["NON_DARK_OR_POLCAL_READOUT_EXP_TIMES"]
|
|
538
|
+
== expected_non_dark_polcal_readout_times
|
|
539
|
+
)
|
|
518
540
|
|
|
519
541
|
|
|
520
542
|
def test_parse_visp_values(
|
|
@@ -584,7 +606,7 @@ def test_multiple_num_raster_steps_raises_error(
|
|
|
584
606
|
obs_dataset_class=VispHeadersMultiNumRasterSteps,
|
|
585
607
|
)
|
|
586
608
|
|
|
587
|
-
with pytest.raises(ValueError, match="
|
|
609
|
+
with pytest.raises(ValueError, match="Found multiple values for total number of raster steps"):
|
|
588
610
|
task()
|
|
589
611
|
|
|
590
612
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-visp
|
|
3
|
-
Version: 5.3.
|
|
3
|
+
Version: 5.3.1
|
|
4
4
|
Summary: Science processing code for the ViSP instrument on DKIST
|
|
5
5
|
Author-email: NSO / AURA <dkistdc@nso.edu>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -13,12 +13,12 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/x-rst
|
|
16
|
-
Requires-Dist: dkist-processing-common==12.0
|
|
16
|
+
Requires-Dist: dkist-processing-common==12.1.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.20.0
|
|
21
|
-
Requires-Dist: dkist-service-configuration==4.
|
|
21
|
+
Requires-Dist: dkist-service-configuration==4.2.0
|
|
22
22
|
Requires-Dist: dkist-spectral-lines==3.0.0
|
|
23
23
|
Requires-Dist: solar-wavelength-calibration==2.0.0
|
|
24
24
|
Requires-Dist: astropy==7.0.2
|
|
@@ -76,7 +76,7 @@ Requires-Dist: PyJWT==2.10.1; extra == "frozen"
|
|
|
76
76
|
Requires-Dist: PyYAML==6.0.3; extra == "frozen"
|
|
77
77
|
Requires-Dist: PyYAML-ft==8.0.0; extra == "frozen"
|
|
78
78
|
Requires-Dist: Pygments==2.19.2; extra == "frozen"
|
|
79
|
-
Requires-Dist: SQLAlchemy==2.0.
|
|
79
|
+
Requires-Dist: SQLAlchemy==2.0.46; extra == "frozen"
|
|
80
80
|
Requires-Dist: SQLAlchemy-JSONField==1.0.2; extra == "frozen"
|
|
81
81
|
Requires-Dist: SQLAlchemy-Utils==0.42.1; extra == "frozen"
|
|
82
82
|
Requires-Dist: a2wsgi==1.10.10; extra == "frozen"
|
|
@@ -84,7 +84,7 @@ Requires-Dist: aioftp==0.27.2; extra == "frozen"
|
|
|
84
84
|
Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
|
|
85
85
|
Requires-Dist: aiohttp==3.13.3; extra == "frozen"
|
|
86
86
|
Requires-Dist: aiosignal==1.4.0; extra == "frozen"
|
|
87
|
-
Requires-Dist: aiosmtplib==5.
|
|
87
|
+
Requires-Dist: aiosmtplib==5.1.0; extra == "frozen"
|
|
88
88
|
Requires-Dist: aiosqlite==0.21.0; extra == "frozen"
|
|
89
89
|
Requires-Dist: alembic==1.18.1; extra == "frozen"
|
|
90
90
|
Requires-Dist: amqp==5.3.1; extra == "frozen"
|
|
@@ -92,13 +92,13 @@ Requires-Dist: annotated-types==0.7.0; extra == "frozen"
|
|
|
92
92
|
Requires-Dist: anyio==4.12.1; extra == "frozen"
|
|
93
93
|
Requires-Dist: apache-airflow==3.1.6; extra == "frozen"
|
|
94
94
|
Requires-Dist: apache-airflow-core==3.1.6; extra == "frozen"
|
|
95
|
-
Requires-Dist: apache-airflow-providers-celery==3.15.
|
|
96
|
-
Requires-Dist: apache-airflow-providers-common-compat==1.
|
|
97
|
-
Requires-Dist: apache-airflow-providers-common-io==1.7.
|
|
98
|
-
Requires-Dist: apache-airflow-providers-common-sql==1.30.
|
|
99
|
-
Requires-Dist: apache-airflow-providers-postgres==6.5.
|
|
100
|
-
Requires-Dist: apache-airflow-providers-smtp==2.4.
|
|
101
|
-
Requires-Dist: apache-airflow-providers-standard==1.10.
|
|
95
|
+
Requires-Dist: apache-airflow-providers-celery==3.15.1; extra == "frozen"
|
|
96
|
+
Requires-Dist: apache-airflow-providers-common-compat==1.12.0; extra == "frozen"
|
|
97
|
+
Requires-Dist: apache-airflow-providers-common-io==1.7.1; extra == "frozen"
|
|
98
|
+
Requires-Dist: apache-airflow-providers-common-sql==1.30.3; extra == "frozen"
|
|
99
|
+
Requires-Dist: apache-airflow-providers-postgres==6.5.2; extra == "frozen"
|
|
100
|
+
Requires-Dist: apache-airflow-providers-smtp==2.4.2; extra == "frozen"
|
|
101
|
+
Requires-Dist: apache-airflow-providers-standard==1.10.3; extra == "frozen"
|
|
102
102
|
Requires-Dist: apache-airflow-task-sdk==1.1.6; extra == "frozen"
|
|
103
103
|
Requires-Dist: argcomplete==3.6.3; extra == "frozen"
|
|
104
104
|
Requires-Dist: asdf==3.5.0; extra == "frozen"
|
|
@@ -107,13 +107,13 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
|
|
|
107
107
|
Requires-Dist: asgiref==3.11.0; extra == "frozen"
|
|
108
108
|
Requires-Dist: asteval==1.0.8; extra == "frozen"
|
|
109
109
|
Requires-Dist: astropy==7.0.2; extra == "frozen"
|
|
110
|
-
Requires-Dist: astropy-iers-data==0.2026.1.
|
|
110
|
+
Requires-Dist: astropy-iers-data==0.2026.1.26.0.43.56; extra == "frozen"
|
|
111
111
|
Requires-Dist: asyncpg==0.31.0; extra == "frozen"
|
|
112
112
|
Requires-Dist: attrs==25.4.0; extra == "frozen"
|
|
113
113
|
Requires-Dist: babel==2.17.0; extra == "frozen"
|
|
114
114
|
Requires-Dist: billiard==4.2.4; extra == "frozen"
|
|
115
|
-
Requires-Dist: boto3==1.42.
|
|
116
|
-
Requires-Dist: botocore==1.42.
|
|
115
|
+
Requires-Dist: boto3==1.42.34; extra == "frozen"
|
|
116
|
+
Requires-Dist: botocore==1.42.34; extra == "frozen"
|
|
117
117
|
Requires-Dist: cadwyn==5.4.6; extra == "frozen"
|
|
118
118
|
Requires-Dist: celery==5.6.2; extra == "frozen"
|
|
119
119
|
Requires-Dist: certifi==2026.1.4; extra == "frozen"
|
|
@@ -131,14 +131,14 @@ Requires-Dist: cryptography==46.0.3; extra == "frozen"
|
|
|
131
131
|
Requires-Dist: cycler==0.12.1; extra == "frozen"
|
|
132
132
|
Requires-Dist: dacite==1.9.2; extra == "frozen"
|
|
133
133
|
Requires-Dist: decorator==5.2.1; extra == "frozen"
|
|
134
|
-
Requires-Dist: dill==0.4.
|
|
134
|
+
Requires-Dist: dill==0.4.1; extra == "frozen"
|
|
135
135
|
Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
|
|
136
|
-
Requires-Dist: dkist-processing-common==12.0
|
|
137
|
-
Requires-Dist: dkist-processing-core==7.0.
|
|
136
|
+
Requires-Dist: dkist-processing-common==12.1.0; extra == "frozen"
|
|
137
|
+
Requires-Dist: dkist-processing-core==7.0.1; extra == "frozen"
|
|
138
138
|
Requires-Dist: dkist-processing-math==2.2.1; extra == "frozen"
|
|
139
139
|
Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
|
|
140
|
-
Requires-Dist: dkist-processing-visp==5.3.
|
|
141
|
-
Requires-Dist: dkist-service-configuration==4.
|
|
140
|
+
Requires-Dist: dkist-processing-visp==5.3.1; extra == "frozen"
|
|
141
|
+
Requires-Dist: dkist-service-configuration==4.2.0; extra == "frozen"
|
|
142
142
|
Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
|
|
143
143
|
Requires-Dist: dkist_fits_specifications==4.20.0; extra == "frozen"
|
|
144
144
|
Requires-Dist: dnspython==2.8.0; extra == "frozen"
|
|
@@ -154,7 +154,7 @@ Requires-Dist: globus-sdk==4.3.1; extra == "frozen"
|
|
|
154
154
|
Requires-Dist: googleapis-common-protos==1.72.0; extra == "frozen"
|
|
155
155
|
Requires-Dist: gqlclient==1.2.3; extra == "frozen"
|
|
156
156
|
Requires-Dist: greenback==1.3.0; extra == "frozen"
|
|
157
|
-
Requires-Dist: greenlet==3.3.
|
|
157
|
+
Requires-Dist: greenlet==3.3.1; extra == "frozen"
|
|
158
158
|
Requires-Dist: grpcio==1.76.0; extra == "frozen"
|
|
159
159
|
Requires-Dist: h11==0.16.0; extra == "frozen"
|
|
160
160
|
Requires-Dist: httpcore==1.0.9; extra == "frozen"
|
|
@@ -165,7 +165,7 @@ Requires-Dist: idna==3.11; extra == "frozen"
|
|
|
165
165
|
Requires-Dist: imageio-ffmpeg==0.6.0; extra == "frozen"
|
|
166
166
|
Requires-Dist: importlib_metadata==8.7.1; extra == "frozen"
|
|
167
167
|
Requires-Dist: itsdangerous==2.2.0; extra == "frozen"
|
|
168
|
-
Requires-Dist: jmespath==1.0
|
|
168
|
+
Requires-Dist: jmespath==1.1.0; extra == "frozen"
|
|
169
169
|
Requires-Dist: joblib==1.5.3; extra == "frozen"
|
|
170
170
|
Requires-Dist: jsonschema==4.26.0; extra == "frozen"
|
|
171
171
|
Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
|
|
@@ -186,7 +186,7 @@ Requires-Dist: methodtools==0.4.7; extra == "frozen"
|
|
|
186
186
|
Requires-Dist: more-itertools==10.8.0; extra == "frozen"
|
|
187
187
|
Requires-Dist: moviepy==2.1.2; extra == "frozen"
|
|
188
188
|
Requires-Dist: msgspec==0.20.0; extra == "frozen"
|
|
189
|
-
Requires-Dist: multidict==6.7.
|
|
189
|
+
Requires-Dist: multidict==6.7.1; extra == "frozen"
|
|
190
190
|
Requires-Dist: natsort==8.4.0; extra == "frozen"
|
|
191
191
|
Requires-Dist: nbformat==5.10.4; extra == "frozen"
|
|
192
192
|
Requires-Dist: networkx==3.6.1; extra == "frozen"
|
|
@@ -217,9 +217,9 @@ Requires-Dist: opentelemetry-sdk==1.39.1; extra == "frozen"
|
|
|
217
217
|
Requires-Dist: opentelemetry-semantic-conventions==0.60b1; extra == "frozen"
|
|
218
218
|
Requires-Dist: opentelemetry-util-http==0.60b1; extra == "frozen"
|
|
219
219
|
Requires-Dist: outcome==1.3.0.post0; extra == "frozen"
|
|
220
|
-
Requires-Dist: packaging==
|
|
221
|
-
Requires-Dist: pandas==
|
|
222
|
-
Requires-Dist: parfive==2.
|
|
220
|
+
Requires-Dist: packaging==26.0; extra == "frozen"
|
|
221
|
+
Requires-Dist: pandas==3.0.0; extra == "frozen"
|
|
222
|
+
Requires-Dist: parfive==2.3.0; extra == "frozen"
|
|
223
223
|
Requires-Dist: pathspec==1.0.3; extra == "frozen"
|
|
224
224
|
Requires-Dist: pendulum==3.1.0; extra == "frozen"
|
|
225
225
|
Requires-Dist: pika==1.3.2; extra == "frozen"
|
|
@@ -235,23 +235,23 @@ Requires-Dist: propcache==0.4.1; extra == "frozen"
|
|
|
235
235
|
Requires-Dist: protobuf==6.33.4; extra == "frozen"
|
|
236
236
|
Requires-Dist: psutil==7.2.1; extra == "frozen"
|
|
237
237
|
Requires-Dist: psycopg2-binary==2.9.11; extra == "frozen"
|
|
238
|
-
Requires-Dist: pycparser==
|
|
238
|
+
Requires-Dist: pycparser==3.0; extra == "frozen"
|
|
239
239
|
Requires-Dist: pydantic==2.12.5; extra == "frozen"
|
|
240
240
|
Requires-Dist: pydantic-settings==2.12.0; extra == "frozen"
|
|
241
241
|
Requires-Dist: pydantic_core==2.41.5; extra == "frozen"
|
|
242
242
|
Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
|
|
243
243
|
Requires-Dist: pygtrie==2.5.0; extra == "frozen"
|
|
244
|
-
Requires-Dist: pyparsing==3.3.
|
|
244
|
+
Requires-Dist: pyparsing==3.3.2; extra == "frozen"
|
|
245
245
|
Requires-Dist: python-daemon==3.1.2; extra == "frozen"
|
|
246
246
|
Requires-Dist: python-dateutil==2.9.0.post0; extra == "frozen"
|
|
247
247
|
Requires-Dist: python-dotenv==1.2.1; extra == "frozen"
|
|
248
|
-
Requires-Dist: python-multipart==0.0.
|
|
248
|
+
Requires-Dist: python-multipart==0.0.22; extra == "frozen"
|
|
249
249
|
Requires-Dist: python-slugify==8.0.4; extra == "frozen"
|
|
250
250
|
Requires-Dist: pytz==2025.2; extra == "frozen"
|
|
251
251
|
Requires-Dist: redis==6.4.0; extra == "frozen"
|
|
252
252
|
Requires-Dist: referencing==0.37.0; extra == "frozen"
|
|
253
253
|
Requires-Dist: requests==2.32.5; extra == "frozen"
|
|
254
|
-
Requires-Dist: rich==14.
|
|
254
|
+
Requires-Dist: rich==14.3.1; extra == "frozen"
|
|
255
255
|
Requires-Dist: rich-argparse==1.7.2; extra == "frozen"
|
|
256
256
|
Requires-Dist: rich-toolkit==0.17.1; extra == "frozen"
|
|
257
257
|
Requires-Dist: rpds-py==0.30.0; extra == "frozen"
|
|
@@ -287,7 +287,7 @@ Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
|
|
|
287
287
|
Requires-Dist: tzdata==2025.3; extra == "frozen"
|
|
288
288
|
Requires-Dist: tzlocal==5.3.1; extra == "frozen"
|
|
289
289
|
Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
|
|
290
|
-
Requires-Dist: uncertainties==3.2.
|
|
290
|
+
Requires-Dist: uncertainties==3.2.3; extra == "frozen"
|
|
291
291
|
Requires-Dist: universal_pathlib==0.2.6; extra == "frozen"
|
|
292
292
|
Requires-Dist: urllib3==2.6.3; extra == "frozen"
|
|
293
293
|
Requires-Dist: uuid6==2025.0.1; extra == "frozen"
|
|
@@ -296,7 +296,7 @@ Requires-Dist: uvloop==0.22.1; extra == "frozen"
|
|
|
296
296
|
Requires-Dist: vine==5.1.0; extra == "frozen"
|
|
297
297
|
Requires-Dist: voluptuous==0.16.0; extra == "frozen"
|
|
298
298
|
Requires-Dist: watchfiles==1.1.1; extra == "frozen"
|
|
299
|
-
Requires-Dist: wcwidth==0.
|
|
299
|
+
Requires-Dist: wcwidth==0.4.0; extra == "frozen"
|
|
300
300
|
Requires-Dist: websockets==16.0; extra == "frozen"
|
|
301
301
|
Requires-Dist: wirerope==1.0.0; extra == "frozen"
|
|
302
302
|
Requires-Dist: wrapt==1.17.3; extra == "frozen"
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
changelog/.gitempty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
changelog/261.misc.rst,sha256=qftQKbZtkNBq5aH3JiQo4Et_za0vq1YZnikiEbbIQYc,63
|
|
3
2
|
dkist_processing_visp/__init__.py,sha256=LC8o31oTIro4F7IgwoWalX1W3KcPU27yJhlDUeGqcwA,351
|
|
4
3
|
dkist_processing_visp/config.py,sha256=GMr0CreW4qavbueTtsH_Gx5P52v4yZd2PNKyPmxBKQE,478
|
|
5
4
|
dkist_processing_visp/fonts/Lato-Regular.ttf,sha256=1jbkaDIx-THtoiLViOlE0IK_0726AvkovuRhwPGFslE,656568
|
|
6
5
|
dkist_processing_visp/models/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
|
|
7
|
-
dkist_processing_visp/models/constants.py,sha256=
|
|
6
|
+
dkist_processing_visp/models/constants.py,sha256=zfwmBW-DjeizMSeruFBJCabWU6cepKOk38M_C8kvArM,6933
|
|
8
7
|
dkist_processing_visp/models/fits_access.py,sha256=8uKaUgtapyED-WgJCeswrIqEGy4Ob6ekBmiyBqF6yIE,573
|
|
9
8
|
dkist_processing_visp/models/metric_code.py,sha256=L_VJ-l5RXsYgcEIOO6hsez1a5oL5FqTnoVKZ0z7NKng,266
|
|
10
9
|
dkist_processing_visp/models/parameters.py,sha256=kiYzvXjsQo1EFEGHJUdeYj170tq_CeVqrrtD01E1fmQ,16967
|
|
@@ -12,17 +11,17 @@ dkist_processing_visp/models/tags.py,sha256=Pdc-E2wNlaqRzAJgQF_KHUe_xzqDrUfp1IB0
|
|
|
12
11
|
dkist_processing_visp/models/task_name.py,sha256=6iZ5j8_beOI8DMoEemxG3dra63a93q0vbjcypb_H9wE,281
|
|
13
12
|
dkist_processing_visp/parsers/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOgcDttYtog_jx4yN5I,12
|
|
14
13
|
dkist_processing_visp/parsers/map_repeats.py,sha256=YuO1VROQLuE-Hn9hSzityjNhIDe-EgQ4kjZV6l9xF2Q,5468
|
|
15
|
-
dkist_processing_visp/parsers/modulator_states.py,sha256=
|
|
14
|
+
dkist_processing_visp/parsers/modulator_states.py,sha256=b5GepRQZAAbk9-qo3nMYdiXoq8BwyO6jkGKI5b7nW5c,2843
|
|
16
15
|
dkist_processing_visp/parsers/polarimeter_mode.py,sha256=vOE8IYlBrgAFGSrDbpUDfHnI3OTPBDpd3U_j5totZb8,625
|
|
17
|
-
dkist_processing_visp/parsers/raster_step.py,sha256=
|
|
18
|
-
dkist_processing_visp/parsers/spectrograph_configuration.py,sha256=
|
|
19
|
-
dkist_processing_visp/parsers/time.py,sha256=
|
|
16
|
+
dkist_processing_visp/parsers/raster_step.py,sha256=pJEnv3M5FnUU5B7Coj7czQxWUVWE2iVXdfRKo9kZfsw,2947
|
|
17
|
+
dkist_processing_visp/parsers/spectrograph_configuration.py,sha256=zAk3N_AtyacGw2E4GSDCxb_j1i5HUJbtwOvJj_lAVC4,3110
|
|
18
|
+
dkist_processing_visp/parsers/time.py,sha256=XQrVxgWwCDyoXfzmihQz2gy2ibLEpD87YLAT_OGkniM,4661
|
|
20
19
|
dkist_processing_visp/parsers/visp_l0_fits_access.py,sha256=WDAgMp_70AKmzxGqboKA3McSGgF_mvgsGiihYmK1Nus,1973
|
|
21
20
|
dkist_processing_visp/parsers/visp_l1_fits_access.py,sha256=1MrFfsJjT_7fd1cj8tFr5rHX2JdRSrlwiMCzu-Q8ejY,860
|
|
22
21
|
dkist_processing_visp/tasks/__init__.py,sha256=wleMYKy1OmAJdvxmPCwtktM0koSLS5Vnd2H8C2uLdjQ,798
|
|
23
22
|
dkist_processing_visp/tasks/assemble_movie.py,sha256=8UujniXlV_sSGeuISud8wMHihLy6Gc5fKZpwkXLUQB8,3330
|
|
24
23
|
dkist_processing_visp/tasks/background_light.py,sha256=qQ3r1LR5qaOz2qNHnO5_QK8l1zbVP0GaCS3aLqJfNYY,16201
|
|
25
|
-
dkist_processing_visp/tasks/dark.py,sha256=
|
|
24
|
+
dkist_processing_visp/tasks/dark.py,sha256=x-XS23G5IIhiQ2jcELliTNRhhc5ZzSt5amnvwCJXoUA,4339
|
|
26
25
|
dkist_processing_visp/tasks/geometric.py,sha256=n2Wiy7QovA8V0gkORnQ9LX8lgb-amqE-M_mKr1u4HNY,48934
|
|
27
26
|
dkist_processing_visp/tasks/instrument_polarization.py,sha256=uj7iyzM3CiJcbQeF4eKpk_KCoheXaM4FpDI83GYDld4,25854
|
|
28
27
|
dkist_processing_visp/tasks/l1_output_data.py,sha256=vl_c52noozeu4N-BbfpsIHFc5q6JATQ9r4iLa3MDtDI,8347
|
|
@@ -39,14 +38,14 @@ dkist_processing_visp/tasks/mixin/__init__.py,sha256=z2nFVvvIzirxklQ9i5-F1nR-WOg
|
|
|
39
38
|
dkist_processing_visp/tasks/mixin/beam_access.py,sha256=1VSJkH6yMxCiZWdWOp_RJ37fX5ULMYmB_0_ulT7YJpI,870
|
|
40
39
|
dkist_processing_visp/tasks/mixin/corrections.py,sha256=FhLFgD9ZYLZd3SaC3PFF-szrcs-zmdrUYNDUEK-h7JA,7145
|
|
41
40
|
dkist_processing_visp/tasks/mixin/downsample.py,sha256=SvKzY6HJRn-FeyG7O6HPvyOS5dmMu6uPoWkfnpPXpVw,1344
|
|
42
|
-
dkist_processing_visp/tests/README.rst,sha256=
|
|
41
|
+
dkist_processing_visp/tests/README.rst,sha256=RTFqJmeEQG-49eolwaQrrUrxzbBvLjIpX2mXrgr2hw8,12507
|
|
43
42
|
dkist_processing_visp/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
-
dkist_processing_visp/tests/conftest.py,sha256
|
|
43
|
+
dkist_processing_visp/tests/conftest.py,sha256=-iErDGw_7pUda7iWNIigfNbvq5vOtbqAe18KAkIwRlQ,19407
|
|
45
44
|
dkist_processing_visp/tests/header_models.py,sha256=gD1FUo5TtY_EMSnpWvkrJIOsckkgRAD-e1mthPCdiOw,21687
|
|
46
45
|
dkist_processing_visp/tests/test_assemble_movie.py,sha256=T5EZzdB3sNY4HcSkN2W1ZBDaI4a68ZUNqPB-JpANSQ0,2247
|
|
47
46
|
dkist_processing_visp/tests/test_assemble_quality.py,sha256=i2INzb73BM14A6VKD70eb5vaAv5_QjPy3VVVb4lonkc,4314
|
|
48
47
|
dkist_processing_visp/tests/test_background_light.py,sha256=Zvm8s38qx_ybviEhnKqPI4s36VFBJKtsNrp31-o8lEQ,17553
|
|
49
|
-
dkist_processing_visp/tests/test_dark.py,sha256=
|
|
48
|
+
dkist_processing_visp/tests/test_dark.py,sha256=tlT2u2E_esqFO-0FJxYZLqx4G5RHu-AecW-WbqiKo-o,5557
|
|
50
49
|
dkist_processing_visp/tests/test_downsample.py,sha256=iSmb4PwpZtnVU06tmlko1wwepWueQ3KJ459XYgNIpws,2211
|
|
51
50
|
dkist_processing_visp/tests/test_fits_access.py,sha256=jOaSHDydzPl48SSBxt3z3CtCzBgCmSCc3rZ92CpoAaY,1822
|
|
52
51
|
dkist_processing_visp/tests/test_geometric.py,sha256=H3oqFPHSPfgJVRZUqD1DIs7DanIVei9-oTsJuiHA4SY,13850
|
|
@@ -55,7 +54,7 @@ dkist_processing_visp/tests/test_lamp.py,sha256=19mRN8drAg0tqQGwSbSUDlpryqYjMvmf
|
|
|
55
54
|
dkist_processing_visp/tests/test_make_movie_frames.py,sha256=huQ5n0YneHByKumM_Ye9tekqKeh-F-e6MQoudOP3S-g,2628
|
|
56
55
|
dkist_processing_visp/tests/test_map_repeats.py,sha256=9g3NnvSfn1OqxxYYxTFoOIi1UsCOa6mZjiuGkbxUvTg,7611
|
|
57
56
|
dkist_processing_visp/tests/test_parameters.py,sha256=kIwOak4PURFc6yNT9R1rLxfb4x5FbqSlfi3FF-krrGo,8314
|
|
58
|
-
dkist_processing_visp/tests/test_parse.py,sha256=
|
|
57
|
+
dkist_processing_visp/tests/test_parse.py,sha256=vRZnfIVNURHa220rEHts5vYHvXAcx_kF-A-v0EdFA60,24104
|
|
59
58
|
dkist_processing_visp/tests/test_quality.py,sha256=YW24VjEHoILseFIXZBp4-o7egT26mfT1lafzajVjXu8,6905
|
|
60
59
|
dkist_processing_visp/tests/test_science.py,sha256=B8bbtVTxJIXiPssIbJchPLbzVTPCAzpLAgn5DhpYCn0,26106
|
|
61
60
|
dkist_processing_visp/tests/test_solar.py,sha256=f5tk8RGOoC7fcxqp3s01p6I55iIDJBioKSXC1S56KMQ,16632
|
|
@@ -92,7 +91,7 @@ docs/science_calibration.rst,sha256=VN_g7xSjN-nbXhlBaFnPCbNcsc_Qu0207jEUfRAjnBE,
|
|
|
92
91
|
docs/scientific_changelog.rst,sha256=01AWBSHg8zElnodCgAq-hMxhk9CkX5rtEENx4iz0sjI,300
|
|
93
92
|
docs/wavelength_calibration.rst,sha256=OSGYAeR8Acns2ZUectHzRj2xcAsuNEMLejcYfPYu-vw,3674
|
|
94
93
|
licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
|
|
95
|
-
dkist_processing_visp-5.3.
|
|
96
|
-
dkist_processing_visp-5.3.
|
|
97
|
-
dkist_processing_visp-5.3.
|
|
98
|
-
dkist_processing_visp-5.3.
|
|
94
|
+
dkist_processing_visp-5.3.1.dist-info/METADATA,sha256=Tb72myj6YJ4SByw8Wufb9VUIvBREZ98WvbgPjtJ61sM,29498
|
|
95
|
+
dkist_processing_visp-5.3.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
96
|
+
dkist_processing_visp-5.3.1.dist-info/top_level.txt,sha256=9GHSn-ZMGQxaRNGrPP3HNc5ZkE7ftzluO74Jz5vUSTE,46
|
|
97
|
+
dkist_processing_visp-5.3.1.dist-info/RECORD,,
|
changelog/261.misc.rst
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Upgrade to use Airflow 3 and a minimum python version of 3.13.
|
{dkist_processing_visp-5.3.0rc5.dist-info → dkist_processing_visp-5.3.1.dist-info}/top_level.txt
RENAMED
|
File without changes
|