lsst-ctrl-bps 30.0.0rc2__tar.gz → 30.0.1rc1__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 (72) hide show
  1. {lsst_ctrl_bps-30.0.0rc2/python/lsst_ctrl_bps.egg-info → lsst_ctrl_bps-30.0.1rc1}/PKG-INFO +4 -4
  2. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/doc/lsst.ctrl.bps/CHANGES.rst +44 -0
  3. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/doc/lsst.ctrl.bps/quickstart.rst +3 -0
  4. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/pyproject.toml +6 -14
  5. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/bps_config.py +4 -4
  6. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/clustered_quantum_graph.py +7 -6
  7. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/construct.py +2 -1
  8. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/generic_workflow.py +16 -4
  9. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/initialize.py +2 -1
  10. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/quantum_clustering_funcs.py +1 -1
  11. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/transform.py +10 -10
  12. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/version.py +1 -1
  13. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/wms_service.py +5 -5
  14. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1/python/lsst_ctrl_bps.egg-info}/PKG-INFO +4 -4
  15. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst_ctrl_bps.egg-info/requires.txt +1 -1
  16. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/COPYRIGHT +0 -0
  17. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/LICENSE +0 -0
  18. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/MANIFEST.in +0 -0
  19. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/README.md +0 -0
  20. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/bsd_license.txt +0 -0
  21. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/doc/lsst.ctrl.bps/index.rst +0 -0
  22. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/gpl-v3.0.txt +0 -0
  23. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/__init__.py +0 -0
  24. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/__init__.py +0 -0
  25. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/__init__.py +0 -0
  26. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/_exceptions.py +0 -0
  27. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/bps_draw.py +0 -0
  28. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/bps_reports.py +0 -0
  29. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/bps_utils.py +0 -0
  30. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cancel.py +0 -0
  31. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/__init__.py +0 -0
  32. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/bps.py +0 -0
  33. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/cmd/__init__.py +0 -0
  34. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/cmd/commands.py +0 -0
  35. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/opt/__init__.py +0 -0
  36. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/opt/arguments.py +0 -0
  37. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/opt/option_groups.py +0 -0
  38. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/cli/opt/options.py +0 -0
  39. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/constants.py +0 -0
  40. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/drivers.py +0 -0
  41. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/etc/bps_defaults.yaml +0 -0
  42. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/ping.py +0 -0
  43. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/pre_transform.py +0 -0
  44. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/prepare.py +0 -0
  45. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/report.py +0 -0
  46. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/restart.py +0 -0
  47. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/status.py +0 -0
  48. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/submit.py +0 -0
  49. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/tests/config_test_utils.py +0 -0
  50. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst/ctrl/bps/tests/gw_test_utils.py +0 -0
  51. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst_ctrl_bps.egg-info/SOURCES.txt +0 -0
  52. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst_ctrl_bps.egg-info/dependency_links.txt +0 -0
  53. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst_ctrl_bps.egg-info/entry_points.txt +0 -0
  54. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst_ctrl_bps.egg-info/top_level.txt +0 -0
  55. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/python/lsst_ctrl_bps.egg-info/zip-safe +0 -0
  56. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/setup.cfg +0 -0
  57. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_bps_reports.py +0 -0
  58. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_bps_utils.py +0 -0
  59. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_bpsconfig.py +0 -0
  60. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_cli_commands.py +0 -0
  61. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_clustered_quantum_graph.py +0 -0
  62. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_construct.py +0 -0
  63. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_drivers.py +0 -0
  64. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_generic_workflow.py +0 -0
  65. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_initialize.py +0 -0
  66. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_ping.py +0 -0
  67. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_pre_transform.py +0 -0
  68. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_quantum_clustering_funcs.py +0 -0
  69. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_report.py +0 -0
  70. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_status.py +0 -0
  71. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_transform.py +0 -0
  72. {lsst_ctrl_bps-30.0.0rc2 → lsst_ctrl_bps-30.0.1rc1}/tests/test_wms_service.py +0 -0
