[pypy-commit] pypy refactor-signature: this is what I meant

fijal noreply at buildbot.pypy.org
Thu Dec 15 09:01:16 CET 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: refactor-signature
Changeset: r50531:7cbc688e4439
Date: 2011-12-15 10:00 +0200
http://bitbucket.org/pypy/pypy/changeset/7cbc688e4439/

Log:	this is what I meant

diff --git a/pypy/module/micronumpy/signature.py b/pypy/module/micronumpy/signature.py
--- a/pypy/module/micronumpy/signature.py
+++ b/pypy/module/micronumpy/signature.py
@@ -59,14 +59,16 @@
 class Signature(object):
     def invent_numbering(self):
         cache = r_dict(sigeq, sighash)
-        self._invent_numbering(cache)
+        allnumbers = []
+        self._invent_numbering(cache, allnumbers)
 
-    def _invent_numbering(self, cache):
+    def _invent_numbering(self, cache, allnumbers):
         try:
             no = cache[self]
         except KeyError:
-            no = len(cache)
+            no = len(allnumbers)
             cache[self] = no
+            allnumbers.append(no)
         self.iter_no = no
 
     def create_frame(self, arr):
@@ -116,11 +118,9 @@
         self.child = child
     
     def eq(self, other):
-        return False # two views are not identical for now
-        # They would be if steps in all dimensions are equal
-        #if type(self) is not type(other):
-        #    return False
-        #return self.child.eq(other.child)
+        if type(self) is not type(other):
+            return False
+        return self.child.eq(other.child)
 
     def hash(self):
         return self.child.hash() ^ 0x12345
@@ -128,6 +128,12 @@
     def debug_repr(self):
         return 'Slice(%s)' % self.child.debug_repr()
 
+    def _invent_numbering(self, cache, allnumbers):
+        # always invent a new number for view
+        no = len(allnumbers)
+        allnumbers.append(no)
+        self.iter_no = no
+
     def _create_iter(self, iterlist, arr):
         if self.iter_no >= len(iterlist):
             iterlist.append(ViewIterator(arr))
@@ -160,8 +166,8 @@
     def debug_repr(self):
         return 'Call1(%s)' % (self.child.debug_repr())
 
-    def _invent_numbering(self, cache):
-        self.child._invent_numbering(cache)
+    def _invent_numbering(self, cache, allnumbers):
+        self.child._invent_numbering(cache, allnumbers)
 
     def _create_iter(self, iterlist, arr):
         self.child._create_iter(iterlist, arr.values)
@@ -186,9 +192,9 @@
         return (self.binfunc is other.binfunc and
                 self.left.eq(other.left) and self.right.eq(other.right))
 
-    def _invent_numbering(self, cache):
-        self.left._invent_numbering(cache)
-        self.right._invent_numbering(cache)
+    def _invent_numbering(self, cache, allnumbers):
+        self.left._invent_numbering(cache, allnumbers)
+        self.right._invent_numbering(cache, allnumbers)
 
     def _create_iter(self, iterlist, arr):
         self.left._create_iter(iterlist, arr.left)
@@ -207,8 +213,8 @@
     def _create_iter(self, iterlist, arr):
         self.right._create_iter(iterlist, arr)
 
-    def _invent_numbering(self, cache):
-        self.right._invent_numbering(cache)
+    def _invent_numbering(self, cache, allnumbers):
+        self.right._invent_numbering(cache, allnumbers)
 
     def eval(self, frame, arr):
         return self.right.eval(frame, arr)


More information about the pypy-commit mailing list