From 05d56e699e157bd14767eb3cf5c37093443a90c6 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 10:42:16 +0100 Subject: [PATCH 01/15] Fix some menu items --- webapp/components/topbar/menuConfiguration.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/webapp/components/topbar/menuConfiguration.js b/webapp/components/topbar/menuConfiguration.js index 57df0c6e..58cbce9e 100644 --- a/webapp/components/topbar/menuConfiguration.js +++ b/webapp/components/topbar/menuConfiguration.js @@ -201,7 +201,7 @@ export default { icon: '', list: [ { - label: 'From python...', + label: 'From Python...', icon: '', action: { handlerAction: 'redux', @@ -209,7 +209,7 @@ export default { }, }, { - label: 'From NeuroML2 (beta)...', + label: 'From NeuroML2...', icon: '', action: { handlerAction: 'redux', @@ -217,7 +217,7 @@ export default { }, }, { - label: 'From LEMS Simulation (beta)...', + label: 'From LEMS Simulation...', icon: '', action: { handlerAction: 'redux', @@ -231,7 +231,7 @@ export default { icon: '', list: [ { - label: 'To python...', + label: 'To Python...', icon: '', action: { handlerAction: 'redux', From e51dccc2fee46bad312fe13826d7d623e4fc54c5 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 10:42:38 +0100 Subject: [PATCH 02/15] Temporrily disabling validation & more verbose output --- netpyne_ui/netpyne_geppetto.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/netpyne_ui/netpyne_geppetto.py b/netpyne_ui/netpyne_geppetto.py index 8922e3c6..b76a7bfc 100644 --- a/netpyne_ui/netpyne_geppetto.py +++ b/netpyne_ui/netpyne_geppetto.py @@ -312,7 +312,7 @@ def validate_netParams(self): for line in summary: message = message + f" {line}\n" message = message + "\n" - raise NetpyneValidationError(message) + logging.warning("CONTINUING DESPITE FAILURE....") def simulateNetPyNEModelInGeppetto(self, args): @@ -480,6 +480,7 @@ def loadModel(self, args): :param args: :return: """ + logging.info("=========== Load Model ===========") if not any([args[option] for option in ['loadNetParams', 'loadSimCfg', 'loadSimData', 'loadNet']]): return utils.getJSONError("Error while loading data", 'You have to select at least one option') @@ -653,6 +654,8 @@ def importModel(self, modelParameters): os.chdir(owd) def importNeuroML(self, modelParameters): + + logging.info("=========== Importing NeuroML ===========") from netpyne_ui.helpers import neuroml From 39a180189aab99ec7c47f94faed194402b0c2d8c Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 10:42:52 +0100 Subject: [PATCH 03/15] To v1.1.3+osbv2 --- setup.py | 2 +- webapp/components/general/Dialog.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 081b6c05..9c5d2332 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ setuptools.setup( name="netpyne_ui", - version="1.1.0", + version="1.1.3+osbv2", url="https://github.com/MetaCell/NetPyNE-UI", author="MetaCell", author_email="info@metacell.us", diff --git a/webapp/components/general/Dialog.js b/webapp/components/general/Dialog.js index c133d28a..81e8ea2a 100644 --- a/webapp/components/general/Dialog.js +++ b/webapp/components/general/Dialog.js @@ -19,7 +19,7 @@ const AboutContent = withStyles(styles)(({ classes }) => ( - NetPyNE-UI v1.1.0 + NetPyNE-UI v1.1.3+osbv2 NetPyNE v1.0.6 From 82a4fa48862e45104c0759361704ea1b4f46c945 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 11:29:43 +0100 Subject: [PATCH 04/15] Test build of updated Dockerfile - make close to version on OSBv2 repo --- .github/workflows/docker-netpyne.yml | 28 +++ Dockerfile | 11 +- requirements-test.txt | 6 +- requirements.txt | 245 +++++++++++++++++---------- 4 files changed, 193 insertions(+), 97 deletions(-) create mode 100644 .github/workflows/docker-netpyne.yml diff --git a/.github/workflows/docker-netpyne.yml b/.github/workflows/docker-netpyne.yml new file mode 100644 index 00000000..5b7812b8 --- /dev/null +++ b/.github/workflows/docker-netpyne.yml @@ -0,0 +1,28 @@ +name: Docker Image Build NetPyNE-UI + +on: + push: + branches: [ master, dev*, feature/docker*, feature/repo* ] + pull_request: + branches: [ master, dev*, feature/docker*, feature/repo* ] + +jobs: + + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Build the Docker image + run: | + time docker build -t mynetpyneui -f Dockerfile . + + - name: Info on Docker image sizes + run: | + docker images + + - name: Run the Docker container and list python installs + run: | + docker run -t --rm --entrypoint /bin/bash mynetpyneui -c "pip3 list && python -V" diff --git a/Dockerfile b/Dockerfile index f4062502..51b6ae87 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18 as jsbuild +FROM node:18 AS jsbuild ENV FOLDER=netpyne @@ -12,12 +12,12 @@ COPY webapp . RUN yarn build-dev ### Download on a separate stage to run in parallel with buildkit -FROM jupyter/base-notebook:hub-1.5.0 as downloads +FROM quay.io/jupyter/base-notebook:python-3.12 AS downloads USER root RUN wget --no-check-certificate -O /nyhead.mat https://www.parralab.org/nyhead/sa_nyhead.mat ### -FROM jupyter/base-notebook:hub-1.5.0 +FROM quay.io/jupyter/base-notebook:python-3.12 ENV NB_UID=jovyan ENV FOLDER=netpyne ENV NP_LFPYKIT_HEAD_FILE=/home/jovyan/nyhead.mat @@ -28,13 +28,14 @@ RUN rm -rf /var/lib/apt/lists RUN apt-get update -qq &&\ apt-get install python3-tk vim nano unzip git make libtool g++ -qq pkg-config libfreetype6-dev libpng-dev libopenmpi-dev -y RUN apt-get install openjdk-11-jre-headless -y -RUN conda install python=3.7 -y +RUN apt-get install libxml2-dev libxslt-dev -y +# RUN conda install python=3.7 -y WORKDIR $FOLDER COPY --chown=1000:1000 requirements.txt requirements.txt RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\ - pip install -r requirements.txt --prefer-binary + pip install -r requirements.txt # ToDo: fixme, for now remove the jupyter hub config json file because it overrides the default diff --git a/requirements-test.txt b/requirements-test.txt index a4fbc581..8b0af441 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,3 +1,3 @@ -pytest==4.6.2 -pytest-cov==2.7.1 -tox==3.12.1 \ No newline at end of file +pytest +pytest-cov +tox \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c2d7075e..5326f342 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,101 +1,168 @@ -airspeed==0.5.20 -alembic==1.4.2 -async-generator==1.10 -attrs==19.3.0 -blinker==1.4 -bokeh==2.3.1 -brotlipy==0.7.0 -cachetools==0.8.0 -cffi==1.14.0 -chardet==3.0.4 -cryptography==2.9.2 -cycler==0.10.0 -decorator==4.4.2 -defusedxml==0.6.0 -Deprecated==1.2.10 -entrypoints==0.3 -future==0.18.2 -h5py==3.7.0 -idna==2.9 +aiofiles==22.1.0 +aiosqlite==0.21.0 +airspeed==0.6.0 +anyio==3.7.1 +argon2-cffi==23.1.0 +argon2-cffi-bindings==21.2.0 +arrow==1.3.0 +asttokens==3.0.0 +attrs==25.1.0 +babel==2.17.0 +beautifulsoup4==4.13.3 +bleach==6.2.0 +blosc2==3.1.1 +bokeh +cachetools==5.5.2 +cattrs==24.1.2 +certifi==2025.1.31 +cffi==1.17.1 +charset-normalizer==3.4.1 +comm==0.2.2 +contourpy==1.3.1 +cycler==0.12.1 +dacite==1.9.2 +debugpy==1.8.12 +decorator==5.2.1 +defusedxml==0.7.1 +Deprecated==1.2.18 +dnspython==2.7.0 +docstring_parser==0.16 +entrypoints==0.4 +executing==2.2.0 +fastjsonschema==2.21.1 +find_libpython==0.4.0 +fonttools==4.56.0 +fqdn==1.5.1 +future==1.0.0 +future-fstrings==1.2.0 +graphviz==0.20.3 +h11==0.14.0 +h5py==3.13.0 +httpcore==1.0.7 +httpx==0.28.1 +idna==3.10 +iniconfig==2.0.0 +ipykernel==6.20.2 +ipython==8.21.0 ipython-genutils==0.2.0 -ipywidgets==7.5.1 -jedi==0.17.0 +ipywidgets==8.1.5 +isoduration==20.11.0 +jedi==0.19.2 Jinja2==2.11.2 -jsonpickle==2.1.0 -jsonschema==3.2.0 -jupyter_geppetto==1.1.5 +json5==0.10.0 +jsonpickle==4.0.2 +jsonpointer==3.0.0 +jsonschema==4.23.0 +jsonschema-specifications==2024.10.1 +jupyter==1.1.1 jupyter-client==7.0.6 -jupyter-core==4.9.1 -jupyter-server==1.11.2 -jupyterhub==1.5.0 -jupyterlab==3.2.4 -neuromllite==0.5.4 +jupyter-console==6.4.4 +jupyter-core==4.12.0 +# jupyter-events==0.12.0 +jupyter-geppetto==1.1.5 +jupyter-server==1.15.0 +jupyter-ydoc==0.2.5 +jupyter_server_ydoc==0.8.0 +jupyterlab==3.3.4 +jupyterlab_pygments==0.3.0 +jupyterlab-server==2.10.3 +jupyterlab_widgets==3.0.13 jupyterthemes==0.20.0 -kiwisolver==1.2.0 -lesscpy==0.14.0 +kiwisolver==1.4.8 +lesscpy==0.15.1 +LFPykit==0.5.1 libNeuroML==0.5.1 -lfpykit==0.5.1 -lxml==4.5.1 -Mako==1.1.0 +lxml==5.3.1 MarkupSafe==1.1.1 -matplotlib -matplotlib-scalebar +matplotlib==3.10.0 +matplotlib-inline==0.1.7 +matplotlib-scalebar==0.9.0 +MEAutility==1.5.2 mistune==0.8.4 -multimethod==1.3 +modelspec==0.3.5 +msgpack==1.1.0 +multimethod==2.0 +nbclassic==0.3.7 +nbclient==0.10.2 nbconvert==5.6.1 -nbformat==5.0.6 -netpyne==1.0.6 -NEURON==8.2.2 -numpy==1.18.5 -oauthlib==3.0.1 -optuna==2.10.1 -ordered-set==4.0.2 -pamela==1.0.0 -pandas==0.23.4 -pandocfilters==1.4.2 -parso==0.7.0 -pexpect==4.8.0 -pickleshare==0.7.5 -Pillow==7.2.0 +nbformat==5.2.0 +ndindex==1.9.2 +nest-asyncio==1.6.0 +netpyne @ git+https://github.com/Neurosim-lab/netpyne.git@3d633bcda9a3ab3fe4a90b7c705cd3692a729185 +networkx==3.4.2 +neuromllite==0.5.4 +NEURON==8.2.6 +notebook==6.4.5 +notebook_shim==0.2.3 +numexpr==2.10.2 +numpy==1.26.4 +ordered-set==4.1.0 +packaging==24.2 +pandas==2.2.3 +pandocfilters==1.5.1 +parso==0.8.4 +pexpect==4.9.0 +pillow==11.1.0 +platformdirs==4.3.6 +pluggy==1.5.0 ply==3.11 -prompt-toolkit==3.0.5 -ptyprocess==0.6.0 -pycosat==0.6.3 -pycparser==2.20 -pyecore==0.11.7 -pygeppetto==0.8.1 +prometheus_client==0.21.1 +prompt_toolkit==3.0.50 +psutil==7.0.0 +ptyprocess==0.7.0 +pure_eval==0.2.3 +py==1.11.0 +py-cpuinfo==9.0.0 +pycparser==2.22 +pyecore==0.15.2 +pygeppetto==0.9.0 +Pygments==2.19.1 PyLEMS==0.5.9 +pymongo==4.11.1 pyNeuroML==1.0.10 -sentry_sdk==1.5.2 -dacite==1.6.0 -h5py==3.7.0 -jsonpickle==2.1.0 -Pygments==2.6.1 -PyJWT==1.7.1 -pyOpenSSL==19.1.0 -pyparsing==2.4.7 -pyrsistent==0.16.0 -PySocks==1.7.1 -python-dateutil==2.8.1 -python-editor==1.0.4 -python-json-logger==0.1.11 -pytz==2020.1 -PyYAML==5.3.1 -pyzmq==19.0.1 -qtconsole==4.7.5 -QtPy==1.9.0 -RestrictedPython==5.0 -ruamel-yaml==0.15.80 -ruamel.yaml.clib==0.2.0 -scipy==1.4.1 -Send2Trash==1.5.0 -terminado==0.8.3 -testpath==0.4.4 -tornado==6.1.0 -traitlets==4.3.3 -typing-extensions==3.7.4.2 -urllib3==1.25.9 +pyparsing==3.2.1 +pytest==6.2.5 +python-dateutil==2.9.0.post0 +python-json-logger==3.2.1 +pytz==2025.1 +PyYAML==6.0.2 +pyzmq==26.2.1 +referencing==0.36.2 +requests==2.32.3 +RestrictedPython==8.0 +rfc3339-validator==0.1.4 +rfc3986-validator==0.1.1 +rpds-py==0.23.1 +schema==0.7.7 +scipy==1.15.2 +Send2Trash==1.8.3 +sentry-sdk==1.5.2 +setuptools==75.8.0 +six==1.17.0 +sniffio==1.3.1 +soupsieve==2.6 +stack-data==0.6.3 +tables==3.10.2 +tabulate==0.9.0 +terminado==0.18.1 +testpath==0.6.0 +tinycss2==1.4.0 +toml==0.10.2 +tornado==6.1 +tqdm==4.67.1 +traitlets==5.9.0 +types-python-dateutil==2.9.0.20241206 +typing_extensions==4.12.2 +tzdata==2025.1 +uri-template==1.3.0 +urllib3==2.3.0 +wcwidth==0.2.13 +webcolors==24.11.1 webencodings==0.5.1 -widgetsnbextension==3.5.1 -wrapt==1.12.1 -zipp==3.1.0 \ No newline at end of file +websocket-client==1.8.0 +wheel==0.45.1 +widgetsnbextension==4.0.13 +wrapt==1.17.2 +xyzservices==2025.1.0 +y-py==0.6.2 +ypy-websocket==0.8.4 From 13041dfe4c80648849c922a402a9c5d46dc26749 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 11:31:49 +0100 Subject: [PATCH 05/15] Run test on this branch --- .github/workflows/docker-netpyne.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-netpyne.yml b/.github/workflows/docker-netpyne.yml index 5b7812b8..92b9f7e4 100644 --- a/.github/workflows/docker-netpyne.yml +++ b/.github/workflows/docker-netpyne.yml @@ -2,9 +2,9 @@ name: Docker Image Build NetPyNE-UI on: push: - branches: [ master, dev*, feature/docker*, feature/repo* ] + branches: [ master, dev*, feature/docker*, feature/repo*, osbv2* ] pull_request: - branches: [ master, dev*, feature/docker*, feature/repo* ] + branches: [ master, dev*, feature/docker*, feature/repo*, osbv2* ] jobs: From 3af19555e190aa226840479a6e2af98ce66d5c97 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 11:45:58 +0100 Subject: [PATCH 06/15] Temp disable some tests --- Dockerfile | 2 +- tests/backend/netpyne_model_interpreter_test.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 51b6ae87..632bfd3f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -83,7 +83,7 @@ RUN mv workspace /opt/workspace/tutorials RUN chown -R $NB_UID /opt/workspace RUN ln -s /opt/workspace workspace -RUN jupyter labextension disable @jupyterlab/hub-extension +# RUN jupyter labextension disable @jupyterlab/hub-extension COPY --from=downloads --chown=1000:1000 /nyhead.mat $NP_LFPYKIT_HEAD_FILE COPY --from=jsbuild --chown=1000:1000 $FOLDER/webapp/build webapp/build diff --git a/tests/backend/netpyne_model_interpreter_test.py b/tests/backend/netpyne_model_interpreter_test.py index 0bcef888..be9ecf39 100644 --- a/tests/backend/netpyne_model_interpreter_test.py +++ b/tests/backend/netpyne_model_interpreter_test.py @@ -23,6 +23,7 @@ class TestNetPyNEModelInterpreter(unittest.TestCase): @classmethod def setUpClass(cls): + print("== Setting up: TestNetPyNEModelInterpreter") HERE = os.path.dirname(os.path.realpath(__file__)) ROOT = os.path.dirname(HERE) cls.path = NETPYNE_WORKDIR_PATH @@ -38,6 +39,7 @@ def setUpClass(cls): logging.error("Error loading mechanisms", exc_info=True) def getGeppettoModel(self, netParams, simConfig): + print("== getGeppettoModel") sim.create(netParams, simConfig, True) sim.gatherData() @@ -46,6 +48,7 @@ def getGeppettoModel(self, netParams, simConfig): sim.analyze() def test_getGeppettoModelSimpleNetwork(self): + print("== test_getGeppettoModelSimpleNetwork") # object of class NetParams to store the network parameters netParams = specs.NetParams() # object of class SimConfig to store the simulation configuration @@ -88,6 +91,7 @@ def test_tut1(self): from gui_tut1 import netParams, simConfig self.getGeppettoModel(netParams, simConfig) + ''' # @unittest.skip("Neuron restart kernel issue") def test_tut2(self): print("------------------------------------") @@ -135,7 +139,7 @@ def test_Hnn(self): print("------------------------------------") from hnn_simple import netParams, cfg - self.getGeppettoModel(netParams, cfg) + self.getGeppettoModel(netParams, cfg) ''' if __name__ == '__main__': From 568e7f3ed1ca4c916b68794cc7396a32746bf48f Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 11:46:09 +0100 Subject: [PATCH 07/15] More verbose pytest --- utilities/install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utilities/install.py b/utilities/install.py index 1830adc0..34c0bb90 100644 --- a/utilities/install.py +++ b/utilities/install.py @@ -185,7 +185,7 @@ def main(netpyne_branch, workspace_branch, geppetto_branch=None, skipNpm=False, cprint("Installing test libraries") execute(cmd=['pip', 'install', '-r', 'requirements-test.txt'], cwd=ROOT_DIR) cprint("Testing NetPyNE") - execute("python -m pytest tests".split()) + execute("python -m pytest -vs tests".split()) cprint("Installing client packages") if not skipNpm: From eea2e3d3cc46eb198561172a4ced3f33fce722f3 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 11:54:04 +0100 Subject: [PATCH 08/15] More docker helper files --- .github/workflows/docker-netpyne.yml | 2 +- build_docker.sh | 4 ++++ run_docker.sh | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100755 build_docker.sh create mode 100755 run_docker.sh diff --git a/.github/workflows/docker-netpyne.yml b/.github/workflows/docker-netpyne.yml index 92b9f7e4..14a90c5d 100644 --- a/.github/workflows/docker-netpyne.yml +++ b/.github/workflows/docker-netpyne.yml @@ -17,7 +17,7 @@ jobs: - name: Build the Docker image run: | - time docker build -t mynetpyneui -f Dockerfile . + ./build_docker.sh - name: Info on Docker image sizes run: | diff --git a/build_docker.sh b/build_docker.sh new file mode 100755 index 00000000..98920b2f --- /dev/null +++ b/build_docker.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -e + +time DOCKER_BUILDKIT=1 docker build -t mynetpyneui -f Dockerfile . diff --git a/run_docker.sh b/run_docker.sh new file mode 100755 index 00000000..50ebaa0b --- /dev/null +++ b/run_docker.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +# A script to run the NetPyNE container locally (build it first with ./build_local.sh) + +docker run --network host -it --rm --name mynpui mynetpyneui + + From bfa01cb6a4e64bb47f29e34eed63586f84ce02b7 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 13:40:46 +0100 Subject: [PATCH 09/15] Update versions in about dialog --- webapp/components/general/Dialog.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/components/general/Dialog.js b/webapp/components/general/Dialog.js index 81e8ea2a..160ff208 100644 --- a/webapp/components/general/Dialog.js +++ b/webapp/components/general/Dialog.js @@ -22,10 +22,10 @@ const AboutContent = withStyles(styles)(({ classes }) => ( NetPyNE-UI v1.1.3+osbv2 - NetPyNE v1.0.6 + NetPyNE v1.1.0+osbv2 - NEURON v8.2.2 + NEURON v8.2.6 From 43d172c18113723663d7329a261f9896480c5388 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 13:41:26 +0100 Subject: [PATCH 10/15] Test one frontend test --- .github/workflows/tests.yml | 66 ++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 61201c39..aaefa137 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,19 +1,19 @@ # name: Tests Workflow # # Controls when the workflow will run -# on: -# # Triggers the workflow on push or pull request events but only for the specified branch -# push: -# branches: -# - "master" -# - "development" -# pull_request: -# branches: -# - "master" -# - "development" +on: + # Triggers the workflow on push or pull request events but only for the specified branch + push: + branches: + - "master" + - "development" + pull_request: + branches: + - "master" + - "development" # # A workflow run is made up of one or more jobs that can run sequentially or in parallel -# jobs: +jobs: # EEG_Dipole-test: # # The type of runner that the job will run on # runs-on: ubuntu-20.04 @@ -80,28 +80,28 @@ # npm run Control_Panel_test # env: # CI: true -# Save_and_Open_File-test: -# # The type of runner that the job will run on -# runs-on: ubuntu-20.04 -# container: lironavon/docker-puppeteer-container:14.16.0 -# env: -# CI: true -# steps: -# - uses: actions/checkout@v1 -# - name: Use Node.js ${{ matrix.node-version }} -# uses: actions/setup-node@v1 -# with: -# node-version: ${{ matrix.node-version }} -# cache-dependency-path: frontend/e2e/tests/package-lock.json -# - name: Test for Opening and Saving a file -# run: | -# cd tests/frontend/e2e -# #install dependencies -# npm ci -# # run Control Panel test -# npm run Save_Open_File_test -# env: -# CI: true + Save_and_Open_File-test: + # The type of runner that the job will run on + runs-on: ubuntu-20.04 + container: lironavon/docker-puppeteer-container:14.16.0 + env: + CI: true + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + cache-dependency-path: frontend/e2e/tests/package-lock.json + - name: Test for Opening and Saving a file + run: | + cd tests/frontend/e2e + #install dependencies + npm ci + # run Control Panel test + npm run Save_Open_File_test + env: + CI: true # RxD-test: # # The type of runner that the job will run on # runs-on: ubuntu-20.04 From 24191bbc1dd9fd0c69411e9f04e6357e6dc0acaa Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 13:58:22 +0100 Subject: [PATCH 11/15] More testing --- .github/workflows/tests.yml | 2 ++ tests/backend/netpyne_model_interpreter_test.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index aaefa137..7754c843 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,10 +7,12 @@ on: branches: - "master" - "development" + - "osbv2*" pull_request: branches: - "master" - "development" + - "osbv2*" # # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: diff --git a/tests/backend/netpyne_model_interpreter_test.py b/tests/backend/netpyne_model_interpreter_test.py index be9ecf39..b76e9a77 100644 --- a/tests/backend/netpyne_model_interpreter_test.py +++ b/tests/backend/netpyne_model_interpreter_test.py @@ -91,7 +91,7 @@ def test_tut1(self): from gui_tut1 import netParams, simConfig self.getGeppettoModel(netParams, simConfig) - ''' + # @unittest.skip("Neuron restart kernel issue") def test_tut2(self): print("------------------------------------") @@ -107,7 +107,7 @@ def test_tut3(self): print("------------------------------------") from gui_tut3 import netParams, simConfig self.getGeppettoModel(netParams, simConfig) - + ''' # @unittest.skip("Neuron restart kernel issue") def test_tut4(self): print("------------------------------------") From 4e229289189fe25851902abaab13a30ca3fd4f4e Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 14:25:40 +0100 Subject: [PATCH 12/15] Fix broken link in about box --- webapp/components/general/Dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/components/general/Dialog.js b/webapp/components/general/Dialog.js index 160ff208..18e84e8d 100644 --- a/webapp/components/general/Dialog.js +++ b/webapp/components/general/Dialog.js @@ -46,7 +46,7 @@ const AboutContent = withStyles(styles)(({ classes }) => ( Want to know more? Go to our {' '} website From 7a4d0379c87c02c01a07b85fffb7eefda7814581 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Thu, 21 Aug 2025 14:48:09 +0100 Subject: [PATCH 13/15] Updates to latest metacall logo Fixes https://github.com/MetaCell/NetPyNE-UI/issues/753 --- webapp/components/general/Dialog.js | 2 +- webapp/static/metacell.png | Bin 0 -> 8027 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 webapp/static/metacell.png diff --git a/webapp/components/general/Dialog.js b/webapp/components/general/Dialog.js index 18e84e8d..71702a3d 100644 --- a/webapp/components/general/Dialog.js +++ b/webapp/components/general/Dialog.js @@ -5,7 +5,7 @@ import { Typography, Paper, Box, Link, Icon } from '@material-ui/core'; import { withStyles } from '@material-ui/core/styles'; import { secondaryColor, bgLight } from '../../theme'; import logoNetpyne from '../../static/netpyne-logo_white.png'; -import logoMetaCell from '../../static/metacell_new.png'; +import logoMetaCell from '../../static/metacell.png'; const styles = (theme) => ({ paper: { diff --git a/webapp/static/metacell.png b/webapp/static/metacell.png new file mode 100644 index 0000000000000000000000000000000000000000..77f22bcea16eab2d08bc3f96933f96db26e79f33 GIT binary patch literal 8027 zcmds6i93{C*dI%lvb^Ojku3?mk+Ls?grY*(cUln!PsVoVURJzSiX6$@B1sh=enNjxt{Z!=RWuO-M@40bKSqpJGM7Ok4hf}005%a zRu=XE03Q$l-~k8;a9bclk;l0Y;V>(=NC4oN#D6yrARlp>+sG4Xf8!dUazJK@`@#=0 zvoQkzYO;^*-8%vR$gNvjm^sGsFsJOwAG*ZuI&6YT+15Tx3=jXU4FLFB@B`1~K7o4#M(V+M1}?IuR<`g3=!zE)#k?i1sbHq*CG^;4S982810Kq@?RQ#F$#^+Qp0kofclL`yYVo5e;u@Dpo3`onZpLh|!51xIXZ3$C>j41q${mqP z(av;S)NgAch;CldR#9>`08k*Q3A}NKKs>%E6Z)1U8<_wAEZ$59`Cj-Hrv)}S`rTFn zI%;xrZOVx2r)>AS$Y(hewFn1y>)o6b2LJ-h+O<-FJ}R(h!m9#Fu`>840t7w)K>Dxs z&2m%~)Nas6c(-1N70>Ny)jo2rQ&^x;$c+1+s8DRY;xB`IOCjzj{Wqzlf=`g2Jf0Q^ z0#f;eVhvBMAo>*fjRAm_volKtl|LabbRefN##Q9|%;uh6$O$@=8woig836djHEVV> z*5vu@Ejxk(M<1rL-K3t6m>HM)JQ-TL<&H!C*oj3*LeYZm~3zcrAz+gzfz&2-+~ zwrJ@41N`!{Gm*=efHHS~|efL`F|%YTZ?@Gqx)W|G(^LmP>GoG zs^yNi?b@Lt;506Xvo}t+Ikg}VimDRi^c6N)2E`1p9~$8*J?~xeQ8QkQ`#?ehe6<)$;puO2bU7jUh6)2M`;A8FHB zx(w)ENf-QXl0Xb5yKyIFk^M_zQu{q0`Ub|>WGg(b51qN`jgt{2rgUTsO@6-K5fzIB zk&l}QXaZYw_A|VTba5AqZ!SgC?u+a+V0UKZZw*}QPXj9td80;jWX-R-$rsofqc2Gg zfB5m|w%FvO@~Wy#YZ1`c+yM&|ra1=v9OUMy9K*Xnpxt@qA3CnCaq)^B`Nq-1I8WLV@{@(JdobHa;+Gprl0vSDrqm9wuZ&4-jTIh=(Am-w8b?& zdv|OdAS)Ex8U&e1&QeX7?sX~BU_C0@8o})6j2^fL#n^N5Mh}95QZ6*0Z!@zk1*5TF zMz=ewpUwWAOI^ayWduf8hXLe5!8A-7((Pqeae?3fw06{oO?u3klJEG2+@$VHj?jps z$%ZiF5YyXCaeK~wJSPXgq>C0QFY7?vnN;Qx z-6Fd`Akm!bjh}~mKR!9|ER~KIyWkw=G$-l1d;b6*$jZVb8R>!|?=$H(S}tPJCL5iG3RKI`uq%Yi0IA~WwxB@lOepRc?xjW)4+zV7OVOcHz(B@VO#s3NdC`g@Z4x-ic7bX%jDogEBc#zyriyW+mOzpbI-3jET z9=`e@iL#77ydA%Sz6qur4m!Or#Ve+)#MHh3(^l^^r{9vVkKTOoo(-xBrjG#|Tq0-T zl{_9|?aS>SgH?)WYr+Khfj;_0hU8DG7GjWLnorlpLXyWDiJBzTKuHJzn;PH|o`yKi z8K^8MU6q30a7#Ctn2AymwzXBA(oXk*(*8d77P7xW?JbSjU3DxU@5Qr1$pUveFO`eP z*tSb(#7~B7*T zelvAXiNr5pV>iayCJ)sDjT5(~r6Z27MNzUJ7)X|a2Ol^BULsOKfj-sHlaa%yE>LMd z#hb$}S?O!_rLkJb5nc!Tpc>CnPq>*4yOiikM}v)M>Rs zFTcUY`PgQzdE=j&;_N*XHhB5Hw)jcz8K6$v*cTo5w}R~D!+6qOnz~Dsz?Cmf4yD>+J|wLcf?M5h084arZ`AiEtEJ2Q#G1=7#{GXhzRPp@J};^` z3Aazl(p(4%p&AV9QV){%pe@-yflg?G74_*hjn^pskuQA$OQ2 z-?`dpp|`)c(|_im@&)sJS(W^Q2I)zLiD~Nvyo3Bh)OCYUqF`{kp6gce!5MFXzst=p zFeE#w7;A&#pPJ6rp+^Gf9TJi}L0T_uRis{i5FzkT&5mIPwzAj|9D`JH#A1A#Ectf@ ztk}DM)v>0@p3FFa^A?&)!y61-#d~>|NKonCrs#n!A`W_T-ZNMp5t=-APL2@EG|? zMOByodB50N>%r?{p7fzUT8yLX8+tPF9Wq*dQXUF zB#Wy#lax~Lo>*Tw7k)&`z+&^1VbrqE^6p`9C9+ z2)X|FSQcYVoH46}9L3S<0+j6lDTXuaC^N)onN?Q&)QRR`hpFJ!`DUOJ3#ad^zx87I znH6XVjYWS_On*N{F+YEDIBwSQeD#qigcc9s06Kj_Ytv zAIXX}Sl7=K?JAW1>C?EMxAdg$p%wYSyB4|yAa?w<5rzeK^ke-VY>E1iqrFBph%GdB zIY+7Yim-dI0eXg6X&&r8koonWd+O?;h!QjFty!MKFJR?;I)R&CKqvZpqR! ztIgFrXNZQB!LVQE}6ExB298;l0kUIqO2K&c0aEtD6aW~W#ogt)ywx~YmE}p z@?cIsYfU5-!CFdRi^Mc$1dgw-7$~qm96VYs7HuQzg{TF;i=Kdx!AFi(rcCSZFoL8*A-Gp;U>#)>oYWefpC<8v^gO zsd5)hha9=i8C!CbpN3dnSk~}4+Y#x|S2zJGz6ArF>hD<%bBw;nC0xwX8|Qs^)jXRP#a`a_98{D@{t zqz@!RB0yrWQL1FDCj1%*1y=8`OBxs*P#ToZvru{ z@}gEW8Ekw@`&b983-CYAbS}vlGgQ;w{c0JOe3EHM+wI=y9s_*h;#~1muAE(P-1BHW#Iwh8#k1jHdG~r!29~M zn4)(UjVAkq)ipHWCquc#6UNJnGKMa;R7wq}ncFJp9l4s(w=|(612(R!&u6-6c;GIi zN_XrbEeGKrYk^?;D!&Xxn-t9ezJLwWFI9oHvT4ngnGMfrttSC0>ug_i;#GaBD|M~& z;ALM~lGCI!eQ)K<29{9=+ina!LA@-1OEJJh$9MHNEf|J)EpiQ^a#^=$0{KN>K1;t< zo*!JFcV?vPFj#E8bg1tv8s}w_N%IyKt9d@}!H>AYL)b7knF!x!>d#7=t?Jm}!gks> zKzd%XE%Z^(kf#1hitIZnlH{Ki`{6eNJaz=e;dsnQXNG7fEFoV$#GQ2$LT5o|bJOOc zT?6V_hryTbBIQg|lJosTu*q9u)z4`ghF2Spx>70wOjv`a+y(4iW{sF`vtdfkefi$K zTV0oQ?5+38*U*txjwW|itgkdPnW`DyD?AI+j3|3(LbHnC^g|cBNND>7qsA4n`61;N zX#XeqwZ>Snow^u3l9QIFg%Mc3$|V}qtCS!2k84^ucPCttx3d(0W4ew!+XqK<40iI=+w%;~9;#qZ4^Ob+!)a)YTkZ7$PLws=l zdr60N6;*`6-O;ll-dUQxo%DhCf!dKOyT|T4K4)L=%iYg=x@1cE<}^B2Lw;oS2AoMg zoC}rqY}80~_nHTd+`)cZTm+p7b+L!2c<`rLr5t)11WnHtmu~|3x=c{3O0dk-{S5pMHha$e#WoMwIjr2TaxopU zi$29YD|7Xc5coVSg(e#BGoq~8pHc-s8saxgR&W|sFLun!2?V$JYz*EeH!|lNL z_edN1F(>=^P--!up2*9o0a}zGN}^AJuU@hh`ElS*Ai^~s6=y|mbLFt(kEao0yjs3J z`Z!3$!)whl2E?1UI@FK7{x2J%#+O|#mzP8aO$WNJ&*ZO&-59TZ;fo=Cd%Y)1QVz(o z;M_|^*6$_v$O&F{r>(0ojeaMo_pWO=a1KyOW$I)$zJ|UnDd^d_%ZmQ^G`xt5j3MGOa|2tLLd_>ppnV4G!2jVDVgd= zjjvoTVt$=|b+3Ch>>sdlYi_7R+#mC(9U0oks5HNL1_ybg@w_rO`{$>sc)v9FUYTG* z;0;FwHm63DBr>ds_m{A$46hMuKkdlz<7NhU=uj$ zm9m=R0c?oDoxKB?<@H>nMxPn573G-i*=?C^w{&MnhJ!)r{UgiD>PFiU#Xl~g*Q|pG zjDLcV#hf@J*!KaY=HJGApmsx`Pxs>va>7<%i}QDdVb-6i`kk&N18OgL$2YRu6CtTb zsa~t(+Tk2#Z~keM;`A2+d$UkiaRmW#$0%LG{rm9YW%sN8Zo=CqpF!p}D}G-q+F^Z| zhReuAA)#7dv;uZoX*Q;GHvPQmVPI6uyS2O%*P${yK>BLU#jT3C#3G%K-gZ?i!EnVT z9q&$2d(&ld#`boRy-{@Mw*sqgypmXCfJp6g$aaZv2Jy zna}~z-9H990voSVt&N}ibzRH-y_@BFDK=K(c43kqrnS$ZMZy!_xf4um%H2wN6PinJ zvHb+M9?cRT&yu7cKW(t+T`s7=4yQr(KkUSgjC&UBxz_2wa!8>`VsJ8Dbyan70WAH2 zYYXCY^_6o1T18B}nADiAddMXLeONM5t|X@pxXe<*9x*r$A7{8x=)1e}og25-Kbb#4 zlGJ+7wM1Tv)^HzxaU=UBhW__J$j6~1lK*|m^Zm&C@DD#VgWsp60vDJhdM<0to}?kvJ#m8gm~+w%sew+=r`O^srdCWB2TpMmg<#LQ zD^nnL^cL{SV!|A-pXyzS#RZnGL_c$@hpM!qE$U6f(O4;e$C#jnE}7=8#1kEHE~Q5i zl01YLS$?|*Z#0$?6;$tgp=^ei|5S|16>YJWx>E8<7G9IU zGlXOOV+2(t097qbK6XpBTc?p1QrZ8^XqODFCR99q4V%1s`4w&YHicf7bxNXn1dJ*n z(+X6?_257Bzonc_69HML)4zx@Cwk1xGu>WR3`_1D+AzoMIU1OK&S->yintTU4znK- z)HZEit(6&}!tNFOyU^ru(C+s7_WXO2n4ihcAvkU5*fQyoMg0EPropRX@u%*#A|@_C z76b-grGjjd6m?C*whJ?`vL3Q4i00-#U3qD!7tGM3PCqP$dweSCxb`Vawe-$S^1Y%* zrQ?+5)9th0G_RVqtu}A|W$-!m+vmS9(~pnUej6P4UwMQ>xJWN1hq3 z*D1Gj^o+{7Ljy`bT*ZlfBl)|P_+REudA}cBKj-zaSEuxDGYUO28Q$Y)k7J1urCo~Y zk;tJP=lH(HKKfH`nSwEu58L=Ai@!}cqc?l3K@3t^7*fmE($JGEdWC;s>K9OH3HVWyil3b?Cb%E26O#hSWeA-- zi^pYty35u&Ch4_2fUANgRa+=dAD1 ziRuQy(N)rv!G>s%gD6)9v8`l)ObE(^GQTl;Xi(#Q08#T6+g4{fWT4rNJ0Sr{v*0BQ zPFlT`;YDsKZa%)HyQ1glFfrnTi+8c%BcDtvOIGQP;oGjI{n&F{C5w;8PLQa{$5Mjv zbY7vRg6=-5A~$$M!^=HQT(U;J!6yK`fUr8QzEY;8YOt8c-&JqLv^@$r#nm1>xPpwr zqCvBz5QHnpq^6dtJVAYOd+Ph2AR`&o%;Ciy6Ka_jvQ zjMNxNFh-nR0MMuYUi9Ru8TCpt2E3gj(jHHD47vJM`y1@JZk1IG4soefeg#VTVCG zNbqp2{s(zPH?CMCa<$zd^^ATW7)45w;`;g3%zh>^k5tD=c;o> zCl7>&>uG?Da}_7?#U&?FJVH-rO%WLVz9^BtK4;Spae; zq53|RE>f(pXt>xzwhq!Dn))>Mz~Gmhu}%BF)D4Ga>i-{U_J3z`{?8%Opj}NpOa}K~ OgSDltMddZ$C;tO$v~}zN literal 0 HcmV?d00001 From 32b5c6302e39c73290da077fc9bf04cd340dd8ee Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Fri, 22 Aug 2025 15:31:34 +0100 Subject: [PATCH 14/15] Disable test again --- .github/workflows/tests.yml | 70 ++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7754c843..c7291b09 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,21 +1,21 @@ # name: Tests Workflow # # Controls when the workflow will run -on: - # Triggers the workflow on push or pull request events but only for the specified branch - push: - branches: - - "master" - - "development" - - "osbv2*" - pull_request: - branches: - - "master" - - "development" - - "osbv2*" +# on: +# # Triggers the workflow on push or pull request events but only for the specified branch +# push: +# branches: +# - "master" +# - "development" +# - "osbv2*" +# pull_request: +# branches: +# - "master" +# - "development" +# - "osbv2*" # # A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: +# jobs: # EEG_Dipole-test: # # The type of runner that the job will run on # runs-on: ubuntu-20.04 @@ -82,28 +82,28 @@ jobs: # npm run Control_Panel_test # env: # CI: true - Save_and_Open_File-test: - # The type of runner that the job will run on - runs-on: ubuntu-20.04 - container: lironavon/docker-puppeteer-container:14.16.0 - env: - CI: true - steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - cache-dependency-path: frontend/e2e/tests/package-lock.json - - name: Test for Opening and Saving a file - run: | - cd tests/frontend/e2e - #install dependencies - npm ci - # run Control Panel test - npm run Save_Open_File_test - env: - CI: true +# Save_and_Open_File-test: +# # The type of runner that the job will run on +# runs-on: ubuntu-20.04 +# container: lironavon/docker-puppeteer-container:14.16.0 +# env: +# CI: true +# steps: +# - uses: actions/checkout@v1 +# - name: Use Node.js ${{ matrix.node-version }} +# uses: actions/setup-node@v1 +# with: +# node-version: ${{ matrix.node-version }} +# cache-dependency-path: frontend/e2e/tests/package-lock.json +# - name: Test for Opening and Saving a file +# run: | +# cd tests/frontend/e2e +# #install dependencies +# npm ci +# # run Control Panel test +# npm run Save_Open_File_test +# env: +# CI: true # RxD-test: # # The type of runner that the job will run on # runs-on: ubuntu-20.04 From f279c515bb3e006d922a4a6114f38c016761bcf5 Mon Sep 17 00:00:00 2001 From: Padraig Gleeson Date: Fri, 22 Aug 2025 16:08:37 +0100 Subject: [PATCH 15/15] Correct y placement of cells Fix for https://github.com/MetaCell/NetPyNE-UI/issues/794 - needs to be checked on more models... --- netpyne_ui/netpyne_model_interpreter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netpyne_ui/netpyne_model_interpreter.py b/netpyne_ui/netpyne_model_interpreter.py index 2175ab6e..1d4de2c2 100644 --- a/netpyne_ui/netpyne_model_interpreter.py +++ b/netpyne_ui/netpyne_model_interpreter.py @@ -98,7 +98,7 @@ def extractPopulations(self, netpyne_model, netpyne_geppetto_library): index=len(populations[cell['tags']['pop']].defaultValue.elements), position=Point( x=float(cell['tags']['x'] * netpyne_model.net.params.cellsVisualizationSpacingMultiplier[0]), - y=-float(cell['tags']['y'] * netpyne_model.net.params.cellsVisualizationSpacingMultiplier[1]), + y=float(cell['tags']['y'] * netpyne_model.net.params.cellsVisualizationSpacingMultiplier[1]), z=float(cell['tags']['z'] * netpyne_model.net.params.cellsVisualizationSpacingMultiplier[2]) ) )