diff --git a/omv/autogen.py b/omv/autogen.py index 053e228..4995f07 100644 --- a/omv/autogen.py +++ b/omv/autogen.py @@ -80,7 +80,7 @@ def generate_dottravis(targets): travis = UnsortableOrderedDict( [ ("language", "python"), - ("python", 2.7), + ("python", 3.12), ("env", engines), ("install", ["pip install " + repo]), ("script", ["omv all"]), diff --git a/omv/engines/getnetpyne.py b/omv/engines/getnetpyne.py index 91171ed..347fa21 100644 --- a/omv/engines/getnetpyne.py +++ b/omv/engines/getnetpyne.py @@ -2,7 +2,6 @@ from omv.engines.utils.wdir import working_dir from omv.common.inout import pip_install import os -import sys def install_netpyne(version=None): @@ -33,19 +32,6 @@ def install_netpyne(version=None): print(check_output(["pwd"])) with working_dir(path): - if sys.version_info.major == 2: - pip_install( - [ - "kiwisolver==1.0.1", - "matplotlib==2.2.4", - "pandas==0.23.4", - "bokeh==1.4.0", - "Pillow==5.4.1", - "matplotlib-scalebar==0.5.1", - "scipy==1.2.2", - "python-dateutil==2.8.0", - ] - ) pip_install(".") m = "Successfully installed NetPyNE..." diff --git a/omv/engines/getnrn.py b/omv/engines/getnrn.py index db7260a..98272d8 100644 --- a/omv/engines/getnrn.py +++ b/omv/engines/getnrn.py @@ -1,20 +1,24 @@ import os import sys +import re from subprocess import check_output as co from omv.common.inout import inform from omv.common.inout import pip_install from omv.engines.utils.wdir import working_dir +DEFAULT_NEURON_VERSION = "8.2.7" + + +def _supports_pip_install(version): + return bool(re.match(r"^7\.8($|\.)|^8\.", version)) + def install_neuron(version): if not version: - if sys.version_info.major == 3: - version = "8.2.7" - else: - version = "7.6" + version = DEFAULT_NEURON_VERSION - if sys.version_info.major == 3 and ("7.8" in version or "8." in version): + if _supports_pip_install(version): pip_install("neuron==%s" % version) import neuron @@ -31,12 +35,6 @@ def install_neuron(version): ) dl_file = "nrn-%s.tar.gz" % version - # See below re 7.8 on py2... - if "7.8" in version or "8.0" in version: - nrn_url = "https://github.com/neuronsimulator/nrn/archive/%s.tar.gz" % ( - version - ) - dl_file = "%s.tar.gz" % version print(co(["wget", "-nv", nrn_url])) print(co(["tar", "xzvf", dl_file])) print(co(["mv", "nrn-%s" % version, "nrn"])) diff --git a/omv/engines/neuron_.py b/omv/engines/neuron_.py index a054e0f..0d4f409 100644 --- a/omv/engines/neuron_.py +++ b/omv/engines/neuron_.py @@ -1,5 +1,4 @@ import os -import sys from glob import glob import platform import subprocess as sp @@ -175,10 +174,7 @@ def run(self): self.modelpath, "\n".join(self.extra_pars), ) - if sys.version_info[0] == 3: - c = dedent(cmd).encode() - else: - c = dedent(cmd) + c = dedent(cmd).encode() stdout, stderr = p.communicate(c) # with open('/tmp/omv_test.nrn.stdout', 'w') as f: # f.write(stdout) diff --git a/omv/engines/pyneuron.py b/omv/engines/pyneuron.py index d4bed3e..757b571 100644 --- a/omv/engines/pyneuron.py +++ b/omv/engines/pyneuron.py @@ -2,7 +2,6 @@ from textwrap import dedent from omv.engines.utils.wdir import working_dir from os.path import dirname -import sys from omv.engines.neuron_ import NeuronEngine @@ -73,10 +72,7 @@ def run(self): cmd = """\ %s """ % ("\n".join(self.extra_pars)) - if sys.version_info[0] == 3: - c = dedent(cmd).encode() - else: - c = dedent(cmd) + c = dedent(cmd).encode() stdout, stderr = p.communicate(c) # with open('/tmp/omv_test.nrn.stdout', 'w') as f: # f.write(stdout) diff --git a/omv/parse_omt.py b/omv/parse_omt.py index 4a93e3e..c9350e8 100644 --- a/omv/parse_omt.py +++ b/omv/parse_omt.py @@ -3,7 +3,6 @@ from omv.omt_mep_parser import OMVTestParser from omv.common.inout import inform, check, trim_path from omv.tally import Tallyman -import sys import platform @@ -67,10 +66,7 @@ def parse_omt(omt_path, do_not_run=False, engine_version=None, ignore_non_py3=Fa indent=3, ) for rn, rv in results.items(): - if sys.version_info >= (3, 0): - inform("{:<30}{:^20}".format(rn, check(rv)), indent=3) - else: - inform("{:<30}{:^20}".format(rn, check(rv)), indent=3) + inform("{:<30}{:^20}".format(rn, check(rv)), indent=3) if not rv: some_failed = True tally.add_experiment(exp, results) diff --git a/omv/test/test_drop_py2_bits.py b/omv/test/test_drop_py2_bits.py new file mode 100644 index 0000000..62cdb9c --- /dev/null +++ b/omv/test/test_drop_py2_bits.py @@ -0,0 +1,57 @@ +from contextlib import contextmanager +import sys +import types + +import pytest + +from omv.engines import getnetpyne, getnrn + + +def test_install_neuron_defaults_to_modern_version(monkeypatch): + pip_calls = [] + + monkeypatch.setattr(getnrn, "pip_install", lambda spec: pip_calls.append(spec)) + monkeypatch.setattr(getnrn, "inform", lambda *args, **kwargs: None) + monkeypatch.setitem(sys.modules, "neuron", types.SimpleNamespace()) + + getnrn.install_neuron(None) + + assert pip_calls == [f"neuron=={getnrn.DEFAULT_NEURON_VERSION}"] + + +@pytest.mark.parametrize("version", ["7.8.1", "8.2.7"]) +def test_install_neuron_supported_versions_use_pip(monkeypatch, version): + pip_calls = [] + + monkeypatch.setattr(getnrn, "pip_install", lambda spec: pip_calls.append(spec)) + monkeypatch.setattr(getnrn, "inform", lambda *args, **kwargs: None) + monkeypatch.setitem(sys.modules, "neuron", types.SimpleNamespace()) + + getnrn.install_neuron(version) + + assert pip_calls == [f"neuron=={version}"] + + +@pytest.mark.parametrize( + "version,expected", + [("7.8", True), ("7.8.1", True), ("8.2.7", True), ("7.80", False), ("7.7.2", False)], +) +def test_supports_pip_install_matches_supported_families(version, expected): + assert getnrn._supports_pip_install(version) is expected + + +def test_install_netpyne_without_version_only_installs_package(monkeypatch): + pip_calls = [] + + @contextmanager + def no_op_working_dir(_): + yield + + monkeypatch.setattr(getnetpyne.os.path, "isdir", lambda _: True) + monkeypatch.setattr(getnetpyne, "working_dir", no_op_working_dir) + monkeypatch.setattr(getnetpyne, "check_output", lambda *_: "") + monkeypatch.setattr(getnetpyne, "pip_install", lambda spec: pip_calls.append(spec)) + + getnetpyne.install_netpyne() + + assert pip_calls == ["."]