@@ -46,6 +46,7 @@ def detect_nest_version(cls) -> str:
4646
4747try:
4848 import nest
49+ import semver
4950
5051 vt = nest.Create("volume_transmitter")
5152
@@ -58,24 +59,27 @@ def detect_nest_version(cls) -> str:
5859 except Exception:
5960 pass
6061
61- if "DataConnect" in dir(nest):
62- nest_version = "v2.20.2"
63- else:
64- nest_version = "v" + nest.__version__
65- if nest_version.startswith("v3.5") or nest_version.startswith("v3.6") or nest_version.startswith("v3.7") or nest_version.startswith("v3.8"):
66- if "post0.dev0" in nest_version:
62+ try:
63+ # For NEST version <= 3.4, the version string is not parsable by semver.
64+ ver = semver.Version.parse(nest.__version__)
65+ if ver.major >= 3 and ver.minor >= 5:
66+ if ver.prerelease and "post0.dev0" in ver.prerelease:
6767 nest_version = "master"
68- else:
69- if "kernel_status" not in dir(nest): # added in v3.1
70- nest_version = "v3.0"
71- elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release
72- nest_version = "v3.4"
73- elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3
74- nest_version = "v3.3"
75- elif "tau_Ca" in vt.get().keys(): # removed in v3.2
76- nest_version = "v3.1"
7768 else:
78- nest_version = "v3.2"
69+ nest_version = "v" + nest.__version__
70+ except (AttributeError, ValueError):
71+ if "DataConnect" in dir(nest):
72+ nest_version = "v2.20.2"
73+ elif "kernel_status" not in dir(nest): # added in v3.1
74+ nest_version = "v3.0"
75+ elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release
76+ nest_version = "v3.4"
77+ elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3
78+ nest_version = "v3.3"
79+ elif "tau_Ca" in vt.get().keys(): # removed in v3.2
80+ nest_version = "v3.1"
81+ else:
82+ nest_version = "v3.2"
7983except ModuleNotFoundError:
8084 nest_version = ""
8185
0 commit comments