9
9
from ..affines import (AffineError , apply_affine , append_diag , to_matvec ,
10
10
from_matvec , dot_reduce , voxel_sizes , obliquity )
11
11
12
+
12
13
import pytest
13
- import numpy .testing as npt
14
+ from numpy .testing import assert_array_equal , assert_almost_equal , \
15
+ assert_array_almost_equal
14
16
15
17
16
18
def validated_apply_affine (T , xyz ):
@@ -30,27 +32,28 @@ def test_apply_affine():
30
32
rng = np .random .RandomState (20110903 )
31
33
aff = np .diag ([2 , 3 , 4 , 1 ])
32
34
pts = rng .uniform (size = (4 , 3 ))
33
- npt .assert_equal (apply_affine (aff , pts ), pts * [[2 , 3 , 4 ]])
35
+ assert_array_equal (apply_affine (aff , pts ),
36
+ pts * [[2 , 3 , 4 ]])
34
37
aff [:3 , 3 ] = [10 , 11 , 12 ]
35
- npt . assert_equal (apply_affine (aff , pts ),
36
- pts * [[2 , 3 , 4 ]] + [[10 , 11 , 12 ]])
38
+ assert_array_equal (apply_affine (aff , pts ),
39
+ pts * [[2 , 3 , 4 ]] + [[10 , 11 , 12 ]])
37
40
aff [:3 , :] = rng .normal (size = (3 , 4 ))
38
41
exp_res = np .concatenate ((pts .T , np .ones ((1 , 4 ))), axis = 0 )
39
42
exp_res = np .dot (aff , exp_res )[:3 , :].T
40
- npt . assert_equal (apply_affine (aff , pts ), exp_res )
43
+ assert_array_equal (apply_affine (aff , pts ), exp_res )
41
44
# Check we get the same result as the previous implementation
42
- npt . assert_almost_equal (validated_apply_affine (aff , pts ), apply_affine (aff , pts ))
45
+ assert_almost_equal (validated_apply_affine (aff , pts ), apply_affine (aff , pts ))
43
46
# Check that lists work for inputs
44
- npt . assert_equal (apply_affine (aff .tolist (), pts .tolist ()), exp_res )
47
+ assert_array_equal (apply_affine (aff .tolist (), pts .tolist ()), exp_res )
45
48
# Check that it's the same as a banal implementation in the simple case
46
49
aff = np .array ([[0 , 2 , 0 , 10 ], [3 , 0 , 0 , 11 ], [0 , 0 , 4 , 12 ], [0 , 0 , 0 , 1 ]])
47
50
pts = np .array ([[1 , 2 , 3 ], [2 , 3 , 4 ], [4 , 5 , 6 ], [6 , 7 , 8 ]])
48
51
exp_res = (np .dot (aff [:3 , :3 ], pts .T ) + aff [:3 , 3 :4 ]).T
49
- npt . assert_equal (apply_affine (aff , pts ), exp_res )
52
+ assert_array_equal (apply_affine (aff , pts ), exp_res )
50
53
# That points can be reshaped and you'll get the same shape output
51
54
pts = pts .reshape ((2 , 2 , 3 ))
52
55
exp_res = exp_res .reshape ((2 , 2 , 3 ))
53
- npt . assert_equal (apply_affine (aff , pts ), exp_res )
56
+ assert_array_equal (apply_affine (aff , pts ), exp_res )
54
57
# That ND also works
55
58
for N in range (2 , 6 ):
56
59
aff = np .eye (N )
@@ -64,7 +67,7 @@ def test_apply_affine():
64
67
exp_pts = np .dot (aff , new_pts )
65
68
exp_pts = np .rollaxis (exp_pts [:- 1 , :], 0 , 2 )
66
69
exp_res = exp_pts .reshape ((2 , 3 , nd ))
67
- npt . assert_almost_equal (res , exp_res )
70
+ assert_array_almost_equal (res , exp_res )
68
71
69
72
70
73
def test_matrix_vector ():
@@ -75,39 +78,39 @@ def test_matrix_vector():
75
78
newmat , newvec = to_matvec (xform )
76
79
mat = xform [:- 1 , :- 1 ]
77
80
vec = xform [:- 1 , - 1 ]
78
- npt . assert_equal (newmat , mat )
79
- npt . assert_equal (newvec , vec )
80
- npt . assert_equal ( newvec .shape , (M - 1 ,) )
81
- npt . assert_equal (from_matvec (mat , vec ), xform )
81
+ assert_array_equal (newmat , mat )
82
+ assert_array_equal (newvec , vec )
83
+ assert newvec .shape == (M - 1 ,)
84
+ assert_array_equal (from_matvec (mat , vec ), xform )
82
85
# Check default translation works
83
86
xform_not = xform [:]
84
87
xform_not [:- 1 , :] = 0
85
- npt . assert_equal (from_matvec (mat ), xform )
86
- npt . assert_equal (from_matvec (mat , None ), xform )
88
+ assert_array_equal (from_matvec (mat ), xform )
89
+ assert_array_equal (from_matvec (mat , None ), xform )
87
90
# Check array-like works
88
91
newmat , newvec = to_matvec (xform .tolist ())
89
- npt . assert_equal (newmat , mat )
90
- npt . assert_equal (newvec , vec )
91
- npt . assert_equal (from_matvec (mat .tolist (), vec .tolist ()), xform )
92
+ assert_array_equal (newmat , mat )
93
+ assert_array_equal (newvec , vec )
94
+ assert_array_equal (from_matvec (mat .tolist (), vec .tolist ()), xform )
92
95
93
96
94
97
def test_append_diag ():
95
98
# Routine for appending diagonal elements
96
- npt . assert_equal (append_diag (np .diag ([2 , 3 , 1 ]), [1 ]),
99
+ assert_array_equal (append_diag (np .diag ([2 , 3 , 1 ]), [1 ]),
97
100
np .diag ([2 , 3 , 1 , 1 ]))
98
- npt . assert_equal (append_diag (np .diag ([2 , 3 , 1 ]), [1 , 1 ]),
101
+ assert_array_equal (append_diag (np .diag ([2 , 3 , 1 ]), [1 , 1 ]),
99
102
np .diag ([2 , 3 , 1 , 1 , 1 ]))
100
103
aff = np .array ([[2 , 0 , 0 ],
101
104
[0 , 3 , 0 ],
102
105
[0 , 0 , 1 ],
103
106
[0 , 0 , 1 ]])
104
- npt . assert_equal (append_diag (aff , [5 ], [9 ]),
107
+ assert_array_equal (append_diag (aff , [5 ], [9 ]),
105
108
[[2 , 0 , 0 , 0 ],
106
109
[0 , 3 , 0 , 0 ],
107
110
[0 , 0 , 0 , 1 ],
108
111
[0 , 0 , 5 , 9 ],
109
112
[0 , 0 , 0 , 1 ]])
110
- npt . assert_equal (append_diag (aff , [5 , 6 ], [9 , 10 ]),
113
+ assert_array_equal (append_diag (aff , [5 , 6 ], [9 , 10 ]),
111
114
[[2 , 0 , 0 , 0 , 0 ],
112
115
[0 , 3 , 0 , 0 , 0 ],
113
116
[0 , 0 , 0 , 0 , 1 ],
@@ -117,7 +120,7 @@ def test_append_diag():
117
120
aff = np .array ([[2 , 0 , 0 , 0 ],
118
121
[0 , 3 , 0 , 0 ],
119
122
[0 , 0 , 0 , 1 ]])
120
- npt . assert_equal (append_diag (aff , [5 ], [9 ]),
123
+ assert_array_equal (append_diag (aff , [5 ], [9 ]),
121
124
[[2 , 0 , 0 , 0 , 0 ],
122
125
[0 , 3 , 0 , 0 , 0 ],
123
126
[0 , 0 , 0 , 5 , 9 ],
@@ -133,24 +136,24 @@ def test_dot_reduce():
133
136
with pytest .raises (TypeError ):
134
137
dot_reduce ()
135
138
# Anything at all on its own, passes through
136
- npt . assert_equal ( dot_reduce (1 ), 1 )
137
- npt . assert_equal ( dot_reduce (None ), None )
138
- npt . assert_equal ( dot_reduce ([1 , 2 , 3 ]), [1 , 2 , 3 ])
139
+ assert dot_reduce (1 ) == 1
140
+ assert dot_reduce (None ) is None
141
+ assert dot_reduce ([1 , 2 , 3 ]) == [1 , 2 , 3 ]
139
142
# Two or more -> dot product
140
143
vec = [1 , 2 , 3 ]
141
144
mat = np .arange (4 , 13 ).reshape ((3 , 3 ))
142
- npt . assert_equal (dot_reduce (vec , mat ), np .dot (vec , mat ))
143
- npt . assert_equal (dot_reduce (mat , vec ), np .dot (mat , vec ))
145
+ assert_array_equal (dot_reduce (vec , mat ), np .dot (vec , mat ))
146
+ assert_array_equal (dot_reduce (mat , vec ), np .dot (mat , vec ))
144
147
mat2 = np .arange (13 , 22 ).reshape ((3 , 3 ))
145
- npt . assert_equal (dot_reduce (mat2 , vec , mat ),
146
- np .dot (mat2 , np .dot (vec , mat )))
147
- npt . assert_equal (dot_reduce (mat , vec , mat2 , ),
148
- np .dot (mat , np .dot (vec , mat2 )))
148
+ assert_array_equal (dot_reduce (mat2 , vec , mat ),
149
+ np .dot (mat2 , np .dot (vec , mat )))
150
+ assert_array_equal (dot_reduce (mat , vec , mat2 , ),
151
+ np .dot (mat , np .dot (vec , mat2 )))
149
152
150
153
151
154
def test_voxel_sizes ():
152
155
affine = np .diag ([2 , 3 , 4 , 1 ])
153
- npt . assert_almost_equal (voxel_sizes (affine ), [2 , 3 , 4 ])
156
+ assert_almost_equal (voxel_sizes (affine ), [2 , 3 , 4 ])
154
157
# Some example rotations
155
158
rotations = []
156
159
for x_rot , y_rot , z_rot in product ((0 , 0.4 ), (0 , 0.6 ), (0 , 0.8 )):
@@ -159,24 +162,24 @@ def test_voxel_sizes():
159
162
for n in range (2 , 10 ):
160
163
vox_sizes = np .arange (n ) + 4.1
161
164
aff = np .diag (list (vox_sizes ) + [1 ])
162
- npt . assert_almost_equal (voxel_sizes (aff ), vox_sizes )
165
+ assert_almost_equal (voxel_sizes (aff ), vox_sizes )
163
166
# Translations make no difference
164
167
aff [:- 1 , - 1 ] = np .arange (n ) + 10
165
- npt . assert_almost_equal (voxel_sizes (aff ), vox_sizes )
168
+ assert_almost_equal (voxel_sizes (aff ), vox_sizes )
166
169
# Does not have to be square
167
170
new_row = np .vstack ((np .zeros (n + 1 ), aff ))
168
- npt . assert_almost_equal (voxel_sizes (new_row ), vox_sizes )
171
+ assert_almost_equal (voxel_sizes (new_row ), vox_sizes )
169
172
new_col = np .c_ [np .zeros (n + 1 ), aff ]
170
- npt . assert_almost_equal (voxel_sizes (new_col ),
171
- [0 ] + list (vox_sizes ))
173
+ assert_almost_equal (voxel_sizes (new_col ),
174
+ [0 ] + list (vox_sizes ))
172
175
if n < 3 :
173
176
continue
174
177
# Rotations do not change the voxel size
175
178
for rotation in rotations :
176
179
rot_affine = np .eye (n + 1 )
177
180
rot_affine [:3 , :3 ] = rotation
178
181
full_aff = rot_affine .dot (aff )
179
- npt . assert_almost_equal (voxel_sizes (full_aff ), vox_sizes )
182
+ assert_almost_equal (voxel_sizes (full_aff ), vox_sizes )
180
183
181
184
182
185
def test_obliquity ():
@@ -186,6 +189,6 @@ def test_obliquity():
186
189
aligned [:- 1 , - 1 ] = [- 10 , - 10 , - 7 ]
187
190
R = from_matvec (euler2mat (x = 0.09 , y = 0.001 , z = 0.001 ), [0.0 , 0.0 , 0.0 ])
188
191
oblique = R .dot (aligned )
189
- npt . assert_almost_equal (obliquity (aligned ), [0.0 , 0.0 , 0.0 ])
190
- npt . assert_almost_equal (obliquity (oblique ) * 180 / pi ,
191
- [0.0810285 , 5.1569949 , 5.1569376 ])
192
+ assert_almost_equal (obliquity (aligned ), [0.0 , 0.0 , 0.0 ])
193
+ assert_almost_equal (obliquity (oblique ) * 180 / pi ,
194
+ [0.0810285 , 5.1569949 , 5.1569376 ])
0 commit comments