diff --git a/.github/workflows/nestml-build.yml b/.github/workflows/nestml-build.yml index 49cba1ab2..8941543c2 100644 --- a/.github/workflows/nestml-build.yml +++ b/.github/workflows/nestml-build.yml @@ -167,7 +167,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - nest_branch: ["v2.20.2", "v3.0", "v3.8", "master"] + nest_branch: ["v2.20.2", "v3.0", "v3.9", "master"] fail-fast: false steps: # Checkout the repository contents diff --git a/pynestml/codegeneration/nest_tools.py b/pynestml/codegeneration/nest_tools.py index 135b112b7..e983429b6 100644 --- a/pynestml/codegeneration/nest_tools.py +++ b/pynestml/codegeneration/nest_tools.py @@ -46,6 +46,7 @@ def detect_nest_version(cls) -> str: try: import nest + import semver vt = nest.Create("volume_transmitter") @@ -58,24 +59,27 @@ def detect_nest_version(cls) -> str: except Exception: pass - if "DataConnect" in dir(nest): - nest_version = "v2.20.2" - else: - nest_version = "v" + nest.__version__ - if nest_version.startswith("v3.5") or nest_version.startswith("v3.6") or nest_version.startswith("v3.7") or nest_version.startswith("v3.8"): - if "post0.dev0" in nest_version: + try: + # For NEST version <= 3.4, the version string is not parsable by semver. + ver = semver.Version.parse(nest.__version__) + if ver.major >= 3 and ver.minor >= 5: + if ver.prerelease and "post0.dev0" in ver.prerelease: nest_version = "master" - else: - if "kernel_status" not in dir(nest): # added in v3.1 - nest_version = "v3.0" - elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release - nest_version = "v3.4" - elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3 - nest_version = "v3.3" - elif "tau_Ca" in vt.get().keys(): # removed in v3.2 - nest_version = "v3.1" else: - nest_version = "v3.2" + nest_version = "v" + nest.__version__ + except (AttributeError, ValueError): + if "DataConnect" in dir(nest): + nest_version = "v2.20.2" + elif "kernel_status" not in dir(nest): # added in v3.1 + nest_version = "v3.0" + elif "prepared" in nest.GetKernelStatus().keys(): # "prepared" key was added after v3.3 release + nest_version = "v3.4" + elif "tau_u_bar_minus" in neuron.get().keys(): # added in v3.3 + nest_version = "v3.3" + elif "tau_Ca" in vt.get().keys(): # removed in v3.2 + nest_version = "v3.1" + else: + nest_version = "v3.2" except ModuleNotFoundError: nest_version = "" diff --git a/requirements.txt b/requirements.txt index de673aa94..5df755330 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,5 @@ setuptools Jinja2 >= 2.10 typing;python_version<"3.5" astropy +semver odetoolbox >= 2.5.9