hpcflow-new2 0.2.0a149__py3-none-any.whl → 0.2.0a153__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/sdk/app.py +35 -4
- hpcflow/sdk/cli.py +32 -1
- hpcflow/sdk/cli_common.py +11 -0
- hpcflow/sdk/core/actions.py +2 -0
- hpcflow/sdk/core/errors.py +4 -0
- hpcflow/sdk/core/task.py +8 -0
- hpcflow/sdk/core/utils.py +44 -16
- hpcflow/sdk/core/workflow.py +108 -20
- hpcflow/sdk/demo/cli.py +7 -0
- hpcflow/sdk/log.py +124 -0
- hpcflow/sdk/persistence/base.py +4 -1
- hpcflow/sdk/persistence/pending.py +26 -0
- hpcflow/sdk/persistence/zarr.py +3 -0
- hpcflow/tests/data/benchmark_N_elements.yaml +6 -0
- hpcflow/tests/unit/test_utils.py +45 -1
- hpcflow/tests/unit/test_workflow_template.py +9 -0
- {hpcflow_new2-0.2.0a149.dist-info → hpcflow_new2-0.2.0a153.dist-info}/METADATA +1 -1
- {hpcflow_new2-0.2.0a149.dist-info → hpcflow_new2-0.2.0a153.dist-info}/RECORD +21 -20
- {hpcflow_new2-0.2.0a149.dist-info → hpcflow_new2-0.2.0a153.dist-info}/WHEEL +0 -0
- {hpcflow_new2-0.2.0a149.dist-info → hpcflow_new2-0.2.0a153.dist-info}/entry_points.txt +0 -0
@@ -7,6 +7,8 @@ from datetime import datetime
|
|
7
7
|
|
8
8
|
from typing import Any, Dict, List, Optional, Tuple
|
9
9
|
|
10
|
+
from hpcflow.sdk.log import TimeIt
|
11
|
+
|
10
12
|
|
11
13
|
class PendingChanges:
|
12
14
|
"""Class to store pending changes and merge them into a persistent store.
|
@@ -112,6 +114,7 @@ class PendingChanges:
|
|
112
114
|
def logger(self):
|
113
115
|
return self.app.persistence_logger
|
114
116
|
|
117
|
+
@TimeIt.decorator
|
115
118
|
def commit_all(self):
|
116
119
|
"""Commit all pending changes to disk."""
|
117
120
|
self.logger.info(f"committing all pending changes: {self.where_pending()}")
|
@@ -131,6 +134,7 @@ class PendingChanges:
|
|
131
134
|
|
132
135
|
assert not (self)
|
133
136
|
|
137
|
+
@TimeIt.decorator
|
134
138
|
def commit_tasks(self) -> None:
|
135
139
|
"""Commit pending tasks to disk."""
|
136
140
|
if self.add_tasks:
|
@@ -144,6 +148,7 @@ class PendingChanges:
|
|
144
148
|
}
|
145
149
|
self.clear_add_tasks()
|
146
150
|
|
151
|
+
@TimeIt.decorator
|
147
152
|
def commit_loops(self) -> None:
|
148
153
|
"""Commit pending loops to disk."""
|
149
154
|
if self.add_loops:
|
@@ -154,6 +159,7 @@ class PendingChanges:
|
|
154
159
|
self.store._append_loops(loops)
|
155
160
|
self.clear_add_loops()
|
156
161
|
|
162
|
+
@TimeIt.decorator
|
157
163
|
def commit_submissions(self) -> None:
|
158
164
|
"""Commit pending submissions to disk."""
|
159
165
|
if self.add_submissions:
|
@@ -166,12 +172,14 @@ class PendingChanges:
|
|
166
172
|
self.store._append_submissions(subs)
|
167
173
|
self.clear_add_submissions()
|
168
174
|
|
175
|
+
@TimeIt.decorator
|
169
176
|
def commit_submission_parts(self) -> None:
|
170
177
|
if self.add_submission_parts:
|
171
178
|
self.logger.debug(f"commit: adding pending submission parts")
|
172
179
|
self.store._append_submission_parts(self.add_submission_parts)
|
173
180
|
self.clear_add_submission_parts()
|
174
181
|
|
182
|
+
@TimeIt.decorator
|
175
183
|
def commit_elem_IDs(self) -> None:
|
176
184
|
# TODO: could be batched up?
|
177
185
|
for task_ID, elem_IDs in self.add_elem_IDs.items():
|
@@ -181,6 +189,7 @@ class PendingChanges:
|
|
181
189
|
self.store._append_task_element_IDs(task_ID, elem_IDs)
|
182
190
|
self.clear_add_elem_IDs()
|
183
191
|
|
192
|
+
@TimeIt.decorator
|
184
193
|
def commit_elements(self) -> None:
|
185
194
|
if self.add_elements:
|
186
195
|
elems = self.store.get_elements(self.add_elements)
|
@@ -193,6 +202,7 @@ class PendingChanges:
|
|
193
202
|
}
|
194
203
|
self.clear_add_elements()
|
195
204
|
|
205
|
+
@TimeIt.decorator
|
196
206
|
def commit_element_sets(self) -> None:
|
197
207
|
# TODO: could be batched up?
|
198
208
|
for task_id, es_js in self.add_element_sets.items():
|
@@ -200,6 +210,7 @@ class PendingChanges:
|
|
200
210
|
self.store._append_element_sets(task_id, es_js)
|
201
211
|
self.clear_add_element_sets()
|
202
212
|
|
213
|
+
@TimeIt.decorator
|
203
214
|
def commit_elem_iter_IDs(self) -> None:
|
204
215
|
# TODO: could be batched up?
|
205
216
|
for elem_ID, iter_IDs in self.add_elem_iter_IDs.items():
|
@@ -210,6 +221,7 @@ class PendingChanges:
|
|
210
221
|
self.store._append_elem_iter_IDs(elem_ID, iter_IDs)
|
211
222
|
self.clear_add_elem_iter_IDs()
|
212
223
|
|
224
|
+
@TimeIt.decorator
|
213
225
|
def commit_elem_iters(self) -> None:
|
214
226
|
if self.add_elem_iters:
|
215
227
|
iters = self.store.get_element_iterations(self.add_elem_iters.keys())
|
@@ -228,6 +240,7 @@ class PendingChanges:
|
|
228
240
|
]
|
229
241
|
self.clear_add_elem_iters()
|
230
242
|
|
243
|
+
@TimeIt.decorator
|
231
244
|
def commit_elem_iter_EAR_IDs(self) -> None:
|
232
245
|
# TODO: could be batched up?
|
233
246
|
for iter_ID, act_EAR_IDs in self.add_elem_iter_EAR_IDs.items():
|
@@ -239,6 +252,7 @@ class PendingChanges:
|
|
239
252
|
self.store._append_elem_iter_EAR_IDs(iter_ID, act_idx, EAR_IDs)
|
240
253
|
self.clear_add_elem_iter_EAR_IDs()
|
241
254
|
|
255
|
+
@TimeIt.decorator
|
242
256
|
def commit_EARs(self) -> None:
|
243
257
|
if self.add_EARs:
|
244
258
|
EARs = self.store.get_EARs(self.add_EARs)
|
@@ -262,6 +276,7 @@ class PendingChanges:
|
|
262
276
|
|
263
277
|
self.clear_add_EARs()
|
264
278
|
|
279
|
+
@TimeIt.decorator
|
265
280
|
def commit_EARs_initialised(self) -> None:
|
266
281
|
if self.set_EARs_initialised:
|
267
282
|
iter_ids = self.set_EARs_initialised
|
@@ -274,6 +289,7 @@ class PendingChanges:
|
|
274
289
|
self._store._update_elem_iter_EARs_initialised(i)
|
275
290
|
self.clear_set_EARs_initialised()
|
276
291
|
|
292
|
+
@TimeIt.decorator
|
277
293
|
def commit_EAR_submission_indices(self) -> None:
|
278
294
|
# TODO: could be batched up?
|
279
295
|
for EAR_id, sub_idx in self.set_EAR_submission_indices.items():
|
@@ -284,6 +300,7 @@ class PendingChanges:
|
|
284
300
|
self.store._update_EAR_submission_index(EAR_id, sub_idx)
|
285
301
|
self.clear_set_EAR_submission_indices()
|
286
302
|
|
303
|
+
@TimeIt.decorator
|
287
304
|
def commit_EAR_starts(self) -> None:
|
288
305
|
# TODO: could be batched up?
|
289
306
|
for EAR_id, (time, snap, hostname) in self.set_EAR_starts.items():
|
@@ -294,6 +311,7 @@ class PendingChanges:
|
|
294
311
|
self.store._update_EAR_start(EAR_id, time, snap, hostname)
|
295
312
|
self.clear_set_EAR_starts()
|
296
313
|
|
314
|
+
@TimeIt.decorator
|
297
315
|
def commit_EAR_ends(self) -> None:
|
298
316
|
# TODO: could be batched up?
|
299
317
|
for EAR_id, (time, snap, ext, suc) in self.set_EAR_ends.items():
|
@@ -304,6 +322,7 @@ class PendingChanges:
|
|
304
322
|
self.store._update_EAR_end(EAR_id, time, snap, ext, suc)
|
305
323
|
self.clear_set_EAR_ends()
|
306
324
|
|
325
|
+
@TimeIt.decorator
|
307
326
|
def commit_EAR_skips(self) -> None:
|
308
327
|
# TODO: could be batched up?
|
309
328
|
for EAR_id in self.set_EAR_skips:
|
@@ -311,6 +330,7 @@ class PendingChanges:
|
|
311
330
|
self.store._update_EAR_skip(EAR_id)
|
312
331
|
self.clear_set_EAR_skips()
|
313
332
|
|
333
|
+
@TimeIt.decorator
|
314
334
|
def commit_js_metadata(self) -> None:
|
315
335
|
if self.set_js_metadata:
|
316
336
|
self.logger.debug(
|
@@ -319,6 +339,7 @@ class PendingChanges:
|
|
319
339
|
self.store._update_js_metadata(self.set_js_metadata)
|
320
340
|
self.clear_set_js_metadata()
|
321
341
|
|
342
|
+
@TimeIt.decorator
|
322
343
|
def commit_parameters(self) -> None:
|
323
344
|
"""Make pending parameters persistent."""
|
324
345
|
if self.add_parameters:
|
@@ -334,6 +355,7 @@ class PendingChanges:
|
|
334
355
|
self.store._set_parameter_value(param_id, value, is_file)
|
335
356
|
self.clear_set_parameters()
|
336
357
|
|
358
|
+
@TimeIt.decorator
|
337
359
|
def commit_files(self) -> None:
|
338
360
|
"""Add pending files to the files directory."""
|
339
361
|
if self.add_files:
|
@@ -341,12 +363,14 @@ class PendingChanges:
|
|
341
363
|
self.store._append_files(self.add_files)
|
342
364
|
self.clear_add_files()
|
343
365
|
|
366
|
+
@TimeIt.decorator
|
344
367
|
def commit_template_components(self) -> None:
|
345
368
|
if self.add_template_components:
|
346
369
|
self.logger.debug(f"commit: adding template components.")
|
347
370
|
self.store._update_template_components(self.store.get_template_components())
|
348
371
|
self.clear_add_template_components()
|
349
372
|
|
373
|
+
@TimeIt.decorator
|
350
374
|
def commit_param_sources(self) -> None:
|
351
375
|
"""Make pending changes to parameter sources persistent."""
|
352
376
|
for param_id, src in self.update_param_sources.items():
|
@@ -355,6 +379,7 @@ class PendingChanges:
|
|
355
379
|
self.store._update_parameter_source(param_id, src)
|
356
380
|
self.clear_update_param_sources()
|
357
381
|
|
382
|
+
@TimeIt.decorator
|
358
383
|
def commit_loop_indices(self) -> None:
|
359
384
|
"""Make pending update to element iteration loop indices persistent."""
|
360
385
|
for iter_ID, loop_idx in self.update_loop_indices.items():
|
@@ -365,6 +390,7 @@ class PendingChanges:
|
|
365
390
|
self.store._update_loop_index(iter_ID, loop_idx)
|
366
391
|
self.clear_update_loop_indices()
|
367
392
|
|
393
|
+
@TimeIt.decorator
|
368
394
|
def commit_loop_num_iters(self) -> None:
|
369
395
|
"""Make pending update to the number of loop iterations."""
|
370
396
|
for index, num_iters in self.update_loop_num_iters.items():
|
hpcflow/sdk/persistence/zarr.py
CHANGED
@@ -34,6 +34,8 @@ from hpcflow.sdk.persistence.base import (
|
|
34
34
|
from hpcflow.sdk.persistence.store_resource import ZarrAttrsStoreResource
|
35
35
|
from hpcflow.sdk.persistence.utils import ask_pw_on_auth_exc
|
36
36
|
from hpcflow.sdk.persistence.pending import CommitResourceMap
|
37
|
+
from hpcflow.sdk.log import TimeIt
|
38
|
+
|
37
39
|
|
38
40
|
blosc.use_threads = False # hpcflow is a multiprocess program in general
|
39
41
|
|
@@ -982,6 +984,7 @@ class ZarrPersistentStore(PersistentStore):
|
|
982
984
|
}
|
983
985
|
return iters
|
984
986
|
|
987
|
+
@TimeIt.decorator
|
985
988
|
def _get_persistent_parameters(
|
986
989
|
self,
|
987
990
|
id_lst: Iterable[int],
|
hpcflow/tests/unit/test_utils.py
CHANGED
@@ -3,7 +3,7 @@ import pytest
|
|
3
3
|
import zarr
|
4
4
|
import numpy as np
|
5
5
|
from numpy.typing import NDArray
|
6
|
-
from hpcflow.sdk.core.errors import InvalidIdentifier
|
6
|
+
from hpcflow.sdk.core.errors import InvalidIdentifier, MissingVariableSubstitutionError
|
7
7
|
|
8
8
|
from hpcflow.sdk.core.utils import (
|
9
9
|
JSONLikeDirSnapShot,
|
@@ -17,6 +17,7 @@ from hpcflow.sdk.core.utils import (
|
|
17
17
|
check_valid_py_identifier,
|
18
18
|
reshape,
|
19
19
|
split_param_label,
|
20
|
+
substitute_string_vars,
|
20
21
|
swap_nested_dict_keys,
|
21
22
|
)
|
22
23
|
|
@@ -471,3 +472,46 @@ def test_swap_nested_dict_keys():
|
|
471
472
|
"direct": {"p1": {"all_iterations": True}, "p3": {}},
|
472
473
|
"json": {"p2": {}},
|
473
474
|
}
|
475
|
+
|
476
|
+
|
477
|
+
def test_substitute_string_vars():
|
478
|
+
assert (
|
479
|
+
substitute_string_vars(
|
480
|
+
"hello <<var:my_name>>!",
|
481
|
+
variables={"my_name": "bob"},
|
482
|
+
)
|
483
|
+
== "hello bob!"
|
484
|
+
)
|
485
|
+
|
486
|
+
|
487
|
+
def test_substitute_string_vars_repeated_var():
|
488
|
+
assert (
|
489
|
+
substitute_string_vars(
|
490
|
+
"hello <<var:my_name>>; how are you <<var:my_name>>!",
|
491
|
+
variables={"my_name": "bob"},
|
492
|
+
)
|
493
|
+
== "hello bob; how are you bob!"
|
494
|
+
)
|
495
|
+
|
496
|
+
|
497
|
+
def test_substitute_string_vars_no_vars():
|
498
|
+
assert (
|
499
|
+
substitute_string_vars(
|
500
|
+
"hello bob!",
|
501
|
+
)
|
502
|
+
== "hello bob!"
|
503
|
+
)
|
504
|
+
|
505
|
+
|
506
|
+
def test_substitute_string_vars_raise_no_vars():
|
507
|
+
with pytest.raises(MissingVariableSubstitutionError):
|
508
|
+
substitute_string_vars("hello <<var:my_name>>")
|
509
|
+
|
510
|
+
|
511
|
+
def test_substitute_string_vars_raise_missing():
|
512
|
+
with pytest.raises(MissingVariableSubstitutionError):
|
513
|
+
substitute_string_vars("hello <<var:my_name>>", variables={"a": "b"})
|
514
|
+
|
515
|
+
|
516
|
+
def test_substitute_string_vars_non_str():
|
517
|
+
assert substitute_string_vars("<<var:a>>", variables={"a": 2}) == "2"
|
@@ -24,3 +24,12 @@ def test_reuse(null_config, tmp_path):
|
|
24
24
|
wkt = hf.WorkflowTemplate(name="test", tasks=[])
|
25
25
|
wk1 = hf.Workflow.from_template(wkt, name="test_1", path=tmp_path)
|
26
26
|
wk2 = hf.Workflow.from_template(wkt, name="test_2", path=tmp_path)
|
27
|
+
|
28
|
+
|
29
|
+
def test_workflow_template_vars(tmp_path, new_null_config):
|
30
|
+
num_repeats = 2
|
31
|
+
wkt = make_test_data_YAML_workflow_template(
|
32
|
+
workflow_name="benchmark_N_elements.yaml",
|
33
|
+
variables={"N": num_repeats},
|
34
|
+
)
|
35
|
+
assert wkt.tasks[0].element_sets[0].repeats[0]["number"] == num_repeats
|
@@ -1,7 +1,7 @@
|
|
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=
|
4
|
+
hpcflow/_version.py,sha256=VATiDwk3P7uiXGEaFC2lsSEIJPtfwrzAE_Am9o1urrQ,26
|
5
5
|
hpcflow/app.py,sha256=GQsMq_sjjXxMLLiIPF1ZvyapW_7IgsxALCCwMiqmC8I,1520
|
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
|
@@ -34,9 +34,9 @@ hpcflow/data/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
34
34
|
hpcflow/data/workflows/workflow_1.yaml,sha256=lF7Re2SVc_5gQk5AwB0gXaq-n-T5ia4su3zNQ9oMRV0,220
|
35
35
|
hpcflow/examples.ipynb,sha256=cLKp4QsxwwMXRanDnfWY9kqsV23q6G4raOpu6IZXnMw,28553
|
36
36
|
hpcflow/sdk/__init__.py,sha256=QN1hUM9MdJ5yB3ou8q3ky530TdSd8BJi1V4XI2NmT4k,5643
|
37
|
-
hpcflow/sdk/app.py,sha256=
|
38
|
-
hpcflow/sdk/cli.py,sha256=
|
39
|
-
hpcflow/sdk/cli_common.py,sha256=
|
37
|
+
hpcflow/sdk/app.py,sha256=JxBI3hPXkSfNvd71OUQaA1QpYw2vvFqBl_0eB2-wE8Q,90382
|
38
|
+
hpcflow/sdk/cli.py,sha256=0ww5eqikpUcy-zNwpZiKgFs86lF1hymtDFXWau-E9UA,34624
|
39
|
+
hpcflow/sdk/cli_common.py,sha256=5lYYuwlP1D9kmULEk4r5iCT30hrx8sCjd40pttIfvh4,4257
|
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
|
@@ -44,24 +44,24 @@ hpcflow/sdk/config/config.py,sha256=9DZi7sebFJUU4gGfJIrKijNAOtWy015Rc8my8hF1mXo,
|
|
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=
|
47
|
+
hpcflow/sdk/core/actions.py,sha256=ad8oQlLL_wxXnurao0ABLLKm0yA4lHyoBwR06PAk8Jg,74184
|
48
48
|
hpcflow/sdk/core/command_files.py,sha256=oEW6g6f_cQFmRAgP1DTWPZPhufXcRi56yJZWaS8fU28,18161
|
49
49
|
hpcflow/sdk/core/commands.py,sha256=-Tiu7zVVwWr1xiTXVB9oH3E4g09ebRRtHSRrMdFDCRY,12060
|
50
50
|
hpcflow/sdk/core/element.py,sha256=nKKvUDP-rLECq-1nP4Fv0OfUA7GKmE3df37ku0ZyKzQ,45408
|
51
51
|
hpcflow/sdk/core/environment.py,sha256=DGUz1NvliKh6opP0IueGHD69rn_8wFLhDsq6kAmEgM4,4849
|
52
|
-
hpcflow/sdk/core/errors.py,sha256=
|
52
|
+
hpcflow/sdk/core/errors.py,sha256=AaJWGyKUuHlAAP2LcVIg7D7aw2noL06G4OzP89sUcxU,8712
|
53
53
|
hpcflow/sdk/core/json_like.py,sha256=LRZsUd1tn8zXC8fESeiXs7Eko-VdnB8zcXiqixKVcZM,18874
|
54
54
|
hpcflow/sdk/core/loop.py,sha256=5Ai_HHCzM21_IOvtgobE8yi_b9dc9jWQijt2LyI3PlM,21865
|
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
58
|
hpcflow/sdk/core/rule.py,sha256=chMn-Unu_4Mtc3T4z93OpmYcqOapqYAdBWuRSP8CBdg,4510
|
59
|
-
hpcflow/sdk/core/task.py,sha256=
|
59
|
+
hpcflow/sdk/core/task.py,sha256=qX_LECPBK2ZESsSTvl_DQFN8IwULorJXy7g5WBwHpaE,108874
|
60
60
|
hpcflow/sdk/core/task_schema.py,sha256=T94-3KIoMaAlQc0Z51zqGDO46n6CUfE1Mwkvf9GVtXQ,31452
|
61
61
|
hpcflow/sdk/core/test_utils.py,sha256=9VwdOi4oPZ-fPXvLgJNRnRjLy2G4-We9lrOkbrzCVcQ,9334
|
62
|
-
hpcflow/sdk/core/utils.py,sha256=
|
62
|
+
hpcflow/sdk/core/utils.py,sha256=9VXHcM64DfuqvivAuc56g9S8EYEGUOU1TH-ZwfqDWH8,24403
|
63
63
|
hpcflow/sdk/core/validation.py,sha256=KBKiy5DdfGiGmMaB0HdKTY0V972u5dJzvkYkX0_KtCo,518
|
64
|
-
hpcflow/sdk/core/workflow.py,sha256=
|
64
|
+
hpcflow/sdk/core/workflow.py,sha256=139wrrGPZfNyNpcb0TP_1892yOvPByqczJuQ-N1k5Kw,100608
|
65
65
|
hpcflow/sdk/core/zarr_io.py,sha256=V_Zm6uSiuaCbXyHFJUO74K1pAr4Zqrj3aLCBjohCwvs,5724
|
66
66
|
hpcflow/sdk/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
67
67
|
hpcflow/sdk/data/config_file_schema.yaml,sha256=7i3z_m3GBRtLyB4c7qPngnlQWqcIq1CyCcOysDyq4es,791
|
@@ -72,19 +72,19 @@ hpcflow/sdk/data/parameters_spec_schema.yaml,sha256=Wj7CvG7Ul1nZDtBca-oxeFH_aSZk
|
|
72
72
|
hpcflow/sdk/data/task_schema_spec_schema.yaml,sha256=6NROg7x-493bdvRwvY4M71R7POT-tNnmROkEsnnoL4k,93
|
73
73
|
hpcflow/sdk/data/workflow_spec_schema.yaml,sha256=LLUV6RsdgT2BQrEPNKLCUB5Uijt9wxT9Bac2PLyGha8,1797
|
74
74
|
hpcflow/sdk/demo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
|
-
hpcflow/sdk/demo/cli.py,sha256=
|
75
|
+
hpcflow/sdk/demo/cli.py,sha256=hMwViEXn_D7h4-G1VRMnw93ij7Gi0chM2SXQx4h7db8,5345
|
76
76
|
hpcflow/sdk/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
77
|
hpcflow/sdk/helper/cli.py,sha256=QPVvhXEtY3n87ua_6eBh-osaQeEBgG7g7kUR4jghqtI,3491
|
78
78
|
hpcflow/sdk/helper/helper.py,sha256=MkjYKHox1F4XOpy-20sCCDUTWUbQY84QpWZkcpSq9n8,8143
|
79
79
|
hpcflow/sdk/helper/watcher.py,sha256=hLqgwXtZw-6ihNUUcWYnZw8TCyD_AdhYE7abOrO2r_0,4003
|
80
|
-
hpcflow/sdk/log.py,sha256=
|
80
|
+
hpcflow/sdk/log.py,sha256=VVxBnV0B_mcCTK3WrpEICAe-gnZsxoomafuOEGgO0TI,5735
|
81
81
|
hpcflow/sdk/persistence/__init__.py,sha256=IzWycfiO6rDn_7Kocw4Df5ETe9BSoaqqxG7Yp4FW_ls,900
|
82
|
-
hpcflow/sdk/persistence/base.py,sha256=
|
82
|
+
hpcflow/sdk/persistence/base.py,sha256=MN-ZlQLZ_q6WGlUz0JiDYGG4x3gvUV_2MfOvQ3sMecE,56283
|
83
83
|
hpcflow/sdk/persistence/json.py,sha256=aWj5R9PsGzudkD5N85W3vQF2tifekgnAbAtw-OK6ixg,19465
|
84
|
-
hpcflow/sdk/persistence/pending.py,sha256=
|
84
|
+
hpcflow/sdk/persistence/pending.py,sha256=Ub4m4ng2x9oDTR2h6PoBJiUZKLwmMYprJ5hdI3FQ2r0,23498
|
85
85
|
hpcflow/sdk/persistence/store_resource.py,sha256=oEyocRqa8Uym-57UFosrwate-Xw9O7i2FM82TxHc4m0,4307
|
86
86
|
hpcflow/sdk/persistence/utils.py,sha256=woLFUXYkdZQqXeBcoDjVuPEq2xdaWVhGO0YP6Qvc2Ww,1517
|
87
|
-
hpcflow/sdk/persistence/zarr.py,sha256=
|
87
|
+
hpcflow/sdk/persistence/zarr.py,sha256=FIuufyaQJ6guGonmbc5a6-gGGXvalaLSbzPNolLDv3U,41592
|
88
88
|
hpcflow/sdk/runtime.py,sha256=-n8OHcbhSVCGGlyWcJvadpsUAIJzzuWVXkZav1RQSio,9555
|
89
89
|
hpcflow/sdk/submission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
90
|
hpcflow/sdk/submission/jobscript.py,sha256=XoFiD6qbWOVG30bRtiAfys-erTbv4g6PWGRxSux0kP4,44170
|
@@ -103,6 +103,7 @@ hpcflow/sdk/submission/submission.py,sha256=Y5sc8kf9WNTJ0uLM9wRCKkiLodewq2oOsrlL
|
|
103
103
|
hpcflow/sdk/typing.py,sha256=p1duIXcWh5FRNZIGUjsTcnqjGDg2-nCpfNicrut-VPk,327
|
104
104
|
hpcflow/tests/conftest.py,sha256=38FCWeZdwoGI1Nh1cHG9afp2K8HJQ4sUE_h3gE26Qe4,3479
|
105
105
|
hpcflow/tests/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
106
|
+
hpcflow/tests/data/benchmark_N_elements.yaml,sha256=6N6QK5y4A-o6u-XZHe7igcUvzjx73sBmnNLt9MXCSJs,108
|
106
107
|
hpcflow/tests/data/workflow_1.json,sha256=xdqa8nIOxNN-A2F7wJX7LTOT3KOEZmulaa-9tsSB-nk,119
|
107
108
|
hpcflow/tests/data/workflow_1.yaml,sha256=7mGwCCQX3VBWcpSYecAKqz_Gd-IODjhOlDNPh95Rw2U,85
|
108
109
|
hpcflow/tests/data/workflow_1_slurm.yaml,sha256=0Hg9FbOKb0iFKzJOStVloJ5wgTGYYxoc2Yg8-HnXlXY,124
|
@@ -138,14 +139,14 @@ hpcflow/tests/unit/test_slurm.py,sha256=ewfNuXXUEEelAxcd7MBbAQ-RCvU8xBenHTAyfXYF
|
|
138
139
|
hpcflow/tests/unit/test_submission.py,sha256=E8ku48TeCpAQlYDci30D-hf0YvzbT3jpm-emAaS02Is,15764
|
139
140
|
hpcflow/tests/unit/test_task.py,sha256=94TwyjlhKMRRXTQjys2a1PiK7A-rCzhnvrkk4vRz39I,70000
|
140
141
|
hpcflow/tests/unit/test_task_schema.py,sha256=7a7o42gQhrZPMXfH0a6sGzFCJnuFrbDEl9u3u_bFsgw,3624
|
141
|
-
hpcflow/tests/unit/test_utils.py,sha256=
|
142
|
+
hpcflow/tests/unit/test_utils.py,sha256=le9bb-HvGSkbrntX5uUr6AePNYckKidgeY1FNqOPBUo,13092
|
142
143
|
hpcflow/tests/unit/test_value_sequence.py,sha256=mEU_e5Bu0GzRjBGIgPbcu1MOcafd2bBn6Gz2b02U7jA,15258
|
143
144
|
hpcflow/tests/unit/test_workflow.py,sha256=-zLw-vytXbD9vEGrAQ9ZYLuNqVdxSe9OG0LgSoneTiU,22855
|
144
|
-
hpcflow/tests/unit/test_workflow_template.py,sha256=
|
145
|
+
hpcflow/tests/unit/test_workflow_template.py,sha256=EItRqUyXpU2z_z1rvpRqa848YOkXiBRLMj3oF_m7Ybw,1328
|
145
146
|
hpcflow/tests/workflows/test_jobscript.py,sha256=9sp1o0g72JZbv2QlOl5v7wCZEFjotxiIKGNUxVaFgaA,724
|
146
147
|
hpcflow/tests/workflows/test_workflows.py,sha256=xai6FRtGqG4lStJk6KmsqPUSuvqs9FrsBOxMVALshIs,13400
|
147
148
|
hpcflow/viz_demo.ipynb,sha256=1QdnVsk72vihv2L6hOGyk318uEa22ZSgGxQCa7hW2oo,6238
|
148
|
-
hpcflow_new2-0.2.
|
149
|
-
hpcflow_new2-0.2.
|
150
|
-
hpcflow_new2-0.2.
|
151
|
-
hpcflow_new2-0.2.
|
149
|
+
hpcflow_new2-0.2.0a153.dist-info/METADATA,sha256=qSCp4BL7_XSlWLbkgyvfTBF5t4yiqdjv6Rh_crWhJqg,2516
|
150
|
+
hpcflow_new2-0.2.0a153.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
|
151
|
+
hpcflow_new2-0.2.0a153.dist-info/entry_points.txt,sha256=aoGtCnFdfPcXfBdu2zZyMOJoz6fPgdR0elqsgrE-USU,106
|
152
|
+
hpcflow_new2-0.2.0a153.dist-info/RECORD,,
|
File without changes
|
File without changes
|