lsst-pipe-base 29.2025.2300__tar.gz → 29.2025.2400__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.2300/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.2400}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/script/transfer_from_graph.py +29 -10
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/script/utils.py +33 -4
- lsst_pipe_base-29.2025.2400/python/lsst/pipe/base/version.py +2 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400/python/lsst_pipe_base.egg-info}/PKG-INFO +1 -1
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst_pipe_base.egg-info/SOURCES.txt +1 -0
- lsst_pipe_base-29.2025.2400/tests/test_script_utils.py +62 -0
- lsst_pipe_base-29.2025.2300/python/lsst/pipe/base/version.py +0 -2
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/COPYRIGHT +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/LICENSE +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/MANIFEST.in +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/README.md +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/bsd_license.txt +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/CHANGES.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/creating-a-pipeline.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/index.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/gpl-v3.0.txt +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/pyproject.toml +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_quantumContext.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_status.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_task_metadata.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/cmd/commands.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/opt/options.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/config.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/connectionTypes.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/connections.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/executionButlerBuilder.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/formatters/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/graph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/mermaid_tools.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_edges.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/expressions.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/prerequisite_helpers.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/py.typed +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/quantum_graph_skeleton.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/script/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/script/register_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/struct.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/task.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/taskFactory.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/testUtils.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/mocks/_storage_class.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/tests/util.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/utils.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/setup.cfg +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_adjust_all_quanta.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_caching_limited_butler.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_cliCmdRegisterInstrument.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_configOverrides.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_config_formatter.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_connections.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_dataid_match.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_dataset_handle.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_dot_tools.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_dynamic_connections.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_executionButler.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_execution_reports.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_graphBuilder.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_init_output_run.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_instrument.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_mermaid.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipeline.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipelineIR.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipelineLoadSubset.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipelineTask.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipeline_graph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipeline_graph_expressions.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_quantumGraph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_quantum_provenance_graph.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_quantum_success_caveats.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_struct.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_task.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_taskmetadata.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_testUtils.py +0 -0
- {lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_utils.py +0 -0
{lsst_pipe_base-29.2025.2300/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.2400}/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.2400
|
|
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,11 +27,17 @@
|
|
|
27
27
|
|
|
28
28
|
__all__ = ["transfer_from_graph"]
|
|
29
29
|
|
|
30
|
+
import math
|
|
31
|
+
|
|
30
32
|
from lsst.daf.butler import Butler, CollectionType, QuantumBackedButler, Registry
|
|
31
33
|
from lsst.daf.butler.registry import MissingCollectionError
|
|
32
34
|
from lsst.pipe.base import QuantumGraph
|
|
35
|
+
from lsst.utils.iteration import chunk_iterable
|
|
36
|
+
from lsst.utils.logging import getLogger
|
|
37
|
+
|
|
38
|
+
from .utils import filter_by_dataset_type_glob, filter_by_existence
|
|
33
39
|
|
|
34
|
-
|
|
40
|
+
_LOG = getLogger(__name__)
|
|
35
41
|
|
|
36
42
|
|
|
37
43
|
def transfer_from_graph(
|
|
@@ -92,18 +98,31 @@ def transfer_from_graph(
|
|
|
92
98
|
|
|
93
99
|
# Filter the refs based on requested dataset types.
|
|
94
100
|
filtered_refs = filter_by_dataset_type_glob(output_refs, dataset_type)
|
|
101
|
+
_LOG.verbose("After filtering by dataset_type, number of datasets to transfer: %d", len(filtered_refs))
|
|
95
102
|
|
|
96
103
|
dest_butler = Butler.from_config(dest, writeable=True)
|
|
97
104
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
# For faster restarts, filter out those the destination already knows.
|
|
106
|
+
filtered_refs = filter_by_existence(dest_butler, filtered_refs)
|
|
107
|
+
|
|
108
|
+
# Transfer in chunks
|
|
109
|
+
chunk_size = 50_000
|
|
110
|
+
n_chunks = math.ceil(len(filtered_refs) / chunk_size)
|
|
111
|
+
chunk_num = 0
|
|
112
|
+
count = 0
|
|
113
|
+
for chunk in chunk_iterable(filtered_refs, chunk_size=chunk_size):
|
|
114
|
+
chunk_num += 1
|
|
115
|
+
if n_chunks > 1:
|
|
116
|
+
_LOG.verbose("Transferring %d datasets in chunk %d/%d", len(chunk), chunk_num, n_chunks)
|
|
117
|
+
transferred = dest_butler.transfer_from(
|
|
118
|
+
qbb,
|
|
119
|
+
chunk,
|
|
120
|
+
transfer="auto",
|
|
121
|
+
register_dataset_types=register_dataset_types,
|
|
122
|
+
transfer_dimensions=transfer_dimensions,
|
|
123
|
+
dry_run=dry_run,
|
|
124
|
+
)
|
|
125
|
+
count += len(transferred)
|
|
107
126
|
|
|
108
127
|
# If anything was transferred then update output chain definition if asked.
|
|
109
128
|
if count > 0 and update_output_chain and (metadata := qgraph.metadata) is not None:
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/script/utils.py
RENAMED
|
@@ -27,15 +27,17 @@
|
|
|
27
27
|
|
|
28
28
|
from __future__ import annotations
|
|
29
29
|
|
|
30
|
-
__all__ = [
|
|
31
|
-
"filter_by_dataset_type_glob",
|
|
32
|
-
]
|
|
30
|
+
__all__ = ["filter_by_dataset_type_glob", "filter_by_existence"]
|
|
33
31
|
|
|
34
32
|
import re
|
|
35
33
|
from collections.abc import Collection
|
|
36
34
|
|
|
37
|
-
from lsst.daf.butler import DatasetRef
|
|
35
|
+
from lsst.daf.butler import Butler, DatasetRef
|
|
38
36
|
from lsst.daf.butler.utils import globToRegex
|
|
37
|
+
from lsst.utils.logging import getLogger
|
|
38
|
+
from lsst.utils.timer import time_this
|
|
39
|
+
|
|
40
|
+
_LOG = getLogger(__name__)
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
def _matches_dataset_type(dataset_type_name: str, regexes: list[str | re.Pattern]) -> bool:
|
|
@@ -72,3 +74,30 @@ def filter_by_dataset_type_glob(
|
|
|
72
74
|
return refs
|
|
73
75
|
|
|
74
76
|
return {ref for ref in refs if _matches_dataset_type(ref.datasetType.name, regexes)}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def filter_by_existence(butler: Butler, refs: Collection[DatasetRef]) -> Collection[DatasetRef]:
|
|
80
|
+
"""Filter out the refs that the butler already knows exist.
|
|
81
|
+
|
|
82
|
+
Parameters
|
|
83
|
+
----------
|
|
84
|
+
butler : `lsst.daf.butler.Butler`
|
|
85
|
+
Butler in which to check existence of given datarefs.
|
|
86
|
+
refs : `collections.abc.Collection` [ `lsst.daf.butler.DatasetRef` ]
|
|
87
|
+
Datasets to be filtered.
|
|
88
|
+
|
|
89
|
+
Returns
|
|
90
|
+
-------
|
|
91
|
+
filtered : `collections.abc.Collection` [ `lsst.daf.butler.DatasetRef` ]
|
|
92
|
+
Filter datasets.
|
|
93
|
+
"""
|
|
94
|
+
_LOG.verbose("Filtering out datasets already known to the target butler...")
|
|
95
|
+
with time_this(log=_LOG, msg="Completed checking existence"):
|
|
96
|
+
existence = butler._datastore.knows_these(refs)
|
|
97
|
+
filtered = [ref for ref in existence if not existence[ref]]
|
|
98
|
+
_LOG.verbose(
|
|
99
|
+
"After filtering out those already in the target butler, number of datasets to transfer: %d",
|
|
100
|
+
len(filtered),
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
return filtered
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400/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.2400
|
|
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
|
|
@@ -136,6 +136,7 @@ tests/test_pipeline_graph_expressions.py
|
|
|
136
136
|
tests/test_quantumGraph.py
|
|
137
137
|
tests/test_quantum_provenance_graph.py
|
|
138
138
|
tests/test_quantum_success_caveats.py
|
|
139
|
+
tests/test_script_utils.py
|
|
139
140
|
tests/test_struct.py
|
|
140
141
|
tests/test_task.py
|
|
141
142
|
tests/test_taskmetadata.py
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
# (https://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 <https://www.gnu.org/licenses/>.
|
|
27
|
+
|
|
28
|
+
"""Tests for scripts/utils.py functions."""
|
|
29
|
+
|
|
30
|
+
import logging
|
|
31
|
+
import unittest
|
|
32
|
+
|
|
33
|
+
from lsst.pipe.base.script.utils import filter_by_existence
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class FilterByExistenceTestCase(unittest.TestCase):
|
|
37
|
+
"""Test filter_by_existence function."""
|
|
38
|
+
|
|
39
|
+
def setUp(self):
|
|
40
|
+
# Currently function itself does not need real DatasetRefs.
|
|
41
|
+
# Only the butler calls requires DatasetRefs, but butler
|
|
42
|
+
# is being mocked in these tests. So using strings in place
|
|
43
|
+
# of DatasetRefs.
|
|
44
|
+
self.orig_refs = [f"{i:05}" for i in range(1, 11)]
|
|
45
|
+
self.mock_exists = {}
|
|
46
|
+
for i in range(1, 11):
|
|
47
|
+
self.mock_exists[f"{i:05}"] = True if i % 3 == 0 else False
|
|
48
|
+
self.filtered_refs = [f"{i:05}" for i in range(1, 11) if i % 3 != 0]
|
|
49
|
+
|
|
50
|
+
def test_success(self):
|
|
51
|
+
butler_mock = unittest.mock.Mock()
|
|
52
|
+
butler_mock._datastore.knows_these.return_value = self.mock_exists
|
|
53
|
+
with self.assertLogs(logging.getLogger("lsst.pipe.base"), level="VERBOSE") as cm:
|
|
54
|
+
filtered = filter_by_existence(butler_mock, self.orig_refs)
|
|
55
|
+
self.assertCountEqual(self.filtered_refs, filtered)
|
|
56
|
+
log_messages = " ".join(cm.output)
|
|
57
|
+
self.assertIn("Filtering out datasets already known to the target butler", log_messages)
|
|
58
|
+
self.assertIn("number of datasets to transfer", log_messages)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
if __name__ == "__main__":
|
|
62
|
+
unittest.main()
|
|
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.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_dataset_handle.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_instrument.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_quantumContext.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/_status.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/cli/opt/options.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/configOverrides.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/connectionTypes.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/connections.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/graph/graph.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/mermaid_tools.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipeline.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/pipelineIR.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/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
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/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
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/taskFactory.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/python/lsst/pipe/base/testUtils.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/python/lsst_pipe_base.egg-info/zip-safe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_caching_limited_butler.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/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.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipelineLoadSubset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_pipeline_graph_expressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/tests/test_quantum_provenance_graph.py
RENAMED
|
File without changes
|
{lsst_pipe_base-29.2025.2300 → lsst_pipe_base-29.2025.2400}/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
|