parsl 2024.10.7__py3-none-any.whl → 2024.10.14__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/executors/errors.py CHANGED
@@ -1,4 +1,6 @@
1
1
  """Exceptions raise by Executors."""
2
+ from typing import Set
3
+
2
4
  from parsl.errors import ParslError
3
5
  from parsl.executors.base import ParslExecutor
4
6
 
@@ -44,6 +46,17 @@ class UnsupportedFeatureError(ExecutorError):
44
46
  self.current_executor)
45
47
 
46
48
 
49
+ class InvalidResourceSpecification(ExecutorError):
50
+ """Error raised when Invalid input is supplied via resource Specification"""
51
+
52
+ def __init__(self, invalid_keys: Set[str], message: str = ''):
53
+ self.invalid_keys = invalid_keys
54
+ self.message = message
55
+
56
+ def __str__(self):
57
+ return f"Invalid Resource Specification Supplied: {self.invalid_keys}. {self.message}"
58
+
59
+
47
60
  class ScalingFailed(ExecutorError):
48
61
  """Scaling failed due to error in Execution provider."""
49
62
 
@@ -16,16 +16,17 @@ from parsl import curvezmq
16
16
  from parsl.addresses import get_all_addresses
17
17
  from parsl.app.errors import RemoteExceptionWrapper
18
18
  from parsl.data_provider.staging import Staging
19
- from parsl.executors.errors import BadMessage, ScalingFailed
19
+ from parsl.executors.errors import (
20
+ BadMessage,
21
+ InvalidResourceSpecification,
22
+ ScalingFailed,
23
+ )
20
24
  from parsl.executors.high_throughput import zmq_pipes
21
25
  from parsl.executors.high_throughput.errors import CommandClientTimeoutError
22
26
  from parsl.executors.high_throughput.manager_selector import (
23
27
  ManagerSelector,
24
28
  RandomManagerSelector,
25
29
  )
26
- from parsl.executors.high_throughput.mpi_prefix_composer import (
27
- InvalidResourceSpecification,
28
- )
29
30
  from parsl.executors.status_handling import BlockProviderExecutor
30
31
  from parsl.jobs.states import TERMINAL_STATES, JobState, JobStatus
31
32
  from parsl.process_loggers import wrap_with_logs
@@ -459,9 +460,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
459
460
  except pickle.UnpicklingError:
460
461
  raise BadMessage("Message received could not be unpickled")
461
462
 
462
- if msg['type'] == 'heartbeat':
463
- continue
464
- elif msg['type'] == 'result':
463
+ if msg['type'] == 'result':
465
464
  try:
466
465
  tid = msg['task_id']
467
466
  except Exception:
@@ -581,7 +580,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
581
580
  def outstanding(self) -> int:
582
581
  """Returns the count of tasks outstanding across the interchange
583
582
  and managers"""
584
- return self.command_client.run("OUTSTANDING_C")
583
+ return len(self.tasks)
585
584
 
586
585
  @property
587
586
  def connected_workers(self) -> int:
@@ -6,7 +6,6 @@ import os
6
6
  import pickle
7
7
  import platform
8
8
  import queue
9
- import signal
10
9
  import sys
11
10
  import threading
12
11
  import time
@@ -252,13 +251,7 @@ class Interchange:
252
251
  try:
253
252
  command_req = self.command_channel.recv_pyobj()
254
253
  logger.debug("Received command request: {}".format(command_req))
255
- if command_req == "OUTSTANDING_C":
256
- outstanding = self.pending_task_queue.qsize()
257
- for manager in self._ready_managers.values():
258
- outstanding += len(manager['tasks'])
259
- reply = outstanding
260
-
261
- elif command_req == "CONNECTED_BLOCKS":
254
+ if command_req == "CONNECTED_BLOCKS":
262
255
  reply = self.connected_block_history
263
256
 
264
257
  elif command_req == "WORKERS":
@@ -319,16 +312,6 @@ class Interchange:
319
312
  """ Start the interchange
320
313
  """
321
314
 
