lsst-pipe-base 29.2025.4300__tar.gz → 29.2025.4500__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.
Files changed (183) hide show
  1. {lsst_pipe_base-29.2025.4300/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.4500}/PKG-INFO +3 -3
  2. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/creating-a-pipeline.rst +17 -7
  3. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/pyproject.toml +3 -3
  4. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipelineIR.py +36 -3
  5. lsst_pipe_base-29.2025.4500/python/lsst/pipe/base/version.py +2 -0
  6. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500/python/lsst_pipe_base.egg-info}/PKG-INFO +3 -3
  7. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_pipelineIR.py +107 -1
  8. lsst_pipe_base-29.2025.4300/python/lsst/pipe/base/version.py +0 -2
  9. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/COPYRIGHT +0 -0
  10. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/LICENSE +0 -0
  11. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/MANIFEST.in +0 -0
  12. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/README.md +0 -0
  13. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/bsd_license.txt +0 -0
  14. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/CHANGES.rst +0 -0
  15. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
  16. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
  17. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/index.rst +0 -0
  18. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
  19. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
  20. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
  21. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
  22. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
  23. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/gpl-v3.0.txt +0 -0
  24. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/__init__.py +0 -0
  25. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/__init__.py +0 -0
  26. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/__init__.py +0 -0
  27. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
  28. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/_dataset_handle.py +0 -0
  29. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/_instrument.py +0 -0
  30. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
  31. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/_quantumContext.py +0 -0
  32. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/_status.py +0 -0
  33. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/_task_metadata.py +0 -0
  34. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +0 -0
  35. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
  36. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
  37. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/cli/__init__.py +0 -0
  38. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
  39. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
  40. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/cli/cmd/commands.py +0 -0
  41. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
  42. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
  43. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/cli/opt/options.py +0 -0
  44. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/config.py +0 -0
  45. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/configOverrides.py +0 -0
  46. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/connectionTypes.py +0 -0
  47. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/connections.py +0 -0
  48. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/dot_tools.py +0 -0
  49. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/exec_fixup_data_id.py +0 -0
  50. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/execution_graph_fixup.py +0 -0
  51. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/execution_reports.py +0 -0
  52. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/formatters/__init__.py +0 -0
  53. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
  54. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph/__init__.py +0 -0
  55. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
  56. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
  57. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
  58. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph/graph.py +0 -0
  59. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
  60. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
  61. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/graph_walker.py +0 -0
  62. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/log_capture.py +0 -0
  63. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/mermaid_tools.py +0 -0
  64. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/mp_graph_executor.py +0 -0
  65. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline.py +0 -0
  66. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipelineTask.py +0 -0
  67. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
  68. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
  69. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +0 -0
  70. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_edges.py +0 -0
  71. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
  72. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
  73. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
  74. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +0 -0
  75. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
  76. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
  77. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/expressions.py +0 -0
  78. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
  79. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
  80. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
  81. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
  82. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
  83. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
  84. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
  85. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
  86. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
  87. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
  88. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -0
  89. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/prerequisite_helpers.py +0 -0
  90. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/py.typed +0 -0
  91. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/__init__.py +0 -0
  92. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/_common.py +0 -0
  93. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/_multiblock.py +0 -0
  94. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/_predicted.py +0 -0
  95. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/_provenance.py +0 -0
  96. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/__init__.py +0 -0
  97. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_communicators.py +0 -0
  98. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_config.py +0 -0
  99. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_ingester.py +0 -0
  100. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_progress.py +0 -0
  101. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_scanner.py +0 -0
  102. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_structs.py +0 -0
  103. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_supervisor.py +0 -0
  104. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/aggregator/_writer.py +0 -0
  105. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph/visualization.py +0 -0
  106. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
  107. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph_executor.py +0 -0
  108. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_graph_skeleton.py +0 -0
  109. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
  110. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/quantum_reports.py +0 -0
  111. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/resource_usage.py +0 -0
  112. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/script/__init__.py +0 -0
  113. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/script/register_instrument.py +0 -0
  114. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
  115. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/script/transfer_from_graph.py +0 -0
  116. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/script/utils.py +0 -0
  117. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
  118. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/separable_pipeline_executor.py +0 -0
  119. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/simple_pipeline_executor.py +0 -0
  120. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/single_quantum_executor.py +0 -0
  121. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/struct.py +0 -0
  122. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/task.py +0 -0
  123. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/taskFactory.py +0 -0
  124. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/testUtils.py +0 -0
  125. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/__init__.py +0 -0
  126. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/in_memory_limited_butler.py +0 -0
  127. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
  128. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
  129. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
  130. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/mocks/_repo.py +0 -0
  131. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/mocks/_storage_class.py +0 -0
  132. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
  133. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
  134. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
  135. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/tests/util.py +0 -0
  136. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst/pipe/base/utils.py +0 -0
  137. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst_pipe_base.egg-info/SOURCES.txt +0 -0
  138. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
  139. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
  140. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
  141. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
  142. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
  143. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/setup.cfg +0 -0
  144. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_adjust_all_quanta.py +0 -0
  145. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_aggregator.py +0 -0
  146. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_caching_limited_butler.py +0 -0
  147. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_cliCmdRegisterInstrument.py +0 -0
  148. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_configOverrides.py +0 -0
  149. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_config_formatter.py +0 -0
  150. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_connections.py +0 -0
  151. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_dataid_match.py +0 -0
  152. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_dataset_handle.py +0 -0
  153. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_dot_tools.py +0 -0
  154. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_dynamic_connections.py +0 -0
  155. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_execution_reports.py +0 -0
  156. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_execution_storage_class_conversion.py +0 -0
  157. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_graphBuilder.py +0 -0
  158. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_graph_walker.py +0 -0
  159. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_init_output_run.py +0 -0
  160. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_instrument.py +0 -0
  161. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_mermaid.py +0 -0
  162. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_mp_graph_executor.py +0 -0
  163. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_pipeline.py +0 -0
  164. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_pipelineLoadSubset.py +0 -0
  165. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_pipelineTask.py +0 -0
  166. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_pipeline_graph.py +0 -0
  167. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_pipeline_graph_expressions.py +0 -0
  168. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_predicted_qg.py +0 -0
  169. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_qg_builder_dimensions.py +0 -0
  170. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_quantumGraph.py +0 -0
  171. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_quantum_provenance_graph.py +0 -0
  172. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_quantum_reports.py +0 -0
  173. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_quantum_success_caveats.py +0 -0
  174. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_script_utils.py +0 -0
  175. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_separable_pipeline_executor.py +0 -0
  176. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_simple_pipeline_executor.py +0 -0
  177. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_single_quantum_executor.py +0 -0
  178. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_struct.py +0 -0
  179. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_task.py +0 -0
  180. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_task_factory.py +0 -0
  181. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_taskmetadata.py +0 -0
  182. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_testUtils.py +0 -0
  183. {lsst_pipe_base-29.2025.4300 → lsst_pipe_base-29.2025.4500}/tests/test_utils.py +0 -0
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 29.2025.4300
3
+ Version: 29.2025.4500
4
4
  Summary: Pipeline infrastructure for the Rubin Science Pipelines.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
