From 7123aefced90441c1f05dbd5b4719292350f8e35 Mon Sep 17 00:00:00 2001 From: DimitriPlotnikov Date: Thu, 30 Jun 2016 13:05:33 +0200 Subject: [PATCH 1/3] -increase version -use the latest release in the docker container --- docker/DockerfileRelease | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/DockerfileRelease b/docker/DockerfileRelease index 1f2068fbd..a34bcc6be 100644 --- a/docker/DockerfileRelease +++ b/docker/DockerfileRelease @@ -36,7 +36,7 @@ ENV MAVEN_HOME /usr/share/maven # Define working directory. WORKDIR /data -RUN wget https://github.com/nest/nestml/releases/download/0.0.4/nestml.jar +RUN wget https://github.com/nest/nestml/releases/download/0.0.5/nestml.jar # create a non-root user named tester, # give them the password "tester" put them in the sudo group diff --git a/pom.xml b/pom.xml index 9101d6d23..0c9c8f175 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ nestml nestml-core - 0.0.5 + 0.1.0-SNAPSHOT From 9bbf08f119f8504dfa7f4cc3d4f620584d9ec0a3 Mon Sep 17 00:00:00 2001 From: DimitriPlotnikov Date: Thu, 30 Jun 2016 15:01:25 +0200 Subject: [PATCH 2/3] -put models ported from NEST to the models folder --- .../aeif_cond_alpha.nestml | 0 .../aeif_cond_alpha_implicit.nestml | 0 .../aeif_cond_alpha_multisynapse.nestml | 0 .../aeif_cond_exp.nestml | 0 .../aeif_cond_exp_implicit.nestml | 0 .../hh_psc_alpha.nestml | 0 .../iaf_cond_alpha.nestml | 0 .../iaf_cond_alpha_implicit.nestml | 0 .../iaf_cond_beta.nestml | 0 .../iaf_cond_exp.nestml | 0 .../iaf_cond_exp_implicit.nestml | 0 .../iaf_neuron.nestml | 2 +- .../iaf_psc_alpha.nestml | 0 .../iaf_psc_alpha_multisynapse.nestml | 0 .../iaf_psc_delta.nestml | 0 .../iaf_psc_exp.nestml | 0 .../iaf_psc_exp_multisynapse.nestml | 0 .../iaf_tum_2000.nestml | 0 .../izhikevich.nestml | 0 .../mat2_psc_exp.nestml | 0 .../nestml/_cocos/UsesOnlyComponents.java | 9 ++++-- .../java/org/nest/base/ModelbasedTest.java | 2 +- .../codegeneration/NESTCodeGeneratorTest.java | 4 +-- .../helpers/AliasInverterTest.java | 2 +- .../sympy/ExpressionFolderTest.java | 8 +++-- .../sympy/LinearSolutionTransformerTest.java | 2 +- .../sympy/SympyScriptGeneratorTest.java | 15 ++++----- .../NESTCodeGeneratorIntegrationTest.java | 32 +++++++++---------- .../nest/integration/ODEProcessorTest.java | 8 ++--- .../integration/SymPyScriptEvaluatorTest.java | 12 +++---- .../nestml/_cocos/NESTMLCoCosManagerTest.java | 4 +-- .../nest/nestml/_cocos/NESTMLCoCosTest.java | 20 +++++++++--- .../symboltable/NESTMLSymbolTableTest.java | 2 +- .../_cocos/usesOnlyComponents/invalid.nestml | 4 +-- 34 files changed, 68 insertions(+), 58 deletions(-) rename {src/test/resources/codegeneration => models}/aeif_cond_alpha.nestml (100%) rename {src/test/resources/codegeneration => models}/aeif_cond_alpha_implicit.nestml (100%) rename {src/test/resources/codegeneration => models}/aeif_cond_alpha_multisynapse.nestml (100%) rename {src/test/resources/codegeneration => models}/aeif_cond_exp.nestml (100%) rename {src/test/resources/codegeneration => models}/aeif_cond_exp_implicit.nestml (100%) rename {src/test/resources/codegeneration => models}/hh_psc_alpha.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_cond_alpha.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_cond_alpha_implicit.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_cond_beta.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_cond_exp.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_cond_exp_implicit.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_neuron.nestml (99%) rename {src/test/resources/codegeneration => models}/iaf_psc_alpha.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_psc_alpha_multisynapse.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_psc_delta.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_psc_exp.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_psc_exp_multisynapse.nestml (100%) rename {src/test/resources/codegeneration => models}/iaf_tum_2000.nestml (100%) rename {src/test/resources/codegeneration => models}/izhikevich.nestml (100%) rename {src/test/resources/codegeneration => models}/mat2_psc_exp.nestml (100%) diff --git a/src/test/resources/codegeneration/aeif_cond_alpha.nestml b/models/aeif_cond_alpha.nestml similarity index 100% rename from src/test/resources/codegeneration/aeif_cond_alpha.nestml rename to models/aeif_cond_alpha.nestml diff --git a/src/test/resources/codegeneration/aeif_cond_alpha_implicit.nestml b/models/aeif_cond_alpha_implicit.nestml similarity index 100% rename from src/test/resources/codegeneration/aeif_cond_alpha_implicit.nestml rename to models/aeif_cond_alpha_implicit.nestml diff --git a/src/test/resources/codegeneration/aeif_cond_alpha_multisynapse.nestml b/models/aeif_cond_alpha_multisynapse.nestml similarity index 100% rename from src/test/resources/codegeneration/aeif_cond_alpha_multisynapse.nestml rename to models/aeif_cond_alpha_multisynapse.nestml diff --git a/src/test/resources/codegeneration/aeif_cond_exp.nestml b/models/aeif_cond_exp.nestml similarity index 100% rename from src/test/resources/codegeneration/aeif_cond_exp.nestml rename to models/aeif_cond_exp.nestml diff --git a/src/test/resources/codegeneration/aeif_cond_exp_implicit.nestml b/models/aeif_cond_exp_implicit.nestml similarity index 100% rename from src/test/resources/codegeneration/aeif_cond_exp_implicit.nestml rename to models/aeif_cond_exp_implicit.nestml diff --git a/src/test/resources/codegeneration/hh_psc_alpha.nestml b/models/hh_psc_alpha.nestml similarity index 100% rename from src/test/resources/codegeneration/hh_psc_alpha.nestml rename to models/hh_psc_alpha.nestml diff --git a/src/test/resources/codegeneration/iaf_cond_alpha.nestml b/models/iaf_cond_alpha.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_cond_alpha.nestml rename to models/iaf_cond_alpha.nestml diff --git a/src/test/resources/codegeneration/iaf_cond_alpha_implicit.nestml b/models/iaf_cond_alpha_implicit.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_cond_alpha_implicit.nestml rename to models/iaf_cond_alpha_implicit.nestml diff --git a/src/test/resources/codegeneration/iaf_cond_beta.nestml b/models/iaf_cond_beta.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_cond_beta.nestml rename to models/iaf_cond_beta.nestml diff --git a/src/test/resources/codegeneration/iaf_cond_exp.nestml b/models/iaf_cond_exp.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_cond_exp.nestml rename to models/iaf_cond_exp.nestml diff --git a/src/test/resources/codegeneration/iaf_cond_exp_implicit.nestml b/models/iaf_cond_exp_implicit.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_cond_exp_implicit.nestml rename to models/iaf_cond_exp_implicit.nestml diff --git a/src/test/resources/codegeneration/iaf_neuron.nestml b/models/iaf_neuron.nestml similarity index 99% rename from src/test/resources/codegeneration/iaf_neuron.nestml rename to models/iaf_neuron.nestml index 8e7db7f34..deca29de8 100644 --- a/src/test/resources/codegeneration/iaf_neuron.nestml +++ b/models/iaf_neuron.nestml @@ -1,4 +1,4 @@ -/* BeginDocumentation +/* Name: iaf_neuron - Leaky integrate-and-fire neuron model. Description: diff --git a/src/test/resources/codegeneration/iaf_psc_alpha.nestml b/models/iaf_psc_alpha.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_psc_alpha.nestml rename to models/iaf_psc_alpha.nestml diff --git a/src/test/resources/codegeneration/iaf_psc_alpha_multisynapse.nestml b/models/iaf_psc_alpha_multisynapse.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_psc_alpha_multisynapse.nestml rename to models/iaf_psc_alpha_multisynapse.nestml diff --git a/src/test/resources/codegeneration/iaf_psc_delta.nestml b/models/iaf_psc_delta.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_psc_delta.nestml rename to models/iaf_psc_delta.nestml diff --git a/src/test/resources/codegeneration/iaf_psc_exp.nestml b/models/iaf_psc_exp.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_psc_exp.nestml rename to models/iaf_psc_exp.nestml diff --git a/src/test/resources/codegeneration/iaf_psc_exp_multisynapse.nestml b/models/iaf_psc_exp_multisynapse.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_psc_exp_multisynapse.nestml rename to models/iaf_psc_exp_multisynapse.nestml diff --git a/src/test/resources/codegeneration/iaf_tum_2000.nestml b/models/iaf_tum_2000.nestml similarity index 100% rename from src/test/resources/codegeneration/iaf_tum_2000.nestml rename to models/iaf_tum_2000.nestml diff --git a/src/test/resources/codegeneration/izhikevich.nestml b/models/izhikevich.nestml similarity index 100% rename from src/test/resources/codegeneration/izhikevich.nestml rename to models/izhikevich.nestml diff --git a/src/test/resources/codegeneration/mat2_psc_exp.nestml b/models/mat2_psc_exp.nestml similarity index 100% rename from src/test/resources/codegeneration/mat2_psc_exp.nestml rename to models/mat2_psc_exp.nestml diff --git a/src/main/java/org/nest/nestml/_cocos/UsesOnlyComponents.java b/src/main/java/org/nest/nestml/_cocos/UsesOnlyComponents.java index c3b4ffb5b..635f7048e 100644 --- a/src/main/java/org/nest/nestml/_cocos/UsesOnlyComponents.java +++ b/src/main/java/org/nest/nestml/_cocos/UsesOnlyComponents.java @@ -45,10 +45,13 @@ public void check(final ASTUSE_Stmt use) { final Optional neuronType = scope.resolve(typeName, NeuronSymbol.KIND); - if (neuronType.isPresent() && !neuronType.get().getType().equals(NeuronSymbol.Type.COMPONENT)) { - final String msg = errorStrings.getErrorMsgOnlyComponentsForComponents(this, typeName); + if (neuronType.isPresent()) { + if (!neuronType.get().getType().equals(NeuronSymbol.Type.COMPONENT)) { + final String msg = errorStrings.getErrorMsgOnlyComponentsForComponents(this, typeName); + Log.error(msg, use.get_SourcePositionStart()); + + } - Log.error(msg, use.get_SourcePositionStart()); } // Undefined type of the name } diff --git a/src/test/java/org/nest/base/ModelbasedTest.java b/src/test/java/org/nest/base/ModelbasedTest.java index d441b8108..e1be531ad 100644 --- a/src/test/java/org/nest/base/ModelbasedTest.java +++ b/src/test/java/org/nest/base/ModelbasedTest.java @@ -33,7 +33,7 @@ */ public class ModelbasedTest { protected static final Path OUTPUT_FOLDER = Paths.get("target"); - protected static final Path TEST_MODEL_PATH = Paths.get("src/test/resources/"); + protected static final Path TEST_MODEL_PATH = Paths.get("models"); protected final NESTMLParser parser = new NESTMLParser(TEST_MODEL_PATH); protected final NESTMLScopeCreator scopeCreator = new NESTMLScopeCreator(TEST_MODEL_PATH); diff --git a/src/test/java/org/nest/codegeneration/NESTCodeGeneratorTest.java b/src/test/java/org/nest/codegeneration/NESTCodeGeneratorTest.java index 54b405c80..b6b476220 100644 --- a/src/test/java/org/nest/codegeneration/NESTCodeGeneratorTest.java +++ b/src/test/java/org/nest/codegeneration/NESTCodeGeneratorTest.java @@ -30,9 +30,9 @@ public class NESTCodeGeneratorTest extends GenerationBasedTest { private static final Path OUTPUT_DIRECTORY = Paths.get("target", "build"); private static final PSCMock pscMock = new PSCMock(); - private static final String PSC_MODEL_WITH_ODE = "src/test/resources/codegeneration/iaf_psc_alpha.nestml"; + private static final String PSC_MODEL_WITH_ODE = "models/iaf_psc_alpha.nestml"; private static final String PSC_MODEL_IMPERATIVE = "src/test/resources/codegeneration/imperative/iaf_psc_alpha_imperative.nestml"; - private static final String COND_MODEL_IMPLICIT = "src/test/resources/codegeneration/iaf_cond_alpha_implicit.nestml"; + private static final String COND_MODEL_IMPLICIT = "models/iaf_cond_alpha_implicit.nestml"; @Test public void testPSCModelWithoutOde() { diff --git a/src/test/java/org/nest/codegeneration/helpers/AliasInverterTest.java b/src/test/java/org/nest/codegeneration/helpers/AliasInverterTest.java index 327e38253..59937358b 100644 --- a/src/test/java/org/nest/codegeneration/helpers/AliasInverterTest.java +++ b/src/test/java/org/nest/codegeneration/helpers/AliasInverterTest.java @@ -22,7 +22,7 @@ * @author plotnikov */ public class AliasInverterTest extends GenerationBasedTest { - private static final String PSC_MODEL_WITH_ODE = "src/test/resources/codegeneration/iaf_psc_alpha.nestml"; + private static final String PSC_MODEL_WITH_ODE = "models/iaf_psc_alpha.nestml"; @Test public void testComputationOfInverseFunction() { diff --git a/src/test/java/org/nest/codegeneration/sympy/ExpressionFolderTest.java b/src/test/java/org/nest/codegeneration/sympy/ExpressionFolderTest.java index b55afaa72..801727834 100644 --- a/src/test/java/org/nest/codegeneration/sympy/ExpressionFolderTest.java +++ b/src/test/java/org/nest/codegeneration/sympy/ExpressionFolderTest.java @@ -28,10 +28,12 @@ public class ExpressionFolderTest extends ModelbasedTest { private static final ExpressionsPrettyPrinter printer = new ExpressionsPrettyPrinter(); - private static final String MODEL_FILE_PATH = "src/test/resources/codegeneration/iaf_psc_alpha.nestml"; - private final static Path STATE_VARIABLES_FILE = Paths.get("src/test/resources/codegeneration/sympy/psc/", + private static final String MODEL_FILE_PATH = "models/iaf_psc_alpha.nestml"; + private final static Path STATE_VARIABLES_FILE = Paths.get( + "src/test/resources/codegeneration/sympy/psc/", LinearSolutionTransformer.STATE_VARIABLES_FILE); - private final static Path STATE_UPDATE_STEPS_FILE = Paths.get("src/test/resources/codegeneration/sympy/psc/", + private final static Path STATE_UPDATE_STEPS_FILE = Paths.get( + "src/test/resources/codegeneration/sympy/psc/", LinearSolutionTransformer.STATE_VECTOR_UPDATE_STEPS_FILE); @Test diff --git a/src/test/java/org/nest/codegeneration/sympy/LinearSolutionTransformerTest.java b/src/test/java/org/nest/codegeneration/sympy/LinearSolutionTransformerTest.java index 67c37351f..2f3b3925a 100644 --- a/src/test/java/org/nest/codegeneration/sympy/LinearSolutionTransformerTest.java +++ b/src/test/java/org/nest/codegeneration/sympy/LinearSolutionTransformerTest.java @@ -62,7 +62,7 @@ public class LinearSolutionTransformerTest extends ModelbasedTest { LinearSolutionTransformer.STATE_VECTOR_TMP_BACK_ASSIGNMENTS_FILE); private static final String NEURON_NAME = "iaf_psc_alpha_nestml"; - private static final String MODEL_FILE_PATH = "src/test/resources/codegeneration/iaf_psc_alpha.nestml"; + private static final String MODEL_FILE_PATH = "models/iaf_psc_alpha.nestml"; @Test public void testExactSolutionTransformation() { diff --git a/src/test/java/org/nest/codegeneration/sympy/SympyScriptGeneratorTest.java b/src/test/java/org/nest/codegeneration/sympy/SympyScriptGeneratorTest.java index 10d80f952..0f9c304a9 100644 --- a/src/test/java/org/nest/codegeneration/sympy/SympyScriptGeneratorTest.java +++ b/src/test/java/org/nest/codegeneration/sympy/SympyScriptGeneratorTest.java @@ -15,6 +15,7 @@ import org.nest.ode._ast.ASTEquation; import org.nest.symboltable.predefined.PredefinedFunctions; import org.nest.utils.ASTUtils; +import org.nest.utils.FilesHelper; import java.io.IOException; import java.io.StringReader; @@ -32,14 +33,10 @@ * @author plotnikov */ public class SympyScriptGeneratorTest extends ModelbasedTest { - private static final String PATH_TO_PSC_MODEL - = "src/test/resources/codegeneration/iaf_psc_alpha.nestml"; - private static final String PATH_TO_PSC_DELTA_MODEL - = "src/test/resources/codegeneration/iaf_psc_delta.nestml"; - private static final String PATH_TO_COND_MODEL - = "src/test/resources/codegeneration/iaf_cond_alpha.nestml"; - private static final String PATH_TO_COND_IMPLICIT_MODEL - = "src/test/resources/codegeneration/iaf_cond_alpha_implicit.nestml"; + private static final String PATH_TO_PSC_MODEL = "models/iaf_psc_alpha.nestml"; + private static final String PATH_TO_PSC_DELTA_MODEL = "models/iaf_psc_delta.nestml"; + private static final String PATH_TO_COND_MODEL = "models/iaf_cond_alpha.nestml"; + private static final String PATH_TO_COND_IMPLICIT_MODEL = "models/iaf_cond_alpha_implicit.nestml"; private static final String OUTPUT_FOLDER = "target"; private static final Path OUTPUT_SCRIPT_DIRECTORY = Paths.get(OUTPUT_FOLDER, "sympy"); @@ -92,6 +89,8 @@ private void generateAndCheck(final String pathToModel) throws IOException { final NESTMLScopeCreator nestmlScopeCreator = new NESTMLScopeCreator(TEST_MODEL_PATH); nestmlScopeCreator.runSymbolTableCreator(root.get()); + FilesHelper.deleteFilesInFolder(OUTPUT_SCRIPT_DIRECTORY); + final Optional generatedScript = generateSympyODEAnalyzer( root.get().getNeurons().get(0), OUTPUT_SCRIPT_DIRECTORY); diff --git a/src/test/java/org/nest/integration/NESTCodeGeneratorIntegrationTest.java b/src/test/java/org/nest/integration/NESTCodeGeneratorIntegrationTest.java index 005641a45..dc4611b08 100644 --- a/src/test/java/org/nest/integration/NESTCodeGeneratorIntegrationTest.java +++ b/src/test/java/org/nest/integration/NESTCodeGeneratorIntegrationTest.java @@ -23,17 +23,17 @@ public class NESTCodeGeneratorIntegrationTest extends GenerationBasedTest { private final List pscModelsWithOde = Lists.newArrayList( - "src/test/resources/codegeneration/iaf_neuron.nestml", - "src/test/resources/codegeneration/iaf_psc_alpha.nestml", - "src/test/resources/codegeneration/iaf_psc_exp.nestml", - "src/test/resources/codegeneration/iaf_tum_2000.nestml", - "src/test/resources/codegeneration/iaf_psc_delta.nestml", - "src/test/resources/codegeneration/mat2_psc_exp.nestml" + "models/iaf_neuron.nestml", + "models/iaf_psc_alpha.nestml", + "models/iaf_psc_exp.nestml", + "models/iaf_tum_2000.nestml", + "models/iaf_psc_delta.nestml", + "models/mat2_psc_exp.nestml" ); private final List multisynapseModels = Lists.newArrayList( - "src/test/resources/codegeneration/iaf_psc_alpha_multisynapse.nestml", - "src/test/resources/codegeneration/iaf_psc_exp_multisynapse.nestml" + "models/iaf_psc_alpha_multisynapse.nestml", + "models/iaf_psc_exp_multisynapse.nestml" ); private final List imperativeModels = Lists.newArrayList( @@ -47,15 +47,15 @@ public class NESTCodeGeneratorIntegrationTest extends GenerationBasedTest { ); private final List nestmlCondModels = Lists.newArrayList( - "src/test/resources/codegeneration/iaf_cond_alpha.nestml" + "models/iaf_cond_alpha.nestml" ); private final List nestmlCondImplicitModels = Lists.newArrayList( - "src/test/resources/codegeneration/iaf_cond_alpha_implicit.nestml", - "src/test/resources/codegeneration/iaf_cond_exp_implicit.nestml", - "src/test/resources/codegeneration/aeif_cond_alpha_implicit.nestml", - "src/test/resources/codegeneration/aeif_cond_exp_implicit.nestml", - "src/test/resources/codegeneration/hh_psc_alpha.nestml" + "models/iaf_cond_alpha_implicit.nestml", + "models/iaf_cond_exp_implicit.nestml", + "models/aeif_cond_alpha_implicit.nestml", + "models/aeif_cond_exp_implicit.nestml", + "models/hh_psc_alpha.nestml" ); @@ -152,7 +152,7 @@ public void testGlifModel() { @Test public void testIzhikevich() { - final List modelName = Lists.newArrayList("src/test/resources/codegeneration/izhikevich.nestml"); + final List modelName = Lists.newArrayList("models/izhikevich.nestml"); modelName.forEach(this::checkCocos); modelName.forEach(this::invokeCodeGenerator); final List roots = modelName.stream() @@ -164,7 +164,7 @@ public void testIzhikevich() { @Ignore("Don't run this tests on github") @Test public void testManually() { - final List modelName = Lists.newArrayList("src/test/resources/codegeneration/iaf_cond_exp_implicit.nestml"); + final List modelName = Lists.newArrayList("models/iaf_cond_exp_implicit.nestml"); modelName.forEach(this::checkCocos); modelName.forEach(this::invokeCodeGenerator); final List roots = modelName.stream() diff --git a/src/test/java/org/nest/integration/ODEProcessorTest.java b/src/test/java/org/nest/integration/ODEProcessorTest.java index b58dbd601..2cfbc0ef6 100644 --- a/src/test/java/org/nest/integration/ODEProcessorTest.java +++ b/src/test/java/org/nest/integration/ODEProcessorTest.java @@ -28,9 +28,9 @@ * @author plotnikov */ public class ODEProcessorTest extends ModelbasedTest { - private static final String COND_MODEL_FILE = "src/test/resources/codegeneration/iaf_cond_alpha.nestml"; - private static final String PSC_MODEL_FILE = "src/test/resources/codegeneration/iaf_neuron.nestml"; - private static final String PSC_DELTA_MODEL_FILE = "src/test/resources/codegeneration/iaf_psc_delta.nestml"; + private static final String COND_MODEL_FILE = "models/iaf_cond_alpha.nestml"; + private static final String PSC_MODEL_FILE = "models/iaf_neuron.nestml"; + private static final String PSC_DELTA_MODEL_FILE = "models/iaf_psc_delta.nestml"; private static final String PSC_NEURON_NAME = "iaf_neuron_nestml"; private final ODEProcessor testant = new ODEProcessor(); @@ -68,7 +68,7 @@ private Scope processModel(final String pathToModel) { final ASTNESTMLCompilationUnit modelRoot = parseNESTMLModel(pathToModel); scopeCreator.runSymbolTableCreator(modelRoot); final String modelFolder = modelRoot.getFullName(); - final Path outputBase = Paths.get(OUTPUT_FOLDER.toString(), Names.getPathFromQualifiedName(modelFolder)); + final Path outputBase = Paths.get(OUTPUT_FOLDER.toString(), Names.getPathFromQualifiedName(pathToModel.toString())); FilesHelper.deleteFilesInFolder(outputBase); testant.solveODE(modelRoot.getNeurons().get(0), outputBase); diff --git a/src/test/java/org/nest/integration/SymPyScriptEvaluatorTest.java b/src/test/java/org/nest/integration/SymPyScriptEvaluatorTest.java index 9d1aa618e..eaaf99e01 100644 --- a/src/test/java/org/nest/integration/SymPyScriptEvaluatorTest.java +++ b/src/test/java/org/nest/integration/SymPyScriptEvaluatorTest.java @@ -29,14 +29,10 @@ * @author plonikov */ public class SymPyScriptEvaluatorTest extends ModelbasedTest { - private static final String IAF_PSC_EXP - = "src/test/resources/codegeneration/iaf_psc_exp.nestml"; - private static final String IAF_PSC_ALPHA - = "src/test/resources/codegeneration/iaf_psc_alpha.nestml"; - private static final String PSC_MODEL_FILE - = "src/test/resources/codegeneration/iaf_neuron.nestml"; - private static final String COND_MODEL_FILE - = "src/test/resources/codegeneration/iaf_cond_alpha.nestml"; + private static final String IAF_PSC_EXP = "models/iaf_psc_exp.nestml"; + private static final String IAF_PSC_ALPHA = "models/iaf_psc_alpha.nestml"; + private static final String PSC_MODEL_FILE = "models/iaf_neuron.nestml"; + private static final String COND_MODEL_FILE = "models/iaf_cond_alpha.nestml"; private static final Path SYMPY_OUTPUT = Paths.get(OUTPUT_FOLDER.toString(), "sympy"); diff --git a/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosManagerTest.java b/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosManagerTest.java index d5f04e9a6..13245c539 100644 --- a/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosManagerTest.java +++ b/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosManagerTest.java @@ -57,14 +57,14 @@ public void setup() { @Test public void testGoodModels() throws IOException { - final File modelsFolder = Paths.get(TEST_MODEL_PATH.toString(),"/org/nest/nestml/parsing").toFile(); + final File modelsFolder = Paths.get("src/test/resources/org/nest/nestml/parsing").toFile(); checkAllModelsInFolder(modelsFolder); } @Test public void testCodegenerationModels() throws IOException { - final List models = collectNESTMLModelFilenames(Paths.get(TEST_MODEL_PATH.toString(), "codegeneration")); + final List models = collectNESTMLModelFilenames(TEST_MODEL_PATH); models.stream().forEach(this::checkModel); } diff --git a/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosTest.java b/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosTest.java index e869b500d..4406b9dbf 100644 --- a/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosTest.java +++ b/src/test/java/org/nest/nestml/_cocos/NESTMLCoCosTest.java @@ -6,11 +6,13 @@ package org.nest.nestml._cocos; import de.se_rwth.commons.Names; +import de.se_rwth.commons.logging.Log; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.nest.base.ModelbasedTest; import org.nest.nestml._ast.ASTNESTMLCompilationUnit; +import org.nest.nestml._symboltable.NESTMLScopeCreator; import org.nest.spl._cocos.SPLASTDeclarationCoCo; import org.nest.spl._cocos.VarHasTypeName; import org.nest.spl.symboltable.SPLCoCosManager; @@ -33,9 +35,16 @@ * * @author plotnikov */ -public class NESTMLCoCosTest extends ModelbasedTest { +public class NESTMLCoCosTest { + + @Before + public void clearLog() { + Log.enableFailQuick(false); + Log.getFindings().clear(); + } private static final String TEST_MODELS_FOLDER = "src/test/resources/org/nest/nestml/_cocos/"; + protected final NESTMLScopeCreator scopeCreator = new NESTMLScopeCreator(Paths.get("src/test/resources")); private NESTMLCoCoChecker nestmlCoCoChecker; @@ -54,7 +63,7 @@ public void testResolvingOfPredefinedTypes() { // just take an arbitrary nestml model with an import: nestml* final Optional ast = getAstRoot( Paths.get(TEST_MODELS_FOLDER, "resolvePredefinedTypes.nestml").toString(), - TEST_MODEL_PATH); + Paths.get(TEST_MODELS_FOLDER)); assertTrue(ast.isPresent()); scopeCreator.runSymbolTableCreator(ast.get()); @@ -69,7 +78,7 @@ public void testResolvingOfPredefinedTypes() { @Test public void testAliasHasNoSetter() { final Optional validRoot = getAstRoot( - TEST_MODELS_FOLDER + "aliasHasNoSetter/valid.nestml", TEST_MODEL_PATH); + TEST_MODELS_FOLDER + "aliasHasNoSetter/valid.nestml", Paths.get(TEST_MODELS_FOLDER)); assertTrue(validRoot.isPresent()); scopeCreator.runSymbolTableCreator(validRoot.get()); final AliasHasNoSetter aliasHasNoSetter = new AliasHasNoSetter(); @@ -81,7 +90,7 @@ public void testAliasHasNoSetter() { assertEquals(Integer.valueOf(0), errorsFound); final Optional invalidRoot = getAstRoot( - TEST_MODELS_FOLDER + "aliasHasNoSetter/invalid.nestml", TEST_MODEL_PATH); + TEST_MODELS_FOLDER + "aliasHasNoSetter/invalid.nestml", Paths.get(TEST_MODELS_FOLDER)); assertTrue(invalidRoot.isPresent()); scopeCreator.runSymbolTableCreator(invalidRoot.get()); @@ -504,6 +513,7 @@ public void testTypesDeclaredMultipleTimes() { 2); } + @Test public void testUsesOnlyComponents() { final UsesOnlyComponents usesOnlyComponents = new UsesOnlyComponents(); @@ -701,7 +711,7 @@ private void checkModelAndAssertWithErrors( final NESTMLCoCoChecker nestmlCoCoChecker, final String expectedErrorCode, final Integer expectedNumberCount) { - final Optional ast = getAstRoot(pathToModel.toString(), TEST_MODEL_PATH); + final Optional ast = getAstRoot(pathToModel.toString(), Paths.get(TEST_MODELS_FOLDER)); assertTrue(ast.isPresent()); scopeCreator.runSymbolTableCreator(ast.get()); diff --git a/src/test/java/org/nest/nestml/symboltable/NESTMLSymbolTableTest.java b/src/test/java/org/nest/nestml/symboltable/NESTMLSymbolTableTest.java index c09a19bbf..8daac45d5 100644 --- a/src/test/java/org/nest/nestml/symboltable/NESTMLSymbolTableTest.java +++ b/src/test/java/org/nest/nestml/symboltable/NESTMLSymbolTableTest.java @@ -45,7 +45,7 @@ public class NESTMLSymbolTableTest extends ModelbasedTest { private static final String MODEL_WITH_INHERITANCE = "src/test/resources/inheritance/iaf_neuron.nestml"; - private final NESTMLScopeCreator scopeCreator = new NESTMLScopeCreator(TEST_MODEL_PATH); + private final NESTMLScopeCreator scopeCreator = new NESTMLScopeCreator(Paths.get("src/test/resources")); @Test public void testCreationOfSymtabAndResolvingOfSymbols() throws IOException { diff --git a/src/test/resources/org/nest/nestml/_cocos/usesOnlyComponents/invalid.nestml b/src/test/resources/org/nest/nestml/_cocos/usesOnlyComponents/invalid.nestml index 58cfe1958..231635567 100644 --- a/src/test/resources/org/nest/nestml/_cocos/usesOnlyComponents/invalid.nestml +++ b/src/test/resources/org/nest/nestml/_cocos/usesOnlyComponents/invalid.nestml @@ -1,7 +1,7 @@ -import org.nest.nestml.symboltable.iaf_neuron.iaf_neuron +import org.nest.nestml._cocos.usesOnlyComponents.importedNeuron.ImportedNeuron neuron UsesNeuron: - use iaf_neuron as blaa + use ImportedNeuron as blaa update: end From b3223cf8905c650412247f8a9e04ca99376e9b7d Mon Sep 17 00:00:00 2001 From: DimitriPlotnikov Date: Thu, 30 Jun 2016 15:48:32 +0200 Subject: [PATCH 3/3] - Finish the CMake generator -- Models are now generated against the nest master and don't run on older versions anymore --- .../codegeneration/NESTCodeGenerator.java | 32 +------------------ .../converters/NESTReferenceConverter.java | 2 +- .../nest/nestml/buffer/CurrentBufferFill.ftl | 2 +- .../nest/nestml/buffer/SpikeBufferFill.ftl | 8 ++--- .../nest/nestml/function/TimestepDynamics.ftl | 2 -- .../org/nest/nestml/module/CMakeLists.ftl | 4 +-- .../org/nest/nestml/neuron/NeuronClass.ftl | 24 +++++++++----- .../org/nest/nestml/neuron/NeuronHeader.ftl | 8 +++-- 8 files changed, 31 insertions(+), 51 deletions(-) diff --git a/src/main/java/org/nest/codegeneration/NESTCodeGenerator.java b/src/main/java/org/nest/codegeneration/NESTCodeGenerator.java index 0bbe0a09d..5d0090bb1 100644 --- a/src/main/java/org/nest/codegeneration/NESTCodeGenerator.java +++ b/src/main/java/org/nest/codegeneration/NESTCodeGenerator.java @@ -218,37 +218,7 @@ private void generateModuleCodeForNeurons( cmakeModuleClass, neurons.get(0)); // an arbitrary AST to match the signature - final Path makefileFile = Paths.get("Makefile.am"); - generator.generate( - "org.nest.nestml.module.Makefile", - makefileFile, - neurons.get(0)); // an arbitrary AST to match the signature - - final Path bootstrappingFile = Paths.get("bootstrap.sh"); - generator.generate( - "org.nest.nestml.module.Bootstrap", - bootstrappingFile, - neurons.get(0)); // an arbitrary AST to match the signature - - final Path configureFile = Paths.get("configure.ac"); - generator.generate( - "org.nest.nestml.module.Configure", - configureFile, - neurons.get(0)); // an arbitrary AST to match the signature - - final Path moduleClass = Paths.get(moduleName + "Config.cpp"); - generator.generate( - "org.nest.nestml.module.ModuleClass", - moduleClass, - neurons.get(0)); // an arbitrary AST to match the signature - - final Path moduleHeader = Paths.get( moduleName + "Config.h"); - generator.generate( - "org.nest.nestml.module.ModuleHeader", - moduleHeader, - neurons.get(0)); // an arbitrary AST to match the signature - - final Path initSLI = Paths.get( moduleName + "-init.sli"); + final Path initSLI = Paths.get("sli", moduleName + "-init.sli"); generator.generate( "org.nest.nestml.module.SLI_Init", initSLI, diff --git a/src/main/java/org/nest/codegeneration/converters/NESTReferenceConverter.java b/src/main/java/org/nest/codegeneration/converters/NESTReferenceConverter.java index 77afb21d0..c8739cf0b 100644 --- a/src/main/java/org/nest/codegeneration/converters/NESTReferenceConverter.java +++ b/src/main/java/org/nest/codegeneration/converters/NESTReferenceConverter.java @@ -84,7 +84,7 @@ public String convertFunctionCall(final ASTFunctionCall astFunctionCall) { if (functionName.contains(PredefinedFunctions.EMIT_SPIKE)) { return "set_spiketime(nest::Time::step(origin.get_steps()+lag+1));\n" + "nest::SpikeEvent se;\n" + - "network()->send(*this, se, lag);"; + "nest::kernel().event_delivery_manager.send(*this, se, lag);"; } final Optional functionSymbol = NESTMLSymbols.resolveMethod(astFunctionCall); diff --git a/src/main/resources/org/nest/nestml/buffer/CurrentBufferFill.ftl b/src/main/resources/org/nest/nestml/buffer/CurrentBufferFill.ftl index 113bf50f4..d976aa8e7 100644 --- a/src/main/resources/org/nest/nestml/buffer/CurrentBufferFill.ftl +++ b/src/main/resources/org/nest/nestml/buffer/CurrentBufferFill.ftl @@ -4,6 +4,6 @@ @result TODO --> <#if ast.isCurrent()> -get_${ast.getName()}().add_value(e.get_rel_delivery_steps( network()->get_slice_origin()), +get_${ast.getName()}().add_value(e.get_rel_delivery_steps( nest::kernel().simulation_manager.get_slice_origin()), weight * current ); diff --git a/src/main/resources/org/nest/nestml/buffer/SpikeBufferFill.ftl b/src/main/resources/org/nest/nestml/buffer/SpikeBufferFill.ftl index cdc63c98d..0150cb550 100644 --- a/src/main/resources/org/nest/nestml/buffer/SpikeBufferFill.ftl +++ b/src/main/resources/org/nest/nestml/buffer/SpikeBufferFill.ftl @@ -12,14 +12,14 @@ --> <#if ast.isSpike()> // TODO do i need this? - //get_${ast.getName()}().add_value(e.get_rel_delivery_steps( network()->get_slice_origin()), + //get_${ast.getName()}().add_value(e.get_rel_delivery_steps( nest::kernel().simulation_manager.get_slice_origin()), // weight * multiplicity ); <#if bufferHelper.isVector(ast)> // 1 for (size_t i=0; i < P_.${bufferHelper.vectorParameter(ast)}; i++) { if (B_.receptor_types_${ast.getName()}[i] == e.get_rport()) { - get_${ast.getName()}()[i].add_value(e.get_rel_delivery_steps(network()->get_slice_origin()), + get_${ast.getName()}()[i].add_value(e.get_rel_delivery_steps(nest::kernel().simulation_manager.get_slice_origin()), e.get_weight() * e.get_multiplicity()); } @@ -29,14 +29,14 @@ <#if bufferHelper.isExcitatory(ast)> if ( weight >= 0.0 ) // excitatory { - get_${ast.getName()}().add_value(e.get_rel_delivery_steps( network()->get_slice_origin()), + get_${ast.getName()}().add_value(e.get_rel_delivery_steps( nest::kernel().simulation_manager.get_slice_origin()), weight * multiplicity ); } <#if bufferHelper.isInhibitory(ast)> if ( weight < 0.0 ) // inhibitory { - get_${ast.getName()}().add_value(e.get_rel_delivery_steps( network()->get_slice_origin()), + get_${ast.getName()}().add_value(e.get_rel_delivery_steps( nest::kernel().simulation_manager.get_slice_origin()), weight * multiplicity ); } diff --git a/src/main/resources/org/nest/nestml/function/TimestepDynamics.ftl b/src/main/resources/org/nest/nestml/function/TimestepDynamics.ftl index 5ed24a19e..3d2bc907c 100644 --- a/src/main/resources/org/nest/nestml/function/TimestepDynamics.ftl +++ b/src/main/resources/org/nest/nestml/function/TimestepDynamics.ftl @@ -1,7 +1,5 @@ <#--Dynamics implements BodyElement = "dynamics" (MinDelay | TimeStep) "(" Parameter ")" BLOCK_OPEN! Block BLOCK_CLOSE!;--> -assert(to >= 0 && (nest::delay) from < nest::Scheduler::get_min_delay()); -assert(from < to); double t; for ( nest::long_t lag = from ; lag < to ; ++lag ) { diff --git a/src/main/resources/org/nest/nestml/module/CMakeLists.ftl b/src/main/resources/org/nest/nestml/module/CMakeLists.ftl index b0369dcd5..482d0c0d3 100644 --- a/src/main/resources/org/nest/nestml/module/CMakeLists.ftl +++ b/src/main/resources/org/nest/nestml/module/CMakeLists.ftl @@ -35,13 +35,13 @@ cmake_minimum_required( VERSION 2.8.12 ) set( SHORT_NAME ${moduleName} ) # the complete module name is here: -set( MODULE_NAME ${r"$"}{SHORT_NAME}module ) +set( MODULE_NAME ${r"$"}{SHORT_NAME} ) # 2) Add all your sources here set( MODULE_SOURCES ${moduleName}.h ${moduleName}.cpp <#list neurons as neuron> - ${neuron.getName()}.cpp ${neuron.getName()}.h <#if neuron_has_next>\ + ${neuron.getName()}.cpp ${neuron.getName()}.h <#if neuron_has_next> ) diff --git a/src/main/resources/org/nest/nestml/neuron/NeuronClass.ftl b/src/main/resources/org/nest/nestml/neuron/NeuronClass.ftl index c18894314..9bf212350 100644 --- a/src/main/resources/org/nest/nestml/neuron/NeuronClass.ftl +++ b/src/main/resources/org/nest/nestml/neuron/NeuronClass.ftl @@ -20,19 +20,27 @@ * */ +// C++ includes: +#include + +// Includes from libnestutil: +#include "numerics.h" + +// Includes from nestkernel: #include "exceptions.h" -#include "network.h" +#include "kernel_manager.h" +#include "universal_data_logger_impl.h" + +// Includes from sli: #include "dict.h" -#include "integerdatum.h" -#include "doubledatum.h" #include "dictutils.h" -#include "numerics.h" -#include "universal_data_logger_impl.h" +#include "doubledatum.h" +#include "integerdatum.h" +#include "lockptrdatum.h" -#include -<#assign stateSize = body.getEquations()?size> #include "${simpleNeuronName}.h" +<#assign stateSize = body.getEquations()?size> /* ---------------------------------------------------------------- * Recordables map * ---------------------------------------------------------------- */ @@ -318,7 +326,7 @@ ${simpleNeuronName}::handle(nest::SpikeEvent &e) if ( B_.receptor_types_${spikeBuffer.getName()}[ i ] == e.get_rport() ) { B_.${spikeBuffer.getName()}[i].add_value( - e.get_rel_delivery_steps( network()->get_slice_origin() ), + e.get_rel_delivery_steps( nest::kernel().simulation_manager.get_slice_origin() ), e.get_weight() * e.get_multiplicity() ); } } diff --git a/src/main/resources/org/nest/nestml/neuron/NeuronHeader.ftl b/src/main/resources/org/nest/nestml/neuron/NeuronHeader.ftl index 312df98b9..7262b7651 100644 --- a/src/main/resources/org/nest/nestml/neuron/NeuronHeader.ftl +++ b/src/main/resources/org/nest/nestml/neuron/NeuronHeader.ftl @@ -43,11 +43,15 @@ #include -#include "nest.h" -#include "event.h" +// Includes from nestkernel: #include "archiving_node.h" #include "connection.h" +#include "event.h" +#include "nest_types.h" +#include "ring_buffer.h" #include "universal_data_logger.h" + +// Includes from sli: #include "dictdatum.h" /* BeginDocumentation