322
- # If a user workflow has set its own signal handler for sigterm, that
323
- # handler will be inherited by the interchange process because it is
324
- # launched as a multiprocessing fork process.
325
- # That can interfere with the interchange shutdown mechanism, which is
326
- # to receive a SIGTERM and exit immediately.
327
- # See Parsl issue #2343 (Threads and multiprocessing cannot be
328
- # intermingled without deadlocks) which talks about other fork-related
329
- # parent-process-inheritance problems.
330
- signal.signal(signal.SIGTERM, signal.SIG_DFL)
331
-
332
315
  logger.info("Starting main interchange method")
333
316
 
334
317
  if self.hub_address is not None and self.hub_zmq_port is not None:
@@ -549,7 +532,6 @@ class Interchange:
549
532
  monitoring_radio.send(r['payload'])
550
533
  elif r['type'] == 'heartbeat':
551
534
  logger.debug("Manager %r sent heartbeat via results connection", manager_id)
552
- b_messages.append((p_message, r))
553
535
  else:
554
536
  logger.error("Interchange discarding result_queue message of unknown type: %s", r["type"])
555
537
 
@@ -1,5 +1,7 @@
1
1
  import logging
2
- from typing import Dict, List, Set, Tuple
2
+ from typing import Dict, List, Tuple
3
+
4
+ from parsl.executors.errors import InvalidResourceSpecification
3
5
 
4
6
  logger = logging.getLogger(__name__)
5
7
 
@@ -8,27 +10,6 @@ VALID_LAUNCHERS = ('srun',
8
10
  'mpiexec')
9
11
 
10
12
 
11
- class MissingResourceSpecification(Exception):
12
- """Exception raised when input is not supplied a resource specification"""
13
-
14
- def __init__(self, reason: str):
15
- self.reason = reason
16
-
17
- def __str__(self):
18
- return f"Missing resource specification: {self.reason}"
19
-
20
-
21
- class InvalidResourceSpecification(Exception):
22
- """Exception raised when Invalid input is supplied via resource specification"""
23
-
24
- def __init__(self, invalid_keys: Set[str], message: str = ''):
25
- self.invalid_keys = invalid_keys
26
- self.message = message
27
-
28
- def __str__(self):
29
- return f"Invalid resource specification options supplied: {self.invalid_keys} {self.message}"
30
-
31
-
32
13
  def validate_resource_spec(resource_spec: Dict[str, str]):
