From 97d4462f10a2ca9193b1e2fc493d0e2108aed2a6 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Tue, 3 Apr 2012 01:57:27 -0400
Subject: [PATCH] Fix CSE tagger when multiple identical expressions occur in a
 commutative subexpr.

---
 pymbolic/cse.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/pymbolic/cse.py b/pymbolic/cse.py
index bb71581..b7c6109 100644
--- a/pymbolic/cse.py
+++ b/pymbolic/cse.py
@@ -26,7 +26,11 @@ class NormalizedKeyGetter(object):
     def __call__(self, expr):
         expr = self.remove_cses(expr)
         if isinstance(expr, COMMUTATIVE_CLASSES):
-            return type(expr), frozenset(expr.children)
+            kid_count = {}
+            for child in expr.children:
+                kid_count[child] = kid_count.get(child, 0) + 1
+
+            return type(expr), frozenset(kid_count.iteritems())
         else:
             return expr
 
-- 
GitLab