parsl 2025.9.1__py3-none-any.whl → 2025.9.8__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/__init__.py CHANGED
@@ -15,7 +15,6 @@ AUTO_LOGNAME
15
15
 
16
16
  """
17
17
  import logging
18
- import multiprocessing as _multiprocessing
19
18
  import os
20
19
  import platform
21
20
 
@@ -32,9 +31,6 @@ from parsl.log_utils import set_file_logger, set_stream_logger
32
31
  from parsl.monitoring import MonitoringHub
33
32
  from parsl.version import VERSION
34
33
 
35
- if platform.system() == 'Darwin':
36
- _multiprocessing.set_start_method('fork', force=True)
37
-
38
34
  __author__ = 'The Parsl Team'
39
35
  __version__ = VERSION
40
36
 
parsl/dataflow/dflow.py CHANGED
@@ -1267,7 +1267,7 @@ class DataFlowKernel:
1267
1267
  # should still see it.
1268
1268
  logger.info("DFK cleanup complete")
1269
1269
 
1270
- def checkpoint(self, tasks: Optional[Sequence[TaskRecord]] = None) -> str:
1270
+ def checkpoint(self, tasks: Optional[Sequence[TaskRecord]] = None) -> None:
1271
1271
  """Checkpoint the dfk incrementally to a checkpoint file.
1272
1272
 
1273
1273
  When called, every task that has been completed yet not
@@ -1328,8 +1328,6 @@ class DataFlowKernel:
1328
1328
  else:
1329
1329
  logger.info("Done checkpointing {} tasks".format(count))
1330
1330
 
1331
- return checkpoint_dir
1332
-
1333
1331
  @staticmethod
1334
1332
  def _log_std_streams(task_record: TaskRecord) -> None:
1335
1333
  tid = task_record['id']
@@ -242,20 +242,6 @@ class Memoizer:
242
242
  assert isinstance(result, Future) or result is None
243
243
  return result
244
244
 
245
- def hash_lookup(self, hashsum: str) -> Future[Any]:
246
- """Lookup a hash in the memoization table.
247
-
248
- Args:
249
- - hashsum (str): The same hashes used to uniquely identify apps+inputs
250
-
251
- Returns:
252
- - Lookup result
253
-
254
- Raises:
255
- - KeyError: if hash not in table
256
- """
257
- return self.memo_lookup_table[hashsum]
258
-
259
245
  def update_memo(self, task: TaskRecord, r: Future[Any]) -> None:
260
246
  """Updates the memoization lookup table with the result from a task.
261
247
 
@@ -222,35 +222,29 @@ class Interchange:
222
222
  reply = self.connected_block_history
223
223
 
224
224
  elif command_req == "WORKERS":
225
- num_workers = 0
226
- for manager in self._ready_managers.values():
227
- num_workers += manager['worker_count']
228
- reply = num_workers
225
+ reply = sum(m['worker_count'] for m in self._ready_managers.values())
229
226
 
230
227
  elif command_req == "MANAGERS":
231
228
  reply = []
232
- for manager_id in self._ready_managers:
233
- m = self._ready_managers[manager_id]
234
- idle_since = m['idle_since']
235
- if idle_since is not None:
236
- idle_duration = time.time() - idle_since
237
- else:
238
- idle_duration = 0.0
239
- resp = {'manager': manager_id.decode('utf-8'),
240
- 'block_id': m['block_id'],
241
- 'worker_count': m['worker_count'],
242
- 'tasks': len(m['tasks']),
243
- 'idle_duration': idle_duration,
244
- 'active': m['active'],
245
- 'parsl_version': m['parsl_version'],
246
- 'python_version': m['python_version'],
247
- 'draining': m['draining']}
229
+ now = time.time()
230
+ for manager_id, m in self._ready_managers.items():
231
+ idle_duration = now - (m['idle_since'] or now)
232
+ resp = {
233
+ 'manager': manager_id.decode('utf-8'),
234
+ 'block_id': m['block_id'],
235
+ 'worker_count': m['worker_count'],
236
+ 'tasks': len(m['tasks']),
237
+ 'idle_duration': idle_duration,
238
+ 'active': m['active'],
239
+ 'parsl_version': m['parsl_version'],
240
+ 'python_version': m['python_version'],
241
+ 'draining': m['draining']
242
+ }
248
243
  reply.append(resp)
249
244
 
250
245
  elif command_req == "MANAGERS_PACKAGES":
251
246
  reply = {}
252
- for manager_id in self._ready_managers:
253
- m = self._ready_managers[manager_id]
247
+ for manager_id, m in self._ready_managers.items():
254
248
  manager_id_str = manager_id.decode('utf-8')
255
249
  reply[manager_id_str] = m["packages"]
256
250
 
@@ -346,9 +346,9 @@ class DatabaseManager:
346
346
  exception_happened = False
347
347
 
348
348
  while (not self._kill_event.is_set() or
349
- self.pending_priority_queue.qsize() != 0 or self.pending_resource_queue.qsize() != 0 or
350
- self.pending_node_queue.qsize() != 0 or self.pending_block_queue.qsize() != 0 or
351
- resource_queue.qsize() != 0):
349
+ not self.pending_priority_queue.empty() or not self.pending_resource_queue.empty() or
350
+ not self.pending_node_queue.empty() or not self.pending_block_queue.empty() or
351
+ not resource_queue.empty()):
352
352
 
353
353
  """
