executorlib 1.10.4__py3-none-any.whl → 1.11.0__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.
- executorlib/_version.py +2 -2
- executorlib/executor/flux.py +4 -0
- executorlib/executor/single.py +4 -0
- executorlib/executor/slurm.py +4 -0
- executorlib/standalone/inputcheck.py +17 -0
- executorlib/task_scheduler/interactive/spawner_pysqa.py +7 -1
- {executorlib-1.10.4.dist-info → executorlib-1.11.0.dist-info}/METADATA +20 -20
- {executorlib-1.10.4.dist-info → executorlib-1.11.0.dist-info}/RECORD +10 -10
- {executorlib-1.10.4.dist-info → executorlib-1.11.0.dist-info}/WHEEL +0 -0
- {executorlib-1.10.4.dist-info → executorlib-1.11.0.dist-info}/licenses/LICENSE +0 -0
executorlib/_version.py
CHANGED
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.
|
|
22
|
-
__version_tuple__ = version_tuple = (1,
|
|
21
|
+
__version__ = version = '1.11.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 11, 0)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
executorlib/executor/flux.py
CHANGED
|
@@ -4,6 +4,7 @@ from executorlib.executor.base import BaseExecutor
|
|
|
4
4
|
from executorlib.standalone.inputcheck import (
|
|
5
5
|
check_command_line_argument_lst,
|
|
6
6
|
check_init_function,
|
|
7
|
+
check_init_function_with_cache,
|
|
7
8
|
check_log_obj_size,
|
|
8
9
|
check_oversubscribe,
|
|
9
10
|
check_plot_dependency_graph,
|
|
@@ -580,6 +581,9 @@ def create_flux_executor(
|
|
|
580
581
|
executor_kwargs["hostname_localhost"] = hostname_localhost
|
|
581
582
|
executor_kwargs["log_obj_size"] = log_obj_size
|
|
582
583
|
check_init_function(block_allocation=block_allocation, init_function=init_function)
|
|
584
|
+
check_init_function_with_cache(
|
|
585
|
+
init_function=init_function, cache_directory=cache_directory
|
|
586
|
+
)
|
|
583
587
|
check_pmi(backend="flux_allocation", pmi=pmi_mode)
|
|
584
588
|
check_oversubscribe(
|
|
585
589
|
oversubscribe=executor_kwargs.get("openmpi_oversubscribe", False)
|
executorlib/executor/single.py
CHANGED
|
@@ -5,6 +5,7 @@ from executorlib.standalone.inputcheck import (
|
|
|
5
5
|
check_command_line_argument_lst,
|
|
6
6
|
check_gpus_per_worker,
|
|
7
7
|
check_init_function,
|
|
8
|
+
check_init_function_with_cache,
|
|
8
9
|
check_plot_dependency_graph,
|
|
9
10
|
check_refresh_rate,
|
|
10
11
|
check_restart_limit,
|
|
@@ -511,6 +512,9 @@ def create_single_node_executor(
|
|
|
511
512
|
executor_kwargs["log_obj_size"] = log_obj_size
|
|
512
513
|
|
|
513
514
|
check_init_function(block_allocation=block_allocation, init_function=init_function)
|
|
515
|
+
check_init_function_with_cache(
|
|
516
|
+
init_function=init_function, cache_directory=cache_directory
|
|
517
|
+
)
|
|
514
518
|
check_gpus_per_worker(gpus_per_worker=executor_kwargs.get("gpus_per_core", 0))
|
|
515
519
|
check_command_line_argument_lst(
|
|
516
520
|
command_line_argument_lst=executor_kwargs.get("slurm_cmd_args", [])
|
executorlib/executor/slurm.py
CHANGED
|
@@ -3,6 +3,7 @@ from typing import Callable, Optional, Union
|
|
|
3
3
|
from executorlib.executor.base import BaseExecutor
|
|
4
4
|
from executorlib.standalone.inputcheck import (
|
|
5
5
|
check_init_function,
|
|
6
|
+
check_init_function_with_cache,
|
|
6
7
|
check_log_obj_size,
|
|
7
8
|
check_plot_dependency_graph,
|
|
8
9
|
check_refresh_rate,
|
|
@@ -552,6 +553,9 @@ def create_slurm_executor(
|
|
|
552
553
|
executor_kwargs["log_obj_size"] = log_obj_size
|
|
553
554
|
executor_kwargs["pmi_mode"] = pmi_mode
|
|
554
555
|
check_init_function(block_allocation=block_allocation, init_function=init_function)
|
|
556
|
+
check_init_function_with_cache(
|
|
557
|
+
init_function=init_function, cache_directory=cache_directory
|
|
558
|
+
)
|
|
555
559
|
check_wait_on_shutdown(wait_on_shutdown=wait)
|
|
556
560
|
if block_allocation:
|
|
557
561
|
executor_kwargs["init_function"] = init_function
|
|
@@ -138,6 +138,23 @@ def check_init_function(
|
|
|
138
138
|
raise ValueError("")
|
|
139
139
|
|
|
140
140
|
|
|
141
|
+
def check_init_function_with_cache(
|
|
142
|
+
init_function: Optional[Callable], cache_directory: Optional[str]
|
|
143
|
+
) -> None:
|
|
144
|
+
"""
|
|
145
|
+
Check if init_function and cache_directory are both set, and raise a warning if they are. The cache key is
|
|
146
|
+
computed from the submitted function and its arguments only, so it does not reflect the state set by the
|
|
147
|
+
init_function, which can lead to stale results being returned from the cache.
|
|
148
|
+
"""
|
|
149
|
+
if init_function is not None and cache_directory is not None:
|
|
150
|
+
warn(
|
|
151
|
+
"The init_function and the cache_directory are incompatible: the cache key does not include the "
|
|
152
|
+
"state set by the init_function, so functions which depend on this state may return stale results "
|
|
153
|
+
"from the cache. See https://github.com/pyiron/executorlib/issues/1084",
|
|
154
|
+
stacklevel=2,
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
|
|
141
158
|
def check_max_workers_and_cores(
|
|
142
159
|
max_workers: Optional[int], max_cores: Optional[int]
|
|
143
160
|
) -> None:
|
|
@@ -6,7 +6,10 @@ from typing import Callable, Optional
|
|
|
6
6
|
from pysqa import QueueAdapter
|
|
7
7
|
|
|
8
8
|
from executorlib.standalone.command_pysqa import pysqa_execute_command, pysqa_terminate
|
|
9
|
-
from executorlib.standalone.inputcheck import
|
|
9
|
+
from executorlib.standalone.inputcheck import (
|
|
10
|
+
check_init_function_with_cache,
|
|
11
|
+
validate_number_of_cores,
|
|
12
|
+
)
|
|
10
13
|
from executorlib.standalone.interactive.spawner import (
|
|
11
14
|
BaseSpawner,
|
|
12
15
|
set_current_directory_in_environment,
|
|
@@ -233,6 +236,9 @@ def create_pysqa_block_allocation_scheduler(
|
|
|
233
236
|
backend: Optional[str] = None,
|
|
234
237
|
validator: Callable = validate_resource_dict,
|
|
235
238
|
):
|
|
239
|
+
check_init_function_with_cache(
|
|
240
|
+
init_function=init_function, cache_directory=cache_directory
|
|
241
|
+
)
|
|
236
242
|
if executor_kwargs is None:
|
|
237
243
|
executor_kwargs = {}
|
|
238
244
|
cores_per_worker = executor_kwargs.get("cores", 1)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: executorlib
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0
|
|
4
4
|
Summary: Up-scale python functions for high performance computing (HPC) with executorlib.
|
|
5
5
|
Project-URL: Homepage, https://github.com/pyiron/executorlib
|
|
6
6
|
Project-URL: Documentation, https://executorlib.readthedocs.io
|
|
@@ -48,32 +48,32 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
48
48
|
Classifier: Programming Language :: Python :: 3.14
|
|
49
49
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
50
50
|
Requires-Python: <3.15,>3.9
|
|
51
|
-
Requires-Dist: cloudpickle
|
|
52
|
-
Requires-Dist: pyzmq
|
|
51
|
+
Requires-Dist: cloudpickle<3.2.0,>=2.0.0
|
|
52
|
+
Requires-Dist: pyzmq<27.3.0,>=25.0.0
|
|
53
53
|
Provides-Extra: all
|
|
54
|
-
Requires-Dist: h5py
|
|
55
|
-
Requires-Dist: ipython
|
|
56
|
-
Requires-Dist: mpi4py
|
|
57
|
-
Requires-Dist: networkx
|
|
58
|
-
Requires-Dist: pydantic
|
|
59
|
-
Requires-Dist: pygraphviz
|
|
60
|
-
Requires-Dist: pysqa==1.0
|
|
54
|
+
Requires-Dist: h5py<3.17.0,>=3.6.0; extra == 'all'
|
|
55
|
+
Requires-Dist: ipython<9.10.0,>=7.33.0; extra == 'all'
|
|
56
|
+
Requires-Dist: mpi4py<4.2.0,>=3.1.4; extra == 'all'
|
|
57
|
+
Requires-Dist: networkx<3.7.0,>=2.8.8; extra == 'all'
|
|
58
|
+
Requires-Dist: pydantic<2.15.0,>=2.5.3; extra == 'all'
|
|
59
|
+
Requires-Dist: pygraphviz<2.1.0,>=1.10; extra == 'all'
|
|
60
|
+
Requires-Dist: pysqa==1.1.0; extra == 'all'
|
|
61
61
|
Provides-Extra: cache
|
|
62
|
-
Requires-Dist: h5py
|
|
62
|
+
Requires-Dist: h5py<3.17.0,>=3.6.0; extra == 'cache'
|
|
63
63
|
Provides-Extra: cluster
|
|
64
|
-
Requires-Dist: h5py
|
|
65
|
-
Requires-Dist: pysqa==1.0
|
|
64
|
+
Requires-Dist: h5py<3.17.0,>=3.6.0; extra == 'cluster'
|
|
65
|
+
Requires-Dist: pysqa==1.1.0; extra == 'cluster'
|
|
66
66
|
Provides-Extra: graph
|
|
67
|
-
Requires-Dist: networkx
|
|
68
|
-
Requires-Dist: pygraphviz
|
|
67
|
+
Requires-Dist: networkx<3.7.0,>=2.8.8; extra == 'graph'
|
|
68
|
+
Requires-Dist: pygraphviz<2.1.0,>=1.10; extra == 'graph'
|
|
69
69
|
Provides-Extra: graphnotebook
|
|
70
|
-
Requires-Dist: ipython
|
|
71
|
-
Requires-Dist: networkx
|
|
72
|
-
Requires-Dist: pygraphviz
|
|
70
|
+
Requires-Dist: ipython<9.10.0,>=7.33.0; extra == 'graphnotebook'
|
|
71
|
+
Requires-Dist: networkx<3.7.0,>=2.8.8; extra == 'graphnotebook'
|
|
72
|
+
Requires-Dist: pygraphviz<2.1.0,>=1.10; extra == 'graphnotebook'
|
|
73
73
|
Provides-Extra: mpi
|
|
74
|
-
Requires-Dist: mpi4py
|
|
74
|
+
Requires-Dist: mpi4py<4.2.0,>=3.1.4; extra == 'mpi'
|
|
75
75
|
Provides-Extra: validation
|
|
76
|
-
Requires-Dist: pydantic
|
|
76
|
+
Requires-Dist: pydantic<2.15.0,>=2.5.3; extra == 'validation'
|
|
77
77
|
Description-Content-Type: text/markdown
|
|
78
78
|
|
|
79
79
|
# executorlib
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
executorlib/__init__.py,sha256=Xj1QeplikK6_6BFifidkFWPcTDzDM-XEV74RjXJU5KY,5841
|
|
2
|
-
executorlib/_version.py,sha256=
|
|
2
|
+
executorlib/_version.py,sha256=R0RDH1rwZiqBhqHMW83hcuYNyE-V-M_xo-8QDd6aazQ,522
|
|
3
3
|
executorlib/api.py,sha256=F6ibDJnVcPGxxPe-UScFJHprWHiVsETGhgAvS1T-9ZI,1365
|
|
4
4
|
executorlib/backend/__init__.py,sha256=2b_iwds4VUrJe92nKtQXkoGxkJiXeEDSlbvCRN_-de8,456
|
|
5
5
|
executorlib/backend/cache_parallel.py,sha256=ldb2iYzrhcXJZ0LcH75FpTLO_6F51mleU9JGAilF00k,2020
|
|
@@ -8,16 +8,16 @@ executorlib/backend/interactive_parallel.py,sha256=HimGnWOdTXInC3o7W4wMUSTTlj6Ms
|
|
|
8
8
|
executorlib/backend/interactive_serial.py,sha256=ZV_VGcnCAk7N-VcoJKYEIG0OGUUwR4KFWoHG7MVBA3g,2998
|
|
9
9
|
executorlib/executor/__init__.py,sha256=oR2ABLAMYV_TNs1eG-3-MAKHFS7OKB-1KOzCqKNbtWA,310
|
|
10
10
|
executorlib/executor/base.py,sha256=UKJViNoshthAgF2I4FoK0nZT0FL7WgkrzWFYhRiU1H4,6957
|
|
11
|
-
executorlib/executor/flux.py,sha256=
|
|
12
|
-
executorlib/executor/single.py,sha256=
|
|
13
|
-
executorlib/executor/slurm.py,sha256=
|
|
11
|
+
executorlib/executor/flux.py,sha256=_HUhKjh1hkJSA4wILgVWD6s_NM6_GcwXujSaI_frjVw,40926
|
|
12
|
+
executorlib/executor/single.py,sha256=01pTEC8d0roL56taevF6fIydFupKuoSzzjzvSgrAiBE,36162
|
|
13
|
+
executorlib/executor/slurm.py,sha256=_I-JBzODWP5PShnOFm_ES9DQiTnKyq0Q02Be_lKq2JU,38484
|
|
14
14
|
executorlib/standalone/__init__.py,sha256=n_Q4NUFu35Fn0qlWIhmoC_FyUkmFGlWn1cNc_7EscF0,290
|
|
15
15
|
executorlib/standalone/batched.py,sha256=o3TtsFJir8nP1O_NZFfW0Q78CoZAFgHMyroWlg520nE,1446
|
|
16
16
|
executorlib/standalone/command.py,sha256=4Xndog84zJdku1ke1DwdUamkWvzRrMz-VDCi5cRXi0M,6548
|
|
17
17
|
executorlib/standalone/command_pysqa.py,sha256=eNTyHxtjUsn3950NOWHfNrFKgtxgD9GAVxCdN6Ewxcc,5948
|
|
18
18
|
executorlib/standalone/error.py,sha256=aaMQoRsoLzLCbYT-E4LZxGM9pm_AhjMesRjVt0d_LDk,714
|
|
19
19
|
executorlib/standalone/hdf.py,sha256=bEVlV-Y9vzYnd3NNcC0uOsdWJSzLN3c2HbzcWKo8328,7975
|
|
20
|
-
executorlib/standalone/inputcheck.py,sha256=
|
|
20
|
+
executorlib/standalone/inputcheck.py,sha256=pcPtvp52QfjMu3N8MYJf2ywffjzN_cABANhIc6LRkL8,10901
|
|
21
21
|
executorlib/standalone/queue.py,sha256=-q04hhz1UmZFhbJY95ctBg1xmxqjNxh0xCYhv3y9jK0,1281
|
|
22
22
|
executorlib/standalone/select.py,sha256=7zZOc9WLOMtKEVPybO_kGZjjLRnhGx4_tkqxZumWB_o,3215
|
|
23
23
|
executorlib/standalone/serialize.py,sha256=NdFdwF8xrIPPbYpBRQY3d5-n2yQSG6H41EDEr2Ojkes,4972
|
|
@@ -42,9 +42,9 @@ executorlib/task_scheduler/interactive/dependency_plot.py,sha256=iZBZ9UMDeYOMFjD
|
|
|
42
42
|
executorlib/task_scheduler/interactive/onetoone.py,sha256=cTXgTXR9kKzzlx6EfGumMsEm7DUa7BD9JSeBpdPiupI,13312
|
|
43
43
|
executorlib/task_scheduler/interactive/shared.py,sha256=Lr9R63f0kBl4g64E0vRl3xMvnYlNypoIx5ADYSQ2RdE,6720
|
|
44
44
|
executorlib/task_scheduler/interactive/spawner_flux.py,sha256=M7CPWvzY7MDkplJ4awymh7WbMYwKsDPTKxA2Op9wfNo,7075
|
|
45
|
-
executorlib/task_scheduler/interactive/spawner_pysqa.py,sha256=
|
|
45
|
+
executorlib/task_scheduler/interactive/spawner_pysqa.py,sha256=q4BfPPTJfClHMyrRiQM-c5c9yLkCgzA5hB5ihB9EVps,10502
|
|
46
46
|
executorlib/task_scheduler/interactive/spawner_slurm.py,sha256=K5mj63PE8FYbkw9WWm4uEjoA5q0HM42z1d2wjAmO5YA,3713
|
|
47
|
-
executorlib-1.
|
|
48
|
-
executorlib-1.
|
|
49
|
-
executorlib-1.
|
|
50
|
-
executorlib-1.
|
|
47
|
+
executorlib-1.11.0.dist-info/METADATA,sha256=oIKGJDdly8xsh9ZTwfbDqg-0M_DdT37ya1bdRMgj1Po,20954
|
|
48
|
+
executorlib-1.11.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
49
|
+
executorlib-1.11.0.dist-info/licenses/LICENSE,sha256=NkrhccIxPXCbbvp_upyVojt7DNTwZIco3z9wsYpSLqU,1511
|
|
50
|
+
executorlib-1.11.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|