|
1 | 1 | import os |
2 | 2 |
|
| 3 | +import numpy as np |
3 | 4 | import pytest |
4 | | -from nexusformat.nexus.tree import (NXdata, NXentry, NXFile, NXroot, nxload, |
5 | | - nxopen) |
| 5 | +from nexusformat.nexus.tree import (NXdata, NXentry, NXfield, NXFile, NXroot, |
| 6 | + nxload, nxopen) |
6 | 7 |
|
7 | 8 |
|
8 | 9 | def test_file_creation(tmpdir): |
@@ -80,3 +81,29 @@ def test_file_context_manager(tmpdir, field1, field2): |
80 | 81 | assert "entry/data/f2" in w2 |
81 | 82 | assert "signal" in w2["entry/data"].attrs |
82 | 83 | assert "axes" in w2["entry/data"].attrs |
| 84 | + |
| 85 | + |
| 86 | +def test_read_lazy_field_on_copy(tmpdir): |
| 87 | + |
| 88 | + filename = os.path.join(tmpdir, "file.nxs") |
| 89 | + shape = (2000, 2000) |
| 90 | + root = NXroot(NXentry(NXdata( |
| 91 | + NXfield(np.zeros(shape, dtype=np.int64), name="signal"), |
| 92 | + name="data"))) |
| 93 | + root["entry/data/signal_mask"] = NXfield(np.zeros(shape, dtype=bool)) |
| 94 | + root["entry/data/signal"].attrs["mask"] = "signal_mask" |
| 95 | + root.save(filename, mode="w") |
| 96 | + del root |
| 97 | + |
| 98 | + root = nxload(filename, "rw") |
| 99 | + src = root["entry/data"] |
| 100 | + wrapper = NXdata(src["signal_mask"], name=src.nxname) |
| 101 | + wrapper.nxgroup = src.nxgroup |
| 102 | + field = wrapper.nxsignal |
| 103 | + assert field._uncopied_data is not None |
| 104 | + assert field._uncopied_data[1] == field.nxpath |
| 105 | + |
| 106 | + arr = field[()] |
| 107 | + assert arr.shape == shape |
| 108 | + assert arr.dtype == bool |
| 109 | + assert field._uncopied_data is None |
0 commit comments