354
354
  WORKFLOW_INFO and TASK_INFO messages (i.e. priority messages)
@@ -357,9 +357,9 @@ class DatabaseManager:
357
357
  try:
358
358
  logger.debug("""Checking STOP conditions: {}, {}, {}, {}, {}, {}""".format(
359
359
  self._kill_event.is_set(),
360
- self.pending_priority_queue.qsize() != 0, self.pending_resource_queue.qsize() != 0,
361
- self.pending_node_queue.qsize() != 0, self.pending_block_queue.qsize() != 0,
362
- resource_queue.qsize() != 0))
360
+ not self.pending_priority_queue.empty(), not self.pending_resource_queue.empty(),
361
+ not self.pending_node_queue.empty(), not self.pending_block_queue.empty(),
362
+ not resource_queue.empty()))
363
363
 
364
364
  # This is the list of resource messages which can be reprocessed as if they
365
365
  # had just arrived because the corresponding first task message has been
@@ -558,9 +558,9 @@ class DatabaseManager:
558
558
  def _migrate_logs_to_internal(self, logs_queue: mpq.Queue, kill_event: threading.Event) -> None:
559
559
  logger.info("Starting _migrate_logs_to_internal")
560
560
 
561
- while not kill_event.is_set() or logs_queue.qsize() != 0:
561
+ while not kill_event.is_set() or not logs_queue.empty():
562
562
  logger.debug("Checking STOP conditions: kill event: %s, queue has entries: %s",
563
- kill_event.is_set(), logs_queue.qsize() != 0)
563
+ kill_event.is_set(), not logs_queue.empty())
564
564
 
565
565
  try:
566
566
  x = logs_queue.get(timeout=0.1)
@@ -21,9 +21,9 @@ from parsl.monitoring.errors import MonitoringRouterStartError
21
21
  from parsl.monitoring.radios.base import MonitoringRadioReceiver
22
22
  from parsl.monitoring.radios.multiprocessing import MultiprocessingQueueRadioSender
23
23
  from parsl.multiprocessing import (
24
- SizedQueue,
25
24
  SpawnEvent,
26
25
  SpawnProcess,
26
+ SpawnQueue,
27
27
  join_terminate_close_proc,
28
28
  )
29
29
  from parsl.process_loggers import wrap_with_logs
@@ -198,7 +198,7 @@ def start_udp_receiver(*,
198
198
  hmac_digest: str) -> UDPRadioReceiver:
199
199
 
200
200
  udp_comm_q: Queue[Union[int, str]]
201
- udp_comm_q = SizedQueue(maxsize=10)
201
+ udp_comm_q = SpawnQueue(maxsize=10)
202
202
 
203
203
  router_exit_event = SpawnEvent()
204
204
 
@@ -19,9 +19,9 @@ from parsl.monitoring.errors import MonitoringRouterStartError
19
19
  from parsl.monitoring.radios.multiprocessing import MultiprocessingQueueRadioSender
20
20
  from parsl.monitoring.types import TaggedMonitoringMessage
21
21
  from parsl.multiprocessing import (
22
- SizedQueue,
23
22
  SpawnEvent,
24
23
  SpawnProcess,
24
+ SpawnQueue,
25
25
  join_terminate_close_proc,
26
26
  )
27
27
  from parsl.process_loggers import wrap_with_logs
@@ -158,7 +158,7 @@ def start_zmq_receiver(*,
158
158
  port_range: Tuple[int, int],
159
159
  logdir: str,
160
160
  worker_debug: bool) -> ZMQRadioReceiver:
