hpcflow-new2 0.2.0a179__py3-none-any.whl → 0.2.0a180__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 (70) hide show
  1. hpcflow/_version.py +1 -1
  2. hpcflow/data/demo_data_manifest/__init__.py +3 -0
  3. hpcflow/sdk/__init__.py +4 -1
  4. hpcflow/sdk/app.py +160 -15
  5. hpcflow/sdk/cli.py +14 -0
  6. hpcflow/sdk/cli_common.py +83 -0
  7. hpcflow/sdk/config/__init__.py +4 -0
  8. hpcflow/sdk/config/callbacks.py +25 -2
  9. hpcflow/sdk/config/cli.py +4 -1
  10. hpcflow/sdk/config/config.py +188 -14
  11. hpcflow/sdk/config/config_file.py +91 -3
  12. hpcflow/sdk/config/errors.py +33 -0
  13. hpcflow/sdk/core/__init__.py +2 -0
  14. hpcflow/sdk/core/actions.py +492 -35
  15. hpcflow/sdk/core/cache.py +22 -0
  16. hpcflow/sdk/core/command_files.py +221 -5
  17. hpcflow/sdk/core/commands.py +57 -0
  18. hpcflow/sdk/core/element.py +407 -8
  19. hpcflow/sdk/core/environment.py +92 -0
  20. hpcflow/sdk/core/errors.py +245 -61
  21. hpcflow/sdk/core/json_like.py +72 -14
  22. hpcflow/sdk/core/loop.py +122 -21
  23. hpcflow/sdk/core/loop_cache.py +34 -9
  24. hpcflow/sdk/core/object_list.py +172 -26
  25. hpcflow/sdk/core/parallel.py +14 -0
  26. hpcflow/sdk/core/parameters.py +478 -25
  27. hpcflow/sdk/core/rule.py +31 -1
  28. hpcflow/sdk/core/run_dir_files.py +12 -2
  29. hpcflow/sdk/core/task.py +407 -80
  30. hpcflow/sdk/core/task_schema.py +70 -9
  31. hpcflow/sdk/core/test_utils.py +35 -0
  32. hpcflow/sdk/core/utils.py +101 -4
  33. hpcflow/sdk/core/validation.py +13 -1
  34. hpcflow/sdk/core/workflow.py +316 -96
  35. hpcflow/sdk/core/zarr_io.py +23 -0
  36. hpcflow/sdk/data/__init__.py +13 -0
  37. hpcflow/sdk/demo/__init__.py +3 -0
  38. hpcflow/sdk/helper/__init__.py +3 -0
  39. hpcflow/sdk/helper/cli.py +9 -0
  40. hpcflow/sdk/helper/helper.py +28 -0
  41. hpcflow/sdk/helper/watcher.py +33 -0
  42. hpcflow/sdk/log.py +40 -0
  43. hpcflow/sdk/persistence/__init__.py +14 -4
  44. hpcflow/sdk/persistence/base.py +289 -23
  45. hpcflow/sdk/persistence/json.py +29 -0
  46. hpcflow/sdk/persistence/pending.py +217 -107
  47. hpcflow/sdk/persistence/store_resource.py +58 -2
  48. hpcflow/sdk/persistence/utils.py +8 -0
  49. hpcflow/sdk/persistence/zarr.py +68 -1
  50. hpcflow/sdk/runtime.py +52 -10
  51. hpcflow/sdk/submission/__init__.py +3 -0
  52. hpcflow/sdk/submission/jobscript.py +198 -9
  53. hpcflow/sdk/submission/jobscript_info.py +13 -0
  54. hpcflow/sdk/submission/schedulers/__init__.py +60 -0
  55. hpcflow/sdk/submission/schedulers/direct.py +53 -0
  56. hpcflow/sdk/submission/schedulers/sge.py +45 -7
  57. hpcflow/sdk/submission/schedulers/slurm.py +45 -8
  58. hpcflow/sdk/submission/schedulers/utils.py +4 -0
  59. hpcflow/sdk/submission/shells/__init__.py +11 -1
  60. hpcflow/sdk/submission/shells/base.py +32 -1
  61. hpcflow/sdk/submission/shells/bash.py +36 -1
  62. hpcflow/sdk/submission/shells/os_version.py +18 -6
  63. hpcflow/sdk/submission/shells/powershell.py +22 -0
  64. hpcflow/sdk/submission/submission.py +88 -3
  65. hpcflow/sdk/typing.py +10 -1
  66. {hpcflow_new2-0.2.0a179.dist-info → hpcflow_new2-0.2.0a180.dist-info}/METADATA +1 -1
  67. {hpcflow_new2-0.2.0a179.dist-info → hpcflow_new2-0.2.0a180.dist-info}/RECORD +70 -70
  68. {hpcflow_new2-0.2.0a179.dist-info → hpcflow_new2-0.2.0a180.dist-info}/LICENSE +0 -0
  69. {hpcflow_new2-0.2.0a179.dist-info → hpcflow_new2-0.2.0a180.dist-info}/WHEEL +0 -0
  70. {hpcflow_new2-0.2.0a179.dist-info → hpcflow_new2-0.2.0a180.dist-info}/entry_points.txt +0 -0
@@ -1,3 +1,7 @@
1
+ """
2
+ Shell models based on Microsoft PowerShell.
3
+ """
4
+
1
5
  import subprocess
2
6
  from textwrap import dedent, indent
3
7
  from typing import Dict, List, Optional
@@ -11,12 +15,18 @@ class WindowsPowerShell(Shell):
11
15
 
12
16
  # TODO: add snippets that can be used in demo task schemas?
13
17
 
18
+ #: Default for executable name.
14
19
  DEFAULT_EXE = "powershell.exe"
