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