hpcflow-new2 0.2.0a158__py3-none-any.whl → 0.2.0a160__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.
- hpcflow/_version.py +1 -1
- hpcflow/app.py +0 -3
- hpcflow/sdk/__init__.py +2 -0
- hpcflow/sdk/app.py +91 -18
- hpcflow/sdk/cli.py +18 -0
- hpcflow/sdk/cli_common.py +16 -0
- hpcflow/sdk/config/config.py +0 -4
- hpcflow/sdk/core/actions.py +20 -7
- hpcflow/sdk/core/command_files.py +4 -4
- hpcflow/sdk/core/element.py +15 -16
- hpcflow/sdk/core/rule.py +2 -0
- hpcflow/sdk/core/run_dir_files.py +63 -0
- hpcflow/sdk/core/task.py +34 -35
- hpcflow/sdk/core/utils.py +37 -15
- hpcflow/sdk/core/workflow.py +147 -49
- hpcflow/sdk/data/config_schema.yaml +0 -6
- hpcflow/sdk/demo/cli.py +12 -0
- hpcflow/sdk/log.py +2 -2
- hpcflow/sdk/persistence/base.py +142 -12
- hpcflow/sdk/persistence/json.py +84 -63
- hpcflow/sdk/persistence/pending.py +21 -7
- hpcflow/sdk/persistence/utils.py +2 -1
- hpcflow/sdk/persistence/zarr.py +143 -108
- hpcflow/sdk/runtime.py +0 -12
- hpcflow/sdk/submission/jobscript.py +25 -4
- hpcflow/sdk/submission/schedulers/sge.py +3 -0
- hpcflow/sdk/submission/schedulers/slurm.py +3 -0
- hpcflow/sdk/submission/shells/bash.py +2 -2
- hpcflow/sdk/submission/shells/powershell.py +2 -2
- hpcflow/sdk/submission/submission.py +24 -7
- hpcflow/tests/scripts/test_main_scripts.py +40 -0
- hpcflow/tests/unit/test_utils.py +28 -0
- {hpcflow_new2-0.2.0a158.dist-info → hpcflow_new2-0.2.0a160.dist-info}/METADATA +1 -2
- {hpcflow_new2-0.2.0a158.dist-info → hpcflow_new2-0.2.0a160.dist-info}/RECORD +36 -35
- {hpcflow_new2-0.2.0a158.dist-info → hpcflow_new2-0.2.0a160.dist-info}/WHEEL +0 -0
- {hpcflow_new2-0.2.0a158.dist-info → hpcflow_new2-0.2.0a160.dist-info}/entry_points.txt +0 -0
@@ -18,6 +18,7 @@ from hpcflow.sdk.core.errors import (
|
|
18
18
|
SubmissionFailure,
|
19
19
|
)
|
20
20
|
from hpcflow.sdk.core.json_like import ChildObjectSpec, JSONLike
|
21
|
+
from hpcflow.sdk.log import TimeIt
|
21
22
|
|
22
23
|
|
23
24
|
def timedelta_format(td: timedelta) -> str:
|
@@ -81,6 +82,7 @@ class Submission(JSONLike):
|
|
81
82
|
for js_idx, js in enumerate(self.jobscripts):
|
82
83
|
js._index = js_idx
|
83
84
|
|
85
|
+
@TimeIt.decorator
|
84
86
|
def _set_environments(self):
|
85
87
|
filterable = ElementResources.get_env_instance_filterable_attributes()
|
86
88
|
|
@@ -166,31 +168,36 @@ class Submission(JSONLike):
|
|
166
168
|
]
|
167
169
|
return self._submission_parts_lst
|
168
170
|
|
171
|
+
@TimeIt.decorator
|
169
172
|
def get_start_time(self, submit_time: str) -> Union[datetime, None]:
|
170
173
|
"""Get the start time of a given submission part."""
|
171
174
|
js_idx = self._submission_parts[submit_time]
|
172
175
|
all_part_starts = []
|
173
176
|
for i in js_idx:
|
174
|
-
|
175
|
-
|
177
|
+
start_time = self.jobscripts[i].start_time
|
178
|
+
if start_time:
|
179
|
+
all_part_starts.append(start_time)
|
176
180
|
if all_part_starts:
|
177
181
|
return min(all_part_starts)
|
178
182
|
else:
|
179
183
|
return None
|
180
184
|
|
185
|
+
@TimeIt.decorator
|
181
186
|
def get_end_time(self, submit_time: str) -> Union[datetime, None]:
|
182
187
|
"""Get the end time of a given submission part."""
|
183
188
|
js_idx = self._submission_parts[submit_time]
|
184
189
|
all_part_ends = []
|
185
190
|
for i in js_idx:
|
186
|
-
|
187
|
-
|
191
|
+
end_time = self.jobscripts[i].end_time
|
192
|
+
if end_time:
|
193
|
+
all_part_ends.append(end_time)
|
188
194
|
if all_part_ends:
|
189
195
|
return max(all_part_ends)
|
190
196
|
else:
|
191
197
|
return None
|
192
198
|
|
193
199
|
@property
|
200
|
+
@TimeIt.decorator
|
194
201
|
def start_time(self):
|
195
202
|
"""Get the first non-None start time over all submission parts."""
|
196
203
|
all_start_times = []
|
@@ -204,6 +211,7 @@ class Submission(JSONLike):
|
|
204
211
|
return None
|
205
212
|
|
206
213
|
@property
|
214
|
+
@TimeIt.decorator
|
207
215
|
def end_time(self):
|
208
216
|
"""Get the final non-None end time over all submission parts."""
|
209
217
|
all_end_times = []
|
@@ -277,6 +285,7 @@ class Submission(JSONLike):
|
|
277
285
|
return [i for js in self.jobscripts for i in js.all_EARs]
|
278
286
|
|
279
287
|
@property
|
288
|
+
@TimeIt.decorator
|
280
289
|
def EARs_by_elements(self):
|
281
290
|
task_elem_EARs = defaultdict(lambda: defaultdict(list))
|
282
291
|
for i in self.all_EARs:
|
@@ -291,6 +300,7 @@ class Submission(JSONLike):
|
|
291
300
|
def abort_EARs_file_path(self):
|
292
301
|
return self.path / self.abort_EARs_file_name
|
293
302
|
|
303
|
+
@TimeIt.decorator
|
294
304
|
def get_active_jobscripts(
|
295
305
|
self, as_json: bool = False
|
296
306
|
) -> List[Tuple[int, Dict[int, JobscriptElementState]]]:
|
@@ -356,11 +366,13 @@ class Submission(JSONLike):
|
|
356
366
|
|
357
367
|
return sched_js_idx
|
358
368
|
|
369
|
+
@TimeIt.decorator
|
359
370
|
def get_unique_schedulers(self) -> Dict[Tuple[int], Scheduler]:
|
360
371
|
"""Get unique schedulers and which of this submission's jobscripts they
|
361
372
|
correspond to."""
|
362
373
|
return self.get_unique_schedulers_of_jobscripts(self.jobscripts)
|
363
374
|
|
375
|
+
@TimeIt.decorator
|
364
376
|
def get_unique_shells(self) -> Dict[Tuple[int], Shell]:
|
365
377
|
"""Get unique shells and which jobscripts they correspond to."""
|
366
378
|
js_idx = []
|
@@ -412,6 +424,7 @@ class Submission(JSONLike):
|
|
412
424
|
submitted_js_idx=submitted_js_idx,
|
413
425
|
)
|
414
426
|
|
427
|
+
@TimeIt.decorator
|
415
428
|
def submit(
|
416
429
|
self,
|
417
430
|
status,
|
@@ -425,7 +438,8 @@ class Submission(JSONLike):
|
|
425
438
|
supports_JS_para = self.workflow._store._features.jobscript_parallelism
|
426
439
|
if self.JS_parallelism:
|
427
440
|
if not supports_JS_para:
|
428
|
-
status
|
441
|
+
if status:
|
442
|
+
status.stop()
|
429
443
|
raise ValueError(
|
430
444
|
f"Store type {self.workflow._store!r} does not support jobscript "
|
431
445
|
f"parallelism."
|
@@ -504,7 +518,8 @@ class Submission(JSONLike):
|
|
504
518
|
continue
|
505
519
|
|
506
520
|
try:
|
507
|
-
status
|
521
|
+
if status:
|
522
|
+
status.update(f"Submitting jobscript {js.index}...")
|
508
523
|
js_ref_i = js.submit(scheduler_refs, print_stdout=print_stdout)
|
509
524
|
scheduler_refs[js.index] = (js_ref_i, js.is_array)
|
510
525
|
submitted_js_idx.append(js.index)
|
@@ -529,7 +544,8 @@ class Submission(JSONLike):
|
|
529
544
|
)
|
530
545
|
|
531
546
|
if errs and not ignore_errors:
|
532
|
-
status
|
547
|
+
if status:
|
548
|
+
status.stop()
|
533
549
|
self._raise_failure(submitted_js_idx, errs)
|
534
550
|
|
535
551
|
len_js = len(submitted_js_idx)
|
@@ -537,6 +553,7 @@ class Submission(JSONLike):
|
|
537
553
|
|
538
554
|
return submitted_js_idx
|
539
555
|
|
556
|
+
@TimeIt.decorator
|
540
557
|
def cancel(self):
|
541
558
|
act_js = list(self.get_active_jobscripts())
|
542
559
|
if not act_js:
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import time
|
1
2
|
import pytest
|
2
3
|
|
3
4
|
from hpcflow.app import app as hf
|
@@ -30,6 +31,9 @@ def test_script_direct_in_direct_out(null_config, tmp_path):
|
|
30
31
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
31
32
|
)
|
32
33
|
wk.submit(wait=True, add_to_known=False)
|
34
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
35
|
+
# to be later Python versions):
|
36
|
+
time.sleep(10)
|
33
37
|
assert wk.tasks[0].elements[0].outputs.p2.value == p1_val + 100
|
34
38
|
|
35
39
|
|
@@ -56,6 +60,9 @@ def test_script_direct_sub_param_in_direct_out(null_config, tmp_path):
|
|
56
60
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
57
61
|
)
|
58
62
|
wk.submit(wait=True, add_to_known=False)
|
63
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
64
|
+
# to be later Python versions):
|
65
|
+
time.sleep(10)
|
59
66
|
assert wk.tasks[0].elements[0].outputs.p2.value == p1_val["a"] + 100
|
60
67
|
|
61
68
|
|
@@ -85,6 +92,9 @@ def test_script_direct_in_direct_out_single_label(null_config, tmp_path):
|
|
85
92
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
86
93
|
)
|
87
94
|
wk.submit(wait=True, add_to_known=False)
|
95
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
96
|
+
# to be later Python versions):
|
97
|
+
time.sleep(10)
|
88
98
|
assert wk.tasks[0].elements[0].outputs.p2.value == p1_val + 100
|
89
99
|
|
90
100
|
|
@@ -126,6 +136,9 @@ def test_script_direct_in_direct_out_labels(null_config, tmp_path):
|
|
126
136
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
127
137
|
)
|
128
138
|
wk.submit(wait=True, add_to_known=False)
|
139
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
140
|
+
# to be later Python versions):
|
141
|
+
time.sleep(10)
|
129
142
|
assert wk.tasks[0].elements[0].outputs.p2.value == p1_1_val + p1_2_val
|
130
143
|
|
131
144
|
|
@@ -152,6 +165,9 @@ def test_script_json_in_json_out(null_config, tmp_path):
|
|
152
165
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
153
166
|
)
|
154
167
|
wk.submit(wait=True, add_to_known=False)
|
168
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
169
|
+
# to be later Python versions):
|
170
|
+
time.sleep(10)
|
155
171
|
assert wk.tasks[0].elements[0].outputs.p2.value == p1_val + 100
|
156
172
|
|
157
173
|
|
@@ -193,6 +209,9 @@ def test_script_json_in_json_out_labels(null_config, tmp_path):
|
|
193
209
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
194
210
|
)
|
195
211
|
wk.submit(wait=True, add_to_known=False)
|
212
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
213
|
+
# to be later Python versions):
|
214
|
+
time.sleep(10)
|
196
215
|
assert wk.tasks[0].elements[0].outputs.p2.value == p1_1_val + p1_2_val
|
197
216
|
|
198
217
|
|
@@ -234,6 +253,9 @@ def test_script_json_sub_param_in_json_out_labels(null_config, tmp_path):
|
|
234
253
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
235
254
|
)
|
236
255
|
wk.submit(wait=True, add_to_known=False)
|
256
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
257
|
+
# to be later Python versions):
|
258
|
+
time.sleep(10)
|
237
259
|
assert wk.tasks[0].elements[0].outputs.p2.value == a_val + p1_2_val
|
238
260
|
|
239
261
|
|
@@ -264,6 +286,9 @@ def test_script_json_and_direct_in_json_out(null_config, tmp_path):
|
|
264
286
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
265
287
|
)
|
266
288
|
wk.submit(wait=True, add_to_known=False)
|
289
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
290
|
+
# to be later Python versions):
|
291
|
+
time.sleep(10)
|
267
292
|
assert wk.tasks[0].elements[0].outputs.p3.value == p1_val + p2_val
|
268
293
|
|
269
294
|
|
@@ -293,6 +318,9 @@ def test_script_json_in_json_and_direct_out(null_config, tmp_path):
|
|
293
318
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
294
319
|
)
|
295
320
|
wk.submit(wait=True, add_to_known=False)
|
321
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
322
|
+
# to be later Python versions):
|
323
|
+
time.sleep(10)
|
296
324
|
assert wk.tasks[0].elements[0].outputs.p2.value == p1_val + 100
|
297
325
|
assert wk.tasks[0].elements[0].outputs.p3.value == p1_val + 200
|
298
326
|
|
@@ -322,6 +350,9 @@ def test_script_json_in_obj(null_config, tmp_path):
|
|
322
350
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
323
351
|
)
|
324
352
|
wk.submit(wait=True, add_to_known=False)
|
353
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
354
|
+
# to be later Python versions):
|
355
|
+
time.sleep(10)
|
325
356
|
assert wk.tasks[0].elements[0].outputs.p2.value == a_val + 100
|
326
357
|
|
327
358
|
|
@@ -350,6 +381,9 @@ def test_script_hdf5_in_obj(null_config, tmp_path):
|
|
350
381
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
351
382
|
)
|
352
383
|
wk.submit(wait=True, add_to_known=False)
|
384
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
385
|
+
# to be later Python versions):
|
386
|
+
time.sleep(10)
|
353
387
|
assert wk.tasks[0].elements[0].outputs.p2.value == a_val + 100
|
354
388
|
|
355
389
|
|
@@ -378,6 +412,9 @@ def test_script_json_out_obj(null_config, tmp_path):
|
|
378
412
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
379
413
|
)
|
380
414
|
wk.submit(wait=True, add_to_known=False)
|
415
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
416
|
+
# to be later Python versions):
|
417
|
+
time.sleep(10)
|
381
418
|
assert wk.tasks[0].elements[0].outputs.p1c.value == P1(a=p1_val + 100)
|
382
419
|
|
383
420
|
|
@@ -406,4 +443,7 @@ def test_script_hdf5_out_obj(null_config, tmp_path):
|
|
406
443
|
tasks=[t1], template_name="main_script_test", path=tmp_path
|
407
444
|
)
|
408
445
|
wk.submit(wait=True, add_to_known=False)
|
446
|
+
# TODO: investigate why the value is not always populated on GHA Ubuntu runners (tends
|
447
|
+
# to be later Python versions):
|
448
|
+
time.sleep(10)
|
409
449
|
assert wk.tasks[0].elements[0].outputs.p1c.value == P1(a=p1_val + 100)
|
hpcflow/tests/unit/test_utils.py
CHANGED
@@ -8,6 +8,7 @@ from hpcflow.sdk.core.errors import InvalidIdentifier, MissingVariableSubstituti
|
|
8
8
|
from hpcflow.sdk.core.utils import (
|
9
9
|
JSONLikeDirSnapShot,
|
10
10
|
bisect_slice,
|
11
|
+
dict_values_process_flat,
|
11
12
|
flatten,
|
12
13
|
get_nested_indices,
|
13
14
|
is_fsspec_url,
|
@@ -528,3 +529,30 @@ def test_substitute_string_vars_default_value_with_specified():
|
|
528
529
|
)
|
529
530
|
== "hello bob!"
|
530
531
|
)
|
532
|
+
|
533
|
+
|
534
|
+
def test_dict_values_process_flat():
|
535
|
+
d = {"a": 0, "b": [1, 2], "c": 5}
|
536
|
+
assert dict_values_process_flat(d, callable=lambda x: [i + 3 for i in x]) == {
|
537
|
+
"a": 3,
|
538
|
+
"b": [4, 5],
|
539
|
+
"c": 8,
|
540
|
+
}
|
541
|
+
|
542
|
+
|
543
|
+
def test_dict_values_process_flat_no_lists():
|
544
|
+
d = {"a": 0, "b": 1, "c": 2}
|
545
|
+
assert dict_values_process_flat(d, callable=lambda x: [i + 3 for i in x]) == {
|
546
|
+
"a": 3,
|
547
|
+
"b": 4,
|
548
|
+
"c": 5,
|
549
|
+
}
|
550
|
+
|
551
|
+
|
552
|
+
def test_dict_values_process_flat_single_item_lists():
|
553
|
+
d = {"a": [0], "b": [1], "c": [2]}
|
554
|
+
assert dict_values_process_flat(d, callable=lambda x: [i + 3 for i in x]) == {
|
555
|
+
"a": [3],
|
556
|
+
"b": [4],
|
557
|
+
"c": [5],
|
558
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: hpcflow-new2
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.0a160
|
4
4
|
Summary: Computational workflow management
|
5
5
|
License: MIT
|
6
6
|
Author: aplowman
|
@@ -29,7 +29,6 @@ Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
29
29
|
Requires-Dist: reretry (>=0.11.8,<0.12.0)
|
30
30
|
Requires-Dist: rich (>=13.4.2,<14.0.0)
|
31
31
|
Requires-Dist: ruamel.yaml (>=0.17.20,<0.18.0)
|
32
|
-
Requires-Dist: sentry-sdk (>=1.5.8,<2.0.0)
|
33
32
|
Requires-Dist: termcolor (>=1.1.0,<2.0.0)
|
34
33
|
Requires-Dist: valida (>=0.7.2,<0.8.0)
|
35
34
|
Requires-Dist: watchdog (>=2.1.9,<3.0.0)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
hpcflow/__init__.py,sha256=WIETuRHeOp2SqUqHUzpjQ-lk9acbYv-6aWOhZPRdlhs,64
|
2
2
|
hpcflow/__pyinstaller/__init__.py,sha256=YOzBlPSck6slucv6lJM9K80JtsJWxXRL00cv6tRj3oc,98
|
3
3
|
hpcflow/__pyinstaller/hook-hpcflow.py,sha256=SeMopsPkhCyd9gqIrzwFNRj3ZlkUlUYl-74QYz61mo4,1089
|
4
|
-
hpcflow/_version.py,sha256=
|
5
|
-
hpcflow/app.py,sha256=
|
4
|
+
hpcflow/_version.py,sha256=SLYvEGJeZwqDNbRaoPhsYZ7OzpYUUDy4We22ieDRFfQ,26
|
5
|
+
hpcflow/app.py,sha256=d-kgfnZNlqlCi2H8bK26714brD_u3ibN3FaEZgjF9aA,1332
|
6
6
|
hpcflow/cli.py,sha256=G2J3D9v6MnMWOWMMWK6UEKLn_6wnV9lT_qygEBBxg-I,66
|
7
7
|
hpcflow/data/demo_data_manifest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
hpcflow/data/demo_data_manifest/demo_data_manifest.json,sha256=VauMm2cjlwGqR2zlfs_qzQn3zkwiUPG20nmMlucu-yY,91
|
@@ -33,21 +33,21 @@ hpcflow/data/template_components/task_schemas.yaml,sha256=VMtzckqDyfL9JpjYkG9Fkz
|
|
33
33
|
hpcflow/data/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
34
|
hpcflow/data/workflows/workflow_1.yaml,sha256=lF7Re2SVc_5gQk5AwB0gXaq-n-T5ia4su3zNQ9oMRV0,220
|
35
35
|
hpcflow/examples.ipynb,sha256=cLKp4QsxwwMXRanDnfWY9kqsV23q6G4raOpu6IZXnMw,28553
|
36
|
-
hpcflow/sdk/__init__.py,sha256=
|
37
|
-
hpcflow/sdk/app.py,sha256=
|
38
|
-
hpcflow/sdk/cli.py,sha256=
|
39
|
-
hpcflow/sdk/cli_common.py,sha256=
|
36
|
+
hpcflow/sdk/__init__.py,sha256=SdzVm7dydLv2kmr2tqrH14Gf1GEAEhsEuAuqiGBLHhM,5700
|
37
|
+
hpcflow/sdk/app.py,sha256=tDcEaT_YWLnFy4Wi4UIwTxwvHO3F80Gxc1yd1tnmDc0,92880
|
38
|
+
hpcflow/sdk/cli.py,sha256=y6eRg36D_IzIljc9TMvmm69NqX2zZoKUnBufX9UbN1U,35025
|
39
|
+
hpcflow/sdk/cli_common.py,sha256=kDSIe90mxD37lQqvIXDyRauLtTRRnNueSljcRPF_w0M,4738
|
40
40
|
hpcflow/sdk/config/__init__.py,sha256=qJrrxcAN4f1u_RyTtXgz-xlTLwNafE9v0VEMP1x6-bU,70
|
41
41
|
hpcflow/sdk/config/callbacks.py,sha256=7z0rFX7ULUTAo24IJr6kLzPmZCgmkaQ8P5e-AfYTcY8,5339
|
42
42
|
hpcflow/sdk/config/cli.py,sha256=PsmqrC21GAXx_-UHWVgqg-3luVe4r_MG0HjFRv2Yy1Y,10638
|
43
|
-
hpcflow/sdk/config/config.py,sha256=
|
43
|
+
hpcflow/sdk/config/config.py,sha256=7kUqTsU4-SDW99lWXaDZ-_s03J3SJubcVUjzYvO2Vho,30304
|
44
44
|
hpcflow/sdk/config/config_file.py,sha256=JlMcprj0aujFVk8552ahP2f8EXB0tglMaHwzbcGZH6w,12373
|
45
45
|
hpcflow/sdk/config/errors.py,sha256=2D7HJ1dbyeoD3xk4MuaGSsbJsUyQzyw8kaThEBZfP2I,6876
|
46
46
|
hpcflow/sdk/core/__init__.py,sha256=GcIklEsXy3M5PWpmxyhd2KoI0u6HjXRIjD_aR1bgRjo,215
|
47
|
-
hpcflow/sdk/core/actions.py,sha256=
|
48
|
-
hpcflow/sdk/core/command_files.py,sha256=
|
47
|
+
hpcflow/sdk/core/actions.py,sha256=539vu9ts5u5Poah6-ZGOEANrb58NPEbhhoVlS7ajayE,74544
|
48
|
+
hpcflow/sdk/core/command_files.py,sha256=yxTQnxVO0q3qfp1nEy-FSSWzHFSdhnbtQ6YvcjJX5UQ,18181
|
49
49
|
hpcflow/sdk/core/commands.py,sha256=-Tiu7zVVwWr1xiTXVB9oH3E4g09ebRRtHSRrMdFDCRY,12060
|
50
|
-
hpcflow/sdk/core/element.py,sha256=
|
50
|
+
hpcflow/sdk/core/element.py,sha256=ksNVQcQX_-IdofAsc4Us3Mw_rEMLO8D5zOM8Cmajaw8,45669
|
51
51
|
hpcflow/sdk/core/environment.py,sha256=DGUz1NvliKh6opP0IueGHD69rn_8wFLhDsq6kAmEgM4,4849
|
52
52
|
hpcflow/sdk/core/errors.py,sha256=AaJWGyKUuHlAAP2LcVIg7D7aw2noL06G4OzP89sUcxU,8712
|
53
53
|
hpcflow/sdk/core/json_like.py,sha256=LRZsUd1tn8zXC8fESeiXs7Eko-VdnB8zcXiqixKVcZM,18874
|
@@ -55,51 +55,52 @@ hpcflow/sdk/core/loop.py,sha256=5Ai_HHCzM21_IOvtgobE8yi_b9dc9jWQijt2LyI3PlM,2186
|
|
55
55
|
hpcflow/sdk/core/object_list.py,sha256=bhJc-U4BpGDQMW4x0sQlVOlgNH2XIeVS4Re0u_x0l80,19866
|
56
56
|
hpcflow/sdk/core/parallel.py,sha256=LI-g-qOuOR1oaEUWVT0qW0hmiP9hsJyUP8_IfSTKYYo,95
|
57
57
|
hpcflow/sdk/core/parameters.py,sha256=U4nh7rSZlafgq_zR1f6qn0qqBh5tSjNZ45Yp2gseb0Q,64086
|
58
|
-
hpcflow/sdk/core/rule.py,sha256=
|
59
|
-
hpcflow/sdk/core/
|
58
|
+
hpcflow/sdk/core/rule.py,sha256=3jVsSZCBv4Odxy8QbSbKo9ZcRuU-5DRJoNK8adXCEpI,4567
|
59
|
+
hpcflow/sdk/core/run_dir_files.py,sha256=_k-hA7dlry9GZw5ZXcntFcPGxg07p03hnHSM5S-2G2Y,2197
|
60
|
+
hpcflow/sdk/core/task.py,sha256=jcYd6MfMPt0O2vH4Vo_rx4DL4dzNvVoq_ym61pL6GOc,108810
|
60
61
|
hpcflow/sdk/core/task_schema.py,sha256=T94-3KIoMaAlQc0Z51zqGDO46n6CUfE1Mwkvf9GVtXQ,31452
|
61
62
|
hpcflow/sdk/core/test_utils.py,sha256=9VwdOi4oPZ-fPXvLgJNRnRjLy2G4-We9lrOkbrzCVcQ,9334
|
62
|
-
hpcflow/sdk/core/utils.py,sha256=
|
63
|
+
hpcflow/sdk/core/utils.py,sha256=pReOwnmuxJqexPUdaA8UMjJ4o8ucllBVVssWjb_LNQc,25651
|
63
64
|
hpcflow/sdk/core/validation.py,sha256=KBKiy5DdfGiGmMaB0HdKTY0V972u5dJzvkYkX0_KtCo,518
|
64
|
-
hpcflow/sdk/core/workflow.py,sha256=
|
65
|
+
hpcflow/sdk/core/workflow.py,sha256=zKOVjsM5wyRqsFOSdT8R9qucCRhyukfJjXz66TTaaes,104467
|
65
66
|
hpcflow/sdk/core/zarr_io.py,sha256=V_Zm6uSiuaCbXyHFJUO74K1pAr4Zqrj3aLCBjohCwvs,5724
|
66
67
|
hpcflow/sdk/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
67
68
|
hpcflow/sdk/data/config_file_schema.yaml,sha256=7i3z_m3GBRtLyB4c7qPngnlQWqcIq1CyCcOysDyq4es,791
|
68
|
-
hpcflow/sdk/data/config_schema.yaml,sha256=
|
69
|
+
hpcflow/sdk/data/config_schema.yaml,sha256=FOB7hiWySulWA86ERJKeJjzlNKW_eP4q2hUWpV__TEM,6488
|
69
70
|
hpcflow/sdk/data/environments_spec_schema.yaml,sha256=567S6KYkAzeV4eyUCuSpUr8LnsD2BKI7fUZVRxeYtsw,790
|
70
71
|
hpcflow/sdk/data/files_spec_schema.yaml,sha256=yNA52Te-6p3a-TzWvrVx_0kEy7ZpJYhrLmgSbZ6UwH8,165
|
71
72
|
hpcflow/sdk/data/parameters_spec_schema.yaml,sha256=Wj7CvG7Ul1nZDtBca-oxeFH_aSZkBSz4oQpnuM7VKls,148
|
72
73
|
hpcflow/sdk/data/task_schema_spec_schema.yaml,sha256=6NROg7x-493bdvRwvY4M71R7POT-tNnmROkEsnnoL4k,93
|
73
74
|
hpcflow/sdk/data/workflow_spec_schema.yaml,sha256=LLUV6RsdgT2BQrEPNKLCUB5Uijt9wxT9Bac2PLyGha8,1797
|
74
75
|
hpcflow/sdk/demo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
|
-
hpcflow/sdk/demo/cli.py,sha256=
|
76
|
+
hpcflow/sdk/demo/cli.py,sha256=rKU-UqVkBRqGklhKQSFjG1MmBHVFsZChG6MPiFtu6Ls,5622
|
76
77
|
hpcflow/sdk/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
78
|
hpcflow/sdk/helper/cli.py,sha256=QPVvhXEtY3n87ua_6eBh-osaQeEBgG7g7kUR4jghqtI,3491
|
78
79
|
hpcflow/sdk/helper/helper.py,sha256=MkjYKHox1F4XOpy-20sCCDUTWUbQY84QpWZkcpSq9n8,8143
|
79
80
|
hpcflow/sdk/helper/watcher.py,sha256=hLqgwXtZw-6ihNUUcWYnZw8TCyD_AdhYE7abOrO2r_0,4003
|
80
|
-
hpcflow/sdk/log.py,sha256=
|
81
|
+
hpcflow/sdk/log.py,sha256=_DA5nNS8BoSIFB3d9nrIjbxNDxFflEaL3Ubkq8UYQK8,5735
|
81
82
|
hpcflow/sdk/persistence/__init__.py,sha256=IzWycfiO6rDn_7Kocw4Df5ETe9BSoaqqxG7Yp4FW_ls,900
|
82
|
-
hpcflow/sdk/persistence/base.py,sha256=
|
83
|
-
hpcflow/sdk/persistence/json.py,sha256=
|
84
|
-
hpcflow/sdk/persistence/pending.py,sha256=
|
83
|
+
hpcflow/sdk/persistence/base.py,sha256=K4Lp8HmybEGMxnthBV6a2h5KajiJL4gDawuiGukNHsY,60367
|
84
|
+
hpcflow/sdk/persistence/json.py,sha256=5_a73kUmukhNw1LR_evKPKcHo0YcbUzzAtYiS9lN07c,21416
|
85
|
+
hpcflow/sdk/persistence/pending.py,sha256=4V4Xf760GV6JsCl95bm72z8Y78Gw8cbPiBiHZ031orU,24471
|
85
86
|
hpcflow/sdk/persistence/store_resource.py,sha256=oEyocRqa8Uym-57UFosrwate-Xw9O7i2FM82TxHc4m0,4307
|
86
|
-
hpcflow/sdk/persistence/utils.py,sha256=
|
87
|
-
hpcflow/sdk/persistence/zarr.py,sha256=
|
88
|
-
hpcflow/sdk/runtime.py,sha256
|
87
|
+
hpcflow/sdk/persistence/utils.py,sha256=yQT6gS-Ipj2N6grtlV5d0czxxKE0CaeqAkXA1247XGo,1522
|
88
|
+
hpcflow/sdk/persistence/zarr.py,sha256=V1ydOFf9qRWTHl6uEpemqxPi-EnTb5IYauUwmzdE-IA,45135
|
89
|
+
hpcflow/sdk/runtime.py,sha256=_in5ojiy9R8fD1ZNbdE6PDmZx6kSaiG9WPB6kVBFE7k,9217
|
89
90
|
hpcflow/sdk/submission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
|
-
hpcflow/sdk/submission/jobscript.py,sha256=
|
91
|
+
hpcflow/sdk/submission/jobscript.py,sha256=Z9NUzkIcmoFw-XAtG8FdLpO2LtMt3czk1v1BnbM1eZw,44678
|
91
92
|
hpcflow/sdk/submission/jobscript_info.py,sha256=PsaOENLpp2OUKTQO3wRO64TPOgvzdFh9gfNu56X-uBw,1164
|
92
93
|
hpcflow/sdk/submission/schedulers/__init__.py,sha256=sLhK3Usr0gMrKMlbwthIwhT3aSSRwciJFDAMrNWLMLk,2636
|
93
94
|
hpcflow/sdk/submission/schedulers/direct.py,sha256=J4naNvWJ_4UfjiXu46cdM4qI19p2mKSGngLaD2wKU3s,5539
|
94
|
-
hpcflow/sdk/submission/schedulers/sge.py,sha256=
|
95
|
-
hpcflow/sdk/submission/schedulers/slurm.py,sha256=
|
95
|
+
hpcflow/sdk/submission/schedulers/sge.py,sha256=8Y5Rny0nMkEahBynPtEl2X3GNdRjk2p8qwaFucKZoZg,10979
|
96
|
+
hpcflow/sdk/submission/schedulers/slurm.py,sha256=fAqEaomCGIFvAaRihdEfI6epI7Z7Nl1R7yesu-jcd1w,22483
|
96
97
|
hpcflow/sdk/submission/schedulers/utils.py,sha256=Ar3DYO6pmS9S-gZWBCsB6afHvgaReqgAaQ719NWGd2U,364
|
97
98
|
hpcflow/sdk/submission/shells/__init__.py,sha256=dN5pg-5OoeTlqOMtK-0N4ZxbLUgzjIm__dnPnKxAA1k,1169
|
98
99
|
hpcflow/sdk/submission/shells/base.py,sha256=AszYb14J7QMHlttRFdM9GJkzf6USERhfWJ10jwppAb8,2302
|
99
|
-
hpcflow/sdk/submission/shells/bash.py,sha256=
|
100
|
+
hpcflow/sdk/submission/shells/bash.py,sha256=gSVS45vdkLm9g9sCa9m21RHIiltVMjYDcdGEz-cF-YU,10903
|
100
101
|
hpcflow/sdk/submission/shells/os_version.py,sha256=o185IsrF6JsBMr9bZU99ZrDguH342DeHWeclUuNrgeU,3182
|
101
|
-
hpcflow/sdk/submission/shells/powershell.py,sha256=
|
102
|
-
hpcflow/sdk/submission/submission.py,sha256=
|
102
|
+
hpcflow/sdk/submission/shells/powershell.py,sha256=uXL5nfBgngtv3nyc9ECKWqzA2wdsxpCoaUGnZZt3VfI,9049
|
103
|
+
hpcflow/sdk/submission/submission.py,sha256=DL0Rtf3ofEv1seDZC12SGLfmoj_9RjEQkc4GjSiY3bs,21165
|
103
104
|
hpcflow/sdk/typing.py,sha256=p1duIXcWh5FRNZIGUjsTcnqjGDg2-nCpfNicrut-VPk,327
|
104
105
|
hpcflow/tests/conftest.py,sha256=38FCWeZdwoGI1Nh1cHG9afp2K8HJQ4sUE_h3gE26Qe4,3479
|
105
106
|
hpcflow/tests/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -111,7 +112,7 @@ hpcflow/tests/data/workflow_1_wsl.yaml,sha256=-n17Ab2-jj03weAeyYOfafrE0eKdPT0YMt
|
|
111
112
|
hpcflow/tests/data/workflow_test_run_abort.yaml,sha256=K0-uOqL_H1ebgrk7ohrcLGcY_VRYw1F16YL_RIwd1PM,1277
|
112
113
|
hpcflow/tests/schedulers/direct_linux/test_direct_linux_submission.py,sha256=pgHHG4iak0tx-1JTtpo8sCIvcZF2XayzEysjqWa_9LM,456
|
113
114
|
hpcflow/tests/schedulers/slurm/test_slurm_submission.py,sha256=IpLq4TBwhK8_3KrvsySctIn4rA_1oyyWLFonzL28o4Q,403
|
114
|
-
hpcflow/tests/scripts/test_main_scripts.py,sha256=
|
115
|
+
hpcflow/tests/scripts/test_main_scripts.py,sha256=scppeHIUFXhPWP08pALH0cxT4CMoRwGv_HlPkZcQA60,16801
|
115
116
|
hpcflow/tests/shells/wsl/test_wsl_submission.py,sha256=IrpvsxVfsQCUmS8KKn7w9DiVFR8z_ak_IWyAd1E0KKc,516
|
116
117
|
hpcflow/tests/unit/test_action.py,sha256=HYscdTgbh_ExO2dk_Sapo4Cz8SirQtEz5B9uKFYohkw,19907
|
117
118
|
hpcflow/tests/unit/test_action_rule.py,sha256=vX7hMo_9AO5iUGWdDF8uP8rM4jghZidusiY4ZvNcEKo,556
|
@@ -139,14 +140,14 @@ hpcflow/tests/unit/test_slurm.py,sha256=ewfNuXXUEEelAxcd7MBbAQ-RCvU8xBenHTAyfXYF
|
|
139
140
|
hpcflow/tests/unit/test_submission.py,sha256=fPemvWs7rMelKW_2ctEUUjnckGQFXgDzlFRYVY19eJs,16659
|
140
141
|
hpcflow/tests/unit/test_task.py,sha256=94TwyjlhKMRRXTQjys2a1PiK7A-rCzhnvrkk4vRz39I,70000
|
141
142
|
hpcflow/tests/unit/test_task_schema.py,sha256=7a7o42gQhrZPMXfH0a6sGzFCJnuFrbDEl9u3u_bFsgw,3624
|
142
|
-
hpcflow/tests/unit/test_utils.py,sha256=
|
143
|
+
hpcflow/tests/unit/test_utils.py,sha256=JMhSRZFqmI9ZhREJet9en_y3aRVlQlWE7OKpkdt8SVI,14172
|
143
144
|
hpcflow/tests/unit/test_value_sequence.py,sha256=mEU_e5Bu0GzRjBGIgPbcu1MOcafd2bBn6Gz2b02U7jA,15258
|
144
145
|
hpcflow/tests/unit/test_workflow.py,sha256=-zLw-vytXbD9vEGrAQ9ZYLuNqVdxSe9OG0LgSoneTiU,22855
|
145
146
|
hpcflow/tests/unit/test_workflow_template.py,sha256=EItRqUyXpU2z_z1rvpRqa848YOkXiBRLMj3oF_m7Ybw,1328
|
146
147
|
hpcflow/tests/workflows/test_jobscript.py,sha256=9sp1o0g72JZbv2QlOl5v7wCZEFjotxiIKGNUxVaFgaA,724
|
147
148
|
hpcflow/tests/workflows/test_workflows.py,sha256=xai6FRtGqG4lStJk6KmsqPUSuvqs9FrsBOxMVALshIs,13400
|
148
149
|
hpcflow/viz_demo.ipynb,sha256=1QdnVsk72vihv2L6hOGyk318uEa22ZSgGxQCa7hW2oo,6238
|
149
|
-
hpcflow_new2-0.2.
|
150
|
-
hpcflow_new2-0.2.
|
151
|
-
hpcflow_new2-0.2.
|
152
|
-
hpcflow_new2-0.2.
|
150
|
+
hpcflow_new2-0.2.0a160.dist-info/METADATA,sha256=PiPRoSuisn-l79v7FIky-jd5I2RpwzBE2eJ9kzPNuR0,2473
|
151
|
+
hpcflow_new2-0.2.0a160.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
|
152
|
+
hpcflow_new2-0.2.0a160.dist-info/entry_points.txt,sha256=aoGtCnFdfPcXfBdu2zZyMOJoz6fPgdR0elqsgrE-USU,106
|
153
|
+
hpcflow_new2-0.2.0a160.dist-info/RECORD,,
|
File without changes
|
File without changes
|