Skip to content

Commit 0761b74

Browse files
committed
unittest: Reduced computation time of tests
1 parent 912c901 commit 0761b74

File tree

6 files changed

+12
-342
lines changed

6 files changed

+12
-342
lines changed

unittest/python/test_ComplexEigenSolver.py

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,9 @@
66
rng = np.random.default_rng()
77
A = rng.random((dim, dim))
88

9-
ces = eigenpy.ComplexEigenSolver()
10-
es = eigenpy.ComplexEigenSolver(dim)
119
es = eigenpy.ComplexEigenSolver(A)
1210
assert es.info() == eigenpy.ComputationInfo.Success
1311

14-
es_with_vectors = eigenpy.ComplexEigenSolver(A, True)
15-
assert es_with_vectors.info() == eigenpy.ComputationInfo.Success
16-
17-
es_without_vectors = eigenpy.ComplexEigenSolver(A, False)
18-
assert es_without_vectors.info() == eigenpy.ComputationInfo.Success
19-
2012
V = es.eigenvectors()
2113
D = es.eigenvalues()
2214
assert V.shape == (dim, dim)
@@ -27,68 +19,10 @@
2719
assert eigenpy.is_approx(AV.real, VD.real)
2820
assert eigenpy.is_approx(AV.imag, VD.imag)
2921

30-
es_compute = eigenpy.ComplexEigenSolver()
31-
result = es_compute.compute(A, False)
32-
assert result.info() == eigenpy.ComputationInfo.Success
33-
D_only = es_compute.eigenvalues()
34-
assert D_only.shape == (dim,)
35-
36-
result_with_vectors = es_compute.compute(A, True)
37-
assert result_with_vectors.info() == eigenpy.ComputationInfo.Success
38-
V_computed = es_compute.eigenvectors()
39-
D_computed = es_compute.eigenvalues()
40-
assert V_computed.shape == (dim, dim)
41-
assert D_computed.shape == (dim,)
42-
43-
trace_A = np.trace(A)
44-
trace_D = np.sum(D)
45-
assert abs(trace_A - trace_D.real) < 1e-10
46-
assert abs(trace_D.imag) < 1e-10
47-
48-
es_default = eigenpy.ComplexEigenSolver()
49-
result_default = es_default.compute(A)
50-
assert result_default.info() == eigenpy.ComputationInfo.Success
51-
V_default = es_default.eigenvectors()
52-
D_default = es_default.eigenvalues()
53-
54-
es_iter = eigenpy.ComplexEigenSolver(A)
55-
default_iter = es_iter.getMaxIterations()
56-
es_iter.setMaxIterations(100)
57-
assert es_iter.getMaxIterations() == 100
58-
es_iter.setMaxIterations(200)
59-
assert es_iter.getMaxIterations() == 200
60-
61-
assert es.info() == eigenpy.ComputationInfo.Success
62-
63-
ces1 = eigenpy.ComplexEigenSolver()
64-
ces2 = eigenpy.ComplexEigenSolver()
65-
id1 = ces1.id()
66-
id2 = ces2.id()
67-
assert id1 != id2
68-
assert id1 == ces1.id()
69-
assert id2 == ces2.id()
70-
71-
dim_constructor = 3
72-
ces3 = eigenpy.ComplexEigenSolver(dim_constructor)
73-
ces4 = eigenpy.ComplexEigenSolver(dim_constructor)
74-
id3 = ces3.id()
75-
id4 = ces4.id()
76-
assert id3 != id4
77-
assert id3 == ces3.id()
78-
assert id4 == ces4.id()
79-
8022
ces5 = eigenpy.ComplexEigenSolver(A)
8123
ces6 = eigenpy.ComplexEigenSolver(A)
8224
id5 = ces5.id()
8325
id6 = ces6.id()
8426
assert id5 != id6
8527
assert id5 == ces5.id()
8628
assert id6 == ces6.id()
87-
88-
ces7 = eigenpy.ComplexEigenSolver(A, True)
89-
ces8 = eigenpy.ComplexEigenSolver(A, False)
90-
id7 = ces7.id()
91-
id8 = ces8.id()
92-
assert id7 != id8
93-
assert id7 == ces7.id()
94-
assert id8 == ces8.id()

