diff --git a/pynestml/codegeneration/nest_code_generator.py b/pynestml/codegeneration/nest_code_generator.py index aad4f60cd..ff3a00fd1 100644 --- a/pynestml/codegeneration/nest_code_generator.py +++ b/pynestml/codegeneration/nest_code_generator.py @@ -49,8 +49,7 @@ from pynestml.codegeneration.printers.ode_toolbox_expression_printer import ODEToolboxExpressionPrinter from pynestml.codegeneration.printers.ode_toolbox_function_call_printer import ODEToolboxFunctionCallPrinter from pynestml.codegeneration.printers.ode_toolbox_variable_printer import ODEToolboxVariablePrinter -from pynestml.codegeneration.printers.unitless_cpp_simple_expression_printer import UnitlessCppSimpleExpressionPrinter -from pynestml.codegeneration.printers.unitless_sympy_simple_expression_printer import UnitlessSympySimpleExpressionPrinter +from pynestml.codegeneration.printers.sympy_simple_expression_printer import SympySimpleExpressionPrinter from pynestml.frontend.frontend_configuration import FrontendConfiguration from pynestml.meta_model.ast_assignment import ASTAssignment from pynestml.meta_model.ast_input_port import ASTInputPort @@ -59,7 +58,6 @@ from pynestml.meta_model.ast_node_factory import ASTNodeFactory from pynestml.meta_model.ast_ode_equation import ASTOdeEquation from pynestml.symbol_table.symbol_table import SymbolTable -from pynestml.symbols.boolean_type_symbol import BooleanTypeSymbol from pynestml.symbols.real_type_symbol import RealTypeSymbol from pynestml.symbols.unit_type_symbol import UnitTypeSymbol from pynestml.symbols.symbol import SymbolKind @@ -235,7 +233,7 @@ def setup_printers(self): else: self._gsl_function_call_printer = NESTGSLFunctionCallPrinter(None) - self._gsl_printer = CppExpressionPrinter(simple_expression_printer=UnitlessCppSimpleExpressionPrinter(variable_printer=self._gsl_variable_printer, + self._gsl_printer = CppExpressionPrinter(simple_expression_printer=CppSimpleExpressionPrinter(variable_printer=self._gsl_variable_printer, constant_printer=self._constant_printer, function_call_printer=self._gsl_function_call_printer)) self._gsl_function_call_printer._expression_printer = self._gsl_printer @@ -243,9 +241,9 @@ def setup_printers(self): # ODE-toolbox printers self._ode_toolbox_variable_printer = ODEToolboxVariablePrinter(None) self._ode_toolbox_function_call_printer = ODEToolboxFunctionCallPrinter(None) - self._ode_toolbox_printer = ODEToolboxExpressionPrinter(simple_expression_printer=UnitlessSympySimpleExpressionPrinter(variable_printer=self._ode_toolbox_variable_printer, - constant_printer=self._constant_printer, - function_call_printer=self._ode_toolbox_function_call_printer)) + self._ode_toolbox_printer = ODEToolboxExpressionPrinter(simple_expression_printer=SympySimpleExpressionPrinter(variable_printer=self._ode_toolbox_variable_printer, + constant_printer=self._constant_printer, + function_call_printer=self._ode_toolbox_function_call_printer)) self._ode_toolbox_variable_printer._expression_printer = self._ode_toolbox_printer self._ode_toolbox_function_call_printer._expression_printer = self._ode_toolbox_printer diff --git a/pynestml/codegeneration/nest_compartmental_code_generator.py b/pynestml/codegeneration/nest_compartmental_code_generator.py index 00f061775..5d2cdb4f7 100644 --- a/pynestml/codegeneration/nest_compartmental_code_generator.py +++ b/pynestml/codegeneration/nest_compartmental_code_generator.py @@ -46,7 +46,6 @@ from pynestml.codegeneration.printers.ode_toolbox_expression_printer import ODEToolboxExpressionPrinter from pynestml.codegeneration.printers.ode_toolbox_function_call_printer import ODEToolboxFunctionCallPrinter from pynestml.codegeneration.printers.ode_toolbox_variable_printer import ODEToolboxVariablePrinter -from pynestml.codegeneration.printers.unitless_cpp_simple_expression_printer import UnitlessCppSimpleExpressionPrinter from pynestml.frontend.frontend_configuration import FrontendConfiguration from pynestml.meta_model.ast_assignment import ASTAssignment from pynestml.meta_model.ast_block_with_variables import ASTBlockWithVariables @@ -172,7 +171,7 @@ def setup_printers(self): self._gsl_function_call_printer = NESTGSLFunctionCallPrinter(None) self._gsl_printer = CppExpressionPrinter( - simple_expression_printer=UnitlessCppSimpleExpressionPrinter(variable_printer=self._gsl_variable_printer, + simple_expression_printer=CppSimpleExpressionPrinter(variable_printer=self._gsl_variable_printer, constant_printer=self._constant_printer, function_call_printer=self._gsl_function_call_printer)) self._gsl_function_call_printer._expression_printer = self._gsl_printer @@ -181,7 +180,7 @@ def setup_printers(self): self._ode_toolbox_variable_printer = ODEToolboxVariablePrinter(None) self._ode_toolbox_function_call_printer = ODEToolboxFunctionCallPrinter(None) self._ode_toolbox_printer = ODEToolboxExpressionPrinter( - simple_expression_printer=UnitlessCppSimpleExpressionPrinter( + simple_expression_printer=CppSimpleExpressionPrinter( variable_printer=self._ode_toolbox_variable_printer, constant_printer=self._constant_printer, function_call_printer=self._ode_toolbox_function_call_printer)) diff --git a/pynestml/codegeneration/printers/__init__.py b/pynestml/codegeneration/printers/__init__.py index b62bf5e3f..23299a4be 100644 --- a/pynestml/codegeneration/printers/__init__.py +++ b/pynestml/codegeneration/printers/__init__.py @@ -20,6 +20,7 @@ # along with NEST. If not, see . __all__ = ["ast_printer", + "c_simple_expression_printer", "constant_printer", "cpp_expression_printer", "cpp_function_call_printer", @@ -29,7 +30,6 @@ "cpp_variable_printer", "expression_printer", "function_call_printer", - "function_printer", "gsl_variable_printer", "latex_expression_printer", "latex_function_call_printer", @@ -42,14 +42,13 @@ "nest_gsl_function_call_printer", "nestml_printer", "nestml_variable_printer", - "nest_simple_expression_printer", "nest_variable_printer", "ode_toolbox_expression_printer", "ode_toolbox_function_call_printer", "ode_toolbox_variable_printer", + "python_simple_expression_printer", "python_type_symbol_printer", "simple_expression_printer", "symbol_printer", "type_symbol_printer", - "unitless_cpp_simple_expression_printer", "variable_printer"] diff --git a/pynestml/codegeneration/printers/unitless_sympy_simple_expression_printer.py b/pynestml/codegeneration/printers/sympy_simple_expression_printer.py similarity index 94% rename from pynestml/codegeneration/printers/unitless_sympy_simple_expression_printer.py rename to pynestml/codegeneration/printers/sympy_simple_expression_printer.py index bd41a0cc2..e6a01d465 100644 --- a/pynestml/codegeneration/printers/unitless_sympy_simple_expression_printer.py +++ b/pynestml/codegeneration/printers/sympy_simple_expression_printer.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# unitless_sympy_simple_expression_printer.py +# sympy_simple_expression_printer.py # # This file is part of NEST. # @@ -20,7 +20,7 @@ # along with NEST. If not, see . from pynestml.codegeneration.nest_unit_converter import NESTUnitConverter -from pynestml.codegeneration.printers.cpp_simple_expression_printer import CppSimpleExpressionPrinter +from pynestml.codegeneration.printers.simple_expression_printer import SimpleExpressionPrinter from pynestml.meta_model.ast_function_call import ASTFunctionCall from pynestml.meta_model.ast_node import ASTNode from pynestml.meta_model.ast_simple_expression import ASTSimpleExpression @@ -29,7 +29,7 @@ from pynestml.symbols.symbol import SymbolKind -class UnitlessSympySimpleExpressionPrinter(CppSimpleExpressionPrinter): +class SympySimpleExpressionPrinter(SimpleExpressionPrinter): r""" Printer for ASTSimpleExpressions in Sympy syntax. """ diff --git a/pynestml/codegeneration/printers/unitless_c_simple_expression_printer.py b/pynestml/codegeneration/printers/unitless_c_simple_expression_printer.py deleted file mode 100644 index e0aa938e6..000000000 --- a/pynestml/codegeneration/printers/unitless_c_simple_expression_printer.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# -# unitless_c_simple_expression_printer.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - -from pynestml.codegeneration.printers.c_simple_expression_printer import CSimpleExpressionPrinter -from pynestml.codegeneration.spinnaker_unit_converter import SpinnakerUnitConverter -from pynestml.meta_model.ast_simple_expression import ASTSimpleExpression -from pynestml.symbols.symbol import SymbolKind -from pynestml.symbols.predefined_units import PredefinedUnits - - -class UnitlessCSimpleExpressionPrinter(CSimpleExpressionPrinter): - r""" - An adjusted version of the printer which prints in the units of the target platform (XXX: just nest?) - """ - - def print_simple_expression(self, node: ASTSimpleExpression) -> str: - r"""Print an expression. - - Parameters - ---------- - node - The expression node to print. - - Returns - ------- - s - The expression string. - """ - assert isinstance(node, ASTSimpleExpression) - - if node.is_numeric_literal(): - return self._constant_printer.print_constant(node.get_numeric_literal()) - - if node.is_variable() and node.get_scope() is not None: - node_is_variable_symbol = node.get_scope().resolve_to_symbol( - node.variable.get_complete_name(), SymbolKind.VARIABLE) is not None - if not node_is_variable_symbol and PredefinedUnits.is_unit(node.variable.get_complete_name()): - # case for a literal unit, e.g. "ms" - return str(SpinnakerUnitConverter.get_factor(PredefinedUnits.get_unit(node.variable.get_complete_name()).get_unit())) - - return super().print_simple_expression(node) diff --git a/pynestml/codegeneration/printers/unitless_cpp_simple_expression_printer.py b/pynestml/codegeneration/printers/unitless_cpp_simple_expression_printer.py deleted file mode 100644 index f8c107452..000000000 --- a/pynestml/codegeneration/printers/unitless_cpp_simple_expression_printer.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# -# unitless_cpp_simple_expression_printer.py -# -# This file is part of NEST. -# -# Copyright (C) 2004 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - -from pynestml.codegeneration.printers.cpp_simple_expression_printer import CppSimpleExpressionPrinter -from pynestml.codegeneration.nest_unit_converter import NESTUnitConverter -from pynestml.meta_model.ast_simple_expression import ASTSimpleExpression -from pynestml.symbols.symbol import SymbolKind -from pynestml.symbols.predefined_units import PredefinedUnits - - -class UnitlessCppSimpleExpressionPrinter(CppSimpleExpressionPrinter): - r""" - An adjusted version of the printer which prints in the units of the target platform (XXX: just nest?) - """ - - def print_simple_expression(self, node: ASTSimpleExpression) -> str: - r"""Print an expression. - - Parameters - ---------- - node - The expression node to print. - - Returns - ------- - s - The expression string. - """ - assert isinstance(node, ASTSimpleExpression) - - if node.is_numeric_literal(): - return self._constant_printer.print_constant(node.get_numeric_literal()) - - if node.is_variable() and node.get_scope() is not None: - node_is_variable_symbol = node.get_scope().resolve_to_symbol( - node.variable.get_complete_name(), SymbolKind.VARIABLE) is not None - if not node_is_variable_symbol and PredefinedUnits.is_unit(node.variable.get_complete_name()): - # case for a literal unit, e.g. "ms" - return str(NESTUnitConverter.get_factor(PredefinedUnits.get_unit(node.variable.get_complete_name()).get_unit())) - - return super().print_simple_expression(node) diff --git a/pynestml/codegeneration/python_standalone_code_generator.py b/pynestml/codegeneration/python_standalone_code_generator.py index 56f32f771..76421aa8f 100644 --- a/pynestml/codegeneration/python_standalone_code_generator.py +++ b/pynestml/codegeneration/python_standalone_code_generator.py @@ -111,8 +111,6 @@ def setup_printers(self): self._nest_variable_printer_no_origin._expression_printer = self._printer_no_origin self._nest_function_call_printer_no_origin._expression_printer = self._printer_no_origin - self._nest_unitless_function_call_printer = PythonFunctionCallPrinter(None) - # GSL printers self._gsl_variable_printer = PythonSteppingFunctionVariablePrinter(None) self._gsl_function_call_printer = PythonSteppingFunctionFunctionCallPrinter(None) diff --git a/pynestml/codegeneration/spinnaker_code_generator.py b/pynestml/codegeneration/spinnaker_code_generator.py index 0fab611ed..9877375ab 100644 --- a/pynestml/codegeneration/spinnaker_code_generator.py +++ b/pynestml/codegeneration/spinnaker_code_generator.py @@ -46,7 +46,6 @@ from pynestml.codegeneration.printers.spinnaker_python_function_call_printer import SpinnakerPythonFunctionCallPrinter from pynestml.codegeneration.printers.spinnaker_python_simple_expression_printer import SpinnakerPythonSimpleExpressionPrinter from pynestml.codegeneration.printers.spinnaker_python_type_symbol_printer import SpinnakerPythonTypeSymbolPrinter -from pynestml.codegeneration.printers.unitless_c_simple_expression_printer import UnitlessCSimpleExpressionPrinter from pynestml.codegeneration.python_standalone_code_generator import PythonStandaloneCodeGenerator from pynestml.meta_model.ast_model import ASTModel from pynestml.visitors.ast_symbol_table_visitor import ASTSymbolTableVisitor @@ -85,7 +84,7 @@ def setup_printers(self): self._gsl_function_call_printer = SpinnakerGSLFunctionCallPrinter(None) self._gsl_printer = CppExpressionPrinter( - simple_expression_printer=UnitlessCSimpleExpressionPrinter(variable_printer=self._gsl_variable_printer, + simple_expression_printer=CSimpleExpressionPrinter(variable_printer=self._gsl_variable_printer, constant_printer=self._constant_printer, function_call_printer=self._gsl_function_call_printer)) self._gsl_function_call_printer._expression_printer = self._gsl_printer @@ -94,7 +93,7 @@ def setup_printers(self): self._ode_toolbox_variable_printer = ODEToolboxVariablePrinter(None) self._ode_toolbox_function_call_printer = ODEToolboxFunctionCallPrinter(None) self._ode_toolbox_printer = ODEToolboxExpressionPrinter( - simple_expression_printer=UnitlessCSimpleExpressionPrinter( + simple_expression_printer=CSimpleExpressionPrinter( variable_printer=self._ode_toolbox_variable_printer, constant_printer=self._constant_printer, function_call_printer=self._ode_toolbox_function_call_printer)) @@ -133,8 +132,6 @@ def setup_printers(self): self._nest_variable_printer_no_origin._expression_printer = self._printer_no_origin self._nest_function_call_printer_no_origin._expression_printer = self._printer_no_origin - self._nest_unitless_function_call_printer = SpinnakerPythonFunctionCallPrinter(None) - # GSL printers self._gsl_variable_printer = PythonSteppingFunctionVariablePrinter(None) self._gsl_function_call_printer = PythonSteppingFunctionFunctionCallPrinter(None) diff --git a/pynestml/utils/mechanism_processing.py b/pynestml/utils/mechanism_processing.py index e53c2d05a..bc069dbb8 100644 --- a/pynestml/utils/mechanism_processing.py +++ b/pynestml/utils/mechanism_processing.py @@ -23,12 +23,12 @@ import copy +from pynestml.codegeneration.printers.cpp_simple_expression_printer import CppSimpleExpressionPrinter from pynestml.codegeneration.printers.nestml_printer import NESTMLPrinter from pynestml.codegeneration.printers.constant_printer import ConstantPrinter from pynestml.codegeneration.printers.ode_toolbox_expression_printer import ODEToolboxExpressionPrinter from pynestml.codegeneration.printers.ode_toolbox_function_call_printer import ODEToolboxFunctionCallPrinter from pynestml.codegeneration.printers.ode_toolbox_variable_printer import ODEToolboxVariablePrinter -from pynestml.codegeneration.printers.unitless_cpp_simple_expression_printer import UnitlessCppSimpleExpressionPrinter from pynestml.meta_model.ast_expression import ASTExpression from pynestml.meta_model.ast_model import ASTModel from pynestml.meta_model.ast_simple_expression import ASTSimpleExpression @@ -56,7 +56,7 @@ class MechanismProcessing: _ode_toolbox_variable_printer = ODEToolboxVariablePrinter(None) _ode_toolbox_function_call_printer = ODEToolboxFunctionCallPrinter(None) _ode_toolbox_printer = ODEToolboxExpressionPrinter( - simple_expression_printer=UnitlessCppSimpleExpressionPrinter( + simple_expression_printer=CppSimpleExpressionPrinter( variable_printer=_ode_toolbox_variable_printer, constant_printer=_constant_printer, function_call_printer=_ode_toolbox_function_call_printer))