parsl 2025.5.12__py3-none-any.whl → 2025.5.26__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/addresses.py +2 -3
- parsl/executors/high_throughput/executor.py +8 -8
- parsl/executors/high_throughput/interchange.py +1 -6
- parsl/executors/workqueue/executor.py +6 -4
- parsl/providers/pbspro/pbspro.py +22 -4
- parsl/tests/test_htex/test_zmq_binding.py +12 -2
- parsl/tests/test_monitoring/test_basic.py +1 -19
- parsl/tests/test_radical/test_mpi_funcs.py +6 -0
- parsl/tests/unit/test_address.py +1 -0
- parsl/version.py +1 -1
- {parsl-2025.5.12.data → parsl-2025.5.26.data}/scripts/interchange.py +1 -6
- {parsl-2025.5.12.dist-info → parsl-2025.5.26.dist-info}/METADATA +2 -2
- {parsl-2025.5.12.dist-info → parsl-2025.5.26.dist-info}/RECORD +20 -20
- {parsl-2025.5.12.data → parsl-2025.5.26.data}/scripts/exec_parsl_function.py +0 -0
- {parsl-2025.5.12.data → parsl-2025.5.26.data}/scripts/parsl_coprocess.py +0 -0
- {parsl-2025.5.12.data → parsl-2025.5.26.data}/scripts/process_worker_pool.py +0 -0
- {parsl-2025.5.12.dist-info → parsl-2025.5.26.dist-info}/LICENSE +0 -0
- {parsl-2025.5.12.dist-info → parsl-2025.5.26.dist-info}/WHEEL +0 -0
- {parsl-2025.5.12.dist-info → parsl-2025.5.26.dist-info}/entry_points.txt +0 -0
- {parsl-2025.5.12.dist-info → parsl-2025.5.26.dist-info}/top_level.txt +0 -0
parsl/addresses.py
CHANGED
@@ -161,13 +161,12 @@ def get_any_address() -> str:
|
|
161
161
|
|
162
162
|
def tcp_url(address: str, port: Union[str, int, None] = None) -> str:
|
163
163
|
"""Construct a tcp url safe for IPv4 and IPv6"""
|
164
|
+
port_suffix = f":{port}" if port else ""
|
164
165
|
if address == "*":
|
165
|
-
return "tcp://*"
|
166
|
+
return "tcp://*" + port_suffix
|
166
167
|
|
167
168
|
ip_addr = ipaddress.ip_address(address)
|
168
169
|
|
169
|
-
port_suffix = f":{port}" if port else ""
|
170
|
-
|
171
170
|
if ip_addr.version == 6 and port_suffix:
|
172
171
|
url = f"tcp://[{address}]{port_suffix}"
|
173
172
|
else:
|
@@ -599,20 +599,20 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
599
599
|
self._result_queue_thread.start()
|
600
600
|
logger.debug("Started result queue thread: %r", self._result_queue_thread)
|
601
601
|
|
602
|
-
def
|
603
|
-
"""Puts a
|
602
|
+
def _hold_manager(self, manager_id: str) -> None:
|
603
|
+
"""Puts a manager on hold, preventing scheduling of additional tasks to it.
|
604
604
|
|
605
605
|
This is called "hold" mostly because this only stops scheduling of tasks,
|
606
|
-
and does not actually kill the
|
606
|
+
and does not actually kill the manager or workers.
|
607
607
|
|
608
608
|
Parameters
|
609
609
|
----------
|
610
610
|
|
611
|
-
|
612
|
-
|
611
|
+
manager_id : str
|
612
|
+
Manager id to be put on hold
|
613
613
|
"""
|
614
|
-
self.command_client.run("HOLD_WORKER;{}".format(
|
615
|
-
logger.debug("Sent hold request to manager: {}".format(
|
614
|
+
self.command_client.run("HOLD_WORKER;{}".format(manager_id))
|
615
|
+
logger.debug("Sent hold request to manager: {}".format(manager_id))
|
616
616
|
|
617
617
|
@property
|
618
618
|
def outstanding(self) -> int:
|
@@ -656,7 +656,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
|
|
656
656
|
for manager in managers:
|
657
657
|
if manager['block_id'] == block_id:
|
658
658
|
logger.debug("Sending hold to manager: {}".format(manager['manager']))
|
659
|
-
self.
|
659
|
+
self._hold_manager(manager['manager'])
|
660
660
|
|
661
661
|
def submit(self, func, resource_specification, *args, **kwargs):
|
662
662
|
"""Submits work to the outgoing_q.
|
@@ -220,11 +220,11 @@ class Interchange:
|
|
220
220
|
def process_command(self, monitoring_radio: Optional[MonitoringRadioSender]) -> None:
|
221
221
|
""" Command server to run async command to the interchange
|
222
222
|
"""
|
223
|
-
logger.debug("entering command_server section")
|
224
223
|
|
225
224
|
reply: Any # the type of reply depends on the command_req received (aka this needs dependent types...)
|
226
225
|
|
227
226
|
if self.command_channel in self.socks and self.socks[self.command_channel] == zmq.POLLIN:
|
227
|
+
logger.debug("entering command_server section")
|
228
228
|
|
229
229
|
command_req = self.command_channel.recv_pyobj()
|
230
230
|
logger.debug("Received command request: {}".format(command_req))
|
@@ -491,10 +491,7 @@ class Interchange:
|
|
491
491
|
self._send_monitoring_info(monitoring_radio, m)
|
492
492
|
else:
|
493
493
|
interesting_managers.remove(manager_id)
|
494
|
-
# logger.debug("Nothing to send to manager {}".format(manager_id))
|
495
494
|
logger.debug("leaving _ready_managers section, with %s managers still interesting", len(interesting_managers))
|
496
|
-
else:
|
497
|
-
logger.debug("either no interesting managers or no tasks, so skipping manager pass")
|
498
495
|
|
499
496
|
def process_results_incoming(self, interesting_managers: Set[bytes], monitoring_radio: Optional[MonitoringRadioSender]) -> None:
|
500
497
|
# Receive any results and forward to client
|
@@ -605,8 +602,6 @@ def start_file_logger(filename: str, level: int = logging.DEBUG, format_string:
|
|
605
602
|
|
606
603
|
)
|
607
604
|
|
608
|
-
global logger
|
609
|
-
logger = logging.getLogger(LOGGER_NAME)
|
610
605
|
logger.setLevel(level)
|
611
606
|
handler = logging.FileHandler(filename)
|
612
607
|
handler.setLevel(level)
|
@@ -40,16 +40,18 @@ from parsl.utils import setproctitle
|
|
40
40
|
|
41
41
|
from .errors import WorkQueueFailure, WorkQueueTaskFailure
|
42
42
|
|
43
|
+
IMPORT_EXCEPTION = None
|
43
44
|
try:
|
44
|
-
import work_queue as wq
|
45
|
-
from work_queue import (
|
45
|
+
from ndcctools import work_queue as wq
|
46
|
+
from ndcctools.work_queue import (
|
46
47
|
WORK_QUEUE_ALLOCATION_MODE_MAX_THROUGHPUT,
|
47
48
|
WORK_QUEUE_DEFAULT_PORT,
|
48
49
|
WorkQueue,
|
49
50
|
)
|
50
|
-
except ImportError:
|
51
|
+
except ImportError as e:
|
51
52
|
_work_queue_enabled = False
|
52
53
|
WORK_QUEUE_DEFAULT_PORT = 0
|
54
|
+
IMPORT_EXCEPTION = e
|
53
55
|
else:
|
54
56
|
_work_queue_enabled = True
|
55
57
|
|
@@ -257,7 +259,7 @@ class WorkQueueExecutor(BlockProviderExecutor, putils.RepresentationMixin):
|
|
257
259
|
BlockProviderExecutor.__init__(self, provider=provider,
|
258
260
|
block_error_handler=True)
|
259
261
|
if not _work_queue_enabled:
|
260
|
-
raise OptionalModuleMissing(['work_queue'], "WorkQueueExecutor requires the work_queue module.")
|
262
|
+
raise OptionalModuleMissing(['work_queue'], f"WorkQueueExecutor requires the work_queue module. More info: {IMPORT_EXCEPTION}")
|
261
263
|
|
262
264
|
self.scaling_cores_per_worker = scaling_cores_per_worker
|
263
265
|
self.label = label
|
parsl/providers/pbspro/pbspro.py
CHANGED
@@ -5,6 +5,7 @@ import time
|
|
5
5
|
|
6
6
|
from parsl.jobs.states import JobState, JobStatus
|
7
7
|
from parsl.launchers import SingleNodeLauncher
|
8
|
+
from parsl.providers.errors import SubmitException
|
8
9
|
from parsl.providers.pbspro.template import template_string
|
9
10
|
from parsl.providers.torque.torque import TorqueProvider, translate_table
|
10
11
|
|
@@ -97,6 +98,14 @@ class PBSProProvider(TorqueProvider):
|
|
97
98
|
|
98
99
|
retcode, stdout, stderr = self.execute_wait("qstat -f -F json {0}".format(job_id_list))
|
99
100
|
|
101
|
+
# If qstat failed do not update job state
|
102
|
+
if retcode != 0:
|
103
|
+
logger.warning("qstat failed with retcode:%s STDOUT:%s STDERR:%s",
|
104
|
+
retcode,
|
105
|
+
stdout.strip(),
|
106
|
+
stderr.strip())
|
107
|
+
return
|
108
|
+
|
100
109
|
job_statuses = json.loads(stdout)
|
101
110
|
|
102
111
|
if 'Jobs' in job_statuses:
|
@@ -198,10 +207,19 @@ class PBSProProvider(TorqueProvider):
|
|
198
207
|
'job_stderr_path': job_stderr_path,
|
199
208
|
}
|
200
209
|
else:
|
201
|
-
message = "
|
202
|
-
|
203
|
-
|
204
|
-
|
210
|
+
message = f"Submit command '{launch_cmd}' failed"
|
211
|
+
logger.error(
|
212
|
+
f"{message}\n"
|
213
|
+
f" Return code: {retcode}\n"
|
214
|
+
f" STDOUT: {stdout.strip()}\n"
|
215
|
+
f" STDERR: {stderr.strip()}"
|
216
|
+
)
|
217
|
+
raise SubmitException(
|
218
|
+
job_name=job_name,
|
219
|
+
message=message,
|
220
|
+
stdout=stdout,
|
221
|
+
stderr=stderr,
|
222
|
+
)
|
205
223
|
|
206
224
|
return job_id
|
207
225
|
|
@@ -12,12 +12,15 @@ from parsl.executors.high_throughput.interchange import Interchange
|
|
12
12
|
from parsl.executors.high_throughput.manager_selector import RandomManagerSelector
|
13
13
|
|
14
14
|
|
15
|
-
def make_interchange(*,
|
15
|
+
def make_interchange(*,
|
16
|
+
interchange_address: Optional[str],
|
17
|
+
cert_dir: Optional[str],
|
18
|
+
worker_ports: Optional[tuple[int, int]] = None) -> Interchange:
|
16
19
|
return Interchange(interchange_address=interchange_address,
|
17
20
|
cert_dir=cert_dir,
|
18
21
|
client_address="127.0.0.1",
|
19
22
|
client_ports=(50055, 50056, 50057),
|
20
|
-
worker_ports=
|
23
|
+
worker_ports=worker_ports,
|
21
24
|
worker_port_range=(54000, 55000),
|
22
25
|
hub_address=None,
|
23
26
|
hub_zmq_port=None,
|
@@ -105,3 +108,10 @@ def test_limited_interface_binding(cert_dir: Optional[str]):
|
|
105
108
|
assert len(matched_conns) == 1
|
106
109
|
# laddr.ip can return ::ffff:127.0.0.1 when using IPv6
|
107
110
|
assert address in matched_conns[0].laddr.ip
|
111
|
+
|
112
|
+
|
113
|
+
@pytest.mark.local
|
114
|
+
@pytest.mark.parametrize("encrypted", (True, False), indirect=True)
|
115
|
+
def test_fixed_ports(cert_dir: Optional[str]):
|
116
|
+
ix = make_interchange(interchange_address=None, cert_dir=cert_dir, worker_ports=(51117, 51118))
|
117
|
+
assert ix.interchange_address == "*"
|
@@ -54,26 +54,8 @@ def htex_filesystem_config():
|
|
54
54
|
return c
|
55
55
|
|
56
56
|
|
57
|
-
def workqueue_config():
|
58
|
-
from parsl.tests.configs.workqueue_ex import fresh_config
|
59
|
-
c = fresh_config()
|
60
|
-
c.monitoring = MonitoringHub(
|
61
|
-
hub_address="localhost",
|
62
|
-
resource_monitoring_interval=1)
|
63
|
-
return c
|
64
|
-
|
65
|
-
|
66
|
-
def taskvine_config():
|
67
|
-
c = Config(executors=[TaskVineExecutor(manager_config=TaskVineManagerConfig(port=9000),
|
68
|
-
worker_launch_method='provider')],
|
69
|
-
|
70
|
-
monitoring=MonitoringHub(hub_address="localhost",
|
71
|
-
resource_monitoring_interval=1))
|
72
|
-
return c
|
73
|
-
|
74
|
-
|
75
57
|
@pytest.mark.local
|
76
|
-
@pytest.mark.parametrize("fresh_config", [htex_config, htex_filesystem_config, htex_udp_config
|
58
|
+
@pytest.mark.parametrize("fresh_config", [htex_config, htex_filesystem_config, htex_udp_config])
|
77
59
|
def test_row_counts(tmpd_cwd, fresh_config):
|
78
60
|
# this is imported here rather than at module level because
|
79
61
|
# it isn't available in a plain parsl install, so this module
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import os
|
2
|
+
|
1
3
|
import pytest
|
2
4
|
|
3
5
|
import parsl
|
@@ -18,6 +20,10 @@ apps = []
|
|
18
20
|
|
19
21
|
@pytest.mark.local
|
20
22
|
@pytest.mark.radical
|
23
|
+
@pytest.mark.skipif(
|
24
|
+
os.environ.get("RADICAL_CI") != "1",
|
25
|
+
reason="Only runs in Radical CI workflow"
|
26
|
+
)
|
21
27
|
def test_radical_mpi(n=7):
|
22
28
|
# rank size should be > 1 for the
|
23
29
|
# radical runtime system to run this function in MPI env
|
parsl/tests/unit/test_address.py
CHANGED
@@ -13,6 +13,7 @@ from parsl.addresses import tcp_url
|
|
13
13
|
("::ffff:127.0.0.1", None, "tcp://::ffff:127.0.0.1"),
|
14
14
|
("::ffff:127.0.0.1", None, "tcp://::ffff:127.0.0.1"),
|
15
15
|
("*", None, "tcp://*"),
|
16
|
+
("*", 55001, "tcp://*:55001")
|
16
17
|
])
|
17
18
|
def test_tcp_url(address, port, expected):
|
18
19
|
"""Confirm valid address generation"""
|
parsl/version.py
CHANGED
@@ -220,11 +220,11 @@ class Interchange:
|
|
220
220
|
def process_command(self, monitoring_radio: Optional[MonitoringRadioSender]) -> None:
|
221
221
|
""" Command server to run async command to the interchange
|
222
222
|
"""
|
223
|
-
logger.debug("entering command_server section")
|
224
223
|
|
225
224
|
reply: Any # the type of reply depends on the command_req received (aka this needs dependent types...)
|
226
225
|
|
227
226
|
if self.command_channel in self.socks and self.socks[self.command_channel] == zmq.POLLIN:
|
227
|
+
logger.debug("entering command_server section")
|
228
228
|
|
229
229
|
command_req = self.command_channel.recv_pyobj()
|
230
230
|
logger.debug("Received command request: {}".format(command_req))
|
@@ -491,10 +491,7 @@ class Interchange:
|
|
491
491
|
self._send_monitoring_info(monitoring_radio, m)
|
492
492
|
else:
|
493
493
|
interesting_managers.remove(manager_id)
|
494
|
-
# logger.debug("Nothing to send to manager {}".format(manager_id))
|
495
494
|
logger.debug("leaving _ready_managers section, with %s managers still interesting", len(interesting_managers))
|
496
|
-
else:
|
497
|
-
logger.debug("either no interesting managers or no tasks, so skipping manager pass")
|
498
495
|
|
499
496
|
def process_results_incoming(self, interesting_managers: Set[bytes], monitoring_radio: Optional[MonitoringRadioSender]) -> None:
|
500
497
|
# Receive any results and forward to client
|
@@ -605,8 +602,6 @@ def start_file_logger(filename: str, level: int = logging.DEBUG, format_string:
|
|
605
602
|
|
606
603
|
)
|
607
604
|
|
608
|
-
global logger
|
609
|
-
logger = logging.getLogger(LOGGER_NAME)
|
610
605
|
logger.setLevel(level)
|
611
606
|
handler = logging.FileHandler(filename)
|
612
607
|
handler.setLevel(level)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2025.5.
|
3
|
+
Version: 2025.5.26
|
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/2025.05.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2025.05.26.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -1,5 +1,5 @@
|
|
1
1
|
parsl/__init__.py,sha256=65VfBnxw2k8V3sHsbhKoUCqG-ps2XP2l3x3ALMqQ13Y,1777
|
2
|
-
parsl/addresses.py,sha256=
|
2
|
+
parsl/addresses.py,sha256=z5GnIWdbzz4klRiMZtX8XmRT7OP8dJYvAk8RIKD2kzI,5290
|
3
3
|
parsl/config.py,sha256=p5HQoxLj5aMagUAYfngcXG2kw0s6SJoc6u7vH2sVhPU,9635
|
4
4
|
parsl/curvezmq.py,sha256=6Zi7RqTP_eKWi3DFgapfK2t-Jw8vJS-ZtN1bsrByPeo,7073
|
5
5
|
parsl/errors.py,sha256=SzINzQFZDBDbj9l-DPQznD0TbGkNhHIRAPkcBCogf_A,1019
|
@@ -8,7 +8,7 @@ parsl/multiprocessing.py,sha256=JNAfgdZvQSsxVyUp229OOUqWwf_ZUhpmw8X9CdF3i6k,3614
|
|
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=codTX6_KLhgeTwNkRzc1lo4bgc1M93eJ-lkqOO98fvk,14331
|
11
|
-
parsl/version.py,sha256=
|
11
|
+
parsl/version.py,sha256=EaScyVawSKbx-5eXxTDv4N5r-ccy_-Hm8yHlbdPlkiA,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
|
@@ -73,8 +73,8 @@ parsl/executors/flux/executor.py,sha256=ii1i5V7uQnhf1BDq5nnMscmmpXJkCWtrFCuBbDaP
|
|
73
73
|
parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaPrSF9ec7zvRfLfYJw,2129
|
74
74
|
parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
75
|
parsl/executors/high_throughput/errors.py,sha256=k2XuvvFdUfNs2foHFnxmS-BToRMfdXpYEa4EF3ELKq4,1554
|
76
|
-
parsl/executors/high_throughput/executor.py,sha256=
|
77
|
-
parsl/executors/high_throughput/interchange.py,sha256=
|
76
|
+
parsl/executors/high_throughput/executor.py,sha256=8iqced7UU44emOlFY6Z1iD5M8752EozY6UMNhYMbpQY,39685
|
77
|
+
parsl/executors/high_throughput/interchange.py,sha256=gDCHe0UeKUAch7byR-FKJ7Tsrk39jGoTcVx3ERW6PkA,28719
|
78
78
|
parsl/executors/high_throughput/manager_record.py,sha256=ZMsqFxvreGLRXAw3N-JnODDa9Qfizw2tMmcBhm4lco4,490
|
79
79
|
parsl/executors/high_throughput/manager_selector.py,sha256=UKcUE6v0tO7PDMTThpKSKxVpOpOUilxDL7UbNgpZCxo,2116
|
80
80
|
parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
|
@@ -100,7 +100,7 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
|
|
100
100
|
parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
101
101
|
parsl/executors/workqueue/errors.py,sha256=XO2naYhAsHHyiOBH6hpObg3mPNDmvMoFqErsj0-v7jc,541
|
102
102
|
parsl/executors/workqueue/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
|
103
|
-
parsl/executors/workqueue/executor.py,sha256=
|
103
|
+
parsl/executors/workqueue/executor.py,sha256=kE0vNN4cSau5p3R6uRDI20THN8e4dBGPHiGKWx5xpo4,49827
|
104
104
|
parsl/executors/workqueue/parsl_coprocess.py,sha256=cF1UmTgVLoey6QzBcbYgEiEsRidSaFfuO54f1HFw_EM,5737
|
105
105
|
parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
|
106
106
|
parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -180,7 +180,7 @@ parsl/providers/lsf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
180
180
|
parsl/providers/lsf/lsf.py,sha256=dB3CwYY39rM7E2dg3eP2UkeNHvatBxfl6JJns6FvLEY,10661
|
181
181
|
parsl/providers/lsf/template.py,sha256=leQ_TpXv7ePMzbHfLaWvqMR0VORxlp-hjX5JxtkcwwU,269
|
182
182
|
parsl/providers/pbspro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
183
|
-
parsl/providers/pbspro/pbspro.py,sha256=
|
183
|
+
parsl/providers/pbspro/pbspro.py,sha256=vzopQ80iXcl4Wx0_Bs5OtadYGeoGdbDgK7YHfjUjG_Y,8826
|
184
184
|
parsl/providers/pbspro/template.py,sha256=y-Dher--t5Eury-c7cAuSZs9FEUXWiruFUI07v81558,315
|
185
185
|
parsl/providers/slurm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
186
186
|
parsl/providers/slurm/slurm.py,sha256=HHf3HMJWa2XcztvrM55eapqOs1r8iGg0EHn8b3xxJ_8,15773
|
@@ -334,10 +334,10 @@ parsl/tests/test_htex/test_missing_worker.py,sha256=gyp5i7_t-JHyJGtz_eXZKKBY5w8o
|
|
334
334
|
parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=2vXZoIx4NuAWYuiNoL5Gxr85w72qZ7Kdb3JGh0FufTg,1867
|
335
335
|
parsl/tests/test_htex/test_resource_spec_validation.py,sha256=JqboQRRFV0tEfWrGOdYT9pHazsUjyZLbF7qqnLFS_-A,914
|
336
336
|
parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
|
337
|
-
parsl/tests/test_htex/test_zmq_binding.py,sha256=
|
337
|
+
parsl/tests/test_htex/test_zmq_binding.py,sha256=G7D2_p9vOekgpB50MBiPRwtIz98DEkUpMqA3rdwzYTQ,4397
|
338
338
|
parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
339
339
|
parsl/tests/test_monitoring/test_app_names.py,sha256=A-mOMCVhZDnUyJp32fsTUkHdcyval8o7WPEWacDkbD4,2208
|
340
|
-
parsl/tests/test_monitoring/test_basic.py,sha256=
|
340
|
+
parsl/tests/test_monitoring/test_basic.py,sha256=3_lQ8KPxHPc6MT1UhACo7H-D7pBdy4Mxv4c4ztLv4-s,3947
|
341
341
|
parsl/tests/test_monitoring/test_db_locks.py,sha256=3s3c1xhKo230ZZIJ3f1Ca4U7LcEdXnanOGVXQyNlk2U,2895
|
342
342
|
parsl/tests/test_monitoring/test_exit_helper.py,sha256=ob8Qd1hlkq_mowygfPetTnYN9LfuqeXHRpPilSfDSog,1232
|
343
343
|
parsl/tests/test_monitoring/test_fuzz_zmq.py,sha256=SQNNHhXxHB_LwW4Ujqkgut3lbG0XVW-hliPagQQpiTc,3449
|
@@ -393,7 +393,7 @@ parsl/tests/test_python_apps/test_simple.py,sha256=LYGjdHvRizTpYzZePPvwKSPwrr2MP
|
|
393
393
|
parsl/tests/test_python_apps/test_timeout.py,sha256=uENfT-1DharQkqkeG7a89E-gU1gjE7ATJrBZGUKvZSA,998
|
394
394
|
parsl/tests/test_python_apps/test_type5.py,sha256=kUyA1NuFu-DDXsJNNvJLZVyewZBt7QAOhcGm2DWFTQw,777
|
395
395
|
parsl/tests/test_radical/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
396
|
-
parsl/tests/test_radical/test_mpi_funcs.py,sha256=
|
396
|
+
parsl/tests/test_radical/test_mpi_funcs.py,sha256=nKy5V2w48QYB_wJsp5E3dy0LBdz7a3qPBhBCsbNoa_Y,886
|
397
397
|
parsl/tests/test_regression/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
398
398
|
parsl/tests/test_regression/test_1480.py,sha256=sJjcX8O0eL_OG7L3skjT3JaIUyFC-kk0ui3puaDatKA,546
|
399
399
|
parsl/tests/test_regression/test_1606_wait_for_current_tasks.py,sha256=frqPtaiVysevj9nCWoQlAeh9K1jQO5zaahr9ev_Mx_0,1134
|
@@ -451,7 +451,7 @@ parsl/tests/test_utils/test_execute_wait.py,sha256=J796rGuv2qi2spChgAPFB1oPETdnv
|
|
451
451
|
parsl/tests/test_utils/test_representation_mixin.py,sha256=kUZeIDwA2rlbJ3-beGzLLwf3dOplTMCrWJN87etHcyY,1633
|
452
452
|
parsl/tests/test_utils/test_sanitize_dns.py,sha256=8P_v5a5JLGU76OYf0LtclAwqJxGU0fMh_OZMVkMke3I,2954
|
453
453
|
parsl/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
454
|
-
parsl/tests/unit/test_address.py,sha256=
|
454
|
+
parsl/tests/unit/test_address.py,sha256=0JxaEyvEiLIr5aKvaNnSv0Z9ta3kNllsLS_aby23QPs,716
|
455
455
|
parsl/tests/unit/test_file.py,sha256=vLycnYcv3bvSzL-FV8WdoibqTyb41BrH1LUYBavobsg,2850
|
456
456
|
parsl/tests/unit/test_globus_compute_executor.py,sha256=9BWKZ4C03tQ5gZ3jxIsDt5j2yyYHa_VHqULJPeM7YPM,3238
|
457
457
|
parsl/tests/unit/test_usage_tracking.py,sha256=xEfUlbBRpsFdUdOrCsk1Kz5AfmMxJT7f0_esZl8Ft-0,1884
|
@@ -459,13 +459,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
459
459
|
parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
|
460
460
|
parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
|
461
461
|
parsl/usage_tracking/usage.py,sha256=8hq1UPdFlVcC0V3aj0ve-MvCyvwK8Xr3CVuSto3dTW4,9165
|
462
|
-
parsl-2025.5.
|
463
|
-
parsl-2025.5.
|
464
|
-
parsl-2025.5.
|
465
|
-
parsl-2025.5.
|
466
|
-
parsl-2025.5.
|
467
|
-
parsl-2025.5.
|
468
|
-
parsl-2025.5.
|
469
|
-
parsl-2025.5.
|
470
|
-
parsl-2025.5.
|
471
|
-
parsl-2025.5.
|
462
|
+
parsl-2025.5.26.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
|
463
|
+
parsl-2025.5.26.data/scripts/interchange.py,sha256=ESVMe6rIAzTqZrXp1gzIPcl3jAStLfmYeH2-rG0RoZQ,28706
|
464
|
+
parsl-2025.5.26.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
|
465
|
+
parsl-2025.5.26.data/scripts/process_worker_pool.py,sha256=__gFeFQJpV5moRofj3WKQCnKp6gmzieXjzkmzVuTmX4,41123
|
466
|
+
parsl-2025.5.26.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
467
|
+
parsl-2025.5.26.dist-info/METADATA,sha256=ftY4oT1kBRYDTickFiyqTq7XZzR8klGI--Q1mNK2teI,4023
|
468
|
+
parsl-2025.5.26.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
469
|
+
parsl-2025.5.26.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
|
470
|
+
parsl-2025.5.26.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
|
471
|
+
parsl-2025.5.26.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|