lsst-pipe-base 30.0.0rc3__py3-none-any.whl → 30.0.1__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 (67) hide show
  1. lsst/pipe/base/_instrument.py +25 -15
  2. lsst/pipe/base/_quantumContext.py +3 -3
  3. lsst/pipe/base/_status.py +43 -10
  4. lsst/pipe/base/_task_metadata.py +2 -2
  5. lsst/pipe/base/all_dimensions_quantum_graph_builder.py +8 -3
  6. lsst/pipe/base/automatic_connection_constants.py +20 -1
  7. lsst/pipe/base/cli/cmd/__init__.py +18 -2
  8. lsst/pipe/base/cli/cmd/commands.py +149 -4
  9. lsst/pipe/base/connectionTypes.py +72 -160
  10. lsst/pipe/base/connections.py +6 -9
  11. lsst/pipe/base/execution_reports.py +0 -5
  12. lsst/pipe/base/graph/graph.py +11 -10
  13. lsst/pipe/base/graph/quantumNode.py +4 -4
  14. lsst/pipe/base/graph_walker.py +8 -10
  15. lsst/pipe/base/log_capture.py +1 -1
  16. lsst/pipe/base/log_on_close.py +4 -7
  17. lsst/pipe/base/pipeline.py +5 -6
  18. lsst/pipe/base/pipelineIR.py +2 -8
  19. lsst/pipe/base/pipelineTask.py +5 -7
  20. lsst/pipe/base/pipeline_graph/_dataset_types.py +2 -2
  21. lsst/pipe/base/pipeline_graph/_edges.py +32 -22
  22. lsst/pipe/base/pipeline_graph/_mapping_views.py +4 -7
  23. lsst/pipe/base/pipeline_graph/_pipeline_graph.py +14 -7
  24. lsst/pipe/base/pipeline_graph/expressions.py +2 -2
  25. lsst/pipe/base/pipeline_graph/io.py +7 -10
  26. lsst/pipe/base/pipeline_graph/visualization/_dot.py +13 -12
  27. lsst/pipe/base/pipeline_graph/visualization/_layout.py +16 -18
  28. lsst/pipe/base/pipeline_graph/visualization/_merge.py +4 -7
  29. lsst/pipe/base/pipeline_graph/visualization/_printer.py +10 -10
  30. lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +7 -0
  31. lsst/pipe/base/prerequisite_helpers.py +2 -1
  32. lsst/pipe/base/quantum_graph/_common.py +15 -17
  33. lsst/pipe/base/quantum_graph/_multiblock.py +36 -20
  34. lsst/pipe/base/quantum_graph/_predicted.py +7 -3
  35. lsst/pipe/base/quantum_graph/_provenance.py +501 -61
  36. lsst/pipe/base/quantum_graph/aggregator/__init__.py +0 -1
  37. lsst/pipe/base/quantum_graph/aggregator/_communicators.py +187 -240
  38. lsst/pipe/base/quantum_graph/aggregator/_config.py +87 -9
  39. lsst/pipe/base/quantum_graph/aggregator/_ingester.py +13 -12
  40. lsst/pipe/base/quantum_graph/aggregator/_scanner.py +15 -7
  41. lsst/pipe/base/quantum_graph/aggregator/_structs.py +3 -3
  42. lsst/pipe/base/quantum_graph/aggregator/_supervisor.py +19 -34
  43. lsst/pipe/base/quantum_graph/aggregator/_workers.py +303 -0
  44. lsst/pipe/base/quantum_graph/aggregator/_writer.py +3 -3
  45. lsst/pipe/base/quantum_graph/formatter.py +74 -4
  46. lsst/pipe/base/quantum_graph/ingest_graph.py +413 -0
  47. lsst/pipe/base/quantum_graph/visualization.py +5 -1
  48. lsst/pipe/base/quantum_graph_builder.py +21 -8
  49. lsst/pipe/base/quantum_graph_skeleton.py +31 -29
  50. lsst/pipe/base/quantum_provenance_graph.py +29 -12
  51. lsst/pipe/base/separable_pipeline_executor.py +1 -1
  52. lsst/pipe/base/single_quantum_executor.py +15 -8
  53. lsst/pipe/base/struct.py +4 -0
  54. lsst/pipe/base/testUtils.py +3 -3
  55. lsst/pipe/base/tests/mocks/_storage_class.py +2 -1
  56. lsst/pipe/base/version.py +1 -1
  57. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/METADATA +3 -3
  58. lsst_pipe_base-30.0.1.dist-info/RECORD +129 -0
  59. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/WHEEL +1 -1
  60. lsst_pipe_base-30.0.0rc3.dist-info/RECORD +0 -127
  61. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/entry_points.txt +0 -0
  62. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/licenses/COPYRIGHT +0 -0
  63. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/licenses/LICENSE +0 -0
  64. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/licenses/bsd_license.txt +0 -0
  65. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/licenses/gpl-v3.0.txt +0 -0
  66. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/top_level.txt +0 -0
  67. {lsst_pipe_base-30.0.0rc3.dist-info → lsst_pipe_base-30.0.1.dist-info}/zip-safe +0 -0
