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