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,6 +1,9 @@
1
1
  # Copyright 2020 John Harwell, All rights reserved.
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
+ """
5
+ Contains experiment specification bits in the interest of DRY.
6
+ """
4
7
 
5
8
  # Core packages
6
9
  import typing as tp
@@ -13,64 +16,66 @@ import pathlib
13
16
  import sierra.core.variables.batch_criteria as bc
14
17
  from sierra.core.utils import ArenaExtent
15
18
  from sierra.core.vector import Vector3D
16
- import sierra.core.plugin_manager as pm
19
+ import sierra.core.plugin as pm
17
20
  from sierra.core import types, config
18
- from sierra.core.experiment import xml
21
+ from sierra.core.experiment import definition
19
22
 
20
23
 
21
- class SimpleBatchScaffoldSpec():
22
- def __init__(self,
23
- criteria: bc.BatchCriteria,
24
- log: bool = False) -> None:
24
+ class SimpleBatchScaffoldSpec:
25
+ def __init__(self, criteria: bc.XVarBatchCriteria, log: bool = False) -> None:
25
26
  self.criteria = criteria
26
27
  self.chgs = criteria.gen_attr_changelist()
27
- self.adds = criteria.gen_tag_addlist()
28
+ self.adds = criteria.gen_element_addlist()
28
29
  self.rms = criteria.gen_tag_rmlist()
29
30
  self.logger = logging.getLogger(__name__)
30
-
31
31
  self.n_exps = 0
32
32
 
33
33
  self.mods = []
34
34
  self.is_compound = False
35
35
 
36
- assert len(self.rms) == 0,\
37
- "Batch criteria cannot remove XML tags"
36
+ assert len(self.rms) == 0, "Batch criteria cannot remove expdef elements"
38
37
 
39
38
  if self.chgs:
40
39
  self.mods = self.chgs
41
40
  self.n_exps = len(self.chgs)
42
41
  if log:
43
- self.logger.info(("Calculating scaffold: cli='%s': Modify %s "
44
- "XML tags per experiment"),
45
- self.criteria.cli_arg,
46
- len(self.chgs[0]))
42
+ self.logger.info(
43
+ (
44
+ "Executing scaffold: cli=%s: modify %s "
45
+ "expdef elements per experiment"
46
+ ),
47
+ self.criteria.name,
48
+ len(self.chgs[0]),
49
+ )
47
50
  elif self.adds:
48
51
  self.mods = self.adds
49
52
  self.n_exps = len(self.adds)
50
53
  if log:
51
- self.logger.info(("Calculating scaffold: cli='%s': Add %s XML "
52
- "tags per experiment"),
53
- self.criteria.cli_arg,
54
- len(self.adds[0]))
54
+ self.logger.info(
55
+ (
56
+ "Executing scaffold: cli=%s: Add %s expdef "
57
+ "elements per experiment"
58
+ ),
59
+ self.criteria.name,
60
+ len(self.adds[0]),
61
+ )
55
62
  else:
56
- raise RuntimeError(("This spec can't be used with compound "
57
- "scaffolding"))
63
+ raise RuntimeError(("This spec can't be used with compound scaffolding"))
58
64
 
59
- def __iter__(self) -> tp.Iterator[tp.Union[xml.AttrChangeSet,
60
- xml.TagAddList]]:
65
+ def __iter__(
66
+ self,
67
+ ) -> tp.Iterator[tp.Union[definition.AttrChangeSet, definition.ElementAddList]]:
61
68
  return iter(self.mods)
62
69
 
63
70
  def __len__(self) -> int:
64
71
  return self.n_exps
65
72
 
66
73
 
67
- class CompoundBatchScaffoldSpec():
68
- def __init__(self,
69
- criteria: bc.BatchCriteria,
70
- log: bool = False) -> None:
74
+ class CompoundBatchScaffoldSpec:
75
+ def __init__(self, criteria: bc.XVarBatchCriteria, log: bool = False) -> None:
71
76
  self.criteria = criteria
72
77
  self.chgs = criteria.gen_attr_changelist()
73
- self.adds = criteria.gen_tag_addlist()
78
+ self.adds = criteria.gen_element_addlist()
74
79
  self.rms = criteria.gen_tag_rmlist()
75
80
  self.logger = logging.getLogger(__name__)
76
81
 
@@ -79,8 +84,7 @@ class CompoundBatchScaffoldSpec():
79
84
  self.is_compound = True
