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
@@ -2,9 +2,9 @@
|
|
2
2
|
#
|
3
3
|
# SPDX-License-Identifier: MIT
|
4
4
|
|
5
|
-
"""Classes for the ``--exp-setup`` cmdline option for ROS1
|
5
|
+
"""Classes for the ``--exp-setup`` cmdline option for ROS1 engines.
|
6
6
|
|
7
|
-
See :ref:`
|
7
|
+
See :ref:`usage/vars/expsetup` for usage documentation.
|
8
8
|
|
9
9
|
"""
|
10
10
|
|
@@ -16,106 +16,115 @@ import implements
|
|
16
16
|
|
17
17
|
# Project packages
|
18
18
|
from sierra.core.variables.base_variable import IBaseVariable
|
19
|
-
from sierra.core.experiment import
|
19
|
+
from sierra.core.experiment import definition
|
20
20
|
from sierra.core import config
|
21
|
-
from sierra.core.variables
|
21
|
+
from sierra.core.variables import exp_setup
|
22
22
|
|
23
23
|
|
24
24
|
@implements.implements(IBaseVariable)
|
25
|
-
class ExpSetup
|
25
|
+
class ExpSetup:
|
26
26
|
"""
|
27
27
|
Defines the experimental setup for ROS experiments.
|
28
28
|
|
29
29
|
Attributes:
|
30
|
-
|
31
30
|
n_secs_per_run: The :term:`Experimental Run` duration in seconds, NOT
|
32
31
|
:term:`Ticks <Tick>` or timesteps.
|
33
32
|
|
34
|
-
n_datapoints: How many datapoints to capture during the experimental
|
35
|
-
run.
|
36
|
-
|
37
33
|
n_ticks_per_sec: How many times per second robot controllers will be
|
38
34
|
run.
|
39
35
|
|
40
36
|
"""
|
41
37
|
|
42
|
-
def __init__(
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
38
|
+
def __init__(
|
39
|
+
self,
|
40
|
+
n_secs_per_run: int,
|
41
|
+
n_ticks_per_sec: int,
|
42
|
+
barrier_start: bool,
|
43
|
+
robots_need_timekeeper: bool,
|
44
|
+
) -> None:
|
48
45
|
self.n_secs_per_run = n_secs_per_run
|
49
|
-
self.n_datapoints = n_datapoints
|
50
46
|
self.n_ticks_per_sec = n_ticks_per_sec
|
51
47
|
self.barrier_start = barrier_start
|
52
48
|
self.robots_need_timekeeper = robots_need_timekeeper
|
53
49
|
|
54
|
-
self.
|
50
|
+
self.element_adds = None
|
55
51
|
|
56
|
-
def gen_attr_changelist(self) -> tp.List[
|
52
|
+
def gen_attr_changelist(self) -> tp.List[definition.AttrChangeSet]:
|
57
53
|
return []
|
58
54
|
|
59
|
-
def gen_tag_rmlist(self) -> tp.List[
|
55
|
+
def gen_tag_rmlist(self) -> tp.List[definition.ElementRmList]:
|
60
56
|
return []
|
61
57
|
|
62
|
-
def
|
63
|
-
if not self.
|
64
|
-
adds =
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
58
|
+
def gen_element_addlist(self) -> tp.List[definition.ElementAddList]:
|
59
|
+
if not self.element_adds:
|
60
|
+
adds = definition.ElementAddList(
|
61
|
+
definition.ElementAdd(
|
62
|
+
"./master/group/[@ns='sierra']",
|
63
|
+
"param",
|
64
|
+
{
|
65
|
+
"name": "experiment/length",
|
66
|
+
"value": str(self.n_secs_per_run),
|
67
|
+
},
|
68
|
+
True,
|
69
|
+
),
|
70
|
+
definition.ElementAdd(
|
71
|
+
"./master/group/[@ns='sierra']",
|
72
|
+
"param",
|
73
|
+
{
|
74
|
+
"name": "experiment/ticks_per_sec",
|
75
|
+
"value": str(self.n_ticks_per_sec),
|
76
|
+
},
|
77
|
+
True,
|
78
|
+
),
|
79
|
+
definition.ElementAdd(
|
80
|
+
"./master/group/[@ns='sierra']",
|
81
|
+
"param",
|
82
|
+
{
|
83
|
+
"name": "experiment/barrier_start",
|
84
|
+
"value": str(self.barrier_start).lower(),
|
85
|
+
},
|
86
|
+
True,
|
87
|
+
),
|
88
|
+
definition.ElementAdd(
|
89
|
+
"./master/group/[@ns='sierra']",
|
90
|
+
"node",
|
91
|
+
{
|
92
|
+
"name": "sierra_timekeeper",
|
93
|
+
"pkg": "sierra_rosbridge",
|
94
|
+
"type": "sierra_timekeeper.py",
|
95
|
+
"required": "true",
|
96
|
+
# Otherwise rospy prints nothing
|
97
|
+
"output": "screen",
|
98
|
+
},
|
99
|
+
True,
|
100
|
+
),
|
101
|
+
definition.ElementAdd(
|
102
|
+
"./robot/group/[@ns='sierra']",
|
103
|
+
"param",
|
104
|
+
{
|
105
|
+
"name": "experiment/length",
|
106
|
+
"value": str(self.n_secs_per_run),
|
107
|
+
},
|
108
|
+
True,
|
109
|
+
),
|
110
|
+
definition.ElementAdd(
|
111
|
+
"./robot/group/[@ns='sierra']",
|
112
|
+
"param",
|
113
|
+
{
|
114
|
+
"name": "experiment/ticks_per_sec",
|
115
|
+
"value": str(self.n_ticks_per_sec),
|
116
|
+
},
|
117
|
+
True,
|
118
|
+
),
|
119
|
+
definition.ElementAdd(
|
120
|
+
"./robot/group/[@ns='sierra']",
|
121
|
+
"param",
|
122
|
+
{
|
123
|
+
"name": "experiment/barrier_start",
|
124
|
+
"value": str(self.barrier_start).lower(),
|
125
|
+
},
|
126
|
+
True,
|
127
|
+
),
|
119
128
|
)
|
120
129
|
if self.robots_need_timekeeper:
|
121
130
|
# Robots also need the timekeeper when they are real and not
|
@@ -133,29 +142,30 @@ class ExpSetup():
|
|
133
142
|
# most 1 dependent node will be active at a given time. Plus,
|
134
143
|
# it's just sloppy to leave that sort of thing hanging around
|
135
144
|
# after a run exits.
|
136
|
-
adds.append(
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
145
|
+
adds.append(
|
146
|
+
definition.ElementAdd(
|
147
|
+
"./robot/group/[@ns='sierra']",
|
148
|
+
"node",
|
149
|
+
{
|
150
|
+
"name": "sierra_timekeeper",
|
151
|
+
"pkg": "sierra_rosbridge",
|
152
|
+
"type": "sierra_timekeeper.py",
|
153
|
+
"required": "true",
|
154
|
+
# Otherwise rospy prints nothing
|
155
|
+
"output": "screen",
|
156
|
+
},
|
157
|
+
True,
|
158
|
+
)
|
159
|
+
)
|
160
|
+
self.element_adds = adds
|
161
|
+
|
162
|
+
return [self.element_adds]
|
151
163
|
|
152
164
|
def gen_files(self) -> None:
|
153
165
|
pass
|
154
166
|
|
155
167
|
|
156
|
-
def factory(arg: str,
|
157
|
-
barrier_start: bool,
|
158
|
-
robots_need_timekeeper: bool) -> ExpSetup:
|
168
|
+
def factory(arg: str, barrier_start: bool, robots_need_timekeeper: bool) -> ExpSetup:
|
159
169
|
"""Create an :class:`ExpSetup` derived class from the command line definition.
|
160
170
|
|
161
171
|
Arguments:
|
@@ -163,26 +173,22 @@ def factory(arg: str,
|
|
163
173
|
arg: The value of ``--exp-setup``.
|
164
174
|
|
165
175
|
"""
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
__api__ = [
|
185
|
-
'ExpSetup',
|
186
|
-
|
187
|
-
|
176
|
+
attr = exp_setup.parse(
|
177
|
+
arg,
|
178
|
+
{
|
179
|
+
"n_secs_per_run": config.kROS["n_secs_per_run"],
|
180
|
+
"n_ticks_per_sec": config.kROS["n_ticks_per_sec"],
|
181
|
+
},
|
182
|
+
)
|
183
|
+
|
184
|
+
return ExpSetup(
|
185
|
+
attr["n_secs_per_run"],
|
186
|
+
attr["n_ticks_per_sec"],
|
187
|
+
barrier_start,
|
188
|
+
robots_need_timekeeper,
|
189
|
+
)
|
190
|
+
|
191
|
+
|
192
|
+
__all__ = [
|
193
|
+
"ExpSetup",
|
188
194
|
]
|
sierra/core/startup.py
CHANGED
@@ -18,31 +18,31 @@ import subprocess
|
|
18
18
|
from sierra.core import types
|
19
19
|
|
20
20
|
|
21
|
-
kOSXPackages = types.OSPackagesSpec(
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
'xquartz': False,
|
27
|
-
'pssh': False
|
28
|
-
})
|
21
|
+
kOSXPackages = types.OSPackagesSpec(
|
22
|
+
"darwin",
|
23
|
+
"OSX",
|
24
|
+
pkgs={"parallel": True, "mactex": False, "xquartz": False, "pssh": False},
|
25
|
+
)
|
29
26
|
"""
|
30
27
|
The required/optional Homebrew packages.
|
31
28
|
"""
|
32
29
|
|
33
|
-
kDebianPackages = types.OSPackagesSpec(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
30
|
+
kDebianPackages = types.OSPackagesSpec(
|
31
|
+
"linux",
|
32
|
+
"debian",
|
33
|
+
pkgs={
|
34
|
+
"parallel": True,
|
35
|
+
"cm-super": False,
|
36
|
+
"texlive-fonts-recommended": False,
|
37
|
+
"texlive-latex-extra": False,
|
38
|
+
"dvipng": False,
|
39
|
+
"psmisc": True,
|
40
|
+
"pssh": False,
|
41
|
+
"ffmpeg": False,
|
42
|
+
"xvfb": False,
|
43
|
+
"iputils-ping": False,
|
44
|
+
},
|
45
|
+
)
|
46
46
|
"""
|
47
47
|
The required/optional .deb packages for debian-based distributions.
|
48
48
|
"""
|
@@ -52,14 +52,14 @@ def startup_checks(pkg_checks: bool) -> None:
|
|
52
52
|
logging.debug("Performing startup checks")
|
53
53
|
|
54
54
|
# Check python version
|
55
|
-
if sys.version_info < (3,
|
56
|
-
raise RuntimeError("Python >= 3.
|
55
|
+
if sys.version_info < (3, 9):
|
56
|
+
raise RuntimeError("Python >= 3.9 must be used to run SIERRA!")
|
57
57
|
|
58
58
|
# Check packages
|
59
59
|
if sys.platform == "linux":
|
60
60
|
if pkg_checks:
|
61
61
|
_linux_pkg_checks()
|
62
|
-
elif sys.platform ==
|
62
|
+
elif sys.platform == "darwin":
|
63
63
|
if pkg_checks:
|
64
64
|
_osx_pkg_checks()
|
65
65
|
else:
|
@@ -67,33 +67,48 @@ def startup_checks(pkg_checks: bool) -> None:
|
|
67
67
|
|
68
68
|
|
69
69
|
def _linux_pkg_checks() -> None:
|
70
|
-
"""Check that all the packages required by SIERRA are installed on Linux.
|
71
|
-
|
72
|
-
|
73
|
-
import distro # will fail on OSX
|
70
|
+
"""Check that all the packages required by SIERRA are installed on Linux."""
|
71
|
+
# This will fail on OSX if at global scope
|
72
|
+
import distro # pylint: disable=import-outside-toplevel
|
74
73
|
|
75
74
|
dist = distro.id()
|
76
75
|
os_info = distro.os_release_info()
|
77
|
-
if any(
|
78
|
-
|
76
|
+
if any(
|
77
|
+
candidate in os_info["id"] for candidate in ["debian", "ubuntu", "linuxmint"]
|
78
|
+
):
|
79
79
|
_apt_pkg_checks(dist)
|
80
80
|
else:
|
81
|
-
logging.warning(
|
82
|
-
|
83
|
-
|
84
|
-
logging.warning(
|
85
|
-
|
81
|
+
logging.warning(
|
82
|
+
"Unknown Linux distro '%s' detected: skipping package check", dist
|
83
|
+
)
|
84
|
+
logging.warning(
|
85
|
+
(
|
86
|
+
"If SIERRA crashes it might be because you don't have "
|
87
|
+
"all the required packages installed"
|
88
|
+
)
|
89
|
+
)
|
86
90
|
|
87
91
|
|
88
92
|
def _apt_pkg_checks(dist: str) -> None:
|
93
|
+
if sys.prefix != sys.base_prefix:
|
94
|
+
logging.debug("Running in virtual environment")
|
89
95
|
try:
|
90
|
-
|
96
|
+
# This will fail on OSX if at global scope
|
97
|
+
import apt # pytype: disable=import-error # pylint: disable=import-outside-toplevel
|
91
98
|
|
92
99
|
except ImportError:
|
93
|
-
logging.warning(
|
94
|
-
|
95
|
-
|
96
|
-
|
100
|
+
logging.warning(
|
101
|
+
"Failed to import apt python module: Cannot check for required .deb packages."
|
102
|
+
)
|
103
|
+
logging.warning(
|
104
|
+
(
|
105
|
+
"This can happen when:\n"
|
106
|
+
"- Running in a venv where the python version != system python "
|
107
|
+
"version.\n"
|
108
|
+
"- No apt python module is installed at the system/user level "
|
109
|
+
"outside the venv."
|
110
|
+
)
|
111
|
+
)
|
97
112
|
return
|
98
113
|
|
99
114
|
cache = apt.Cache()
|
@@ -104,50 +119,65 @@ def _apt_pkg_checks(dist: str) -> None:
|
|
104
119
|
if pkg not in cache or not cache[pkg].is_installed:
|
105
120
|
missing.append(pkg)
|
106
121
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
122
|
+
if missing:
|
123
|
+
if required:
|
124
|
+
raise RuntimeError(
|
125
|
+
(
|
126
|
+
f"Required .deb packages {missing} missing on "
|
127
|
+
f"Linux distribution '{dist}'. Install all "
|
128
|
+
"required packages before running SIERRA! "
|
129
|
+
'(Did you read the "Getting Started" docs?)'
|
130
|
+
)
|
131
|
+
)
|
132
|
+
|
133
|
+
logging.debug(
|
134
|
+
(
|
135
|
+
"Recommended .deb packages %s missing on Linux "
|
136
|
+
"distribution '%s'. Some SIERRA functionality will "
|
137
|
+
"not be available. "
|
138
|
+
),
|
139
|
+
missing,
|
140
|
+
dist,
|
141
|
+
)
|
119
142
|
|
120
143
|
|
121
144
|
def _osx_pkg_checks() -> None:
|
122
|
-
"""Check that all the packages required by SIERRA are installed on OSX.
|
123
|
-
|
124
|
-
"""
|
145
|
+
"""Check that all the packages required by SIERRA are installed on OSX."""
|
125
146
|
missing = []
|
126
147
|
|
127
148
|
for pkg, required in kOSXPackages.pkgs.items():
|
128
|
-
logging.trace("Checking for homebrew package '%s'",
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
149
|
+
logging.trace("Checking for homebrew package '%s'", pkg) # type: ignore
|
150
|
+
p1 = subprocess.Popen(
|
151
|
+
f"brew list | grep {pkg}",
|
152
|
+
shell=True,
|
153
|
+
stderr=subprocess.DEVNULL,
|
154
|
+
stdout=subprocess.DEVNULL,
|
155
|
+
)
|
156
|
+
p2 = subprocess.Popen(
|
157
|
+
f"brew list --cask | grep {pkg}",
|
158
|
+
shell=True,
|
159
|
+
stderr=subprocess.DEVNULL,
|
160
|
+
stdout=subprocess.DEVNULL,
|
161
|
+
)
|
138
162
|
p1.wait()
|
139
163
|
p2.wait()
|
140
164
|
|
141
165
|
if p1.returncode != 0 and p2.returncode != 0:
|
142
166
|
missing.append(pkg)
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
167
|
+
if required:
|
168
|
+
raise RuntimeError(
|
169
|
+
(
|
170
|
+
f"Required brew package {missing} missing on "
|
171
|
+
"OSX. Install all required packages before "
|
172
|
+
'running SIERRA! (Did you read the "Getting '
|
173
|
+
'Started" docs?)'
|
174
|
+
)
|
175
|
+
)
|
176
|
+
|
177
|
+
logging.debug(
|
178
|
+
(
|
179
|
+
"Recommended brew package %s missing on OSX. "
|
180
|
+
"Some SIERRA functionality will not be available."
|
181
|
+
),
|
182
|
+
pkg,
|
183
|
+
)
|
sierra/core/stat_kernels.py
CHANGED
@@ -21,8 +21,8 @@ class conf95:
|
|
21
21
|
|
22
22
|
Applicable to:
|
23
23
|
|
24
|
-
- :
|
25
|
-
- :
|
24
|
+
- :func:`~sierra.core.graphs.stacked_line`
|
25
|
+
- :func:`~sierra.core.graphs.summary_line`
|
26
26
|
|
27
27
|
"""
|
28
28
|
@staticmethod
|
@@ -65,8 +65,7 @@ class bw:
|
|
65
65
|
|
66
66
|
Applicable to:
|
67
67
|
|
68
|
-
- :
|
69
|
-
- :class:`~sierra.core.graphs.summary_line_graph.SummaryLineGraph`
|
68
|
+
- :func:`~sierra.core.graphs.summary_line`
|
70
69
|
"""
|
71
70
|
@staticmethod
|
72
71
|
def from_groupby(groupby: pd.core.groupby.generic.DataFrameGroupBy) -> tp.Dict[str, pd.DataFrame]:
|
@@ -162,7 +161,7 @@ def _fillna(df_like: tp.Union[pd.DataFrame, np.float64, float]) -> tp.Union[pd.D
|
|
162
161
|
raise TypeError(f"Unknown type={type(df_like)}, value={df_like}")
|
163
162
|
|
164
163
|
|
165
|
-
|
164
|
+
__all__ = [
|
166
165
|
'conf95',
|
167
166
|
'mean',
|
168
167
|
'bw'
|
sierra/core/storage.py
CHANGED
@@ -2,55 +2,36 @@
|
|
2
2
|
#
|
3
3
|
# SPDX-License-Identifier: MIT
|
4
4
|
"""
|
5
|
-
|
5
|
+
Trampoline bindings for the various storage plugins that come with SIERRA.
|
6
6
|
|
7
|
-
See :ref:`
|
7
|
+
See :ref:`tutorials/plugin/storage` for more details.
|
8
8
|
"""
|
9
9
|
|
10
10
|
# Core packages
|
11
11
|
import pathlib
|
12
|
-
import typing as tp
|
13
12
|
|
14
13
|
# 3rd party packages
|
15
14
|
import pandas as pd
|
16
15
|
|
17
16
|
# Project packages
|
18
|
-
import sierra.core.
|
17
|
+
import sierra.core.plugin as pm
|
18
|
+
from sierra.core.trampoline import cmdline_parser # noqa: F401
|
19
19
|
|
20
20
|
|
21
|
-
|
21
|
+
def df_read(path: pathlib.Path, medium: str, **kwargs) -> pd.DataFrame:
|
22
22
|
"""
|
23
|
-
|
23
|
+
Dispatch "read from storage" request to active ``--storage`` plugin.
|
24
24
|
"""
|
25
|
+
storage = pm.pipeline.get_plugin_module(medium)
|
26
|
+
return storage.df_read(path, **kwargs) # type: ignore
|
25
27
|
|
26
|
-
def __init__(self, medium: str):
|
27
|
-
self.medium = medium
|
28
28
|
|
29
|
-
|
30
|
-
df: pd.DataFrame,
|
31
|
-
path: tp.Union[pathlib.Path, str],
|
32
|
-
**kwargs) -> None:
|
33
|
-
storage = pm.pipeline.get_plugin_module(self.medium)
|
34
|
-
return storage.df_write(df, path, **kwargs) # type: ignore
|
35
|
-
|
36
|
-
|
37
|
-
class DataFrameReader():
|
29
|
+
def df_write(df: pd.DataFrame, path: pathlib.Path, medium: str, **kwargs) -> None:
|
38
30
|
"""
|
39
|
-
|
40
|
-
|
31
|
+
Dispatch "write to storage" request to active ``--storage`` plugin.
|
41
32
|
"""
|
42
|
-
|
43
|
-
|
44
|
-
self.medium = medium
|
45
|
-
|
46
|
-
def __call__(self,
|
47
|
-
path: tp.Union[pathlib.Path, str],
|
48
|
-
**kwargs) -> pd.DataFrame:
|
49
|
-
storage = pm.pipeline.get_plugin_module(self.medium)
|
50
|
-
return storage.df_read(path, **kwargs) # type: ignore
|
33
|
+
storage = pm.pipeline.get_plugin_module(medium)
|
34
|
+
return storage.df_write(df, path, **kwargs) # type: ignore
|
51
35
|
|
52
36
|
|
53
|
-
|
54
|
-
'DataFrameWriter',
|
55
|
-
'DataFrameReader'
|
56
|
-
]
|
37
|
+
__all__ = ["df_read", "df_write"]
|