sierra-research 1.3.11__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.11.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 -251
  191. sierra/core/graphs/stacked_surface_graph.py +0 -220
  192. sierra/core/graphs/summary_line_graph.py +0 -371
  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 -320
  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.11.data/data/share/man/man1/sierra-cli.1 +0 -2349
  244. sierra_research-1.3.11.data/data/share/man/man7/sierra-examples.7 +0 -508
  245. sierra_research-1.3.11.data/data/share/man/man7/sierra-exec-envs.7 +0 -331
  246. sierra_research-1.3.11.data/data/share/man/man7/sierra-glossary.7 +0 -285
  247. sierra_research-1.3.11.data/data/share/man/man7/sierra-platforms.7 +0 -358
  248. sierra_research-1.3.11.data/data/share/man/man7/sierra-usage.7 +0 -729
  249. sierra_research-1.3.11.data/data/share/man/man7/sierra.7 +0 -78
  250. sierra_research-1.3.11.dist-info/METADATA +0 -492
  251. sierra_research-1.3.11.dist-info/RECORD +0 -133
  252. sierra_research-1.3.11.dist-info/top_level.txt +0 -1
  253. {sierra_research-1.3.11.dist-info → sierra_research-1.5.0.dist-info}/entry_points.txt +0 -0
  254. {sierra_research-1.3.11.dist-info → sierra_research-1.5.0.dist-info/licenses}/LICENSE +0 -0
@@ -1,10 +1,14 @@
1
1
  # Copyright 2021 John Harwell, All rights reserved.
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
+ """
5
+ Container module for interfaces for things related to experiments.
6
+
7
+ Interfaces are implemented by {engines, exec envs}.
8
+ """
4
9
 
5
10
  # Core packages
6
11
  import typing as tp
7
- import argparse
8
12
  import pathlib
9
13
 
10
14
  # 3rd party packages
@@ -15,30 +19,107 @@ from sierra.core import types
15
19
  import sierra.core.variables.batch_criteria as bc
16
20
 
17
21
 
22
+ class IBatchShellCmdsGenerator(implements.Interface):
23
+ """
24
+ Interface for generating the shell cmds to run :term:`Batch Experiment`.
25
+
26
+ This includes:
27
+
28
+ - The cmds to run the prior to the batch experiment (before any
29
+ :term:`Experimental Runs <Experimental Run>` are kicked off).
30
+
31
+ - The cmds to run the experiment.
32
+
33
+ - Any post-experiment cleanup cmds after all :term:`Experiments
34
+ <Experiment>` finish.
35
+
36
+ Arguments:
37
+ cmdopts: Dictionary of parsed cmdline options.
38
+ """
39
+
40
+ def __init__(self, cmdopts: types.Cmdopts) -> None:
41
+ raise NotImplementedError
42
+
43
+ def pre_batch_cmds(self) -> tp.List[types.ShellCmdSpec]:
44
+ """Generate shell commands to setup the environment for a :term:`Batch Experiment`.
45
+
46
+ These commands can include setting up things which are common to/should
47
+ be the same for all experiments within the batch, such as
48
+ launching daemons/background processes needed by the engine, setting
49
+ environment variables, etc.
50
+ Called during stage 1.
51
+
52
+ """
53
+ raise NotImplementedError
54
+
55
+ def exec_batch_cmds(self, exec_opts: types.StrDict) -> tp.List[types.ShellCmdSpec]:
56
+ """Generate shell commands to execute an :term:`Experiment`.
57
+
58
+ These commands are run in the *same* sub-shell as the pre- and
59
+ post-batch commands during stage 2.
60
+
61
+ Called during stage 2.
62
+
63
+ Arguments:
64
+ exec_opts: A dictionary containing:
65
+
66
+ - ``jobroot_path`` - The root directory for the batch
67
+ experiment.
68
+
69
+ - ``exec_resume`` - Is this a resume of a previously run
70
+ experiment?
71
+
72
+ - ``joblog_path`` - The logfile for output for the
73
+ experiment run cmd (different than the :term:`Project`
74
+ code).
75
+
76
+ - ``cmdfile_stem_path`` - Stem of the file containing the
77
+ launch cmds to run (one per line), all the way up to
78
+ but not including the extension.
79
+
80
+ - ``cmdfile_ext`` - Extension of files containing the
81
+ launch cmds to run.
82
+
83
+ """
84
+ raise NotImplementedError
85
+
86
+ def post_batch_cmds(self) -> tp.List[types.ShellCmdSpec]:
87
+ """Generate cmds to run after the :term:`Batch Experiment` has finished.
88
+
89
+ Commands are run during stage 2 after all experiments have finished.
90
+ These commands are run in the *same* sub-shell as the pre- and exec-exp
91
+ commands.
92
+
93
+ These commands include things like cleaning up/stopping background
94
+ processes, visualization daemons, etc.
95
+
96
+ Called during stage 1.
97
+ """
98
+ raise NotImplementedError
99
+
100
+
18
101
  class IExpShellCmdsGenerator(implements.Interface):
