hpcflow-new2 0.2.0a207__py3-none-any.whl → 0.2.0a209__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/data/scripts/main_script_test_hdf5_in_obj_group.py +12 -0
- hpcflow/sdk/core/actions.py +1 -1
- hpcflow/sdk/core/element.py +5 -4
- hpcflow/sdk/core/errors.py +5 -3
- hpcflow/sdk/core/parameters.py +4 -4
- hpcflow/sdk/core/task.py +1 -1
- hpcflow/sdk/core/test_utils.py +20 -5
- hpcflow/tests/scripts/test_main_scripts.py +44 -0
- {hpcflow_new2-0.2.0a207.dist-info → hpcflow_new2-0.2.0a209.dist-info}/METADATA +1 -1
- {hpcflow_new2-0.2.0a207.dist-info → hpcflow_new2-0.2.0a209.dist-info}/RECORD +14 -13
- {hpcflow_new2-0.2.0a207.dist-info → hpcflow_new2-0.2.0a209.dist-info}/LICENSE +0 -0
- {hpcflow_new2-0.2.0a207.dist-info → hpcflow_new2-0.2.0a209.dist-info}/WHEEL +0 -0
- {hpcflow_new2-0.2.0a207.dist-info → hpcflow_new2-0.2.0a209.dist-info}/entry_points.txt +0 -0
hpcflow/_version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.2.
|
1
|
+
__version__ = "0.2.0a209"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import h5py # type: ignore[import-untyped]
|
2
|
+
|
3
|
+
|
4
|
+
def main_script_test_hdf5_in_obj_group(_input_files):
|
5
|
+
# read inputs
|
6
|
+
with h5py.File(_input_files["hdf5"], mode="r") as fh:
|
7
|
+
all_a = [p1c_dat.attrs["a"].item() for p1c_dat in fh["p1c"].values()]
|
8
|
+
|
9
|
+
# process
|
10
|
+
p2 = sum(all_a) + 100
|
11
|
+
|
12
|
+
return {"p2": p2}
|
hpcflow/sdk/core/actions.py
CHANGED
@@ -988,7 +988,7 @@ class ElementActionRun(AppAware):
|
|
988
988
|
try:
|
989
989
|
assert isinstance(v, ParameterValue)
|
990
990
|
v.dump_to_HDF5_group(grp_k)
|
991
|
-
except
|
991
|
+
except AssertionError:
|
992
992
|
# probably an element group (i.e. v is a list of `ParameterValue`
|
993
993
|
# objects):
|
994
994
|
assert isinstance(v, list)
|
hpcflow/sdk/core/element.py
CHANGED
@@ -66,10 +66,11 @@ class _ElementPrefixedParameter(AppAware):
|
|
66
66
|
|
67
67
|
def __getattr__(self, name: str) -> ElementParameter | Mapping[str, ElementParameter]:
|
68
68
|
if name not in self.prefixed_names_unlabelled:
|
69
|
-
|
70
|
-
f"
|
71
|
-
|
72
|
-
|
69
|
+
if names_str := self.prefixed_names_unlabelled_str:
|
70
|
+
msg_info = f"Available {self._prefix} are: {names_str}."
|
71
|
+
else:
|
72
|
+
msg_info = f"There are no {self._prefix} available."
|
73
|
+
raise ValueError(f"No {self._prefix} named {name!r}. {msg_info}")
|
73
74
|
|
74
75
|
if labels := self.prefixed_names_unlabelled.get(name):
|
75
76
|
# is multiple; return a dict of `ElementParameter`s
|
hpcflow/sdk/core/errors.py
CHANGED
@@ -14,7 +14,7 @@ if TYPE_CHECKING:
|
|
14
14
|
from .object_list import WorkflowLoopList
|
15
15
|
from .parameters import InputSource, ValueSequence, SchemaInput
|
16
16
|
from .types import ScriptData
|
17
|
-
from .task import WorkflowTask
|
17
|
+
from .task import WorkflowTask, Task
|
18
18
|
|
19
19
|
|
20
20
|
class InputValueDuplicateSequenceAddress(ValueError):
|
@@ -94,10 +94,12 @@ class MissingInputs(Exception):
|
|
94
94
|
|
95
95
|
# TODO: add links to doc pages for common user-exceptions?
|
96
96
|
|
97
|
-
def __init__(self, missing_inputs: Iterable[str]) -> None:
|
97
|
+
def __init__(self, task: Task, missing_inputs: Iterable[str]) -> None:
|
98
98
|
self.missing_inputs = tuple(missing_inputs)
|
99
99
|
missing_str = ", ".join(map(repr, missing_inputs))
|
100
|
-
super().__init__(
|
100
|
+
super().__init__(
|
101
|
+
f"Task {task.name}: the following inputs have no sources: {missing_str}."
|
102
|
+
)
|
101
103
|
|
102
104
|
|
103
105
|
class UnrequiredInputSources(ValueError):
|
hpcflow/sdk/core/parameters.py
CHANGED
@@ -43,7 +43,7 @@ if TYPE_CHECKING:
|
|
43
43
|
from collections.abc import Iterable, Iterator, Mapping
|
44
44
|
from typing import Any, ClassVar, Literal
|
45
45
|
from typing_extensions import Self, TypeAlias
|
46
|
-
from h5py import Group # type: ignore
|
46
|
+
from h5py import Group as HDF5Group # type: ignore
|
47
47
|
from numpy.typing import NDArray
|
48
48
|
from ..app import BaseApp
|
49
49
|
from ..typing import ParamSource
|
@@ -116,21 +116,21 @@ class ParameterValue:
|
|
116
116
|
"""
|
117
117
|
raise NotImplementedError
|
118
118
|
|
119
|
-
def dump_to_HDF5_group(self, group:
|
119
|
+
def dump_to_HDF5_group(self, group: HDF5Group):
|
120
120
|
"""
|
121
121
|
Write this parameter value to an HDF5 group.
|
122
122
|
"""
|
123
123
|
raise NotImplementedError
|
124
124
|
|
125
125
|
@classmethod
|
126
|
-
def dump_element_group_to_HDF5_group(cls, objs: list[
|
126
|
+
def dump_element_group_to_HDF5_group(cls, objs: list[Self], group: HDF5Group):
|
127
127
|
"""
|
128
128
|
Write a list (from an element group) of parameter values to an HDF5 group.
|
129
129
|
"""
|
130
130
|
raise NotImplementedError
|
131
131
|
|
132
132
|
@classmethod
|
133
|
-
def save_from_HDF5_group(cls, group:
|
133
|
+
def save_from_HDF5_group(cls, group: HDF5Group, param_id: int, workflow: Workflow):
|
134
134
|
"""
|
135
135
|
Extract a parameter value from an HDF5 group.
|
136
136
|
"""
|
hpcflow/sdk/core/task.py
CHANGED
@@ -2217,7 +2217,7 @@ class WorkflowTask(AppAware):
|
|
2217
2217
|
self.__enforce_some_sanity(sources_by_task, element_set)
|
2218
2218
|
|
2219
2219
|
if missing:
|
2220
|
-
raise MissingInputs(missing)
|
2220
|
+
raise MissingInputs(self.template, missing)
|
2221
2221
|
return padded_elem_iters
|
2222
2222
|
|
2223
2223
|
def __enforce_some_sanity(
|
hpcflow/sdk/core/test_utils.py
CHANGED
@@ -13,8 +13,8 @@ from hpcflow.sdk.typing import hydrate
|
|
13
13
|
|
14
14
|
if TYPE_CHECKING:
|
15
15
|
from collections.abc import Iterable, Mapping
|
16
|
-
from typing_extensions import TypeAlias
|
17
|
-
from h5py import Group as
|
16
|
+
from typing_extensions import TypeAlias, Self
|
17
|
+
from h5py import Group as HDF5Group # type: ignore
|
18
18
|
from .actions import Action
|
19
19
|
from .element import ElementGroup
|
20
20
|
from .loop import Loop
|
@@ -272,7 +272,7 @@ class P1_sub_parameter_cls(ParameterValue):
|
|
272
272
|
def prepare_JSON_dump(self) -> dict[str, Any]:
|
273
273
|
return {"e": self.e}
|
274
274
|
|
275
|
-
def dump_to_HDF5_group(self, group:
|
275
|
+
def dump_to_HDF5_group(self, group: HDF5Group):
|
276
276
|
group.attrs["e"] = self.e
|
277
277
|
|
278
278
|
|
@@ -376,7 +376,7 @@ class P1_parameter_cls(ParameterValue):
|
|
376
376
|
sub_param_js = self.sub_param.prepare_JSON_dump() if self.sub_param else None
|
377
377
|
return {"a": self.a, "d": self.d, "sub_param": sub_param_js}
|
378
378
|
|
379
|
-
def dump_to_HDF5_group(self, group:
|
379
|
+
def dump_to_HDF5_group(self, group: HDF5Group):
|
380
380
|
group.attrs["a"] = self.a
|
381
381
|
if self.d is not None:
|
382
382
|
group.attrs["d"] = self.d
|
@@ -384,13 +384,28 @@ class P1_parameter_cls(ParameterValue):
|
|
384
384
|
sub_group = group.create_group("sub_param")
|
385
385
|
self.sub_param.dump_to_HDF5_group(sub_group)
|
386
386
|
|
387
|
+
@classmethod
|
388
|
+
def dump_element_group_to_HDF5_group(self, objs: list[Self], group: HDF5Group):
|
389
|
+
"""
|
390
|
+
Write a list (from an element group) of parameter values to an HDF5 group.
|
391
|
+
"""
|
392
|
+
|
393
|
+
for obj_idx, p1_obj in enumerate(objs):
|
394
|
+
grp_i = group.create_group(f"{obj_idx}")
|
395
|
+
grp_i.attrs["a"] = p1_obj.a
|
396
|
+
if p1_obj.d is not None:
|
397
|
+
group.attrs["d"] = p1_obj.d
|
398
|
+
if p1_obj.sub_param:
|
399
|
+
sub_group = grp_i.create_group("sub_param")
|
400
|
+
p1_obj.sub_param.dump_to_HDF5_group(sub_group)
|
401
|
+
|
387
402
|
@classmethod
|
388
403
|
def save_from_JSON(cls, data: dict, param_id: int | list[int], workflow: Workflow):
|
389
404
|
obj = cls(**data) # TODO: pass sub-param
|
390
405
|
workflow.set_parameter_value(param_id=param_id, value=obj, commit=True)
|
391
406
|
|
392
407
|
@classmethod
|
393
|
-
def save_from_HDF5_group(cls, group:
|
408
|
+
def save_from_HDF5_group(cls, group: HDF5Group, param_id: int, workflow: Workflow):
|
394
409
|
a = group.attrs["a"].item()
|
395
410
|
if "d" in group.attrs:
|
396
411
|
d = group.attrs["d"].item()
|
@@ -458,6 +458,50 @@ def test_script_hdf5_in_obj(null_config, tmp_path: Path, combine_scripts: bool):
|
|
458
458
|
assert p2.value == a_val + 100
|
459
459
|
|
460
460
|
|
461
|
+
@pytest.mark.integration
|
462
|
+
@pytest.mark.skipif("hf.run_time_info.is_frozen")
|
463
|
+
@pytest.mark.parametrize("combine_scripts", [False, True])
|
464
|
+
def test_script_hdf5_in_obj_group(null_config, tmp_path: Path, combine_scripts: bool):
|
465
|
+
s0 = hf.TaskSchema(
|
466
|
+
objective="define_p1c",
|
467
|
+
inputs=[hf.SchemaInput(parameter=hf.Parameter("p1c"))],
|
468
|
+
)
|
469
|
+
s1 = hf.TaskSchema(
|
470
|
+
objective="t1",
|
471
|
+
inputs=[hf.SchemaInput(parameter=hf.Parameter("p1c"), group="my_group")],
|
472
|
+
outputs=[hf.SchemaOutput(parameter=hf.Parameter("p2"))],
|
473
|
+
actions=[
|
474
|
+
hf.Action(
|
475
|
+
script="<<script:main_script_test_hdf5_in_obj_group.py>>",
|
476
|
+
script_data_in="hdf5",
|
477
|
+
script_data_out="direct",
|
478
|
+
script_exe="python_script",
|
479
|
+
environments=[hf.ActionEnvironment(environment="python_env")],
|
480
|
+
requires_dir=True,
|
481
|
+
)
|
482
|
+
],
|
483
|
+
parameter_class_modules=["hpcflow.sdk.core.test_utils"],
|
484
|
+
)
|
485
|
+
a_vals = (1, 2)
|
486
|
+
t0 = hf.Task(
|
487
|
+
schema=s0,
|
488
|
+
sequences=[hf.ValueSequence(path="inputs.p1c", values=[P1(a=i) for i in a_vals])],
|
489
|
+
groups=[hf.ElementGroup("my_group")],
|
490
|
+
)
|
491
|
+
t1 = hf.Task(schema=s1)
|
492
|
+
wk = hf.Workflow.from_template_data(
|
493
|
+
tasks=[t0, t1],
|
494
|
+
template_name="main_script_test",
|
495
|
+
path=tmp_path,
|
496
|
+
resources={"any": {"combine_scripts": combine_scripts}},
|
497
|
+
)
|
498
|
+
wk.submit(wait=True, add_to_known=False, status=False)
|
499
|
+
|
500
|
+
p2 = wk.tasks[1].elements[0].outputs.p2
|
501
|
+
assert isinstance(p2, hf.ElementParameter)
|
502
|
+
assert p2.value == sum(a_vals) + 100
|
503
|
+
|
504
|
+
|
461
505
|
@pytest.mark.integration
|
462
506
|
@pytest.mark.skipif("hf.run_time_info.is_frozen")
|
463
507
|
@pytest.mark.parametrize("combine_scripts", [False, True])
|
@@ -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=P2b-8QdQqkSS7cJB6CB3CudUuJ9iZzTh2fQF4hNdCa4,1118
|
4
|
-
hpcflow/_version.py,sha256=
|
4
|
+
hpcflow/_version.py,sha256=NywescsJ4WKZobruzz_SLeat9xPFki8q1Hgx-CuicPY,26
|
5
5
|
hpcflow/app.py,sha256=gl2viVS65PbpDhUp2DARaYHFDqDWQjuoyB3ikrCNRW4,1367
|
6
6
|
hpcflow/cli.py,sha256=G2J3D9v6MnMWOWMMWK6UEKLn_6wnV9lT_qygEBBxg-I,66
|
7
7
|
hpcflow/data/demo_data_manifest/__init__.py,sha256=Hsq0jT8EXM13wu1MpGy5FQgyuz56ygep4VWOnulFn50,41
|
@@ -37,6 +37,7 @@ hpcflow/data/scripts/main_script_test_direct_in_group_one_fail_direct_out_3.py,s
|
|
37
37
|
hpcflow/data/scripts/main_script_test_direct_sub_param_in_direct_out.py,sha256=pQ-BD1FmqTIHeCaAakCr1M61cWb1Fjinzr1qA3HX3ik,131
|
38
38
|
hpcflow/data/scripts/main_script_test_hdf5_in_obj.py,sha256=WMRuzwkU4WFLrmUGD0999IowHY1y7cLeS2iuR2R7Dqo,265
|
39
39
|
hpcflow/data/scripts/main_script_test_hdf5_in_obj_2.py,sha256=SCDkTctGAaHAOWxijVNs59SVsL6YiaIttNN43noPpis,255
|
40
|
+
hpcflow/data/scripts/main_script_test_hdf5_in_obj_group.py,sha256=ACIHdsp6Q7-TsE2P0uiaFhSy9E92PGoRqDE8mnpbmOQ,318
|
40
41
|
hpcflow/data/scripts/main_script_test_hdf5_out_obj.py,sha256=nV_U5DA2xAeV1z9TLyIOUu3rfI2AZSFteFSbGVHQnFE,299
|
41
42
|
hpcflow/data/scripts/main_script_test_json_and_direct_in_json_out.py,sha256=Y1kpKu59DbjqKW2i4QcmfHzdXYmiAEvNzqIqBU_Z4fg,336
|
42
43
|
hpcflow/data/scripts/main_script_test_json_in_json_and_direct_out.py,sha256=jjiceG1d6saMWOYZIHfK1pJIWhwyNRAQeZgy49NC5LU,374
|
@@ -73,27 +74,27 @@ hpcflow/sdk/config/config_file.py,sha256=wfDjozV9lXTnaxQoe-z-1Y7dtO0N4o1kgEwKtrL
|
|
73
74
|
hpcflow/sdk/config/errors.py,sha256=Ft0e0rqIh9NoxWu3R8RSHel2fLONrXrgmFdNGZ_nOac,8341
|
74
75
|
hpcflow/sdk/config/types.py,sha256=hw8latN2PqgGB_cOcD2pmgf5hSE7Dl94xLGKosydpCo,3935
|
75
76
|
hpcflow/sdk/core/__init__.py,sha256=uxvGIUmzvFvylxFL4OGoKHs8GABHHPFaki-Xyc7Nquk,861
|
76
|
-
hpcflow/sdk/core/actions.py,sha256=
|
77
|
+
hpcflow/sdk/core/actions.py,sha256=379uJT_fScwa-n_aEGd-DlXzZpFLFWkctxnMa-u4Y0U,118219
|
77
78
|
hpcflow/sdk/core/app_aware.py,sha256=A5L9U_wcf9eleuDj1vxZMai1Fk7FLNdMjzA-ay1hHeE,568
|
78
79
|
hpcflow/sdk/core/cache.py,sha256=FNOaZzZmtcoFwByR39kI65XdbO6i6qpYup9qrwUN-YM,8172
|
79
80
|
hpcflow/sdk/core/command_files.py,sha256=9YbQuOfa0HrAZcAtgH8_k3oJRfRVRpv5QtZ9Uag9W2I,24961
|
80
81
|
hpcflow/sdk/core/commands.py,sha256=vFyZ9Cv_tvGqSGtVEnAHAeXA-HAxWoF0nmf1e0bFCvs,15993
|
81
|
-
hpcflow/sdk/core/element.py,sha256=
|
82
|
+
hpcflow/sdk/core/element.py,sha256=VVk-lt03kN-vk38jhuzTV8GcPKWKyziXS2gbDA9mTBQ,68412
|
82
83
|
hpcflow/sdk/core/enums.py,sha256=b0Zd35AdEEfQYWIO0IHc---hqcWyQ3HC35vGWbzB7sA,4386
|
83
84
|
hpcflow/sdk/core/environment.py,sha256=vvHJhdI8Jeae20AGvbp0DY-Wm7efNFlAkkcLESKljFQ,7955
|
84
|
-
hpcflow/sdk/core/errors.py,sha256=
|
85
|
+
hpcflow/sdk/core/errors.py,sha256=5Bjk1w8FdVP4X7oFCNtzxJ_q4uaSZfQausZkWvYMkS4,28782
|
85
86
|
hpcflow/sdk/core/execute.py,sha256=Gc2SauA4QNA1W4Gi2FYoKoqkoJtGg57cgn1p87WNCIs,7221
|
86
87
|
hpcflow/sdk/core/json_like.py,sha256=f3Q1lxebn79nHIIQ2iRw9MbIDByGmdnlGp4yW39p-9g,29479
|
87
88
|
hpcflow/sdk/core/loop.py,sha256=1GRUerSIAQ30KDi1-0M5gNiwzslSnmTTshLYUHwIMn0,50083
|
88
89
|
hpcflow/sdk/core/loop_cache.py,sha256=C0t9UpvHFdTmw3bViZ2wccjZWtkbSbN9APvcwzBSREg,10801
|
89
90
|
hpcflow/sdk/core/object_list.py,sha256=eX6jcJNlXcbiu3LMnU6kGOkBeUB9WUh9vrGsv97DInk,29906
|
90
|
-
hpcflow/sdk/core/parameters.py,sha256=
|
91
|
+
hpcflow/sdk/core/parameters.py,sha256=fljEF6pfzPcLqTonDPC5q7OWPS31ib8Fc9DWQMK1rhw,97827
|
91
92
|
hpcflow/sdk/core/rule.py,sha256=LiNyKp09a6TRGJvtiB1CcNqgyAIuPhuSW2RVfDWf5FE,6274
|
92
93
|
hpcflow/sdk/core/run_dir_files.py,sha256=yh49BSlswqqyr97x5nDT87qu2MlOLMu7Arzl_B-fxy0,2061
|
93
94
|
hpcflow/sdk/core/skip_reason.py,sha256=xPm8bd8sbPpiZ3sx9ZeW0jxgRQ0TBokSv0XIJKrEW2Y,113
|
94
|
-
hpcflow/sdk/core/task.py,sha256=
|
95
|
+
hpcflow/sdk/core/task.py,sha256=0aqkwP-idjD5OYU-TLzVtjTdIVotb6ayAEzGGjM6sm0,142592
|
95
96
|
hpcflow/sdk/core/task_schema.py,sha256=Aw13WNLutU_nIJknC9noJyEFkpxMLz3cN7ojIMgwZqI,38843
|
96
|
-
hpcflow/sdk/core/test_utils.py,sha256=
|
97
|
+
hpcflow/sdk/core/test_utils.py,sha256=UXe8P-1b_6Pn6vdgJfMVsTGJdVI65TZ2mSUgWHlVnnc,13766
|
97
98
|
hpcflow/sdk/core/types.py,sha256=y07Z6xbagPy45P4FfSu-Sv6q2Caeo9886L5JjWYaEOg,13030
|
98
99
|
hpcflow/sdk/core/utils.py,sha256=P3JBrPS9ZM0sKrrihxaQScdFVX6ePSYQB5Rfbboo8CM,36316
|
99
100
|
hpcflow/sdk/core/validation.py,sha256=PtM-3j5_mzp79DObgsWeJOZjOOJPKqkwWgeyDAVuAf0,1926
|
@@ -161,7 +162,7 @@ hpcflow/tests/schedulers/direct_linux/test_direct_linux_submission.py,sha256=pgH
|
|
161
162
|
hpcflow/tests/schedulers/sge/test_sge_submission.py,sha256=NKO2wBR9AOW8chEBW2nZ9OyDMa_8xZWDw16gtg5g-C8,1107
|
162
163
|
hpcflow/tests/schedulers/slurm/test_slurm_submission.py,sha256=Hcok40_hWb68T0hFzODcmzXr10M6WavLD3qiyzjcNOI,493
|
163
164
|
hpcflow/tests/scripts/test_input_file_generators.py,sha256=zyM_0AXFDCHMO75GC3we__z4KeqcF5s7MFw2MJfeDec,9960
|
164
|
-
hpcflow/tests/scripts/test_main_scripts.py,sha256=
|
165
|
+
hpcflow/tests/scripts/test_main_scripts.py,sha256=qj4tg5s9Ii-n9b0bbWHAAGeXIoCPBZDhEMYH9LoAmbk,47911
|
165
166
|
hpcflow/tests/scripts/test_non_snippet_script.py,sha256=XFn34lLxd8iL03a4OIY9pbT5NWbjswDcjp2jaQF2ICU,1304
|
166
167
|
hpcflow/tests/scripts/test_ouput_file_parsers.py,sha256=gB6W1stp5TdoRjupbvt6_Ufs1TsOQwTUS5oHif4P3c8,12092
|
167
168
|
hpcflow/tests/shells/wsl/test_wsl_submission.py,sha256=L9TChOSwLKGIcHrfNno843SNpNWopgHY7Ptc_HzMEtA,1069
|
@@ -215,8 +216,8 @@ hpcflow/tests/workflows/test_submission.py,sha256=SUbBUbD8C8LSulrI7aETkzP9RqED48
|
|
215
216
|
hpcflow/tests/workflows/test_workflows.py,sha256=9z3rtXjA5iMOp4C0q4TkD_9kLzwourCY-obpeOtnNt0,18927
|
216
217
|
hpcflow/tests/workflows/test_zip.py,sha256=MzEwsIAYV_1A3bD0XRo23zUwUKVzkkmNd8_cil6YdWQ,578
|
217
218
|
hpcflow/viz_demo.ipynb,sha256=6D9uBbWK3oMfbaf93Tnv5riFPtW-2miUTWNr9kGcnd4,228913
|
218
|
-
hpcflow_new2-0.2.
|
219
|
-
hpcflow_new2-0.2.
|
220
|
-
hpcflow_new2-0.2.
|
221
|
-
hpcflow_new2-0.2.
|
222
|
-
hpcflow_new2-0.2.
|
219
|
+
hpcflow_new2-0.2.0a209.dist-info/LICENSE,sha256=Xhxf_KsrJNJFGMogumZhXSTPhUOVHCWf7nU-TDzqg0E,16763
|
220
|
+
hpcflow_new2-0.2.0a209.dist-info/METADATA,sha256=RvmnWybW6N0RDXm8bxvKRcHQAQa3ehVsQzwsCPuve9w,2671
|
221
|
+
hpcflow_new2-0.2.0a209.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
|
222
|
+
hpcflow_new2-0.2.0a209.dist-info/entry_points.txt,sha256=aoGtCnFdfPcXfBdu2zZyMOJoz6fPgdR0elqsgrE-USU,106
|
223
|
+
hpcflow_new2-0.2.0a209.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|