Skip to content

Commit 1cd5a00

Browse files
authored
Scipy 1.15 compat, some test refactors (#3409)
1 parent e3efba2 commit 1cd5a00

File tree

4 files changed

+79
-141
lines changed

4 files changed

+79
-141
lines changed

src/scanpy/tools/_rank_genes_groups.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ def filter_rank_genes_groups(
854854

855855
if not use_logfolds or not use_fraction:
856856
sub_X = adata.raw[:, var_names].X if use_raw else adata[:, var_names].X
857-
in_group = adata.obs[groupby] == cluster
857+
in_group = (adata.obs[groupby] == cluster).to_numpy()
858858
X_in = sub_X[in_group]
859859
X_out = sub_X[~in_group]
860860

tests/test_backed.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ def test_log1p_backed_errors(backed_adata):
9191

9292
def test_scatter_backed(backed_adata):
9393
sc.pp.pca(backed_adata, chunked=True)
94-
sc.pl.scatter(backed_adata, color="0", basis="pca")
94+
sc.pl.scatter(backed_adata, color="0", basis="pca", show=False)
9595

9696

9797
def test_dotplot_backed(backed_adata):
98-
sc.pl.dotplot(backed_adata, ["0", "1", "2", "3"], groupby="cat")
98+
sc.pl.dotplot(backed_adata, ["0", "1", "2", "3"], groupby="cat", show=False)
Lines changed: 74 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,159 +1,96 @@
11
from __future__ import annotations
22

33
import numpy as np
4+
import pytest
45

56
from scanpy.tools import filter_rank_genes_groups, rank_genes_groups
67
from testing.scanpy._helpers.data import pbmc68k_reduced
78

8-
names_no_reference = np.array(
9+
NAMES_NO_REF = [
10+
["CD3D", "ITM2A", "CD3D", "CCL5", "CD7", "nan", "CD79A", "nan", "NKG7", "LYZ"],
11+
["CD3E", "CD3D", "nan", "NKG7", "CD3D", "AIF1", "CD79B", "nan", "GNLY", "CST3"],
12+
["IL32", "RPL39", "nan", "CST7", "nan", "nan", "nan", "SNHG7", "CD7", "nan"],
13+
["nan", "SRSF7", "IL32", "GZMA", "nan", "LST1", "IGJ", "nan", "CTSW", "nan"],
14+
["nan", "nan", "CD2", "CTSW", "CD8B", "TYROBP", "ISG20", "SNHG8", "GZMB", "nan"],
15+
]
16+
17+
NAMES_REF = [
18+
["CD3D", "ITM2A", "CD3D", "nan", "CD3D", "nan", "CD79A", "nan", "CD7"],
19+
["nan", "nan", "nan", "CD3D", "nan", "AIF1", "nan", "nan", "NKG7"],
20+
["nan", "nan", "nan", "NKG7", "nan", "FCGR3A", "ISG20", "SNHG7", "CTSW"],
21+
["nan", "CD3D", "nan", "CCL5", "CD7", "nan", "CD79B", "nan", "GNLY"],
22+
["CD3E", "IL32", "nan", "IL32", "CD27", "FCER1G", "nan", "nan", "nan"],
23+
]
24+
25+
NAMES_NO_REF_COMPARE_ABS = [
926
[
10-
["CD3D", "ITM2A", "CD3D", "CCL5", "CD7", "nan", "CD79A", "nan", "NKG7", "LYZ"],
11-
["CD3E", "CD3D", "nan", "NKG7", "CD3D", "AIF1", "CD79B", "nan", "GNLY", "CST3"],
12-
["IL32", "RPL39", "nan", "CST7", "nan", "nan", "nan", "SNHG7", "CD7", "nan"],
13-
["nan", "SRSF7", "IL32", "GZMA", "nan", "LST1", "IGJ", "nan", "CTSW", "nan"],
14-
[
15-
"nan",
16-
"nan",
17-
"CD2",
18-
"CTSW",
19-
"CD8B",
20-
"TYROBP",
21-
"ISG20",
22-
"SNHG8",
23-
"GZMB",
24-
"nan",
25-
],
26-
]
27-
)
28-
29-
names_reference = np.array(
27+
*("CD3D", "ITM2A", "HLA-DRB1", "CCL5", "HLA-DPA1"),
28+
*("nan", "CD79A", "nan", "NKG7", "LYZ"),
29+
],
3030
[
31-
["CD3D", "ITM2A", "CD3D", "nan", "CD3D", "nan", "CD79A", "nan", "CD7"],
32-
["nan", "nan", "nan", "CD3D", "nan", "AIF1", "nan", "nan", "NKG7"],
33-
["nan", "nan", "nan", "NKG7", "nan", "FCGR3A", "ISG20", "SNHG7", "CTSW"],
34-
["nan", "CD3D", "nan", "CCL5", "CD7", "nan", "CD79B", "nan", "GNLY"],
35-
["CD3E", "IL32", "nan", "IL32", "CD27", "FCER1G", "nan", "nan", "nan"],
36-
]
37-
)
38-
39-
names_compare_abs = np.array(
31+
*("HLA-DPA1", "nan", "CD3D", "NKG7", "HLA-DRB1"),
32+
*("AIF1", "CD79B", "nan", "GNLY", "CST3"),
33+
],
4034
[
41-
[
42-
"CD3D",
43-
"ITM2A",
44-
"HLA-DRB1",
45-
"CCL5",
46-
"HLA-DPA1",
47-
"nan",
48-
"CD79A",
49-
"nan",
50-
"NKG7",
51-
"LYZ",
52-
],
53-
[
54-
"HLA-DPA1",
55-
"nan",
56-
"CD3D",
57-
"NKG7",
58-
"HLA-DRB1",
59-
"AIF1",
60-
"CD79B",
61-
"nan",
62-
"GNLY",
63-
"CST3",
64-
],
65-
[
66-
"nan",
67-
"PSAP",
68-
"CD74",
69-
"CST7",
70-
"CD74",
71-
"PSAP",
72-
"FCER1G",
73-
"SNHG7",
74-
"CD7",
75-
"HLA-DRA",
76-
],
77-
[
78-
"IL32",
79-
"nan",
80-
"HLA-DRB5",
81-
"GZMA",
82-
"HLA-DRB5",
83-
"LST1",
84-
"nan",
85-
"nan",
86-
"CTSW",
87-
"HLA-DRB1",
88-
],
89-
[
90-
"nan",
91-
"FCER1G",
92-
"HLA-DPB1",
93-
"CTSW",
94-
"HLA-DPB1",
95-
"TYROBP",
96-
"TYROBP",
97-
"S100A10",
98-
"GZMB",
99-
"HLA-DPA1",
100-
],
101-
]
102-
)
103-
104-
105-
def test_filter_rank_genes_groups():
106-
adata = pbmc68k_reduced()
107-
108-
# fix filter defaults
109-
args = {
110-
"adata": adata,
111-
"key_added": "rank_genes_groups_filtered",
112-
"min_in_group_fraction": 0.25,
113-
"min_fold_change": 1,
114-
"max_out_group_fraction": 0.5,
115-
}
116-
117-
rank_genes_groups(
118-
adata, "bulk_labels", reference="Dendritic", method="wilcoxon", n_genes=5
119-
)
120-
filter_rank_genes_groups(**args)
121-
122-
assert np.array_equal(
123-
names_reference,
124-
np.array(adata.uns["rank_genes_groups_filtered"]["names"].tolist()),
125-
)
35+
*("nan", "PSAP", "CD74", "CST7", "CD74"),
36+
*("PSAP", "FCER1G", "SNHG7", "CD7", "HLA-DRA"),
37+
],
38+
[
39+
*("IL32", "nan", "HLA-DRB5", "GZMA", "HLA-DRB5"),
40+
*("LST1", "nan", "nan", "CTSW", "HLA-DRB1"),
41+
],
42+
[
43+
*("nan", "FCER1G", "HLA-DPB1", "CTSW", "HLA-DPB1"),
44+
*("TYROBP", "TYROBP", "S100A10", "GZMB", "HLA-DPA1"),
45+
],
46+
]
12647

127-
rank_genes_groups(adata, "bulk_labels", method="wilcoxon", n_genes=5)
128-
filter_rank_genes_groups(**args)
12948

130-
assert np.array_equal(
131-
names_no_reference,
132-
np.array(adata.uns["rank_genes_groups_filtered"]["names"].tolist()),
133-
)
49+
EXPECTED = {
50+
("Dendritic", False): np.array(NAMES_REF),
51+
("rest", False): np.array(NAMES_NO_REF),
52+
("rest", True): np.array(NAMES_NO_REF_COMPARE_ABS),
53+
}
13454

135-
rank_genes_groups(adata, "bulk_labels", method="wilcoxon", pts=True, n_genes=5)
136-
filter_rank_genes_groups(**args)
13755

138-
assert np.array_equal(
139-
names_no_reference,
140-
np.array(adata.uns["rank_genes_groups_filtered"]["names"].tolist()),
141-
)
56+
@pytest.mark.parametrize(
57+
("reference", "pts", "abs"),
58+
[
59+
pytest.param("Dendritic", False, False, id="ref-no_pts-no_abs"),
60+
pytest.param("rest", False, False, id="rest-no_pts-no_abs"),
61+
pytest.param("rest", True, False, id="rest-pts-no_abs"),
62+
pytest.param("rest", True, True, id="rest-pts-abs"),
63+
],
64+
)
65+
def test_filter_rank_genes_groups(reference, pts, abs):
66+
adata = pbmc68k_reduced()
14267

