From 90439c0b7b94eb71205911e2548e4c3b5c16c8bf Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <kloeckner@haamster.rice.edu>
Date: Mon, 6 Oct 2008 15:14:34 -0500
Subject: [PATCH] Add a flop counter.

---
 src/mapper/flop_counter.py | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 src/mapper/flop_counter.py

diff --git a/src/mapper/flop_counter.py b/src/mapper/flop_counter.py
new file mode 100644
index 0000000..029f728
--- /dev/null
+++ b/src/mapper/flop_counter.py
@@ -0,0 +1,31 @@
+from pymbolic.mapper import CombineMapper
+
+
+
+
+class FlopCounter(CombineMapper):
+    def combine(self, values):
+        return sum(values)
+
+    def handle_unsupported_expression(self, expr, *args, **kwargs):
+        return 0
+
+    def map_constant(self, expr):
+        return 0
+
+    def map_variable(self, expr):
+        return 0
+
+    def map_sum(self, expr):
+        if expr.children:
+            return len(expr.children) - 1 + sum(self.rec(ch) for ch in expr.children)
+        else:
+            return 0
+
+    map_product = map_sum
+
+    def map_quotient(self, expr, *args):
+        return 1 + self.rec(expr.numerator) + self.rec(expr.denominator)
+
+    def map_power(self, expr, *args):
+        return 1 + self.rec(expr.base) + self.rec(expr.exponent)
-- 
GitLab