diff --git a/src/mapper/constant_folder.py b/src/mapper/constant_folder.py index c9fa19834922f7f5d25df271ccca9277cf574d3d..680375f59a69ac1f69e0430a5c6d86283492d3a5 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)