lsst-pipe-base 29.2025.4400__py3-none-any.whl → 29.2025.4600__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/pipe/base/_status.py +156 -11
- lsst/pipe/base/log_capture.py +98 -7
- lsst/pipe/base/pipelineIR.py +36 -3
- lsst/pipe/base/pipeline_graph/expressions.py +3 -3
- lsst/pipe/base/quantum_graph/_common.py +6 -0
- lsst/pipe/base/quantum_graph/_predicted.py +13 -17
- lsst/pipe/base/quantum_graph/_provenance.py +322 -106
- lsst/pipe/base/quantum_graph/aggregator/_communicators.py +9 -9
- lsst/pipe/base/quantum_graph/aggregator/_progress.py +77 -84
- lsst/pipe/base/quantum_graph/aggregator/_scanner.py +154 -53
- lsst/pipe/base/quantum_graph/aggregator/_structs.py +27 -34
- lsst/pipe/base/quantum_graph/aggregator/_supervisor.py +8 -7
- lsst/pipe/base/quantum_graph/aggregator/_writer.py +5 -8
- lsst/pipe/base/quantum_provenance_graph.py +2 -44
- lsst/pipe/base/single_quantum_executor.py +43 -9
- lsst/pipe/base/tests/mocks/_data_id_match.py +1 -1
- lsst/pipe/base/tests/mocks/_pipeline_task.py +1 -1
- lsst/pipe/base/version.py +1 -1
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/METADATA +1 -1
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/RECORD +28 -28
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/WHEEL +0 -0
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/entry_points.txt +0 -0
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/licenses/COPYRIGHT +0 -0
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/licenses/LICENSE +0 -0
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/licenses/bsd_license.txt +0 -0
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/licenses/gpl-v3.0.txt +0 -0
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/top_level.txt +0 -0
- {lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/zip-safe +0 -0
|
@@ -107,9 +107,10 @@ class Supervisor:
|
|
|
107
107
|
"""Scan the outputs of the quantum graph to gather provenance and
|
|
108
108
|
ingest outputs.
|
|
109
109
|
"""
|
|
110
|
-
self.
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
n_quanta = self.predicted.header.n_quanta + len(self.predicted.init_quanta.root)
|
|
111
|
+
self.comms.progress.scans.total = n_quanta
|
|
112
|
+
self.comms.progress.writes.total = n_quanta
|
|
113
|
+
self.comms.progress.quantum_ingests.total = n_quanta
|
|
113
114
|
ready_set: set[uuid.UUID] = set()
|
|
114
115
|
for ready_quanta in self.walker:
|
|
115
116
|
self.comms.log.debug("Sending %d new quanta to scan queue.", len(ready_quanta))
|
|
@@ -137,8 +138,8 @@ class Supervisor:
|
|
|
137
138
|
for blocked_quantum_id in blocked_quanta:
|
|
138
139
|
if self.comms.config.output_path is not None:
|
|
139
140
|
self.comms.request_write(ScanResult(blocked_quantum_id, status=ScanStatus.BLOCKED))
|
|
140
|
-
self.comms.progress.
|
|
141
|
-
self.comms.progress.
|
|
141
|
+
self.comms.progress.scans.update(1)
|
|
142
|
+
self.comms.progress.quantum_ingests.update(len(blocked_quanta))
|
|
142
143
|
case ScanStatus.ABANDONED:
|
|
143
144
|
self.comms.log.debug("Abandoning scan for %s: quantum has not succeeded (yet).")
|
|
144
145
|
self.walker.fail(scan_report.quantum_id)
|
|
@@ -147,7 +148,7 @@ class Supervisor:
|
|
|
147
148
|
raise AssertionError(
|
|
148
149
|
f"Unexpected status {unexpected!r} in scanner loop for {scan_report.quantum_id}."
|
|
149
150
|
)
|
|
150
|
-
self.comms.progress.
|
|
151
|
+
self.comms.progress.scans.update(1)
|
|
151
152
|
|
|
152
153
|
|
|
153
154
|
def aggregate_graph(predicted_path: str, butler_path: str, config: AggregatorConfig) -> None:
|
|
@@ -159,7 +160,7 @@ def aggregate_graph(predicted_path: str, butler_path: str, config: AggregatorCon
|
|
|
159
160
|
Path to the predicted quantum graph.
|
|
160
161
|
butler_path : `str`
|
|
161
162
|
Path or alias to the central butler repository.
|
|
162
|
-
config: `AggregatorConfig`
|
|
163
|
+
config : `AggregatorConfig`
|
|
163
164
|
Configuration for the aggregator.
|
|
164
165
|
"""
|
|
165
166
|
log = getLogger("lsst.pipe.base.quantum_graph.aggregator")
|
|
@@ -464,7 +464,7 @@ class Writer:
|
|
|
464
464
|
producer=self.indices[predicted_init_quantum.quantum_id],
|
|
465
465
|
consumers=self.xgraph.successors(dataset_index),
|
|
466
466
|
)
|
|
467
|
-
provenance_output.
|
|
467
|
+
provenance_output.produced = predicted_output.dataset_id in existing_outputs
|
|
468
468
|
data_writers.datasets.write_model(
|
|
469
469
|
provenance_output.dataset_id, provenance_output, data_writers.compressor
|
|
470
470
|
)
|
|
@@ -551,16 +551,13 @@ class Writer:
|
|
|
551
551
|
producer=quantum_index,
|
|
552
552
|
consumers=self.xgraph.successors(dataset_index),
|
|
553
553
|
)
|
|
554
|
-
provenance_output.
|
|
554
|
+
provenance_output.produced = provenance_output.dataset_id in request.existing_outputs
|
|
555
555
|
data.datasets[provenance_output.dataset_id] = provenance_output.model_dump_json().encode()
|
|
556
556
|
provenance_quantum = ProvenanceQuantumModel.from_predicted(predicted_quantum, self.indices)
|
|
557
|
-
provenance_quantum.
|
|
558
|
-
provenance_quantum.caveats = request.caveats
|
|
559
|
-
provenance_quantum.exception = request.exception
|
|
560
|
-
provenance_quantum.resource_usage = request.resource_usage
|
|
557
|
+
provenance_quantum.attempts = [a.remap_uuids(self.indices) for a in request.attempts]
|
|
561
558
|
data.quantum = provenance_quantum.model_dump_json().encode()
|
|
562
|
-
data.metadata = request.
|
|
563
|
-
data.log = request.
|
|
559
|
+
data.metadata = request.metadata_content
|
|
560
|
+
data.log = request.log_content
|
|
564
561
|
return [data]
|
|
565
562
|
|
|
566
563
|
def write_scan_data(self, scan_data: _ScanData, data_writers: _DataWriters) -> None:
|
|
@@ -49,7 +49,7 @@ import threading
|
|
|
49
49
|
import uuid
|
|
50
50
|
from collections.abc import Callable, Iterator, Mapping, Sequence, Set
|
|
51
51
|
from enum import Enum
|
|
52
|
-
from typing import
|
|
52
|
+
from typing import Any, ClassVar, Literal, TypedDict, cast
|
|
53
53
|
|
|
54
54
|
import astropy.table
|
|
55
55
|
import networkx
|
|
@@ -72,7 +72,7 @@ from lsst.daf.butler import (
|
|
|
72
72
|
from lsst.resources import ResourcePathExpression
|
|
73
73
|
from lsst.utils.logging import PeriodicLogger, getLogger
|
|
74
74
|
|
|
75
|
-
from ._status import QuantumSuccessCaveats
|
|
75
|
+
from ._status import ExceptionInfo, QuantumSuccessCaveats
|
|
76
76
|
from .automatic_connection_constants import (
|
|
77
77
|
LOG_OUTPUT_CONNECTION_NAME,
|
|
78
78
|
LOG_OUTPUT_TEMPLATE,
|
|
@@ -82,9 +82,6 @@ from .automatic_connection_constants import (
|
|
|
82
82
|
)
|
|
83
83
|
from .graph import QuantumGraph, QuantumNode
|
|
84
84
|
|
|
85
|
-
if TYPE_CHECKING:
|
|
86
|
-
from ._task_metadata import TaskMetadata
|
|
87
|
-
|
|
88
85
|
_LOG = getLogger(__name__)
|
|
89
86
|
|
|
90
87
|
|
|
@@ -188,45 +185,6 @@ class QuantumRunStatus(Enum):
|
|
|
188
185
|
SUCCESSFUL = 1
|
|
189
186
|
|
|
190
187
|
|
|
191
|
-
class ExceptionInfo(pydantic.BaseModel):
|
|
192
|
-
"""Information about an exception that was raised."""
|
|
193
|
-
|
|
194
|
-
type_name: str
|
|
195
|
-
"""Fully-qualified Python type name for the exception raised."""
|
|
196
|
-
|
|
197
|
-
message: str
|
|
198
|
-
"""String message included in the exception."""
|
|
199
|
-
|
|
200
|
-
metadata: dict[str, float | int | str | bool | None]
|
|
201
|
-
"""Additional metadata included in the exception."""
|
|
202
|
-
|
|
203
|
-
@classmethod
|
|
204
|
-
def _from_metadata(cls, md: TaskMetadata) -> ExceptionInfo:
|
|
205
|
-
"""Construct from task metadata.
|
|
206
|
-
|
|
207
|
-
Parameters
|
|
208
|
-
----------
|
|
209
|
-
md : `TaskMetadata`
|
|
210
|
-
Metadata about the error, as written by
|
|
211
|
-
`AnnotatedPartialOutputsError`.
|
|
212
|
-
|
|
213
|
-
Returns
|
|
214
|
-
-------
|
|
215
|
-
info : `ExceptionInfo`
|
|
216
|
-
Information about the exception.
|
|
217
|
-
"""
|
|
218
|
-
result = cls(type_name=md["type"], message=md["message"], metadata={})
|
|
219
|
-
if "metadata" in md:
|
|
220
|
-
raw_err_metadata = md["metadata"].to_dict()
|
|
221
|
-
for k, v in raw_err_metadata.items():
|
|
222
|
-
# Guard against error metadata we couldn't serialize later
|
|
223
|
-
# via Pydantic; don't want one weird value bringing down our
|
|
224
|
-
# ability to report on an entire run.
|
|
225
|
-
if isinstance(v, float | int | str | bool):
|
|
226
|
-
result.metadata[k] = v
|
|
227
|
-
return result
|
|
228
|
-
|
|
229
|
-
|
|
230
188
|
class QuantumRun(pydantic.BaseModel):
|
|
231
189
|
"""Information about a quantum in a given run collection."""
|
|
232
190
|
|
|
@@ -44,12 +44,19 @@ from lsst.daf.butler import (
|
|
|
44
44
|
NamedKeyDict,
|
|
45
45
|
Quantum,
|
|
46
46
|
)
|
|
47
|
+
from lsst.utils.introspection import get_full_type_name
|
|
47
48
|
from lsst.utils.timer import logInfo
|
|
48
49
|
|
|
49
50
|
from ._quantumContext import ExecutionResources, QuantumContext
|
|
50
|
-
from ._status import
|
|
51
|
+
from ._status import (
|
|
52
|
+
AnnotatedPartialOutputsError,
|
|
53
|
+
ExceptionInfo,
|
|
54
|
+
InvalidQuantumError,
|
|
55
|
+
NoWorkFound,
|
|
56
|
+
QuantumSuccessCaveats,
|
|
57
|
+
)
|
|
51
58
|
from .connections import AdjustQuantumHelper
|
|
52
|
-
from .log_capture import LogCapture
|
|
59
|
+
from .log_capture import LogCapture, _ExecutionLogRecordsExtra
|
|
53
60
|
from .pipeline_graph import TaskNode
|
|
54
61
|
from .pipelineTask import PipelineTask
|
|
55
62
|
from .quantum_graph_executor import QuantumExecutor
|
|
@@ -147,6 +154,7 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
147
154
|
self._skip_existing = self._butler.run in self._butler.collections.query(
|
|
148
155
|
skip_existing_in, flatten_chains=True
|
|
149
156
|
)
|
|
157
|
+
self._previous_process_quanta: list[uuid.UUID] = []
|
|
150
158
|
|
|
151
159
|
def execute(
|
|
152
160
|
self, task_node: TaskNode, /, quantum: Quantum, quantum_id: uuid.UUID | None = None
|
|
@@ -196,7 +204,7 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
196
204
|
# or raises an exception do not try to store logs, as they may be
|
|
197
205
|
# already in butler.
|
|
198
206
|
captureLog.store = False
|
|
199
|
-
if self._check_existing_outputs(quantum, task_node, limited_butler):
|
|
207
|
+
if self._check_existing_outputs(quantum, task_node, limited_butler, captureLog.extra):
|
|
200
208
|
_LOG.info(
|
|
201
209
|
"Skipping already-successful quantum for label=%s dataId=%s.",
|
|
202
210
|
task_node.label,
|
|
@@ -205,6 +213,9 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
205
213
|
return quantum
|
|
206
214
|
captureLog.store = True
|
|
207
215
|
|
|
216
|
+
captureLog.extra.previous_process_quanta.extend(self._previous_process_quanta)
|
|
217
|
+
if quantum_id is not None:
|
|
218
|
+
self._previous_process_quanta.append(quantum_id)
|
|
208
219
|
try:
|
|
209
220
|
quantum = self._updated_quantum_inputs(quantum, task_node, limited_butler)
|
|
210
221
|
except NoWorkFound as exc:
|
|
@@ -261,6 +272,11 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
261
272
|
e.__class__.__name__,
|
|
262
273
|
str(e),
|
|
263
274
|
)
|
|
275
|
+
captureLog.extra.exception = ExceptionInfo(
|
|
276
|
+
type_name=get_full_type_name(e),
|
|
277
|
+
message=str(e),
|
|
278
|
+
metadata={},
|
|
279
|
+
)
|
|
264
280
|
raise
|
|
265
281
|
else:
|
|
266
282
|
quantumMetadata["butler_metrics"] = butler_metrics.model_dump()
|
|
@@ -268,11 +284,13 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
268
284
|
# Stringify the UUID for easier compatibility with
|
|
269
285
|
# PropertyList.
|
|
270
286
|
quantumMetadata["outputs"] = [str(output) for output in outputsPut]
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
287
|
+
finally:
|
|
288
|
+
logInfo(None, "end", metadata=quantumMetadata) # type: ignore[arg-type]
|
|
289
|
+
fullMetadata = task.getFullMetadata()
|
|
290
|
+
fullMetadata["quantum"] = quantumMetadata
|
|
291
|
+
if self._job_metadata is not None:
|
|
292
|
+
fullMetadata["job"] = self._job_metadata
|
|
293
|
+
captureLog.extra.metadata = fullMetadata
|
|
276
294
|
self._write_metadata(quantum, fullMetadata, task_node, limited_butler)
|
|
277
295
|
stopTime = time.time()
|
|
278
296
|
_LOG.info(
|
|
@@ -284,7 +302,12 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
284
302
|
return quantum
|
|
285
303
|
|
|
286
304
|
def _check_existing_outputs(
|
|
287
|
-
self,
|
|
305
|
+
self,
|
|
306
|
+
quantum: Quantum,
|
|
307
|
+
task_node: TaskNode,
|
|
308
|
+
/,
|
|
309
|
+
limited_butler: LimitedButler,
|
|
310
|
+
log_extra: _ExecutionLogRecordsExtra,
|
|
288
311
|
) -> bool:
|
|
289
312
|
"""Decide whether this quantum needs to be executed.
|
|
290
313
|
|
|
@@ -302,6 +325,8 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
302
325
|
Task definition structure.
|
|
303
326
|
limited_butler : `~lsst.daf.butler.LimitedButler`
|
|
304
327
|
Butler to use for querying and clobbering.
|
|
328
|
+
log_extra : `.log_capture.TaskLogRecordsExtra`
|
|
329
|
+
Extra information to attach to log records.
|
|
305
330
|
|
|
306
331
|
Returns
|
|
307
332
|
-------
|
|
@@ -337,6 +362,15 @@ class SingleQuantumExecutor(QuantumExecutor):
|
|
|
337
362
|
"Looking for existing outputs in the way for label=%s dataId=%s.", task_node.label, quantum.dataId
|
|
338
363
|
)
|
|
339
364
|
ref_dict = limited_butler.stored_many(chain.from_iterable(quantum.outputs.values()))
|
|
365
|
+
if task_node.log_output is not None:
|
|
366
|
+
(log_ref,) = quantum.outputs[task_node.log_output.dataset_type_name]
|
|
367
|
+
if ref_dict[log_ref]:
|
|
368
|
+
_LOG.debug(
|
|
369
|
+
"Attaching logs from previous attempt on label=%s dataId=%s.",
|
|
370
|
+
task_node.label,
|
|
371
|
+
quantum.dataId,
|
|
372
|
+
)
|
|
373
|
+
log_extra.attach_previous_attempt(limited_butler.get(log_ref))
|
|
340
374
|
existingRefs = [ref for ref, exists in ref_dict.items() if exists]
|
|
341
375
|
missingRefs = [ref for ref, exists in ref_dict.items() if not exists]
|
|
342
376
|
if existingRefs:
|
|
@@ -37,7 +37,7 @@ from uuid import UUID
|
|
|
37
37
|
import astropy.time
|
|
38
38
|
|
|
39
39
|
from lsst.daf.butler import DataId
|
|
40
|
-
from lsst.daf.butler.
|
|
40
|
+
from lsst.daf.butler.queries.expressions.parser import Node, TreeVisitor, parse_expression
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class _DataIdMatchTreeVisitor(TreeVisitor):
|
|
@@ -95,7 +95,7 @@ class ForcedFailure:
|
|
|
95
95
|
|
|
96
96
|
memory_required: Quantity | None = None
|
|
97
97
|
"""If not `None`, this failure simulates an out-of-memory failure by
|
|
98
|
-
raising only if this value exceeds `ExecutionResources.max_mem`.
|
|
98
|
+
raising only if this value exceeds `ExecutionResources.max_mem`.
|
|
99
99
|
"""
|
|
100
100
|
|
|
101
101
|
def set_config(self, config: MockPipelineTaskConfig) -> None:
|
lsst/pipe/base/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
__all__ = ["__version__"]
|
|
2
|
-
__version__ = "29.2025.
|
|
2
|
+
__version__ = "29.2025.4600"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-pipe-base
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.4600
|
|
4
4
|
Summary: Pipeline infrastructure for the Rubin Science Pipelines.
|
|
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
|
|
@@ -6,7 +6,7 @@ lsst/pipe/base/_dataset_handle.py,sha256=ft_ke1LbhLLndDPARsHSQJUA05LgUFnfWOq2vbw
|
|
|
6
6
|
lsst/pipe/base/_instrument.py,sha256=I9UTaj81krR1zkTZ1owfOPBzHN29PY3Egg7fIE5obxQ,30057
|
|
7
7
|
lsst/pipe/base/_observation_dimension_packer.py,sha256=78Jg2OVFOdXIK62TS2Y3X4095xqCzmiIx9o4TXyADYA,8027
|
|
8
8
|
lsst/pipe/base/_quantumContext.py,sha256=gb60mTHbgOIEptYvJ64SaChvViXyeKJlG6kEHq4nYVw,19345
|
|
9
|
-
lsst/pipe/base/_status.py,sha256=
|
|
9
|
+
lsst/pipe/base/_status.py,sha256=7gJPrqt03t1fO5tREc_sfQaN7XmDBvruihORXPnRqUE,21216
|
|
10
10
|
lsst/pipe/base/_task_metadata.py,sha256=Y4rjrYWvYxYCJwy86VvzxKMkNxEJbYVgLVuXo6KiXac,25638
|
|
11
11
|
lsst/pipe/base/all_dimensions_quantum_graph_builder.py,sha256=nazY74jrdSCr6CFfPp78JecM_-udW95EYP7grLPO2hg,70830
|
|
12
12
|
lsst/pipe/base/automatic_connection_constants.py,sha256=H5uuh1rYRpjndgPdb0dh1L_-OyLKdT6VWOZTAb__xCU,3298
|
|
@@ -20,29 +20,29 @@ lsst/pipe/base/exec_fixup_data_id.py,sha256=9OjOcH-6AHZ1JnD_CemieI0wWX90J_VdaY9v
|
|
|
20
20
|
lsst/pipe/base/execution_graph_fixup.py,sha256=ND0x4hlpeEW-gudo-i2K7HT7MoM5sp_mcoqRMCopSqQ,3815
|
|
21
21
|
lsst/pipe/base/execution_reports.py,sha256=jYtWCD4PkEAeVUpKIxuiJJVgsCm7qiwCorWVgNHkVgU,17270
|
|
22
22
|
lsst/pipe/base/graph_walker.py,sha256=Ij7JfYF0srA29VgM_DhbNBxUBeOHDOnujrTQPjVNha0,4694
|
|
23
|
-
lsst/pipe/base/log_capture.py,sha256=
|
|
23
|
+
lsst/pipe/base/log_capture.py,sha256=5r99_Ek2A75vYOMo-z52ltWLdfYfWExm55UU9a4nqmM,12909
|
|
24
24
|
lsst/pipe/base/mermaid_tools.py,sha256=cdlDJQ1x8k7-VvCLEUqvSC3GR1zCsB-aUTxOjYejNWc,5216
|
|
25
25
|
lsst/pipe/base/mp_graph_executor.py,sha256=FKlFxjtU2-6SFzX_wsdtMMAj5P09ZE8V65-Sg585g2Y,35501
|
|
26
26
|
lsst/pipe/base/pipeline.py,sha256=FVaiLhgw9Pzo-nzXKS0dLNafegP0AMZKLtPlSvOSkRU,37563
|
|
27
|
-
lsst/pipe/base/pipelineIR.py,sha256=
|
|
27
|
+
lsst/pipe/base/pipelineIR.py,sha256=UuZ02NLhVmzzekbuWlyar7cPLCf_4yfzD5qFEmGHs_A,45821
|
|
28
28
|
lsst/pipe/base/pipelineTask.py,sha256=K3GdjJLvy8A7I-jzQiERQZaYF7mC1LM3iB5TmUtbOCI,8394
|
|
29
29
|
lsst/pipe/base/prerequisite_helpers.py,sha256=bmiebQ4veSrypZgAXjmCBFfj8fUtPW9eRQaVShhxdBQ,28446
|
|
30
30
|
lsst/pipe/base/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
lsst/pipe/base/quantum_graph_builder.py,sha256=SwfZny05lJLZQHG69550GoafKWWZhX5Glgu345-VAsE,67981
|
|
32
32
|
lsst/pipe/base/quantum_graph_executor.py,sha256=WP41iQmihy1jfgaHV6eu2aSrqQx_Fydq3mbEF6CLQ-s,4419
|
|
33
33
|
lsst/pipe/base/quantum_graph_skeleton.py,sha256=GhSQjRHaErneGY4A4E0tERqg9QPEeYrlpmdLzqFXy6E,28586
|
|
34
|
-
lsst/pipe/base/quantum_provenance_graph.py,sha256=
|
|
34
|
+
lsst/pipe/base/quantum_provenance_graph.py,sha256=33S5iCVxD9Co4oJSU_N8AJXL14Nw0UwGzPEc3gpQiqk,91981
|
|
35
35
|
lsst/pipe/base/quantum_reports.py,sha256=ut235L88v7SXaeVUvMA9qFl7tpeMwGnzob3X0QoOI_s,14210
|
|
36
36
|
lsst/pipe/base/resource_usage.py,sha256=LfH7Qf6taI3lxw0aB90riRMn1UxUTMBSqtBjKPJ-XuY,6759
|
|
37
37
|
lsst/pipe/base/separable_pipeline_executor.py,sha256=vXqJrRI5GNezzGV9QsiaRHEhioDF2Y_W7JQYQCzHR7A,16720
|
|
38
38
|
lsst/pipe/base/simple_pipeline_executor.py,sha256=QjgX5seueopxPpnJz7H2hBNx-8ucxeT-3BXj6ET_vww,29543
|
|
39
|
-
lsst/pipe/base/single_quantum_executor.py,sha256=
|
|
39
|
+
lsst/pipe/base/single_quantum_executor.py,sha256=pLvmYMUHsK56RXs61Hec76BxZjOGcpJs17ims2fiHhA,27992
|
|
40
40
|
lsst/pipe/base/struct.py,sha256=Fa-UkpuXOxdzKWbHrMUkJYOszZuBXCm2NesXNR0IOPQ,5048
|
|
41
41
|
lsst/pipe/base/task.py,sha256=XHBd-7m1a4-6LgobBYA1DgY4H7EV-_RWKfxbhZbMmD4,15145
|
|
42
42
|
lsst/pipe/base/taskFactory.py,sha256=MsDGECJqZLSZk8SGhpuVhNaP32UWuNvxZiDcZExPFG8,3412
|
|
43
43
|
lsst/pipe/base/testUtils.py,sha256=lSBKMhoKflbi8JkMNYfEqqHNl-rtFI8UYT3QneDYpLo,18477
|
|
44
44
|
lsst/pipe/base/utils.py,sha256=JmEt3l0xrh9uayKrSXuQEq12aXOhDr2YXmbYduaxCko,1940
|
|
45
|
-
lsst/pipe/base/version.py,sha256=
|
|
45
|
+
lsst/pipe/base/version.py,sha256=vB8XwkFrtPN40DIouI1mFlxm5jpAZvcGwleFGT1yZhI,55
|
|
46
46
|
lsst/pipe/base/cli/__init__.py,sha256=861tXIAW7SqtqNUYkjbeEdfg8lDswXsjJQca0gVCFz4,54
|
|
47
47
|
lsst/pipe/base/cli/_get_cli_subcommands.py,sha256=g_af64klRybBGKAg7fmBSZBdw2LYBAsFON_yQIMZON0,1289
|
|
48
48
|
lsst/pipe/base/cli/cmd/__init__.py,sha256=3UF2IQEEBor4YMGRNPdcZAVCAI5yFyeHp5nGul4IoyM,1557
|
|
@@ -69,7 +69,7 @@ lsst/pipe/base/pipeline_graph/_nodes.py,sha256=GGXfzXvrjNbwPt-0w8cC0l_I6CCNskoDN
|
|
|
69
69
|
lsst/pipe/base/pipeline_graph/_pipeline_graph.py,sha256=V5xvlH0VxPsSctWYD5kDT-HybfZqYjMtnZi6n48GEM4,122536
|
|
70
70
|
lsst/pipe/base/pipeline_graph/_task_subsets.py,sha256=lLvcndSGcZigteWd4eeAM8LxQ1lHPBoysY8PjJTxx1c,13244
|
|
71
71
|
lsst/pipe/base/pipeline_graph/_tasks.py,sha256=jTLpm5dZMXRNrGi3L45-3DtF95PGwhmejWLZ-zcSTzo,42802
|
|
72
|
-
lsst/pipe/base/pipeline_graph/expressions.py,sha256=
|
|
72
|
+
lsst/pipe/base/pipeline_graph/expressions.py,sha256=wNNVSWVMDZs_dp4Xd30rt1Xj8PfzWikJKo-amaJ-leM,7690
|
|
73
73
|
lsst/pipe/base/pipeline_graph/io.py,sha256=zVIybq5JyR1u1FwqF60wG0bIhz_SkgzzQiw2A7a1oNk,30943
|
|
74
74
|
lsst/pipe/base/pipeline_graph/visualization/__init__.py,sha256=qQctfWuFpcmgRdgu8Y6OsJ_pXpLKrCK-alqfVtIecls,1551
|
|
75
75
|
lsst/pipe/base/pipeline_graph/visualization/_dot.py,sha256=hgy5Wk4GXptb9GbjPn8-0D9EjWsXKBEEVs1ocHLh_MA,13535
|
|
@@ -82,20 +82,20 @@ lsst/pipe/base/pipeline_graph/visualization/_printer.py,sha256=yJMRJ-aXd3nYDgs1F
|
|
|
82
82
|
lsst/pipe/base/pipeline_graph/visualization/_show.py,sha256=lPRjO1To2n5r3f_Wgcwy-7TmyJ7UszGGFXAlOtN1wDs,10510
|
|
83
83
|
lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py,sha256=dp7PXl9Cu7GfWjBi5g8KjXZgnF1KGg_idKKxtICL53Q,8679
|
|
84
84
|
lsst/pipe/base/quantum_graph/__init__.py,sha256=-Gp3LihB0AXCvhG387wKAEpHRM-NrHGSXMti8cHee90,1437
|
|
85
|
-
lsst/pipe/base/quantum_graph/_common.py,sha256=
|
|
85
|
+
lsst/pipe/base/quantum_graph/_common.py,sha256=W9T6RIAY7ouLDmlBhNzDegWSicrIvBc5IZBb0dMiiTc,22415
|
|
86
86
|
lsst/pipe/base/quantum_graph/_multiblock.py,sha256=FQa8lafbuS4sD1rZE_ivQb-WTiHZkOol0OGCHNbTpq8,29125
|
|
87
|
-
lsst/pipe/base/quantum_graph/_predicted.py,sha256=
|
|
88
|
-
lsst/pipe/base/quantum_graph/_provenance.py,sha256=
|
|
87
|
+
lsst/pipe/base/quantum_graph/_predicted.py,sha256=bump280npUkcYBUu9blJp8-e-Xrp-3LVE0Pb_0ZeNMo,87845
|
|
88
|
+
lsst/pipe/base/quantum_graph/_provenance.py,sha256=5CseVwuTXEwz6pw9uX4LFbtHVehS0hqG1CLUcU3TKA0,58607
|
|
89
89
|
lsst/pipe/base/quantum_graph/visualization.py,sha256=EbTWhk9aPq7sX6bcHmnEIsr2xuuR6d1SxspQbRe8D0Q,12235
|
|
90
90
|
lsst/pipe/base/quantum_graph/aggregator/__init__.py,sha256=4CK8sP_ZjUKmxKS3LnCH1zG7XSk9IEwijrluRBHhEMU,7436
|
|
91
|
-
lsst/pipe/base/quantum_graph/aggregator/_communicators.py,sha256=
|
|
91
|
+
lsst/pipe/base/quantum_graph/aggregator/_communicators.py,sha256=uuA97jMEzpKX1hkhYbvnRa4-lASfPEC9cEZByFNuWAY,36404
|
|
92
92
|
lsst/pipe/base/quantum_graph/aggregator/_config.py,sha256=iV1Ejfk-UnFoQ8TkpJE_jMZYHsmZcdLm5R-FnQEqO7s,5167
|
|
93
93
|
lsst/pipe/base/quantum_graph/aggregator/_ingester.py,sha256=ohZOfQi9VL7fHEn_P84NOaSYvbzeDZIvk71UWL7ZHnY,13746
|
|
94
|
-
lsst/pipe/base/quantum_graph/aggregator/_progress.py,sha256=
|
|
95
|
-
lsst/pipe/base/quantum_graph/aggregator/_scanner.py,sha256
|
|
96
|
-
lsst/pipe/base/quantum_graph/aggregator/_structs.py,sha256=
|
|
97
|
-
lsst/pipe/base/quantum_graph/aggregator/_supervisor.py,sha256=
|
|
98
|
-
lsst/pipe/base/quantum_graph/aggregator/_writer.py,sha256=
|
|
94
|
+
lsst/pipe/base/quantum_graph/aggregator/_progress.py,sha256=jiz9Np73uUQ03CtH7pI6TXxXrwFUChh5hSj_gbMGHr0,7207
|
|
95
|
+
lsst/pipe/base/quantum_graph/aggregator/_scanner.py,sha256=-KhVNc9fgLCl3gIzHuAh8xaXk0fNUA_DUGsKCmKhegU,21428
|
|
96
|
+
lsst/pipe/base/quantum_graph/aggregator/_structs.py,sha256=Wbzc_set7qtWE41UHc93XL2FshbxuUL0Ulov_CN9WoY,5133
|
|
97
|
+
lsst/pipe/base/quantum_graph/aggregator/_supervisor.py,sha256=wBgFE55e6Oc5JPLe8S2gndVbVQwFwDHnmtEOBy5QwIk,9419
|
|
98
|
+
lsst/pipe/base/quantum_graph/aggregator/_writer.py,sha256=DpVkKEJVSiHJh21b0iip8_joKLrOYkUvDylhj7DUyxo,24555
|
|
99
99
|
lsst/pipe/base/script/__init__.py,sha256=cLEXE7aq5UZ0juL_ScmRw0weFgp4tDgwEX_ts-NEYic,1522
|
|
100
100
|
lsst/pipe/base/script/register_instrument.py,sha256=TRC2r2tSoYBNWNVQya01ELxAtGH8WVk9Ya-uNgCIL5U,2426
|
|
101
101
|
lsst/pipe/base/script/retrieve_artifacts_for_quanta.py,sha256=pYI0wNl5PU8ImgzWfGEDrRz3PSKSg2szWLEIVKdm7Og,3939
|
|
@@ -109,17 +109,17 @@ lsst/pipe/base/tests/pipelineStepTester.py,sha256=KGxdB8gdVpSey2RUGURDIzIfPL-4qv
|
|
|
109
109
|
lsst/pipe/base/tests/simpleQGraph.py,sha256=WHphpVvOA9eSbVtUp884wjk4g6ppFLM7gnddDYSwnTc,19862
|
|
110
110
|
lsst/pipe/base/tests/util.py,sha256=IXpZOC58fdRnurB5lPcNX-xRgKEV-cPNkWKJDFIr1gs,4772
|
|
111
111
|
lsst/pipe/base/tests/mocks/__init__.py,sha256=fDy9H9vRAIBpKDJEXNZuDWJMzWZfpcBT4TmyOw4o-RY,1572
|
|
112
|
-
lsst/pipe/base/tests/mocks/_data_id_match.py,sha256=
|
|
113
|
-
lsst/pipe/base/tests/mocks/_pipeline_task.py,sha256=
|
|
112
|
+
lsst/pipe/base/tests/mocks/_data_id_match.py,sha256=jVekStcrItC0tqOCc01VjYaiE9exYm3MRkwB0Gh_3J0,7465
|
|
113
|
+
lsst/pipe/base/tests/mocks/_pipeline_task.py,sha256=N3fC4OMAMWWnYtyLkVdMfb9ZiFse39HniRDvlAOofOY,30691
|
|
114
114
|
lsst/pipe/base/tests/mocks/_repo.py,sha256=OTJw_fi37w7bkZbbLa7z51W-45zxySAnLbV7Qv_aSB4,27423
|
|
115
115
|
lsst/pipe/base/tests/mocks/_storage_class.py,sha256=12IFfJMbZ5GkYlMX6ZMWiG8pMZc2Jlxke3qQW-bljdU,27434
|
|
116
|
-
lsst_pipe_base-29.2025.
|
|
117
|
-
lsst_pipe_base-29.2025.
|
|
118
|
-
lsst_pipe_base-29.2025.
|
|
119
|
-
lsst_pipe_base-29.2025.
|
|
120
|
-
lsst_pipe_base-29.2025.
|
|
121
|
-
lsst_pipe_base-29.2025.
|
|
122
|
-
lsst_pipe_base-29.2025.
|
|
123
|
-
lsst_pipe_base-29.2025.
|
|
124
|
-
lsst_pipe_base-29.2025.
|
|
125
|
-
lsst_pipe_base-29.2025.
|
|
116
|
+
lsst_pipe_base-29.2025.4600.dist-info/licenses/COPYRIGHT,sha256=kB3Z9_f6a6uFLGpEmNJT_n186CE65H6wHu4F6BNt_zA,368
|
|
117
|
+
lsst_pipe_base-29.2025.4600.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
|
|
118
|
+
lsst_pipe_base-29.2025.4600.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
|
|
119
|
+
lsst_pipe_base-29.2025.4600.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
120
|
+
lsst_pipe_base-29.2025.4600.dist-info/METADATA,sha256=Ni9gwJOKJi1MoBd8EFnh7Z20hmqWTS5IxxEXtnf3M54,2257
|
|
121
|
+
lsst_pipe_base-29.2025.4600.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
122
|
+
lsst_pipe_base-29.2025.4600.dist-info/entry_points.txt,sha256=bnmUhJBsChxMdqST9VmFBYYKxLQoToOfqW1wjW7khjk,64
|
|
123
|
+
lsst_pipe_base-29.2025.4600.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
|
|
124
|
+
lsst_pipe_base-29.2025.4600.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
125
|
+
lsst_pipe_base-29.2025.4600.dist-info/RECORD,,
|
|
File without changes
|
{lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/licenses/COPYRIGHT
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.4400.dist-info → lsst_pipe_base-29.2025.4600.dist-info}/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|