From 1af2f37eae78986b370e2d44df6c5156945d69d8 Mon Sep 17 00:00:00 2001 From: Fabian Pedregosa Date: Wed, 31 Aug 2011 18:16:26 +0200 Subject: FIX: Make tril/triu return the same dtype as the original array. This should fix: * http://projects.scipy.org/numpy/ticket/1848 * http://projects.scipy.org/scipy/ticket/1449 --- numpy/lib/tests/test_twodim_base.py | 12 ++++++++++++ numpy/lib/twodim_base.py | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'numpy/lib') diff --git a/numpy/lib/tests/test_twodim_base.py b/numpy/lib/tests/test_twodim_base.py index 37165f672..7e7900090 100644 --- a/numpy/lib/tests/test_twodim_base.py +++ b/numpy/lib/tests/test_twodim_base.py @@ -239,6 +239,18 @@ class TestTri(TestCase): assert_array_equal(tri(3,dtype=bool),out.astype(bool)) +def test_tril_triu(): + for dtype in np.typecodes['AllFloat'] + np.typecodes['AllInteger']: + a = np.ones((2, 2), dtype=dtype) + b = np.tril(a) + c = np.triu(a) + assert_array_equal(b, [[1, 0], [1, 1]]) + assert_array_equal(c, b.T) + # should return the same dtype as the original array + assert_equal(b.dtype, a.dtype) + assert_equal(c.dtype, a.dtype) + + def test_mask_indices(): # simple test without offset iu = mask_indices(3, np.triu) diff --git a/numpy/lib/twodim_base.py b/numpy/lib/twodim_base.py index 12bba99a6..6fb348275 100644 --- a/numpy/lib/twodim_base.py +++ b/numpy/lib/twodim_base.py @@ -413,7 +413,7 @@ def tril(m, k=0): """ m = asanyarray(m) - out = multiply(tri(m.shape[0], m.shape[1], k=k, dtype=int),m) + out = multiply(tri(m.shape[0], m.shape[1], k=k, dtype=m.dtype),m) return out def triu(m, k=0): @@ -439,7 +439,7 @@ def triu(m, k=0): """ m = asanyarray(m) - out = multiply((1 - tri(m.shape[0], m.shape[1], k - 1, int)), m) + out = multiply((1 - tri(m.shape[0], m.shape[1], k - 1, dtype=m.dtype)), m) return out # borrowed from John Hunter and matplotlib -- cgit v1.2.1