Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r49944:6fabd9a00be8 Date: 2011-11-29 10:39 +0200 http://bitbucket.org/pypy/pypy/changeset/6fabd9a00be8/
Log: Test and check that we don't do stupid copies - it's not only inefficient, it's also wrong diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py --- a/pypy/module/micronumpy/interp_numarray.py +++ b/pypy/module/micronumpy/interp_numarray.py @@ -726,13 +726,7 @@ item = concrete._index_of_single_item(space, w_idx) concrete.setitem_w(space, item, w_value) return - if isinstance(w_value, BaseArray): - # for now we just copy if setting part of an array from part of - # itself. can be improved. - if (concrete.get_root_storage() == - w_value.get_concrete().get_root_storage()): - w_value = w_value.descr_copy(space) - else: + if not isinstance(w_value, BaseArray): w_value = convert_to_array(space, w_value) chunks = self._prepare_slice_args(space, w_idx) view = self.create_slice(space, chunks) diff --git a/pypy/module/micronumpy/test/test_numarray.py b/pypy/module/micronumpy/test/test_numarray.py --- a/pypy/module/micronumpy/test/test_numarray.py +++ b/pypy/module/micronumpy/test/test_numarray.py @@ -750,6 +750,12 @@ assert bool(array([1])) assert not bool(array([0])) + def test_slice_assignment(self): + from numpypy import arange + a = arange(5) + a[::-1] = a + assert (a == [0, 1, 2, 1, 0]).all() + class AppTestMultiDim(BaseNumpyAppTest): def test_init(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit