From f252c8a1b7ed0908f844f7085901db29a0334c1b Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Mon, 29 Dec 2008 03:13:49 +0100 Subject: [PATCH] Tolerate constant evaluation failure in constant folding mapper. --- src/mapper/constant_folder.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/mapper/constant_folder.py b/src/mapper/constant_folder.py index c9fa198..680375f 100644 --- a/src/mapper/constant_folder.py +++ b/src/mapper/constant_folder.py @@ -8,8 +8,14 @@ class ConstantFoldingMapperBase(object): from pymbolic.mapper.dependency import DependencyMapper return not bool(DependencyMapper()(expr)) - def fold(self, expr, klass, op, constructor): + def evaluate(self, expr): from pymbolic import evaluate + try: + return evaluate(expr) + except ValueError: + return None + + def fold(self, expr, klass, op, constructor): constants = [] nonconstants = [] @@ -21,7 +27,12 @@ class ConstantFoldingMapperBase(object): queue = list(child.children) + queue else: if self.is_constant(child): - constants.append(evaluate(child)) + value = self.evaluate(child) + if value is None: + # couldn't evaluate + nonconstants.append(child) + else: + constants.append(value) else: nonconstants.append(child) -- GitLab