Skip to content

Commit a2de1a2

Browse files
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
1 parent 8a21ef1 commit a2de1a2

11 files changed

Lines changed: 326 additions & 229 deletions

tmp_scripts/compare_helpers.py

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1+
from __future__ import annotations
2+
13
import warnings
4+
25
warnings.filterwarnings("ignore")
3-
import cupy as cp
4-
import numpy as np
5-
import anndata as ad
6-
from pathlib import Path
76
import os
87
import time
8+
from pathlib import Path
9+
10+
import anndata as ad
11+
import cupy as cp
12+
import numpy as np
13+
914
import rapids_singlecell as rsc
1015

1116
# Add utils to path for GPU version
@@ -18,64 +23,71 @@ def compare_indices(adata_cpu):
1823
Compare the saturated/unsaturated indices between CPU and GPU versions.
1924
"""
2025
print("🔍 Comparing CPU vs GPU index computation...")
21-
26+
2227
# Import the helper functions
2328
from utils.sepal_cpu import _compute_idxs
2429
from utils.sepal_gpu import _compute_idxs_gpu
25-
30+
2631
# Get connectivity and spatial data
2732
adata_gpu = ad.read_h5ad(HOME / "data/visium_hne_adata.h5ad")
2833
rsc.get.anndata_to_GPU(adata_gpu, convert_all=True)
29-
g = adata_cpu.obsp['spatial_connectivities']
30-
g_gpu = adata_gpu.obsp['spatial_connectivities']
34+
g = adata_cpu.obsp["spatial_connectivities"]
35+
g_gpu = adata_gpu.obsp["spatial_connectivities"]
3136
degrees = cp.diff(g_gpu.indptr)
32-
spatial_cpu = adata_cpu.obsm['spatial'].astype(np.float64)
33-
spatial_gpu = adata_gpu.obsm['spatial'].astype(cp.float32)
34-
37+
spatial_cpu = adata_cpu.obsm["spatial"].astype(np.float64)
38+
spatial_gpu = adata_gpu.obsm["spatial"].astype(cp.float32)
39+
3540
g_gpu = rsc.get.X_to_GPU(g_gpu)
3641
spatial_gpu = rsc.get.X_to_GPU(spatial_gpu)
3742

3843
# Compute indices with both methods
3944
start = time.time()
4045
degrees = cp.diff(g_gpu.indptr)
41-
sat_gpu, sat_idx_gpu, unsat_gpu, unsat_idx_gpu = _compute_idxs_gpu(g_gpu, degrees, spatial_gpu, 6)
46+
sat_gpu, sat_idx_gpu, unsat_gpu, unsat_idx_gpu = _compute_idxs_gpu(
47+
g_gpu, degrees, spatial_gpu, 6
48+
)
4249
end = time.time()
4350
print("GPU indices computed in ", end - start, "seconds")
44-
51+
4552
start = time.time()
46-
sat_cpu, sat_idx_cpu, unsat_cpu, unsat_idx_cpu = _compute_idxs(g, spatial_cpu, 6, "l1")
53+
sat_cpu, sat_idx_cpu, unsat_cpu, unsat_idx_cpu = _compute_idxs(
54+
g, spatial_cpu, 6, "l1"
55+
)
4756
end = time.time()
4857
print("CPU indices computed in ", end - start, "seconds")
4958
# Convert GPU results to CPU for comparison
5059
sat_gpu_cpu = sat_gpu.get()
5160
sat_idx_gpu_cpu = sat_idx_gpu.get()
5261
unsat_gpu_cpu = unsat_gpu.get()
5362
unsat_idx_gpu_cpu = unsat_idx_gpu.get()
54-
63+
5564
print(f"Saturated nodes - CPU: {len(sat_cpu)}, GPU: {len(sat_gpu_cpu)}")
5665
print(f"Saturated nodes identical: {np.array_equal(sat_cpu, sat_gpu_cpu)}")
57-
58-
print(f"Unsaturated nodes - CPU: {len(unsat_cpu)}, GPU: {len(unsat_gpu_cpu)}")
66+
67+
print(f"Unsaturated nodes - CPU: {len(unsat_cpu)}, GPU: {len(unsat_gpu_cpu)}")
5968
print(f"Unsaturated nodes identical: {np.array_equal(unsat_cpu, unsat_gpu_cpu)}")
60-
61-
print(f"Saturated indices identical: {np.array_equal(sat_idx_cpu, sat_idx_gpu_cpu)}")
62-
69+
70+
print(
71+
f"Saturated indices identical: {np.array_equal(sat_idx_cpu, sat_idx_gpu_cpu)}"
72+
)
73+
6374
# Check unsat_idx differences (these might differ due to tie-breaking)
6475
unsat_idx_diff = np.sum(unsat_idx_cpu != unsat_idx_gpu_cpu)
65-
print(f"Unsaturated index differences: {unsat_idx_diff}/{len(unsat_idx_cpu)} ({100*unsat_idx_diff/len(unsat_idx_cpu):.1f}%)")
66-
76+
print(
77+
f"Unsaturated index differences: {unsat_idx_diff}/{len(unsat_idx_cpu)} ({100 * unsat_idx_diff / len(unsat_idx_cpu):.1f}%)"
78+
)
79+
6780
return {
68-
'sat_identical': np.array_equal(sat_cpu, sat_gpu_cpu),
69-
'unsat_identical': np.array_equal(unsat_cpu, unsat_gpu_cpu),
70-
'sat_idx_identical': np.array_equal(sat_idx_cpu, sat_idx_gpu_cpu),
71-
'unsat_idx_diff_count': unsat_idx_diff,
72-
'unsat_idx_diff_percent': 100*unsat_idx_diff/len(unsat_idx_cpu)
81+
"sat_identical": np.array_equal(sat_cpu, sat_gpu_cpu),
82+
"unsat_identical": np.array_equal(unsat_cpu, unsat_gpu_cpu),
83+
"sat_idx_identical": np.array_equal(sat_idx_cpu, sat_idx_gpu_cpu),
84+
"unsat_idx_diff_count": unsat_idx_diff,
85+
"unsat_idx_diff_percent": 100 * unsat_idx_diff / len(unsat_idx_cpu),
7386
}
7487

88+
7589
if __name__ == "__main__":
7690
# Run comparison
7791
adata_cpu = ad.read_h5ad(HOME / "data/visium_hne_adata.h5ad")
7892
res = compare_indices(adata_cpu)
7993
print(res)
80-
81-

tmp_scripts/debug_comparison.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,50 @@
1+
from __future__ import annotations
2+
13
import warnings
4+
25
warnings.filterwarnings("ignore")
3-
import numpy as np
4-
import cupy as cp
6+
import os
7+
from pathlib import Path
8+
9+
import anndata as ad
510
from utils.sepal_cpu import sepal
611
from utils.sepal_gpu import sepal_gpu
7-
import anndata as ad
8-
from pathlib import Path
9-
import os
12+
1013
import rapids_singlecell as rsc
1114

1215
HOME = Path(os.path.expanduser("~"))
1316

17+
1418
def debug_sepal_comparison():
1519
# Load data
1620
adata = ad.read_h5ad(HOME / "data/visium_hne_adata.h5ad")
17-
21+
1822
# Test with single gene first
19-
test_genes = [ "Npbwr1"] # Just one gene
20-
23+
test_genes = ["Npbwr1"] # Just one gene
24+
2125
print("=== CPU vs GPU Comparison ===")
22-
26+
2327
# CPU version
24-
cpu_result = sepal(adata, max_neighs=6, genes=test_genes, n_iter=4000, copy=True, debug=True)
28+
cpu_result = sepal(
29+
adata, max_neighs=6, genes=test_genes, n_iter=4000, copy=True, debug=True
30+
)
2531
print(f"CPU result: {cpu_result.iloc[0, 0]}")
26-
27-
# GPU version
32+
33+
# GPU version
2834
adata = ad.read_h5ad(HOME / "data/visium_hne_adata.h5ad")
2935
rsc.get.anndata_to_GPU(adata, convert_all=True)
30-
adata.obsp['spatial_connectivities'] = rsc.get.X_to_GPU(adata.obsp['spatial_connectivities'])
31-
adata.obsm['spatial'] = rsc.get.X_to_GPU(adata.obsm['spatial'])
32-
36+
adata.obsp["spatial_connectivities"] = rsc.get.X_to_GPU(
37+
adata.obsp["spatial_connectivities"]
38+
)
39+
adata.obsm["spatial"] = rsc.get.X_to_GPU(adata.obsm["spatial"])
3340

34-
gpu_result = sepal_gpu(adata, max_neighs=6, genes=test_genes, n_iter=4000, copy=True, debug=True)
41+
gpu_result = sepal_gpu(
42+
adata, max_neighs=6, genes=test_genes, n_iter=4000, copy=True, debug=True
43+
)
3544
print(f"GPU result: {gpu_result.iloc[0, 0]}")
36-
45+
3746
print(f"Difference: {abs(cpu_result.iloc[0, 0] - gpu_result.iloc[0, 0])}")
3847

48+
3949
if __name__ == "__main__":
4050
debug_sepal_comparison()

tmp_scripts/prepare_data.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
import squidpy as sq
1+
from __future__ import annotations
22

3-
from pathlib import Path
43
import os
4+
from pathlib import Path
5+
6+
import squidpy as sq
7+
58
HOME = Path(os.path.expanduser("~"))
69
if __name__ == "__main__":
710
(HOME / "data").mkdir(parents=True, exist_ok=True)
811
adata = sq.datasets.visium_hne_adata()
912
sq.gr.spatial_neighbors(adata)
10-
adata.write_h5ad(HOME / "data/visium_hne_adata.h5ad")
13+
adata.write_h5ad(HOME / "data/visium_hne_adata.h5ad")

tmp_scripts/run_cpu.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
from __future__ import annotations
2+
13
import warnings
4+
25
warnings.filterwarnings("ignore")
3-
import squidpy as sq
4-
import time
5-
import anndata as ad
6-
from pathlib import Path
76
import os
7+
import time
88
from argparse import ArgumentParser
9+
from pathlib import Path
10+
11+
import anndata as ad
912
from utils.sepal_cpu import sepal
10-
import scanpy as sc
1113

1214
HOME = Path(os.path.expanduser("~"))
1315

@@ -20,8 +22,10 @@
2022
genes = ["Gm29570"]
2123
genes = adata.var_names.values[:10]
2224
# sc.pp.normalize_total(adata)
23-
result = sepal(adata, max_neighs=6, genes=genes, n_iter=30000, copy=True, debug=args.debug)
25+
result = sepal(
26+
adata, max_neighs=6, genes=genes, n_iter=30000, copy=True, debug=args.debug
27+
)
2428
end_time = time.time()
2529
print(f"Time taken: {end_time - start_time} seconds")
2630
result.sort_values(by="sepal_score", ascending=False, inplace=True)
27-
print(result.head(10))
31+
print(result.head(10))

tmp_scripts/run_gpu.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1+
from __future__ import annotations
2+
13
import warnings
4+
25
warnings.filterwarnings("ignore")
36

4-
import squidpy as sq
7+
import os
58
import time
6-
import anndata as ad
9+
from argparse import ArgumentParser
710
from pathlib import Path
8-
import os
9-
import rapids_singlecell as rsc
10-
import scanpy as sc
11+
12+
import anndata as ad
1113
from utils.sepal_gpu import sepal_gpu
12-
from argparse import ArgumentParser
1314

15+
import rapids_singlecell as rsc
1416

1517
HOME = Path(os.path.expanduser("~"))
1618
if __name__ == "__main__":
@@ -20,14 +22,18 @@
2022
adata = ad.read_h5ad(HOME / "data/visium_hne_adata.h5ad")
2123
# sc.pp.normalize_total(adata)
2224
rsc.get.anndata_to_GPU(adata, convert_all=True)
23-
adata.obsp['spatial_connectivities'] = rsc.get.X_to_GPU(adata.obsp['spatial_connectivities'])
24-
adata.obsm['spatial'] = rsc.get.X_to_GPU(adata.obsm['spatial'])
25+
adata.obsp["spatial_connectivities"] = rsc.get.X_to_GPU(
26+
adata.obsp["spatial_connectivities"]
27+
)
28+
adata.obsm["spatial"] = rsc.get.X_to_GPU(adata.obsm["spatial"])
2529
start_time = time.time()
2630
genes = adata.var_names.values[:1000]
2731
# genes = ["Gm29570"]
28-
result = sepal_gpu(adata, max_neighs=6, genes=genes, n_iter=30000, copy=True, debug=args.debug)
32+
result = sepal_gpu(
33+
adata, max_neighs=6, genes=genes, n_iter=30000, copy=True, debug=args.debug
34+
)
2935
end_time = time.time()
3036
print(f"Time taken: {end_time - start_time} seconds")
31-
37+
3238
result.sort_values(by="sepal_score", ascending=False, inplace=True)
33-
print(result.head(10))
39+
print(result.head(10))

0 commit comments

Comments
 (0)