143-
# test compare_abs
14468
rank_genes_groups(
145-
adata, "bulk_labels", method="wilcoxon", pts=True, rankby_abs=True, n_genes=5
146-
)
147-
148-
filter_rank_genes_groups(
14969
adata,
150-
compare_abs=True,
151-
min_in_group_fraction=-1,
152-
max_out_group_fraction=1,
153-
min_fold_change=3.1,
70+
"bulk_labels",
71+
reference=reference,
72+
pts=pts,
73+
method="wilcoxon",
74+
rankby_abs=abs,
75+
n_genes=5,
15476
)
77+
if abs:
78+
filter_rank_genes_groups(
79+
adata,
80+
compare_abs=True,
81+
min_in_group_fraction=-1,
82+
max_out_group_fraction=1,
83+
min_fold_change=3.1,
84+
)
85+
else:
86+
filter_rank_genes_groups(
87+
adata,
88+
min_in_group_fraction=0.25,
89+
min_fold_change=1,
90+
max_out_group_fraction=0.5,
91+
)
15592

15693
assert np.array_equal(
157-
names_compare_abs,
94+
EXPECTED[reference, abs],
15895
np.array(adata.uns["rank_genes_groups_filtered"]["names"].tolist()),
15996
)

tests/test_preprocessing_distributed.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ def adata() -> AnnData:
4040
return a
4141

4242

43-
@filter_oldformatwarning
4443
@pytest.fixture(
4544
params=[
4645
pytest.param("direct", marks=[needs.zappy]),
4746
pytest.param("dask", marks=[needs.dask, pytest.mark.anndata_dask_support]),
4847
]
4948
)
49+
@filter_oldformatwarning
5050
def adata_dist(request: pytest.FixtureRequest) -> AnnData:
5151
# regular anndata except for X, which we replace on the next line
5252
a = read_zarr(input_file)
@@ -75,6 +75,7 @@ def test_log1p(adata: AnnData, adata_dist: AnnData):
7575
npt.assert_allclose(result, adata.X)
7676

7777

78+
@pytest.mark.filterwarnings("ignore:Use sc.pp.normalize_total instead:FutureWarning")
7879
def test_normalize_per_cell(
7980
request: pytest.FixtureRequest, adata: AnnData, adata_dist: AnnData
8081
):

0 commit comments

Comments
 (0)