From 5c08f5c1bf43a2e244b5a9ef831f02897ca10c98 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sat, 27 Aug 2011 15:24:22 +0200
Subject: [PATCH] Add CCodeMapper.copy().

---
 pymbolic/mapper/c_code.py | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/pymbolic/mapper/c_code.py b/pymbolic/mapper/c_code.py
index 7d99f93..4a1b9b7 100644
--- a/pymbolic/mapper/c_code.py
+++ b/pymbolic/mapper/c_code.py
@@ -5,19 +5,29 @@ from pymbolic.mapper.stringifier import SimplifyingSortingStringifyMapper
 
 class CCodeMapper(SimplifyingSortingStringifyMapper):
     def __init__(self, constant_mapper=repr, reverse=True, 
-            cse_prefix="_cse", complex_constant_base_type="double"):
+            cse_prefix="_cse", complex_constant_base_type="double",
+            cse_name_list=[]):
         SimplifyingSortingStringifyMapper.__init__(self, constant_mapper, reverse)
         self.cse_prefix = cse_prefix
 
-        self.cse_to_name = {}
-        self.cse_names = set()
-        self.cse_name_list = []
+        self.cse_to_name = dict((cse, name) for name, cse in cse_name_list)
+        self.cse_names = set(cse for name, cse in cse_name_list)
+        self.cse_name_list = cse_name_list[:]
 
         self.complex_constant_base_type = complex_constant_base_type
 
+    def copy(self, cse_name_list=None):
+        if cse_name_list is None:
+            cse_name_list = self.cse_name_list
+        return CCodeMapper(self.constant_mapper, self.reverse,
+                self.cse_prefix, self.complex_constant_base_type,
+                cse_name_list)
+
+    def copy_with_mapped_cses(self, cses_and_values):
+        return self.copy(self.cse_name_list + cses_and_values)
+
     # mappings ----------------------------------------------------------------
     def map_constant(self, x, enclosing_prec):
-        import numpy
         if isinstance(x, complex):
             return "std::complex<%s>(%s, %s)" % (
                     self.complex_constant_base_type,
-- 
GitLab