diff --git a/pymbolic/mapper/__init__.py b/pymbolic/mapper/__init__.py index 97039938e616e654799fc9f5c8bef0d001af989c..a88e861987cffcdc9b638da5a79bbfaa90ff1718 100644 --- a/pymbolic/mapper/__init__.py +++ b/pymbolic/mapper/__init__.py @@ -263,7 +263,7 @@ class IdentityMapperBase(object): if is_zero(result): return 0 - return expr.__class__( + return type(expr)( result, expr.prefix, **expr.get_extra_properties()) diff --git a/pymbolic/mapper/stringifier.py b/pymbolic/mapper/stringifier.py index 801bbd49387d4b3ccc9a8e7e0d7b5ac21952f026..554ec80f1a054b6121e1cbb275e81ea4c1dcc190 100644 --- a/pymbolic/mapper/stringifier.py +++ b/pymbolic/mapper/stringifier.py @@ -186,7 +186,14 @@ class StringifyMapper(pymbolic.mapper.RecursiveMapper): return "array(\n%s)" % "".join(lines) def map_common_subexpression(self, expr, enclosing_prec): - return self.format("CSE(%s)", self.rec(expr.child, PREC_NONE)) + from pymbolic.primitives import CommonSubexpression + if type(expr) is CommonSubexpression: + type_name = "CSE" + else: + type_name = type(expr).__name__ + + return self.format("%s(%s)", + type_name, self.rec(expr.child, PREC_NONE)) def map_if_positive(self, expr, enclosing_prec): return "If(%s > 0, %s, %s)" % (