Author: mattip <matti.pi...@gmail.com> Branch: nditer-revisited Changeset: r78677:bfac28c76c83 Date: 2015-07-26 23:32 +0300 http://bitbucket.org/pypy/pypy/changeset/bfac28c76c83/
Log: do not buffer output arrays, fix exception formatting 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 @@ -424,8 +424,15 @@ self.seq[i] = W_NDimArray.from_shape(space, self.shape, out_dtype) else: if not self.op_flags[i].broadcast: - # Raises if ooutput cannot be broadcast - shape_agreement(space, self.shape, self.seq[i], False) + # Raises if output cannot be broadcast + try: + shape_agreement(space, self.shape, self.seq[i], False) + except OperationError as e: + raise oefmt(space.w_ValueError, "non-broadcastable" + " output operand with shape %s doesn't match " + "the broadcast shape %s", + str(self.seq[i].get_shape()), + str(self.shape)) if self.tracked_index != "": if self.order == "K": @@ -474,7 +481,10 @@ space.str_w(seq_d.descr_repr(space)), i, self.casting) elif self.buffered: - self.seq = [s.descr_copy(space, w_order=space.wrap(self.order)) for s in self.seq] + for i in range(len(self.seq)): + if i not in outargs: + self.seq[i] = self.seq[i].descr_copy(space, + w_order=space.wrap(self.order)) self.dtypes = [s.get_dtype() for s in self.seq] else: #copy them from seq 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 @@ -229,7 +229,6 @@ assert str(exc.value).startswith("Iterator operand 0 dtype could not be cast") r = [] b = arange(6) - print 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' exc = raises(TypeError, 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") @@ -259,9 +258,6 @@ return it.operands[1] assert (square1([1, 2, 3]) == [1, 4, 9]).all() - if '__pypy__' in sys.builtin_module_names: - raises(NotImplementedError, nditer, [1, 2], flags=['buffered']) - skip('nditer buffered not implmented') def square2(a, out=None): it = nditer([a, out], flags=['external_loop', 'buffered'], op_flags=[['readonly'], _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit