-
Notifications
You must be signed in to change notification settings - Fork 148
/
test_inplace_subset.py
82 lines (62 loc) · 2.69 KB
/
test_inplace_subset.py
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
80
81
82
from __future__ import annotations
import numpy as np
import pytest
from scipy import sparse
from anndata.tests.helpers import (
as_dense_dask_array,
assert_equal,
gen_adata,
)
from anndata.utils import asarray
@pytest.fixture(
params=[np.array, sparse.csr_matrix, sparse.csc_matrix, as_dense_dask_array],
ids=["np_array", "scipy_csr", "scipy_csc", "dask_array"],
)
def matrix_type(request):
return request.param
def subset_dim(adata, *, obs=slice(None), var=slice(None)):
# Should probably get used for test_inplace_subset_var and test_inplace_subset_obs
from anndata._core.index import _subset
return _subset(adata, (obs, var))
# TODO: Test values of .uns
def test_inplace_subset_var(matrix_type, subset_func):
orig = gen_adata((30, 30), X_type=matrix_type)
subset_idx = subset_func(orig.var_names)
modified = orig.copy()
from_view = orig[:, subset_idx].copy()
modified._inplace_subset_var(subset_idx)
assert_equal(asarray(from_view.X), asarray(modified.X), exact=True)
assert_equal(from_view.obs, modified.obs, exact=True)
assert_equal(from_view.var, modified.var, exact=True)
for k in from_view.obsm:
assert_equal(from_view.obsm[k], modified.obsm[k], exact=True)
assert_equal(orig.obsm[k], modified.obsm[k], exact=True)
for k in from_view.varm:
assert_equal(from_view.varm[k], modified.varm[k], exact=True)
for k in from_view.layers:
assert_equal(from_view.layers[k], modified.layers[k], exact=True)
def test_inplace_subset_obs(matrix_type, subset_func):
orig = gen_adata((30, 30), X_type=matrix_type)
subset_idx = subset_func(orig.obs_names)
modified = orig.copy()
from_view = orig[subset_idx, :].copy()
modified._inplace_subset_obs(subset_idx)
assert_equal(asarray(from_view.X), asarray(modified.X), exact=True)
assert_equal(from_view.obs, modified.obs, exact=True)
assert_equal(from_view.var, modified.var, exact=True)
for k in from_view.obsm:
assert_equal(from_view.obsm[k], modified.obsm[k], exact=True)
for k in from_view.varm:
assert_equal(from_view.varm[k], modified.varm[k], exact=True)
assert_equal(orig.varm[k], modified.varm[k], exact=True)
for k in from_view.layers:
assert_equal(from_view.layers[k], modified.layers[k], exact=True)
@pytest.mark.parametrize("dim", ("obs", "var"))
def test_inplace_subset_no_X(subset_func, dim):
orig = gen_adata((30, 30))
del orig.X
subset_idx = subset_func(getattr(orig, f"{dim}_names"))
modified = orig.copy()
from_view = subset_dim(orig, **{dim: subset_idx}).copy()
getattr(modified, f"_inplace_subset_{dim}")(subset_idx)
assert_equal(modified, from_view, exact=True)