@@ -42,7 +42,7 @@ __all__ = (
42
42
  import dataclasses
43
43
  from collections import defaultdict
44
44
  from collections.abc import Iterable, Iterator, MutableMapping, Set
45
- from typing import TYPE_CHECKING, Any, ClassVar, Literal, TypeAlias
45
+ from typing import TYPE_CHECKING, Any, ClassVar, Literal
46
46
 
47
47
  import networkx
48
48
 
@@ -145,7 +145,7 @@ class PrerequisiteDatasetKey:
145
145
  is_prerequisite: ClassVar[Literal[True]] = True
146
146
 
147
147
 
148
- Key: TypeAlias = QuantumKey | TaskInitKey | DatasetKey | PrerequisiteDatasetKey
148
+ type Key = QuantumKey | TaskInitKey | DatasetKey | PrerequisiteDatasetKey
149
149
 
150
150
 
151
151
  class QuantumGraphSkeleton:
@@ -571,12 +571,13 @@ class QuantumGraphSkeleton:
571
571
  def set_dataset_ref(
572
572
  self, ref: DatasetRef, key: DatasetKey | PrerequisiteDatasetKey | None = None
573
573
  ) -> None:
574
- """Associate a dataset node with a `DatasetRef` instance.
574
+ """Associate a dataset node with a `~lsst.daf.butler.DatasetRef`
575
+ instance.
575
576
 
576
577
  Parameters
577
578
  ----------
578
- ref : `DatasetRef`
579
- `DatasetRef` to associate with the node.
579
+ ref : `~lsst.daf.butler.DatasetRef`
580
+ `~lsst.daf.butler.DatasetRef` to associate with the node.
580
581
  key : `DatasetKey` or `PrerequisiteDatasetKey`, optional
581
582
  Identifier for the graph node. If not provided, a `DatasetKey`
582
583
  is constructed from the dataset type name and data ID of ``ref``.
@@ -586,32 +587,33 @@ class QuantumGraphSkeleton:
586
587
  self._xgraph.nodes[key]["ref"] = ref
587
588
 
588
589
  def set_output_for_skip(self, ref: DatasetRef) -> None:
589
- """Associate a dataset node with a `DatasetRef` that represents an
590
- existing output in a collection where such outputs can cause a quantum
591
- to be skipped.
590
+ """Associate a dataset node with a `~lsst.daf.butler.DatasetRef` that
591
+ represents an existing output in a collection where such outputs can
592
+ cause a quantum to be skipped.
592
593
 
593
594
  Parameters
594
595
  ----------
595
- ref : `DatasetRef`
596
- `DatasetRef` to associate with the node.
596
+ ref : `~lsst.daf.butler.DatasetRef`
597
+ `~lsst.daf.butler.DatasetRef` to associate with the node.
597
598
  """
598
599
  key = DatasetKey(ref.datasetType.name, ref.dataId.required_values)
599
600
  self._xgraph.nodes[key]["output_for_skip"] = ref
600
601
 
601
602
  def set_output_in_the_way(self, ref: DatasetRef) -> None:
602
- """Associate a dataset node with a `DatasetRef` that represents an
603
- existing output in the output RUN collection.
603
+ """Associate a dataset node with a `~lsst.daf.butler.DatasetRef` that
604
+ represents an existing output in the output RUN collection.
604
605
 
605
606
  Parameters
606
607
  ----------
607
- ref : `DatasetRef`
608
- `DatasetRef` to associate with the node.
608
+ ref : `~lsst.daf.butler.DatasetRef`
609
+ `~lsst.daf.butler.DatasetRef` to associate with the node.
609
610
  """
610
611
  key = DatasetKey(ref.datasetType.name, ref.dataId.required_values)
611
612
  self._xgraph.nodes[key]["output_in_the_way"] = ref
612
613
 
613
614
  def get_dataset_ref(self, key: DatasetKey | PrerequisiteDatasetKey) -> DatasetRef | None:
614
- """Return the `DatasetRef` associated with the given node.
615
+ """Return the `~lsst.daf.butler.DatasetRef` associated with the given
616
+ node.
615
617
 
616
618
  This does not return "output for skip" and "output in the way"
617
619
  datasets.
@@ -623,14 +625,14 @@ class QuantumGraphSkeleton:
623
625
 
624
626
  Returns
625
627
  -------
626
- ref : `DatasetRef` or `None`
628
+ ref : `~lsst.daf.butler.DatasetRef` or `None`
627
629
  Dataset reference associated with the node.
628
630
  """
629
631
  return self._xgraph.nodes[key].get("ref")
630
632
 
631
633
  def get_output_for_skip(self, key: DatasetKey) -> DatasetRef | None:
632
- """Return the `DatasetRef` associated with the given node in a
633
- collection where it could lead to a quantum being skipped.
634
+ """Return the `~lsst.daf.butler.DatasetRef` associated with the given
635
+ node in a collection where it could lead to a quantum being skipped.
634
636
 
635
637
  Parameters
636
638
  ----------
@@ -639,14 +641,14 @@ class QuantumGraphSkeleton:
639
641
 
640
642
  Returns
641
643
  -------
642
- ref : `DatasetRef` or `None`
644
+ ref : `~lsst.daf.butler.DatasetRef` or `None`
643
645
  Dataset reference associated with the node.
644
646
  """
645
647
  return self._xgraph.nodes[key].get("output_for_skip")
646
648
 
647
649
  def get_output_in_the_way(self, key: DatasetKey) -> DatasetRef | None:
648
- """Return the `DatasetRef` associated with the given node in the
649
- output RUN collection.
650
+ """Return the `~lsst.daf.butler.DatasetRef` associated with the given
651
+ node in the output RUN collection.
650
652
 
651
653
  Parameters
652
654
  ----------
@@ -655,16 +657,16 @@ class QuantumGraphSkeleton:
655
657
 
656
658
  Returns
657
659
  -------
658
- ref : `DatasetRef` or `None`
660
+ ref : `~lsst.daf.butler.DatasetRef` or `None`
659
661
  Dataset reference associated with the node.
660
662
  """
661
663
  return self._xgraph.nodes[key].get("output_in_the_way")
662
664
 
663
665
  def discard_output_in_the_way(self, key: DatasetKey) -> None:
664
- """Drop any `DatasetRef` associated with this node in the output RUN
665
- collection.
666
+ """Drop any `~lsst.daf.butler.DatasetRef` associated with this node in
667
+ the output RUN collection.
666
668
 
667
- Does nothing if there is no such `DatasetRef`.
669
+ Does nothing if there is no such `~lsst.daf.butler.DatasetRef`.
668
670
 
669
671
  Parameters
670
672
  ----------
@@ -676,8 +678,8 @@ class QuantumGraphSkeleton:
676
678
  def set_data_id(self, key: Key, data_id: DataCoordinate) -> None:
677
679
  """Set the data ID associated with a node.
678
680
 
679
- This updates the data ID in any `DatasetRef` objects associated with
680
- the node via `set_ref`, `set_output_for_skip`, or
681
+ This updates the data ID in any `~lsst.daf.butler.DatasetRef` objects
682
+ associated with the node via `set_ref`, `set_output_for_skip`, or
681
683
  `set_output_in_the_way` as well, assuming it is an expanded version
682
684
  of the original data ID.
683
685
 
@@ -685,7 +687,7 @@ class QuantumGraphSkeleton:
685
687
  ----------
686
688
  key : `Key`
687
689
  Identifier for the graph node.
688
- data_id : `DataCoordinate`
690
+ data_id : `~lsst.daf.butler.DataCoordinate`
689
691
  Data ID for the node.
690
692
  """
691
693
  state: MutableMapping[str, Any] = self._xgraph.nodes[key]
@@ -710,7 +712,7 @@ class QuantumGraphSkeleton:
710
712
 
711
713
  Returns
712
714
  -------
713
- data_id : `DataCoordinate`
715
+ data_id : `~lsst.daf.butler.DataCoordinate`
714
716
  Expanded data ID for the node, if one is available.
715
717
 
716
718
  Raises
@@ -79,6 +79,7 @@ from .automatic_connection_constants import (
79
79
  METADATA_OUTPUT_CONNECTION_NAME,
80
80
  METADATA_OUTPUT_STORAGE_CLASS,
81
81
  METADATA_OUTPUT_TEMPLATE,
82
+ PROVENANCE_DATASET_TYPE_NAME,
82
83
  )
83
84
  from .graph import QuantumGraph, QuantumNode
84
85
 
@@ -586,8 +587,8 @@ class TaskSummary(pydantic.BaseModel):
586
587
 
587
588
  Unpack the `QuantumInfo` object, sorting quanta of each status into
588
589
  the correct place in the `TaskSummary`. If looking for error messages
589
- in the `Butler` logs is desired, take special care to catch issues
590
- with missing logs.
590
+ in the `lsst.daf.butler.Butler` logs is desired, take special care to
591
+ catch issues with missing logs.
591
592
 
592
593
  Parameters
593
594
  ----------
@@ -866,7 +867,7 @@ class DatasetTypeSummary(pydantic.BaseModel):
866
867
  class Summary(pydantic.BaseModel):
867
868
  """A summary of the contents of the QuantumProvenanceGraph, including
868
869
  all information on the quanta for each task and the datasets of each
869
- `DatasetType`.
870
+ `~lsst.daf.butler.DatasetType`.
870
871
  """
871
872
 
872
873
  tasks: dict[str, TaskSummary] = pydantic.Field(default_factory=dict)
@@ -885,7 +886,7 @@ class Summary(pydantic.BaseModel):
885
886
 
886
887
  Parameters
887
888
  ----------
888
- summaries : `Sequence[Summary]`
889
+ summaries : `~collections.abc.Sequence` [`Summary`]
889
890
  Sequence of all `Summary` objects to aggregate.
890
891
  """
891
892
  result = cls()
@@ -1245,8 +1246,8 @@ class QuantumProvenanceGraph:
1245
1246
  Returns
1246
1247
  -------
1247
1248
  dataset_info : `DatasetInfo`
1248
- The `TypedDict` with information about the `DatasetType`-dataID
1249
- pair across all runs.
1249
+ The `TypedDict` with information about the
1250
+ `~lsst.daf.butler.DatasetType`-dataID pair across all runs.
1250
1251
  """
1251
1252
  return self._xgraph.nodes[key]
1252
1253
 
@@ -1262,6 +1263,7 @@ class QuantumProvenanceGraph:
1262
1263
  do_store_logs : `bool`
1263
1264
  Store the logs in the summary dictionary.
1264
1265
  n_cores : `int`, optional
1266
+ Number of cores to use.
1265
1267
 
1266
1268
  Returns
1267
1269
  -------
@@ -1513,8 +1515,22 @@ class QuantumProvenanceGraph:
1513
1515
  len(self._datasets.keys()),
1514
1516
  )
1515
1517
  if use_qbb:
1516
- _LOG.verbose("Using quantum-backed butler for metadata loads.")
1517
- self._butler_wrappers[output_run] = _ThreadLocalButlerWrapper.wrap_qbb(butler, qgraph)
1518
+ provenance_graph_ref: DatasetRef | None = None
1519
+ try:
1520
+ provenance_graph_ref = butler.find_dataset(
1521
+ PROVENANCE_DATASET_TYPE_NAME, collections=output_run
1522
+ )
1523
+ except MissingDatasetTypeError:
1524
+ pass
1525
+ if provenance_graph_ref is not None:
1526
+ _LOG.warning(
1527
+ "Cannot use QBB for metadata/log reads after provenance has been ingested; "
1528
+ "falling back to full butler."
1529
+ )
1530
+ self._butler_wrappers[output_run] = _ThreadLocalButlerWrapper.wrap_full(butler)
1531
+ else:
1532
+ _LOG.verbose("Using quantum-backed butler for metadata loads.")
1533
+ self._butler_wrappers[output_run] = _ThreadLocalButlerWrapper.wrap_qbb(butler, qgraph)
1518
1534
  else:
1519
1535
  _LOG.verbose("Using full butler for metadata loads.")
1520
1536
  self._butler_wrappers[output_run] = _ThreadLocalButlerWrapper.wrap_full(butler)
@@ -1777,9 +1793,10 @@ class QuantumProvenanceGraph:
1777
1793
  successes. If "exhaustive", all metadata files will be read. If
1778
1794
  "lazy", only metadata files where at least one predicted output is
1779
1795
  missing will be read.
1780
- butler : `lsst.daf.butler.Butler`
1781
- The Butler used for this report. This should match the Butler
1782
- used for the run associated with the executed quantum graph.
1796
+ executor : `concurrent.futures.Executor`
1797
+ The futures executor to use.
1798
+ futures : `list` [ `concurrent.futures.Future` ]
1799
+ Current list of futures. Will be modified.
1783
1800
  """
1784
1801
  if read_caveats == "lazy" and all(
1785
1802
  self.get_dataset_info(dataset_key)["runs"][output_run].produced
@@ -1994,7 +2011,7 @@ class _ThreadLocalButlerWrapper:
1994
2011
  full_butler : `~lsst.daf.butler.Butler`
1995
2012
  Full butler to draw datastore and dimension configuration from.
1996
2013
  qg : `QuantumGraph`
1997
- Quantum graph,
2014
+ Quantum graph.
1998
2015
 
1999
2016
  Returns
2000
2017
  -------
@@ -79,7 +79,7 @@ class SeparablePipelineExecutor:
79
79
  clobber_output : `bool`, optional
80
80
  If set, the pipeline execution overwrites existing output files.
81
81
  Otherwise, any conflict between existing and new outputs is an error.
82
- skip_existing_in : iterable [`str`], optional
82
+ skip_existing_in : `~collections.abc.Iterable` [`str`], optional
83
83
  If not empty, the pipeline execution searches the listed collections
84
84
  for existing outputs, and skips any quanta that have run to completion
85
85
  (or have no work to do). Otherwise, all tasks are attempted (subject to
@@ -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
@@ -92,7 +92,7 @@ class SingleQuantumExecutor(QuantumExecutor):
92
92
  `None`.
93
93
  enable_lsst_debug : `bool`, optional
94
94
  Enable debugging with ``lsstDebug`` facility for a task.
95
- limited_butler_factory : `Callable`, optional
95
+ limited_butler_factory : `~collections.abc.Callable`, optional
96
96
  A method that creates a `~lsst.daf.butler.LimitedButler` instance for a
97
97
  given Quantum. This parameter must be defined if ``butler`` is `None`.
98
98
  If ``butler`` is not `None` then this parameter is ignored.
@@ -254,6 +254,7 @@ class SingleQuantumExecutor(QuantumExecutor):
254
254
  str(exc),
255
255
  )
256
256
  quantumMetadata["caveats"] = QuantumSuccessCaveats.from_adjust_quantum_no_work().value
257
+ quantumMetadata["outputs"] = []
257
258
  # Make empty metadata that looks something like what a
258
259
  # do-nothing task would write (but we don't bother with empty
259
260
  # nested PropertySets for subtasks). This is slightly
@@ -266,7 +267,13 @@ class SingleQuantumExecutor(QuantumExecutor):
266
267
  if self._job_metadata is not None:
267
268
  fullMetadata["job"] = self._job_metadata
268
269
  self._write_metadata(quantum, fullMetadata, task_node, limited_butler)
269
- return QuantumExecutionResult(quantum, report, skipped_existing=False, adjusted_no_work=True)
270
+ return QuantumExecutionResult(
271
+ quantum,
272
+ report,
273
+ skipped_existing=False,
274
+ adjusted_no_work=True,
275
+ task_metadata=fullMetadata,
276
+ )
270
277
 
271
278
  # enable lsstDebug debugging
272
279
  if self._enable_lsst_debug:
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
@@ -341,7 +341,7 @@ def _assertAttributeMatchesConnection(obj: Any, attrName: str, connection: BaseC
341
341
 
342
342
  Raises
343
343
  ------
344
- AssertionError:
344
+ AssertionError
345
345
  Raised if ``obj.attrName`` does not match what's expected
346
346
  from ``connection``.
347
347
  """
@@ -379,7 +379,7 @@ def assertValidOutput(task: PipelineTask, result: Struct) -> None:
379
379
 
380
380
  Raises
381
381
  ------
382
- AssertionError:
382
+ AssertionError
383
383
  Raised if ``result`` does not match what's expected from ``task's``
384
384
  connections.
385
385
  """
@@ -402,7 +402,7 @@ def assertValidInitOutput(task: PipelineTask) -> None:
402
402
 
403
403
  Raises
404
404
  ------
405
- AssertionError:
405
+ AssertionError
406
406
  Raised if ``task`` does not have the state expected from ``task's``
407
407
  connections.
408
408
  """
@@ -381,7 +381,8 @@ MockDataset.model_rebuild()
381
381
 
382
382
 
383
383
  class MockStorageClassDelegate(StorageClassDelegate):
384
- """Implementation of the StorageClassDelegate interface for mock datasets.
384
+ """Implementation of the `~lsst.daf.butler.StorageClassDelegate` interface
385
+ for mock datasets.
385
386
 
386
387
  This class does not implement assembly and disassembly just because it's
387
388
  not needed right now. That could be added in the future with some
lsst/pipe/base/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  __all__ = ["__version__"]
2
- __version__ = "30.0.0rc3"
2
+ __version__ = "30.0.1"
@@ -1,20 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 30.0.0rc3
3
+ Version: 30.0.1
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
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.11.0
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,129 @@
1
+ lsst/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
2
+ lsst/pipe/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
3
+ lsst/pipe/base/__init__.py,sha256=qBLN0yYQjIcLBLb4jFKM_ppopuqTnCehcUdFcEe69Js,970
4
+ lsst/pipe/base/_datasetQueryConstraints.py,sha256=bFH0_lVc49NS2_4v_i6r9POr500c0K-OHLMhMX5FjkQ,6373
5
+ lsst/pipe/base/_dataset_handle.py,sha256=ft_ke1LbhLLndDPARsHSQJUA05LgUFnfWOq2vbwH3wI,11353
6
+ lsst/pipe/base/_instrument.py,sha256=T7cLScH1I0sVDpPdW2LpXdTRP4n2EDpiSD4SKdy2zzc,30621
7
+ lsst/pipe/base/_observation_dimension_packer.py,sha256=78Jg2OVFOdXIK62TS2Y3X4095xqCzmiIx9o4TXyADYA,8027
8
+ lsst/pipe/base/_quantumContext.py,sha256=b6gQV0z38HhDK6yZbPT3m5a2aIyO9HwixQxeJEs8xPc,19394
9
+ lsst/pipe/base/_status.py,sha256=ak8Cpj87-8uVp4ssfuHY6vcE5xzjIYVYHDZ_tA8zySA,22220
10
+ lsst/pipe/base/_task_metadata.py,sha256=ak-EZFs0DmcRA-9Onk1UuoA_zkvdVPniYPNS1Ts0uQ4,25611
11
+ lsst/pipe/base/all_dimensions_quantum_graph_builder.py,sha256=v04C4aKy9ctN1PXgfsloaOWOZnyArISb9AmDXyETT6E,71188
12
+ lsst/pipe/base/automatic_connection_constants.py,sha256=i_V6FCsP8cORlsoH8gpDYnWiPVvjY2tbfGxREgne34w,3972
13
+ lsst/pipe/base/caching_limited_butler.py,sha256=FEQK_QesUWG9sK0w9m6_SA5OPcrd6vqyq8oDKE9Wu6I,7858
14
+ lsst/pipe/base/config.py,sha256=yNipVEc6awwhU_O9I01g20OnvQrs28dAwkXuI1hrlYE,11982
15
+ lsst/pipe/base/configOverrides.py,sha256=B0An8EaX76VzWnC5dJxvyZ2AhVzawMtq7qlE9ma5lkc,14661
16
+ lsst/pipe/base/connectionTypes.py,sha256=RbhGQpEdwpnDlexV_FoWoYBwcayHXsW0TZevtvK1s5c,11251
17
+ lsst/pipe/base/connections.py,sha256=cQcHSxL59-3EnUM4JF-G_paHKDY-d45gWXWGKXsmUZ0,67068
18
+ lsst/pipe/base/dot_tools.py,sha256=vriWMaB8YTEKKvhJE5KYdVGE4gB5XmiYfD2f18Fue-c,4285
19
+ lsst/pipe/base/exec_fixup_data_id.py,sha256=9OjOcH-6AHZ1JnD_CemieI0wWX90J_VdaY9v1oXwMdQ,4187
20
+ lsst/pipe/base/execution_graph_fixup.py,sha256=ND0x4hlpeEW-gudo-i2K7HT7MoM5sp_mcoqRMCopSqQ,3815
21
+ lsst/pipe/base/execution_reports.py,sha256=62pY4sBQyHPCFceQzKLYQ0eQixNcmjs5m4DJAFAsPiA,17160
22
+ lsst/pipe/base/graph_walker.py,sha256=JbPv4uTwQ8fQ8D67mPkCRCJg6l8FXuIBZb9_BIstDcA,4639
23
+ lsst/pipe/base/log_capture.py,sha256=JnGFxyTp2ZDiiJ2-Zlj09hjCTWC86fCrj7NAOgdTl9I,11088
24
+ lsst/pipe/base/log_on_close.py,sha256=JnmponL16Jr2afOxCSQb6BfAxXOdnXjIA0_YWSGB0OE,2619
25
+ lsst/pipe/base/mermaid_tools.py,sha256=cdlDJQ1x8k7-VvCLEUqvSC3GR1zCsB-aUTxOjYejNWc,5216
26
+ lsst/pipe/base/mp_graph_executor.py,sha256=bbsJD0i-WpW1Qc6lAvagIIx__jZfeOqN8dyt3IsyEq0,37350
27
+ lsst/pipe/base/pipeline.py,sha256=bL5a4QQy35K8Efphy9ks-0-8VK-zyI_D9CF5Zrz2gbA,37505
28
+ lsst/pipe/base/pipelineIR.py,sha256=2z8mdTxQS7etxQ3bSI3e0gdR5OiCyCzylPHoakDzRFM,45649
29
+ lsst/pipe/base/pipelineTask.py,sha256=jCyT6F3oevQ66I33Ys6g20x0F2QxSVh5qFlDE_PMfE0,8245
30
+ lsst/pipe/base/prerequisite_helpers.py,sha256=p2VaThE-zUcM9vzc_kcgEbEMzXVRGpJQH6KLcQ-QXDU,28479
31
+ lsst/pipe/base/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ lsst/pipe/base/quantum_graph_builder.py,sha256=sic8D2OzXtccwjyHDjOSHER1ahykjUd24pmOUmv8NYs,69274
33
+ lsst/pipe/base/quantum_graph_executor.py,sha256=-bbeR9wZ5_Etcqpx6cDS_R-oEvfUVv9gmW0Wc4QuQNc,8127
34
+ lsst/pipe/base/quantum_graph_skeleton.py,sha256=872ypxlrt2mTsWLGWxyMCIiPv8dbfyAdMuQi9LQtRRY,28734
35
+ lsst/pipe/base/quantum_provenance_graph.py,sha256=LRgFmgkBj_YQop-Zfj_rsWBtQ7mlmEIi8J-wJXb_A5I,92793
36
+ lsst/pipe/base/quantum_reports.py,sha256=ut235L88v7SXaeVUvMA9qFl7tpeMwGnzob3X0QoOI_s,14210
37
+ lsst/pipe/base/resource_usage.py,sha256=LfH7Qf6taI3lxw0aB90riRMn1UxUTMBSqtBjKPJ-XuY,6759
38
+ lsst/pipe/base/separable_pipeline_executor.py,sha256=Yh0EXqiBfXBkA9WJYC54sqobg6_VaM_Y4q0MW1TkF-Q,17736
39
+ lsst/pipe/base/simple_pipeline_executor.py,sha256=_HGeAOgHUiRdQwsmD_qira-vcHZXlLbf_LmhLJffh2U,29563
40
+ lsst/pipe/base/single_quantum_executor.py,sha256=daQcgOp1mZhu4GvtOti5WpkJCbXewaRIW1_P2m4Q_8U,29485
41
+ lsst/pipe/base/struct.py,sha256=fHO9QzFtzL5-jxqhcBWbjyrdbiWO-Pt4Kx1X5bxN3SU,5094
42
+ lsst/pipe/base/task.py,sha256=XHBd-7m1a4-6LgobBYA1DgY4H7EV-_RWKfxbhZbMmD4,15145
43
+ lsst/pipe/base/taskFactory.py,sha256=MsDGECJqZLSZk8SGhpuVhNaP32UWuNvxZiDcZExPFG8,3412
44
+ lsst/pipe/base/testUtils.py,sha256=2C34i7FeZF9hJzWLKgvEAJMMzrx_F2-BNJ3yGlekUIo,18474
45
+ lsst/pipe/base/utils.py,sha256=JmEt3l0xrh9uayKrSXuQEq12aXOhDr2YXmbYduaxCko,1940
46
+ lsst/pipe/base/version.py,sha256=2rje6AhRlSZA0YGspwzNRmFUDs6Lw4d0LRgaVZiU0dY,49
47
+ lsst/pipe/base/cli/__init__.py,sha256=861tXIAW7SqtqNUYkjbeEdfg8lDswXsjJQca0gVCFz4,54
48
+ lsst/pipe/base/cli/_get_cli_subcommands.py,sha256=g_af64klRybBGKAg7fmBSZBdw2LYBAsFON_yQIMZON0,1289
49
+ lsst/pipe/base/cli/cmd/__init__.py,sha256=AOKtbbpWFb-EXRNOlUkWOsySiN0L_ZJWsaY6z264Dx8,1689
50
+ lsst/pipe/base/cli/cmd/commands.py,sha256=TrGmou_ZSpPYxmfm0d2vEOzUynu9qdp7svqsYz2kG2A,14531
51
+ lsst/pipe/base/cli/opt/__init__.py,sha256=DN17wUbMwNIgbDBfF35sdyGfaMT81f3b_CA5Pp8POdk,1347
52
+ lsst/pipe/base/cli/opt/arguments.py,sha256=9LhDnsM98_2zOqqm-eyv_nnZmAQcBG5OpHzeJYw_eTw,1484
53
+ lsst/pipe/base/cli/opt/options.py,sha256=d5mC2WXZJiUbkdaIo_VUsvNxShD3GmredbEN5jQD64Q,1900
54
+ lsst/pipe/base/formatters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ lsst/pipe/base/formatters/pexConfig.py,sha256=MA-08FIDV7PmpcV-VtDaBegR6YO6_pEhMB37WKMwup8,2163
56
+ lsst/pipe/base/graph/__init__.py,sha256=Zs2vwSFNiu1bYDsgrWQZ0qegG5F6PIjiQ5ZGT3EqcfA,118
57
+ lsst/pipe/base/graph/_implDetails.py,sha256=QQHVnCW78UnIbALXX_v7EW7g6MTUTuuR1Q_Ss_squUw,6784
58
+ lsst/pipe/base/graph/_loadHelpers.py,sha256=qUfjIgFezaXZRCFV7PFzmz1SSKFjRWOMWJePuyKiD24,12064
59
+ lsst/pipe/base/graph/_versionDeserializers.py,sha256=Xwq-MHfxaml2bL5cxSF8qmb6rjEHHZBuSengX8iggRg,28011
60
+ lsst/pipe/base/graph/graph.py,sha256=RUnqfkpuiTUWBYF9N0OzEtnSqc0jg0uJWlxbrS1Ezdg,75250
61
+ lsst/pipe/base/graph/graphSummary.py,sha256=F0ET5H4cBFYNPXvHuUBa3nTCj99rpf0JwxPG5Kfi7iw,6352
62
+ lsst/pipe/base/graph/quantumNode.py,sha256=at7UuzMmco1eh-XraEnRih6aLScNcxGU9nY376D-wBk,7199
63
+ lsst/pipe/base/pipeline_graph/__init__.py,sha256=yTEuvlzbeKIHIm7GeRmGSsma1wpZFNv8j12WfSH-deY,1516
64
+ lsst/pipe/base/pipeline_graph/__main__.py,sha256=E6ugEwJbds22wjgcfcgzeyO04JofQwVhn_Y8kZYY1lQ,20769
65
+ lsst/pipe/base/pipeline_graph/_dataset_types.py,sha256=0Y5V-apEfMkswvmgIKSs0QSHjBXvij2Eg8nFdJNmbIU,11350
66
+ lsst/pipe/base/pipeline_graph/_edges.py,sha256=TOLGiNiKWzUpw99xQuujkUNsi1-nMalTqhe6Glafqgs,36096
67
+ lsst/pipe/base/pipeline_graph/_exceptions.py,sha256=3jvCXms0_5ThLGtsOlKxsI1vWiq3gY4hba8fRBW0tgI,3943
68
+ lsst/pipe/base/pipeline_graph/_mapping_views.py,sha256=H7IPiVwwgLfgFPnv-hEi2TqH-DqcQy-nve-IF08LuUs,9132
69
+ lsst/pipe/base/pipeline_graph/_nodes.py,sha256=GGXfzXvrjNbwPt-0w8cC0l_I6CCNskoDNjA8Ds4ILS0,4236
70
+ lsst/pipe/base/pipeline_graph/_pipeline_graph.py,sha256=UpzW3U884Isa6URW9FYo47TU7RdgZYE_zkkD_lkVXww,122641
71
+ lsst/pipe/base/pipeline_graph/_task_subsets.py,sha256=lLvcndSGcZigteWd4eeAM8LxQ1lHPBoysY8PjJTxx1c,13244
72
+ lsst/pipe/base/pipeline_graph/_tasks.py,sha256=jTLpm5dZMXRNrGi3L45-3DtF95PGwhmejWLZ-zcSTzo,42802
73
+ lsst/pipe/base/pipeline_graph/expressions.py,sha256=vvyUsK0fwV0bOv_NnmUYgn92E_FYGHxVGnP9zQgwLmE,7673
74
+ lsst/pipe/base/pipeline_graph/io.py,sha256=__yRbbvX4FQBCUnlgyTLQzHyfSHLXDigqlMyV4rdly8,30898
75
+ lsst/pipe/base/pipeline_graph/visualization/__init__.py,sha256=qQctfWuFpcmgRdgu8Y6OsJ_pXpLKrCK-alqfVtIecls,1551
76
+ lsst/pipe/base/pipeline_graph/visualization/_dot.py,sha256=e03GTkSAKIM2z9b9c80MJwrms12I8MJ3YPJIWuVSRf0,13621
77
+ lsst/pipe/base/pipeline_graph/visualization/_formatting.py,sha256=NsBxXwdmISitr8_4wPc-T8CqVB-Mq4pv7DmUefFm3JU,17845
78
+ lsst/pipe/base/pipeline_graph/visualization/_layout.py,sha256=rvsadgasgGZKB625LmRVnEfB6r4u3Y8YrOQTdw6m1Ms,17088
79
+ lsst/pipe/base/pipeline_graph/visualization/_merge.py,sha256=6ml-4zkamy-q47hqIhXgmWsKn9jjqoykDW9T0qlHc5c,15391
80
+ lsst/pipe/base/pipeline_graph/visualization/_mermaid.py,sha256=V_LesIauJStjrxLO-cbvrhaZo5kDYG-JIMuErVu0EPk,20255
81
+ lsst/pipe/base/pipeline_graph/visualization/_options.py,sha256=vOIp2T7DLA48lTm5mTyCakIByb_wM21U_Crz_83MjoM,5237
82
+ lsst/pipe/base/pipeline_graph/visualization/_printer.py,sha256=-HEmoNT4z8_ouLdU5NuFzr3haf6pDb8TdM6alnRGKN4,16516
83
+ lsst/pipe/base/pipeline_graph/visualization/_show.py,sha256=lPRjO1To2n5r3f_Wgcwy-7TmyJ7UszGGFXAlOtN1wDs,10510
84
+ lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py,sha256=qX-j0Azys3fU1kHDl-G60PmYt-QOPzZ3b1bxBKf6ILg,8829
85
+ lsst/pipe/base/quantum_graph/__init__.py,sha256=-Gp3LihB0AXCvhG387wKAEpHRM-NrHGSXMti8cHee90,1437
86
+ lsst/pipe/base/quantum_graph/_common.py,sha256=lHUILG8qhHibjUp4zwiWAMSpKe8nMKxvivXiJ3YA3wA,22868
87
+ lsst/pipe/base/quantum_graph/_multiblock.py,sha256=wzTteI0D9iEtVjJulN0V8h1dmo9gzDQvJJEbRAEKfS0,28180
88
+ lsst/pipe/base/quantum_graph/_predicted.py,sha256=ioDaBsm3juzHBTE7-YxLEREuibgcq759uGdd1j3_h2w,91362
89
+ lsst/pipe/base/quantum_graph/_provenance.py,sha256=mV7hTHWbDQRAyI4X2JuoOXjuVez8y7NfotnfiSSVg-s,104563
90
+ lsst/pipe/base/quantum_graph/formatter.py,sha256=EjwcgBkPqUxULU3yOstLOjg8MKlZozebGS8uzReDRBQ,7315
91
+ lsst/pipe/base/quantum_graph/ingest_graph.py,sha256=Q0CMkHYpSAfjRUiJkW9nM3yE9Auy7neMtscebyUXM4o,17934
92
+ lsst/pipe/base/quantum_graph/visualization.py,sha256=scDtzcG537WEbhfUE3BtAVjPuTuZTXRiLjJvxm_-Jcs,12548
93
+ lsst/pipe/base/quantum_graph/aggregator/__init__.py,sha256=pjLjg1wm0fWihTN5_CCHg2sO2rIa_t0Fd8uuF1kk91A,7435
94
+ lsst/pipe/base/quantum_graph/aggregator/_communicators.py,sha256=eA3HHAVZr4Dnqa704txsuHytVMV1kkpsowZhUyPpEGY,34375
95
+ lsst/pipe/base/quantum_graph/aggregator/_config.py,sha256=S8xJKE2xC-VzSfpaFB2G_lOTO7F0kqxNvT9FV8vzEAs,8556
96
+ lsst/pipe/base/quantum_graph/aggregator/_ingester.py,sha256=IY-5x-PXRYzheGpZrHCxKBKVRCeGUb9EJXjP3kpu1m4,14093
97
+ lsst/pipe/base/quantum_graph/aggregator/_progress.py,sha256=jiz9Np73uUQ03CtH7pI6TXxXrwFUChh5hSj_gbMGHr0,7207
98
+ lsst/pipe/base/quantum_graph/aggregator/_scanner.py,sha256=VijYSKYzQ0io8zZKLmg8TlMPwYG4fAYD3ob9nI-ciGE,13398
99
+ lsst/pipe/base/quantum_graph/aggregator/_structs.py,sha256=MUBk8wrThFz4CuoIFUlm4t5K3QOBbye9uI1CAAdUIoA,2374
100
+ lsst/pipe/base/quantum_graph/aggregator/_supervisor.py,sha256=J-17NGFCfb8uRmfDv6ivaqkB_lbRK-x5etf9IYS9T38,9251
101
+ lsst/pipe/base/quantum_graph/aggregator/_workers.py,sha256=E7A6mrmIjSPa5-FKDDHof_bKX6jlZldJ2lqdc8dBpxU,9356
102
+ lsst/pipe/base/quantum_graph/aggregator/_writer.py,sha256=Xrha3Y4PGNv_8rUrSMgCIUsx6TssvK4C_5N70p3Rmcg,7959
103
+ lsst/pipe/base/script/__init__.py,sha256=cLEXE7aq5UZ0juL_ScmRw0weFgp4tDgwEX_ts-NEYic,1522
104
+ lsst/pipe/base/script/register_instrument.py,sha256=neQ2MTPtAiV_Hl2yatQ8-vQC24xHjhpI7VJUHf5kPX4,2445
105
+ lsst/pipe/base/script/retrieve_artifacts_for_quanta.py,sha256=Cr0HpzXm_C3LnIOQg5tNJht02O6xoqtWWIphjugasMA,3957
106
+ lsst/pipe/base/script/transfer_from_graph.py,sha256=NelxNU_aNEwPHDZnDGXA07oeuSkeXqEZ6KG0ax6VE8c,7254
107
+ lsst/pipe/base/script/utils.py,sha256=zNqpHG3kXA8OaNXnwYIo0Hu_LCie1qoBAARAME3WEjs,3739
108
+ lsst/pipe/base/script/zip_from_graph.py,sha256=dMyyTGzEBCMMmR6Ts8R7QXUJrbtdrac_i-iy87lFDSI,3242
109
+ lsst/pipe/base/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
+ lsst/pipe/base/tests/in_memory_limited_butler.py,sha256=UzLh416H67nCUhD9y3cniAAjY7VojvhOLjF3gHHgjA4,8679
111
+ lsst/pipe/base/tests/no_dimensions.py,sha256=58UpyRN8cLAMZtkOmjTm3dJZyRFRekotQ-7-OgEfiAI,4710
112
+ lsst/pipe/base/tests/pipelineStepTester.py,sha256=KGxdB8gdVpSey2RUGURDIzIfPL-4qvQCsBpMrhG4Z2M,7208
113
+ lsst/pipe/base/tests/simpleQGraph.py,sha256=V_h1SifQ27vnjz5Fax1KZYyn6yPUDNfc8gRjc7SFbhE,20197
114
+ lsst/pipe/base/tests/util.py,sha256=IXpZOC58fdRnurB5lPcNX-xRgKEV-cPNkWKJDFIr1gs,4772
115
+ lsst/pipe/base/tests/mocks/__init__.py,sha256=fDy9H9vRAIBpKDJEXNZuDWJMzWZfpcBT4TmyOw4o-RY,1572
116
+ lsst/pipe/base/tests/mocks/_data_id_match.py,sha256=jVekStcrItC0tqOCc01VjYaiE9exYm3MRkwB0Gh_3J0,7465
117
+ lsst/pipe/base/tests/mocks/_pipeline_task.py,sha256=N3fC4OMAMWWnYtyLkVdMfb9ZiFse39HniRDvlAOofOY,30691
118
+ lsst/pipe/base/tests/mocks/_repo.py,sha256=SH-jzynS-H2xc_3GLjF7ln-kHdRoSeVVaal5qLd2hXI,28359
119
+ lsst/pipe/base/tests/mocks/_storage_class.py,sha256=YD9iyOSs_JqfZYOejHy1AQkbfM2wJFT5zkscjrYU0Rc,27457
120
+ lsst_pipe_base-30.0.1.dist-info/licenses/COPYRIGHT,sha256=kB3Z9_f6a6uFLGpEmNJT_n186CE65H6wHu4F6BNt_zA,368
121
+ lsst_pipe_base-30.0.1.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
122
+ lsst_pipe_base-30.0.1.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
123
+ lsst_pipe_base-30.0.1.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
124
+ lsst_pipe_base-30.0.1.dist-info/METADATA,sha256=OPu3-r5dOmut69pa4WFifdm2XlX7tZTSECP0vZ9c6KY,2255
125
+ lsst_pipe_base-30.0.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
126
+ lsst_pipe_base-30.0.1.dist-info/entry_points.txt,sha256=bnmUhJBsChxMdqST9VmFBYYKxLQoToOfqW1wjW7khjk,64
127
+ lsst_pipe_base-30.0.1.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
128
+ lsst_pipe_base-30.0.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
129
+ lsst_pipe_base-30.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5