From 5eb1e8fdd7337d1e889e7bdecb4b44f75f6e0f52 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Sun, 16 Nov 2008 13:35:52 -0600 Subject: [PATCH] Add SortingStringifyMapper, add reverse= kwarg to SimpSortSMapper. --- src/mapper/stringifier.py | 43 +++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/mapper/stringifier.py b/src/mapper/stringifier.py index 861f101..5bbbf21 100644 --- a/src/mapper/stringifier.py +++ b/src/mapper/stringifier.py @@ -135,7 +135,39 @@ class StringifyMapper(pymbolic.mapper.RecursiveMapper): +class SortingStringifyMapper(StringifyMapper): + def __init__(self, constant_mapper=str, reverse=True): + StringifyMapper.__init__(self, constant_mapper) + self.reverse = reverse + + def map_sum(self, expr, enclosing_prec): + entries = [self.rec(i, PREC_SUM) for i in expr.children] + entries.sort(reverse=self.reverse) + result = " + ".join(entries) + + if enclosing_prec > PREC_SUM: + return "(%s)" % result + else: + return result + + def map_product(self, expr, enclosing_prec): + entries = [self.rec(i, PREC_PRODUCT) for i in expr.children] + entries.sort(reverse=self.reverse) + result = "*".join(entries) + + if enclosing_prec > PREC_PRODUCT: + return "(%s)" % result + else: + return result + + + + class SimplifyingSortingStringifyMapper(StringifyMapper): + def __init__(self, constant_mapper=str, reverse=True): + StringifyMapper.__init__(self, constant_mapper) + self.reverse = reverse + def map_sum(self, expr, enclosing_prec): entries = [self.rec(i, PREC_SUM) for i in expr.children] @@ -158,10 +190,10 @@ class SimplifyingSortingStringifyMapper(StringifyMapper): else: positives.append(self.rec(ch, PREC_SUM)) - positives.sort() - positives = " + ".join(positives[::-1]) - negatives.sort() - negatives = "".join(" - " + entry for entry in negatives[::-1]) + positives.sort(reverse=self.reverse) + positives = " + ".join(positives) + negatives.sort(reverse=self.reverse) + negatives = "".join(" - " + entry for entry in negatives) result = positives + negatives @@ -187,8 +219,7 @@ class SimplifyingSortingStringifyMapper(StringifyMapper): i += 1 entries = list(generate_entries()) - entries.sort() - #entries = entries[::-1] + entries.sort(reverse=self.reverse) if enclosing_prec > PREC_PRODUCT: return "(%s)" % "*".join(entries) -- GitLab