19
102
  """
20
103
  Interface for generating the shell cmds to run for an :term:`Experiment`.
21
104
 
22
105
  This includes:
23
106
 
24
- - The cmds to run the prior to the experiment (before any
25
- :term:`Experimental Runs <Experimental Run>`).
107
+ - The cmds to run the prior to the experiment (before any
108
+ :term:`Experimental Runs <Experimental Run>`).
26
109
 
27
- - The cmds to run the experiment.
110
+ - The cmds to run the experiment.
28
111
 
29
- - Any post-experiment cleanup cmds before the next :term:`Experiment` is
30
- run.
112
+ - Any post-experiment cleanup cmds before the next :term:`Experiment` is
113
+ run.
31
114
 
32
115
  Arguments:
33
116
 
34
- cmdopts: Dictionary of parsed cmdline options.
117
+ cmdopts: Dictionary of parsed cmdline options.
35
118
 
36
- exp_num: The 0-based index of the experiment in the batch.
119
+ exp_num: The 0-based index of the experiment in the batch.
37
120
  """
38
121
 
39
- def __init__(self,
40
- cmdopts: types.Cmdopts,
41
- exp_num: int) -> None:
122
+ def __init__(self, cmdopts: types.Cmdopts, exp_num: int) -> None:
42
123
  raise NotImplementedError
43
124
 
44
125
  def pre_exp_cmds(self) -> tp.List[types.ShellCmdSpec]:
@@ -46,7 +127,7 @@ class IExpShellCmdsGenerator(implements.Interface):
46
127
 
47
128
  These commands can include setting up things which are common to/should
48
129
  be the same for all experimental runs within the experiment, such as
49
- launching daemons/background processes needed by the platform, setting
130
+ launching daemons/background processes needed by the engine, setting
50
131
  environment variables, etc. These commands are run prior to each
51
132
  experiment in the batch during stage 2, in a `new` sub-shell which
52
133
  SIERRA uses to run all :term:`Experiment Runs <Experimental Run>` within
@@ -57,12 +138,11 @@ class IExpShellCmdsGenerator(implements.Interface):
57
138
  """
58
139
  raise NotImplementedError
59
140
 
60
- def exec_exp_cmds(self,
61
- exec_opts: types.StrDict) -> tp.List[types.ShellCmdSpec]:
141
+ def exec_exp_cmds(self, exec_opts: types.StrDict) -> tp.List[types.ShellCmdSpec]:
62
142
  """Generate shell commands to execute an :term:`Experiment`.
63
143
 
64
144
  This is (usually) a single GNU parallel command, but it does not have to
65
- be. These commands are run in the `same` sub-shell as the pre- and
145
+ be. These commands are run in the *same* sub-shell as the pre- and
66
146
  post-exp commands during stage 2.
67
147
 
68
148
  Called during stage 2.
@@ -100,19 +180,18 @@ class IExpShellCmdsGenerator(implements.Interface):
100
180
  raise NotImplementedError
101
181
 
102
182
  def post_exp_cmds(self) -> tp.List[types.ShellCmdSpec]:
103
- """Generate shell commands to run after an :term:`Experiment` has finished.
183
+ """Generate shell cmds to run after an :term:`Experiment` has finished.
104
184
 
105
- Commands are run during stage 2 after all :term:`Experimental runs`
185
+ Commands are run during stage 2 after all :term:`Experimental Runs
106
186
  <Experimental Run>` for an :term:`Experiment` have finished, but before
107
- the next experiment in the :term:`Batch Experiment` is launched. These
108
- commands are run in the `same` sub-shell as the pre- and exec-exp
187
+ the next experiment in the :term:`Batch Experiment` is launched. These
188
+ commands are run in the *same* sub-shell as the pre- and exec-exp
109
189
  commands.
110
190
 
