lsst-pipe-base 29.2025.4600__py3-none-any.whl → 29.2025.4800__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 (22) hide show
  1. lsst/pipe/base/connections.py +11 -0
  2. lsst/pipe/base/quantum_graph/_common.py +15 -1
  3. lsst/pipe/base/quantum_graph/_multiblock.py +14 -39
  4. lsst/pipe/base/quantum_graph/_predicted.py +77 -73
  5. lsst/pipe/base/quantum_graph/_provenance.py +73 -144
  6. lsst/pipe/base/quantum_graph/aggregator/_communicators.py +10 -10
  7. lsst/pipe/base/quantum_graph/aggregator/_scanner.py +88 -60
  8. lsst/pipe/base/quantum_graph/aggregator/_structs.py +36 -19
  9. lsst/pipe/base/quantum_graph/aggregator/_supervisor.py +7 -10
  10. lsst/pipe/base/quantum_graph/aggregator/_writer.py +55 -144
  11. lsst/pipe/base/quantum_graph_builder.py +0 -1
  12. lsst/pipe/base/version.py +1 -1
  13. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/METADATA +1 -1
  14. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/RECORD +22 -22
  15. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/WHEEL +0 -0
  16. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/entry_points.txt +0 -0
  17. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/licenses/COPYRIGHT +0 -0
  18. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/licenses/LICENSE +0 -0
  19. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/licenses/bsd_license.txt +0 -0
  20. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/licenses/gpl-v3.0.txt +0 -0
  21. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/top_level.txt +0 -0
  22. {lsst_pipe_base-29.2025.4600.dist-info → lsst_pipe_base-29.2025.4800.dist-info}/zip-safe +0 -0
@@ -30,7 +30,6 @@ from __future__ import annotations
30
30
  __all__ = ("Writer",)
31
31
 
32
32
  import dataclasses
33
- import enum
34
33
  import itertools
35
34
  import logging
36
35
  import operator
@@ -62,69 +61,7 @@ from .._provenance import (
62
61
  ProvenanceQuantumModel,
63
62
  )
64
63
  from ._communicators import WriterCommunicator
65
- from ._structs import ScanResult
66
-
67
-
68
- class _CompressionState(enum.Enum):
69
- """Enumeration of the possible states of compression in `_ScanData`."""
70
-
71
- NOT_COMPRESSED = enum.auto()
72
- """Nothing is compressed."""
73
-
74
- LOG_AND_METADATA_COMPRESSED = enum.auto()
75
- """Only the logs and metadata are compressed."""
76
-
77
- ALL_COMPRESSED = enum.auto()
78
- """All `bytes` are compressed."""
79
-
80
-
81
- @dataclasses.dataclass
82
- class _ScanData:
83
- """Information from a quantum scan that has been partially processed for
84
- writing.
85
- """
86
-
87
- quantum_id: uuid.UUID
88
- """Unique ID of the quantum."""
89
-
90
- log_id: uuid.UUID
91
- """Unique ID of the log dataset."""
92
-
93
- metadata_id: uuid.UUID
94
- """Unique ID of the metadata dataset."""
95
-
96
- quantum: bytes = b""
97
- """Possibly-compressed JSON representation of the quantum provenance."""
98
-
99
- datasets: dict[uuid.UUID, bytes] = dataclasses.field(default_factory=dict)
100
- """Possibly-compressed JSON representation of output dataset provenance."""
101
-
102
- log: bytes = b""
103
- """Possibly-compressed log dataset content."""
104
-
105
- metadata: bytes = b""
106
- """Possibly-compressed metadata dataset content."""
107
-
108
- compression: _CompressionState = _CompressionState.NOT_COMPRESSED
109
- """Which data is compressed, if any."""
110
-
111
- def compress(self, compressor: Compressor) -> None:
112
- """Compress all data in place, if it isn't already.
113
-
114
- Parameters
115
- ----------
116
- compressor : `Compressor`
117
- Object that can compress `bytes`.
118
- """
119
- if self.compression is _CompressionState.NOT_COMPRESSED:
120
- self.metadata = compressor.compress(self.metadata)
121
- self.log = compressor.compress(self.log)
122
- self.compression = _CompressionState.LOG_AND_METADATA_COMPRESSED
123
- if self.compression is _CompressionState.LOG_AND_METADATA_COMPRESSED:
124
- self.quantum = compressor.compress(self.quantum)
125
- for key in self.datasets.keys():
126
- self.datasets[key] = compressor.compress(self.datasets[key])
127
- self.compression = _CompressionState.ALL_COMPRESSED
64
+ from ._structs import WriteRequest
128
65
 
129
66
 
