OSBModelValidation 0.2.18__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 (98) hide show
  1. OSBModelValidation-0.2.18.dist-info/METADATA +184 -0
  2. OSBModelValidation-0.2.18.dist-info/RECORD +98 -0
  3. OSBModelValidation-0.2.18.dist-info/WHEEL +5 -0
  4. OSBModelValidation-0.2.18.dist-info/entry_points.txt +2 -0
  5. OSBModelValidation-0.2.18.dist-info/top_level.txt +1 -0
  6. omv/__init__.py +8 -0
  7. omv/analyzers/__init__.py +21 -0
  8. omv/analyzers/activation.py +24 -0
  9. omv/analyzers/analyzer.py +80 -0
  10. omv/analyzers/dryrun.py +13 -0
  11. omv/analyzers/input_resistance.py +47 -0
  12. omv/analyzers/morphology.py +16 -0
  13. omv/analyzers/rates.py +97 -0
  14. omv/analyzers/resting.py +37 -0
  15. omv/analyzers/spikes.py +113 -0
  16. omv/analyzers/temperature.py +12 -0
  17. omv/analyzers/timeseries.py +57 -0
  18. omv/analyzers/utils/__init__.py +0 -0
  19. omv/analyzers/utils/filenode.py +73 -0
  20. omv/analyzers/utils/timeseries.py +293 -0
  21. omv/autogen.py +106 -0
  22. omv/common/__init__.py +0 -0
  23. omv/common/inout.py +154 -0
  24. omv/engines/__init__.py +53 -0
  25. omv/engines/arbor_.py +57 -0
  26. omv/engines/brian1.py +59 -0
  27. omv/engines/brian2_.py +57 -0
  28. omv/engines/eden_.py +63 -0
  29. omv/engines/engine.py +111 -0
  30. omv/engines/genesis.py +86 -0
  31. omv/engines/getarbor.py +15 -0
  32. omv/engines/getbrian1.py +42 -0
  33. omv/engines/getbrian2.py +17 -0
  34. omv/engines/geteden.py +17 -0
  35. omv/engines/getgenesis.py +56 -0
  36. omv/engines/getjlems.py +20 -0
  37. omv/engines/getjnml.py +48 -0
  38. omv/engines/getlibsbml.py +13 -0
  39. omv/engines/getmoose.py +15 -0
  40. omv/engines/getnest.py +62 -0
  41. omv/engines/getnetpyne.py +52 -0
  42. omv/engines/getneuroconstruct.py +31 -0
  43. omv/engines/getnml2.py +26 -0
  44. omv/engines/getnrn.py +60 -0
  45. omv/engines/getoctave.py +11 -0
  46. omv/engines/getpylems.py +13 -0
  47. omv/engines/getpyneuroml.py +14 -0
  48. omv/engines/getpynn.py +40 -0
  49. omv/engines/jlems.py +48 -0
  50. omv/engines/jneuroml.py +101 -0
  51. omv/engines/jneuromlbrian.py +65 -0
  52. omv/engines/jneuromlbrian2.py +61 -0
  53. omv/engines/jneuromleden.py +61 -0
  54. omv/engines/jneuromlmoose.py +63 -0
  55. omv/engines/jneuromlnetpyne.py +73 -0
  56. omv/engines/jneuromlnetpyne_np2.py +45 -0
  57. omv/engines/jneuromlnetpyne_np4.py +45 -0
  58. omv/engines/jneuromlnrn.py +78 -0
  59. omv/engines/jneuromlpynnnrn.py +75 -0
  60. omv/engines/jneuromlvalidate.py +62 -0
  61. omv/engines/jneuromlvalidatev1.py +58 -0
  62. omv/engines/moose_.py +86 -0
  63. omv/engines/nestsli.py +84 -0
  64. omv/engines/netpyne_.py +120 -0
  65. omv/engines/netpyne__np2.py +47 -0
  66. omv/engines/netpyne__np4.py +47 -0
  67. omv/engines/neuron_.py +205 -0
  68. omv/engines/octave.py +51 -0
  69. omv/engines/pylems.py +57 -0
  70. omv/engines/pylemsnml2.py +59 -0
  71. omv/engines/pynest.py +111 -0
  72. omv/engines/pyneuroconstruct.py +67 -0
  73. omv/engines/pyneuroml_.py +55 -0
  74. omv/engines/pyneuromlvalidatesbml.py +83 -0
  75. omv/engines/pyneuron.py +94 -0
  76. omv/engines/pynn.py +63 -0
  77. omv/engines/pynnbrian1.py +59 -0
  78. omv/engines/pynnbrian2.py +60 -0
  79. omv/engines/pynnnest.py +56 -0
  80. omv/engines/pynnneuroml.py +57 -0
  81. omv/engines/pynnneuron.py +94 -0
  82. omv/engines/utils/__init__.py +21 -0
  83. omv/engines/utils/genesis_utils.g +26 -0
  84. omv/engines/utils/wdir.py +15 -0
  85. omv/experiment.py +18 -0
  86. omv/find_tests.py +126 -0
  87. omv/omt_mep_parser.py +59 -0
  88. omv/omv_util.py +439 -0
  89. omv/parse_omt.py +118 -0
  90. omv/tally.py +112 -0
  91. omv/test/__init__.py +0 -0
  92. omv/test/test_rates.py +38 -0
  93. omv/test/test_types.py +29 -0
  94. omv/validation/__init__.py +0 -0
  95. omv/validation/rx_validator.py +35 -0
  96. omv/validation/utils.py +51 -0
  97. omv/validation/validate.py +53 -0
  98. omv/validation/validate_mep.py +15 -0
