parsl 2024.1.8__py3-none-any.whl → 2024.1.15__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.
- parsl/dataflow/dflow.py +3 -1
- parsl/executors/high_throughput/executor.py +19 -16
- parsl/executors/workqueue/executor.py +1 -1
- parsl/jobs/job_status_poller.py +7 -6
- parsl/providers/errors.py +14 -7
- parsl/tests/conftest.py +4 -0
- parsl/tests/test_providers/test_submiterror_deprecation.py +21 -0
- parsl/tests/test_utils/__init__.py +0 -0
- parsl/tests/test_utils/test_representation_mixin.py +68 -0
- parsl/utils.py +14 -9
- parsl/version.py +1 -1
- {parsl-2024.1.8.dist-info → parsl-2024.1.15.dist-info}/METADATA +2 -2
- {parsl-2024.1.8.dist-info → parsl-2024.1.15.dist-info}/RECORD +20 -17
- {parsl-2024.1.8.data → parsl-2024.1.15.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2024.1.8.data → parsl-2024.1.15.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2024.1.8.data → parsl-2024.1.15.data}/scripts/process_worker_pool.py +0 -0
- {parsl-2024.1.8.dist-info → parsl-2024.1.15.dist-info}/LICENSE +0 -0
- {parsl-2024.1.8.dist-info → parsl-2024.1.15.dist-info}/WHEEL +0 -0
- {parsl-2024.1.8.dist-info → parsl-2024.1.15.dist-info}/entry_points.txt +0 -0
- {parsl-2024.1.8.dist-info → parsl-2024.1.15.dist-info}/top_level.txt +0 -0
parsl/dataflow/dflow.py
CHANGED
@@ -177,7 +177,9 @@ class DataFlowKernel:
|
|
177
177
|
|
178
178
|
# this must be set before executors are added since add_executors calls
|
179
179
|
# job_status_poller.add_executors.
|
180
|
-
self.job_status_poller = JobStatusPoller(self
|
180
|
+
self.job_status_poller = JobStatusPoller(strategy=self.config.strategy,
|
181
|
+
max_idletime=self.config.max_idletime,
|
182
|
+
dfk=self)
|
181
183
|
|
182
184
|
self.executors: Dict[str, ParslExecutor] = {}
|
183
185
|
|
@@ -205,7 +205,6 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
|
|
205
205
|
|
206
206
|
BlockProviderExecutor.__init__(self, provider=provider, block_error_handler=block_error_handler)
|
207
207
|
self.label = label
|
208
|
-
self.launch_cmd = launch_cmd
|
209
208
|
self.worker_debug = worker_debug
|
210
209
|
self.storage_access = storage_access
|
211
210
|
self.working_dir = working_dir
|
@@ -259,21 +258,25 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
|
|
259
258
|
self.cpu_affinity = cpu_affinity
|
260
259
|
|
261
260
|
if not launch_cmd:
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
261
|
+
launch_cmd = (
|
262
|
+
"process_worker_pool.py {debug} {max_workers} "
|
263
|
+
"-a {addresses} "
|
264
|
+
"-p {prefetch_capacity} "
|
265
|
+
"-c {cores_per_worker} "
|
266
|
+
"-m {mem_per_worker} "
|
267
|
+
"--poll {poll_period} "
|
268
|
+
"--task_port={task_port} "
|
269
|
+
"--result_port={result_port} "
|
270
|
+
"--logdir={logdir} "
|
271
|
+
"--block_id={{block_id}} "
|
272
|
+
"--hb_period={heartbeat_period} "
|
273
|
+
"{address_probe_timeout_string} "
|
274
|
+
"--hb_threshold={heartbeat_threshold} "
|
275
|
+
"--cpu-affinity {cpu_affinity} "
|
276
|
+
"--available-accelerators {accelerators}"
|
277
|
+
)
|
278
|
+
|
279
|
+
self.launch_cmd = launch_cmd
|
277
280
|
|
278
281
|
radio_mode = "htex"
|
279
282
|
|
@@ -849,7 +849,7 @@ def _work_queue_submit_wait(*,
|
|
849
849
|
break
|
850
850
|
|
851
851
|
# Submit tasks
|
852
|
-
while task_queue.qsize() > 0 and not should_stop.value:
|
852
|
+
while task_queue.qsize() > 0 or q.empty() and not should_stop.value:
|
853
853
|
# Obtain task from task_queue
|
854
854
|
try:
|
855
855
|
task = task_queue.get(timeout=1)
|
parsl/jobs/job_status_poller.py
CHANGED
@@ -2,7 +2,7 @@ import logging
|
|
2
2
|
import parsl
|
3
3
|
import time
|
4
4
|
import zmq
|
5
|
-
from typing import Dict, List, Sequence
|
5
|
+
from typing import Dict, List, Sequence, Optional
|
6
6
|
|
7
7
|
from parsl.jobs.states import JobStatus, JobState
|
8
8
|
from parsl.jobs.strategy import Strategy
|
@@ -17,7 +17,7 @@ logger = logging.getLogger(__name__)
|
|
17
17
|
|
18
18
|
|
19
19
|
class PollItem:
|
20
|
-
def __init__(self, executor: BlockProviderExecutor, dfk: "parsl.dataflow.dflow.DataFlowKernel"):
|
20
|
+
def __init__(self, executor: BlockProviderExecutor, dfk: Optional["parsl.dataflow.dflow.DataFlowKernel"] = None):
|
21
21
|
self._executor = executor
|
22
22
|
self._dfk = dfk
|
23
23
|
self._interval = executor.status_polling_interval
|
@@ -26,7 +26,7 @@ class PollItem:
|
|
26
26
|
|
27
27
|
# Create a ZMQ channel to send poll status to monitoring
|
28
28
|
self.monitoring_enabled = False
|
29
|
-
if self._dfk.monitoring is not None:
|
29
|
+
if self._dfk and self._dfk.monitoring is not None:
|
30
30
|
self.monitoring_enabled = True
|
31
31
|
hub_address = self._dfk.hub_address
|
32
32
|
hub_port = self._dfk.hub_interchange_port
|
@@ -100,11 +100,12 @@ class PollItem:
|
|
100
100
|
|
101
101
|
|
102
102
|
class JobStatusPoller(Timer):
|
103
|
-
def __init__(self,
|
103
|
+
def __init__(self, strategy: Optional[str] = None, max_idletime: float = 0.0,
|
104
|
+
dfk: Optional["parsl.dataflow.dflow.DataFlowKernel"] = None) -> None:
|
104
105
|
self._poll_items = [] # type: List[PollItem]
|
105
106
|
self.dfk = dfk
|
106
|
-
self._strategy = Strategy(strategy=
|
107
|
-
max_idletime=
|
107
|
+
self._strategy = Strategy(strategy=strategy,
|
108
|
+
max_idletime=max_idletime)
|
108
109
|
super().__init__(self.poll, interval=5, name="JobStatusPoller")
|
109
110
|
|
110
111
|
def poll(self) -> None:
|
parsl/providers/errors.py
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
from parsl.errors import ParslError
|
2
2
|
|
3
|
+
import warnings
|
4
|
+
|
3
5
|
|
4
6
|
class ExecutionProviderException(ParslError):
|
5
7
|
""" Base class for all exceptions
|
@@ -46,18 +48,23 @@ class ScriptPathError(ExecutionProviderException):
|
|
46
48
|
|
47
49
|
|
48
50
|
class SubmitException(ExecutionProviderException):
|
49
|
-
'''Raised by the submit() method of a provider if there is an error in launching a
|
51
|
+
'''Raised by the submit() method of a provider if there is an error in launching a job.
|
50
52
|
'''
|
51
53
|
|
52
|
-
def __init__(self,
|
53
|
-
self.
|
54
|
+
def __init__(self, job_name, message, stdout=None, stderr=None):
|
55
|
+
self.job_name = job_name
|
54
56
|
self.message = message
|
55
57
|
self.stdout = stdout
|
56
58
|
self.stderr = stderr
|
57
59
|
|
60
|
+
@property
|
61
|
+
def task_name(self) -> str:
|
62
|
+
warnings.warn("task_name is deprecated; use .job_name instead. This will be removed after 2024-06.", DeprecationWarning)
|
63
|
+
return self.job_name
|
64
|
+
|
58
65
|
def __str__(self):
|
59
66
|
# TODO: make this more user-friendly
|
60
|
-
return "Cannot launch
|
61
|
-
|
62
|
-
|
63
|
-
|
67
|
+
return "Cannot launch job {0}: {1}; stdout={2}, stderr={3}".format(self.job_name,
|
68
|
+
self.message,
|
69
|
+
self.stdout,
|
70
|
+
self.stderr)
|
parsl/tests/conftest.py
CHANGED
@@ -22,6 +22,7 @@ import _pytest.runner as runner
|
|
22
22
|
|
23
23
|
import parsl
|
24
24
|
from parsl.dataflow.dflow import DataFlowKernelLoader
|
25
|
+
from parsl.utils import RepresentationMixin
|
25
26
|
|
26
27
|
logger = logging.getLogger(__name__)
|
27
28
|
|
@@ -157,6 +158,8 @@ def load_dfk_session(request, pytestconfig, tmpd_cwd_session):
|
|
157
158
|
load_dfk_local_module for module-level configuration management.
|
158
159
|
"""
|
159
160
|
|
161
|
+
RepresentationMixin._validate_repr = True
|
162
|
+
|
160
163
|
config = pytestconfig.getoption('config')[0]
|
161
164
|
|
162
165
|
if config != 'local':
|
@@ -203,6 +206,7 @@ def load_dfk_local_module(request, pytestconfig, tmpd_cwd_session):
|
|
203
206
|
be used to perform more interesting DFK initialisation not possible with
|
204
207
|
local_config.
|
205
208
|
"""
|
209
|
+
RepresentationMixin._validate_repr = True
|
206
210
|
|
207
211
|
config = pytestconfig.getoption('config')[0]
|
208
212
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import pytest
|
2
|
+
import random
|
3
|
+
import string
|
4
|
+
|
5
|
+
from parsl.providers.errors import SubmitException
|
6
|
+
|
7
|
+
|
8
|
+
@pytest.mark.local
|
9
|
+
def test_submit_exception_task_name_deprecation():
|
10
|
+
"""This tests the deprecation warning of task_name in SubmitException
|
11
|
+
"""
|
12
|
+
j = "the_name-" + "".join(random.sample(string.ascii_lowercase, 10))
|
13
|
+
|
14
|
+
ex = SubmitException(j, "m")
|
15
|
+
|
16
|
+
# the new behaviour
|
17
|
+
assert ex.job_name == j
|
18
|
+
|
19
|
+
# the old behaviour
|
20
|
+
with pytest.deprecated_call():
|
21
|
+
assert ex.task_name == j
|
File without changes
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import pytest
|
2
|
+
|
3
|
+
from parsl.utils import RepresentationMixin
|
4
|
+
|
5
|
+
|
6
|
+
class GoodRepr(RepresentationMixin):
|
7
|
+
def __init__(self, x, y):
|
8
|
+
self.x = x
|
9
|
+
self.y = y
|
10
|
+
|
11
|
+
|
12
|
+
class BadRepr(RepresentationMixin):
|
13
|
+
"""This class incorrectly subclasses RepresentationMixin.
|
14
|
+
It does not store the parameter x on self.
|
15
|
+
"""
|
16
|
+
def __init__(self, x, y):
|
17
|
+
self.y = y
|
18
|
+
|
19
|
+
|
20
|
+
@pytest.mark.local
|
21
|
+
def test_repr_good():
|
22
|
+
p1 = "parameter 1"
|
23
|
+
p2 = "the second parameter"
|
24
|
+
|
25
|
+
# repr should not raise an exception
|
26
|
+
r = repr(GoodRepr(p1, p2))
|
27
|
+
|
28
|
+
# representation should contain both values supplied
|
29
|
+
# at object creation.
|
30
|
+
assert p1 in r
|
31
|
+
assert p2 in r
|
32
|
+
|
33
|
+
|
34
|
+
@pytest.mark.local
|
35
|
+
def test_repr_bad():
|
36
|
+
p1 = "parameter 1"
|
37
|
+
p2 = "the second parameter"
|
38
|
+
|
39
|
+
# repr should raise an exception
|
40
|
+
with pytest.raises(AttributeError):
|
41
|
+
repr(BadRepr(p1, p2))
|
42
|
+
|
43
|
+
|
44
|
+
class NonValidatingRepresentationMixin(RepresentationMixin):
|
45
|
+
"""This will override the process level RepresentationMixin which can
|
46
|
+
be set to validating mode by pytest fixtures"""
|
47
|
+
_validate_repr = False
|
48
|
+
|
49
|
+
|
50
|
+
class BadReprNonValidating(NonValidatingRepresentationMixin):
|
51
|
+
"""This class incorrectly subclasses RepresentationMixin.
|
52
|
+
It does not store the parameter x on self.
|
53
|
+
"""
|
54
|
+
def __init__(self, x, y):
|
55
|
+
self.y = y
|
56
|
+
|
57
|
+
|
58
|
+
@pytest.mark.local
|
59
|
+
def test_repr_bad_unvalidated():
|
60
|
+
p1 = "parameter 1"
|
61
|
+
p2 = "the second parameter"
|
62
|
+
|
63
|
+
# repr should not raise an exception
|
64
|
+
r = repr(BadReprNonValidating(p1, p2))
|
65
|
+
# parameter 2 should be found in the representation, but not
|
66
|
+
# parameter 1
|
67
|
+
assert p1 not in r
|
68
|
+
assert p2 in r
|
parsl/utils.py
CHANGED
@@ -191,6 +191,8 @@ class RepresentationMixin:
|
|
191
191
|
"""
|
192
192
|
__max_width__ = 80
|
193
193
|
|
194
|
+
_validate_repr = False
|
195
|
+
|
194
196
|
def __repr__(self) -> str:
|
195
197
|
init = self.__init__ # type: ignore[misc]
|
196
198
|
|
@@ -211,18 +213,21 @@ class RepresentationMixin:
|
|
211
213
|
else:
|
212
214
|
defaults = {}
|
213
215
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
216
|
+
if self._validate_repr:
|
217
|
+
for arg in argspec.args[1:]:
|
218
|
+
if not hasattr(self, arg):
|
219
|
+
template = (f'class {self.__class__.__name__} uses {arg} in the'
|
220
|
+
f' constructor, but does not define it as an '
|
221
|
+
f'attribute')
|
222
|
+
raise AttributeError(template)
|
223
|
+
|
224
|
+
default = "<unrecorded>"
|
220
225
|
|
221
226
|
if len(defaults) != 0:
|
222
|
-
args = [getattr(self, a) for a in argspec.args[1:-len(defaults)]]
|
227
|
+
args = [getattr(self, a, default) for a in argspec.args[1:-len(defaults)]]
|
223
228
|
else:
|
224
|
-
args = [getattr(self, a) for a in argspec.args[1:]]
|
225
|
-
kwargs = {key: getattr(self, key) for key in defaults}
|
229
|
+
args = [getattr(self, a, default) for a in argspec.args[1:]]
|
230
|
+
kwargs = {key: getattr(self, key, default) for key in defaults}
|
226
231
|
|
227
232
|
def assemble_multiline(args: List[str], kwargs: Dict[str, object]) -> str:
|
228
233
|
def indent(text: str) -> str:
|
parsl/version.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2024.1.
|
3
|
+
Version: 2024.1.15
|
4
4
|
Summary: Simple data dependent workflows in Python
|
5
5
|
Home-page: https://github.com/Parsl/parsl
|
6
|
-
Download-URL: https://github.com/Parsl/parsl/archive/2024.01.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2024.01.15.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -6,8 +6,8 @@ parsl/log_utils.py,sha256=AGem-dhQs5TYUyJg6GKkRuHxAw8FHhYlWB_0s7_ROw4,3175
|
|
6
6
|
parsl/multiprocessing.py,sha256=w3t1pFkHo4oZpznc2KF6Ff-Jj8MvXqvjm-hoiRqZDDQ,1984
|
7
7
|
parsl/process_loggers.py,sha256=1G3Rfrh5wuZNo2X03grG4kTYPGOxz7hHCyG6L_A3b0A,1137
|
8
8
|
parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
|
-
parsl/utils.py,sha256=
|
10
|
-
parsl/version.py,sha256=
|
9
|
+
parsl/utils.py,sha256=TTM6gFgW2EscFsNNDGNRmHdXSMIo7TO5yYt8PdyRqVI,11767
|
10
|
+
parsl/version.py,sha256=WpmqICAVsqNhdyjF-ha60RMe-o4rQkt9Jfb9C2bTing,131
|
11
11
|
parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
parsl/app/app.py,sha256=wAHchJetgnicT1pn0NJKDeDX0lV3vDFlG8cQd_Ciax4,8522
|
13
13
|
parsl/app/bash.py,sha256=bx9x1XFwkOTpZZD3CPwnVL9SyNRDjbUGtOnuGLvxN_8,5396
|
@@ -62,7 +62,7 @@ parsl/data_provider/http.py,sha256=nDHTW7XmJqAukWJjPRQjyhUXt8r6GsQ36mX9mv_wOig,2
|
|
62
62
|
parsl/data_provider/rsync.py,sha256=2-ZxqrT-hBj39x082NusJaBqsGW4Jd2qCW6JkVPpEl0,4254
|
63
63
|
parsl/data_provider/staging.py,sha256=l-mAXFburs3BWPjkSmiQKuAgJpsxCG62yATPDbrafYI,4523
|
64
64
|
parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
65
|
-
parsl/dataflow/dflow.py,sha256=
|
65
|
+
parsl/dataflow/dflow.py,sha256=VymK_7clCbzFBlX8EyaCtUtTtE6BjULiezP3WpW-eoI,63845
|
66
66
|
parsl/dataflow/errors.py,sha256=w2vOt_ymzG2dOqJUO4IDcmTlrCIHlMZL8nBVyVq0O_8,2176
|
67
67
|
parsl/dataflow/futures.py,sha256=aVfEUTzp4-EdunDAtNcqVQf8l_A7ArDi2c82KZMwxfY,5256
|
68
68
|
parsl/dataflow/memoization.py,sha256=AsJO6c6cRp2ac6H8uGn2USlEi78_nX3QWvpxYt4XdYE,9583
|
@@ -80,7 +80,7 @@ parsl/executors/flux/executor.py,sha256=tf9xPmWgEsgEjzs89dJ-sMx-QaqRpM1R1crX3tp0
|
|
80
80
|
parsl/executors/flux/flux_instance_manager.py,sha256=tTEOATClm9SwdgLeBRWPC6D55iNDuh0YxqJOw3c3eQ4,2036
|
81
81
|
parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
82
|
parsl/executors/high_throughput/errors.py,sha256=vl69wLuVOplbKxHI9WphEGBExHWkTn5n8T9QhBXuNH0,380
|
83
|
-
parsl/executors/high_throughput/executor.py,sha256=
|
83
|
+
parsl/executors/high_throughput/executor.py,sha256=Rpv3yd3vAQxNXRqsyo2_8aCNUoaCtscu6FEt7BPrrSE,31983
|
84
84
|
parsl/executors/high_throughput/interchange.py,sha256=tX_EvQf7WkSKMJG-TNmA-WADjhtKZqviYpM406Td4dA,29334
|
85
85
|
parsl/executors/high_throughput/manager_record.py,sha256=T8-JVMfDJU6SJfzJRooD0mO8AHGMXlcn3PBOM0m_vng,366
|
86
86
|
parsl/executors/high_throughput/monitoring_info.py,sha256=3gQpwQjjNDEBz0cQqJZB6hRiwLiWwXs83zkQDmbOwxY,297
|
@@ -104,13 +104,13 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
|
|
104
104
|
parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
105
105
|
parsl/executors/workqueue/errors.py,sha256=ghB93Ptb_QbOAvgLe7siV_snRRkU_T-cFHv3AR6Ziwo,541
|
106
106
|
parsl/executors/workqueue/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
|
107
|
-
parsl/executors/workqueue/executor.py,sha256=
|
107
|
+
parsl/executors/workqueue/executor.py,sha256=szgelw7HL4K-iLcyzqoGg2dsSN1S9QUXlNr4Z9q11mw,49031
|
108
108
|
parsl/executors/workqueue/parsl_coprocess.py,sha256=6nmNqv7GT472J5smGFKm_TUjeFHy44i5Fl8pUovRoug,6046
|
109
109
|
parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
|
110
110
|
parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
111
111
|
parsl/jobs/error_handlers.py,sha256=WYn69jtWgfEsThCMxkGvJ2qoCfebc4IGd4JEolj2ww8,2279
|
112
112
|
parsl/jobs/errors.py,sha256=cpSQXCrlKtuHsQf7usjF-lX8XsDkFnE5kWpmFjiN6OU,178
|
113
|
-
parsl/jobs/job_status_poller.py,sha256=
|
113
|
+
parsl/jobs/job_status_poller.py,sha256=xQQauyNpmK23t6ViYm-AvvDLHsxVTmghjlACZvfL6LQ,4973
|
114
114
|
parsl/jobs/states.py,sha256=lwe2fUdPjaUcS-N9qTPbS9du8mpX_YAQ7vlVzCXDKVE,4574
|
115
115
|
parsl/jobs/strategy.py,sha256=9V07D8bydpyxvNNRH89JZa0Pt-bjjowrSmCc5mv6awY,12903
|
116
116
|
parsl/launchers/__init__.py,sha256=k8zAB3IBP-brfqXUptKwGkvsIRaXjAJZNBJa2XVtY1A,546
|
@@ -150,7 +150,7 @@ parsl/monitoring/visualization/templates/workflows_summary.html,sha256=7brKKNsxc
|
|
150
150
|
parsl/providers/__init__.py,sha256=jd-1_vd-HtWYDHzwO30lNW5GMw6nfeTyNn3tI8CG7L4,1207
|
151
151
|
parsl/providers/base.py,sha256=LvSMClsbCQI_7geGdNDpKZ6vWCl1EpD73o0xkxilqJ4,5702
|
152
152
|
parsl/providers/cluster_provider.py,sha256=FLl3AUHdFRRapQl_YoM1gxg_UhH3gxxaDvl6NNQqSTg,4701
|
153
|
-
parsl/providers/errors.py,sha256=
|
153
|
+
parsl/providers/errors.py,sha256=ZBZdLKmz1cLqL1ukhimlUAtUUj94WWc8ebr2GI8_I8I,2438
|
154
154
|
parsl/providers/ad_hoc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
155
155
|
parsl/providers/ad_hoc/ad_hoc.py,sha256=jeYMxMT_ox7banr8Db_UeT2qer6XTGLZOZvC307S54U,8302
|
156
156
|
parsl/providers/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -195,7 +195,7 @@ parsl/serialize/facade.py,sha256=0A--_bB_8e5RRT-weYu5Ak33zN_lqZeaJU1x7JXaoBQ,563
|
|
195
195
|
parsl/serialize/proxystore.py,sha256=Yo-38odKlSKSuQfXU4cB5YM9sYV_302uPn1z_en19SU,1623
|
196
196
|
parsl/tests/__init__.py,sha256=s_zoz7Ipgykh-QTQvctdpxENrMnmpXY8oe1bJbUmpqY,204
|
197
197
|
parsl/tests/callables_helper.py,sha256=ceP1YYsNtrZgKT6MAIvpgdccEjQ_CpFEOnZBGHKGOx0,30
|
198
|
-
parsl/tests/conftest.py,sha256=
|
198
|
+
parsl/tests/conftest.py,sha256=sbzv8rIzT69i0GzO3662v9EmXwzTVipx-uR2HfqFR4A,13892
|
199
199
|
parsl/tests/test_aalst_patterns.py,sha256=fi6JHKidV7vMJLv2nnu_-Q0ngGLc89mRm8rFrGIwiUM,9615
|
200
200
|
parsl/tests/test_callables.py,sha256=_QsdS8v2nGgOj4_X69NFHZOGUnqbOrOMCA9pCJColZw,1974
|
201
201
|
parsl/tests/test_flux.py,sha256=st9v55o5ZajK_LQUXh1saLwFh2gpaQFGG5mzdnJMNu0,5098
|
@@ -349,6 +349,7 @@ parsl/tests/test_monitoring/test_viz_colouring.py,sha256=k8SiELxPtnGYZ4r02VQt46R
|
|
349
349
|
parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
350
350
|
parsl/tests/test_providers/test_local_provider.py,sha256=G6Fuko22SvAtD7xhfQv8k_8HtJuFhZ8aHYcWQt073Pg,6968
|
351
351
|
parsl/tests/test_providers/test_slurm_instantiate.py,sha256=eW3pEZRIzZO1-eKFrBc7N5uoN5otwghgbqut74Kyqoc,500
|
352
|
+
parsl/tests/test_providers/test_submiterror_deprecation.py,sha256=ZutVj_0VJ7M-5UZV0qisMwId7lT783LAxGEAsMjkeZU,501
|
352
353
|
parsl/tests/test_python_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
353
354
|
parsl/tests/test_python_apps/test_arg_input_types.py,sha256=JXpfHiu8lr9BN6u1OzqFvGwBhxzsGTPMewHx6Wdo-HI,670
|
354
355
|
parsl/tests/test_python_apps/test_basic.py,sha256=lFqh4ugePbp_FRiHGUXxzV34iS7l8C5UkxTHuLcpnYs,855
|
@@ -411,14 +412,16 @@ parsl/tests/test_staging/test_staging_https.py,sha256=ESNuvdc_P5JoPaMjBM3ofi1mNJ
|
|
411
412
|
parsl/tests/test_threads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
412
413
|
parsl/tests/test_threads/test_configs.py,sha256=QA9YjIMAtZ2jmkfOWqBzEfzQQcFVCDizH7Qwiy2HIMQ,909
|
413
414
|
parsl/tests/test_threads/test_lazy_errors.py,sha256=nGhYfCMHFZYSy6YJ4gnAmiLl9SfYs0WVnuvj8DXQ9bw,560
|
415
|
+
parsl/tests/test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
416
|
+
parsl/tests/test_utils/test_representation_mixin.py,sha256=kUZeIDwA2rlbJ3-beGzLLwf3dOplTMCrWJN87etHcyY,1633
|
414
417
|
parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
415
418
|
parsl/usage_tracking/usage.py,sha256=TEuAIm_U_G2ojZxvd0bbVa6gZlU61_mVRa2yJC9mGiI,7555
|
416
|
-
parsl-2024.1.
|
417
|
-
parsl-2024.1.
|
418
|
-
parsl-2024.1.
|
419
|
-
parsl-2024.1.
|
420
|
-
parsl-2024.1.
|
421
|
-
parsl-2024.1.
|
422
|
-
parsl-2024.1.
|
423
|
-
parsl-2024.1.
|
424
|
-
parsl-2024.1.
|
419
|
+
parsl-2024.1.15.data/scripts/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
|
420
|
+
parsl-2024.1.15.data/scripts/parsl_coprocess.py,sha256=kzX_1RI3V2KMKs6L-il4I1qkLNVodDKFXN_1FHB9fmM,6031
|
421
|
+
parsl-2024.1.15.data/scripts/process_worker_pool.py,sha256=ytz3F8ZYeBr8tFqSRv2O9eZGdsID7oZRulBmmQmZaV8,34056
|
422
|
+
parsl-2024.1.15.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
423
|
+
parsl-2024.1.15.dist-info/METADATA,sha256=lO1T0WGGTSX5H5gO1b9g1uS6kl5PfhL1K6b7eu7HAFk,3868
|
424
|
+
parsl-2024.1.15.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
425
|
+
parsl-2024.1.15.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
426
|
+
parsl-2024.1.15.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
427
|
+
parsl-2024.1.15.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|