7
7
#
8
8
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
9
9
"""Linear transforms."""
10
- import numpy as np
11
10
from pathlib import Path
11
+ import warnings
12
+ import numpy as np
12
13
13
14
from nibabel .loadsave import load as loadimg
14
15
from nibabel .affines import from_matvec , voxel_sizes , obliquity
@@ -40,6 +41,13 @@ def __init__(self, matrix=None, reference=None):
40
41
41
42
Examples
42
43
--------
44
+ >>> xfm = Affine(reference=datadir / 'someones_anatomy.nii.gz')
45
+ >>> xfm.matrix # doctest: +NORMALIZE_WHITESPACE
46
+ array([[[1., 0., 0., 0.],
47
+ [0., 1., 0., 0.],
48
+ [0., 0., 1., 0.],
49
+ [0., 0., 0., 1.]]])
50
+
43
51
>>> xfm = Affine([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])
44
52
>>> xfm.matrix # doctest: +NORMALIZE_WHITESPACE
45
53
array([[[1, 0, 0, 4],
@@ -62,8 +70,6 @@ def __init__(self, matrix=None, reference=None):
62
70
), 'affine matrix is not square'
63
71
64
72
if reference :
65
- if isinstance (reference , str ):
66
- reference = loadimg (reference )
67
73
self .reference = reference
68
74
69
75
def __eq__ (self , other ):
@@ -78,9 +84,10 @@ def __eq__(self, other):
78
84
True
79
85
80
86
"""
81
- if not self ._reference == other ._reference :
82
- return False
83
- return np .allclose (self .matrix , other .matrix , rtol = EQUALITY_TOL )
87
+ _eq = np .allclose (self .matrix , other .matrix , rtol = EQUALITY_TOL )
88
+ if _eq and self ._reference != other ._reference :
89
+ warnings .warn ('Affines are equal, but references do not match.' )
90
+ return _eq
84
91
85
92
@property
86
93
def matrix (self ):
@@ -257,9 +264,7 @@ def load(filename, fmt='X5', reference=None):
257
264
else :
258
265
raise NotImplementedError
259
266
260
- if reference and isinstance (reference , str ):
261
- reference = loadimg (reference )
262
- return Affine (matrix , reference )
267
+ return Affine (matrix , reference = reference )
263
268
264
269
265
270
def _fsl_aff_adapt (space ):
0 commit comments