lsst-pipe-base 30.2026.200__py3-none-any.whl → 30.2026.400__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 (45) hide show
  1. lsst/pipe/base/_instrument.py +10 -12
  2. lsst/pipe/base/_status.py +29 -10
  3. lsst/pipe/base/automatic_connection_constants.py +9 -1
  4. lsst/pipe/base/cli/cmd/__init__.py +16 -2
  5. lsst/pipe/base/cli/cmd/commands.py +42 -4
  6. lsst/pipe/base/connectionTypes.py +72 -160
  7. lsst/pipe/base/connections.py +3 -6
  8. lsst/pipe/base/execution_reports.py +0 -5
  9. lsst/pipe/base/log_capture.py +8 -4
  10. lsst/pipe/base/log_on_close.py +79 -0
  11. lsst/pipe/base/mp_graph_executor.py +51 -15
  12. lsst/pipe/base/pipeline.py +3 -4
  13. lsst/pipe/base/pipelineIR.py +0 -6
  14. lsst/pipe/base/pipelineTask.py +5 -7
  15. lsst/pipe/base/pipeline_graph/_edges.py +19 -7
  16. lsst/pipe/base/pipeline_graph/_pipeline_graph.py +8 -0
  17. lsst/pipe/base/quantum_graph/_common.py +7 -4
  18. lsst/pipe/base/quantum_graph/_multiblock.py +6 -16
  19. lsst/pipe/base/quantum_graph/_predicted.py +111 -10
  20. lsst/pipe/base/quantum_graph/_provenance.py +727 -26
  21. lsst/pipe/base/quantum_graph/aggregator/_communicators.py +26 -50
  22. lsst/pipe/base/quantum_graph/aggregator/_config.py +78 -9
  23. lsst/pipe/base/quantum_graph/aggregator/_ingester.py +12 -11
  24. lsst/pipe/base/quantum_graph/aggregator/_scanner.py +48 -234
  25. lsst/pipe/base/quantum_graph/aggregator/_structs.py +6 -116
  26. lsst/pipe/base/quantum_graph/aggregator/_supervisor.py +24 -18
  27. lsst/pipe/base/quantum_graph/aggregator/_writer.py +33 -350
  28. lsst/pipe/base/quantum_graph/formatter.py +171 -0
  29. lsst/pipe/base/quantum_graph/ingest_graph.py +356 -0
  30. lsst/pipe/base/quantum_graph_executor.py +116 -13
  31. lsst/pipe/base/quantum_provenance_graph.py +17 -2
  32. lsst/pipe/base/separable_pipeline_executor.py +18 -2
  33. lsst/pipe/base/single_quantum_executor.py +59 -41
  34. lsst/pipe/base/struct.py +4 -0
  35. lsst/pipe/base/version.py +1 -1
  36. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/METADATA +2 -1
  37. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/RECORD +45 -42
  38. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/WHEEL +1 -1
  39. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/entry_points.txt +0 -0
  40. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/licenses/COPYRIGHT +0 -0
  41. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/licenses/LICENSE +0 -0
  42. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/licenses/bsd_license.txt +0 -0
  43. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/licenses/gpl-v3.0.txt +0 -0
  44. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/top_level.txt +0 -0
  45. {lsst_pipe_base-30.2026.200.dist-info → lsst_pipe_base-30.2026.400.dist-info}/zip-safe +0 -0
@@ -37,13 +37,13 @@ from typing import Any
37
37
 
38
38
  from lsst.daf.butler import (
39
39
  Butler,
40
- ButlerMetrics,
41
40
  DatasetRef,
42
41
  DatasetType,
43
42
  LimitedButler,
44
43
  NamedKeyDict,
45
44
  Quantum,
46
45
  )
46
+ from lsst.daf.butler.logging import ButlerLogRecords
47
47
  from lsst.utils.introspection import get_full_type_name
48
48
  from lsst.utils.timer import logInfo
49
49
 
@@ -59,7 +59,7 @@ from .connections import AdjustQuantumHelper
59
59
  from .log_capture import LogCapture, _ExecutionLogRecordsExtra
60
60
  from .pipeline_graph import TaskNode
61
61
  from .pipelineTask import PipelineTask
62
- from .quantum_graph_executor import QuantumExecutor
62
+ from .quantum_graph_executor import QuantumExecutionResult, QuantumExecutor
63
63
  from .quantum_reports import QuantumReport
64
64
  from .task import _TASK_FULL_METADATA_TYPE, _TASK_METADATA_TYPE
65
65
  from .taskFactory import TaskFactory
@@ -78,12 +78,12 @@ class SingleQuantumExecutor(QuantumExecutor):
78
78
  Instance of a task factory. Defaults to a new instance of
79
79
  `lsst.pipe.base.TaskFactory`.
80
80
  skip_existing_in : `str` or `~collections.abc.Iterable` [ `str` ]
81
- Expressions representing the collections to search for existing output
82
- datasets. See :ref:`daf_butler_ordered_collection_searches` for allowed
83
- types. This class only checks for the presence of butler output run in
84
- the list of collections. If the output run is present in the list then
85
- the quanta whose complete outputs exist in the output run will be
86
- skipped. `None` or empty string/sequence disables skipping.
81
+ A collection name or list of collections to search for the existing
82
+ outputs of quanta, which indicates that those quanta should be skipped.
83
+ This class only checks for the presence of butler output run in the
84
+ list of collections. If the output run is present in the list then the
85
+ quanta whose complete outputs exist in the output run will be skipped.
86
+ `None` or empty string/sequence disables skipping.
87
87
  clobber_outputs : `bool`, optional
88
88
  If `True`, then outputs from a quantum that exist in output run
89
89
  collection will be removed prior to executing a quantum. If
@@ -157,21 +157,28 @@ class SingleQuantumExecutor(QuantumExecutor):
157
157
  self._previous_process_quanta: list[uuid.UUID] = []
158
158
 
159
159
  def execute(
160
- self, task_node: TaskNode, /, quantum: Quantum, quantum_id: uuid.UUID | None = None
161
- ) -> tuple[Quantum, QuantumReport | None]:
160
+ self,
161
+ task_node: TaskNode,
162
+ /,
163
+ quantum: Quantum,
164
+ quantum_id: uuid.UUID | None = None,
165
+ *,
166
+ log_records: ButlerLogRecords | None = None,
167
+ ) -> QuantumExecutionResult:
162
168
  # Docstring inherited from QuantumExecutor.execute
163
- assert quantum.dataId is not None, "Quantum DataId cannot be None"
164
-
165
169
  if self._butler is not None:
166
170
  self._butler.registry.refresh()
167
-
168
- result = self._execute(task_node, quantum, quantum_id=quantum_id)
169
- report = QuantumReport(quantumId=quantum_id, dataId=quantum.dataId, taskLabel=task_node.label)
170
- return result, report
171
+ return self._execute(task_node, quantum, quantum_id=quantum_id, log_records=log_records)
171
172
 
172
173
  def _execute(
173
- self, task_node: TaskNode, /, quantum: Quantum, quantum_id: uuid.UUID | None = None
174
- ) -> Quantum:
174
+ self,
175
+ task_node: TaskNode,
176
+ /,
177
+ quantum: Quantum,
178
+ quantum_id: uuid.UUID | None = None,
179
+ *,
180
+ log_records: ButlerLogRecords | None = None,
181
+ ) -> QuantumExecutionResult:
175
182
  """Execute the quantum.
176
183
 
177
184
  Internal implementation of `execute()`.
@@ -189,7 +196,7 @@ class SingleQuantumExecutor(QuantumExecutor):
189
196
 
190
197
  try:
191
198
  return self._execute_with_limited_butler(
192
- task_node, limited_butler, quantum=quantum, quantum_id=quantum_id
199
+ task_node, limited_butler, quantum=quantum, quantum_id=quantum_id, log_records=log_records
193
200
  )
194
201
  finally:
195
202
  if used_butler_factory:
@@ -202,14 +209,17 @@ class SingleQuantumExecutor(QuantumExecutor):
202
209
  /,
203
210
  quantum: Quantum,
204
211
  quantum_id: uuid.UUID | None = None,
205
- ) -> Quantum:
212
+ *,
213
+ log_records: ButlerLogRecords | None = None,
214
+ ) -> QuantumExecutionResult:
206
215
  startTime = time.time()
207
-
216
+ assert quantum.dataId is not None, "Quantum DataId cannot be None"
217
+ report = QuantumReport(quantumId=quantum_id, dataId=quantum.dataId, taskLabel=task_node.label)
208
218
  if self._butler is not None:
209
219
  log_capture = LogCapture.from_full(self._butler)
210
220
  else:
211
221
  log_capture = LogCapture.from_limited(limited_butler)
212
- with log_capture.capture_logging(task_node, quantum) as captureLog:
222
+ with log_capture.capture_logging(task_node, quantum, records=log_records) as captureLog:
213
223
  # Save detailed resource usage before task start to metadata.
214
224
  quantumMetadata = _TASK_METADATA_TYPE()
215
225
  logInfo(None, "prep", metadata=quantumMetadata) # type: ignore[arg-type]
@@ -228,7 +238,7 @@ class SingleQuantumExecutor(QuantumExecutor):
228
238
  task_node.label,
229
239
  quantum.dataId,
230
240
  )
231
- return quantum
241
+ return QuantumExecutionResult(quantum, report, skipped_existing=True, adjusted_no_work=False)
232
242
  captureLog.store = True
233
243
 
234
244
  captureLog.extra.previous_process_quanta.extend(self._previous_process_quanta)
@@ -256,7 +266,7 @@ class SingleQuantumExecutor(QuantumExecutor):
256
266
  if self._job_metadata is not None:
257
267
  fullMetadata["job"] = self._job_metadata
258
268
  self._write_metadata(quantum, fullMetadata, task_node, limited_butler)
259
- return quantum
269
+ return QuantumExecutionResult(quantum, report, skipped_existing=False, adjusted_no_work=True)
260
270
 
261
271
  # enable lsstDebug debugging
262
272
  if self._enable_lsst_debug:
@@ -278,10 +288,12 @@ class SingleQuantumExecutor(QuantumExecutor):
278
288
  )
279
289
  task = self._task_factory.makeTask(task_node, limited_butler, init_input_refs)
280
290
  logInfo(None, "start", metadata=quantumMetadata) # type: ignore[arg-type]
291
+ outputs_put: list[uuid.UUID] = []
281
292
  try:
282
- caveats, outputsPut, butler_metrics = self._run_quantum(
283
- task, quantum, task_node, limited_butler, quantum_id=quantum_id
284
- )
293
+ with limited_butler.record_metrics() as butler_metrics:
294
+ caveats = self._run_quantum(
295
+ task, quantum, task_node, limited_butler, quantum_id=quantum_id, ids_put=outputs_put
296
+ )
285
297
  except Exception as e:
286
298
  _LOG.error(
287
299
  "Execution of task '%s' on quantum %s failed. Exception %s: %s",
@@ -301,10 +313,10 @@ class SingleQuantumExecutor(QuantumExecutor):
301
313
  quantumMetadata["caveats"] = caveats.value
302
314
  # Stringify the UUID for easier compatibility with
303
315
  # PropertyList.
304
- quantumMetadata["outputs"] = [str(output) for output in outputsPut]
305
316
  finally:
306
317
  logInfo(None, "end", metadata=quantumMetadata) # type: ignore[arg-type]
307
318
  fullMetadata = task.getFullMetadata()
319
+ quantumMetadata["outputs"] = [str(output) for output in outputs_put]
308
320
  fullMetadata["quantum"] = quantumMetadata
309
321
  if self._job_metadata is not None:
310
322
  fullMetadata["job"] = self._job_metadata
@@ -317,7 +329,13 @@ class SingleQuantumExecutor(QuantumExecutor):
317
329
  quantum.dataId,
318
330
  stopTime - startTime,
319
331
  )
320
- return quantum
332
+ return QuantumExecutionResult(
333
+ quantum,
334
+ report,
335
+ skipped_existing=False,
336
+ adjusted_no_work=False,
337
+ task_metadata=fullMetadata,
338
+ )
321
339
 
322
340
  def _check_existing_outputs(
323
341
  self,
@@ -519,8 +537,9 @@ class SingleQuantumExecutor(QuantumExecutor):
519
537
  task_node: TaskNode,
520
538
  /,
521
539
  limited_butler: LimitedButler,
522
- quantum_id: uuid.UUID | None = None,
523
- ) -> tuple[QuantumSuccessCaveats, list[uuid.UUID], ButlerMetrics]:
540
+ quantum_id: uuid.UUID | None,
541
+ ids_put: list[uuid.UUID],
542
+ ) -> QuantumSuccessCaveats:
524
543
  """Execute task on a single quantum.