33
14
  """Basic validation of keys in the resource_spec
34
15
 
@@ -40,7 +21,8 @@ def validate_resource_spec(resource_spec: Dict[str, str]):
40
21
  # empty resource_spec when mpi_mode is set causes parsl to hang
41
22
  # ref issue #3427
42
23
  if len(user_keys) == 0:
43
- raise MissingResourceSpecification('MPI mode requires optional parsl_resource_specification keyword argument to be configured')
24
+ raise InvalidResourceSpecification(user_keys,
25
+ 'MPI mode requires optional parsl_resource_specification keyword argument to be configured')
44
26
 
45
27
  legal_keys = set(("ranks_per_node",
46
28
  "num_nodes",
@@ -6,7 +6,7 @@ import typeguard
6
6
 
7
7
  from parsl.data_provider.staging import Staging
8
8
  from parsl.executors.base import ParslExecutor
9
- from parsl.executors.errors import UnsupportedFeatureError
9
+ from parsl.executors.errors import InvalidResourceSpecification
10
10
  from parsl.utils import RepresentationMixin
11
11
 
12
12
  logger = logging.getLogger(__name__)
@@ -54,7 +54,8 @@ class ThreadPoolExecutor(ParslExecutor, RepresentationMixin):
54
54
  if resource_specification:
55
55
  logger.error("Ignoring the resource specification. "
56
56
  "Parsl resource specification is not supported in ThreadPool Executor.")
57
- raise UnsupportedFeatureError('resource specification', 'ThreadPool Executor', None)
57
+ raise InvalidResourceSpecification(set(resource_specification.keys()),
58
+ "Parsl resource specification is not supported in ThreadPool Executor.")
58
59
 
59
60
  return self.executor.submit(func, *args, **kwargs)
60
61
 
@@ -28,7 +28,7 @@ import parsl.utils as putils
28
28
  from parsl.data_provider.files import File
29
29
  from parsl.data_provider.staging import Staging
30
30
  from parsl.errors import OptionalModuleMissing
31
- from parsl.executors.errors import ExecutorError
31
+ from parsl.executors.errors import ExecutorError, InvalidResourceSpecification
32
32
  from parsl.executors.status_handling import BlockProviderExecutor
33
33
  from parsl.executors.workqueue import exec_parsl_function
34
34
  from parsl.process_loggers import wrap_with_logs
@@ -419,7 +419,7 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
419
419
  message = "Task resource specification only accepts these types of resources: {}".format(
420
420
  ', '.join(acceptable_fields))
421
421
  logger.error(message)
422
- raise ExecutorError(self, message)
422
+ raise InvalidResourceSpecification(keys, message)
423
423
 
424
424
  # this checks that either all of the required resource types are specified, or
425
425
  # that none of them are: the `required_resource_types` are not actually required,
@@ -430,9 +430,10 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
430
430
  logger.error("Running with `autolabel=False`. In this mode, "
431
431
  "task resource specification requires "
432
432
  "three resources to be specified simultaneously: cores, memory, and disk")
433
- raise ExecutorError(self, "Task resource specification requires "
434
- "three resources to be specified simultaneously: cores, memory, and disk. "
435
- "Try setting autolabel=True if you are unsure of the resource usage")
433
+ raise InvalidResourceSpecification(keys,
434
+ "Task resource specification requires "
435
+ "three resources to be specified simultaneously: cores, memory, and disk. "
436
+ "Try setting autolabel=True if you are unsure of the resource usage")
436
437
 
437
438
  for k in keys:
438
439
  if k == 'cores':
parsl/tests/conftest.py CHANGED
@@ -58,7 +58,7 @@ def tmpd_cwd_session(pytestconfig):
58
58
 
59
59
  config = re.sub(r"[^A-z0-9_-]+", "_", pytestconfig.getoption('config')[0])
60
60
  cwd = pathlib.Path(os.getcwd())
61
- pytest_dir = cwd / ".pytest"
61
+ pytest_dir = cwd / "pytest-parsl"
62
62
  pytest_dir.mkdir(mode=0o700, parents=True, exist_ok=True)
63
63
 
64
64
  test_dir_prefix = "parsltest-"
@@ -1,11 +1,9 @@
1
1
  import parsl
2
2
  from parsl.app.app import python_app
3
3
  from parsl.executors import WorkQueueExecutor
4
- from parsl.executors.errors import ExecutorError, UnsupportedFeatureError
4
+ from parsl.executors.errors import InvalidResourceSpecification
5
5
  from parsl.executors.high_throughput.executor import HighThroughputExecutor
6
- from parsl.executors.high_throughput.mpi_prefix_composer import (
7
- InvalidResourceSpecification,
8
- )
6
+ from parsl.executors.threads import ThreadPoolExecutor
9
7
 
10
8
 
11
9
  @python_app
@@ -27,11 +25,10 @@ def test_resource(n=2):
27
25
  try:
28
26
  fut.result()
29
27
  except InvalidResourceSpecification:
30
- assert isinstance(executor, HighThroughputExecutor)
31
- except UnsupportedFeatureError:
32
- assert not isinstance(executor, WorkQueueExecutor)
33
- except Exception as e:
34
- assert isinstance(e, ExecutorError)
28
+ assert (
29
+ isinstance(executor, HighThroughputExecutor) or
30
+ isinstance(executor, WorkQueueExecutor) or
31
+ isinstance(executor, ThreadPoolExecutor))
35
32
 
36
33
  # Specify resources with wrong types
37
34
  # 'cpus' is incorrect, should be 'cores'
@@ -40,8 +37,7 @@ def test_resource(n=2):
40
37
  try:
41
38
  fut.result()
42
39
  except InvalidResourceSpecification:
43
- assert isinstance(executor, HighThroughputExecutor)
44
- except UnsupportedFeatureError:
45
- assert not isinstance(executor, WorkQueueExecutor)
46
- except Exception as e:
47
- assert isinstance(e, ExecutorError)
40
+ assert (
41
+ isinstance(executor, HighThroughputExecutor) or
42
+ isinstance(executor, WorkQueueExecutor) or
43
+ isinstance(executor, ThreadPoolExecutor))
@@ -4,9 +4,7 @@ from unittest import mock
4
4
  import pytest
5
5
 
6
6
  from parsl.executors import HighThroughputExecutor
7
- from parsl.executors.high_throughput.mpi_prefix_composer import (
8
- InvalidResourceSpecification,
9
- )
7
+ from parsl.executors.errors import InvalidResourceSpecification
10
8
 
11
9
 
12
10
  def double(x):
@@ -8,9 +8,7 @@ import pytest
8
8
  import parsl
9
9
  from parsl import Config, bash_app, python_app
10
10
  from parsl.executors import MPIExecutor
11
- from parsl.executors.high_throughput.mpi_prefix_composer import (
12
- MissingResourceSpecification,
13
- )
11
+ from parsl.executors.errors import InvalidResourceSpecification
14
12
  from parsl.launchers import SimpleLauncher
15
13
  from parsl.providers import LocalProvider
16
14
 
@@ -185,6 +183,6 @@ def test_simulated_load(rounds: int = 100):
185
183
  @pytest.mark.local
186
184
  def test_missing_resource_spec():
187
185
 
188
- with pytest.raises(MissingResourceSpecification):
186
+ with pytest.raises(InvalidResourceSpecification):
189
187
  future = mock_app(sleep_dur=0.4)
190
188
  future.result(timeout=10)
@@ -10,12 +10,9 @@ from unittest import mock
10
10
  import pytest
11
11
 
12
12
  from parsl.app.app import python_app
13
+ from parsl.executors.errors import InvalidResourceSpecification
13
14
  from parsl.executors.high_throughput.executor import HighThroughputExecutor
14
15
  from parsl.executors.high_throughput.mpi_executor import MPIExecutor
15
- from parsl.executors.high_throughput.mpi_prefix_composer import (
16
- InvalidResourceSpecification,
17
- MissingResourceSpecification,
18
- )
19
16
  from parsl.executors.high_throughput.mpi_resource_management import (
20
17
  get_nodes_in_batchjob,
21
18
  get_pbs_hosts_list,
@@ -105,7 +102,7 @@ def test_top_level():
105
102
  ({"num_nodes": 2, "ranks_per_node": 1}, None),
106
103
  ({"launcher_options": "--debug_foo"}, None),
107
104
  ({"num_nodes": 2, "BAD_OPT": 1}, InvalidResourceSpecification),
108
- ({}, MissingResourceSpecification),
105
+ ({}, InvalidResourceSpecification),
109
106
  )
110
107
  )
111
108
  def test_mpi_resource_spec(resource_spec: Dict, exception):
parsl/version.py CHANGED
@@ -3,4 +3,4 @@
3
3
  Year.Month.Day[alpha/beta/..]
4
4
  Alphas will be numbered like this -> 2024.12.10a0
5
5
  """