unittest/python/test_ComplexSchur.py

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -20,50 +20,6 @@
2020
for col in range(row):
2121
assert abs(T[row, col]) < 1e-12
2222

23-
A_test = rng.random((dim, dim))
24-
cs1 = eigenpy.ComplexSchur(dim)
25-
cs1.compute(A_test)
26-
cs2 = eigenpy.ComplexSchur(A_test)
27-
28-
assert cs1.info() == eigenpy.ComputationInfo.Success
29-
assert cs2.info() == eigenpy.ComputationInfo.Success
30-
31-
T1 = cs1.matrixT()
32-
U1 = cs1.matrixU()
33-
T2 = cs2.matrixT()
34-
U2 = cs2.matrixU()
35-
36-
assert eigenpy.is_approx(T1, T2)
37-
assert eigenpy.is_approx(U1, U2)
38-
39-
cs_no_u = eigenpy.ComplexSchur(A, False)
40-
assert cs_no_u.info() == eigenpy.ComputationInfo.Success
41-
T_no_u = cs_no_u.matrixT()
42-
43-
assert eigenpy.is_approx(T, T_no_u)
44-
45-
cs_compute_no_u = eigenpy.ComplexSchur(dim)
46-
result_no_u = cs_compute_no_u.compute(A, False)
47-
assert result_no_u.info() == eigenpy.ComputationInfo.Success
48-
T_compute_no_u = cs_compute_no_u.matrixT()
49-
assert eigenpy.is_approx(T, T_compute_no_u)
50-
51-
cs_iter = eigenpy.ComplexSchur(dim)
52-
cs_iter.setMaxIterations(30 * dim) # m_maxIterationsPerRow * size
53-
result_iter = cs_iter.compute(A)
54-
assert result_iter.info() == eigenpy.ComputationInfo.Success
55-
assert cs_iter.getMaxIterations() == 30 * dim
56-
57-
T_iter = cs_iter.matrixT()
58-
U_iter = cs_iter.matrixU()
59-
assert eigenpy.is_approx(T, T_iter)
60-
assert eigenpy.is_approx(U, U_iter)
61-
62-
cs_few_iter = eigenpy.ComplexSchur(dim)
63-
cs_few_iter.setMaxIterations(1)
64-
result_few = cs_few_iter.compute(A)
65-
assert cs_few_iter.getMaxIterations() == 1
66-
6723
A_triangular = np.triu(A)
6824
cs_triangular = eigenpy.ComplexSchur(dim)
6925
cs_triangular.setMaxIterations(1)
@@ -90,27 +46,3 @@
9046

9147
A_complex = A.astype(complex)
9248
assert eigenpy.is_approx(A_complex, U_from_hess @ T_from_hess @ U_from_hess.conj().T)
93-
94-
cs1_id = eigenpy.ComplexSchur(dim)
95-
cs2_id = eigenpy.ComplexSchur(dim)
96-
id1 = cs1_id.id()
97-
id2 = cs2_id.id()
98-
assert id1 != id2
99-
assert id1 == cs1_id.id()
100-
assert id2 == cs2_id.id()
101-
102-
cs3_id = eigenpy.ComplexSchur(A)
103-
cs4_id = eigenpy.ComplexSchur(A)
104-
id3 = cs3_id.id()
105-
id4 = cs4_id.id()
106-
assert id3 != id4
107-
assert id3 == cs3_id.id()
108-
assert id4 == cs4_id.id()
109-
110-
cs5_id = eigenpy.ComplexSchur(A, True)
111-
cs6_id = eigenpy.ComplexSchur(A, False)
112-
id5 = cs5_id.id()
113-
id6 = cs6_id.id()
114-
assert id5 != id6
115-
assert id5 == cs5_id.id()
116-
assert id6 == cs6_id.id()

