From c67468c46072a851a48db7ae2230ee026dfa95ab Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Tue, 23 Apr 2024 15:03:14 +0100 Subject: [PATCH 1/6] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e5ec478..ef5ca41 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,4 @@ See also info about [NetPyNE on OSBv2](https://docs.opensourcebrain.org/OSBv2/Ne [![Continuous builds](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/omv-ci.yml/badge.svg)](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/omv-ci.yml) [![Regenerate files](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/non-omv.yml/badge.svg)](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/non-omv.yml) + From 5f8251d50b7f5be9e43d8340dda5ae012e85d21a Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 2 May 2024 11:26:44 +0100 Subject: [PATCH 2/6] Update non-omv.yml --- .github/workflows/non-omv.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/non-omv.yml b/.github/workflows/non-omv.yml index 54f597a..160708f 100644 --- a/.github/workflows/non-omv.yml +++ b/.github/workflows/non-omv.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ 3.8, 3.9, "3.10" ] + python-version: [ 3.8, 3.9, "3.10", "3.11" ] runs-on: [ ubuntu-latest, macos-latest ] steps: From 0026943c432abc88ccdeaf5b61378e7e68e655b6 Mon Sep 17 00:00:00 2001 From: pgleeson Date: Thu, 2 May 2024 12:04:10 +0100 Subject: [PATCH 3/6] Update eden spiketime checks --- .github/workflows/non-omv.yml | 11 ++++++++--- .github/workflows/omv-ci.yml | 6 ++++-- NeuroML2/.test.exGJ.jnmleden.omt | 2 +- NeuroML2/.test.exIzh.jnmleden.omt | 2 +- NeuroML2/.test.hh.jnmleden.omt | 4 ++-- NeuroML2/.test.hhsim.jnmleden.omt | 2 +- NeuroML2/.test.hyizh.jnmleden.omt | 2 +- NeuroML2/TwoCells/.test.two.jnmleden.omt | 4 ++-- 8 files changed, 20 insertions(+), 13 deletions(-) diff --git a/.github/workflows/non-omv.yml b/.github/workflows/non-omv.yml index 160708f..cc7e5da 100644 --- a/.github/workflows/non-omv.yml +++ b/.github/workflows/non-omv.yml @@ -13,17 +13,22 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ 3.8, 3.9, "3.10", "3.11" ] + python-version: [ 3.9, "3.10", "3.11" ] runs-on: [ ubuntu-latest, macos-latest ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} + - name: Install HDF5 for pytables on macos-latest + if: ${{ matrix.runs-on == 'macos-latest' }} + run: | + brew install hdf5 + - name: Install OMV run: | pip install git+https://github.com/OpenSourceBrain/osb-model-validation diff --git a/.github/workflows/omv-ci.yml b/.github/workflows/omv-ci.yml index 4b44459..78ad014 100644 --- a/.github/workflows/omv-ci.yml +++ b/.github/workflows/omv-ci.yml @@ -17,11 +17,12 @@ jobs: engine: [ NetPyNE, jNeuroML, jNeuroML_NEURON, jNeuroML_NetPyNE, jNeuroML_EDEN, jNeuroML_validate ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} + - name: Install OMV run: | pip install git+https://github.com/OpenSourceBrain/osb-model-validation @@ -32,6 +33,7 @@ jobs: - name: Run OMV tests on engine ${{ matrix.engine }} run: | omv all -V --engine=${{ matrix.engine }} + - name: OMV final version info run: | omv list -V # list installed engines diff --git a/NeuroML2/.test.exGJ.jnmleden.omt b/NeuroML2/.test.exGJ.jnmleden.omt index 3f2f7d6..416d979 100644 --- a/NeuroML2/.test.exGJ.jnmleden.omt +++ b/NeuroML2/.test.exGJ.jnmleden.omt @@ -14,7 +14,7 @@ experiments: spike detection: method: threshold threshold: -69.5 - tolerance: 0.00034498419085947374 + tolerance: 0.0003449267030756095 cell1: observables: spike times: diff --git a/NeuroML2/.test.exIzh.jnmleden.omt b/NeuroML2/.test.exIzh.jnmleden.omt index 0d32d25..59ed240 100644 --- a/NeuroML2/.test.exIzh.jnmleden.omt +++ b/NeuroML2/.test.exIzh.jnmleden.omt @@ -13,4 +13,4 @@ experiments: scaling: [1000, 1000] spike detection: method: threshold - tolerance: 0.00014888369126089628 + tolerance: 0.00014884116521364865 diff --git a/NeuroML2/.test.hh.jnmleden.omt b/NeuroML2/.test.hh.jnmleden.omt index 4ae30b4..93ae7f8 100644 --- a/NeuroML2/.test.hh.jnmleden.omt +++ b/NeuroML2/.test.hh.jnmleden.omt @@ -13,7 +13,7 @@ experiments: scaling: [1000, 1000] spike detection: method: threshold - tolerance: 0.00011745994437245375 + tolerance: 0.0001175226231050635 v1: observables: spike times: @@ -23,7 +23,7 @@ experiments: scaling: [1000, 1000] spike detection: method: threshold - tolerance: 0.0001244750601708972 + tolerance: 0.00012449165905872983 v2: observables: spike times: diff --git a/NeuroML2/.test.hhsim.jnmleden.omt b/NeuroML2/.test.hhsim.jnmleden.omt index a560cc2..c0af8e0 100644 --- a/NeuroML2/.test.hhsim.jnmleden.omt +++ b/NeuroML2/.test.hhsim.jnmleden.omt @@ -13,4 +13,4 @@ experiments: scaling: [1000, 1000] spike detection: method: threshold - tolerance: 0.0007232195903184108 + tolerance: 0.0007232712525507523 diff --git a/NeuroML2/.test.hyizh.jnmleden.omt b/NeuroML2/.test.hyizh.jnmleden.omt index f504ff8..8d068e3 100644 --- a/NeuroML2/.test.hyizh.jnmleden.omt +++ b/NeuroML2/.test.hyizh.jnmleden.omt @@ -13,4 +13,4 @@ experiments: scaling: [1000, 1000] spike detection: method: threshold - tolerance: 3.66282906798275e-05 + tolerance: 3.6664955635370336e-05 diff --git a/NeuroML2/TwoCells/.test.two.jnmleden.omt b/NeuroML2/TwoCells/.test.two.jnmleden.omt index 4f5776b..3ecaf90 100644 --- a/NeuroML2/TwoCells/.test.two.jnmleden.omt +++ b/NeuroML2/TwoCells/.test.two.jnmleden.omt @@ -15,7 +15,7 @@ experiments: spike detection: method: threshold threshold: 0 - tolerance: 0.017343922603342065 + tolerance: 0.01734388742304312 bask0: observables: spike times: @@ -26,4 +26,4 @@ experiments: spike detection: method: threshold threshold: 0 - tolerance: 0.0017869092394359062 + tolerance: 0.001786960295444412 From fca9b9d64613dccfe89361f96de28632c95a985e Mon Sep 17 00:00:00 2001 From: pgleeson Date: Thu, 2 May 2024 12:15:26 +0100 Subject: [PATCH 4/6] Not yet 3.11 - wait for neuron update on omv... --- .github/workflows/non-omv.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/non-omv.yml b/.github/workflows/non-omv.yml index cc7e5da..a70d6f3 100644 --- a/.github/workflows/non-omv.yml +++ b/.github/workflows/non-omv.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ 3.9, "3.10", "3.11" ] + python-version: [ 3.9, "3.10" ] runs-on: [ ubuntu-latest, macos-latest ] steps: From 4e448196d9e0e1dac2c6c8c241c93ecabdbd4379 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 2 May 2024 14:21:20 +0100 Subject: [PATCH 5/6] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e5ec478..6055578 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,5 @@ See also info about [NetPyNE on OSBv2](https://docs.opensourcebrain.org/OSBv2/Ne [![Continuous builds](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/omv-ci.yml/badge.svg)](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/omv-ci.yml) [![Regenerate files](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/non-omv.yml/badge.svg)](https://github.com/OpenSourceBrain/NetPyNEShowcase/actions/workflows/non-omv.yml) + + From 3090f5bbca768db743521c732d57d38e4ec0c080 Mon Sep 17 00:00:00 2001 From: pgleeson Date: Thu, 2 May 2024 17:34:17 +0100 Subject: [PATCH 6/6] Regenerated --- NetPyNE/ACnet/LEMS_MediumNet_netpyne.py | 11 +++++++++-- NetPyNE/GapJunctions/LEMS_GJ_netpyne.py | 11 +++++++++-- NetPyNE/LEMS_2007One_netpyne.py | 11 +++++++++-- NetPyNE/TwoCells/LEMS_TwoCell_netpyne.py | 11 +++++++++-- NetPyNE/UI/LEMS_HHSimple_netpyne.py | 11 +++++++++-- NeuroML2/LEMS_HHSmall.xml | 2 +- NeuroML2/LEMS_HybridSmall.xml | 2 +- NeuroML2/LEMS_HybridTut.xml | 2 +- NeuroML2/LEMS_M1.xml | 2 +- 9 files changed, 49 insertions(+), 14 deletions(-) diff --git a/NetPyNE/ACnet/LEMS_MediumNet_netpyne.py b/NetPyNE/ACnet/LEMS_MediumNet_netpyne.py index 8dd9511..b3579da 100644 --- a/NetPyNE/ACnet/LEMS_MediumNet_netpyne.py +++ b/NetPyNE/ACnet/LEMS_MediumNet_netpyne.py @@ -58,7 +58,7 @@ class NetPyNESimulation(): - def __init__(self, tstop=500.0, dt=0.01, seed=123456789, save_json=False): + def __init__(self, tstop=500.0, dt=0.01, seed=123456789, save_json=False, abs_tol=None): self.setup_start = time.time() @@ -89,6 +89,13 @@ def __init__(self, tstop=500.0, dt=0.01, seed=123456789, save_json=False): self.simConfig.duration = self.simConfig.tstop = tstop # Duration of the simulation, in ms self.simConfig.dt = dt # Internal integration timestep to use + # cvode + if abs_tol is not None: + self.simConfig.cvode_active = True + self.simConfig.cvode_atol = abs_tol + else: + self.simConfig.cvode_active = False + # Seeds for randomizers (connectivity, input stimulation and cell locations) # Note: locations and connections should be fully specified by the structure of the NeuroML, # so seeds for conn & loc shouldn't affect networks structure/behaviour @@ -1402,7 +1409,7 @@ def save_results(self): save_json = '-json' in sys.argv no_run = '-norun' in sys.argv - ns = NetPyNESimulation(tstop=500.0, dt=0.01, seed=123456789, save_json=save_json) + ns = NetPyNESimulation(tstop=500.0, dt=0.01, seed=123456789, save_json=save_json, abs_tol=None) if not no_run: ns.run() diff --git a/NetPyNE/GapJunctions/LEMS_GJ_netpyne.py b/NetPyNE/GapJunctions/LEMS_GJ_netpyne.py index d3b2311..bfe24ea 100644 --- a/NetPyNE/GapJunctions/LEMS_GJ_netpyne.py +++ b/NetPyNE/GapJunctions/LEMS_GJ_netpyne.py @@ -32,7 +32,7 @@ class NetPyNESimulation(): - def __init__(self, tstop=700.0, dt=0.01, seed=123456789, save_json=False): + def __init__(self, tstop=700.0, dt=0.01, seed=123456789, save_json=False, abs_tol=None): self.setup_start = time.time() @@ -63,6 +63,13 @@ def __init__(self, tstop=700.0, dt=0.01, seed=123456789, save_json=False): self.simConfig.duration = self.simConfig.tstop = tstop # Duration of the simulation, in ms self.simConfig.dt = dt # Internal integration timestep to use + # cvode + if abs_tol is not None: + self.simConfig.cvode_active = True + self.simConfig.cvode_atol = abs_tol + else: + self.simConfig.cvode_active = False + # Seeds for randomizers (connectivity, input stimulation and cell locations) # Note: locations and connections should be fully specified by the structure of the NeuroML, # so seeds for conn & loc shouldn't affect networks structure/behaviour @@ -200,7 +207,7 @@ def save_results(self): save_json = '-json' in sys.argv no_run = '-norun' in sys.argv - ns = NetPyNESimulation(tstop=700.0, dt=0.01, seed=123456789, save_json=save_json) + ns = NetPyNESimulation(tstop=700.0, dt=0.01, seed=123456789, save_json=save_json, abs_tol=None) if not no_run: ns.run() diff --git a/NetPyNE/LEMS_2007One_netpyne.py b/NetPyNE/LEMS_2007One_netpyne.py index 3b511ca..3614edc 100644 --- a/NetPyNE/LEMS_2007One_netpyne.py +++ b/NetPyNE/LEMS_2007One_netpyne.py @@ -30,7 +30,7 @@ class NetPyNESimulation(): - def __init__(self, tstop=520.0, dt=0.001, seed=123456789, save_json=False): + def __init__(self, tstop=520.0, dt=0.001, seed=123456789, save_json=False, abs_tol=None): self.setup_start = time.time() @@ -51,6 +51,13 @@ def __init__(self, tstop=520.0, dt=0.001, seed=123456789, save_json=False): self.simConfig.duration = self.simConfig.tstop = tstop # Duration of the simulation, in ms self.simConfig.dt = dt # Internal integration timestep to use + # cvode + if abs_tol is not None: + self.simConfig.cvode_active = True + self.simConfig.cvode_atol = abs_tol + else: + self.simConfig.cvode_active = False + # Seeds for randomizers (connectivity, input stimulation and cell locations) # Note: locations and connections should be fully specified by the structure of the NeuroML, # so seeds for conn & loc shouldn't affect networks structure/behaviour @@ -175,7 +182,7 @@ def save_results(self): save_json = '-json' in sys.argv no_run = '-norun' in sys.argv - ns = NetPyNESimulation(tstop=520.0, dt=0.001, seed=123456789, save_json=save_json) + ns = NetPyNESimulation(tstop=520.0, dt=0.001, seed=123456789, save_json=save_json, abs_tol=None) if not no_run: ns.run() diff --git a/NetPyNE/TwoCells/LEMS_TwoCell_netpyne.py b/NetPyNE/TwoCells/LEMS_TwoCell_netpyne.py index 5702dab..f0fccc1 100644 --- a/NetPyNE/TwoCells/LEMS_TwoCell_netpyne.py +++ b/NetPyNE/TwoCells/LEMS_TwoCell_netpyne.py @@ -51,7 +51,7 @@ class NetPyNESimulation(): - def __init__(self, tstop=700.0, dt=0.01, seed=123456789, save_json=False): + def __init__(self, tstop=700.0, dt=0.01, seed=123456789, save_json=False, abs_tol=None): self.setup_start = time.time() @@ -82,6 +82,13 @@ def __init__(self, tstop=700.0, dt=0.01, seed=123456789, save_json=False): self.simConfig.duration = self.simConfig.tstop = tstop # Duration of the simulation, in ms self.simConfig.dt = dt # Internal integration timestep to use + # cvode + if abs_tol is not None: + self.simConfig.cvode_active = True + self.simConfig.cvode_atol = abs_tol + else: + self.simConfig.cvode_active = False + # Seeds for randomizers (connectivity, input stimulation and cell locations) # Note: locations and connections should be fully specified by the structure of the NeuroML, # so seeds for conn & loc shouldn't affect networks structure/behaviour @@ -435,7 +442,7 @@ def save_results(self): save_json = '-json' in sys.argv no_run = '-norun' in sys.argv - ns = NetPyNESimulation(tstop=700.0, dt=0.01, seed=123456789, save_json=save_json) + ns = NetPyNESimulation(tstop=700.0, dt=0.01, seed=123456789, save_json=save_json, abs_tol=None) if not no_run: ns.run() diff --git a/NetPyNE/UI/LEMS_HHSimple_netpyne.py b/NetPyNE/UI/LEMS_HHSimple_netpyne.py index 24b7e92..8a3f267 100644 --- a/NetPyNE/UI/LEMS_HHSimple_netpyne.py +++ b/NetPyNE/UI/LEMS_HHSimple_netpyne.py @@ -30,7 +30,7 @@ class NetPyNESimulation(): - def __init__(self, tstop=450.0, dt=0.05, seed=123456789, save_json=False): + def __init__(self, tstop=450.0, dt=0.05, seed=123456789, save_json=False, abs_tol=None): self.setup_start = time.time() @@ -51,6 +51,13 @@ def __init__(self, tstop=450.0, dt=0.05, seed=123456789, save_json=False): self.simConfig.duration = self.simConfig.tstop = tstop # Duration of the simulation, in ms self.simConfig.dt = dt # Internal integration timestep to use + # cvode + if abs_tol is not None: + self.simConfig.cvode_active = True + self.simConfig.cvode_atol = abs_tol + else: + self.simConfig.cvode_active = False + # Seeds for randomizers (connectivity, input stimulation and cell locations) # Note: locations and connections should be fully specified by the structure of the NeuroML, # so seeds for conn & loc shouldn't affect networks structure/behaviour @@ -181,7 +188,7 @@ def save_results(self): save_json = '-json' in sys.argv no_run = '-norun' in sys.argv - ns = NetPyNESimulation(tstop=450.0, dt=0.05, seed=123456789, save_json=save_json) + ns = NetPyNESimulation(tstop=450.0, dt=0.05, seed=123456789, save_json=save_json, abs_tol=None) if not no_run: ns.run() diff --git a/NeuroML2/LEMS_HHSmall.xml b/NeuroML2/LEMS_HHSmall.xml index d731ab7..e34ac24 100644 --- a/NeuroML2/LEMS_HHSmall.xml +++ b/NeuroML2/LEMS_HHSmall.xml @@ -2,7 +2,7 @@ diff --git a/NeuroML2/LEMS_HybridSmall.xml b/NeuroML2/LEMS_HybridSmall.xml index 1e9fe6a..07993a5 100644 --- a/NeuroML2/LEMS_HybridSmall.xml +++ b/NeuroML2/LEMS_HybridSmall.xml @@ -2,7 +2,7 @@ diff --git a/NeuroML2/LEMS_HybridTut.xml b/NeuroML2/LEMS_HybridTut.xml index e54ae87..72eb7e3 100644 --- a/NeuroML2/LEMS_HybridTut.xml +++ b/NeuroML2/LEMS_HybridTut.xml @@ -2,7 +2,7 @@ diff --git a/NeuroML2/LEMS_M1.xml b/NeuroML2/LEMS_M1.xml index 7f4b39e..1e7f0f7 100644 --- a/NeuroML2/LEMS_M1.xml +++ b/NeuroML2/LEMS_M1.xml @@ -2,7 +2,7 @@