hpcflow-new2 0.2.0a189__py3-none-any.whl → 0.2.0a199__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/__pyinstaller/hook-hpcflow.py +9 -6
- hpcflow/_version.py +1 -1
- hpcflow/app.py +1 -0
- hpcflow/data/scripts/bad_script.py +2 -0
- hpcflow/data/scripts/do_nothing.py +2 -0
- hpcflow/data/scripts/env_specifier_test/input_file_generator_pass_env_spec.py +4 -0
- hpcflow/data/scripts/env_specifier_test/main_script_test_pass_env_spec.py +8 -0
- hpcflow/data/scripts/env_specifier_test/output_file_parser_pass_env_spec.py +4 -0
- hpcflow/data/scripts/env_specifier_test/v1/input_file_generator_basic.py +4 -0
- hpcflow/data/scripts/env_specifier_test/v1/main_script_test_direct_in_direct_out.py +7 -0
- hpcflow/data/scripts/env_specifier_test/v1/output_file_parser_basic.py +4 -0
- hpcflow/data/scripts/env_specifier_test/v2/main_script_test_direct_in_direct_out.py +7 -0
- hpcflow/data/scripts/input_file_generator_basic.py +3 -0
- hpcflow/data/scripts/input_file_generator_basic_FAIL.py +3 -0
- hpcflow/data/scripts/input_file_generator_test_stdout_stderr.py +8 -0
- hpcflow/data/scripts/main_script_test_direct_in.py +3 -0
- hpcflow/data/scripts/main_script_test_direct_in_direct_out_2.py +6 -0
- hpcflow/data/scripts/main_script_test_direct_in_direct_out_2_fail_allowed.py +6 -0
- hpcflow/data/scripts/main_script_test_direct_in_direct_out_2_fail_allowed_group.py +7 -0
- hpcflow/data/scripts/main_script_test_direct_in_direct_out_3.py +6 -0
- hpcflow/data/scripts/main_script_test_direct_in_group_direct_out_3.py +6 -0
- hpcflow/data/scripts/main_script_test_direct_in_group_one_fail_direct_out_3.py +6 -0
- hpcflow/data/scripts/main_script_test_hdf5_in_obj.py +1 -1
- hpcflow/data/scripts/main_script_test_hdf5_in_obj_2.py +12 -0
- hpcflow/data/scripts/main_script_test_hdf5_out_obj.py +1 -1
- hpcflow/data/scripts/main_script_test_json_out_FAIL.py +3 -0
- hpcflow/data/scripts/main_script_test_shell_env_vars.py +12 -0
- hpcflow/data/scripts/main_script_test_std_out_std_err.py +6 -0
- hpcflow/data/scripts/output_file_parser_basic.py +3 -0
- hpcflow/data/scripts/output_file_parser_basic_FAIL.py +7 -0
- hpcflow/data/scripts/output_file_parser_test_stdout_stderr.py +8 -0
- hpcflow/data/scripts/script_exit_test.py +5 -0
- hpcflow/data/template_components/environments.yaml +1 -1
- hpcflow/sdk/__init__.py +26 -15
- hpcflow/sdk/app.py +2192 -768
- hpcflow/sdk/cli.py +506 -296
- hpcflow/sdk/cli_common.py +105 -7
- hpcflow/sdk/config/__init__.py +1 -1
- hpcflow/sdk/config/callbacks.py +115 -43
- hpcflow/sdk/config/cli.py +126 -103
- hpcflow/sdk/config/config.py +674 -318
- hpcflow/sdk/config/config_file.py +131 -95
- hpcflow/sdk/config/errors.py +125 -84
- hpcflow/sdk/config/types.py +148 -0
- hpcflow/sdk/core/__init__.py +25 -1
- hpcflow/sdk/core/actions.py +1771 -1059
- hpcflow/sdk/core/app_aware.py +24 -0
- hpcflow/sdk/core/cache.py +139 -79
- hpcflow/sdk/core/command_files.py +263 -287
- hpcflow/sdk/core/commands.py +145 -112
- hpcflow/sdk/core/element.py +828 -535
- hpcflow/sdk/core/enums.py +192 -0
- hpcflow/sdk/core/environment.py +74 -93
- hpcflow/sdk/core/errors.py +455 -52
- hpcflow/sdk/core/execute.py +207 -0
- hpcflow/sdk/core/json_like.py +540 -272
- hpcflow/sdk/core/loop.py +751 -347
- hpcflow/sdk/core/loop_cache.py +164 -47
- hpcflow/sdk/core/object_list.py +370 -207
- hpcflow/sdk/core/parameters.py +1100 -627
- hpcflow/sdk/core/rule.py +59 -41
- hpcflow/sdk/core/run_dir_files.py +21 -37
- hpcflow/sdk/core/skip_reason.py +7 -0
- hpcflow/sdk/core/task.py +1649 -1339
- hpcflow/sdk/core/task_schema.py +308 -196
- hpcflow/sdk/core/test_utils.py +191 -114
- hpcflow/sdk/core/types.py +440 -0
- hpcflow/sdk/core/utils.py +485 -309
- hpcflow/sdk/core/validation.py +82 -9
- hpcflow/sdk/core/workflow.py +2544 -1178
- hpcflow/sdk/core/zarr_io.py +98 -137
- hpcflow/sdk/data/workflow_spec_schema.yaml +2 -0
- hpcflow/sdk/demo/cli.py +53 -33
- hpcflow/sdk/helper/cli.py +18 -15
- hpcflow/sdk/helper/helper.py +75 -63
- hpcflow/sdk/helper/watcher.py +61 -28
- hpcflow/sdk/log.py +122 -71
- hpcflow/sdk/persistence/__init__.py +8 -31
- hpcflow/sdk/persistence/base.py +1360 -606
- hpcflow/sdk/persistence/defaults.py +6 -0
- hpcflow/sdk/persistence/discovery.py +38 -0
- hpcflow/sdk/persistence/json.py +568 -188
- hpcflow/sdk/persistence/pending.py +382 -179
- hpcflow/sdk/persistence/store_resource.py +39 -23
- hpcflow/sdk/persistence/types.py +318 -0
- hpcflow/sdk/persistence/utils.py +14 -11
- hpcflow/sdk/persistence/zarr.py +1337 -433
- hpcflow/sdk/runtime.py +44 -41
- hpcflow/sdk/submission/{jobscript_info.py → enums.py} +39 -12
- hpcflow/sdk/submission/jobscript.py +1651 -692
- hpcflow/sdk/submission/schedulers/__init__.py +167 -39
- hpcflow/sdk/submission/schedulers/direct.py +121 -81
- hpcflow/sdk/submission/schedulers/sge.py +170 -129
- hpcflow/sdk/submission/schedulers/slurm.py +291 -268
- hpcflow/sdk/submission/schedulers/utils.py +12 -2
- hpcflow/sdk/submission/shells/__init__.py +14 -15
- hpcflow/sdk/submission/shells/base.py +150 -29
- hpcflow/sdk/submission/shells/bash.py +283 -173
- hpcflow/sdk/submission/shells/os_version.py +31 -30
- hpcflow/sdk/submission/shells/powershell.py +228 -170
- hpcflow/sdk/submission/submission.py +1014 -335
- hpcflow/sdk/submission/types.py +140 -0
- hpcflow/sdk/typing.py +182 -12
- hpcflow/sdk/utils/arrays.py +71 -0
- hpcflow/sdk/utils/deferred_file.py +55 -0
- hpcflow/sdk/utils/hashing.py +16 -0
- hpcflow/sdk/utils/patches.py +12 -0
- hpcflow/sdk/utils/strings.py +33 -0
- hpcflow/tests/api/test_api.py +32 -0
- hpcflow/tests/conftest.py +27 -6
- hpcflow/tests/data/multi_path_sequences.yaml +29 -0
- hpcflow/tests/data/workflow_test_run_abort.yaml +34 -35
- hpcflow/tests/schedulers/sge/test_sge_submission.py +36 -0
- hpcflow/tests/schedulers/slurm/test_slurm_submission.py +5 -2
- hpcflow/tests/scripts/test_input_file_generators.py +282 -0
- hpcflow/tests/scripts/test_main_scripts.py +866 -85
- hpcflow/tests/scripts/test_non_snippet_script.py +46 -0
- hpcflow/tests/scripts/test_ouput_file_parsers.py +353 -0
- hpcflow/tests/shells/wsl/test_wsl_submission.py +12 -4
- hpcflow/tests/unit/test_action.py +262 -75
- hpcflow/tests/unit/test_action_rule.py +9 -4
- hpcflow/tests/unit/test_app.py +33 -6
- hpcflow/tests/unit/test_cache.py +46 -0
- hpcflow/tests/unit/test_cli.py +134 -1
- hpcflow/tests/unit/test_command.py +71 -54
- hpcflow/tests/unit/test_config.py +142 -16
- hpcflow/tests/unit/test_config_file.py +21 -18
- hpcflow/tests/unit/test_element.py +58 -62
- hpcflow/tests/unit/test_element_iteration.py +50 -1
- hpcflow/tests/unit/test_element_set.py +29 -19
- hpcflow/tests/unit/test_group.py +4 -2
- hpcflow/tests/unit/test_input_source.py +116 -93
- hpcflow/tests/unit/test_input_value.py +29 -24
- hpcflow/tests/unit/test_jobscript_unit.py +757 -0
- hpcflow/tests/unit/test_json_like.py +44 -35
- hpcflow/tests/unit/test_loop.py +1396 -84
- hpcflow/tests/unit/test_meta_task.py +325 -0
- hpcflow/tests/unit/test_multi_path_sequences.py +229 -0
- hpcflow/tests/unit/test_object_list.py +17 -12
- hpcflow/tests/unit/test_parameter.py +29 -7
- hpcflow/tests/unit/test_persistence.py +237 -42
- hpcflow/tests/unit/test_resources.py +20 -18
- hpcflow/tests/unit/test_run.py +117 -6
- hpcflow/tests/unit/test_run_directories.py +29 -0
- hpcflow/tests/unit/test_runtime.py +2 -1
- hpcflow/tests/unit/test_schema_input.py +23 -15
- hpcflow/tests/unit/test_shell.py +23 -2
- hpcflow/tests/unit/test_slurm.py +8 -7
- hpcflow/tests/unit/test_submission.py +38 -89
- hpcflow/tests/unit/test_task.py +352 -247
- hpcflow/tests/unit/test_task_schema.py +33 -20
- hpcflow/tests/unit/test_utils.py +9 -11
- hpcflow/tests/unit/test_value_sequence.py +15 -12
- hpcflow/tests/unit/test_workflow.py +114 -83
- hpcflow/tests/unit/test_workflow_template.py +0 -1
- hpcflow/tests/unit/utils/test_arrays.py +40 -0
- hpcflow/tests/unit/utils/test_deferred_file_writer.py +34 -0
- hpcflow/tests/unit/utils/test_hashing.py +65 -0
- hpcflow/tests/unit/utils/test_patches.py +5 -0
- hpcflow/tests/unit/utils/test_redirect_std.py +50 -0
- hpcflow/tests/workflows/__init__.py +0 -0
- hpcflow/tests/workflows/test_directory_structure.py +31 -0
- hpcflow/tests/workflows/test_jobscript.py +334 -1
- hpcflow/tests/workflows/test_run_status.py +198 -0
- hpcflow/tests/workflows/test_skip_downstream.py +696 -0
- hpcflow/tests/workflows/test_submission.py +140 -0
- hpcflow/tests/workflows/test_workflows.py +160 -15
- hpcflow/tests/workflows/test_zip.py +18 -0
- hpcflow/viz_demo.ipynb +6587 -3
- {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/METADATA +8 -4
- hpcflow_new2-0.2.0a199.dist-info/RECORD +221 -0
- hpcflow/sdk/core/parallel.py +0 -21
- hpcflow_new2-0.2.0a189.dist-info/RECORD +0 -158
- {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/LICENSE +0 -0
- {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/WHEEL +0 -0
- {hpcflow_new2-0.2.0a189.dist-info → hpcflow_new2-0.2.0a199.dist-info}/entry_points.txt +0 -0
@@ -4,9 +4,8 @@ from hpcflow.sdk import sdk_classes
|
|
4
4
|
|
5
5
|
|
6
6
|
# most of the modules in `sdk_classes` are imported on-demand via the app object:
|
7
|
-
hiddenimports =
|
8
|
-
|
9
|
-
hiddenimports += [
|
7
|
+
hiddenimports = [
|
8
|
+
*sdk_classes.values(),
|
10
9
|
"hpcflow.sdk.data",
|
11
10
|
"hpcflow.data.demo_data_manifest",
|
12
11
|
"hpcflow.data.scripts",
|
@@ -14,18 +13,22 @@ hiddenimports += [
|
|
14
13
|
"hpcflow.data.workflows",
|
15
14
|
"hpcflow.tests.data",
|
16
15
|
"hpcflow.sdk.core.test_utils",
|
16
|
+
"hpcflow.sdk.utils.patches",
|
17
17
|
"click.testing",
|
18
18
|
"requests", # for GitHub fsspec file system
|
19
19
|
"fsspec.implementations.github", # for GitHub fsspec file system
|
20
20
|
]
|
21
21
|
|
22
|
-
py_include_kwargs = dict(include_py_files=True, excludes=("**/__pycache__",))
|
23
22
|
datas = (
|
24
23
|
collect_data_files("hpcflow.sdk.data")
|
25
24
|
+ collect_data_files("hpcflow.data.demo_data_manifest")
|
26
|
-
+ collect_data_files(
|
25
|
+
+ collect_data_files(
|
26
|
+
"hpcflow.data.scripts", include_py_files=True, excludes=("**/__pycache__",)
|
27
|
+
)
|
27
28
|
+ collect_data_files("hpcflow.data.template_components")
|
28
29
|
+ collect_data_files("hpcflow.data.workflows")
|
29
|
-
+ collect_data_files(
|
30
|
+
+ collect_data_files(
|
31
|
+
"hpcflow.tests", include_py_files=True, excludes=("**/__pycache__",)
|
32
|
+
)
|
30
33
|
+ collect_data_files("hpcflow.tests.data")
|
31
34
|
)
|
hpcflow/_version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.2.
|
1
|
+
__version__ = "0.2.0a199"
|
hpcflow/app.py
CHANGED
@@ -0,0 +1,7 @@
|
|
1
|
+
def output_file_parser_basic_FAIL(my_output_file):
|
2
|
+
# parse the output file, but then delete it, so it cannot be saved (when run with
|
3
|
+
# `OFP.save_files=True`):
|
4
|
+
with my_output_file.open("r") as fp:
|
5
|
+
out = int(fp.read().strip())
|
6
|
+
my_output_file.unlink()
|
7
|
+
return out
|
hpcflow/sdk/__init__.py
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
"""Sub-package to define an extensible hpcflow application."""
|
2
2
|
|
3
|
+
from __future__ import annotations
|
4
|
+
from collections.abc import Mapping
|
3
5
|
import logging
|
4
6
|
import os
|
5
7
|
import sys
|
8
|
+
from typing import Final
|
6
9
|
|
7
10
|
#: Classes used in the construction of a workflow.
|
8
11
|
#: :meta hide-value:
|
9
|
-
sdk_classes = {
|
12
|
+
sdk_classes: Final[Mapping[str, str]] = {
|
10
13
|
"Workflow": "hpcflow.sdk.core.workflow",
|
11
14
|
"Task": "hpcflow.sdk.core.task",
|
12
|
-
"
|
15
|
+
"MetaTask": "hpcflow.sdk.core.task",
|
16
|
+
"ActionScopeType": "hpcflow.sdk.core.enums",
|
13
17
|
"ActionScope": "hpcflow.sdk.core.actions",
|
14
18
|
"ActionRule": "hpcflow.sdk.core.actions",
|
15
19
|
"Rule": "hpcflow.sdk.core.rule",
|
@@ -43,6 +47,7 @@ sdk_classes = {
|
|
43
47
|
"NumCores": "hpcflow.sdk.core.environment",
|
44
48
|
"ExecutableInstance": "hpcflow.sdk.core.environment",
|
45
49
|
"Executable": "hpcflow.sdk.core.environment",
|
50
|
+
"Executor": "hpcflow.sdk.core.execute",
|
46
51
|
"Environment": "hpcflow.sdk.core.environment",
|
47
52
|
"Loop": "hpcflow.sdk.core.loop",
|
48
53
|
"WorkflowLoop": "hpcflow.sdk.core.loop",
|
@@ -65,15 +70,17 @@ sdk_classes = {
|
|
65
70
|
"SchemaInput": "hpcflow.sdk.core.parameters",
|
66
71
|
"SchemaOutput": "hpcflow.sdk.core.parameters",
|
67
72
|
"ValueSequence": "hpcflow.sdk.core.parameters",
|
73
|
+
"MultiPathSequence": "hpcflow.sdk.core.parameters",
|
68
74
|
"ValuePerturbation": "hpcflow.sdk.core.parameters",
|
69
75
|
"InputValue": "hpcflow.sdk.core.parameters",
|
70
76
|
"ResourceSpec": "hpcflow.sdk.core.parameters",
|
71
|
-
"TaskSourceType": "hpcflow.sdk.core.
|
72
|
-
"InputSourceType": "hpcflow.sdk.core.
|
73
|
-
"ParameterPropagationMode": "hpcflow.sdk.core.
|
77
|
+
"TaskSourceType": "hpcflow.sdk.core.enums",
|
78
|
+
"InputSourceType": "hpcflow.sdk.core.enums",
|
79
|
+
"ParameterPropagationMode": "hpcflow.sdk.core.enums",
|
74
80
|
"InputSource": "hpcflow.sdk.core.parameters",
|
75
81
|
"TaskObjective": "hpcflow.sdk.core.task_schema",
|
76
82
|
"TaskSchema": "hpcflow.sdk.core.task_schema",
|
83
|
+
"MetaTaskSchema": "hpcflow.sdk.core.task_schema",
|
77
84
|
"ElementSet": "hpcflow.sdk.core.task",
|
78
85
|
"Task": "hpcflow.sdk.core.task",
|
79
86
|
"WorkflowTask": "hpcflow.sdk.core.task",
|
@@ -86,7 +93,9 @@ sdk_classes = {
|
|
86
93
|
"Workflow": "hpcflow.sdk.core.workflow",
|
87
94
|
"WorkflowBlueprint": "hpcflow.sdk.core.workflow",
|
88
95
|
"Jobscript": "hpcflow.sdk.submission.jobscript",
|
96
|
+
"JobscriptBlock": "hpcflow.sdk.submission.jobscript",
|
89
97
|
"Submission": "hpcflow.sdk.submission.submission",
|
98
|
+
"QueuedScheduler": "hpcflow.sdk.submission.schedulers",
|
90
99
|
"DirectWindows": "hpcflow.sdk.submission.schedulers.direct",
|
91
100
|
"DirectPosix": "hpcflow.sdk.submission.schedulers.direct",
|
92
101
|
"SlurmPosix": "hpcflow.sdk.submission.schedulers.slurm",
|
@@ -98,7 +107,7 @@ sdk_classes = {
|
|
98
107
|
# these are defined as `BaseApp` methods with an underscore prefix:
|
99
108
|
#: Functions exported by the application.
|
100
109
|
#: :meta hide-value:
|
101
|
-
sdk_funcs = (
|
110
|
+
sdk_funcs: Final[tuple[str, ...]] = (
|
102
111
|
"make_workflow",
|
103
112
|
"make_demo_workflow",
|
104
113
|
"make_and_submit_workflow",
|
@@ -114,24 +123,26 @@ sdk_funcs = (
|
|
114
123
|
"cancel",
|
115
124
|
)
|
116
125
|
|
117
|
-
_SDK_CONSOLE_LOG_LEVEL = os.environ.get("HPCFLOW_SDK_CONSOLE_LOG_LEVEL", "ERROR")
|
118
126
|
|
119
|
-
|
120
|
-
def get_SDK_logger(name=None):
|
127
|
+
def get_SDK_logger(name: str | None = None) -> logging.Logger:
|
121
128
|
"""Get a logger with prefix of "hpcflow_sdk" instead of "hpcflow.sdk" to ensure the
|
122
129
|
handlers of the SDK logger and app logger are distinct."""
|
123
130
|
name = ".".join(["hpcflow_sdk"] + (name or __name__).split(".")[2:])
|
124
131
|
return logging.getLogger(name)
|
125
132
|
|
126
133
|
|
127
|
-
|
128
|
-
|
134
|
+
def _init_logger() -> None:
|
135
|
+
level = os.environ.get("HPCFLOW_SDK_CONSOLE_LOG_LEVEL", "ERROR")
|
136
|
+
SDK_logger = get_SDK_logger()
|
137
|
+
SDK_logger.setLevel("DEBUG")
|
138
|
+
|
139
|
+
sh = logging.StreamHandler()
|
140
|
+
sh.setFormatter(logging.Formatter("%(levelname)s %(name)s: %(message)s"))
|
141
|
+
sh.setLevel(level)
|
142
|
+
SDK_logger.addHandler(sh)
|
129
143
|
|
130
|
-
_sh = logging.StreamHandler()
|
131
|
-
_sh.setFormatter(logging.Formatter("%(levelname)s %(name)s: %(message)s"))
|
132
|
-
_sh.setLevel(_SDK_CONSOLE_LOG_LEVEL)
|
133
|
-
_SDK_logger.addHandler(_sh)
|
134
144
|
|
145
|
+
_init_logger()
|
135
146
|
if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"):
|
136
147
|
import multiprocessing
|
137
148
|
|