161
- comm_q = SizedQueue(maxsize=10)
161
+ comm_q = SpawnQueue(maxsize=10)
162
162
 
163
163
  router_exit_event = SpawnEvent()
164
164
 
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from pathlib import Path
2
3
 
3
4
  import pytest
4
5
 
@@ -20,12 +21,14 @@ def uuid_app():
20
21
 
21
22
 
22
23
  @pytest.mark.local
23
- def test_initial_checkpoint_write():
24
+ def test_initial_checkpoint_write() -> None:
24
25
  """1. Launch a few apps and write the checkpoint once a few have completed
25
26
  """
26
27
  uuid_app().result()
27
28
 
28
- cpt_dir = parsl.dfk().checkpoint()
29
+ parsl.dfk().checkpoint()
29
30
 
30
- cptpath = cpt_dir + '/tasks.pkl'
31
+ cpt_dir = Path(parsl.dfk().run_dir) / 'checkpoint'
32
+
33
+ cptpath = cpt_dir / 'tasks.pkl'
31
34
  assert os.path.exists(cptpath), f"Tasks checkpoint missing: {cptpath}"
@@ -0,0 +1,41 @@
1
+ import parsl
2
+ from parsl.app.app import python_app
3
+
4
+
5
+ @python_app(cache=True)
6
+ def raise_exception_cache(x, cache=True):
7
+ raise RuntimeError("exception from raise_exception_cache")
8
+
9
+
10
+ @python_app(cache=False)
11
+ def raise_exception_nocache(x, cache=True):
12
+ raise RuntimeError("exception from raise_exception_nocache")
13
+
14
+
15
+ def test_python_memoization(n=2):
16
+ """Test Python memoization of exceptions, with cache=True"""
17
+ x = raise_exception_cache(0)
18
+
19
+ # wait for x to be done
20
+ x.exception()
21
+
22
+ for i in range(0, n):
23
+ fut = raise_exception_cache(0)
24
+
25
+ # check that we get back the same exception object, rather than
26
+ # a new one from a second invocation of raise_exception().
27
+ assert fut.exception() is x.exception(), "Memoized exception should have been memoized"
28
+
29
+
30
+ def test_python_no_memoization(n=2):
31
+ """Test Python non-memoization of exceptions, with cache=False"""
32
+ x = raise_exception_nocache(0)
33
+
34
+ # wait for x to be done
35
+ x.exception()
36
+
37
+ for i in range(0, n):
38
+ fut = raise_exception_nocache(0)
39
+
40
+ # check that we get back a different exception object each time
41
+ assert fut.exception() is not x.exception(), "Memoized exception should have been memoized"
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 = '2025.09.01'
6
+ VERSION = '2025.09.08'
@@ -222,35 +222,29 @@ class Interchange:
222
222
  reply = self.connected_block_history
223
223
 
224
224
  elif command_req == "WORKERS":
225
- num_workers = 0
226
- for manager in self._ready_managers.values():
227
- num_workers += manager['worker_count']
228
- reply = num_workers
225
+ reply = sum(m['worker_count'] for m in self._ready_managers.values())
229
226
 
230
227
  elif command_req == "MANAGERS":
231
228
  reply = []
232
- for manager_id in self._ready_managers:
233
- m = self._ready_managers[manager_id]
234
- idle_since = m['idle_since']
235
- if idle_since is not None:
236
- idle_duration = time.time() - idle_since
237
- else:
238
- idle_duration = 0.0
239
- resp = {'manager': manager_id.decode('utf-8'),
240
- 'block_id': m['block_id'],
241
- 'worker_count': m['worker_count'],
242
- 'tasks': len(m['tasks']),
243
- 'idle_duration': idle_duration,
244
- 'active': m['active'],
245
- 'parsl_version': m['parsl_version'],
246
- 'python_version': m['python_version'],
247
- 'draining': m['draining']}
229
+ now = time.time()
230
+ for manager_id, m in self._ready_managers.items():
231
+ idle_duration = now - (m['idle_since'] or now)
232
+ resp = {
233
+ 'manager': manager_id.decode('utf-8'),
234
+ 'block_id': m['block_id'],
235
+ 'worker_count': m['worker_count'],
236
+ 'tasks': len(m['tasks']),
237
+ 'idle_duration': idle_duration,
238
+ 'active': m['active'],
239
+ 'parsl_version': m['parsl_version'],
240
+ 'python_version': m['python_version'],
241
+ 'draining': m['draining']
242
+ }
248
243
  reply.append(resp)