130
67
  @dataclasses.dataclass
@@ -267,8 +204,8 @@ class Writer:
267
204
  with datasets as well as with quanta.
268
205
  """
269
206
 
270
- pending_compression_training: list[_ScanData] = dataclasses.field(default_factory=list)
271
- """Partially processed quantum scans that are being accumulated in order to
207
+ pending_compression_training: list[WriteRequest] = dataclasses.field(default_factory=list)
208
+ """Unprocessed quantum scans that are being accumulated in order to
272
209
  build a compression dictionary.
273
210
  """
274
211
 
@@ -299,7 +236,7 @@ class Writer:
299
236
  )
300
237
 
301
238
  def _populate_indices_and_outputs(self) -> None:
302
- all_uuids = set(self.predicted.quantum_indices.keys())
239
+ all_uuids = set(self.predicted.quantum_datasets.keys())
303
240
  for quantum in self.comms.periodically_check_for_cancel(
304
241
  itertools.chain(
305
242
  self.predicted.init_quanta.root,
@@ -329,13 +266,12 @@ class Writer:
329
266
  if not predicted_quantum.task_label:
330
267
  # Skip the 'packages' producer quantum.
331
268
  continue
332
- quantum_index = self.indices[predicted_quantum.quantum_id]
333
269
  for predicted_input in itertools.chain.from_iterable(predicted_quantum.inputs.values()):
334
- self.xgraph.add_edge(self.indices[predicted_input.dataset_id], quantum_index)
270
+ self.xgraph.add_edge(predicted_input.dataset_id, predicted_quantum.quantum_id)
335
271
  if predicted_input.dataset_id not in self.output_dataset_ids:
336
272
  self.overall_inputs.setdefault(predicted_input.dataset_id, predicted_input)
337
273
  for predicted_output in itertools.chain.from_iterable(predicted_quantum.outputs.values()):
338
- self.xgraph.add_edge(quantum_index, self.indices[predicted_output.dataset_id])
274
+ self.xgraph.add_edge(predicted_quantum.quantum_id, predicted_output.dataset_id)
339
275
 
340
276
  @staticmethod
341
277
  def run(predicted_path: str, comms: WriterCommunicator) -> None:
@@ -365,12 +301,11 @@ class Writer:
365
301
  self.comms.log.info("Polling for write requests from scanners.")
366
302
  for request in self.comms.poll():
367
303
  if data_writers is None:
368
- self.pending_compression_training.extend(self.make_scan_data(request))
304
+ self.pending_compression_training.append(request)
369
305
  if len(self.pending_compression_training) >= self.comms.config.zstd_dict_n_inputs:
370
306
  data_writers = self.make_data_writers()
371
307
  else:
372
- for scan_data in self.make_scan_data(request):
373
- self.write_scan_data(scan_data, data_writers)
308
+ self.process_request(request, data_writers)
374
309
  if data_writers is None:
375
310
  data_writers = self.make_data_writers()
376
311
  self.write_init_outputs(data_writers)
@@ -398,8 +333,8 @@ class Writer:
398
333
  )
399
334
  self.comms.check_for_cancel()
400
335
  self.comms.log.info("Compressing and writing queued scan requests.")
401
- for scan_data in self.pending_compression_training:
402
- self.write_scan_data(scan_data, data_writers)
336
+ for request in self.pending_compression_training:
337
+ self.process_request(request, data_writers)
403
338
  del self.pending_compression_training
404
339
  self.comms.check_for_cancel()
405
340
  self.write_overall_inputs(data_writers)
@@ -435,11 +370,11 @@ class Writer:
435
370
  predicted_quantum.datastore_records.clear()
436
371
  training_inputs.append(predicted_quantum.model_dump_json().encode())
437
372
  # Add the provenance quanta, metadata, and logs we've accumulated.
438
- for scan_data in self.pending_compression_training:
439
- assert scan_data.compression is _CompressionState.NOT_COMPRESSED
440
- training_inputs.append(scan_data.quantum)
441
- training_inputs.append(scan_data.metadata)
442
- training_inputs.append(scan_data.log)
373
+ for write_request in self.pending_compression_training:
374
+ assert not write_request.is_compressed, "We can't compress without the compression dictionary."
375
+ training_inputs.append(write_request.quantum)
376
+ training_inputs.append(write_request.metadata)
377
+ training_inputs.append(write_request.logs)
443
378
  return zstandard.train_dictionary(self.comms.config.zstd_dict_size, training_inputs)
444
379
 
445
380
  def write_init_outputs(self, data_writers: _DataWriters) -> None:
@@ -458,19 +393,16 @@ class Writer:
458
393
  continue
459
394
  existing_outputs = self.existing_init_outputs[predicted_init_quantum.quantum_id]
460
395
  for predicted_output in itertools.chain.from_iterable(predicted_init_quantum.outputs.values()):
461
- dataset_index = self.indices[predicted_output.dataset_id]
462
396
  provenance_output = ProvenanceDatasetModel.from_predicted(
463
397
  predicted_output,
464
- producer=self.indices[predicted_init_quantum.quantum_id],
465
- consumers=self.xgraph.successors(dataset_index),
398
+ producer=predicted_init_quantum.quantum_id,
399
+ consumers=self.xgraph.successors(predicted_output.dataset_id),
466
400
  )
467
401
  provenance_output.produced = predicted_output.dataset_id in existing_outputs
468
402
  data_writers.datasets.write_model(
469
403
  provenance_output.dataset_id, provenance_output, data_writers.compressor
470
404
  )
471
- init_quanta.root.append(
472
- ProvenanceInitQuantumModel.from_predicted(predicted_init_quantum, self.indices)
473
- )
405
+ init_quanta.root.append(ProvenanceInitQuantumModel.from_predicted(predicted_init_quantum))
474
406
  data_writers.graph.write_single_model("init_quanta", init_quanta)
475
407
 
476
408
  def write_overall_inputs(self, data_writers: _DataWriters) -> None:
@@ -484,13 +416,12 @@ class Writer:
484
416
  self.comms.log.info("Writing overall inputs.")
485
417
  for predicted_input in self.comms.periodically_check_for_cancel(self.overall_inputs.values()):
486
418
  if predicted_input.dataset_id not in data_writers.datasets.addresses:
487
- dataset_index = self.indices[predicted_input.dataset_id]
488
419
  data_writers.datasets.write_model(
489
420
  predicted_input.dataset_id,
490
421
  ProvenanceDatasetModel.from_predicted(
491
422
  predicted_input,
492
423
  producer=None,
493
- consumers=self.xgraph.successors(dataset_index),
424
+ consumers=self.xgraph.successors(predicted_input.dataset_id),
494
425
  ),
495
426
  data_writers.compressor,
496
427
  )
@@ -509,81 +440,61 @@ class Writer:
509
440
  data = packages.toBytes("json")
510
441
  data_writers.graph.write_single_block("packages", data)
511
442
 
512
- def make_scan_data(self, request: ScanResult) -> list[_ScanData]:
513
- """Process a `ScanResult` into `_ScanData`.
443
+ def process_request(self, request: WriteRequest, data_writers: _DataWriters) -> None:
444
+ """Process a `WriteRequest` into `_ScanData`.
514
445
 
515
446
  Parameters
516
447
  ----------
517
- request : `ScanResult`
448
+ request : `WriteRequest`
518
449
  Result of a quantum scan.
519
-
520
- Returns
521
- -------
522
- data : `list` [ `_ScanData` ]
523
- A zero- or single-element list of `_ScanData` to write or save for
524
- compression-dict training. A zero-element list is returned if the
525
- scan actually represents an init quantum.
450
+ data_writers : `_DataWriters`
451
+ Low-level writers struct.
526
452
  """
527
453
  if (existing_init_outputs := self.existing_init_outputs.get(request.quantum_id)) is not None:
528
454
  self.comms.log.debug("Handling init-output scan for %s.", request.quantum_id)
529
455
  existing_init_outputs.update(request.existing_outputs)
530
456
  self.comms.report_write()
531
- return []
457
+ return
532
458
  self.comms.log.debug("Handling quantum scan for %s.", request.quantum_id)
533
459
  predicted_quantum = self.predicted.quantum_datasets[request.quantum_id]
534
- quantum_index = self.indices[predicted_quantum.quantum_id]
535
- (metadata_output,) = predicted_quantum.outputs[acc.METADATA_OUTPUT_CONNECTION_NAME]
536
- (log_output,) = predicted_quantum.outputs[acc.LOG_OUTPUT_CONNECTION_NAME]
537
- data = _ScanData(
538
- request.quantum_id,
539
- metadata_id=metadata_output.dataset_id,
540
- log_id=log_output.dataset_id,
541
- compression=(
542
- _CompressionState.LOG_AND_METADATA_COMPRESSED
543
- if request.is_compressed
544
- else _CompressionState.NOT_COMPRESSED
545
- ),
546
- )
460
+ outputs: dict[uuid.UUID, bytes] = {}
547
461
  for predicted_output in itertools.chain.from_iterable(predicted_quantum.outputs.values()):
548
- dataset_index = self.indices[predicted_output.dataset_id]
549
462
  provenance_output = ProvenanceDatasetModel.from_predicted(
550
463
  predicted_output,
551
- producer=quantum_index,
552
- consumers=self.xgraph.successors(dataset_index),
464
+ producer=predicted_quantum.quantum_id,
465
+ consumers=self.xgraph.successors(predicted_output.dataset_id),
553
466
  )
554
467
  provenance_output.produced = provenance_output.dataset_id in request.existing_outputs
555
- data.datasets[provenance_output.dataset_id] = provenance_output.model_dump_json().encode()
556
- provenance_quantum = ProvenanceQuantumModel.from_predicted(predicted_quantum, self.indices)
557
- provenance_quantum.attempts = [a.remap_uuids(self.indices) for a in request.attempts]
558
- data.quantum = provenance_quantum.model_dump_json().encode()
559
- data.metadata = request.metadata_content
560
- data.log = request.log_content
561
- return [data]
562
-
563
- def write_scan_data(self, scan_data: _ScanData, data_writers: _DataWriters) -> None:
564
- """Write scan data to the provenance graph.
565
-
566
- Parameters
567
- ----------
568
- scan_data : `_ScanData`
569
- Preprocessed information to write.
570
- data_writers : `_DataWriters`
571
- Low-level writers struct.
572
- """
573
- self.comms.log.debug("Writing quantum %s.", scan_data.quantum_id)
574
- scan_data.compress(data_writers.compressor)
575
- data_writers.quanta.write_bytes(scan_data.quantum_id, scan_data.quantum)
576
- for dataset_id, dataset_data in scan_data.datasets.items():
468
+ outputs[provenance_output.dataset_id] = data_writers.compressor.compress(
469
+ provenance_output.model_dump_json().encode()
470
+ )
471
+ if not request.quantum:
472
+ request.quantum = (
473
+ ProvenanceQuantumModel.from_predicted(predicted_quantum).model_dump_json().encode()
474
+ )
475
+ if request.is_compressed:
476
+ request.quantum = data_writers.compressor.compress(request.quantum)
477
+ if not request.is_compressed:
478
+ request.quantum = data_writers.compressor.compress(request.quantum)
479
+ if request.metadata:
480
+ request.metadata = data_writers.compressor.compress(request.metadata)
481
+ if request.logs:
482
+ request.logs = data_writers.compressor.compress(request.logs)
483
+ self.comms.log.debug("Writing quantum %s.", request.quantum_id)
484
+ data_writers.quanta.write_bytes(request.quantum_id, request.quantum)
485
+ for dataset_id, dataset_data in outputs.items():
577
486
  data_writers.datasets.write_bytes(dataset_id, dataset_data)
578
- if scan_data.metadata:
579
- address = data_writers.metadata.write_bytes(scan_data.quantum_id, scan_data.metadata)
580
- data_writers.metadata.addresses[scan_data.metadata_id] = address
581
- if scan_data.log:
582
- address = data_writers.logs.write_bytes(scan_data.quantum_id, scan_data.log)
583
- data_writers.logs.addresses[scan_data.log_id] = address
487
+ if request.metadata:
488
+ (metadata_output,) = predicted_quantum.outputs[acc.METADATA_OUTPUT_CONNECTION_NAME]
489
+ address = data_writers.metadata.write_bytes(request.quantum_id, request.metadata)
490
+ data_writers.metadata.addresses[metadata_output.dataset_id] = address
491
+ if request.logs:
492
+ (log_output,) = predicted_quantum.outputs[acc.LOG_OUTPUT_CONNECTION_NAME]
493
+ address = data_writers.logs.write_bytes(request.quantum_id, request.logs)
494
+ data_writers.logs.addresses[log_output.dataset_id] = address
584
495
  # We shouldn't need this predicted quantum anymore; delete it in the
585
496
  # hopes that'll free up some memory.
586
- del self.predicted.quantum_datasets[scan_data.quantum_id]
497
+ del self.predicted.quantum_datasets[request.quantum_id]
587
498
  self.comms.report_write()
588
499
 
589
500
 
@@ -1315,7 +1315,6 @@ class QuantumGraphBuilder(ABC):
1315
1315
  },
1316
1316
  )
1317
1317
  components.quantum_datasets[quantum_datasets.quantum_id] = quantum_datasets
1318
- components.set_quantum_indices()
1319
1318
  components.set_thin_graph()
1320
1319
  components.set_header_counts()
1321
1320
  return components
lsst/pipe/base/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  __all__ = ["__version__"]
2
- __version__ = "29.2025.4600"
2
+ __version__ = "29.2025.4800"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 29.2025.4600
3
+ Version: 29.2025.4800
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
@@ -14,7 +14,7 @@ lsst/pipe/base/caching_limited_butler.py,sha256=x_e4EXYODcVJV8BkLzvUTu2yCd6dqM1r
14
14
  lsst/pipe/base/config.py,sha256=yNipVEc6awwhU_O9I01g20OnvQrs28dAwkXuI1hrlYE,11982
15
15
  lsst/pipe/base/configOverrides.py,sha256=B0An8EaX76VzWnC5dJxvyZ2AhVzawMtq7qlE9ma5lkc,14661
16
16
  lsst/pipe/base/connectionTypes.py,sha256=inUDyzbM1sKMCtHaRkhx3dWSPHPBIDVMHOPhzB13Kdw,16720
17
- lsst/pipe/base/connections.py,sha256=S_PgywIYoPlaCtGtDtD6S24yewVaPfdS_QgrhUAty7g,66725
17
+ lsst/pipe/base/connections.py,sha256=UIe1km5_bOth5o9LZtjpT2r9vc44K4TGmz5Fvmqu5rA,67178
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
@@ -28,7 +28,7 @@ lsst/pipe/base/pipelineIR.py,sha256=UuZ02NLhVmzzekbuWlyar7cPLCf_4yfzD5qFEmGHs_A,
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
- lsst/pipe/base/quantum_graph_builder.py,sha256=SwfZny05lJLZQHG69550GoafKWWZhX5Glgu345-VAsE,67981
31
+ lsst/pipe/base/quantum_graph_builder.py,sha256=nJsrGx5P4NLTBZo2ZXGpHO8JU05yZkJYxKxWk3ZecEI,67940
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
34
  lsst/pipe/base/quantum_provenance_graph.py,sha256=33S5iCVxD9Co4oJSU_N8AJXL14Nw0UwGzPEc3gpQiqk,91981
@@ -42,7 +42,7 @@ 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=vB8XwkFrtPN40DIouI1mFlxm5jpAZvcGwleFGT1yZhI,55
45
+ lsst/pipe/base/version.py,sha256=MHZJr_Yoevn1SeqerO6dmfTP3xtJLGxPmEi-9Jpl380,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
@@ -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=W9T6RIAY7ouLDmlBhNzDegWSicrIvBc5IZBb0dMiiTc,22415
86
- lsst/pipe/base/quantum_graph/_multiblock.py,sha256=FQa8lafbuS4sD1rZE_ivQb-WTiHZkOol0OGCHNbTpq8,29125
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
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=VoJev2xEnNcXA1ar_cM7paUfAP5DrE95FWjgqy4FU78,87901
88
+ lsst/pipe/base/quantum_graph/_provenance.py,sha256=R1SoRxyi6cNi9fXSc7ybrbri9anuYnliJ6SBmVUrh40,55102
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=uuA97jMEzpKX1hkhYbvnRa4-lASfPEC9cEZByFNuWAY,36404
91
+ lsst/pipe/base/quantum_graph/aggregator/_communicators.py,sha256=w7hNEQjE1Qjhi6u4Tx4wS_1RrV3-WQRCz1FACd-vmro,36396
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
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
95
+ lsst/pipe/base/quantum_graph/aggregator/_scanner.py,sha256=I2fgm5f6ILUkIH81SUEBA91gSoa8Y5RqR80BJBVQYmk,22349
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
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
@@ -113,13 +113,13 @@ lsst/pipe/base/tests/mocks/_data_id_match.py,sha256=jVekStcrItC0tqOCc01VjYaiE9ex
113
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.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,,
116
+ lsst_pipe_base-29.2025.4800.dist-info/licenses/COPYRIGHT,sha256=kB3Z9_f6a6uFLGpEmNJT_n186CE65H6wHu4F6BNt_zA,368
117
+ lsst_pipe_base-29.2025.4800.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
118
+ lsst_pipe_base-29.2025.4800.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
119
+ lsst_pipe_base-29.2025.4800.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
120
+ lsst_pipe_base-29.2025.4800.dist-info/METADATA,sha256=54BUUcJ9VnlUujS88EhcV3m0nXzkrEyxpCyjlMm60lA,2257
121
+ lsst_pipe_base-29.2025.4800.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
122
+ lsst_pipe_base-29.2025.4800.dist-info/entry_points.txt,sha256=bnmUhJBsChxMdqST9VmFBYYKxLQoToOfqW1wjW7khjk,64
123
+ lsst_pipe_base-29.2025.4800.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
124
+ lsst_pipe_base-29.2025.4800.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
125
+ lsst_pipe_base-29.2025.4800.dist-info/RECORD,,