- License: BSD 3-Clause License
6
+ License-Expression: BSD-3-Clause OR GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/lsst/pipe_base
8
8
  Keywords: lsst
9
9
  Classifier: Intended Audience :: Science/Research
10
- Classifier: License :: OSI Approved :: BSD License
11
10
  Classifier: Operating System :: OS Independent
12
11
  Classifier: Programming Language :: Python :: 3
13
12
  Classifier: Programming Language :: Python :: 3.11
14
13
  Classifier: Programming Language :: Python :: 3.12
15
14
  Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: Topic :: Scientific/Engineering :: Astronomy
17
17
  Requires-Python: >=3.11.0
18
18
  Description-Content-Type: text/markdown
@@ -387,13 +387,23 @@ paths in a platform agnostic way.
387
387
  Alternatively, the elements of the imports list may be yaml mapping. This
388
388
  mapping begins with a key named ``location`` who's value is the same as the
389
389
  path described above. The mapping can optionally contain the keys
390
- ``include``, ``exclude``, and ``importContracts``. The keys ``include`` and
391
- ``exclude`` can be used to specify which labels (or labeled subsets) to
392
- include or exclude, respectively, when inheriting a ``Pipeline``. The values
393
- associated with these keys are specified as a yaml list, and these two keys
394
- are mutually exclusive, only one can be specified at at time. The
395
- ``importContracts`` key is optional and is associated with a boolean value
396
- that controls wether ``contracts`` from the imported pipeline should be
390
+ ``include``, ``exclude``, ``rename``, and ``importContracts``. The keys
391
+ ``include`` and ``exclude`` can be used to specify which labels
392
+ (or labeled subsets) to include or exclude, respectively, when inheriting
393
+ a ``Pipeline``. The values associated with these keys are specified as
394
+ a yaml list, and these two keys are mutually exclusive: only one can be
395
+ specified at at time.
396
+
397
+ The ``rename`` key is a dictionary mapping existing labels to be renamed to
398
+ new labels. This is particularly useful for renaming tasks with dynamic
399
+ output connections, since changing the output dimensions can also change the
400
+ metadata (config/log) dataset dimensions, which must therefore be renamed to
401
+ avoid conflicting with the original label definitions. Otherwise, when using
402
+ this feature, remember to apply subsequent config overrides to the new label
403
+ rather than the old.
404
+
405
+ The ``importContracts`` key is optional and is associated with a boolean value
406
+ that controls whether ``contracts`` from the imported pipeline should be
397
407
  included when importing, with a default value of true.
