lsst-pipe-base 30.0.1rc1__tar.gz → 30.2025.5100__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-30.0.1rc1/python/lsst_pipe_base.egg-info → lsst_pipe_base-30.2025.5100}/PKG-INFO +3 -3
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/CHANGES.rst +3 -108
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/creating-a-pipeline.rst +3 -3
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +3 -3
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/creating-a-task.rst +1 -1
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/index.rst +0 -12
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/task-framework-overview.rst +3 -3
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +1 -1
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/pyproject.toml +12 -4
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_instrument.py +20 -31
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_quantumContext.py +3 -3
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_status.py +10 -43
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_task_metadata.py +2 -2
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +3 -8
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/automatic_connection_constants.py +1 -20
- lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/cli/cmd/__init__.py +30 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/cli/cmd/commands.py +4 -149
- lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/connectionTypes.py +367 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/connections.py +9 -6
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/execution_reports.py +5 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph/graph.py +10 -11
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph/quantumNode.py +4 -4
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph_walker.py +10 -8
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/log_capture.py +80 -40
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/mp_graph_executor.py +15 -51
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline.py +6 -5
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipelineIR.py +8 -2
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipelineTask.py +7 -5
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +2 -2
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_edges.py +22 -32
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +7 -4
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +7 -14
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/expressions.py +2 -2
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/io.py +10 -7
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +12 -13
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +18 -16
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +7 -4
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +10 -10
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -7
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/prerequisite_helpers.py +1 -2
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/_common.py +20 -19
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/_multiblock.py +31 -37
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/_predicted.py +13 -111
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/_provenance.py +45 -1136
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/aggregator/__init__.py +1 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/aggregator/_communicators.py +289 -204
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/aggregator/_config.py +9 -87
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/aggregator/_ingester.py +12 -13
- lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/quantum_graph/aggregator/_scanner.py +511 -0
- lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/quantum_graph/aggregator/_structs.py +177 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/aggregator/_supervisor.py +39 -29
- lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/quantum_graph/aggregator/_writer.py +501 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/visualization.py +1 -5
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph_builder.py +8 -21
- lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/quantum_graph_executor.py +126 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph_skeleton.py +29 -31
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_provenance_graph.py +12 -29
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/separable_pipeline_executor.py +3 -19
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/single_quantum_executor.py +42 -67
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/struct.py +0 -4
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/testUtils.py +3 -3
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/mocks/_storage_class.py +1 -2
- lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/version.py +2 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100/python/lsst_pipe_base.egg-info}/PKG-INFO +3 -3
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst_pipe_base.egg-info/SOURCES.txt +0 -5
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_aggregator.py +176 -478
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_configOverrides.py +1 -1
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_init_output_run.py +1 -1
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_separable_pipeline_executor.py +14 -172
- lsst_pipe_base-30.0.1rc1/doc/lsst.pipe.base/recording-provenance.rst +0 -108
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/cli/cmd/__init__.py +0 -46
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/connectionTypes.py +0 -279
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/log_on_close.py +0 -76
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/quantum_graph/aggregator/_scanner.py +0 -325
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/quantum_graph/aggregator/_structs.py +0 -67
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/quantum_graph/aggregator/_workers.py +0 -303
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/quantum_graph/aggregator/_writer.py +0 -184
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/quantum_graph/formatter.py +0 -171
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/quantum_graph/ingest_graph.py +0 -413
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/quantum_graph_executor.py +0 -229
- lsst_pipe_base-30.0.1rc1/python/lsst/pipe/base/version.py +0 -2
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/COPYRIGHT +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/LICENSE +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/MANIFEST.in +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/README.md +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/bsd_license.txt +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/gpl-v3.0.txt +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_dataset_handle.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/cli/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/cli/opt/options.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/config.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/configOverrides.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/dot_tools.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/exec_fixup_data_id.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/execution_graph_fixup.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/formatters/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/mermaid_tools.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/py.typed +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_graph/aggregator/_progress.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/quantum_reports.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/resource_usage.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/script/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/script/register_instrument.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/script/transfer_from_graph.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/script/utils.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/simple_pipeline_executor.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/task.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/taskFactory.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/in_memory_limited_butler.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/mocks/_repo.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/tests/util.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/utils.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/setup.cfg +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_adjust_all_quanta.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_caching_limited_butler.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_cliCmdRegisterInstrument.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_config_formatter.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_connections.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_dataid_match.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_dataset_handle.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_deferredDatasetRef.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_dot_tools.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_dynamic_connections.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_execution_reports.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_execution_storage_class_conversion.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_graphBuilder.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_graph_walker.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_instrument.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_mermaid.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_mp_graph_executor.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_pipeline.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_pipelineIR.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_pipelineLoadSubset.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_pipelineTask.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_pipeline_graph.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_pipeline_graph_expressions.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_predicted_qg.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_qg_builder_dimensions.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_quantumGraph.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_quantum_reports.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_quantum_success_caveats.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_script_utils.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_simple_pipeline_executor.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_single_quantum_executor.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_struct.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_task.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_task_factory.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_taskmetadata.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_testUtils.py +0 -0
- {lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/tests/test_utils.py +0 -0
{lsst_pipe_base-30.0.1rc1/python/lsst_pipe_base.egg-info → lsst_pipe_base-30.2025.5100}/PKG-INFO
RENAMED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-pipe-base
|
|
3
|
-
Version: 30.
|
|
3
|
+
Version: 30.2025.5100
|
|
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
|
|
9
8
|
Keywords: lsst
|
|
10
9
|
Classifier: Intended Audience :: Science/Research
|
|
11
10
|
Classifier: Operating System :: OS Independent
|
|
12
11
|
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.
|
|
17
|
+
Requires-Python: >=3.11.0
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: COPYRIGHT
|
|
20
20
|
License-File: LICENSE
|
|
@@ -1,108 +1,3 @@
|
|
|
1
|
-
lsst-pipe-base v30.0.1 (2026-02-03)
|
|
2
|
-
===================================
|
|
3
|
-
|
|
4
|
-
Dropped support for Python 3.11.
|
|
5
|
-
Tested on Python 3.14.
|
|
6
|
-
|
|
7
|
-
New Features
|
|
8
|
-
------------
|
|
9
|
-
|
|
10
|
-
- Added the ``butler ingest-provenance`` command to ingest the provenance quantum graphs written by ``butler aggregate-graph``. (`DM-52738 <https://rubinobs.atlassian.net/browse/DM-52738>`_)
|
|
11
|
-
- Add report tooling (similar to ``pipetask report``, but faster) to the ``ProvenanceQuantumGraph`` class and the ``butler`` command line (as the new ``provenance-report`` subcommand).
|
|
12
|
-
|
|
13
|
-
Updatec ``butler ingest-graph`` to delete now-empty config/metadata/log directories.
|
|
14
|
-
|
|
15
|
-
Fix a bug that causes provenance quantum graphs to fail to be written if the address file grew to larger than 2G. (`DM-53851 <https://rubinobs.atlassian.net/browse/DM-53851>`_)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
API Changes
|
|
19
|
-
-----------
|
|
20
|
-
|
|
21
|
-
- Modified ``Instrument.importAll`` so that it now returns information on the instrument classes that were loaded successfully. (`DM-53882 <https://rubinobs.atlassian.net/browse/DM-53882>`_)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Bug Fixes
|
|
25
|
-
---------
|
|
26
|
-
|
|
27
|
-
- Fixed ``aggregator-graph`` handling of killed subprocesses to avoid hangs.
|
|
28
|
-
|
|
29
|
-
Fixed a race condition in ``aggregate-graph`` that could cause hanging at shutdown on small graphs. (`DM-53913 <https://rubinobs.atlassian.net/browse/DM-53913>`_)
|
|
30
|
-
- Fixed a bug that caused provenance recording to fail in ``SeparablePipelineExecutor`` when ``NoWorkFound`` chaining occurs. (`DM-53977 <https://rubinobs.atlassian.net/browse/DM-53977>`_)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
Other Changes and Additions
|
|
34
|
-
---------------------------
|
|
35
|
-
|
|
36
|
-
- Now guard against quantum graph builds in which the initial query produces many more result rows than end up in the final graph, which can lead to catastrophically large dimension data storage in the QG file. (`DM-53773 <https://rubinobs.atlassian.net/browse/DM-53773>`_)
|
|
37
|
-
- Bumped minimum Python version to 3.12. (`DM-53998 <https://rubinobs.atlassian.net/browse/DM-53998>`_)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
lsst-pipe-base v30.0.0 (2026-01-16)
|
|
41
|
-
===================================
|
|
42
|
-
|
|
43
|
-
New Features
|
|
44
|
-
------------
|
|
45
|
-
|
|
46
|
-
- Added support for healpix (and other non-database dimensions) in quantum graph builder. (`DM-51176 <https://rubinobs.atlassian.net/browse/DM-51176>`_)
|
|
47
|
-
- Added filtering out dataset refs that the destination butler already knows in ``transfer_from_graph`` as well as dividing the transfer into smaller chunks to speed up restarts. (`DM-51273 <https://rubinobs.atlassian.net/browse/DM-51273>`_)
|
|
48
|
-
- Added handling of ``PrerequisiteInput`` in ``QuantaAdjuster``, with a corresponding unit test. (`DM-51509 <https://rubinobs.atlassian.net/browse/DM-51509>`_)
|
|
49
|
-
- Added ``PredictedQuantumGraph``, a replacement for the ``QuantumGraph`` class with more efficient I/O (via a new file format and more partial-read flexibility).
|
|
50
|
-
|
|
51
|
-
The new ``PredictedQuantumGraph`` is now the default in most tooling, and the new format can be opted into via the ``.qg`` (instead of ``.qgraph``) file extension.
|
|
52
|
-
New files can be read with the old class and vice versa.
|
|
53
|
-
|
|
54
|
-
The ``QuantumGraph`` class will eventually be deprecated along with much of the current provenance reporting tooling, but only when the new provenance ecosystem is fully in place. (`DM-51850 <https://rubinobs.atlassian.net/browse/DM-51850>`_)
|
|
55
|
-
- Added a ``rename`` dict in ``ImportIR`` to support renaming task labels, with corresponding unit tests. (`DM-52168 <https://rubinobs.atlassian.net/browse/DM-52168>`_)
|
|
56
|
-
- Added the new ``ProvenanceQuantumGraph`` class and the ``aggregate-graph`` tool (a replacement for ``transfer-from-graph``) that writes it at the end of batch runs. (`DM-52360 <https://rubinobs.atlassian.net/browse/DM-52360>`_)
|
|
57
|
-
- Improved provenance tracking for failed quanta and retries.
|
|
58
|
-
|
|
59
|
-
By storing extra information in the log datasets written during execution,
|
|
60
|
-
we can record caught exceptions, track which other quanta have
|
|
61
|
-
already executed in the same process, and keep track of previous attempts to
|
|
62
|
-
run the same quantum. (`DM-53019 <https://rubinobs.atlassian.net/browse/DM-53019>`_)
|
|
63
|
-
- Added provenance writing support to ``MPGraphExecutor`` and ``SeparablePipelineExecutor``. (`DM-53622 <https://rubinobs.atlassian.net/browse/DM-53622>`_)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
API Changes
|
|
67
|
-
-----------
|
|
68
|
-
|
|
69
|
-
- Moved pipeline executors and their support code here, from ``lsst.ctrl.mpexec``.
|
|
70
|
-
|
|
71
|
-
This included minor API changes for ``SingleQuantumExecutor`` as well: consistent snake-case naming, keyword-only arguments for construction, and a switch to private instance attributes. (`DM-48980 <https://rubinobs.atlassian.net/browse/DM-48980>`_)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
Bug Fixes
|
|
75
|
-
---------
|
|
76
|
-
|
|
77
|
-
- Fixed ``transfer-from-graph`` to update chain when asked and output run collection exists even if didn't transfer any datasets. (`DM-51821 <https://rubinobs.atlassian.net/browse/DM-51821>`_)
|
|
78
|
-
- Fixed bug in ``transfer_from_graph`` where the input collections were not flattened before adding to a new output chain. (`DM-52004 <https://rubinobs.atlassian.net/browse/DM-52004>`_)
|
|
79
|
-
- Fixed bug where the log's ``MDC.RUN`` was the empty string when using a quantum-backed butler. (`DM-52676 <https://rubinobs.atlassian.net/browse/DM-52676>`_)
|
|
80
|
-
- Fixed a bug that caused ``PipelineGraph`` objects to be marked as unresolved when loaded from disk. (`DM-52787 <https://rubinobs.atlassian.net/browse/DM-52787>`_)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
Other Changes and Additions
|
|
84
|
-
---------------------------
|
|
85
|
-
|
|
86
|
-
- The ``Instrument.configPaths`` property can now refer to ``lsst.resources.ResourcePath`` URIs as well as strings (paths or URI strings). (`DM-33226 <https://rubinobs.atlassian.net/browse/DM-33226>`_)
|
|
87
|
-
- Updated pipe_base code to use the constants defined in ``automatic_connection_constants.py``. (`DM-52676 <https://rubinobs.atlassian.net/browse/DM-52676>`_)
|
|
88
|
-
- Uses UUIDs instead of internal integer IDs in new quantum graph storage.
|
|
89
|
-
|
|
90
|
-
This includes backwards compatibility read support for predicted quantum graphs, but not provenance quantum graphs, because those are still experimental anyway.
|
|
91
|
-
|
|
92
|
-
This increases the size of the files by ~6%, but it simplifies the codebase and will make consolidating multiple small provenance quantum graphs (as we
|
|
93
|
-
currently anticipate doing for prompt processing) much more efficient. (`DM-53174 <https://rubinobs.atlassian.net/browse/DM-53174>`_)
|
|
94
|
-
- Used context managers to ensure that database resources are freed. (`DM-53370 <https://rubinobs.atlassian.net/browse/DM-53370>`_)
|
|
95
|
-
- Added more logging for the later steps of QG building. (`DM-53636 <https://rubinobs.atlassian.net/browse/DM-53636>`_)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
An API Removal or Deprecation
|
|
99
|
-
-----------------------------
|
|
100
|
-
|
|
101
|
-
- Removes the ``buildExecutionButler`` function and all supporting code.
|
|
102
|
-
|
|
103
|
-
Execution butlers (read-only SQLite databases used for batch execution) have been fully superseded by ``lsst.daf.butler.QuantumBackedButler``. (`DM-52044 <https://rubinobs.atlassian.net/browse/DM-52044>`_)
|
|
104
|
-
|
|
105
|
-
|
|
106
1
|
lsst-pipe-base v29.1.0 (2025-06-13)
|
|
107
2
|
===================================
|
|
108
3
|
|
|
@@ -170,7 +65,7 @@ New Features
|
|
|
170
65
|
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>`_)
|
|
171
66
|
- Swapped to the new butler query system in ``QuantumGraph`` generation.
|
|
172
67
|
|
|
173
|
-
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>`
|
|
68
|
+
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>`)
|
|
174
69
|
|
|
175
70
|
Bug Fixes
|
|
176
71
|
---------
|
|
@@ -214,7 +109,7 @@ New Features
|
|
|
214
109
|
For each graph/attempt, the status of each quantum and dataset is recorded in ``QuantumProvenanceGraph.add_new_graph`` and outcomes of quanta over multiple runs are resolved in ``QuantumProvenanceGraph.resolve_duplicates``.
|
|
215
110
|
At the end of this process, we can combine all attempts into a summary.
|
|
216
111
|
This serves to answer the question "What happened to this data ID?" in a holistic sense. (`DM-41711 <https://rubinobs.atlassian.net/browse/DM-41711>`_)
|
|
217
|
-
- Included the number of expected instances in ``pipetask report`` task-level summary for the
|
|
112
|
+
- Included the number of expected instances in ``pipetask report`` task-level summary for the `QuantumGraphExecutionReport`. (`DM-44368 <https://rubinobs.atlassian.net/browse/DM-44368>`_)
|
|
218
113
|
- Added mocking support for tasks that write regular datasets with config, log, or metadata storage classes. (`DM-44583 <https://rubinobs.atlassian.net/browse/DM-44583>`_)
|
|
219
114
|
- Added new ``show_dot`` functionality.
|
|
220
115
|
|
|
@@ -290,7 +185,7 @@ New Features
|
|
|
290
185
|
This interface is available through YAML pipeline specification by specifying the ``labeledSubsetModifyMode`` key when writing YAML import defectives.
|
|
291
186
|
|
|
292
187
|
New Python interfaces were added for manipulating labeled subsets in a pipeline.
|
|
293
|
-
These include; ``Pipeline.subsets`` which is a property returning a `dict
|
|
188
|
+
These include; ``Pipeline.subsets`` which is a property returning a `dict`` of subset labels to sets of task labels, ``Pipeline.addLabeledSubset`` to add a new labeled subset to a ``Pipeline``, and ``Pipeline.removeLabeledSubset`` to remove a labeled subset from a pipeline. (`DM-41203 <https://rubinobs.atlassian.net/browse/DM-41203>`_)
|
|
294
189
|
- Added ``QuantumGraph`` summary. (`DM-41542 <https://rubinobs.atlassian.net/browse/DM-41542>`_)
|
|
295
190
|
- Added human-readable option to report summary dictionaries. (`DM-41606 <https://rubinobs.atlassian.net/browse/DM-41606>`_)
|
|
296
191
|
- Added a section to pipelines which allows the explicit declaration of which susbsets correspond to steps and the dimensions the step's quanta can be sharded with. (`DM-41650 <https://rubinobs.atlassian.net/browse/DM-41650>`_)
|
{lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/creating-a-pipeline.rst
RENAMED
|
@@ -150,12 +150,12 @@ associated with ``class`` keyword instead of the label directly. The
|
|
|
150
150
|
the configuration appropriate for this `Pipeline` specified as an additional
|
|
151
151
|
yaml mapping.
|
|
152
152
|
|
|
153
|
-
The complete complexity of
|
|
153
|
+
The complete complexity of :ref:`lsst.pex.config` can't be represented with simple
|
|
154
154
|
yaml mapping syntax. To account for this, ``config`` blocks in `Pipeline`\ s
|
|
155
155
|
support two special fields: ``file`` and ``python``.
|
|
156
156
|
|
|
157
157
|
The ``file`` key may be associated with either a single value pointing to a
|
|
158
|
-
filesystem path where a
|
|
158
|
+
filesystem path where a :ref:`lsst.pex.config` file can be found, or a yaml list
|
|
159
159
|
of such paths. The file paths can contain environment variables that will be
|
|
160
160
|
expanded prior to loading the file(s). These files will then be applied to
|
|
161
161
|
the task during configuration time to override any default values.
|
|
@@ -477,7 +477,7 @@ desired camera, or can serve as a base for further `Pipeline`\ s to import.
|
|
|
477
477
|
Command line options for running Pipelines
|
|
478
478
|
------------------------------------------
|
|
479
479
|
This section is not intended to serve as a tutorial for processing data from
|
|
480
|
-
the command line, for that refer to
|
|
480
|
+
the command line, for that refer to :ref:`lsst.ctrl.mpexec` or :ref:`lsst.ctrl.bps`.
|
|
481
481
|
However, both of these tools accept URI pointers to a `Pipeline`. These URIs
|
|
482
482
|
can be altered with a specific syntax which will control how the `Pipeline`
|
|
483
483
|
is loaded.
|
|
@@ -142,7 +142,7 @@ not tied to the exact band passes of an individual telescope filter).
|
|
|
142
142
|
|
|
143
143
|
Next, take a look at the fields defined on your new connection class. These
|
|
144
144
|
are defined in a similar way as defining a configuration class, but instead
|
|
145
|
-
of using `~lsst.pex.config.Field` types from
|
|
145
|
+
of using `~lsst.pex.config.Field` types from :ref:`lsst.pex.config`,
|
|
146
146
|
connection classes make use of connection types defined in
|
|
147
147
|
:py:mod:`lsst.pipe.base.connectionTypes`. These connections define the inputs and outputs that
|
|
148
148
|
a |PipelineTask| will expect to make use of. Each of these connections documents
|
|
@@ -471,9 +471,9 @@ connection had never existed.
|
|
|
471
471
|
Run-time optional inputs
|
|
472
472
|
------------------------
|
|
473
473
|
|
|
474
|
-
A separate mechanism exists that allows an
|
|
474
|
+
A separate mechanism exists that allows an `Input` connection to be made
|
|
475
475
|
run-time optional.
|
|
476
|
-
If the
|
|
476
|
+
If the `Input.minimum` attribute is initialized to zero for a connection,
|
|
477
477
|
graph-building will still generate a quantum, and the `PipelineTask` will
|
|
478
478
|
be run, even if no dataset for that input can be found.
|
|
479
479
|
|
{lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/doc/lsst.pipe.base/creating-a-task.rst
RENAMED
|
@@ -145,7 +145,7 @@ Use the ``__init__`` method (task constructor) to do the following:
|
|
|
145
145
|
|
|
146
146
|
- Call the parent task's ``__init__`` method
|
|
147
147
|
- Make subtasks by calling ``self.makeSubtask(name)``, where ``name`` is the name of a field of type `lsst.pex.config.ConfigurableField` in your :ref:`task's configuration <creating-a-task-configuration>`.
|
|
148
|
-
- Make a schema if your task uses an
|
|
148
|
+
- Make a schema if your task uses an :ref:`lsst.afw.table`.
|
|
149
149
|
For an example of such a task `lsst.pipe.tasks.calibrate.CalibrateTask`.
|
|
150
150
|
- Initialize any other instance variables your task needs.
|
|
151
151
|
|
|
@@ -61,14 +61,6 @@ Developing Pipelines
|
|
|
61
61
|
testing-pipelines-with-mocks.rst
|
|
62
62
|
working-with-pipeline-graphs.rst
|
|
63
63
|
|
|
64
|
-
Running Pipelines
|
|
65
|
-
-----------------
|
|
66
|
-
|
|
67
|
-
.. toctree::
|
|
68
|
-
:maxdepth: 1
|
|
69
|
-
|
|
70
|
-
recording-provenance.rst
|
|
71
|
-
|
|
72
64
|
.. _lsst.pipe.base-contributing:
|
|
73
65
|
|
|
74
66
|
Contributing
|
|
@@ -110,10 +102,6 @@ Python API reference
|
|
|
110
102
|
|
|
111
103
|
.. automodapi:: lsst.pipe.base.quantum_graph
|
|
112
104
|
|
|
113
|
-
.. automodapi:: lsst.pipe.base.quantum_graph.aggregator
|
|
114
|
-
|
|
115
|
-
.. automodapi:: lsst.pipe.base.quantum_graph.ingest_graph
|
|
116
|
-
|
|
117
105
|
.. automodapi:: lsst.pipe.base.quantum_graph.visualization
|
|
118
106
|
|
|
119
107
|
QuantumGraph generation API reference
|
|
@@ -25,14 +25,14 @@ A common use for this is to provide a camera-specific variant of a particular ta
|
|
|
25
25
|
Tasks may process multiple items of data in parallel, using the ``ctrl_mpexec`` package and its ``pipetask`` command.
|
|
26
26
|
|
|
27
27
|
Most tasks have a ``run`` method that performs the primary data processing.
|
|
28
|
-
Each task's
|
|
28
|
+
Each task's `run` method should return a `~lsst.pipe.base.Struct`.
|
|
29
29
|
This allows named access to returned data, which provides safer evolution than relying on the order of returned values.
|
|
30
30
|
All task methods that return more than one or two items of data should return the data in a `~lsst.pipe.base.Struct`.
|
|
31
31
|
|
|
32
32
|
Many tasks are found in the ``pipe_tasks`` package, especially tasks that use many different packages and don't seem to belong in any one of them.
|
|
33
|
-
Tasks that are associated with a particular package should be in that package; for example the instrument signature removal task ``
|
|
33
|
+
Tasks that are associated with a particular package should be in that package; for example the instrument signature removal task ``ip.isr.isrTask.IsrTask`` is in the ``ip_isr`` package.
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
`pipe_base` is written purely in Python. The most important contents are:
|
|
36
36
|
|
|
37
37
|
- `~lsst.pipe.base.PipelineTask`: base class for pipeline tasks that can be run from pipelines.
|
|
38
38
|
- `~lsst.pipe.base.Task`: base class for subtasks that are not meant to be run from the
|
|
@@ -64,7 +64,7 @@ In some cases it may be more convenient to add tasks to an existing `PipelineGra
|
|
|
64
64
|
|
|
65
65
|
**The most important thing to remember when modifying `PipelineGraph` objects is that modifications typically reset some or all of the graph to an unresolved state.**
|
|
66
66
|
|
|
67
|
-
The reference documentation for these methods describes exactly what guarantees they make about existing resolutions in detail, and what operations are still supported on unresolved or partially-resolved graphs, but it is easiest to just ensure
|
|
67
|
+
The reference documentation for these methods describes exactly what guarantees they make about existing resolutions in detail, and what operations are still supported on unresolved or partially-resolved graphs, but it is easiest to just ensure `resolve` is called after any modifications are complete.
|
|
68
68
|
|
|
69
69
|
`PipelineGraph` mutator methods provide strong exception safety (the graph is left unchanged when an exception is raised and caught by calling code) unless the exception type raised is `PipelineGraphExceptionSafetyError`.
|
|
70
70
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "lsst-pipe-base"
|
|
7
|
-
requires-python = ">=3.
|
|
7
|
+
requires-python = ">=3.11.0"
|
|
8
8
|
description = "Pipeline infrastructure for the Rubin Science Pipelines."
|
|
9
9
|
license = "BSD-3-Clause OR GPL-3.0-or-later"
|
|
10
10
|
license-files = ["COPYRIGHT", "LICENSE", "bsd_license.txt", "gpl-v3.0.txt"]
|
|
@@ -16,6 +16,7 @@ classifiers = [
|
|
|
16
16
|
"Intended Audience :: Science/Research",
|
|
17
17
|
"Operating System :: OS Independent",
|
|
18
18
|
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3.11",
|
|
19
20
|
"Programming Language :: Python :: 3.12",
|
|
20
21
|
"Programming Language :: Python :: 3.13",
|
|
21
22
|
"Programming Language :: Python :: 3.14",
|
|
@@ -44,7 +45,6 @@ pipe_base = "lsst.pipe.base.cli:get_cli_subcommands"
|
|
|
44
45
|
|
|
45
46
|
[project.urls]
|
|
46
47
|
"Homepage" = "https://github.com/lsst/pipe_base"
|
|
47
|
-
"Source" = "https://github.com/lsst/pipe_base"
|
|
48
48
|
|
|
49
49
|
[project.optional-dependencies]
|
|
50
50
|
test = ["pytest >= 3.2"]
|
|
@@ -101,6 +101,15 @@ version = { attr = "lsst_versions.get_lsst_version" }
|
|
|
101
101
|
name = "An API Removal or Deprecation"
|
|
102
102
|
showcontent = true
|
|
103
103
|
|
|
104
|
+
[tool.black]
|
|
105
|
+
line-length = 110
|
|
106
|
+
target-version = ["py311"]
|
|
107
|
+
|
|
108
|
+
[tool.isort]
|
|
109
|
+
profile = "black"
|
|
110
|
+
line_length = 110
|
|
111
|
+
known_first_party = ["lsst"]
|
|
112
|
+
|
|
104
113
|
[tool.lsst_versions]
|
|
105
114
|
write_to = "python/lsst/pipe/base/version.py"
|
|
106
115
|
|
|
@@ -131,7 +140,7 @@ add-ignore = ["D107", "D105", "D102", "D100", "D200", "D205", "D400", "D104"]
|
|
|
131
140
|
|
|
132
141
|
[tool.ruff]
|
|
133
142
|
line-length = 110
|
|
134
|
-
target-version = "
|
|
143
|
+
target-version = "py311"
|
|
135
144
|
exclude = [
|
|
136
145
|
"__init__.py",
|
|
137
146
|
]
|
|
@@ -195,7 +204,6 @@ checks = [
|
|
|
195
204
|
"RT01", # Unfortunately our @property trigger this.
|
|
196
205
|
"RT02", # Does not want named return value. DM style says we do.
|
|
197
206
|
"SS05", # pydocstyle is better at finding infinitive verb.
|
|
198
|
-
"RT03", # sphinx bug requiring empty Returns.
|
|
199
207
|
]
|
|
200
208
|
exclude = [
|
|
201
209
|
'^__init__$',
|
{lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_instrument.py
RENAMED
|
@@ -31,14 +31,14 @@ __all__ = ("Instrument",)
|
|
|
31
31
|
|
|
32
32
|
import contextlib
|
|
33
33
|
import datetime
|
|
34
|
+
import os.path
|
|
34
35
|
from abc import ABCMeta, abstractmethod
|
|
35
36
|
from collections.abc import Sequence
|
|
36
37
|
from typing import TYPE_CHECKING, Any, Self, cast, final
|
|
37
38
|
|
|
38
|
-
from lsst.daf.butler import DataCoordinate, DataId, DimensionPacker, DimensionRecord, Formatter
|
|
39
|
+
from lsst.daf.butler import DataCoordinate, DataId, DimensionPacker, DimensionRecord, Formatter
|
|
39
40
|
from lsst.daf.butler.registry import DataIdError
|
|
40
41
|
from lsst.pex.config import Config, RegistryField
|
|
41
|
-
from lsst.resources import ResourcePath, ResourcePathExpression
|
|
42
42
|
from lsst.utils import doImportType
|
|
43
43
|
from lsst.utils.introspection import get_full_type_name
|
|
44
44
|
|
|
@@ -65,10 +65,10 @@ class Instrument(metaclass=ABCMeta):
|
|
|
65
65
|
the base class.
|
|
66
66
|
"""
|
|
67
67
|
|
|
68
|
-
configPaths: Sequence[
|
|
68
|
+
configPaths: Sequence[str] = ()
|
|
69
69
|
"""Paths to config files to read for specific Tasks.
|
|
70
70
|
|
|
71
|
-
The paths in this list should contain files of the form
|
|
71
|
+
The paths in this list should contain files of the form `task.py`, for
|
|
72
72
|
each of the Tasks that requires special configuration.
|
|
73
73
|
"""
|
|
74
74
|
|
|
@@ -99,8 +99,7 @@ class Instrument(metaclass=ABCMeta):
|
|
|
99
99
|
|
|
100
100
|
@abstractmethod
|
|
101
101
|
def register(self, registry: Registry, *, update: bool = False) -> None:
|
|
102
|
-
"""Insert instrument, and other relevant records into
|
|
103
|
-
registry.
|
|
102
|
+
"""Insert instrument, and other relevant records into `Registry`.
|
|
104
103
|
|
|
105
104
|
Parameters
|
|
106
105
|
----------
|
|
@@ -110,10 +109,6 @@ class Instrument(metaclass=ABCMeta):
|
|
|
110
109
|
If `True` (`False` is default), update existing records if they
|
|
111
110
|
differ from the new ones.
|
|
112
111
|
|
|
113
|
-
Returns
|
|
114
|
-
-------
|
|
115
|
-
None
|
|
116
|
-
|
|
117
112
|
Raises
|
|
118
113
|
------
|
|
119
114
|
lsst.daf.butler.registry.ConflictingDefinitionError
|
|
@@ -132,6 +127,13 @@ class Instrument(metaclass=ABCMeta):
|
|
|
132
127
|
the level of individual dimension entries; new detectors and filters
|
|
133
128
|
should be added, but changes to any existing record should not be.
|
|
134
129
|
This can generally be achieved via a block like
|
|
130
|
+
|
|
131
|
+
.. code-block:: python
|
|
132
|
+
|
|
133
|
+
with registry.transaction():
|
|
134
|
+
registry.syncDimensionData("instrument", ...)
|
|
135
|
+
registry.syncDimensionData("detector", ...)
|
|
136
|
+
self.registerFilters(registry)
|
|
135
137
|
"""
|
|
136
138
|
raise NotImplementedError()
|
|
137
139
|
|
|
@@ -312,7 +314,7 @@ class Instrument(metaclass=ABCMeta):
|
|
|
312
314
|
return instrument_cls(collection_prefix=collection_prefix)
|
|
313
315
|
|
|
314
316
|
@staticmethod
|
|
315
|
-
def importAll(registry: Registry) ->
|
|
317
|
+
def importAll(registry: Registry) -> None:
|
|
316
318
|
"""Import all the instruments known to this registry.
|
|
317
319
|
|
|
318
320
|
This will ensure that all metadata translators have been registered.
|
|
@@ -322,43 +324,31 @@ class Instrument(metaclass=ABCMeta):
|
|
|
322
324
|
registry : `lsst.daf.butler.Registry`
|
|
323
325
|
Butler registry to query to find the information.
|
|
324
326
|
|
|
325
|
-
Returns
|
|
326
|
-
-------
|
|
327
|
-
imported : `dict` [`str`, `type` [`Instrument`]]
|
|
328
|
-
A mapping containing all the instrument classes that were loaded
|
|
329
|
-
successfully, keyed by their butler names.
|
|
330
|
-
|
|
331
327
|
Notes
|
|
332
328
|
-----
|
|
333
329
|
It is allowed for a particular instrument class to fail on import.
|
|
334
330
|
This might simply indicate that a particular obs package has
|
|
335
331
|
not been setup.
|
|
336
332
|
"""
|
|
337
|
-
imported: dict[str, type[Instrument]] = {}
|
|
338
333
|
records = list(registry.queryDimensionRecords("instrument"))
|
|
339
334
|
for record in records:
|
|
340
335
|
cls = record.class_name
|
|
341
|
-
instrument_name: str = cast(str, record.name)
|
|
342
336
|
with contextlib.suppress(Exception):
|
|
343
|
-
|
|
344
|
-
assert issubclass(instr, Instrument)
|
|
345
|
-
imported[instrument_name] = instr
|
|
346
|
-
return imported
|
|
337
|
+
doImportType(cls)
|
|
347
338
|
|
|
348
339
|
@abstractmethod
|
|
349
|
-
def getRawFormatter(self, dataId: DataId) -> type[Formatter
|
|
340
|
+
def getRawFormatter(self, dataId: DataId) -> type[Formatter]:
|
|
350
341
|
"""Return the Formatter class that should be used to read a particular
|
|
351
342
|
raw file.
|
|
352
343
|
|
|
353
344
|
Parameters
|
|
354
345
|
----------
|
|
355
|
-
dataId : `
|
|
346
|
+
dataId : `DataId`
|
|
356
347
|
Dimension-based ID for the raw file or files being ingested.
|
|
357
348
|
|
|
358
349
|
Returns
|
|
359
350
|
-------
|
|
360
|
-
formatter : `
|
|
361
|
-
[`lsst.daf.butler.Formatter` | `lsst.daf.butler.FormatterV2` ]
|
|
351
|
+
formatter : `lsst.daf.butler.Formatter` class
|
|
362
352
|
Class to be used that reads the file into the correct
|
|
363
353
|
Python object for the raw data.
|
|
364
354
|
"""
|
|
@@ -376,10 +366,9 @@ class Instrument(metaclass=ABCMeta):
|
|
|
376
366
|
Config instance to which overrides should be applied.
|
|
377
367
|
"""
|
|
378
368
|
for root in self.configPaths:
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
config.load(uri)
|
|
369
|
+
path = os.path.join(root, f"{name}.py")
|
|
370
|
+
if os.path.exists(path):
|
|
371
|
+
config.load(path)
|
|
383
372
|
|
|
384
373
|
@staticmethod
|
|
385
374
|
def formatCollectionTimestamp(timestamp: str | datetime.datetime) -> str:
|
{lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_quantumContext.py
RENAMED
|
@@ -380,8 +380,8 @@ class QuantumContext:
|
|
|
380
380
|
if dataset is directly a `list` of `~lsst.daf.butler.DatasetRef`
|
|
381
381
|
or a single `~lsst.daf.butler.DatasetRef`. If ``values.NAME`` is
|
|
382
382
|
None, no output is written.
|
|
383
|
-
dataset : `OutputQuantizedConnection` or `list` \
|
|
384
|
-
|
|
383
|
+
dataset : `OutputQuantizedConnection` or `list`[`DatasetRef`] \
|
|
384
|
+
or `DatasetRef`
|
|
385
385
|
This argument may either be an `InputQuantizedConnection` which
|
|
386
386
|
describes all the inputs of a quantum, a list of
|
|
387
387
|
`lsst.daf.butler.DatasetRef`, or a single
|
|
@@ -460,7 +460,7 @@ class QuantumContext:
|
|
|
460
460
|
|
|
461
461
|
Parameters
|
|
462
462
|
----------
|
|
463
|
-
ref : `
|
|
463
|
+
ref : `DatasetRef`
|
|
464
464
|
The dataset to attach provenance to. This dataset must have been
|
|
465
465
|
retrieved by this quantum context.
|
|
466
466
|
extra : `dict` [ `str`, `int` | `float` | `str` | `bool` ]
|
|
@@ -275,23 +275,15 @@ class ExceptionInfo(pydantic.BaseModel):
|
|
|
275
275
|
class QuantumAttemptStatus(enum.Enum):
|
|
276
276
|
"""Enum summarizing an attempt to run a quantum."""
|
|
277
277
|
|
|
278
|
-
ABORTED = -4
|
|
279
|
-
"""The quantum failed with a hard error that prevented both logs and
|
|
280
|
-
metadata from being written.
|
|
281
|
-
|
|
282
|
-
This state is only set if information from higher-level tooling (e.g. BPS)
|
|
283
|
-
is available to distinguish it from ``UNKNOWN``.
|
|
284
|
-
"""
|
|
285
|
-
|
|
286
278
|
UNKNOWN = -3
|
|
287
279
|
"""The status of this attempt is unknown.
|
|
288
280
|
|
|
289
|
-
This means no logs or metadata were written, and it at least could
|
|
290
|
-
determined whether the quantum was blocked by an upstream failure
|
|
291
|
-
was definitely blocked, `BLOCKED` is set instead).
|
|
281
|
+
This usually means no logs or metadata were written, and it at least could
|
|
282
|
+
not be determined whether the quantum was blocked by an upstream failure
|
|
283
|
+
(if it was definitely blocked, `BLOCKED` is set instead).
|
|
292
284
|
"""
|
|
293
285
|
|
|
294
|
-
|
|
286
|
+
LOGS_MISSING = -2
|
|
295
287
|
"""Task metadata was written for this attempt but logs were not.
|
|
296
288
|
|
|
297
289
|
This is a rare condition that requires a hard failure (i.e. the kind that
|
|
@@ -300,21 +292,20 @@ class QuantumAttemptStatus(enum.Enum):
|
|
|
300
292
|
"""
|
|
301
293
|
|
|
302
294
|
FAILED = -1
|
|
303
|
-
"""Execution of the quantum failed
|
|
295
|
+
"""Execution of the quantum failed.
|
|
304
296
|
|
|
305
297
|
This is always set if the task metadata dataset was not written but logs
|
|
306
298
|
were, as is the case when a Python exception is caught and handled by the
|
|
307
|
-
execution system.
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
metadata dataset was not.
|
|
299
|
+
execution system. It may also be set in cases where logs were not written
|
|
300
|
+
either, but other information was available (e.g. from higher-level
|
|
301
|
+
orchestration tooling) to mark it as a failure.
|
|
311
302
|
"""
|
|
312
303
|
|
|
313
304
|
BLOCKED = 0
|
|
314
305
|
"""This quantum was not executed because an upstream quantum failed.
|
|
315
306
|
|
|
316
|
-
Upstream quanta with status `UNKNOWN
|
|
317
|
-
|
|
307
|
+
Upstream quanta with status `UNKNOWN` or `FAILED` are considered blockers;
|
|
308
|
+
`LOGS_MISSING` is not.
|
|
318
309
|
"""
|
|
319
310
|
|
|
320
311
|
SUCCESSFUL = 1
|
|
@@ -328,30 +319,6 @@ class QuantumAttemptStatus(enum.Enum):
|
|
|
328
319
|
these "successes with caveats" are reported.
|
|
329
320
|
"""
|
|
330
321
|
|
|
331
|
-
@property
|
|
332
|
-
def has_metadata(self) -> bool:
|
|
333
|
-
"""Whether the task metadata dataset was produced."""
|
|
334
|
-
return self is self.SUCCESSFUL or self is self.ABORTED_SUCCESS
|
|
335
|
-
|
|
336
|
-
@property
|
|
337
|
-
def has_log(self) -> bool:
|
|
338
|
-
"""Whether the log dataset was produced."""
|
|
339
|
-
return self is self.SUCCESSFUL or self is self.FAILED
|
|
340
|
-
|
|
341
|
-
@property
|
|
342
|
-
def title(self) -> str:
|
|
343
|
-
"""A version of this status' name suitable for use as a title in a plot
|
|
344
|
-
or table.
|
|
345
|
-
"""
|
|
346
|
-
return self.name.capitalize().replace("_", " ")
|
|
347
|
-
|
|
348
|
-
@property
|
|
349
|
-
def is_rare(self) -> bool:
|
|
350
|
-
"""Whether this status is rare enough that it should only be listed
|
|
351
|
-
when it actually occurs.
|
|
352
|
-
"""
|
|
353
|
-
return self in (self.ABORTED, self.ABORTED_SUCCESS, self.UNKNOWN)
|
|
354
|
-
|
|
355
322
|
|
|
356
323
|
class GetSetDictMetadataHolder(Protocol):
|
|
357
324
|
"""Protocol for objects that have a ``metadata`` attribute that satisfies
|
{lsst_pipe_base-30.0.1rc1 → lsst_pipe_base-30.2025.5100}/python/lsst/pipe/base/_task_metadata.py
RENAMED
|
@@ -37,7 +37,7 @@ import itertools
|
|
|
37
37
|
import numbers
|
|
38
38
|
import sys
|
|
39
39
|
from collections.abc import Collection, Iterator, Mapping, Sequence
|
|
40
|
-
from typing import Any, Protocol
|
|
40
|
+
from typing import Any, Protocol, TypeAlias, Union
|
|
41
41
|
|
|
42
42
|
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr
|
|
43
43
|
|
|
@@ -47,7 +47,7 @@ _ALLOWED_PRIMITIVE_TYPES = (str, float, int, bool)
|
|
|
47
47
|
|
|
48
48
|
# Note that '|' syntax for unions doesn't work when we have to use a string
|
|
49
49
|
# literal (and we do since it's recursive and not an annotation).
|
|
50
|
-
|
|
50
|
+
NestedMetadataDict: TypeAlias = Mapping[str, Union[str, float, int, bool, "NestedMetadataDict"]]
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
class PropertySetLike(Protocol):
|
|
@@ -574,7 +574,7 @@ class _DimensionGroupBranch:
|
|
|
574
574
|
|
|
575
575
|
Parameters
|
|
576
576
|
----------
|
|
577
|
-
log : `lsst.
|
|
577
|
+
log : `lsst.logging.LsstLogAdapter`
|
|
578
578
|
Logger to use for status reporting.
|
|
579
579
|
log_indent : `str`, optional
|
|
580
580
|
Indentation to prefix the log message. This is used when recursing
|
|
@@ -739,7 +739,7 @@ class _DimensionGroupTree:
|
|
|
739
739
|
Query constraint specified by the user.
|
|
740
740
|
data_id_tables : `~collections.abc.Iterable` [ `astropy.table.Table` ]
|
|
741
741
|
Data ID tables being joined into the query.
|
|
742
|
-
log : `lsst.
|
|
742
|
+
log : `lsst.log.LsstLogAdapter`
|
|
743
743
|
Logger that supports ``verbose`` output.
|
|
744
744
|
"""
|
|
745
745
|
universe = self.all_dimensions.universe
|
|
@@ -805,7 +805,7 @@ class _DimensionGroupTree:
|
|
|
805
805
|
----------
|
|
806
806
|
requested : `DatasetQueryConstraintVariant`
|
|
807
807
|
Query constraint specified by the user.
|
|
808
|
-
log : `lsst.
|
|
808
|
+
log : `lsst.log.LsstLogAdapter`
|
|
809
809
|
Logger that supports ``verbose`` output.
|
|
810
810
|
"""
|
|
811
811
|
overall_inputs: dict[str, DatasetTypeNode] = {
|
|
@@ -834,11 +834,6 @@ class _DimensionGroupTree:
|
|
|
834
834
|
remainder,
|
|
835
835
|
)
|
|
836
836
|
self.dataset_constraint.intersection_update(inputs)
|
|
837
|
-
if not self.dataset_constraint:
|
|
838
|
-
raise QuantumGraphBuilderError(
|
|
839
|
-
"An explicit dataset query constraint was provided, but it does not include any "
|
|
840
|
-
f"inputs to the pipeline subset with tasks {list(self.subgraph.tasks.keys())}."
|
|
841
|
-
)
|
|
842
837
|
case _:
|
|
843
838
|
raise QuantumGraphBuilderError(
|
|
844
839
|
f"Unable to handle type {requested} given as dataset query constraint."
|