From 526b69691d6662181f193ec875ba5ff245c329db Mon Sep 17 00:00:00 2001 From: "C.A.P. Linssen" Date: Sun, 2 Jun 2024 21:48:24 +0200 Subject: [PATCH 1/2] NESTCodeGeneratorUtils.generate_code_for() no longer touches source files on each call --- .../nest_code_generator_utils.py | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/pynestml/codegeneration/nest_code_generator_utils.py b/pynestml/codegeneration/nest_code_generator_utils.py index 44f6f80ca..c749bb81c 100644 --- a/pynestml/codegeneration/nest_code_generator_utils.py +++ b/pynestml/codegeneration/nest_code_generator_utils.py @@ -75,22 +75,24 @@ def generate_code_for(cls, ------- If a synapse is specified, returns a tuple (module_name, mangled_neuron_name, mangled_synapse_name) containing the names that can be used in ``nest.Install()``, ``nest.Create()`` and ``nest.Connect()`` calls. If no synapse is specified, returns a tuple (module_name, mangled_neuron_name). """ - from pynestml.frontend.pynestml_frontend import generate_nest_target # generate temporary install directory install_path = tempfile.mkdtemp(prefix="nestml_target_") # read neuron model from file? - if "\n" not in nestml_neuron_model and ".nestml" in nestml_neuron_model: + neuron_model_is_file_name: bool = "\n" not in nestml_neuron_model and ".nestml" in nestml_neuron_model + if neuron_model_is_file_name: + neuron_fn = nestml_neuron_model with open(nestml_neuron_model, "r") as nestml_model_file: nestml_neuron_model = nestml_model_file.read() # update neuron model name inside the file neuron_model_name = re.findall(r"model [^:\s]*:", nestml_neuron_model)[0][6:-1] - neuron_fn = neuron_model_name + ".nestml" - with open(neuron_fn, "w") as f: - print(nestml_neuron_model, file=f) + if not neuron_model_is_file_name: + neuron_fn = neuron_model_name + ".nestml" + with open(neuron_fn, "w") as f: + print(nestml_neuron_model, file=f) input_fns = [neuron_fn] _codegen_opts = {"neuron_parent_class": "StructuralPlasticityNode", @@ -99,15 +101,19 @@ def generate_code_for(cls, if nestml_synapse_model: # read synapse model from file? - if "\n" not in nestml_synapse_model and ".nestml" in nestml_synapse_model: + synapse_model_is_file_name: bool = "\n" not in nestml_synapse_model and ".nestml" in nestml_synapse_model + if synapse_model_is_file_name: + synapse_fn = nestml_synapse_model with open(nestml_synapse_model, "r") as nestml_model_file: nestml_synapse_model = nestml_model_file.read() # update synapse model name inside the file synapse_model_name = re.findall(r"model [^:\s]*:", nestml_synapse_model)[0][6:-1] - synapse_fn = synapse_model_name + ".nestml" - with open(synapse_fn, "w") as f: - print(nestml_synapse_model, file=f) + if not synapse_model_is_file_name: + synapse_fn = synapse_model_name + ".nestml" + with open(synapse_fn, "w") as f: + print(nestml_synapse_model, file=f) + input_fns += [synapse_fn] _codegen_opts["neuron_synapse_pairs"] = [{"neuron": neuron_model_name, "synapse": synapse_model_name, From 100be6248d1c7873e3a4e5b1b2433a27cb5fd4d7 Mon Sep 17 00:00:00 2001 From: "C.A.P. Linssen" Date: Mon, 3 Jun 2024 11:23:52 +0200 Subject: [PATCH 2/2] more verbose Jupyter notebook runs on CI --- .github/workflows/nestml-build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nestml-build.yml b/.github/workflows/nestml-build.yml index a0fe06b95..5750c3a05 100644 --- a/.github/workflows/nestml-build.yml +++ b/.github/workflows/nestml-build.yml @@ -242,8 +242,13 @@ jobs: ipynb_fns=$(find $GITHUB_WORKSPACE/doc/tutorials -name '*.ipynb') rc=0 for fn in $ipynb_fns; do + echo "Now running Jupyter notebook: ${fn}" cd `dirname ${fn}` - ipython3 ${fn} || rc=1 + ipython3 ${fn} + if [ $? -ne 0 ]; then + echo "Error running Jupyter notebook: ${fn}" + rc=1 + fi done; cd $GITHUB_WORKSPACE exit $rc