249
244
 
250
245
  elif command_req == "MANAGERS_PACKAGES":
251
246
  reply = {}
252
- for manager_id in self._ready_managers:
253
- m = self._ready_managers[manager_id]
247
+ for manager_id, m in self._ready_managers.items():
254
248
  manager_id_str = manager_id.decode('utf-8')
255
249
  reply[manager_id_str] = m["packages"]
256
250
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2025.9.1
3
+ Version: 2025.9.8
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.09.01.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2025.09.08.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -1,4 +1,4 @@
1
- parsl/__init__.py,sha256=65VfBnxw2k8V3sHsbhKoUCqG-ps2XP2l3x3ALMqQ13Y,1777
1
+ parsl/__init__.py,sha256=QaS0vxlxGVp2UYEIGcYYiUMOZJKSrQOXFR2X_KozL88,1641
2
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
@@ -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=smVYTusMoYUTD5N9OxTW5bh6o2iioh0NnfjrBAj8zYk,14452
11
- parsl/version.py,sha256=W6ubpbX0pFzrOPUsDeb7_vF98nK_PE3qucgRVPhPIEQ,131
11
+ parsl/version.py,sha256=jssTePzsql4ZyUWL8yCicTMRJRPaLyu8nXV2_BUgI0E,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
@@ -55,10 +55,10 @@ parsl/data_provider/staging.py,sha256=ZDZuuFg38pjUStegKPcvPsfGp3iMeReMzfU6DSwtJj
55
55
  parsl/data_provider/zip.py,sha256=S4kVuH9lxAegRURYbvIUR7EYYBOccyslaqyCrVWUBhw,4497
56
56
  parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  parsl/dataflow/dependency_resolvers.py,sha256=Om8Dgh7a0ZwgXAc6TlhxLSzvxXHDlNNV1aBNiD3JTNY,3325
58
- parsl/dataflow/dflow.py,sha256=uAUD7psp39Je7Mcv70o9_B1fWm27H2Wa5nQhJAoS38c,62974
58
+ parsl/dataflow/dflow.py,sha256=jn6gzrvz1XHpxX6SZYsh8Ics9ZUG6n8Mhd-bB2gOqow,62940
59
59
  parsl/dataflow/errors.py,sha256=daVfr2BWs1zRsGD6JtosEMttWHvK1df1Npiu_MUvFKg,3998
60
60
  parsl/dataflow/futures.py,sha256=08LuP-HFiHBIZmeKCjlsazw_WpQ5fwevrU2_WbidkYw,6080
61
- parsl/dataflow/memoization.py,sha256=QUkTduZ_gdr8i08VWNWrqhfEvoMGsPDZegWUE2_7sGQ,12579
61
+ parsl/dataflow/memoization.py,sha256=dJRISYd3pXDH8NQzU0HW4jDH4rCfBLSs48d2SrbX1uA,12206
62
62
  parsl/dataflow/rundirs.py,sha256=JZdzybVGubY35jL2YiKcDo65ZmRl1WyOApc8ajYxztc,1087
63
63
  parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
64
64
  parsl/dataflow/taskrecord.py,sha256=qIW7T6hn9dYTuNPdUura3HQwwUpUJACwPP5REm5COf4,3042
@@ -76,7 +76,7 @@ parsl/executors/flux/flux_instance_manager.py,sha256=5T3Rp7ZM-mlT0Pf0Gxgs5_YmnaP
76
76
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  parsl/executors/high_throughput/errors.py,sha256=k2XuvvFdUfNs2foHFnxmS-BToRMfdXpYEa4EF3ELKq4,1554
78
78
  parsl/executors/high_throughput/executor.py,sha256=oZGqdbtDy-lDOvV4CgdoFrtukmphRh5tVt31esJdh10,39911
79
- parsl/executors/high_throughput/interchange.py,sha256=R6zcY7yh1daMJR8Ke8o9QCj8AtkH7lwzECS0MAWugvA,25964
79
+ parsl/executors/high_throughput/interchange.py,sha256=3NTPVpraYiEcT_wct4jwXIaU8xgBlW5krQag4dnVNCM,25653
80
80
  parsl/executors/high_throughput/manager_record.py,sha256=ZMsqFxvreGLRXAw3N-JnODDa9Qfizw2tMmcBhm4lco4,490