@@ -1,20 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-ctrl-bps
3
- Version: 30.0.0rc2
3
+ Version: 30.0.1rc1
4
4
  Summary: Pluggable execution of workflow graphs from Rubin pipelines.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License-Expression: BSD-3-Clause OR GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/lsst/ctrl_bps
8
+ Project-URL: Source, https://github.com/lsst/ctrl_bps
8
9
  Keywords: lsst
9
10
  Classifier: Intended Audience :: Science/Research
10
11
  Classifier: Operating System :: OS Independent
11
12
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: Topic :: Scientific/Engineering :: Astronomy
17
- Requires-Python: >=3.11.0
17
+ Requires-Python: >=3.12.0
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: COPYRIGHT
20
20
  License-File: LICENSE
@@ -23,7 +23,7 @@ License-File: gpl-v3.0.txt
23
23
  Requires-Dist: astropy>=4.0
24
24
  Requires-Dist: pyyaml>=5.1
25
25
  Requires-Dist: click>=7.0
26
- Requires-Dist: networkx<3.6
26
+ Requires-Dist: networkx
27
27
  Requires-Dist: lsst-daf-butler
28
28
  Requires-Dist: lsst-pipe-base
29
29
  Requires-Dist: lsst-ctrl-mpexec
@@ -1,3 +1,47 @@
1
+ lsst-ctrl-bps v30.0.1 (2026-02-03)
2
+ ==================================
3
+
4
+ Dropped Python 3.11.
5
+ Tested with Python 3.14.
6
+
7
+ Other Changes and Additions
8
+ ---------------------------
9
+
10
+ - - Bumped minimum Python version to 3.12.
11
+ - Dropped ``black`` and ``isort`` sections from ``pyproject.toml``.
12
+ - Switched documentation build to use ``sphinxutils``. (`DM-54006 <https://rubinobs.atlassian.net/browse/DM-54006>`_)
13
+
14
+
15
+ lsst-ctrl-bps v30.0.0 (2026-01-16)
16
+ ==================================
17
+
18
+ New Features
19
+ ------------
20
+
21
+ - Added support for transferring input files to the execution site and bringing the produced output files back to the submit site when using ``bps submitcmd``. (`DM-48479 <https://rubinobs.atlassian.net/browse/DM-48479>`_)
22
+ - Added ``bpsGenerateConfig`` and ``bpsEval`` to run functions to produce config values. ``bpsGenerateConfig`` is used when inserting or updating one or more key/value pairs. ``bpsEval`` is for replacing part of a string value. (`DM-50616 <https://rubinobs.atlassian.net/browse/DM-50616>`_)
23
+
24
+ Bug Fixes
25
+ ---------
26
+
27
+ - Fixed bug where the ``return_exit_codes`` command line value was not passed to the plugin's report function. While it was correctly used when displaying the report, not having the value didn't allow the plugin to optimize its report function. (`DM-52791 <https://rubinobs.atlassian.net/browse/DM-52791>`_)
28
+
29
+ Performance Enhancement
30
+ -----------------------
31
+
32
+ - Switched the default ``finalJob`` implementation to the new ``aggregate-graph`` command, which makes use of multiple cores much more effectively than ``transfer-from-graph``. (`DM-52360 <https://rubinobs.atlassian.net/browse/DM-52360>`_)
33
+
34
+
35
+ Other Changes and Additions
36
+ ---------------------------
37
+
38
+ - Removed exit code 1 from the default for ``finalJob``\ 's ``retryUnlessExit`` as the majority of these are related to system issues which could be transient. (`DM-51313 <https://rubinobs.atlassian.net/browse/DM-51313>`_)
39
+ - Modified the BPS report driver so it compiles exit code summary only when necessary, i.e., when ``--return-exit-codes`` option was used with ``bps report``. (`DM-52898 <https://rubinobs.atlassian.net/browse/DM-52898>`_)
40
+ - Added a custom __new__ method to the GenericWorkflow class so **ctrl_bps** can work when using NetworkX 3.6. (`DM-53492 <https://rubinobs.atlassian.net/browse/DM-53492>`_)
41
+ - Made the BPS reporting mechanism a bit more robust. If the BPS plugin does not explicitly includes jobs labels for which there are no failures in the run's exit code summary, it will try to use the run's job summary to do that. (`DM-51261 <https://rubinobs.atlassian.net/browse/DM-51261>`_)
42
+ - Used the new ``PredictedQuantumGraph`` class internally and default to the new QG file format via the "``.qg``" extension. (`DM-52339 <https://rubinobs.atlassian.net/browse/DM-52339>`_)
43
+
44
+
1
45
  lsst-ctrl-bps v29.1.0 (2025-06-13)