111
191
  These commands include things like cleaning up/stopping background
112
192
  processes, visualization daemons, etc.
113
193
 
114
194
  Called during stage 1.
115
-
116
195
  """
117
196
  raise NotImplementedError
118
197
 
@@ -122,9 +201,9 @@ class IExpRunShellCmdsGenerator(implements.Interface):
122
201
 
123
202
  This includes:
124
203
 
125
- - The cmds to run the prior to the run.
204
+ - The cmds to run the prior to executing the run.
126
205
 
127
- - The cmds to executed the experimental run.
206
+ - The cmds to execute the experimental run.
128
207
 
129
208
  - Any post-run cleanup cmds before the next run is executed.
130
209
 
@@ -136,23 +215,24 @@ class IExpRunShellCmdsGenerator(implements.Interface):
136
215
 
137
216
  cmdopts: Dictionary of parsed cmdline options.
138
217
 
139
- n_robots: The configured # of robots for the experimental run.
218
+ n_agents: The configured # of agents for the experimental run.
140
219
 
141
220
  exp_num: The 0-based index of the experiment in the batch.
142
221
 
143
222
  """
144
223
 
145
- def __init__(self,
146
- cmdopts: types.Cmdopts,
147
- criteria: bc.BatchCriteria,
148
- n_robots: int,
149
- exp_num: int) -> None:
224
+ def __init__(
225
+ self,
226
+ cmdopts: types.Cmdopts,
227
+ criteria: bc.XVarBatchCriteria,
228
+ n_agents: int,
229
+ exp_num: int,
230
+ ) -> None:
150
231
  raise NotImplementedError
151
232
 
152
- def pre_run_cmds(self,
153
- host: str,
154
- input_fpath: pathlib.Path,
155
- run_num: int) -> tp.List[types.ShellCmdSpec]:
233
+ def pre_run_cmds(
234
+ self, host: str, input_fpath: pathlib.Path, run_num: int
235
+ ) -> tp.List[types.ShellCmdSpec]:
156
236
  """Generate shell commands to setup the experimental run environment.
157
237
 
158
238
  These commands are run in stage 2 prior to each experimental run in the
@@ -174,10 +254,9 @@ class IExpRunShellCmdsGenerator(implements.Interface):
174
254
  """
175
255
  raise NotImplementedError
176
256
 
177
- def exec_run_cmds(self,
178
- host: str,
179
- input_fpath: pathlib.Path,
180
- run_num: int) -> tp.List[types.ShellCmdSpec]:
257
+ def exec_run_cmds(
258
+ self, host: str, input_fpath: pathlib.Path, run_num: int
259
+ ) -> tp.List[types.ShellCmdSpec]:
181
260
  """Generate shell commands to execute a single :term:`Experimental Run`.
182
261
 
183
262
  This is (usually) a command to launch the simulation environment or
@@ -198,7 +277,9 @@ class IExpRunShellCmdsGenerator(implements.Interface):
198
277
  """
199
278
  raise NotImplementedError
200
279
 
201
- def post_run_cmds(self, host: str) -> tp.List[types.ShellCmdSpec]:
280
+ def post_run_cmds(
281
+ self, host: str, run_output_root: pathlib.Path
282
+ ) -> tp.List[types.ShellCmdSpec]:
202
283
  """Generate shell commands to run after an experimental run has finished.
203
284
 
204
285
  These commands are run during stage 2 in the `same` sub-shell as the
@@ -210,58 +291,13 @@ class IExpRunShellCmdsGenerator(implements.Interface):
210
291
  raise NotImplementedError
211
292
 
212
293
 
213
- class IParsedCmdlineConfigurer(implements.Interface):
214
- """
215
- Modify arguments as needed for the platform or execution environment.
216
- """
217
-
218
- def __init__(self, exec_env: str) -> None:
219
- raise NotImplementedError
220
-
221
- def __call__(self, args: argparse.Namespace) -> None:
222
- raise NotImplementedError
223
-
224
-
225
- class ICmdlineParserGenerator(implements.Interface):
226
- """Return the argparse object containing ALL options relevant to the platform.
227
-
228
- This includes the options for whatever ``--exec-env`` are valid for the
229
- platform, making use of the ``parents`` option for the cmdline.
230
-
231
- """
232
-
233
- def __call__(self) -> argparse.ArgumentParser:
234
- raise NotImplementedError
235
-
236
-
237
- class IExecEnvChecker(implements.Interface):
238
- """Perform sanity checks for stage 2 execution environment.
239
-
240
- This is needed because stage 2 can run separate from stage 1, and we need to
241
- guarantee that the execution environment we verified during stage 1 is still
242
- valid.
243
-
244
- Arguments:
245
-
246
- cmdopts: Dictionary of parsed cmdline options.
247
-
248
- """
249
-
250
- def __init__(self, cmdopts: types.Cmdopts) -> None:
251
- raise NotImplementedError
252
-
253
- def __call__(self) -> None:
254
- raise NotImplementedError
255
-
256
-
257
294
  class IExpConfigurer(implements.Interface):
258
- """Perform addition configuration after creating experiments.
295
+ """Perform additional configuration after creating experiments in stage 1.
259
296
 
260
297
  E.g., creating directories store outputs in if they are not created by the
261
298
  simulator/:term:`Project` code.
262
299
 
263
300
  Arguments:
264
-
265
301
  cmdopts: Dictionary of parsed cmdline options.
266
302
 
267
303
  """
@@ -271,23 +307,21 @@ class IExpConfigurer(implements.Interface):
271
307
 
272
308
  def for_exp(self, exp_input_root: pathlib.Path) -> None:
273
309
  """
274
- Configure an experiment.
310
+ Configure an :term:`Experiment`.
275
311
 
276
312
  Arguments:
277
-
278
313
  exp_input_root: Absolute path to the input directory for the
279
314
  experiment.
280
315
  """
281
316
  raise NotImplementedError
282
317
 
283
- def for_exp_run(self,
284
- exp_input_root: pathlib.Path,
285
- run_output_root: pathlib.Path) -> None:
318
+ def for_exp_run(
319
+ self, exp_input_root: pathlib.Path, run_output_root: pathlib.Path
320
+ ) -> None:
286
321
  """
287
- Configure an experimental run.
322
+ Configure an :term:`Experimental Run`.
288
323
 
289
324
  Arguments:
290
-
291
325
  exp_input_root: Absolute path to the input directory for the
292
326
  experiment.
293
327
 
@@ -296,22 +330,37 @@ class IExpConfigurer(implements.Interface):
296
330
  """
297
331
  raise NotImplementedError
298
332
 
299
- def cmdfile_paradigm(self) -> str:
300
- """Return the paradigm for the platform, in terms of GNU parallel cmds.
333
+ def parallelism_paradigm(self) -> str:
334
+ """Get the paradigm to use when generating/running experiments.
335
+
336
+ The returned value must be one of:
337
+
338
+ - ``per-batch`` - A single cmdfile per :term:`Batch Experiment`,
339
+ which contains the {pre,exec, post} commands to run each
340
+ :term:`Experimental Run`, one per line. This gives parallelism
341
+ across all runs in all experiments in the batch.
301
342
 
302
- - ``per-exp`` - A single GNU parallel cmds file per experiment.
343
+ - ``per-exp`` - A single cmdfile per :term:`Experiment`, which
344
+ contains the {pre, exec, post} cmds for each :term:`Experimental
345
+ Run`, one per line. This gives parallelism across all runs in
346
+ each experiment; experiments are still run in sequenc.
303
347
 
304
- - ``per-run`` - A single GNU parallel cmds file per run.
348
+ - ``per-run`` - A single cmdfile per :term:`Experimental Run`, which
349
+ contains the {pre, exec, post} commands, one per line. Multiple
350
+ cmdfiles may be needed for a single run (e.g., for ROS1 master +
351
+ slaves). This gives parallelism *within* each run.
305
352
 
353
+ The parallelism paradigm is part of the :term:`Engine` definition, and
354
+ thus the "correct" paradigm to choose varies depending on the engine.
355
+ See :ref:`tutorials/plugin/engine/config` for complete details and
356
+ guidance.
306
357
  """
307
358
  raise NotImplementedError
308
359
 
309
360
 
310
- __api__ = [
311
- 'IParsedCmdlineConfigurer',
312
- 'IExpRunShellCmdsGenerator',
313
- 'IExpShellCmdsGenerator',
314
- 'IExpConfigurer',
315
- 'IExecEnvChecker',
316
- 'ICmdlineParserGenerator'
361
+ __all__ = [
362
+ "IExpRunShellCmdsGenerator",
363
+ "IExpShellCmdsGenerator",
364
+ "IBatchShellCmdsGenerator",
365
+ "IExpConfigurer",
317
366
  ]