398
408
 
399
409
  A few further notes about including and excluding. When specifying labels
@@ -6,19 +6,20 @@ build-backend = "setuptools.build_meta"
6
6
  name = "lsst-pipe-base"
7
7
  requires-python = ">=3.11.0"
8
8
  description = "Pipeline infrastructure for the Rubin Science Pipelines."
9
- license = {text = "BSD 3-Clause License"}
9
+ license = "BSD-3-Clause OR GPL-3.0-or-later"
10
+ license-files = ["COPYRIGHT", "LICENSE", "bsd_license.txt", "gpl-v3.0.txt"]
10
11
  readme = "README.md"
11
12
  authors = [
12
13
  {name="Rubin Observatory Data Management", email="dm-admin@lists.lsst.org"},
13
14
  ]
14
15
  classifiers = [
15
16
  "Intended Audience :: Science/Research",
16
- "License :: OSI Approved :: BSD License",
17
17
  "Operating System :: OS Independent",
18
18
  "Programming Language :: Python :: 3",
19
19
  "Programming Language :: Python :: 3.11",
20
20
  "Programming Language :: Python :: 3.12",
21
21
  "Programming Language :: Python :: 3.13",
22
+ "Programming Language :: Python :: 3.14",
22
23
  "Topic :: Scientific/Engineering :: Astronomy",
23
24
  ]
24
25
  keywords=["lsst"]
@@ -54,7 +55,6 @@ where = ["python"]
54
55
 
55
56
  [tool.setuptools]
56
57
  zip-safe = true
57
- license-files = ["COPYRIGHT", "LICENSE", "bsd_license.txt", "gpl-v3.0.txt"]
58
58
 
59
59
  [tool.setuptools.package-data]
60
60
  "lsst.pipe.base" = ["py.typed", "cli/resources.yaml"]
@@ -45,7 +45,7 @@ import warnings
45
45
  from collections import Counter
46
46
  from collections.abc import Generator, Hashable, Iterable, MutableMapping
47
47
  from dataclasses import dataclass, field
48
- from typing import Any, Literal
48
+ from typing import Any, Literal, cast
49
49
 
50
50
  import yaml
51
51
 
@@ -461,6 +461,8 @@ class ImportIR:
461
461
  """list of tasks that should be excluded when inheriting this pipeline.
462
462
  Either the include or exclude attributes may be specified, but not both.
463
463
  """
