lsst-ctrl-mpexec 29.2025.3700__tar.gz → 29.2025.3900__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 (70) hide show
  1. {lsst_ctrl_mpexec-29.2025.3700/python/lsst_ctrl_mpexec.egg-info → lsst_ctrl_mpexec-29.2025.3900}/PKG-INFO +1 -1
  2. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/opt/options.py +2 -1
  3. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/showInfo.py +12 -2
  4. lsst_ctrl_mpexec-29.2025.3900/python/lsst/ctrl/mpexec/version.py +2 -0
  5. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900/python/lsst_ctrl_mpexec.egg-info}/PKG-INFO +1 -1
  6. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cmdLineFwk.py +25 -2
  7. lsst_ctrl_mpexec-29.2025.3700/python/lsst/ctrl/mpexec/version.py +0 -2
  8. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/COPYRIGHT +0 -0
  9. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/LICENSE +0 -0
  10. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/MANIFEST.in +0 -0
  11. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/README.rst +0 -0
  12. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/bsd_license.txt +0 -0
  13. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/doc/lsst.ctrl.mpexec/CHANGES.rst +0 -0
  14. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/doc/lsst.ctrl.mpexec/configuring-pipetask-tasks.rst +0 -0
  15. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/doc/lsst.ctrl.mpexec/index.rst +0 -0
  16. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/doc/lsst.ctrl.mpexec/pipetask.rst +0 -0
  17. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/gpl-v3.0.txt +0 -0
  18. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/pyproject.toml +0 -0
  19. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/__init__.py +0 -0
  20. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/__init__.py +0 -0
  21. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/__init__.py +0 -0
  22. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/_pipeline_graph_factory.py +0 -0
  23. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/__init__.py +0 -0
  24. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/butler_factory.py +0 -0
  25. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/cmd/__init__.py +0 -0
  26. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/cmd/commands.py +0 -0
  27. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/opt/__init__.py +0 -0
  28. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/opt/arguments.py +0 -0
  29. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/opt/optionGroups.py +0 -0
  30. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/pipetask.py +0 -0
  31. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/__init__.py +0 -0
  32. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/build.py +0 -0
  33. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/cleanup.py +0 -0
  34. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/confirmable.py +0 -0
  35. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/pre_exec_init_qbb.py +0 -0
  36. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/purge.py +0 -0
  37. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/qgraph.py +0 -0
  38. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/report.py +0 -0
  39. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/run.py +0 -0
  40. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/run_qbb.py +0 -0
  41. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/script/update_graph_run.py +0 -0
  42. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/cli/utils.py +0 -0
  43. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/execFixupDataId.py +0 -0
  44. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/executionGraphFixup.py +0 -0
  45. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/log_capture.py +0 -0
  46. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/mpGraphExecutor.py +0 -0
  47. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/preExecInit.py +0 -0
  48. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/py.typed +0 -0
  49. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/quantumGraphExecutor.py +0 -0
  50. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/reports.py +0 -0
  51. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/separablePipelineExecutor.py +0 -0
  52. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/simple_pipeline_executor.py +0 -0
  53. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/singleQuantumExecutor.py +0 -0
  54. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/taskFactory.py +0 -0
  55. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst/ctrl/mpexec/util.py +0 -0
  56. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst_ctrl_mpexec.egg-info/SOURCES.txt +0 -0
  57. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst_ctrl_mpexec.egg-info/dependency_links.txt +0 -0
  58. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst_ctrl_mpexec.egg-info/entry_points.txt +0 -0
  59. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst_ctrl_mpexec.egg-info/requires.txt +0 -0
  60. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst_ctrl_mpexec.egg-info/top_level.txt +0 -0
  61. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/python/lsst_ctrl_mpexec.egg-info/zip-safe +0 -0
  62. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/setup.cfg +0 -0
  63. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cliCmdCleanup.py +0 -0
  64. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cliCmdPurge.py +0 -0
  65. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cliCmdQgraph.py +0 -0
  66. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cliCmdReport.py +0 -0
  67. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cliCmdUpdateGraphRun.py +0 -0
  68. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cliScript.py +0 -0
  69. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_cliUtils.py +0 -0
  70. {lsst_ctrl_mpexec-29.2025.3700 → lsst_ctrl_mpexec-29.2025.3900}/tests/test_preExecInit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-ctrl-mpexec
3
- Version: 29.2025.3700
3
+ Version: 29.2025.3900
4
4
  Summary: Pipeline execution infrastructure for the Rubin Observatory LSST Science Pipelines.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License: BSD 3-Clause License
@@ -318,7 +318,8 @@ show_option = MWOptionDecorator(
318
318
  given its label or all tasks; ``pipeline`` to show pipeline
319
319
  composition; ``graph`` to show information about quanta;
320
320
  ``workflow`` to show information about quanta and their
321
- dependency; ``tasks`` to show task composition; ``uri`` to show
321
+ dependency; ``tasks`` to show task composition; ``subsets`` to
322
+ show subset labels and associated tasks; ``uri`` to show
322
323
  predicted dataset URIs of quanta; ``pipeline-graph`` for a
323
324
  text-based visualization of the pipeline (tasks and dataset types);
324
325
  ``task-graph`` for a text-based visualization of just the tasks.
@@ -111,6 +111,7 @@ class ShowInfo:
111
111
  "dump-config",
112
112
  "pipeline-graph",
113
113
  "task-graph",
114
+ "subsets",
114
115
  }