525
544
 
526
545
  Parameters
@@ -533,18 +552,17 @@ class SingleQuantumExecutor(QuantumExecutor):
533
552
  Task definition structure.
534
553
  limited_butler : `~lsst.daf.butler.LimitedButler`
535
554
  Butler to use for dataset I/O.
536
- quantum_id : `uuid.UUID` or `None`, optional
555
+ quantum_id : `uuid.UUID` or `None`
537
556
  ID of the quantum being executed.
557
+ ids_put : list[ `uuid.UUID` ]
558
+ List to be populated with the dataset IDs that were written by this
559
+ quantum. This is an output parameter in order to allow it to be
560
+ populated even when an exception is raised.
538
561
 
539
562
  Returns
540
563
  -------
541
564
  flags : `QuantumSuccessCaveats`
542
565
  Flags that describe qualified successes.
543
- ids_put : list[ `uuid.UUID` ]
544
- Record of all the dataset IDs that were written by this quantum
545
- being executed.
546
- metrics : `lsst.daf.butler.ButlerMetrics`
547
- Butler metrics recorded for this quantum.
548
566
  """
549
567
  flags = QuantumSuccessCaveats.NO_CAVEATS
550
568
 
@@ -556,8 +574,7 @@ class SingleQuantumExecutor(QuantumExecutor):
556
574
 
557
575
  # Call task runQuantum() method.
558
576
  try:
559
- with limited_butler.record_metrics() as butler_metrics:
560
- task.runQuantum(butlerQC, inputRefs, outputRefs)
577
+ task.runQuantum(butlerQC, inputRefs, outputRefs)
561
578
  except NoWorkFound as err:
562
579
  # Not an error, just an early exit.
563
580
  _LOG.info(
@@ -595,12 +612,13 @@ class SingleQuantumExecutor(QuantumExecutor):
595
612
  )
596
613
  _LOG.error(error, exc_info=error)
597
614
  flags |= caught.FLAGS
615
+ finally:
616
+ ids_put.extend(output[2] for output in butlerQC.outputsPut)
598
617
  if not butlerQC.outputsPut:
599
618
  flags |= QuantumSuccessCaveats.ALL_OUTPUTS_MISSING
600
619
  if not butlerQC.outputsPut == butlerQC.allOutputs:
601
620
  flags |= QuantumSuccessCaveats.ANY_OUTPUTS_MISSING
602
- ids_put = [output[2] for output in butlerQC.outputsPut]
603
- return flags, ids_put, butler_metrics
621
+ return flags
604
622
 
605
623
  def _write_metadata(
606
624
  self, quantum: Quantum, metadata: Any, task_node: TaskNode, /, limited_butler: LimitedButler
lsst/pipe/base/struct.py CHANGED
@@ -116,6 +116,10 @@ class Struct(SimpleNamespace):
116
116
  *nameList : `str`
117
117
  All remaining arguments are names of items to copy.
118
118
 
119
+ Returns
120
+ -------
121
+ None
122
+
119
123
  Raises
120
124
  ------
121
125
  RuntimeError
lsst/pipe/base/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  __all__ = ["__version__"]
2
- __version__ = "30.2026.200"
2
+ __version__ = "30.2026.400"
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 30.2026.200
3
+ Version: 30.2026.400
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
7
7
  Project-URL: Homepage, https://github.com/lsst/pipe_base
8
+ Project-URL: Source, https://github.com/lsst/pipe_base
8
9
  Keywords: lsst
9
10
  Classifier: Intended Audience :: Science/Research
10
11
  Classifier: Operating System :: OS Independent
@@ -3,50 +3,51 @@ lsst/pipe/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
3
3
  lsst/pipe/base/__init__.py,sha256=qBLN0yYQjIcLBLb4jFKM_ppopuqTnCehcUdFcEe69Js,970
4
4
  lsst/pipe/base/_datasetQueryConstraints.py,sha256=bFH0_lVc49NS2_4v_i6r9POr500c0K-OHLMhMX5FjkQ,6373
5
5
  lsst/pipe/base/_dataset_handle.py,sha256=ft_ke1LbhLLndDPARsHSQJUA05LgUFnfWOq2vbwH3wI,11353
6
- lsst/pipe/base/_instrument.py,sha256=I9UTaj81krR1zkTZ1owfOPBzHN29PY3Egg7fIE5obxQ,30057
6
+ lsst/pipe/base/_instrument.py,sha256=TE7r3kkBla2yZh8wRGDpcNSfnkRO7hb-svPTMsRaoj4,30018
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=7gJPrqt03t1fO5tREc_sfQaN7XmDBvruihORXPnRqUE,21216
9
+ lsst/pipe/base/_status.py,sha256=L46GofjfgptoBUxmtenrPZ7-MmM4WMQAPAc0sMsHeS4,21770
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
- lsst/pipe/base/automatic_connection_constants.py,sha256=H5uuh1rYRpjndgPdb0dh1L_-OyLKdT6VWOZTAb__xCU,3298
12
+ lsst/pipe/base/automatic_connection_constants.py,sha256=JYoi3Ngz9FP8y34V1onNGLQ_iJurqb5HkOVgn4uUYLI,3636
13
13
  lsst/pipe/base/caching_limited_butler.py,sha256=FEQK_QesUWG9sK0w9m6_SA5OPcrd6vqyq8oDKE9Wu6I,7858
14
14
  lsst/pipe/base/config.py,sha256=yNipVEc6awwhU_O9I01g20OnvQrs28dAwkXuI1hrlYE,11982
15
15
  lsst/pipe/base/configOverrides.py,sha256=B0An8EaX76VzWnC5dJxvyZ2AhVzawMtq7qlE9ma5lkc,14661
16
- lsst/pipe/base/connectionTypes.py,sha256=inUDyzbM1sKMCtHaRkhx3dWSPHPBIDVMHOPhzB13Kdw,16720
17
- lsst/pipe/base/connections.py,sha256=UIe1km5_bOth5o9LZtjpT2r9vc44K4TGmz5Fvmqu5rA,67178
16
+ lsst/pipe/base/connectionTypes.py,sha256=RbhGQpEdwpnDlexV_FoWoYBwcayHXsW0TZevtvK1s5c,11251
17
+ lsst/pipe/base/connections.py,sha256=M9-btv4TIpxupELLzk-aq03WL0kQnOEQEM3dS_qQT5A,67104
18
18
  lsst/pipe/base/dot_tools.py,sha256=vriWMaB8YTEKKvhJE5KYdVGE4gB5XmiYfD2f18Fue-c,4285
19
19
  lsst/pipe/base/exec_fixup_data_id.py,sha256=9OjOcH-6AHZ1JnD_CemieI0wWX90J_VdaY9v1oXwMdQ,4187
20
20
  lsst/pipe/base/execution_graph_fixup.py,sha256=ND0x4hlpeEW-gudo-i2K7HT7MoM5sp_mcoqRMCopSqQ,3815
21
- lsst/pipe/base/execution_reports.py,sha256=jYtWCD4PkEAeVUpKIxuiJJVgsCm7qiwCorWVgNHkVgU,17270
21
+ lsst/pipe/base/execution_reports.py,sha256=62pY4sBQyHPCFceQzKLYQ0eQixNcmjs5m4DJAFAsPiA,17160
22
22
  lsst/pipe/base/graph_walker.py,sha256=Ij7JfYF0srA29VgM_DhbNBxUBeOHDOnujrTQPjVNha0,4694
23
- lsst/pipe/base/log_capture.py,sha256=2kuapttiMwpvevOleOMDcjEorXBCiVNSzsKj9fMDhI4,10818
23
+ lsst/pipe/base/log_capture.py,sha256=6fq1L53FUYsbILX-tQixXUhxQjvKxFGDjYELRDAXnsw,11072
24
+ lsst/pipe/base/log_on_close.py,sha256=rauQYvsWQF9GuxoaZRjPJJ7VjATGyRUo0RyHEoUVTnQ,2666
24
25
  lsst/pipe/base/mermaid_tools.py,sha256=cdlDJQ1x8k7-VvCLEUqvSC3GR1zCsB-aUTxOjYejNWc,5216
25
- lsst/pipe/base/mp_graph_executor.py,sha256=FKlFxjtU2-6SFzX_wsdtMMAj5P09ZE8V65-Sg585g2Y,35501
26
- lsst/pipe/base/pipeline.py,sha256=FVaiLhgw9Pzo-nzXKS0dLNafegP0AMZKLtPlSvOSkRU,37563
27
- lsst/pipe/base/pipelineIR.py,sha256=UuZ02NLhVmzzekbuWlyar7cPLCf_4yfzD5qFEmGHs_A,45821
28
- lsst/pipe/base/pipelineTask.py,sha256=K3GdjJLvy8A7I-jzQiERQZaYF7mC1LM3iB5TmUtbOCI,8394
26
+ lsst/pipe/base/mp_graph_executor.py,sha256=bbsJD0i-WpW1Qc6lAvagIIx__jZfeOqN8dyt3IsyEq0,37350
27
+ lsst/pipe/base/pipeline.py,sha256=EYtjKZfbNSegAB9FZawb00dZI1a9dhV85e-Dn9EZ4qg,37498
28
+ lsst/pipe/base/pipelineIR.py,sha256=XocAPtoGhfRoCLUPjRX0cqRqf4Evh8qEqUvQOTronj8,45660
29
+ lsst/pipe/base/pipelineTask.py,sha256=jCyT6F3oevQ66I33Ys6g20x0F2QxSVh5qFlDE_PMfE0,8245
29
30
  lsst/pipe/base/prerequisite_helpers.py,sha256=bmiebQ4veSrypZgAXjmCBFfj8fUtPW9eRQaVShhxdBQ,28446
30
31
  lsst/pipe/base/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
32
  lsst/pipe/base/quantum_graph_builder.py,sha256=YM3pvt4ignAZnpO9bpBc_Yl8V-y2r3SQmYJdWnyQQNI,68742
32
- lsst/pipe/base/quantum_graph_executor.py,sha256=WP41iQmihy1jfgaHV6eu2aSrqQx_Fydq3mbEF6CLQ-s,4419
33
+ lsst/pipe/base/quantum_graph_executor.py,sha256=-bbeR9wZ5_Etcqpx6cDS_R-oEvfUVv9gmW0Wc4QuQNc,8127
33
34
  lsst/pipe/base/quantum_graph_skeleton.py,sha256=hxSbeNhdCSBO2aqdIMRyQaejiUxKQfE6bSn0S0qWBNo,28395
34
- lsst/pipe/base/quantum_provenance_graph.py,sha256=33S5iCVxD9Co4oJSU_N8AJXL14Nw0UwGzPEc3gpQiqk,91981
35
+ lsst/pipe/base/quantum_provenance_graph.py,sha256=RxhEGbC_Rws1T-hpMBePRaK3tJ1KqDAI7_qIvvqCQKY,92674
35
36
  lsst/pipe/base/quantum_reports.py,sha256=ut235L88v7SXaeVUvMA9qFl7tpeMwGnzob3X0QoOI_s,14210
36
37
  lsst/pipe/base/resource_usage.py,sha256=LfH7Qf6taI3lxw0aB90riRMn1UxUTMBSqtBjKPJ-XuY,6759
37
- lsst/pipe/base/separable_pipeline_executor.py,sha256=vXqJrRI5GNezzGV9QsiaRHEhioDF2Y_W7JQYQCzHR7A,16720
38
+ lsst/pipe/base/separable_pipeline_executor.py,sha256=y3ZnQJApocxusHGG1R5Rnpke3B0vren1h4dcuyZLivs,17717
38
39
  lsst/pipe/base/simple_pipeline_executor.py,sha256=_HGeAOgHUiRdQwsmD_qira-vcHZXlLbf_LmhLJffh2U,29563
39
- lsst/pipe/base/single_quantum_executor.py,sha256=yCpDS_eHsJTOu34mHYv8DJjj8UG0GjPdCuXdb74A2p8,28543
40
- lsst/pipe/base/struct.py,sha256=Fa-UkpuXOxdzKWbHrMUkJYOszZuBXCm2NesXNR0IOPQ,5048
40
+ lsst/pipe/base/single_quantum_executor.py,sha256=CVlCtARVONZbe6TBkuoQccFCfAgSrTV4g2OgZugqv80,29273
41
+ lsst/pipe/base/struct.py,sha256=fHO9QzFtzL5-jxqhcBWbjyrdbiWO-Pt4Kx1X5bxN3SU,5094
41
42
  lsst/pipe/base/task.py,sha256=XHBd-7m1a4-6LgobBYA1DgY4H7EV-_RWKfxbhZbMmD4,15145
42
43
  lsst/pipe/base/taskFactory.py,sha256=MsDGECJqZLSZk8SGhpuVhNaP32UWuNvxZiDcZExPFG8,3412
43
44
  lsst/pipe/base/testUtils.py,sha256=lSBKMhoKflbi8JkMNYfEqqHNl-rtFI8UYT3QneDYpLo,18477
44
45
  lsst/pipe/base/utils.py,sha256=JmEt3l0xrh9uayKrSXuQEq12aXOhDr2YXmbYduaxCko,1940
45
- lsst/pipe/base/version.py,sha256=vgTysjvgyIfToGAJAZYhGrw5TNyO2wuCsNQXnaKfAlw,54
46
+ lsst/pipe/base/version.py,sha256=hP_T_OdeRTp5aTn88qE2-hdMB5_ZS6XI0kw3PpLsuXM,54
46
47
  lsst/pipe/base/cli/__init__.py,sha256=861tXIAW7SqtqNUYkjbeEdfg8lDswXsjJQca0gVCFz4,54
47
48
  lsst/pipe/base/cli/_get_cli_subcommands.py,sha256=g_af64klRybBGKAg7fmBSZBdw2LYBAsFON_yQIMZON0,1289
48
- lsst/pipe/base/cli/cmd/__init__.py,sha256=3UF2IQEEBor4YMGRNPdcZAVCAI5yFyeHp5nGul4IoyM,1557
49
- lsst/pipe/base/cli/cmd/commands.py,sha256=ilwKms1Gq4vc6Mddz3MB0fFcgWidseZeYlxTrOQlg8Q,9743
49
+ lsst/pipe/base/cli/cmd/__init__.py,sha256=mdSk2eaknOcuiX1i0XUwIWl5NoMwBfVbqc5CvvtJNaM,1641
50
+ lsst/pipe/base/cli/cmd/commands.py,sha256=djoTV-56qhrEuA-xW5_Ehh8YlOfp_tTBGswLjG1fl8k,11064
50
51
  lsst/pipe/base/cli/opt/__init__.py,sha256=DN17wUbMwNIgbDBfF35sdyGfaMT81f3b_CA5Pp8POdk,1347
51
52
  lsst/pipe/base/cli/opt/arguments.py,sha256=9LhDnsM98_2zOqqm-eyv_nnZmAQcBG5OpHzeJYw_eTw,1484
52
53
  lsst/pipe/base/cli/opt/options.py,sha256=d5mC2WXZJiUbkdaIo_VUsvNxShD3GmredbEN5jQD64Q,1900
@@ -62,11 +63,11 @@ lsst/pipe/base/graph/quantumNode.py,sha256=l4mslxBgyUzBAqwjpx6XRP-UPxe-oRMxHJWt-
62
63
  lsst/pipe/base/pipeline_graph/__init__.py,sha256=yTEuvlzbeKIHIm7GeRmGSsma1wpZFNv8j12WfSH-deY,1516
63
64
  lsst/pipe/base/pipeline_graph/__main__.py,sha256=E6ugEwJbds22wjgcfcgzeyO04JofQwVhn_Y8kZYY1lQ,20769
64
65
  lsst/pipe/base/pipeline_graph/_dataset_types.py,sha256=MzpiI4bOUgwUpnse4Bj_KFAUFm_uERCHWd0BwAhKksc,11333
65
- lsst/pipe/base/pipeline_graph/_edges.py,sha256=n6iCYql-TvAyM1xrINt7m02efjebJlIwhk254CCzfn8,35300
66
+ lsst/pipe/base/pipeline_graph/_edges.py,sha256=U7dIOJHwIieE-Oss7ZWbebbV1XBadOjSI-DGbSd_CkA,36049
66
67
  lsst/pipe/base/pipeline_graph/_exceptions.py,sha256=3jvCXms0_5ThLGtsOlKxsI1vWiq3gY4hba8fRBW0tgI,3943
67
68
  lsst/pipe/base/pipeline_graph/_mapping_views.py,sha256=9nLKPA8j7sS09haShbJnEtGXbb4vy_cWpbLeMLBmVvs,9194
68
69
  lsst/pipe/base/pipeline_graph/_nodes.py,sha256=GGXfzXvrjNbwPt-0w8cC0l_I6CCNskoDNjA8Ds4ILS0,4236
69
- lsst/pipe/base/pipeline_graph/_pipeline_graph.py,sha256=V5xvlH0VxPsSctWYD5kDT-HybfZqYjMtnZi6n48GEM4,122536
70
+ lsst/pipe/base/pipeline_graph/_pipeline_graph.py,sha256=sgG2Fz7FazRiIApB0rWp0D_zbvv9MUPhc6wF6XgsHno,122628
70
71
  lsst/pipe/base/pipeline_graph/_task_subsets.py,sha256=lLvcndSGcZigteWd4eeAM8LxQ1lHPBoysY8PjJTxx1c,13244
71
72
  lsst/pipe/base/pipeline_graph/_tasks.py,sha256=jTLpm5dZMXRNrGi3L45-3DtF95PGwhmejWLZ-zcSTzo,42802
72
73
  lsst/pipe/base/pipeline_graph/expressions.py,sha256=wNNVSWVMDZs_dp4Xd30rt1Xj8PfzWikJKo-amaJ-leM,7690
@@ -82,20 +83,22 @@ lsst/pipe/base/pipeline_graph/visualization/_printer.py,sha256=yJMRJ-aXd3nYDgs1F
82
83
  lsst/pipe/base/pipeline_graph/visualization/_show.py,sha256=lPRjO1To2n5r3f_Wgcwy-7TmyJ7UszGGFXAlOtN1wDs,10510
83
84
  lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py,sha256=dp7PXl9Cu7GfWjBi5g8KjXZgnF1KGg_idKKxtICL53Q,8679
84
85
  lsst/pipe/base/quantum_graph/__init__.py,sha256=-Gp3LihB0AXCvhG387wKAEpHRM-NrHGSXMti8cHee90,1437
85
- lsst/pipe/base/quantum_graph/_common.py,sha256=tgQsIylvs5wSAKs3SVp5_XJ7XEBJwBcRUbBGR2EFuwU,22714
86
- lsst/pipe/base/quantum_graph/_multiblock.py,sha256=kc2pqezfU7xOAxYZa41mz3G4X5w4GVfovw3ZcjNgK2Y,27950
87
- lsst/pipe/base/quantum_graph/_predicted.py,sha256=ImcH5nYvbUD7bfEnm5sp9wTcEn01ZwseqK1UkQeZ1Sc,87933
88
- lsst/pipe/base/quantum_graph/_provenance.py,sha256=R1SoRxyi6cNi9fXSc7ybrbri9anuYnliJ6SBmVUrh40,55102
86
+ lsst/pipe/base/quantum_graph/_common.py,sha256=vG20KZBeg1TvWfq0vrA8NDFa1Pkg5H8fC2bU1_AK8-o,22948
87
+ lsst/pipe/base/quantum_graph/_multiblock.py,sha256=lw--3Ol-nmQPkC5gzC95xUTkGXOVAfPoa1bb21cFHXE,27412
88
+ lsst/pipe/base/quantum_graph/_predicted.py,sha256=UwqCtG3g3qTmFr7Quaxi-vUux75cuAlwR92muyynSR4,91418
89
+ lsst/pipe/base/quantum_graph/_provenance.py,sha256=d7WyxGx4fRla1tIrq2UH_-pGFrblAzBoybZN7ODSWt8,86779
90
+ lsst/pipe/base/quantum_graph/formatter.py,sha256=oqoQ4tmguo8zr-kdAT9V8MWvFridRxKoQ0YzD07DtrI,7247
91
+ lsst/pipe/base/quantum_graph/ingest_graph.py,sha256=eNW4-OBP8tDivb6JPOgBj8oWTeuV_citcFxfcxIJzrY,15234
89
92
  lsst/pipe/base/quantum_graph/visualization.py,sha256=EbTWhk9aPq7sX6bcHmnEIsr2xuuR6d1SxspQbRe8D0Q,12235
90
93
  lsst/pipe/base/quantum_graph/aggregator/__init__.py,sha256=4CK8sP_ZjUKmxKS3LnCH1zG7XSk9IEwijrluRBHhEMU,7436
91
- lsst/pipe/base/quantum_graph/aggregator/_communicators.py,sha256=w7hNEQjE1Qjhi6u4Tx4wS_1RrV3-WQRCz1FACd-vmro,36396
92
- lsst/pipe/base/quantum_graph/aggregator/_config.py,sha256=iV1Ejfk-UnFoQ8TkpJE_jMZYHsmZcdLm5R-FnQEqO7s,5167
93
- lsst/pipe/base/quantum_graph/aggregator/_ingester.py,sha256=lhu8I0R3IwoLkVcrqF1ypoHAFamNapSoMcG9aYFjbQ4,14158
94
+ lsst/pipe/base/quantum_graph/aggregator/_communicators.py,sha256=6Nwo4V5xVU292kxvsgXX1k0otjKOy2S-AKe3RP5ac-k,35476
95
+ lsst/pipe/base/quantum_graph/aggregator/_config.py,sha256=X6DZ8qN2eD8xAwC7ZXyvE1iNY-x5M48TG9OEFEf4ugg,8254
96
+ lsst/pipe/base/quantum_graph/aggregator/_ingester.py,sha256=XINi5ei66wTpGh-_Dr4xenPOR09K5rifRNooNDt8qrc,14093
94
97
  lsst/pipe/base/quantum_graph/aggregator/_progress.py,sha256=jiz9Np73uUQ03CtH7pI6TXxXrwFUChh5hSj_gbMGHr0,7207
95
- lsst/pipe/base/quantum_graph/aggregator/_scanner.py,sha256=4wg2cgVcAoqyuZZUBogHXWkSr9X6sVwnJLu_o96D204,22758
96
- lsst/pipe/base/quantum_graph/aggregator/_structs.py,sha256=bM-MejZz5DFUFQCH8kZDykuMBmBJYbQMl15nBm-3dtc,5499
97
- lsst/pipe/base/quantum_graph/aggregator/_supervisor.py,sha256=5-6CshU9RFyVEgYI3qJwuVEGw8YtT9Ei7cNkcghXzMk,9290
98
- lsst/pipe/base/quantum_graph/aggregator/_writer.py,sha256=fYQrJGCg3MQQQF1feWXCLyG6m5ucnzFrIINawWgnF8g,21504
98
+ lsst/pipe/base/quantum_graph/aggregator/_scanner.py,sha256=v109MsWDvQfZGSejtCTKiBeqC168lkzku4aoLoJtfCM,13398
99
+ lsst/pipe/base/quantum_graph/aggregator/_structs.py,sha256=MUBk8wrThFz4CuoIFUlm4t5K3QOBbye9uI1CAAdUIoA,2374
100
+ lsst/pipe/base/quantum_graph/aggregator/_supervisor.py,sha256=7rnxTamY7oC0HwX1tPHxRo0jk-MPwPWcAIbKlzxNXSo,9587
101
+ lsst/pipe/base/quantum_graph/aggregator/_writer.py,sha256=GK7WYYwQ6fB-UGdXK1Y_vMar4NBogP5QkSEZE2ujJMo,7959
99
102
  lsst/pipe/base/script/__init__.py,sha256=cLEXE7aq5UZ0juL_ScmRw0weFgp4tDgwEX_ts-NEYic,1522
100
103
  lsst/pipe/base/script/register_instrument.py,sha256=neQ2MTPtAiV_Hl2yatQ8-vQC24xHjhpI7VJUHf5kPX4,2445
101
104
  lsst/pipe/base/script/retrieve_artifacts_for_quanta.py,sha256=Cr0HpzXm_C3LnIOQg5tNJht02O6xoqtWWIphjugasMA,3957
@@ -113,13 +116,13 @@ lsst/pipe/base/tests/mocks/_data_id_match.py,sha256=jVekStcrItC0tqOCc01VjYaiE9ex
113
116
  lsst/pipe/base/tests/mocks/_pipeline_task.py,sha256=N3fC4OMAMWWnYtyLkVdMfb9ZiFse39HniRDvlAOofOY,30691
114
117
  lsst/pipe/base/tests/mocks/_repo.py,sha256=SH-jzynS-H2xc_3GLjF7ln-kHdRoSeVVaal5qLd2hXI,28359
115
118
  lsst/pipe/base/tests/mocks/_storage_class.py,sha256=12IFfJMbZ5GkYlMX6ZMWiG8pMZc2Jlxke3qQW-bljdU,27434
116
- lsst_pipe_base-30.2026.200.dist-info/licenses/COPYRIGHT,sha256=kB3Z9_f6a6uFLGpEmNJT_n186CE65H6wHu4F6BNt_zA,368
117
- lsst_pipe_base-30.2026.200.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
118
- lsst_pipe_base-30.2026.200.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
119
- lsst_pipe_base-30.2026.200.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
120
- lsst_pipe_base-30.2026.200.dist-info/METADATA,sha256=MWV5pfZwuupqXk7qSM6DNIys4n4b0tTSU9oSKHDSMzo,2256
121
- lsst_pipe_base-30.2026.200.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
122
- lsst_pipe_base-30.2026.200.dist-info/entry_points.txt,sha256=bnmUhJBsChxMdqST9VmFBYYKxLQoToOfqW1wjW7khjk,64
123
- lsst_pipe_base-30.2026.200.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
124
- lsst_pipe_base-30.2026.200.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
125
- lsst_pipe_base-30.2026.200.dist-info/RECORD,,
119
+ lsst_pipe_base-30.2026.400.dist-info/licenses/COPYRIGHT,sha256=kB3Z9_f6a6uFLGpEmNJT_n186CE65H6wHu4F6BNt_zA,368
120
+ lsst_pipe_base-30.2026.400.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
121
+ lsst_pipe_base-30.2026.400.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
122
+ lsst_pipe_base-30.2026.400.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
123
+ lsst_pipe_base-30.2026.400.dist-info/METADATA,sha256=hULhHW-APbX1JXauegJfvhoABggjeJK5IvrO0fTdTS8,2311
124
+ lsst_pipe_base-30.2026.400.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
125
+ lsst_pipe_base-30.2026.400.dist-info/entry_points.txt,sha256=bnmUhJBsChxMdqST9VmFBYYKxLQoToOfqW1wjW7khjk,64
126
+ lsst_pipe_base-30.2026.400.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
127
+ lsst_pipe_base-30.2026.400.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
128
+ lsst_pipe_base-30.2026.400.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5