6
- VERSION = '2024.10.07'
6
+ VERSION = '2024.10.14'
@@ -6,7 +6,6 @@ import os
6
6
  import pickle
7
7
  import platform
8
8
  import queue
9
- import signal
10
9
  import sys
11
10
  import threading
12
11
  import time
@@ -252,13 +251,7 @@ class Interchange:
252
251
  try:
253
252
  command_req = self.command_channel.recv_pyobj()
254
253
  logger.debug("Received command request: {}".format(command_req))
255
- if command_req == "OUTSTANDING_C":
256
- outstanding = self.pending_task_queue.qsize()
257
- for manager in self._ready_managers.values():
258
- outstanding += len(manager['tasks'])
259
- reply = outstanding
260
-
261
- elif command_req == "CONNECTED_BLOCKS":
254
+ if command_req == "CONNECTED_BLOCKS":
262
255
  reply = self.connected_block_history
263
256
 
264
257
  elif command_req == "WORKERS":
@@ -319,16 +312,6 @@ class Interchange:
319
312
  """ Start the interchange
320
313
  """
321
314
 
322
- # If a user workflow has set its own signal handler for sigterm, that
323
- # handler will be inherited by the interchange process because it is
324
- # launched as a multiprocessing fork process.
325
- # That can interfere with the interchange shutdown mechanism, which is
326
- # to receive a SIGTERM and exit immediately.
327
- # See Parsl issue #2343 (Threads and multiprocessing cannot be
328
- # intermingled without deadlocks) which talks about other fork-related
329
- # parent-process-inheritance problems.
330
- signal.signal(signal.SIGTERM, signal.SIG_DFL)
331
-
332
315
  logger.info("Starting main interchange method")