80
85
  self.mods = []
81
86
 
82
- assert len(self.rms) == 0,\
83
- "Batch criteria cannot remove XML tags"
87
+ assert len(self.rms) == 0, "Batch criteria cannot remove expdef elements"
84
88
 
85
89
  if self.chgs and self.adds:
86
90
  for addlist in self.adds:
@@ -90,22 +94,25 @@ class CompoundBatchScaffoldSpec():
90
94
  self.n_exps += 1
91
95
 
92
96
  if log:
93
- self.logger.info(("Calculating scaffold: cli='%s': Add "
94
- "%s XML tags AND modify %s XML tags per "
95
- "per experiment"),
96
- self.criteria.cli_arg,
97
- len(self.adds[0]),
98
- len(self.chgs[0]))
97
+ self.logger.info(
98
+ (
99
+ "Executing scaffold: cli=%s: Add "
100
+ "%s expdef elements AND modify %s expdef "
101
+ "elements per experiment"
102
+ ),
103
+ self.criteria.name,
104
+ len(self.adds[0]),
105
+ len(self.chgs[0]),
106
+ )
99
107
 
100
108
  else:
101
- raise RuntimeError(("This spec can only be used with compound "
102
- "scaffolding"))
109
+ raise RuntimeError(("This spec can only be used with compound scaffolding"))
103
110
 
104
111
  def __len__(self) -> int:
105
112
  return self.n_exps
106
113
 
107
114
 
108
- class ExperimentSpec():
115
+ class ExperimentSpec:
109
116
  """
110
117
  The specification for a single experiment with a batch.
111
118
 
@@ -123,72 +130,63 @@ class ExperimentSpec():
123
130
  - Full scenario name
124
131
  """
125
132
 
126
- def __init__(self,
127
- criteria: bc.IConcreteBatchCriteria,
128
- exp_num: int,
129
- cmdopts: types.Cmdopts) -> None:
133
+ def __init__(
134
+ self,
135
+ criteria: bc.XVarBatchCriteria,
136
+ batch_input_root: pathlib.Path,
137
+ exp_num: int,
138
+ cmdopts: types.Cmdopts,
139
+ ) -> None:
130
140
  self.exp_num = exp_num
131
- exp_name = criteria.gen_exp_names(cmdopts)[exp_num]
141
+ exp_name = criteria.gen_exp_names()[exp_num]
132
142
 
133
- self.exp_input_root = pathlib.Path(cmdopts['batch_input_root'], exp_name)
143
+ self.exp_input_root = batch_input_root / exp_name
134
144
  self.exp_def_fpath = self.exp_input_root / config.kPickleLeaf
135
145
 
136
146
  self.logger = logging.getLogger(__name__)
137
147
  self.criteria = criteria
138
148
 
139
- from_bivar_bc1 = False
140
- from_bivar_bc2 = False
141
- from_univar_bc = False
142
-
143
- if criteria.is_bivar():
144
- bivar = tp.cast(bc.BivarBatchCriteria, criteria)
145
- from_bivar_bc1 = hasattr(bivar.criteria1,
146
- 'exp_scenario_name')
147
- from_bivar_bc2 = hasattr(bivar.criteria2,
148
- 'exp_scenario_name')
149
- else:
150
- from_univar_bc = hasattr(criteria,
151
- 'exp_scenario_name')
152
-
153
149
  # Need to get per-experiment arena dimensions from batch criteria, as
154
150
  # they might be different for each experiment
155
- if from_univar_bc:
156
- self.arena_dim = criteria.arena_dims(cmdopts)[exp_num]
157
- self.scenario_name = criteria.exp_scenario_name(exp_num)
158
- self.logger.debug("Read scenario dimensions '%s' from univariate batch criteria",
159
- self.arena_dim)
160
- elif from_bivar_bc1 or from_bivar_bc2:
161
- self.arena_dim = criteria.arena_dims(cmdopts)[exp_num]
162
- self.logger.debug("Read scenario dimensions '%s' bivariate batch criteria",
163
- self.arena_dim)
164
- self.scenario_name = criteria.exp_scenario_name(exp_num)
165
-
151
+ if self.criteria.computable_exp_scenario_name():
152
+ self.arena_dim = self.criteria.arena_dims(cmdopts)[exp_num]
153
+ self.scenario_name = self.criteria.exp_scenario_name(exp_num)
154
+ self.logger.debug(
155
+ "Read scenario dimensions '%s' from batch criteria",
156
+ self.arena_dim,
157
+ )
166
158
  else: # Default case: scenario dimensions read from cmdline