unittest/python/test_GeneralizedSelfAdjointEigenSolver.py

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -74,42 +74,6 @@ def test_generalized_selfadjoint_eigensolver(options):
7474
rank = len([d for d in D if abs(d) > 1e-12])
7575
assert rank <= dim
7676

77-
decomp1 = eigenpy.GeneralizedSelfAdjointEigenSolver()
78-
decomp2 = eigenpy.GeneralizedSelfAdjointEigenSolver()
79-
id1 = decomp1.id()
80-
id2 = decomp2.id()
81-
assert id1 != id2
82-
assert id1 == decomp1.id()
83-
assert id2 == decomp2.id()
84-
85-
decomp3 = eigenpy.GeneralizedSelfAdjointEigenSolver(dim)
86-
decomp4 = eigenpy.GeneralizedSelfAdjointEigenSolver(dim)
87-
id3 = decomp3.id()
88-
id4 = decomp4.id()
89-
assert id3 != id4
90-
assert id3 == decomp3.id()
91-
assert id4 == decomp4.id()
92-
93-
decomp5 = eigenpy.GeneralizedSelfAdjointEigenSolver(A, B, options)
94-
decomp6 = eigenpy.GeneralizedSelfAdjointEigenSolver(A, B, options)
95-
id5 = decomp5.id()
96-
id6 = decomp6.id()
97-
assert id5 != id6
98-
assert id5 == decomp5.id()
99-
assert id6 == decomp6.id()
100-
101-
if compute_eigenvectors and (options & eigenpy.DecompositionOptions.Ax_lBx):
102-
A_pos = A @ A.T + np.eye(dim)
103-
gsaes_pos = eigenpy.GeneralizedSelfAdjointEigenSolver(A_pos, B, options)
104-
assert gsaes_pos.info() == eigenpy.ComputationInfo.Success
105-
106-
D_pos = gsaes_pos.eigenvalues()
107-
if all(D_pos[i] > 1e-12 for i in range(dim)):
108-
sqrt_matrix = gsaes_pos.operatorSqrt()
109-
inv_sqrt_matrix = gsaes_pos.operatorInverseSqrt()
110-
assert sqrt_matrix.shape == (dim, dim)
111-
assert inv_sqrt_matrix.shape == (dim, dim)
112-
11377

11478
for opt in _options:
11579
test_generalized_selfadjoint_eigensolver(opt)

unittest/python/test_JacobiSVD.py

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,26 @@
99

1010
_options = [
1111
0,
12-
THIN_U,
13-
THIN_V,
14-
FULL_U,
15-
FULL_V,
12+
# THIN_U,
13+
# THIN_V,
14+
# FULL_U,
15+
# FULL_V,
1616
THIN_U | THIN_V,
1717
FULL_U | FULL_V,
18-
THIN_U | FULL_V,
19-
FULL_U | THIN_V,
18+
# THIN_U | FULL_V,
19+
# FULL_U | THIN_V,
2020
]
2121

2222
_classes = [
2323
eigenpy.ColPivHhJacobiSVD,
24-
eigenpy.FullPivHhJacobiSVD,
25-
eigenpy.HhJacobiSVD,
26-
eigenpy.NoPrecondJacobiSVD,
24+
# eigenpy.FullPivHhJacobiSVD,
25+
# eigenpy.HhJacobiSVD,
26+
# eigenpy.NoPrecondJacobiSVD,
2727
]
2828

29+
# Rationale: Tets only few cases to gain computation time
30+
# User can test all of them by uncommenting the corresponding lines
31+
2932

3033
def is_valid_combination(cls, opt):
3134
if cls == eigenpy.FullPivHhJacobiSVD:
@@ -104,27 +107,6 @@ def test_jacobi(cls, opt):
104107
A_reconstructed = U @ S_matrix @ V.T
105108
assert eigenpy.is_approx(A, A_reconstructed)
106109

107-
jacobisvd.setThreshold()
108-
_default_threshold = jacobisvd.threshold()
109-
jacobisvd.setThreshold(1e-8)
110-
assert jacobisvd.threshold() == 1e-8
111-
112-
decomp1 = cls()
113-
decomp2 = cls()
114-
id1 = decomp1.id()
115-
id2 = decomp2.id()
116-
assert id1 != id2
117-
assert id1 == decomp1.id()
118-
assert id2 == decomp2.id()
119-
120-
decomp3 = cls(dim, dim, opt)
121-
decomp4 = cls(dim, dim, opt)
122-
id3 = decomp3.id()
123-
id4 = decomp4.id()
124-
assert id3 != id4
125-
assert id3 == decomp3.id()
126-
assert id4 == decomp4.id()
127-
128110

129111
for cls in _classes:
130112
for opt in _options:

unittest/python/test_RealQZ.py

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -29,71 +29,10 @@
2929
for j in range(i - 1):
3030
assert abs(S[i, j]) < 1e-12
3131

32-
realqz_no_qz = eigenpy.RealQZ(A, B, False)
33-
assert realqz_no_qz.info() == eigenpy.ComputationInfo.Success
34-
S_no_qz = realqz_no_qz.matrixS()
35-
T_no_qz = realqz_no_qz.matrixT()
36-
37-
for i in range(dim):
38-
for j in range(i):
39-
assert abs(T_no_qz[i, j]) < 1e-12
40-
41-
for i in range(dim):
42-
for j in range(i - 1):
43-
assert abs(S_no_qz[i, j]) < 1e-12
44-
45-
realqz_compute_no_qz = eigenpy.RealQZ(dim)
46-
result_no_qz = realqz_compute_no_qz.compute(A, B, False)
47-
assert result_no_qz.info() == eigenpy.ComputationInfo.Success
48-
S_compute_no_qz = realqz_compute_no_qz.matrixS()
49-
T_compute_no_qz = realqz_compute_no_qz.matrixT()
50-
51-
realqz_with_qz = eigenpy.RealQZ(dim)
52-
realqz_without_qz = eigenpy.RealQZ(dim)
53-
54-
result_with = realqz_with_qz.compute(A, B, True)
55-
result_without = realqz_without_qz.compute(A, B, False)
56-
57-
assert result_with.info() == eigenpy.ComputationInfo.Success
58-
assert result_without.info() == eigenpy.ComputationInfo.Success
59-
60-
S_with = realqz_with_qz.matrixS()
61-
T_with = realqz_with_qz.matrixT()
62-
S_without = realqz_without_qz.matrixS()
63-
T_without = realqz_without_qz.matrixT()
64-
65-
assert eigenpy.is_approx(S_with, S_without)
66-
assert eigenpy.is_approx(T_with, T_without)
67-
68-
iterations = realqz.iterations()
69-
assert iterations >= 0
70-
71-
realqz_iter = eigenpy.RealQZ(dim)
72-
realqz_iter.setMaxIterations(100)
73-
realqz_iter.setMaxIterations(500)
74-
result_iter = realqz_iter.compute(A, B)
75-
assert result_iter.info() == eigenpy.ComputationInfo.Success
76-
77-
realqz1_id = eigenpy.RealQZ(dim)
78-
realqz2_id = eigenpy.RealQZ(dim)
79-
id1 = realqz1_id.id()
80-
id2 = realqz2_id.id()
81-
assert id1 != id2
82-
assert id1 == realqz1_id.id()
83-
assert id2 == realqz2_id.id()
84-
8532
realqz3_id = eigenpy.RealQZ(A, B)
8633
realqz4_id = eigenpy.RealQZ(A, B)
8734
id3 = realqz3_id.id()
8835
id4 = realqz4_id.id()
8936
assert id3 != id4
9037
assert id3 == realqz3_id.id()
9138
assert id4 == realqz4_id.id()
92-
93-
realqz5_id = eigenpy.RealQZ(A, B, True)
94-
realqz6_id = eigenpy.RealQZ(A, B, False)
95-
id5 = realqz5_id.id()
96-
id6 = realqz6_id.id()
97-
assert id5 != id6
98-
assert id5 == realqz5_id.id()
99-
assert id6 == realqz6_id.id()

0 commit comments

Comments
 (0)