115
116
  graph_commands = {"graph", "workflow", "uri"}
116
117
 
@@ -131,7 +132,9 @@ class ShowInfo:
131
132
  known = self.pipeline_commands | self.graph_commands
132
133
  unknown = set(commands) - known
133
134
  if unknown:
134
- raise ValueError(f"Unknown value(s) for show: {unknown} (choose from '{', '.join(known)}')")
135
+ raise ValueError(
136
+ f"Unknown value(s) for show: {unknown} (choose from '{', '.join(sorted(known))}')"
137
+ )
135
138
 
136
139
  @property
137
140
  def unhandled(self) -> frozenset[str]:
@@ -151,7 +154,6 @@ class ShowInfo:
151
154
  if command not in self.commands:
152
155
  continue
153
156
  args = self.commands[command]
154
-
155
157
  match command:
156
158
  case "pipeline":
157
159
  print(pipeline_graph_factory.pipeline, file=self.stream)
@@ -166,6 +168,14 @@ class ShowInfo:
166
168
  self._showConfigHistory(pipeline_graph_factory(visualization_only=True), arg)
167
169
  case "tasks":
168
170
  self._showTaskHierarchy(pipeline_graph_factory(visualization_only=True))
171
+ case "subsets":
172
+ print(
173
+ "\n".join(
174
+ f"{subset}:\n" + "\n".join(f" - {s}" for s in sorted(tasks))
175
+ for subset, tasks in dict(pipeline_graph_factory.pipeline.subsets).items()
176
+ ),
177
+ file=self.stream,
178
+ )
169
179
  case "pipeline-graph":
170
180
  visualization.show(
171
181
  pipeline_graph_factory(visualization_only=True), self.stream, dataset_types=True
@@ -0,0 +1,2 @@
1
+ __all__ = ["__version__"]
2
+ __version__ = "29.2025.3900"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-ctrl-mpexec
3
- Version: 29.2025.3700
3
+ Version: 29.2025.3900
4
4
  Summary: Pipeline execution infrastructure for the Rubin Observatory LSST Science Pipelines.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License: BSD 3-Clause License
@@ -439,13 +439,22 @@ class CmdLineFwkTestCase(unittest.TestCase):
439
439
  actions = [_ACTION_ADD_TASK(f"{_TASK_CLASS}:task"), _ACTION_CONFIG("task:addend=100")]
440
440
  kwargs = _makeArgs(pipeline_actions=actions).__dict__
441
441
  pipeline_graph_factory = build(**kwargs)
442
+ pipeline_graph_factory.pipeline.addLabeledSubset("test_subset", "test description", {"task"})
442
443
 
443
444
  with self.assertRaises(ValueError):
444
445
  ShowInfo(["unrecognized", "config"])
445
446
 
446
447
  stream = StringIO()
447
448
  show = ShowInfo(
448
- ["pipeline", "config", "history=task::addend", "tasks", "dump-config", "config=task::add*"],
449
+ [
450
+ "pipeline",
451
+ "config",
452
+ "history=task::addend",
453
+ "tasks",
454
+ "subsets",
455
+ "dump-config",
456
+ "config=task::add*",
457
+ ],
449
458
  stream=stream,
450
459
  )
451
460
  show.show_pipeline_info(pipeline_graph_factory)
@@ -522,6 +531,20 @@ class CmdLineFwkTestCase(unittest.TestCase):
522
531
  show.show_pipeline_info(pipeline_graph_factory)
523
532
  self.assertIn("Pipeline has no tasks named notask", str(cm.exception))
524
533
 
534
+ stream = StringIO()
535
+ show = ShowInfo(["tasks"], stream=stream)
536
+ show.show_pipeline_info(pipeline_graph_factory)
537
+ stream.seek(0)
538
+ output = stream.read().strip()
539
+ self.assertIn("### Subtasks for task `lsst.pipe.base.tests.simpleQGraph.AddTask'", output)
540
+
541
+ stream = StringIO()
542
+ show = ShowInfo(["subsets"], stream=stream)
543
+ show.show_pipeline_info(pipeline_graph_factory)
544
+ stream.seek(0)
545
+ output = stream.read().strip()
546
+ self.assertIn("test_subset", output)
547
+
525
548
 
526
549
  class CmdLineFwkTestCaseWithButler(unittest.TestCase):
527
550
  """A test case for CmdLineFwk."""
@@ -537,7 +560,7 @@ class CmdLineFwkTestCaseWithButler(unittest.TestCase):
537
560
  super().tearDownClass()
538
561
 
539
562
  def testSimpleQGraph(self):
540
- """Test successfull execution of trivial quantum graph."""
563
+ """Test successful execution of trivial quantum graph."""
541
564
  args = _makeArgs(butler_config=self.root, input="test", output="output")
542
565
  butler = makeSimpleButler(self.root, run=args.input, inMemory=False)
543
566
  populateButler(self.pipeline, butler)
@@ -1,2 +0,0 @@
1
- __all__ = ["__version__"]
2
- __version__ = "29.2025.3700"