81
81
  parsl/executors/high_throughput/manager_selector.py,sha256=UKcUE6v0tO7PDMTThpKSKxVpOpOUilxDL7UbNgpZCxo,2116
82
82
  parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
@@ -116,7 +116,7 @@ parsl/launchers/base.py,sha256=CblcvPTJiu-MNLWaRtFe29SZQ0BpTOlaY8CGcHdlHIE,538
116
116
  parsl/launchers/errors.py,sha256=8YMV_CHpBNVa4eXkGE4x5DaFQlZkDCRCHmBktYcY6TA,467
117
117
  parsl/launchers/launchers.py,sha256=cQsNsHuCOL_nQTjPXf0--YsgsDoMoJ77bO1Wt4ncLjs,15134
118
118
  parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
119
- parsl/monitoring/db_manager.py,sha256=ltW-g2apm92JYtoEIf0gc20erriu5b9-bR3ekbhKrXQ,33219
119
+ parsl/monitoring/db_manager.py,sha256=VZrDS2xr6HaYxLN9ueLbFJiWucrzjOyIc75tf8FeJ9c,33207
120
120
  parsl/monitoring/errors.py,sha256=VQNIMoo5Ro8GlJ-Ad-6q-YA0y6sTc-IibSdNXZC-GuU,306
121
121
  parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
122
122
  parsl/monitoring/monitoring.py,sha256=oIXwI_oxan-b1XdTneoza--4uTqYF6ar2X4zWgarGVQ,6602
@@ -131,9 +131,9 @@ parsl/monitoring/radios/filesystem_router.py,sha256=_Sf1M00oUn-gBvq-P7Ua1Ws5_SbP
131
131
  parsl/monitoring/radios/htex.py,sha256=R3Ce7fxiVtQFxn0EgJ-9wKiMJ_xCJml02b0rXnxORXQ,1870
132
132
  parsl/monitoring/radios/multiprocessing.py,sha256=4ua-6kmdQ6XiXzPBM8DjkFXy1LP5x0sERxeaR-WyKHc,1308
133
133
  parsl/monitoring/radios/udp.py,sha256=vrcl-yHWQ9YpOw6cmAQgczlNAUr_Um1y-GLye-9j-7s,3499
134
- parsl/monitoring/radios/udp_router.py,sha256=r-u_RmvlY3cx_3a7dCaKJO6M5-446o2scDsAEqrz_go,8987
134
+ parsl/monitoring/radios/udp_router.py,sha256=l4VTEIT48HWDXwjNzWl-Yp-7iY7EiAS-lwkFxm8TK-c,8987
135
135
  parsl/monitoring/radios/zmq.py,sha256=fhoHp9ylhf-D3eTJb2aSHRsuic8-FJ_oRNGnniGkCAI,592
136
- parsl/monitoring/radios/zmq_router.py,sha256=oqGlOI4OkmvGLNKGp5F0iLFLYj3JdUkpnwg40JOvEak,7826
136
+ parsl/monitoring/radios/zmq_router.py,sha256=upX6gLVSRHZYxnknmpRjAb1kUnF2wHuT_uHTc2l_LLw,7826
137
137
  parsl/monitoring/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  parsl/monitoring/visualization/app.py,sha256=xMeRlAnzl5lHddAOdSBcqY3D5lmOYw3Z3Z2_YyoVwnw,1425
139
139
  parsl/monitoring/visualization/models.py,sha256=C7CcF6w6PhtrdvDX9VgDH-aSrpLfvYU1fJ4-HDUeFVQ,5138
@@ -284,7 +284,7 @@ parsl/tests/test_bash_apps/test_std_uri.py,sha256=CvAt8BUhNl2pA5chq9YyhkD6eo2IUH
284
284
  parsl/tests/test_bash_apps/test_stdout.py,sha256=lNBzCJGst0IhKaSl8CM8-mTJ5eaK7hTlZ8gY-M2TDBU,3244
285
285
  parsl/tests/test_checkpointing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
286
286
  parsl/tests/test_checkpointing/test_periodic.py,sha256=nfMgrG7sZ8rkMu6iOHS6lp_iTU4IsOyQLQ2Gur_FMmE,1509
