Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove unitless printers #1155

Merged
merged 4 commits into from
Feb 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions pynestml/codegeneration/nest_code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -235,17 +233,17 @@ 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,
constant_printer=self._constant_printer,
function_call_printer=self._gsl_function_call_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

# 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

Expand Down
10 changes: 5 additions & 5 deletions pynestml/codegeneration/nest_compartmental_code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from jinja2 import TemplateRuntimeError

from odetoolbox import analysis
from pynestml.codegeneration.printers.sympy_simple_expression_printer import SympySimpleExpressionPrinter

import pynestml
from pynestml.cocos.co_cos_manager import CoCosManager
Expand All @@ -46,7 +47,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
Expand Down Expand Up @@ -172,16 +172,16 @@ 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,
constant_printer=self._constant_printer,
function_call_printer=self._gsl_function_call_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

# 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=UnitlessCppSimpleExpressionPrinter(
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))
Expand Down
5 changes: 2 additions & 3 deletions pynestml/codegeneration/printers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
# along with NEST. If not, see <http://www.gnu.org/licenses/>.

__all__ = ["ast_printer",
"c_simple_expression_printer",
"constant_printer",
"cpp_expression_printer",
"cpp_function_call_printer",
Expand All @@ -29,7 +30,6 @@
"cpp_variable_printer",
"expression_printer",
"function_call_printer",
"function_printer",
"gsl_variable_printer",
"latex_expression_printer",
"latex_function_call_printer",
Expand All @@ -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"]
17 changes: 15 additions & 2 deletions pynestml/codegeneration/printers/gsl_variable_printer.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,19 @@
#
# You should have received a copy of the GNU General Public License
# along with NEST. If not, see <http://www.gnu.org/licenses/>.

from pynestml.codegeneration.nest_unit_converter import NESTUnitConverter
from pynestml.codegeneration.printers.cpp_variable_printer import CppVariablePrinter
from pynestml.meta_model.ast_variable import ASTVariable
from pynestml.symbols.predefined_units import PredefinedUnits
from pynestml.symbols.symbol import SymbolKind
from pynestml.utils.ast_utils import ASTUtils
from pynestml.utils.logger import Logger, LoggingLevel
from pynestml.utils.messages import Messages


class GSLVariablePrinter(CppVariablePrinter):
r"""
Reference converter for C++ syntax and using the GSL (GNU Scientific Library) API from inside the ``extern "C"`` stepping function.
Variable printer for C++ syntax and using the GSL (GNU Scientific Library) API from inside the ``extern "C"`` stepping function.
"""

def print_variable(self, node: ASTVariable) -> str:
Expand All @@ -39,6 +42,16 @@ def print_variable(self, node: ASTVariable) -> str:
assert isinstance(node, ASTVariable)
symbol = node.get_scope().resolve_to_symbol(node.get_complete_name(), SymbolKind.VARIABLE)

if symbol is None:
# test if variable name can be resolved to a type
if PredefinedUnits.is_unit(node.get_complete_name()):
return str(NESTUnitConverter.get_factor(PredefinedUnits.get_unit(node.get_complete_name()).get_unit()))

code, message = Messages.get_could_not_resolve(node.get_name())
Logger.log_message(log_level=LoggingLevel.ERROR, code=code, message=message,
error_position=node.get_source_position())
return ""

if node.is_delay_variable():
return self._print_delay_variable(node)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# unitless_sympy_simple_expression_printer.py
# sympy_simple_expression_printer.py
#
# This file is part of NEST.
#
Expand All @@ -21,6 +21,7 @@

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
Expand All @@ -29,7 +30,7 @@
from pynestml.symbols.symbol import SymbolKind


class UnitlessSympySimpleExpressionPrinter(CppSimpleExpressionPrinter):
class SympySimpleExpressionPrinter(CppSimpleExpressionPrinter):
r"""
Printer for ASTSimpleExpressions in Sympy syntax.
"""
Expand Down

This file was deleted.

This file was deleted.

2 changes: 0 additions & 2 deletions pynestml/codegeneration/python_standalone_code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
11 changes: 4 additions & 7 deletions pynestml/codegeneration/spinnaker_code_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -85,16 +84,16 @@ 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,
constant_printer=self._constant_printer,
function_call_printer=self._gsl_function_call_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

# 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=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))
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 4 additions & 2 deletions pynestml/utils/mechanism_processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@

import copy

from pynestml.codegeneration.printers.sympy_simple_expression_printer import SympySimpleExpressionPrinter

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
Expand Down Expand Up @@ -56,7 +58,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=SympySimpleExpressionPrinter(
variable_printer=_ode_toolbox_variable_printer,
constant_printer=_constant_printer,
function_call_printer=_ode_toolbox_function_call_printer))
Expand Down
Loading