sierra-research 1.3.6__py3-none-any.whl → 1.5.0__py3-none-any.whl

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 (254) hide show
  1. sierra/__init__.py +3 -3
  2. sierra/core/__init__.py +3 -3
  3. sierra/core/batchroot.py +223 -0
  4. sierra/core/cmdline.py +681 -1057
  5. sierra/core/compare.py +11 -0
  6. sierra/core/config.py +96 -88
  7. sierra/core/engine.py +306 -0
  8. sierra/core/execenv.py +380 -0
  9. sierra/core/expdef.py +11 -0
  10. sierra/core/experiment/__init__.py +1 -0
  11. sierra/core/experiment/bindings.py +150 -101
  12. sierra/core/experiment/definition.py +414 -245
  13. sierra/core/experiment/spec.py +83 -85
  14. sierra/core/exproot.py +44 -0
  15. sierra/core/generators/__init__.py +10 -0
  16. sierra/core/generators/experiment.py +528 -0
  17. sierra/core/generators/generator_factory.py +138 -137
  18. sierra/core/graphs/__init__.py +23 -0
  19. sierra/core/graphs/bcbridge.py +94 -0
  20. sierra/core/graphs/heatmap.py +245 -324
  21. sierra/core/graphs/pathset.py +27 -0
  22. sierra/core/graphs/schema.py +77 -0
  23. sierra/core/graphs/stacked_line.py +341 -0
  24. sierra/core/graphs/summary_line.py +506 -0
  25. sierra/core/logging.py +3 -2
  26. sierra/core/models/__init__.py +3 -1
  27. sierra/core/models/info.py +19 -0
  28. sierra/core/models/interface.py +52 -122
  29. sierra/core/pipeline/__init__.py +2 -5
  30. sierra/core/pipeline/pipeline.py +228 -126
  31. sierra/core/pipeline/stage1/__init__.py +10 -0
  32. sierra/core/pipeline/stage1/pipeline_stage1.py +45 -31
  33. sierra/core/pipeline/stage2/__init__.py +10 -0
  34. sierra/core/pipeline/stage2/pipeline_stage2.py +8 -11
  35. sierra/core/pipeline/stage2/runner.py +401 -0
  36. sierra/core/pipeline/stage3/__init__.py +12 -0
  37. sierra/core/pipeline/stage3/gather.py +321 -0
  38. sierra/core/pipeline/stage3/pipeline_stage3.py +37 -84
  39. sierra/core/pipeline/stage4/__init__.py +12 -2
  40. sierra/core/pipeline/stage4/pipeline_stage4.py +36 -354
  41. sierra/core/pipeline/stage5/__init__.py +12 -0
  42. sierra/core/pipeline/stage5/pipeline_stage5.py +33 -208
  43. sierra/core/pipeline/yaml.py +48 -0
  44. sierra/core/plugin.py +529 -62
  45. sierra/core/proc.py +11 -0
  46. sierra/core/prod.py +11 -0
  47. sierra/core/ros1/__init__.py +5 -1
  48. sierra/core/ros1/callbacks.py +22 -21
  49. sierra/core/ros1/cmdline.py +59 -88
  50. sierra/core/ros1/generators.py +159 -175
  51. sierra/core/ros1/variables/__init__.py +3 -0
  52. sierra/core/ros1/variables/exp_setup.py +122 -116
  53. sierra/core/startup.py +106 -76
  54. sierra/core/stat_kernels.py +4 -5
  55. sierra/core/storage.py +13 -32
  56. sierra/core/trampoline.py +30 -0
  57. sierra/core/types.py +116 -71
  58. sierra/core/utils.py +103 -106
  59. sierra/core/variables/__init__.py +1 -1
  60. sierra/core/variables/base_variable.py +12 -17
  61. sierra/core/variables/batch_criteria.py +387 -481
  62. sierra/core/variables/builtin.py +135 -0
  63. sierra/core/variables/exp_setup.py +19 -39
  64. sierra/core/variables/population_size.py +72 -76
  65. sierra/core/variables/variable_density.py +44 -68
  66. sierra/core/vector.py +1 -1
  67. sierra/main.py +256 -88
  68. sierra/plugins/__init__.py +119 -0
  69. sierra/plugins/compare/__init__.py +14 -0
  70. sierra/plugins/compare/graphs/__init__.py +19 -0
  71. sierra/plugins/compare/graphs/cmdline.py +120 -0
  72. sierra/plugins/compare/graphs/comparator.py +291 -0
  73. sierra/plugins/compare/graphs/inter_controller.py +531 -0
  74. sierra/plugins/compare/graphs/inter_scenario.py +297 -0
  75. sierra/plugins/compare/graphs/namecalc.py +53 -0
  76. sierra/plugins/compare/graphs/outputroot.py +73 -0
  77. sierra/plugins/compare/graphs/plugin.py +147 -0
  78. sierra/plugins/compare/graphs/preprocess.py +172 -0
  79. sierra/plugins/compare/graphs/schema.py +37 -0
  80. sierra/plugins/engine/__init__.py +14 -0
  81. sierra/plugins/engine/argos/__init__.py +18 -0
  82. sierra/plugins/{platform → engine}/argos/cmdline.py +144 -151
  83. sierra/plugins/{platform/argos/variables → engine/argos/generators}/__init__.py +5 -0
  84. sierra/plugins/engine/argos/generators/engine.py +394 -0
  85. sierra/plugins/engine/argos/plugin.py +393 -0
  86. sierra/plugins/{platform/argos/generators → engine/argos/variables}/__init__.py +5 -0
  87. sierra/plugins/engine/argos/variables/arena_shape.py +183 -0
  88. sierra/plugins/engine/argos/variables/cameras.py +240 -0
  89. sierra/plugins/engine/argos/variables/constant_density.py +112 -0
  90. sierra/plugins/engine/argos/variables/exp_setup.py +82 -0
  91. sierra/plugins/{platform → engine}/argos/variables/physics_engines.py +83 -87
  92. sierra/plugins/engine/argos/variables/population_constant_density.py +178 -0
  93. sierra/plugins/engine/argos/variables/population_size.py +115 -0
  94. sierra/plugins/engine/argos/variables/population_variable_density.py +123 -0
  95. sierra/plugins/engine/argos/variables/rendering.py +108 -0
  96. sierra/plugins/engine/ros1gazebo/__init__.py +18 -0
  97. sierra/plugins/engine/ros1gazebo/cmdline.py +175 -0
  98. sierra/plugins/{platform/ros1robot → engine/ros1gazebo}/generators/__init__.py +5 -0
  99. sierra/plugins/engine/ros1gazebo/generators/engine.py +125 -0
  100. sierra/plugins/engine/ros1gazebo/plugin.py +404 -0
  101. sierra/plugins/engine/ros1gazebo/variables/__init__.py +15 -0
  102. sierra/plugins/engine/ros1gazebo/variables/population_size.py +214 -0
  103. sierra/plugins/engine/ros1robot/__init__.py +18 -0
  104. sierra/plugins/engine/ros1robot/cmdline.py +159 -0
  105. sierra/plugins/{platform/ros1gazebo → engine/ros1robot}/generators/__init__.py +4 -0
  106. sierra/plugins/engine/ros1robot/generators/engine.py +95 -0
  107. sierra/plugins/engine/ros1robot/plugin.py +410 -0
  108. sierra/plugins/{hpc/local → engine/ros1robot/variables}/__init__.py +5 -0
  109. sierra/plugins/engine/ros1robot/variables/population_size.py +146 -0
  110. sierra/plugins/execenv/__init__.py +11 -0
  111. sierra/plugins/execenv/hpc/__init__.py +18 -0
  112. sierra/plugins/execenv/hpc/adhoc/__init__.py +18 -0
  113. sierra/plugins/execenv/hpc/adhoc/cmdline.py +30 -0
  114. sierra/plugins/execenv/hpc/adhoc/plugin.py +131 -0
  115. sierra/plugins/execenv/hpc/cmdline.py +137 -0
  116. sierra/plugins/execenv/hpc/local/__init__.py +18 -0
  117. sierra/plugins/execenv/hpc/local/cmdline.py +31 -0
  118. sierra/plugins/execenv/hpc/local/plugin.py +145 -0
  119. sierra/plugins/execenv/hpc/pbs/__init__.py +18 -0
  120. sierra/plugins/execenv/hpc/pbs/cmdline.py +30 -0
  121. sierra/plugins/execenv/hpc/pbs/plugin.py +121 -0
  122. sierra/plugins/execenv/hpc/slurm/__init__.py +18 -0
  123. sierra/plugins/execenv/hpc/slurm/cmdline.py +30 -0
  124. sierra/plugins/execenv/hpc/slurm/plugin.py +133 -0
  125. sierra/plugins/execenv/prefectserver/__init__.py +18 -0
  126. sierra/plugins/execenv/prefectserver/cmdline.py +66 -0
  127. sierra/plugins/execenv/prefectserver/dockerremote/__init__.py +18 -0
  128. sierra/plugins/execenv/prefectserver/dockerremote/cmdline.py +66 -0
  129. sierra/plugins/execenv/prefectserver/dockerremote/plugin.py +132 -0
  130. sierra/plugins/execenv/prefectserver/flow.py +66 -0
  131. sierra/plugins/execenv/prefectserver/local/__init__.py +18 -0
  132. sierra/plugins/execenv/prefectserver/local/cmdline.py +29 -0
  133. sierra/plugins/execenv/prefectserver/local/plugin.py +133 -0
  134. sierra/plugins/{hpc/adhoc → execenv/robot}/__init__.py +1 -0
  135. sierra/plugins/execenv/robot/turtlebot3/__init__.py +18 -0
  136. sierra/plugins/execenv/robot/turtlebot3/plugin.py +204 -0
  137. sierra/plugins/expdef/__init__.py +14 -0
  138. sierra/plugins/expdef/json/__init__.py +14 -0
  139. sierra/plugins/expdef/json/plugin.py +504 -0
  140. sierra/plugins/expdef/xml/__init__.py +14 -0
  141. sierra/plugins/expdef/xml/plugin.py +386 -0
  142. sierra/{core/hpc → plugins/proc}/__init__.py +1 -1
  143. sierra/plugins/proc/collate/__init__.py +15 -0
  144. sierra/plugins/proc/collate/cmdline.py +47 -0
  145. sierra/plugins/proc/collate/plugin.py +271 -0
  146. sierra/plugins/proc/compress/__init__.py +18 -0
  147. sierra/plugins/proc/compress/cmdline.py +47 -0
  148. sierra/plugins/proc/compress/plugin.py +123 -0
  149. sierra/plugins/proc/decompress/__init__.py +18 -0
  150. sierra/plugins/proc/decompress/plugin.py +96 -0
  151. sierra/plugins/proc/imagize/__init__.py +15 -0
  152. sierra/plugins/proc/imagize/cmdline.py +49 -0
  153. sierra/plugins/proc/imagize/plugin.py +270 -0
  154. sierra/plugins/proc/modelrunner/__init__.py +16 -0
  155. sierra/plugins/proc/modelrunner/plugin.py +250 -0
  156. sierra/plugins/proc/statistics/__init__.py +15 -0
  157. sierra/plugins/proc/statistics/cmdline.py +64 -0
  158. sierra/plugins/proc/statistics/plugin.py +390 -0
  159. sierra/plugins/{hpc → prod}/__init__.py +1 -0
  160. sierra/plugins/prod/graphs/__init__.py +18 -0
  161. sierra/plugins/prod/graphs/cmdline.py +269 -0
  162. sierra/plugins/prod/graphs/collate.py +279 -0
  163. sierra/plugins/prod/graphs/inter/__init__.py +13 -0
  164. sierra/plugins/prod/graphs/inter/generate.py +83 -0
  165. sierra/plugins/prod/graphs/inter/heatmap.py +86 -0
  166. sierra/plugins/prod/graphs/inter/line.py +134 -0
  167. sierra/plugins/prod/graphs/intra/__init__.py +15 -0
  168. sierra/plugins/prod/graphs/intra/generate.py +202 -0
  169. sierra/plugins/prod/graphs/intra/heatmap.py +74 -0
  170. sierra/plugins/prod/graphs/intra/line.py +114 -0
  171. sierra/plugins/prod/graphs/plugin.py +103 -0
  172. sierra/plugins/prod/graphs/targets.py +63 -0
  173. sierra/plugins/prod/render/__init__.py +18 -0
  174. sierra/plugins/prod/render/cmdline.py +72 -0
  175. sierra/plugins/prod/render/plugin.py +282 -0
  176. sierra/plugins/storage/__init__.py +5 -0
  177. sierra/plugins/storage/arrow/__init__.py +18 -0
  178. sierra/plugins/storage/arrow/plugin.py +38 -0
  179. sierra/plugins/storage/csv/__init__.py +9 -0
  180. sierra/plugins/storage/csv/plugin.py +12 -5
  181. sierra/version.py +3 -2
  182. sierra_research-1.5.0.dist-info/METADATA +238 -0
  183. sierra_research-1.5.0.dist-info/RECORD +186 -0
  184. {sierra_research-1.3.6.dist-info → sierra_research-1.5.0.dist-info}/WHEEL +1 -2
  185. sierra/core/experiment/xml.py +0 -454
  186. sierra/core/generators/controller_generator_parser.py +0 -34
  187. sierra/core/generators/exp_creator.py +0 -351
  188. sierra/core/generators/exp_generators.py +0 -142
  189. sierra/core/graphs/scatterplot2D.py +0 -109
  190. sierra/core/graphs/stacked_line_graph.py +0 -249
  191. sierra/core/graphs/stacked_surface_graph.py +0 -220
  192. sierra/core/graphs/summary_line_graph.py +0 -369
  193. sierra/core/hpc/cmdline.py +0 -142
  194. sierra/core/models/graphs.py +0 -87
  195. sierra/core/pipeline/stage2/exp_runner.py +0 -286
  196. sierra/core/pipeline/stage3/imagizer.py +0 -149
  197. sierra/core/pipeline/stage3/run_collator.py +0 -317
  198. sierra/core/pipeline/stage3/statistics_calculator.py +0 -478
  199. sierra/core/pipeline/stage4/graph_collator.py +0 -319
  200. sierra/core/pipeline/stage4/inter_exp_graph_generator.py +0 -240
  201. sierra/core/pipeline/stage4/intra_exp_graph_generator.py +0 -317
  202. sierra/core/pipeline/stage4/model_runner.py +0 -168
  203. sierra/core/pipeline/stage4/rendering.py +0 -283
  204. sierra/core/pipeline/stage4/yaml_config_loader.py +0 -103
  205. sierra/core/pipeline/stage5/inter_scenario_comparator.py +0 -328
  206. sierra/core/pipeline/stage5/intra_scenario_comparator.py +0 -989
  207. sierra/core/platform.py +0 -493
  208. sierra/core/plugin_manager.py +0 -369
  209. sierra/core/root_dirpath_generator.py +0 -241
  210. sierra/plugins/hpc/adhoc/plugin.py +0 -125
  211. sierra/plugins/hpc/local/plugin.py +0 -81
  212. sierra/plugins/hpc/pbs/__init__.py +0 -9
  213. sierra/plugins/hpc/pbs/plugin.py +0 -126
  214. sierra/plugins/hpc/slurm/__init__.py +0 -9
  215. sierra/plugins/hpc/slurm/plugin.py +0 -130
  216. sierra/plugins/platform/__init__.py +0 -9
  217. sierra/plugins/platform/argos/__init__.py +0 -9
  218. sierra/plugins/platform/argos/generators/platform_generators.py +0 -383
  219. sierra/plugins/platform/argos/plugin.py +0 -337
  220. sierra/plugins/platform/argos/variables/arena_shape.py +0 -145
  221. sierra/plugins/platform/argos/variables/cameras.py +0 -243
  222. sierra/plugins/platform/argos/variables/constant_density.py +0 -136
  223. sierra/plugins/platform/argos/variables/exp_setup.py +0 -113
  224. sierra/plugins/platform/argos/variables/population_constant_density.py +0 -175
  225. sierra/plugins/platform/argos/variables/population_size.py +0 -102
  226. sierra/plugins/platform/argos/variables/population_variable_density.py +0 -132
  227. sierra/plugins/platform/argos/variables/rendering.py +0 -104
  228. sierra/plugins/platform/ros1gazebo/__init__.py +0 -9
  229. sierra/plugins/platform/ros1gazebo/cmdline.py +0 -213
  230. sierra/plugins/platform/ros1gazebo/generators/platform_generators.py +0 -137
  231. sierra/plugins/platform/ros1gazebo/plugin.py +0 -335
  232. sierra/plugins/platform/ros1gazebo/variables/__init__.py +0 -10
  233. sierra/plugins/platform/ros1gazebo/variables/population_size.py +0 -204
  234. sierra/plugins/platform/ros1robot/__init__.py +0 -9
  235. sierra/plugins/platform/ros1robot/cmdline.py +0 -175
  236. sierra/plugins/platform/ros1robot/generators/platform_generators.py +0 -112
  237. sierra/plugins/platform/ros1robot/plugin.py +0 -373
  238. sierra/plugins/platform/ros1robot/variables/__init__.py +0 -10
  239. sierra/plugins/platform/ros1robot/variables/population_size.py +0 -146
  240. sierra/plugins/robot/__init__.py +0 -9
  241. sierra/plugins/robot/turtlebot3/__init__.py +0 -9
  242. sierra/plugins/robot/turtlebot3/plugin.py +0 -194
  243. sierra_research-1.3.6.data/data/share/man/man1/sierra-cli.1 +0 -2349
  244. sierra_research-1.3.6.data/data/share/man/man7/sierra-examples.7 +0 -488
  245. sierra_research-1.3.6.data/data/share/man/man7/sierra-exec-envs.7 +0 -331
  246. sierra_research-1.3.6.data/data/share/man/man7/sierra-glossary.7 +0 -285
  247. sierra_research-1.3.6.data/data/share/man/man7/sierra-platforms.7 +0 -358
  248. sierra_research-1.3.6.data/data/share/man/man7/sierra-usage.7 +0 -725
  249. sierra_research-1.3.6.data/data/share/man/man7/sierra.7 +0 -78
  250. sierra_research-1.3.6.dist-info/METADATA +0 -500
  251. sierra_research-1.3.6.dist-info/RECORD +0 -133
  252. sierra_research-1.3.6.dist-info/top_level.txt +0 -1
  253. {sierra_research-1.3.6.dist-info → sierra_research-1.5.0.dist-info}/entry_points.txt +0 -0
  254. {sierra_research-1.3.6.dist-info → sierra_research-1.5.0.dist-info/licenses}/LICENSE +0 -0
