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,102 +0,0 @@
1
- # Copyright 2020 John Harwell, All rights reserved.
2
- #
3
- # SPDX-License-Identifier: MIT
4
- """Classes for the population size batch criteria.
5
-
6
- See :ref:`ln-sierra-platform-argos-bc-population-size` for usage documentation.
7
-
8
- """
9
-
10
- # Core packages
11
- import typing as tp
12
- import pathlib
13
-
14
- # 3rd party packages
15
- import implements
16
-
17
- # Project packages
18
- from sierra.core.variables import batch_criteria as bc
19
- from sierra.core.experiment import xml
20
- from sierra.core import types
21
- from sierra.core.variables import population_size
22
-
23
-
24
- @implements.implements(bc.IConcreteBatchCriteria)
25
- @implements.implements(bc.IQueryableBatchCriteria)
26
- class PopulationSize(population_size.BasePopulationSize):
27
- """A univariate range of swarm sizes used to define batch experiments.
28
-
29
- This class is a base class which should (almost) never be used on its
30
- own. Instead, the ``factory()`` function should be used to dynamically
31
- create derived classes expressing the user's desired size distribution.
32
-
33
- Note: Usage of this class assumes homogeneous swarms.
34
-
35
- Attributes:
36
-
37
- size_list: List of integer swarm sizes defining the range of the
38
- variable for the batch experiment.
39
-
40
- """
41
-
42
- @staticmethod
43
- def gen_attr_changelist_from_list(sizes: tp.List[int]) -> tp.List[xml.AttrChangeSet]:
44
- return [xml.AttrChangeSet(xml.AttrChange(".//arena/distribute/entity",
45
- "quantity",
46
- str(s)))
47
- for s in sizes]
48
-
49
- def __init__(self,
50
- cli_arg: str,
51
- main_config: types.YAMLDict,
52
- batch_input_root: pathlib.Path,
53
- size_list: tp.List[int]) -> None:
54
- population_size.BasePopulationSize.__init__(self,
55
- cli_arg,
56
- main_config,
57
- batch_input_root)
58
- self.size_list = size_list
59
- self.attr_changes = [] # type: tp.List[xml.AttrChangeSet]
60
-
61
- def gen_attr_changelist(self) -> tp.List[xml.AttrChangeSet]:
62
- """
63
- Generate list of sets of changes for swarm sizes to define a batch experiment.
64
- """
65
- if not self.attr_changes:
66
- self.attr_changes = PopulationSize.gen_attr_changelist_from_list(
67
- self.size_list)
68
- return self.attr_changes
69
-
70
- def gen_exp_names(self, cmdopts: types.Cmdopts) -> tp.List[str]:
71
- changes = self.gen_attr_changelist()
72
- return ['exp' + str(x) for x in range(0, len(changes))]
73
-
74
- def n_robots(self, exp_num: int) -> int:
75
- return self.size_list[exp_num]
76
-
77
-
78
- def factory(cli_arg: str,
79
- main_config: types.YAMLDict,
80
- cmdopts: types.Cmdopts,
81
- **kwargs) -> PopulationSize:
82
- """Create a :class:`PopulationSize` derived class from the cmdline definition.
83
-
84
- """
85
- parser = population_size.Parser()
86
- max_sizes = parser.to_sizes(parser(cli_arg))
87
-
88
- def __init__(self) -> None:
89
- PopulationSize.__init__(self,
90
- cli_arg,
91
- main_config,
92
- cmdopts['batch_input_root'],
93
- max_sizes)
94
-
95
- return type(cli_arg, # type: ignore
96
- (PopulationSize,),
97
- {"__init__": __init__})
98
-
99
-
100
- __api__ = [
101
- 'PopulationSize'
102
- ]
@@ -1,132 +0,0 @@
1
- # Copyright 2021 John Harwell, All rights reserved.
2
- #
3
- # SPDX-License-Identifier: MIT
4
- #
5
- """Classes for the variable population density batch criteria.
6
-
7
- See :ref:`ln-sierra-platform-argos-bc-population-variable-density` for usage
8
- documentation.
9
-
10
- """
11
-
12
- # Core packages
13
- import typing as tp
14
- import logging
15
- import numpy as np
16
-
17
- # 3rd party packages
18
- import implements
19
-
20
- # Project packages
21
- from sierra.core.variables import variable_density as vd
22
- import sierra.core.variables.batch_criteria as bc
23
- from sierra.core.vector import Vector3D
24
- from sierra.core.experiment import xml
25
- from sierra.core import types, utils
26
-
27
-
28
- @implements.implements(bc.IConcreteBatchCriteria)
29
- class PopulationVariableDensity(vd.VariableDensity):
30
- """Defines XML changes for variable population density within a single arena.
31
-
32
- This class is a base class which should (almost) never be used on its
33
- own. Instead, the ``factory()`` function should be used to dynamically
34
- create derived classes expressing the user's desired density ranges.
35
-
36
- """
37
-
38
- def __init__(self, *args, **kwargs) -> None:
39
- vd.VariableDensity.__init__(self, *args, **kwargs)
40
- self.already_added = False
41
- self.logger = logging.getLogger(__name__)
42
-
43
- def gen_attr_changelist(self) -> tp.List[xml.AttrChangeSet]:
44
- """Generate XML modifications to achieve the desired population densities.
45
-
46
- Robots are approximated as point masses.
47
-
48
- """
49
- if not self.already_added:
50
- for density in self.densities:
51
- # ARGoS won't start if there are 0 robots, so you always
52
- # need to put at least 1.
53
- n_robots = int(self.extent.area() * (density / 100.0))
54
- if n_robots == 0:
55
- n_robots = 1
56
- self.logger.warning("n_robots set to 1 even though \
57
- calculated as 0 for area=%d,density=%s",
58
- self.extent.area(),
59
- density)
60
- changeset = xml.AttrChangeSet(xml.AttrChange(".//arena/distribute/entity",
61
- "quantity",
62
- str(n_robots)))
63
- self.attr_changes.append(changeset)
64
- self.logger.debug("Calculated swarm size=%d for extent=%s,density=%s",
65
- n_robots,
66
- str(self.extent),
67
- density)
68
-
69
- self.already_added = True
70
-
71
- return self.attr_changes
72
-
73
- def gen_exp_names(self, cmdopts: types.Cmdopts) -> tp.List[str]:
74
- changes = self.gen_attr_changelist()
75
- return ['exp' + str(x) for x in range(0, len(changes))]
76
-
77
- def graph_xticks(self,
78
- cmdopts: types.Cmdopts,
79
- exp_names: tp.Optional[tp.List[str]] = None) -> tp.List[float]:
80
-
81
- if exp_names is None:
82
- exp_names = self.gen_exp_names(cmdopts)
83
-
84
- return [p / self.extent.area() for p in self.populations(cmdopts, exp_names)]
85
-
86
- def graph_xticklabels(self,
87
- cmdopts: types.Cmdopts,
88
- exp_names: tp.Optional[tp.List[str]] = None) -> tp.List[str]:
89
- return list(map(lambda x: str(round(x, 4)),
90
- self.graph_xticks(cmdopts, exp_names)))
91
-
92
- def graph_xlabel(self, cmdopts: types.Cmdopts) -> str:
93
- return r"Population Density"
94
-
95
- def n_robots(self, exp_num: int) -> int:
96
- return int(self.extent.area() * self.densities[exp_num] / 100.0)
97
-
98
-
99
- def factory(cli_arg: str,
100
- main_config: types.YAMLDict,
101
- cmdopts: types.Cmdopts,
102
- **kwargs) -> PopulationVariableDensity:
103
- """
104
- Create a :class:`PopulationVariableDensity` derived class.
105
- """
106
- attr = vd.Parser()(cli_arg)
107
- kw = utils.gen_scenario_spec(cmdopts, **kwargs)
108
-
109
- extent = utils.ArenaExtent(Vector3D(kw['arena_x'],
110
- kw['arena_y'],
111
- kw['arena_z']))
112
-
113
- densities = list(x for x in np.linspace(attr['density_min'],
114
- attr['density_max'],
115
- num=attr['cardinality']))
116
-
117
- def __init__(self) -> None:
118
- PopulationVariableDensity.__init__(self,
119
- cli_arg,
120
- main_config,
121
- cmdopts['batch_input_root'],
122
- densities,
123
- extent)
124
-
125
- return type(cli_arg, # type: ignore
126
- (PopulationVariableDensity,),
127
- {"__init__": __init__})
128
-
129
-
130
- __api__ = [
131
- 'PopulationVariableDensity'
132
- ]
@@ -1,104 +0,0 @@
1
- # Copyright 2021 John Harwell, All rights reserved.
2
- #
3
- # SPDX-License-Identifier: MIT
4
-
5
- """
6
- ARGoS headless QT rendering configuration.
7
- """
8
-
9
- # Core packages
10
- import typing as tp
11
-
12
- # 3rd party packages
13
- import implements
14
-
15
- # Project packages
16
- from sierra.core.variables.base_variable import IBaseVariable
17
- from sierra.core.experiment import xml
18
- import sierra.core.config
19
- from sierra.core import types
20
-
21
- import sierra.plugins.platform.argos.variables.exp_setup as exp
22
-
23
-
24
- @implements.implements(IBaseVariable)
25
- class ARGoSQTHeadlessRendering():
26
- """
27
- Sets up ARGoS headless rendering with QT.
28
-
29
- Attributes:
30
-
31
- tsetup: Simulation time definitions.
32
-
33
- extents: List of (X,Y,Zs) tuple of dimensions of area to assign to
34
- engines of the specified type.
35
- """
36
-
37
- kFrameSize = "1600x1200"
38
- kQUALITY = 100
39
- kFRAME_RATE = 10
40
-
41
- def __init__(self, setup: exp.ExpSetup) -> None:
42
- self.setup = setup
43
- self.tag_adds = [] # type: tp.List[xml.TagAddList]
44
-
45
- def gen_attr_changelist(self) -> tp.List[xml.AttrChangeSet]:
46
- """
47
- No effect.
48
-
49
- All tags/attributes are either deleted or added.
50
- """
51
- return []
52
-
53
- def gen_tag_rmlist(self) -> tp.List[xml.TagRmList]:
54
- """Remove the ``<qt_opengl>`` tag if it exists.
55
-
56
- Obviously you *must* call this function BEFORE adding new definitions.
57
-
58
- """
59
- return [xml.TagRmList(xml.TagRm("./visualization", "qt-opengl"))]
60
-
61
- def gen_tag_addlist(self) -> tp.List[xml.TagAddList]:
62
- if not self.tag_adds:
63
- self.tag_adds = [xml.TagAddList(xml.TagAdd('.',
64
- 'visualization',
65
- {},
66
- False),
67
- xml.TagAdd('./visualization',
68
- 'qt-opengl',
69
- {'autoplay': "true"},
70
- False
71
- ),
72
- xml.TagAdd('./visualization/qt-opengl',
73
- 'frame_grabbing',
74
- {
75
- 'directory': 'frames',
76
- 'base_name': 'frame_',
77
- 'format': sierra.core.config.kImageExt[1:],
78
- 'headless_grabbing': "true",
79
- 'headless_frame_size': "{0}".format(self.kFrameSize),
80
- 'headless_frame_rate': "{0}".format(self.kFRAME_RATE),
81
- },
82
- False),
83
- xml.TagAdd('visualization/qt-opengl',
84
- 'user_functions',
85
- {'label': '__EMPTY__'},
86
- False))]
87
-
88
- return self.tag_adds
89
-
90
- def gen_files(self) -> None:
91
- pass
92
-
93
-
94
- def factory(cmdopts: types.Cmdopts) -> ARGoSQTHeadlessRendering:
95
- """Set up QT headless rendering for the specified experimental setup.
96
-
97
- """
98
-
99
- return ARGoSQTHeadlessRendering(exp.factory(cmdopts["exp_setup"]))
100
-
101
-
102
- __api__ = [
103
- 'ARGoSQTHeadlessRendering',
104
- ]
@@ -1,9 +0,0 @@
1
- # Copyright 2021 John Harwell, All rights reserved.
2
- #
3
- # SPDX-License-Identifier: MIT
4
-
5
- # Core packages
6
-
7
- # 3rd party packages
8
-
9
- # Project packages
@@ -1,213 +0,0 @@
1
- # Copyright 2021 John Harwell, All rights reserved.
2
- #
3
- # SPDX-License-Identifier: MIT
4
- #
5
- """
6
- Command line parsing and validation for the :term:`ROS1+Gazebo` platform.
7
- """
8
-
9
- # Core packages
10
- import typing as tp
11
- import argparse
12
-
13
- # 3rd party packages
14
-
15
- # Project packages
16
- from sierra.core import types
17
- from sierra.core import config
18
- import sierra.core.cmdline as corecmd
19
- from sierra.core import hpc, ros1
20
-
21
-
22
- class PlatformCmdline(corecmd.BaseCmdline):
23
- """Defines :term:`ROS1+Gazebo` extensions to :class:`~sierra.core.cmdline.CoreCmdline`.
24
-
25
- """
26
-
27
- def __init__(self,
28
- parents: tp.Optional[tp.List[argparse.ArgumentParser]],
29
- stages: tp.List[int]) -> None:
30
-
31
- if parents is not None:
32
- self.parser = argparse.ArgumentParser(parents=parents,
33
- add_help=False,
34
- allow_abbrev=False)
35
- else:
36
- self.parser = argparse.ArgumentParser(add_help=False,
37
- allow_abbrev=False)
38
-
39
- self.scaffold_cli()
40
- self.init_cli(stages)
41
-
42
- def scaffold_cli(self) -> None:
43
- self.stage1_exp = self.parser.add_argument_group('Stage1: Experiment setup')
44
- self.stage1_physics = self.parser.add_argument_group(
45
- 'Stage1: Configuring Gazebo physics engines')
46
-
47
- def init_cli(self, stages: tp.List[int]) -> None:
48
- if 1 in stages:
49
- self.init_stage1()
50
-
51
- def init_stage1(self) -> None:
52
- # Experiment options
53
- positions_omitted_doc = ("If omitted: effective arena dimensions must "
54
- "be given as part of ``--scenario``.")
55
-
56
- self.stage1_exp.add_argument("--robot-positions",
57
-
58
- help="""
59
-
60
- A list of space-separated "X,Y,Z" tuples
61
- (no quotes) passed on the command line as
62
- valid starting positions for the robots
63
- within the world.
64
-
65
- """ + self.stage_usage_doc([1],
66
- positions_omitted_doc),
67
- nargs='+',
68
- default=[])
69
-
70
- # Physics engines options
71
- self.stage1_physics.add_argument("--physics-engine-type",
72
- choices=['ode', 'bullet',
73
- 'dart', 'simbody'],
74
- help="""
75
-
76
- The type of 3D physics engine to use
77
- for managing spatial extents within the
78
- arena, choosing one of the types that
79
- :term:`Gazebo` supports. A single
80
- engine instance is used to manage all
81
- physics in the arena.
82
-
83
- """ + self.stage_usage_doc([1]),
84
- default='ode')
85
-
86
- self.stage1_physics.add_argument("--physics-iter-per-tick",
87
- type=int,
88
- help="""
89
-
90
- The # of iterations all physics engines
91
- should perform per tick each time the
92
- controller loops are run (the # of
93
- ticks per second for controller control
94
- loops is set via ``--exp-setup``).
95
-
96
- """ + self.stage_usage_doc([1]),
97
- default=config.kGazebo['physics_iter_per_tick'])
98
-
99
- self.stage1_physics.add_argument("--physics-n-threads",
100
- type=int,
101
- help="""
102
-
103
- Gazebo can group non-interacting
104
- entities into computational "islands"
105
- and do the physics updates for those
106
- islands in parallel each timestep
107
- (islands) are recomputed after each
108
- timestep). Gazebo can also parallelize
109
- the computation of velocity/position
110
- updates with the computation of
111
- resolving collisions (i.e., the
112
- timestep impulse results in one entity
113
- "inside" another). You can assign
114
- multiple threads to a pool for
115
- cumulative use for these two
116
- parallelization methods (threads will
117
- be allocated evenly between them). The
118
- point at which adding more threads will
119
- start to DECREASE performance depends
120
- on the complexity of your world, the
121
- number and type of robots in it, etc.,
122
- so don't just set this parameter to the
123
- # of cores for your machine as a
124
- default.
125
-
126
- From the Gazebo Parallel Physics
127
- Report, setting the pool size to the #
128
- robots/# joint trees in your simulation
129
- usually gives good results, as long as
130
- you have more cores available than you
131
- allocate to this pool (Gazebo has other
132
- threads too).
133
-
134
- This only applies if
135
- ``--physics-engine-type``\\=ode.
136
-
137
- A value of 0=no threads.
138
-
139
- """ + self.stage_usage_doc([1]),
140
- default=0)
141
-
142
- self.stage1_physics.add_argument("--physics-ec-threadpool",
143
- type=int,
144
- help="""
145
-
146
- Gazebo can parallelize the computation
147
- of velocity/position updates with the
148
- computation of resolving collisions
149
- (i.e., the timestep impulse results in
150
- one entity "inside" another). You can
151
- assign multiple threads to a pool for
152
- cumulative use for this purpose. The
153
- point at which adding more threads will
154
- start to DECREASE performance depends
155
- on the complexity of your world, the
156
- number and type of robots in it, etc.,
157
- so don't just set this parameter to the
158
- # of cores for your machine as a
159
- default.
160
-
161
- From the Gazebo Parallel Physics
162
- Report, setting the pool size to the #
163
- robots/#joint trees in your simulation
164
- usually gives good results, as long as
165
- you have more cores than than you
166
- allocate to physics (Gazebo has other
167
- threads too).
168
-
169
- This only applies if ``--physics-engine-type``\\=ode.
170
-
171
- A value of 0=no threads.
172
-
173
- """ + self.stage_usage_doc([1]),
174
- default=0)
175
-
176
- @staticmethod
177
- def cmdopts_update(cli_args: argparse.Namespace,
178
- cmdopts: types.Cmdopts) -> None:
179
- """Update cmdopts with ROS1+Gazebo-specific cmdline options.
180
-
181
- """
182
- hpc.cmdline.HPCCmdline.cmdopts_update(cli_args, cmdopts)
183
- ros1.cmdline.ROSCmdline.cmdopts_update(cli_args, cmdopts)
184
-
185
- updates = {
186
- # stage 1
187
- 'robot_positions': cli_args.robot_positions,
188
-
189
- 'physics_n_engines': 1, # Always 1 for gazebo...
190
- 'physics_n_threads': cli_args.physics_n_threads,
191
- 'physics_engine_type': cli_args.physics_engine_type,
192
- 'physics_iter_per_tick': cli_args.physics_iter_per_tick,
193
- }
194
-
195
- cmdopts.update(updates)
196
-
197
-
198
- class CmdlineValidator(corecmd.CoreCmdlineValidator):
199
- """
200
- Stub implementation.
201
- """
202
-
203
-
204
- def sphinx_cmdline_stage1():
205
- parent1 = hpc.cmdline.HPCCmdline([1]).parser
206
- parent2 = ros1.cmdline.ROSCmdline([1]).parser
207
- return PlatformCmdline([parent1, parent2], [1]).parser
208
-
209
-
210
- def sphinx_cmdline_stage2():
211
- parent1 = hpc.cmdline.HPCCmdline([2]).parser
212
- parent2 = ros1.cmdline.ROSCmdline([2]).parser
213
- return PlatformCmdline([parent1, parent2], [2]).parser