-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathtest_io.py
More file actions
79 lines (65 loc) · 2.53 KB
/
test_io.py
File metadata and controls
79 lines (65 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import unittest
import numpy as np
import pytest
from anndata import AnnData
import mudata
from mudata import MuData
@pytest.fixture()
def mdata():
return MuData(
{
"mod1": AnnData(np.arange(0, 100, 0.1).reshape(-1, 10)),
"mod2": AnnData(np.arange(101, 2101, 1).reshape(-1, 20)),
}
)
@pytest.mark.usefixtures("filepath_h5mu", "filepath_zarr")
class TestMuData:
def test_write_read_h5mu_basic(self, mdata, filepath_h5mu):
mdata.write(filepath_h5mu)
mdata_ = mudata.read(filepath_h5mu)
assert list(mdata_.mod.keys()) == ["mod1", "mod2"]
assert mdata.mod["mod1"].X[51, 9] == pytest.approx(51.9)
assert mdata.mod["mod2"].X[42, 18] == pytest.approx(959)
def test_write_read_zarr_basic(self, mdata, filepath_zarr):
mdata.write_zarr(filepath_zarr)
mdata_ = mudata.read_zarr(filepath_zarr)
assert list(mdata_.mod.keys()) == ["mod1", "mod2"]
assert mdata.mod["mod1"].X[51, 9] == pytest.approx(51.9)
assert mdata.mod["mod2"].X[42, 18] == pytest.approx(959)
def test_write_read_h5mu_mod_obs_colname(self, mdata, filepath_h5mu):
mdata.obs["column"] = 0
mdata.obs["mod1:column"] = 1
mdata["mod1"].obs["column"] = 2
mdata.update()
mdata.pull_obs()
mdata.write(filepath_h5mu)
mdata_ = mudata.read(filepath_h5mu)
assert "column" in mdata_.obs.columns
assert "mod1:column" in mdata_.obs.columns
# 2 should supercede 1 on .update()
assert mdata_.obs["mod1:column"].values[0] == 2
def test_write_read_zarr_mod_obs_colname(self, mdata, filepath_zarr):
mdata.obs["column"] = 0
mdata.obs["mod1:column"] = 1
mdata["mod1"].obs["column"] = 2
mdata.update()
mdata.pull_obs()
mdata.write_zarr(filepath_zarr)
mdata_ = mudata.read_zarr(filepath_zarr)
assert "column" in mdata_.obs.columns
assert "mod1:column" in mdata_.obs.columns
# 2 should supercede 1 on .update()
assert mdata_.obs["mod1:column"].values[0] == 2
@pytest.mark.usefixtures("filepath_h5mu")
class TestMuDataMod:
def test_h5mu_mod_backed(self, mdata, filepath_h5mu):
mdata.write(
filepath_h5mu,
)
mdata_ = mudata.read_h5mu(filepath_h5mu, backed="r")
assert list(mdata_.mod.keys()) == ["mod1", "mod2"]
# When backed, the matrix is read-only
with pytest.raises(OSError):
mdata_.mod["mod1"].X[10, 5] = 0
if __name__ == "__main__":
unittest.main()