[pypy-commit] pypy numpy-exp: Reorganize the internals, there is now only a single app-level type.

alex_gaynor noreply at buildbot.pypy.org
Sat May 14 20:20:42 CEST 2011


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: numpy-exp
Changeset: r44168:e348c4d6e6b0
Date: 2011-05-14 13:29 -0500
http://bitbucket.org/pypy/pypy/changeset/e348c4d6e6b0/

Log:	Reorganize the internals, there is now only a single app-level type.

diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -211,6 +211,22 @@
     def compile(self):
         raise NotImplementedError("abstract base class")
 
+    def get_concrete(self):
+        raise NotImplementedError
+
+    def descr_len(self, space):
+        return self.get_concrete().descr_len(space)
+
+    @unwrap_spec(item=int)
+    def descr_getitem(self, space, item):
+        return self.get_concrete().descr_getitem(space, item)
+
+    @unwrap_spec(item=int, value=float)
+    def descr_setitem(self, space, item, value):
+        self.invalidated()
+        return self.get_concrete().descr_setitem(space, item, value)
+
+
 class FloatWrapper(BaseArray):
     """
     Intermediate class representing a float literal.
@@ -240,20 +256,9 @@
         if self.forced_result is None:
             self.forced_result = self.force()
 
-    def descr_len(self, space):
+    def get_concrete(self):
         self.force_if_needed()
-        return self.forced_result.descr_len(space)
-
-    @unwrap_spec(item=int)
-    def descr_getitem(self, space, item):
-        self.force_if_needed()
-        return self.forced_result.descr_getitem(space, item)
-
-    @unwrap_spec(item=int, value=float)
-    def descr_setitem(self, space, item, value):
-        self.force_if_needed()
-        self.invalidated()
-        return self.forced_result.descr_setitem(space, item, value)
+        return self.forced_result
 
 
 class BinOp(VirtualArray):
@@ -282,18 +287,6 @@
         return Code('', functions=[self.function]).merge('c', self.values.compile())
 
 
-VirtualArray.typedef = TypeDef(
-    'Operation',
-    __len__ = interp2app(VirtualArray.descr_len),
-    __getitem__ = interp2app(VirtualArray.descr_getitem),
-    __setitem__ = interp2app(VirtualArray.descr_setitem),
-
-    __add__ = interp2app(BaseArray.descr_add),
-    __sub__ = interp2app(BaseArray.descr_sub),
-    __mul__ = interp2app(BaseArray.descr_mul),
-    __div__ = interp2app(BaseArray.descr_div),
-)
-
 class SingleDimArray(BaseArray):
     def __init__(self, size):
         BaseArray.__init__(self)
@@ -305,6 +298,9 @@
     def compile(self):
         return Code('l', arrays=[self])
 
+    def get_concrete(self):
+        return self
+
     def getindex(self, space, item):
         if item >= self.size:
             raise operationerrfmt(space.w_IndexError,
@@ -347,12 +343,12 @@
     return space.wrap(SingleDimArray(size))
 
 
-SingleDimArray.typedef = TypeDef(
+BaseArray.typedef = TypeDef(
     'numarray',
     __new__ = interp2app(descr_new_numarray),
-    __len__ = interp2app(SingleDimArray.descr_len),
-    __getitem__ = interp2app(SingleDimArray.descr_getitem),
-    __setitem__ = interp2app(SingleDimArray.descr_setitem),
+    __len__ = interp2app(BaseArray.descr_len),
+    __getitem__ = interp2app(BaseArray.descr_getitem),
+    __setitem__ = interp2app(BaseArray.descr_setitem),
 
     __add__ = interp2app(BaseArray.descr_add),
     __sub__ = interp2app(BaseArray.descr_sub),


More information about the pypy-commit mailing list