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.
Files changed (36) hide show
  1. hpcflow/_version.py +1 -1
  2. hpcflow/app.py +0 -3
  3. hpcflow/sdk/__init__.py +2 -0
  4. hpcflow/sdk/app.py +91 -18
  5. hpcflow/sdk/cli.py +18 -0
  6. hpcflow/sdk/cli_common.py +16 -0
  7. hpcflow/sdk/config/config.py +0 -4
  8. hpcflow/sdk/core/actions.py +20 -7
  9. hpcflow/sdk/core/command_files.py +4 -4
  10. hpcflow/sdk/core/element.py +15 -16
  11. hpcflow/sdk/core/rule.py +2 -0
  12. hpcflow/sdk/core/run_dir_files.py +63 -0
  13. hpcflow/sdk/core/task.py +34 -35
  14. hpcflow/sdk/core/utils.py +37 -15
  15. hpcflow/sdk/core/workflow.py +147 -49
  16. hpcflow/sdk/data/config_schema.yaml +0 -6
  17. hpcflow/sdk/demo/cli.py +12 -0
  18. hpcflow/sdk/log.py +2 -2
  19. hpcflow/sdk/persistence/base.py +142 -12
  20. hpcflow/sdk/persistence/json.py +84 -63
  21. hpcflow/sdk/persistence/pending.py +21 -7
  22. hpcflow/sdk/persistence/utils.py +2 -1
  23. hpcflow/sdk/persistence/zarr.py +143 -108
  24. hpcflow/sdk/runtime.py +0 -12
  25. hpcflow/sdk/submission/jobscript.py +25 -4
  26. hpcflow/sdk/submission/schedulers/sge.py +3 -0
  27. hpcflow/sdk/submission/schedulers/slurm.py +3 -0
  28. hpcflow/sdk/submission/shells/bash.py +2 -2
  29. hpcflow/sdk/submission/shells/powershell.py +2 -2
  30. hpcflow/sdk/submission/submission.py +24 -7
  31. hpcflow/tests/scripts/test_main_scripts.py +40 -0
  32. hpcflow/tests/unit/test_utils.py +28 -0
  33. {hpcflow_new2-0.2.0a158.dist-info → hpcflow_new2-0.2.0a160.dist-info}/METADATA +1 -2
  34. {hpcflow_new2-0.2.0a158.dist-info → hpcflow_new2-0.2.0a160.dist-info}/RECORD +36 -35
  35. {hpcflow_new2-0.2.0a158.dist-info → hpcflow_new2-0.2.0a160.dist-info}/WHEEL +0 -0
  36. {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
- if self.jobscripts[i].start_time:
175
- all_part_starts.append(self.jobscripts[i].start_time)
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
- if self.jobscripts[i].end_time:
187
- all_part_ends.append(self.jobscripts[i].end_time)
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.stop()
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.update(f"Submitting jobscript {js.index}...")
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.stop()
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)
@@ -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.0a158
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=r8ptXPZcFJexuxp2d9u747EhQ1a07r3A3SkNJOWkTjw,26
5
- hpcflow/app.py,sha256=GQsMq_sjjXxMLLiIPF1ZvyapW_7IgsxALCCwMiqmC8I,1520
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=QN1hUM9MdJ5yB3ou8q3ky530TdSd8BJi1V4XI2NmT4k,5643
37
- hpcflow/sdk/app.py,sha256=5HkZ7DUQPyg081WW2jVVg_Ene_-1C7MOB6CTlqPTnTk,90416
38
- hpcflow/sdk/cli.py,sha256=0ww5eqikpUcy-zNwpZiKgFs86lF1hymtDFXWau-E9UA,34624
39
- hpcflow/sdk/cli_common.py,sha256=5lYYuwlP1D9kmULEk4r5iCT30hrx8sCjd40pttIfvh4,4257
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=9DZi7sebFJUU4gGfJIrKijNAOtWy015Rc8my8hF1mXo,30408
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=ad8oQlLL_wxXnurao0ABLLKm0yA4lHyoBwR06PAk8Jg,74184
48
- hpcflow/sdk/core/command_files.py,sha256=oEW6g6f_cQFmRAgP1DTWPZPhufXcRi56yJZWaS8fU28,18161
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=S7MMXycpQXNbXZ_HyXICM8zMW4RRC32k5SDb9UbXQj8,45614
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=chMn-Unu_4Mtc3T4z93OpmYcqOapqYAdBWuRSP8CBdg,4510
59
- hpcflow/sdk/core/task.py,sha256=qX_LECPBK2ZESsSTvl_DQFN8IwULorJXy7g5WBwHpaE,108874
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=vgFc0_UD-2HWanUINT_e4VOffglP_H7RIcpuN-7AoQs,25015
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=139wrrGPZfNyNpcb0TP_1892yOvPByqczJuQ-N1k5Kw,100608
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=tfQkdE-qdgUHmTgihTAv_8hCjSoLZrV6vl3Y2uiJI0g,6598
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=0W0SLt3c0ZtK1o3o7Uhxl_6Y5x-DJ_gb38fWCgFbKqg,5357
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=VVxBnV0B_mcCTK3WrpEICAe-gnZsxoomafuOEGgO0TI,5735
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=XkvxWLhy1Oo12sjtZbLHTMM_DLaWzOknnuEiinyp_nk,56473
83
- hpcflow/sdk/persistence/json.py,sha256=e6LgaDdHg3SsBfgip315FFJqqr0r2JL6eJFJX4qsTGQ,20358
84
- hpcflow/sdk/persistence/pending.py,sha256=FBKaPnD97iOjVQxMBMKmNapmRfMc02wEW5x55AWQXm8,23491
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=woLFUXYkdZQqXeBcoDjVuPEq2xdaWVhGO0YP6Qvc2Ww,1517
87
- hpcflow/sdk/persistence/zarr.py,sha256=fz4vvGE2AOXvAjbe-FjIQfRxNBZNRqcGMkq4EQ9sMw0,43579
88
- hpcflow/sdk/runtime.py,sha256=-n8OHcbhSVCGGlyWcJvadpsUAIJzzuWVXkZav1RQSio,9555
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=XoFiD6qbWOVG30bRtiAfys-erTbv4g6PWGRxSux0kP4,44170
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=ZciDi9YcGcQhGrEZeKMfVaDQEK70Sthz9DNc1XDRqXA,10900
95
- hpcflow/sdk/submission/schedulers/slurm.py,sha256=epZDlKhtEafFmE4BPRag7UwwyjIcaYmblYfMX7qioWA,22404
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=L29a3nYM3OqhyYJfBMlltGjTa_vBgrVFI2K6Ujs2aHM,10920
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=pNoj8mUbUXpWKv7i4Y1BL5EFgA6h631ckXEJMZDdZFc,9066
102
- hpcflow/sdk/submission/submission.py,sha256=Y5sc8kf9WNTJ0uLM9wRCKkiLodewq2oOsrlLYQlBamw,20769
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=KZLI0q6mphD7aCwXvKPyu7hhXvoftDtYGesP7e6RONE,14891
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=aWfhGDJWGlBfk7yi0hcrPlcd159MX0V0MwsndureeP8,13466
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.0a158.dist-info/METADATA,sha256=wxcx45hPRHvCWTzK0ngk9acWCwIuSkheHwf0A3VEcBI,2516
150
- hpcflow_new2-0.2.0a158.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
151
- hpcflow_new2-0.2.0a158.dist-info/entry_points.txt,sha256=aoGtCnFdfPcXfBdu2zZyMOJoz6fPgdR0elqsgrE-USU,106
152
- hpcflow_new2-0.2.0a158.dist-info/RECORD,,
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,,