]>
gitweb.michael.orlitzky.com - dunshire.git/blob - test/matrices_test.py
2 Unit tests for the functions in the ``matrices`` module.
5 from unittest
import TestCase
7 from cvxopt
import matrix
9 from dunshire
.matrices
import (append_col
, append_row
, condition_number
,
10 eigenvalues
, eigenvalues_re
, identity
,
12 from dunshire
.options
import ABS_TOL
13 from .randomgen
import random_matrix
, random_natural
, random_scalar
15 class AppendColTest(TestCase
):
17 def test_size_increases(self
):
19 If we append a column to a matrix, the result should be bigger
20 than the original matrix.
22 dims
= random_natural()
23 mat1
= random_matrix(dims
)
24 mat2
= random_matrix(dims
)
25 bigmat
= append_col(mat1
, mat2
)
26 self
.assertTrue(bigmat
.size
[0] >= mat1
.size
[0])
27 self
.assertTrue(bigmat
.size
[1] >= mat1
.size
[1])
30 class AppendRowTest(TestCase
):
32 def test_size_increases(self
):
34 If we append a row to a matrix, the result should be bigger
35 than the original matrix.
37 dims
= random_natural()
38 mat1
= random_matrix(dims
)
39 mat2
= random_matrix(dims
)
40 bigmat
= append_row(mat1
, mat2
)
41 self
.assertTrue(bigmat
.size
[0] >= mat1
.size
[0])
42 self
.assertTrue(bigmat
.size
[1] >= mat1
.size
[1])
45 class EigenvaluesTest(TestCase
):
47 def test_eigenvalues_input_not_clobbered(self
):
48 mat
= random_matrix(random_natural())
49 symmat
= mat
+ mat
.trans()
50 symmat_copy
= matrix(symmat
, symmat
.size
)
51 eigs
= eigenvalues(symmat
)
52 self
.assertTrue(norm(symmat
- symmat_copy
) < ABS_TOL
)
54 def test_eigenvalues_re_input_not_clobbered(self
):
55 mat
= random_matrix(random_natural())
56 mat_copy
= matrix(mat
, mat
.size
)
57 eigs
= eigenvalues_re(mat
)
58 self
.assertTrue(norm(mat
- mat_copy
) < ABS_TOL
)
60 def test_eigenvalues_of_symmetric_are_real(self
):
61 mat
= random_matrix(random_natural())
62 symmat
= mat
+ mat
.trans()
63 eigs1
= sorted(eigenvalues(symmat
))
64 eigs2
= sorted(eigenvalues_re(symmat
))
65 diffs
= [abs(e1
-e2
) for (e1
,e2
) in zip(eigs1
,eigs2
)]
66 self
.assertTrue(all([diff
< ABS_TOL
for diff
in diffs
]))
69 def test_eigenvalues_of_identity(self
):
70 mat
= identity(random_natural(), typecode
='d')
71 eigs1
= eigenvalues(mat
)
72 eigs2
= eigenvalues_re(mat
)
73 self
.assertTrue(all([abs(e1
- 1) < ABS_TOL
for e1
in eigs1
]))
74 self
.assertTrue(all([abs(e2
- 1) < ABS_TOL
for e2
in eigs2
]))
77 class InnerProductTest(TestCase
):
79 def test_norm_is_nonnegative(self
):
80 vec
= matrix([random_scalar() for _
in range(random_natural())])
81 self
.assertTrue(inner_product(vec
,vec
) >= 0)
84 def ConditionNumberTest(TestCase
):
86 def test_condition_number_ge_one(self
):
87 mat
= random_matrix(random_natural())
88 self
.assertTrue(condition_number(mat
) >= 1)