[pypy-commit] pypy numpy-refactor: some more progress, mostly copy-paste

fijal noreply at buildbot.pypy.org
Thu Aug 30 16:37:21 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-refactor
Changeset: r56944:60facc62d90d
Date: 2012-08-30 16:36 +0200
http://bitbucket.org/pypy/pypy/changeset/60facc62d90d/

Log:	some more progress, mostly copy-paste

diff --git a/pypy/module/micronumpy/arrayimpl/concrete.py b/pypy/module/micronumpy/arrayimpl/concrete.py
--- a/pypy/module/micronumpy/arrayimpl/concrete.py
+++ b/pypy/module/micronumpy/arrayimpl/concrete.py
@@ -1,6 +1,6 @@
 
 from pypy.module.micronumpy.arrayimpl import base
-from pypy.module.micronumpy import support
+from pypy.module.micronumpy import support, loop
 from pypy.interpreter.error import OperationError, operationerrfmt
 from pypy.rlib import jit
 
@@ -71,6 +71,10 @@
     def fill(self, box):
         self.dtype.fill(self.storage, box, 0, self.size)
 
+    def copy(self):
+        impl = ConcreteArray(self.shape, self.dtype, self.order)
+        return loop.setslice(impl, self)
+
     # -------------------- applevel get/setitem -----------------------
 
     @jit.unroll_safe
diff --git a/pypy/module/micronumpy/arrayimpl/scalar.py b/pypy/module/micronumpy/arrayimpl/scalar.py
--- a/pypy/module/micronumpy/arrayimpl/scalar.py
+++ b/pypy/module/micronumpy/arrayimpl/scalar.py
@@ -36,3 +36,9 @@
 
     def get_scalar_value(self):
         return self.value
+
+    def copy(self):
+        scalar = Scalar(self.dtype)
+        scalar.value = self.value
+        return scalar
+    
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
@@ -1,6 +1,6 @@
 
 from pypy.interpreter.baseobjspace import Wrappable
-from pypy.interpreter.error import operationerrfmt
+from pypy.interpreter.error import operationerrfmt, OperationError
 from pypy.interpreter.typedef import TypeDef, GetSetProperty
 from pypy.interpreter.gateway import interp2app, unwrap_spec
 from pypy.module.micronumpy import interp_dtype, interp_ufuncs, support
@@ -8,6 +8,7 @@
 from pypy.module.micronumpy.strides import find_shape_and_elems
 from pypy.tool.sourcetools import func_with_new_name
 from pypy.rlib import jit
+from pypy.rlib.objectmodel import instantiate
 
 def _find_shape(space, w_size):
     if space.isinstance_w(w_size, space.w_int):
@@ -63,6 +64,13 @@
                                        support.convert_to_array(space, w_value))
         self.implementation.descr_setitem(space, w_idx, w_value)
 
+    def descr_len(self, space):
+        shape = self.get_shape()
+        if len(shape):
+            return space.wrap(shape[0])
+        raise OperationError(space.w_TypeError, space.wrap(
+            "len() of unsized object"))
+
     def create_iter(self):
         return self.implementation.create_iter()
 
@@ -78,6 +86,11 @@
     def get_scalar_value(self):
         return self.implementation.get_scalar_value()
 
+    def descr_copy(self, space):
+        arr = instantiate(W_NDimArray)
+        arr.implementation = self.implementation.copy()
+        return arr
+
     # --------------------- binary operations ----------------------------
 
     def _binop_impl(ufunc_name):
@@ -87,6 +100,13 @@
         return func_with_new_name(impl, "binop_%s_impl" % ufunc_name)
 
     descr_add = _binop_impl("add")
+    
+    descr_eq = _binop_impl("equal")
+    descr_ne = _binop_impl("not_equal")
+    descr_lt = _binop_impl("less")
+    descr_le = _binop_impl("less_equal")
+    descr_gt = _binop_impl("greater")
+    descr_ge = _binop_impl("greater_equal")
 
     def _binop_right_impl(ufunc_name):
         def impl(self, space, w_other, w_out=None):
@@ -112,18 +132,28 @@
     "ndarray",
     __new__ = interp2app(descr_new_array),
 
+    __len__ = interp2app(W_NDimArray.descr_len),
+    __getitem__ = interp2app(W_NDimArray.descr_getitem),
+    __setitem__ = interp2app(W_NDimArray.descr_setitem),
+
     __add__ = interp2app(W_NDimArray.descr_add),
 
     __radd__ = interp2app(W_NDimArray.descr_radd),
 
-    __getitem__ = interp2app(W_NDimArray.descr_getitem),
-    __setitem__ = interp2app(W_NDimArray.descr_setitem),
+    __eq__ = interp2app(W_NDimArray.descr_eq),
+    __ne__ = interp2app(W_NDimArray.descr_ne),
+    __lt__ = interp2app(W_NDimArray.descr_lt),
+    __le__ = interp2app(W_NDimArray.descr_le),
+    __gt__ = interp2app(W_NDimArray.descr_gt),
+    __ge__ = interp2app(W_NDimArray.descr_ge),
 
     dtype = GetSetProperty(W_NDimArray.descr_get_dtype),
     shape = GetSetProperty(W_NDimArray.descr_get_shape,
                            W_NDimArray.descr_set_shape),
     ndim = GetSetProperty(W_NDimArray.descr_get_ndim),
     size = GetSetProperty(W_NDimArray.descr_get_size),
+
+    copy = interp2app(W_NDimArray.descr_copy),
 )
 
 def decode_w_dtype(space, w_dtype):
diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py
--- a/pypy/module/micronumpy/loop.py
+++ b/pypy/module/micronumpy/loop.py
@@ -27,6 +27,16 @@
         obj_iter.next()
     return out
 
+def setslice(target, source):
+    target_iter = target.create_iter()
+    dtype = target.dtype
+    source_iter = source.create_iter()
+    while not target_iter.done():
+        target_iter.setitem(source_iter.getitem().convert_to(dtype))
+        target_iter.next()
+        source_iter.next()
+    return target
+
 # from pypy.rlib.jit import JitDriver, hint, unroll_safe, promote
 # from pypy.module.micronumpy.interp_iter import ConstantIterator
 


More information about the pypy-commit mailing list