Author: mattip <matti.pi...@gmail.com> Branch: Changeset: r72940:8ad8dd8f0ae3 Date: 2014-08-21 00:27 +0300 http://bitbucket.org/pypy/pypy/changeset/8ad8dd8f0ae3/
Log: test, fix for #1850 diff --git a/pypy/module/micronumpy/ctors.py b/pypy/module/micronumpy/ctors.py --- a/pypy/module/micronumpy/ctors.py +++ b/pypy/module/micronumpy/ctors.py @@ -78,9 +78,9 @@ # arrays with correct dtype if isinstance(w_object, W_NDimArray) and \ (space.is_none(w_dtype) or w_object.get_dtype() is dtype): - if copy: - return w_object.descr_copy(space) - else: + if copy and (subok or type(w_object) is W_NDimArray): + return w_object.descr_copy(space, w_order) + elif not copy and (subok or type(w_object) is W_NDimArray): return w_object # not an array or incorrect dtype diff --git a/pypy/module/micronumpy/test/test_subtype.py b/pypy/module/micronumpy/test/test_subtype.py --- a/pypy/module/micronumpy/test/test_subtype.py +++ b/pypy/module/micronumpy/test/test_subtype.py @@ -7,7 +7,7 @@ def setup_class(cls): BaseNumpyAppTest.setup_class.im_func(cls) cls.w_NoNew = cls.space.appexec([], '''(): - from numpypy import ndarray + from numpy import ndarray class NoNew(ndarray): def __new__(cls, subtype): raise ValueError('should not call __new__') @@ -16,7 +16,7 @@ self.called_finalize = True return NoNew ''') cls.w_SubType = cls.space.appexec([], '''(): - from numpypy import ndarray, array + from numpy import ndarray, array class SubType(ndarray): def __new__(obj, input_array): obj = array(input_array, copy=False).view(obj) @@ -27,7 +27,7 @@ return SubType ''') def test_subtype_base(self): - from numpypy import ndarray, dtype + from numpy import ndarray, dtype class C(ndarray): def __new__(subtype, shape, dtype): self = ndarray.__new__(subtype, shape, dtype) @@ -65,7 +65,7 @@ assert b.base is a def test_subtype_view(self): - from numpypy import ndarray, array + from numpy import ndarray, array class matrix(ndarray): def __new__(subtype, data, dtype=None, copy=True): if isinstance(data, matrix): @@ -89,7 +89,7 @@ def test_finalize(self): #taken from http://docs.scipy.org/doc/numpy/user/basics.subclassing.html#simple-example-adding-an-extra-attribute-to-ndarray - import numpypy as np + import numpy as np class InfoArray(np.ndarray): def __new__(subtype, shape, dtype=float, buffer=None, offset=0, strides=None, order='C', info=None): @@ -121,7 +121,7 @@ assert cast_arr.info is None def test_sub_where(self): - from numpypy import where, ones, zeros, array + from numpy import where, ones, zeros, array a = array([1, 2, 3, 0, -3]) v = a.view(self.NoNew) b = where(array(v) > 0, ones(5), zeros(5)) @@ -130,14 +130,14 @@ assert not isinstance(b, self.NoNew) def test_sub_repeat(self): - from numpypy import array + from numpy import array a = self.SubType(array([[1, 2], [3, 4]])) b = a.repeat(3) assert (b == [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]).all() assert isinstance(b, self.SubType) def test_sub_flatiter(self): - from numpypy import array + from numpy import array a = array(range(9)).reshape(3, 3).view(self.NoNew) c = array(range(9)).reshape(3, 3) assert isinstance(a.flat[:] + a.flat[:], self.NoNew) @@ -146,7 +146,7 @@ assert not isinstance(c.flat[:] + c.flat[:], self.NoNew) def test_sub_getitem_filter(self): - from numpypy import array + from numpy import array a = array(range(5)) b = self.SubType(a) c = b[array([False, True, False, True, False])] @@ -158,7 +158,7 @@ assert c.called_finalize def test_sub_getitem_array_int(self): - from numpypy import array + from numpy import array a = array(range(5)) b = self.SubType(a) assert b.called_new @@ -169,7 +169,7 @@ assert c.called_finalize def test_sub_round(self): - from numpypy import array + from numpy import array a = array(range(10), dtype=float).view(self.NoNew) # numpy compatibility b = a.round(decimals=0) @@ -181,7 +181,7 @@ def test_sub_dot(self): # the returned type is that of the first argument - from numpypy import array + from numpy import array a = array(range(12)).reshape(3,4) b = self.SubType(a) c = array(range(12)).reshape(4,3).view(self.SubType) @@ -197,7 +197,7 @@ def test_sub_reduce(self): # i.e. sum, max # test for out as well - from numpypy import array + from numpy import array a = array(range(12)).reshape(3,4) b = self.SubType(a) c = b.sum(axis=0) @@ -216,7 +216,7 @@ def test_sub_call2(self): # c + a vs. a + c, what about array priority? - from numpypy import array + from numpy import array a = array(range(12)).view(self.NoNew) b = self.SubType(range(12)) c = b + a @@ -228,26 +228,26 @@ assert isinstance(e, self.NoNew) def test_sub_call1(self): - from numpypy import array, sqrt + from numpy import array, sqrt a = array(range(12)).view(self.NoNew) b = sqrt(a) assert b.called_finalize == True def test_sub_astype(self): - from numpypy import array + from numpy import array a = array(range(12)).view(self.NoNew) b = a.astype(float) assert b.called_finalize == True def test_sub_reshape(self): - from numpypy import array + from numpy import array a = array(range(12)).view(self.NoNew) b = a.reshape(3, 4) assert b.called_finalize == True def test___array__(self): import sys - from numpypy import ndarray, array, dtype + from numpy import ndarray, array, dtype class D(ndarray): def __new__(subtype, shape, dtype): self = ndarray.__new__(subtype, shape, dtype) @@ -262,16 +262,14 @@ return retVal a = C([2, 2], int) - b = array(a) + b = array(a, subok=True) assert b.shape == (2, 2) - if '__pypy__' in sys.builtin_module_names: - assert b.id == 'subtype' - assert isinstance(b, D) + assert isinstance(b, D) c = array(a, float) assert c.dtype is dtype(float) def test__getitem_modifies_shape(self): - import numpypy as N + import numpy as N # numpy's matrix class caused an infinite loop class matrix(N.ndarray): getcnt = 0 @@ -383,3 +381,9 @@ b = loads(s) assert (a == b).all() assert isinstance(b, D) + + def test_subok(self): + from numpy import array, ndarray + a = self.SubType(array([[1, 2], [3, 4]])) + b = array(a, subok=False) + assert type(b) is ndarray _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit