File: test_inplace_subset.py

package info (click to toggle)
python-anndata 0.12.0~rc1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,704 kB
  • sloc: python: 19,721; makefile: 22; sh: 14
file content (96 lines) | stat: -rw-r--r-- 2,942 bytes parent folder | download
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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,
        sparse.csr_array,
        sparse.csc_array,
        as_dense_dask_array,
    ],
    ids=[
        "np_array",
        "scipy_csr",
        "scipy_csc",
        "scipy_csr_array",
        "scipy_csc_array",
        "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)