### 0.14.0 {small}`2026-02-02`

```{rubric} Features
```
* Adds `ptg.Distance` for GPU-accelerated distance computation between groups of cells, compatible with pertpy's Distance API {pr}`454` {smaller}`S Dicks & S Özleyen`
* Adds `lanczos` and `randomized` SVD solvers for sparse PCA. Lanczos uses bidiagonalization with implicit restarts for exact results. Randomized SVD uses CholeskyQR2 orthogonalization (Tomás et al. 2024) for fast approximate results {pr}`544` {smaller}`S Dicks`
* Added support for `tl.rank_genes_groups` with methods `logreg` & `wilcoxon` {pr}`502` {smaller}`S Dicks & E Fleischel`
* Adds `t-test` and `t-test_overestim_var` methods to `tl.rank_genes_groups` with Dask support and `mask_var` parameter {pr}`549` {smaller}`S Dicks`
* Adds multi-GPU support to `ptg.Distance` for edistance computation {pr}`545` {smaller}`S Dicks`
* Adds multi-GPU support to `gr.co_occurrence` with an optimized kernel {pr}`546` {smaller}`S Dicks`
* Adds multi-GPU support to `gr.spatial_autocorr` for permutation tests {pr}`555` {smaller}`S Dicks`


```{rubric} Performance
```
* Optimizes `pp.highly_variable_genes` with `flavor="pearson_residuals"` (Welford's single-pass variance)  {pr}`538` {smaller}`S Dicks`
* Rewrites `pp.highly_variable_genes` with `flavor="poisson_gene_selection"` using using only CuPy, replacing PyTorch and Monte Carlo sampling with exact analytical formula. Adds Dask support {pr}`541` {smaller}`S Dicks`

```{rubric} Bug Fixes
```
* Fixes `_sparse_to_dense` kernel to support matrices with >2M rows by using grid-stride loops and querying device grid dimension limits {pr}`535` {smaller}`S Dicks`
* Fixes `tl.draw_graph` graph creation causing incorrect ForceAtlas2 layouts and `AttributeError` {pr}`529` {smaller}`S Dicks`
* Fixes `gr.spatial_autocorr` sparse kernels returning inf/nan due to dtype mismatch in means array {pr}`555` {smaller}`S Dicks`

```{rubric} Misc
```
* RAPIDS nightly test success is no longer required for merging {pr}`539` {smaller}`S Dicks`
