(v1.11.0)=
### 1.11.0 {small}`2025-02-14`

Release candidates:

- (v1.11.0rc2)=
  {guilabel}`rc2` 2025-01-24
- (v1.11.0rc1)=
  {guilabel}`rc1` 2024-12-20

#### Features

- {guilabel}`rc1` {func}`~scanpy.pp.sample` supports both upsampling and downsampling of observations and variables. {func}`~scanpy.pp.subsample` is now deprecated. {smaller}`G Eraslan & P Angerer` ({pr}`943`)
- {guilabel}`rc1` Add `layer` argument to {func}`scanpy.tl.score_genes` and {func}`scanpy.tl.score_genes_cell_cycle` {smaller}`L Zappia` ({pr}`2921`)
- {guilabel}`rc1` Prevent `raw` conflict with `layer` in {func}`~scanpy.tl.score_genes` {smaller}`S Dicks` ({pr}`3155`)
- {guilabel}`rc1` Add support for `median` as an aggregation function to {func}`~scanpy.get.aggregate`. This allows for median-based aggregation of data (e.g., pseudobulk), complementing existing methods like mean- and sum-based aggregation {smaller}`M Dehkordi (Farhad)` ({pr}`3180`)
- {guilabel}`rc1` Add `key_added` argument to {func}`~scanpy.pp.pca`, {func}`~scanpy.tl.tsne` and {func}`~scanpy.tl.umap` {smaller}`P Angerer` ({pr}`3184`)
- {guilabel}`rc1` Support running {func}`scanpy.pp.pca` on sparse Dask arrays with the `'covariance_eigh'` solver {smaller}`P Angerer` ({pr}`3263`)
- {guilabel}`rc1` Use upstreamed {class}`~sklearn.decomposition.PCA` implementation for {class}`~scipy.sparse.csr_array` and {class}`~scipy.sparse.csr_matrix` (see scikit-learn {ref}`sklearn:changes_1_4`) {smaller}`P Angerer` ({pr}`3267`)
- {guilabel}`rc1` Add explicit support to {func}`scanpy.pp.pca` for `svd_solver='covariance_eigh'` {smaller}`P Angerer` ({pr}`3296`)
- {guilabel}`rc1` Add support for {class}`dask.array.Array` to {func}`scanpy.pp.calculate_qc_metrics` {smaller}`I Gold` ({pr}`3307`)
- {guilabel}`rc1` Support `layer` parameter in {func}`scanpy.pl.highest_expr_genes` {smaller}`P Angerer` ({pr}`3324`)
- {guilabel}`rc1` Run numba functions single-threaded when called from inside of a {class}`~multiprocessing.pool.ThreadPool` {smaller}`P Angerer` ({pr}`3335`)
- {guilabel}`rc1` Switch {func}`~scanpy.logging.print_header` and {func}`~scanpy.logging.print_versions` to {mod}`session_info2` {smaller}`P Angerer` ({pr}`3384`)
- {guilabel}`rc1` Add sampling probabilities/mask parameter `p` to {func}`~scanpy.pp.sample` {smaller}`P Angerer` ({pr}`3410`)

#### Performance

- {guilabel}`rc1` Speed up {func}`~scanpy.pp.regress_out` {smaller}`P Ashish, P Angerer & S Dicks` ({pr}`3284`)

#### Documentation

- {guilabel}`rc1` Improve {func}`~scanpy.external.pp.harmony_integrate` docs {smaller}`D Kühl` ({pr}`3362`)
- {guilabel}`rc1` Raise {exc}`FutureWarning` when calling deprecated {mod}`scanpy.pp` functions {smaller}`P Angerer` ({pr}`3380`)
- {guilabel}`rc1` {smaller}`P Angerer` ({pr}`3407`)

  | Deprecate … | in favor of … |
  | --- | --- |
  | {func}`scanpy.read_visium` | {func}`squidpy.read.visium` |
  | {func}`scanpy.datasets.visium_sge` | {func}`squidpy.datasets.visium` |
  | {func}`scanpy.pl.spatial` | {func}`squidpy.pl.spatial_scatter` |

- {guilabel}`rc2` Fix reference in {mod}`scanpy.pp` page {smaller}`D Kazemi` ({pr}`3418`)

#### Bug fixes

- {guilabel}`rc1` Upper-bound {mod}`sklearn` `<1.6.0` due to {issue}`dask/dask-ml#1002` {smaller}`Ilan Gold` ({pr}`3393`)
- {guilabel}`rc2` Fix {func}`~scanpy.tl.rank_genes_groups` compatibility with data >10M cells {smaller}`P Angerer` ({pr}`3426`)
- {guilabel}`rc2` Fix {func}`scanpy.pl.rank_genes_groups`’s `ax` parameter {smaller}`P Angerer` ({pr}`3428`)

#### Development Process

- {guilabel}`rc2` Fix version number inference in development environments (CI and local) {smaller}`P Angerer` ({pr}`3441`)
