lsst-ctrl-bps-parsl 30.0.0rc3__py3-none-any.whl → 30.0.1rc1__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.
- lsst/ctrl/bps/parsl/configuration.py +11 -11
- lsst/ctrl/bps/parsl/job.py +16 -14
- lsst/ctrl/bps/parsl/site.py +6 -6
- lsst/ctrl/bps/parsl/sites/ccin2p3.py +18 -17
- lsst/ctrl/bps/parsl/sites/local.py +11 -1
- lsst/ctrl/bps/parsl/sites/princeton.py +1 -1
- lsst/ctrl/bps/parsl/sites/slac.py +1 -1
- lsst/ctrl/bps/parsl/sites/slurm.py +20 -8
- lsst/ctrl/bps/parsl/sites/torque.py +54 -16
- lsst/ctrl/bps/parsl/sites/work_queue.py +12 -12
- lsst/ctrl/bps/parsl/version.py +1 -1
- lsst/ctrl/bps/parsl/workflow.py +10 -9
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/METADATA +3 -3
- lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/RECORD +26 -0
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/WHEEL +1 -1
- lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/RECORD +0 -26
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/licenses/COPYRIGHT +0 -0
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/licenses/LICENSE +0 -0
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/licenses/bsd_license.txt +0 -0
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/licenses/gpl-v3.0.txt +0 -0
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/top_level.txt +0 -0
- {lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/zip-safe +0 -0
|
@@ -89,32 +89,32 @@ def get_bps_config_value(
|
|
|
89
89
|
|
|
90
90
|
Parameters
|
|
91
91
|
----------
|
|
92
|
-
config : `BpsConfig`
|
|
92
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
93
93
|
Configuration from which to retrieve value.
|
|
94
94
|
key : `str`
|
|
95
95
|
Key name.
|
|
96
96
|
dataType : `type`
|
|
97
97
|
We require that the returned value have this type.
|
|
98
|
-
default : optional
|
|
98
|
+
default : `typing.Any`, optional
|
|
99
99
|
Default value to be provided if ``key`` doesn't exist in the
|
|
100
100
|
``config``. A default value of `None` means that there is no default.
|
|
101
101
|
required : `bool`, optional
|
|
102
|
-
If
|
|
102
|
+
If `True`, the returned value may come from the configuration or from
|
|
103
103
|
the default, but it may not be `None`.
|
|
104
104
|
|
|
105
105
|
Returns
|
|
106
106
|
-------
|
|
107
|
-
|
|
108
|
-
Value for ``key`` in the
|
|
109
|
-
if provided.
|
|
107
|
+
`type` or `None`
|
|
108
|
+
Value for ``key`` in the ``config`` if it exists, otherwise
|
|
109
|
+
``default``, if provided.
|
|
110
110
|
|
|
111
111
|
Raises
|
|
112
112
|
------
|
|
113
113
|
KeyError
|
|
114
|
-
|
|
115
|
-
is ``required``.
|
|
114
|
+
Raised if ``key`` is not in ``config`` and no default is provided but
|
|
115
|
+
a value is ``required``.
|
|
116
116
|
RuntimeError
|
|
117
|
-
|
|
117
|
+
Raised if the value is not set or is of the wrong type.
|
|
118
118
|
"""
|
|
119
119
|
options: dict[str, Any] = {"expandEnvVars": True, "replaceVars": True, "required": required}
|
|
120
120
|
if default is not None:
|
|
@@ -138,7 +138,7 @@ def get_workflow_name(config: BpsConfig) -> str:
|
|
|
138
138
|
|
|
139
139
|
Parameters
|
|
140
140
|
----------
|
|
141
|
-
config : `BpsConfig`
|
|
141
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
142
142
|
BPS configuration.
|
|
143
143
|
|
|
144
144
|
Returns
|
|
@@ -177,7 +177,7 @@ def set_parsl_logging(config: BpsConfig) -> int:
|
|
|
177
177
|
|
|
178
178
|
Parameters
|
|
179
179
|
----------
|
|
180
|
-
config : `BpsConfig`
|
|
180
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
181
181
|
BPS configuration.
|
|
182
182
|
|
|
183
183
|
Returns
|
lsst/ctrl/bps/parsl/job.py
CHANGED
|
@@ -35,7 +35,7 @@ from textwrap import dedent
|
|
|
35
35
|
from typing import Any
|
|
36
36
|
|
|
37
37
|
from parsl.app.bash import BashApp
|
|
38
|
-
from parsl.
|
|
38
|
+
from parsl.dataflow.futures import AppFuture
|
|
39
39
|
|
|
40
40
|
from lsst.ctrl.bps import BpsConfig, GenericWorkflow, GenericWorkflowJob
|
|
41
41
|
|
|
@@ -49,7 +49,7 @@ _file_regex = re.compile(r"<FILE:(\S+)>") # Regex for replacing <FILE:WHATEVER>
|
|
|
49
49
|
|
|
50
50
|
def run_command(
|
|
51
51
|
command_line: str,
|
|
52
|
-
inputs: Sequence[
|
|
52
|
+
inputs: Sequence[AppFuture] = (),
|
|
53
53
|
stdout: str | None = None,
|
|
54
54
|
stderr: str | None = None,
|
|
55
55
|
parsl_resource_specification: dict[str, Any] | None = None,
|
|
@@ -58,13 +58,14 @@ def run_command(
|
|
|
58
58
|
|
|
59
59
|
This function exists to get information into parsl, through the ``inputs``,
|
|
60
60
|
``stdout`` and ``stderr`` parameters. It needs to be wrapped by a parsl
|
|
61
|
-
``bash_app`` decorator before use, after which it will return a
|
|
61
|
+
``bash_app`` decorator before use, after which it will return a
|
|
62
|
+
`parsl.dataflow.futures.AppFuture`.
|
|
62
63
|
|
|
63
64
|
Parameters
|
|
64
65
|
----------
|
|
65
66
|
command_line : `str`
|
|
66
67
|
Command-line to have parsl run.
|
|
67
|
-
inputs : list
|
|
68
|
+
inputs : `list` [`parsl.dataflow.futures.AppFuture`]
|
|
68
69
|
Other commands that must have run before this.
|
|
69
70
|
stdout, stderr : `str`, optional
|
|
70
71
|
Filenames for stdout and stderr.
|
|
@@ -84,7 +85,7 @@ def get_file_paths(workflow: GenericWorkflow, name: str) -> dict[str, str]:
|
|
|
84
85
|
|
|
85
86
|
Parameters
|
|
86
87
|
----------
|
|
87
|
-
workflow : `GenericWorkflow`
|
|
88
|
+
workflow : `lsst.ctrl.bps.GenericWorkflow`
|
|
88
89
|
BPS workflow that knows the file paths.
|
|
89
90
|
name : `str`
|
|
90
91
|
Job name.
|
|
@@ -102,9 +103,9 @@ class ParslJob:
|
|
|
102
103
|
|
|
103
104
|
Parameters
|
|
104
105
|
----------
|
|
105
|
-
generic : `GenericWorkflowJob`
|
|
106
|
+
generic : `lsst.ctrl.bps.GenericWorkflowJob`
|
|
106
107
|
BPS job information.
|
|
107
|
-
config : `BpsConfig`
|
|
108
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
108
109
|
BPS configuration.
|
|
109
110
|
file_paths : `dict` mapping `str` to `str`
|
|
110
111
|
File paths for job, indexed by symbolic name.
|
|
@@ -254,10 +255,10 @@ class ParslJob:
|
|
|
254
255
|
def get_future(
|
|
255
256
|
self,
|
|
256
257
|
app: BashApp,
|
|
257
|
-
inputs: list[
|
|
258
|
+
inputs: list[AppFuture],
|
|
258
259
|
command_prefix: str | None = None,
|
|
259
260
|
resource_list: list | None = None,
|
|
260
|
-
) ->
|
|
261
|
+
) -> AppFuture | None:
|
|
261
262
|
"""Get the parsl app future for the job.
|
|
262
263
|
|
|
263
264
|
This effectively queues the job for execution by a worker, subject to
|
|
@@ -265,9 +266,9 @@ class ParslJob:
|
|
|
265
266
|
|
|
266
267
|
Parameters
|
|
267
268
|
----------
|
|
268
|
-
app :
|
|
269
|
+
app : `parsl.app.bash.BashApp`
|
|
269
270
|
A parsl bash_app decorator to use.
|
|
270
|
-
inputs : list
|
|
271
|
+
inputs : `list` [ `parsl.dataflow.futures.AppFuture` ]
|
|
271
272
|
Dependencies to be satisfied before executing this job.
|
|
272
273
|
command_prefix : `str`, optional
|
|
273
274
|
Bash commands to execute before the job command, e.g., for setting
|
|
@@ -277,9 +278,10 @@ class ParslJob:
|
|
|
277
278
|
|
|
278
279
|
Returns
|
|
279
280
|
-------
|
|
280
|
-
future : `
|
|
281
|
-
A `
|
|
282
|
-
the job has already been done (e.g., by
|
|
281
|
+
future : `parsl.dataflow.futures.AppFuture` or `None`
|
|
282
|
+
A `parsl.dataflow.futures.AppFuture` object linked to the execution
|
|
283
|
+
of the job, or `None` if the job has already been done (e.g., by
|
|
284
|
+
``run_local``).
|
|
283
285
|
"""
|
|
284
286
|
if self.done:
|
|
285
287
|
return None # Nothing to do
|
lsst/ctrl/bps/parsl/site.py
CHANGED
|
@@ -54,7 +54,7 @@ class SiteConfig(ABC):
|
|
|
54
54
|
|
|
55
55
|
Parameters
|
|
56
56
|
----------
|
|
57
|
-
config : `BpsConfig`
|
|
57
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
58
58
|
BPS configuration.
|
|
59
59
|
resource_list : `list`, optional
|
|
60
60
|
List of parsl resource specifications to pass to the executor.
|
|
@@ -74,12 +74,12 @@ class SiteConfig(ABC):
|
|
|
74
74
|
|
|
75
75
|
Parameters
|
|
76
76
|
----------
|
|
77
|
-
config : `BpsConfig`
|
|
77
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
78
78
|
BPS configuration.
|
|
79
79
|
|
|
80
80
|
Returns
|
|
81
81
|
-------
|
|
82
|
-
site : `BpsConfig`
|
|
82
|
+
site : `lsst.ctrl.bps.BpsConfig`
|
|
83
83
|
Site sub-configuration.
|
|
84
84
|
"""
|
|
85
85
|
computeSite = get_bps_config_value(config, "computeSite", str, required=True)
|
|
@@ -97,7 +97,7 @@ class SiteConfig(ABC):
|
|
|
97
97
|
|
|
98
98
|
Parameters
|
|
99
99
|
----------
|
|
100
|
-
config : `BpsConfig`
|
|
100
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
101
101
|
BPS configuration.
|
|
102
102
|
|
|
103
103
|
Returns
|
|
@@ -126,7 +126,7 @@ class SiteConfig(ABC):
|
|
|
126
126
|
|
|
127
127
|
Parameters
|
|
128
128
|
----------
|
|
129
|
-
job : `ParslJob`
|
|
129
|
+
job : `lsst.ctrl.bps.parsl.ParslJob`
|
|
130
130
|
Job to be executed.
|
|
131
131
|
|
|
132
132
|
Returns
|
|
@@ -185,7 +185,7 @@ class SiteConfig(ABC):
|
|
|
185
185
|
|
|
186
186
|
Returns
|
|
187
187
|
-------
|
|
188
|
-
monitor : `MonitoringHub` or `None`
|
|
188
|
+
monitor : `parsl.monitoring.MonitoringHub` or `None`
|
|
189
189
|
Parsl monitor, or `None` for no monitor.
|
|
190
190
|
"""
|
|
191
191
|
if not get_bps_config_value(self.site, "monitorEnable", bool, False):
|
|
@@ -11,7 +11,7 @@ from ..configuration import get_bps_config_value
|
|
|
11
11
|
from ..site import SiteConfig
|
|
12
12
|
|
|
13
13
|
if TYPE_CHECKING:
|
|
14
|
-
from
|
|
14
|
+
from ..job import ParslJob
|
|
15
15
|
|
|
16
16
|
__all__ = ("Ccin2p3",)
|
|
17
17
|
|
|
@@ -46,7 +46,7 @@ class Ccin2p3(SiteConfig):
|
|
|
46
46
|
If you do need to modify those defaults, you can overwrite them for
|
|
47
47
|
all job slots or for specific each job slots. Requirements specified
|
|
48
48
|
for a job slot take priority over those specified for all job slots
|
|
49
|
-
at the level of entry
|
|
49
|
+
at the level of entry ``.site.ccin2p3:``.
|
|
50
50
|
|
|
51
51
|
This is an example of how to overwrite selected requirements in your BPS
|
|
52
52
|
submission file:
|
|
@@ -79,40 +79,41 @@ class Ccin2p3(SiteConfig):
|
|
|
79
79
|
- "--licenses=my_product"
|
|
80
80
|
- "--reservation=my_reservation"
|
|
81
81
|
|
|
82
|
-
At the level of entry
|
|
82
|
+
At the level of entry ``site.ccin2p3:`` in the BPS submission file, the
|
|
83
83
|
following configuration parameters are accepted, which apply to all slot
|
|
84
84
|
sizes:
|
|
85
85
|
|
|
86
|
-
-
|
|
86
|
+
- ``partition`` (`str`): name of the one or more configured partitions. If
|
|
87
87
|
more than one, separate them with comma (',').
|
|
88
88
|
(Default: "lsst,htc")
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
- ``walltime`` (`str`): walltime to require for the job
|
|
90
|
+
(Default: "72:00:00")
|
|
91
|
+
- ``scheduler_options`` (`list` [`str`] ): scheduler options to send to
|
|
92
|
+
Slurm for scheduling purposes.
|
|
92
93
|
(Default: "--licenses=sps")
|
|
93
94
|
|
|
94
95
|
In addition, as shown in the previous example, for each job slot (i.e.
|
|
95
96
|
"small", "medium", etc.) you can specify the requirements above as well as
|
|
96
97
|
the following:
|
|
97
98
|
|
|
98
|
-
-
|
|
99
|
-
simultaneously use.
|
|
100
|
-
-
|
|
101
|
-
(Defaults: 4 for "small", 10 for "medium", 50
|
|
99
|
+
- ``max_blocks`` (`int`): maximum number of Slurm jobs that your workflow
|
|
100
|
+
can simultaneously use.
|
|
101
|
+
- ``memory`` (`int`): required amount of memory for each job, in Gigabytes.
|
|
102
|
+
(Defaults: 4 for "small", 10 for "medium", 50 for "large" and
|
|
102
103
|
150 for "xlarge").
|
|
103
104
|
|
|
104
105
|
Parameters
|
|
105
106
|
----------
|
|
106
|
-
*args
|
|
107
|
+
*args
|
|
107
108
|
Arguments to initialize the super-class.
|
|
108
|
-
**kwargs
|
|
109
|
+
**kwargs
|
|
109
110
|
Keyword arguments to initialize the super-class.
|
|
110
111
|
|
|
111
112
|
Returns
|
|
112
113
|
-------
|
|
113
|
-
Ccin2p3 : `SiteConfig`
|
|
114
|
-
Concrete instance of a
|
|
115
|
-
farm.
|
|
114
|
+
Ccin2p3 : `lsst.ctrl.bps.parsl.SiteConfig`
|
|
115
|
+
Concrete instance of a `~lsst.ctrl.bps.parsl.SiteConfig` specific for
|
|
116
|
+
the CC-IN2P3 Slurm farm.
|
|
116
117
|
"""
|
|
117
118
|
|
|
118
119
|
DEFAULT_ACCOUNT: str = "lsst"
|
|
@@ -316,7 +317,7 @@ class Ccin2p3(SiteConfig):
|
|
|
316
317
|
|
|
317
318
|
Parameters
|
|
318
319
|
----------
|
|
319
|
-
job : `ParslJob`
|
|
320
|
+
job : `lsst.ctrl.bps.parsl.ParslJob`
|
|
320
321
|
Job to be executed.
|
|
321
322
|
|
|
322
323
|
Returns
|
|
@@ -43,6 +43,16 @@ __all__ = ("Local",)
|
|
|
43
43
|
class Local(SiteConfig):
|
|
44
44
|
"""Configuration for running jobs on the local machine.
|
|
45
45
|
|
|
46
|
+
Parameters
|
|
47
|
+
----------
|
|
48
|
+
*args : `~typing.Any`
|
|
49
|
+
Parameters forwarded to base class constructor.
|
|
50
|
+
**kwargs : `~typing.Any`
|
|
51
|
+
Keyword arguments passed to base class constructor, augmented by
|
|
52
|
+
the ``resource_list`` argument.
|
|
53
|
+
|
|
54
|
+
Notes
|
|
55
|
+
-----
|
|
46
56
|
The number of cores to use is specified in the site configuration, under
|
|
47
57
|
``site.<computeSite>.cores`` (`int`).
|
|
48
58
|
"""
|
|
@@ -65,7 +75,7 @@ class Local(SiteConfig):
|
|
|
65
75
|
|
|
66
76
|
Parameters
|
|
67
77
|
----------
|
|
68
|
-
job : `ParslJob`
|
|
78
|
+
job : `lsst.ctrl.bps.parsl.ParslJob`
|
|
69
79
|
Job to be executed.
|
|
70
80
|
|
|
71
81
|
Returns
|
|
@@ -46,6 +46,16 @@ Kwargs = dict[str, Any]
|
|
|
46
46
|
class Slurm(SiteConfig):
|
|
47
47
|
"""Configuration for generic Slurm cluster.
|
|
48
48
|
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
*args : `~typing.Any`
|
|
52
|
+
Parameters forwarded to base class constructor.
|
|
53
|
+
**kwargs : `~typing.Any`
|
|
54
|
+
Keyword arguments passed to base class constructor, augmented by
|
|
55
|
+
the ``resource_list`` argument.
|
|
56
|
+
|
|
57
|
+
Notes
|
|
58
|
+
-----
|
|
49
59
|
This can be used directly as the site configuration for a Slurm cluster by
|
|
50
60
|
setting the BPS config, e.g.:
|
|
51
61
|
|
|
@@ -126,13 +136,15 @@ class Slurm(SiteConfig):
|
|
|
126
136
|
scheduler_options : `str`, optional
|
|
127
137
|
``#SBATCH`` directives to prepend to the Slurm submission script.
|
|
128
138
|
provider_options : `dict`, optional
|
|
129
|
-
Additional arguments for `SlurmProvider`
|
|
139
|
+
Additional arguments for `parsl.providers.SlurmProvider`
|
|
140
|
+
constructor.
|
|
130
141
|
executor_options : `dict`, optional
|
|
131
|
-
Additional arguments for `HighThroughputExecutor`
|
|
142
|
+
Additional arguments for `parsl.executors.HighThroughputExecutor`
|
|
143
|
+
constructor.
|
|
132
144
|
|
|
133
145
|
Returns
|
|
134
146
|
-------
|
|
135
|
-
executor : `HighThroughputExecutor`
|
|
147
|
+
executor : `parsl.executors.HighThroughputExecutor`
|
|
136
148
|
Executor for Slurm jobs.
|
|
137
149
|
"""
|
|
138
150
|
nodes = get_bps_config_value(self.site, "nodes", int, nodes, required=True)
|
|
@@ -191,7 +203,7 @@ class Slurm(SiteConfig):
|
|
|
191
203
|
|
|
192
204
|
Parameters
|
|
193
205
|
----------
|
|
194
|
-
job : `ParslJob`
|
|
206
|
+
job : `lsst.ctrl.bps.parsl.ParslJob`
|
|
195
207
|
Job to be executed.
|
|
196
208
|
|
|
197
209
|
Returns
|
|
@@ -265,11 +277,11 @@ class TripleSlurm(Slurm):
|
|
|
265
277
|
|
|
266
278
|
Parameters
|
|
267
279
|
----------
|
|
268
|
-
small_options :
|
|
280
|
+
small_options : `dict` [`str`, `typing.Any`]
|
|
269
281
|
Options for ``make_executor`` for small executor.
|
|
270
|
-
medium_options :
|
|
282
|
+
medium_options : `dict` [`str`, `typing.Any`]
|
|
271
283
|
Options for ``make_executor`` for medium executor.
|
|
272
|
-
large_options :
|
|
284
|
+
large_options : `dict` [`str`, `typing.Any`]
|
|
273
285
|
Options for ``make_executor`` for large executor.
|
|
274
286
|
**common_options
|
|
275
287
|
Common options for ``make_executor`` for each of the executors.
|
|
@@ -302,7 +314,7 @@ class TripleSlurm(Slurm):
|
|
|
302
314
|
|
|
303
315
|
Parameters
|
|
304
316
|
----------
|
|
305
|
-
job : `ParslJob`
|
|
317
|
+
job : `lsst.ctrl.bps.parsl.ParslJob`
|
|
306
318
|
Job to be executed.
|
|
307
319
|
|
|
308
320
|
Returns
|
|
@@ -47,6 +47,16 @@ Kwargs = dict[str, Any]
|
|
|
47
47
|
class Torque(SiteConfig):
|
|
48
48
|
"""Configuration for generic Torque cluster.
|
|
49
49
|
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
*args : `~typing.Any`
|
|
53
|
+
Parameters forwarded to base class constructor.
|
|
54
|
+
**kwargs : `~typing.Any`
|
|
55
|
+
Keyword arguments passed to base class constructor, augmented by
|
|
56
|
+
the ``resource_list`` argument.
|
|
57
|
+
|
|
58
|
+
Notes
|
|
59
|
+
-----
|
|
50
60
|
This can be used directly as the site configuration for a Torque cluster by
|
|
51
61
|
setting the BPS config, e.g.:
|
|
52
62
|
|
|
@@ -110,18 +120,20 @@ class Torque(SiteConfig):
|
|
|
110
120
|
Default time limit for each Torque job.
|
|
111
121
|
mem_per_worker : `float`, optional
|
|
112
122
|
Minimum memory per worker (GB), limited by the executor.
|
|
113
|
-
worker_init : `str`, optional
|
|
114
|
-
Environment initiation command
|
|
115
123
|
scheduler_options : `str`, optional
|
|
116
124
|
``#SBATCH`` directives to prepend to the Torque submission script.
|
|
125
|
+
worker_init : `str`, optional
|
|
126
|
+
Environment initiation command.
|
|
117
127
|
provider_options : `dict`, optional
|
|
118
|
-
Additional arguments for `TorqueProvider`
|
|
128
|
+
Additional arguments for `parsl.providers.TorqueProvider`
|
|
129
|
+
constructor.
|
|
119
130
|
executor_options : `dict`, optional
|
|
120
|
-
Additional arguments for `HighThroughputExecutor`
|
|
131
|
+
Additional arguments for `parsl.executors.HighThroughputExecutor`
|
|
132
|
+
constructor.
|
|
121
133
|
|
|
122
134
|
Returns
|
|
123
135
|
-------
|
|
124
|
-
executor : `HighThroughputExecutor`
|
|
136
|
+
executor : `parsl.executors.HighThroughputExecutor`
|
|
125
137
|
Executor for Torque jobs.
|
|
126
138
|
"""
|
|
127
139
|
nodes = get_bps_config_value(self.site, "nodes", int, nodes, required=True)
|
|
@@ -179,7 +191,7 @@ class Torque(SiteConfig):
|
|
|
179
191
|
|
|
180
192
|
Parameters
|
|
181
193
|
----------
|
|
182
|
-
job : `ParslJob`
|
|
194
|
+
job : `lsst.ctrl.bps.parsl.ParslJob`
|
|
183
195
|
Job to be executed.
|
|
184
196
|
|
|
185
197
|
Returns
|
|
@@ -191,8 +203,20 @@ class Torque(SiteConfig):
|
|
|
191
203
|
|
|
192
204
|
|
|
193
205
|
class PbsTorqueProvider(TorqueProvider):
|
|
194
|
-
"""Torque Execution Provider
|
|
195
|
-
|
|
206
|
+
"""Torque Execution Provider.
|
|
207
|
+
|
|
208
|
+
Parameters
|
|
209
|
+
----------
|
|
210
|
+
*args : `~typing.Any`
|
|
211
|
+
Parameters forwarded to base class constructor.
|
|
212
|
+
tasks_per_node : `int`, optional
|
|
213
|
+
Number of tasks per node.
|
|
214
|
+
**kwargs : `~typing.Any`
|
|
215
|
+
Keyword arguments passed to base class constructor, augmented by
|
|
216
|
+
the ``resource_list`` argument.
|
|
217
|
+
|
|
218
|
+
Notes
|
|
219
|
+
-----
|
|
196
220
|
This provider uses qsub to submit, qstat for status, and qdel to cancel
|
|
197
221
|
jobs. The qsub script to be used is created from a template file in this
|
|
198
222
|
same module.
|
|
@@ -208,12 +232,6 @@ class PbsTorqueProvider(TorqueProvider):
|
|
|
208
232
|
def submit(self, command, tasks_per_node, job_name="parsl.torque"):
|
|
209
233
|
"""Submit the command onto an Local Resource Manager job.
|
|
210
234
|
|
|
211
|
-
This function returns an ID that corresponds to the task that was just
|
|
212
|
-
submitted.
|
|
213
|
-
|
|
214
|
-
The ``tasks_per_node`` parameter is ignored in this provider, as it is
|
|
215
|
-
set at construction time.
|
|
216
|
-
|
|
217
235
|
Parameters
|
|
218
236
|
----------
|
|
219
237
|
command : `str`
|
|
@@ -226,9 +244,17 @@ class PbsTorqueProvider(TorqueProvider):
|
|
|
226
244
|
|
|
227
245
|
Returns
|
|
228
246
|
-------
|
|
229
|
-
|
|
230
|
-
|
|
247
|
+
response : `str` or `None`
|
|
248
|
+
If `None`: At capacity, cannot provision more.
|
|
249
|
+
If job_id (`str`): Identifier for the job.
|
|
250
|
+
|
|
251
|
+
Notes
|
|
252
|
+
-----
|
|
253
|
+
This function returns an ID that corresponds to the task that was just
|
|
254
|
+
submitted.
|
|
231
255
|
|
|
256
|
+
The ``tasks_per_node`` parameter is ignored in this provider, as it is
|
|
257
|
+
set at construction time.
|
|
232
258
|
"""
|
|
233
259
|
return super().submit(
|
|
234
260
|
command=command,
|
|
@@ -241,10 +267,22 @@ class PbsMpiRunLauncher(MpiRunLauncher):
|
|
|
241
267
|
"""Worker launcher that wraps the user's command with the framework to
|
|
242
268
|
launch multiple command invocations via ``mpirun``.
|
|
243
269
|
|
|
270
|
+
Parameters
|
|
271
|
+
----------
|
|
272
|
+
debug : `bool`, optional
|
|
273
|
+
Enable or disable debug logging.
|
|
274
|
+
bash_location : `str`, optional
|
|
275
|
+
Path to the ``bash`` shell binary.
|
|
276
|
+
overrides : `str`, optional
|
|
277
|
+
Any override options.
|
|
278
|
+
|
|
279
|
+
Notes
|
|
280
|
+
-----
|
|
244
281
|
This wrapper sets the bash env variable ``CORES`` to the number of cores on
|
|
245
282
|
the machine.
|
|
246
283
|
|
|
247
284
|
This launcher makes the following assumptions:
|
|
285
|
+
|
|
248
286
|
- mpirun is installed and can be located in ``$PATH``
|
|
249
287
|
- The provider makes available the ``$PBS_NODEFILE`` environment variable
|
|
250
288
|
"""
|
|
@@ -47,11 +47,11 @@ __all__ = ("LocalSrunWorkQueue", "WorkQueue")
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
class WorkQueue(SiteConfig):
|
|
50
|
-
"""Base class configuraton for `WorkQueueExecutor`.
|
|
50
|
+
"""Base class configuraton for `parsl.executors.WorkQueueExecutor`.
|
|
51
51
|
|
|
52
52
|
Subclasses must provide implementations for ``.get_executors``
|
|
53
53
|
and ``.select_executor``. In ``.get_executors``, the site-specific
|
|
54
|
-
|
|
54
|
+
`~parsl.providers.base.ExecutionProvider` must be defined.
|
|
55
55
|
|
|
56
56
|
Parameters
|
|
57
57
|
----------
|
|
@@ -91,20 +91,20 @@ class WorkQueue(SiteConfig):
|
|
|
91
91
|
worker_options: str = "",
|
|
92
92
|
wq_max_retries: int = 1,
|
|
93
93
|
) -> ParslExecutor:
|
|
94
|
-
"""Return a `WorkQueueExecutor`. The ``provider``
|
|
95
|
-
site-specific configuration.
|
|
94
|
+
"""Return a `parsl.executors.WorkQueueExecutor`. The ``provider``
|
|
95
|
+
contains the site-specific configuration.
|
|
96
96
|
|
|
97
97
|
Parameters
|
|
98
98
|
----------
|
|
99
99
|
label : `str`
|
|
100
100
|
Label for executor.
|
|
101
|
-
provider : `ExecutionProvider`
|
|
102
|
-
Parsl execution provider, e.g., `SlurmProvider`.
|
|
101
|
+
provider : `parsl.providers.base.ExecutionProvider`
|
|
102
|
+
Parsl execution provider, e.g., `parsl.providers.SlurmProvider`.
|
|
103
103
|
port : `int`, optional
|
|
104
104
|
Port used by work_queue. Default: ``9000``.
|
|
105
105
|
worker_options : `str`, optional
|
|
106
106
|
Extra options to pass to work_queue workers, e.g.,
|
|
107
|
-
``"--memory=90000"``. Default:
|
|
107
|
+
``"--memory=90000"``. Default: ``""``.
|
|
108
108
|
wq_max_retries : `int`, optional
|
|
109
109
|
Number of retries for work_queue to attempt per job. Set to
|
|
110
110
|
``None`` to have it try indefinitely; set to ``1`` to have Parsl
|
|
@@ -125,13 +125,13 @@ class WorkQueue(SiteConfig):
|
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
class LocalSrunWorkQueue(WorkQueue):
|
|
128
|
-
"""Configuration for a `WorkQueueExecutor` that uses a
|
|
129
|
-
to manage resources.
|
|
128
|
+
"""Configuration for a `parsl.executors.WorkQueueExecutor` that uses a
|
|
129
|
+
`parsl.providers.LocalProvider` to manage resources.
|
|
130
130
|
|
|
131
131
|
This can be used directly as the site configuration within a
|
|
132
132
|
multi-node allocation when Slurm is available. For running on a
|
|
133
|
-
single node, e.g., a laptop, a `SingleNodeLauncher` is
|
|
134
|
-
Slurm need not be available.
|
|
133
|
+
single node, e.g., a laptop, a `parsl.launchers.SingleNodeLauncher` is
|
|
134
|
+
used, and Slurm need not be available.
|
|
135
135
|
|
|
136
136
|
The following BPS configuration parameters are recognized, overriding the
|
|
137
137
|
defaults:
|
|
@@ -170,7 +170,7 @@ class LocalSrunWorkQueue(WorkQueue):
|
|
|
170
170
|
|
|
171
171
|
Parameters
|
|
172
172
|
----------
|
|
173
|
-
job : `ParslJob`
|
|
173
|
+
job : `lsst.ctrl.bps.parsl.ParslJob`
|
|
174
174
|
Job to be executed.
|
|
175
175
|
|
|
176
176
|
Returns
|
lsst/ctrl/bps/parsl/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
__all__ = ["__version__"]
|
|
2
|
-
__version__ = "30.0.
|
|
2
|
+
__version__ = "30.0.1rc1"
|
lsst/ctrl/bps/parsl/workflow.py
CHANGED
|
@@ -60,7 +60,7 @@ def get_parsl_config(config: BpsConfig) -> parsl.config.Config:
|
|
|
60
60
|
|
|
61
61
|
Parameters
|
|
62
62
|
----------
|
|
63
|
-
config : `BpsConfig`
|
|
63
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
64
64
|
BPS configuration.
|
|
65
65
|
|
|
66
66
|
Returns
|
|
@@ -83,7 +83,7 @@ class ParslWorkflow(BaseWmsWorkflow):
|
|
|
83
83
|
Generic workflow config.
|
|
84
84
|
path : `str`
|
|
85
85
|
Path prefix for workflow output files.
|
|
86
|
-
jobs : `dict` mapping `str` to `ParslJob`
|
|
86
|
+
jobs : `dict` mapping `str` to `lsst.ctrl.bps.parsl.ParslJob`
|
|
87
87
|
Jobs to be executed.
|
|
88
88
|
parents : `dict` mapping `str` to iterable of `str`
|
|
89
89
|
Dependency tree. Keywords are job names, and values are a list of job
|
|
@@ -92,7 +92,7 @@ class ParslWorkflow(BaseWmsWorkflow):
|
|
|
92
92
|
endpoints : iterable of `str`
|
|
93
93
|
Endpoints of the dependency tree. These jobs (specified by name) have
|
|
94
94
|
no children.
|
|
95
|
-
final : `ParslJob`, optional
|
|
95
|
+
final : `lsst.ctrl.bps.parsl.ParslJob`, optional
|
|
96
96
|
Final job to be done, e.g., to merge the execution butler. This is done
|
|
97
97
|
locally.
|
|
98
98
|
"""
|
|
@@ -149,7 +149,7 @@ class ParslWorkflow(BaseWmsWorkflow):
|
|
|
149
149
|
|
|
150
150
|
Parameters
|
|
151
151
|
----------
|
|
152
|
-
config : `BpsConfig`
|
|
152
|
+
config : `lsst.ctrl.bps.BpsConfig`
|
|
153
153
|
Configuration of the workflow.
|
|
154
154
|
generic_workflow : `lsst.ctrl.bps.generic_workflow.GenericWorkflow`
|
|
155
155
|
Generic representation of a single workflow.
|
|
@@ -233,8 +233,9 @@ class ParslWorkflow(BaseWmsWorkflow):
|
|
|
233
233
|
|
|
234
234
|
Returns
|
|
235
235
|
-------
|
|
236
|
-
futures : `list` of `
|
|
237
|
-
`
|
|
236
|
+
futures : `list` of `parsl.dataflow.futures.AppFuture`
|
|
237
|
+
`parsl.dataflow.futures.AppFuture` objects linked to the execution
|
|
238
|
+
of the endpoint jobs.
|
|
238
239
|
"""
|
|
239
240
|
futures = [self.execute(name) for name in self.endpoints]
|
|
240
241
|
if block:
|
|
@@ -260,9 +261,9 @@ class ParslWorkflow(BaseWmsWorkflow):
|
|
|
260
261
|
|
|
261
262
|
Returns
|
|
262
263
|
-------
|
|
263
|
-
future : `
|
|
264
|
-
A `
|
|
265
|
-
the job is being reserved to run locally.
|
|
264
|
+
future : `parsl.dataflow.futures.AppFuture` or `None`
|
|
265
|
+
A `parsl.dataflow.futures.AppFuture` object linked to the execution
|
|
266
|
+
of the job, or `None` if the job is being reserved to run locally.
|
|
266
267
|
"""
|
|
267
268
|
if name in ("pipetaskInit", "mergeExecutionButler"):
|
|
268
269
|
# These get done outside of parsl
|
{lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/METADATA
RENAMED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-ctrl-bps-parsl
|
|
3
|
-
Version: 30.0.
|
|
3
|
+
Version: 30.0.1rc1
|
|
4
4
|
Summary: Parsl-based plugin for lsst-ctrl-bps.
|
|
5
5
|
Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
|
|
6
6
|
License-Expression: BSD-3-Clause OR GPL-3.0-or-later
|
|
7
7
|
Project-URL: Homepage, https://github.com/lsst/ctrl_bps_parsl
|
|
8
|
+
Project-URL: Source, https://github.com/lsst/ctrl_bps_parsl
|
|
8
9
|
Keywords: lsst
|
|
9
10
|
Classifier: Intended Audience :: Science/Research
|
|
10
11
|
Classifier: Operating System :: OS Independent
|
|
11
12
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.14
|
|
16
16
|
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
17
|
-
Requires-Python: >=3.
|
|
17
|
+
Requires-Python: >=3.12.0
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: COPYRIGHT
|
|
20
20
|
License-File: LICENSE
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
lsst/ctrl/bps/parsl/__init__.py,sha256=gU6EMvA--BVorVVMw_4i9-F_kran4V-25WzAeLJRsqE,1466
|
|
2
|
+
lsst/ctrl/bps/parsl/configuration.py,sha256=y5wfo9oiV9617x2iI_KByAJJ6NPSZ3M08kz69NxNz1c,5811
|
|
3
|
+
lsst/ctrl/bps/parsl/environment.py,sha256=xg2_WM-H77KOdn0M_Wi2sE7h7aqTSV1uxSiFHJmnu5w,2250
|
|
4
|
+
lsst/ctrl/bps/parsl/job.py,sha256=3mRDTg6XMoN71VmNzhna-1MSd75ifHQkF3jhljeLhrY,12462
|
|
5
|
+
lsst/ctrl/bps/parsl/service.py,sha256=mKM6C4mVTr3n0PsZWf5w0zc_o6qBiroQA1YfEgmde5s,3951
|
|
6
|
+
lsst/ctrl/bps/parsl/site.py,sha256=vgMGqAexb23ahdFb0D6vMtOvyjGArZTD-ze0cqtCeQY,8707
|
|
7
|
+
lsst/ctrl/bps/parsl/version.py,sha256=-auEgPcWk4qAWrWVMJY7Of7dAJ0dNQHoqQraCNdAEN4,52
|
|
8
|
+
lsst/ctrl/bps/parsl/workflow.py,sha256=eATSY0abV2iFePZOiOHnTY5vIuOl_5xeXfboXwETDHw,11619
|
|
9
|
+
lsst/ctrl/bps/parsl/sites/__init__.py,sha256=J9HpVUqqlIkve0tIEELPbicY81vz_liZKpBUrTA1D2Q,1464
|
|
10
|
+
lsst/ctrl/bps/parsl/sites/ccin2p3.py,sha256=7pKn9s6RCqUtNovJG3u-qwTGgxJq0whAk4k6eGUTJVg,14784
|
|
11
|
+
lsst/ctrl/bps/parsl/sites/local.py,sha256=tN-mawQkMLbxeQULSWD159K9b8UFZyzu11Lb9An0Bqg,3126
|
|
12
|
+
lsst/ctrl/bps/parsl/sites/nersc.py,sha256=obUiaHgHZj_23PIrYdihUnb8eoEJMs288wHy84jIzaQ,4549
|
|
13
|
+
lsst/ctrl/bps/parsl/sites/princeton.py,sha256=U12w0GZBXj-ZmkG5qnFawmQ8dH-A2kw2lWZ7DYPodXc,5595
|
|
14
|
+
lsst/ctrl/bps/parsl/sites/slac.py,sha256=SrzNjG1c_xtPDwZBSW0P9hIpvkBktGAggVj4fdzWSIM,3913
|
|
15
|
+
lsst/ctrl/bps/parsl/sites/slurm.py,sha256=qyx2pbYtmBsyEnSwNPyw8zpZdUAwJ-jB3aYMoc4mHRE,13484
|
|
16
|
+
lsst/ctrl/bps/parsl/sites/torque.py,sha256=qx8vxko1PR1I1GJNbNblIrARSl5b8JuXfr6IIPpsG-o,10879
|
|
17
|
+
lsst/ctrl/bps/parsl/sites/work_queue.py,sha256=MPFSd6mfUdxWodQBZE8GQ9ivwTbtHkUvdiVrmyeRq6k,7256
|
|
18
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/licenses/COPYRIGHT,sha256=M5ylfMNsihIJcPySQ5ZFjec4zROSZdlNN9oGHBhu7WM,181
|
|
19
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
|
|
20
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
|
|
21
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
22
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/METADATA,sha256=5KlNmeWU3IWRPLAZreL5OH5BDMTbWJenuNgLdchPuYY,2960
|
|
23
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
24
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
|
|
25
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
26
|
+
lsst_ctrl_bps_parsl-30.0.1rc1.dist-info/RECORD,,
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
lsst/ctrl/bps/parsl/__init__.py,sha256=gU6EMvA--BVorVVMw_4i9-F_kran4V-25WzAeLJRsqE,1466
|
|
2
|
-
lsst/ctrl/bps/parsl/configuration.py,sha256=Dq9hZW0fnmNHZoD_eAH3u2Dk0sNCZQ9NuSnFjTzFEi4,5731
|
|
3
|
-
lsst/ctrl/bps/parsl/environment.py,sha256=xg2_WM-H77KOdn0M_Wi2sE7h7aqTSV1uxSiFHJmnu5w,2250
|
|
4
|
-
lsst/ctrl/bps/parsl/job.py,sha256=WHkH4mhbnKhAGO_i8C612pRuUFzU0SJ8YghEoN920QI,12237
|
|
5
|
-
lsst/ctrl/bps/parsl/service.py,sha256=mKM6C4mVTr3n0PsZWf5w0zc_o6qBiroQA1YfEgmde5s,3951
|
|
6
|
-
lsst/ctrl/bps/parsl/site.py,sha256=1hFRB-475txuOR-jaztMglnjBxy9Ca2gZtI8Ptrvv2g,8614
|
|
7
|
-
lsst/ctrl/bps/parsl/version.py,sha256=Tt7y1Knxuicvk026_H8m0GXmxEFM8XEWyfbDoHcAxbs,52
|
|
8
|
-
lsst/ctrl/bps/parsl/workflow.py,sha256=9vtPa_bAX02aCZzoEG0bs2e0TWhNRm5RMiJ7BoCxBcE,11435
|
|
9
|
-
lsst/ctrl/bps/parsl/sites/__init__.py,sha256=J9HpVUqqlIkve0tIEELPbicY81vz_liZKpBUrTA1D2Q,1464
|
|
10
|
-
lsst/ctrl/bps/parsl/sites/ccin2p3.py,sha256=_H_vsq-WkO5QQRuTi8w2cv49ArPO7J-lxHu5c-exsgU,14722
|
|
11
|
-
lsst/ctrl/bps/parsl/sites/local.py,sha256=s6NPuSbn_esI9rucQrpbg-y9R3nROBYVTk30KU99d7o,2831
|
|
12
|
-
lsst/ctrl/bps/parsl/sites/nersc.py,sha256=obUiaHgHZj_23PIrYdihUnb8eoEJMs288wHy84jIzaQ,4549
|
|
13
|
-
lsst/ctrl/bps/parsl/sites/princeton.py,sha256=F_dHTN5sm2NM2VjtJoWbtKfhkowBocIs5F7eSgjxc-0,5575
|
|
14
|
-
lsst/ctrl/bps/parsl/sites/slac.py,sha256=IN04Nx0YvOl-GN33MB05zT0XG3IQ91rXri_EHz_dzTs,3893
|
|
15
|
-
lsst/ctrl/bps/parsl/sites/slurm.py,sha256=5J0djEHyKZ0CXFNXY9zmL-m6e9VLcNc6Sd6mCwPYzgs,13031
|
|
16
|
-
lsst/ctrl/bps/parsl/sites/torque.py,sha256=lNAh8-yZgWfsDRD7ryF0OwNV64tBv_7tCvs_xPHizNs,9830
|
|
17
|
-
lsst/ctrl/bps/parsl/sites/work_queue.py,sha256=H6tjm8T5TTh1h5-vd7bR2yv-aFJc6hzEqYRnSnXMKwk,7095
|
|
18
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/licenses/COPYRIGHT,sha256=M5ylfMNsihIJcPySQ5ZFjec4zROSZdlNN9oGHBhu7WM,181
|
|
19
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
|
|
20
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
|
|
21
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
22
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/METADATA,sha256=dspZP-wIHizg8nU8XwvalcqXCyViA3tPi3be73NE7cg,2951
|
|
23
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
24
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
|
|
25
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
26
|
-
lsst_ctrl_bps_parsl-30.0.0rc3.dist-info/RECORD,,
|
|
File without changes
|
{lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/top_level.txt
RENAMED
|
File without changes
|
{lsst_ctrl_bps_parsl-30.0.0rc3.dist-info → lsst_ctrl_bps_parsl-30.0.1rc1.dist-info}/zip-safe
RENAMED
|
File without changes
|