Skip to content

Commit 2d3ba2f

Browse files
committed
test: cover x5.from_filename
1 parent a22a6d0 commit 2d3ba2f

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

nitransforms/tests/test_x5.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import numpy as np
2+
import pytest
23
from h5py import File as H5File
34

4-
from ..io.x5 import X5Transform, X5Domain, to_filename
5+
from ..io.x5 import X5Transform, X5Domain, to_filename, from_filename
56

67

78
def test_x5_transform_defaults():
@@ -39,3 +40,38 @@ def test_to_filename(tmp_path):
3940
assert "0" in grp
4041
assert grp["0"].attrs["Type"] == "linear"
4142
assert grp["0"].attrs["ArrayLength"] == 1
43+
44+
45+
def test_from_filename_roundtrip(tmp_path):
46+
domain = X5Domain(grid=False, size=(5, 5, 5), mapping=np.eye(4))
47+
node = X5Transform(
48+
type="linear",
49+
transform=np.eye(4),
50+
dimension_kinds=("space", "space", "space", "vector"),
51+
domain=domain,
52+
metadata={"foo": "bar"},
53+
inverse=np.eye(4),
54+
)
55+
fname = tmp_path / "test.x5"
56+
to_filename(fname, [node])
57+
58+
x5_list = from_filename(fname)
59+
assert len(x5_list) == 1
60+
x5 = x5_list[0]
61+
assert x5.type == node.type
62+
assert np.allclose(x5.transform, node.transform)
63+
assert x5.dimension_kinds == list(node.dimension_kinds)
64+
assert x5.domain.grid == domain.grid
65+
assert x5.domain.size == tuple(domain.size)
66+
assert np.allclose(x5.domain.mapping, domain.mapping)
67+
assert x5.metadata == node.metadata
68+
assert np.allclose(x5.inverse, node.inverse)
69+
70+
71+
def test_from_filename_invalid(tmp_path):
72+
fname = tmp_path / "invalid.h5"
73+
with H5File(fname, "w") as f:
74+
f.attrs["Format"] = "NOTX5"
75+
76+
with pytest.raises(ValueError):
77+
from_filename(fname)

0 commit comments

Comments
 (0)