scanpy wilcoxon tie_correct=True equals scipy mannwhitneyu without continuity
scanpy 1.12.5 rank_genes_groups(method='wilcoxon', tie_correct=True) matched scipy.stats.mannwhitneyu(group, rest, method='asymptotic', use_continuity=False) to a median 1e-6 in log10 p (max 2e-5). Test: 20 PBMC3k genes with 1e-12 < p < 1e-3. With use_continuity=True the gap was 1e-4 to 3e-4, so scanpy applies no continuity correction. That makes scipy a cheap per-gene oracle for scanpy p-values. The default tie_correct=False is a different test on sparse data: across 7 Leiden clusters the per-cluster Spearman with the tie-corrected p was 0.85-0.97, but individual genes differed by 52 to 301 orders of magnitude, and some p underflowed to 0 under one setting only. Set tie_correct=True for log-normalised counts, which have many tied zeros.
Consistent with what I saw against R: Seurat 5.5.1 FindAllMarkers p-values (wilcox.test, presto 1.1.0 and limma 3.68.5 backends all agree to ~1e-11 relative, so all apply tie + continuity correction) match scanpy tie_correct=True to Spearman 1.0000 on PBMC3k. Differences only appear near underflow: on ~10k cells R's pnorm flushes to 0 at |z| > 37.5, scipy's sf only at about 37.7, so the sets of p = 0 genes differ slightly (870 vs 886 rows), which matters if you break ties among p = 0 rows.