anndata 0.12.0rc1__tar.gz → 0.12.0rc3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. anndata-0.12.0rc3/.github/ISSUE_TEMPLATE/config.yml +5 -0
  2. anndata-0.12.0rc3/.github/ISSUE_TEMPLATE/question.yml +14 -0
  3. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/test-cpu.yml +4 -4
  4. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.pre-commit-config.yaml +4 -0
  5. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/PKG-INFO +37 -33
  6. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/readwrite.py +9 -8
  7. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/sparse_dataset.py +15 -11
  8. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/utils.py +0 -16
  9. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/ci/scripts/min-deps.py +9 -3
  10. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/api.md +1 -1
  11. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/conf.py +3 -4
  12. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/extensions/no_skip_abc_members.py +1 -1
  13. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.1.md +1 -1
  14. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.2.md +1 -1
  15. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.3.md +1 -1
  16. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.4.md +2 -2
  17. anndata-0.12.0rc3/docs/release-notes/0.12.0rc1.md +26 -0
  18. anndata-0.12.0rc3/docs/release-notes/0.12.0rc2.md +14 -0
  19. anndata-0.12.0rc3/docs/release-notes/0.12.0rc3.md +6 -0
  20. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/hatch.toml +4 -1
  21. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/pyproject.toml +50 -36
  22. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/__init__.py +14 -19
  23. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/access.py +1 -1
  24. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/aligned_df.py +31 -4
  25. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/aligned_mapping.py +9 -2
  26. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/anndata.py +105 -103
  27. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/file_backing.py +6 -0
  28. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/index.py +14 -8
  29. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/merge.py +229 -98
  30. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/raw.py +1 -4
  31. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/sparse_dataset.py +16 -17
  32. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/storage.py +5 -10
  33. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/views.py +13 -7
  34. anndata-0.12.0rc3/src/anndata/_core/xarray.py +145 -0
  35. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/__init__.py +3 -3
  36. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/h5ad.py +6 -9
  37. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/read.py +36 -24
  38. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/lazy_methods.py +15 -14
  39. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/methods.py +10 -16
  40. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/registry.py +9 -8
  41. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/utils.py +10 -14
  42. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/write.py +11 -14
  43. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/zarr.py +15 -16
  44. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_settings.py +6 -2
  45. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_types.py +28 -24
  46. anndata-0.12.0rc3/src/anndata/_version.py +62 -0
  47. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_warnings.py +0 -6
  48. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/abc.py +1 -1
  49. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/compat/__init__.py +39 -70
  50. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/__init__.py +13 -8
  51. anndata-0.12.0rc3/src/anndata/experimental/backed/_compat.py +18 -0
  52. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/backed/_io.py +13 -11
  53. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/backed/_lazy_arrays.py +11 -10
  54. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/merge.py +11 -11
  55. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/multi_files/_anncollection.py +24 -46
  56. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/pytorch/_annloader.py +1 -5
  57. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/tests/helpers.py +43 -72
  58. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/typing.py +3 -2
  59. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/utils.py +30 -21
  60. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/_pytest.py +1 -1
  61. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/conftest.py +4 -0
  62. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/test_concat.py +3 -3
  63. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/test_read.py +28 -6
  64. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_backed_hdf5.py +2 -1
  65. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_backed_sparse.py +13 -41
  66. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_base.py +37 -25
  67. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_concatenate.py +234 -67
  68. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_dask_view_mem.py +5 -7
  69. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_deprecations.py +2 -3
  70. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_extensions.py +3 -4
  71. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_helpers.py +1 -1
  72. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_backwards_compat.py +1 -4
  73. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_conversion.py +4 -4
  74. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_dispatched.py +13 -10
  75. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_elementwise.py +17 -20
  76. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_partial.py +3 -3
  77. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_utils.py +2 -2
  78. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_warnings.py +13 -19
  79. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_obsmvarm.py +27 -1
  80. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_readwrite.py +25 -21
  81. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_repr.py +1 -1
  82. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_settings.py +29 -13
  83. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_transpose.py +1 -3
  84. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_views.py +5 -10
  85. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_x.py +3 -3
  86. anndata-0.12.0rc3/tests/test_xarray.py +91 -0
  87. anndata-0.12.0rc1/.github/ISSUE_TEMPLATE/config.yml +0 -8
  88. anndata-0.12.0rc1/docs/release-notes/0.12.0rc1.md +0 -4
  89. anndata-0.12.0rc1/src/anndata/_version.py +0 -37
  90. anndata-0.12.0rc1/src/anndata/experimental/backed/_compat.py +0 -43
  91. anndata-0.12.0rc1/src/anndata/experimental/backed/_xarray.py +0 -146
  92. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.cirun.yml +0 -0
  93. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.codecov.yml +0 -0
  94. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.editorconfig +0 -0
  95. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  96. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/ISSUE_TEMPLATE/enhancement-request.yml +0 -0
  97. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  98. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/benchmark.yml +0 -0
  99. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/check-pr-milestoned.yml +0 -0
  100. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/close-stale.yml +0 -0
  101. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/codespell.yml +0 -0
  102. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/label-stale.yml +0 -0
  103. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/publish.yml +0 -0
  104. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/test-gpu.yml +0 -0
  105. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.gitignore +0 -0
  106. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.gitmodules +0 -0
  107. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.prettierignore +0 -0
  108. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.prettierrc.yaml +0 -0
  109. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.readthedocs.yml +0 -0
  110. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.taplo.toml +0 -0
  111. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.vscode/launch.json +0 -0
  112. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.vscode/settings.json +0 -0
  113. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/LICENSE +0 -0
  114. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/README.md +0 -0
  115. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/README.md +0 -0
  116. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/asv.conf.json +0 -0
  117. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/__init__.py +0 -0
  118. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/anndata.py +0 -0
  119. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/biome.jsonc +0 -0
  120. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/ci/constraints.txt +0 -0
  121. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/ci/scripts/towncrier_automation.py +0 -0
  122. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/Makefile +0 -0
  123. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/_key_contributors.rst +0 -0
  124. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/_static/img/anndata_schema.svg +0 -0
  125. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/_templates/autosummary/class.rst +0 -0
  126. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/benchmark-read-write.ipynb +0 -0
  127. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/benchmarks.md +0 -0
  128. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/concatenation.rst +0 -0
  129. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/contributing.md +0 -0
  130. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/extensions/patch_myst_cite.py +0 -0
  131. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/fileformat-prose.md +0 -0
  132. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/index.md +0 -0
  133. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/interoperability.md +0 -0
  134. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/news.md +0 -0
  135. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/references.rst +0 -0
  136. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.0.md +0 -0
  137. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.1.md +0 -0
  138. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.2.md +0 -0
  139. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.3.md +0 -0
  140. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.4.md +0 -0
  141. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.5.md +0 -0
  142. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.6.md +0 -0
  143. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.7.md +0 -0
  144. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.8.md +0 -0
  145. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.9.md +0 -0
  146. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.0.md +0 -0
  147. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.4.0.md +0 -0
  148. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.5.0.md +0 -0
  149. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.6.0.md +0 -0
  150. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.6.x.md +0 -0
  151. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.0.md +0 -0
  152. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.2.md +0 -0
  153. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.3.md +0 -0
  154. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.4.md +0 -0
  155. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.5.md +0 -0
  156. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.6.md +0 -0
  157. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.7.md +0 -0
  158. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.8.md +0 -0
  159. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.8.0.md +0 -0
  160. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.9.0.md +0 -0
  161. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.9.1.md +0 -0
  162. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.9.2.md +0 -0
  163. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/index.md +0 -0
  164. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/tutorials/index.md +0 -0
  165. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/tutorials/zarr-v3.md +0 -0
  166. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/__init__.py +0 -0
  167. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/extensions.py +0 -0
  168. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/__init__.py +6 -6
  169. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/_dispatch_io.py +0 -0
  170. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/backed/__init__.py +0 -0
  171. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/multi_files/__init__.py +0 -0
  172. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/pytorch/__init__.py +0 -0
  173. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/io.py +3 -3
  174. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/logging.py +0 -0
  175. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/tests/__init__.py +0 -0
  176. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/types.py +0 -0
  177. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/__init__.py +0 -0
  178. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/_doctest.py +0 -0
  179. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/py.typed +0 -0
  180. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/conftest.py +0 -0
  181. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/adata-comments.tsv +0 -0
  182. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/adata.csv +0 -0
  183. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/readme.md +0 -0
  184. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.0/adata.h5ad +0 -0
  185. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.0/adata.zarr.zip +0 -0
  186. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.8/adata.h5ad +0 -0
  187. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.8/adata.zarr.zip +0 -0
  188. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/excel.xlsx +0 -0
  189. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/umi_tools.tsv.gz +0 -0
  190. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/test_write.py +0 -0
  191. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_anncollection.py +0 -0
  192. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_annot.py +0 -0
  193. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_awkward.py +0 -0
  194. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_backed_dense.py +0 -0
  195. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_concatenate_disk.py +0 -0
  196. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_dask.py +0 -0
  197. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_get_vector.py +0 -0
  198. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_gpu.py +0 -0
  199. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_inplace_subset.py +0 -0
  200. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_layers.py +0 -0
  201. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_obspvarp.py +0 -0
  202. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_raw.py +0 -0
  203. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_structured_arrays.py +0 -0
  204. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_uns.py +0 -0
  205. {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_utils.py +0 -0
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Scverse Community Forum
4
+ url: https://discourse.scverse.org/
5
+ about: If you have questions about “How to do X”, please ask them here.
@@ -0,0 +1,14 @@
1
+ name: Technical question
2
+ description: You wonder about a design decision or implementation detail?
3
+ #title: ...
4
+ labels:
5
+ - question
6
+ #assignees: []
7
+ body:
8
+ - type: textarea
9
+ id: description
10
+ attributes:
11
+ label: Question
12
+ description: If you have *usage* question, please visit the [Scverse Community Forum](https://discourse.scverse.org/) instead.
13
+ validations:
14
+ required: true
@@ -56,18 +56,18 @@ jobs:
56
56
 
57
57
  - name: Install dependencies
58
58
  if: matrix.dependencies-version == null
59
- run: uv pip install --system --compile "anndata[dev,test-full] @ ." -c ci/constraints.txt
59
+ run: uv pip install --system --compile -r pyproject.toml --extra=dev --extra=test -e 'anndata @ .' -c ci/constraints.txt
60
60
 
61
61
  - name: Install minimum dependencies
62
62
  if: matrix.dependencies-version == 'minimum'
63
63
  run: |
64
64
  uv pip install --system --compile tomli packaging
65
- deps=$(python3 ci/scripts/min-deps.py pyproject.toml --extra dev test)
66
- uv pip install --system --compile $deps "anndata @ ."
65
+ deps=$(python3 ci/scripts/min-deps.py pyproject.toml --extras dev test-min)
66
+ uv pip install --system --compile $deps -e 'anndata @ .'
67
67
 
68
68
  - name: Install dependencies release candidates
69
69
  if: matrix.dependencies-version == 'pre-release'
70
- run: uv pip install -v --system --compile --pre "anndata[dev,test-full] @ ." -c ci/constraints.txt
70
+ run: uv pip install -v --system --compile --pre -r pyproject.toml --extra=dev --extra=test -e 'anndata @ .' -c ci/constraints.txt
71
71
 
72
72
  - name: Display installed versions
73
73
  run: uv pip list
@@ -5,6 +5,10 @@ repos:
5
5
  - id: ruff
6
6
  args: ["--fix"]
7
7
  - id: ruff-format
8
+ # The following can be removed once PLR0917 is out of preview
9
+ - name: ruff preview rules
10
+ id: ruff
11
+ args: ["--preview", "--select=PLR0917"]
8
12
  - repo: https://github.com/biomejs/pre-commit
9
13
  rev: v1.9.4
10
14
  hooks:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anndata
3
- Version: 0.12.0rc1
3
+ Version: 0.12.0rc3
4
4
  Summary: Annotated data.
5
5
  Project-URL: Documentation, https://anndata.readthedocs.io/
6
6
  Project-URL: Source, https://github.com/scverse/anndata
@@ -24,15 +24,15 @@ Classifier: Programming Language :: Python :: 3.13
24
24
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
25
25
  Classifier: Topic :: Scientific/Engineering :: Visualization
26
26
  Requires-Python: >=3.11
27
- Requires-Dist: array-api-compat!=1.5,>1.4
27
+ Requires-Dist: array-api-compat>=1.7.1
28
28
  Requires-Dist: h5py>=3.8
29
29
  Requires-Dist: legacy-api-wrap
30
30
  Requires-Dist: natsort
31
31
  Requires-Dist: numpy>=1.25
32
32
  Requires-Dist: packaging>=24.2
33
33
  Requires-Dist: pandas!=2.1.0rc0,!=2.1.2,>=2.0.0
34
- Requires-Dist: scipy>1.11
35
- Requires-Dist: zarr!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,>=2.18.7
34
+ Requires-Dist: scipy>=1.11
35
+ Requires-Dist: zarr!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,!=3.0.4,!=3.0.5,!=3.0.6,!=3.0.7,>=2.18.7
36
36
  Provides-Extra: cu11
37
37
  Requires-Dist: cupy-cuda11x; extra == 'cu11'
38
38
  Provides-Extra: cu12
@@ -40,7 +40,8 @@ Requires-Dist: cupy-cuda12x; extra == 'cu12'
40
40
  Provides-Extra: dask
41
41
  Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'dask'
42
42
  Provides-Extra: dev
43
- Requires-Dist: awkward>=2.3; extra == 'dev'
43
+ Requires-Dist: aiohttp; extra == 'dev'
44
+ Requires-Dist: awkward>=2.3.2; extra == 'dev'
44
45
  Requires-Dist: boltons; extra == 'dev'
45
46
  Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'dev'
46
47
  Requires-Dist: dask[distributed]; extra == 'dev'
@@ -51,6 +52,7 @@ Requires-Dist: joblib; extra == 'dev'
51
52
  Requires-Dist: loompy>=3.0.5; extra == 'dev'
52
53
  Requires-Dist: matplotlib; extra == 'dev'
53
54
  Requires-Dist: openpyxl; extra == 'dev'
55
+ Requires-Dist: pandas>=2.1.0; extra == 'dev'
54
56
  Requires-Dist: pyarrow; extra == 'dev'
55
57
  Requires-Dist: pytest-cov; extra == 'dev'
56
58
  Requires-Dist: pytest-memray; extra == 'dev'
@@ -58,9 +60,11 @@ Requires-Dist: pytest-mock; extra == 'dev'
58
60
  Requires-Dist: pytest-randomly; extra == 'dev'
59
61
  Requires-Dist: pytest-xdist[psutil]; extra == 'dev'
60
62
  Requires-Dist: pytest<8.3.4,>=8.2; extra == 'dev'
63
+ Requires-Dist: requests; extra == 'dev'
61
64
  Requires-Dist: scanpy>=1.10; extra == 'dev'
62
65
  Requires-Dist: scikit-learn; extra == 'dev'
63
66
  Requires-Dist: towncrier>=24.8.0; extra == 'dev'
67
+ Requires-Dist: xarray>=2025.04.0; extra == 'dev'
64
68
  Provides-Extra: dev-doc
65
69
  Requires-Dist: towncrier>=24.8.0; extra == 'dev-doc'
66
70
  Provides-Extra: doc
@@ -69,13 +73,12 @@ Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == '
69
73
  Requires-Dist: ipython; extra == 'doc'
70
74
  Requires-Dist: myst-nb; extra == 'doc'
71
75
  Requires-Dist: myst-parser; extra == 'doc'
72
- Requires-Dist: readthedocs-sphinx-search; extra == 'doc'
73
- Requires-Dist: scanpydoc[theme,typehints]>=0.15.1; extra == 'doc'
76
+ Requires-Dist: scanpydoc[theme,typehints]>=0.15.3; extra == 'doc'
74
77
  Requires-Dist: sphinx-autodoc-typehints>=2.2.0; extra == 'doc'
75
78
  Requires-Dist: sphinx-book-theme>=1.1.0; extra == 'doc'
76
79
  Requires-Dist: sphinx-copybutton; extra == 'doc'
77
80
  Requires-Dist: sphinx-design>=0.5.0; extra == 'doc'
78
- Requires-Dist: sphinx-issues; extra == 'doc'
81
+ Requires-Dist: sphinx-issues>=5.0.1; extra == 'doc'
79
82
  Requires-Dist: sphinx-toolbox>=3.8.0; extra == 'doc'
80
83
  Requires-Dist: sphinx>=8.2.1; extra == 'doc'
81
84
  Requires-Dist: sphinxext-opengraph; extra == 'doc'
@@ -86,9 +89,10 @@ Provides-Extra: lazy
86
89
  Requires-Dist: aiohttp; extra == 'lazy'
87
90
  Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'lazy'
88
91
  Requires-Dist: requests; extra == 'lazy'
89
- Requires-Dist: xarray>=2024.06.0; extra == 'lazy'
92
+ Requires-Dist: xarray>=2025.04.0; extra == 'lazy'
90
93
  Provides-Extra: test
91
- Requires-Dist: awkward>=2.3; extra == 'test'
94
+ Requires-Dist: aiohttp; extra == 'test'
95
+ Requires-Dist: awkward>=2.3.2; extra == 'test'
92
96
  Requires-Dist: boltons; extra == 'test'
93
97
  Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'test'
94
98
  Requires-Dist: dask[distributed]; extra == 'test'
@@ -98,6 +102,7 @@ Requires-Dist: joblib; extra == 'test'
98
102
  Requires-Dist: loompy>=3.0.5; extra == 'test'
99
103
  Requires-Dist: matplotlib; extra == 'test'
100
104
  Requires-Dist: openpyxl; extra == 'test'
105
+ Requires-Dist: pandas>=2.1.0; extra == 'test'
101
106
  Requires-Dist: pyarrow; extra == 'test'
102
107
  Requires-Dist: pytest-cov; extra == 'test'
103
108
  Requires-Dist: pytest-memray; extra == 'test'
@@ -105,31 +110,30 @@ Requires-Dist: pytest-mock; extra == 'test'
105
110
  Requires-Dist: pytest-randomly; extra == 'test'
106
111
  Requires-Dist: pytest-xdist[psutil]; extra == 'test'
107
112
  Requires-Dist: pytest<8.3.4,>=8.2; extra == 'test'
113
+ Requires-Dist: requests; extra == 'test'
108
114
  Requires-Dist: scanpy>=1.10; extra == 'test'
109
115
  Requires-Dist: scikit-learn; extra == 'test'
110
- Provides-Extra: test-full
111
- Requires-Dist: aiohttp; extra == 'test-full'
112
- Requires-Dist: awkward>=2.3; extra == 'test-full'
113
- Requires-Dist: boltons; extra == 'test-full'
114
- Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'test-full'
115
- Requires-Dist: dask[distributed]; extra == 'test-full'
116
- Requires-Dist: filelock; extra == 'test-full'
117
- Requires-Dist: httpx; extra == 'test-full'
118
- Requires-Dist: joblib; extra == 'test-full'
119
- Requires-Dist: loompy>=3.0.5; extra == 'test-full'
120
- Requires-Dist: matplotlib; extra == 'test-full'
121
- Requires-Dist: openpyxl; extra == 'test-full'
122
- Requires-Dist: pyarrow; extra == 'test-full'
123
- Requires-Dist: pytest-cov; extra == 'test-full'
124
- Requires-Dist: pytest-memray; extra == 'test-full'
125
- Requires-Dist: pytest-mock; extra == 'test-full'
126
- Requires-Dist: pytest-randomly; extra == 'test-full'
127
- Requires-Dist: pytest-xdist[psutil]; extra == 'test-full'
128
- Requires-Dist: pytest<8.3.4,>=8.2; extra == 'test-full'
129
- Requires-Dist: requests; extra == 'test-full'
130
- Requires-Dist: scanpy>=1.10; extra == 'test-full'
131
- Requires-Dist: scikit-learn; extra == 'test-full'
132
- Requires-Dist: xarray>=2024.06.0; extra == 'test-full'
116
+ Requires-Dist: xarray>=2025.04.0; extra == 'test'
117
+ Provides-Extra: test-min
118
+ Requires-Dist: awkward>=2.3.2; extra == 'test-min'
119
+ Requires-Dist: boltons; extra == 'test-min'
120
+ Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'test-min'
121
+ Requires-Dist: dask[distributed]; extra == 'test-min'
122
+ Requires-Dist: filelock; extra == 'test-min'
123
+ Requires-Dist: httpx; extra == 'test-min'
124
+ Requires-Dist: joblib; extra == 'test-min'
125
+ Requires-Dist: loompy>=3.0.5; extra == 'test-min'
126
+ Requires-Dist: matplotlib; extra == 'test-min'
127
+ Requires-Dist: openpyxl; extra == 'test-min'
128
+ Requires-Dist: pyarrow; extra == 'test-min'
129
+ Requires-Dist: pytest-cov; extra == 'test-min'
130
+ Requires-Dist: pytest-memray; extra == 'test-min'
131
+ Requires-Dist: pytest-mock; extra == 'test-min'
132
+ Requires-Dist: pytest-randomly; extra == 'test-min'
133
+ Requires-Dist: pytest-xdist[psutil]; extra == 'test-min'
134
+ Requires-Dist: pytest<8.3.4,>=8.2; extra == 'test-min'
135
+ Requires-Dist: scanpy>=1.10; extra == 'test-min'
136
+ Requires-Dist: scikit-learn; extra == 'test-min'
133
137
  Description-Content-Type: text/markdown
134
138
 
135
139
  [![Tests](https://github.com/scverse/anndata/actions/workflows/test-cpu.yml/badge.svg)](https://github.com/scverse/anndata/actions)
@@ -25,6 +25,7 @@ from __future__ import annotations
25
25
  import sys
26
26
  import tempfile
27
27
  from pathlib import Path
28
+ from types import MappingProxyType
28
29
 
29
30
  import numpy as np
30
31
  import pooch
@@ -77,9 +78,9 @@ PBMC_3K_URL = "https://falexwolf.de/data/pbmc3k_raw.h5ad"
77
78
 
78
79
 
79
80
  class H5ADInMemorySizeSuite:
80
- _urls = dict(pbmc3k=PBMC_3K_URL)
81
+ _urls = MappingProxyType(dict(pbmc3k=PBMC_3K_URL))
81
82
  params = _urls.keys()
82
- param_names = ["input_data"]
83
+ param_names = ("input_data",)
83
84
 
84
85
  def setup(self, input_data: str):
85
86
  self.filepath = pooch.retrieve(url=self._urls[input_data], known_hash=None)
@@ -98,9 +99,9 @@ class H5ADInMemorySizeSuite:
98
99
 
99
100
 
100
101
  class H5ADReadSuite:
101
- _urls = dict(pbmc3k=PBMC_3K_URL)
102
+ _urls = MappingProxyType(dict(pbmc3k=PBMC_3K_URL))
102
103
  params = _urls.keys()
103
- param_names = ["input_data"]
104
+ param_names = ("input_data",)
104
105
 
105
106
  def setup(self, input_data: str):
106
107
  self.filepath = pooch.retrieve(url=self._urls[input_data], known_hash=None)
@@ -133,9 +134,9 @@ class H5ADReadSuite:
133
134
 
134
135
 
135
136
  class H5ADWriteSuite:
136
- _urls = dict(pbmc3k=PBMC_3K_URL)
137
+ _urls = MappingProxyType(dict(pbmc3k=PBMC_3K_URL))
137
138
  params = _urls.keys()
138
- param_names = ["input_data"]
139
+ param_names = ("input_data",)
139
140
 
140
141
  def setup(self, input_data: str):
141
142
  mem_recording, adata = memory_usage(
@@ -176,9 +177,9 @@ class H5ADWriteSuite:
176
177
 
177
178
 
178
179
  class H5ADBackedWriteSuite(H5ADWriteSuite):
179
- _urls = dict(pbmc3k=PBMC_3K_URL)
180
+ _urls = MappingProxyType(dict(pbmc3k=PBMC_3K_URL))
180
181
  params = _urls.keys()
181
- param_names = ["input_data"]
182
+ param_names = ("input_data",)
182
183
 
183
184
  def setup(self, input_data):
184
185
  mem_recording, adata = memory_usage(
@@ -1,5 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from types import MappingProxyType
4
+
3
5
  import numpy as np
4
6
  import zarr
5
7
  from scipy import sparse
@@ -17,16 +19,18 @@ def make_alternating_mask(n):
17
19
 
18
20
 
19
21
  class SparseCSRContiguousSlice:
20
- _slices = {
21
- "0:1000": slice(0, 1000),
22
- "0:9000": slice(0, 9000),
23
- ":9000:-1": slice(None, 9000, -1),
24
- "::-2": slice(None, None, 2),
25
- "array": np.array([0, 5000, 9999]),
26
- "arange": np.arange(0, 1000),
27
- "first": 0,
28
- "alternating": make_alternating_mask(10),
29
- }
22
+ _slices = MappingProxyType(
23
+ {
24
+ "0:1000": slice(0, 1000),
25
+ "0:9000": slice(0, 9000),
26
+ ":9000:-1": slice(None, 9000, -1),
27
+ "::-2": slice(None, None, 2),
28
+ "array": np.array([0, 5000, 9999]),
29
+ "arange": np.arange(0, 1000),
30
+ "first": 0,
31
+ "alternating": make_alternating_mask(10),
32
+ }
33
+ )
30
34
  params = (
31
35
  [
32
36
  (10_000, 10_000),
@@ -34,7 +38,7 @@ class SparseCSRContiguousSlice:
34
38
  ],
35
39
  _slices.keys(),
36
40
  )
37
- param_names = ["shape", "slice"]
41
+ param_names = ("shape", "slice")
38
42
 
39
43
  def setup(self, shape: tuple[int, int], slice: str):
40
44
  X = sparse.random(
@@ -93,22 +93,6 @@ def gen_indexer(adata, dim, index_kind, ratio):
93
93
  return tuple(subset)
94
94
 
95
95
 
96
- def take_view(adata, *, dim, index_kind, ratio=0.5, nviews=100):
97
- subset = gen_indexer(adata, dim, index_kind, ratio)
98
- views = []
99
- for i in range(nviews):
100
- views.append(adata[subset])
101
-
102
-
103
- def take_repeated_view(adata, *, dim, index_kind, ratio=0.9, nviews=10):
104
- v = adata
105
- views = []
106
- for i in range(nviews):
107
- subset = gen_indexer(v, dim, index_kind, ratio)
108
- v = v[subset]
109
- views.append(v)
110
-
111
-
112
96
  def gen_adata(n_obs, n_var, attr_set):
113
97
  if "X-csr" in attr_set:
114
98
  X = sparse.random(n_obs, n_var, density=0.1, format="csr")
@@ -34,7 +34,7 @@ def min_dep(req: Requirement) -> Requirement:
34
34
  -------
35
35
 
36
36
  >>> min_dep(Requirement("numpy>=1.0"))
37
- <Requirement('numpy==1.0.*')>
37
+ <Requirement('numpy==1.0')>
38
38
  >>> min_dep(Requirement("numpy<3.0"))
39
39
  <Requirement('numpy<3.0')>
40
40
  """
@@ -55,7 +55,7 @@ def min_dep(req: Requirement) -> Requirement:
55
55
  elif spec.operator == "==":
56
56
  min_version = Version(spec.version)
57
57
 
58
- return Requirement(f"{req_name}=={min_version}.*")
58
+ return Requirement(f"{req_name}=={min_version}")
59
59
 
60
60
 
61
61
  def extract_min_deps(
@@ -64,6 +64,7 @@ def extract_min_deps(
64
64
  dependencies = deque(dependencies) # We'll be mutating this
65
65
  project_name = pyproject["project"]["name"]
66
66
 
67
+ deps = {}
67
68
  while len(dependencies) > 0:
68
69
  req = dependencies.pop()
69
70
 
@@ -76,7 +77,11 @@ def extract_min_deps(
76
77
  extra_deps = pyproject["project"]["optional-dependencies"][extra]
77
78
  dependencies += map(Requirement, extra_deps)
78
79
  else:
79
- yield min_dep(req)
80
+ if req.name in deps:
81
+ req.specifier &= deps[req.name].specifier
82
+ req.extras |= deps[req.name].extras
83
+ deps[req.name] = min_dep(req)
84
+ yield from deps.values()
80
85
 
81
86
 
82
87
  class Args(argparse.Namespace):
@@ -100,6 +105,7 @@ class Args(argparse.Namespace):
100
105
  prog="min-deps",
101
106
  description=cls.__doc__,
102
107
  usage="pip install `python min-deps.py pyproject.toml`",
108
+ allow_abbrev=False,
103
109
  )
104
110
  parser.add_argument(
105
111
  "_path",
@@ -180,7 +180,7 @@ Types used by the former:
180
180
  experimental.StorageType
181
181
  experimental.backed._lazy_arrays.MaskedArray
182
182
  experimental.backed._lazy_arrays.CategoricalArray
183
- experimental.backed._xarray.Dataset2D
183
+ _core.xarray.Dataset2D
184
184
  ```
185
185
 
186
186
  (extensions-api)=
@@ -56,7 +56,6 @@ extensions = [
56
56
  "sphinx_autodoc_typehints", # needs to be after napoleon
57
57
  "sphinx_issues",
58
58
  "sphinx_design",
59
- "sphinx_search.extension",
60
59
  "sphinxext.opengraph",
61
60
  "scanpydoc", # needs to be before linkcode
62
61
  "sphinx.ext.linkcode",
@@ -113,8 +112,7 @@ intersphinx_mapping = dict(
113
112
  python=("https://docs.python.org/3", None),
114
113
  scipy=("https://docs.scipy.org/doc/scipy", None),
115
114
  sklearn=("https://scikit-learn.org/stable", None),
116
- # TODO: move back to stable once `ObjectStore` is released
117
- zarr=("https://zarr.readthedocs.io/en/latest/", None),
115
+ zarr=("https://zarr.readthedocs.io/en/stable/", None),
118
116
  xarray=("https://docs.xarray.dev/en/stable", None),
119
117
  obstore=("https://developmentseed.org/obstore/latest/", None),
120
118
  kvikio=("https://docs.rapids.ai/api/kvikio/stable/", None),
@@ -128,7 +126,7 @@ qualname_overrides = {
128
126
  "anndata._core.anndata.AnnData": "anndata.AnnData",
129
127
  **{
130
128
  f"anndata._core.aligned_mapping.{cls}{kind}": "collections.abc.Mapping"
131
- for cls in "Layers AxisArrays PairwiseArrays".split()
129
+ for cls in ["Layers", "AxisArrays", "PairwiseArrays"]
132
130
  for kind in ["", "View"]
133
131
  },
134
132
  "anndata._types.ReadCallback": "anndata.experimental.ReadCallback",
@@ -143,6 +141,7 @@ qualname_overrides = {
143
141
  "anndata.compat.DaskArray": "dask.array.Array",
144
142
  "anndata.compat.CupyArray": "cupy.ndarray",
145
143
  "anndata.compat.CupySparseMatrix": "cupyx.scipy.sparse.spmatrix",
144
+ "anndata.compat.XDataArray": "xarray.DataArray",
146
145
  "awkward.highlevel.Array": "ak.Array",
147
146
  "numpy.int64": ("py:attr", "numpy.int64"),
148
147
  "pandas.DataFrame.iloc": ("py:attr", "pandas.DataFrame.iloc"),
@@ -11,7 +11,7 @@ if TYPE_CHECKING:
11
11
  from sphinx.ext.autodoc import Options
12
12
 
13
13
 
14
- def autodoc_skip_member(
14
+ def autodoc_skip_member( # noqa: PLR0917
15
15
  app: Sphinx,
16
16
  what: Literal["module", "class", "exception", "function", "method", "attribute"],
17
17
  name: str,
@@ -1,7 +1,7 @@
1
1
  (v0.11.1)=
2
2
  ### 0.11.1 {small}`2024-11-12`
3
3
 
4
- ### Bug fixes
4
+ #### Bug fixes
5
5
 
6
6
  - Remove upper pin on `dask` and exclude versions broken with sparse indexing {user}`ilan-gold` ({pr}`1725`)
7
7
  - Fix chunking with -1 in `chunks` argument of `~anndata.experimental.read_elem_as_dask` {user}`ilan-gold` ({pr}`1743`)
@@ -1,7 +1,7 @@
1
1
  (v0.11.2)=
2
2
  ### 0.11.2 {small}`2025-01-07`
3
3
 
4
- ### Bug fixes
4
+ #### Bug fixes
5
5
 
6
6
  - Cache accesses to the `data` and `indices` arrays in {class}`~anndata.abc.CSRDataset` and {class}`~anndata.abc.CSCDataset` {user}`ilan-gold` ({pr}`1744`)
7
7
  - Error out on floating point indices that are not actually integers {user}`ilan-gold` ({pr}`1746`)
@@ -1,6 +1,6 @@
1
1
  (v0.11.3)=
2
2
  ### 0.11.3 {small}`2025-01-10`
3
3
 
4
- ### Bug fixes
4
+ #### Bug fixes
5
5
 
6
6
  - Upper bound `zarr` at runtime {user}`ilan-gold` ({pr}`1819`)
@@ -1,7 +1,7 @@
1
1
  (v0.11.4)=
2
2
  ### 0.11.4 {small}`2025-03-26`
3
3
 
4
- ### Bug fixes
4
+ #### Bug fixes
5
5
 
6
6
  - Raise {class}`~anndata.ImplicitModificationWarning` when setting `X` on a view. {user}`ilan-gold` ({pr}`1853`)
7
7
  - Bound `dask` due to {issue}`dask/dask#11752` {user}`ilan-gold` ({pr}`1859`)
@@ -9,6 +9,6 @@
9
9
  - Add `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`)
10
10
  - Allow initialization of {class}`anndata.AnnData` objects without `X` (since they could be constructed previously by deleting `X`) {user}`ilan-gold` ({pr}`1941`)
11
11
 
12
- ### Development Process
12
+ #### Development Process
13
13
 
14
14
  - Fix version number inference in development environments (CI and local) {user}`flying-sheep` ({pr}`1831`)
@@ -0,0 +1,26 @@
1
+ (v0.12.0rc1)=
2
+ ### 0.12.0rc1 {small}`2025-04-09`
3
+
4
+ #### Breaking changes
5
+
6
+ - Remove `anndata.read` {user}`ilan-gold` ({pr}`1766`)
7
+ - 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`)
8
+ - Disallow declaration of {class}`~anndata.AnnData` with non-`cs{r,c}` sparse data-structures {user}`ilan-gold` ({pr}`1829`)
9
+ - Upgrade all `DeprecationWarning`s to `FutureWarning`s {user}`ilan-gold` ({pr}`1874`)
10
+
11
+ #### Bug fixes
12
+
13
+ - Disallow writing of {class}`~anndata._core.xarray.Dataset2D` objects {user}`ilan-gold` ({pr}`1887`)
14
+ - 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`)
15
+ - Don't use {func}`asyncio.run` internally for any operations {user}`ilan-gold` ({pr}`1933`)
16
+ - Disallow forward slashes in keys for writing {user}`ilan-gold` ({pr}`1940`)
17
+
18
+ #### Features
19
+
20
+ - {data}`None` values can now be serialized to `.h5ad` and `.zarr`,
21
+ preserving e.g. {attr}`~anndata.AnnData.uns` structure through saving and loading {user}`flying-sheep` ({pr}`999`)
22
+ - 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`)
23
+ - Support {mod}`zarr` version 3 python package {user}`ilan-gold` ({pr}`1726`)
24
+ - Adopt the Scientific Python [deprecation schedule](https://scientific-python.org/specs/spec-0000/) {user}`ilan-gold` ({pr}`1768`)
25
+ - Allow {mod}`zarr` v3 writing of data {user}`ilan-gold` ({pr}`1892`)
26
+ - {func}`anndata.register_anndata_namespace` functionality for adding custom functionality to an {class}`~anndata.AnnData` object {user}`srivarra` ({pr}`1870`)
@@ -0,0 +1,14 @@
1
+ (v0.12.0rc2)=
2
+ ### 0.12.0rc2 {small}`2025-05-15`
3
+
4
+ #### Bug fixes
5
+
6
+ - Convert 1d {class}`numpy.ndarray` and {class}`cupy.ndarray`s in {attr}`anndata.AnnData.obsm` and {attr}`anndata.AnnData.varm` to 2d {user}`ilan-gold` ({pr}`1962`)
7
+
8
+ #### Features
9
+
10
+ - Allow xarray Datasets to be used for obs/var/obsm/varm. {user}`ilia-kats` ({pr}`1966`)
11
+
12
+ #### Performance
13
+
14
+ - Load AnnLoader lazily to prevent expensive unnecessary `torch` imports when its available on the system. {user}`Zethson` & {user}`flying-sheep` ({pr}`1950`)
@@ -0,0 +1,6 @@
1
+ (v0.12.0rc3)=
2
+ ### 0.12.0rc3 {small}`2025-05-20`
3
+
4
+ ### Bug fixes
5
+
6
+ - Update zarr v3 bound to >3.0.8 to prevent corrupted data {issue}`zarr-developers/zarr-python#3061` {user}`ilan-gold` ({pr}`1993`)
@@ -15,7 +15,7 @@ scripts.clean = "git restore --source=HEAD --staged --worktree -- docs/release-n
15
15
 
16
16
  [envs.hatch-test]
17
17
  default-args = [ ]
18
- features = [ "dev", "test" ]
18
+ features = [ "dev", "test-min" ]
19
19
  extra-dependencies = [ "ipykernel" ]
20
20
  env-vars.UV_CONSTRAINT = "ci/constraints.txt"
21
21
  overrides.matrix.deps.env-vars = [
@@ -29,6 +29,9 @@ overrides.matrix.deps.python = [
29
29
  { if = [ "min" ], value = "3.11" },
30
30
  { if = [ "stable", "pre" ], value = "3.13" },
31
31
  ]
32
+ overrides.matrix.deps.features = [
33
+ { if = [ "stable", "pre" ], value = "test" },
34
+ ]
32
35
 
33
36
  [[envs.hatch-test.matrix]]
34
37
  deps = [ "stable", "pre", "min" ]