464
+ rename: dict[str, str] = field(default_factory=dict)
465
+ """dict of tasks to rename, keyed by old name with new name value."""
464
466
  importContracts: bool = True
465
467
  """Boolean attribute to dictate if contracts should be inherited with the
466
468
  pipeline or not.
@@ -497,18 +499,49 @@ class ImportIR:
497
499
  "An include list and an exclude list cannot both be specified"
498
500
  " when declaring a pipeline import."
499
501
  )
502
+ if rename_keys := self.rename.keys():
503
+ rename_values_set = set(self.rename.values())
504
+ if len(rename_values_set) != len(rename_keys):
505
+ raise ValueError(f"rename {rename_keys=} must not have duplicates")
506
+ if rename_values_set.intersection(rename_keys):
507
+ raise ValueError(
508
+ f"rename keys={rename_keys} must not intersect with values={self.rename.values()}"
509
+ )
510
+
500
511
  tmp_pipeline = PipelineIR.from_uri(os.path.expandvars(self.location))
501
512
  if self.instrument is not _Tags.KeepInstrument:
502
513
  tmp_pipeline.instrument = self.instrument
503
514
 
504
515
  included_labels = set()
516
+ renamed_tasks = {}
505
517
  for label in tmp_pipeline.tasks:
518
+ is_included = self.include and label in self.include
506
519
  if (
507
- (self.include and label in self.include)
520
+ is_included
508
521
  or (self.exclude and label not in self.exclude)
509
522
  or (self.include is None and self.exclude is None)
510
523
  ):
511
- included_labels.add(label)
524
+ if (label_new := self.rename.get(label)) is not None:
525
+ renamed_tasks[label] = label_new
526
+ if is_included:
527
+ self.include = [
528
+ label_new if (x == label) else label for x in cast(list[str], self.include)
529
+ ]
530
+ else:
531
+ label_new = label
532
+ included_labels.add(label_new)
533
+
534
+ rename_errors = []
535
+ for label, label_new in renamed_tasks.items():
536
+ if label_new in tmp_pipeline.tasks:
537
+ rename_errors.append(f"Can't rename {label=} to existing {label_new=}")
538
+ else:
539
+ task = tmp_pipeline.tasks.pop(label)
540
+ task.label = label_new
541
+ tmp_pipeline.tasks[label_new] = task
542
+
543
+ if rename_errors:
544
+ raise ValueError("; ".join(rename_errors))
512
545
 
513
546
  # Handle labeled subsets being specified in the include or exclude
514
547
  # list, adding or removing labels.
@@ -0,0 +1,2 @@
1
+ __all__ = ["__version__"]
2
+ __version__ = "29.2025.4500"
@@ -1,18 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 29.2025.4300
3
+ Version: 29.2025.4500
4
4
  Summary: Pipeline infrastructure for the Rubin Science Pipelines.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
- License: BSD 3-Clause License
6
+ License-Expression: BSD-3-Clause OR GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/lsst/pipe_base
8
8
  Keywords: lsst
9
9
  Classifier: Intended Audience :: Science/Research
10
- Classifier: License :: OSI Approved :: BSD License
11
10
  Classifier: Operating System :: OS Independent
12
11
  Classifier: Programming Language :: Python :: 3
13
12
  Classifier: Programming Language :: Python :: 3.11
14
13
  Classifier: Programming Language :: Python :: 3.12
15
14
  Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: Topic :: Scientific/Engineering :: Astronomy
17
17
  Requires-Python: >=3.11.0
18
18
  Description-Content-Type: text/markdown
@@ -165,7 +165,7 @@ class PipelineIRTestCase(unittest.TestCase):
165
165
  pipeline = PipelineIR.from_string(pipeline_str)
166
166
  self.assertEqual(set(pipeline.tasks.keys()), {"modA", "modB"})
167
167
 
168
- # Test that you cant include and exclude a task
168
+ # Test that you can't include and exclude a task
169
169
  pipeline_str = textwrap.dedent(
170
170
  """
