Author: mattip <[email protected]>
Branch:
Changeset: r83049:3ba796288d26
Date: 2016-03-14 20:41 +0200
http://bitbucket.org/pypy/pypy/changeset/3ba796288d26/
Log: merge fix_indexing_by_numpy_int which implements indexing by a
scalar returning a scalar
diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -18,3 +18,8 @@
.. branch: where_1_arg
Implemented numpy.where for 1 argument (thanks sergem)
+
+.. branch: fix_indexing_by_numpy_int
+
+Implement yet another strange numpy indexing compatibility; indexing by a
scalar
+returns a scalar
diff --git a/pypy/module/micronumpy/ndarray.py
b/pypy/module/micronumpy/ndarray.py
--- a/pypy/module/micronumpy/ndarray.py
+++ b/pypy/module/micronumpy/ndarray.py
@@ -267,6 +267,11 @@
"interpreted as a valid boolean index")
elif isinstance(w_idx, boxes.W_GenericBox):
w_ret = self.getitem_array_int(space, w_idx)
+
+ if isinstance(w_idx, boxes.W_IntegerBox):
+ # if w_idx is integer then getitem_array_int must contain a
single value and we must return it.
+ # Get 0-th element of the w_ret.
+ w_ret = w_ret.implementation.descr_getitem(space, self,
space.wrap(0))
else:
try:
w_ret = self.implementation.descr_getitem(space, self, w_idx)
diff --git a/pypy/module/micronumpy/test/test_ndarray.py
b/pypy/module/micronumpy/test/test_ndarray.py
--- a/pypy/module/micronumpy/test/test_ndarray.py
+++ b/pypy/module/micronumpy/test/test_ndarray.py
@@ -3437,6 +3437,21 @@
a.itemset(1, 2, 100)
assert a[1, 2] == 100
+ def test_index_int(self):
+ import numpy as np
+ a = np.array([10, 20, 30])
+ res = a[np.int64(1)]
+ assert isinstance(res, np.int64)
+ assert res == 20
+ res = a[np.int32(0)]
+ assert isinstance(res, np.int64)
+ assert res == 10
+
+ b = a.astype(float)
+ res = b[np.int64(1)]
+ assert res == 20.0
+ assert isinstance(res, np.float64)
+
def test_index(self):
import numpy as np
a = np.array([1], np.uint16)
@@ -3448,6 +3463,7 @@
assert exc.value.message == 'only integer arrays with one element
' \
'can be converted to an index'
+
def test_int_array_index(self):
from numpy import array
assert (array([])[[]] == []).all()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit