From 477da53574c97276835fee10df3007fc1e183dde Mon Sep 17 00:00:00 2001 From: Intron7 Date: Thu, 31 Jul 2025 10:51:08 +0200 Subject: [PATCH 1/2] make test robust --- tests/dask/test_dask_rank_logreg.py | 49 +++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/tests/dask/test_dask_rank_logreg.py b/tests/dask/test_dask_rank_logreg.py index 8f2bfd51..cc7a548f 100644 --- a/tests/dask/test_dask_rank_logreg.py +++ b/tests/dask/test_dask_rank_logreg.py @@ -1,7 +1,6 @@ from __future__ import annotations import cupy as cp -import pandas as pd import pytest from scanpy.datasets import pbmc3k_processed, pbmc68k_reduced @@ -12,6 +11,41 @@ ) +def _compare_top_genes(result1, result2, top_n=10, min_overlap=9): + """ + Compare top N genes between two rank_genes_groups results. + + Parameters + ---------- + result1, result2 : dict + Results from rank_genes_groups with 'names' key + top_n : int + Number of top genes to compare + min_overlap : int + Minimum number of overlapping genes required + + Returns + ------- + bool + True if overlap meets minimum threshold for all groups + """ + groups1 = result1["names"].dtype.names + groups2 = result2["names"].dtype.names + + if set(groups1) != set(groups2): + return False + + for group in groups1: + top_genes1 = set(result1["names"][group][:top_n]) + top_genes2 = set(result2["names"][group][:top_n]) + overlap = len(top_genes1.intersection(top_genes2)) + + if overlap < min_overlap: + return False + + return True + + @pytest.mark.parametrize("data_kind", ["sparse", "dense"]) @pytest.mark.parametrize("dtype", [cp.float32, cp.float64]) def test_rank_genes_groups_logreg(client, data_kind, dtype): @@ -22,7 +56,6 @@ def test_rank_genes_groups_logreg(client, data_kind, dtype): dask_data.X = as_dense_cupy_dask_array(dask_data.X).persist() rsc.get.anndata_to_GPU(adata) groupby = "bulk_labels" - read = "Dendritic" elif data_kind == "sparse": adata = pbmc3k_processed() org_var_names = adata.var_names @@ -33,14 +66,10 @@ def test_rank_genes_groups_logreg(client, data_kind, dtype): dask_data.X = as_sparse_cupy_dask_array(dask_data.X).persist() rsc.get.anndata_to_GPU(adata) groupby = "louvain" - read = "B cells" rsc.tl.rank_genes_groups_logreg(adata, groupby=groupby, use_raw=False) rsc.tl.rank_genes_groups_logreg(dask_data, groupby=groupby, use_raw=False) - array_ad = pd.DataFrame(adata.uns["rank_genes_groups"]["scores"][read]).to_numpy()[ - :10 - ] - array_bd = pd.DataFrame( - dask_data.uns["rank_genes_groups"]["scores"][read] - ).to_numpy()[:10] - cp.testing.assert_allclose(array_ad, array_bd, atol=1e-3) + + assert _compare_top_genes( + adata.uns["rank_genes_groups"], dask_data.uns["rank_genes_groups"] + ) From fbb1514d9854ac6dbf18a31db0996e44e4d46309 Mon Sep 17 00:00:00 2001 From: Intron7 Date: Thu, 31 Jul 2025 10:52:43 +0200 Subject: [PATCH 2/2] use new alpha --- .github/workflows/test-gpu-rpr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test-gpu-rpr.yml b/.github/workflows/test-gpu-rpr.yml index 6612aae1..add3b713 100644 --- a/.github/workflows/test-gpu-rpr.yml +++ b/.github/workflows/test-gpu-rpr.yml @@ -44,7 +44,6 @@ jobs: environment-file: ci/environment_alpha.yml init-shell: >- bash - cache-environment: true post-cleanup: 'all' - name: Install rapids-singlecell