parsl 2024.4.15__py3-none-any.whl → 2024.4.29__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.
Files changed (44) hide show
  1. parsl/addresses.py +2 -2
  2. parsl/app/bash.py +10 -2
  3. parsl/app/errors.py +3 -5
  4. parsl/config.py +10 -1
  5. parsl/data_provider/zip.py +32 -0
  6. parsl/dataflow/dflow.py +102 -62
  7. parsl/dataflow/futures.py +26 -5
  8. parsl/executors/base.py +16 -0
  9. parsl/executors/high_throughput/executor.py +7 -1
  10. parsl/executors/taskvine/executor.py +6 -0
  11. parsl/executors/workqueue/executor.py +6 -0
  12. parsl/monitoring/monitoring.py +15 -0
  13. parsl/providers/kubernetes/kube.py +20 -1
  14. parsl/tests/configs/local_threads_checkpoint_periodic.py +8 -10
  15. parsl/tests/conftest.py +12 -1
  16. parsl/tests/test_bash_apps/test_basic.py +2 -0
  17. parsl/tests/test_bash_apps/test_std_uri.py +128 -0
  18. parsl/tests/test_checkpointing/test_periodic.py +20 -33
  19. parsl/tests/test_checkpointing/test_task_exit.py +1 -1
  20. parsl/tests/test_htex/test_basic.py +2 -2
  21. parsl/tests/test_htex/test_missing_worker.py +0 -4
  22. parsl/tests/test_htex/test_zmq_binding.py +1 -0
  23. parsl/tests/test_monitoring/test_stdouterr.py +137 -0
  24. parsl/tests/test_mpi_apps/test_resource_spec.py +2 -8
  25. parsl/tests/test_python_apps/test_context_manager.py +3 -3
  26. parsl/tests/test_scaling/test_regression_1621.py +11 -11
  27. parsl/tests/test_staging/test_staging_stdout.py +61 -0
  28. parsl/tests/test_staging/test_zip_in.py +42 -0
  29. parsl/tests/test_staging/test_zip_to_zip.py +44 -0
  30. parsl/tests/unit/__init__.py +0 -0
  31. parsl/tests/unit/test_file.py +99 -0
  32. parsl/usage_tracking/api.py +66 -0
  33. parsl/usage_tracking/usage.py +39 -26
  34. parsl/utils.py +11 -2
  35. parsl/version.py +1 -1
  36. {parsl-2024.4.15.dist-info → parsl-2024.4.29.dist-info}/METADATA +4 -4
  37. {parsl-2024.4.15.dist-info → parsl-2024.4.29.dist-info}/RECORD +44 -36
  38. {parsl-2024.4.15.data → parsl-2024.4.29.data}/scripts/exec_parsl_function.py +0 -0
  39. {parsl-2024.4.15.data → parsl-2024.4.29.data}/scripts/parsl_coprocess.py +0 -0
  40. {parsl-2024.4.15.data → parsl-2024.4.29.data}/scripts/process_worker_pool.py +0 -0
  41. {parsl-2024.4.15.dist-info → parsl-2024.4.29.dist-info}/LICENSE +0 -0
  42. {parsl-2024.4.15.dist-info → parsl-2024.4.29.dist-info}/WHEEL +0 -0
  43. {parsl-2024.4.15.dist-info → parsl-2024.4.29.dist-info}/entry_points.txt +0 -0
  44. {parsl-2024.4.15.dist-info → parsl-2024.4.29.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,99 @@
1
+ import os
2
+ from unittest import mock
3
+
4
+ import pytest
5
+
6
+ from parsl import File
7
+
8
+ _MOCK_BASE = "parsl.data_provider.files."
9
+
10
+
11
+ @pytest.mark.local
12
+ @pytest.mark.parametrize("scheme", ("http", "https", "ftp", "ftps", "asdfasdf"))
13
+ def test_file_init_scheme(scheme):
14
+ basename = "some_base_name"
15
+ path = f"/some/path/1/2/3/{basename}"
16
+ fqdn = "some.fqdn.example.com"
17
+ exp_url = f"{scheme}://{fqdn}{path}"
18
+ f = File(exp_url)
19
+ assert f.url == exp_url, "Expected given url to be stored"
20
+ assert f.scheme == scheme
21
+ assert f.netloc == fqdn
22
+ assert f.path == path
23
+ assert f.filename == basename
24
+ assert f.local_path is None, "Expect only set by API consumer, not constructor"
25
+
26
+
27
+ @pytest.mark.local
28
+ @pytest.mark.parametrize("url", ("some weird :// url", "", "a"))
29
+ def test_file_init_file_url_fallback(url):
30
+ exp_url = "some weird :// url"
31
+ f = File(exp_url)
32
+ assert f.url == exp_url
33
+ assert not f.netloc, "invalid host, should be no netloc"
34
+ assert f.path == exp_url, "Should fail to fully parse, so path is whole url"
35
+ assert f.filename == exp_url.rsplit("/", 1)[-1]
36
+
37
+ assert f.scheme == "file"
38
+
39
+
40
+ @pytest.mark.local
41
+ def test_file_proxies_for_filepath(randomstring):
42
+ # verify (current) expected internal hookup
43
+ exp_filepath = randomstring()
44
+ with mock.patch(
45
+ f"{_MOCK_BASE}File.filepath", new_callable=mock.PropertyMock
46
+ ) as mock_fpath:
47
+ mock_fpath.return_value = exp_filepath
48
+ f = File("")
49
+ assert str(f) == exp_filepath
50
+ assert os.fspath(f) == exp_filepath
51
+
52
+
53
+ @pytest.mark.local
54
+ @pytest.mark.parametrize("scheme", ("file://", ""))
55
+ def test_file_filepath_local_path_is_priority(scheme, randomstring):
56
+ exp_path = "/some/local/path"
57
+ url = f"{scheme}{exp_path}"
58
+ f = File(url)
59
+
60
+ f.local_path = randomstring()
61
+ assert f.filepath == f.local_path
62
+
63
+ f.local_path = None
64
+ assert f.filepath == exp_path
65
+
66
+
67
+ @pytest.mark.local
68
+ def test_file_filepath_requires_local_accessible_path():
69
+ with pytest.raises(ValueError) as pyt_exc:
70
+ _ = File("http://").filepath
71
+
72
+ assert "No local_path" in str(pyt_exc.value), "Expected reason in exception"
73
+
74
+
75
+ @pytest.mark.local
76
+ @pytest.mark.parametrize("scheme", ("https", "ftps", "", "file", "asdfasdf"))
77
+ def test_file_repr(scheme):
78
+ netloc = "some.netloc"
79
+ filename = "some_file_name"
80
+ path = f"/some/path/{filename}"
81
+ if scheme:
82
+ url = f"{scheme}://{netloc}{path}"
83
+ else:
84
+ scheme = "file"
85
+ url = path
86
+
87
+ f = File(url)
88
+ r = repr(f)
89
+ assert r.startswith("<")
90
+ assert r.endswith(">")
91
+ assert f"<{type(f).__name__} " in r
92
+ assert f" at 0x{id(f):x}" in r
93
+ assert f" url={url}" in r
94
+ assert f" scheme={scheme}" in r
95
+ assert f" path={path}" in r
96
+ assert f" filename={filename}" in r
97
+
98
+ if scheme != "file":
99
+ assert f" netloc={netloc}" in r
@@ -0,0 +1,66 @@
1
+ import inspect
2
+
3
+ from parsl.utils import RepresentationMixin
4
+
5
+ from abc import abstractmethod
6
+ from functools import singledispatch
7
+ from typing import Any, List, Sequence
8
+
9
+
10
+ # Traverse the configuration hierarchy, returning a JSON component
11
+ # for each one. Configuration components which implement
12
+ # RepresentationMixin will be in the right form for inspecting
13
+ # object attributes. Configuration components which are lists or tuples
14
+ # are traversed in sequence. Other types default to reporting no
15
+ # usage information.
16
+
17
+ @singledispatch
18
+ def get_parsl_usage(obj) -> List[Any]:
19
+ return []
20
+
21
+
22
+ @get_parsl_usage.register
23
+ def get_parsl_usage_representation_mixin(obj: RepresentationMixin) -> List[Any]:
24
+ t = type(obj)
25
+ qualified_name = t.__module__ + "." + t.__name__
26
+
27
+ # me can contain anything that can be rendered as JSON
28
+ me: List[Any] = []
29
+
30
+ if isinstance(obj, UsageInformation):
31
+ # report rich usage information for this component
32
+ attrs = {'c': qualified_name}
33
+ attrs.update(obj.get_usage_information())
34
+ me = [attrs]
35
+ else:
36
+ # report the class name of this component
37
+ me = [qualified_name]
38
+
39
+ # unwrap typeguard-style unwrapping
40
+ init: Any = type(obj).__init__
41
+ if hasattr(init, '__wrapped__'):
42
+ init = init.__wrapped__
43
+
44
+ argspec = inspect.getfullargspec(init)
45
+
46
+ for arg in argspec.args[1:]: # skip first arg, self
47
+ arg_value = getattr(obj, arg)
48
+ d = get_parsl_usage(arg_value)
49
+ me += d
50
+
51
+ return me
52
+
53
+
54
+ @get_parsl_usage.register(list)
55
+ @get_parsl_usage.register(tuple)
56
+ def get_parsl_usage_sequence(obj: Sequence) -> List[Any]:
57
+ result = []
58
+ for v in obj:
59
+ result += get_parsl_usage(v)
60
+ return result
61
+
62
+
63
+ class UsageInformation:
64
+ @abstractmethod
65
+ def get_usage_information(self) -> dict:
66
+ pass
@@ -7,6 +7,7 @@ import socket
7
7
  import sys
8
8
  import platform
9
9
 
10
+ from parsl.usage_tracking.api import get_parsl_usage
10
11
  from parsl.utils import setproctitle
11
12
  from parsl.multiprocessing import ForkProcess
12
13
  from parsl.dataflow.states import States
@@ -17,6 +18,13 @@ logger = logging.getLogger(__name__)
17
18
  from typing import Callable
18
19
  from typing_extensions import ParamSpec
19
20
 
21
+ # protocol version byte: when (for example) compression parameters are changed
22
+ # that cannot be inferred from the compressed message itself, this version
23
+ # ID needs to imply those parameters.
24
+
25
+ # Earlier protocol versions: b'{' - the original pure-JSON protocol pre-March 2024
26
+ PROTOCOL_VERSION = b'1'
27
+
20
28
  P = ParamSpec("P")
21
29
 
22
30
 
@@ -32,7 +40,7 @@ def async_process(fn: Callable[P, None]) -> Callable[P, None]:
32
40
 
33
41
 
34
42
  @async_process
35
- def udp_messenger(domain_name: str, UDP_PORT: int, sock_timeout: int, message: str) -> None:
43
+ def udp_messenger(domain_name: str, UDP_PORT: int, sock_timeout: int, message: bytes) -> None:
36
44
  """Send UDP messages to usage tracker asynchronously
37
45
 
38
46
  This multiprocessing based messenger was written to overcome the limitations
@@ -46,16 +54,11 @@ def udp_messenger(domain_name: str, UDP_PORT: int, sock_timeout: int, message: s
46
54
  setproctitle("parsl: Usage tracking")
47
55
 
48
56
  try:
49
- encoded_message = bytes(message, "utf-8")
50
-
51
57
  UDP_IP = socket.gethostbyname(domain_name)
52
58
 
53
- if UDP_PORT is None:
54
- raise Exception("UDP_PORT is None")
55
-
56
59
  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
57
60
  sock.settimeout(sock_timeout)
58
- sock.sendto(encoded_message, (UDP_IP, UDP_PORT))
61
+ sock.sendto(message, (UDP_IP, UDP_PORT))
59
62
  sock.close()
60
63
 
61
64
  except socket.timeout:
@@ -102,7 +105,7 @@ class UsageTracker:
102
105
  self.procs = []
103
106
  self.dfk = dfk
104
107
  self.config = self.dfk.config
105
- self.uuid = str(uuid.uuid4())
108
+ self.correlator_uuid = str(uuid.uuid4())
106
109
  self.parsl_version = PARSL_VERSION
107
110
  self.python_version = "{}.{}.{}".format(sys.version_info.major,
108
111
  sys.version_info.minor,
@@ -130,22 +133,23 @@ class UsageTracker:
130
133
 
131
134
  return track
132
135
 
133
- def construct_start_message(self) -> str:
136
+ def construct_start_message(self) -> bytes:
134
137
  """Collect preliminary run info at the start of the DFK.
135
138
 
136
139
  Returns :
137
140
  - Message dict dumped as json string, ready for UDP
138
141
  """
139
- message = {'uuid': self.uuid,
142
+ message = {'correlator': self.correlator_uuid,
140
143
  'parsl_v': self.parsl_version,
141
144
  'python_v': self.python_version,
142
- 'os': platform.system(),
143
- 'os_v': platform.release(),
144
- 'start': time.time()}
145
+ 'platform.system': platform.system(),
146
+ 'start': int(time.time()),
147
+ 'components': get_parsl_usage(self.dfk._config)}
148
+ logger.debug(f"Usage tracking start message: {message}")
145
149
 
146
- return json.dumps(message)
150
+ return self.encode_message(message)
147
151
 
148
- def construct_end_message(self) -> str:
152
+ def construct_end_message(self) -> bytes:
149
153
  """Collect the final run information at the time of DFK cleanup.
150
154
 
151
155
  Returns:
@@ -153,20 +157,26 @@ class UsageTracker:
153
157
  """
154
158
  app_count = self.dfk.task_count
155
159
 
156
- site_count = len(self.dfk.config.executors)
157
-
158
160
  app_fails = self.dfk.task_state_counts[States.failed] + self.dfk.task_state_counts[States.dep_fail]
159
161
 
160
- message = {'uuid': self.uuid,
161
- 'end': time.time(),
162
- 't_apps': app_count,
163
- 'sites': site_count,
164
- 'failed': app_fails
165
- }
162
+ # the DFK is tangled into this code as a god-object, so it is
163
+ # handled separately from the usual traversal code, but presenting
164
+ # the same protocol-level report.
165
+ dfk_component = {'c': type(self.dfk).__module__ + "." + type(self.dfk).__name__,
166
+ 'app_count': app_count,
167
+ 'app_fails': app_fails}
168
+
169
+ message = {'correlator': self.correlator_uuid,
170
+ 'end': int(time.time()),
171
+ 'components': [dfk_component] + get_parsl_usage(self.dfk._config)}
172
+ logger.debug(f"Usage tracking end message (unencoded): {message}")
166
173
 
167
- return json.dumps(message)
174
+ return self.encode_message(message)
168
175
 
169
- def send_UDP_message(self, message: str) -> None:
176
+ def encode_message(self, obj):
177
+ return PROTOCOL_VERSION + json.dumps(obj).encode()
178
+
179
+ def send_UDP_message(self, message: bytes) -> None:
170
180
  """Send UDP message."""
171
181
  if self.tracking_enabled:
172
182
  try:
@@ -191,7 +201,10 @@ class UsageTracker:
191
201
  or won't respond to SIGTERM.
192
202
  """
193
203
  for proc in self.procs:
204
+ logger.debug("Joining usage tracking process %s", proc)
194
205
  proc.join(timeout=timeout)
195
206
  if proc.is_alive():
196
- logger.info("Usage tracking process did not end itself; sending SIGKILL")
207
+ logger.warning("Usage tracking process did not end itself; sending SIGKILL")
197
208
  proc.kill()
209
+
210
+ proc.close()
parsl/utils.py CHANGED
@@ -13,6 +13,7 @@ import typeguard
13
13
  from typing_extensions import Type
14
14
 
15
15
  import parsl
16
+ from parsl.app.errors import BadStdStreamFile
16
17
  from parsl.version import VERSION
17
18
 
18
19
 
@@ -121,9 +122,17 @@ def get_std_fname_mode(
121
122
  if len(stdfspec) != 2:
122
123
  msg = (f"std descriptor {fdname} has incorrect tuple length "
123
124
  f"{len(stdfspec)}")
124
- raise pe.BadStdStreamFile(msg, TypeError('Bad Tuple Length'))
125
+ raise pe.BadStdStreamFile(msg)
125
126
  fname, mode = stdfspec
126
- return str(fname), mode
127
+
128
+ path = os.fspath(fname)
129
+
130
+ if isinstance(path, str):
131
+ return path, mode
132
+ elif isinstance(path, bytes):
133
+ return path.decode(), mode
134
+ else:
135
+ raise BadStdStreamFile(f"fname has invalid type {type(path)}")
127
136
 
128
137
 
129
138
  @contextmanager
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.04.15'
6
+ VERSION = '2024.04.29'
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.4.15
3
+ Version: 2024.4.29
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.04.15.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.04.29.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -55,7 +55,7 @@ Requires-Dist: pyyaml ; extra == 'all'
55
55
  Requires-Dist: cffi ; extra == 'all'
56
56
  Requires-Dist: jsonschema ; extra == 'all'
57
57
  Requires-Dist: proxystore ; extra == 'all'
58
- Requires-Dist: radical.pilot ==1.47 ; extra == 'all'
58
+ Requires-Dist: radical.pilot ==1.52.1 ; extra == 'all'
59
59
  Provides-Extra: aws
60
60
  Requires-Dist: boto3 ; extra == 'aws'
61
61
  Provides-Extra: azure
@@ -84,7 +84,7 @@ Requires-Dist: oauth-ssh >=0.9 ; extra == 'oauth_ssh'
84
84
  Provides-Extra: proxystore
85
85
  Requires-Dist: proxystore ; extra == 'proxystore'
86
86
  Provides-Extra: radical-pilot
87
- Requires-Dist: radical.pilot ==1.47 ; extra == 'radical-pilot'
87
+ Requires-Dist: radical.pilot ==1.52.1 ; extra == 'radical-pilot'
88
88
  Provides-Extra: visualization
89
89
  Requires-Dist: pydot ; extra == 'visualization'
90
90
  Requires-Dist: networkx <2.6,>=2.5 ; extra == 'visualization'
@@ -1,18 +1,18 @@
1
1
  parsl/__init__.py,sha256=hq8rJmP59wzd9-yxaGcmq5gPpshOopH-Y1K0BkUBNY0,1843
2
- parsl/addresses.py,sha256=mO4u1kVxAnBHHIIUyqdzsOxT9aUsGeBP5PfAPkz3sug,4819
3
- parsl/config.py,sha256=E90pKPeagHpIdk9XYifHqSpTAaKdDQN59NPDi8PrTAc,7038
2
+ parsl/addresses.py,sha256=0wPo-4HjW0l4ndqCKLmSdbbSWE_3WK7pxRvqBEp-3Lk,4821
3
+ parsl/config.py,sha256=nT_XBE2ToRpp6jHCO1tFagGBxF4ShJEpxLx1BNvKHVw,7594
4
4
  parsl/curvezmq.py,sha256=FtZEYP1IWDry39cH-tOKUm9TnaR1U7krOmvVYpATcOk,6939
5
5
  parsl/errors.py,sha256=SzINzQFZDBDbj9l-DPQznD0TbGkNhHIRAPkcBCogf_A,1019
6
6
  parsl/log_utils.py,sha256=Ckeb7YiIoK0FA8dA5CsWJDe28i9Sf4sxhFwp__VsD3o,3274
7
7
  parsl/multiprocessing.py,sha256=hakfdg-sgxEjwloZeDrt6EhzwdzecvjJhkPHHxh8lII,1938
8
8
  parsl/process_loggers.py,sha256=1G3Rfrh5wuZNo2X03grG4kTYPGOxz7hHCyG6L_A3b0A,1137
9
9
  parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- parsl/utils.py,sha256=A3WDMGaNB4ajVx_jCuc-74W6PFy4zswJy-pLE7u8Dz0,10979
11
- parsl/version.py,sha256=nAZAqY4iXKGB--oYnOxrq5rAQFGqE2qgS9MxaDS4zA8,131
10
+ parsl/utils.py,sha256=DUPrl9ZdzwJzz2rmlRws77OMs43iQo_CT-Kr3uJs-fo,11202
11
+ parsl/version.py,sha256=ZkQP1dxgTC3ws9wp7Qeu8XyvkriqFeJIGzAfXff0J3M,131
12
12
  parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  parsl/app/app.py,sha256=wAHchJetgnicT1pn0NJKDeDX0lV3vDFlG8cQd_Ciax4,8522
14
- parsl/app/bash.py,sha256=bx9x1XFwkOTpZZD3CPwnVL9SyNRDjbUGtOnuGLvxN_8,5396
15
- parsl/app/errors.py,sha256=M5QdCEohov14A99cLHP41tn6T5JczxmX-WJGYfwPDWE,4039
14
+ parsl/app/bash.py,sha256=VufxGROrlJB3dP03syNutU0x8rLzfI-gooWwBZ4FFQ8,5676
15
+ parsl/app/errors.py,sha256=H0n-5kNMwl71cPJ7bkeHwBegCg639Z6be6ROvY0USg0,3915
16
16
  parsl/app/futures.py,sha256=42UucIjKLJyRkg59BH-Pg_Q9Iue2Y-LSDi6g8q_cKzo,2910
17
17
  parsl/app/python.py,sha256=qzVq7aXu3ZQGsMdQGDDYov_AP7ChvUT00peqIM93XXA,2330
18
18
  parsl/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -59,17 +59,17 @@ parsl/data_provider/globus.py,sha256=ss7R8XD64mR3p-y9lxNAb11rymiOlxI1hQzkPEW51ZI
59
59
  parsl/data_provider/http.py,sha256=nDHTW7XmJqAukWJjPRQjyhUXt8r6GsQ36mX9mv_wOig,2986
60
60
  parsl/data_provider/rsync.py,sha256=2-ZxqrT-hBj39x082NusJaBqsGW4Jd2qCW6JkVPpEl0,4254
61
61
  parsl/data_provider/staging.py,sha256=l-mAXFburs3BWPjkSmiQKuAgJpsxCG62yATPDbrafYI,4523
62
- parsl/data_provider/zip.py,sha256=qzsSpHYp3EUqS3LOaPiZPitr_9zu6oGybVaFOApVbuY,3348
62
+ parsl/data_provider/zip.py,sha256=50xvXms3UoEFc4v_w6joLAcCrcdKuOjIPoPLgUz1Jio,4498
63
63
  parsl/dataflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- parsl/dataflow/dflow.py,sha256=yFj64cC2xazB_D-7nv3WncWElZnNXhUNQMHg7O1rsLc,63830
64
+ parsl/dataflow/dflow.py,sha256=oKlzZlhftcHN2l1Pgh6EhZx1kWTmD8WnfPTGlk1decI,66037
65
65
  parsl/dataflow/errors.py,sha256=w2vOt_ymzG2dOqJUO4IDcmTlrCIHlMZL8nBVyVq0O_8,2176
66
- parsl/dataflow/futures.py,sha256=YIo1-ab7fr35czWy8_PPvkSF_Hh-3N_6x6nWziQGPbQ,5059
66
+ parsl/dataflow/futures.py,sha256=XGgaoaT3N2U3vvZ7DEoLkGBrZscq_VzffZ9goLB87ko,6081
67
67
  parsl/dataflow/memoization.py,sha256=AsJO6c6cRp2ac6H8uGn2USlEi78_nX3QWvpxYt4XdYE,9583
68
68
  parsl/dataflow/rundirs.py,sha256=XKmBZpBEIsGACBhYOkbbs2e5edC0pQegJcSlk4FWeag,1154
69
69
  parsl/dataflow/states.py,sha256=hV6mfv-y4A6xrujeQglcomnfEs7y3Xm2g6JFwC6dvgQ,2612
70
70
  parsl/dataflow/taskrecord.py,sha256=bzIBmlDTsRrELtB9PUQwxTWcwrCd8aMsUAzvijle1eo,3114
71
71
  parsl/executors/__init__.py,sha256=J50N97Nm9YRjz6K0oNXDxUYIsDjL43_tp3LVb2w7n-M,381
72
- parsl/executors/base.py,sha256=yQ-o04nlM0aU2jOanzzAEVsAo-RnNdCwpRWCnAFwdOE,4619
72
+ parsl/executors/base.py,sha256=Kvui8yDPzz7yQpm9qSkMdhQS4eu0tQTkVZ99j6HGgA4,5087
73
73
  parsl/executors/errors.py,sha256=xVswxgi7vmJcUMCeYDAPK8sQT2kHFFROVoOr0dnmcWE,2098
74
74
  parsl/executors/status_handling.py,sha256=3kJAbgXSZbbj8uN72Gu08PSUnxMrT5np1I-ihLyM6E8,13631
75
75
  parsl/executors/threads.py,sha256=bMU3JFghm17Lpcua13pr3NgQhkUDDc2mqvF2yJBrVNQ,3353
@@ -79,7 +79,7 @@ parsl/executors/flux/executor.py,sha256=0omXRPvykdW5VZb8mwgBJjxVk4H6G8xoL5D_R9pu
79
79
  parsl/executors/flux/flux_instance_manager.py,sha256=tTEOATClm9SwdgLeBRWPC6D55iNDuh0YxqJOw3c3eQ4,2036
80
80
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  parsl/executors/high_throughput/errors.py,sha256=vl69wLuVOplbKxHI9WphEGBExHWkTn5n8T9QhBXuNH0,380
82
- parsl/executors/high_throughput/executor.py,sha256=K82dr0CUKpbsX3eWPDC9vTfcUagHYPT5nij_zp2ku9I,37124
82
+ parsl/executors/high_throughput/executor.py,sha256=Er0QUG-HNatDPVBsLYZbbEStyNJsu4oE9UQ7LtQYH7w,37318
83
83
  parsl/executors/high_throughput/interchange.py,sha256=Rt6HyFvQYFuqUJ1ytXmUFTDIK9wOBm4l96IHoL6OFRc,31491
84
84
  parsl/executors/high_throughput/manager_record.py,sha256=w5EwzVqPtsLOyOW8jP44U3uaogt8H--tkwp7FNyKN_o,385
85
85
  parsl/executors/high_throughput/monitoring_info.py,sha256=3gQpwQjjNDEBz0cQqJZB6hRiwLiWwXs83zkQDmbOwxY,297
@@ -96,7 +96,7 @@ parsl/executors/radical/rpex_worker.py,sha256=1M1df-hzFdmZMWbRZlUzIX7uAWMKJ_SkxL
96
96
  parsl/executors/taskvine/__init__.py,sha256=sWIJdvSLgQKul9dlSjIkNat7yBDgU3SrBF3X2yhT86E,293
97
97
  parsl/executors/taskvine/errors.py,sha256=MNS_NjpvHjwevQXOjqjSEBFroqEWi-LT1ZEVZ2C5Dx0,652
98
98
  parsl/executors/taskvine/exec_parsl_function.py,sha256=oUAKbPWwpbzWwQ47bZQlVDxS8txhnhPsonMf3AOEMGQ,7085
99
- parsl/executors/taskvine/executor.py,sha256=wXqnGIK4c6TrpWst45CHSaBBI6wkeBgbhfia5v8X8uo,32807
99
+ parsl/executors/taskvine/executor.py,sha256=M-2Uf34lYwa5lzoMIwqR__QXcE1anvGgUJWggEzT2pQ,33024
100
100
  parsl/executors/taskvine/factory.py,sha256=sHhfGv7xRFrWkQclzRXuFEAHuSXhsZu2lR5LJ81aucA,2638
101
101
  parsl/executors/taskvine/factory_config.py,sha256=AbE2fN2snrF5ITYrrS4DnGn2XkJHUFr_17DYHDHIwq0,3693
102
102
  parsl/executors/taskvine/manager.py,sha256=VxVN2L5zFVPNfSAJrGgq87MRJKpcxf-BHdO5QWxB4TU,25822
@@ -105,7 +105,7 @@ parsl/executors/taskvine/utils.py,sha256=iSrIogeiauL3UNy_9tiZp1cBSNn6fIJkMYQRVi1
105
105
  parsl/executors/workqueue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
106
  parsl/executors/workqueue/errors.py,sha256=ghB93Ptb_QbOAvgLe7siV_snRRkU_T-cFHv3AR6Ziwo,541
107
107
  parsl/executors/workqueue/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
108
- parsl/executors/workqueue/executor.py,sha256=3PZ5Emx2-fnHlCBz88XPH0-SotqkCuQ5OkMN7ZcuIX8,50317
108
+ parsl/executors/workqueue/executor.py,sha256=rSjQ4VWQyX9wvuwQ70ALvRYhz_d9La731eZGqgPR3uU,50523
109
109
  parsl/executors/workqueue/parsl_coprocess.py,sha256=kEFGC-A97c_gweUPvrc9EEGume7vUpkJLJlyAb87xtQ,5737
110
110
  parsl/executors/workqueue/parsl_coprocess_stub.py,sha256=_bJmpPIgL42qM6bVzeEKt1Mn1trSP41rtJguXxPGfHI,735
111
111
  parsl/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -121,7 +121,7 @@ parsl/launchers/launchers.py,sha256=VB--fiVv_IQne3DydTMSdGUY0o0g69puAs-Hd3mJ2vo,
121
121
  parsl/monitoring/__init__.py,sha256=0ywNz6i0lM1xo_7_BIxhETDGeVd2C_0wwD7qgeaMR4c,83
122
122
  parsl/monitoring/db_manager.py,sha256=hdmmXSTXp8Wwhr7vLpQalD_ahRl3SNxKYVsplnThRk8,37021
123
123
  parsl/monitoring/message_type.py,sha256=Khn88afNxcOIciKiCK4GLnn90I5BlRTiOL3zK-P07yQ,401
124
- parsl/monitoring/monitoring.py,sha256=ce4_5F1cbNv8jvfVxgwGLs4r3cPJrqQgMEwINpRRdFg,12862
124
+ parsl/monitoring/monitoring.py,sha256=DWPhuxw698pHePUbT_UJdjICoAAST-Y6t9rT8H01dqA,13462
125
125
  parsl/monitoring/radios.py,sha256=F1IML-IvFJxL93rvWBqwTisRprTs1zW1lFVWMog-LRE,5858
126
126
  parsl/monitoring/remote.py,sha256=0wqANMcuvq3dpja3agdbOzD72n5oUYp7PcNKyLCC35E,13923
127
127
  parsl/monitoring/router.py,sha256=92krSS8xIWDQuxJMxQ3D_gbLcqgKymxr3HVJwAImdrw,9557
@@ -173,7 +173,7 @@ parsl/providers/grid_engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
173
173
  parsl/providers/grid_engine/grid_engine.py,sha256=xzh5clmo2xKQYm56ONkszfrx7aE_n2dfubEd5mLGexg,8565
174
174
  parsl/providers/grid_engine/template.py,sha256=a7iViKr8LXcFTPmsf_qQeVK5o_RekOAIlUOF0X1q-2M,273
175
175
  parsl/providers/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
- parsl/providers/kubernetes/kube.py,sha256=uOr-sPgp73r1JFNc6wYhGhNGCvqkI8xBZznuJvfIfyk,12819
176
+ parsl/providers/kubernetes/kube.py,sha256=nhaGoOFHxfkNSpKMFd9UuctjcroTQrPYNRbxUxd05rQ,13810
177
177
  parsl/providers/kubernetes/template.py,sha256=VsRz6cmNaII-y4OdMT6sCwzQy95SJX6NMB0hmmFBhX4,50
178
178
  parsl/providers/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
179
  parsl/providers/local/local.py,sha256=7OYug8UaRr1QW2g3z-SYmdo1InSSZRP0tQOySvrkwbI,11372
@@ -197,7 +197,7 @@ parsl/serialize/facade.py,sha256=SpKGSpI8PQb3hhxuKRJUYoQoq284t5np9ouTpogKmtU,679
197
197
  parsl/serialize/proxystore.py,sha256=Yo-38odKlSKSuQfXU4cB5YM9sYV_302uPn1z_en19SU,1623
198
198
  parsl/tests/__init__.py,sha256=s_zoz7Ipgykh-QTQvctdpxENrMnmpXY8oe1bJbUmpqY,204
199
199
  parsl/tests/callables_helper.py,sha256=ceP1YYsNtrZgKT6MAIvpgdccEjQ_CpFEOnZBGHKGOx0,30
200
- parsl/tests/conftest.py,sha256=suQb6CmTixETxCES0gEDSTHXls5ps408Ni6RJoIaGJU,14284
200
+ parsl/tests/conftest.py,sha256=9AFrtThVnHasfyujoPw6iudxTvLlmqKQytbarzi3sWY,14579
201
201
  parsl/tests/test_aalst_patterns.py,sha256=fi6JHKidV7vMJLv2nnu_-Q0ngGLc89mRm8rFrGIwiUM,9615
202
202
  parsl/tests/test_callables.py,sha256=_QsdS8v2nGgOj4_X69NFHZOGUnqbOrOMCA9pCJColZw,1974
203
203
  parsl/tests/test_curvezmq.py,sha256=yyhlS4vmaZdMitiySoy4l_ih9H1bsPiN-tMdwIh3H20,12431
@@ -227,7 +227,7 @@ parsl/tests/configs/local_radical_mpi.py,sha256=K6V2HbARujaow5DBAUYSIWt1RaYbt898
227
227
  parsl/tests/configs/local_threads.py,sha256=oEnQSlom_JMLFX9_Ln49JAfOP3nSMbw8gTaDJo_NYfo,202
228
228
  parsl/tests/configs/local_threads_checkpoint.py,sha256=Ex7CI1Eo6wVRsem9uXTtbVJrkKc_vOYlVvCNa2RLpIo,286
229
229
  parsl/tests/configs/local_threads_checkpoint_dfk_exit.py,sha256=ECL1n0uBsXDuW3sLCmjiwe8s3Xd7EFIj5wt446w6bh4,254
230
- parsl/tests/configs/local_threads_checkpoint_periodic.py,sha256=XmeZTxIJFLq8KosB6dTEGBer7c1DAn1P6fpSOuAaEz8,314
230
+ parsl/tests/configs/local_threads_checkpoint_periodic.py,sha256=F2MVlwJZk-hkCgCrsAm_rKsv4mtLgsf5cyPsRoHm0ig,319
231
231
  parsl/tests/configs/local_threads_checkpoint_task_exit.py,sha256=zHKN68T-xhAVQwQp3fSWPIEcWOx-F7NBGZTOhF07iL8,256
232
232
  parsl/tests/configs/local_threads_ftp_in_task.py,sha256=c9odRbxgj1bM_ttpkWTh2Ch_MV7f5cmn-68BOjLeJ70,444
233
233
  parsl/tests/configs/local_threads_globus.py,sha256=NhY27cD4vcqLh762Ye0BINZnt63EmTyHXg7FQMffOBw,1097
@@ -293,7 +293,7 @@ parsl/tests/sites/test_worker_info.py,sha256=oqCJLiZth1yo4KXS83vn7Va0TI0D78GSDlC
293
293
  parsl/tests/sites/test_mpi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
294
294
  parsl/tests/test_bash_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
295
295
  parsl/tests/test_bash_apps/test_apptimeout.py,sha256=fZP7LMSuRtiP1dp1viAWbH5cTfA5otPLsW-KksBAQaU,570
296
- parsl/tests/test_bash_apps/test_basic.py,sha256=S4W0IVISMLdwEO3DFZswav1PcAxCvq3TgNkey3Cl8wA,2421
296
+ parsl/tests/test_bash_apps/test_basic.py,sha256=HGzJKtETnUxHQwPaTDuZTPMtIX3lSqtidqLxPn2IV8U,2460
297
297
  parsl/tests/test_bash_apps/test_error_codes.py,sha256=mPvLWADdVb5hbKgpKUy06sKMWG3LYu4FVhbmrgo7Lps,3964
298
298
  parsl/tests/test_bash_apps/test_keyword_overlaps.py,sha256=8bfN2qw4uXJsYquppR1lZQrYW834AZc3zjYIIHTfDoE,209
299
299
  parsl/tests/test_bash_apps/test_kwarg_storage.py,sha256=OMMD3sKSngBSjVCHK9wju0hHzszOqbYuWtscyMuh5_8,720
@@ -302,18 +302,19 @@ parsl/tests/test_bash_apps/test_memoize_ignore_args.py,sha256=zBB4zNMZe4VZExwKZH
302
302
  parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py,sha256=zQDQktIA9bYdqciZ17bCCGZw7XCQf3XmGqDsZ4SU_e0,1362
303
303
  parsl/tests/test_bash_apps/test_multiline.py,sha256=stpMEv2eopGG-ietxjUtD5gYMOVpwPdLauDizjUfTdA,1082
304
304
  parsl/tests/test_bash_apps/test_pipeline.py,sha256=439Ml2bMn5NgiQiNcg4DPeWhsXK8WQaatvZy2PleQzQ,2444
305
+ parsl/tests/test_bash_apps/test_std_uri.py,sha256=cIQVc8tCN0jM32oXwEKzxkhZT20l259AriM_jmtHdI0,3808
305
306
  parsl/tests/test_bash_apps/test_stdout.py,sha256=3jVDVjUfoQMDzp-f1Ifr7B6ivMq7U5ZzxXU3ZyUKogU,2787
306
307
  parsl/tests/test_channels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
307
308
  parsl/tests/test_channels/test_large_output.py,sha256=PGeNSW_sN5mR7KF1hVL2CPfktydYxo4oNz1wVQ-ENN0,595
308
309
  parsl/tests/test_checkpointing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
309
- parsl/tests/test_checkpointing/test_periodic.py,sha256=Nb_3_eHYnMUJxYvI3y2Tum6cU07ZUtEawAtYsEsXPd0,1662
310
+ parsl/tests/test_checkpointing/test_periodic.py,sha256=8R9Plxdm-dUvaptJsw-pEKLOjO5q74lHnaB2kxbF5-M,1613
310
311
  parsl/tests/test_checkpointing/test_python_checkpoint_1.py,sha256=7p_q5aFYYoRQpYmkFekuLOsPgTaILbj5-MMVCDP3Bsg,745
311
312
  parsl/tests/test_checkpointing/test_python_checkpoint_2.py,sha256=f1s-qRzIzaCFJauEGU08fhFw6od3yGrMelk792WQuYI,1106
312
313
  parsl/tests/test_checkpointing/test_python_checkpoint_3.py,sha256=8Np2OpDeQ8sE1Hmd5rYZo1qgt2xOuR4t-d-41JyLCHI,823
313
314
  parsl/tests/test_checkpointing/test_regression_232.py,sha256=AsI6AJ0DcFaefAbEY9qWa41ER0VX-4yLuIdlgvBw360,2637
314
315
  parsl/tests/test_checkpointing/test_regression_233.py,sha256=jii7BKuygK6KMIGtg4IeBjix7Z28cYhv57rE9ixoXMU,1774
315
316
  parsl/tests/test_checkpointing/test_regression_239.py,sha256=P5kmf1LOo_qHtArkBLMhdvNbSPtURDU5u2tI8SXZTb0,2441
316
- parsl/tests/test_checkpointing/test_task_exit.py,sha256=3-ldQhX7YVEAowWK2TiZ6nrQQ7ktfWr-qaCShtjJZK8,1721
317
+ parsl/tests/test_checkpointing/test_task_exit.py,sha256=-caWS118ArPzOBfq_QumIjKcWsttXHnlSQg3Un50aR4,1723
317
318
  parsl/tests/test_docs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
318
319
  parsl/tests/test_docs/test_from_slides.py,sha256=0qJHAsSN3eqn4LAFTyCAq1rIUOotBzyQg7d_rJfBoes,653
319
320
  parsl/tests/test_docs/test_kwargs.py,sha256=-rMtAtarg2FOdxMuDLsZY5Crn_jmSwtelMwRNEtTlVk,925
@@ -333,17 +334,17 @@ parsl/tests/test_error_handling/test_serialization_fail.py,sha256=jIJBKK-ItVe8B1
333
334
  parsl/tests/test_error_handling/test_wrap_with_logs.py,sha256=AHQZj7wae759FOcAUeHZX47mx1MKOfDv2YBLnaDVW7Q,741
334
335
  parsl/tests/test_flowcontrol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
336
  parsl/tests/test_htex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
- parsl/tests/test_htex/test_basic.py,sha256=GIOF3cr6A87QDVMxeN0LrvJnXO2Nap0c-TH462OaBK4,464
337
+ parsl/tests/test_htex/test_basic.py,sha256=CTOXEkzrVW_kSp_scz3BGYwc1c6KYopTooXICiAsMso,469
337
338
  parsl/tests/test_htex/test_connected_blocks.py,sha256=0628oJ_0_aVsda5xuFwG3_3q8ZiEAM-sfIOINkUHQrk,1639
338
339
  parsl/tests/test_htex/test_cpu_affinity_explicit.py,sha256=tv12ojw4DdymlVBjVNnrFX7_mhwix2jnBLkRbKOQRao,1422
339
340
  parsl/tests/test_htex/test_disconnected_blocks.py,sha256=iga7wmhGACwUN6gkEFPw1dLodj6SzNZpevgSHNYSyjI,1856
340
341
  parsl/tests/test_htex/test_drain.py,sha256=BvPQIo0xx-z191eVR2rG51x22yzqD-6dLSH7bCAUhOg,2288
341
342
  parsl/tests/test_htex/test_htex.py,sha256=4dXtcthZQvgEDtMc00g6Pw7FnqNWB_0j8fuJqHKO-IE,3896
342
343
  parsl/tests/test_htex/test_manager_failure.py,sha256=gemQopZoDEoZLOvep5JZkY6tQlZoko8Z0Kmpj1-Gbws,1161
343
- parsl/tests/test_htex/test_missing_worker.py,sha256=oiDN3ylsf-72jmX-Y5OWA2kQWpbVbvmoSLnu2vnyZeY,976
344
+ parsl/tests/test_htex/test_missing_worker.py,sha256=R8FaUNnpmXY9E_ZCC797La4jWsJvp136xBhLY9yIgyU,818
344
345
  parsl/tests/test_htex/test_multiple_disconnected_blocks.py,sha256=L4vw_Mo-upp2p9-TyPDfluNJJQ2BxHHNXgS3xhhuE28,1993
345
346
  parsl/tests/test_htex/test_worker_failure.py,sha256=Uz-RHI-LK78FMjXUvrUFmo4iYfmpDVBUcBxxRb3UG9M,603
346
- parsl/tests/test_htex/test_zmq_binding.py,sha256=MQWAL7XxaI1P2k_VUgm5DKD4GVEn5c2Y8MEyOSABRA4,2937
347
+ parsl/tests/test_htex/test_zmq_binding.py,sha256=2-y8HZPzNLrumVqyqG9yZl-lqefSIpez2jr5Ghrtd80,3013
347
348
  parsl/tests/test_monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
348
349
  parsl/tests/test_monitoring/test_app_names.py,sha256=4Ziggxv0JLP0UGAd5jjXdivUdZQLlMvVVMfiTStjxRk,2191
349
350
  parsl/tests/test_monitoring/test_basic.py,sha256=8LHlS5VM1isVhOZuWCXHMUlV10AGMFNq-8n5ZX9HdLA,3768
@@ -352,6 +353,7 @@ parsl/tests/test_monitoring/test_fuzz_zmq.py,sha256=20Y2TCpOOQpWPLEppi-9InCHPb8H
352
353
  parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py,sha256=Lfa6ENZWrExRsZcISMdF_G4VjswzSb0wlRSQFoZXkyQ,2765
353
354
  parsl/tests/test_monitoring/test_incomplete_futures.py,sha256=9lJhkWlVB8gCCTkFjObzoh1uCL1pRmU6gFgEzLCztnY,2021
354
355
  parsl/tests/test_monitoring/test_memoization_representation.py,sha256=tErT7zseSMaQ5eNmK3hH90J6OZKuAaFQG50OXK6Jy9s,2660
356
+ parsl/tests/test_monitoring/test_stdouterr.py,sha256=bx2BKZ_iIuS8FZlxdt7n1QsUwTnWaXnORdrlJCTw5aU,4517
355
357
  parsl/tests/test_monitoring/test_viz_colouring.py,sha256=k8SiELxPtnGYZ4r02VQt46RC61fGDVC4nmY768snX1U,591
356
358
  parsl/tests/test_mpi_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
357
359
  parsl/tests/test_mpi_apps/test_bad_mpi_config.py,sha256=mB-ASx0S-wh1iP6MYZ-CdOwMye3xgteQK-jqufzWNO8,1317
@@ -359,7 +361,7 @@ parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py,sha256=bMO66LHEvdVsV8sMFxESF
359
361
  parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py,sha256=V8dccWWVSCfKkWPJUaL1nHc7YeFL8KZhMB-xwIIKF4A,5034
360
362
  parsl/tests/test_mpi_apps/test_mpi_prefix.py,sha256=OJ95-95t7DmDF86uYCtT2iRcY2gn9LFH45OWyjjL2h8,1950
361
363
  parsl/tests/test_mpi_apps/test_mpi_scheduler.py,sha256=dZ8_mzLMx5Us7mra2nPfxaeWZnhZyqNJ8vPWkWHaEB8,6317
362
- parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=S-78HjvieW3OVD-BXj8Ln5lSZV-q-E7Ai7LrDXdFIVM,3710
364
+ parsl/tests/test_mpi_apps/test_resource_spec.py,sha256=8AKIXWFq9Tat8Mj0IRp-epNGVGFTqcxqZgF7jiLjE4Q,3607
363
365
  parsl/tests/test_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
364
366
  parsl/tests/test_providers/test_cobalt_deprecation_warning.py,sha256=Fy5XXDkVs3KIX3tHyRjyReXEr35X1LWyEXcVXmWccDs,389
365
367
  parsl/tests/test_providers/test_local_provider.py,sha256=G6Fuko22SvAtD7xhfQv8k_8HtJuFhZ8aHYcWQt073Pg,6968
@@ -370,7 +372,7 @@ parsl/tests/test_providers/test_submiterror_deprecation.py,sha256=ZutVj_0VJ7M-5U
370
372
  parsl/tests/test_python_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
371
373
  parsl/tests/test_python_apps/test_arg_input_types.py,sha256=JXpfHiu8lr9BN6u1OzqFvGwBhxzsGTPMewHx6Wdo-HI,670
372
374
  parsl/tests/test_python_apps/test_basic.py,sha256=lFqh4ugePbp_FRiHGUXxzV34iS7l8C5UkxTHuLcpnYs,855
373
- parsl/tests/test_python_apps/test_context_manager.py,sha256=iMBjOFmqEO2rDGPJwDySa1kWz-dRnZZNEWDPipS_Xi4,877
375
+ parsl/tests/test_python_apps/test_context_manager.py,sha256=LzJ3WtR1LYiQF_lbmrd5h4mlC7_h_GvzoeUPQZ5vPsw,928
374
376
  parsl/tests/test_python_apps/test_dep_standard_futures.py,sha256=BloeaYBci0jS5al2d8Eqe3OfZ1tvolA5ZflOBQPR9Wo,859
375
377
  parsl/tests/test_python_apps/test_dependencies.py,sha256=IRiTI_lPoWBSFSFnaBlE6Bv08PKEaf-qj5dfqO2RjT0,272
376
378
  parsl/tests/test_python_apps/test_depfail_propagation.py,sha256=3q3HlVWrOixFtXWBvR_ypKtbdAHAJcKndXQ5drwrBQU,1488
@@ -410,7 +412,7 @@ parsl/tests/test_regression/test_97_parallelism_0.py,sha256=PwHxwQirqLJUeBhsNSzU
410
412
  parsl/tests/test_regression/test_98.py,sha256=ZNTA-USpmH85Mt0nu3KFQ1qqmXsyHtYMZWZY0grzuYA,453
411
413
  parsl/tests/test_scaling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
412
414
  parsl/tests/test_scaling/test_block_error_handler.py,sha256=VFKs_jq7yd7bpdfYva3Sa_TBS8VcjGUS6YJ9Y34RbyI,6050
413
- parsl/tests/test_scaling/test_regression_1621.py,sha256=iRu3GFsg2l9J61AVZKWLc6zJcvI2JYD0WvtTYDSv22I,1770
415
+ parsl/tests/test_scaling/test_regression_1621.py,sha256=Z7nLhn2dxTVApo2XA55vzLziW6_QBQcZHoMsRQ066b0,1963
414
416
  parsl/tests/test_scaling/test_scale_down.py,sha256=T8NVmoIebdpSjrNJCdgDHumpz9eKLkJrpeW7Kwi8cBg,2821
415
417
  parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py,sha256=1vP2a8qygnxuUji7B3kJOUgwjmmIC1fDPhDdqzs5YFA,4597
416
418
  parsl/tests/test_scaling/test_scale_down_htex_unregistered.py,sha256=lGl7m9PRPs4MxAEK7QpSXAxGgCSbabxxYN-ExZUYAUs,2030
@@ -438,20 +440,26 @@ parsl/tests/test_staging/test_staging_ftp.py,sha256=EkRoTcQ00FZGh8lDVYBdKb-pQ-yb
438
440
  parsl/tests/test_staging/test_staging_ftp_in_task.py,sha256=kR2XrGvbvVFDpHg53NnjO04kqEksTJjQAMQwYqBdb2M,884
439
441
  parsl/tests/test_staging/test_staging_globus.py,sha256=ds8nDH5dNbI10FV_GxMHyVaY6GPnuPPzkX9IiqROLF0,2339
440
442
  parsl/tests/test_staging/test_staging_https.py,sha256=ESNuvdc_P5JoPaMjBM3ofi1mNJM0U6vahi9JgbCsrPw,3307
443
+ parsl/tests/test_staging/test_staging_stdout.py,sha256=i4ksb9ehu-bKPgALxm6ADB12EQVTM_xusyFGmSwByLs,2025
444
+ parsl/tests/test_staging/test_zip_in.py,sha256=xLTXXAHgMyg5XAMTB_oq3oEhrNfq8JGMnuRu2vu5tdo,1143
441
445
  parsl/tests/test_staging/test_zip_out.py,sha256=qR_iK8wqKOxisMBD5MqKr2RoyoTUmRejAj_O3jgJA2A,3512
446
+ parsl/tests/test_staging/test_zip_to_zip.py,sha256=Hz3fYvj-ePpfV4Hh6Fs1vM8iZ14iRxPkJhaI0spr8dE,1168
442
447
  parsl/tests/test_threads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
443
448
  parsl/tests/test_threads/test_configs.py,sha256=QA9YjIMAtZ2jmkfOWqBzEfzQQcFVCDizH7Qwiy2HIMQ,909
444
449
  parsl/tests/test_threads/test_lazy_errors.py,sha256=nGhYfCMHFZYSy6YJ4gnAmiLl9SfYs0WVnuvj8DXQ9bw,560
445
450
  parsl/tests/test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
446
451
  parsl/tests/test_utils/test_representation_mixin.py,sha256=kUZeIDwA2rlbJ3-beGzLLwf3dOplTMCrWJN87etHcyY,1633
452
+ parsl/tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
453
+ parsl/tests/unit/test_file.py,sha256=vLycnYcv3bvSzL-FV8WdoibqTyb41BrH1LUYBavobsg,2850
447
454
  parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
448
- parsl/usage_tracking/usage.py,sha256=pSADeogWqvkYI_n2pojv4IWDEFAQ3KwXNx6LDTohMHQ,6684
449
- parsl-2024.4.15.data/scripts/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
450
- parsl-2024.4.15.data/scripts/parsl_coprocess.py,sha256=Y7Tc-h9WGui-YDe3w_h91w2Sm1JNL1gJ9kAV4PE_gw8,5722
451
- parsl-2024.4.15.data/scripts/process_worker_pool.py,sha256=31tyTtU7hrrsatGReuCbLM-3GWkaYK1bvlFE1MhKYQg,41253
452
- parsl-2024.4.15.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
453
- parsl-2024.4.15.dist-info/METADATA,sha256=TiwDQJFqwAV662D9zzs8kMLQUWiRCKLh8Xpn1J8fneI,4008
454
- parsl-2024.4.15.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
455
- parsl-2024.4.15.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
456
- parsl-2024.4.15.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
457
- parsl-2024.4.15.dist-info/RECORD,,
455
+ parsl/usage_tracking/api.py,sha256=V_IMgpxUloP--MtlZGY5Uf6SfHVQSPP8poa3PedOs_I,1822
456
+ parsl/usage_tracking/usage.py,sha256=IGNPVEo3YJ3SI48WGESrip7PiCqEAheQ0Kgu8dRgQag,7616
457
+ parsl-2024.4.29.data/scripts/exec_parsl_function.py,sha256=NtWNeBvRqksej38eRPw8zPBJ1CeW6vgaitve0tfz_qc,7801
458
+ parsl-2024.4.29.data/scripts/parsl_coprocess.py,sha256=Y7Tc-h9WGui-YDe3w_h91w2Sm1JNL1gJ9kAV4PE_gw8,5722
459
+ parsl-2024.4.29.data/scripts/process_worker_pool.py,sha256=31tyTtU7hrrsatGReuCbLM-3GWkaYK1bvlFE1MhKYQg,41253
460
+ parsl-2024.4.29.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
461
+ parsl-2024.4.29.dist-info/METADATA,sha256=77gJi-9dKlrSb6gATxE7Rhq8lVIdziv7RbmtMtHPnCA,4012
462
+ parsl-2024.4.29.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
463
+ parsl-2024.4.29.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
464
+ parsl-2024.4.29.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
465
+ parsl-2024.4.29.dist-info/RECORD,,