77#
88### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
99"""Nonlinear transforms."""
10+
1011import warnings
1112from functools import partial
1213from collections import namedtuple
2324)
2425from scipy .ndimage import map_coordinates
2526
27+ # Avoids circular imports
28+ try :
29+ from nitransforms ._version import __version__
30+ except ModuleNotFoundError : # pragma: no cover
31+ __version__ = "0+unknown"
32+
2633
2734class DenseFieldTransform (TransformBase ):
2835 """Represents dense field (voxel-wise) transforms."""
@@ -230,14 +237,11 @@ def __eq__(self, other):
230237
231238 def to_x5 (self , metadata = None ):
232239 """Return an :class:`~nitransforms.io.x5.X5Transform` representation."""
233- from ._version import __version__
234- from .io .x5 import X5Domain , X5Transform
235-
236240 metadata = {"WrittenBy" : f"NiTransforms { __version__ } " } | (metadata or {})
237241
238242 domain = None
239243 if (reference := self .reference ) is not None :
240- domain = X5Domain (
244+ domain = io . x5 . X5Domain (
241245 grid = True ,
242246 size = getattr (reference , "shape" , (0 , 0 , 0 )),
243247 mapping = reference .affine ,
@@ -246,7 +250,7 @@ def to_x5(self, metadata=None):
246250
247251 kinds = tuple ("space" for _ in range (self .ndim )) + ("vector" ,)
248252
249- return X5Transform (
253+ return io . x5 . X5Transform (
250254 type = "nonlinear" ,
251255 subtype = "densefield" ,
252256 representation = "displacements" ,
@@ -270,6 +274,7 @@ def from_filename(cls, filename, fmt="X5"):
270274
271275 if fmt == "X5" :
272276 from .io .x5 import from_filename as load_x5
277+
273278 x5_xfm = load_x5 (filename )[0 ]
274279 Domain = namedtuple ("Domain" , "affine shape" )
275280 reference = Domain (x5_xfm .domain .mapping , x5_xfm .domain .size )
@@ -333,14 +338,11 @@ def to_field(self, reference=None, dtype="float32"):
333338
334339 def to_x5 (self , metadata = None ):
335340 """Return an :class:`~nitransforms.io.x5.X5Transform` representation."""
336- from ._version import __version__
337- from .io .x5 import X5Transform , X5Domain
338-
339341 metadata = {"WrittenBy" : f"NiTransforms { __version__ } " } | (metadata or {})
340342
341343 domain = None
342344 if (reference := self .reference ) is not None :
343- domain = X5Domain (
345+ domain = io . x5 . X5Domain (
344346 grid = True ,
345347 size = getattr (reference , "shape" , (0 , 0 , 0 )),
346348 mapping = reference .affine ,
@@ -354,7 +356,7 @@ def to_x5(self, metadata=None):
354356
355357 kinds = tuple ("space" for _ in range (self .ndim )) + ("vector" ,)
356358
357- return X5Transform (
359+ return io . x5 . X5Transform (
358360 type = "nonlinear" ,
359361 subtype = "bspline" ,
360362 representation = "coefficients" ,
0 commit comments