From 7cc1dbc0d24333602103dde5c496ea0403c3b08f Mon Sep 17 00:00:00 2001 From: Stephan Seitz <stephan.seitz@fau.de> Date: Fri, 12 Jul 2019 16:22:29 +0200 Subject: [PATCH] Add CustomSympyPrinter._print_Sum --- pystencils/backends/cbackend.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index 7c4937d1f..a9b775d7b 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -384,6 +384,30 @@ class CustomSympyPrinter(CCodePrinter): else: return res + def _print_Sum(self, expr): + template = jinja2.Template( + """[&]() { + {{dtype}} sum = ({{dtype}}) 0; + for ( {{iterator_dtype}} {{var}} = {{start}}; {{condition}}; {{var}} += {{increment}} ) { + sum += {{expr}}; + } + return sum; +}()""") + var = expr.limits[0][0] + start = expr.limits[0][1] + end = expr.limits[0][2] + code = template.render( + dtype='float', + iterator_dtype='int', + var=self._print(var), + start=self._print(start), + end=self._print(end), + expr=self._print(expr.function), + increment=str(1), + condition=self._print(var) + ' <= ' + self._print(end) # if start < end else '>=' + ) + return code + _print_Max = C89CodePrinter._print_Max _print_Min = C89CodePrinter._print_Min -- GitLab