171
171
  description: Test Pipeline
@@ -178,6 +178,112 @@ class PipelineIRTestCase(unittest.TestCase):
178
178
  """
179
179
  )
180
180
 
181
+ with self.assertRaises(ValueError):
182
+ PipelineIR.from_string(pipeline_str)
183
+
184
+ # Test that you can rename a task
185
+ pipeline_str = textwrap.dedent(
186
+ """
187
+ description: Test Pipeline
188
+ imports:
189
+ - location: $TESTDIR/pipelines/testPipeline1.yaml
190
+ rename:
191
+ modB: modZ
192
+ labeledSubsetModifyMode: EDIT
193
+ """
194
+ )
195
+
196
+ pipeline = PipelineIR.from_string(pipeline_str)
197
+ self.assertEqual(set(pipeline.tasks.keys()), {"modA", "modZ"})
198
+
199
+ # Test that renaming and including work together
200
+ pipeline_str = textwrap.dedent(
201
+ """
202
+ description: Test Pipeline
203
+ imports:
204
+ - location: $TESTDIR/pipelines/testPipeline1.yaml
205
+ include: modB
206
+ rename:
207
+ modB: modZ
208
+ labeledSubsetModifyMode: EDIT
209
+ """
210
+ )
211
+
212
+ pipeline = PipelineIR.from_string(pipeline_str)
213
+ self.assertEqual(
214
+ set(pipeline.tasks.keys()),
215
+ {
216
+ "modZ",
217
+ },
218
+ )
219
+
220
+ # Test that renaming an excluded label works, although perhaps it
221
+ # should emit a warning
222
+ pipeline_str = textwrap.dedent(
223
+ """
224
+ description: Test Pipeline
225
+ imports:
226
+ - location: $TESTDIR/pipelines/testPipeline1.yaml
227
+ exclude: modB
228
+ rename:
229
+ modB: modZ
230
+ labeledSubsetModifyMode: EDIT
231
+ """
232
+ )
233
+
234
+ pipeline = PipelineIR.from_string(pipeline_str)
235
+ self.assertEqual(
236
+ set(pipeline.tasks.keys()),
237
+ {
238
+ "modA",
239
+ },
240
+ )
241
+
242
+ # Test that you can't rename a task to an existing task
243
+ pipeline_str = textwrap.dedent(
244
+ """
245
+ description: Test Pipeline
246
+ imports:
247
+ - location: $TESTDIR/pipelines/testPipeline1.yaml
248
+ rename:
249
+ modB: modA
250
+ labeledSubsetModifyMode: EDIT
251
+ """
252
+ )
253
+
254
+ with self.assertRaises(ValueError):
255
+ PipelineIR.from_string(pipeline_str)
256
+
257
+ # Test that you can't rename two tasks to the same new name
258
+ pipeline_str = textwrap.dedent(
259
+ """
260
+ description: Test Pipeline
261
+ imports:
262
+ - location: $TESTDIR/pipelines/testPipeline1.yaml
263
+ rename:
264
+ modA: modC
265
+ modB: modC
266
+ labeledSubsetModifyMode: EDIT
267
+ """
268
+ )
269
+
270
+ with self.assertRaises(ValueError):
271
+ PipelineIR.from_string(pipeline_str)
272
+
273
+ # Test that you can't rename a task back to its old name
274
+ # This could work but is confusing and pointless
275
+ pipeline_str = textwrap.dedent(
276
+ """
277
+ description: Test Pipeline
278
+ imports:
279
+ - location: $TESTDIR/pipelines/testPipeline1.yaml
280
+ rename:
281
+ modB: modC
282
+ modC: modB
283
+ labeledSubsetModifyMode: EDIT
284
+ """
285
+ )
286
+
181
287
  with self.assertRaises(ValueError):
182
288
  PipelineIR.from_string(pipeline_str)
183
289
 
@@ -1,2 +0,0 @@
1
- __all__ = ["__version__"]
2
- __version__ = "29.2025.4300"