omv/find_tests.py ADDED
@@ -0,0 +1,126 @@
1
+ from os import environ, getcwd
2
+ from pathlib import Path
3
+ from omv.parse_omt import parse_omt
4
+ from omv.common.inout import load_yaml, inform, trim_path, is_verbose
5
+ from omv.tally import TallyHolder
6
+ from omv.engines import OMVEngines
7
+
8
+
9
+ def test_all(
10
+ do_not_run=False,
11
+ only_this_engine=None,
12
+ include_temp_tests=False,
13
+ ignore_non_py3=False,
14
+ ):
15
+ cwd = Path(getcwd())
16
+ all_omts = [p.as_posix() for p in cwd.glob("**/*.omt")]
17
+ if include_temp_tests:
18
+ all_omts += [p.as_posix() for p in cwd.glob("**/*.omt_")]
19
+
20
+ th = TallyHolder()
21
+ if environ.get("TRAVIS"):
22
+ if not environ.get("OMV_ENGINE"):
23
+ tallies = [parse_omt(t, ignore_non_py3=ignore_non_py3) for t in all_omts]
24
+ else:
25
+ engine = environ.get("OMV_ENGINE").lower()
26
+ engine_version = None
27
+ if ":" in engine:
28
+ ee = engine.split(":")
29
+ engine = ee[0]
30
+ engine_version = ee[1]
31
+ tallies = [
32
+ parse_omt(
33
+ t, engine_version=engine_version, ignore_non_py3=ignore_non_py3
34
+ )
35
+ for t in all_omts
36
+ if load_yaml(t)["engine"].lower() == engine
37
+ ]
38
+ elif only_this_engine:
39
+ inform("Only running tests for engine: %s" % only_this_engine)
40
+ tallies = [
41
+ parse_omt(t, ignore_non_py3=ignore_non_py3)
42
+ for t in all_omts
43
+ if load_yaml(t)["engine"].lower() == only_this_engine.lower()
44
+ ]
45
+ else:
46
+ tallies = []
47
+ failed = 0
48
+ for i in range(len(all_omts)):
49
+ t = all_omts[i]
50
+ inform("")
51
+ tally = parse_omt(t, do_not_run, ignore_non_py3=ignore_non_py3)
52
+ if not tally.all_passed():
53
+ failed += 1
54
+ if not do_not_run:
55
+ inform("")
56
+ inform("")
57
+ inform(
58
+ " [ Test %i of %i complete - failed so far: %s ]"
59
+ % (i + 1, len(all_omts), failed)
60
+ )
61
+ tallies.append(tally)
62
+
63
+ tallies.sort()
64
+
65
+ if not do_not_run:
66
+ for t in tallies:
67
+ th.add(t)
68
+
69
+ results = []
70
+ for i in range(len(tallies)):
71
+ t = tallies[i]
72
+ results.append(t.all_passed())
73
+ inform("")
74
+ inform(
75
+ "%i test(s) run" % len(tallies), overline="-", underline="-", center=True
76
+ )
77
+ inform("")
78
+ if len(results) == 0:
79
+ inform("No tests found!", underline="=", center=True)
80
+ elif all(results):
81
+ inform("All tests passing!", underline="=", center=True)
82
+ else:
83
+ failed = [trim_path(t.omt) for t in tallies if not t.all_passed()]
84
+ inform("Some test(s) failed: ", failed, underline="=")
85
+
86
+ if is_verbose():
87
+ print("\n" + th.summary() + "\n")
88
+
89
+ assert len(results) > 0
90
+ assert all(results)
91
+
92
+ else:
93
+ engs = {}
94
+ tot_tests = 0
95
+ for t in tallies:
96
+ if not t.engine in engs:
97
+ engs[t.engine] = 0
98
+ engs[t.engine] += 1
99
+ tot_tests += 1
100
+ inform("")
101
+
102
+ for e in sorted(engs):
103
+ inform(
104
+ " Engine %s %s tests\t(installed: %s)"
105
+ % (e + ":" + " " * (21 - len(e)), engs[e], OMVEngines[e].is_installed())
106
+ )
107
+
108
+ inform("")
109
+ inform(" %s OMV tests in total" % (tot_tests))
110
+ inform("")
111
+
112
+
113
+ def test_one(omt_fname):
114
+ tally = parse_omt(omt_fname)
115
+ inform("")
116
+ if tally.all_passed():
117
+ inform("Test passed: %s" % omt_fname, overline="=", center=True)
118
+ else:
119
+ inform("Test failed: %s" % (omt_fname), underline="=", center=True)
120
+
121
+ if is_verbose():
122
+ th = TallyHolder()
123
+ th.add(tally)
124
+ print("\n" + th.summary() + "\n")
125
+
126
+ assert tally.all_passed()
omv/omt_mep_parser.py ADDED
@@ -0,0 +1,59 @@
1
+ from omv.experiment import OMVExperiment
2
+ from os.path import join, dirname
3
+ from omv.common.inout import load_yaml
4
+
5
+
6
+ class OMVParseError(BaseException):
7
+ pass
8
+
9
+
10
+ class OMVTestParser(object):
11
+ def __init__(self, omt_path):
12
+ self.omt_path = omt_path
13
+ self.omt_root = dirname(omt_path)
14
+ self.omt = load_yaml(omt_path)
15
+ if "mep" in self.omt:
16
+ self.mep_path = join(self.omt_root, self.omt["mep"])
17
+ self.mep_root = dirname(self.mep_path)
18
+ self.mep = load_yaml(self.mep_path)
19
+ else:
20
+ self.mep_root = None
21
+ self.mep_path = None
22
+ self.mep = None
23
+
24
+ @property
25
+ def modelpath(self):
26
+ # print('Interpreting %s'%self.omt['target'])
27
+ if " " in self.omt["target"]: # e.g. target: "*.cell.nml *.channel.nml"
28
+ all = ""
29
+ for part in self.omt["target"].split(" "):
30
+ all += join(self.omt_root, part.strip()) + " "
31
+ return all[:-1]
32
+ return join(self.omt_root, self.omt["target"])
33
+
34
+ @property
35
+ def engine(self):
36
+ return self.omt["engine"]
37
+
38
+ @property
39
+ def mep_experiments(self):
40
+ return self.mep["experiments"]
41
+
42
+ @property
43
+ def omt_experiments(self):
44
+ return self.omt["experiments"]
45
+
46
+ def generate_exps(self, engine):
47
+ if self.mep:
48
+ for expname, exp in self.omt_experiments.items():
49
+ expmep = self.mep_experiments[expname]
50
+ obs = exp["observables"]
51
+ yield OMVExperiment(
52
+ expname, expmep, obs, engine, self.omt_root, self.mep_root
53
+ )
54
+ else:
55
+ exp = {"expected": {"dry": None}}
56
+ obs = {"dry": None}
57
+ yield OMVExperiment(
58
+ "Dry run", exp, obs, engine, self.omt_root, self.mep_root
59
+ )
omv/omv_util.py ADDED
@@ -0,0 +1,439 @@
1
+ """OpenSourceBrain Model Validation and Testing
2
+ ============================================
3
+
4
+ Usage:
5
+ omv all [-V | --verbose] [--engine=engine] [--ignore-non-py3]
6
+ omv all_ [-V | --verbose] [--engine=engine]
7
+ omv test <testMe.omt> [-V | --verbose]
8
+ omv autogen [options]
9
+ omv install <engine>
10
+ omv find
11
+ omv (list-engines | list) [-V | --verbose]
12
+ omv validate-mep <mepfile>
13
+ omv validate-omt <omtfile>
14
+ omv (-h | --help)
15
+ omv --version
16
+
17
+ Options:
18
+ -h --help Show this screen.
19
+ -d --dryrun Generate dry-run tests only [default: False].
20
+ -V --verbose Display additional diagnosis messages [default: False].
21
+ --version Show version.
22
+ --ignore-non-py3 If Python 3, ignore tests on non Py3 compatible engines [default: False]
23
+ -y Auto-select default options (non-interactive mode)
24
+ """
25
+ from docopt import docopt
26
+ from omv.find_tests import test_all, test_one
27
+ from omv.validation import validate_mep
28
+ from omv.autogen import autogen
29
+ from omv.engines import OMVEngines
30
+ from omv.common.inout import inform
31
+ import os
32
+ import platform
33
+
34
+ from omv.common.inout import set_verbosity
35
+
36
+ from omv import __version__ as omv_version
37
+
38
+
39
+ def main():
40
+ arguments = docopt(
41
+ __doc__, version="OpenSourceBrain Model Validation %s" % omv_version
42
+ )
43
+ set_env_vars()
44
+
45
+ if arguments["--verbose"]:
46
+ set_verbosity(1)
47
+
48
+ if arguments["test"]:
49
+ try:
50
+ test_one(arguments["<testMe.omt>"])
51
+ except AssertionError:
52
+ inform("Failed due to non passing tests")
53
+ exit(1)
54
+
55
+ elif arguments["all"]:
56
+ try:
57
+ if platform.python_version_tuple()[0] == "3":
58
+ inform(
59
+ "Python 3. Ignoring tests for non Py3 compatible engines: %s"
60
+ % arguments["--ignore-non-py3"]
61
+ )
62
+
63
+ if arguments["--engine"] is not None:
64
+ if ":" in arguments["--engine"]:
65
+ _install_engine(arguments["--engine"])
66
+ only_this_engine = arguments["--engine"].split(":")[0]
67
+ else:
68
+ only_this_engine = None
69
+
70
+ test_all(
71
+ only_this_engine=only_this_engine,
72
+ ignore_non_py3=arguments["--ignore-non-py3"],
73
+ )
74
+ except AssertionError:
75
+ inform("Failed due to non passing tests")
76
+ exit(1)
77
+
78
+ # Includes *.omt_, i.e. temporary test files
79
+ elif arguments["all_"]:
80
+ try:
81
+ test_all(
82
+ only_this_engine=arguments["--engine"],
83
+ include_temp_tests=True,
84
+ ignore_non_py3=arguments["--ignore-non-py3"],
85
+ )
86
+ except AssertionError:
87
+ inform("Failed due to non passing tests")
88
+ exit(1)
89
+
90
+ elif arguments["find"]:
91
+ try:
92
+ test_all(do_not_run=True)
93
+ except AssertionError:
94
+ inform("Failed due to non passing tests")
95
+ exit(1)
96
+
97
+ elif arguments["validate-mep"]:
98
+ validate_mep.validate(arguments["<mepfile>"])
99
+
100
+ elif arguments["validate-omt"]:
101
+ inform("OMT validation not implemented yet!")
102
+ exit(1)
103
+
104
+ elif arguments["install"]:
105
+ set_verbosity(1)
106
+ eng = arguments["<engine>"]
107
+
108
+ _install_engine(eng)
109
+
110
+ elif arguments["list-engines"] or arguments["list"]:
111
+ inform("OMV is checking which engines are currently installed...")
112
+ set_verbosity(0) # No need to report failures
113
+ engines = sorted(OMVEngines.keys())
114
+
115
+ installed = {}
116
+ for engine in engines:
117
+ installed[engine] = OMVEngines[engine].is_installed()
118
+
119
+ inform("")
120
+ inform(
121
+ "The following engines are currently supported by OMV (v%s):" % omv_version
122
+ )
123
+ inform("")
124
+ for engine in engines:
125
+ py3_info = (
126
+ "" if OMVEngines[engine].python3_compatible else "; non Py3 compatible"
127
+ )
128
+ inform(
129
+ " %s%s(installed: %s%s)"
130
+ % (engine, " " * (30 - len(engine)), installed[engine], py3_info)
131
+ )
132
+ inform("")
133
+ if arguments["--verbose"]:
134
+ inform("Additional Python (v%s) packages:" % platform.python_version())
135
+ inform("")
136
+ for m in [
137
+ "matplotlib",
138
+ "numpy",
139
+ "pandas",
140
+ "scipy",
141
+ "sympy",
142
+ "tables",
143
+ "h5py",
144
+ "neo",
145
+ "lazyarray",
146
+ "pyelectro",
147
+ "neurotune",
148
+ "lems",
149
+ "pyneuroml",
150
+ "neuroml",
151
+ "neuromllite",
152
+ "libsbml",
153
+ ]:
154
+ installed_ver = False
155
+ try:
156
+ exec("import %s" % m)
157
+ installed_ver = "v%s" % eval("%s.__version__" % m)
158
+ except:
159
+ pass
160
+ inform(
161
+ " %s%s(installed: %s)" % (m, " " * (30 - len(m)), installed_ver)
162
+ )
163
+ inform("")
164
+
165
+ elif arguments["autogen"]:
166
+ inform("Automatically generating model validation files")
167
+ dry = arguments["--dryrun"]
168
+ auto = arguments["-y"]
169
+ autogen(auto, dry)
170
+
171
+
172
+ def _install_engine(eng):
173
+ engine_version = None
174
+
175
+ if ":" in eng:
176
+ ee = eng.split(":")
177
+ eng = ee[0]
178
+ engine_version = ee[1]
179
+ inform("Engine %s version %s will be used..." % (eng, engine_version))
180
+ else:
181
+ inform("Engine %s, default version will be used..." % (eng))
182
+
183
+ if eng.lower() not in [e.lower() for e in OMVEngines]:
184
+ inform("Engine " + eng + " unknown!")
185
+ else:
186
+ inform("Trying to install: %s" % eng)
187
+ already_installed = False
188
+
189
+ if eng.lower() == "NEURON".lower():
190
+ from omv.engines.neuron_ import NeuronEngine
191
+
192
+ if not NeuronEngine.is_installed():
193
+ from omv.engines.getnrn import install_neuron
194
+
195
+ install_neuron(engine_version)
196
+ else:
197
+ already_installed = True
198
+
199
+ elif eng.lower() == "PyNEURON".lower():
200
+ from omv.engines.pyneuron import PyNRNEngine
201
+
202
+ if not PyNRNEngine.is_installed():
203
+ from omv.engines.getnrn import install_neuron
204
+
205
+ install_neuron(engine_version)
206
+ else:
207
+ already_installed = True
208
+
209
+ elif eng.lower() == "jLEMS".lower():
210
+ from omv.engines.jlems import JLemsEngine as ee
211
+
212
+ if ee.is_installed():
213
+ already_installed = True
214
+ else:
215
+ if engine_version is not None:
216
+ raise Exception(
217
+ "Currently, cannot install a specific version of engine %s"
218
+ % eng
219
+ )
220
+ from omv.engines.getjlems import install_jlems
221
+
222
+ install_jlems()
223
+
224
+ elif eng.lower() == "jNeuroML".lower():
225
+ from omv.engines.jneuroml import JNeuroMLEngine as ee
226
+
227
+ if ee.is_installed():
228
+ already_installed = True
229
+ else:
230
+ from omv.engines.getjnml import install_jnml
231
+
232
+ install_jnml(engine_version)
233
+
234
+ elif eng.lower() == "neuroConstruct" or eng == "Py_neuroConstruct".lower():
235
+ from omv.engines.pyneuroconstruct import PyneuroConstructEngine as ee
236
+
237
+ if ee.is_installed():
238
+ already_installed = True
239
+ else:
240
+ if engine_version is not None:
241
+ raise Exception(
242
+ "Currently, cannot install a specific version of engine %s"
243
+ % eng
244
+ )
245
+ from omv.engines.getneuroconstruct import install_neuroconstruct
246
+
247
+ install_neuroconstruct()
248
+
249
+ elif eng.lower() == "pyNeuroML".lower():
250
+ from omv.engines.pyneuroml_ import PyNeuroMLEngine as ee
251
+
252
+ if ee.is_installed():
253
+ already_installed = True
254
+ else:
255
+ ee.install(engine_version)
256
+
257
+ elif eng.lower() == "PyLEMS".lower():
258
+ from omv.engines.pylems import PyLemsEngine as ee
259
+
260
+ if ee.is_installed():
261
+ already_installed = True
262
+ else:
263
+ if engine_version is not None:
264
+ raise Exception(
265
+ "Currently, cannot install a specific version of engine %s"
266
+ % eng
267
+ )
268
+ from omv.engines.getpylems import install_pylems
269
+
270
+ install_pylems()
271
+
272
+ elif eng.lower() == "Arbor".lower():
273
+ from omv.engines.arbor_ import ArborEngine as ee
274
+
275
+ if ee.is_installed():
276
+ already_installed = True
277
+ else:
278
+ from omv.engines.getarbor import install_arbor
279
+
280
+ install_arbor(engine_version)
281
+
282
+ elif eng.lower() == "EDEN".lower():
283
+ from omv.engines.eden_ import EdenEngine as ee
284
+
285
+ if ee.is_installed():
286
+ already_installed = True
287
+ else:
288
+ from omv.engines.geteden import install_eden
289
+
290
+ install_eden(engine_version)
291
+
292
+ elif eng.lower() == "PyLEMS_NeuroML2".lower():
293
+ pylems_already_installed = False
294
+ nml2_already_installed = False
295
+
296
+ from omv.engines.pylems import PyLemsEngine as ee
297
+
298
+ if ee.is_installed():
299
+ pylems_already_installed = True
300
+ else:
301
+ from omv.engines.getpylems import install_pylems
302
+
303
+ install_pylems()
304
+
305
+ from omv.engines.getnml2 import install_nml2, is_nml2_installed
306
+
307
+ if is_nml2_installed():
308
+ nml2_already_installed = True
309
+ else:
310
+ if engine_version is not None:
311
+ raise Exception(
312
+ "Currently, cannot install a specific version of engine %s"
313
+ % eng
314
+ )
315
+ install_nml2()
316
+
317
+ already_installed = nml2_already_installed and pylems_already_installed
318
+
319
+ elif eng.lower() == "Py_neuroConstruct".lower():
320
+ from omv.engines.pyneuroconstruct import PyneuroConstructEngine as ee
321
+
322
+ if ee.is_installed():
323
+ already_installed = True
324
+ else:
325
+ if engine_version is not None:
326
+ raise Exception(
327
+ "Currently, cannot install a specific version of engine %s"
328
+ % eng
329
+ )
330
+ from omv.engines.getneuroconstruct import install_neuroconstruct
331
+
332
+ install_neuroconstruct()
333
+
334
+ elif eng.lower() == "genesis".lower():
335
+ if engine_version is not None:
336
+ raise Exception(
337
+ "Currently, cannot install a specific version of engine %s" % eng
338
+ )
339
+ from omv.engines.getgenesis import install_genesis
340
+
341
+ install_genesis()
342
+ elif eng.lower() == "Moose".lower():
343
+ if engine_version is not None:
344
+ raise Exception(
345
+ "Currently, cannot install a specific version of engine %s" % eng
346
+ )
347
+ from omv.engines.getmoose import install_moose
348
+
349
+ install_moose(engine_version)
350
+ elif eng.lower() == "NetPyNE".lower():
351
+ from omv.engines.getnetpyne import install_netpyne
352
+
353
+ install_netpyne(engine_version)
354
+ elif eng.lower() == "Brian".lower():
355
+ if engine_version is not None:
356
+ raise Exception(
357
+ "Currently, cannot install a specific version of engine %s" % eng
358
+ )
359
+ from omv.engines.getbrian1 import install_brian
360
+
361
+ install_brian()
362
+ elif eng.lower() == "Brian2".lower():
363
+ from omv.engines.getbrian2 import install_brian2
364
+
365
+ install_brian2(engine_version)
366
+ elif eng.lower() == "NEST".lower():
367
+ from omv.engines.nestsli import NestEngine as ee
368
+
369
+ if ee.is_installed():
370
+ already_installed = True
371
+ else:
372
+ from omv.engines.getnest import install_nest
373
+
374
+ install_nest(engine_version)
375
+ elif eng.lower() == "PyNEST".lower():
376
+ from omv.engines.pynest import PyNestEngine as ee
377
+
378
+ if ee.is_installed():
379
+ already_installed = True
380
+ else:
381
+ from omv.engines.getnest import install_nest
382
+
383
+ install_nest(engine_version)
384
+ elif eng.lower() == "PyNN".lower():
385
+ from omv.engines.getpynn import install_pynn
386
+
387
+ install_pynn(engine_version)
388
+
389
+ elif eng.lower() == "PyNN_NEURON".lower():
390
+ if engine_version is not None:
391
+ raise Exception(
392
+ "Currently, cannot install a specific version of engine %s" % eng
393
+ )
394
+ from omv.engines.pynnneuron import PyNNNRNEngine
395
+
396
+ PyNNNRNEngine.install()
397
+
398
+ elif eng.lower() == "jNeuroML_Brian2".lower():
399
+ from omv.engines.jneuromlbrian2 import JNeuroMLBrian2Engine as ee
400
+
401
+ if ee.is_installed():
402
+ already_installed = True
403
+ else:
404
+ ee.install(engine_version)
405
+
406
+ elif eng.lower() == "jNeuroML_NEURON".lower():
407
+ from omv.engines.jneuromlnrn import JNeuroMLNRNEngine as ee
408
+
409
+ if ee.is_installed():
410
+ already_installed = True
411
+ else:
412
+ ee.install(engine_version)
413
+
414
+ elif eng.lower() == "jNeuroML_EDEN".lower():
415
+ from omv.engines.jneuromleden import JNeuroMLEdenEngine as ee
416
+
417
+ if ee.is_installed():
418
+ already_installed = True
419
+ else:
420
+ ee.install(engine_version)
421
+
422
+ else:
423
+ inform(
424
+ "Code not implemented yet for installing %s using: omv install! Try running a test using this engine."
425
+ % eng
426
+ )
427
+ exit(1)
428
+ if already_installed:
429
+ inform("Engine %s was already installed" % eng)
430
+
431
+
432
+ def set_env_vars():
433
+ if os.name == "nt":
434
+ # Windows does not have a HOME var defined by default
435
+ os.environ["HOME"] = os.environ["USERPROFILE"]
436
+
437
+
438
+ if __name__ == "__main__":
439
+ main()