[pypy-commit] pypy numpypy-ellipse-indexing: implement, tests pass
mattip
noreply at buildbot.pypy.org
Tue May 14 10:17:59 CEST 2013
Author: Matti Picus <matti.picus at gmail.com>
Branch: numpypy-ellipse-indexing
Changeset: r64061:6d277aa40577
Date: 2013-05-14 09:15 +0300
http://bitbucket.org/pypy/pypy/changeset/6d277aa40577/
Log: implement, tests pass
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
@@ -205,7 +205,7 @@
if (space.isinstance_w(w_idx, space.w_int) or
space.isinstance_w(w_idx, space.w_slice)):
return Chunks([Chunk(*space.decode_index4(w_idx, self.get_shape()[0]))])
- elif space.is_w(w_idx, space.w_None):
+ elif space.is_w(w_idx, space.w_None) or isinstance(w_idx, Ellipsis):
return Chunks([NewAxisChunk()])
result = []
i = 0
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
@@ -20,6 +20,7 @@
from rpython.rlib import jit
from rpython.rlib.rstring import StringBuilder
from pypy.module.micronumpy.arrayimpl.base import BaseArrayImplementation
+from pypy.interpreter.special import Ellipsis
def _find_shape(space, w_size):
if space.is_none(w_size):
@@ -167,6 +168,8 @@
prefix)
def descr_getitem(self, space, w_idx):
+ if isinstance(w_idx, Ellipsis):
+ return self
if (isinstance(w_idx, W_NDimArray) and
w_idx.get_dtype().is_bool_type()):
return self.getitem_filter(space, w_idx)
diff --git a/pypy/module/micronumpy/test/test_numarray.py b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -1661,11 +1661,17 @@
assert (b == [20, 1, 21, 3, 4]).all()
raises(ValueError, "array([1, 2])[array([True, False, True])] = [1, 2, 3]")
- def test_ellipse_index_setitem(self):
+ def test_ellipse_index(self):
from numpypy import arange
- b = arange(5)
+ b = arange(24).reshape(2,3,4)
b[...] = 100
assert (b == 100).all()
+ assert b.shape == (2, 3, 4)
+ b[...] = [10, 20, 30, 40]
+ assert (b[:,:,0] == 10).all()
+ assert (b[0,0,:] == [10, 20, 30, 40]).all()
+ assert b.shape == b[...].shape
+ assert (b == b[...]).all()
def test_weakref(self):
import _weakref
More information about the pypy-commit
mailing list