2
46
  ==================================
3
47
 
@@ -1,3 +1,6 @@
1
+ User Guide
2
+ ==========
3
+
1
4
  Overview
2
5
  --------
3
6
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "lsst-ctrl-bps"
7
- requires-python = ">=3.11.0"
7
+ requires-python = ">=3.12.0"
8
8
  description = "Pluggable execution of workflow graphs from Rubin pipelines."
9
9
  license = "BSD-3-Clause OR GPL-3.0-or-later"
10
10
  license-files = ["COPYRIGHT", "LICENSE", "bsd_license.txt", "gpl-v3.0.txt"]
@@ -16,7 +16,6 @@ classifiers = [
16
16
  "Intended Audience :: Science/Research",
17
17
  "Operating System :: OS Independent",
18
18
  "Programming Language :: Python :: 3",
19
- "Programming Language :: Python :: 3.11",
20
19
  "Programming Language :: Python :: 3.12",
21
20
  "Programming Language :: Python :: 3.13",
22
21
  "Programming Language :: Python :: 3.14",
@@ -27,7 +26,7 @@ dependencies = [
27
26
  "astropy >=4.0",
28
27
  "pyyaml >=5.1",
29
28
  "click >= 7.0",
30
- "networkx <3.6",
29
+ "networkx",
31
30
  "lsst-daf-butler",
32
31
  "lsst-pipe-base",
33
32
  "lsst-ctrl-mpexec",
@@ -38,8 +37,9 @@ dynamic = ["version"]
38
37
 
39
38
  [project.urls]
40
39
  "Homepage" = "https://github.com/lsst/ctrl_bps"
41
- [project.optional-dependencies]
40
+ "Source" = "https://github.com/lsst/ctrl_bps"
42
41
 
42
+ [project.optional-dependencies]
43
43
  test = [
44
44
  "pytest >= 3.2",
45
45
  "pytest-openfiles >= 0.5.0"
@@ -98,15 +98,6 @@ bps = "lsst.ctrl.bps.cli.bps:main"
98
98
  name = "An API Removal or Deprecation"
99
99
  showcontent = true
100
100
 
101
- [tool.black]
102
- line-length = 110
103
- target-version = ["py311"]
104
-
105
- [tool.isort]
106
- profile = "black"
107
- line_length = 110
108
- known_first_party = ["lsst"]
109
-
110
101
  [tool.lsst_versions]
111
102
  write_to = "python/lsst/ctrl/bps/version.py"
112
103
 
@@ -134,7 +125,7 @@ exclude_lines = [
134
125
 
135
126
  [tool.ruff]
136
127
  line-length = 110
137
- target-version = "py311"
128
+ target-version = "py312"
138
129
  exclude = [
139
130
  "__init__.py",
140
131
  ]
@@ -200,6 +191,7 @@ checks = [
200
191
  "RT01", # Unfortunately our @property trigger this.
201
192
  "RT02", # Does not want named return value. DM style says we do.
202
193
  "SS05", # pydocstyle is better at finding infinitive verb.
194
+ "RT03", # Temporarily disable for sphinx empty returns.
203
195
  ]
204
196
  exclude = [
205
197
  '^test_.*', # Do not test docstrings in test code.
@@ -87,7 +87,7 @@ class BpsConfig(Config):
87
87
  afterwards. WMS settings takes precedence over provided defaults.
88
88
  wms_service_class_fqn : `str`, optional
89
89
  Fully qualified name of the WMS service class to use to get plugin's
90
- specific default settings. If ``None`` (default), the WMS service
90
+ specific default settings. If `None` (default), the WMS service
91
91
  class provided by
92
92
 
93
93
  1. ``other`` config,
@@ -197,7 +197,7 @@ class BpsConfig(Config):
197
197
  ----------
198
198
  key : `str`
199
199
  Key to look for in config.
200
- default : Any, optional
200
+ default : `~typing.Any`, optional
201
201
  Default value to return if the key is not in the config.
202
202
 
203
203
  Returns
@@ -256,7 +256,7 @@ class BpsConfig(Config):
256
256
  ----------
257
257
  key : `str`
258
258
  Key to look for in config.
259
- opt : `dict` [`str`, `Any`], optional
259
+ opt : `dict` [`str`, `~typing.Any`], optional
260
260
  Options dictionary to use while searching. All are optional.
261
261
 
262
262
  ``"curvals"``
@@ -264,7 +264,7 @@ class BpsConfig(Config):
264
264
  (curr_<sectname>) or variable replacements.
265
265
  (`dict`, optional)
266
266
  ``"default"``
267
- Value to return if not found. (`Any`, optional)
267
+ Value to return if not found. (`~typing.Any`, optional)
268
268
  ``"replaceEnvVars"``
269
269
  If search result is string, whether to replace environment
270
270
  variables inside it with special placeholder (<ENV:name>).
@@ -61,7 +61,7 @@ class QuantaCluster:
61
61
  be unique within ClusteredQuantumGraph.
62
62
  label : `str`
63
63
  Value used to group clusters.
64
- tags : `dict` [`str`, `Any`], optional
64
+ tags : `dict` [`str`, `~typing.Any`], optional
65
65
  Arbitrary key/value pairs for the cluster.
66
66
 
67
67
  Raises
@@ -248,7 +248,8 @@ class ClusteredQuantumGraph:
248
248
 
249
249
  Parameters
250
250
  ----------
251
- clusters_for_adding : `QuantaCluster` or `Iterable` [`QuantaCluster`]
251
+ clusters_for_adding : `QuantaCluster` or \
252
+ `~collections.abc.Iterable` [`QuantaCluster`]
252
253
  The cluster to be added to the ClusteredQuantumGraph.
253
254
  """
254
255
  for cluster in ensure_iterable(clusters_for_adding):
@@ -311,7 +312,7 @@ class ClusteredQuantumGraph:
311
312
 
312
313
  Returns
313
314
  -------
314
- names : `Iterator` [`str`]
315
+ names : `~collections.abc.Iterator` [`str`]
315
316
  Iterator over names of clusters.
316
317
  """
317
318
  return self._cluster_graph.nodes()
@@ -321,7 +322,7 @@ class ClusteredQuantumGraph:
321
322
 
322
323
  Returns
323
324
  -------
324
- clusters : `Iterator` [`lsst.ctrl.bps.QuantaCluster`]
325
+ clusters : `~collections.abc.Iterator` [`lsst.ctrl.bps.QuantaCluster`]
325
326
  Iterator over clusters in topological order.
326
327
  """
327
328
  return map(self.get_cluster, topological_sort(self._cluster_graph))
@@ -337,7 +338,7 @@ class ClusteredQuantumGraph:
337
338
 
338
339
  Returns
339
340
  -------
340
- clusters : `Iterator` [`lsst.ctrl.bps.QuantaCluster`]
341
+ clusters : `~collections.abc.Iterator` [`lsst.ctrl.bps.QuantaCluster`]
341
342
  Iterator over successors of given cluster.
342
343
  """
343
344
  return map(self.get_cluster, self._cluster_graph.successors(name))
@@ -353,7 +354,7 @@ class ClusteredQuantumGraph:
353
354
 
354
355
  Returns
355
356
  -------
356
- clusters : `Iterator` [`lsst.ctrl.bps.QuantaCluster`]
357
+ clusters : `~collections.abc.Iterator` [`lsst.ctrl.bps.QuantaCluster`]
357
358
  Iterator over predecessors of given cluster.
358
359
  """
359
360
  return map(self.get_cluster, self._cluster_graph.predecessors(name))
@@ -181,7 +181,8 @@ def create_job_files(
181
181
  The mapping between file keys and file paths.
182
182
  prefix : `str` | `pathlib.Path`
183
183
  The root directory to which the files will be written.
184
- path_creator : `Callable` [[`Path`, `Path`], `Path`]
184
+ path_creator : `~collections.abc.Callable` \
185
+ [[`pathlib.Path`, `pathlib.Path`], `pathlib.Path`]
185
186
  File category that determines actions that need to be taken during
186
187
  file creation.
187
188
 
@@ -332,6 +332,18 @@ class GenericWorkflow(DiGraph):
332
332
  self.run_id = None
333
333
  self._final: GenericWorkflowJob | GenericWorkflow | None = None
334
334
 
335
+ # Starting from ver. 3.6 of NetworkX, the DiGraph class defines its custom
336
+ # __new__ method that explicitly defines arguments it accepts. As a result,
337
+ # we need to override it to let our subclass use different ones.
338
+ #
339
+ # Notes
340
+ # -----
341
+ # Most likely overriding __new__ in this manner will prevent us from using
342
+ # different graph backends with our subclass. However, since we are not
343
+ # using any backends, this should not be a problem at the moment.
344
+ def __new__(cls, *args, **kwargs) -> "GenericWorkflow":
345
+ return object.__new__(cls)
346
+
335
347
  @property
336
348
  def name(self) -> str:
337
349
  """Retrieve name of generic workflow.
@@ -416,7 +428,7 @@ class GenericWorkflow(DiGraph):
416
428
  ----------
417
429
  data : `bool`, optional
418
430
  Whether to return the file data as well as the file object name
419
- (The default is False).
431
+ (The default is `False`).
420
432
  transfer_only : `bool`, optional
421
433
  Whether to only return files for which a workflow management system
422
434
  would be responsible for transferring.
@@ -478,7 +490,7 @@ class GenericWorkflow(DiGraph):
478
490
  ----------
479
491
  node_for_adding : `lsst.ctrl.bps.GenericWorkflowJob`
480
492
  Job to be added to generic workflow.
481
- **attr
493
+ **attr : `~typing.Any`
482
494
  Needed to match original networkx function, but not used.
483
495
  """
484
496
  self.add_job(node_for_adding)
@@ -512,7 +524,7 @@ class GenericWorkflow(DiGraph):
512
524
  ebunch_to_add : Iterable [`tuple` [`str`, `str`]]
513
525
  Iterable of job name pairs between which a dependency should be
514
526
  saved.
515
- **attr : keyword arguments, optional
527
+ **attr : `~typing.Any`
516
528
  Data can be assigned using keyword arguments (not currently used).
517
529
  """
518
530
  for edge_to_add in ebunch_to_add:
@@ -527,7 +539,7 @@ class GenericWorkflow(DiGraph):
527
539
  Name of parent job.
528
540
  v_of_edge : `str`
529
541
  Name of child job.
530
- **attr : keyword arguments, optional
542
+ **attr
531
543
  Attributes to save with edge.
532
544
  """
533
545
  if u_of_edge not in self:
@@ -58,7 +58,8 @@ def init_submission(
58
58
  ----------
59
59
  config_file : `str`
60
60
  Name of the configuration file.
61
- validators : `Iterable[Callable[[BpsConfig], None]]`, optional
61
+ validators : `~collections.abc.Iterable` \
62
+ [`~collections.abc.Callable` [[`BpsConfig`], `None`]], optional
62
63
  A list of functions performing checks on the given configuration.
63
64
  Each function should take a single argument, a BpsConfig object, and
64
65
  raise if the check fails. By default, no checks are performed.
@@ -789,7 +789,7 @@ def get_cluster_name_from_info(
789
789
  -------
790
790
  cluster_name : `str`
791
791
  Name of the cluster in which to add the given node.
792
- info : dict [`str`, `Any`]
792
+ info : dict [`str`, `~typing.Any`]
793
793
  Information needed if creating a new node.
794
794
  """
795
795
  # Gather info for cluster name template into a dictionary.
@@ -210,7 +210,7 @@ def _enhance_command(config, generic_workflow, gwjob, cached_job_values):
210
210
  gwjob : `lsst.ctrl.bps.GenericWorkflowJob`
211
211
  Generic workflow job to which the updated executable, arguments,
212
212
  and values should be saved.
213
- cached_job_values : `dict` [`str`, dict[`str`, `Any`]]
213
+ cached_job_values : `dict` [`str`, dict[`str`, `~typing.Any`]]
214
214
  Cached values common across jobs with same label. Updated if values
215
215
  aren't already saved for given gwjob's label.
216
216
  """
@@ -286,7 +286,7 @@ def _fill_arguments(use_shared, generic_workflow, arguments, cmdvals):
286
286
  Generic workflow containing the job.
287
287
  arguments : `str`
288
288
  String containing placeholders.
289
- cmdvals : `dict` [`str`, `Any`]
289
+ cmdvals : `dict` [`str`, `~typing.Any`]
290
290
  Any command line values that can be used to replace placeholders.
291
291
 
292
292
  Returns
@@ -365,14 +365,14 @@ def _get_job_values(config, search_opt, cmd_line_key):
365
365
  ----------
366
366
  config : `lsst.ctrl.bps.BpsConfig`
367
367
  Bps configuration.
368
- search_opt : `dict` [`str`, `Any`]
368
+ search_opt : `dict` [`str`, `~typing.Any`]
369
369
  Search options to be used when searching config.
370
370
  cmd_line_key : `str` or None
371
371
  Which command line key to search for (e.g., "runQuantumCommand").
372
372
 
373
373
  Returns
374
374
  -------
375
- job_values : `dict` [ `str`, `Any` ]`
375
+ job_values : `dict` [ `str`, `~typing.Any` ]`
376
376
  A mapping between job attributes and their values.
377
377
  """
378
378
  _LOG.debug("cmd_line_key=%s, search_opt=%s", cmd_line_key, search_opt)
@@ -443,7 +443,7 @@ def _handle_job_values(quantum_job_values, gwjob, attributes=_ATTRS_ALL):
443
443
  Job values for running single Quantum.
444
444
  gwjob : `lsst.ctrl.bps.GenericWorkflowJob`
445
445
  Generic workflow job in which to store the universal values.
446
- attributes : `Iterable` [`str`], optional
446
+ attributes : `~collections.abc.Iterable` [`str`], optional
447
447
  Job attributes to be set in the job following different rules.
448
448
  The default value is _ATTRS_ALL.
449
449
  """
@@ -463,7 +463,7 @@ def _handle_job_values_universal(quantum_job_values, gwjob, attributes=_ATTRS_UN
463
463
  Job values for running single Quantum.
464
464
  gwjob : `lsst.ctrl.bps.GenericWorkflowJob`
465
465
  Generic workflow job in which to store the universal values.
466
- attributes : `Iterable` [`str`], optional
466
+ attributes : `~collections.abc.Iterable` [`str`], optional
467
467
  Job attributes to be set in the job following different rules.
468
468
  The default value is _ATTRS_UNIVERSAL.
469
469
  """
@@ -502,11 +502,11 @@ def _handle_job_values_max(quantum_job_values, gwjob, attributes=_ATTRS_MAX):
502
502
 
503
503
  Parameters
504
504
  ----------
505
- quantum_job_values : `dict` [`str`, `Any`]
505
+ quantum_job_values : `dict` [`str`, `~typing.Any`]
506
506
  Job values for running single Quantum.
507
507
  gwjob : `lsst.ctrl.bps.GenericWorkflowJob`
508
508
  Generic workflow job in which to store the aggregate values.
509
- attributes : `Iterable` [`str`], optional
509
+ attributes : `~collections.abc.Iterable` [`str`], optional
510
510
  Job attributes to be set in the job following different rules.
511
511
  The default value is _ATTR_MAX.
512
512
  """
@@ -547,11 +547,11 @@ def _handle_job_values_sum(quantum_job_values, gwjob, attributes=_ATTRS_SUM):
547
547
 
548
548
  Parameters
549
549
  ----------
550
- quantum_job_values : `dict` [`str`, `Any`]
550
+ quantum_job_values : `dict` [`str`, `~typing.Any`]
551
551
  Job values for running single Quantum.
552
552
  gwjob : `lsst.ctrl.bps.GenericWorkflowJob`
553
553
  Generic workflow job in which to store the aggregate values.
554
- attributes : `Iterable` [`str`], optional
554
+ attributes : `~collections.abc.Iterable` [`str`], optional
555
555
  Job attributes to be set in the job following different rules.
556
556
  The default value is _ATTRS_SUM.
557
557
  """
@@ -1,2 +1,2 @@
1
1
  __all__ = ["__version__"]
2
- __version__ = "30.0.0rc2"
2
+ __version__ = "30.0.1rc1"
@@ -121,14 +121,14 @@ class WmsSpecificInfo:
121
121
 
122
122
  Returns
123
123
  -------
124
- context : `dict` [`str`, `Any`]
124
+ context : `dict` [`str`, `~typing.Any`]
125
125
  A copy of the dictionary representing the mapping between
126
126
  *every* template variable and its value.
127
127
 
128
128
  Notes
129
129
  -----
130
130
  The property returns a *shallow* copy of the dictionary representing
131
- the context as the intended purpose of the ``WmsSpecificInfo`` is to
131
+ the context as the intended purpose of the `WmsSpecificInfo` is to
132
132
  pass a small number of brief messages from WMS to BPS reporting
133
133
  subsystem. Hence, it is assumed that the dictionary will only contain
134
134
  immutable objects (e.g. strings, numbers).
@@ -157,7 +157,7 @@ class WmsSpecificInfo:
157
157
  ----------
158
158
  template : `str`
159
159
  A message template.
160
- context : `dict` [`str`, `Any`], optional
160
+ context : `dict` [`str`, `~typing.Any`], optional
161
161
  A mapping between template variables and their values.
162
162
  **kwargs
163
163
  Additional keyword arguments.
@@ -296,7 +296,7 @@ class BaseWmsService:
296
296
  -----
297
297
  This property is currently being used in ``BpsConfig.__init__()``.
298
298
  As long as that's the case it cannot be changed to return
299
- a ``BpsConfig`` instance.
299
+ a `BpsConfig` instance.
300
300
  """
301
301
  return None
302
302
 
@@ -386,7 +386,7 @@ class BaseWmsService:
386
386
 
387
387
  Returns
388
388
  -------
389
- job_ids : `list` [`Any`]
389
+ job_ids : `list` [`~typing.Any`]
390
390
  Only job ids to be used by cancel and other functions. Typically
391
391
  this means top-level jobs (i.e., not children jobs).
392
392
  """
@@ -1,20 +1,20 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-ctrl-bps
3
- Version: 30.0.0rc2
3
+ Version: 30.0.1rc1
4
4
  Summary: Pluggable execution of workflow graphs from Rubin pipelines.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License-Expression: BSD-3-Clause OR GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/lsst/ctrl_bps
8
+ Project-URL: Source, https://github.com/lsst/ctrl_bps
8
9
  Keywords: lsst
9
10
  Classifier: Intended Audience :: Science/Research
10
11
  Classifier: Operating System :: OS Independent
11
12
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: Topic :: Scientific/Engineering :: Astronomy
17
- Requires-Python: >=3.11.0
17
+ Requires-Python: >=3.12.0
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: COPYRIGHT
20
20
  License-File: LICENSE
@@ -23,7 +23,7 @@ License-File: gpl-v3.0.txt
23
23
  Requires-Dist: astropy>=4.0
24
24
  Requires-Dist: pyyaml>=5.1
25
25
  Requires-Dist: click>=7.0
26
- Requires-Dist: networkx<3.6
26
+ Requires-Dist: networkx
27
27
  Requires-Dist: lsst-daf-butler
28
28
  Requires-Dist: lsst-pipe-base
29
29
  Requires-Dist: lsst-ctrl-mpexec
@@ -1,7 +1,7 @@
1
1
  astropy>=4.0
2
2
  pyyaml>=5.1
3
3
  click>=7.0
4
- networkx<3.6
4
+ networkx
5
5
  lsst-daf-butler
6
6
  lsst-pipe-base
7
7
  lsst-ctrl-mpexec