7
7
#
8
8
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
9
9
"""Nonlinear transforms."""
10
+
10
11
import warnings
11
12
from functools import partial
12
13
from collections import namedtuple
23
24
)
24
25
from scipy .ndimage import map_coordinates
25
26
27
+ # Avoids circular imports
28
+ try :
29
+ from nitransforms ._version import __version__
30
+ except ModuleNotFoundError : # pragma: no cover
31
+ __version__ = "0+unknown"
32
+
26
33
27
34
class DenseFieldTransform (TransformBase ):
28
35
"""Represents dense field (voxel-wise) transforms."""
@@ -230,14 +237,11 @@ def __eq__(self, other):
230
237
231
238
def to_x5 (self , metadata = None ):
232
239
"""Return an :class:`~nitransforms.io.x5.X5Transform` representation."""
233
- from ._version import __version__
234
- from .io .x5 import X5Domain , X5Transform
235
-
236
240
metadata = {"WrittenBy" : f"NiTransforms { __version__ } " } | (metadata or {})
237
241
238
242
domain = None
239
243
if (reference := self .reference ) is not None :
240
- domain = X5Domain (
244
+ domain = io . x5 . X5Domain (
241
245
grid = True ,
242
246
size = getattr (reference , "shape" , (0 , 0 , 0 )),
243
247
mapping = reference .affine ,
@@ -246,7 +250,7 @@ def to_x5(self, metadata=None):
246
250
247
251
kinds = tuple ("space" for _ in range (self .ndim )) + ("vector" ,)
248
252
249
- return X5Transform (
253
+ return io . x5 . X5Transform (
250
254
type = "nonlinear" ,
251
255
subtype = "densefield" ,
252
256
representation = "displacements" ,
@@ -270,6 +274,7 @@ def from_filename(cls, filename, fmt="X5"):
270
274
271
275
if fmt == "X5" :
272
276
from .io .x5 import from_filename as load_x5
277
+
273
278
x5_xfm = load_x5 (filename )[0 ]
274
279
Domain = namedtuple ("Domain" , "affine shape" )
275
280
reference = Domain (x5_xfm .domain .mapping , x5_xfm .domain .size )
@@ -333,14 +338,11 @@ def to_field(self, reference=None, dtype="float32"):
333
338
334
339
def to_x5 (self , metadata = None ):
335
340
"""Return an :class:`~nitransforms.io.x5.X5Transform` representation."""
336
- from ._version import __version__
337
- from .io .x5 import X5Transform , X5Domain
338
-
339
341
metadata = {"WrittenBy" : f"NiTransforms { __version__ } " } | (metadata or {})
340
342
341
343
domain = None
342
344
if (reference := self .reference ) is not None :
343
- domain = X5Domain (
345
+ domain = io . x5 . X5Domain (
344
346
grid = True ,
345
347
size = getattr (reference , "shape" , (0 , 0 , 0 )),
346
348
mapping = reference .affine ,
@@ -354,7 +356,7 @@ def to_x5(self, metadata=None):
354
356
355
357
kinds = tuple ("space" for _ in range (self .ndim )) + ("vector" ,)
356
358
357
- return X5Transform (
359
+ return io . x5 . X5Transform (
358
360
type = "nonlinear" ,
359
361
subtype = "bspline" ,
360
362
representation = "coefficients" ,
0 commit comments