|
3 | 3 |
|
4 | 4 | import anndata as ad |
5 | 5 | from anndata._core.anndata import ImplicitModificationWarning |
| 6 | +from anndata.tests.helpers import assert_equal |
6 | 7 |
|
7 | 8 |
|
8 | 9 | # ------------------------------------------------------------------------------- |
@@ -37,7 +38,9 @@ def adata_raw(): |
37 | 38 | np.array(data), obs=obs_dict, var=var_dict, uns=uns_dict, dtype="int32" |
38 | 39 | ) |
39 | 40 | adata.raw = adata |
40 | | - return adata[:, [0, 1]] |
| 41 | + # Make them different shapes |
| 42 | + adata = adata[:, [0, 1]].copy() |
| 43 | + return adata |
41 | 44 |
|
42 | 45 |
|
43 | 46 | # ------------------------------------------------------------------------------- |
@@ -65,22 +68,43 @@ def test_raw_of_view(adata_raw): |
65 | 68 |
|
66 | 69 |
|
67 | 70 | def test_raw_rw(adata_raw, backing_h5ad): |
68 | | - with pytest.warns( |
69 | | - ImplicitModificationWarning, match="Initializing view as actual" |
70 | | - ): # TODO: don’t modify adata just to write it |
71 | | - adata_raw.write(backing_h5ad) |
72 | | - adata_raw = ad.read(backing_h5ad) |
| 71 | + adata_raw.write(backing_h5ad) |
| 72 | + adata_read = ad.read(backing_h5ad) |
| 73 | + |
| 74 | + assert_equal(adata_read, adata_raw, exact=True) |
| 75 | + |
| 76 | + assert adata_raw.var_names.tolist() == ["var1", "var2"] |
| 77 | + assert adata_raw.raw.var_names.tolist() == ["var1", "var2", "var3"] |
| 78 | + assert adata_raw.raw[:, 0].X.tolist() == [[1], [4], [7]] |
| 79 | + |
| 80 | + |
| 81 | +def test_raw_view_rw(adata_raw, backing_h5ad): |
| 82 | + # Make sure it still writes correctly if the object is a view |
| 83 | + adata_raw_view = adata_raw[:, adata_raw.var_names] |
| 84 | + assert_equal(adata_raw_view, adata_raw) |
| 85 | + with pytest.warns(ImplicitModificationWarning, match="Initializing view as actual"): |
| 86 | + adata_raw_view.write(backing_h5ad) |
| 87 | + adata_read = ad.read(backing_h5ad) |
| 88 | + |
| 89 | + assert_equal(adata_read, adata_raw_view, exact=True) |
73 | 90 |
|
74 | 91 | assert adata_raw.var_names.tolist() == ["var1", "var2"] |
75 | 92 | assert adata_raw.raw.var_names.tolist() == ["var1", "var2", "var3"] |
76 | 93 | assert adata_raw.raw[:, 0].X.tolist() == [[1], [4], [7]] |
77 | 94 |
|
78 | 95 |
|
79 | 96 | def test_raw_backed(adata_raw, backing_h5ad): |
80 | | - with pytest.warns( |
81 | | - ImplicitModificationWarning, match="Initializing view as actual" |
82 | | - ): # TODO: don’t modify adata just to write it |
83 | | - adata_raw.filename = backing_h5ad |
| 97 | + adata_raw.filename = backing_h5ad |
| 98 | + |
| 99 | + assert adata_raw.var_names.tolist() == ["var1", "var2"] |
| 100 | + assert adata_raw.raw.var_names.tolist() == ["var1", "var2", "var3"] |
| 101 | + if adata_raw.raw[:, 0].X.shape[1] != 1: |
| 102 | + pytest.xfail("Raw is broken for backed slices") |
| 103 | + assert adata_raw.raw[:, 0].X[:].tolist() == [[1], [4], [7]] |
| 104 | + |
| 105 | + |
| 106 | +def test_raw_view_backed(adata_raw, backing_h5ad): |
| 107 | + adata_raw.filename = backing_h5ad |
84 | 108 |
|
85 | 109 | assert adata_raw.var_names.tolist() == ["var1", "var2"] |
86 | 110 | assert adata_raw.raw.var_names.tolist() == ["var1", "var2", "var3"] |
|
0 commit comments