333
316
 
334
317
  if self.hub_address is not None and self.hub_zmq_port is not None:
@@ -549,7 +532,6 @@ class Interchange:
549
532
  monitoring_radio.send(r['payload'])
550
533
  elif r['type'] == 'heartbeat':
551
534
  logger.debug("Manager %r sent heartbeat via results connection", manager_id)
552
- b_messages.append((p_message, r))
553
535
  else:
554
536
  logger.error("Interchange discarding result_queue message of unknown type: %s", r["type"])
555
537
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.10.7
3
+ Version: 2024.10.14
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.10.07.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.10.14.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -11,12 +11,11 @@ Keywords: Workflows,Scientific computing
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
- Requires-Python: >=3.8.0
18
+ Requires-Python: >=3.9.0
20
19
  License-File: LICENSE
21
20
  Requires-Dist: pyzmq>=17.1.2
22
21
  Requires-Dist: typeguard!=3.*,<5,>=2.10
@@ -8,7 +8,7 @@ parsl/multiprocessing.py,sha256=MyaEcEq-Qf860u7V98u-PZrPNdtzOZL_NW6EhIJnmfQ,1937
8
8
  parsl/process_loggers.py,sha256=uQ7Gd0W72Jz7rrcYlOMfLsAEhkRltxXJL2MgdduJjEw,1136
9
9
  parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  parsl/utils.py,sha256=91FjQiTUY383ueAjkBAgE21My9nba6SP2a2SrbB1r1Q,11250
11
- parsl/version.py,sha256=HbSGQrtx9YGnYLK2V-8FZAQc-Sr2XVQsAbFKiC3ft4o,131
11
+ parsl/version.py,sha256=gXe4u5wct19WXUeUe498E2p6fv6jhUpyBFJ0x-XoQdM,131
12
12
  parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  parsl/app/app.py,sha256=0gbM4AH2OtFOLsv07I5nglpElcwMSOi-FzdZZfrk7So,8532
14
14
  parsl/app/bash.py,sha256=jm2AvePlCT9DZR7H_4ANDWxatp5dN_22FUlT_gWhZ-g,5528
@@ -71,22 +71,22 @@ parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
71
71
  parsl/dataflow/taskrecord.py,sha256=-FuujdZQ1y5GSc-PJ91QKGT-Kp0lrg70MFDoxpbWI1Q,3113
72
72
  parsl/executors/__init__.py,sha256=Cg8e-F2NUaBD8A9crDAXKCSdoBEwQVIdgm4FlXd-wvk,476
73
73
  parsl/executors/base.py,sha256=5A59mCXPjYNCep9JgfvIjBdZvGV-1mNVHklr-ZIEojg,5200
74
- parsl/executors/errors.py,sha256=xVswxgi7vmJcUMCeYDAPK8sQT2kHFFROVoOr0dnmcWE,2098
74
+ parsl/executors/errors.py,sha256=ZxL3nK5samPos8Xixo_jpRtPIiRJfZ5D397_qaXj2g0,2515
75
75
  parsl/executors/status_handling.py,sha256=nxbkiGr6f3xDc0nsUeSrMMxlj7UD32K7nOLCLzfthDs,15416