167
- sgp = pm.module_load_tiered(project=cmdopts['project'],
168
- path='generators.scenario_generator_parser')
169
- kw = sgp.ScenarioGeneratorParser().to_dict(cmdopts['scenario'])
159
+ module = pm.module_load_tiered(
160
+ project=cmdopts["project"], path="generators.scenario"
161
+ )
162
+ kw = module.to_dict(cmdopts["scenario"])
170
163
  self.arena_dim = ArenaExtent(
171
- Vector3D(kw['arena_x'], kw['arena_y'], kw['arena_z']))
172
- self.logger.debug("Read scenario dimensions %s from cmdline spec",
173
- self.arena_dim)
164
+ Vector3D(kw["arena_x"], kw["arena_y"], kw["arena_z"])
165
+ )
166
+ self.logger.debug(
167
+ "Read scenario dimensions %s from cmdline spec", self.arena_dim
168
+ )
174
169
 
175
- self.scenario_name = cmdopts['scenario']
170
+ self.scenario_name = cmdopts["scenario"]
176
171
 
177
172
 
178
- def scaffold_spec_factory(criteria: bc.BatchCriteria,
179
- **kwargs) -> tp.Union[SimpleBatchScaffoldSpec,
180
- CompoundBatchScaffoldSpec]:
173
+ def scaffold_spec_factory(
174
+ criteria: bc.XVarBatchCriteria, **kwargs
175
+ ) -> tp.Union[SimpleBatchScaffoldSpec, CompoundBatchScaffoldSpec]:
181
176
  chgs = criteria.gen_attr_changelist()
182
- adds = criteria.gen_tag_addlist()
177
+ adds = criteria.gen_element_addlist()
183
178
 
184
179
  if chgs and adds:
185
- logging.debug("Create compound batch experiment scaffolding for '%s'",
186
- criteria.cli_arg)
180
+ logging.debug(
181
+ "Create compound batch experiment scaffolding spec for '%s'",
182
+ criteria.name,
183
+ )
187
184
  return CompoundBatchScaffoldSpec(criteria, **kwargs)
188
185
  else:
189
- logging.debug("Create simple batch experiment scaffolding for '%s'",
190
- criteria.cli_arg)
186
+ logging.debug(
187
+ "Create simple batch experiment scaffolding spec for '%s'", criteria.name
188
+ )
191
189
  return SimpleBatchScaffoldSpec(criteria, **kwargs)
192
190
 
193
191
 
194
- __api__ = ['ExperimentSpec']
192
+ __all__ = ["ExperimentSpec"]
sierra/core/exproot.py ADDED
@@ -0,0 +1,44 @@
1
+ #
2
+ # Copyright 2024 John Harwell, All rights reserved.
3
+ #
4
+ # SPDX-License Identifier: MIT
5
+ #
6
+ """
7
+ Container module for functionality for managing paths used by SIERRA.
8
+ """
9
+
10
+ # Core packages
11
+ import typing as tp
12
+
13
+ # 3rd party packages
14
+
15
+ # Project packages
16
+ from sierra.core import batchroot
17
+
18
+
19
+ class PathSet():
20
+ """
21
+ The set of filesystem paths under the per-experiment root that SIERRA uses.
22
+
23
+ Collected here in the interest of DRY.
24
+ """
25
+
26
+ def __init__(self,
27
+ batch: batchroot.PathSet,
28
+ exp_name: str,
29
+ exp0_name: tp.Optional[str] = None) -> None:
30
+ self.input_root = batch.input_root / exp_name
31
+ self.output_root = batch.output_root / exp_name
32
+ self.graph_root = batch.graph_root / exp_name
33
+ self.model_root = batch.model_root / exp_name
34
+ self.stat_root = batch.stat_root / exp_name
35
+ self.parent = batch.root
36
+
37
+ if exp0_name:
38
+ self.exp0_output_root = batch.output_root / exp0_name
39
+ self.exp0_stat_root = batch.stat_root / exp0_name
40
+
41
+
42
+ __all__ = [
43
+ "PathSet"
44
+ ]
@@ -0,0 +1,10 @@
1
+ # Copyright 2021 John Harwell, All rights reserved.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+ """Container module for things related to generators."""
5
+
6
+ # Core packages
7
+
8
+ # 3rd party packages
9
+
10
+ # Project packages