15
20
 
21
+ #: File extension for jobscripts.
16
22
  JS_EXT = ".ps1"
23
+ #: Basic indent.
17
24
  JS_INDENT = " "
25
+ #: Indent for environment setup.
18
26
  JS_ENV_SETUP_INDENT = 2 * JS_INDENT
27
+ #: Template for the jobscript shebang line.
19
28
  JS_SHEBANG = ""
29
+ #: Template for the common part of the jobscript header.
20
30
  JS_HEADER = dedent(
21
31
  """\
22
32
  function {workflow_app_alias} {{
@@ -60,6 +70,7 @@ class WindowsPowerShell(Shell):
60
70
  $ELEM_RUN_DIR_FILE = JoinMultiPath $WK_PATH artifacts submissions $SUB_IDX {element_run_dirs_file_path}
61
71
  """
62
72
  )
73
+ #: Template for the jobscript header when directly executed.
63
74
  JS_DIRECT_HEADER = dedent(
64
75
  """\
65
76
  {shebang}
@@ -68,6 +79,7 @@ class WindowsPowerShell(Shell):
68
79
  {wait_command}
69
80
  """
70
81
  )
82
+ #: Template for the jobscript body.
71
83
  JS_MAIN = dedent(
72
84
  """\
73
85
  $elem_EAR_IDs = get_nth_line $EAR_ID_FILE $JS_elem_idx
@@ -117,6 +129,7 @@ class WindowsPowerShell(Shell):
117
129
  }}
118
130
  """
119
131
  )
