dkist-processing-test 1.26.5__py3-none-any.whl → 1.26.6rc1__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-test might be problematic. Click here for more details.
- dkist_processing_test/models/parameters.py +9 -3
- dkist_processing_test/tasks/fake_science.py +2 -3
- dkist_processing_test/tests/test_tasks.py +149 -47
- {dkist_processing_test-1.26.5.dist-info → dkist_processing_test-1.26.6rc1.dist-info}/METADATA +15 -14
- {dkist_processing_test-1.26.5.dist-info → dkist_processing_test-1.26.6rc1.dist-info}/RECORD +7 -9
- dkist_processing_test/tests/parameter_models.py +0 -130
- dkist_processing_test/tests/test_parameters.py +0 -151
- {dkist_processing_test-1.26.5.dist-info → dkist_processing_test-1.26.6rc1.dist-info}/WHEEL +0 -0
- {dkist_processing_test-1.26.5.dist-info → dkist_processing_test-1.26.6rc1.dist-info}/top_level.txt +0 -0
|
@@ -2,6 +2,8 @@ import json
|
|
|
2
2
|
from datetime import datetime
|
|
3
3
|
|
|
4
4
|
import numpy as np
|
|
5
|
+
from dkist_processing_common.codecs.json import json_decoder
|
|
6
|
+
from dkist_processing_common.models.input_dataset import InputDatasetFilePointer
|
|
5
7
|
from dkist_processing_common.models.parameters import ParameterBase
|
|
6
8
|
from dkist_processing_common.models.parameters import ParameterWavelengthMixin
|
|
7
9
|
|
|
@@ -9,6 +11,12 @@ from dkist_processing_common.models.parameters import ParameterWavelengthMixin
|
|
|
9
11
|
class TestParameters(ParameterBase, ParameterWavelengthMixin):
|
|
10
12
|
"""Class to test loading parameters from a file."""
|
|
11
13
|
|
|
14
|
+
def _load_param_value_from_json_file(self, param_obj: InputDatasetFilePointer) -> np.ndarray:
|
|
15
|
+
"""Return the data associated with a tagged parameter file saved with a sting message."""
|
|
16
|
+
tag = param_obj.file_pointer.tag
|
|
17
|
+
param_value = self._read_parameter_file(tag=tag, decoder=json_decoder)
|
|
18
|
+
return param_value
|
|
19
|
+
|
|
12
20
|
@property
|
|
13
21
|
def randomness(self) -> (float, float):
|
|
14
22
|
"""A dummy parameter that requires loading a file."""
|
|
@@ -44,8 +52,6 @@ class TestParameters(ParameterBase, ParameterWavelengthMixin):
|
|
|
44
52
|
def file_message(self) -> str:
|
|
45
53
|
"""A dummy parameter that returns a message from a file."""
|
|
46
54
|
param_dict = self._find_most_recent_past_value("test_message_file")
|
|
47
|
-
|
|
48
|
-
with open(file_path, "r") as f:
|
|
49
|
-
message = json.load(f)
|
|
55
|
+
message = self._load_param_value_from_json_file(param_dict)
|
|
50
56
|
|
|
51
57
|
return message
|
|
@@ -9,7 +9,6 @@ from dkist_processing_common.codecs.fits import fits_hdulist_encoder
|
|
|
9
9
|
from dkist_processing_common.codecs.json import json_encoder
|
|
10
10
|
from dkist_processing_common.models.tags import Tag
|
|
11
11
|
from dkist_processing_common.tasks import WorkflowTaskBase
|
|
12
|
-
from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
|
|
13
12
|
from dkist_service_configuration.logging import logger
|
|
14
13
|
|
|
15
14
|
from dkist_processing_test.models.parameters import TestParameters
|
|
@@ -17,7 +16,7 @@ from dkist_processing_test.models.parameters import TestParameters
|
|
|
17
16
|
__all__ = ["GenerateCalibratedData"]
|
|
18
17
|
|
|
19
18
|
|
|
20
|
-
class GenerateCalibratedData(WorkflowTaskBase
|
|
19
|
+
class GenerateCalibratedData(WorkflowTaskBase):
|
|
21
20
|
|
|
22
21
|
record_provenance = True
|
|
23
22
|
|
|
@@ -33,7 +32,7 @@ class GenerateCalibratedData(WorkflowTaskBase, InputDatasetMixin):
|
|
|
33
32
|
workflow_version=workflow_version,
|
|
34
33
|
)
|
|
35
34
|
self.parameters = TestParameters(
|
|
36
|
-
self.
|
|
35
|
+
scratch=self.scratch,
|
|
37
36
|
obs_ip_start_time=self.constants.obs_ip_start_time,
|
|
38
37
|
wavelength=2.0,
|
|
39
38
|
)
|
|
@@ -16,11 +16,17 @@ from astropy.io import fits
|
|
|
16
16
|
from dkist_data_simulator.spec122 import Spec122Dataset
|
|
17
17
|
from dkist_header_validator import spec122_validator
|
|
18
18
|
from dkist_processing_common._util.scratch import WorkflowFileSystem
|
|
19
|
+
from dkist_processing_common.codecs.basemodel import basemodel_encoder
|
|
19
20
|
from dkist_processing_common.codecs.fits import fits_hdu_decoder
|
|
20
21
|
from dkist_processing_common.codecs.fits import fits_hdulist_encoder
|
|
21
22
|
from dkist_processing_common.codecs.json import json_encoder
|
|
22
23
|
from dkist_processing_common.models.constants import BudName
|
|
23
24
|
from dkist_processing_common.models.constants import ConstantsBase
|
|
25
|
+
from dkist_processing_common.models.input_dataset import InputDatasetFilePointer
|
|
26
|
+
from dkist_processing_common.models.input_dataset import InputDatasetObject
|
|
27
|
+
from dkist_processing_common.models.input_dataset import InputDatasetParameter
|
|
28
|
+
from dkist_processing_common.models.input_dataset import InputDatasetParameterValue
|
|
29
|
+
from dkist_processing_common.models.input_dataset import InputDatasetPartDocumentList
|
|
24
30
|
from dkist_processing_common.models.tags import Tag
|
|
25
31
|
from dkist_processing_common.models.task_name import TaskName
|
|
26
32
|
from dkist_processing_common.tasks import TransferTrialData
|
|
@@ -38,10 +44,6 @@ from dkist_processing_test.tasks.noop import NoOpTask
|
|
|
38
44
|
from dkist_processing_test.tasks.write_l1 import WriteL1Data
|
|
39
45
|
from dkist_processing_test.tests.conftest import generate_214_l0_fits_frame
|
|
40
46
|
from dkist_processing_test.tests.conftest import S122Headers
|
|
41
|
-
from dkist_processing_test.tests.parameter_models import MultipleParameterValues
|
|
42
|
-
from dkist_processing_test.tests.parameter_models import ParameterValue
|
|
43
|
-
from dkist_processing_test.tests.parameter_models import RawFileParameterValue
|
|
44
|
-
from dkist_processing_test.tests.parameter_models import TestParameterValues
|
|
45
47
|
|
|
46
48
|
|
|
47
49
|
@dataclass
|
|
@@ -143,7 +145,7 @@ def generate_calibrated_data_task(
|
|
|
143
145
|
)
|
|
144
146
|
|
|
145
147
|
# Write parameter files
|
|
146
|
-
hdul = random_parameter_hdulist
|
|
148
|
+
hdul, _, _, _ = random_parameter_hdulist
|
|
147
149
|
task.write(
|
|
148
150
|
data=hdul,
|
|
149
151
|
tags=Tag.parameter(array_parameter_file_object_key),
|
|
@@ -171,69 +173,169 @@ def generate_calibrated_data_task(
|
|
|
171
173
|
|
|
172
174
|
|
|
173
175
|
@pytest.fixture(scope="session")
|
|
174
|
-
def
|
|
175
|
-
array_parameter_file_object_key
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
176
|
+
def array_file_parameter(
|
|
177
|
+
random_parameter_hdulist, array_parameter_file_object_key
|
|
178
|
+
) -> tuple[list[InputDatasetParameterValue], float, float, float]:
|
|
179
|
+
hdul, mu, std, const = random_parameter_hdulist
|
|
180
|
+
|
|
181
|
+
parameter_array_file_values = [
|
|
182
|
+
InputDatasetParameterValue(
|
|
183
|
+
parameterValueId=randint(1000, 2000),
|
|
184
|
+
parameterValue=InputDatasetFilePointer(
|
|
185
|
+
file_pointer=InputDatasetObject(
|
|
186
|
+
objectKey=array_parameter_file_object_key,
|
|
187
|
+
bucket="not_used",
|
|
188
|
+
tag=Tag.parameter(array_parameter_file_object_key),
|
|
189
|
+
)
|
|
190
|
+
).model_dump_json(),
|
|
191
|
+
parameterValueStartDate=datetime(1946, 11, 20),
|
|
192
|
+
)
|
|
193
|
+
]
|
|
194
|
+
return parameter_array_file_values, mu, std, const
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
@pytest.fixture(scope="session")
|
|
198
|
+
def wavelength_parameter() -> list[InputDatasetParameterValue]:
|
|
199
|
+
value = {"wavelength": (1.0, 2.0, 3.0), "values": ("one", "two", "three")}
|
|
200
|
+
|
|
201
|
+
parameter_value = [
|
|
202
|
+
InputDatasetParameterValue(
|
|
203
|
+
parameter_value_id=randint(1000, 2000),
|
|
204
|
+
parameter_value=json.dumps(value),
|
|
205
|
+
parameter_value_start_date=datetime(1946, 11, 20),
|
|
206
|
+
)
|
|
207
|
+
]
|
|
208
|
+
return parameter_value
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
@pytest.fixture(scope="session")
|
|
212
|
+
def message_parameters(
|
|
213
|
+
early_value_message_str, late_value_message_str, early_date, late_date
|
|
214
|
+
) -> list[InputDatasetParameterValue]:
|
|
215
|
+
parameter_values = [
|
|
216
|
+
InputDatasetParameterValue(
|
|
217
|
+
parameterValueId=randint(1000, 2000),
|
|
218
|
+
parameterValue=json.dumps(early_value_message_str),
|
|
219
|
+
parameterValueStartDate=early_date,
|
|
220
|
+
),
|
|
221
|
+
InputDatasetParameterValue(
|
|
222
|
+
parameterValueId=randint(1000, 2000),
|
|
223
|
+
parameterValue=json.dumps(late_value_message_str),
|
|
224
|
+
parameterValueStartDate=late_date,
|
|
225
|
+
),
|
|
226
|
+
]
|
|
227
|
+
return parameter_values
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
@pytest.fixture(scope="session")
|
|
231
|
+
def message_file_parameters(
|
|
232
|
+
early_json_parameter_file_object_key, late_json_parameter_file_object_key, early_date, late_date
|
|
233
|
+
) -> list[InputDatasetParameterValue]:
|
|
234
|
+
parameter_values = [
|
|
235
|
+
InputDatasetParameterValue(
|
|
236
|
+
parameterValueId=randint(1000, 2000),
|
|
237
|
+
parameterValue=InputDatasetFilePointer(
|
|
238
|
+
file_pointer=InputDatasetObject(
|
|
239
|
+
objectKey=early_json_parameter_file_object_key,
|
|
240
|
+
bucket="not_used",
|
|
241
|
+
tag=Tag.parameter(early_json_parameter_file_object_key),
|
|
242
|
+
)
|
|
243
|
+
).model_dump_json(),
|
|
244
|
+
parameterValueStartDate=early_date,
|
|
245
|
+
),
|
|
246
|
+
InputDatasetParameterValue(
|
|
247
|
+
parameterValueId=randint(1000, 2000),
|
|
248
|
+
parameterValue=InputDatasetFilePointer(
|
|
249
|
+
file_pointer=InputDatasetObject(
|
|
250
|
+
objectKey=late_json_parameter_file_object_key,
|
|
251
|
+
bucket="not_used",
|
|
252
|
+
tag=Tag.parameter(late_json_parameter_file_object_key),
|
|
253
|
+
)
|
|
254
|
+
).model_dump_json(),
|
|
255
|
+
parameterValueStartDate=late_date,
|
|
256
|
+
),
|
|
257
|
+
]
|
|
258
|
+
return parameter_values
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
@pytest.fixture(scope="session")
|
|
262
|
+
def input_dataset_document_parameters_part_basemodel(
|
|
263
|
+
array_file_parameter,
|
|
264
|
+
wavelength_parameter,
|
|
265
|
+
message_parameters,
|
|
266
|
+
message_file_parameters,
|
|
182
267
|
):
|
|
268
|
+
parameter_array_file_values, _, _, _ = array_file_parameter
|
|
269
|
+
|
|
270
|
+
parameter_wavelength_values = wavelength_parameter
|
|
271
|
+
|
|
272
|
+
parameter_message_values = message_parameters
|
|
183
273
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
parameterValueStartDate=early_date,
|
|
274
|
+
parameter_file_values = message_file_parameters
|
|
275
|
+
|
|
276
|
+
parameters_obj = InputDatasetPartDocumentList(
|
|
277
|
+
doc_list=[
|
|
278
|
+
InputDatasetParameter(
|
|
279
|
+
parameter_name="test_random_data", parameter_values=parameter_array_file_values
|
|
191
280
|
),
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
281
|
+
InputDatasetParameter(
|
|
282
|
+
parameter_name="test_wavelength_category",
|
|
283
|
+
parameter_values=parameter_wavelength_values,
|
|
195
284
|
),
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
message_value_values = MultipleParameterValues(
|
|
199
|
-
parameter_value_list=[
|
|
200
|
-
ParameterValue(
|
|
201
|
-
parameterValue=early_value_message_str,
|
|
202
|
-
parameterValueStartDate=early_date,
|
|
285
|
+
InputDatasetParameter(
|
|
286
|
+
parameter_name="test_message", parameter_values=parameter_message_values
|
|
203
287
|
),
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
parameterValueStartDate=late_date,
|
|
288
|
+
InputDatasetParameter(
|
|
289
|
+
parameter_name="test_message_file", parameter_values=parameter_file_values
|
|
207
290
|
),
|
|
208
291
|
]
|
|
209
292
|
)
|
|
210
|
-
parameters_obj = TestParameterValues(
|
|
211
|
-
test_random_data=RawFileParameterValue(objectKey=array_parameter_file_object_key),
|
|
212
|
-
test_message_file=message_file_values,
|
|
213
|
-
test_message=message_value_values,
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
part_json_str = parameters_obj.model_dump_json()
|
|
217
293
|
|
|
218
|
-
return
|
|
294
|
+
return parameters_obj
|
|
219
295
|
|
|
220
296
|
|
|
221
297
|
@pytest.fixture(scope="session")
|
|
222
298
|
def assign_input_dataset_doc_to_task(
|
|
223
|
-
|
|
299
|
+
input_dataset_document_parameters_part_basemodel,
|
|
224
300
|
):
|
|
225
301
|
def update_task(task, obs_ip_start_time=None):
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
302
|
+
task.write(
|
|
303
|
+
data=input_dataset_document_parameters_part_basemodel,
|
|
304
|
+
tags=Tag.input_dataset_parameters(),
|
|
305
|
+
encoder=basemodel_encoder,
|
|
306
|
+
)
|
|
230
307
|
task.parameters = TestParameters(
|
|
231
|
-
task.
|
|
308
|
+
scratch=task.scratch, wavelength=2.0, obs_ip_start_time=obs_ip_start_time
|
|
232
309
|
)
|
|
233
310
|
|
|
234
311
|
return update_task
|
|
235
312
|
|
|
236
313
|
|
|
314
|
+
@pytest.mark.parametrize("early_or_late", [pytest.param("early")])
|
|
315
|
+
def test_generate_calibrated_data_parameters(
|
|
316
|
+
generate_calibrated_data_task,
|
|
317
|
+
array_file_parameter,
|
|
318
|
+
early_file_message_str,
|
|
319
|
+
early_value_message_str,
|
|
320
|
+
early_or_late,
|
|
321
|
+
):
|
|
322
|
+
"""
|
|
323
|
+
Given: A GenerateCalibratedData task
|
|
324
|
+
When: Accessing the task's parameters
|
|
325
|
+
Then: The correct values are returned
|
|
326
|
+
"""
|
|
327
|
+
task, _ = generate_calibrated_data_task
|
|
328
|
+
_, mu, std, const = array_file_parameter
|
|
329
|
+
|
|
330
|
+
assert type(task.parameters.randomness) is tuple
|
|
331
|
+
np.testing.assert_allclose(np.array(task.parameters.randomness), np.array([mu, std]), rtol=1)
|
|
332
|
+
|
|
333
|
+
assert task.parameters.constant == const
|
|
334
|
+
assert task.parameters.wavelength_category == "two"
|
|
335
|
+
assert task.parameters.value_message == early_value_message_str
|
|
336
|
+
assert task.parameters.file_message == early_file_message_str
|
|
337
|
+
|
|
338
|
+
|
|
237
339
|
@pytest.fixture
|
|
238
340
|
def link_constants_db():
|
|
239
341
|
return constants_linker
|
{dkist_processing_test-1.26.5.dist-info → dkist_processing_test-1.26.6rc1.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-test
|
|
3
|
-
Version: 1.26.
|
|
3
|
+
Version: 1.26.6rc1
|
|
4
4
|
Summary: Example instrument code used by the DKIST science data processing pipelines to test processing infrastructure
|
|
5
5
|
Author-email: NSO / AURA <dkistdc@nso.edu>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
13
|
Requires-Python: >=3.11
|
|
14
14
|
Description-Content-Type: text/x-rst
|
|
15
|
-
Requires-Dist: dkist-processing-common==10.8.
|
|
15
|
+
Requires-Dist: dkist-processing-common==10.8.4rc1
|
|
16
16
|
Requires-Dist: dkist-header-validator==5.2.1
|
|
17
17
|
Requires-Dist: dkist-service-configuration==2.3.0
|
|
18
18
|
Requires-Dist: dkist-fits-specifications==4.17.0
|
|
@@ -63,7 +63,7 @@ Requires-Dist: WTForms==3.2.1; extra == "frozen"
|
|
|
63
63
|
Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
|
|
64
64
|
Requires-Dist: aioftp==0.25.1; extra == "frozen"
|
|
65
65
|
Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
|
|
66
|
-
Requires-Dist: aiohttp==3.12.
|
|
66
|
+
Requires-Dist: aiohttp==3.12.6; extra == "frozen"
|
|
67
67
|
Requires-Dist: aiosignal==1.3.2; extra == "frozen"
|
|
68
68
|
Requires-Dist: alembic==1.16.1; extra == "frozen"
|
|
69
69
|
Requires-Dist: amqp==5.3.1; extra == "frozen"
|
|
@@ -89,16 +89,16 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
|
|
|
89
89
|
Requires-Dist: asgiref==3.8.1; extra == "frozen"
|
|
90
90
|
Requires-Dist: asteval==1.0.6; extra == "frozen"
|
|
91
91
|
Requires-Dist: astropy==7.0.2; extra == "frozen"
|
|
92
|
-
Requires-Dist: astropy-iers-data==0.2025.
|
|
92
|
+
Requires-Dist: astropy-iers-data==0.2025.6.2.0.38.23; extra == "frozen"
|
|
93
93
|
Requires-Dist: asyncpg==0.30.0; extra == "frozen"
|
|
94
94
|
Requires-Dist: attrs==25.3.0; extra == "frozen"
|
|
95
95
|
Requires-Dist: babel==2.17.0; extra == "frozen"
|
|
96
96
|
Requires-Dist: billiard==4.2.1; extra == "frozen"
|
|
97
97
|
Requires-Dist: blinker==1.9.0; extra == "frozen"
|
|
98
|
-
Requires-Dist: boto3==1.38.
|
|
99
|
-
Requires-Dist: botocore==1.38.
|
|
98
|
+
Requires-Dist: boto3==1.38.27; extra == "frozen"
|
|
99
|
+
Requires-Dist: botocore==1.38.27; extra == "frozen"
|
|
100
100
|
Requires-Dist: cachelib==0.13.0; extra == "frozen"
|
|
101
|
-
Requires-Dist: celery==5.5.
|
|
101
|
+
Requires-Dist: celery==5.5.3; extra == "frozen"
|
|
102
102
|
Requires-Dist: certifi==2025.4.26; extra == "frozen"
|
|
103
103
|
Requires-Dist: cffi==1.17.1; extra == "frozen"
|
|
104
104
|
Requires-Dist: charset-normalizer==3.4.2; extra == "frozen"
|
|
@@ -119,10 +119,10 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
|
|
|
119
119
|
Requires-Dist: decorator==5.2.1; extra == "frozen"
|
|
120
120
|
Requires-Dist: dill==0.4.0; extra == "frozen"
|
|
121
121
|
Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
|
|
122
|
-
Requires-Dist: dkist-processing-common==10.8.
|
|
122
|
+
Requires-Dist: dkist-processing-common==10.8.4rc1; extra == "frozen"
|
|
123
123
|
Requires-Dist: dkist-processing-core==5.1.1; extra == "frozen"
|
|
124
124
|
Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
|
|
125
|
-
Requires-Dist: dkist-processing-test==1.26.
|
|
125
|
+
Requires-Dist: dkist-processing-test==1.26.6rc1; extra == "frozen"
|
|
126
126
|
Requires-Dist: dkist-service-configuration==2.3.0; extra == "frozen"
|
|
127
127
|
Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
|
|
128
128
|
Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
|
|
@@ -139,7 +139,8 @@ Requires-Dist: globus-sdk==3.56.1; extra == "frozen"
|
|
|
139
139
|
Requires-Dist: google-re2==1.1.20240702; extra == "frozen"
|
|
140
140
|
Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
|
|
141
141
|
Requires-Dist: gqlclient==1.2.3; extra == "frozen"
|
|
142
|
-
Requires-Dist:
|
|
142
|
+
Requires-Dist: greenlet==3.2.2; extra == "frozen"
|
|
143
|
+
Requires-Dist: grpcio==1.72.1; extra == "frozen"
|
|
143
144
|
Requires-Dist: gunicorn==23.0.0; extra == "frozen"
|
|
144
145
|
Requires-Dist: h11==0.16.0; extra == "frozen"
|
|
145
146
|
Requires-Dist: httpcore==1.0.9; extra == "frozen"
|
|
@@ -156,7 +157,7 @@ Requires-Dist: jsonschema==4.24.0; extra == "frozen"
|
|
|
156
157
|
Requires-Dist: jsonschema-specifications==2025.4.1; extra == "frozen"
|
|
157
158
|
Requires-Dist: jupyter_core==5.8.1; extra == "frozen"
|
|
158
159
|
Requires-Dist: kiwisolver==1.4.8; extra == "frozen"
|
|
159
|
-
Requires-Dist: kombu==5.5.
|
|
160
|
+
Requires-Dist: kombu==5.5.4; extra == "frozen"
|
|
160
161
|
Requires-Dist: lazy-object-proxy==1.11.0; extra == "frozen"
|
|
161
162
|
Requires-Dist: limits==5.2.0; extra == "frozen"
|
|
162
163
|
Requires-Dist: linkify-it-py==2.0.3; extra == "frozen"
|
|
@@ -200,7 +201,7 @@ Requires-Dist: platformdirs==4.3.8; extra == "frozen"
|
|
|
200
201
|
Requires-Dist: pluggy==1.6.0; extra == "frozen"
|
|
201
202
|
Requires-Dist: prison==0.2.1; extra == "frozen"
|
|
202
203
|
Requires-Dist: proglog==0.1.12; extra == "frozen"
|
|
203
|
-
Requires-Dist: prometheus_client==0.22.
|
|
204
|
+
Requires-Dist: prometheus_client==0.22.1; extra == "frozen"
|
|
204
205
|
Requires-Dist: prompt_toolkit==3.0.51; extra == "frozen"
|
|
205
206
|
Requires-Dist: propcache==0.3.1; extra == "frozen"
|
|
206
207
|
Requires-Dist: protobuf==5.29.5; extra == "frozen"
|
|
@@ -232,7 +233,7 @@ Requires-Dist: s3transfer==0.13.0; extra == "frozen"
|
|
|
232
233
|
Requires-Dist: scipy==1.15.3; extra == "frozen"
|
|
233
234
|
Requires-Dist: semantic-version==2.10.0; extra == "frozen"
|
|
234
235
|
Requires-Dist: setproctitle==1.3.6; extra == "frozen"
|
|
235
|
-
Requires-Dist: setuptools==
|
|
236
|
+
Requires-Dist: setuptools==65.5.0; extra == "frozen"
|
|
236
237
|
Requires-Dist: six==1.17.0; extra == "frozen"
|
|
237
238
|
Requires-Dist: sniffio==1.3.1; extra == "frozen"
|
|
238
239
|
Requires-Dist: sqids==0.5.1; extra == "frozen"
|
|
@@ -247,7 +248,7 @@ Requires-Dist: tornado==6.5.1; extra == "frozen"
|
|
|
247
248
|
Requires-Dist: tqdm==4.67.1; extra == "frozen"
|
|
248
249
|
Requires-Dist: traitlets==5.14.3; extra == "frozen"
|
|
249
250
|
Requires-Dist: typing-inspection==0.4.1; extra == "frozen"
|
|
250
|
-
Requires-Dist: typing_extensions==4.
|
|
251
|
+
Requires-Dist: typing_extensions==4.14.0; extra == "frozen"
|
|
251
252
|
Requires-Dist: tzdata==2025.2; extra == "frozen"
|
|
252
253
|
Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
|
|
253
254
|
Requires-Dist: uncertainties==3.2.3; extra == "frozen"
|
|
@@ -2,11 +2,11 @@ dkist_processing_test/__init__.py,sha256=t-Daj1wOIg5dgI1gklg6suSnI-xi6DKSb6DxHDW
|
|
|
2
2
|
dkist_processing_test/config.py,sha256=LF80ReTk0ggJ3eZI4NZRZCgmR6E84adWU5iP6-JN-XY,383
|
|
3
3
|
dkist_processing_test/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
dkist_processing_test/models/constants.py,sha256=TxHYZHl3YQXN7-Voj7QgjgAajbxxB_qR8tRI9iTdERI,726
|
|
5
|
-
dkist_processing_test/models/parameters.py,sha256=
|
|
5
|
+
dkist_processing_test/models/parameters.py,sha256=gF1wC5BfTHgdrCjMytvwWqjk3Qmimb7IySexvPGUzyU,2212
|
|
6
6
|
dkist_processing_test/tasks/__init__.py,sha256=mzbjxWY9fdNKUyfXDC_vXuSaB7G0-iwrumCUlq6keoA,457
|
|
7
7
|
dkist_processing_test/tasks/exercise_numba.py,sha256=XfMVffPUgeiPoxSgo39tIjzFBJKKt3fnIYGaDFyBibc,1437
|
|
8
8
|
dkist_processing_test/tasks/fail.py,sha256=jiOiuqoX_JR5hx81REgvcSvb0GBlVKc9MIXKUO0Nhr4,245
|
|
9
|
-
dkist_processing_test/tasks/fake_science.py,sha256
|
|
9
|
+
dkist_processing_test/tasks/fake_science.py,sha256=rz4SK5F0xatMtUJJqwCFfZJE80LoEQwSSazNSuSBl4M,4447
|
|
10
10
|
dkist_processing_test/tasks/high_memory.py,sha256=J3vBsivFkqs8eZZwBPpEORlHnFX1bGsbO3CjllJMRsc,540
|
|
11
11
|
dkist_processing_test/tasks/manual.py,sha256=gjol_EieMbclv0ZDkVqR2Xd7abutali6KNwoqaCJiAI,583
|
|
12
12
|
dkist_processing_test/tasks/movie.py,sha256=uFPWQlRFP5zzzYGT58IXebbG49su2I4AEpN2bIy7vGc,1831
|
|
@@ -16,9 +16,7 @@ dkist_processing_test/tasks/quality.py,sha256=9QynI9R5mkYueb46wNBUhK62QSd2n791L0
|
|
|
16
16
|
dkist_processing_test/tasks/write_l1.py,sha256=lpNyCI3kH_pnL0Wi1LHhNRjRHNxu6q76xccCNHm7uwA,2074
|
|
17
17
|
dkist_processing_test/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
18
|
dkist_processing_test/tests/conftest.py,sha256=9H8_tqNKofHnl1IRqYM2-M2_K_TJ3b6oaIfb1dVkbsg,2728
|
|
19
|
-
dkist_processing_test/tests/
|
|
20
|
-
dkist_processing_test/tests/test_parameters.py,sha256=KGeEUOhtC_l-LN6hjB2jgwUZIWAMBx8wlmEeIja-eKo,4572
|
|
21
|
-
dkist_processing_test/tests/test_tasks.py,sha256=PPsEMMvLAE47mTTKBUGhxb7u9F-2lG-1PTgVaf6Cz_Q,26857
|
|
19
|
+
dkist_processing_test/tests/test_tasks.py,sha256=1s8OXE7Lga7B0_VCPQewylE_FtXn9e4cR3EZh4qMS9Q,30579
|
|
22
20
|
dkist_processing_test/tests/test_workflows.py,sha256=NqRkstqcqwH80cKJ1uDw16G4MsDOuOiZRWdfH0STarQ,286
|
|
23
21
|
dkist_processing_test/workflows/__init__.py,sha256=Ryn_HXsVkZM_lLKyVteXC909Td2geylmz_1Z-8SE8c8,78
|
|
24
22
|
dkist_processing_test/workflows/common_tasks.py,sha256=UpUTt-QhD-jkzBB3p1ECRbtqY3wjP6Lfsy4TdvxZKQ8,6837
|
|
@@ -28,7 +26,7 @@ dkist_processing_test/workflows/fail.py,sha256=KGhyAF7gKYYutP4aGa-1tDqPsC7Nr4xKY
|
|
|
28
26
|
dkist_processing_test/workflows/noop.py,sha256=k2-6BpRkl1JDGaHPavxDzIlVx11KQtxKmsHmHTNQ9o0,666
|
|
29
27
|
dkist_processing_test/workflows/resource_queue.py,sha256=_jOT99O0MFN_ACne6i8T5ZIwe_lBQqGz2Ccb8JlqQMI,500
|
|
30
28
|
dkist_processing_test/workflows/trial_end_to_end.py,sha256=4QSphBegbetDben5PdA5_J64hWJVV8ciVdF90qkyZCo,2415
|
|
31
|
-
dkist_processing_test-1.26.
|
|
32
|
-
dkist_processing_test-1.26.
|
|
33
|
-
dkist_processing_test-1.26.
|
|
34
|
-
dkist_processing_test-1.26.
|
|
29
|
+
dkist_processing_test-1.26.6rc1.dist-info/METADATA,sha256=L97WN5v7teLmXIiNDsKZ6qSXLxamQGQNvT5VIap_npk,16509
|
|
30
|
+
dkist_processing_test-1.26.6rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
31
|
+
dkist_processing_test-1.26.6rc1.dist-info/top_level.txt,sha256=Hs4oTIrG_r-svhk_RGFTEO4e3vqQoYlBzdv5mvJVF24,22
|
|
32
|
+
dkist_processing_test-1.26.6rc1.dist-info/RECORD,,
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
from random import randint
|
|
4
|
-
from typing import Any
|
|
5
|
-
from typing import Union
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel
|
|
8
|
-
from pydantic import ConfigDict
|
|
9
|
-
from pydantic import Field
|
|
10
|
-
from pydantic import field_serializer
|
|
11
|
-
from pydantic import field_validator
|
|
12
|
-
from pydantic import model_serializer
|
|
13
|
-
|
|
14
|
-
param_value_type_hint = Union[
|
|
15
|
-
int, str, list, tuple, "WavelengthParameterValue", "RawFileParameterValue"
|
|
16
|
-
]
|
|
17
|
-
multi_str_type = Union[str, "MultipleParameterValues"]
|
|
18
|
-
multi_file_type = Union["RawFileParameterValue", "MultipleParameterValues"]
|
|
19
|
-
multi_wave_type = Union["WavelengthParameterValue", "MultipleParameterValues"]
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class ParameterValue(BaseModel):
|
|
23
|
-
"""A single parameterValue entry"""
|
|
24
|
-
|
|
25
|
-
parameterValue: param_value_type_hint
|
|
26
|
-
parameterValueId: int = Field(default_factory=lambda: randint(1000, 2000))
|
|
27
|
-
parameterValueStartDate: datetime = datetime(1946, 11, 20)
|
|
28
|
-
|
|
29
|
-
@field_serializer("parameterValue")
|
|
30
|
-
def json_parameter_value(self, parameter_value: param_value_type_hint) -> str:
|
|
31
|
-
"""Encode the actual value in a JSON string."""
|
|
32
|
-
try:
|
|
33
|
-
parameter_value = parameter_value.model_dump()
|
|
34
|
-
except:
|
|
35
|
-
# If the value is just a basic type (i.e., not a `BaseModel`)
|
|
36
|
-
pass
|
|
37
|
-
return json.dumps(parameter_value)
|
|
38
|
-
|
|
39
|
-
@field_serializer("parameterValueStartDate")
|
|
40
|
-
def datetime_iso_format(self, start_datetime: datetime) -> str:
|
|
41
|
-
"""Encode the start date as an ISO-formatted string."""
|
|
42
|
-
return start_datetime.isoformat()
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class MultipleParameterValues(BaseModel):
|
|
46
|
-
"""
|
|
47
|
-
Container for a list of parameterValues.
|
|
48
|
-
|
|
49
|
-
This exists to be different than a raw `list`, which is a valid `parameterValue.parameterValue` type
|
|
50
|
-
"""
|
|
51
|
-
|
|
52
|
-
parameter_value_list: list[ParameterValue]
|
|
53
|
-
|
|
54
|
-
@field_validator("parameter_value_list", mode="before")
|
|
55
|
-
@classmethod
|
|
56
|
-
def ensure_list_of_parameter_values(cls, input_list: list) -> list[ParameterValue]:
|
|
57
|
-
"""Convert any raw types to `ParameterValue` objects."""
|
|
58
|
-
output_list = []
|
|
59
|
-
for parameter_value in input_list:
|
|
60
|
-
if not isinstance(parameter_value, ParameterValue):
|
|
61
|
-
parameter_value = ParameterValue(parameterValue=parameter_value)
|
|
62
|
-
|
|
63
|
-
output_list.append(parameter_value)
|
|
64
|
-
|
|
65
|
-
return output_list
|
|
66
|
-
|
|
67
|
-
@field_validator("parameter_value_list")
|
|
68
|
-
@classmethod
|
|
69
|
-
def no_repeat_start_dates(
|
|
70
|
-
cls, parameter_value_list: list[ParameterValue]
|
|
71
|
-
) -> list[ParameterValue]:
|
|
72
|
-
"""Fail validation if any of the `ParameterValues` have the same `parameterValueStartDate."""
|
|
73
|
-
start_dates = [pv.parameterValueStartDate for pv in parameter_value_list]
|
|
74
|
-
if len(set(start_dates)) != len(start_dates):
|
|
75
|
-
raise ValueError(
|
|
76
|
-
f"parameterValueStartDates must be unique. Got {set(start_dates)} over {len(start_dates)} parameters."
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
return parameter_value_list
|
|
80
|
-
|
|
81
|
-
@model_serializer
|
|
82
|
-
def parameter_value_list(self):
|
|
83
|
-
"""Return just the list of `ParameterValues`."""
|
|
84
|
-
return self.parameter_value_list
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
class WavelengthParameterValue(BaseModel):
|
|
88
|
-
values: tuple
|
|
89
|
-
wavelength: tuple = (1.0, 2.0, 3.0)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
class RawFileParameterValue(BaseModel):
|
|
93
|
-
"""
|
|
94
|
-
For parameters that are files on disk.
|
|
95
|
-
|
|
96
|
-
"Raw" in the sense that it still has the `__file__`-level dictionary.
|
|
97
|
-
"""
|
|
98
|
-
|
|
99
|
-
objectKey: str
|
|
100
|
-
bucket: str = "doesn't_matter"
|
|
101
|
-
|
|
102
|
-
@model_serializer
|
|
103
|
-
def file_dict(self) -> dict:
|
|
104
|
-
"""Wrap the input values in a `__file__` dict."""
|
|
105
|
-
return {"__file__": dict(self)}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
class TestParameterValues(BaseModel):
|
|
109
|
-
test_random_data: multi_file_type = RawFileParameterValue(objectKey="")
|
|
110
|
-
test_wavelength_category: multi_wave_type = WavelengthParameterValue(
|
|
111
|
-
values=("one", "two", "three")
|
|
112
|
-
)
|
|
113
|
-
test_message: multi_str_type = "Weird?"
|
|
114
|
-
test_message_file: multi_file_type = RawFileParameterValue(objectKey="")
|
|
115
|
-
|
|
116
|
-
model_config = ConfigDict(validate_default=True)
|
|
117
|
-
|
|
118
|
-
@field_validator("*")
|
|
119
|
-
@classmethod
|
|
120
|
-
def ensure_parameter_value_lists(cls, parameter: Any) -> MultipleParameterValues:
|
|
121
|
-
"""Convert all values to `MultipleParameterValues`, if they aren't already."""
|
|
122
|
-
if not isinstance(parameter, MultipleParameterValues):
|
|
123
|
-
return MultipleParameterValues(parameter_value_list=[parameter])
|
|
124
|
-
|
|
125
|
-
return parameter
|
|
126
|
-
|
|
127
|
-
@model_serializer
|
|
128
|
-
def input_dataset_document_parameters_part(self) -> list:
|
|
129
|
-
"""Place all parameters into higher-level dictionaries required by the input dataset document."""
|
|
130
|
-
return [{"parameterName": f, "parameterValues": v} for f, v in self]
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
|
|
4
|
-
import numpy as np
|
|
5
|
-
import pytest
|
|
6
|
-
from dkist_processing_common.tasks import WorkflowTaskBase
|
|
7
|
-
from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetParameterValue
|
|
8
|
-
|
|
9
|
-
from dkist_processing_test.models.parameters import TestParameters
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@pytest.fixture(scope="session")
|
|
13
|
-
def array_file_parameter(
|
|
14
|
-
tmp_path_factory, random_parameter_hdulist, array_parameter_file_object_key
|
|
15
|
-
) -> tuple[InputDatasetParameterValue, float, float, float]:
|
|
16
|
-
hdul, mu, std, const = random_parameter_hdulist
|
|
17
|
-
file_path = tmp_path_factory.mktemp("parameters") / array_parameter_file_object_key
|
|
18
|
-
hdul.writeto(file_path)
|
|
19
|
-
|
|
20
|
-
value = {
|
|
21
|
-
"bucket": "raw",
|
|
22
|
-
"objectKey": array_parameter_file_object_key,
|
|
23
|
-
"param_path": file_path,
|
|
24
|
-
"is_file": True,
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
parameter_value = InputDatasetParameterValue(
|
|
28
|
-
parameter_value_id=1,
|
|
29
|
-
parameter_value=value,
|
|
30
|
-
parameter_value_start_date=datetime(1946, 11, 20),
|
|
31
|
-
)
|
|
32
|
-
return parameter_value, mu, std, const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@pytest.fixture(scope="session")
|
|
36
|
-
def message_file_parameter(
|
|
37
|
-
tmp_path_factory, early_file_message_str, early_json_parameter_file_object_key
|
|
38
|
-
):
|
|
39
|
-
|
|
40
|
-
file_path = tmp_path_factory.mktemp("parameters") / early_json_parameter_file_object_key
|
|
41
|
-
with open(file_path, "w") as f:
|
|
42
|
-
json.dump(early_file_message_str, f)
|
|
43
|
-
|
|
44
|
-
value = {
|
|
45
|
-
"bucket": "raw",
|
|
46
|
-
"objectKey": early_json_parameter_file_object_key,
|
|
47
|
-
"param_path": file_path,
|
|
48
|
-
"is_file": True,
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
parameter_value = InputDatasetParameterValue(
|
|
52
|
-
parameter_value_id=2,
|
|
53
|
-
parameter_value=value,
|
|
54
|
-
parameter_value_start_date=datetime(1946, 11, 20),
|
|
55
|
-
)
|
|
56
|
-
return parameter_value
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
@pytest.fixture(scope="session")
|
|
60
|
-
def message_parameter(early_value_message_str):
|
|
61
|
-
|
|
62
|
-
parameter_value = InputDatasetParameterValue(
|
|
63
|
-
parameter_value_id=3,
|
|
64
|
-
parameter_value=early_value_message_str,
|
|
65
|
-
parameter_value_start_date=datetime(1946, 11, 20),
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
return parameter_value
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
@pytest.fixture(scope="session")
|
|
72
|
-
def wavelength_parameter() -> InputDatasetParameterValue:
|
|
73
|
-
value = {"wavelength": [1.0, 2.0, 3.0], "values": ["one", "two", "three"]}
|
|
74
|
-
|
|
75
|
-
parameter_value = InputDatasetParameterValue(
|
|
76
|
-
parameter_value_id=4,
|
|
77
|
-
parameter_value=value,
|
|
78
|
-
parameter_value_start_date=datetime(1946, 11, 20),
|
|
79
|
-
)
|
|
80
|
-
return parameter_value
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
@pytest.fixture(scope="session")
|
|
84
|
-
def parameter_dict_with_path(
|
|
85
|
-
array_file_parameter, message_file_parameter, message_parameter, wavelength_parameter
|
|
86
|
-
):
|
|
87
|
-
"""Enough of an input dataset parameters part to exercise file loading parameters."""
|
|
88
|
-
file_parameter_value, _, _, _ = array_file_parameter
|
|
89
|
-
|
|
90
|
-
param_dict = {
|
|
91
|
-
"test_random_data": [file_parameter_value],
|
|
92
|
-
"test_message": [message_parameter],
|
|
93
|
-
"test_message_file": [message_file_parameter],
|
|
94
|
-
"test_wavelength_category": [wavelength_parameter],
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return param_dict
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
@pytest.fixture(scope="session")
|
|
101
|
-
def task_with_parameters(parameter_dict_with_path):
|
|
102
|
-
class TaskWithParameters(WorkflowTaskBase):
|
|
103
|
-
def __init__(
|
|
104
|
-
self,
|
|
105
|
-
recipe_run_id: int,
|
|
106
|
-
workflow_name: str,
|
|
107
|
-
workflow_version: str,
|
|
108
|
-
):
|
|
109
|
-
super().__init__(
|
|
110
|
-
recipe_run_id=recipe_run_id,
|
|
111
|
-
workflow_name=workflow_name,
|
|
112
|
-
workflow_version=workflow_version,
|
|
113
|
-
)
|
|
114
|
-
self.parameters = TestParameters(
|
|
115
|
-
parameter_dict_with_path, wavelength=2.0, obs_ip_start_time="2024-06-11T12:00:00"
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
def run(self):
|
|
119
|
-
"""Do stuff."""
|
|
120
|
-
pass
|
|
121
|
-
|
|
122
|
-
task = TaskWithParameters(
|
|
123
|
-
recipe_run_id=0,
|
|
124
|
-
workflow_name="do_stuff",
|
|
125
|
-
workflow_version="VX.Y",
|
|
126
|
-
)
|
|
127
|
-
|
|
128
|
-
return task
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
def test_parameter(
|
|
132
|
-
task_with_parameters,
|
|
133
|
-
array_file_parameter,
|
|
134
|
-
early_file_message_str,
|
|
135
|
-
early_value_message_str,
|
|
136
|
-
):
|
|
137
|
-
"""
|
|
138
|
-
Given: A task with parameters that depend on files
|
|
139
|
-
When: Accessing those parameters
|
|
140
|
-
Then: The correct values are returned
|
|
141
|
-
"""
|
|
142
|
-
task = task_with_parameters
|
|
143
|
-
_, mu, std, const = array_file_parameter
|
|
144
|
-
|
|
145
|
-
assert type(task.parameters.randomness) is tuple
|
|
146
|
-
np.testing.assert_allclose(np.array(task.parameters.randomness), np.array([mu, std]), rtol=1)
|
|
147
|
-
|
|
148
|
-
assert task.parameters.constant == const
|
|
149
|
-
assert task.parameters.wavelength_category == "two"
|
|
150
|
-
assert task.parameters.value_message == early_value_message_str
|
|
151
|
-
assert task.parameters.file_message == early_file_message_str
|
|
File without changes
|
{dkist_processing_test-1.26.5.dist-info → dkist_processing_test-1.26.6rc1.dist-info}/top_level.txt
RENAMED
|
File without changes
|