Skip to content

Commit e55bf84

Browse files
committed
Unit Tests: Small Matrix
1 parent 473cffe commit e55bf84

File tree

1 file changed

+223
-0
lines changed

1 file changed

+223
-0
lines changed

tests/test_smallmatrix.py

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import numpy as np
4+
5+
import amrex.space3d as amr
6+
7+
8+
def test_smallmatrix():
9+
m66 = amr.SmallMatrix_6x6_F_SI1_double(
10+
[
11+
[1, 2, 3, 4, 5, 6],
12+
[7, 8, 9, 10, 11, 12],
13+
[13, 14, 15, 16, 17, 18],
14+
[19, 20, 21, 22, 23, 24],
15+
[25, 26, 27, 28, 29, 30],
16+
[31, 32, 33, 34, 35, 36],
17+
]
18+
)
19+
v = 1
20+
for j in range(1, 7):
21+
for i in range(1, 7):
22+
assert m66[i, j] == v
23+
v += 1
24+
25+
26+
def test_smallvector():
27+
cv1 = amr.SmallMatrix_6x1_F_SI1_double()
28+
rv1 = amr.SmallMatrix_1x6_F_SI1_double()
29+
cv2 = amr.SmallMatrix_6x1_F_SI1_double([1, 2, 3, 4, 5, 6])
30+
rv2 = amr.SmallMatrix_1x6_F_SI1_double([0, 10, 20, 30, 40, 50])
31+
cv3 = amr.SmallMatrix_6x1_F_SI1_double([0, 1, 2, 3, 4, 5])
32+
33+
for j in range(1, 7):
34+
assert cv1[j] == 0.0
35+
assert rv1[j] == 0.0
36+
assert cv2[j] == j
37+
assert amr.almost_equal(rv2[j], (j - 1) * 10.0)
38+
assert amr.almost_equal(cv3[j], j - 1.0)
39+
40+
41+
def test_smallmatrix_zero():
42+
zero = amr.SmallMatrix_6x6_F_SI1_double()
43+
44+
# Check properties
45+
assert zero.size == 36
46+
assert zero.row_size == 6
47+
assert zero.column_size == 6
48+
assert zero.order == "F"
49+
assert zero.starting_index == 1
50+
51+
# Check values
52+
assert zero.sum() == 0
53+
assert zero.prod() == 0
54+
assert zero.trace() == 0
55+
56+
# assign empty
57+
zeroc = amr.SmallMatrix_6x6_F_SI1_double(zero)
58+
59+
# Check values
60+
assert zeroc.sum() == 0
61+
assert zeroc.prod() == 0
62+
assert zeroc.trace() == 0
63+
64+
# create zero
65+
zerov = amr.SmallMatrix_6x6_F_SI1_double.zero()
66+
67+
# Check values
68+
assert zerov.sum() == 0
69+
assert zerov.prod() == 0
70+
assert zerov.trace() == 0
71+
72+
73+
def test_smallmatrix_identity():
74+
iden = amr.SmallMatrix_6x6_F_SI1_double.identity()
75+
76+
# Check properties
77+
assert iden.size == 36
78+
assert iden.row_size == 6
79+
assert iden.column_size == 6
80+
assert iden.order == "F"
81+
assert iden.starting_index == 1
82+
83+
# Check values
84+
assert iden.sum() == 6
85+
assert iden.prod() == 0
86+
assert iden.trace() == 6
87+
88+
89+
def test_smallmatrix_from_np():
90+
# from numpy (copy)
91+
x = np.ones(
92+
(
93+
6,
94+
6,
95+
)
96+
)
97+
print(f"\nx: {x.__array_interface__} {x.dtype}")
98+
sm = amr.SmallMatrix_6x6_F_SI1_double(x)
99+
print(f"sm: {sm.__array_interface__}")
100+
print(sm)
101+
102+
assert sm.sum() == 36
103+
assert sm.prod() == 1
104+
assert sm.trace() == 6
105+
106+
107+
def test_smallmatrix_to_np():
108+
iden = amr.SmallMatrix_6x6_F_SI1_double.identity()
109+
110+
x = iden.to_numpy()
111+
print(x)
112+
113+
assert x.sum() == 6
114+
assert x.prod() == 0
115+
assert x.trace() == 6
116+
assert not x.flags["C_CONTIGUOUS"]
117+
assert x.flags["F_CONTIGUOUS"]
118+
119+
120+
def test_smallmatrix_smallvector():
121+
v3 = amr.SmallMatrix_6x1_F_SI1_double.zero()
122+
v3[1] = 1.0
123+
v3[2] = 2.0
124+
v3[3] = 3.0
125+
v3[4] = 4.0
126+
v3[5] = 5.0
127+
v3[6] = 6.0
128+
m66 = amr.SmallMatrix_6x6_F_SI1_double.identity()
129+
r = m66 * v3
130+
131+
for i in range(1, 7):
132+
assert amr.almost_equal(r[i], v3[i])
133+
134+
135+
def test_smallmatrix_smallmatrix():
136+
A = amr.SmallMatrix_6x6_F_SI1_double(
137+
[
138+
[1, 0, 1, 0, 1, 0],
139+
[2, 1, 1, 1, 1, 2],
140+
[0, 1, 1, 1, 1, 0],
141+
[1, 1, 2, 2, 1, 1],
142+
[2, 1, 2, 2, 1, 2],
143+
[0, 1, 1, 1, 1, 0],
144+
]
145+
)
146+
B = amr.SmallMatrix_6x6_F_SI1_double(
147+
[
148+
[1, 2, 2, 2, 1, 1],
149+
[2, 3, 1, 1, 1, 3],
150+
[4, 2, 2, 2, 2, 0],
151+
[1, 4, 3, 2, 0, 1],
152+
[2, 3, 1, 0, 0, 2],
153+
[0, 1, 1, 1, 4, 0],
154+
]
155+
)
156+
C = amr.SmallMatrix_6x1_F_SI1_double([10, 8, 6, 4, 2, 0])
157+
ABC = A * B * C
158+
assert ABC[1, 1] == 322
159+
assert ABC[2, 1] == 252
160+
assert ABC[3, 1] == 388
161+
assert ABC[4, 1] == 330
162+
assert ABC[5, 1] == 310
163+
assert ABC[6, 1] == 264
164+
165+
# transpose
166+
CR = amr.SmallMatrix_1x6_F_SI1_double([10, 8, 6, 4, 2, 0])
167+
ABC_T = A.T * B.transpose_in_place() * CR.T
168+
assert ABC_T[1, 1] == 178
169+
assert ABC_T[2, 1] == 402
170+
assert ABC_T[3, 1] == 254
171+
assert ABC_T[4, 1] == 476
172+
assert ABC_T[5, 1] == 550
173+
assert ABC_T[6, 1] == 254
174+
175+
176+
def test_smallmatrix_sum_prod():
177+
m = amr.SmallMatrix_6x6_F_SI1_double()
178+
m.set_val(2.0)
179+
180+
assert m.prod() == 2 ** (m.row_size * m.column_size)
181+
assert m.sum() == 2 * m.row_size * m.column_size
182+
183+
184+
def test_smallmatrix_trace():
185+
m = amr.SmallMatrix_6x6_F_SI1_double(
186+
[
187+
[1.0, 3.4, 4.5, 5.6, 6.7, 7.8],
188+
[1.3, 2.0, 3.4, 4.5, 5.6, 6.7],
189+
[1.3, 1.0, 3.0, 4.5, 5.6, 6.7],
190+
[1.3, 1.4, 4.5, 4.0, 5.6, 6.7],
191+
[1.3, 1.0, 4.5, 5.6, 5.0, 6.7],
192+
[1.3, 1.4, 3.0, 4.5, 6.7, 6.0],
193+
]
194+
)
195+
assert m.trace() == 1.0 + 2.0 + 3.0 + 4.0 + 5.0 + 6.0
196+
197+
198+
def test_smallmatrix_scalar():
199+
A = amr.SmallMatrix_6x6_F_SI1_double(
200+
[
201+
[+1.0, +2, +3, +4, +5, +6],
202+
[+7, +8, +9, +10, +11, +12],
203+
[+13, +14, +15, +16, +17, +18],
204+
[+19, +20, +21, +22, +23, +24],
205+
[+25, +26, +27, +28, +29, +30],
206+
[+31, +32, +33, +34, +35, +36],
207+
]
208+
)
209+
B = amr.SmallMatrix_6x6_F_SI1_double(A)
210+
B *= -1.0
211+
212+
# test matrix-scalar and scalar-matrix
213+
C = A * 2.0 + 2.0 * B
214+
assert np.allclose(C.to_numpy(), 0.0)
215+
216+
# test unary- operator and point-wise minus
217+
D = -A - B
218+
assert np.allclose(D.to_numpy(), 0.0)
219+
220+
# dot product
221+
E = amr.SmallMatrix_6x6_F_SI1_double()
222+
E.set_val(-1.0)
223+
assert A.dot(E) == -666

0 commit comments

Comments
 (0)