132
+ #: Template for the element processing loop in a jobscript.
120
133
  JS_ELEMENT_LOOP = dedent(
121
134
  """\
122
135
  for ($JS_elem_idx = 0; $JS_elem_idx -lt {num_elements}; $JS_elem_idx += 1) {{
@@ -172,6 +185,9 @@ class WindowsPowerShell(Shell):
172
185
  return app_invoc_exe
173
186
 
174
187
  def format_stream_assignment(self, shell_var_name, command):
188
+ """
189
+ Produce code to assign the output of the command to a shell variable.
190
+ """
175
191
  return f"${shell_var_name} = {command}"
176
192
 
177
193
  def format_save_parameter(
@@ -183,6 +199,9 @@ class WindowsPowerShell(Shell):
183
199
  cmd_idx: int,
184
200
  stderr: bool,
185
201
  ):
202
+ """
203
+ Produce code to save a parameter's value into the workflow persistent store.
204
+ """
186
205
  # TODO: quote shell_var_name as well? e.g. if it's a white-space delimited list?
187
206
  # and test.
188
207
  stderr_str = " --stderr" if stderr else ""
@@ -195,6 +214,9 @@ class WindowsPowerShell(Shell):
195
214
  )
196
215
 
197
216
  def format_loop_check(self, workflow_app_alias: str, loop_name: str, run_ID: int):
217
+ """
218
+ Produce code to check the looping status of part of a workflow.
219
+ """
198
220
  return (
199
221
  f"{workflow_app_alias} "
200
222
  f"internal workflow $WK_PATH check-loop "
@@ -1,3 +1,7 @@
1
+ """
2
+ A collection of submissions to a scheduler, generated from a workflow.
3
+ """
4
+
1
5
  from __future__ import annotations
2
6
  from collections import defaultdict
3
7
 
@@ -24,6 +28,9 @@ from hpcflow.sdk.log import TimeIt
24
28
 
25
29
 
26
30
  def timedelta_format(td: timedelta) -> str:
31
+ """
32
+ Convert time delta to string in standard form.
33
+ """
27
34
  days, seconds = td.days, td.seconds
28
35
  hours = seconds // (60 * 60)
29
36
  seconds -= hours * (60 * 60)
@@ -33,6 +40,9 @@ def timedelta_format(td: timedelta) -> str:
33
40
 
34
41
 
35
42
  def timedelta_parse(td_str: str) -> timedelta:
43
+ """
44
+ Parse a string in standard form as a time delta.
45
+ """
36
46
  days, other = td_str.split("-")
37
47
  days = int(days)
38
48
  hours, mins, secs = [int(i) for i in other.split(":")]
@@ -40,12 +50,38 @@ def timedelta_parse(td_str: str) -> timedelta:
40
50
 
41
51
 
42
52
  class SubmissionStatus(enum.Enum):
43
- PENDING = 0 # not yet submitted
44
- SUBMITTED = 1 # all jobscripts submitted successfully
45
- PARTIALLY_SUBMITTED = 2 # some jobscripts submitted successfully
53
+ """
54
+ The overall status of a submission.
55
+ """
56
+
57
+ #: Not yet submitted.
58
+ PENDING = 0
59
+ #: All jobscripts submitted successfully.
60
+ SUBMITTED = 1
61
+ #: Some jobscripts submitted successfully.
62
+ PARTIALLY_SUBMITTED = 2
46
63
 
47
64
 
48
65
  class Submission(JSONLike):
66
+ """
67
+ A collection of jobscripts to be submitted to a scheduler.
68
+
69
+ Parameters
70
+ ----------
71
+ index: int
72
+ The index of this submission.
73
+ jobscripts: list[~hpcflow.app.Jobscript]
74
+ The jobscripts in the submission.
75
+ workflow: ~hpcflow.app.Workflow
76
+ The workflow this is part of.
77
+ submission_parts: dict
78
+ Description of submission parts.
79
+ JS_parallelism: bool
80
+ Whether to exploit jobscript parallelism.
81
+ environments: ~hpcflow.app.EnvironmentsList
82
+ The execution environments to use.
83
+ """
84
+
49
85
  _child_objects = (
50
86
  ChildObjectSpec(
51
87
  name="jobscripts",
@@ -77,6 +113,7 @@ class Submission(JSONLike):
77
113
  self._submission_parts_lst = None # assigned on first access; datetime objects
78
114
 
79
115
  if workflow:
116
+ #: The workflow this is part of.
80
117
  self.workflow = workflow
81
118
 
82
119
  self._set_parent_refs()
@@ -156,14 +193,23 @@ class Submission(JSONLike):
156
193
 
157
194
  @property
158
195
  def index(self) -> int:
196
+ """
197
+ The index of this submission.
198
+ """
159
199
  return self._index
160
200
 
161
201
  @property
162
202
  def environments(self) -> app.EnvironmentsList:
203
+ """
204
+ The execution environments to use.
205
+ """
163
206
  return self._environments
164
207
 
165
208
  @property
166
209
  def submission_parts(self) -> List[Dict]:
210
+ """
211
+ Description of the parts of this submission.
212
+ """
167
213
  if not self._submission_parts:
168
214
  return []
169
215
 
@@ -237,14 +283,23 @@ class Submission(JSONLike):
237
283
 
238
284
  @property
239
285
  def jobscripts(self) -> List:
286
+ """
287
+ The jobscripts in this submission.
288
+ """
240
289
  return self._jobscripts
241
290
 
242
291
  @property
243
292
  def JS_parallelism(self):
293
+ """
294
+ Whether to exploit jobscript parallelism.
295
+ """
244
296
  return self._JS_parallelism
245
297
 
246
298
  @property
247
299
  def workflow(self) -> List:
300
+ """
301
+ The workflow this is part of.
302
+ """
248
303
  return self._workflow
249
304
 
250
305
  @workflow.setter
@@ -268,6 +323,9 @@ class Submission(JSONLike):
268
323
 
269
324
  @property
270
325
  def status(self):
326
+ """
327
+ The status of this submission.
328
+ """
271
329
  if not self.submission_parts:
272
330
  return SubmissionStatus.PENDING
273
331
  else:
@@ -278,6 +336,9 @@ class Submission(JSONLike):
278
336
 
279
337
  @property
280
338
  def needs_submit(self):
339
+ """
340
+ Whether this submission needs a submit to be done.
341
+ """
281
342
  return self.status in (
282
343
  SubmissionStatus.PENDING,
283
344
  SubmissionStatus.PARTIALLY_SUBMITTED,
@@ -285,19 +346,31 @@ class Submission(JSONLike):
285
346
 
286
347
  @property
287
348
  def path(self):
349
+ """
350
+ The path to files associated with this submission.
351
+ """
288
352
  return self.workflow.submissions_path / str(self.index)
289
353
 
290
354
  @property
291
355
  def all_EAR_IDs(self):
356
+ """
357
+ The IDs of all EARs in this submission.
358
+ """
292
359
  return [i for js in self.jobscripts for i in js.all_EAR_IDs]
293
360
 
294
361
  @property
295
362
  def all_EARs(self):
363
+ """
364
+ All EARs in this this submission.
365
+ """
296
366
  return [i for js in self.jobscripts for i in js.all_EARs]
297
367
 
298
368
  @property
299
369
  @TimeIt.decorator
300
370
  def EARs_by_elements(self):
371
+ """
372
+ All EARs in this submission, grouped by element.
373
+ """
301
374
  task_elem_EARs = defaultdict(lambda: defaultdict(list))
302
375
  for i in self.all_EARs:
303
376
  task_elem_EARs[i.task.index][i.element.index].append(i)
@@ -305,10 +378,16 @@ class Submission(JSONLike):
305
378
 
306
379
  @property
307
380
  def abort_EARs_file_name(self):
381
+ """
382
+ The name of a file describing what EARs have aborted.
383
+ """
308
384
  return f"abort_EARs.txt"
309
385
 
310
386
  @property
311
387
  def abort_EARs_file_path(self):
388
+ """
389
+ The path to the file describing what EARs have aborted in this submission.
390
+ """
312
391
  return self.path / self.abort_EARs_file_name
313
392
 
314
393
  @TimeIt.decorator
@@ -357,6 +436,9 @@ class Submission(JSONLike):
357
436
 
358
437
  Uniqueness is determines only by the `Scheduler.unique_properties` tuple.
359
438
 
439
+ Parameters
440
+ ----------
441
+ jobscripts: list[~hpcflow.app.Jobscript]
360
442
  """
361
443
  js_idx = []
362
444
  schedulers = []
@@ -566,6 +648,9 @@ class Submission(JSONLike):
566
648
 
567
649
  @TimeIt.decorator
568
650
  def cancel(self):
651
+ """
652
+ Cancel the active jobs for this submission's jobscripts.
653
+ """
569
654
  act_js = list(self.get_active_jobscripts())
570
655
  if not act_js:
571
656
  print("No active jobscripts to cancel.")
hpcflow/sdk/typing.py CHANGED
@@ -1,9 +1,18 @@
1
+ """
2
+ Common type aliases.
3
+ """
1
4
  from typing import Tuple, TypeVar
2
5
  from pathlib import Path
3
6
 
7
+ #: Type of a value that can be treated as a path.
4
8
  PathLike = TypeVar("PathLike", str, Path, None) # TODO: maybe don't need TypeVar?
5
9
 
6
- # EAR: (task_insert_ID, element_idx, iteration_idx, action_idx, run_idx)
10
+ #: Type of an element index:
11
+ #: (task_insert_ID, element_idx)
7
12
  E_idx_type = Tuple[int, int]
13
+ #: Type of an element iteration index:
14
+ #: (task_insert_ID, element_idx, iteration_idx)
8
15
  EI_idx_type = Tuple[int, int, int]
16
+ #: Type of an element action run index:
17
+ #: (task_insert_ID, element_idx, iteration_idx, action_idx, run_idx)
9
18
  EAR_idx_type = Tuple[int, int, int, int, int]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hpcflow-new2
3
- Version: 0.2.0a179
3
+ Version: 0.2.0a180
4
4
  Summary: Computational workflow management
5
5
  License: MIT
6
6
  Author: aplowman
@@ -1,10 +1,10 @@
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=TYcAhE_Ay7Fm_SpOJ2q6xaQemT7DI5_NnL_KvWXNBFA,26
4
+ hpcflow/_version.py,sha256=mdc3zQgN12onUy1owhuxSuam9KYTcQD91tJLoH7v-iI,26
5
5
  hpcflow/app.py,sha256=d-kgfnZNlqlCi2H8bK26714brD_u3ibN3FaEZgjF9aA,1332
6
6
  hpcflow/cli.py,sha256=G2J3D9v6MnMWOWMMWK6UEKLn_6wnV9lT_qygEBBxg-I,66
7
- hpcflow/data/demo_data_manifest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ hpcflow/data/demo_data_manifest/__init__.py,sha256=Hsq0jT8EXM13wu1MpGy5FQgyuz56ygep4VWOnulFn50,41
8
8
  hpcflow/data/demo_data_manifest/demo_data_manifest.json,sha256=VauMm2cjlwGqR2zlfs_qzQn3zkwiUPG20nmMlucu-yY,91
9
9
  hpcflow/data/scripts/__init__.py,sha256=PqXAhMNG3u78no80syXUGcs6uQ2Ir3pj24ioBjsmhuk,80
10
10
  hpcflow/data/scripts/demo_task_1_generate_t1_infile_1.py,sha256=HdPPv796JjlWuN2K8xUlv3c_kSZRr3GvXr_4KwSCOfQ,212
@@ -34,40 +34,40 @@ hpcflow/data/template_components/task_schemas.yaml,sha256=VMtzckqDyfL9JpjYkG9Fkz
34
34
  hpcflow/data/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  hpcflow/data/workflows/workflow_1.yaml,sha256=lF7Re2SVc_5gQk5AwB0gXaq-n-T5ia4su3zNQ9oMRV0,220
36
36
  hpcflow/examples.ipynb,sha256=cLKp4QsxwwMXRanDnfWY9kqsV23q6G4raOpu6IZXnMw,28553
37
- hpcflow/sdk/__init__.py,sha256=SdzVm7dydLv2kmr2tqrH14Gf1GEAEhsEuAuqiGBLHhM,5700
38
- hpcflow/sdk/app.py,sha256=lS9sl6YEbB02LZbltlgs8neokZNmxfl4aT46-2UuDTQ,96661
39
- hpcflow/sdk/cli.py,sha256=t2p4xxo7yaxO8jZZPcgz1xusjmiOwbqvGtP-2y0Jp8A,37715
40
- hpcflow/sdk/cli_common.py,sha256=ZtJkol29G-Sztuhl013RqRdS3eOWsCCuh6aKfh7A6jY,5540
41
- hpcflow/sdk/config/__init__.py,sha256=qJrrxcAN4f1u_RyTtXgz-xlTLwNafE9v0VEMP1x6-bU,70
42
- hpcflow/sdk/config/callbacks.py,sha256=7z0rFX7ULUTAo24IJr6kLzPmZCgmkaQ8P5e-AfYTcY8,5339
43
- hpcflow/sdk/config/cli.py,sha256=PsmqrC21GAXx_-UHWVgqg-3luVe4r_MG0HjFRv2Yy1Y,10638
44
- hpcflow/sdk/config/config.py,sha256=7kUqTsU4-SDW99lWXaDZ-_s03J3SJubcVUjzYvO2Vho,30304
45
- hpcflow/sdk/config/config_file.py,sha256=JlMcprj0aujFVk8552ahP2f8EXB0tglMaHwzbcGZH6w,12373
46
- hpcflow/sdk/config/errors.py,sha256=2D7HJ1dbyeoD3xk4MuaGSsbJsUyQzyw8kaThEBZfP2I,6876
47
- hpcflow/sdk/core/__init__.py,sha256=GcIklEsXy3M5PWpmxyhd2KoI0u6HjXRIjD_aR1bgRjo,215
48
- hpcflow/sdk/core/actions.py,sha256=66CHgwYAB0oCR6oB5bNbBdUGRGTU3juS1XcMNjj3vP0,77068
49
- hpcflow/sdk/core/cache.py,sha256=MDzqsCg8uMjxEdQ-8ta-uG042yiPrzQoVKMeE6jYW8k,5127
50
- hpcflow/sdk/core/command_files.py,sha256=GEFlgZv7g9lkFoNgwyDtmlI_90e2TWliCJuJimnJZts,18685
51
- hpcflow/sdk/core/commands.py,sha256=5SKxSBuYz8sSvfpp9p5utBwMoQV6Pd2KlGBCpXAHDxE,12741
52
- hpcflow/sdk/core/element.py,sha256=kWEbGWzrXCwhQ1Ie1RFm1v5_q3MQkCDPEIp01nHIf1Q,47202
53
- hpcflow/sdk/core/environment.py,sha256=DGUz1NvliKh6opP0IueGHD69rn_8wFLhDsq6kAmEgM4,4849
54
- hpcflow/sdk/core/errors.py,sha256=ku4wwsrmxBpJBFflUeZD6vrmAqgC7H02VdlRG4aAGqQ,9292
55
- hpcflow/sdk/core/json_like.py,sha256=LRZsUd1tn8zXC8fESeiXs7Eko-VdnB8zcXiqixKVcZM,18874
56
- hpcflow/sdk/core/loop.py,sha256=vj3b0jRCJxkKdhURYTgULoDJ6U3LzAYZMXBzqcCMHr8,31506
57
- hpcflow/sdk/core/loop_cache.py,sha256=BBmJn_pS11gaiHS8qvujBpzWLzPsfs8N6iYIBkZtIwI,5881
58
- hpcflow/sdk/core/object_list.py,sha256=HASx7AMniX82bTlROIgIvrjE_DupmwDgxfkfROmI3GA,20168
59
- hpcflow/sdk/core/parallel.py,sha256=LI-g-qOuOR1oaEUWVT0qW0hmiP9hsJyUP8_IfSTKYYo,95
60
- hpcflow/sdk/core/parameters.py,sha256=0h1M-fXqOVgruyM0Au7Fo38cUbHgDNEPd1Alb1FULxE,65588
61
- hpcflow/sdk/core/rule.py,sha256=3jVsSZCBv4Odxy8QbSbKo9ZcRuU-5DRJoNK8adXCEpI,4567
62
- hpcflow/sdk/core/run_dir_files.py,sha256=_k-hA7dlry9GZw5ZXcntFcPGxg07p03hnHSM5S-2G2Y,2197
63
- hpcflow/sdk/core/task.py,sha256=TTAn9aeJOLyso7t11wt87wxPDVi037vwpFgF9rCfZwQ,122319
64
- hpcflow/sdk/core/task_schema.py,sha256=TipXzC2guu9zilv0En-rHt6lUCTSIj5faI4lVWQdUbA,32346
65
- hpcflow/sdk/core/test_utils.py,sha256=IhCLvRzDuG4hVNGeGulGKfZEgg7Ow-vgiEqewzMiaZ4,9762
66
- hpcflow/sdk/core/utils.py,sha256=cpwfoHgbHanZQXmVZRN3VRW8X-zZxb1I6T0v2tWgBK0,25811
67
- hpcflow/sdk/core/validation.py,sha256=KBKiy5DdfGiGmMaB0HdKTY0V972u5dJzvkYkX0_KtCo,518
68
- hpcflow/sdk/core/workflow.py,sha256=8Xl74KrSXJ5TE5J42w5zLF1Wi-ofALZ0rVlhRDzHAeM,114306
69
- hpcflow/sdk/core/zarr_io.py,sha256=V_Zm6uSiuaCbXyHFJUO74K1pAr4Zqrj3aLCBjohCwvs,5724
70
- hpcflow/sdk/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ hpcflow/sdk/__init__.py,sha256=5DGawWK-NhDA_pYL_NRr4AL8Zk17Ra7Yk_4LuCaUUEU,5785
38
+ hpcflow/sdk/app.py,sha256=k3QHqVmLHKe0Q_-kjjdmB4zfmMHdHB2ZH_jFCXW2JeY,100626
39
+ hpcflow/sdk/cli.py,sha256=h3igMZAjfvQvmF0uKTKLYClPnRxTONIyiv6Cjr0rllo,38015
40
+ hpcflow/sdk/cli_common.py,sha256=F5IXERXVRTlIwjrqYgYeNKLhK9MjpOnv6aAc_xIyIo0,7199
41
+ hpcflow/sdk/config/__init__.py,sha256=7WUK7nb7UW64ZUDzaHa39BFAWWIfGRfgEPjSPxWjgWA,119
42
+ hpcflow/sdk/config/callbacks.py,sha256=jiODBYbUkQUN-M4ayTNG5_ozYarGJA2-QFBDpccsrg8,5858
43
+ hpcflow/sdk/config/cli.py,sha256=Q20ZZllROieX0vXg3JSNZ8y5doH2Sr7HWX5_PN7Wzu8,10736
44
+ hpcflow/sdk/config/config.py,sha256=Dbt1nQT8-24k41DjUaMsPlf_gYwS1sIxK5-hk0Aji4g,35490
45
+ hpcflow/sdk/config/config_file.py,sha256=hskSA4w5qe-zuAb4GTFw0dx0wzC9dzWkGahScaPPy5g,14875
46
+ hpcflow/sdk/config/errors.py,sha256=HpqGJdFlJzFO2B7eRSvTHMySwCUAI-b89YRS1DyZ5As,7490
47
+ hpcflow/sdk/core/__init__.py,sha256=qcsbBwQNp7HVDzW-HZWg2-J0BAFzU0tJmQP0jKDBR-Q,299
48
+ hpcflow/sdk/core/actions.py,sha256=6gJnwYe3Olmz_FwiH4WvDbb3ffvNkhrByg-FsBGVSCI,90840
49
+ hpcflow/sdk/core/cache.py,sha256=EX1Kx8qrAP_lJpadMgIH72CCJVe-_LWRA-Z1PwfsQPg,5949
50
+ hpcflow/sdk/core/command_files.py,sha256=LMa4eXRLnl4NmOy5mYZkEBy4nWA9Nq6eUew8K_r7RCM,25142
51
+ hpcflow/sdk/core/commands.py,sha256=xIg82Fw6djuD32a4BwN5WreOlL-K7cUwg5ks8glwodM,14624
52
+ hpcflow/sdk/core/element.py,sha256=EoWP2o6doLL_DjO1_VjK4y6-KyKasAXv_JWszFS7yIE,58150
53
+ hpcflow/sdk/core/environment.py,sha256=IKU1-S6aCl8SBbXzuC2KTpMfzwTfGgNcdu8Hb7eCqz0,7729
54
+ hpcflow/sdk/core/errors.py,sha256=gcy50oJbjGZzmVKpLl5nUxfJkanw_78bDPi5oQdaMa0,13728
55
+ hpcflow/sdk/core/json_like.py,sha256=opGf5GnQdufrlYZUDI61Sq8FVOWDAIPdFUmmy5ohlbo,21329
56
+ hpcflow/sdk/core/loop.py,sha256=0DEjHiw8xn4S2uPpaucpx2tnkMbETaFwMLnqe_Oye60,34130
57
+ hpcflow/sdk/core/loop_cache.py,sha256=7DzBlkTNRiCn67sVpTo2QuCy3oL_e67JOdQ633NXT7A,7277
58
+ hpcflow/sdk/core/object_list.py,sha256=LyTp76OKWbj7ypyS-ubD4Bgs5so8W3zY0_9YakknOBc,23510
59
+ hpcflow/sdk/core/parallel.py,sha256=tihWhq3tghwSFEUx7_r9MCMosfKkwq_wHrolbCHNd6c,396
60
+ hpcflow/sdk/core/parameters.py,sha256=V4zBIqLuc6lENHoUXTM3bjqRcfRfq-0ay0QuN3WwA5E,77874
61
+ hpcflow/sdk/core/rule.py,sha256=cWpGaBiYsRHKeaG1XfbI_Rgwhpz6rfM-sQ1nUeTKKhA,5625
62
+ hpcflow/sdk/core/run_dir_files.py,sha256=wtgWuvtWuNFo5YG5v1k3EBvYQFqGkr27mv4NqMlp4lQ,2410
63
+ hpcflow/sdk/core/task.py,sha256=zwGW-YewQIh9JSDDV5mrm7epPFT0SRT7ofpI2HUh6RM,131822
64
+ hpcflow/sdk/core/task_schema.py,sha256=ORi3iULG7J7JeQu1CaovTzBc4-mP2tthxq6g0JBdDnE,34448
65
+ hpcflow/sdk/core/test_utils.py,sha256=vkpZesJNFNfBxjIDDr_WKIxFx2tUkde_kPn6eDjtwxs,10303
66
+ hpcflow/sdk/core/utils.py,sha256=9PHfwfUyREJTSQYlCbRbKHwrx1SA6c7Uh_TFrg9xynQ,28591
67
+ hpcflow/sdk/core/validation.py,sha256=jWBJiHOv2_pL-Dua9dpsd6Qc2KmDZOQeVhFri4vMn6U,704
68
+ hpcflow/sdk/core/workflow.py,sha256=nd_NWNPZUgpc4GvX5Ivy1oF__Dj2Q_kIAfvQbBohXjs,120067
69
+ hpcflow/sdk/core/zarr_io.py,sha256=RgJia3jgE3Y16ERU4nWNzHNDkK-qDS1znZMB1IfOUd4,6182
70
+ hpcflow/sdk/data/__init__.py,sha256=-YzROirohSKU2UGYj5vkCe_J2KejbzhIjUXNaJwKHLk,568
71
71
  hpcflow/sdk/data/config_file_schema.yaml,sha256=7i3z_m3GBRtLyB4c7qPngnlQWqcIq1CyCcOysDyq4es,791
72
72
  hpcflow/sdk/data/config_schema.yaml,sha256=FOB7hiWySulWA86ERJKeJjzlNKW_eP4q2hUWpV__TEM,6488
73
73
  hpcflow/sdk/data/environments_spec_schema.yaml,sha256=567S6KYkAzeV4eyUCuSpUr8LnsD2BKI7fUZVRxeYtsw,790
@@ -75,36 +75,36 @@ hpcflow/sdk/data/files_spec_schema.yaml,sha256=yNA52Te-6p3a-TzWvrVx_0kEy7ZpJYhrL
75
75
  hpcflow/sdk/data/parameters_spec_schema.yaml,sha256=Wj7CvG7Ul1nZDtBca-oxeFH_aSZkBSz4oQpnuM7VKls,148
76
76
  hpcflow/sdk/data/task_schema_spec_schema.yaml,sha256=6NROg7x-493bdvRwvY4M71R7POT-tNnmROkEsnnoL4k,93
77
77
  hpcflow/sdk/data/workflow_spec_schema.yaml,sha256=RjMALO0yAjVvnnp9KjzsSFPLkkRHztiuAHhYiXDGyWM,392
78
- hpcflow/sdk/demo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
+ hpcflow/sdk/demo/__init__.py,sha256=8mgXFcEpn817_vO6L785GW268JUBrZt69bTCGszgvf0,28
79
79
  hpcflow/sdk/demo/cli.py,sha256=TDQjEI6a90Yq9J6TVoLh9PHzWPRdAAx24ci3MQYmo-4,5625
80
- hpcflow/sdk/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- hpcflow/sdk/helper/cli.py,sha256=QPVvhXEtY3n87ua_6eBh-osaQeEBgG7g7kUR4jghqtI,3491
82
- hpcflow/sdk/helper/helper.py,sha256=MkjYKHox1F4XOpy-20sCCDUTWUbQY84QpWZkcpSq9n8,8143
83
- hpcflow/sdk/helper/watcher.py,sha256=hLqgwXtZw-6ihNUUcWYnZw8TCyD_AdhYE7abOrO2r_0,4003
84
- hpcflow/sdk/log.py,sha256=_DA5nNS8BoSIFB3d9nrIjbxNDxFflEaL3Ubkq8UYQK8,5735
85
- hpcflow/sdk/persistence/__init__.py,sha256=IzWycfiO6rDn_7Kocw4Df5ETe9BSoaqqxG7Yp4FW_ls,900
86
- hpcflow/sdk/persistence/base.py,sha256=cvk2Uqd671ZFe6JEP_UrZ7W0q2mZjimyA8DFvss8hdo,62030
87
- hpcflow/sdk/persistence/json.py,sha256=55F4Txa50I9HzfETPqwo6gAOBRaoewMHGR3V4-2Fifc,22013
88
- hpcflow/sdk/persistence/pending.py,sha256=XktGkRpJmlyjceOiDY0GEL2xRl6k-gbjt057LmEj5oc,25656
89
- hpcflow/sdk/persistence/store_resource.py,sha256=oEyocRqa8Uym-57UFosrwate-Xw9O7i2FM82TxHc4m0,4307
90
- hpcflow/sdk/persistence/utils.py,sha256=yQT6gS-Ipj2N6grtlV5d0czxxKE0CaeqAkXA1247XGo,1522
91
- hpcflow/sdk/persistence/zarr.py,sha256=PSZCOZiNeTcNdxg__dxyrOllPaEBnOLZF1nw0Zzp154,49147
92
- hpcflow/sdk/runtime.py,sha256=_in5ojiy9R8fD1ZNbdE6PDmZx6kSaiG9WPB6kVBFE7k,9217
93
- hpcflow/sdk/submission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
- hpcflow/sdk/submission/jobscript.py,sha256=Z9NUzkIcmoFw-XAtG8FdLpO2LtMt3czk1v1BnbM1eZw,44678
95
- hpcflow/sdk/submission/jobscript_info.py,sha256=PsaOENLpp2OUKTQO3wRO64TPOgvzdFh9gfNu56X-uBw,1164
96
- hpcflow/sdk/submission/schedulers/__init__.py,sha256=sLhK3Usr0gMrKMlbwthIwhT3aSSRwciJFDAMrNWLMLk,2636
97
- hpcflow/sdk/submission/schedulers/direct.py,sha256=J4naNvWJ_4UfjiXu46cdM4qI19p2mKSGngLaD2wKU3s,5539
98
- hpcflow/sdk/submission/schedulers/sge.py,sha256=8Y5Rny0nMkEahBynPtEl2X3GNdRjk2p8qwaFucKZoZg,10979
99
- hpcflow/sdk/submission/schedulers/slurm.py,sha256=fAqEaomCGIFvAaRihdEfI6epI7Z7Nl1R7yesu-jcd1w,22483
100
- hpcflow/sdk/submission/schedulers/utils.py,sha256=Ar3DYO6pmS9S-gZWBCsB6afHvgaReqgAaQ719NWGd2U,364
101
- hpcflow/sdk/submission/shells/__init__.py,sha256=dN5pg-5OoeTlqOMtK-0N4ZxbLUgzjIm__dnPnKxAA1k,1169
102
- hpcflow/sdk/submission/shells/base.py,sha256=AszYb14J7QMHlttRFdM9GJkzf6USERhfWJ10jwppAb8,2302
103
- hpcflow/sdk/submission/shells/bash.py,sha256=gSVS45vdkLm9g9sCa9m21RHIiltVMjYDcdGEz-cF-YU,10903
104
- hpcflow/sdk/submission/shells/os_version.py,sha256=o185IsrF6JsBMr9bZU99ZrDguH342DeHWeclUuNrgeU,3182
105
- hpcflow/sdk/submission/shells/powershell.py,sha256=uXL5nfBgngtv3nyc9ECKWqzA2wdsxpCoaUGnZZt3VfI,9049
106
- hpcflow/sdk/submission/submission.py,sha256=EGqjxnyAc5MV4aCgo6m5YPZ-Jk4aA8mO8Gh-iOR7lFs,21790
107
- hpcflow/sdk/typing.py,sha256=p1duIXcWh5FRNZIGUjsTcnqjGDg2-nCpfNicrut-VPk,327
80
+ hpcflow/sdk/helper/__init__.py,sha256=HPbnZlvgC9xJKpXyjrBuEXGMIfkLfblD_RBefBLJOFc,29
81
+ hpcflow/sdk/helper/cli.py,sha256=i2CAEi2vgcAN2c-oiGQNHoRRpkFXbpjolypHkPPTACM,3808
82
+ hpcflow/sdk/helper/helper.py,sha256=XkvaZkPwwJg3sakk4VxbUy1NG7_nHeVQ04mV_LnlDDg,8676
83
+ hpcflow/sdk/helper/watcher.py,sha256=k423kvL5gJBHKe63g-hN4qtudIFass1dJG2xMH9WAFE,4597
84
+ hpcflow/sdk/log.py,sha256=kPWNOZfH__SIDTZDy30Yh6M2OzwjBgz2kEg7pVcqf5w,6801
85
+ hpcflow/sdk/persistence/__init__.py,sha256=SgxmOppBDbsNCKtsW_H-Zgg5wfEOL18SEiqSV_51C2o,1167
86
+ hpcflow/sdk/persistence/base.py,sha256=XHRxd_GcB-xlwuPUy8KH_hWYRiw138VEYE44YFEW2qY,70221
87
+ hpcflow/sdk/persistence/json.py,sha256=JMVFyHTSaEmdFJR4VFh3xtfOSeAz5x8zmxQR53INOs4,22699
88
+ hpcflow/sdk/persistence/pending.py,sha256=C9DW8cMHVLJD-018fFK8JlNfRa_zbLCk8V5mrPnWEEQ,30568
89
+ hpcflow/sdk/persistence/store_resource.py,sha256=tu9oDC8KzmfnEsnxRg-bTtGniCRVjJSIDC9fd_KxFJE,5467
90
+ hpcflow/sdk/persistence/utils.py,sha256=ScC6fDTsO4xabH9r6X7yYeE6fsvudE8jeDC4mg0z1Qc,1707
91
+ hpcflow/sdk/persistence/zarr.py,sha256=DVC_kTLwRCbtlCdVs3fgGN2iZzy4-QE_OFD-UjPdvvY,50618
92
+ hpcflow/sdk/runtime.py,sha256=06urvnZ28yJD-vgp9LxfMyKMnSgK7HEHgtX99P0lY3E,10732
93
+ hpcflow/sdk/submission/__init__.py,sha256=79xJXVkddsuj3uJz3BV9iOnAV7vCeJvLrhKccOA_dnU,67
94
+ hpcflow/sdk/submission/jobscript.py,sha256=qEdA3oYUinnpXUlWTy0Wz7d1he2BPHsdI-bcELpjLI0,50134
95
+ hpcflow/sdk/submission/jobscript_info.py,sha256=JpGjqWt0JSdXCbSWvz5dx0ISc5aKSbme-hyy8plLpxI,1528
96
+ hpcflow/sdk/submission/schedulers/__init__.py,sha256=MHfCYSkd3dOfmTAhCKWZGxR-Kujo0QJTjL5V60vafrg,4353
97
+ hpcflow/sdk/submission/schedulers/direct.py,sha256=sot-tC-lUf5cUXTmxbdI_hgzuX8QqlLJVzjFEEJhxOg,6774
98
+ hpcflow/sdk/submission/schedulers/sge.py,sha256=Jki8gUKxM9lrDr7WeosYn0Yg1MGr_r6duhsoFzxnWsE,12106
99
+ hpcflow/sdk/submission/schedulers/slurm.py,sha256=SnE_4cIstH2DxxnpmjarHVHC6k7UnvDw_94GKmvIfcg,23455
100
+ hpcflow/sdk/submission/schedulers/utils.py,sha256=cv6CKIDJPD7bbnOW9rGmo4hzE9OwrFyz9fBrRW6vCFg,406
101
+ hpcflow/sdk/submission/shells/__init__.py,sha256=ab3glhnQzkXa5Tzr4FlT3YRORz51OPsWYn2NkP7T_LA,1388
102
+ hpcflow/sdk/submission/shells/base.py,sha256=lmOB0DwiFXqIInQCytwL3JeFCLRHz5AkWqeVpeX3Ac8,3065
103
+ hpcflow/sdk/submission/shells/bash.py,sha256=pLoY3eS-So3xijuiQaygDd5kEtrg6HicgyLd3ahD2hI,12081
104
+ hpcflow/sdk/submission/shells/os_version.py,sha256=2K8iKAMK_E3bVNUjvuv0Fw_UPIAsPTawlrgYAADDruE,3441
105
+ hpcflow/sdk/submission/shells/powershell.py,sha256=cLAY-ADehLJO9W-KZv5M2IClacvqNqfErsAEerZnvnM,9819
106
+ hpcflow/sdk/submission/submission.py,sha256=rrOlSFc1kkQiUmNm-UuJFWxygao-aAJoT8DVkdyilks,23908
107
+ hpcflow/sdk/typing.py,sha256=zpDfDXBptQ4HLsl6v_5hAS40pjcZmyMRzpReF6AIm30,591
108
108
  hpcflow/tests/conftest.py,sha256=38FCWeZdwoGI1Nh1cHG9afp2K8HJQ4sUE_h3gE26Qe4,3479
109
109
  hpcflow/tests/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
110
  hpcflow/tests/data/benchmark_N_elements.yaml,sha256=6N6QK5y4A-o6u-XZHe7igcUvzjx73sBmnNLt9MXCSJs,108
@@ -151,8 +151,8 @@ hpcflow/tests/unit/test_workflow_template.py,sha256=fF7LNveMwCledgncNCRfD9Nd9dL9
151
151
  hpcflow/tests/workflows/test_jobscript.py,sha256=9sp1o0g72JZbv2QlOl5v7wCZEFjotxiIKGNUxVaFgaA,724
152
152
  hpcflow/tests/workflows/test_workflows.py,sha256=xai6FRtGqG4lStJk6KmsqPUSuvqs9FrsBOxMVALshIs,13400
153
153
  hpcflow/viz_demo.ipynb,sha256=1QdnVsk72vihv2L6hOGyk318uEa22ZSgGxQCa7hW2oo,6238
154
- hpcflow_new2-0.2.0a179.dist-info/LICENSE,sha256=Xhxf_KsrJNJFGMogumZhXSTPhUOVHCWf7nU-TDzqg0E,16763
155
- hpcflow_new2-0.2.0a179.dist-info/METADATA,sha256=8Yt_xlNITllwO3XF1oGRbDMzTPqxyUFvDcD2eWX25lw,2466
156
- hpcflow_new2-0.2.0a179.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
157
- hpcflow_new2-0.2.0a179.dist-info/entry_points.txt,sha256=aoGtCnFdfPcXfBdu2zZyMOJoz6fPgdR0elqsgrE-USU,106
158
- hpcflow_new2-0.2.0a179.dist-info/RECORD,,
154
+ hpcflow_new2-0.2.0a180.dist-info/LICENSE,sha256=Xhxf_KsrJNJFGMogumZhXSTPhUOVHCWf7nU-TDzqg0E,16763
155
+ hpcflow_new2-0.2.0a180.dist-info/METADATA,sha256=GR0rKYjZcg_w5TM1dXqTczwgi6XlRWf3qRRbEeviLag,2466
156
+ hpcflow_new2-0.2.0a180.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
157
+ hpcflow_new2-0.2.0a180.dist-info/entry_points.txt,sha256=aoGtCnFdfPcXfBdu2zZyMOJoz6fPgdR0elqsgrE-USU,106
158
+ hpcflow_new2-0.2.0a180.dist-info/RECORD,,