76
- parsl/executors/threads.py,sha256=hJt1LzxphqX4fe_9R9Cf1MU0lepWTU_eJe8O665B0Xo,3352
76
+ parsl/executors/threads.py,sha256=_LA5NA3GSvtjDend-1HVpjoDoNHHW13rAD0CET99fjQ,3463
77
77
  parsl/executors/flux/__init__.py,sha256=P9grTTeRPXfqXurFhlSS7XhmE6tTbnCnyQ1f9b-oYHE,136
78
78
  parsl/executors/flux/execute_parsl_task.py,sha256=gRN7F4HhdrKQ-bvn4wXrquBzFOp_9WF88hMIeUaRg5I,1553
79
79
  parsl/executors/flux/executor.py,sha256=8_xakLUu5zNJAHL0LbeTCFEWqWzRK1eE-3ep4GIIIrY,17017
80
80
  parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
81
81
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  parsl/executors/high_throughput/errors.py,sha256=Sak8e8UpiEcXefUjMHbhyXc4Rn7kJtOoh7L8wreBQdk,1638
83
- parsl/executors/high_throughput/executor.py,sha256=aXgfIgjIR9XLSaX_Oiov2a9PISuUbQNfVw0-Xhwqq3w,37305
84
- parsl/executors/high_throughput/interchange.py,sha256=WP9zseYYb0B8522j8wt3yhO12bzmFIxdCIepEU-4oWA,30877
83
+ parsl/executors/high_throughput/executor.py,sha256=5UGCQR3OtTXXMMo7dm0n80HNc0iqZ30NlU7sLlAdTf8,37139
84
+ parsl/executors/high_throughput/interchange.py,sha256=elt48I-3WI4Wf5s7_3ECTw_fqqLPBDA2IzOiC4vqB14,29925
85
85
  parsl/executors/high_throughput/manager_record.py,sha256=yn3L8TUJFkgm2lX1x0SeS9mkvJowC0s2VIMCFiU7ThM,455
86
86
  parsl/executors/high_throughput/manager_selector.py,sha256=uRaEtcbDO2vXf8vjEcm7bfZVdeUlSPTRc3G4oFRO29M,820
87
87
  parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
88
88
  parsl/executors/high_throughput/mpi_executor.py,sha256=khvGz56A8zU8XAY-R4TtqqiJB8B10mkVTXD_9xtrXgo,4696
89
- parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=XQAv9MH7pl5rCUOVw1x8qB64n8iT1-smiVLTBSB1Ro0,4878
89
+ parsl/executors/high_throughput/mpi_prefix_composer.py,sha256=DmpKugANNa1bdYlqQBLHkrFc15fJpefPPhW9hkAlh1s,4308
90
90
  parsl/executors/high_throughput/mpi_resource_management.py,sha256=LFBbJ3BnzTcY_v-jNu30uoIB2Enk4cleN4ygY3dncjY,8194
91
91
  parsl/executors/high_throughput/probe.py,sha256=TNpGTXb4_DEeg_h-LHu4zEKi1-hffboxvKcZUl2OZGk,2751
92
92
  parsl/executors/high_throughput/process_worker_pool.py,sha256=3s-Ouo3ZEhod7hon8euyL37t1DbP5pSVjXyC23DSN_0,43075
@@ -107,7 +107,7 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
107
107
  parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
108
  parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
109
109
  parsl/executors/workqueue/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
110
- parsl/executors/workqueue/executor.py,sha256=aS864cpAvWQeW6hDqOtX_aUa1YnXsPcemuiVMq51pys,49840
110
+ parsl/executors/workqueue/executor.py,sha256=_Jv35gRAzUjC-pyDrSs6sEOFc7MxOFJ5cvWXt9WGRwU,49969
111
111
  parsl/executors/workqueue/parsl_coprocess.py,sha256=cF1UmTgVLoey6QzBcbYgEiEsRidSaFfuO54f1HFw_EM,5737
112
112
  parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
113
113
  parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -200,7 +200,7 @@ parsl/serialize/facade.py,sha256=SpKGSpI8PQb3hhxuKRJUYoQoq284t5np9ouTpogKmtU,679
