lsst-pipe-base 29.2025.1200__tar.gz → 29.2025.1400__tar.gz
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-29.2025.1200/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.1400}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/CHANGES.rst +53 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +4 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/quantum_graph_skeleton.py +7 -0
- lsst_pipe_base-29.2025.1400/python/lsst/pipe/base/version.py +2 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400/python/lsst_pipe_base.egg-info}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_graphBuilder.py +70 -2
- lsst_pipe_base-29.2025.1200/python/lsst/pipe/base/version.py +0 -2
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/COPYRIGHT +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/LICENSE +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/MANIFEST.in +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/README.md +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/bsd_license.txt +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/creating-a-pipeline.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/index.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/gpl-v3.0.txt +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/pyproject.toml +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_instrument.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_quantumContext.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_status.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_task_metadata.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/cmd/commands.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/opt/options.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/config.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/connectionTypes.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/connections.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/executionButlerBuilder.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/formatters/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/graph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/mermaid_tools.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_edges.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/prerequisite_helpers.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/py.typed +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/script/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/script/register_instrument.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/script/transfer_from_graph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/struct.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/task.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/taskFactory.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/testUtils.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/mocks/_storage_class.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/util.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/utils.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst_pipe_base.egg-info/SOURCES.txt +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/setup.cfg +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_adjust_all_quanta.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_cliCmdRegisterInstrument.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_config_formatter.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_connections.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_dataid_match.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_dynamic_connections.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_executionButler.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_init_output_run.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_instrument.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_pipeline.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_pipelineLoadSubset.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_quantumGraph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_quantum_success_caveats.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_struct.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_task.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_taskmetadata.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_testUtils.py +0 -0
- {lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_utils.py +0 -0
{lsst_pipe_base-29.2025.1200/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.1400}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-pipe-base
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.1400
|
|
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: BSD 3-Clause License
|
|
@@ -1,3 +1,56 @@
|
|
|
1
|
+
lsst-pipe-base v29.0.0 (2025-03-25)
|
|
2
|
+
===================================
|
|
3
|
+
|
|
4
|
+
New Features
|
|
5
|
+
------------
|
|
6
|
+
|
|
7
|
+
- * Modified ``QuantumContext`` such that it now tracks all datasets that are retrieved and records them in ``dataset_provenance``.
|
|
8
|
+
This provenance is then passed to Butler on ``put()``.
|
|
9
|
+
* Added ``QuantumContext.add_additional_provenance()`` to allow a pipeline task author to attach additional provenance information to be recorded and associated with a particular input dataset. (`DM-35396 <https://rubinobs.atlassian.net/browse/DM-35396>`_)
|
|
10
|
+
- Finished support for "steps" in pipelines and pipeline graphs.
|
|
11
|
+
|
|
12
|
+
Steps are an ordered sequence of special pipeline subsets that provide extra information and validation about how pipelines should actually be run. (`DM-46023 <https://rubinobs.atlassian.net/browse/DM-46023>`_)
|
|
13
|
+
- Added Mermaid for pipeline and quantum graph visualization with tools for documentation/presentation purposes. (`DM-46503 <https://rubinobs.atlassian.net/browse/DM-46503>`_)
|
|
14
|
+
- Added ``zip-from-graph`` subcommand for ``butler`` command-line to enable output artifacts associated with a graph to be combined into a Zip archive. (`DM-46776 <https://rubinobs.atlassian.net/browse/DM-46776>`_)
|
|
15
|
+
- Added ``UpstreamFailureNoWorkFound``, an exception that is handled the same way as ``NoWorkFound`` that indicates that the root problem is probably in an upstream ``PipelineTask``. (`DM-46948 <https://rubinobs.atlassian.net/browse/DM-46948>`_)
|
|
16
|
+
- Plugin discovery is now automated through Python entry points when using ``pip``.
|
|
17
|
+
It is now an error if the ``DAF_BUTLER_PLUGINS`` environment variable is set for this package. (`DM-47143 <https://rubinobs.atlassian.net/browse/DM-47143>`_)
|
|
18
|
+
- * Added new command-line ``butler retrieve-artifacts-for-quanta`` which can be used to retrieve input or output datasets associated with a graph or specific quanta.
|
|
19
|
+
* Added new ``QuantumGraph.get_refs()`` method to retrieve dataset refs from a graph. (`DM-47328 <https://rubinobs.atlassian.net/browse/DM-47328>`_)
|
|
20
|
+
- Add the ``QuantumSuccessCaveats`` flag enum, which can be used to report on ``NoWorkFound`` and other qualified successes in execution.
|
|
21
|
+
|
|
22
|
+
This adds the flag enum itself and functionality in ``QuantumProvenanceGraph`` (which backs ``pipetask report --force-v2``) to include it in reports.
|
|
23
|
+
It relies on additional changes in ``lsst.ctrl.mpexec.SingleQuantumExecutor`` to write the caveat flags into task metadata. (`DM-47730 <https://rubinobs.atlassian.net/browse/DM-47730>`_)
|
|
24
|
+
- ``QuantumProvenanceGraph`` and ``pipetask report --force-v2`` can now report on exceptions raised and then ignored via the ``--no-raise-on-partial-outputs`` option.
|
|
25
|
+
|
|
26
|
+
Exceptions that lead to task failures are not yet tracked, because we do not write task metadata for failures and hence have nowhere to put the information. (`DM-48536 <https://rubinobs.atlassian.net/browse/DM-48536>`_)
|
|
27
|
+
- Swapped to the new butler query system in ``QuantumGraph`` generation.
|
|
28
|
+
|
|
29
|
+
This change should be mostly transparent to users, aside from small changes in speed (typically faster, but not always). (`DM-45896 <https://rubinobs.atlassian.net/browse/DM-45896>`)
|
|
30
|
+
|
|
31
|
+
Bug Fixes
|
|
32
|
+
---------
|
|
33
|
+
|
|
34
|
+
- Fixed a bug in QG generation that could lead to an error when using ``--skip-existing-in`` on a collection that had a successful quantum that did not write all of its predicted outputs. (`DM-49266 <https://rubinobs.atlassian.net/browse/DM-49266>`_)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
Performance Enhancement
|
|
38
|
+
-----------------------
|
|
39
|
+
|
|
40
|
+
- ``QuantumGraph`` generation has been partially rewritten to support building larger graphs and build all graphs faster.
|
|
41
|
+
|
|
42
|
+
With this change, ``QuantumGraph`` generation no longer uses a long-lived temporary table in the butler database for followup queries, and instead uploads a set of data IDs to the database for each query.
|
|
43
|
+
In addition, the algorithm for adding nodes and edges from the data ID query results has been reworked to duplicate irrelevant dimensions earlier, making it much faster. (`DM-49296 <https://rubinobs.atlassian.net/browse/DM-49296>`_)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
Other Changes and Additions
|
|
47
|
+
---------------------------
|
|
48
|
+
|
|
49
|
+
- Modified ``TaskMetadata`` such that it can now be assigned an empty list.
|
|
50
|
+
This list can be retrieved with ``getArray`` but if an attempt is made to get a scalar `KeyError` will be raised. (`DM-35396 <https://rubinobs.atlassian.net/browse/DM-35396>`_)
|
|
51
|
+
- ``QuantumGraph`` generation will no longer fail when the ``--dataset-query-constraint`` argument includes a dataset type that is not relevant for one or more pipeline subgraphs. (`DM-47505 <https://rubinobs.atlassian.net/browse/DM-47505>`_)
|
|
52
|
+
|
|
53
|
+
|
|
1
54
|
lsst-pipe-base v28.0.0 (2024-11-21)
|
|
2
55
|
===================================
|
|
3
56
|
|
|
@@ -130,6 +130,10 @@ class AllDimensionsQuantumGraphBuilder(QuantumGraphBuilder):
|
|
|
130
130
|
tree = _DimensionGroupTree(subgraph)
|
|
131
131
|
self._query_for_data_ids(tree)
|
|
132
132
|
skeleton = self._make_subgraph_skeleton(tree)
|
|
133
|
+
if not skeleton.has_any_quanta:
|
|
134
|
+
# QG is going to be empty; exit early not just for efficiency, but
|
|
135
|
+
# also so downstream code doesn't have to guard against this case.
|
|
136
|
+
return skeleton
|
|
133
137
|
self._find_followup_datasets(tree, skeleton)
|
|
134
138
|
dimension_records = self._fetch_most_dimension_records(tree)
|
|
135
139
|
leftovers = self._attach_most_dimension_records(skeleton, dimension_records)
|
|
@@ -194,6 +194,13 @@ class QuantumGraphSkeleton:
|
|
|
194
194
|
"""The total number of edges."""
|
|
195
195
|
return len(self._xgraph.edges)
|
|
196
196
|
|
|
197
|
+
@property
|
|
198
|
+
def has_any_quanta(self) -> bool:
|
|
199
|
+
"""Test whether this graph has any quanta."""
|
|
200
|
+
for _ in self.iter_all_quanta():
|
|
201
|
+
return True
|
|
202
|
+
return False
|
|
203
|
+
|
|
197
204
|
def has_task(self, task_label: str) -> bool:
|
|
198
205
|
"""Test whether the given task is in this skeleton.
|
|
199
206
|
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400/python/lsst_pipe_base.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-pipe-base
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.1400
|
|
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: BSD 3-Clause License
|
|
@@ -32,10 +32,21 @@ import logging
|
|
|
32
32
|
import unittest
|
|
33
33
|
|
|
34
34
|
import lsst.utils.tests
|
|
35
|
+
from lsst.daf.butler import Butler, DatasetType
|
|
35
36
|
from lsst.daf.butler.registry import UserExpressionError
|
|
36
|
-
from lsst.pipe.base import QuantumGraph
|
|
37
|
-
from lsst.pipe.base.all_dimensions_quantum_graph_builder import
|
|
37
|
+
from lsst.pipe.base import PipelineGraph, QuantumGraph
|
|
38
|
+
from lsst.pipe.base.all_dimensions_quantum_graph_builder import (
|
|
39
|
+
AllDimensionsQuantumGraphBuilder,
|
|
40
|
+
DatasetQueryConstraintVariant,
|
|
41
|
+
)
|
|
38
42
|
from lsst.pipe.base.tests import simpleQGraph
|
|
43
|
+
from lsst.pipe.base.tests.mocks import (
|
|
44
|
+
DynamicConnectionConfig,
|
|
45
|
+
DynamicTestPipelineTask,
|
|
46
|
+
DynamicTestPipelineTaskConfig,
|
|
47
|
+
MockDataset,
|
|
48
|
+
MockStorageClass,
|
|
49
|
+
)
|
|
39
50
|
from lsst.utils.tests import temporaryDirectory
|
|
40
51
|
|
|
41
52
|
_LOG = logging.getLogger(__name__)
|
|
@@ -82,6 +93,63 @@ class GraphBuilderTestCase(unittest.TestCase):
|
|
|
82
93
|
)
|
|
83
94
|
self.assertEqual(len(qgraph3), 5)
|
|
84
95
|
|
|
96
|
+
def test_empty_qg(self):
|
|
97
|
+
"""Test that making an empty QG doesn't raise exceptions."""
|
|
98
|
+
config = DynamicTestPipelineTaskConfig()
|
|
99
|
+
config.inputs["i"] = DynamicConnectionConfig(
|
|
100
|
+
dataset_type_name="input",
|
|
101
|
+
storage_class="StructuredDataDict",
|
|
102
|
+
dimensions=["detector"],
|
|
103
|
+
)
|
|
104
|
+
config.init_inputs["ii"] = DynamicConnectionConfig(
|
|
105
|
+
dataset_type_name="init_input",
|
|
106
|
+
storage_class="StructuredDataDict",
|
|
107
|
+
)
|
|
108
|
+
config.outputs["o"] = DynamicConnectionConfig(
|
|
109
|
+
dataset_type_name="output",
|
|
110
|
+
storage_class="StructuredDataDict",
|
|
111
|
+
dimensions=["detector"],
|
|
112
|
+
)
|
|
113
|
+
config.init_outputs["io"] = DynamicConnectionConfig(
|
|
114
|
+
dataset_type_name="init_output",
|
|
115
|
+
storage_class="StructuredDataDict",
|
|
116
|
+
)
|
|
117
|
+
pipeline_graph = PipelineGraph()
|
|
118
|
+
pipeline_graph.add_task("a", DynamicTestPipelineTask, config)
|
|
119
|
+
with temporaryDirectory() as repo_path:
|
|
120
|
+
Butler.makeRepo(repo_path)
|
|
121
|
+
butler = Butler.from_config(repo_path, writeable=True, run="test_empty_qg")
|
|
122
|
+
MockStorageClass.get_or_register_mock("StructuredDataDict")
|
|
123
|
+
butler.registry.registerDatasetType(
|
|
124
|
+
DatasetType(
|
|
125
|
+
"input",
|
|
126
|
+
dimensions=butler.dimensions.conform(["detector"]),
|
|
127
|
+
storageClass="_mock_StructuredDataDict",
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
init_input_dataset_type = DatasetType(
|
|
131
|
+
"init_input",
|
|
132
|
+
dimensions=butler.dimensions.empty,
|
|
133
|
+
storageClass="_mock_StructuredDataDict",
|
|
134
|
+
)
|
|
135
|
+
butler.registry.registerDatasetType(init_input_dataset_type)
|
|
136
|
+
# Init-input initially exists, but input does not (hence empty QG).
|
|
137
|
+
butler.put(
|
|
138
|
+
MockDataset(
|
|
139
|
+
dataset_id=None,
|
|
140
|
+
dataset_type=init_input_dataset_type.to_simple(),
|
|
141
|
+
data_id={},
|
|
142
|
+
run=butler.run,
|
|
143
|
+
),
|
|
144
|
+
"init_input",
|
|
145
|
+
)
|
|
146
|
+
# Attempt to make QG; should just be empty, with no exceptions.
|
|
147
|
+
self.assertFalse(AllDimensionsQuantumGraphBuilder(pipeline_graph, butler).build())
|
|
148
|
+
# Initialize the output run, try again, with same expected result.
|
|
149
|
+
pipeline_graph.register_dataset_types(butler)
|
|
150
|
+
pipeline_graph.init_output_run(butler)
|
|
151
|
+
self.assertFalse(AllDimensionsQuantumGraphBuilder(pipeline_graph, butler).build())
|
|
152
|
+
|
|
85
153
|
# Inconsistent governor dimensions are no longer an error, so this test
|
|
86
154
|
# fails with the new query system. We should probably check instead that
|
|
87
155
|
# logging includes an explanation for the empty QG, but it might not
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/doc/lsst.pipe.base/creating-a-task.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_dataset_handle.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_instrument.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_quantumContext.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_status.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/_task_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/cli/opt/options.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/configOverrides.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/connectionTypes.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/connections.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/dot_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/graph/graph.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/mermaid_tools.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipeline.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipelineIR.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/pipelineTask.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/script/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/taskFactory.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/testUtils.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst/pipe/base/tests/util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/python/lsst_pipe_base.egg-info/zip-safe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_caching_limited_butler.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_cliCmdRegisterInstrument.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_dynamic_connections.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_pipelineLoadSubset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_quantum_provenance_graph.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1200 → lsst_pipe_base-29.2025.1400}/tests/test_quantum_success_caveats.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|