[pypy-commit] pypy numpy-refactor: item

fijal noreply at buildbot.pypy.org
Fri Sep 7 18:33:34 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-refactor
Changeset: r57222:169e2a82086e
Date: 2012-09-07 17:56 +0200
http://bitbucket.org/pypy/pypy/changeset/169e2a82086e/

Log:	item

diff --git a/pypy/module/micronumpy/interp_flatiter.py b/pypy/module/micronumpy/interp_flatiter.py
--- a/pypy/module/micronumpy/interp_flatiter.py
+++ b/pypy/module/micronumpy/interp_flatiter.py
@@ -1,7 +1,6 @@
 
 from pypy.module.micronumpy.base import W_NDimArray, convert_to_array
 from pypy.module.micronumpy import loop
-from pypy.module.micronumpy.strides import to_coords
 from pypy.module.micronumpy.arrayimpl.base import BaseArrayImplementation
 from pypy.interpreter.error import OperationError
 
@@ -46,9 +45,7 @@
         return space.wrap(self.index)
 
     def descr_coords(self, space):
-        coords, step, lngth = to_coords(space, self.base.get_shape(),
-                            self.base.get_size(), self.base.get_order(),
-                            space.wrap(self.index))
+        coords = self.base.to_coords(space, space.wrap(self.index))
         return space.newtuple([space.wrap(c) for c in coords])
 
     def descr_getitem(self, space, w_idx):
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
@@ -3,9 +3,9 @@
 from pypy.interpreter.typedef import TypeDef, GetSetProperty
 from pypy.interpreter.gateway import interp2app, unwrap_spec
 from pypy.module.micronumpy.base import W_NDimArray, convert_to_array
-from pypy.module.micronumpy import interp_dtype, interp_ufuncs
+from pypy.module.micronumpy import interp_dtype, interp_ufuncs, interp_boxes
 from pypy.module.micronumpy.strides import find_shape_and_elems,\
-     get_shape_from_iterable
+     get_shape_from_iterable, to_coords
 from pypy.module.micronumpy.interp_flatiter import W_FlatIterator
 from pypy.module.micronumpy.interp_support import unwrap_axis_arg
 from pypy.module.micronumpy.appbridge import get_appbridge_cache
@@ -243,6 +243,34 @@
     def descr_get_flatiter(self, space):
         return space.wrap(W_FlatIterator(self))
 
+    def to_coords(self, space, w_index):
+        coords, _, _ = to_coords(space, self.get_shape(),
+                                 self.get_size(), self.get_order(),
+                                 w_index)
+        return coords
+
+    def descr_item(self, space, w_arg=None):
+        if space.is_w(w_arg, space.w_None):
+            if self.is_scalar():
+                return self.get_scalar_value().item(space)
+            if self.get_size() == 1:
+                return self.descr_getitem(space,
+                                          space.newtuple([space.wrap(0) for i
+                            in range(len(self.get_shape()))])).item(space)
+            raise OperationError(space.w_IndexError,
+                                 space.wrap("index out of bounds"))
+        if space.isinstance_w(w_arg, space.w_int):
+            if self.is_scalar():
+                raise OperationError(space.w_IndexError,
+                                     space.wrap("index out of bounds"))
+            i = self.to_coords(space, w_arg)
+            item = self.descr_getitem(space, space.newtuple([space.wrap(x)
+                                             for x in i]))
+            assert isinstance(item, interp_boxes.W_GenericBox)
+            return item.item(space)
+        raise OperationError(space.w_NotImplementedError, space.wrap(
+            "non-int arg not supported"))
+
     def descr_array_iface(self, space):
         addr = self.implementation.get_storage_as_int(space)
         # will explode if it can't
@@ -507,6 +535,7 @@
     repeat = interp2app(W_NDimArray.descr_repeat),
     swapaxes = interp2app(W_NDimArray.descr_swapaxes),
     flat = GetSetProperty(W_NDimArray.descr_get_flatiter),
+    item = interp2app(W_NDimArray.descr_item),
 
     __array_interface__ = GetSetProperty(W_NDimArray.descr_array_iface),
 )


More information about the pypy-commit mailing list