Author: mattip <matti.pi...@gmail.com> Branch: nditer-external_loop Changeset: r74287:d98fffa77488 Date: 2014-10-12 12:37 +0200 http://bitbucket.org/pypy/pypy/changeset/d98fffa77488/
Log: create convenience function (grafted from 2d560d9000bbfa471866ca11821cda028759e53d) 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 @@ -83,8 +83,12 @@ raise OperationError(space.w_AttributeError, space.wrap( "Cannot delete array dtype")) + def ndims(self): + return len(self.get_shape()) + ndims._always_inline_ = True + def descr_get_ndim(self, space): - return space.wrap(len(self.get_shape())) + return space.wrap(self.ndims()) def descr_get_itemsize(self, space): return space.wrap(self.get_dtype().elsize) @@ -103,14 +107,14 @@ return space.wrap(loop.tostring(space, self)) def getitem_filter(self, space, arr): - if len(arr.get_shape()) > 1 and arr.get_shape() != self.get_shape(): + if arr.ndims() > 1 and arr.get_shape() != self.get_shape(): raise OperationError(space.w_ValueError, space.wrap( "boolean index array should have 1 dimension")) if arr.get_size() > self.get_size(): raise OperationError(space.w_ValueError, space.wrap( "index out of range for array")) size = loop.count_all_true(arr) - if len(arr.get_shape()) == 1: + if arr.ndims() == 1: res_shape = [size] + self.get_shape()[1:] else: res_shape = [size] @@ -119,7 +123,7 @@ return loop.getitem_filter(w_res, self, arr) def setitem_filter(self, space, idx, val): - if len(idx.get_shape()) > 1 and idx.get_shape() != self.get_shape(): + if idx.ndims() > 1 and idx.get_shape() != self.get_shape(): raise OperationError(space.w_ValueError, space.wrap( "boolean index array should have 1 dimension")) if idx.get_size() > self.get_size(): @@ -210,7 +214,7 @@ if space.is_w(w_idx, space.w_Ellipsis): return self elif isinstance(w_idx, W_NDimArray) and w_idx.get_dtype().is_bool() \ - and len(w_idx.get_shape()) > 0: + and w_idx.ndims() > 0: return self.getitem_filter(space, w_idx) try: return self.implementation.descr_getitem(space, self, w_idx) @@ -228,7 +232,7 @@ self.implementation.setslice(space, convert_to_array(space, w_value)) return elif isinstance(w_idx, W_NDimArray) and w_idx.get_dtype().is_bool() \ - and len(w_idx.get_shape()) > 0: + and w_idx.ndims() > 0: self.setitem_filter(space, w_idx, convert_to_array(space, w_value)) return try: @@ -289,7 +293,7 @@ shape=shape, backward_broadcast=backward_broadcast) def is_scalar(self): - return len(self.get_shape()) == 0 + return self.ndims() == 0 def set_scalar_value(self, w_val): return self.implementation.setitem(self.implementation.start, w_val) @@ -408,7 +412,7 @@ """ if axis1 == axis2: return self - n = len(self.get_shape()) + n = self.ndims() if n <= 1: return self if axis1 < 0: @@ -426,7 +430,7 @@ return self.implementation.nonzero(space, index_type) def descr_tolist(self, space): - if len(self.get_shape()) == 0: + if self.ndims() == 0: return self.get_scalar_value().item(space) l_w = [] for i in range(self.get_shape()[0]): @@ -515,7 +519,7 @@ if len(args_w) == 0: raise OperationError(space.w_ValueError, space.wrap( "itemset must have at least one argument")) - if len(args_w) != len(self.get_shape()) + 1: + if len(args_w) != self.ndims() + 1: raise OperationError(space.w_ValueError, space.wrap( "incorrect number of indices for array")) self.descr_setitem(space, space.newtuple(args_w[:-1]), args_w[-1]) @@ -648,14 +652,14 @@ @unwrap_spec(offset=int, axis1=int, axis2=int) def descr_diagonal(self, space, offset=0, axis1=0, axis2=1): - if len(self.get_shape()) < 2: + if self.ndims() < 2: raise OperationError(space.w_ValueError, space.wrap( "need at least 2 dimensions for diagonal")) - if (axis1 < 0 or axis2 < 0 or axis1 >= len(self.get_shape()) or - axis2 >= len(self.get_shape())): + if (axis1 < 0 or axis2 < 0 or axis1 >= self.ndims() or + axis2 >= self.ndims()): raise oefmt(space.w_ValueError, "axis1(=%d) and axis2(=%d) must be withing range " - "(ndim=%d)", axis1, axis2, len(self.get_shape())) + "(ndim=%d)", axis1, axis2, self.ndims()) if axis1 == axis2: raise OperationError(space.w_ValueError, space.wrap( "axis1 and axis2 cannot be the same")) @@ -734,7 +738,7 @@ raise OperationError(space.w_NotImplementedError, space.wrap( 'sorter not supported in searchsort')) side = searchside_converter(space, w_side) - if len(self.get_shape()) != 1: + if self.ndims() != 1: raise oefmt(space.w_ValueError, "a must be a 1-d array") v = convert_to_array(space, w_v) ret = W_NDimArray.from_shape( @@ -973,7 +977,7 @@ if other.is_scalar(): #Note: w_out is not modified, this is numpy compliant. return self.descr_mul(space, other) - elif len(self.get_shape()) < 2 and len(other.get_shape()) < 2: + elif self.ndims() < 2 and other.ndims() < 2: w_res = self.descr_mul(space, other) assert isinstance(w_res, W_NDimArray) return w_res.descr_sum(space, space.wrap(-1), out) @@ -990,7 +994,7 @@ matches = False elif not out.implementation.order == "C": matches = False - elif len(out.get_shape()) != len(out_shape): + elif out.ndims() != len(out_shape): matches = False else: for i in range(len(out_shape)): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit