From bf3cb1b12fee979265ed036e101b2089430defee Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Thu, 14 Jun 2018 20:59:26 +0200 Subject: [PATCH 01/23] Adaptation for generator interface --- .../monticar/emadl/generator/Backend.java | 37 +++++ .../emadl/generator/EMADLGenerator.java | 81 ++++------- .../emadl/generator/EMADLGeneratorCli.java | 16 ++- src/main/resources/templates/CNNTrainer.ftl | 21 --- .../resources/templates/CNNTranslator.ftl | 127 ------------------ 5 files changed, 80 insertions(+), 202 deletions(-) create mode 100644 src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java delete mode 100644 src/main/resources/templates/CNNTrainer.ftl delete mode 100644 src/main/resources/templates/CNNTranslator.ftl diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java new file mode 100644 index 00000000..beee51dd --- /dev/null +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java @@ -0,0 +1,37 @@ +package de.monticore.lang.monticar.emadl.generator; + + +import de.monticore.lang.monticar.cnnarch.CNNArchGenerator; +import de.monticore.lang.monticar.cnnarch.generator.CNNArch2MxNet; + +import java.util.Optional; + +public enum Backend { + MXNET{ + @Override + public CNNArchGenerator getGenerator() { + return new CNNArch2MxNet(); + } + }, + CAFFE2{ + @Override + public CNNArchGenerator getGenerator() { + //return new CNNArch2Caffe2(); //TODO + return null; + } + }; + + public abstract CNNArchGenerator getGenerator(); + + public static Optional getBackendFromString(String backend){ + if(backend.equals(MXNET.toString())){ + return Optional.of(MXNET); + } + else if (backend.equals(CAFFE2.toString())){ + return Optional.of(CAFFE2); + } + else{ + return Optional.empty(); + } + } +} diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index 5dbe1e8a..ec9e6c42 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -26,9 +26,10 @@ import de.monticore.io.paths.ModelPath; import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ComponentSymbol; import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ExpandedComponentInstanceSymbol; import de.monticore.lang.math.math._symboltable.MathStatementsSymbol; +import de.monticore.lang.monticar.cnnarch.CNNArchGenerator; import de.monticore.lang.monticar.cnnarch._symboltable.ArchitectureSymbol; -import de.monticore.lang.monticar.cnnarch.generator.CNNArchGenerator; import de.monticore.lang.monticar.cnntrain._symboltable.CNNTrainLanguage; +import de.monticore.lang.monticar.cnntrain._symboltable.ConfigurationSymbol; import de.monticore.lang.monticar.cnntrain.generator.CNNTrainGenerator; import de.monticore.lang.monticar.emadl._cocos.EMADLCocos; import de.monticore.lang.monticar.generator.FileContent; @@ -55,19 +56,19 @@ import java.util.*; public class EMADLGenerator { - public static final String CNN_HELPER = "CNNTranslator"; - public static final String CNN_TRAINER = "CNNTrainer"; - private GeneratorCPP emamGen; + private CNNArchGenerator cnnArchGenerator; + + private String modelsPath; - public EMADLGenerator() { + + public EMADLGenerator(Backend backend) { emamGen = new GeneratorCPP(); emamGen.useArmadilloBackend(); emamGen.setGenerationTargetPath("./target/generated-sources-emadl/"); + cnnArchGenerator = backend.getGenerator(); } - private String modelsPath; - public String getModelsPath() { return modelsPath; } @@ -131,7 +132,7 @@ public class EMADLGenerator { generateComponent(fileContents, allInstances, taggingResolver, componentInstanceSymbol, symtab); - fileContents.add(generateCNNTrainer(allInstances, componentInstanceSymbol.getComponentType().getFullName().replaceAll("\\.", "_"))); + fileContents.addAll(generateCNNTrainer(allInstances, componentInstanceSymbol.getComponentType().getFullName().replaceAll("\\.", "_"))); fileContents.add(ArmadilloHelper.getArmadilloHelperFileContent()); TypesGeneratorCPP tg = new TypesGeneratorCPP(); fileContents.addAll(tg.generateTypes(TypeConverter.getTypeSymbols())); @@ -185,7 +186,6 @@ public class EMADLGenerator { } public void generateCNN(List fileContents, TaggingResolver taggingResolver, ExpandedComponentInstanceSymbol instance, ArchitectureSymbol architecture){ - CNNArchGenerator cnnArchGenerator = new CNNArchGenerator(); Map contentMap = cnnArchGenerator.generateStrings(architecture); String fullName = instance.getFullName().replaceAll("\\.", "_"); @@ -206,7 +206,6 @@ public class EMADLGenerator { fileContents.add(new FileContent(contentMap.get(fileName), fileName)); } fileContents.add(componentFileContent); - fileContents.add(new FileContent(processTemplate(new HashMap<>(), CNN_HELPER), CNN_HELPER + ".h")); } protected String transformComponent(String component, String predictorClassName, String executeMethod){ @@ -215,7 +214,7 @@ public class EMADLGenerator { //insert includes component = component.replaceFirst("using namespace", "#include \"" + predictorClassName + ".h" + "\"\n" + - "#include \"" + CNN_HELPER + ".h" + "\"\n" + + "#include \"CNNTranslator.h\"\n" + "using namespace"); //insert network attribute @@ -252,34 +251,28 @@ public class EMADLGenerator { } } - public FileContent generateCNNTrainer(Set allInstances, String mainComponentName){ - List cnnInstances = new ArrayList<>(); - List trainParams = new ArrayList<>(); - Set componentNames = new HashSet<>(); - for (ExpandedComponentInstanceSymbol componentInstance : allInstances){ + public List generateCNNTrainer(Set allInstances, String mainComponentName) { + List cnnInstanceNames = new ArrayList<>(); + List configurations = new ArrayList<>(); + for (ExpandedComponentInstanceSymbol componentInstance : allInstances) { ComponentSymbol component = componentInstance.getComponentType().getReferencedSymbol(); Optional architecture = component.getSpannedScope().resolve("", ArchitectureSymbol.KIND); - if (architecture.isPresent()){ - - String fileContent = getTrainingParamsForComponent(mainComponentName, component, componentInstance); - if (!fileContent.isEmpty()) { - trainParams.add(fileContent); - } - - cnnInstances.add(componentInstance); - componentNames.add(component.getFullName()); - + if (architecture.isPresent()) { + ConfigurationSymbol configuration = getTrainingConfiguration(mainComponentName, component, componentInstance); + configurations.add(configuration); + cnnInstanceNames.add(componentInstance.getFullName().replaceAll("\\.", "_")); } } - Map ftlContext = new HashMap<>(); - ftlContext.put("instances", cnnInstances); - ftlContext.put("componentNames", componentNames); - ftlContext.put("trainParams", trainParams); - return new FileContent(processTemplate(ftlContext, CNN_TRAINER), CNN_TRAINER + "_" + mainComponentName + ".py"); + List fileContents = new ArrayList<>(); + Map fileContentMap = cnnArchGenerator.generateTrainer(configurations, cnnInstanceNames); + for (String fileName : fileContentMap.keySet()){ + fileContents.add(new FileContent(fileContentMap.get(fileName), fileName)); + } + return fileContents; } - private String getTrainingParamsForComponent(String mainComponentName, ComponentSymbol component, ExpandedComponentInstanceSymbol instance) { + public ConfigurationSymbol getTrainingConfiguration(String mainComponentName, ComponentSymbol component, ExpandedComponentInstanceSymbol instance) { String configFilename; String mainComponentConfigFilename = mainComponentName.replaceAll("\\.", "/"); String componentConfigFilename = component.getFullName().replaceAll("\\.", "/"); @@ -300,7 +293,7 @@ public class EMADLGenerator { + getModelsPath() + componentConfigFilename + ".cnnt', '" + getModelsPath() + mainComponentConfigFilename + ".cnnt'." + " These files denote respectively the configuration for the single instance, the component or the whole system."); - return ""; + return null; } //should be removed when CNNTrain supports packages @@ -312,26 +305,8 @@ public class EMADLGenerator { CNNTrainGenerator cnnTrainGenerator = new CNNTrainGenerator(); final ModelPath mp = new ModelPath(modelPath); GlobalScope trainScope = new GlobalScope(mp, new CNNTrainLanguage()); - Map.Entry fileContents = cnnTrainGenerator.generateFileContent( trainScope, configFilename ); - return fileContents.getValue(); - } - - protected String processTemplate(Map ftlContext, String templateNameWithoutEnding){ - StringWriter writer = new StringWriter(); - String templateName = templateNameWithoutEnding + ".ftl"; - try{ - Template template = TemplateConfiguration.get().getTemplate(templateName); - template.process(ftlContext, writer); - } - catch (IOException e) { - Log.error("Freemarker could not find template " + templateName + " :\n" + e.getMessage()); - System.exit(1); - } - catch (TemplateException e){ - Log.error("An exception occured in template " + templateName + " :\n" + e.getMessage()); - System.exit(1); - } - return writer.toString(); + ConfigurationSymbol configuration = trainScope.resolve(configFilename, ConfigurationSymbol.KIND).get(); + return configuration; } } diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java index e8a4a31d..1ec2d938 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java @@ -26,6 +26,7 @@ import freemarker.template.TemplateException; import org.apache.commons.cli.*; import java.io.IOException; +import java.util.Optional; public class EMADLGeneratorCli { @@ -49,6 +50,12 @@ public class EMADLGeneratorCli { .hasArg(true) .required(false) .build(); + public static final Option OPTION_BACKEND = Option.builder("b") + .longOpt("output-dir") + .desc("full path to output directory for tests e.g. C:\\Users\\vpupkin\\proj\\MyAwesomeAutopilot\\target\\gen-cpp") + .hasArg(true) + .required(false) + .build(); private EMADLGeneratorCli() { } @@ -85,7 +92,14 @@ public class EMADLGeneratorCli { private static void runGenerator(CommandLine cliArgs) { String rootModelName = cliArgs.getOptionValue(OPTION_ROOT_MODEL.getOpt()); String outputPath = cliArgs.getOptionValue(OPTION_OUTPUT_PATH.getOpt()); - EMADLGenerator generator = new EMADLGenerator(); + String backendString = cliArgs.getOptionValue(OPTION_BACKEND.getOpt()); + + Optional backend = Backend.getBackendFromString(backendString); + if (!backend.isPresent()){ + Log.error("backend error"); + } + EMADLGenerator generator = new EMADLGenerator(backend.get()); + if (outputPath != null){ generator.setGenerationTargetPath(outputPath); } diff --git a/src/main/resources/templates/CNNTrainer.ftl b/src/main/resources/templates/CNNTrainer.ftl deleted file mode 100644 index 0f490740..00000000 --- a/src/main/resources/templates/CNNTrainer.ftl +++ /dev/null @@ -1,21 +0,0 @@ -import logging -import mxnet as mx -<#list instances as instance> -import CNNCreator_${instance.fullName?replace(".", "_")} - - -if __name__ == "__main__": - logging.basicConfig(level=logging.DEBUG) - logger = logging.getLogger() - handler = logging.FileHandler("train.log","w", encoding=None, delay="true") - logger.addHandler(handler) - -<#list instances as instance> - ${instance.fullName?replace(".", "_")} = CNNCreator_${instance.fullName?replace(".", "_")}.CNNCreator_${instance.fullName?replace(".", "_")}() - ${instance.fullName?replace(".", "_")}.train( - <#if (trainParams[instance_index])??> - ${trainParams[instance_index]} - - ) - - \ No newline at end of file diff --git a/src/main/resources/templates/CNNTranslator.ftl b/src/main/resources/templates/CNNTranslator.ftl deleted file mode 100644 index 5a036659..00000000 --- a/src/main/resources/templates/CNNTranslator.ftl +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef CNNTRANSLATOR_H -#define CNNTRANSLATOR_H -#include -#include - -using namespace std; -using namespace arma; - -class CNNTranslator{ -public: - template static void addColToSTDVector(const Col &source, vector &data){ - for(size_t i = 0; i < source.n_elem; i++){ - data.push_back((float) source(i)); - } - } - - template static void addRowToSTDVector(const subview_row &source, vector &data){ - for(size_t i = 0; i < source.n_elem; i++){ - data.push_back((float) source(i)); - } - } - - template static void addRowToSTDVector(const Row &source, vector &data){ - for(size_t i = 0; i < source.n_elem; i++){ - data.push_back((float) source(i)); - } - } - - template static void addMatToSTDVector(const Mat &source, vector &data){ - for(size_t i = 0; i < source.n_rows; i++){ - addRowToSTDVector(source.row(i), data); - } - } - - - template static vector translate(const Col &source){ - size_t size = source.n_elem; - vector data; - data.reserve(size); - addColToSTDVector(source, data); - return data; - } - - template static vector translate(const Row &source){ - size_t size = source.n_elem; - vector data; - data.reserve(size); - addRowToSTDVector(source, data); - return data; - } - - template static vector translate(const Mat &source){ - size_t size = source.n_elem; - vector data; - data.reserve(size); - addMatToSTDVector(source, data); - return data; - } - - template static vector translate(const Cube &source){ - size_t size = source.n_elem; - vector data; - data.reserve(size); - for(size_t i = 0; i < source.n_slices; i++){ - addMatToSTDVector(source.slice(i), data); - } - return data; - } - - static vec translateToCol(const vector &source, const vector &shape){ - assert(shape.size() == 1); - vec column(shape[0]); - for(size_t i = 0; i < source.size(); i++){ - column(i) = (double) source[i]; - } - return column; - } - - static mat translateToMat(const vector &source, const vector &shape){ - assert(shape.size() == 2); - mat matrix(shape[1], shape[0]); //create transposed version of the matrix - int startPos = 0; - int endPos = matrix.n_rows; - const vector columnShape = {matrix.n_rows}; - for(size_t i = 0; i < matrix.n_cols; i++){ - vector colSource(&source[startPos], &source[endPos]); - matrix.col(i) = translateToCol(colSource, columnShape); - startPos = endPos; - endPos += matrix.n_rows; - } - return matrix.t(); - } - - static cube translateToCube(const vector &source, const vector &shape){ - assert(shape.size() == 3); - cube cubeMatrix(shape[1], shape[2], shape[0]); - const int matrixSize = shape[1] * shape[2]; - const vector matrixShape = {shape[1], shape[2]}; - int startPos = 0; - int endPos = matrixSize; - for(size_t i = 0; i < cubeMatrix.n_slices; i++){ - vector matrixSource(&source[startPos], &source[endPos]); - cubeMatrix.slice(i) = translateToMat(matrixSource, matrixShape); - startPos = endPos; - endPos += matrixSize; - } - return cubeMatrix; - } - - template static vector getShape(const Col &source){ - return {source.n_elem}; - } - - template static vector getShape(const Row &source){ - return {source.n_elem}; - } - - template static vector getShape(const Mat &source){ - return {source.n_rows, source.n_cols}; - } - - template static vector getShape(const Cube &source){ - return {source.n_slices, source.n_rows, source.n_cols}; - } -}; - -#endif -- GitLab From 6aa54c00b73c8c8cfa2fbb83e4afe0d5e5c28443 Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Sat, 16 Jun 2018 17:03:29 +0200 Subject: [PATCH 02/23] Adaptation for generator interface --- .../lang/monticar/emadl/generator/EMADLGeneratorCli.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java index 1ec2d938..50ed1041 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java @@ -74,6 +74,7 @@ public class EMADLGeneratorCli { options.addOption(OPTION_MODELS_PATH); options.addOption(OPTION_ROOT_MODEL); options.addOption(OPTION_OUTPUT_PATH); + options.addOption(OPTION_BACKEND); return options; } -- GitLab From 5a6ca552d68d0a5e735f3360a6927a15dfe9e79a Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Sat, 16 Jun 2018 20:19:59 +0200 Subject: [PATCH 03/23] Adaptation generation of CNNTrain files --- .../monticar/emadl/generator/EMADLGenerator.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index ec9e6c42..97a77983 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -28,9 +28,12 @@ import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.Expanded import de.monticore.lang.math.math._symboltable.MathStatementsSymbol; import de.monticore.lang.monticar.cnnarch.CNNArchGenerator; import de.monticore.lang.monticar.cnnarch._symboltable.ArchitectureSymbol; +import de.monticore.lang.monticar.cnntrain._cocos.CNNTrainCocos; +import de.monticore.lang.monticar.cnntrain._symboltable.CNNTrainCompilationUnitSymbol; import de.monticore.lang.monticar.cnntrain._symboltable.CNNTrainLanguage; import de.monticore.lang.monticar.cnntrain._symboltable.ConfigurationSymbol; import de.monticore.lang.monticar.cnntrain.generator.CNNTrainGenerator; +import de.monticore.lang.monticar.cnntrain.generator.CNNTrainTemplateController; import de.monticore.lang.monticar.emadl._cocos.EMADLCocos; import de.monticore.lang.monticar.generator.FileContent; import de.monticore.lang.monticar.generator.cpp.ArmadilloHelper; @@ -302,10 +305,17 @@ public class EMADLGenerator { Path modelPath = Paths.get(getModelsPath() + Joiner.on("/").join(names.subList(0,names.size()-1))); // - CNNTrainGenerator cnnTrainGenerator = new CNNTrainGenerator(); + //CNNTrainGenerator cnnTrainGenerator = new CNNTrainGenerator(); //No need of cnnTrainGenerator since cnnArchGenerator can also generateTrainer() final ModelPath mp = new ModelPath(modelPath); GlobalScope trainScope = new GlobalScope(mp, new CNNTrainLanguage()); - ConfigurationSymbol configuration = trainScope.resolve(configFilename, ConfigurationSymbol.KIND).get(); + Optional compilationUnit = trainScope.resolve(configFilename, CNNTrainCompilationUnitSymbol.KIND); + if (!compilationUnit.isPresent()){ + Log.error("CNNTrainCompilationUnitSymbol is empty. Could not resolve configuration " + configFilename); + System.exit(1); + } + CNNTrainCocos.checkAll(compilationUnit.get()); + ConfigurationSymbol configuration = compilationUnit.get().getConfiguration(); + return configuration; } -- GitLab From 2917ae62dfa1aa807e3a1f879b27a67f8fa8c1dd Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Sat, 16 Jun 2018 22:11:41 +0200 Subject: [PATCH 04/23] Adapt new parameter for generateTrainer --- .../monticore/lang/monticar/emadl/generator/EMADLGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index 97a77983..361c7602 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -268,7 +268,7 @@ public class EMADLGenerator { } } List fileContents = new ArrayList<>(); - Map fileContentMap = cnnArchGenerator.generateTrainer(configurations, cnnInstanceNames); + Map fileContentMap = cnnArchGenerator.generateTrainer(configurations, cnnInstanceNames, "main"); for (String fileName : fileContentMap.keySet()){ fileContents.add(new FileContent(fileContentMap.get(fileName), fileName)); } -- GitLab From 408c0272a7c3d01c1f5b1fcd0993b147dfac9b7f Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Sat, 16 Jun 2018 22:18:34 +0200 Subject: [PATCH 05/23] Changed version --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ccafd62b..10b2cbe4 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ de.monticore.lang.monticar embedded-montiarc-emadl-generator - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT @@ -17,7 +17,7 @@ 0.2.1-SNAPSHOT 0.2.1-SNAPSHOT - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT 0.0.10 -- GitLab From 67fd81a34c32e0bdd73c70b39502bb29d03b85e0 Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Wed, 20 Jun 2018 19:07:08 +0200 Subject: [PATCH 06/23] Corrected package name for CNNArch2MxNet and CNNArch2Caffe2 --- .../de/monticore/lang/monticar/emadl/generator/Backend.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java index beee51dd..cced4c96 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java @@ -2,7 +2,8 @@ package de.monticore.lang.monticar.emadl.generator; import de.monticore.lang.monticar.cnnarch.CNNArchGenerator; -import de.monticore.lang.monticar.cnnarch.generator.CNNArch2MxNet; +import de.monticore.lang.monticar.cnnarch.mxnetgenerator.CNNArch2MxNet; +import de.monticore.lang.monticar.cnnarch.caffe2generator.CNNArch2Caffe2; import java.util.Optional; @@ -16,8 +17,7 @@ public enum Backend { CAFFE2{ @Override public CNNArchGenerator getGenerator() { - //return new CNNArch2Caffe2(); //TODO - return null; + return new CNNArch2Caffe2(); } }; -- GitLab From 40bca6ac0b00836b51c4bd54810505ad80c079a6 Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Wed, 20 Jun 2018 19:09:30 +0200 Subject: [PATCH 07/23] Include cnnarch-caffe2-generator in pom.xml --- pom.xml | 6 ++++++ .../lang/monticar/emadl/generator/EMADLGeneratorCli.java | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 10b2cbe4..35280c59 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,12 @@ ${cnnarch-generator.version} + + de.monticore.lang.monticar + cnnarch-caffe2-generator + ${cnnarch-generator.version} + + de.monticore.lang.monticar cnn-train diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java index 50ed1041..fba52f46 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java @@ -51,8 +51,8 @@ public class EMADLGeneratorCli { .required(false) .build(); public static final Option OPTION_BACKEND = Option.builder("b") - .longOpt("output-dir") - .desc("full path to output directory for tests e.g. C:\\Users\\vpupkin\\proj\\MyAwesomeAutopilot\\target\\gen-cpp") + .longOpt("backend") + .desc("deep-learning-framework backend. Options: MXNET, CAFFE2") .hasArg(true) .required(false) .build(); @@ -97,7 +97,7 @@ public class EMADLGeneratorCli { Optional backend = Backend.getBackendFromString(backendString); if (!backend.isPresent()){ - Log.error("backend error"); + Log.error("specified backend not supported"); } EMADLGenerator generator = new EMADLGenerator(backend.get()); -- GitLab From 8258dd4d27b7bd81e4dc4d8435f3d0d6125ba937 Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Thu, 19 Jul 2018 20:35:59 +0200 Subject: [PATCH 08/23] Adapt getBackendFromString from enum Backend --- .../lang/monticar/emadl/generator/Backend.java | 17 +++++++++-------- .../emadl/generator/EMADLGeneratorCli.java | 9 ++++++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java index cced4c96..9e5b5001 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/Backend.java @@ -24,14 +24,15 @@ public enum Backend { public abstract CNNArchGenerator getGenerator(); public static Optional getBackendFromString(String backend){ - if(backend.equals(MXNET.toString())){ - return Optional.of(MXNET); - } - else if (backend.equals(CAFFE2.toString())){ - return Optional.of(CAFFE2); - } - else{ - return Optional.empty(); + switch (backend){ + case "MXNET": + return Optional.of(MXNET); + + case "CAFFE2": + return Optional.of(CAFFE2); + + default: + return Optional.empty(); } } } diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java index fba52f46..21eb2a95 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGeneratorCli.java @@ -94,10 +94,17 @@ public class EMADLGeneratorCli { String rootModelName = cliArgs.getOptionValue(OPTION_ROOT_MODEL.getOpt()); String outputPath = cliArgs.getOptionValue(OPTION_OUTPUT_PATH.getOpt()); String backendString = cliArgs.getOptionValue(OPTION_BACKEND.getOpt()); + final String DEFAULT_BACKEND = "MXNET"; + + if (backendString == null) { + Log.warn("backend not specified. backend set to default value " + DEFAULT_BACKEND); + backendString = DEFAULT_BACKEND; + } Optional backend = Backend.getBackendFromString(backendString); if (!backend.isPresent()){ - Log.error("specified backend not supported"); + Log.warn("specified backend " + backendString + " not supported. backend set to default value " + DEFAULT_BACKEND); + backend = Backend.getBackendFromString(DEFAULT_BACKEND); } EMADLGenerator generator = new EMADLGenerator(backend.get()); -- GitLab From ebe7ffbf805c6a66f8cb14d3bd0755451ceb595c Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Thu, 19 Jul 2018 20:39:54 +0200 Subject: [PATCH 09/23] Generate needed CNNTranslator.h by reading content from main resources instead of using freemarker template loading --- .../emadl/generator/EMADLGenerator.java | 24 +++- .../generator/TemplateConfiguration.java | 48 ------- src/main/resources/CNNTranslator.h | 127 ++++++++++++++++++ 3 files changed, 146 insertions(+), 53 deletions(-) delete mode 100644 src/main/java/de/monticore/lang/monticar/emadl/generator/TemplateConfiguration.java create mode 100644 src/main/resources/CNNTranslator.h diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index 361c7602..228abf3d 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -22,6 +22,8 @@ package de.monticore.lang.monticar.emadl.generator; import com.google.common.base.Joiner; import com.google.common.base.Splitter; +import com.google.common.base.Charsets; +import com.google.common.io.Resources; import de.monticore.io.paths.ModelPath; import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ComponentSymbol; import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ExpandedComponentInstanceSymbol; @@ -32,8 +34,6 @@ import de.monticore.lang.monticar.cnntrain._cocos.CNNTrainCocos; import de.monticore.lang.monticar.cnntrain._symboltable.CNNTrainCompilationUnitSymbol; import de.monticore.lang.monticar.cnntrain._symboltable.CNNTrainLanguage; import de.monticore.lang.monticar.cnntrain._symboltable.ConfigurationSymbol; -import de.monticore.lang.monticar.cnntrain.generator.CNNTrainGenerator; -import de.monticore.lang.monticar.cnntrain.generator.CNNTrainTemplateController; import de.monticore.lang.monticar.emadl._cocos.EMADLCocos; import de.monticore.lang.monticar.generator.FileContent; import de.monticore.lang.monticar.generator.cpp.ArmadilloHelper; @@ -46,11 +46,10 @@ import de.monticore.symboltable.GlobalScope; import de.monticore.symboltable.Scope; import de.se_rwth.commons.Splitters; import de.se_rwth.commons.logging.Log; -import freemarker.template.Template; import freemarker.template.TemplateException; -import java.io.IOException; -import java.io.StringWriter; +import java.io.*; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -209,6 +208,7 @@ public class EMADLGenerator { fileContents.add(new FileContent(contentMap.get(fileName), fileName)); } fileContents.add(componentFileContent); + fileContents.add(new FileContent(readResource("CNNTranslator.h", Charsets.UTF_8), "CNNTranslator.h")); } protected String transformComponent(String component, String predictorClassName, String executeMethod){ @@ -319,4 +319,18 @@ public class EMADLGenerator { return configuration; } + public String readResource(final String fileName, Charset charset) { + try { + return Resources.toString(Resources.getResource(fileName), charset); + + } catch (IllegalArgumentException e) { + System.err.println("Resource file " + fileName + " not found"); + System.exit(1); + return null; + } catch (IOException e) { + System.err.println("IO Error occurred"); + System.exit(1); + return null; + } + } } diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/TemplateConfiguration.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/TemplateConfiguration.java deleted file mode 100644 index fece94a6..00000000 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/TemplateConfiguration.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * - * ****************************************************************************** - * MontiCAR Modeling Family, www.se-rwth.de - * Copyright (c) 2017, Software Engineering Group at RWTH Aachen, - * All rights reserved. - * - * This project is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this project. If not, see . - * ******************************************************************************* - */ -package de.monticore.lang.monticar.emadl.generator; - -import freemarker.template.Configuration; -import freemarker.template.TemplateExceptionHandler; - -public class TemplateConfiguration { - - private static TemplateConfiguration instance; - private Configuration configuration; - - private TemplateConfiguration() { - configuration = new Configuration(Configuration.VERSION_2_3_23); - configuration.setClassForTemplateLoading(TemplateConfiguration.class, "/templates/"); - configuration.setDefaultEncoding("UTF-8"); - configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); - } - - public Configuration getConfiguration() { - return configuration; - } - - public static Configuration get(){ - if (instance == null){ - instance = new TemplateConfiguration(); - } - return instance.getConfiguration(); - } -} diff --git a/src/main/resources/CNNTranslator.h b/src/main/resources/CNNTranslator.h new file mode 100644 index 00000000..5a036659 --- /dev/null +++ b/src/main/resources/CNNTranslator.h @@ -0,0 +1,127 @@ +#ifndef CNNTRANSLATOR_H +#define CNNTRANSLATOR_H +#include +#include + +using namespace std; +using namespace arma; + +class CNNTranslator{ +public: + template static void addColToSTDVector(const Col &source, vector &data){ + for(size_t i = 0; i < source.n_elem; i++){ + data.push_back((float) source(i)); + } + } + + template static void addRowToSTDVector(const subview_row &source, vector &data){ + for(size_t i = 0; i < source.n_elem; i++){ + data.push_back((float) source(i)); + } + } + + template static void addRowToSTDVector(const Row &source, vector &data){ + for(size_t i = 0; i < source.n_elem; i++){ + data.push_back((float) source(i)); + } + } + + template static void addMatToSTDVector(const Mat &source, vector &data){ + for(size_t i = 0; i < source.n_rows; i++){ + addRowToSTDVector(source.row(i), data); + } + } + + + template static vector translate(const Col &source){ + size_t size = source.n_elem; + vector data; + data.reserve(size); + addColToSTDVector(source, data); + return data; + } + + template static vector translate(const Row &source){ + size_t size = source.n_elem; + vector data; + data.reserve(size); + addRowToSTDVector(source, data); + return data; + } + + template static vector translate(const Mat &source){ + size_t size = source.n_elem; + vector data; + data.reserve(size); + addMatToSTDVector(source, data); + return data; + } + + template static vector translate(const Cube &source){ + size_t size = source.n_elem; + vector data; + data.reserve(size); + for(size_t i = 0; i < source.n_slices; i++){ + addMatToSTDVector(source.slice(i), data); + } + return data; + } + + static vec translateToCol(const vector &source, const vector &shape){ + assert(shape.size() == 1); + vec column(shape[0]); + for(size_t i = 0; i < source.size(); i++){ + column(i) = (double) source[i]; + } + return column; + } + + static mat translateToMat(const vector &source, const vector &shape){ + assert(shape.size() == 2); + mat matrix(shape[1], shape[0]); //create transposed version of the matrix + int startPos = 0; + int endPos = matrix.n_rows; + const vector columnShape = {matrix.n_rows}; + for(size_t i = 0; i < matrix.n_cols; i++){ + vector colSource(&source[startPos], &source[endPos]); + matrix.col(i) = translateToCol(colSource, columnShape); + startPos = endPos; + endPos += matrix.n_rows; + } + return matrix.t(); + } + + static cube translateToCube(const vector &source, const vector &shape){ + assert(shape.size() == 3); + cube cubeMatrix(shape[1], shape[2], shape[0]); + const int matrixSize = shape[1] * shape[2]; + const vector matrixShape = {shape[1], shape[2]}; + int startPos = 0; + int endPos = matrixSize; + for(size_t i = 0; i < cubeMatrix.n_slices; i++){ + vector matrixSource(&source[startPos], &source[endPos]); + cubeMatrix.slice(i) = translateToMat(matrixSource, matrixShape); + startPos = endPos; + endPos += matrixSize; + } + return cubeMatrix; + } + + template static vector getShape(const Col &source){ + return {source.n_elem}; + } + + template static vector getShape(const Row &source){ + return {source.n_elem}; + } + + template static vector getShape(const Mat &source){ + return {source.n_rows, source.n_cols}; + } + + template static vector getShape(const Cube &source){ + return {source.n_slices, source.n_rows, source.n_cols}; + } +}; + +#endif -- GitLab From ee3e222b91c849b25cc27982703af68b19f47ae4 Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Tue, 31 Jul 2018 02:56:36 +0200 Subject: [PATCH 10/23] Corrected main component for generated CNNTrainer python file --- .../monticore/lang/monticar/emadl/generator/EMADLGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index 228abf3d..353d5337 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -268,7 +268,7 @@ public class EMADLGenerator { } } List fileContents = new ArrayList<>(); - Map fileContentMap = cnnArchGenerator.generateTrainer(configurations, cnnInstanceNames, "main"); + Map fileContentMap = cnnArchGenerator.generateTrainer(configurations, cnnInstanceNames, mainComponentName); for (String fileName : fileContentMap.keySet()){ fileContents.add(new FileContent(fileContentMap.get(fileName), fileName)); } -- GitLab From ab05ffaf9c99cfea2248f86f9fbeaf22520c9d93 Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Tue, 31 Jul 2018 03:01:56 +0200 Subject: [PATCH 11/23] Corrected test cases from GenerationTest. Verify whether "num_epoch" should also be passed. --- .../lang/monticar/emadl/GenerationTest.java | 18 ++++++------- ...NPredictor_cifar10_cifar10Classifier_net.h | 6 ++--- .../CNNTrainer_cifar10_Cifar10Classifier.py | 25 ++++++++----------- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java b/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java index 3b0590e4..89a2212d 100644 --- a/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java +++ b/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java @@ -44,7 +44,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testCifar10Generation() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "cifar10.Cifar10Classifier"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "cifar10.Cifar10Classifier", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().isEmpty()); @@ -65,7 +65,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testSimulatorGeneration() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "simulator.MainController"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "simulator.MainController", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().isEmpty()); } @@ -73,7 +73,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testAddGeneration() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "Add"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "Add", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().isEmpty()); } @@ -81,7 +81,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testAlexnetGeneration() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "Alexnet"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "Alexnet", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().isEmpty()); } @@ -89,7 +89,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testResNeXtGeneration() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "ResNeXt50"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "ResNeXt50", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().isEmpty()); } @@ -97,7 +97,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testThreeInputGeneration() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "ThreeInputCNN_M14"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "ThreeInputCNN_M14", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().size() == 1); } @@ -105,7 +105,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testMultipleOutputsGeneration() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "MultipleOutputs"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "MultipleOutputs", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().size() == 1); } @@ -113,7 +113,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void tesVGGGeneration() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "VGG16"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "VGG16", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().isEmpty()); } @@ -121,7 +121,7 @@ public class GenerationTest extends AbstractSymtabTest { @Test public void testMultipleInstances() throws IOException, TemplateException { Log.getFindings().clear(); - String[] args = {"-m", "src/test/resources/models/", "-r", "InstanceTest.MainB"}; + String[] args = {"-m", "src/test/resources/models/", "-r", "InstanceTest.MainB", "-b", "MXNET"}; EMADLGeneratorCli.main(args); assertTrue(Log.getFindings().isEmpty()); } diff --git a/src/test/resources/target_code/CNNPredictor_cifar10_cifar10Classifier_net.h b/src/test/resources/target_code/CNNPredictor_cifar10_cifar10Classifier_net.h index 08393d73..45e2ab71 100644 --- a/src/test/resources/target_code/CNNPredictor_cifar10_cifar10Classifier_net.h +++ b/src/test/resources/target_code/CNNPredictor_cifar10_cifar10Classifier_net.h @@ -13,8 +13,8 @@ class CNNPredictor_cifar10_cifar10Classifier_net{ public: const std::string json_file = "model/cifar10_cifar10Classifier_net/net_newest-symbol.json"; const std::string param_file = "model/cifar10_cifar10Classifier_net/net_newest-0000.params"; - const std::vector input_keys = {"data"}; //const std::vector input_keys = {"data"}; + const std::vector input_keys = {"data"}; const std::vector> input_shapes = {{1,3,32,32}}; const bool use_gpu = false; @@ -28,8 +28,8 @@ public: if(handle) MXPredFree(handle); } - void predict(const vector &data, - vector &softmax){ + void predict(const std::vector &data, + std::vector &softmax){ MXPredSetInput(handle, "data", data.data(), data.size()); //MXPredSetInput(handle, "data", data.data(), data.size()); diff --git a/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py b/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py index c4926cca..0aa75716 100644 --- a/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py +++ b/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py @@ -10,19 +10,14 @@ if __name__ == "__main__": cifar10_cifar10Classifier_net = CNNCreator_cifar10_cifar10Classifier_net.CNNCreator_cifar10_cifar10Classifier_net() cifar10_cifar10Classifier_net.train( - batch_size = 64, -num_epoch = 10, -load_checkpoint = False, -context = 'gpu', -normalize = True, -optimizer = 'adam', -optimizer_params = { - 'weight_decay': 1.0E-4, - 'learning_rate': 0.01, - 'learning_rate_decay': 0.8, - 'step_size': 1000} - - - + batch_size = 64, + load_checkpoint = False, + context = 'gpu', + normalize = True, + optimizer = 'adam', + optimizer_params = { + 'weight_decay': 1.0E-4, + 'learning_rate': 0.01, + 'learning_rate_decay': 0.8, + 'step_size': 1000 } ) - -- GitLab From ad1080dfc5ad9074a5042641aa7c0dd2b98af6dc Mon Sep 17 00:00:00 2001 From: Carlos Yeverino Date: Sun, 5 Aug 2018 19:48:26 +0200 Subject: [PATCH 12/23] Update pom to add CNNTrain version 0.2.2-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 35280c59..6e710a3b 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 0.2.1-SNAPSHOT - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT 0.2.2-SNAPSHOT 0.0.10 -- GitLab From d07056a8c4897b512438d42b800582aca6432228 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Fri, 24 Aug 2018 15:17:03 +0200 Subject: [PATCH 13/23] Moving to EMADL version 0.2.2-SNAPSHOT --- pom.xml | 6 +++--- .../lang/monticar/emadl/generator/EMADLGenerator.java | 2 +- .../de/monticore/lang/monticar/emadl/GenerationTest.java | 4 +++- .../java/de/monticore/lang/monticar/emadl/SymtabTest.java | 2 -- src/test/resources/models/InstanceTest/MainB.emadl | 3 --- src/test/resources/models/cifar10/Cifar10Classifier.emadl | 2 -- 6 files changed, 7 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 6e710a3b..c0e32be8 100644 --- a/pom.xml +++ b/pom.xml @@ -15,10 +15,10 @@ - 0.2.1-SNAPSHOT - 0.2.2-SNAPSHOT + 0.2.2-SNAPSHOT + 0.2.4-SNAPSHOT 0.2.2-SNAPSHOT - 0.0.10 + 0.0.25-SNAPSHOT 18.0 diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index 353d5337..8e3c845f 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -27,7 +27,7 @@ import com.google.common.io.Resources; import de.monticore.io.paths.ModelPath; import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ComponentSymbol; import de.monticore.lang.embeddedmontiarc.embeddedmontiarc._symboltable.ExpandedComponentInstanceSymbol; -import de.monticore.lang.math.math._symboltable.MathStatementsSymbol; +import de.monticore.lang.math._symboltable.MathStatementsSymbol; import de.monticore.lang.monticar.cnnarch.CNNArchGenerator; import de.monticore.lang.monticar.cnnarch._symboltable.ArchitectureSymbol; import de.monticore.lang.monticar.cnntrain._cocos.CNNTrainCocos; diff --git a/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java b/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java index 89a2212d..129c57ca 100644 --- a/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java +++ b/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java @@ -24,6 +24,7 @@ import de.monticore.lang.monticar.emadl.generator.EMADLGeneratorCli; import de.se_rwth.commons.logging.Log; import freemarker.template.TemplateException; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import java.io.IOException; @@ -40,7 +41,7 @@ public class GenerationTest extends AbstractSymtabTest { Log.getFindings().clear(); Log.enableFailQuick(false); } - + @Ignore @Test public void testCifar10Generation() throws IOException, TemplateException { Log.getFindings().clear(); @@ -118,6 +119,7 @@ public class GenerationTest extends AbstractSymtabTest { assertTrue(Log.getFindings().isEmpty()); } + @Ignore @Test public void testMultipleInstances() throws IOException, TemplateException { Log.getFindings().clear(); diff --git a/src/test/java/de/monticore/lang/monticar/emadl/SymtabTest.java b/src/test/java/de/monticore/lang/monticar/emadl/SymtabTest.java index ad31923e..16f49a0a 100644 --- a/src/test/java/de/monticore/lang/monticar/emadl/SymtabTest.java +++ b/src/test/java/de/monticore/lang/monticar/emadl/SymtabTest.java @@ -26,7 +26,6 @@ import de.monticore.lang.monticar.emadl._parser.EMADLParser; import de.monticore.symboltable.Scope; import de.se_rwth.commons.logging.Log; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertNotNull; @@ -48,7 +47,6 @@ public class SymtabTest extends AbstractSymtabTest { } @Test - @Ignore public void testAlexnet(){ Scope symTab = createSymTab("src/test/resources/models"); ComponentSymbol a = symTab.resolve("ResNet34", ComponentSymbol.KIND).orElse(null); diff --git a/src/test/resources/models/InstanceTest/MainB.emadl b/src/test/resources/models/InstanceTest/MainB.emadl index 5616b242..076c1ae9 100644 --- a/src/test/resources/models/InstanceTest/MainB.emadl +++ b/src/test/resources/models/InstanceTest/MainB.emadl @@ -19,7 +19,4 @@ component MainB{ connect net2.predictions -> outCalc2.probabilities; connect outCalc1.digit -> digit1; connect outCalc2.digit -> digit2; - - - } } \ No newline at end of file diff --git a/src/test/resources/models/cifar10/Cifar10Classifier.emadl b/src/test/resources/models/cifar10/Cifar10Classifier.emadl index 0167e098..a77716c6 100644 --- a/src/test/resources/models/cifar10/Cifar10Classifier.emadl +++ b/src/test/resources/models/cifar10/Cifar10Classifier.emadl @@ -13,6 +13,4 @@ component Cifar10Classifier{ connect image -> net.data; connect net.softmax -> calculateClass.inputVector; connect calculateClass.maxIndex -> classIndex; - - } } \ No newline at end of file -- GitLab From 847ce787dfaa7c7f98420c89e506d3879f0e6d07 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Fri, 24 Aug 2018 17:43:05 +0200 Subject: [PATCH 14/23] Updated target code for comparison. Tests are running with new EMADL version --- .../lang/monticar/emadl/GenerationTest.java | 4 +--- .../CNNCreator_cifar10_cifar10Classifier_net.py | 4 +++- .../CNNTrainer_cifar10_Cifar10Classifier.py | 17 +++++++++-------- .../target_code/cifar10_cifar10Classifier.h | 6 +++--- .../cifar10_cifar10Classifier_calculateClass.h | 10 +--------- .../target_code/cifar10_cifar10Classifier_net.h | 4 ++-- 6 files changed, 19 insertions(+), 26 deletions(-) diff --git a/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java b/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java index 129c57ca..89a2212d 100644 --- a/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java +++ b/src/test/java/de/monticore/lang/monticar/emadl/GenerationTest.java @@ -24,7 +24,6 @@ import de.monticore.lang.monticar.emadl.generator.EMADLGeneratorCli; import de.se_rwth.commons.logging.Log; import freemarker.template.TemplateException; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import java.io.IOException; @@ -41,7 +40,7 @@ public class GenerationTest extends AbstractSymtabTest { Log.getFindings().clear(); Log.enableFailQuick(false); } - @Ignore + @Test public void testCifar10Generation() throws IOException, TemplateException { Log.getFindings().clear(); @@ -119,7 +118,6 @@ public class GenerationTest extends AbstractSymtabTest { assertTrue(Log.getFindings().isEmpty()); } - @Ignore @Test public void testMultipleInstances() throws IOException, TemplateException { Log.getFindings().clear(); diff --git a/src/test/resources/target_code/CNNCreator_cifar10_cifar10Classifier_net.py b/src/test/resources/target_code/CNNCreator_cifar10_cifar10Classifier_net.py index 247b3f78..8eb79499 100644 --- a/src/test/resources/target_code/CNNCreator_cifar10_cifar10Classifier_net.py +++ b/src/test/resources/target_code/CNNCreator_cifar10_cifar10Classifier_net.py @@ -105,8 +105,9 @@ class CNNCreator_cifar10_cifar10Classifier_net: sys.exit(1) - def train(self, batch_size, + def train(self, batch_size=64, num_epoch=10, + eval_metric='acc', optimizer='adam', optimizer_params=(('learning_rate', 0.001),), load_checkpoint=True, @@ -158,6 +159,7 @@ class CNNCreator_cifar10_cifar10Classifier_net: self.module.fit( train_data=train_iter, + eval_metric=eval_metric, eval_data=test_iter, optimizer=optimizer, optimizer_params=optimizer_params, diff --git a/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py b/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py index 0aa75716..e9989cca 100644 --- a/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py +++ b/src/test/resources/target_code/CNNTrainer_cifar10_Cifar10Classifier.py @@ -5,19 +5,20 @@ import CNNCreator_cifar10_cifar10Classifier_net if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger() - handler = logging.FileHandler("train.log","w", encoding=None, delay="true") + handler = logging.FileHandler("train.log", "w", encoding=None, delay="true") logger.addHandler(handler) cifar10_cifar10Classifier_net = CNNCreator_cifar10_cifar10Classifier_net.CNNCreator_cifar10_cifar10Classifier_net() cifar10_cifar10Classifier_net.train( - batch_size = 64, - load_checkpoint = False, - context = 'gpu', - normalize = True, - optimizer = 'adam', - optimizer_params = { + batch_size=64, + num_epoch=10, + load_checkpoint=False, + context='gpu', + normalize=True, + optimizer='adam', + optimizer_params={ 'weight_decay': 1.0E-4, 'learning_rate': 0.01, 'learning_rate_decay': 0.8, - 'step_size': 1000 } + 'step_size': 1000} ) diff --git a/src/test/resources/target_code/cifar10_cifar10Classifier.h b/src/test/resources/target_code/cifar10_cifar10Classifier.h index 218acd26..4b5956bc 100644 --- a/src/test/resources/target_code/cifar10_cifar10Classifier.h +++ b/src/test/resources/target_code/cifar10_cifar10Classifier.h @@ -9,13 +9,13 @@ using namespace arma; class cifar10_cifar10Classifier{ public: -cube image; -double classIndex; +icube image; +int classIndex; cifar10_cifar10Classifier_net net; cifar10_cifar10Classifier_calculateClass calculateClass; void init() { -image = cube(3, 32, 32); +image = icube(3, 32, 32); net.init(); calculateClass.init(); } diff --git a/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h b/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h index 0f24514a..4341e6f6 100644 --- a/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h +++ b/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h @@ -9,21 +9,13 @@ class cifar10_cifar10Classifier_calculateClass{ const int n = 10; public: colvec inputVector; -double maxIndex; +int maxIndex; void init() { inputVector=colvec(n); } void execute() { -maxIndex = 0; -double maxValue = inputVector(0); -for( auto i=2;i<=n;++i){ -if((inputVector(i) > maxValue)){ -maxIndex = i-1; -maxValue = inputVector(i-1) ; -} -} } }; diff --git a/src/test/resources/target_code/cifar10_cifar10Classifier_net.h b/src/test/resources/target_code/cifar10_cifar10Classifier_net.h index c89ae90a..27eb60c6 100644 --- a/src/test/resources/target_code/cifar10_cifar10Classifier_net.h +++ b/src/test/resources/target_code/cifar10_cifar10Classifier_net.h @@ -11,11 +11,11 @@ class cifar10_cifar10Classifier_net{ const int classes = 10; public: CNNPredictor_cifar10_cifar10Classifier_net _cnn_; -cube data; +icube data; colvec softmax; void init() { -data = cube(3, 32, 32); +data = icube(3, 32, 32); softmax=colvec(classes); } void execute(){ -- GitLab From 8034ebd48a648f748dceec5b06a08ed0bce8b396 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Fri, 24 Aug 2018 23:18:49 +0200 Subject: [PATCH 15/23] Further change in target code --- .../cifar10_cifar10Classifier_calculateClass.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h b/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h index 4341e6f6..fc10275d 100644 --- a/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h +++ b/src/test/resources/target_code/cifar10_cifar10Classifier_calculateClass.h @@ -16,6 +16,14 @@ inputVector=colvec(n); } void execute() { +maxIndex = 0; +double maxValue = inputVector(0-1); +for( auto i=2;i<=n;++i){ +if((inputVector(i-1) > maxValue)){ +maxIndex = i-1; +maxValue = inputVector(i-1); +} +} } }; -- GitLab From 428f7cd0f1a65f69c2eb8e23070e7fefc41bfbb4 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Sun, 26 Aug 2018 15:06:03 +0200 Subject: [PATCH 16/23] Renamed AbstractSymtab, imports optimized --- .../{AbstractSymtab.java => EMADLAbstractSymtab.java} | 6 +++++- .../lang/monticar/emadl/generator/EMADLGenerator.java | 2 +- .../monticore/lang/monticar/emadl/AbstractSymtabTest.java | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) rename src/main/java/de/monticore/lang/monticar/emadl/generator/{AbstractSymtab.java => EMADLAbstractSymtab.java} (96%) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/AbstractSymtab.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLAbstractSymtab.java similarity index 96% rename from src/main/java/de/monticore/lang/monticar/emadl/generator/AbstractSymtab.java rename to src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLAbstractSymtab.java index 9d9956be..86cb6c76 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/AbstractSymtab.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLAbstractSymtab.java @@ -35,6 +35,7 @@ import de.monticore.lang.monticar.generator.order.nfp.TagInitTagSchema.TagInitTa import de.monticore.lang.monticar.generator.order.nfp.TagMinMaxTagSchema.TagMinMaxTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagTableTagSchema.TagTableTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagThresholdTagSchema.TagThresholdTagSchema; +import de.monticore.lang.monticar.generator.order.simulator.AbstractSymtab; import de.monticore.lang.monticar.streamunits._symboltable.StreamUnitsLanguage; import de.monticore.lang.monticar.struct._symboltable.StructLanguage; import de.monticore.lang.tagging._symboltable.TaggingResolver; @@ -44,7 +45,10 @@ import de.monticore.symboltable.Scope; import java.nio.file.Paths; import java.util.Arrays; -public class AbstractSymtab { +public class EMADLAbstractSymtab { + public EMADLAbstractSymtab() { + } + public static TaggingResolver createSymTabAndTaggingResolver(String... modelPath) { Scope scope = createSymTab(modelPath); TaggingResolver tagging = new TaggingResolver(scope, Arrays.asList(modelPath)); diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index 8e3c845f..6f76f66c 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -103,7 +103,7 @@ public class EMADLGenerator { public void generate(String modelPath, String qualifiedName) throws IOException, TemplateException { setModelsPath( modelPath ); - TaggingResolver symtab = AbstractSymtab.createSymTabAndTaggingResolver(getModelsPath()); + TaggingResolver symtab = EMADLAbstractSymtab.createSymTabAndTaggingResolver(getModelsPath()); ComponentSymbol component = symtab.resolve(qualifiedName, ComponentSymbol.KIND).orElse(null); List splitName = Splitters.DOT.splitToList(qualifiedName); diff --git a/src/test/java/de/monticore/lang/monticar/emadl/AbstractSymtabTest.java b/src/test/java/de/monticore/lang/monticar/emadl/AbstractSymtabTest.java index 2dc34c16..e8098fa2 100644 --- a/src/test/java/de/monticore/lang/monticar/emadl/AbstractSymtabTest.java +++ b/src/test/java/de/monticore/lang/monticar/emadl/AbstractSymtabTest.java @@ -20,7 +20,7 @@ */ package de.monticore.lang.monticar.emadl; -import de.monticore.lang.monticar.emadl.generator.AbstractSymtab; +import de.monticore.lang.monticar.emadl.generator.EMADLAbstractSymtab; import de.monticore.lang.tagging._symboltable.TaggingResolver; import org.junit.Assert; @@ -36,7 +36,7 @@ import static org.junit.Assert.assertTrue; public class AbstractSymtabTest { protected static TaggingResolver createSymTab(String... modelPath) { - return AbstractSymtab.createSymTabAndTaggingResolver(modelPath); + return EMADLAbstractSymtab.createSymTabAndTaggingResolver(modelPath); } public static void checkFilesAreEqual(Path generationPath, Path resultsPath, List fileNames) { -- GitLab From 16ccb5056344c557e0e7e86f8ee72a2850cb1b69 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Sun, 26 Aug 2018 15:07:39 +0200 Subject: [PATCH 17/23] Temporarily removed Windows runner --- .gitlab-ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 270a1e99..6d8a64e9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,12 +31,12 @@ masterJobLinux: only: - master -masterJobWindows: - stage: windows - script: - - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install --settings settings.xml - tags: - - Windows10 +#masterJobWindows: +# stage: windows +# script: +# - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install --settings settings.xml +# tags: +# - Windows10 BranchJobLinux: stage: linux -- GitLab From 76cb28ea27bf8575b585032f4ba743e6fa249239 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Sun, 26 Aug 2018 15:51:13 +0200 Subject: [PATCH 18/23] added sonar plugin to settings.xml --- settings.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/settings.xml b/settings.xml index 0ec3f9c7..117a3358 100644 --- a/settings.xml +++ b/settings.xml @@ -57,6 +57,24 @@ + + sonar + + true + + + + + https://metric.se.rwth-aachen.de + + + jenkins + + + ${env.sonar} + + + se-nexus -- GitLab From 4ff7b0bf9ba95face88a376ed709ffdf0ffdc0d3 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Sun, 26 Aug 2018 16:58:08 +0200 Subject: [PATCH 19/23] using new CNNArch2Mxnet version --- .gitlab-ci.yml | 3 +++ README.md | 2 ++ pom.xml | 29 ++++++++++++++++++++++++++--- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6d8a64e9..c283ef15 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,6 +28,8 @@ masterJobLinux: image: maven:3-jdk-8 script: - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install deploy --settings settings.xml + - cat target/site/jacoco/index.html + - mvn package sonar:sonar -s settings.xml only: - master @@ -43,5 +45,6 @@ BranchJobLinux: image: maven:3-jdk-8 script: - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install --settings settings.xml + - cat target/site/jacoco/index.html except: - master diff --git a/README.md b/README.md index 45933fe3..78de523b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +![pipeline](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/badges/master/build.svg) +![coverage](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMADL2CPP/badges/master/coverage.svg) # EMADL2CPP Generates CPP/Python code for EmbeddedMontiArcDL. See example project [EMADL-Demo](https://git.rwth-aachen.de/thomas.timmermanns/EMADL-Demo) for more information on how the generated code can be used. \ No newline at end of file diff --git a/pom.xml b/pom.xml index c0e32be8..5fa5d1d5 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,8 @@ 0.2.2-SNAPSHOT 0.2.4-SNAPSHOT - 0.2.2-SNAPSHOT + 0.2.3-SNAPSHOT + 0.2.2-SNAPSHOT 0.0.25-SNAPSHOT @@ -31,6 +32,7 @@ 3.3 2.4 2.4.3 + 0.8.1 grammars @@ -68,13 +70,13 @@ de.monticore.lang.monticar cnnarch-mxnet-generator - ${cnnarch-generator.version} + ${cnnarch-mxnet-generator.version} de.monticore.lang.monticar cnnarch-caffe2-generator - ${cnnarch-generator.version} + ${cnnarch-caffe2-generator.version} @@ -138,6 +140,27 @@ 2.8.1 + + + org.jacoco + jacoco-maven-plugin + ${jacoco.plugin} + + + pre-unit-test + + prepare-agent + + + + post-unit-test + test + + report + + + + maven-compiler-plugin -- GitLab From 01d119b9f4749c5023d7090c22125c71d653ecfa Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Sun, 26 Aug 2018 17:05:48 +0200 Subject: [PATCH 20/23] Optimized imports --- .../lang/monticar/emadl/generator/EMADLAbstractSymtab.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLAbstractSymtab.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLAbstractSymtab.java index 86cb6c76..8b2b51eb 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLAbstractSymtab.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLAbstractSymtab.java @@ -35,7 +35,6 @@ import de.monticore.lang.monticar.generator.order.nfp.TagInitTagSchema.TagInitTa import de.monticore.lang.monticar.generator.order.nfp.TagMinMaxTagSchema.TagMinMaxTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagTableTagSchema.TagTableTagSchema; import de.monticore.lang.monticar.generator.order.nfp.TagThresholdTagSchema.TagThresholdTagSchema; -import de.monticore.lang.monticar.generator.order.simulator.AbstractSymtab; import de.monticore.lang.monticar.streamunits._symboltable.StreamUnitsLanguage; import de.monticore.lang.monticar.struct._symboltable.StructLanguage; import de.monticore.lang.tagging._symboltable.TaggingResolver; -- GitLab From 217e0f842a42af9a2e80999efdb97002f76672a6 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Thu, 30 Aug 2018 11:29:49 +0200 Subject: [PATCH 21/23] cmake support --- .gitlab-ci.yml | 12 ++++++------ pom.xml | 2 +- .../monticar/emadl/generator/EMADLGenerator.java | 11 ++++++++++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3db63129..a45cd7c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -33,12 +33,12 @@ masterJobLinux: only: - master -#masterJobWindows: -# stage: windows -# script: -# - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install --settings settings.xml -# tags: -# - Windows10 +masterJobWindows: + stage: windows + script: + - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install --settings settings.xml + tags: + - Windows10 BranchJobLinux: stage: linux diff --git a/pom.xml b/pom.xml index 5fa5d1d5..e99ee225 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ 0.2.2-SNAPSHOT 0.2.4-SNAPSHOT - 0.2.3-SNAPSHOT + 0.2.4-SNAPSHOT 0.2.2-SNAPSHOT 0.0.25-SNAPSHOT diff --git a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java index 6f76f66c..131e8899 100644 --- a/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/emadl/generator/EMADLGenerator.java @@ -134,11 +134,20 @@ public class EMADLGenerator { generateComponent(fileContents, allInstances, taggingResolver, componentInstanceSymbol, symtab); - fileContents.addAll(generateCNNTrainer(allInstances, componentInstanceSymbol.getComponentType().getFullName().replaceAll("\\.", "_"))); + String instanceName = componentInstanceSymbol.getComponentType().getFullName().replaceAll("\\.", "_"); + fileContents.addAll(generateCNNTrainer(allInstances, instanceName)); fileContents.add(ArmadilloHelper.getArmadilloHelperFileContent()); TypesGeneratorCPP tg = new TypesGeneratorCPP(); fileContents.addAll(tg.generateTypes(TypeConverter.getTypeSymbols())); + if (cnnArchGenerator.isCMakeRequired()) { + cnnArchGenerator.setGenerationTargetPath(getGenerationTargetPath()); + Map cmakeContentsMap = cnnArchGenerator.generateCMakeContent(componentInstanceSymbol.getFullName()); + for (String fileName : cmakeContentsMap.keySet()){ + fileContents.add(new FileContent(cmakeContentsMap.get(fileName), fileName)); + } + } + if (emamGen.shouldGenerateMainClass()) { //fileContents.add(emamGen.getMainClassFileContent(componentInstanceSymbol, fileContents.get(0))); } else if (emamGen.shouldGenerateSimulatorInterface()) { -- GitLab From 651a3680013693031919d0b2e504fe048fe37dc7 Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Thu, 30 Aug 2018 11:35:01 +0200 Subject: [PATCH 22/23] increased version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e99ee225..cf9de38e 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ de.monticore.lang.monticar embedded-montiarc-emadl-generator - 0.2.2-SNAPSHOT + 0.2.3-SNAPSHOT -- GitLab From 326f57d75a547a8fda4ee8547ab50fe43731e02c Mon Sep 17 00:00:00 2001 From: Svetlana Pavlitskaya Date: Thu, 30 Aug 2018 11:39:21 +0200 Subject: [PATCH 23/23] windows stage still not running --- .gitlab-ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a45cd7c8..3db63129 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -33,12 +33,12 @@ masterJobLinux: only: - master -masterJobWindows: - stage: windows - script: - - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install --settings settings.xml - tags: - - Windows10 +#masterJobWindows: +# stage: windows +# script: +# - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install --settings settings.xml +# tags: +# - Windows10 BranchJobLinux: stage: linux -- GitLab