|
1 | 1 | import numpy as np
|
| 2 | +import pytest |
2 | 3 | from h5py import File as H5File
|
3 | 4 |
|
4 |
| -from ..io.x5 import X5Transform, X5Domain, to_filename |
| 5 | +from ..io.x5 import X5Transform, X5Domain, to_filename, from_filename |
5 | 6 |
|
6 | 7 |
|
7 | 8 | def test_x5_transform_defaults():
|
@@ -39,3 +40,38 @@ def test_to_filename(tmp_path):
|
39 | 40 | assert "0" in grp
|
40 | 41 | assert grp["0"].attrs["Type"] == "linear"
|
41 | 42 | 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