summaryrefslogtreecommitdiff
path: root/numpy/linalg/tests
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2010-05-05 03:34:47 +0000
committerCharles Harris <charlesr.harris@gmail.com>2010-05-05 03:34:47 +0000
commit30e4150e507af394740c6fd92619ed19eb56268a (patch)
tree7c2c68e4fad503913e60c535f24a5f54abb7a06f /numpy/linalg/tests
parentdd9d99c7fec0f7eedc1ad6ba4e557810f7a8954b (diff)
downloadnumpy-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.py19
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):