Skip to content

Commit cdc7502

Browse files
committed
enh: add unit tests
1 parent 5f1c1c4 commit cdc7502

File tree

4 files changed

+79
-4
lines changed

4 files changed

+79
-4
lines changed

nitransforms/io/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
"""
1010
Read and write transforms.
1111
12-
.. currentmodule:: nitransforms
12+
.. currentmodule:: nitransforms.io
1313
1414
.. autosummary::
1515
:toctree: ../generated
1616
17-
transform
17+
io
1818
"""
1919
from .lta import LinearTransform, LinearTransformArray, VolumeGeometry
2020

nitransforms/io/itk.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,10 @@ def __init__(self,
9090
"""Initialize with (optionally) a list of transforms."""
9191
super().__init__(binaryblock, endianness, check)
9292
self._xforms = []
93-
for mat in xforms or []:
93+
for i, mat in enumerate(xforms or []):
9494
xfm = ITKLinearTransform()
9595
xfm['parameters'] = mat
96+
xfm['index'] = i + 1
9697
self._xforms.append(xfm)
9798

9899
def __getitem__(self, idx):

nitransforms/tests/data/itktflist.tfm

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#Insight Transform File V1.0
2+
#Transform 1
3+
Transform: MatrixOffsetTransformBase_double_3_3
4+
Parameters: 1 0 0 0 1 0 0 0 1 0 0 0
5+
FixedParameters: 10 10 10
6+
7+
#Transform 2
8+
Transform: MatrixOffsetTransformBase_double_3_3
9+
Parameters: 1 0 0 0 1 0 0 0 1 0 0 0
10+
FixedParameters: 10 10 10
11+
12+
#Transform 3
13+
Transform: MatrixOffsetTransformBase_double_3_3
14+
Parameters: 1 0 0 0 1 0 0 0 1 0 0 0
15+
FixedParameters: 10 10 10
16+
17+
#Transform 4
18+
Transform: MatrixOffsetTransformBase_double_3_3
19+
Parameters: 1 0 0 0 1 0 0 0 1 0 0 0
20+
FixedParameters: 10 10 10
21+
22+
#Transform 5
23+
Transform: MatrixOffsetTransformBase_double_3_3
24+
Parameters: -1.53626 0.71973 -0.639856 -0.190759 -1.80082 -0.915885 0.502537 1.12532 0.275748 0.393413 1.13855 0.761131
25+
FixedParameters: -0.0993171 0.364984 1.99264
26+
27+
#Transform 6
28+
Transform: MatrixOffsetTransformBase_double_3_3
29+
Parameters: -0.130507 -1.03017 2.08189 -1.51723 1.37849 -0.0890962 -0.656323 0.242694 2.15801 -1.26689 0.367131 1.23616
30+
FixedParameters: 0.626607 0.15351 1.24982
31+
32+
#Transform 7
33+
Transform: MatrixOffsetTransformBase_double_3_3
34+
Parameters: -1.55395 -0.36383 -0.17749 1.3387 -0.384534 -0.901462 -1.06598 -0.448228 -1.07535 1.92599 0.454696 0.576697
35+
FixedParameters: -0.425602 0.333406 -1.14957
36+
37+
#Transform 8
38+
Transform: MatrixOffsetTransformBase_double_3_3
39+
Parameters: 0.723719 -1.05617 -0.800562 -2.47048 -1.76301 -1.4447 -0.749896 1.29774 -1.48893 1.02789 0.65017 -1.48326
40+
FixedParameters: 0.800882 -1.20202 1.25495
41+
42+
#Transform 9
43+
Transform: MatrixOffsetTransformBase_double_3_3
44+
Parameters: 1.24025 -0.77628 0.618013 -0.523829 1.09471 1.66921 0.73753 -1.33588 -0.627659 -0.449913 -0.00124181 0.21433
45+
FixedParameters: -0.226504 -0.877893 0.2608

nitransforms/tests/test_io.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import numpy as np
55

66
from ..io import (
7+
itk,
78
VolumeGeometry as VG,
89
LinearTransform as LT,
910
LinearTransformArray as LTA,
1011
)
1112

12-
1313
def test_VolumeGeometry(tmpdir, get_testdata):
1414
vg = VG()
1515
assert vg['valid'] == 0
@@ -55,3 +55,32 @@ def test_LinearTransformArray(tmpdir, data_path):
5555
with open(outlta) as fp:
5656
lta2 = LTA.from_fileobj(fp)
5757
assert np.allclose(lta['xforms'][0]['m_L'], lta2['xforms'][0]['m_L'])
58+
59+
60+
def test_ITKLinearTransformArray(tmpdir, data_path):
61+
tmpdir.chdir()
62+
63+
with open(str(data_path / 'itktflist.tfm')) as f:
64+
text = f.read()
65+
f.seek(0)
66+
itklist = itk.ITKLinearTransformArray.from_fileobj(f)
67+
68+
assert itklist['nxforms'] == 9
69+
assert text == itklist.to_string()
70+
71+
itklist = itk.ITKLinearTransformArray(
72+
xforms=[np.around(np.random.normal(size=(4, 4)), decimals=5)
73+
for _ in range(4)])
74+
75+
assert itklist['nxforms'] == 4
76+
assert itklist['xforms'][1].structarr['index'] == 2
77+
78+
xfm = itklist['xforms'][1]
79+
xfm['index'] = 1
80+
with open('extracted.tfm', 'w') as f:
81+
f.write(xfm.to_string())
82+
83+
with open('extracted.tfm') as f:
84+
xfm2 = itk.ITKLinearTransform.from_fileobj(f)
85+
assert np.allclose(xfm.structarr['parameters'][:3, ...],
86+
xfm2.structarr['parameters'][:3, ...])

0 commit comments

Comments
 (0)