NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3538 most downloaded on PyPI
Annotated data.
Last release 16 days ago
18 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Most releases are documented
notes for 49 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
9 years old
125 releases · first in 2017
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-13-4
(v0.13.4)=
2026-09-18zarr format v2 writing is now deprecated via anndata.settings.zarr_write_format and this setting will be removed in 0.14 {user}ilan-gold ({pr}2628)asarray when moving arrays between Array API namespaces fails with a {exc}BufferError, e.g. for implementations that don’t support DLPack 1.0 {user}amalia-k510 ({pr}2561)joshua-gould ({pr}2584)Use the new FusedCodecPipeline where we control reading/writing to a zarr store if {doc}zarrs-python <zarrs:index> is not installed i.e., {mod}zarr i/o {user}ilan-gold
One column per quarter.
Nothing published for this version
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-13-2
Keep X (stored as layers[None] ) when clearing or reassigning layers , matching the existing behavior of del adata.layers . adata.layers = {} , adata.layers.clear() and del adata.layers now warn that a future release may drop .X in these cases without more expliit handling i.e., pass adata.layers.clear(keep_x=True/False) or include the None key explicitly ( adata.layers = {None: adata.X, ...} to keep X and {None: None, ...} to drop) to opt in and silence the warning. @slambert-git ( #2549 )
Allow resolve() to resolve AdAcc s (e.g. A.X , A.layers['y'] , A.obsm['c'] , A.obsp['g'] ) in addition to AdRef s, when selected via vec=False|None (Resolve to AdRef s with vec=True|None ) @flying-sheep ( #2550 )
Change layers: None in the repr to be layers: None (.X) to highlight that None is X @ilan-gold ( #2553 )
(v0.13.2)=
2026-07-13~anndata.AnnData.X (stored as layers[None]) when clearing or reassigning {attr}~anndata.AnnData.layers, matching the existing behavior of del adata.layers. adata.layers = {}, adata.layers.clear() and del adata.layers now warn that a future release may drop .X in these cases without more expliit handling i.e., pass adata.layers.clear(keep_x=True/False) or include the None key explicitly (adata.layers = {None: adata.X, ...} to keep X and {None: None, ...} to drop) to opt in and silence the warning. {user}slambert-git ({pr}2549)~anndata.acc.AdAcc.resolve to resolve AdAccs (e.g. A.X, A.layers['y'], A.obsm['c'], A.obsp['g']) in addition to AdRefs,
when selected via vec=False|None (Resolve to AdRefs with vec=True|None) {user}flying-sheep ({pr}2550)layers: None in the repr to be layers: None (.X) to highlight that None is X {user}ilan-gold ({pr}2553)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-13-1
Move the concatenation guide into the tutorials section Zethson ( #2539 )
Lower bound typing_extensions module to contain the sentinel object @ilan-gold ( #2540 )
Accept array-API arrays that cannot export via DLPack (e.g. pydata/sparse ) in X / layers . SupportsArrayApi is split into a DLPack-free SupportsArrayApiBase (used to gate storage) and the DLPack-requiring SupportsArrayApi (used only where DLPack is actually needed). @eroell ( #2541 )
(v0.13.1)=
2026-07-08Zethson ({pr}2539)typing_extensions module to contain the sentinel object {user}ilan-gold ({pr}2540)~anndata.AnnData.X/{attr}~anndata.AnnData.layers. {class}~anndata.types.SupportsArrayApi is split into a DLPack-free {class}~anndata.types.SupportsArrayApiBase (used to gate storage) and the DLPack-requiring {class}~anndata.types.SupportsArrayApi (used only where DLPack is actually needed). {user}eroell ({pr}2541)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-13-0
Attention
In anndata 0.14, anndata.settings.allow_write_nullable_strings will default to True , so take care to test your code with the upcoming default value. (See also “Miscellaneous changes” below.)
Remove dtype argument from AnnData constructor. @flying-sheep ( #1707 )
Remove internal use of inheritance inside CSRDataset and CSCDataset from scipy.sparse.spmatrix . Users can thus no longer write to backed sparse stores but now the backed sparse classes can return cupyx.scipy.sparse.csr_matrix and cupyx.scipy.sparse.csc_matrix when configured properly with zarr . @ilan-gold ( #1927 )
Remove support for zarr <3 dependency @ilan-gold ( #2309 )
anndata.AnnData.X is now copy-on-write like the other elements like layers . Operations like my_subset.X = 0 will not propagate back to original object. @ilan-gold ( #2338 )
Remove Anndata.{set,del}item @ilan-gold ( #2367 )
Remove AnnData.concatenate @ilan-gold ( #2370 )
Switch anndata.settings.allow_write_nullable_strings to new default None , which means the writing of pandas string arrays will be controlled by pandas.options.future.infer_string (see the Migration guide for the new string data type (pandas 3.0) ). Setting allow_write_nullable_strings=False explicitly now means to try writing the array in the non-nullable string array format, which was the only supported format up to anndata 0.11. P Angerer ( #2133 )
Flip default for anndata.settings.disallow_forward_slash_in_h5ad to True . Document writing to k="/" in write_elem() and check k more strictly @flying-sheep ( #2436 )
Add consolidate_metadata argument to write_zarr() to allow opting out of consolidated metadata easily. No longer warn on its writing as it appears to be heading for stability in zarr. @ilan-gold ( #2497 )
Move X into anndata.AnnData.layers under the None key. As result, layers: X shows up in AnnData ’s text representation, None appears in .layers.items() / .keys() , concat() now works when some AnnData s have no X . @flying-sheep & @ilan-gold ( #1707 )
Support setting with array-api compatible objects i.e., adata.X = jax.numpy.array([[0, 1], [2, 3]]) @ilan-gold @amalia-k510 ( #2071 )
Add support for Dask dask.array.Array s containing sparray s @flying-sheep ( #2087 )
Add Accessors and paths for referencing vectors in AnnData and MuData @flying-sheep ( #2290 )
New anndata.AnnData.unwriteable() for checking if an AnnData can be written @ilan-gold ( #2372 )
Create a new setting anndata.settings.restrict_index_types to allow for custom in-memory indexes (i.e., for obs and var ) to be passed to an AnnData object without being converted to a string type. Note that indexes recognized by pandas.api.types.is_integer_dtype() will still be stringified regardless of the setting. @ilan-gold ( #2379 )
anndata.settings.zarr_write_format is now 3 and anndata.settings.auto_shard_zarr_v3() is now True (with None removed as an option). This means that sharded zarr v3 stores will be written with a target uncompressed shard size of 1GB unless the user either
changes one of these flags, or
explicitly creates a zarr.Group with zarr_format=2 , or
overrides the shards in dataset_kwargs passed in to write_elem()
@ilan-gold ( #2439 )
Add extra for CUDA 13 ( anndata[cu13] ) @grst
Fix anndata.AnnData.copy() so that it provides an informative error when trying to copy and object that contains h5py.Dataset , zarr.Array , anndata.abc.CSRDataset , or anndata.abc.CSCDataset @ilan-gold ( #2406 )
Enforce the 2-dimensional X / layers spec at the IO boundary: higher-dimensional arrays now warn (rather than error for X , and silent accept for layers ) in memory, writing one raises a clear error, and reading a non-conforming file warns instead of silently loading it. @eroell
Use zarrs-python by default for anndata.io.read_zarr() and anndata.io.write_zarr() if it is installed @ilan-gold ( #2326 )
(v0.13.0)=
2026-07-07:::{attention}
In anndata 0.14, {attr}anndata.settings.allow_write_nullable_strings will default to True,
so take care to test your code with the upcoming default value.
(See also “Miscellaneous changes” below.)
:::
dtype argument from {class}~anndata.AnnData constructor. {user}flying-sheep ({pr}1707)~anndata.abc.CSRDataset and {class}~anndata.abc.CSCDataset from {class}scipy.sparse.spmatrix.
Users can thus no longer write to backed sparse stores but now the backed sparse classes can return {class}cupyx.scipy.sparse.csr_matrix and {class}cupyx.scipy.sparse.csc_matrix when configured properly with {mod}zarr.
{user}ilan-gold ({pr}1927)zarr <3 dependency {user}ilan-gold ({pr}2309)anndata.AnnData.X is now copy-on-write like the other elements like {attr}~anndata.AnnData.layers. Operations like my_subset.X = 0 will not propagate back to original object. {user}ilan-gold ({pr}2338)Anndata.__{set,del}item__ {user}ilan-gold ({pr}2367)AnnData.concatenate {user}ilan-gold ({pr}2370)anndata.settings.allow_write_nullable_strings to new default None, which means the writing of pandas string arrays will be controlled by pandas.options.future.infer_string (see the {doc}pandas:user_guide/migration-3-strings).
Setting allow_write_nullable_strings=False explicitly now means to try writing the array in the non-nullable string array format, which was the only supported format up to anndata 0.11. {smaller}P Angerer ({pr}2133)anndata.settings.disallow_forward_slash_in_h5ad to True.
Document writing to k="/" in {func}~anndata.io.write_elem and check k more strictly {user}flying-sheep ({pr}2436)consolidate_metadata argument to {meth}~anndata.AnnData.write_zarr to allow opting out of consolidated metadata easily. No longer warn on its writing as it appears to be heading for stability in zarr. {user}ilan-gold ({pr}2497)Move {attr}~anndata.AnnData.X into {attr}anndata.AnnData.layers under the None key.
As result, layers: X shows up in AnnData’s text representation, None appears in .layers.items()/.keys(), {func}~anndata.concat now works when some AnnDatas have no X.
{user}flying-sheep & {user}ilan-gold ({pr}1707)
Support setting with array-api compatible objects i.e., adata.X = jax.numpy.array([[0, 1], [2, 3]]) {user}ilan-gold {user}amalia-k510 ({pr}2071)
Add support for Dask {class}dask.array.Arrays containing {class}~scipy.sparse.sparrays {user}flying-sheep ({pr}2087)
Add {ref}accessors for referencing vectors in {class}~anndata.AnnData and {class}~mudata.MuData {user}flying-sheep ({pr}2290)
New {meth}anndata.AnnData.unwriteable for checking if an AnnData can be written {user}ilan-gold ({pr}2372)
Create a new setting {attr}anndata.settings.restrict_index_types to allow for custom in-memory indexes (i.e., for {attr}~anndata.AnnData.obs and {attr}~anndata.AnnData.var) to be passed to an {class}~anndata.AnnData object without being converted to a string type.
Note that indexes recognized by {func}pandas.api.types.is_integer_dtype will still be stringified regardless of the setting.
{user}ilan-gold ({pr}2379)
anndata.settings.zarr_write_format is now 3 and {func}anndata.settings.auto_shard_zarr_v3 is now True (with None removed as an option).
This means that sharded zarr v3 stores will be written with a target uncompressed shard size of 1GB unless the user either
zarr.Group with zarr_format=2, orshards in dataset_kwargs passed in to {func}~anndata.io.write_elem{user}ilan-gold ({pr}2439)
Add extra for CUDA 13 (anndata[cu13]) {user}grst
anndata.AnnData.copy so that it provides an informative error when trying to copy and object that contains {class}h5py.Dataset, {class}zarr.Array, {class}anndata.abc.CSRDataset, or {class}anndata.abc.CSCDataset {user}ilan-gold ({pr}2406)~anndata.AnnData.X/{attr}~anndata.AnnData.layers spec at the IO boundary: higher-dimensional arrays now warn (rather than error for {attr}~anndata.AnnData.X, and silent accept for {attr}~anndata.AnnData.layers) in memory, writing one raises a clear error, and reading a non-conforming file warns instead of silently loading it. {user}eroellzarrs-python <zarrs:index> by default for {func}anndata.io.read_zarr and {func}anndata.io.write_zarr if it is installed {user}ilan-gold ({pr}2326)https://anndata.readthedocs.io/en/latest/release-notes/index.html#rc2-2026-06-23
https://anndata.readthedocs.io/en/latest/release-notes/index.html#rc2-2026-06-18
https://anndata.readthedocs.io/en/latest/release-notes/index.html#rc1-2026-05-20
https://anndata.readthedocs.io/en/latest/release-notes/index.html#rc1-2026-05-20
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-19
Fix a version-check path for scverse_misc @ilan-gold ( #2525 )
(v0.12.19)=
2026-07-02scverse_misc {user}ilan-gold ({pr}2525)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-18
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-17
Deprecate AnnLoader in favor of annbatch.Loader @ilan-gold ( #2493 )
Fix read_lazy() crashing on empty (zero-length) arrays, e.g. an empty array stored in uns gaoflow ( #2473 )
(v0.12.17)=
2026-06-16~anndata.experimental.AnnLoader in favor of {class}annbatch.Loader {user}ilan-gold ({pr}2493)~anndata.experimental.read_lazy crashing on empty (zero-length) arrays, e.g. an empty array stored in {attr}~anndata.AnnData.uns {smaller}gaoflow ({pr}2473)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-15
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-15
0.12.15 was released against main accidentally and yanked. This version contains the correct branch.
(v0.12.16)=
2026-05-180.12.15 was released against main accidentally and yanked. This version contains the correct branch.- Make sure indices , data , and indptr have zarr.config.set({'array.target_shard_size_bytes'}) applied instead of having one override the other’s set
Make sure indices , data , and indptr have zarr.config.set({'array.target_shard_size_bytes'}) applied instead of having one override the other’s setting when writing sparse matrices. @ilan-gold ( #2445 )
Don’t warn when shards are explicitly set but anndata.settings.auto_shard_zarr_v3 is not @ilan-gold ( #2451 )
(v0.12.15)=
2026-05-18indices, data, and indptr have zarr.config.set({'array.target_shard_size_bytes'}) applied instead of having one override the other's setting when writing sparse matrices. {user}ilan-gold ({pr}2445)shards are explicitly set but {attr}anndata.settings.auto_shard_zarr_v3 is not {user}ilan-gold ({pr}2451)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-14
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-14
anndata.settings.auto_shard_zarr_v3 and anndata.settings.zarr_write_format are no longer dependent on each other, as stated in the docs @ilan-gold ( #2427 )
anndata.settings.auto_shard_zarr_v3 now utilizes zarr’s support for a target shard via zarr.config.set({"array.target_shard_size_bytes" ...}) (only zarr version >=3.1.4 ) to make the target shard size 1GB (uncompressed) if not otherwise set. @ilan-gold ( #2427 )
(v0.12.14)=
2026-05-12anndata.settings.auto_shard_zarr_v3 and anndata.settings.zarr_write_format are no longer dependent on each other, as stated in the docs {user}ilan-gold ({pr}2427)anndata.settings.auto_shard_zarr_v3 now utilizes zarr's support for a target shard via zarr.config.set({"array.target_shard_size_bytes" ...}) (only zarr version >=3.1.4) to make the target shard size 1GB (uncompressed) if not otherwise set. {user}ilan-gold ({pr}2427)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-13
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-13
Ensure non-string indexes are preserved in uns using read_lazy() (introduced by #2419 ) @ilan-gold ( #2423 )
(v0.12.13)=
2026-05-07~anndata.AnnData.uns using {func}~anndata.experimental.read_lazy (introduced by {pr}2419) {user}ilan-gold ({pr}2423)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-12
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-12
Disallow anndata.AnnData.transpose() when X or layers contains h5py.Dataset , zarr.Array , anndata.abc.CSRDataset , or anndata.abc.CSCDataset @ilan-gold . ( #2399 )
Don’t force anndata.settings.check_uniqueness if user loads an annotation index with anndata.experimental.read_lazy() @ilan-gold . ( #2419 )
(v0.12.12)=
2026-05-06anndata.AnnData.transpose when X or layers contains {class}h5py.Dataset, {class}zarr.Array ,{class}anndata.abc.CSRDataset, or {class}anndata.abc.CSCDataset {user}ilan-gold. ({pr}2399)anndata.settings.check_uniqueness if user loads an annotation index with {func}anndata.experimental.read_lazy {user}ilan-gold. ({pr}2419)- anndata.settings.zarr_write_format and anndata.settings.auto_shard_zarr_v3 can now be set together @ilan-gold
anndata.settings.zarr_write_format and anndata.settings.auto_shard_zarr_v3 can now be set together @ilan-gold ( #2342 )
Check Raw length on creation and fix associated .adata in Raw slicing @P Angerer ( #2351 )
Ensure the index name along obs and var are not lost when reading/writing to disk after reading with read_lazy() @ilan-gold ( #2358 )
Accelerate outer joins on dask-sparse matrices with unchunked minor axes in anndata.concat() @ilan-gold ( #2395 )
(v0.12.11)=
2026-04-21anndata.settings.zarr_write_format and {attr}anndata.settings.auto_shard_zarr_v3 can now be set together {user}ilan-gold ({pr}2342)Raw length on creation and fix associated .adata in Raw slicing {user}P Angerer ({pr}2351)obs and var are not lost when reading/writing to disk after reading with {func}~anndata.experimental.read_lazy {user}ilan-gold ({pr}2358)anndata.concat {user}ilan-gold ({pr}2395)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-10
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-10
Add anndata.settings.copy_on_write_X to allow for forward-compatibility with future copy-on-write behavior (release 0.13 ). Currently, setting X on a view implicitly updates the object from which the view was created. @ilan-gold ( #2327 )
(v0.12.10)=
2026-02-06anndata.settings.copy_on_write_X to allow for forward-compatibility with future copy-on-write behavior (release 0.13). Currently, setting {attr}~anndata.AnnData.X on a view implicitly updates the object from which the view was created. {user}ilan-gold ({pr}2327)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-9
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-9
Add a write_csr_csc_indices_with_min_possible_dtype option to anndata.settings to enable downcasting of the indices of csr and csc matrices to a smaller dtype when writing. For example, if your csr matrix only has 30000 columns, then you can write out the indices of that matrix as uint16 instead of int64 . @ilan-gold ( #2159 )
(v0.12.9)=
2026-01-29write_csr_csc_indices_with_min_possible_dtype option to {attr}anndata.settings to enable downcasting of the indices of csr and csc matrices to a smaller dtype when writing. For example, if your csr matrix only has 30000 columns, then you can write out the indices of that matrix as uint16 instead of int64. {user}ilan-gold ({pr}2159)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-8
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-8
Actually copy single zarr store input in anndata.experimental.concat_on_disk() @ilan-gold ( #2267 )
Fix compressor kwarg handling when writing to zarr v3 @ilan-gold ( #2270 )
Only open HDF5 file once in backed mode @flying-sheep ( #2274 )
Fix numpy.uint support in anndata.experimental.read_lazy() and anndata.experimental.read_elem_lazy() @flying-sheep ( #2287 )
var index is loaded into memory if it wasn’t previously for anndata.concat() when anndata.AnnData.var is a anndata.experimental.backed.Dataset2D @ilan-gold ( #2299 )
(v0.12.8)=
2026-01-27anndata.experimental.concat_on_disk {user}ilan-gold ({pr}2267)compressor kwarg handling when writing to zarr v3 {user}ilan-gold ({pr}2270)flying-sheep ({pr}2274)numpy.uint support in {func}anndata.experimental.read_lazy and {func}anndata.experimental.read_elem_lazy {user}flying-sheep ({pr}2287)var index is loaded into memory if it wasn't previously for {func}anndata.concat when {attr}anndata.AnnData.var is a {class}anndata.experimental.backed.Dataset2D {user}ilan-gold ({pr}2299)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-7
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-7
Add cruft config & update contributors zethson ( #2223 )
Handle pandas.options.future.infer_string P Angerer I Gold ( #2133 )
Ensure there are no dangling file handles in anndata.experimental.concat_on_disk() when passing .h5ad -terminated strings as path inputs. @ilan-gold ( #2218 )
Ensure anndata.experimental.backed.Dataset2D.true_index is carried over when subsetting by columns i.,e ds[[col1, col2]] @ilan-gold ( #2220 )
(v0.12.7)=
2025-12-16zethson ({pr}2223)pandas.options.future.infer_string {smaller}P Angerer {smaller}I Gold ({pr}2133)anndata.experimental.concat_on_disk when passing .h5ad-terminated strings as path inputs. {user}ilan-gold ({pr}2218)anndata.experimental.backed.Dataset2D.true_index is carried over when subsetting by columns i.,e ds[[col1, col2]] {user}ilan-gold ({pr}2220)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-6
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-6
Attach h5py.File object to AnnData at the file attribute returned from read_lazy() @ilan-gold ( #2204 )
(v0.12.6)=
2025-11-06h5py.File object to {class}~anndata.AnnData at the file attribute returned from {func}~anndata.experimental.read_lazy {user}ilan-gold ({pr}2204)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-5
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-5
Remove use of private read_dataset internally inside anndata.experimental.read_elem_lazy() @ilan-gold ( #2158 )
Unblock version restriction on dask distributed writing by using threading scheduler always (see #2172 ) @ilan-gold ( #2183 )
Use name on dask.array.map_blocks() internally when concatenating anndata.experimental.backed.Dataset2D objects whose categoricals/nullable types must be converted to dask arrays @ilan-gold ( #2121 )
Enable automatic sharding in zarr v3 via anndata.settings.auto_shard_zarr_v3 (via zarr ’s own auto sharding mechanism i.e., shards="auto" ) for all types except numpy.recarray @ilan-gold ( #2167 )
(v0.12.5)=
2025-11-03read_dataset internally inside {func}anndata.experimental.read_elem_lazy {user}ilan-gold ({pr}2158)dask distributed writing by using threading scheduler always (see {pr}2172) {user}ilan-gold ({pr}2183)name on {func}dask.array.map_blocks internally when concatenating {class}anndata.experimental.backed.Dataset2D objects whose categoricals/nullable types must be converted to dask arrays {user}ilan-gold ({pr}2121)anndata.settings.auto_shard_zarr_v3 (via {mod}zarr's own auto sharding mechanism i.e., shards="auto") for all types except {class}numpy.recarray {user}ilan-gold ({pr}2167)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-4
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-4
dask.array.store() was producing corrupted data with zarr v3 + distributed scheduler + a lock (which we used internally): see dask/dask#12109 . Thus dense arrays were potentially being stored with corrupted data. The solution is to remove the lock for newer versions of dask but without the lock in older versions, it is impossible to store the data. Thus versions of dask older than 2025.4.0 will not be supported for writing dense data. @ilan-gold
(v0.12.4)=
2025-10-27dask.array.store was producing corrupted data with zarr v3 + distributed scheduler + a lock (which we used internally): see {issue}dask/dask#12109. Thus dense arrays were potentially being stored with corrupted data. The solution is to remove the lock for newer versions of dask but without the lock in older versions, it is impossible to store the data. Thus versions of dask older than 2025.4.0 will not be supported for writing dense data. {user}ilan-goldhttps://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-3
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-3
Deprecate AnnData.*_keys() methods. @flying-sheep ( #2102 )
Deprecate version and use standard version() API @flying-sheep ( #1318 )
Allow writing of views of dask.array.Array @ilan-gold ( #2084 )
Enable writing of views of AnnData in backed mode @ilan-gold ( #2092 )
Reallow writing of keys in h5ad files with forward slashes instead of erroring. Now a warning will be raised that the behavior will be disallowed in the future. To enable the new behavior, use anndata.settings.disallow_forward_slash_in_h5ad . @ilan-gold ( #2097 )
Respect off-axis merge options in anndata.experimental.concat_on_disk() @ilan-gold ( #2122 )
(v0.12.3)=
2025-10-16AnnData.*_keys() methods. {user}flying-sheep ({pr}2102)__version__ and use standard {func}~importlib.metadata.version API {user}flying-sheep ({pr}1318)dask.array.Array {user}ilan-gold ({pr}2084)~anndata.AnnData in backed mode {user}ilan-gold ({pr}2092)h5ad files with forward slashes instead of erroring.
Now a warning will be raised that the behavior will be disallowed in the future.
To enable the new behavior, use {attr}anndata.settings.disallow_forward_slash_in_h5ad. {user}ilan-gold ({pr}2097)anndata.experimental.concat_on_disk {user}ilan-gold ({pr}2122)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-2
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-2
(v0.12.2)=
2025-08-11~anndata.AnnData.X got written to disk when it was None {user}flying-sheep ({pr}2054)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-1
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-1
(v0.12.1)=
2025-07-23chunks argument for {func}anndata.experimental.read_elem_lazy so that it uses the on-disk chunking when possible, and allow users to pass this argument through to the reading of {class}anndata.experimental.backed.Dataset2D {user}ilan-gold ({pr}2033)h5 1d arrays that are opened via {func}anndata.experimental.read_elem_lazy {user}ilan-gold ({pr}2035)https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-0
https://anndata.readthedocs.io/en/stable/release-notes/index.html#v0-12-0
rc4 2025-06-18
rc3 2025-05-20
rc2 2025-05-15
rc1 2025-04-09
rc1 Remove anndata.read @ilan-gold ( #1766 )
rc1 Tighten usage of scipy.sparse.spmatrix for describing sparse matrices in types and instance checks to only scipy.sparse.csr_matrix and scipy.sparse.csc_matrix @ilan-gold ( #1768 )
rc1 Disallow declaration of AnnData with non- cs{r,c} sparse data-structures @ilan-gold ( #1829 )
rc1 Upgrade all DeprecationWarning s to FutureWarning s @ilan-gold ( #1874 )
rc4 Lower bound xarray by 2025.06.01 . pandas.arrays.StringArray was previously used as the in-memory nullable-string-array container in xarray , but due to pydata/xarray#10419 now uses numpy.ndarray with an object data type. @ilan-gold ( #2008 )
Fix anndata.experimental.backed.Dataset2D.reindex() internal setting @ilan-gold ( #2018 )
rc1 Disallow writing of Dataset2D objects @ilan-gold ( #1887 )
rc1 Upgrade old deprecation warning to a FutureWarning on BaseCompressedSparseDataset.setitem , showing our intent to remove the feature in the next release. @ilan-gold ( #1928 )
rc1 Don’t use asyncio.run() internally for any operations @ilan-gold ( #1933 )
rc1 Disallow forward slashes in keys for writing @ilan-gold ( #1940 )
rc2 Convert 1d numpy.ndarray and cupy.ndarray s in anndata.AnnData.obsm and anndata.AnnData.varm to 2d @ilan-gold ( #1962 )
rc3 Update zarr v3 bound to >3.0.8 to prevent corrupted data zarr-developers/zarr-python#3061 @ilan-gold ( #1993 )
rc1 None values can now be serialized to .h5ad and .zarr , preserving e.g. uns structure through saving and loading @flying-sheep ( #999 )
rc1 Add read_elem_lazy() (in place of read_elem_as_dask ) to handle backed dataframes, sparse arrays, and dense arrays, as well as a read_lazy() to handle reading in as much of the on-disk data as possible to produce a AnnData object @ilan-gold ( #1247 )
rc1 Support zarr version 3 python package @ilan-gold ( #1726 )
rc1 Adopt the Scientific Python deprecation schedule @ilan-gold ( #1768 )
rc1 Allow zarr v3 writing of data @ilan-gold ( #1892 )
rc1 anndata.register_anndata_namespace() functionality for adding custom functionality to an AnnData object @srivarra ( #1870 )
rc2 Allow xarray Datasets to be used for obs/var/obsm/varm. @ilia-kats ( #1966 )
rc4 anndata.experimental.backed.Dataset2D now takes a compositional approach to wrapping xarray.Dataset which may have breaking changes over the past release versions. @ilan-gold ( #1997 )
rc4 Use numpy.dtypes.StringDType with na_object set to pandas.NA for nullable string data with anndata.experimental.backed.Dataset2D @ilan-gold ( #2011 )
rc2 Load AnnLoader lazily to prevent expensive unnecessary torch imports when its available on the system. @Zethson & @flying-sheep ( #1950 )
rc4 Improve read_elem_lazy() performance for h5ad files by not caching indptr . @ilan-gold ( #2005 )
rc4 Temporarily bound zarr to <3.1 until #1995 is merged to handle the new data type structure. @ilan-gold ( #2013 )
(v0.12.0)=
2025-07-16rc4 2025-06-18rc3 2025-05-20rc2 2025-05-15rc1 2025-04-09rc1 Remove anndata.read {user}ilan-gold ({pr}1766)rc1 Tighten usage of {class}scipy.sparse.spmatrix for describing sparse matrices in types and instance checks to only {class}scipy.sparse.csr_matrix and {class}scipy.sparse.csc_matrix {user}ilan-gold ({pr}1768)rc1 Disallow declaration of {class}~anndata.AnnData with non-cs{r,c} sparse data-structures {user}ilan-gold ({pr}1829)rc1 Upgrade all DeprecationWarnings to FutureWarnings {user}ilan-gold ({pr}1874)rc4 Lower bound xarray by 2025.06.01. {class}pandas.arrays.StringArray was previously used as the in-memory nullable-string-array container in xarray, but due to {issue}pydata/xarray#10419 now uses {class}numpy.ndarray with an object data type. {user}ilan-gold ({pr}2008)anndata.experimental.backed.Dataset2D.reindex internal setting {user}ilan-gold ({pr}2018)rc1 Disallow writing of {class}~anndata.experimental.backed.Dataset2D objects {user}ilan-gold ({pr}1887)rc1 Upgrade old deprecation warning to a FutureWarning on BaseCompressedSparseDataset.__setitem__, showing our intent to remove the feature in the next release. {user}ilan-gold ({pr}1928)rc1 Don't use {func}asyncio.run internally for any operations {user}ilan-gold ({pr}1933)rc1 Disallow forward slashes in keys for writing {user}ilan-gold ({pr}1940)rc2 Convert 1d {class}numpy.ndarray and {class}cupy.ndarrays in {attr}anndata.AnnData.obsm and {attr}anndata.AnnData.varm to 2d {user}ilan-gold ({pr}1962)rc3 Update zarr v3 bound to >3.0.8 to prevent corrupted data {issue}zarr-developers/zarr-python#3061 {user}ilan-gold ({pr}1993)rc1 {data}None values can now be serialized to .h5ad and .zarr,
preserving e.g. {attr}~anndata.AnnData.uns structure through saving and loading {user}flying-sheep ({pr}999)rc1 Add {func}~anndata.experimental.read_elem_lazy (in place of read_elem_as_dask) to handle backed dataframes, sparse arrays, and dense arrays, as well as a {func}~anndata.experimental.read_lazy to handle reading in as much of the on-disk data as possible to produce a {class}~anndata.AnnData object {user}ilan-gold ({pr}1247)rc1 Support {mod}zarr version 3 python package {user}ilan-gold ({pr}1726)rc1 Adopt the Scientific Python deprecation schedule {user}ilan-gold ({pr}1768)rc1 Allow {mod}zarr v3 writing of data {user}ilan-gold ({pr}1892)rc1 {func}anndata.register_anndata_namespace functionality for adding custom functionality to an {class}~anndata.AnnData object {user}srivarra ({pr}1870)rc2 Allow xarray Datasets to be used for obs/var/obsm/varm. {user}ilia-kats ({pr}1966)rc4 {class}anndata.experimental.backed.Dataset2D now takes a compositional approach to wrapping {class}xarray.Dataset which may have breaking changes over the past release versions. {user}ilan-gold ({pr}1997)rc4 Use {attr}numpy.dtypes.StringDType with na_object set to {data}pandas.NA for nullable string data with {class}anndata.experimental.backed.Dataset2D {user}ilan-gold ({pr}2011)rc2 Load AnnLoader lazily to prevent expensive unnecessary torch imports when its available on the system. {user}Zethson & {user}flying-sheep ({pr}1950)rc4 Improve {func}~anndata.experimental.read_elem_lazy performance for h5ad files by not caching indptr. {user}ilan-gold ({pr}2005)rc4 Temporarily bound {mod}zarr to <3.1 until {pr}1995 is merged to handle the new data type structure. {user}ilan-gold ({pr}2013)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
- Raise ImplicitModificationWarning when setting X on a view. @ilan-gold
Raise ImplicitModificationWarning when setting X on a view. @ilan-gold ( #1853 )
Bound dask due to dask/dask#11752 @ilan-gold ( #1859 )
Fix concatenation of anndata.AnnData objects along var using join="outer" when varm is not empty. @ilia-kats ( #1911 )
Add convert_strings_to_categoricals parameter also to write_h5ad() and write_zarr() as intended @flying-sheep ( #1914 )
Allow initialization of anndata.AnnData objects without X (since they could be constructed previously by deleting X ) @ilan-gold ( #1941 )
Fix version number inference in development environments (CI and local) @flying-sheep ( #1831 )
(v0.11.4)=
2025-03-26~anndata.ImplicitModificationWarning when setting X on a view. {user}ilan-gold ({pr}1853)dask due to {issue}dask/dask#11752 {user}ilan-gold ({pr}1859)anndata.AnnData objects along var using join="outer" when varm is not empty. {user}ilia-kats ({pr}1911)convert_strings_to_categoricals parameter also to {meth}~anndata.AnnData.write_h5ad and {meth}~anndata.AnnData.write_zarr as intended {user}flying-sheep ({pr}1914)anndata.AnnData objects without X (since they could be constructed previously by deleting X) {user}ilan-gold ({pr}1941)flying-sheep ({pr}1831)- Upper bound zarr at runtime @ilan-gold
Upper bound zarr at runtime @ilan-gold ( #1819 )
(v0.11.3)=
2025-01-10zarr at runtime {user}ilan-gold ({pr}1819)- Cache accesses to the data and indices arrays in CSRDataset and CSCDataset @ilan-gold
Cache accesses to the data and indices arrays in CSRDataset and CSCDataset @ilan-gold ( #1744 )
Error out on floating point indices that are not actually integers @ilan-gold ( #1746 )
write_elem now filters out incompatible dataset_kwargs when saving zero-dimensional arrays @ilia-kats ( #1783 )
Add scipy 1.5 compatibility @flying-sheep ( #1806 )
(v0.11.2)=
2025-01-07data and indices arrays in {class}~anndata.abc.CSRDataset and {class}~anndata.abc.CSCDataset {user}ilan-gold ({pr}1744)ilan-gold ({pr}1746)write_elem now filters out incompatible dataset_kwargs when saving zero-dimensional arrays {user}ilia-kats ({pr}1783)scipy 1.5 compatibility {user}flying-sheep ({pr}1806)anndata.abc.CSRDataset and {class}anndata.abc.CSCDataset for performance boost in zarr {user}ilan-gold ({pr}1790)- Remove upper pin on dask and exclude versions broken with sparse indexing @ilan-gold
Remove upper pin on dask and exclude versions broken with sparse indexing @ilan-gold ( #1725 )
Fix chunking with -1 in chunks argument of ~anndata.experimental.read_elem_as_dask @ilan-gold ( #1743 )
Fix cupy<0.13 imports in non-gpu environments @ilan-gold ( #1754 )
(v0.11.1)=
2024-11-12dask and exclude versions broken with sparse indexing {user}ilan-gold ({pr}1725)chunks argument of ~anndata.experimental.read_elem_as_dask {user}ilan-gold ({pr}1743)cupy<0.13 imports in non-gpu environments {user}ilan-gold ({pr}1754)…will still work, but are now considered deprecated and give a warning on import with the exception of anndata.io.read_zarr() and anndata.io.read_h5ad(…
Release candidates:
rc3 2024-10-14
rc2 2024-09-24
rc1 2024-09-04
Ensure anndata.concat() of AnnData object with scipy.sparse.spmatrix and scipy.sparse.sparray dask arrays uses the correct fill value of 0. @ilan-gold ( #1719 )
Ensure that views of AwkwardArrays have their “view” attributes removed on saving an AnnData object to disk. @grst ( #1736 )
rc3 Drop support for python 3.9 @ilan-gold ( #1712 )
rc2 A new anndata.io module contains all read_* and write_* functions, and all imports of such functions should go through this module. Old ways of importing these functions i.e., from anndata import read_csv or from anndata._io.specs import read_elem will still work, but are now considered deprecated and give a warning on import with the exception of anndata.io.read_zarr() and anndata.io.read_h5ad() , which will remain at the top-level anndata without warning. @ilan-gold ({pr} 1682`)
rc1 Removed deprecated modules anndata.core and anndata.readwrite @ivirshup ( #1197 )
rc1 No longer export sparse_dataset from anndata.experimental , instead exporting anndata.io.sparse_dataset() @ilan-gold ( #1642 )
rc1 Move RWAble and InMemoryElem out of experimental , renaming RWAble to AxisStorable and InMemoryElem to RWAble @ilan-gold ( #1643 )
rc2 Add extra dask dependency for installation i.e., pip install anndata[dask] @ilan-gold ( #1677 )
rc2 Remove shall_ from variable names in settings @ilan-gold ( #1685 )
rc1 Create new cupy installation options for cuda 11 & 12 called cu11 and cu12 @Intron7 ( #1596 )
rc1 Correct anndata.AnnData.X type to include CSRDataset and CSCDataset as possible types and being deprecation process for non-csr/csc scipy.sparse.spmatrix types in anndata.AnnData.X @ilan-gold ( #1616 )
Add support for ellipsis indexing of the AnnData object @ilan-gold ( #1729 )
rc1 scipy.sparse.csr_array and scipy.sparse.csc_array are now supported when constructing AnnData objects @ilan-gold @isaac-virshup ( #1028 )
rc1 Allow axis parameter of e.g. anndata.concat() to accept 'obs' and 'var' @flying-sheep ( #1244 )
rc1 Add settings object with methods for altering internally-used options, like checking for uniqueness on obs ’ index @ilan-gold ( #1270 )
rc1 Add remove_unused_categories option to anndata.settings to override current behavior @ilan-gold ( #1340 )
rc1 Add ~anndata.experimental.read_elem_as_dask function to handle i/o with sparse and dense arrays @ilan-gold ( #1469 )
rc1 Add ability to convert strings to categoricals on write in write_h5ad() and write_zarr() via convert_strings_to_categoricals parameter @falexwolf ( #1474 )
rc1 Add check_uniqueness option to anndata.settings to override current behavior @ilan-gold ( #1507 )
rc1 Add functionality to write from GPU dask.array.Array to disk @ilan-gold ( #1550 )
rc1 Read and write support for nullable string arrays ( pandas.arrays.StringArray ). Use pandas’ Options and settings mode.string_storage to control which storage mode is used when reading dtype="string" columns. @flying-sheep ( #1558 )
rc1 Export write_elem() and read_elem() directly from the main package instead of experimental @ilan-gold ( #1598 )
rc1 Allow reading sparse data (via read_elem() or sparse_dataset() ) into either scipy.sparse.csr_array or scipy.sparse.csc_array via anndata.settings.use_sparse_array_on_read @ilan-gold ( #1633 )
(v0.11.0)=
2024-11-07Release candidates:
rc3 2024-10-14rc2 2024-09-24rc1 2024-09-04anndata.concat of {class}~anndata.AnnData object with {class}scipy.sparse.spmatrix and {class}scipy.sparse.sparray dask arrays uses the correct fill value of 0. {user}ilan-gold ({pr}1719)~anndata.AnnData object to disk. {user}grst ({pr}1736)rc3 Drop support for python 3.9 {user}ilan-gold ({pr}1712)rc2 A new anndata.io module contains all read_* and write_* functions, and all imports of such functions should go through this module. Old ways of importing these functions i.e., from anndata import read_csv or from anndata._io.specs import read_elem will still work, but are now considered deprecated and give a warning on import with the exception of {func}anndata.io.read_zarr and {func}anndata.io.read_h5ad, which will remain at the top-level anndata without warning. {user}ilan-gold ({pr}1682`)rc1 Removed deprecated modules anndata.core and anndata.readwrite {user}ivirshup ({pr}1197)rc1 No longer export sparse_dataset from anndata.experimental, instead exporting {func}anndata.io.sparse_dataset {user}ilan-gold ({pr}1642)rc1 Move RWAble and InMemoryElem out of experimental, renaming RWAble to AxisStorable[^storable] and InMemoryElem to {type}~anndata.typing.RWAble {user}ilan-gold ({pr}1643)rc2 Add extra dask dependency for installation i.e., pip install anndata[dask] {user}ilan-gold ({pr}1677)rc2 Remove shall_ from variable names in settings {user}ilan-gold ({pr}1685)rc1 Create new cupy installation options for cuda 11 & 12 called cu11 and cu12 {user}Intron7 ({pr}1596)rc1 Correct {attr}anndata.AnnData.X type to include {class}~anndata.abc.CSRDataset and {class}~anndata.abc.CSCDataset as possible types and being deprecation process for non-csr/csc {class}scipy.sparse.spmatrix types in {attr}anndata.AnnData.X {user}ilan-gold ({pr}1616)~anndata.AnnData object {user}ilan-gold ({pr}1729)rc1 scipy.sparse.csr_array and scipy.sparse.csc_array are now supported when constructing AnnData objects {user}ilan-gold {user}isaac-virshup ({pr}1028)rc1 Allow axis parameter of e.g. {func}anndata.concat to accept 'obs' and 'var' {user}flying-sheep ({pr}1244)rc1 Add settings object with methods for altering internally-used options, like checking for uniqueness on obs' index {user}ilan-gold ({pr}1270)rc1 Add {attr}~anndata.settings.remove_unused_categories option to {attr}anndata.settings to override current behavior {user}ilan-gold ({pr}1340)rc1 Add ~anndata.experimental.read_elem_as_dask function to handle i/o with sparse and dense arrays {user}ilan-gold ({pr}1469)rc1 Add ability to convert strings to categoricals on write in {meth}~anndata.AnnData.write_h5ad and {meth}~anndata.AnnData.write_zarr via convert_strings_to_categoricals parameter {user} falexwolf ({pr}1474)rc1 Add {attr}~anndata.settings.check_uniqueness option to {attr}anndata.settings to override current behavior {user}ilan-gold ({pr}1507)rc1 Add functionality to write from GPU {class}dask.array.Array to disk {user}ilan-gold ({pr}1550)rc1 Read and write support for nullable string arrays ({class}pandas.arrays.StringArray). Use pandas’ {doc}pandas:user_guide/options mode.string_storage to control which storage mode is used when reading dtype="string" columns. {user}flying-sheep ({pr}1558)rc1 Export {func}~anndata.io.write_elem and {func}~anndata.io.read_elem directly from the main package instead of experimental {user}ilan-gold ({pr}1598)rc1 Allow reading sparse data (via {func}~anndata.io.read_elem or {func}~anndata.io.sparse_dataset) into either {class}scipy.sparse.csr_array or {class}scipy.sparse.csc_array via {attr}anndata.settings.use_sparse_array_on_read {user}ilan-gold ({pr}1633)[^storable]: anndata.typing.AxisStorable was later again renamed to {type}~anndata.typing.Storable
Nothing published for this version
Nothing published for this version
Nothing published for this version
- Fix writing large number of columns for h5 files @ilan-gold @selmanozleyen
Fix writing large number of columns for h5 files @ilan-gold @selmanozleyen ( #1147 )
Add warning for setting X on a view with repeated indices @ilan-gold ( #1501 )
Coerce numpy.matrix classes to arrays when trying to store them in AnnData @flying-sheep ( #1516 )
Fix for setting a dense X view with a sparse matrix @ilan-gold ( #1532 )
Upper bound numpy for gpu installation on account of cupy/cupy#8391 @ilan-gold ( #1540 )
Upper bound dask on account of #1579 @ilan-gold ( #1580 )
Ensure setting pandas.DataFrame.index on a view of a AnnData instantiates the DataFrame from the view @ilan-gold ( #1586 )
Disallow using DataFrame s with multi-index columns @ilan-gold ( #1589 )
create new cupy installation options for cuda 11 & 12 called cu11 and cu12 @Intron7 ( #1596 )
add callback typing for read_dispatched() and write_dispatched() @ilan-gold ( #1557 )
Support for concat_on_disk outer join @ilan-gold ( #1504 )
(v0.10.9)=
2024-08-28h5 files {user}ilan-gold {user}selmanozleyen ({pr}1147)X on a view with repeated indices {user}ilan-gold ({pr}1501)numpy.matrix classes to arrays when trying to store them in AnnData {user}flying-sheep ({pr}1516)X view with a sparse matrix {user}ilan-gold ({pr}1532)numpy for gpu installation on account of {issue}cupy/cupy#8391 {user}ilan-gold ({pr}1540)1579 {user}ilan-gold ({pr}1580)pandas.DataFrame.index on a view of a {class}~anndata.AnnData instantiates the {class}~pandas.DataFrame from the view {user}ilan-gold ({pr}1586)~pandas.DataFrames with multi-index columns {user}ilan-gold ({pr}1589)cupy installation options for cuda 11 & 12 called cu11 and cu12 {user}Intron7 ({pr}1596)callback typing for {func}~anndata.experimental.read_dispatched and {func}~anndata.experimental.write_dispatched {user}ilan-gold ({pr}1557)concat_on_disk outer join {user}ilan-gold ({pr}1504)- Write out 64bit indptr when appropriate for concat_on_disk() #1493 @ilan-gold
Write out 64bit indptr when appropriate for concat_on_disk() #1493 @ilan-gold
Support for Numpy 2 #1499 @flying-sheep
Fix sparse_dataset() docstring test on account of new scipy version #1514 @ilan-gold
Improved example for sparse_dataset() #1468 @ivirshup
(v0.10.8)=
2024-06-2064bit indptr when appropriate for {func}~anndata.experimental.concat_on_disk {pr}1493 {user}ilan-gold1499 {user}flying-sheep~anndata.io.sparse_dataset docstring test on account of new {mod}scipy version {pr}1514 {user}ilan-gold~anndata.io.sparse_dataset {pr}1468 {user}ivirshup- Handle upstream numcodecs bug where read-only string arrays cannot be encoded @ivirshup #1421
Handle upstream numcodecs bug where read-only string arrays cannot be encoded @ivirshup #1421
Use in-memory sparse matrix directly to fix compatibility with scipy 1.13 @ilan-gold #1435
Remove vindex for subsetting dask.array.Array because of its slowness and memory consumption @ilan-gold #1432
(v0.10.7)=
2024-04-09numcodecs bug where read-only string arrays cannot be encoded {user}ivirshup {pr}1421scipy 1.13 {user}ilan-gold {pr}1435vindex for subsetting dask.array.Array because of its slowness and memory consumption {user}ilan-gold {pr}1432- Defer import of zarr in test helpers, as scanpy CI job relies on them #1343 @ilan-gold
Defer import of zarr in test helpers, as scanpy CI job relies on them #1343 @ilan-gold
Writing a dataframe with non-unique column names now throws an error, instead of silently overwriting #1335 @ivirshup
Bring optimization from #1233 to indexing on the whole AnnData object, not just the sparse dataset itself #1365 @ilan-gold
Fix mean slice length checking to use improved performance when indexing backed sparse matrices with boolean masks along their major axis #1366 @ilan-gold
Fixed overflow occurring when writing dask arrays with sparse chunks by always writing dask arrays with 64 bit indptr and indices, and adding an overflow check to .append method of sparse on disk structures #1348 @ivirshup
Modified ValueError message for invalid .X during construction to show more helpful list instead of ambiguous name #1395 @eroell
Pin array-api-compat!=1.5 to avoid incorrect implementation of asarray #1411 @ivirshup
Type hints and docstrings for .to_df method are updated and fixed #1402 @WeilerP
anndata ’s CI now tests against minimum versions of it’s dependencies. As a result, several dependencies had their minimum required version bumped. See diff for details #1314 @ivirshup
anndata now tests against Python 3.12 #1373 @ivirshup
(v0.10.6)=
2024-03-111343 {user}ilan-gold1335 {user}ivirshup1233 to indexing on the whole AnnData object, not just the sparse dataset itself {pr}1365 {user}ilan-gold1366 {user}ilan-gold.append method of sparse on disk structures {pr}1348 {user}ivirshupValueError message for invalid .X during construction to show more helpful list instead of ambiguous __name__ {pr}1395 {user}eroellarray-api-compat!=1.5 to avoid incorrect implementation of asarray {pr}1411 {user}ivirshup.to_df method are updated and fixed {pr}1402 {user}WeilerPanndata's CI now tests against minimum versions of it's dependencies. As a result, several dependencies had their minimum required version bumped. See diff for details {pr}1314 {user}ivirshupanndata now tests against Python 3.12 {pr}1373 {user}ivirshupNothing published for this version
- Fix outer concatenation along variables when only a subset of objects had an entry in layers #1291 @ivirshup
Fix outer concatenation along variables when only a subset of objects had an entry in layers #1291 @ivirshup
Fix comparison of >2d arrays in uns during concatenation #1300 @ivirshup
Fix IO with awkward array version 2.5.2 #1328 @ivirshup
Fix bug (introduced in 0.10.4) where indexing an AnnData with list[bool] would return the wrong result #1332 @ivirshup
Re-add search-as-you-type, this time via readthedocs-sphinx-search #1311 @flying-sheep
BaseCompressedSparseDataset ’s indptr is cached #1266 @ilan-gold
Improved performance when indexing backed sparse matrices with boolean masks along their major axis #1233 @ilan-gold
(v0.10.5)=
2024-01-251291 {user}ivirshupuns during concatenation {pr}1300 {user}ivirshup1328 {user}ivirshuplist[bool] would return the wrong result {pr}1332 {user}ivirshupreadthedocs-sphinx-search {pr}1311 {user}flying-sheepBaseCompressedSparseDataset's indptr is cached {pr}1266 {user}ilan-gold1233 {user}ilan-gold- Only try to use Categorical.map(na_action=…) in actually supported Pandas ≥2.1 #1226 @flying-sheep
Only try to use Categorical.map(na_action=…) in actually supported Pandas ≥2.1 #1226 @flying-sheep
AnnData.sizeof() support for backed datasets #1230 @Neah-Ko
adata[:, []] now returns an AnnData object empty on the appropriate dimensions instead of erroring #1243 @ilan-gold
adata.X[mask] works in newer numpy versions when X is backed #1255 @ilan-gold
adata.X[...] fixed for X as a BaseCompressedSparseDataset with zarr backend #1265 @ilan-gold
Improve read/write error reporting #1273 @flying-sheep
Improve aligned mapping error messages #1252 @flying-sheep
(v0.10.4)=
2024-01-04Categorical.map(na_action=…) in actually supported Pandas ≥2.1 {pr}1226 {user}flying-sheepAnnData.__sizeof__() support for backed datasets {pr}1230 {user}Neah-Koadata[:, []] now returns an AnnData object empty on the appropriate dimensions instead of erroring {pr}1243 {user}ilan-goldadata.X[mask] works in newer numpy versions when X is backed {pr}1255 {user}ilan-goldadata.X[...] fixed for X as a BaseCompressedSparseDataset with zarr backend {pr}1265 {user}ilan-gold1273 {user}flying-sheep1252 {user}flying-sheep- Prevent pandas from causing infinite recursion when setting a slice of a categorical column #1211 @flying-sheep
Prevent pandas from causing infinite recursion when setting a slice of a categorical column #1211 @flying-sheep
Stop showing “Support for Awkward Arrays is currently experimental” warnings when reading, concatenating, slicing, or transposing AnnData objects #1182 @flying-sheep
Fail canary CI job when tests raise unexpected warnings. #1182 @flying-sheep
(v0.10.3)=
2023-10-311211 {user}flying-sheep1182 {user}flying-sheep1182 {user}flying-sheep- Added compatibility layer for packages relying on anndata._core.sparse_dataset.SparseDataset . Note that this API is deprecated and new code should…
Added compatibility layer for packages relying on anndata._core.sparse_dataset.SparseDataset . Note that this API is deprecated and new code should use anndata.CSRDataset , ~anndata.CSCDataset , and anndata.sparse_dataset instead. #1185 @ivirshup
Handle deprecation warning from pd.Categorical.map thrown during anndata.concat #1189 @flying-sheep @ivirshup
Fixed extra steps being included in IO tracebacks #1193 @flying-sheep
as_dense argument of write_h5ad no longer writes an array without encoding metadata #1193 @flying-sheep
Improved performance of concat_on_disk with dense arrays in some cases #1169 @selmanozleyen
(v0.10.2)=
2023-10-11anndata._core.sparse_dataset.SparseDataset.
Note that this API is deprecated and new code should use anndata.CSRDataset, ~anndata.CSCDataset, and anndata.sparse_dataset instead.
{pr}1185 {user}ivirshuppd.Categorical.map thrown during anndata.concat {pr}1189 {user}flying-sheep {user}ivirshup1193 {user}flying-sheepas_dense argument of write_h5ad no longer writes an array without encoding metadata {pr}1193 {user}flying-sheepconcat_on_disk with dense arrays in some cases {pr}1169 {user}selmanozleyen- Fix ad.concat erroring when concatenating a categorical and object column #1171 @ivirshup
Fix ad.concat erroring when concatenating a categorical and object column #1171 @ivirshup
(v0.10.1)=
2023-10-08ad.concat erroring when concatenating a categorical and object column {pr}1171 {user}ivirshup- Deprecate anndata.read , which was just an alias for anndata.io.read_h5ad() #1108 @ivirshup .
GPU Support
Dense and sparse CuPy arrays are now supported #1066 @ivirshup
Once you have CuPy arrays in your anndata, use it with: rapids-singlecell from v0.9+
anndata now has GPU enabled CI. Made possibly by a grant from CZI’s EOSS program and managed via Cirun #1066 #1084 @Zethson @ivirshup
Out of core
Concatenate on-disk anndata objects with anndata.experimental.concat_on_disk() #955 @selmanozleyen
AnnData can now hold dask arrays with scipy.sparse.spmatrix chunks #1114 @ivirshup
Public API for interacting with on disk sparse arrays: sparse_dataset() , CSRDataset , and CSCDataset #765 @ilan-gold @ivirshup
Improved performance for simple slices of OOC sparse arrays #1131 @ivirshup
Improved errors and warnings
Improved error messages when combining dataframes with duplicated column names #1029 @ivirshup
Improved warnings when modifying views of AlingedMappings #1016 @flying-sheep @ivirshup
AnnDataReadError s have been removed. The original error is now thrown with additional information in a note #1055 @ivirshup
Added zarr examples to file format docs #1162 @ivirshup
anndata.AnnData.transpose() no longer copies unnecessarily. If you rely on the copying behavior, call .copy on the resulting object. #1114 @ivirshup
Bump minimum python version to 3.9 #1117 @flying-sheep
Deprecate anndata.read , which was just an alias for anndata.io.read_h5ad() #1108 @ivirshup .
dtype argument to AnnData constructor is now deprecated #1153 @ivirshup
Fix shape inference on initialization when X=None is specified #1121 @flying-sheep
(v0.10.0)=
2023-10-06GPU Support
CuPy arrays are now supported {pr}1066 {user}ivirshup
CuPy arrays in your anndata, use it with: rapids-singlecell from v0.9+1066 {pr}1084 {user}Zethson {user}ivirshupOut of core
anndata.experimental.concat_on_disk {pr}955 {user}selmanozleyenscipy.sparse.spmatrix chunks {pr}1114 {user}ivirshup~anndata.io.sparse_dataset, {class}~anndata.abc.CSRDataset, and {class}~anndata.abc.CSCDataset {pr}765 {user}ilan-gold {user}ivirshup1131 {user}ivirshupImproved errors and warnings
1029 {user}ivirshupAlingedMappings {pr}1016 {user}flying-sheep {user}ivirshupAnnDataReadErrors have been removed. The original error is now thrown with additional information in a note {pr}1055 {user}ivirshupfile format docs</fileformat-prose> {pr}1162 {user}ivirshupanndata.AnnData.transpose no longer copies unnecessarily. If you rely on the copying behavior, call .copy on the resulting object. {pr}1114 {user}ivirshup1117 {user}flying-sheepanndata.read, which was just an alias for {func}anndata.io.read_h5ad {pr}1108 {user}ivirshup.dtype argument to AnnData constructor is now deprecated {pr}1153 {user}ivirshupX=None is specified {pr}1121 {user}flying-sheepNothing published for this version
- Views of awkward.Array s now work with awkward>=2.3 #1040 @ivirshup
Views of awkward.Array s now work with awkward>=2.3 #1040 @ivirshup
Fix ufuncs of views like adata.X[:10].cov(axis=0) returning views #1043 @flying-sheep
Fix instantiating AnnData where .X is a DataFrame with an integer valued index #1002 @flying-sheep
Fix read_zarr() when used on zarr.Group #1057 @ivirshup
(v0.9.2)=
2023-07-25awkward.Arrays now work with awkward>=2.3 {pr}1040 {user}ivirshupadata.X[:10].cov(axis=0) returning views {pr}1043 {user}flying-sheep.X is a DataFrame with an integer valued index {pr}1002 {user}flying-sheep~anndata.io.read_zarr when used on zarr.Group {pr}1057 {user}ivirshup- Fixing windows support #958 @Koncopd
Fixing windows support #958 @Koncopd
(v0.9.1)=
2023-04-11958 {user}Koncopd- Previously deprecated force_dense argument AnnData.write_h5ad() has been removed. #855 @ivirshup
Added experimental support for dask arrays #813 @syelman @rahulbshrestha
obsm , varm and uns can now hold AwkwardArrays #647 @giovp , @grst , @ivirshup
Added experimental functions anndata.experimental.read_dispatched() and anndata.experimental.write_dispatched() which allow customizing IO with a callback #873 @ilan-gold @ivirshup
Better error messages during IO #734 @flying-sheep , @ivirshup
Unordered categorical columns are no longer cast to object during anndata.concat() #763 @ivirshup
New tutorials for experimental features
Dask Array Support to AnnData – #886 @syelman
Dask + Zarr, but Remote! – scverse/anndata-tutorials#17 @ilan-gold
Awkward Arrays in AnnData – scverse/anndata-tutorials#15 @grst
File format description now includes a more formal specification #882 @ivirshup
Interoperability : new page on interoperability with other packages #831 @ivirshup
Expanded docstring more documentation for backed argument of anndata.io.read_h5ad() #812 @jeskowagner
Documented how to use alternative compression methods for the h5ad file format, see AnnData.write_h5ad() #857 @nigeil
General typo corrections 😅 #870 @folded
The AnnData dtype argument no longer defaults to float32 #854 @ivirshup
Previously deprecated force_dense argument AnnData.write_h5ad() has been removed. #855 @ivirshup
Previously deprecated behaviour around storing adjacency matrices in uns has been removed #866 @ivirshup
Bump minimum python version to 3.8 #820 @ivirshup
AnnData.concatenate() is now deprecated in favour of anndata.concat() #845 @ivirshup
Fix warning from rename_categories #790 I Virshup
Remove backwards compat checks for categories in uns when we can tell the file is new enough #790 I Virshup
Categorical arrays are now created with a python bool instead of a numpy.bool_ #856
Fixed order dependent outer concatenation bug #904 @ivirshup , reported by @szalata
Fixed bug in renaming categories #790 @ivirshup , reported by @perrin-isir
Fixed IO bug when keys in uns ended in _categories #806 @ivirshup , reported by @Hrovatin
Fixed raw.to_adata not populating obs aligned values when raw was assigned through the setter #939 @ivirshup
(v0.9.0)=
2023-04-11813 {user}syelman {user}rahulbshresthaobsm, varm and uns can now hold AwkwardArrays {pr}647 {user}giovp, {user}grst, {user}ivirshupanndata.experimental.read_dispatched and {func}anndata.experimental.write_dispatched which allow customizing IO with a callback {pr}873 {user}ilan-gold {user}ivirshup734 {user}flying-sheep, {user}ivirshupanndata.concat {pr}763 {user}ivirshupNew tutorials for experimental features
- {doc}
/tutorials/notebooks/anndata_dask_array– {pr}886{user}syelman- {doc}
/tutorials/notebooks/{read,write}_dispatched– {pr}scverse/anndata-tutorials#17{user}ilan-gold- {doc}
/tutorials/notebooks/awkward-arrays– {pr}scverse/anndata-tutorials#15{user}grst
{doc}File format description </fileformat-prose> now includes a more formal specification {pr}882 {user}ivirshup
{doc}/interoperability: new page on interoperability with other packages {pr}831 {user}ivirshup
Expanded docstring more documentation for backed argument of {func}anndata.io.read_h5ad {pr}812 {user}jeskowagner
Documented how to use alternative compression methods for the h5ad file format, see {meth}AnnData.write_h5ad() <anndata.AnnData.write_h5ad> {pr}857 {user}nigeil
General typo corrections 😅 {pr}870 {user}folded
AnnData dtype argument no longer defaults to float32 {pr}854 {user}ivirshupforce_dense argument {meth}AnnData.write_h5ad() <anndata.AnnData.write_h5ad> has been removed. {pr}855 {user}ivirshupuns has been removed {pr}866 {user}ivirshup820 {user}ivirshupAnnData.concatenate() is now deprecated in favour of {func}anndata.concat {pr}845 {user}ivirshuprename_categories {pr}790 {smaller}I Virshupuns when we can tell the file is new enough {pr}790 {smaller}I Virshupbool instead of a numpy.bool_ {pr}856904 {user}ivirshup, reported by {user}szalata790 {user}ivirshup, reported by {user}perrin-isiruns ended in _categories {pr}806 {user}ivirshup, reported by {user}Hrovatinraw.to_adata not populating obs aligned values when raw was assigned through the setter {pr}939 {user}ivirshupNothing published for this version
The on disk format of AnnData objects has been updated with this release. Previous releases of anndata will not be able to read all files written by t
Warning
The on disk format of AnnData objects has been updated with this release. Previous releases of anndata will not be able to read all files written by this version.
For discussion of possible future solutions to this issue, see #698
Internal handling of IO has been overhauled. This should make it much easier to support new datatypes, use partial access, and use AnnData internally in other formats.
Each element should be tagged with an encoding_type and encoding_version . See updated docs on the file format
Support for nullable integer and boolean data arrays. More data types to come!
Experimental support for low level access to the IO API via read_elem() and write_elem()
Added PyTorch dataloader AnnLoader and lazy concatenation object AnnCollection . See the tutorials #416 S Rybakov
Compatibility with h5ad files written from Julia #569 I Kats
Many logging messages that should have been warnings are now warnings #650 I Virshup
Significantly more efficient anndata.io.read_umi_tools() #661 I Virshup
Fixed deepcopy of a copy of a view retaining sparse matrix view mixin type #670 M Klein
In many cases X can now be None #463 R Cannoodt #677 I Virshup . Remaining work is documented in #467 .
Removed hard xlrd dependency I Virshup
obs and var dataframes are no longer copied by default on AnnData instantiation #371 I Virshup
Fixed issue where .copy was creating sparse matrices views when copying #670 michalk8
Fixed issue where .X matrix read in from zarr would always have float32 values #701 I Virshup
Raw.to_adata` now includes obsp in the output #404 G Eraslan
xlrd dropped as a hard dependency
Now requires h5py v3.0.0 or newer
(v0.8.0)=
14th March, 2022The on disk format of AnnData objects has been updated with this release.
Previous releases of `anndata` will not be able to read all files written by this version.
For discussion of possible future solutions to this issue, see {issue}`698`
Internal handling of IO has been overhauled.
This should make it much easier to support new datatypes, use partial access, and use AnnData internally in other formats.
encoding_type and encoding_version. See updated docs on the {doc}file format </fileformat-prose>~anndata.io.read_elem and {func}~anndata.io.write_elem~anndata.experimental.AnnLoader and lazy concatenation object {class}~anndata.experimental.AnnCollection. See the tutorials {pr}416 {smaller}S Rybakovh5ad files written from Julia {pr}569 {smaller}I Kats650 {smaller}I Virshupanndata.io.read_umi_tools {pr}661 {smaller}I Virshup670 {smaller}M Klein~anndata.AnnData.X can now be None {pr}463 {smaller}R Cannoodt {pr}677 {smaller}I Virshup. Remaining work is documented in {issue}467.xlrd dependency {smaller}I Virshupobs and var dataframes are no longer copied by default on AnnData instantiation {issue}371 {smaller}I Virshup.copy was creating sparse matrices views when copying {pr}670 {smaller}michalk8.X matrix read in from zarr would always have float32 values {pr}701 {smaller}I VirshupRaw.to_adata` now includes obsp in the output {pr}404 {smaller}G Eraslanxlrd dropped as a hard dependencyh5py v3.0.0 or newerNothing published for this version
- Re-include test helpers #641 I Virshup
Re-include test helpers #641 I Virshup
(v0.7.8)=
9 November, 2021641 {smaller}I Virshup- Fixed propagation of import error when importing write_zarr but not all dependencies are installed #579 R Hillje
Fixed propagation of import error when importing write_zarr but not all dependencies are installed #579 R Hillje
Fixed issue with .uns sub-dictionaries being referenced by copies #576 I Virshup
Fixed out-of-bounds integer indices not raising IndexError #630 M Klein
Fixed backed SparseDataset indexing with scipy 1.7.2 #638 I Virshup
Use PEPs 621 (standardized project metadata), 631 (standardized dependencies), and 660 (standardized editable installs) #639 I Virshup
(v0.7.7)=
9 November, 2021write_zarr but not all dependencies are installed {pr}579 {smaller}R Hillje.uns sub-dictionaries being referenced by copies {pr}576 {smaller}I VirshupIndexError {pr}630 {smaller}M KleinSparseDataset indexing with scipy 1.7.2 {pr}638 {smaller}I Virshup639 {smaller}I VirshupYour coding agent can read these notes before it upgrades. Set up the MCP server →