200
200
  parsl/serialize/proxystore.py,sha256=o-ha9QAvVhbN8y9S1itk3W0O75eyHYZw2AvB2xu5_Lg,1624
201
201
  parsl/tests/__init__.py,sha256=VTtJzOzz_x6fWNh8IOnsgFqVbdiJShi2AZH21mcmID4,204
202
202
  parsl/tests/callables_helper.py,sha256=ceP1YYsNtrZgKT6MAIvpgdccEjQ_CpFEOnZBGHKGOx0,30
203
- parsl/tests/conftest.py,sha256=uD8LI4_U8EoRJ_i224InZC2zbPoOhOYCrO8oryp2z88,14805
203
+ parsl/tests/conftest.py,sha256=DjQDWyGFYWZ9uOMPMdEHFApwRgqzChSVZMdTugbLl6M,14810
204
204
  parsl/tests/test_aalst_patterns.py,sha256=lNIxb7nIgh1yX7hR2fr_ck_mxYJxx8ASKK9zHUVqPno,9614
205
205
  parsl/tests/test_callables.py,sha256=97vrIF1_hfDGd81FM1bhR6FemZMWFcALrH6pVHMTCt8,1974
206
206
  parsl/tests/test_curvezmq.py,sha256=yyhlS4vmaZdMitiySoy4l_ih9H1bsPiN-tMdwIh3H20,12431
@@ -323,7 +323,7 @@ parsl/tests/test_error_handling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
323
323
  parsl/tests/test_error_handling/test_fail.py,sha256=xx4TGWfL7le4cQ9nvnUkrlmKQJkskhD0l_3W1xwZSEI,282
324
324
  parsl/tests/test_error_handling/test_python_walltime.py,sha256=rdmGZHIkuann2Njt3i62odKJ0FaODGr7-L96rOXNVYg,950
325
325
  parsl/tests/test_error_handling/test_rand_fail.py,sha256=crFg4GmwdDpvx49_7w5Xt2P7H2R_V9f6i1Ar-QkASuU,3864
326
- parsl/tests/test_error_handling/test_resource_spec.py,sha256=bk0h2KRZ1lKga_dfhkqq4-tvUJimPtO6gJikUzXJJrU,1565
326
+ parsl/tests/test_error_handling/test_resource_spec.py,sha256=gUS_lN7CcvOh_GeMY8DtZTh6LhizPfrVrYAJpt9XSYM,1428
327
327
  parsl/tests/test_error_handling/test_retries.py,sha256=zJ9D2hrvXQURnK2OIf5LfQFcSDVZ8rhdpp6peGccY7s,2372
328
328
  parsl/tests/test_error_handling/test_retry_handler.py,sha256=8fMHffMBLhRyNreIqkrwamx9TYRZ498uVYNlkcbAoLU,1407
329
329
  parsl/tests/test_error_handling/test_retry_handler_failure.py,sha256=GaGtZZCB9Wb7ieShqTrxUFEUSKy07ZZWytCY4Qixk9Y,552
@@ -343,7 +343,7 @@ parsl/tests/test_htex/test_manager_failure.py,sha256=N-obuSZ8f7XA_XcddoN2LWKSVtp
343
343
  parsl/tests/test_htex/test_managers_command.py,sha256=Y-eUjtBzwW9erCYdph9bOesbkUvX8QUPqXt27DCgVS8,951
344
344
  parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8oqLOIxO6cJgGJMtQ,745
345
345
  parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=2vXZoIx4NuAWYuiNoL5Gxr85w72qZ7Kdb3JGh0FufTg,1867
346
- parsl/tests/test_htex/test_resource_spec_validation.py,sha256=k1zQ--46bCyhOnt2UTaYnSh0I2UhwX747ISAfy8xPvk,952
346
+ parsl/tests/test_htex/test_resource_spec_validation.py,sha256=JqboQRRFV0tEfWrGOdYT9pHazsUjyZLbF7qqnLFS_-A,914
347
347
  parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
