lsst-pipe-base 29.2025.2800__tar.gz → 29.2025.2900__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.2800/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.2900}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/connections.py +86 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/prerequisite_helpers.py +4 -0
- lsst_pipe_base-29.2025.2900/python/lsst/pipe/base/version.py +2 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900/python/lsst_pipe_base.egg-info}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_adjust_all_quanta.py +23 -4
- lsst_pipe_base-29.2025.2800/python/lsst/pipe/base/version.py +0 -2
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/COPYRIGHT +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/LICENSE +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/MANIFEST.in +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/README.md +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/bsd_license.txt +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/CHANGES.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/creating-a-pipeline.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/index.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/gpl-v3.0.txt +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/pyproject.toml +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_quantumContext.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_status.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_task_metadata.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/cmd/commands.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/opt/options.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/config.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/connectionTypes.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/executionButlerBuilder.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/formatters/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/graph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/mermaid_tools.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_edges.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/expressions.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/py.typed +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/quantum_graph_skeleton.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/register_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/transfer_from_graph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/utils.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/struct.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/task.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/taskFactory.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/testUtils.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/mocks/_storage_class.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/util.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/utils.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst_pipe_base.egg-info/SOURCES.txt +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/setup.cfg +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_cliCmdRegisterInstrument.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_config_formatter.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_connections.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_dataid_match.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_dynamic_connections.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_executionButler.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_graphBuilder.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_init_output_run.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipeline.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipelineLoadSubset.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipeline_graph_expressions.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_qg_builder_dimensions.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_quantumGraph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_quantum_success_caveats.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_script_utils.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_struct.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_task.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_taskmetadata.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_testUtils.py +0 -0
- {lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_utils.py +0 -0
{lsst_pipe_base-29.2025.2800/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.2900}/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.2900
|
|
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.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/connections.py
RENAMED
|
@@ -45,6 +45,7 @@ __all__ = [
|
|
|
45
45
|
import dataclasses
|
|
46
46
|
import itertools
|
|
47
47
|
import string
|
|
48
|
+
import uuid
|
|
48
49
|
import warnings
|
|
49
50
|
from collections import UserDict, defaultdict
|
|
50
51
|
from collections.abc import Collection, Generator, Iterable, Iterator, Mapping, Sequence, Set
|
|
@@ -1271,6 +1272,52 @@ class QuantaAdjuster:
|
|
|
1271
1272
|
for edge in self._task_node.iter_all_inputs()
|
|
1272
1273
|
}
|
|
1273
1274
|
|
|
1275
|
+
def get_prerequisite_inputs(
|
|
1276
|
+
self,
|
|
1277
|
+
quantum_data_id: DataCoordinate,
|
|
1278
|
+
) -> dict[str, dict[uuid.UUID, DataCoordinate]]:
|
|
1279
|
+
"""Return the data IDs of all prerequisite inputs to a quantum.
|
|
1280
|
+
|
|
1281
|
+
Parameters
|
|
1282
|
+
----------
|
|
1283
|
+
quantum_data_id : `~lsst.daf.butler.DataCoordinate`
|
|
1284
|
+
Data ID of the quantum to get the inputs of.
|
|
1285
|
+
|
|
1286
|
+
Returns
|
|
1287
|
+
-------
|
|
1288
|
+
inputs : `dict` [ `str`, \
|
|
1289
|
+
`dict` [ `uuid.UUID`, `~lsst.daf.butler.DataCoordinate` ] ]
|
|
1290
|
+
Dataset IDs and and data IDs of prerequisite inputs, keyed by the
|
|
1291
|
+
connection name (the internal task name, not the dataset type
|
|
1292
|
+
name). This only contains prerequisite inputs, not init-inputs or
|
|
1293
|
+
regular inputs.
|
|
1294
|
+
|
|
1295
|
+
Notes
|
|
1296
|
+
-----
|
|
1297
|
+
If two connections have the same dataset type, the current
|
|
1298
|
+
implementation assumes the set of datasets is the same for the two
|
|
1299
|
+
connections. This limitation may be removed in the future.
|
|
1300
|
+
|
|
1301
|
+
Unlike regular inputs, prerequisite inputs are not looked up from input
|
|
1302
|
+
collections or indexed by data ID. Instead, they are uniquely
|
|
1303
|
+
identified by dataset UUID and reused directly between quanta.
|
|
1304
|
+
"""
|
|
1305
|
+
from .quantum_graph_skeleton import PrerequisiteDatasetKey, QuantumKey
|
|
1306
|
+
|
|
1307
|
+
by_dataset_type_name: defaultdict[str, dict[uuid.UUID, DataCoordinate]] = defaultdict(dict)
|
|
1308
|
+
quantum_key = QuantumKey(self._task_node.label, quantum_data_id.required_values)
|
|
1309
|
+
|
|
1310
|
+
for dataset_key in self._skeleton.iter_inputs_of(quantum_key):
|
|
1311
|
+
if not isinstance(dataset_key, PrerequisiteDatasetKey):
|
|
1312
|
+
continue
|
|
1313
|
+
by_dataset_type_name[dataset_key.parent_dataset_type_name][
|
|
1314
|
+
uuid.UUID(bytes=dataset_key.dataset_id_bytes)
|
|
1315
|
+
] = self._skeleton.get_data_id(dataset_key)
|
|
1316
|
+
return {
|
|
1317
|
+
edge.connection_name: by_dataset_type_name[edge.parent_dataset_type_name]
|
|
1318
|
+
for edge in self._task_node.iter_all_inputs()
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1274
1321
|
def get_outputs(self, quantum_data_id: DataCoordinate) -> dict[str, list[DataCoordinate]]:
|
|
1275
1322
|
"""Return the data IDs of all regular outputs to a quantum.
|
|
1276
1323
|
|
|
@@ -1340,6 +1387,45 @@ class QuantaAdjuster:
|
|
|
1340
1387
|
)
|
|
1341
1388
|
self._skeleton.add_input_edge(quantum_key, dataset_key)
|
|
1342
1389
|
|
|
1390
|
+
def add_prerequisite_input(
|
|
1391
|
+
self, quantum_data_id: DataCoordinate, connection_name: str, dataset_uuid: uuid.UUID
|
|
1392
|
+
) -> None:
|
|
1393
|
+
"""Add a new prerequisite input to a quantum.
|
|
1394
|
+
|
|
1395
|
+
Parameters
|
|
1396
|
+
----------
|
|
1397
|
+
quantum_data_id : `~lsst.daf.butler.DataCoordinate`
|
|
1398
|
+
Data ID of the quantum to add an input to.
|
|
1399
|
+
connection_name : `str`
|
|
1400
|
+
Name of the connection (the task-internal name, not the butler
|
|
1401
|
+
dataset type name).
|
|
1402
|
+
dataset_uuid : `uuid.UUID`
|
|
1403
|
+
UUID of the prerequisite input dataset. Must already exist in the
|
|
1404
|
+
graph as an input to a different quantum of this task, and must be
|
|
1405
|
+
a prerequisite input, not a regular input or init-input.
|
|
1406
|
+
|
|
1407
|
+
Notes
|
|
1408
|
+
-----
|
|
1409
|
+
If two connections have the same dataset type, the current
|
|
1410
|
+
implementation assumes the set of datasets is the same for the two
|
|
1411
|
+
connections. This limitation may be removed in the future.
|
|
1412
|
+
|
|
1413
|
+
Unlike regular inputs, prerequisite inputs are not looked up from input
|
|
1414
|
+
collections or indexed by data ID. Instead, they are uniquely
|
|
1415
|
+
identified by dataset UUID and reused directly between quanta.
|
|
1416
|
+
"""
|
|
1417
|
+
from .quantum_graph_skeleton import PrerequisiteDatasetKey, QuantumKey
|
|
1418
|
+
|
|
1419
|
+
quantum_key = QuantumKey(self._task_node.label, quantum_data_id.required_values)
|
|
1420
|
+
read_edge = self._task_node.prerequisite_inputs[connection_name]
|
|
1421
|
+
dataset_key = PrerequisiteDatasetKey(read_edge.parent_dataset_type_name, dataset_uuid.bytes)
|
|
1422
|
+
if dataset_key not in self._skeleton:
|
|
1423
|
+
raise LookupError(
|
|
1424
|
+
f"Prerequisite Dataset {read_edge.parent_dataset_type_name}@{dataset_uuid} "
|
|
1425
|
+
"is not already in the graph."
|
|
1426
|
+
)
|
|
1427
|
+
self._skeleton.add_input_edge(quantum_key, dataset_key)
|
|
1428
|
+
|
|
1343
1429
|
def move_output(
|
|
1344
1430
|
self, quantum_data_id: DataCoordinate, connection_name: str, dataset_data_id: DataCoordinate
|
|
1345
1431
|
) -> None:
|
|
@@ -353,6 +353,8 @@ class PrerequisiteFinder:
|
|
|
353
353
|
where=" AND ".join(where_terms),
|
|
354
354
|
bind=bind,
|
|
355
355
|
with_dimension_records=True,
|
|
356
|
+
limit=None,
|
|
357
|
+
explain=False,
|
|
356
358
|
)
|
|
357
359
|
except MissingDatasetTypeError:
|
|
358
360
|
return []
|
|
@@ -383,6 +385,8 @@ class PrerequisiteFinder:
|
|
|
383
385
|
collections=input_collections,
|
|
384
386
|
data_id=data_id,
|
|
385
387
|
with_dimension_records=True,
|
|
388
|
+
limit=None,
|
|
389
|
+
explain=False,
|
|
386
390
|
)
|
|
387
391
|
except MissingDatasetTypeError:
|
|
388
392
|
return []
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900/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.2900
|
|
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
|
|
@@ -49,10 +49,10 @@ from lsst.resources import ResourcePath
|
|
|
49
49
|
|
|
50
50
|
class GroupTestConnections(PipelineTaskConnections, dimensions=("detector",)):
|
|
51
51
|
"""Connections for a task whose quanta read in all of the biases for all
|
|
52
|
-
detectors with the same purpose
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
lowest ID in that group.
|
|
52
|
+
detectors with the same purpose, use flat-field exposures as prerequisites,
|
|
53
|
+
and (theoretically) writes both a single summary output for all inputs and
|
|
54
|
+
another output for each input. The data IDs of the quanta and the summary
|
|
55
|
+
outputs using the detector with the lowest ID in that group.
|
|
56
56
|
"""
|
|
57
57
|
|
|
58
58
|
input_group = cT.Input(
|
|
@@ -62,6 +62,13 @@ class GroupTestConnections(PipelineTaskConnections, dimensions=("detector",)):
|
|
|
62
62
|
dimensions=("detector",),
|
|
63
63
|
isCalibration=True,
|
|
64
64
|
)
|
|
65
|
+
prereq_input_group = cT.PrerequisiteInput(
|
|
66
|
+
"flat",
|
|
67
|
+
"Exposure",
|
|
68
|
+
multiple=True,
|
|
69
|
+
dimensions=("detector", "physical_filter", "band"),
|
|
70
|
+
isCalibration=True,
|
|
71
|
+
)
|
|
65
72
|
output_group = cT.Output(
|
|
66
73
|
"bias_stuff",
|
|
67
74
|
"StructuredDataDict",
|
|
@@ -90,6 +97,8 @@ class GroupTestConnections(PipelineTaskConnections, dimensions=("detector",)):
|
|
|
90
97
|
for drop_data_id in drop:
|
|
91
98
|
for input_data_id in adjuster.get_inputs(drop_data_id)["input_group"]:
|
|
92
99
|
adjuster.add_input(keep, "input_group", input_data_id)
|
|
100
|
+
for input_uuid in adjuster.get_prerequisite_inputs(drop_data_id)["prereq_input_group"]:
|
|
101
|
+
adjuster.add_prerequisite_input(keep, "prereq_input_group", input_uuid)
|
|
93
102
|
for output_data_id in adjuster.get_outputs(drop_data_id)["output_group"]:
|
|
94
103
|
adjuster.move_output(keep, "output_group", output_data_id)
|
|
95
104
|
adjuster.remove_quantum(drop_data_id)
|
|
@@ -135,18 +144,28 @@ class AdjustAllQuantaTestCase(unittest.TestCase):
|
|
|
135
144
|
# 1-3 have purpose=SCIENCE, and 4 has purpose=WAVEFRONT.
|
|
136
145
|
self.assertEqual(quanta.keys(), {1, 4})
|
|
137
146
|
self.assertEqual(len(quanta[1].inputs["bias"]), 3)
|
|
147
|
+
self.assertEqual(len(quanta[1].inputs["flat"]), 5)
|
|
138
148
|
self.assertEqual(len(quanta[1].outputs["bias_stuff"]), 3)
|
|
139
149
|
self.assertCountEqual(
|
|
140
150
|
quanta[1].inputs["bias"],
|
|
141
151
|
butler.query_datasets("bias", collections=collections, where="detector.purpose = 'SCIENCE'"),
|
|
142
152
|
)
|
|
153
|
+
self.assertCountEqual(
|
|
154
|
+
quanta[1].inputs["flat"],
|
|
155
|
+
butler.query_datasets("flat", collections=collections, where="detector.purpose = 'SCIENCE'"),
|
|
156
|
+
)
|
|
143
157
|
self.assertEqual(len(quanta[1].outputs["bias_summary"]), 1)
|
|
144
158
|
self.assertEqual(quanta[1].outputs["bias_summary"][0].dataId["detector"], 1)
|
|
145
159
|
self.assertEqual(len(quanta[4].inputs["bias"]), 1)
|
|
160
|
+
self.assertEqual(len(quanta[4].inputs["flat"]), 2)
|
|
146
161
|
self.assertEqual(len(quanta[4].outputs["bias_stuff"]), 1)
|
|
147
162
|
self.assertCountEqual(
|
|
148
163
|
quanta[4].inputs["bias"],
|
|
149
164
|
butler.query_datasets("bias", collections=collections, where="detector.purpose = 'WAVEFRONT'"),
|
|
150
165
|
)
|
|
166
|
+
self.assertCountEqual(
|
|
167
|
+
quanta[4].inputs["flat"],
|
|
168
|
+
butler.query_datasets("flat", collections=collections, where="detector.purpose = 'WAVEFRONT'"),
|
|
169
|
+
)
|
|
151
170
|
self.assertEqual(len(quanta[4].outputs["bias_summary"]), 1)
|
|
152
171
|
self.assertEqual(quanta[4].outputs["bias_summary"][0].dataId["detector"], 4)
|
|
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.2800 → lsst_pipe_base-29.2025.2900}/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.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_dataset_handle.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_instrument.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_quantumContext.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_status.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/_task_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/cli/opt/options.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/configOverrides.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/connectionTypes.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/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.2800 → lsst_pipe_base-29.2025.2900}/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.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/graph/graph.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/mermaid_tools.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipeline.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/pipelineIR.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/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
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/script/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/taskFactory.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/testUtils.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst/pipe/base/tests/util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/python/lsst_pipe_base.egg-info/zip-safe
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_caching_limited_butler.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/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.2800 → lsst_pipe_base-29.2025.2900}/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.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipelineLoadSubset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_pipeline_graph_expressions.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_qg_builder_dimensions.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/tests/test_quantum_provenance_graph.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2800 → lsst_pipe_base-29.2025.2900}/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
|
|
File without changes
|