Author: mattip Branch: numpypy-out Changeset: r52532:481d17327eeb Date: 2012-02-16 00:56 +0200 http://bitbucket.org/pypy/pypy/changeset/481d17327eeb/
Log: force non-lazy behaviour for ufuncs 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 @@ -783,6 +783,7 @@ self.values = None def create_sig(self): + print 'Call1::create_sig' if self.forced_result is not None: return self.forced_result.create_sig() return signature.Call1(self.ufunc, self.name, self.calc_dtype, @@ -943,7 +944,7 @@ def setitem(self, item, value): self.invalidated() - self.dtype.setitem(self.storage, item, value) + self.dtype.setitem(self.storage, item, value.convert_to(self.dtype)) def calc_strides(self, shape): strides = [] diff --git a/pypy/module/micronumpy/interp_ufuncs.py b/pypy/module/micronumpy/interp_ufuncs.py --- a/pypy/module/micronumpy/interp_ufuncs.py +++ b/pypy/module/micronumpy/interp_ufuncs.py @@ -262,6 +262,9 @@ w_res = Call1(self.func, self.name, w_obj.shape, calc_dtype, res_dtype, w_obj, out) w_obj.add_invalidates(w_res) + if out: + #Force it immediately + w_res.get_concrete() return w_res diff --git a/pypy/module/micronumpy/test/test_outarg.py b/pypy/module/micronumpy/test/test_outarg.py --- a/pypy/module/micronumpy/test/test_outarg.py +++ b/pypy/module/micronumpy/test/test_outarg.py @@ -36,9 +36,9 @@ a = array([[1, 2], [3, 4]]) c = zeros((2,2,2)) b = negative(a + a, out=c[1]) - print c + #test for view, and also test that forcing out also forces b + assert (c[:, :, 1] == [[0, 0], [-4, -8]]).all() assert (b == [[-2, -4], [-6, -8]]).all() - assert (c[:, :, 1] == [[0, 0], [-4, -8]]).all() def test_ufunc_cast(self): from _numpypy import array, negative _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit