Author: mattip <matti.pi...@gmail.com> Branch: fortran-order Changeset: r79900:4666c894b561 Date: 2015-09-30 01:38 +0300 http://bitbucket.org/pypy/pypy/changeset/4666c894b561/
Log: convert internal use of order from a char to an enum diff --git a/pypy/module/micronumpy/arrayops.py b/pypy/module/micronumpy/arrayops.py --- a/pypy/module/micronumpy/arrayops.py +++ b/pypy/module/micronumpy/arrayops.py @@ -140,7 +140,7 @@ dtype = find_result_type(space, args_w, []) # concatenate does not handle ndarray subtypes, it always returns a ndarray - res = W_NDimArray.from_shape(space, shape, dtype, 'C') + res = W_NDimArray.from_shape(space, shape, dtype, NPY.CORDER) chunks = [Chunk(0, i, 1, i) for i in shape] axis_start = 0 for arr in args_w: diff --git a/pypy/module/micronumpy/base.py b/pypy/module/micronumpy/base.py --- a/pypy/module/micronumpy/base.py +++ b/pypy/module/micronumpy/base.py @@ -38,7 +38,8 @@ self.implementation = implementation @staticmethod - def from_shape(space, shape, dtype, order='C', w_instance=None, zero=True): + def from_shape(space, shape, dtype, order=NPY.CORDER, + w_instance=None, zero=True): from pypy.module.micronumpy import concrete, descriptor, boxes from pypy.module.micronumpy.strides import calc_strides if len(shape) > NPY.MAXDIMS: @@ -59,8 +60,9 @@ @staticmethod def from_shape_and_storage(space, shape, storage, dtype, storage_bytes=-1, - order='C', owning=False, w_subtype=None, - w_base=None, writable=True, strides=None, start=0): + order=NPY.CORDER, owning=False, w_subtype=None, + w_base=None, writable=True, strides=None, + start=0): from pypy.module.micronumpy import concrete from pypy.module.micronumpy.strides import (calc_strides, calc_backstrides) diff --git a/pypy/module/micronumpy/concrete.py b/pypy/module/micronumpy/concrete.py --- a/pypy/module/micronumpy/concrete.py +++ b/pypy/module/micronumpy/concrete.py @@ -56,6 +56,9 @@ jit.hint(len(backstrides), promote=True) return backstrides + def get_flags(self): + return self.flags + def getitem(self, index): return self.dtype.read(self, index, 0) @@ -360,12 +363,12 @@ # but make the array storage contiguous in memory shape = self.get_shape() strides = self.get_strides() - if order not in ('C', 'F'): - raise oefmt(space.w_ValueError, "Unknown order %s in astype", order) + if order not in (NPY.KEEPORDER, NPY.FORTRANORDER, NPY.CORDER): + raise oefmt(space.w_ValueError, "Unknown order %d in astype", order) if len(strides) == 0: t_strides = [] backstrides = [] - elif order != self.order: + elif order in (NPY.FORTRANORDER, NPY.CORDER): t_strides, backstrides = calc_strides(shape, dtype, order) else: indx_array = range(len(strides)) @@ -602,13 +605,13 @@ s = self.get_strides()[0] // dtype.elsize except IndexError: s = 1 - if self.order == 'C': + if self.order != NPY.FORTRANORDER: new_shape.reverse() for sh in new_shape: strides.append(s * dtype.elsize) backstrides.append(s * (sh - 1) * dtype.elsize) s *= max(1, sh) - if self.order == 'C': + if self.order != NPY.FORTRANORDER: strides.reverse() backstrides.reverse() new_shape.reverse() diff --git a/pypy/module/micronumpy/converters.py b/pypy/module/micronumpy/converters.py --- a/pypy/module/micronumpy/converters.py +++ b/pypy/module/micronumpy/converters.py @@ -77,9 +77,8 @@ elif order.startswith('K') or order.startswith('k'): return NPY.KEEPORDER else: - raise OperationError(space.w_TypeError, space.wrap( - "order not understood")) - + raise oefmt(space.w_TypeError, "Unknown order: '%s'", order) + return -1 def multi_axis_converter(space, w_axis, ndim): if space.is_none(w_axis): 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 @@ -4,9 +4,10 @@ from rpython.rlib.rstring import strip_spaces from rpython.rtyper.lltypesystem import lltype, rffi from pypy.module.micronumpy import descriptor, loop, support -from pypy.module.micronumpy.base import ( +from pypy.module.micronumpy.base import (wrap_impl, W_NDimArray, convert_to_array, W_NumpyObject) -from pypy.module.micronumpy.converters import shape_converter +from pypy.module.micronumpy.converters import shape_converter, order_converter +import pypy.module.micronumpy.constants as NPY def build_scalar(space, w_dtype, w_state): @@ -99,13 +100,8 @@ dtype = descriptor.decode_w_dtype(space, w_dtype) if space.is_none(w_order): - order = 'C' - else: - order = space.str_w(w_order) - if order == 'K': - order = 'C' - if order != 'C': # or order != 'F': - raise oefmt(space.w_ValueError, "Unknown order: %s", order) + w_order = space.wrap('C') + npy_order = order_converter(space, w_order, NPY.CORDER) if isinstance(w_object, W_NDimArray): if (dtype is None or w_object.get_dtype() is dtype): @@ -124,7 +120,7 @@ copy = True if copy: shape = w_object.get_shape() - w_arr = W_NDimArray.from_shape(space, shape, dtype, order=order) + w_arr = W_NDimArray.from_shape(space, shape, dtype, order=npy_order) if support.product(shape) == 1: w_arr.set_scalar_value(dtype.coerce(space, w_object.implementation.getitem(0))) @@ -154,7 +150,7 @@ # promote S0 -> S1, U0 -> U1 dtype = descriptor.variable_dtype(space, dtype.char + '1') - w_arr = W_NDimArray.from_shape(space, shape, dtype, order=order) + w_arr = W_NDimArray.from_shape(space, shape, dtype, order=npy_order) if support.product(shape) == 1: # safe from overflow since from_shape checks w_arr.set_scalar_value(dtype.coerce(space, elems_w[0])) else: @@ -230,6 +226,7 @@ @unwrap_spec(subok=bool) def empty_like(space, w_a, w_dtype=None, w_order=None, subok=True): w_a = convert_to_array(space, w_a) + npy_order = order_converter(space, w_order, w_a.get_order()) if space.is_none(w_dtype): dtype = w_a.get_dtype() else: @@ -237,7 +234,16 @@ space.call_function(space.gettypefor(descriptor.W_Dtype), w_dtype)) if dtype.is_str_or_unicode() and dtype.elsize < 1: dtype = descriptor.variable_dtype(space, dtype.char + '1') + if npy_order == NPY.KEEPORDER: + # Try to copy the stride pattern + impl = w_a.implementation.astype(space, dtype, npy_order) + if subok: + w_type = space.type(w_a) + else: + w_type = None + return wrap_impl(space, w_type, w_a, impl) return W_NDimArray.from_shape(space, w_a.get_shape(), dtype=dtype, + order=npy_order, w_instance=w_a if subok else None, zero=False) diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py --- a/pypy/module/micronumpy/loop.py +++ b/pypy/module/micronumpy/loop.py @@ -680,7 +680,8 @@ def tostring(space, arr): builder = StringBuilder() iter, state = arr.create_iter() - w_res_str = W_NDimArray.from_shape(space, [1], arr.get_dtype(), order='C') + w_res_str = W_NDimArray.from_shape(space, [1], arr.get_dtype(), + order=NPY.CORDER) itemsize = arr.get_dtype().elsize with w_res_str.implementation as storage: res_str_casted = rffi.cast(rffi.CArrayPtr(lltype.Char), 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 @@ -97,7 +97,10 @@ self.fill(space, self.get_dtype().coerce(space, w_value)) def descr_tostring(self, space, w_order=None): - order = order_converter(space, w_order, NPY.CORDER) + try: + order = order_converter(space, w_order, NPY.CORDER) + except OperationError as e: + raise oefmt(space.w_TypeError, "order not understood") if order == NPY.FORTRANORDER: raise OperationError(space.w_NotImplementedError, space.wrap( "unsupported value for order")) @@ -365,7 +368,12 @@ return self.implementation.getitem(self.implementation.start) def descr_copy(self, space, w_order=None): - order = order_converter(space, w_order, NPY.KEEPORDER) + if w_order is None: + order = NPY.KEEPORDER + elif space.isinstance_w(w_order, space.w_int): + order = space.int_w(w_order) + else: + order = order_converter(space, w_order, NPY.KEEPORDER) if order == NPY.FORTRANORDER: raise OperationError(space.w_NotImplementedError, space.wrap( "unsupported value for order")) @@ -631,7 +639,7 @@ space.newtuple([space.wrap(addr), space.w_False])) space.setitem_str(w_d, 'shape', self.descr_get_shape(space)) space.setitem_str(w_d, 'typestr', self.get_dtype().descr_get_str(space)) - if self.implementation.order == 'C': + if self.implementation.order == NPY.CORDER: # Array is contiguous, no strides in the interface. strides = space.w_None else: @@ -690,8 +698,9 @@ "according to the rule %s", space.str_w(self.get_dtype().descr_repr(space)), space.str_w(new_dtype.descr_repr(space)), casting) - order = support.get_order_as_CF(self.get_order(), order) - if (not copy and new_dtype == self.get_dtype() and order == self.get_order() + order = order_converter(space, space.wrap(order), self.get_order()) + if (not copy and new_dtype == self.get_dtype() + and (order in (NPY.KEEPORDER, NPY.ANYORDER) or order == self.get_order()) and (subok or type(self) is W_NDimArray)): return self impl = self.implementation @@ -970,7 +979,7 @@ raise OperationError(space.w_ValueError, space.wrap( "new type not compatible with array.")) # Adapt the smallest dim to the new itemsize - if self.get_order() == 'F': + if self.get_order() == NPY.FORTRANORDER: minstride = strides[0] mini = 0 else: @@ -1134,7 +1143,7 @@ matches = True if dtype != out.get_dtype(): matches = False - elif not out.implementation.order == "C": + elif not out.implementation.order == NPY.CORDER: matches = False elif out.ndims() != len(out_shape): matches = False @@ -1403,10 +1412,6 @@ strides=strides) order = order_converter(space, w_order, NPY.CORDER) - if order == NPY.CORDER: - order = 'C' - else: - order = 'F' if space.is_w(w_subtype, space.gettypefor(W_NDimArray)): return W_NDimArray.from_shape(space, shape, dtype, order) strides, backstrides = calc_strides(shape, dtype.base, order) @@ -1443,7 +1448,7 @@ raise OperationError(space.w_ValueError, space.wrap( "subtype must be a subtype of ndarray, not a class instance")) return W_NDimArray.from_shape_and_storage(space, shape, storage, dtype, - buf_len, 'C', False, w_subtype, + buf_len, NPY.CORDER, False, w_subtype, strides=strides) else: return W_NDimArray.from_shape_and_storage(space, shape, storage, dtype, diff --git a/pypy/module/micronumpy/nditer.py b/pypy/module/micronumpy/nditer.py --- a/pypy/module/micronumpy/nditer.py +++ b/pypy/module/micronumpy/nditer.py @@ -11,6 +11,8 @@ shape_agreement, shape_agreement_multiple) from pypy.module.micronumpy.casting import (find_binop_result_dtype, can_cast_array, can_cast_type) +import pypy.module.micronumpy.constants as NPY +from pypy.module.micronumpy.converters import order_converter def parse_op_arg(space, name, w_op_flags, n, parse_one_arg): @@ -144,9 +146,9 @@ def is_backward(imp, order): - if order == 'K' or (order == 'C' and imp.order == 'C'): + if order == NPY.KEEPORDER or (order == NPY.CORDER and imp.order == NPY.CORDER): return False - elif order == 'F' and imp.order == 'C': + elif order == NPY.FORTRANORDER and imp.order == NPY.CORDER: return True else: raise NotImplementedError('not implemented yet') @@ -234,7 +236,7 @@ continue assert isinstance(op_it, ArrayIter) indx = len(op_it.strides) - if it.order == 'F': + if it.order == NPY.FORTRANORDER: indx = len(op_it.array.strides) - indx assert indx >=0 astrides = op_it.array.strides[indx:] @@ -250,7 +252,7 @@ it.order) it.iters[i] = (new_iter, new_iter.reset()) if len(it.shape) > 1: - if it.order == 'F': + if it.order == NPY.FORTRANORDER: it.shape = it.shape[1:] else: it.shape = it.shape[:-1] @@ -261,10 +263,10 @@ break # Always coalesce at least one for i in range(len(it.iters)): - new_iter = coalesce_iter(it.iters[i][0], it.op_flags[i], it, 'C') + new_iter = coalesce_iter(it.iters[i][0], it.op_flags[i], it, NPY.CORDER) it.iters[i] = (new_iter, new_iter.reset()) if len(it.shape) > 1: - if it.order == 'F': + if it.order == NPY.FORTRANORDER: it.shape = it.shape[1:] else: it.shape = it.shape[:-1] @@ -287,7 +289,7 @@ return old_iter strides = old_iter.strides backstrides = old_iter.backstrides - if order == 'F': + if order == NPY.FORTRANORDER: new_shape = shape[1:] new_strides = strides[1:] new_backstrides = backstrides[1:] @@ -346,7 +348,8 @@ class W_NDIter(W_NumpyObject): _immutable_fields_ = ['ndim', ] def __init__(self, space, w_seq, w_flags, w_op_flags, w_op_dtypes, - w_casting, w_op_axes, w_itershape, buffersize=0, order='K'): + w_casting, w_op_axes, w_itershape, buffersize=0, + order=NPY.KEEPORDER): self.order = order self.external_loop = False self.buffered = False @@ -439,12 +442,15 @@ str(self.shape)) if self.tracked_index != "": - if self.order == "K": - self.order = self.seq[0].implementation.order + order = self.order + if order == NPY.KEEPORDER: + order = self.seq[0].implementation.order if self.tracked_index == "multi": backward = False else: - backward = self.order != self.tracked_index + backward = (( + order == NPY.CORDER and self.tracked_index != 'C') or ( + order == NPY.FORTRANORDER and self.tracked_index != 'F')) self.index_iter = IndexIterator(self.shape, backward=backward) # handle w_op_dtypes part 2: copy where needed if possible @@ -456,7 +462,6 @@ self.dtypes[i] = seq_d elif self_d != seq_d: impl = self.seq[i].implementation - order = support.get_order_as_CF(impl.order, self.order) if self.buffered or 'r' in self.op_flags[i].tmp_copy: if not can_cast_array( space, self.seq[i], self_d, self.casting): @@ -466,7 +471,7 @@ space.str_w(seq_d.descr_repr(space)), space.str_w(self_d.descr_repr(space)), self.casting) - + order = support.get_order_as_CF(impl.order, self.order) new_impl = impl.astype(space, self_d, order).copy(space) self.seq[i] = W_NDimArray(new_impl) else: @@ -704,13 +709,15 @@ @unwrap_spec(w_flags=WrappedDefault(None), w_op_flags=WrappedDefault(None), - w_op_dtypes=WrappedDefault(None), order=str, + w_op_dtypes=WrappedDefault(None), w_order=WrappedDefault(None), w_casting=WrappedDefault(None), w_op_axes=WrappedDefault(None), - w_itershape=WrappedDefault(None), buffersize=int) + w_itershape=WrappedDefault(None), w_buffersize=WrappedDefault(0)) def descr_new_nditer(space, w_subtype, w_seq, w_flags, w_op_flags, w_op_dtypes, - w_casting, w_op_axes, w_itershape, buffersize=0, order='K'): + w_casting, w_op_axes, w_itershape, w_buffersize, w_order): + npy_order = order_converter(space, w_order, NPY.KEEPORDER) + buffersize = space.int_w(w_buffersize) return W_NDIter(space, w_seq, w_flags, w_op_flags, w_op_dtypes, w_casting, w_op_axes, - w_itershape, buffersize, order) + w_itershape, buffersize, npy_order) W_NDIter.typedef = TypeDef('numpy.nditer', __new__ = interp2app(descr_new_nditer), diff --git a/pypy/module/micronumpy/strides.py b/pypy/module/micronumpy/strides.py --- a/pypy/module/micronumpy/strides.py +++ b/pypy/module/micronumpy/strides.py @@ -371,14 +371,14 @@ backstrides = [] s = 1 shape_rev = shape[:] - if order == 'C': + if order in [NPY.CORDER, NPY.ANYORDER]: shape_rev.reverse() for sh in shape_rev: slimit = max(sh, 1) strides.append(s * dtype.elsize) backstrides.append(s * (slimit - 1) * dtype.elsize) s *= slimit - if order == 'C': + if order in [NPY.CORDER, NPY.ANYORDER]: strides.reverse() backstrides.reverse() return strides, backstrides @@ -406,7 +406,7 @@ last_step = 1 oldI = 0 new_strides = [] - if order == 'F': + if order == NPY.FORTRANORDER: for i in range(len(old_shape)): steps.append(old_strides[i] / last_step) last_step *= old_shape[i] @@ -426,7 +426,7 @@ if oldI < len(old_shape): cur_step = steps[oldI] n_old_elems_to_use *= old_shape[oldI] - elif order == 'C': + else: for i in range(len(old_shape) - 1, -1, -1): steps.insert(0, old_strides[i] / last_step) last_step *= old_shape[i] diff --git a/pypy/module/micronumpy/support.py b/pypy/module/micronumpy/support.py --- a/pypy/module/micronumpy/support.py +++ b/pypy/module/micronumpy/support.py @@ -7,6 +7,7 @@ from pypy.interpreter.typedef import GetSetProperty from pypy.objspace.std.typeobject import W_TypeObject from pypy.objspace.std.objspace import StdObjSpace +from pypy.module.micronumpy import constants as NPY def issequence_w(space, w_obj): from pypy.module.micronumpy.base import W_NDimArray @@ -173,15 +174,11 @@ return space.is_true(space.gt(w_priority_r, w_priority_l)) def get_order_as_CF(proto_order, req_order): - if req_order == 'C': - return 'C' - elif req_order == 'F': - return 'F' - elif req_order == 'K': - return proto_order - elif req_order == 'A': - return proto_order - + if req_order == NPY.CORDER: + return NPY.CORDER + elif req_order == NPY.FORTRANORDER: + return NPY.FORTRANORDER + return proto_order def descr_set_docstring(space, w_obj, w_docstring): if not isinstance(space, StdObjSpace): 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 @@ -6,6 +6,7 @@ from pypy.module.micronumpy.appbridge import get_appbridge_cache from pypy.module.micronumpy.strides import Chunk, new_view, EllipsisChunk from pypy.module.micronumpy.ndarray import W_NDimArray +import pypy.module.micronumpy.constants as NPY from pypy.module.micronumpy.test.test_base import BaseNumpyAppTest @@ -45,20 +46,20 @@ return self.space.newtuple(args_w) def test_strides_f(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='F') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.FORTRANORDER) assert a.strides == [1, 10, 50] assert a.backstrides == [9, 40, 100] def test_strides_c(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='C') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.CORDER) assert a.strides == [15, 3, 1] assert a.backstrides == [135, 12, 2] - a = create_array(self.space, [1, 0, 7], MockDtype(), order='C') + a = create_array(self.space, [1, 0, 7], MockDtype(), order=NPY.CORDER) assert a.strides == [7, 7, 1] assert a.backstrides == [0, 0, 6] def test_create_slice_f(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='F') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.FORTRANORDER) s = create_slice(self.space, a, [Chunk(3, 0, 0, 1)]) assert s.start == 3 assert s.strides == [10, 50] @@ -77,7 +78,7 @@ assert s.shape == [10, 3] def test_create_slice_c(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='C') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.CORDER) s = create_slice(self.space, a, [Chunk(3, 0, 0, 1)]) assert s.start == 45 assert s.strides == [3, 1] @@ -97,7 +98,7 @@ assert s.shape == [10, 3] def test_slice_of_slice_f(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='F') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.FORTRANORDER) s = create_slice(self.space, a, [Chunk(5, 0, 0, 1)]) assert s.start == 5 s2 = create_slice(self.space, s, [Chunk(3, 0, 0, 1)]) @@ -114,7 +115,7 @@ assert s2.start == 1 * 15 + 2 * 3 def test_slice_of_slice_c(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='C') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.CORDER) s = create_slice(self.space, a, [Chunk(5, 0, 0, 1)]) assert s.start == 15 * 5 s2 = create_slice(self.space, s, [Chunk(3, 0, 0, 1)]) @@ -131,14 +132,14 @@ assert s2.start == 1 * 15 + 2 * 3 def test_negative_step_f(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='F') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.FORTRANORDER) s = create_slice(self.space, a, [Chunk(9, -1, -2, 5)]) assert s.start == 9 assert s.strides == [-2, 10, 50] assert s.backstrides == [-8, 40, 100] def test_negative_step_c(self): - a = create_array(self.space, [10, 5, 3], MockDtype(), order='C') + a = create_array(self.space, [10, 5, 3], MockDtype(), order=NPY.CORDER) s = create_slice(self.space, a, [Chunk(9, -1, -2, 5)]) assert s.start == 135 assert s.strides == [-30, 3, 1] @@ -155,17 +156,17 @@ def test_calc_new_strides(self): from pypy.module.micronumpy.strides import calc_new_strides - assert calc_new_strides([2, 4], [4, 2], [4, 2], "C") == [8, 2] - assert calc_new_strides([2, 4, 3], [8, 3], [1, 16], 'F') == [1, 2, 16] - assert calc_new_strides([2, 3, 4], [8, 3], [1, 16], 'F') is None - assert calc_new_strides([24], [2, 4, 3], [48, 6, 1], 'C') is None - assert calc_new_strides([24], [2, 4, 3], [24, 6, 2], 'C') == [2] - assert calc_new_strides([105, 1], [3, 5, 7], [35, 7, 1],'C') == [1, 1] - assert calc_new_strides([1, 105], [3, 5, 7], [35, 7, 1],'C') == [105, 1] - assert calc_new_strides([1, 105], [3, 5, 7], [35, 7, 1],'F') is None - assert calc_new_strides([1, 1, 1, 105, 1], [15, 7], [7, 1],'C') == \ + assert calc_new_strides([2, 4], [4, 2], [4, 2], NPY.CORDER) == [8, 2] + assert calc_new_strides([2, 4, 3], [8, 3], [1, 16], NPY.FORTRANORDER) == [1, 2, 16] + assert calc_new_strides([2, 3, 4], [8, 3], [1, 16], NPY.FORTRANORDER) is None + assert calc_new_strides([24], [2, 4, 3], [48, 6, 1], NPY.CORDER) is None + assert calc_new_strides([24], [2, 4, 3], [24, 6, 2], NPY.CORDER) == [2] + assert calc_new_strides([105, 1], [3, 5, 7], [35, 7, 1],NPY.CORDER) == [1, 1] + assert calc_new_strides([1, 105], [3, 5, 7], [35, 7, 1],NPY.CORDER) == [105, 1] + assert calc_new_strides([1, 105], [3, 5, 7], [35, 7, 1],NPY.FORTRANORDER) is None + assert calc_new_strides([1, 1, 1, 105, 1], [15, 7], [7, 1],NPY.CORDER) == \ [105, 105, 105, 1, 1] - assert calc_new_strides([1, 1, 105, 1, 1], [7, 15], [1, 7],'F') == \ + assert calc_new_strides([1, 1, 105, 1, 1], [7, 15], [1, 7],NPY.FORTRANORDER) == \ [1, 1, 1, 105, 105] def test_find_shape(self): 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 @@ -120,8 +120,8 @@ skip('Fortran order not implemented') it = nditer([a, b]) - - assert list(it) == zip(range(1, 5), range(1, 5)) + r = list(it) + assert r == zip(range(1, 5), range(1, 5)) def test_interface(self): from numpy import arange, nditer, zeros diff --git a/pypy/module/micronumpy/ufuncs.py b/pypy/module/micronumpy/ufuncs.py --- a/pypy/module/micronumpy/ufuncs.py +++ b/pypy/module/micronumpy/ufuncs.py @@ -667,9 +667,9 @@ for dt_in, dt_out in self.dtypes: if can_cast_to(dtype, dt_in) and dt_out == dt_in: return dt_in - raise ValueError( + raise oefmt(space.w_ValueError, "could not find a matching type for %s.accumulate, " - "requested type has type code '%s'" % (self.name, dtype.char)) + "requested type has type code '%s'", self.name, dtype.char) def _calc_dtype(self, space, l_dtype, r_dtype, out, casting, _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit