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.
- sierra/__init__.py +3 -3
- sierra/core/__init__.py +3 -3
- sierra/core/batchroot.py +223 -0
- sierra/core/cmdline.py +681 -1057
- sierra/core/compare.py +11 -0
- sierra/core/config.py +96 -88
- sierra/core/engine.py +306 -0
- sierra/core/execenv.py +380 -0
- sierra/core/expdef.py +11 -0
- sierra/core/experiment/__init__.py +1 -0
- sierra/core/experiment/bindings.py +150 -101
- sierra/core/experiment/definition.py +414 -245
- sierra/core/experiment/spec.py +83 -85
- sierra/core/exproot.py +44 -0
- sierra/core/generators/__init__.py +10 -0
- sierra/core/generators/experiment.py +528 -0
- sierra/core/generators/generator_factory.py +138 -137
- sierra/core/graphs/__init__.py +23 -0
- sierra/core/graphs/bcbridge.py +94 -0
- sierra/core/graphs/heatmap.py +245 -324
- sierra/core/graphs/pathset.py +27 -0
- sierra/core/graphs/schema.py +77 -0
- sierra/core/graphs/stacked_line.py +341 -0
- sierra/core/graphs/summary_line.py +506 -0
- sierra/core/logging.py +3 -2
- sierra/core/models/__init__.py +3 -1
- sierra/core/models/info.py +19 -0
- sierra/core/models/interface.py +52 -122
- sierra/core/pipeline/__init__.py +2 -5
- sierra/core/pipeline/pipeline.py +228 -126
- sierra/core/pipeline/stage1/__init__.py +10 -0
- sierra/core/pipeline/stage1/pipeline_stage1.py +45 -31
- sierra/core/pipeline/stage2/__init__.py +10 -0
- sierra/core/pipeline/stage2/pipeline_stage2.py +8 -11
- sierra/core/pipeline/stage2/runner.py +401 -0
- sierra/core/pipeline/stage3/__init__.py +12 -0
- sierra/core/pipeline/stage3/gather.py +321 -0
- sierra/core/pipeline/stage3/pipeline_stage3.py +37 -84
- sierra/core/pipeline/stage4/__init__.py +12 -2
- sierra/core/pipeline/stage4/pipeline_stage4.py +36 -354
- sierra/core/pipeline/stage5/__init__.py +12 -0
- sierra/core/pipeline/stage5/pipeline_stage5.py +33 -208
- sierra/core/pipeline/yaml.py +48 -0
- sierra/core/plugin.py +529 -62
- sierra/core/proc.py +11 -0
- sierra/core/prod.py +11 -0
- sierra/core/ros1/__init__.py +5 -1
- sierra/core/ros1/callbacks.py +22 -21
- sierra/core/ros1/cmdline.py +59 -88
- sierra/core/ros1/generators.py +159 -175
- sierra/core/ros1/variables/__init__.py +3 -0
- sierra/core/ros1/variables/exp_setup.py +122 -116
- sierra/core/startup.py +106 -76
- sierra/core/stat_kernels.py +4 -5
- sierra/core/storage.py +13 -32
- sierra/core/trampoline.py +30 -0
- sierra/core/types.py +116 -71
- sierra/core/utils.py +103 -106
- sierra/core/variables/__init__.py +1 -1
- sierra/core/variables/base_variable.py +12 -17
- sierra/core/variables/batch_criteria.py +387 -481
- sierra/core/variables/builtin.py +135 -0
- sierra/core/variables/exp_setup.py +19 -39
- sierra/core/variables/population_size.py +72 -76
- sierra/core/variables/variable_density.py +44 -68
- sierra/core/vector.py +1 -1
- sierra/main.py +256 -88
- sierra/plugins/__init__.py +119 -0
- sierra/plugins/compare/__init__.py +14 -0
- sierra/plugins/compare/graphs/__init__.py +19 -0
- sierra/plugins/compare/graphs/cmdline.py +120 -0
- sierra/plugins/compare/graphs/comparator.py +291 -0
- sierra/plugins/compare/graphs/inter_controller.py +531 -0
- sierra/plugins/compare/graphs/inter_scenario.py +297 -0
- sierra/plugins/compare/graphs/namecalc.py +53 -0
- sierra/plugins/compare/graphs/outputroot.py +73 -0
- sierra/plugins/compare/graphs/plugin.py +147 -0
- sierra/plugins/compare/graphs/preprocess.py +172 -0
- sierra/plugins/compare/graphs/schema.py +37 -0
- sierra/plugins/engine/__init__.py +14 -0
- sierra/plugins/engine/argos/__init__.py +18 -0
- sierra/plugins/{platform → engine}/argos/cmdline.py +144 -151
- sierra/plugins/{platform/argos/variables → engine/argos/generators}/__init__.py +5 -0
- sierra/plugins/engine/argos/generators/engine.py +394 -0
- sierra/plugins/engine/argos/plugin.py +393 -0
- sierra/plugins/{platform/argos/generators → engine/argos/variables}/__init__.py +5 -0
- sierra/plugins/engine/argos/variables/arena_shape.py +183 -0
- sierra/plugins/engine/argos/variables/cameras.py +240 -0
- sierra/plugins/engine/argos/variables/constant_density.py +112 -0
- sierra/plugins/engine/argos/variables/exp_setup.py +82 -0
- sierra/plugins/{platform → engine}/argos/variables/physics_engines.py +83 -87
- sierra/plugins/engine/argos/variables/population_constant_density.py +178 -0
- sierra/plugins/engine/argos/variables/population_size.py +115 -0
- sierra/plugins/engine/argos/variables/population_variable_density.py +123 -0
- sierra/plugins/engine/argos/variables/rendering.py +108 -0
- sierra/plugins/engine/ros1gazebo/__init__.py +18 -0
- sierra/plugins/engine/ros1gazebo/cmdline.py +175 -0
- sierra/plugins/{platform/ros1robot → engine/ros1gazebo}/generators/__init__.py +5 -0
- sierra/plugins/engine/ros1gazebo/generators/engine.py +125 -0
- sierra/plugins/engine/ros1gazebo/plugin.py +404 -0
- sierra/plugins/engine/ros1gazebo/variables/__init__.py +15 -0
- sierra/plugins/engine/ros1gazebo/variables/population_size.py +214 -0
- sierra/plugins/engine/ros1robot/__init__.py +18 -0
- sierra/plugins/engine/ros1robot/cmdline.py +159 -0
- sierra/plugins/{platform/ros1gazebo → engine/ros1robot}/generators/__init__.py +4 -0
- sierra/plugins/engine/ros1robot/generators/engine.py +95 -0
- sierra/plugins/engine/ros1robot/plugin.py +410 -0
- sierra/plugins/{hpc/local → engine/ros1robot/variables}/__init__.py +5 -0
- sierra/plugins/engine/ros1robot/variables/population_size.py +146 -0
- sierra/plugins/execenv/__init__.py +11 -0
- sierra/plugins/execenv/hpc/__init__.py +18 -0
- sierra/plugins/execenv/hpc/adhoc/__init__.py +18 -0
- sierra/plugins/execenv/hpc/adhoc/cmdline.py +30 -0
- sierra/plugins/execenv/hpc/adhoc/plugin.py +131 -0
- sierra/plugins/execenv/hpc/cmdline.py +137 -0
- sierra/plugins/execenv/hpc/local/__init__.py +18 -0
- sierra/plugins/execenv/hpc/local/cmdline.py +31 -0
- sierra/plugins/execenv/hpc/local/plugin.py +145 -0
- sierra/plugins/execenv/hpc/pbs/__init__.py +18 -0
- sierra/plugins/execenv/hpc/pbs/cmdline.py +30 -0
- sierra/plugins/execenv/hpc/pbs/plugin.py +121 -0
- sierra/plugins/execenv/hpc/slurm/__init__.py +18 -0
- sierra/plugins/execenv/hpc/slurm/cmdline.py +30 -0
- sierra/plugins/execenv/hpc/slurm/plugin.py +133 -0
- sierra/plugins/execenv/prefectserver/__init__.py +18 -0
- sierra/plugins/execenv/prefectserver/cmdline.py +66 -0
- sierra/plugins/execenv/prefectserver/dockerremote/__init__.py +18 -0
- sierra/plugins/execenv/prefectserver/dockerremote/cmdline.py +66 -0
- sierra/plugins/execenv/prefectserver/dockerremote/plugin.py +132 -0
- sierra/plugins/execenv/prefectserver/flow.py +66 -0
- sierra/plugins/execenv/prefectserver/local/__init__.py +18 -0
- sierra/plugins/execenv/prefectserver/local/cmdline.py +29 -0
- sierra/plugins/execenv/prefectserver/local/plugin.py +133 -0
- sierra/plugins/{hpc/adhoc → execenv/robot}/__init__.py +1 -0
- sierra/plugins/execenv/robot/turtlebot3/__init__.py +18 -0
- sierra/plugins/execenv/robot/turtlebot3/plugin.py +204 -0
- sierra/plugins/expdef/__init__.py +14 -0
- sierra/plugins/expdef/json/__init__.py +14 -0
- sierra/plugins/expdef/json/plugin.py +504 -0
- sierra/plugins/expdef/xml/__init__.py +14 -0
- sierra/plugins/expdef/xml/plugin.py +386 -0
- sierra/{core/hpc → plugins/proc}/__init__.py +1 -1
- sierra/plugins/proc/collate/__init__.py +15 -0
- sierra/plugins/proc/collate/cmdline.py +47 -0
- sierra/plugins/proc/collate/plugin.py +271 -0
- sierra/plugins/proc/compress/__init__.py +18 -0
- sierra/plugins/proc/compress/cmdline.py +47 -0
- sierra/plugins/proc/compress/plugin.py +123 -0
- sierra/plugins/proc/decompress/__init__.py +18 -0
- sierra/plugins/proc/decompress/plugin.py +96 -0
- sierra/plugins/proc/imagize/__init__.py +15 -0
- sierra/plugins/proc/imagize/cmdline.py +49 -0
- sierra/plugins/proc/imagize/plugin.py +270 -0
- sierra/plugins/proc/modelrunner/__init__.py +16 -0
- sierra/plugins/proc/modelrunner/plugin.py +250 -0
- sierra/plugins/proc/statistics/__init__.py +15 -0
- sierra/plugins/proc/statistics/cmdline.py +64 -0
- sierra/plugins/proc/statistics/plugin.py +390 -0
- sierra/plugins/{hpc → prod}/__init__.py +1 -0
- sierra/plugins/prod/graphs/__init__.py +18 -0
- sierra/plugins/prod/graphs/cmdline.py +269 -0
- sierra/plugins/prod/graphs/collate.py +279 -0
- sierra/plugins/prod/graphs/inter/__init__.py +13 -0
- sierra/plugins/prod/graphs/inter/generate.py +83 -0
- sierra/plugins/prod/graphs/inter/heatmap.py +86 -0
- sierra/plugins/prod/graphs/inter/line.py +134 -0
- sierra/plugins/prod/graphs/intra/__init__.py +15 -0
- sierra/plugins/prod/graphs/intra/generate.py +202 -0
- sierra/plugins/prod/graphs/intra/heatmap.py +74 -0
- sierra/plugins/prod/graphs/intra/line.py +114 -0
- sierra/plugins/prod/graphs/plugin.py +103 -0
- sierra/plugins/prod/graphs/targets.py +63 -0
- sierra/plugins/prod/render/__init__.py +18 -0
- sierra/plugins/prod/render/cmdline.py +72 -0
- sierra/plugins/prod/render/plugin.py +282 -0
- sierra/plugins/storage/__init__.py +5 -0
- sierra/plugins/storage/arrow/__init__.py +18 -0
- sierra/plugins/storage/arrow/plugin.py +38 -0
- sierra/plugins/storage/csv/__init__.py +9 -0
- sierra/plugins/storage/csv/plugin.py +12 -5
- sierra/version.py +3 -2
- sierra_research-1.5.0.dist-info/METADATA +238 -0
- sierra_research-1.5.0.dist-info/RECORD +186 -0
- {sierra_research-1.3.11.dist-info → sierra_research-1.5.0.dist-info}/WHEEL +1 -2
- sierra/core/experiment/xml.py +0 -454
- sierra/core/generators/controller_generator_parser.py +0 -34
- sierra/core/generators/exp_creator.py +0 -351
- sierra/core/generators/exp_generators.py +0 -142
- sierra/core/graphs/scatterplot2D.py +0 -109
- sierra/core/graphs/stacked_line_graph.py +0 -251
- sierra/core/graphs/stacked_surface_graph.py +0 -220
- sierra/core/graphs/summary_line_graph.py +0 -371
- sierra/core/hpc/cmdline.py +0 -142
- sierra/core/models/graphs.py +0 -87
- sierra/core/pipeline/stage2/exp_runner.py +0 -286
- sierra/core/pipeline/stage3/imagizer.py +0 -149
- sierra/core/pipeline/stage3/run_collator.py +0 -317
- sierra/core/pipeline/stage3/statistics_calculator.py +0 -478
- sierra/core/pipeline/stage4/graph_collator.py +0 -320
- sierra/core/pipeline/stage4/inter_exp_graph_generator.py +0 -240
- sierra/core/pipeline/stage4/intra_exp_graph_generator.py +0 -317
- sierra/core/pipeline/stage4/model_runner.py +0 -168
- sierra/core/pipeline/stage4/rendering.py +0 -283
- sierra/core/pipeline/stage4/yaml_config_loader.py +0 -103
- sierra/core/pipeline/stage5/inter_scenario_comparator.py +0 -328
- sierra/core/pipeline/stage5/intra_scenario_comparator.py +0 -989
- sierra/core/platform.py +0 -493
- sierra/core/plugin_manager.py +0 -369
- sierra/core/root_dirpath_generator.py +0 -241
- sierra/plugins/hpc/adhoc/plugin.py +0 -125
- sierra/plugins/hpc/local/plugin.py +0 -81
- sierra/plugins/hpc/pbs/__init__.py +0 -9
- sierra/plugins/hpc/pbs/plugin.py +0 -126
- sierra/plugins/hpc/slurm/__init__.py +0 -9
- sierra/plugins/hpc/slurm/plugin.py +0 -130
- sierra/plugins/platform/__init__.py +0 -9
- sierra/plugins/platform/argos/__init__.py +0 -9
- sierra/plugins/platform/argos/generators/platform_generators.py +0 -383
- sierra/plugins/platform/argos/plugin.py +0 -337
- sierra/plugins/platform/argos/variables/arena_shape.py +0 -145
- sierra/plugins/platform/argos/variables/cameras.py +0 -243
- sierra/plugins/platform/argos/variables/constant_density.py +0 -136
- sierra/plugins/platform/argos/variables/exp_setup.py +0 -113
- sierra/plugins/platform/argos/variables/population_constant_density.py +0 -175
- sierra/plugins/platform/argos/variables/population_size.py +0 -102
- sierra/plugins/platform/argos/variables/population_variable_density.py +0 -132
- sierra/plugins/platform/argos/variables/rendering.py +0 -104
- sierra/plugins/platform/ros1gazebo/__init__.py +0 -9
- sierra/plugins/platform/ros1gazebo/cmdline.py +0 -213
- sierra/plugins/platform/ros1gazebo/generators/platform_generators.py +0 -137
- sierra/plugins/platform/ros1gazebo/plugin.py +0 -335
- sierra/plugins/platform/ros1gazebo/variables/__init__.py +0 -10
- sierra/plugins/platform/ros1gazebo/variables/population_size.py +0 -204
- sierra/plugins/platform/ros1robot/__init__.py +0 -9
- sierra/plugins/platform/ros1robot/cmdline.py +0 -175
- sierra/plugins/platform/ros1robot/generators/platform_generators.py +0 -112
- sierra/plugins/platform/ros1robot/plugin.py +0 -373
- sierra/plugins/platform/ros1robot/variables/__init__.py +0 -10
- sierra/plugins/platform/ros1robot/variables/population_size.py +0 -146
- sierra/plugins/robot/__init__.py +0 -9
- sierra/plugins/robot/turtlebot3/__init__.py +0 -9
- sierra/plugins/robot/turtlebot3/plugin.py +0 -194
- sierra_research-1.3.11.data/data/share/man/man1/sierra-cli.1 +0 -2349
- sierra_research-1.3.11.data/data/share/man/man7/sierra-examples.7 +0 -508
- sierra_research-1.3.11.data/data/share/man/man7/sierra-exec-envs.7 +0 -331
- sierra_research-1.3.11.data/data/share/man/man7/sierra-glossary.7 +0 -285
- sierra_research-1.3.11.data/data/share/man/man7/sierra-platforms.7 +0 -358
- sierra_research-1.3.11.data/data/share/man/man7/sierra-usage.7 +0 -729
- sierra_research-1.3.11.data/data/share/man/man7/sierra.7 +0 -78
- sierra_research-1.3.11.dist-info/METADATA +0 -492
- sierra_research-1.3.11.dist-info/RECORD +0 -133
- sierra_research-1.3.11.dist-info/top_level.txt +0 -1
- {sierra_research-1.3.11.dist-info → sierra_research-1.5.0.dist-info}/entry_points.txt +0 -0
- {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
|
-
|
25
|
-
|
107
|
+
- The cmds to run the prior to the experiment (before any
|
108
|
+
:term:`Experimental Runs <Experimental Run>`).
|
26
109
|
|
27
|
-
|
110
|
+
- The cmds to run the experiment.
|
28
111
|
|
29
|
-
|
30
|
-
|
112
|
+
- Any post-experiment cleanup cmds before the next :term:`Experiment` is
|
113
|
+
run.
|
31
114
|
|
32
115
|
Arguments:
|
33
116
|
|
34
|
-
|
117
|
+
cmdopts: Dictionary of parsed cmdline options.
|
35
118
|
|
36
|
-
|
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
|
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
|
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
|
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
|
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.
|
108
|
-
commands are run in the
|
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
|
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
|
-
|
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__(
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
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(
|
153
|
-
|
154
|
-
|
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(
|
178
|
-
|
179
|
-
|
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(
|
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
|
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
|
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(
|
284
|
-
|
285
|
-
|
318
|
+
def for_exp_run(
|
319
|
+
self, exp_input_root: pathlib.Path, run_output_root: pathlib.Path
|
320
|
+
) -> None:
|
286
321
|
"""
|
287
|
-
Configure an
|
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
|
300
|
-
"""
|
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
|
-
|
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
|
-
|
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
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
'IExecEnvChecker',
|
316
|
-
'ICmdlineParserGenerator'
|
361
|
+
__all__ = [
|
362
|
+
"IExpRunShellCmdsGenerator",
|
363
|
+
"IExpShellCmdsGenerator",
|
364
|
+
"IBatchShellCmdsGenerator",
|
365
|
+
"IExpConfigurer",
|
317
366
|
]
|