lsst-pipe-base 29.2025.2000__tar.gz → 29.2025.2300__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.2000/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.2300}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_task_metadata.py +1 -1
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +12 -3
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/cmd/commands.py +1 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/graphSummary.py +2 -2
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +18 -11
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_edges.py +13 -11
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +1 -1
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/script/transfer_from_graph.py +10 -1
- lsst_pipe_base-29.2025.2300/python/lsst/pipe/base/script/utils.py +74 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/script/zip_from_graph.py +4 -18
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/mocks/_storage_class.py +3 -3
- lsst_pipe_base-29.2025.2300/python/lsst/pipe/base/version.py +2 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300/python/lsst_pipe_base.egg-info}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst_pipe_base.egg-info/SOURCES.txt +1 -0
- lsst_pipe_base-29.2025.2000/python/lsst/pipe/base/version.py +0 -2
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/COPYRIGHT +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/LICENSE +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/MANIFEST.in +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/README.md +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/bsd_license.txt +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/CHANGES.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/creating-a-pipeline.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/index.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/gpl-v3.0.txt +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/pyproject.toml +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_quantumContext.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_status.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/opt/options.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/config.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/connectionTypes.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/connections.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/executionButlerBuilder.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/formatters/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/graph.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/mermaid_tools.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/expressions.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/prerequisite_helpers.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/py.typed +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/quantum_graph_skeleton.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/script/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/script/register_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/struct.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/task.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/taskFactory.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/testUtils.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/tests/util.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/utils.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/setup.cfg +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_adjust_all_quanta.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_cliCmdRegisterInstrument.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_config_formatter.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_connections.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_dataid_match.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_dynamic_connections.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_executionButler.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_graphBuilder.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_init_output_run.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipeline.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipelineLoadSubset.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipeline_graph_expressions.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_quantumGraph.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_quantum_success_caveats.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_struct.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_task.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_taskmetadata.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_testUtils.py +0 -0
- {lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_utils.py +0 -0
{lsst_pipe_base-29.2025.2000/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.2300}/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.2300
|
|
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
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_task_metadata.py
RENAMED
|
@@ -677,7 +677,7 @@ class TaskMetadata(BaseModel):
|
|
|
677
677
|
return super().model_copy(*args, **kwargs)
|
|
678
678
|
|
|
679
679
|
@classmethod
|
|
680
|
-
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[misc]
|
|
680
|
+
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[misc, override]
|
|
681
681
|
"""See `pydantic.BaseModel.model_construct`."""
|
|
682
682
|
return super().model_construct(*args, **kwargs)
|
|
683
683
|
|
|
@@ -48,7 +48,7 @@ from lsst.daf.butler import (
|
|
|
48
48
|
DimensionRecordSet,
|
|
49
49
|
MissingDatasetTypeError,
|
|
50
50
|
)
|
|
51
|
-
from lsst.utils.logging import LsstLogAdapter
|
|
51
|
+
from lsst.utils.logging import LsstLogAdapter, PeriodicLogger
|
|
52
52
|
from lsst.utils.timer import timeMethod
|
|
53
53
|
|
|
54
54
|
from ._datasetQueryConstraints import DatasetQueryConstraintVariant
|
|
@@ -215,17 +215,26 @@ class AllDimensionsQuantumGraphBuilder(QuantumGraphBuilder):
|
|
|
215
215
|
# Allow duplicates from common skypix overlaps to make some queries
|
|
216
216
|
# run faster.
|
|
217
217
|
query._allow_duplicate_overlaps = True
|
|
218
|
-
self.log.info("Iterating over query results to associate quanta with datasets.")
|
|
219
218
|
# Iterate over query results, populating data IDs for datasets,
|
|
220
219
|
# quanta, and edges. We populate only the first level of the tree
|
|
221
220
|
# in the first pass, so we can be done with the query results as
|
|
222
221
|
# quickly as possible in case that holds a connection/cursor open.
|
|
223
222
|
n_rows = 0
|
|
223
|
+
progress_logger: PeriodicLogger | None = None
|
|
224
224
|
for common_data_id in query.data_ids(tree.all_dimensions):
|
|
225
|
+
if progress_logger is None:
|
|
226
|
+
# There can be a long wait between submitting the query and
|
|
227
|
+
# returning the first row, so we want to make sure we log
|
|
228
|
+
# when we get it; note that PeriodicLogger is not going to
|
|
229
|
+
# do that for us, as it waits for its interval _after_ the
|
|
230
|
+
# first log is seen.
|
|
231
|
+
self.log.info("Iterating over data ID query results.")
|
|
232
|
+
progress_logger = PeriodicLogger(self.log)
|
|
225
233
|
for branch_dimensions, branch in tree.trunk_branches.items():
|
|
226
234
|
data_id = common_data_id.subset(branch_dimensions)
|
|
227
235
|
branch.data_ids.add(data_id)
|
|
228
236
|
n_rows += 1
|
|
237
|
+
progress_logger.log("Iterating over data ID query results: %d rows processed so far.", n_rows)
|
|
229
238
|
if n_rows == 0:
|
|
230
239
|
# A single multiline log plays better with log aggregators like
|
|
231
240
|
# Loki.
|
|
@@ -242,7 +251,7 @@ class AllDimensionsQuantumGraphBuilder(QuantumGraphBuilder):
|
|
|
242
251
|
# If an exception was raised, write a partial.
|
|
243
252
|
self.log.error("\n".join(lines))
|
|
244
253
|
return
|
|
245
|
-
self.log.verbose("
|
|
254
|
+
self.log.verbose("Done iterating over query results: %d rows processed in total.", n_rows)
|
|
246
255
|
# We now recursively populate the data IDs of the rest of the tree.
|
|
247
256
|
tree.project_data_ids(self.log)
|
|
248
257
|
|
|
@@ -61,6 +61,7 @@ def register_instrument(*args: Any, **kwargs: Any) -> None:
|
|
|
61
61
|
@click.option(
|
|
62
62
|
"--dry-run", is_flag=True, default=False, help="Run the transfer but do not update the destination butler"
|
|
63
63
|
)
|
|
64
|
+
@dataset_type_option(help="Subset of dataset types to transfer from graph.")
|
|
64
65
|
@options_file_option()
|
|
65
66
|
def transfer_from_graph(**kwargs: Any) -> None:
|
|
66
67
|
"""Transfer datasets from a quantum graph to a destination butler.
|
|
@@ -66,7 +66,7 @@ class QgraphTaskSummary(pydantic.BaseModel):
|
|
|
66
66
|
return super().model_copy(*args, **kwargs)
|
|
67
67
|
|
|
68
68
|
@classmethod
|
|
69
|
-
def model_construct(cls, *args: Any, **kwargs: Any) -> Any:
|
|
69
|
+
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[override]
|
|
70
70
|
"""See `pydantic.BaseModel.model_construct`."""
|
|
71
71
|
return super().model_construct(*args, **kwargs)
|
|
72
72
|
|
|
@@ -121,7 +121,7 @@ class QgraphSummary(pydantic.BaseModel):
|
|
|
121
121
|
return super().model_copy(*args, **kwargs)
|
|
122
122
|
|
|
123
123
|
@classmethod
|
|
124
|
-
def model_construct(cls, *args: Any, **kwargs: Any) -> Any:
|
|
124
|
+
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[override]
|
|
125
125
|
"""See `pydantic.BaseModel.model_construct`."""
|
|
126
126
|
return super().model_construct(*args, **kwargs)
|
|
127
127
|
|
|
@@ -60,12 +60,13 @@ class DatasetTypeNode:
|
|
|
60
60
|
"""
|
|
61
61
|
|
|
62
62
|
dataset_type: DatasetType
|
|
63
|
-
"""Common definition of this dataset type for the graph
|
|
63
|
+
"""Common definition of this dataset type for the graph
|
|
64
|
+
(`~lsst.daf.butler.DatasetType`).
|
|
64
65
|
"""
|
|
65
66
|
|
|
66
67
|
is_initial_query_constraint: bool
|
|
67
68
|
"""Whether this dataset should be included as a constraint in the initial
|
|
68
|
-
query for data IDs in QuantumGraph generation.
|
|
69
|
+
query for data IDs in QuantumGraph generation (`bool`).
|
|
69
70
|
|
|
70
71
|
This is only `True` for dataset types that are overall regular inputs, and
|
|
71
72
|
only if none of those input connections had ``deferQueryConstraint=True``.
|
|
@@ -73,14 +74,16 @@ class DatasetTypeNode:
|
|
|
73
74
|
|
|
74
75
|
is_prerequisite: bool
|
|
75
76
|
"""Whether this dataset type is a prerequisite input that must exist in
|
|
76
|
-
the Registry before graph creation.
|
|
77
|
+
the Registry before graph creation (`bool`).
|
|
77
78
|
"""
|
|
78
79
|
|
|
79
80
|
producing_edge: WriteEdge | None
|
|
80
|
-
"""The edge to the task that produces this dataset type
|
|
81
|
+
"""The edge to the task that produces this dataset type
|
|
82
|
+
(`lsst.pipe.base.pipeline_graph.WriteEdge` or `None`)."""
|
|
81
83
|
|
|
82
84
|
consuming_edges: Collection[ReadEdge]
|
|
83
|
-
"""The edges to tasks that consume this dataset type
|
|
85
|
+
"""The edges to tasks that consume this dataset type
|
|
86
|
+
(collection [`lsst.pipe.base.pipeline_graph.ReadEdge`])."""
|
|
84
87
|
|
|
85
88
|
@classmethod
|
|
86
89
|
def _from_edges(
|
|
@@ -184,7 +187,7 @@ class DatasetTypeNode:
|
|
|
184
187
|
|
|
185
188
|
@property
|
|
186
189
|
def name(self) -> str:
|
|
187
|
-
"""Name of the dataset type.
|
|
190
|
+
"""Name of the dataset type (`str`).
|
|
188
191
|
|
|
189
192
|
This is always the parent dataset type, never that of a component.
|
|
190
193
|
"""
|
|
@@ -193,29 +196,33 @@ class DatasetTypeNode:
|
|
|
193
196
|
@property
|
|
194
197
|
def key(self) -> NodeKey:
|
|
195
198
|
"""Key that identifies this dataset type in internal and exported
|
|
196
|
-
networkx graphs.
|
|
199
|
+
networkx graphs (`~lsst.pipe.base.pipeline_graph.NodeKey`).
|
|
197
200
|
"""
|
|
198
201
|
return NodeKey(NodeType.DATASET_TYPE, self.dataset_type.name)
|
|
199
202
|
|
|
200
203
|
@property
|
|
201
204
|
def dimensions(self) -> DimensionGroup:
|
|
202
|
-
"""Dimensions of the dataset type
|
|
205
|
+
"""Dimensions of the dataset type
|
|
206
|
+
(`~lsst.daf.butler.DimensionGroup`).
|
|
207
|
+
"""
|
|
203
208
|
return self.dataset_type.dimensions
|
|
204
209
|
|
|
205
210
|
@property
|
|
206
211
|
def storage_class_name(self) -> str:
|
|
207
|
-
"""String name of the storage class for this dataset type."""
|
|
212
|
+
"""String name of the storage class for this dataset type (`str`)."""
|
|
208
213
|
return self.dataset_type.storageClass_name
|
|
209
214
|
|
|
210
215
|
@property
|
|
211
216
|
def storage_class(self) -> StorageClass:
|
|
212
|
-
"""Storage class for this dataset type
|
|
217
|
+
"""Storage class for this dataset type
|
|
218
|
+
(`~lsst.daf.butler.StorageClass`).
|
|
219
|
+
"""
|
|
213
220
|
return self.dataset_type.storageClass
|
|
214
221
|
|
|
215
222
|
@property
|
|
216
223
|
def is_calibration(self) -> bool:
|
|
217
224
|
"""Whether this dataset type can be included in
|
|
218
|
-
`~lsst.daf.butler.CollectionType.CALIBRATION` collections.
|
|
225
|
+
`~lsst.daf.butler.CollectionType.CALIBRATION` collections (`bool`).
|
|
219
226
|
"""
|
|
220
227
|
return self.dataset_type.isCalibration()
|
|
221
228
|
|
|
@@ -90,16 +90,16 @@ class Edge(ABC):
|
|
|
90
90
|
"""
|
|
91
91
|
|
|
92
92
|
task_key: NodeKey
|
|
93
|
-
"""Task part of the key for this edge in networkx graphs."""
|
|
93
|
+
"""Task part of the key for this edge in networkx graphs (`NodeKey`)."""
|
|
94
94
|
|
|
95
95
|
dataset_type_key: NodeKey
|
|
96
|
-
"""Task part of the key for this edge in networkx graphs."""
|
|
96
|
+
"""Task part of the key for this edge in networkx graphs (`NodeKey`)."""
|
|
97
97
|
|
|
98
98
|
connection_name: str
|
|
99
|
-
"""Name used by the task to refer to this dataset type."""
|
|
99
|
+
"""Name used by the task to refer to this dataset type (`str`)."""
|
|
100
100
|
|
|
101
101
|
storage_class_name: str
|
|
102
|
-
"""Storage class expected by this task.
|
|
102
|
+
"""Storage class expected by this task (`str`).
|
|
103
103
|
|
|
104
104
|
If `ReadEdge.component` is not `None`, this is the component storage class,
|
|
105
105
|
not the parent storage class.
|
|
@@ -111,7 +111,7 @@ class Edge(ABC):
|
|
|
111
111
|
"""
|
|
112
112
|
|
|
113
113
|
raw_dimensions: frozenset[str]
|
|
114
|
-
"""Raw dimensions in the task declaration.
|
|
114
|
+
"""Raw dimensions in the task declaration (`frozenset` [`str`]).
|
|
115
115
|
|
|
116
116
|
This can only be used safely for partial comparisons: two edges with the
|
|
117
117
|
same ``raw_dimensions`` (and the same parent dataset type name) always have
|
|
@@ -128,12 +128,12 @@ class Edge(ABC):
|
|
|
128
128
|
|
|
129
129
|
@property
|
|
130
130
|
def task_label(self) -> str:
|
|
131
|
-
"""Label of the task."""
|
|
131
|
+
"""Label of the task (`str`)."""
|
|
132
132
|
return str(self.task_key)
|
|
133
133
|
|
|
134
134
|
@property
|
|
135
135
|
def parent_dataset_type_name(self) -> str:
|
|
136
|
-
"""Name of the parent dataset type.
|
|
136
|
+
"""Name of the parent dataset type (`str`).
|
|
137
137
|
|
|
138
138
|
All dataset type nodes in a pipeline graph are for parent dataset
|
|
139
139
|
types; components are represented by additional `ReadEdge` state.
|
|
@@ -154,7 +154,9 @@ class Edge(ABC):
|
|
|
154
154
|
@property
|
|
155
155
|
def key(self) -> tuple[NodeKey, NodeKey, str]:
|
|
156
156
|
"""Ordered tuple of node keys and connection name that uniquely
|
|
157
|
-
identifies this edge in a pipeline graph.
|
|
157
|
+
identifies this edge in a pipeline graph (`NodeKey`, `NodeKey`, `str`).
|
|
158
|
+
|
|
159
|
+
The nodes are ordered in the same sense as for `nodes`.
|
|
158
160
|
"""
|
|
159
161
|
return self.nodes + (self.connection_name,)
|
|
160
162
|
|
|
@@ -163,7 +165,7 @@ class Edge(ABC):
|
|
|
163
165
|
|
|
164
166
|
@property
|
|
165
167
|
def dataset_type_name(self) -> str:
|
|
166
|
-
"""Dataset type name seen by the task.
|
|
168
|
+
"""Dataset type name seen by the task (`str`).
|
|
167
169
|
|
|
168
170
|
This defaults to the parent dataset type name, which is appropriate
|
|
169
171
|
for all writes and most reads.
|
|
@@ -355,7 +357,7 @@ class ReadEdge(Edge):
|
|
|
355
357
|
|
|
356
358
|
component: str | None
|
|
357
359
|
"""Component to add to `parent_dataset_type_name` to form the dataset type
|
|
358
|
-
name seen by this task.
|
|
360
|
+
name seen by this task (`str` or `None`).
|
|
359
361
|
"""
|
|
360
362
|
|
|
361
363
|
is_prerequisite: bool
|
|
@@ -378,7 +380,7 @@ class ReadEdge(Edge):
|
|
|
378
380
|
|
|
379
381
|
@property
|
|
380
382
|
def dataset_type_name(self) -> str:
|
|
381
|
-
"""Complete dataset type name, as seen by the task."""
|
|
383
|
+
"""Complete dataset type name, as seen by the task (`str`)."""
|
|
382
384
|
if self.component is not None:
|
|
383
385
|
return f"{self.parent_dataset_type_name}.{self.component}"
|
|
384
386
|
return self.parent_dataset_type_name
|
|
@@ -1546,7 +1546,7 @@ class PipelineGraph:
|
|
|
1546
1546
|
|
|
1547
1547
|
- the parent dataset type name;
|
|
1548
1548
|
- the resolved `DatasetTypeNode`, or `None` if the dataset type has
|
|
1549
|
-
|
|
1549
|
+
not been resolved.
|
|
1550
1550
|
"""
|
|
1551
1551
|
for generation in networkx.algorithms.dag.topological_generations(self._xgraph):
|
|
1552
1552
|
key: NodeKey
|
|
@@ -31,6 +31,8 @@ from lsst.daf.butler import Butler, CollectionType, QuantumBackedButler, Registr
|
|
|
31
31
|
from lsst.daf.butler.registry import MissingCollectionError
|
|
32
32
|
from lsst.pipe.base import QuantumGraph
|
|
33
33
|
|
|
34
|
+
from .utils import filter_by_dataset_type_glob
|
|
35
|
+
|
|
34
36
|
|
|
35
37
|
def transfer_from_graph(
|
|
36
38
|
graph: str,
|
|
@@ -39,6 +41,7 @@ def transfer_from_graph(
|
|
|
39
41
|
transfer_dimensions: bool,
|
|
40
42
|
update_output_chain: bool,
|
|
41
43
|
dry_run: bool,
|
|
44
|
+
dataset_type: tuple[str, ...],
|
|
42
45
|
) -> int:
|
|
43
46
|
"""Transfer output datasets from quantum graph to dest.
|
|
44
47
|
|
|
@@ -60,6 +63,9 @@ def transfer_from_graph(
|
|
|
60
63
|
name as a the first collection in the chain.
|
|
61
64
|
dry_run : `bool`
|
|
62
65
|
Run the transfer without updating the destination butler.
|
|
66
|
+
dataset_type : `tuple` of `str`
|
|
67
|
+
Dataset type names. An empty tuple implies all dataset types.
|
|
68
|
+
Can include globs.
|
|
63
69
|
|
|
64
70
|
Returns
|
|
65
71
|
-------
|
|
@@ -84,11 +90,14 @@ def transfer_from_graph(
|
|
|
84
90
|
dataset_types=dataset_types,
|
|
85
91
|
)
|
|
86
92
|
|
|
93
|
+
# Filter the refs based on requested dataset types.
|
|
94
|
+
filtered_refs = filter_by_dataset_type_glob(output_refs, dataset_type)
|
|
95
|
+
|
|
87
96
|
dest_butler = Butler.from_config(dest, writeable=True)
|
|
88
97
|
|
|
89
98
|
transferred = dest_butler.transfer_from(
|
|
90
99
|
qbb,
|
|
91
|
-
|
|
100
|
+
filtered_refs,
|
|
92
101
|
transfer="auto",
|
|
93
102
|
register_dataset_types=register_dataset_types,
|
|
94
103
|
transfer_dimensions=transfer_dimensions,
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# This file is part of pipe_base.
|
|
2
|
+
#
|
|
3
|
+
# Developed for the LSST Data Management System.
|
|
4
|
+
# This product includes software developed by the LSST Project
|
|
5
|
+
# (http://www.lsst.org).
|
|
6
|
+
# See the COPYRIGHT file at the top-level directory of this distribution
|
|
7
|
+
# for details of code ownership.
|
|
8
|
+
#
|
|
9
|
+
# This software is dual licensed under the GNU General Public License and also
|
|
10
|
+
# under a 3-clause BSD license. Recipients may choose which of these licenses
|
|
11
|
+
# to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
|
|
12
|
+
# respectively. If you choose the GPL option then the following text applies
|
|
13
|
+
# (but note that there is still no warranty even if you opt for BSD instead):
|
|
14
|
+
#
|
|
15
|
+
# This program is free software: you can redistribute it and/or modify
|
|
16
|
+
# it under the terms of the GNU General Public License as published by
|
|
17
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
18
|
+
# (at your option) any later version.
|
|
19
|
+
#
|
|
20
|
+
# This program is distributed in the hope that it will be useful,
|
|
21
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
22
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
23
|
+
# GNU General Public License for more details.
|
|
24
|
+
#
|
|
25
|
+
# You should have received a copy of the GNU General Public License
|
|
26
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
"filter_by_dataset_type_glob",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
import re
|
|
35
|
+
from collections.abc import Collection
|
|
36
|
+
|
|
37
|
+
from lsst.daf.butler import DatasetRef
|
|
38
|
+
from lsst.daf.butler.utils import globToRegex
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _matches_dataset_type(dataset_type_name: str, regexes: list[str | re.Pattern]) -> bool:
|
|
42
|
+
for regex in regexes:
|
|
43
|
+
if isinstance(regex, str):
|
|
44
|
+
if dataset_type_name == regex:
|
|
45
|
+
return True
|
|
46
|
+
elif regex.search(dataset_type_name):
|
|
47
|
+
return True
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def filter_by_dataset_type_glob(
|
|
52
|
+
refs: Collection[DatasetRef], dataset_types: tuple[str, ...]
|
|
53
|
+
) -> Collection[DatasetRef]:
|
|
54
|
+
"""Filter the refs based on requested dataset types.
|
|
55
|
+
|
|
56
|
+
Parameters
|
|
57
|
+
----------
|
|
58
|
+
refs : `collections.abc.Collection` [ `lsst.daf.butler.DatasetRef` ]
|
|
59
|
+
Datasets to be filtered.
|
|
60
|
+
dataset_types : `tuple` [ `str`, ...]
|
|
61
|
+
Dataset type names or globs to use for filtering. Empty tuple implies
|
|
62
|
+
no filtering.
|
|
63
|
+
|
|
64
|
+
Returns
|
|
65
|
+
-------
|
|
66
|
+
filtered : `collections.abc.Collection` [ `lsst.daf.butler.DatasetRef` ]
|
|
67
|
+
Filter datasets.
|
|
68
|
+
"""
|
|
69
|
+
regexes = globToRegex(dataset_types)
|
|
70
|
+
if regexes is ...:
|
|
71
|
+
# Nothing to do.
|
|
72
|
+
return refs
|
|
73
|
+
|
|
74
|
+
return {ref for ref in refs if _matches_dataset_type(ref.datasetType.name, regexes)}
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
__all__ = ["zip_from_graph"]
|
|
29
29
|
|
|
30
30
|
import logging
|
|
31
|
-
import re
|
|
32
31
|
|
|
33
32
|
from lsst.daf.butler import QuantumBackedButler
|
|
34
|
-
from lsst.daf.butler.utils import globToRegex
|
|
35
33
|
from lsst.pipe.base import QuantumGraph
|
|
36
34
|
from lsst.resources import ResourcePath
|
|
37
35
|
|
|
36
|
+
from .utils import filter_by_dataset_type_glob
|
|
37
|
+
|
|
38
38
|
_LOG = logging.getLogger(__name__)
|
|
39
39
|
|
|
40
40
|
|
|
@@ -83,22 +83,8 @@ def zip_from_graph(
|
|
|
83
83
|
)
|
|
84
84
|
|
|
85
85
|
# Filter the refs based on requested dataset types.
|
|
86
|
-
|
|
87
|
-
if regexes is ...:
|
|
88
|
-
filtered_refs = output_refs
|
|
89
|
-
else:
|
|
90
|
-
|
|
91
|
-
def _matches(dataset_type_name: str, regexes: list[str | re.Pattern]) -> bool:
|
|
92
|
-
for regex in regexes:
|
|
93
|
-
if isinstance(regex, str):
|
|
94
|
-
if dataset_type_name == regex:
|
|
95
|
-
return True
|
|
96
|
-
elif regex.search(dataset_type_name):
|
|
97
|
-
return True
|
|
98
|
-
return False
|
|
99
|
-
|
|
100
|
-
filtered_refs = {ref for ref in output_refs if _matches(ref.datasetType.name, regexes)}
|
|
86
|
+
filtered_refs = filter_by_dataset_type_glob(output_refs, dataset_type)
|
|
101
87
|
|
|
102
|
-
_LOG.info("Retrieving artifacts for %d datasets and storing in Zip file.", len(
|
|
88
|
+
_LOG.info("Retrieving artifacts for %d datasets and storing in Zip file.", len(filtered_refs))
|
|
103
89
|
zip = qbb.retrieve_artifacts_zip(filtered_refs, dest)
|
|
104
90
|
return zip
|
|
@@ -227,7 +227,7 @@ class MockDataset(pydantic.BaseModel):
|
|
|
227
227
|
return super().model_copy(*args, **kwargs)
|
|
228
228
|
|
|
229
229
|
@classmethod
|
|
230
|
-
def model_construct(cls, *args: Any, **kwargs: Any) -> Any:
|
|
230
|
+
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[override]
|
|
231
231
|
"""See `pydantic.BaseModel.model_construct`."""
|
|
232
232
|
return super().model_construct(*args, **kwargs)
|
|
233
233
|
|
|
@@ -266,7 +266,7 @@ class ConvertedUnmockedDataset(pydantic.BaseModel):
|
|
|
266
266
|
return super().model_copy(*args, **kwargs)
|
|
267
267
|
|
|
268
268
|
@classmethod
|
|
269
|
-
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[misc]
|
|
269
|
+
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[misc, override]
|
|
270
270
|
"""See `pydantic.BaseModel.model_construct`."""
|
|
271
271
|
return super().model_construct(*args, **kwargs)
|
|
272
272
|
|
|
@@ -316,7 +316,7 @@ class MockDatasetQuantum(pydantic.BaseModel):
|
|
|
316
316
|
return super().model_copy(*args, **kwargs)
|
|
317
317
|
|
|
318
318
|
@classmethod
|
|
319
|
-
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[misc]
|
|
319
|
+
def model_construct(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[misc, override]
|
|
320
320
|
"""See `pydantic.BaseModel.model_construct`."""
|
|
321
321
|
return super().model_construct(*args, **kwargs)
|
|
322
322
|
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300/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.2300
|
|
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
|
|
@@ -93,6 +93,7 @@ python/lsst/pipe/base/script/__init__.py
|
|
|
93
93
|
python/lsst/pipe/base/script/register_instrument.py
|
|
94
94
|
python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py
|
|
95
95
|
python/lsst/pipe/base/script/transfer_from_graph.py
|
|
96
|
+
python/lsst/pipe/base/script/utils.py
|
|
96
97
|
python/lsst/pipe/base/script/zip_from_graph.py
|
|
97
98
|
python/lsst/pipe/base/tests/__init__.py
|
|
98
99
|
python/lsst/pipe/base/tests/no_dimensions.py
|
|
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.2000 → lsst_pipe_base-29.2025.2300}/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.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_dataset_handle.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_instrument.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_quantumContext.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/_status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/cli/opt/options.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/configOverrides.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/connectionTypes.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/connections.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/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.2000 → lsst_pipe_base-29.2025.2300}/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.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/graph/graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/mermaid_tools.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipeline.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/pipelineIR.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/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.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/script/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/taskFactory.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst/pipe/base/testUtils.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/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
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/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
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/python/lsst_pipe_base.egg-info/zip-safe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_caching_limited_butler.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/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.2000 → lsst_pipe_base-29.2025.2300}/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
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipelineLoadSubset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_pipeline_graph_expressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/tests/test_quantum_provenance_graph.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2000 → lsst_pipe_base-29.2025.2300}/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
|