Skip to content

Commit 91afb5d

Browse files
Julien MarabottoJulien Marabotto
Julien Marabotto
authored and
Julien Marabotto
committed
Implement ndim
Tranformbase -> now raises TypeError; Affine -> overshadows TransformBase's property and returns self._matrix.ndim + 1. To be applied to LinearTransformMapping (Currently TypeError)
1 parent aaa4637 commit 91afb5d

File tree

6 files changed

+37
-6
lines changed

6 files changed

+37
-6
lines changed

commandline_for_tests.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Terminal command line to test code:
2+
3+
>>> TEST_DATA_HOME=$HOME/Desktop/nitransforms-tests python3 -m pytest
4+
5+
Also works for a path to a specific test, eg:
6+
7+
>>> TEST_DATA_HOME=$HOME/Desktop/nitransforms-tests python3 -m pytest ~/workspace/nitransforms/nitransforms/tests/test_base.py::test_TransformBase

nitransforms/.DS_Store

6 KB
Binary file not shown.

nitransforms/base.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from nibabel import funcs as _nbfuncs
1616
from nibabel.nifti1 import intent_codes as INTENT_CODES
1717
from nibabel.cifti2 import Cifti2Image
18+
from nitransforms import linear as nitl
1819

1920
EQUALITY_TOL = 1e-5
2021

@@ -177,7 +178,8 @@ def __ne__(self, other):
177178
class TransformBase:
178179
"""Abstract image class to represent transforms."""
179180

180-
__slots__ = ("_reference",)
181+
__slots__ = ("_reference", "_ndim",)
182+
181183

182184
def __init__(self, reference=None):
183185
"""Instantiate a transform."""
@@ -211,6 +213,13 @@ def reference(self):
211213
if self._reference is None:
212214
warnings.warn("Reference space not set")
213215
return self._reference
216+
217+
@property
218+
def reference(_ndim):
219+
"""Access a reference space where data will be resampled onto."""
220+
if _ndim._reference is None:
221+
warnings.warn("Reference space not set")
222+
return _ndim._reference
214223

215224
@reference.setter
216225
def reference(self, image):
@@ -219,7 +228,8 @@ def reference(self, image):
219228
@property
220229
def ndim(self):
221230
"""Access the dimensions of the reference space."""
222-
return self.reference.ndim
231+
#return self.reference.ndim
232+
raise TypeError("TransformBase has no dimensions")
223233

224234
def map(self, x, inverse=False):
225235
r"""
@@ -287,3 +297,5 @@ def _as_homogeneous(xyz, dtype="float32", dim=3):
287297
def _apply_affine(x, affine, dim):
288298
"""Get the image array's indexes corresponding to coordinates."""
289299
return affine.dot(_as_homogeneous(x, dim=dim).T)[:dim, ...].T
300+
301+
#import pdb; pdb.set_trace()

nitransforms/io/.DS_Store

6 KB
Binary file not shown.

nitransforms/linear.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ def matrix(self):
143143
"""Access the internal representation of this affine."""
144144
return self._matrix
145145

146+
@property
147+
def ndim(self):
148+
"""Access the internal representation of this affine."""
149+
return self._matrix.ndim + 1
150+
146151
def map(self, x, inverse=False):
147152
r"""
148153
Apply :math:`y = f(x)`.
@@ -270,7 +275,7 @@ def __repr__(self):
270275
271276
"""
272277
return repr(self.matrix)
273-
278+
274279

275280
class LinearTransformsMapping(Affine):
276281
"""Represents a series of linear transforms."""
@@ -533,4 +538,4 @@ def load(filename, fmt=None, reference=None, moving=None):
533538
if isinstance(xfm, LinearTransformsMapping) and len(xfm) == 1:
534539
xfm = xfm[0]
535540

536-
return xfm
541+
return xfm

nitransforms/tests/test_base.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ def _to_hdf5(klass, x5_root):
9595
# Test identity transform
9696
xfm = TransformBase()
9797
xfm.reference = fname
98-
assert xfm.ndim == 3
98+
with pytest.raises(TypeError):
99+
_ = xfm.ndim
99100
moved = apply(xfm, fname, order=0)
100101
assert np.all(
101102
imgdata == np.asanyarray(moved.dataobj, dtype=moved.get_data_dtype())
@@ -104,12 +105,18 @@ def _to_hdf5(klass, x5_root):
104105
# Test identity transform - setting reference
105106
xfm = TransformBase()
106107
xfm.reference = fname
107-
assert xfm.ndim == 3
108+
with pytest.raises(TypeError):
109+
_ = xfm.ndim
108110
moved = apply(xfm, str(fname), reference=fname, order=0)
109111
assert np.all(
110112
imgdata == np.asanyarray(moved.dataobj, dtype=moved.get_data_dtype())
111113
)
112114

115+
#Test ndim returned by affine
116+
#breakpoint()
117+
assert nitl.Affine().ndim == 3
118+
assert nitl.LinearTransformsMapping(xfm.matrix).ndim == 4
119+
113120
# Test applying to Gifti
114121
gii = nb.gifti.GiftiImage(
115122
darrays=[

0 commit comments

Comments
 (0)