[pypy-commit] pypy numpypy-nditer: start to pass tests
mattip
noreply at buildbot.pypy.org
Wed Mar 5 17:52:04 CET 2014
Author: Matti Picus <matti.picus at gmail.com>
Branch: numpypy-nditer
Changeset: r69727:ecda1fad7553
Date: 2014-03-05 18:51 +0200
http://bitbucket.org/pypy/pypy/changeset/ecda1fad7553/
Log: start to pass tests
diff --git a/pypy/module/micronumpy/interp_nditer.py b/pypy/module/micronumpy/interp_nditer.py
--- a/pypy/module/micronumpy/interp_nditer.py
+++ b/pypy/module/micronumpy/interp_nditer.py
@@ -198,7 +198,7 @@
backstrides = imp.backstrides
r = calculate_broadcast_strides(strides, backstrides, imp.shape,
shape, backward)
- return ArrayIter(imp, shape, r[0], r[1])
+ return ArrayIter(imp, imp.get_size(), shape, r[0], r[1])
def is_backward(imp, order):
if order == 'K' or (order == 'C' and imp.order == 'C'):
@@ -268,7 +268,8 @@
parse_func_flags(space, self, w_flags)
self.op_flags = parse_op_arg(space, 'op_flags', w_op_flags,
len(self.seq), parse_op_flag)
- self.set_op_axes(space, w_op_axes)
+ if not space.is_none(w_op_axes):
+ self.set_op_axes(space, w_op_axes)
self.iters=[]
self.shape = iter_shape = shape_agreement_multiple(space, self.seq)
if self.tracked_index != "":
diff --git a/pypy/module/micronumpy/iterators.py b/pypy/module/micronumpy/iterators.py
--- a/pypy/module/micronumpy/iterators.py
+++ b/pypy/module/micronumpy/iterators.py
@@ -42,6 +42,7 @@
"""
from rpython.rlib import jit
from pypy.module.micronumpy import support
+from pypy.module.micronumpy.strides import calc_strides
from pypy.module.micronumpy.base import W_NDimArray
@@ -148,7 +149,7 @@
dtype = arr.implementation.dtype
if backward:
self.slicesize = shape[0]
- self.gap = [support.product(shape[1:]) * dtype.get_size()]
+ self.gap = [support.product(shape[1:]) * dtype.elsize]
self.strides = strides[1:]
self.backstrides = backstrides[1:]
self.shape = shape[1:]
@@ -157,9 +158,8 @@
self.shape.reverse()
self.shapelen = len(self.shape)
else:
- shape = [support.product(shape)]
- self.strides, self.backstrides = support.calc_strides(shape,
- dtype, order)
+ self.shape = [support.product(shape)]
+ self.strides, self.backstrides = calc_strides(shape, dtype, order)
self.slicesize = support.product(shape)
self.shapelen = 0
self.gap = self.strides
@@ -185,9 +185,10 @@
self.offset = offset
def getslice(self):
- from pypy.module.micronumpy.arrayimpl.concrete import SliceArray
- return SliceArray(self.offset, self.gap, self.backstrides,
+ from pypy.module.micronumpy.concrete import SliceArray
+ retVal = SliceArray(self.offset, self.gap, self.backstrides,
[self.slicesize], self.arr.implementation, self.arr, self.dtype)
+ return retVal
def AxisIter(array, shape, axis, cumulative):
strides = array.get_strides()
diff --git a/pypy/module/micronumpy/test/test_nditer.py b/pypy/module/micronumpy/test/test_nditer.py
--- a/pypy/module/micronumpy/test/test_nditer.py
+++ b/pypy/module/micronumpy/test/test_nditer.py
@@ -11,7 +11,7 @@
BaseNumpyAppTest.setup_class.im_func(cls)
def test_basic(self):
- from numpypy import arange, nditer
+ from numpy import arange, nditer
a = arange(6).reshape(2,3)
r = []
for x in nditer(a):
@@ -24,7 +24,7 @@
assert r == [0, 1, 2, 3, 4, 5]
def test_order(self):
- from numpypy import arange, nditer
+ from numpy import arange, nditer
a = arange(6).reshape(2,3)
r = []
for x in nditer(a, order='C'):
@@ -36,14 +36,14 @@
assert r == [0, 3, 1, 4, 2, 5]
def test_readwrite(self):
- from numpypy import arange, nditer
+ from numpy import arange, nditer
a = arange(6).reshape(2,3)
for x in nditer(a, op_flags=['readwrite']):
x[...] = 2 * x
assert (a == [[0, 2, 4], [6, 8, 10]]).all()
def test_external_loop(self):
- from numpypy import arange, nditer, array
+ from numpy import arange, nditer, array
a = arange(24).reshape(2, 3, 4)
r = []
n = 0
@@ -67,7 +67,7 @@
assert e
def test_index(self):
- from numpypy import arange, nditer, zeros
+ from numpy import arange, nditer
a = arange(6).reshape(2,3)
r = []
@@ -92,7 +92,7 @@
@py.test.mark.xfail(reason="Fortran order not implemented")
def test_iters_with_different_order(self):
- from numpypy import nditer, array
+ from numpy import nditer, array
a = array([[1, 2], [3, 4]], order="C")
b = array([[1, 2], [3, 4]], order="F")
@@ -102,7 +102,7 @@
assert list(it) == zip(range(1, 5), range(1, 5))
def test_interface(self):
- from numpypy import arange, nditer, zeros
+ from numpy import arange, nditer, zeros
a = arange(6).reshape(2,3)
r = []
it = nditer(a, flags=['f_index'])
@@ -120,7 +120,7 @@
assert str(exc.value).startswith("Iterator flag EXTERNAL_LOOP cannot")
def test_buffered(self):
- from numpypy import arange, nditer, array
+ from numpy import arange, nditer, array
a = arange(6).reshape(2,3)
r = []
for x in nditer(a, flags=['external_loop', 'buffered'], order='F'):
@@ -128,7 +128,7 @@
assert (array(r) == [0, 3, 1, 4, 2, 5]).all()
def test_op_dtype(self):
- from numpypy import arange, nditer, sqrt, array
+ from numpy import arange, nditer, sqrt, array
a = arange(6).reshape(2,3) - 3
exc = raises(nditer, a, op_dtypes=['complex'])
assert str(exc.value).startswith("Iterator operand required copying or buffering")
@@ -146,26 +146,26 @@
1+0j, 1.41421356237+0j]).sum()) < 1e-5
def test_casting(self):
- from numpypy import arange, nditer
+ from numpy import arange, nditer
a = arange(6.)
- exc = raises(nditer, a, flags=['buffered'], op_dtypes=['float32'])
+ exc = raises(ValueError, nditer, a, flags=['buffered'], op_dtypes=['float32'])
assert str(exc.value).startswith("Iterator operand 0 dtype could not be cast")
r = []
for x in nditer(a, flags=['buffered'], op_dtypes=['float32'],
casting='same_kind'):
r.append(x)
assert r == [0., 1., 2., 3., 4., 5.]
- exc = raises(nditer, a, flags=['buffered'],
+ exc = raises(ValueError, nditer, a, flags=['buffered'],
op_dtypes=['int32'], casting='same_kind')
assert str(exc.value).startswith("Iterator operand 0 dtype could not be cast")
r = []
b = arange(6)
- exc = raises(nditer, b, flags=['buffered'], op_dtypes=['float64'],
+ exc = raises(ValueError, nditer, b, flags=['buffered'], op_dtypes=['float64'],
op_flags=['readwrite'], casting='same_kind')
assert str(exc.value).startswith("Iterator requested dtype could not be cast")
def test_broadcast(self):
- from numpypy import arange, nditer
+ from numpy import arange, nditer
a = arange(3)
b = arange(6).reshape(2,3)
r = []
@@ -173,11 +173,11 @@
r.append((x, y))
assert r == [(0, 0), (1, 1), (2, 2), (0, 3), (1, 4), (2, 5)]
a = arange(2)
- exc = raises(nditer, [a, b])
+ exc = raises(ValueError, nditer, [a, b])
assert str(exc.value).find('shapes (2) (2,3)') > 0
def test_outarg(self):
- from numpypy import nditer, zeros, arange
+ from numpy import nditer, zeros, arange
def square1(a):
it = nditer([a, None])
@@ -202,7 +202,7 @@
assert str(exc.value).startswith('non-broadcastable output')
def test_outer_product(self):
- from numpypy import nditer, arange
+ from numpy import nditer, arange
a = arange(3)
b = arange(8).reshape(2,4)
it = nditer([a, b, None], flags=['external_loop'],
@@ -214,7 +214,7 @@
assert (it.operands[2][i] == a[i]*b).all()
def test_reduction(self):
- from numpypy import nditer, arange, array
+ from numpy import nditer, arange, array
a = arange(24).reshape(2, 3, 4)
b = array(0)
#reduction operands must be readwrite
@@ -249,13 +249,13 @@
assert (it.operands[1] == a.sum(axis=2)).all()
def test_get_dtypes(self):
- from numpypy import array, dtype, nditer
+ from numpy import array, dtype, nditer
x = array([1, 2])
y = array([1.0, 2.0])
assert nditer([x, y]).dtypes == (dtype("int64"), dtype("float64"))
def test_multi_index(self):
- import numpypy as np
+ import numpy as np
a = np.arange(6).reshape(2, 3)
More information about the pypy-commit
mailing list