sierra/__init__.py CHANGED
@@ -1,11 +1,11 @@
1
1
  # Copyright 2021 John Harwell, All rights reserved.
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
-
4
+ """Root SIERRA container module."""
5
5
  # Core packages
6
6
 
7
7
  # 3rd party packages
8
8
 
9
9
  # Project packages
10
- from . import core
11
- from . import plugins
10
+ from . import core as core
11
+ from . import plugins as plugins
sierra/core/__init__.py CHANGED
@@ -1,11 +1,11 @@
1
1
  # Copyright 2021 John Harwell, All rights reserved.
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
-
4
+ """
5
+ Container module for core aspects of SIERRA invariate across plugins.
6
+ """
5
7
  # Core packages
6
8
 
7
9
  # 3rd party packages
8
10
 
9
11
  # Project packages
10
- from . import cmdline
11
- from . import config
@@ -0,0 +1,223 @@
1
+ #
2
+ # Copyright 2024 John Harwell, All rights reserved.
3
+ #
4
+ # SPDX-License Identifier: MIT
5
+ #
6
+ """Functionality for generating root directory paths for a batch experiment.
7
+
8
+ See :ref:`usage/run-time-tree` for details about the defined root
9
+ directories in SIERRA.
10
+ """
11
+
12
+ # Core packages
13
+ import typing as tp
14
+ import logging
15
+ import pathlib
16
+ import argparse
17
+
18
+ # 3rd party packages
19
+
20
+ # Project packages
21
+
22
+
23
+ class ExpRootLeaf:
24
+ """
25
+ Representation of the "name" in pathlib parlance in :class:`ExpRoot`.
26
+ """
27
+
28
+ @staticmethod
29
+ def from_name(leaf: str) -> "ExpRootLeaf":
30
+ """Parse the the directory name to extract leaf components.
31
+
32
+ "Name" here is pathlib parlance. Expected to be of the form::
33
+
34
+ <template stem>-[<criteria0>+<criteria1>]...
35
+
36
+ This function is the inverse of :func:`to_path()`.
37
+ """
38
+
39
+ template_stem, bc_str = leaf.split("-")
40
+ bc = bc_str.split("+")
41
+
42
+ if not isinstance(bc, list): # Univariate batch criteria
43
+ bc = [bc]
44
+
45
+ return ExpRootLeaf(bc, template_stem)
46
+
47
+ @staticmethod
48
+ def from_components(bc: tp.List[str], template_stem: str) -> "ExpRootLeaf":
49
+ """Create the leaf representation directory from the components."""
50
+ return ExpRootLeaf(bc, template_stem)
51
+
52
+ def __init__(self, bc: tp.List[str], template_stem: str) -> None:
53
+ self.bc = bc
54
+ self.template_stem = template_stem
55
+
56
+ def to_path(self) -> pathlib.Path:
57
+ """Get the leaf as a ``pathlib.Path`` object."""
58
+ return pathlib.Path("{0}-{1}".format(self.template_stem, "+".join(self.bc)))
59
+
60
+ def to_str(self) -> str:
61
+ return str(self.to_path())
62
+
63
+
64
+ class ExpRoot:
65
+ """
66
+ Representation of the filesystem path containing all per-experiment data.
67
+ """
68
+
69
+ def __init__(
70
+ self,
71
+ sierra_root: str,
72
+ project: str,
73
+ controller: str,
74
+ scenario: str,
75
+ leaf: ExpRootLeaf,
76
+ ) -> None:
77
+ """Generate the directory path for the rootbatch root directory.
78
+
79
+ The directory path depends on all of the input arguments to this
80
+ class, and if ANY of the arguments change, so will the generated
81
+ path. Root is::
82
+
83
+ <sierra_root>/<project>/<controller>/<scenario>/<criterias>/<template_basename>+<criterias>
84
+
85
+ Args:
86
+ root: The path to the root directory where SIERRA should store
87
+ everything.
88
+
89
+ project: The name of the project plugin used.
90
+
91
+ controller: The name of the controller used.
92
+
93
+ scenario: The name of the scenario used.
94
+
95
+ leaf: The batch criteria + ``--expdef-template`` stem.
96
+ """
97
+ self.leaf = leaf
98
+
99
+ self.project = project
100
+ self.controller = controller
101
+ self.scenario = scenario
102
+
103
+ # Don't reslove() the path--that makes symlinked dirs under $HOME throw
104
+ # errors which are fatal from pathlib's POV, but actually harmless.
105
+ self.sierra_root = pathlib.Path(sierra_root)
106
+
107
+ def to_path(self) -> pathlib.Path:
108
+ return (
109
+ self.sierra_root
110
+ / self.project
111
+ / self.controller
112
+ / self.scenario
113
+ / self.leaf.to_path()
114
+ )
115
+
116
+ def to_str(self) -> str:
117
+ return str(self.to_path())
118
+
119
+
120
+ class PathSet:
121
+ """
122
+ The set of filesystem paths under ``--sierra-root`` that SIERRA uses.
123
+
124
+ Collected here in the interest of DRY.
125
+ """
126
+
127
+ def __init__(self, root: ExpRoot) -> None:
128
+ self.input_root = root.to_path() / "exp-inputs"
129
+ self.output_root = root.to_path() / "exp-outputs"
130
+ self.graph_root = root.to_path() / "graphs"
131
+ self.model_root = root.to_path() / "models"
132
+ self.model_interexp_root = self.model_root / "inter-exp"
133
+ self.stat_root = root.to_path() / "statistics"
134
+ self.stat_exec_root = self.stat_root / "exec"
135
+ self.imagize_root = root.to_path() / "imagize"
136
+ self.video_root = root.to_path() / "videos"
137
+ self.stat_interexp_root = self.stat_root / "inter-exp"
138
+ self.graph_interexp_root = self.graph_root / "inter-exp"
139
+ self.scratch_root = root.to_path() / "scratch"
140
+ self.root = root.to_path()
141
+
142
+ def __str__(self) -> str:
143
+ """
144
+ Convert the batch eperiment pathset to a GNU ``tree``-like format string.
145
+
146
+ No recursion. Everything is shown in a one-level breakdown relative to
147
+ the batch root. Could be improved by using recursion, but this is
148
+ sufficient for now, pending the plugin/pipeline overhaul.
149
+ """
150
+ # pointers:
151
+ tee = "├── "
152
+ last = "└── "
153
+
154
+ contents = [
155
+ self.input_root,
156
+ self.output_root,
157
+ self.graph_root,
158
+ self.model_root,
159
+ self.stat_root,
160
+ self.stat_exec_root,
161
+ self.imagize_root,
162
+ self.video_root,
163
+ self.stat_interexp_root,
164
+ self.graph_interexp_root,
165
+ self.scratch_root,
166
+ ]
167
+ contents.sort()
168
+ pointers = [tee] * (len(contents) - 1) + [last]
169
+ dirs = ""
170
+ for pointer, path in zip(pointers, contents):
171
+ dirs += f"\n{pointer}{path.relative_to(self.root)}"
172
+
173
+ return str(self.root.resolve()) + dirs
174
+
175
+
176
+ def from_cmdline(args: argparse.Namespace) -> PathSet:
177
+ """Generate directory paths directly from cmdline arguments."""
178
+ template = pathlib.Path(args.expdef_template)
179
+
180
+ # Remove all '-' from the template input file stem so we know the only '-'
181
+ # that are in it are ones that we put there.
182
+ template_stem = template.stem.replace("-", "")
183
+ batch_leaf = ExpRootLeaf(args.batch_criteria, str(template_stem))
184
+
185
+ return from_exp(
186
+ args.sierra_root, args.project, batch_leaf, args.controller, args.scenario
187
+ )
188
+
189
+
190
+ def from_exp(
191
+ sierra_root: str,
192
+ project: str,
193
+ batch_leaf: ExpRootLeaf,
194
+ controller: str,
195
+ scenario: str,
196
+ ) -> PathSet:
197
+ """Regenerate directory pathroots from a batch experiment.
198
+
199
+ Args:
200
+
201
+ sierra_root: The value of ``--sierra-root``.
202
+
203
+ project: The value of ``--project``.
204
+
205
+ batch_leaf: The name of the directory that will be the root of the batch
206
+ experiment (not including its parent).
207
+
208
+ controller: The value of ``--controller``.
209
+
210
+ scenario: The value of ``--scenario``.
211
+ """
212
+ root = ExpRoot(sierra_root, project, controller, scenario, batch_leaf)
213
+ logging.info("Generated batchroot %s", root.to_path())
214
+ return PathSet(root)
215
+
216
+
217
+ __all__ = [
218
+ "from_exp",
219
+ "from_cmdline",
220
+ "PathSet",
221
+ "ExpRoot",
222
+ "ExpRootLeaf",
223
+ ]