diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2010-05-05 03:34:47 +0000 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2010-05-05 03:34:47 +0000 |
commit | 30e4150e507af394740c6fd92619ed19eb56268a (patch) | |
tree | 7c2c68e4fad503913e60c535f24a5f54abb7a06f /numpy/linalg/tests | |
parent | dd9d99c7fec0f7eedc1ad6ba4e557810f7a8954b (diff) | |
download | numpy-30e4150e507af394740c6fd92619ed19eb56268a.tar.gz |
ENH: Add slogdet to the linalg module. The patch is from njs with
slogdet substituted for sign_log_det. Closes ticket #1402.
Diffstat (limited to 'numpy/linalg/tests')
-rw-r--r-- | numpy/linalg/tests/test_linalg.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/numpy/linalg/tests/test_linalg.py b/numpy/linalg/tests/test_linalg.py index b81561254..3a9584dd6 100644 --- a/numpy/linalg/tests/test_linalg.py +++ b/numpy/linalg/tests/test_linalg.py @@ -127,12 +127,31 @@ class TestPinv(LinalgTestCase, TestCase): class TestDet(LinalgTestCase, TestCase): def do(self, a, b): d = linalg.det(a) + (s, ld) = linalg.slogdet(a) if asarray(a).dtype.type in (single, double): ad = asarray(a).astype(double) else: ad = asarray(a).astype(cdouble) ev = linalg.eigvals(ad) assert_almost_equal(d, multiply.reduce(ev)) + assert_almost_equal(s * np.exp(ld), multiply.reduce(ev)) + if s != 0: + assert_almost_equal(np.abs(s), 1) + else: + assert_equal(ld, -inf) + + def test_zero(self): + assert_equal(linalg.det([[0.0]]), 0.0) + assert_equal(type(linalg.det([[0.0]])), double) + assert_equal(linalg.det([[0.0j]]), 0.0) + assert_equal(type(linalg.det([[0.0j]])), cdouble) + + assert_equal(linalg.slogdet([[0.0]]), (0.0, -inf)) + assert_equal(type(linalg.slogdet([[0.0]])[0]), double) + assert_equal(type(linalg.slogdet([[0.0]])[1]), double) + assert_equal(linalg.slogdet([[0.0j]]), (0.0j, -inf)) + assert_equal(type(linalg.slogdet([[0.0j]])[0]), cdouble) + assert_equal(type(linalg.slogdet([[0.0j]])[1]), double) class TestLstsq(LinalgTestCase, TestCase): def do(self, a, b): |