287
- parsl/tests/test_checkpointing/test_python_checkpoint_1.py,sha256=TP6kSK_0qpCqecpp7O50AbTsnLKU6wvTvNG89hh4LQw,637
287
+ parsl/tests/test_checkpointing/test_python_checkpoint_1.py,sha256=bi7c6fy6P7jmrMQkQP5me-LTfwVwJGq1O9BjnmdDIKc,715
288
288
  parsl/tests/test_checkpointing/test_python_checkpoint_2.py,sha256=Q_cXeAVz_dJuDDeiemUIGd-wmb7aCY3ggpqYjRRhHRc,1089
289
289
  parsl/tests/test_checkpointing/test_regression_232.py,sha256=AsI6AJ0DcFaefAbEY9qWa41ER0VX-4yLuIdlgvBw360,2637
290
290
  parsl/tests/test_checkpointing/test_regression_233.py,sha256=jii7BKuygK6KMIGtg4IeBjix7Z28cYhv57rE9ixoXMU,1774
@@ -379,6 +379,7 @@ parsl/tests/test_python_apps/test_memoize_1.py,sha256=E_VQAaykFKT_G7yRUWOhXxfOIC
379
379
  parsl/tests/test_python_apps/test_memoize_2.py,sha256=uG9zG9j3ap1FqeJ8aB0Gj_dX191pN3dxWXeQ-asxPgU,553
380
380
  parsl/tests/test_python_apps/test_memoize_4.py,sha256=CdK_vHW5s-phi5KPqcAQm_BRh8xek91GVGeQRjfJ4Bk,569
381
381
  parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py,sha256=5v25zdU6koXexRTkccj_3sSSdXqHdsU8ZdNrnZ3ONZU,1436
382
+ parsl/tests/test_python_apps/test_memoize_exception.py,sha256=GdvB5XFnW5pbkFMETzxWC3nIKo13Pm0benq9u2UnM1E,1232
382
383
  parsl/tests/test_python_apps/test_memoize_ignore_args.py,sha256=u-s6r6Nxpvu_x_Uwputi_QIC1tUnzakDF-LSKiEtl9Q,739
383
384
  parsl/tests/test_python_apps/test_memoize_joinapp.py,sha256=htiNmE0PGVA7_pdwRcZ9Wv5Fh6Bph6EdPmywJi8m1oM,435
384
385
  parsl/tests/test_python_apps/test_outputs.py,sha256=5ai9hz5jJEqZxptuFU-E3TObTuBpU9i9HXm1gt21GDY,645
@@ -456,13 +457,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
456
457
  parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
457
458
  parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
458
459
  parsl/usage_tracking/usage.py,sha256=hbMo5BYgIWqMcFWqN-HYP1TbwNrTonpv-usfwnCFJKY,9212
459
- parsl-2025.9.1.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
460
- parsl-2025.9.1.data/scripts/interchange.py,sha256=dh9_Q5bLvgHLhSRAXrFIlOd5Yo-ZkudDGFWz0N3hQBg,25951
461
- parsl-2025.9.1.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
462
- parsl-2025.9.1.data/scripts/process_worker_pool.py,sha256=-5VLVjeab6oROulx7OwI9tdNNHd6uap45I1jltm-UDc,40524
463
- parsl-2025.9.1.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
464
- parsl-2025.9.1.dist-info/METADATA,sha256=jxbUzjfVq5oN4pdJIA1yj_X2PBiFqnm0Th8W1unAMVg,4054
465
- parsl-2025.9.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
466
- parsl-2025.9.1.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
467
- parsl-2025.9.1.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
468
- parsl-2025.9.1.dist-info/RECORD,,
460
+ parsl-2025.9.8.data/scripts/exec_parsl_function.py,sha256=YXKVVIa4zXmOtz-0Ca4E_5nQfN_3S2bh2tB75uZZB4w,7774
461
+ parsl-2025.9.8.data/scripts/interchange.py,sha256=f1sCXmH7B7vhhBZbVJ44kbC6FtM3bH7vpKoYBvxgo1A,25640
462
+ parsl-2025.9.8.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
463
+ parsl-2025.9.8.data/scripts/process_worker_pool.py,sha256=-5VLVjeab6oROulx7OwI9tdNNHd6uap45I1jltm-UDc,40524
464
+ parsl-2025.9.8.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
465
+ parsl-2025.9.8.dist-info/METADATA,sha256=mPH_XO9WhfJ-yqGBbzAI_3kj6diHJKX-jtTq-iJ2zrQ,4054
466
+ parsl-2025.9.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
467
+ parsl-2025.9.8.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
468
+ parsl-2025.9.8.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
469
+ parsl-2025.9.8.dist-info/RECORD,,