def test_print_statement_with_variables(self):
        input_path = str(
            os.path.realpath(
                os.path.join(
                    os.path.dirname(__file__),
                    os.path.join('resources',
                                 'PrintStatementWithVariables.nestml'))))

        params = list()
        params.append('--input_path')
        params.append(input_path)
        params.append('--logging_level')
        params.append('INFO')
        params.append('--target_path')
        params.append(self.target_path)
        params.append('--dev')
        FrontendConfiguration.parse_config(params)
        compilation_unit = ModelParser.parse_model(input_path)

        nestCodeGenerator = NESTCodeGenerator()
        nestCodeGenerator.generate_code(compilation_unit.get_neuron_list())

        with open(
                str(
                    os.path.realpath(
                        os.path.join(
                            os.path.dirname(__file__),
                            os.path.join(os.pardir, 'target',
                                         'print_test_variables.cpp')))),
                'r') as reader:
            self.assertEqual(reader.read().count('std::cout'), 2)
Ejemplo n.º 2
0
    def test_iaf_psc_alpha_with_codegen_opts(self):
        input_path = str(
            os.path.realpath(
                os.path.join(
                    os.path.dirname(__file__),
                    os.path.join(os.pardir, 'models', 'neurons',
                                 'iaf_psc_alpha.nestml'))))

        code_opts_path = str(
            os.path.realpath(
                os.path.join(os.path.dirname(__file__),
                             os.path.join('resources', 'code_options.json'))))
        codegen_opts = {
            "templates": {
                "path":
                "point_neuron",
                "model_templates": {
                    "neuron":
                    ['NeuronClass.cpp.jinja2', 'NeuronHeader.h.jinja2'],
                    "synapse": []
                },
                "module_templates": [
                    'setup/CMakeLists.txt.jinja2',
                    'setup/ModuleHeader.h.jinja2',
                    'setup/ModuleClass.cpp.jinja2'
                ]
            }
        }

        with open(code_opts_path, 'w+') as f:
            json.dump(codegen_opts, f)

        params = list()
        params.append('--input_path')
        params.append(input_path)
        params.append('--logging_level')
        params.append('INFO')
        params.append('--target_path')
        params.append(self.target_path)
        params.append('--dev')
        params.append('--codegen_opts')
        params.append(code_opts_path)
        FrontendConfiguration.parse_config(params)

        compilation_unit = ModelParser.parse_model(input_path)

        nestCodeGenerator = NESTCodeGenerator(codegen_opts)
        nestCodeGenerator.generate_code(compilation_unit.get_neuron_list(),
                                        list())
Ejemplo n.º 3
0
    def test_expressions(self):
        input_path = str(os.path.realpath(os.path.join(os.path.dirname(__file__), os.path.join(
            'resources', 'ExpressionTypeTest.nestml'))))

        params = list()
        params.append('--input_path')
        params.append(input_path)
        params.append('--logging_level')
        params.append('INFO')
        params.append('--target_path')
        params.append(self.target_path)
        params.append('--dev')
        FrontendConfiguration.parse_config(params)
        compilation_unit = ModelParser.parse_model(input_path)

        nestCodeGenerator = NESTCodeGenerator()
        nestCodeGenerator.generate_code(compilation_unit.get_neuron_list())
Ejemplo n.º 4
0
    def test_vector_code_generation(self):
        input_path = str(os.path.realpath(os.path.join(os.path.dirname(__file__), os.path.join(
            'valid', 'VectorsDeclarationAndAssignment.nestml'))))

        params = list()
        params.append('--input_path')
        params.append(input_path)
        params.append('--logging_level')
        params.append('INFO')
        params.append('--target_path')
        params.append(self.target_path)
        params.append('--dev')
        FrontendConfiguration.parse_config(params)

        compilation_unit = ModelParser.parse_model(input_path)

        nestCodeGenerator = NESTCodeGenerator()
        nestCodeGenerator.generate_code(compilation_unit.get_neuron_list())
Ejemplo n.º 5
0
    def test_iaf_psc_delta(self):
        input_path = str(
            os.path.realpath(
                os.path.join(
                    os.path.dirname(__file__),
                    os.path.join(os.pardir, 'models', 'neurons',
                                 'iaf_psc_delta.nestml'))))

        params = list()
        params.append('--input_path')
        params.append(input_path)
        params.append('--logging_level')
        params.append('INFO')
        params.append('--target_path')
        params.append(self.target_path)
        params.append('--dev')
        FrontendConfiguration.parse_config(params)

        compilation_unit = ModelParser.parse_model(input_path)

        nestCodeGenerator = NESTCodeGenerator()
        nestCodeGenerator.generate_code(compilation_unit.get_neuron_list(),
                                        compilation_unit.get_synapse_list())
Ejemplo n.º 6
0
def code_generator_from_target_name(
        target_name: str,
        options: Optional[Mapping[str, Any]] = None) -> CodeGenerator:
    """Static factory method that returns a new instance of a child class of CodeGenerator"""
    assert target_name.upper() in get_known_targets(
    ), "Unknown target platform requested: \"" + str(target_name) + "\""
    if target_name.upper() == "NEST":
        from pynestml.codegeneration.nest_code_generator import NESTCodeGenerator
        return NESTCodeGenerator(options)
    elif target_name.upper() == "NEST2":
        from pynestml.codegeneration.nest2_code_generator import NEST2CodeGenerator
        return NEST2CodeGenerator(options)
    elif target_name.upper() == "AUTODOC":
        from pynestml.codegeneration.autodoc_code_generator import AutoDocCodeGenerator
        assert options is None or options == {}, "\"autodoc\" code generator does not support options"
        return AutoDocCodeGenerator()
    elif target_name.upper() == "NONE":
        # dummy/null target: user requested to not generate any code
        code, message = Messages.get_no_code_generated()
        Logger.log_message(None, code, message, None, LoggingLevel.INFO)
        return CodeGenerator("", options)
    assert "Unknown code generator requested: " + target_name  # cannot reach here due to earlier assert -- silence static checker warnings