lsst-pipe-base 29.2025.1500__tar.gz → 29.2025.1600__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.1500/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.1600}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +17 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/_loadHelpers.py +4 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/graph.py +2 -2
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline.py +1 -1
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipelineIR.py +10 -1
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +17 -25
- lsst_pipe_base-29.2025.1600/python/lsst/pipe/base/version.py +2 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600/python/lsst_pipe_base.egg-info}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipeline.py +22 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipelineIR.py +32 -32
- lsst_pipe_base-29.2025.1500/python/lsst/pipe/base/version.py +0 -2
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/COPYRIGHT +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/LICENSE +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/MANIFEST.in +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/README.md +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/bsd_license.txt +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/CHANGES.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/creating-a-pipeline.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/index.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/gpl-v3.0.txt +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/pyproject.toml +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_instrument.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_quantumContext.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_status.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_task_metadata.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/cmd/commands.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/opt/options.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/config.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/connectionTypes.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/connections.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/executionButlerBuilder.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/formatters/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/mermaid_tools.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_edges.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/expressions.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/prerequisite_helpers.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/py.typed +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/quantum_graph_skeleton.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/script/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/script/register_instrument.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/script/transfer_from_graph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/struct.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/task.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/taskFactory.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/testUtils.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/mocks/_storage_class.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/tests/util.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/utils.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst_pipe_base.egg-info/SOURCES.txt +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/setup.cfg +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_adjust_all_quanta.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_cliCmdRegisterInstrument.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_config_formatter.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_connections.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_dataid_match.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_dynamic_connections.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_executionButler.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_graphBuilder.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_init_output_run.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_instrument.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipelineLoadSubset.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipeline_graph_expressions.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_quantumGraph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_quantum_success_caveats.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_struct.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_task.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_taskmetadata.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_testUtils.py +0 -0
- {lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_utils.py +0 -0
{lsst_pipe_base-29.2025.1500/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.1600}/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.1600
|
|
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
|
|
@@ -39,6 +39,8 @@ from collections import defaultdict
|
|
|
39
39
|
from collections.abc import Iterable, Mapping
|
|
40
40
|
from typing import TYPE_CHECKING, Any, TypeAlias, final
|
|
41
41
|
|
|
42
|
+
import astropy.table
|
|
43
|
+
|
|
42
44
|
from lsst.daf.butler import (
|
|
43
45
|
Butler,
|
|
44
46
|
DataCoordinate,
|
|
@@ -85,6 +87,11 @@ class AllDimensionsQuantumGraphBuilder(QuantumGraphBuilder):
|
|
|
85
87
|
(sometimes catastrophically bad) query plan.
|
|
86
88
|
bind : `~collections.abc.Mapping`, optional
|
|
87
89
|
Variable substitutions for the ``where`` expression.
|
|
90
|
+
data_id_tables : `~collections.abc.Iterable` [ `astropy.table.Table` ],\
|
|
91
|
+
optional
|
|
92
|
+
Tables of data IDs to join in as constraints. Missing dimensions that
|
|
93
|
+
are constrained by the ``where`` argument or pipeline data ID will be
|
|
94
|
+
filled in automatically.
|
|
88
95
|
**kwargs
|
|
89
96
|
Additional keyword arguments forwarded to `QuantumGraphBuilder`.
|
|
90
97
|
|
|
@@ -113,6 +120,7 @@ class AllDimensionsQuantumGraphBuilder(QuantumGraphBuilder):
|
|
|
113
120
|
where: str = "",
|
|
114
121
|
dataset_query_constraint: DatasetQueryConstraintVariant = DatasetQueryConstraintVariant.ALL,
|
|
115
122
|
bind: Mapping[str, Any] | None = None,
|
|
123
|
+
data_id_tables: Iterable[astropy.table.Table] = (),
|
|
116
124
|
**kwargs: Any,
|
|
117
125
|
):
|
|
118
126
|
super().__init__(pipeline_graph, butler, **kwargs)
|
|
@@ -120,6 +128,7 @@ class AllDimensionsQuantumGraphBuilder(QuantumGraphBuilder):
|
|
|
120
128
|
self.where = where
|
|
121
129
|
self.dataset_query_constraint = dataset_query_constraint
|
|
122
130
|
self.bind = bind
|
|
131
|
+
self.data_id_tables = list(data_id_tables)
|
|
123
132
|
|
|
124
133
|
@timeMethod
|
|
125
134
|
def process_subgraph(self, subgraph: PipelineGraph) -> QuantumGraphSkeleton:
|
|
@@ -194,6 +203,14 @@ class AllDimensionsQuantumGraphBuilder(QuantumGraphBuilder):
|
|
|
194
203
|
f"{self.where!r}, bind={self.bind!r})"
|
|
195
204
|
)
|
|
196
205
|
query = query.where(tree.subgraph.data_id, self.where, bind=self.bind)
|
|
206
|
+
# It's important for tables to be joined in last, so data IDs from
|
|
207
|
+
# pipeline and where can be used to fill in missing columns.
|
|
208
|
+
for table in self.data_id_tables:
|
|
209
|
+
# If this is from ctrl_mpexec's pipetask, it'll have added
|
|
210
|
+
# a filename to the metadata for us.
|
|
211
|
+
table_name = table.meta.get("filename", "unknown")
|
|
212
|
+
query_cmd.append(f" query = query.join_data_coordinate_table(<{table_name}>)")
|
|
213
|
+
query = query.join_data_coordinate_table(table)
|
|
197
214
|
self.log.verbose("Querying for data IDs via: %s", "\n".join(query_cmd))
|
|
198
215
|
# Allow duplicates from common skypix overlaps to make some queries
|
|
199
216
|
# run faster.
|
|
@@ -65,6 +65,7 @@ class LoadHelper(AbstractContextManager["LoadHelper"]):
|
|
|
65
65
|
to upgrade them to the latest format before they can be used in
|
|
66
66
|
production.
|
|
67
67
|
"""
|
|
68
|
+
fullRead: bool = False
|
|
68
69
|
|
|
69
70
|
def __post_init__(self) -> None:
|
|
70
71
|
self._resourceHandle: ResourceHandleProtocol | None = None
|
|
@@ -261,6 +262,9 @@ class LoadHelper(AbstractContextManager["LoadHelper"]):
|
|
|
261
262
|
def __enter__(self) -> LoadHelper:
|
|
262
263
|
if isinstance(self.uri, BinaryIO | BytesIO | BufferedRandom):
|
|
263
264
|
self._resourceHandle = self.uri
|
|
265
|
+
elif self.fullRead:
|
|
266
|
+
local = self._exitStack.enter_context(self.uri.as_local())
|
|
267
|
+
self._resourceHandle = self._exitStack.enter_context(local.open("rb"))
|
|
264
268
|
else:
|
|
265
269
|
self._resourceHandle = self._exitStack.enter_context(self.uri.open("rb"))
|
|
266
270
|
self._initialize()
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/graph.py
RENAMED
|
@@ -963,7 +963,7 @@ class QuantumGraph:
|
|
|
963
963
|
"""
|
|
964
964
|
uri = ResourcePath(uri)
|
|
965
965
|
if uri.getExtension() in {".qgraph"}:
|
|
966
|
-
with LoadHelper(uri, minimumVersion) as loader:
|
|
966
|
+
with LoadHelper(uri, minimumVersion, fullRead=(nodes is None)) as loader:
|
|
967
967
|
qgraph = loader.load(universe, nodes, graphID)
|
|
968
968
|
else:
|
|
969
969
|
raise ValueError(f"Only know how to handle files saved as `.qgraph`, not {uri}")
|
|
@@ -1230,7 +1230,7 @@ class QuantumGraph:
|
|
|
1230
1230
|
being loaded or if the supplied uri does not point at a valid
|
|
1231
1231
|
`QuantumGraph` save file.
|
|
1232
1232
|
"""
|
|
1233
|
-
with LoadHelper(file, minimumVersion) as loader:
|
|
1233
|
+
with LoadHelper(file, minimumVersion, fullRead=(nodes is None)) as loader:
|
|
1234
1234
|
qgraph = loader.load(universe, nodes, graphID)
|
|
1235
1235
|
if not isinstance(qgraph, QuantumGraph):
|
|
1236
1236
|
raise TypeError(f"QuantumGraph file contains unexpected object type: {type(qgraph)}")
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipeline.py
RENAMED
|
@@ -427,7 +427,7 @@ class Pipeline:
|
|
|
427
427
|
if "," in label_subset:
|
|
428
428
|
if ".." in label_subset:
|
|
429
429
|
raise ValueError(
|
|
430
|
-
"Can only specify a list of labels or a
|
|
430
|
+
"Can only specify a list of labels or a range when loading a Pipeline, not both."
|
|
431
431
|
)
|
|
432
432
|
args = {"labels": set(label_subset.split(","))}
|
|
433
433
|
# labels supplied as a range
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/pipelineIR.py
RENAMED
|
@@ -980,10 +980,19 @@ class PipelineIR:
|
|
|
980
980
|
if extraTaskLabels := (labeled_subset.subset - pipeline.tasks.keys()):
|
|
981
981
|
match subsetCtrl:
|
|
982
982
|
case PipelineSubsetCtrl.DROP:
|
|
983
|
-
pipeline.labeled_subsets
|
|
983
|
+
del pipeline.labeled_subsets[label]
|
|
984
984
|
case PipelineSubsetCtrl.EDIT:
|
|
985
985
|
for extra in extraTaskLabels:
|
|
986
986
|
labeled_subset.subset.discard(extra)
|
|
987
|
+
elif subsetCtrl is PipelineSubsetCtrl.DROP and not labeled_subset.subset:
|
|
988
|
+
# When mode is DROP, also drop any subsets that were already
|
|
989
|
+
# empty. This ensures we drop steps that were emptied-out by
|
|
990
|
+
# (earlier) imports with exclude in EDIT mode. Note that we
|
|
991
|
+
# don't want to drop those steps when they're first excluded
|
|
992
|
+
# down to nothing, because the pipeline might be about to add
|
|
993
|
+
# new tasks back into them, and then we'd want to preserve the
|
|
994
|
+
# step definitions.
|
|
995
|
+
del pipeline.labeled_subsets[label]
|
|
987
996
|
|
|
988
997
|
# remove any steps that correspond to removed subsets
|
|
989
998
|
new_steps = []
|
|
@@ -32,8 +32,8 @@ import html
|
|
|
32
32
|
import os
|
|
33
33
|
import sys
|
|
34
34
|
from collections.abc import Mapping
|
|
35
|
-
from io import
|
|
36
|
-
from typing import
|
|
35
|
+
from io import StringIO
|
|
36
|
+
from typing import IO, Any
|
|
37
37
|
|
|
38
38
|
from .._nodes import NodeType
|
|
39
39
|
from .._pipeline_graph import PipelineGraph
|
|
@@ -58,7 +58,7 @@ _OVERFLOW_MAX_LINES = 20
|
|
|
58
58
|
|
|
59
59
|
def show_mermaid(
|
|
60
60
|
pipeline_graph: PipelineGraph,
|
|
61
|
-
stream:
|
|
61
|
+
stream: IO[Any] = sys.stdout,
|
|
62
62
|
output_format: str = "mmd",
|
|
63
63
|
width: int | None = None,
|
|
64
64
|
height: int | None = None,
|
|
@@ -78,7 +78,7 @@ def show_mermaid(
|
|
|
78
78
|
----------
|
|
79
79
|
pipeline_graph : `PipelineGraph`
|
|
80
80
|
The pipeline graph to visualize.
|
|
81
|
-
stream : `
|
|
81
|
+
stream : `typing.IO`, optional
|
|
82
82
|
The output stream where Mermaid code is written. Defaults to
|
|
83
83
|
`sys.stdout`.
|
|
84
84
|
output_format : str, optional
|
|
@@ -113,19 +113,11 @@ def show_mermaid(
|
|
|
113
113
|
mermaid_source = _generate_mermaid_source(pipeline_graph, **kwargs)
|
|
114
114
|
|
|
115
115
|
if output_format == "mmd":
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
stream.write(mermaid_source)
|
|
119
|
-
else:
|
|
120
|
-
raise TypeError(f"Expected a text stream, but got {type(stream)}.")
|
|
116
|
+
# Write Mermaid source as a string.
|
|
117
|
+
stream.write(mermaid_source)
|
|
121
118
|
else:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
_render_mermaid_image(
|
|
125
|
-
mermaid_source, stream, output_format, width=width, height=height, scale=scale
|
|
126
|
-
)
|
|
127
|
-
else:
|
|
128
|
-
raise ValueError(f"Expected a binary stream, but got {type(stream)}.")
|
|
119
|
+
# Render Mermaid source as an image and write to binary stream.
|
|
120
|
+
_render_mermaid_image(mermaid_source, stream, output_format, width=width, height=height, scale=scale)
|
|
129
121
|
|
|
130
122
|
|
|
131
123
|
def _generate_mermaid_source(pipeline_graph: PipelineGraph, **kwargs: Any) -> str:
|
|
@@ -210,7 +202,7 @@ def _generate_mermaid_source(pipeline_graph: PipelineGraph, **kwargs: Any) -> st
|
|
|
210
202
|
|
|
211
203
|
def _render_mermaid_image(
|
|
212
204
|
mermaid_source: str,
|
|
213
|
-
binary_stream:
|
|
205
|
+
binary_stream: IO[bytes],
|
|
214
206
|
output_format: str,
|
|
215
207
|
width: int | None = None,
|
|
216
208
|
height: int | None = None,
|
|
@@ -287,7 +279,7 @@ def _render_task_node(
|
|
|
287
279
|
node_key: NodeKey,
|
|
288
280
|
node_data: Mapping[str, Any],
|
|
289
281
|
options: NodeAttributeOptions,
|
|
290
|
-
stream:
|
|
282
|
+
stream: IO[str],
|
|
291
283
|
) -> None:
|
|
292
284
|
"""Render a Mermaid node for a task or task-init node.
|
|
293
285
|
|
|
@@ -301,7 +293,7 @@ def _render_task_node(
|
|
|
301
293
|
options : NodeAttributeOptions
|
|
302
294
|
Rendering options controlling whether to show dimensions, storage
|
|
303
295
|
classes, etc.
|
|
304
|
-
stream :
|
|
296
|
+
stream : `typing.IO` [ `str` ]
|
|
305
297
|
The output stream for Mermaid syntax.
|
|
306
298
|
"""
|
|
307
299
|
# Convert node_key into a label, handling line splitting and prefix
|
|
@@ -337,7 +329,7 @@ def _render_dataset_type_node(
|
|
|
337
329
|
node_key: NodeKey,
|
|
338
330
|
node_data: Mapping[str, Any],
|
|
339
331
|
options: NodeAttributeOptions,
|
|
340
|
-
stream:
|
|
332
|
+
stream: IO[str],
|
|
341
333
|
overflow_ref: int,
|
|
342
334
|
) -> tuple[int, list[str]]:
|
|
343
335
|
"""Render a Mermaid node for a dataset-type node, handling overflow lines
|
|
@@ -355,7 +347,7 @@ def _render_dataset_type_node(
|
|
|
355
347
|
options : NodeAttributeOptions
|
|
356
348
|
Rendering options controlling whether to show dimensions and storage
|
|
357
349
|
classes.
|
|
358
|
-
stream :
|
|
350
|
+
stream : `typing.IO` [ `str` ]
|
|
359
351
|
The output stream for Mermaid syntax.
|
|
360
352
|
overflow_ref : int
|
|
361
353
|
The current reference number for overflow nodes. If overflow occurs,
|
|
@@ -414,7 +406,7 @@ def _render_dataset_type_node(
|
|
|
414
406
|
return overflow_ref, overflow_ids
|
|
415
407
|
|
|
416
408
|
|
|
417
|
-
def _render_simple_node(node_id: str, lines: list[str], node_class: str, stream:
|
|
409
|
+
def _render_simple_node(node_id: str, lines: list[str], node_class: str, stream: IO[str]) -> None:
|
|
418
410
|
"""Render a simple Mermaid node with given lines and a class.
|
|
419
411
|
|
|
420
412
|
This helper function is used for both primary nodes and overflow nodes once
|
|
@@ -429,7 +421,7 @@ def _render_simple_node(node_id: str, lines: list[str], node_class: str, stream:
|
|
|
429
421
|
node_class : str
|
|
430
422
|
Mermaid class name to style the node (e.g., 'dsType', 'task',
|
|
431
423
|
'taskInit').
|
|
432
|
-
stream :
|
|
424
|
+
stream : `typing.IO` [ `str` ]
|
|
433
425
|
The output stream.
|
|
434
426
|
"""
|
|
435
427
|
label = "<br>".join(lines)
|
|
@@ -437,7 +429,7 @@ def _render_simple_node(node_id: str, lines: list[str], node_class: str, stream:
|
|
|
437
429
|
print(f"class {node_id} {node_class};", file=stream)
|
|
438
430
|
|
|
439
431
|
|
|
440
|
-
def _render_edge(from_node_id: str, to_node_id: str, is_prerequisite: bool, stream:
|
|
432
|
+
def _render_edge(from_node_id: str, to_node_id: str, is_prerequisite: bool, stream: IO[str]) -> None:
|
|
441
433
|
"""Render a Mermaid edge from one node to another.
|
|
442
434
|
|
|
443
435
|
Edges in Mermaid are normally specified as `A --> B`. Prerequisite edges
|
|
@@ -453,7 +445,7 @@ def _render_edge(from_node_id: str, to_node_id: str, is_prerequisite: bool, stre
|
|
|
453
445
|
is_prerequisite : bool
|
|
454
446
|
If True, this edge represents a prerequisite connection and will be
|
|
455
447
|
styled as dashed.
|
|
456
|
-
stream :
|
|
448
|
+
stream : `typing.IO` [ `str` ]
|
|
457
449
|
The output stream for Mermaid syntax.
|
|
458
450
|
"""
|
|
459
451
|
# At this stage, we simply print the edge. The styling (dashed) for
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600/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.1600
|
|
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
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
"""Simple unit test for Pipeline."""
|
|
29
29
|
|
|
30
|
+
import os
|
|
30
31
|
import pickle
|
|
31
32
|
import textwrap
|
|
32
33
|
import unittest
|
|
@@ -36,6 +37,9 @@ from lsst.pipe.base import LabelSpecifier, Pipeline, TaskDef
|
|
|
36
37
|
from lsst.pipe.base.pipelineIR import LabeledSubset
|
|
37
38
|
from lsst.pipe.base.tests.simpleQGraph import AddTask, makeSimplePipeline
|
|
38
39
|
|
|
40
|
+
# Find where the test pipelines exist and store it in an environment variable.
|
|
41
|
+
os.environ["TESTDIR"] = os.path.dirname(__file__)
|
|
42
|
+
|
|
39
43
|
|
|
40
44
|
class PipelineTestCase(unittest.TestCase):
|
|
41
45
|
"""A test case for TaskDef and Pipeline."""
|
|
@@ -201,6 +205,24 @@ class PipelineTestCase(unittest.TestCase):
|
|
|
201
205
|
pipeline_graph = pipeline.to_graph()
|
|
202
206
|
self.assertEqual(list(pipeline_graph.steps), ["step1"])
|
|
203
207
|
|
|
208
|
+
def test_excluded_steps(self) -> None:
|
|
209
|
+
"""Test that a step that is modified on import to contain no tasks is
|
|
210
|
+
initially preserved, but dropped later in further subsetting with
|
|
211
|
+
mode=DROP (e.g. with URI parameters).
|
|
212
|
+
"""
|
|
213
|
+
# This pipeline has two steps, but the second empty due to an import
|
|
214
|
+
# exclusion of the only task in it.
|
|
215
|
+
pg1 = Pipeline.from_uri("$TESTDIR/pipelines/step-exclusion.yaml").to_graph()
|
|
216
|
+
self.assertEqual(list(pg1.steps), ["step1", "step2"])
|
|
217
|
+
self.assertEqual(pg1.task_subsets["step1"], {"a", "b"})
|
|
218
|
+
self.assertEqual(pg1.task_subsets["step2"], set())
|
|
219
|
+
# If we load just one task from the pipeline (which subsets in DROP
|
|
220
|
+
# mode), we want the already-empty step to be dropped as well, since
|
|
221
|
+
# otherwise we'll get a complaint that there are steps and task 'a' is
|
|
222
|
+
# not in any of them.
|
|
223
|
+
pg2 = Pipeline.from_uri("$TESTDIR/pipelines/step-exclusion.yaml#a").to_graph()
|
|
224
|
+
self.assertEqual(list(pg2.steps), [])
|
|
225
|
+
|
|
204
226
|
|
|
205
227
|
class MyMemoryTestCase(lsst.utils.tests.MemoryTestCase):
|
|
206
228
|
"""Run file leak tests."""
|
|
@@ -129,8 +129,8 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
129
129
|
"""
|
|
130
130
|
description: Test Pipeline
|
|
131
131
|
imports:
|
|
132
|
-
- $TESTDIR/testPipeline1.yaml
|
|
133
|
-
- $TESTDIR/testPipeline2.yaml
|
|
132
|
+
- $TESTDIR/pipelines/testPipeline1.yaml
|
|
133
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
134
134
|
"""
|
|
135
135
|
)
|
|
136
136
|
# "modA" is the duplicated label, and it should appear in the error.
|
|
@@ -142,9 +142,9 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
142
142
|
"""
|
|
143
143
|
description: Test Pipeline
|
|
144
144
|
imports:
|
|
145
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
145
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
146
146
|
exclude: modA
|
|
147
|
-
- $TESTDIR/testPipeline2.yaml
|
|
147
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
148
148
|
"""
|
|
149
149
|
)
|
|
150
150
|
pipeline = PipelineIR.from_string(pipeline_str)
|
|
@@ -155,10 +155,10 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
155
155
|
"""
|
|
156
156
|
description: Test Pipeline
|
|
157
157
|
imports:
|
|
158
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
158
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
159
159
|
include: modB
|
|
160
160
|
labeledSubsetModifyMode: DROP
|
|
161
|
-
- $TESTDIR/testPipeline2.yaml
|
|
161
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
162
162
|
"""
|
|
163
163
|
)
|
|
164
164
|
|
|
@@ -170,11 +170,11 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
170
170
|
"""
|
|
171
171
|
description: Test Pipeline
|
|
172
172
|
imports:
|
|
173
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
173
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
174
174
|
exclude: modA
|
|
175
175
|
include: modB
|
|
176
176
|
labeledSubsetModifyMode: EDIT
|
|
177
|
-
- $TESTDIR/testPipeline2.yaml
|
|
177
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
178
178
|
"""
|
|
179
179
|
)
|
|
180
180
|
|
|
@@ -186,11 +186,11 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
186
186
|
"""
|
|
187
187
|
description: Test Pipeline
|
|
188
188
|
imports:
|
|
189
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
189
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
190
190
|
exclude: modA
|
|
191
191
|
include: modB
|
|
192
192
|
labeledSubsetModifyMode: WRONG
|
|
193
|
-
- $TESTDIR/testPipeline2.yaml
|
|
193
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
194
194
|
"""
|
|
195
195
|
)
|
|
196
196
|
with self.assertRaises(ValueError):
|
|
@@ -201,7 +201,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
201
201
|
"""
|
|
202
202
|
description: Test Pipeline
|
|
203
203
|
imports:
|
|
204
|
-
- $TESTDIR/testPipeline1.yaml
|
|
204
|
+
- $TESTDIR/pipelines/testPipeline1.yaml
|
|
205
205
|
"""
|
|
206
206
|
)
|
|
207
207
|
|
|
@@ -213,7 +213,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
213
213
|
"""
|
|
214
214
|
description: Test Pipeline
|
|
215
215
|
imports:
|
|
216
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
216
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
217
217
|
importContracts: False
|
|
218
218
|
"""
|
|
219
219
|
)
|
|
@@ -227,7 +227,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
227
227
|
"""
|
|
228
228
|
description: Test Pipeline
|
|
229
229
|
imports:
|
|
230
|
-
- $TESTDIR/testPipeline2.yaml
|
|
230
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
231
231
|
tasks:
|
|
232
232
|
modA:
|
|
233
233
|
class: "test.moduleA"
|
|
@@ -244,7 +244,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
244
244
|
"""
|
|
245
245
|
description: Test Pipeline
|
|
246
246
|
imports:
|
|
247
|
-
- $TESTDIR/testPipeline2.yaml
|
|
247
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
248
248
|
tasks:
|
|
249
249
|
modA:
|
|
250
250
|
class: "test.moduleAReplace"
|
|
@@ -260,7 +260,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
260
260
|
"""
|
|
261
261
|
description: Test Pipeline
|
|
262
262
|
imports:
|
|
263
|
-
- $TESTDIR/testPipeline2.yaml
|
|
263
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
264
264
|
"""
|
|
265
265
|
)
|
|
266
266
|
pipeline = PipelineIR.from_string(pipeline_str)
|
|
@@ -272,7 +272,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
272
272
|
"""
|
|
273
273
|
description: Test Pipeline
|
|
274
274
|
imports:
|
|
275
|
-
- $TESTDIR/testPipeline2.yaml
|
|
275
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
276
276
|
tasks:
|
|
277
277
|
modE: "test.moduleE"
|
|
278
278
|
subsets:
|
|
@@ -290,8 +290,8 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
290
290
|
"""
|
|
291
291
|
description: Test Pipeline
|
|
292
292
|
imports:
|
|
293
|
-
- $TESTDIR/testPipeline2.yaml
|
|
294
|
-
- $TESTDIR/testPipeline3.yaml
|
|
293
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
294
|
+
- $TESTDIR/pipelines/testPipeline3.yaml
|
|
295
295
|
"""
|
|
296
296
|
)
|
|
297
297
|
with self.assertRaises(ValueError):
|
|
@@ -303,7 +303,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
303
303
|
"""
|
|
304
304
|
description: Test Pipeline
|
|
305
305
|
imports:
|
|
306
|
-
- $TESTDIR/testPipeline2.yaml
|
|
306
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
307
307
|
tasks:
|
|
308
308
|
modSubset: "test.moduleE"
|
|
309
309
|
"""
|
|
@@ -316,8 +316,8 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
316
316
|
"""
|
|
317
317
|
description: Test Pipeline
|
|
318
318
|
imports:
|
|
319
|
-
- $TESTDIR/testPipeline2.yaml
|
|
320
|
-
- $TESTDIR/testPipeline4.yaml
|
|
319
|
+
- $TESTDIR/pipelines/testPipeline2.yaml
|
|
320
|
+
- $TESTDIR/pipelines/testPipeline4.yaml
|
|
321
321
|
"""
|
|
322
322
|
)
|
|
323
323
|
with self.assertRaises(ValueError):
|
|
@@ -328,7 +328,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
328
328
|
"""
|
|
329
329
|
description: Test Pipeline
|
|
330
330
|
imports:
|
|
331
|
-
- $TESTDIR/testPipeline5.yaml
|
|
331
|
+
- $TESTDIR/pipelines/testPipeline5.yaml
|
|
332
332
|
steps:
|
|
333
333
|
- label: sub1
|
|
334
334
|
dimensions: ['a', 'e']
|
|
@@ -342,7 +342,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
342
342
|
"""
|
|
343
343
|
description: Test Pipeline
|
|
344
344
|
imports:
|
|
345
|
-
- location: $TESTDIR/testPipeline5.yaml
|
|
345
|
+
- location: $TESTDIR/pipelines/testPipeline5.yaml
|
|
346
346
|
importSteps: false
|
|
347
347
|
steps:
|
|
348
348
|
- label: sub1
|
|
@@ -356,7 +356,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
356
356
|
"""
|
|
357
357
|
description: Test Pipeline
|
|
358
358
|
imports:
|
|
359
|
-
- location: $TESTDIR/testPipeline5.yaml
|
|
359
|
+
- location: $TESTDIR/pipelines/testPipeline5.yaml
|
|
360
360
|
"""
|
|
361
361
|
)
|
|
362
362
|
pipeline = PipelineIR.from_string(pipeline_str)
|
|
@@ -446,8 +446,8 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
446
446
|
"""
|
|
447
447
|
description: Test Pipeline
|
|
448
448
|
imports:
|
|
449
|
-
- $TESTDIR/testPipeline1.yaml
|
|
450
|
-
- location: $TESTDIR/testPipeline2.yaml
|
|
449
|
+
- $TESTDIR/pipelines/testPipeline1.yaml
|
|
450
|
+
- location: $TESTDIR/pipelines/testPipeline2.yaml
|
|
451
451
|
exclude:
|
|
452
452
|
- modA
|
|
453
453
|
|
|
@@ -468,7 +468,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
468
468
|
"""
|
|
469
469
|
description: Test Pipeline
|
|
470
470
|
imports:
|
|
471
|
-
- $TESTDIR/testPipeline1.yaml
|
|
471
|
+
- $TESTDIR/pipelines/testPipeline1.yaml
|
|
472
472
|
"""
|
|
473
473
|
)
|
|
474
474
|
pipeline = PipelineIR.from_string(pipeline_str)
|
|
@@ -479,7 +479,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
479
479
|
"""
|
|
480
480
|
description: Test Pipeline
|
|
481
481
|
imports:
|
|
482
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
482
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
483
483
|
instrument: None
|
|
484
484
|
"""
|
|
485
485
|
)
|
|
@@ -491,7 +491,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
491
491
|
"""
|
|
492
492
|
description: Test Pipeline
|
|
493
493
|
imports:
|
|
494
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
494
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
495
495
|
instrument: new.instrument
|
|
496
496
|
"""
|
|
497
497
|
)
|
|
@@ -505,7 +505,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
505
505
|
description: Test Pipeline
|
|
506
506
|
instrument: new.instrument
|
|
507
507
|
imports:
|
|
508
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
508
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
509
509
|
"""
|
|
510
510
|
)
|
|
511
511
|
with self.assertRaisesRegex(ValueError, "new.instrument .* test.instrument."):
|
|
@@ -531,7 +531,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
531
531
|
|
|
532
532
|
def testReadContracts(self):
|
|
533
533
|
# Verify that contracts are read in from a pipeline
|
|
534
|
-
location = "$TESTDIR/testPipeline1.yaml"
|
|
534
|
+
location = "$TESTDIR/pipelines/testPipeline1.yaml"
|
|
535
535
|
pipeline = PipelineIR.from_uri(location)
|
|
536
536
|
self.assertEqual(pipeline.contracts[0].contract, "modA.b == modA.c")
|
|
537
537
|
|
|
@@ -739,7 +739,7 @@ class PipelineIRTestCase(unittest.TestCase):
|
|
|
739
739
|
description: Test Pipeline
|
|
740
740
|
instrument: dummyCam
|
|
741
741
|
imports:
|
|
742
|
-
- location: $TESTDIR/testPipeline1.yaml
|
|
742
|
+
- location: $TESTDIR/pipelines/testPipeline1.yaml
|
|
743
743
|
instrument: None
|
|
744
744
|
tasks:
|
|
745
745
|
modC:
|
|
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.1500 → lsst_pipe_base-29.2025.1600}/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.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_dataset_handle.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_instrument.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_quantumContext.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_status.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/_task_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/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.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/cli/opt/options.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/configOverrides.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/connectionTypes.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/connections.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/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.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/graph/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/mermaid_tools.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/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.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/script/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/taskFactory.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/python/lsst/pipe/base/testUtils.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/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.1500 → lsst_pipe_base-29.2025.1600}/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.1500 → lsst_pipe_base-29.2025.1600}/python/lsst_pipe_base.egg-info/zip-safe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_caching_limited_butler.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/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.1500 → lsst_pipe_base-29.2025.1600}/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
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipelineLoadSubset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_pipeline_graph_expressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/tests/test_quantum_provenance_graph.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.1500 → lsst_pipe_base-29.2025.1600}/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
|