Skip to content

Commit 4c73cd6

Browse files
committed
enh: more thorough testing of LinearParameters base class
1 parent e8f73f5 commit 4c73cd6

File tree

2 files changed

+40
-7
lines changed

2 files changed

+40
-7
lines changed

nitransforms/io/base.py

+23-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,21 @@ def __array__(self):
3131

3232

3333
class LinearParameters(StringBasedStruct):
34-
"""A string-based structure for linear transforms."""
34+
"""
35+
A string-based structure for linear transforms.
36+
37+
Examples
38+
--------
39+
>>> lp = LinearParameters()
40+
>>> np.all(lp.structarr['parameters'] == np.eye(4))
41+
True
42+
43+
>>> p = np.diag([2., 2., 2., 1.])
44+
>>> lp = LinearParameters(p)
45+
>>> np.all(lp.structarr['parameters'] == p)
46+
True
47+
48+
"""
3549

3650
template_dtype = np.dtype([
3751
('parameters', 'f4', (4, 4)),
@@ -59,6 +73,11 @@ def from_fileobj(cls, fileobj, check=True):
5973
"""Read the struct from a file object."""
6074
return cls.from_string(fileobj.read())
6175

76+
@classmethod
77+
def from_string(cls, string):
78+
"""Read the struct from string."""
79+
raise NotImplementedError
80+
6281

6382
def _read_mat(byte_stream):
6483
mjv, _ = get_matfile_version(byte_stream)
@@ -67,5 +86,7 @@ def _read_mat(byte_stream):
6786
elif mjv == 1:
6887
reader = MatFile5Reader(byte_stream)
6988
elif mjv == 2:
70-
raise TransformFileError('Please use HDF reader for matlab v7.3 files')
89+
raise TransformFileError('Please use HDF reader for Matlab v7.3 files')
90+
else:
91+
raise TransformFileError('Not a Matlab file.')
7192
return reader.get_variables()

nitransforms/tests/test_io.py

+17-5
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
LinearTransform as LT,
1414
LinearTransformArray as LTA,
1515
)
16-
from ..io.base import _read_mat, TransformFileError
16+
from ..io.base import _read_mat, LinearParameters, TransformFileError
1717

1818
LPS = np.diag([-1, -1, 1, 1])
1919
ITK_MAT = LPS.dot(np.ones((4, 4)).dot(LPS))
@@ -145,6 +145,17 @@ def test_ITKLinearTransformArray(tmpdir, data_path):
145145
xfm2 = itk.ITKLinearTransformArray.from_fileobj(f)
146146

147147

148+
def test_LinearParameters(tmpdir):
149+
"""Just pushes coverage up."""
150+
tmpdir.join('file.txt').write('')
151+
152+
with pytest.raises(NotImplementedError):
153+
LinearParameters.from_string('')
154+
155+
with pytest.raises(NotImplementedError):
156+
LinearParameters.from_fileobj(tmpdir.join('file.txt').open())
157+
158+
148159
@pytest.mark.parametrize('matlab_ver', ['4', '5'])
149160
def test_read_mat1(tmpdir, matlab_ver):
150161
"""Test read from matlab."""
@@ -158,16 +169,17 @@ def test_read_mat1(tmpdir, matlab_ver):
158169
assert np.all(mdict['val'] == np.ones((3,)))
159170

160171

161-
def test_read_mat2(tmpdir, monkeypatch):
172+
@pytest.mark.parametrize('matlab_ver', [-1] + list(range(2, 7)))
173+
def test_read_mat2(tmpdir, monkeypatch, matlab_ver):
162174
"""Check read matlab raises adequate errors."""
163175
from ..io import base
164176

165-
def _mockreturn(arg):
166-
return (2, 0)
167-
168177
tmpdir.chdir()
169178
savemat('val.mat', {'val': np.ones((3,))})
170179

180+
def _mockreturn(arg):
181+
return (matlab_ver, 0)
182+
171183
with monkeypatch.context() as m:
172184
m.setattr(base, 'get_matfile_version', _mockreturn)
173185
with pytest.raises(TransformFileError):

0 commit comments

Comments
 (0)