Skip to content

Commit 1648964

Browse files
committed
Added more tests
1 parent 5d61ec9 commit 1648964

8 files changed

Lines changed: 88 additions & 17 deletions

File tree

src/decoupler/bm/_run.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ def _metric_scores(
152152
verbose: bool,
153153
**kwargs
154154
) -> None:
155+
assert isinstance(metrics, (str, list)), 'metrics must be str or list'
156+
if isinstance(metrics, str):
157+
metrics = [metrics]
155158
if runby == 'expr':
156159
m = ('benchmark - evaluating by experiment on:\n' +
157160
f'n_expr={score.shape[0]}, n_sources={score.shape[1]} across metrics={metrics}')

tests/bm/test_benchmark.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import pandas as pd
2+
import pytest
3+
4+
import decoupler as dc
5+
6+
7+
@pytest.mark.parametrize(
8+
'metrics,groupby,runby,sfilt,thr,emin',
9+
[
10+
['auc', None, 'expr', False, 0.05, 5],
11+
['auc', None, 'expr', True, 0.05, 5],
12+
[['auc'], None, 'expr', False, 0.05, 5],
13+
[['auc', 'fscore'], 'group', 'expr', False, 0.05, 5],
14+
[['auc', 'fscore', 'qrank'], None, 'source', False, 0.05, 2],
15+
[['auc', 'fscore', 'qrank'], 'group', 'source', False, 0.05, 1],
16+
]
17+
)
18+
def test_benchmark(
19+
bdata,
20+
net,
21+
metrics,
22+
groupby,
23+
runby,
24+
sfilt,
25+
thr,
26+
emin,
27+
):
28+
df = dc.bm.benchmark(
29+
adata=bdata,
30+
net=net,
31+
metrics=metrics,
32+
groupby=groupby,
33+
runby=runby,
34+
sfilt=sfilt,
35+
thr=thr,
36+
emin=emin,
37+
kws_decouple={
38+
'cons': True,
39+
'tmin': 3,
40+
'methods': ['ulm', 'zscore']
41+
},
42+
)
43+
assert isinstance(df, pd.DataFrame)
44+
cols = {'method', 'metric', 'score'}
45+
print(df.columns)
46+
assert cols.issubset(df.columns)

tests/conftest.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ def rng():
1414

1515
@pytest.fixture
1616
def adata():
17-
adata, _ = dc.ds.toy(nobs=40, nvar=20, bval=2, seed=42, verbose=False)
17+
adata, _ = dc.ds.toy(nobs=10, nvar=20, bval=2, seed=42, verbose=False)
1818
adata.layers['counts'] = adata.X.round()
1919
return adata
2020

2121

2222
@pytest.fixture
2323
def tdata():
24-
tdata, _ = dc.ds.toy(nobs=40, nvar=20, bval=2, seed=42, verbose=False, pstime=True)
24+
tdata, _ = dc.ds.toy(nobs=10, nvar=20, bval=2, seed=42, verbose=False, pstime=True)
2525
return tdata
2626

2727

@@ -46,6 +46,12 @@ def pdata(
4646
return dc.pp.pseudobulk(adata=adata, sample_col='sample', groups_col='group')
4747

4848

49+
@pytest.fixture
50+
def bdata():
51+
adata, _ = dc.ds.toy_bench(nobs=100, nvar=20, bval=2, seed=42, verbose=False)
52+
return adata
53+
54+
4955
@pytest.fixture
5056
def deg():
5157
deg = pd.DataFrame(

tests/mt/test_decouple.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,31 @@
44

55

66
@pytest.mark.parametrize(
7-
'methods,args,consensus',
7+
'methods,args,cons,anndata',
88
[
9-
['all', dict(), True],
10-
['aucell', dict(aucell=dict(n_up=3)), True],
11-
[['ulm'], dict(), False],
12-
[['ulm', 'ora'], dict(ulm=dict(), ora=dict(n_up=3)), False]
9+
['all', dict(), True, True],
10+
['aucell', dict(aucell=dict(n_up=3)), True, False],
11+
[['ulm'], dict(), False, True],
12+
[['ulm', 'ora'], dict(ulm=dict(), ora=dict(n_up=3)), False, False]
1313
]
1414
)
1515
def test_decouple(
1616
adata,
1717
net,
1818
methods,
1919
args,
20-
consensus,
20+
cons,
21+
anndata
2122
):
22-
dc.mt.decouple(data=adata, net=net, methods=methods, args=args, cons=consensus, tmin=0)
23-
if consensus:
24-
assert 'score_consensus' in adata.obsm
23+
if anndata:
24+
dc.mt.decouple(data=adata, net=net, methods=methods, args=args, cons=cons, tmin=0)
25+
if cons:
26+
assert 'score_consensus' in adata.obsm
27+
else:
28+
assert 'score_consensus' not in adata.obsm
2529
else:
26-
assert 'score_consensus' not in adata.obsm
30+
res = dc.mt.decouple(data=adata.to_df(), net=net, methods=methods, args=args, cons=cons, tmin=0)
31+
if cons:
32+
assert 'score_consensus' in res
33+
else:
34+
assert 'score_consensus' not in res

tests/pl/test_barplot.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,19 @@ def df():
2020

2121

2222
@pytest.mark.parametrize(
23-
'name,top,vertical',
23+
'name,top,vertical,vcenter',
2424
[
25-
['C1', 2, True],
26-
['C2', 10, False],
25+
['C1', 2, True, None],
26+
['C2', 10, False, -3],
27+
['C2', 10, False, 10],
2728
]
2829
)
2930
def test_barplot(
3031
df,
3132
name,
3233
top,
3334
vertical,
35+
vcenter,
3436
):
3537
fig = dc.pl.barplot(data=df, name=name, top=top, vertical=vertical, return_fig=True)
3638
assert isinstance(fig, Figure)

tests/pl/test_order_targets.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
['T3', 'group', -20, 15],
1414
['T4', 'group', -1, 20],
1515
['T5', 'group', -2, 14],
16+
['T5', 'group', None, None],
1617
]
1718
)
1819
def test_order_targets(

tests/pp/test_anndata.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def test_swap_layer(
5454
[None, 'mean', True, True],
5555
['sample', 'sum', False, True],
5656
['sample', 'sum', False, False],
57+
['sample', 'sum', True, False],
5758
[['dose', 'group'], 'sum', False, True],
5859
['group', 'median', False, False],
5960
['group', lambda x: np.max(x) - np.min(x), True, True],
@@ -73,8 +74,9 @@ def test_pseudobulk(
7374
if empty:
7475
adata.X[:, 3] = 0.
7576
adata.layers['counts'][:, 3] = 0.
76-
adata.X[5, :] = 0.
77-
adata.layers['counts'][5, :] = 0.
77+
msk = adata.obs['sample'] == 'S01'
78+
adata.X[msk, :] = 0.
79+
adata.layers['counts'][msk, :] = 0.
7880
if sparse:
7981
adata.X = sps.csr_matrix(adata.X)
8082
if mode == 'sum':

tests/tl/test_rankby_obsm.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def test_rankby_obsm(
1919
key,
2020
uns_key,
2121
):
22+
tdata_obsm = tdata_obsm.copy()
23+
tdata_obsm.obs['dose'] = 'Low'
24+
tdata_obsm.obs.loc[tdata_obsm.obs_names[5], 'dose'] = 'High'
2225
res = dc.tl.rankby_obsm(tdata_obsm, key=key, uns_key=uns_key)
2326
if uns_key is None:
2427
assert isinstance(res, pd.DataFrame)

0 commit comments

Comments
 (0)