348
348
  parsl/tests/test_htex/test_zmq_binding.py,sha256=Bq1HHuMxBE_AcaP1VZ-RqE4euCHO__Du05b2UZ5H1RA,3950
349
349
  parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -358,11 +358,11 @@ parsl/tests/test_monitoring/test_stdouterr.py,sha256=9FQSfiaMrOpoSwravZuEwmdgUgI
358
358
  parsl/tests/test_monitoring/test_viz_colouring.py,sha256=83Qdmn3gM0j7IL6kPDcuIsp_nl4zj-liPijyIN632SY,592
359
359
  parsl/tests/test_mpi_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
360
  parsl/tests/test_mpi_apps/test_bad_mpi_config.py,sha256=QKvEUSrHIBrvqu2fRj1MAqxsYxDfcrdQ7dzWdOZejuU,1320
361
- parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=9RaRgfweywYvcrTvteJXJwt_RSiyWSjBgii5LCnisJg,5461
361
+ parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=_fpiaDq9yEUuBxTiuxLFsBt5r1oX9S-3S-YL5yRB13E,5423
362
362
  parsl/tests/test_mpi_apps/test_mpi_prefix.py,sha256=yJslZvYK3JeL9UgxMwF9DDPR9QD4zJLGVjubD0F-utc,1950
363
363
  parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=YdV8A-m67DHk9wxgNpj69wwGEKrFGL20KAC1TzLke3c,6332
364
364
  parsl/tests/test_mpi_apps/test_mpiex.py,sha256=mlFdHK3A1B6NsEhxTQQX8lhs9qVza36FMG99vNrBRW4,2021
365
- parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=aJo_1Nr0t-5pzw_rpDWEVp41RcICWG9sAeFUFXXJoW8,3828
365
+ parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=5k6HM2jtb6sa7jetpI-Tl1nPQiN33VLaM7YT10c307E,3756
366
366
  parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
367
367
  parsl/tests/test_providers/test_cobalt_deprecation_warning.py,sha256=UN2W6xJxuLx2euPqArORKFEU2VXez9_PYqq-0rZHanQ,391
368
368
  parsl/tests/test_providers/test_local_provider.py,sha256=R96E1eWgHVkvOQ1Au9wj-gfdWKAqGc-qlygFuxpGFQ8,7160
@@ -462,13 +462,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
462
462
  parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
463
463
  parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
464
464
  parsl/usage_tracking/usage.py,sha256=tcoZ2OUjsQVakG8Uu9_HFuEdzpSHyt4JarSRcLGnSMw,8918
465
- parsl-2024.10.7.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
466
- parsl-2024.10.7.data/scripts/interchange.py,sha256=2tsbwd055SEnSpWLNNoqMW6o6ohRJFNSgvgN_umsqN8,30864
467
- parsl-2024.10.7.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
468
- parsl-2024.10.7.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
469
- parsl-2024.10.7.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
470
- parsl-2024.10.7.dist-info/METADATA,sha256=QKAoqM1tb_PlZAjTbTHOPPPKr91tXnuj0mEozl0arMI,4121
471
- parsl-2024.10.7.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
472
- parsl-2024.10.7.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
473
- parsl-2024.10.7.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
474
- parsl-2024.10.7.dist-info/RECORD,,
465
+ parsl-2024.10.14.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
466
+ parsl-2024.10.14.data/scripts/interchange.py,sha256=FcEEmcuMcuFBB_aNOLzaYr5w3Yw9zKJxhtKbIUPVfhI,29912
467
+ parsl-2024.10.14.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
468
+ parsl-2024.10.14.data/scripts/process_worker_pool.py,sha256=78QKnV5KbY_vcteC6k60gpDE4wEk6hsciet_qzs9QoU,43061
469
+ parsl-2024.10.14.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
470
+ parsl-2024.10.14.dist-info/METADATA,sha256=55XMvDQssnRcrcG_9HLlmZnoesuPf61N6Kl5wKHlhnY,4072
471
+ parsl-2024.10.14.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
472
+ parsl-2024.10.14.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
473
+ parsl-2024.10.14.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
474
+ parsl-2024.10.14.dist-info/RECORD,,