anndata 0.11.4__tar.gz → 0.12.0rc1__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 (198) hide show
  1. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/ISSUE_TEMPLATE/bug-report.yml +10 -2
  2. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/test-cpu.yml +8 -9
  3. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/test-gpu.yml +2 -1
  4. {anndata-0.11.4 → anndata-0.12.0rc1}/.gitignore +1 -0
  5. {anndata-0.11.4 → anndata-0.12.0rc1}/.pre-commit-config.yaml +1 -1
  6. {anndata-0.11.4 → anndata-0.12.0rc1}/.readthedocs.yml +1 -1
  7. {anndata-0.11.4 → anndata-0.12.0rc1}/LICENSE +1 -1
  8. {anndata-0.11.4 → anndata-0.12.0rc1}/PKG-INFO +46 -19
  9. {anndata-0.11.4 → anndata-0.12.0rc1}/README.md +1 -1
  10. {anndata-0.11.4 → anndata-0.12.0rc1}/benchmarks/asv.conf.json +1 -23
  11. {anndata-0.11.4 → anndata-0.12.0rc1}/benchmarks/benchmarks/anndata.py +8 -2
  12. {anndata-0.11.4 → anndata-0.12.0rc1}/ci/scripts/min-deps.py +5 -7
  13. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/api.md +38 -1
  14. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/conf.py +14 -3
  15. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/extensions/no_skip_abc_members.py +1 -1
  16. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/fileformat-prose.md +1 -1
  17. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.11.0.md +1 -1
  18. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.11.1.md +1 -1
  19. anndata-0.12.0rc1/docs/release-notes/0.12.0rc1.md +4 -0
  20. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/tutorials/index.md +2 -0
  21. anndata-0.12.0rc1/docs/tutorials/zarr-v3.md +105 -0
  22. {anndata-0.11.4 → anndata-0.12.0rc1}/hatch.toml +2 -2
  23. {anndata-0.11.4 → anndata-0.12.0rc1}/pyproject.toml +22 -14
  24. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/__init__.py +5 -23
  25. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/aligned_df.py +17 -2
  26. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/aligned_mapping.py +2 -2
  27. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/anndata.py +67 -35
  28. anndata-0.12.0rc1/src/anndata/_core/extensions.py +276 -0
  29. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/file_backing.py +7 -6
  30. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/index.py +20 -12
  31. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/merge.py +280 -42
  32. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/sparse_dataset.py +42 -18
  33. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/storage.py +24 -11
  34. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/views.py +6 -0
  35. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/h5ad.py +5 -3
  36. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/specs/__init__.py +2 -2
  37. anndata-0.12.0rc1/src/anndata/_io/specs/lazy_methods.py +346 -0
  38. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/specs/methods.py +182 -54
  39. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/specs/registry.py +52 -30
  40. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/utils.py +24 -7
  41. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/write.py +13 -2
  42. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/zarr.py +43 -9
  43. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_settings.py +31 -34
  44. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_types.py +36 -20
  45. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/abc.py +1 -1
  46. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/compat/__init__.py +23 -66
  47. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/experimental/__init__.py +4 -3
  48. anndata-0.12.0rc1/src/anndata/experimental/backed/__init__.py +5 -0
  49. anndata-0.12.0rc1/src/anndata/experimental/backed/_compat.py +43 -0
  50. anndata-0.12.0rc1/src/anndata/experimental/backed/_io.py +159 -0
  51. anndata-0.12.0rc1/src/anndata/experimental/backed/_lazy_arrays.py +187 -0
  52. anndata-0.12.0rc1/src/anndata/experimental/backed/_xarray.py +146 -0
  53. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/experimental/merge.py +17 -13
  54. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/experimental/multi_files/_anncollection.py +23 -7
  55. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/experimental/pytorch/_annloader.py +37 -10
  56. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/io.py +1 -16
  57. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/logging.py +12 -7
  58. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/tests/helpers.py +196 -80
  59. anndata-0.12.0rc1/src/anndata/types.py +22 -0
  60. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/typing.py +3 -4
  61. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/utils.py +5 -4
  62. anndata-0.12.0rc1/src/testing/anndata/_doctest.py +16 -0
  63. {anndata-0.11.4 → anndata-0.12.0rc1}/src/testing/anndata/_pytest.py +7 -4
  64. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/conftest.py +21 -1
  65. anndata-0.12.0rc1/tests/lazy/conftest.py +247 -0
  66. anndata-0.12.0rc1/tests/lazy/test_concat.py +320 -0
  67. anndata-0.12.0rc1/tests/lazy/test_read.py +157 -0
  68. anndata-0.12.0rc1/tests/lazy/test_write.py +46 -0
  69. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_backed_dense.py +2 -6
  70. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_backed_hdf5.py +3 -1
  71. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_backed_sparse.py +81 -46
  72. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_base.py +1 -3
  73. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_concatenate.py +19 -17
  74. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_concatenate_disk.py +2 -1
  75. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_dask.py +2 -5
  76. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_deprecations.py +6 -16
  77. anndata-0.12.0rc1/tests/test_extensions.py +230 -0
  78. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_helpers.py +1 -33
  79. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_io_backwards_compat.py +9 -6
  80. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_io_dispatched.py +50 -20
  81. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_io_elementwise.py +54 -52
  82. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_io_partial.py +22 -17
  83. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_io_utils.py +3 -7
  84. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_readwrite.py +140 -41
  85. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_settings.py +2 -15
  86. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_structured_arrays.py +28 -22
  87. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_views.py +12 -13
  88. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_x.py +5 -10
  89. anndata-0.11.4/src/anndata/_io/specs/lazy_methods.py +0 -186
  90. anndata-0.11.4/src/anndata/compat/exceptiongroups.py +0 -14
  91. {anndata-0.11.4 → anndata-0.12.0rc1}/.cirun.yml +0 -0
  92. {anndata-0.11.4 → anndata-0.12.0rc1}/.codecov.yml +0 -0
  93. {anndata-0.11.4 → anndata-0.12.0rc1}/.editorconfig +0 -0
  94. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  95. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/ISSUE_TEMPLATE/enhancement-request.yml +0 -0
  96. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  97. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/benchmark.yml +0 -0
  98. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/check-pr-milestoned.yml +0 -0
  99. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/close-stale.yml +0 -0
  100. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/codespell.yml +0 -0
  101. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/label-stale.yml +0 -0
  102. {anndata-0.11.4 → anndata-0.12.0rc1}/.github/workflows/publish.yml +0 -0
  103. {anndata-0.11.4 → anndata-0.12.0rc1}/.gitmodules +0 -0
  104. {anndata-0.11.4 → anndata-0.12.0rc1}/.prettierignore +0 -0
  105. {anndata-0.11.4 → anndata-0.12.0rc1}/.prettierrc.yaml +0 -0
  106. {anndata-0.11.4 → anndata-0.12.0rc1}/.taplo.toml +0 -0
  107. {anndata-0.11.4 → anndata-0.12.0rc1}/.vscode/launch.json +0 -0
  108. {anndata-0.11.4 → anndata-0.12.0rc1}/.vscode/settings.json +0 -0
  109. {anndata-0.11.4 → anndata-0.12.0rc1}/benchmarks/README.md +0 -0
  110. {anndata-0.11.4 → anndata-0.12.0rc1}/benchmarks/benchmarks/__init__.py +0 -0
  111. {anndata-0.11.4 → anndata-0.12.0rc1}/benchmarks/benchmarks/readwrite.py +0 -0
  112. {anndata-0.11.4 → anndata-0.12.0rc1}/benchmarks/benchmarks/sparse_dataset.py +0 -0
  113. {anndata-0.11.4 → anndata-0.12.0rc1}/benchmarks/benchmarks/utils.py +0 -0
  114. {anndata-0.11.4 → anndata-0.12.0rc1}/biome.jsonc +0 -0
  115. {anndata-0.11.4 → anndata-0.12.0rc1}/ci/constraints.txt +0 -0
  116. {anndata-0.11.4 → anndata-0.12.0rc1}/ci/scripts/towncrier_automation.py +0 -0
  117. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/Makefile +0 -0
  118. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/_key_contributors.rst +0 -0
  119. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/_static/img/anndata_schema.svg +0 -0
  120. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/_templates/autosummary/class.rst +0 -0
  121. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/benchmark-read-write.ipynb +0 -0
  122. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/benchmarks.md +0 -0
  123. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/concatenation.rst +0 -0
  124. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/contributing.md +0 -0
  125. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/extensions/patch_myst_cite.py +0 -0
  126. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/index.md +0 -0
  127. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/interoperability.md +0 -0
  128. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/news.md +0 -0
  129. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/references.rst +0 -0
  130. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.0.md +0 -0
  131. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.1.md +0 -0
  132. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.2.md +0 -0
  133. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.3.md +0 -0
  134. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.4.md +0 -0
  135. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.5.md +0 -0
  136. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.6.md +0 -0
  137. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.7.md +0 -0
  138. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.8.md +0 -0
  139. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.10.9.md +0 -0
  140. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.11.2.md +0 -0
  141. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.11.3.md +0 -0
  142. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.11.4.md +0 -0
  143. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.4.0.md +0 -0
  144. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.5.0.md +0 -0
  145. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.6.0.md +0 -0
  146. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.6.x.md +0 -0
  147. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.0.md +0 -0
  148. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.2.md +0 -0
  149. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.3.md +0 -0
  150. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.4.md +0 -0
  151. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.5.md +0 -0
  152. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.6.md +0 -0
  153. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.7.md +0 -0
  154. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.7.8.md +0 -0
  155. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.8.0.md +0 -0
  156. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.9.0.md +0 -0
  157. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.9.1.md +0 -0
  158. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/0.9.2.md +0 -0
  159. {anndata-0.11.4 → anndata-0.12.0rc1}/docs/release-notes/index.md +0 -0
  160. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/__init__.py +0 -0
  161. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/access.py +0 -0
  162. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_core/raw.py +0 -0
  163. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/__init__.py +0 -0
  164. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_io/read.py +0 -0
  165. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_version.py +0 -0
  166. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/_warnings.py +0 -0
  167. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/experimental/_dispatch_io.py +0 -0
  168. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/experimental/multi_files/__init__.py +0 -0
  169. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/experimental/pytorch/__init__.py +0 -0
  170. {anndata-0.11.4 → anndata-0.12.0rc1}/src/anndata/tests/__init__.py +0 -0
  171. {anndata-0.11.4 → anndata-0.12.0rc1}/src/testing/anndata/__init__.py +0 -0
  172. {anndata-0.11.4 → anndata-0.12.0rc1}/src/testing/anndata/py.typed +0 -0
  173. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/adata-comments.tsv +0 -0
  174. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/adata.csv +0 -0
  175. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/archives/readme.md +0 -0
  176. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/archives/v0.7.0/adata.h5ad +0 -0
  177. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/archives/v0.7.0/adata.zarr.zip +0 -0
  178. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/archives/v0.7.8/adata.h5ad +0 -0
  179. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/archives/v0.7.8/adata.zarr.zip +0 -0
  180. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/excel.xlsx +0 -0
  181. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/data/umi_tools.tsv.gz +0 -0
  182. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_anncollection.py +0 -0
  183. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_annot.py +0 -0
  184. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_awkward.py +0 -0
  185. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_dask_view_mem.py +0 -0
  186. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_get_vector.py +0 -0
  187. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_gpu.py +0 -0
  188. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_inplace_subset.py +0 -0
  189. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_io_conversion.py +0 -0
  190. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_io_warnings.py +0 -0
  191. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_layers.py +0 -0
  192. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_obsmvarm.py +0 -0
  193. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_obspvarp.py +0 -0
  194. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_raw.py +0 -0
  195. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_repr.py +0 -0
  196. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_transpose.py +0 -0
  197. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_uns.py +0 -0
  198. {anndata-0.11.4 → anndata-0.12.0rc1}/tests/test_utils.py +0 -0
@@ -53,10 +53,18 @@ body:
53
53
  description: |
54
54
  Which version of anndata and other related software you used.
55
55
 
56
- Please install `session-info`, run the following command, then paste the results into the text box below.
56
+ Please install `session-info2`, run the following command in a notebook,
57
+ click the “Copy as Markdown” button,
58
+ then paste the results into the text box below.
57
59
 
58
60
  ```python
59
- >>> import anndata, session_info; session_info.show(html=False, dependencies=True)
61
+ In[1]: import anndata, session_info2; session_info2.session_info(dependencies=True)
62
+ ```
63
+
64
+ Alternatively, run this in a console:
65
+
66
+ ```python
67
+ >>> import session_info2; print(session_info2.session_info(dependencies=True)._repr_mimebundle_()["text/markdown"])
60
68
  ```
61
69
  render: python
62
70
  validations:
@@ -27,14 +27,14 @@ jobs:
27
27
  strategy:
28
28
  matrix:
29
29
  include:
30
- - python-version: '3.12'
30
+ - python-version: '3.13'
31
31
  test-type: coverage
32
- - python-version: '3.10'
32
+ - python-version: '3.11'
33
33
  test-type: standard
34
- - python-version: '3.12'
34
+ - python-version: '3.13'
35
35
  dependencies-version: pre-release
36
36
  test-type: strict-warning
37
- - python-version: '3.10'
37
+ - python-version: '3.11'
38
38
  dependencies-version: minimum
39
39
  test-type: coverage
40
40
  steps:
@@ -56,19 +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] @ ." -c ci/constraints.txt
59
+ run: uv pip install --system --compile "anndata[dev,test-full] @ ." -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
-
66
65
  deps=$(python3 ci/scripts/min-deps.py pyproject.toml --extra dev test)
67
66
  uv pip install --system --compile $deps "anndata @ ."
68
67
 
69
68
  - name: Install dependencies release candidates
70
69
  if: matrix.dependencies-version == 'pre-release'
71
- run: uv pip install -v --system --compile --pre "anndata[dev,test] @ ." -c ci/constraints.txt
70
+ run: uv pip install -v --system --compile --pre "anndata[dev,test-full] @ ." -c ci/constraints.txt
72
71
 
73
72
  - name: Display installed versions
74
73
  run: uv pip list
@@ -100,10 +99,10 @@ jobs:
100
99
  fetch-depth: 0
101
100
  filter: blob:none
102
101
 
103
- - name: Set up Python 3.12
102
+ - name: Set up Python 3.13
104
103
  uses: actions/setup-python@v5
105
104
  with:
106
- python-version: '3.12'
105
+ python-version: '3.13'
107
106
 
108
107
  - name: Install build tools and requirements
109
108
  run: |
@@ -69,7 +69,8 @@ jobs:
69
69
  - name: Install Python
70
70
  uses: actions/setup-python@v5
71
71
  with:
72
- python-version: ${{ env.max_python_version }}
72
+ # https://github.com/cupy/cupy/issues/8651 cupy does not support python3.13 yet
73
+ python-version: "3.12"
73
74
 
74
75
  - name: Install UV
75
76
  uses: astral-sh/setup-uv@v5
@@ -7,6 +7,7 @@ __pycache__/
7
7
  /*cache/
8
8
  /node_modules/
9
9
  /data/
10
+ /venv/
10
11
 
11
12
  # Distribution / packaging
12
13
  /dist/
@@ -1,6 +1,6 @@
1
1
  repos:
2
2
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
- rev: v0.11.2
3
+ rev: v0.11.4
4
4
  hooks:
5
5
  - id: ruff
6
6
  args: ["--fix"]
@@ -2,7 +2,7 @@ version: 2
2
2
  build:
3
3
  os: ubuntu-20.04
4
4
  tools:
5
- python: "3.12"
5
+ python: "3.13"
6
6
  jobs:
7
7
  post_checkout:
8
8
  # unshallow so version can be derived from tag
@@ -1,6 +1,6 @@
1
1
  BSD 3-Clause License
2
2
 
3
- Copyright (c) 2025, scverse
3
+ Copyright (c) 2025, scverse®
4
4
  Copyright (c) 2017-2018, P. Angerer, F. Alexander Wolf, Theis Lab
5
5
  All rights reserved.
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anndata
3
- Version: 0.11.4
3
+ Version: 0.12.0rc1
4
4
  Summary: Annotated data.
5
5
  Project-URL: Documentation, https://anndata.readthedocs.io/
6
6
  Project-URL: Source, https://github.com/scverse/anndata
@@ -18,30 +18,31 @@ Classifier: Operating System :: MacOS :: MacOS X
18
18
  Classifier: Operating System :: Microsoft :: Windows
19
19
  Classifier: Operating System :: POSIX :: Linux
20
20
  Classifier: Programming Language :: Python :: 3
21
- Classifier: Programming Language :: Python :: 3.10
22
21
  Classifier: Programming Language :: Python :: 3.11
23
22
  Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
24
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
25
25
  Classifier: Topic :: Scientific/Engineering :: Visualization
26
- Requires-Python: >=3.10
26
+ Requires-Python: >=3.11
27
27
  Requires-Dist: array-api-compat!=1.5,>1.4
28
- Requires-Dist: exceptiongroup; python_version < '3.11'
29
- Requires-Dist: h5py>=3.7
28
+ Requires-Dist: h5py>=3.8
29
+ Requires-Dist: legacy-api-wrap
30
30
  Requires-Dist: natsort
31
- Requires-Dist: numpy>=1.23
31
+ Requires-Dist: numpy>=1.25
32
32
  Requires-Dist: packaging>=24.2
33
- Requires-Dist: pandas!=2.1.0rc0,!=2.1.2,>=1.4
34
- Requires-Dist: scipy>1.8
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
35
36
  Provides-Extra: cu11
36
37
  Requires-Dist: cupy-cuda11x; extra == 'cu11'
37
38
  Provides-Extra: cu12
38
39
  Requires-Dist: cupy-cuda12x; extra == 'cu12'
39
40
  Provides-Extra: dask
40
- Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2022.09.2; extra == 'dask'
41
+ Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'dask'
41
42
  Provides-Extra: dev
42
43
  Requires-Dist: awkward>=2.3; extra == 'dev'
43
44
  Requires-Dist: boltons; extra == 'dev'
44
- Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2022.09.2; extra == 'dev'
45
+ Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'dev'
45
46
  Requires-Dist: dask[distributed]; extra == 'dev'
46
47
  Requires-Dist: filelock; extra == 'dev'
47
48
  Requires-Dist: hatch-vcs; extra == 'dev'
@@ -51,20 +52,20 @@ Requires-Dist: loompy>=3.0.5; extra == 'dev'
51
52
  Requires-Dist: matplotlib; extra == 'dev'
52
53
  Requires-Dist: openpyxl; extra == 'dev'
53
54
  Requires-Dist: pyarrow; extra == 'dev'
54
- Requires-Dist: pytest-cov>=2.10; extra == 'dev'
55
+ Requires-Dist: pytest-cov; extra == 'dev'
55
56
  Requires-Dist: pytest-memray; extra == 'dev'
56
57
  Requires-Dist: pytest-mock; extra == 'dev'
57
58
  Requires-Dist: pytest-randomly; extra == 'dev'
58
59
  Requires-Dist: pytest-xdist[psutil]; extra == 'dev'
59
60
  Requires-Dist: pytest<8.3.4,>=8.2; extra == 'dev'
60
- Requires-Dist: scanpy>=1.9.8; extra == 'dev'
61
+ Requires-Dist: scanpy>=1.10; extra == 'dev'
61
62
  Requires-Dist: scikit-learn; extra == 'dev'
62
63
  Requires-Dist: towncrier>=24.8.0; extra == 'dev'
63
- Requires-Dist: zarr<3; extra == 'dev'
64
64
  Provides-Extra: dev-doc
65
65
  Requires-Dist: towncrier>=24.8.0; extra == 'dev-doc'
66
66
  Provides-Extra: doc
67
67
  Requires-Dist: awkward>=2.3; extra == 'doc'
68
+ Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'doc'
68
69
  Requires-Dist: ipython; extra == 'doc'
69
70
  Requires-Dist: myst-nb; extra == 'doc'
70
71
  Requires-Dist: myst-parser; extra == 'doc'
@@ -79,13 +80,17 @@ Requires-Dist: sphinx-toolbox>=3.8.0; extra == 'doc'
79
80
  Requires-Dist: sphinx>=8.2.1; extra == 'doc'
80
81
  Requires-Dist: sphinxext-opengraph; extra == 'doc'
81
82
  Requires-Dist: towncrier>=24.8.0; extra == 'doc'
82
- Requires-Dist: zarr<3; extra == 'doc'
83
83
  Provides-Extra: gpu
84
84
  Requires-Dist: cupy; extra == 'gpu'
85
+ Provides-Extra: lazy
86
+ Requires-Dist: aiohttp; extra == 'lazy'
87
+ Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'lazy'
88
+ Requires-Dist: requests; extra == 'lazy'
89
+ Requires-Dist: xarray>=2024.06.0; extra == 'lazy'
85
90
  Provides-Extra: test
86
91
  Requires-Dist: awkward>=2.3; extra == 'test'
87
92
  Requires-Dist: boltons; extra == 'test'
88
- Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2022.09.2; extra == 'test'
93
+ Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'test'
89
94
  Requires-Dist: dask[distributed]; extra == 'test'
90
95
  Requires-Dist: filelock; extra == 'test'
91
96
  Requires-Dist: httpx; extra == 'test'
@@ -94,18 +99,40 @@ Requires-Dist: loompy>=3.0.5; extra == 'test'
94
99
  Requires-Dist: matplotlib; extra == 'test'
95
100
  Requires-Dist: openpyxl; extra == 'test'
96
101
  Requires-Dist: pyarrow; extra == 'test'
97
- Requires-Dist: pytest-cov>=2.10; extra == 'test'
102
+ Requires-Dist: pytest-cov; extra == 'test'
98
103
  Requires-Dist: pytest-memray; extra == 'test'
99
104
  Requires-Dist: pytest-mock; extra == 'test'
100
105
  Requires-Dist: pytest-randomly; extra == 'test'
101
106
  Requires-Dist: pytest-xdist[psutil]; extra == 'test'
102
107
  Requires-Dist: pytest<8.3.4,>=8.2; extra == 'test'
103
- Requires-Dist: scanpy>=1.9.8; extra == 'test'
108
+ Requires-Dist: scanpy>=1.10; extra == 'test'
104
109
  Requires-Dist: scikit-learn; extra == 'test'
105
- Requires-Dist: zarr<3; 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'
106
133
  Description-Content-Type: text/markdown
107
134
 
108
- [![Build Status](https://dev.azure.com/scverse/anndata/_apis/build/status/scverse.anndata?branchName=main)](https://dev.azure.com/scverse/anndata/_build)
135
+ [![Tests](https://github.com/scverse/anndata/actions/workflows/test-cpu.yml/badge.svg)](https://github.com/scverse/anndata/actions)
109
136
  [![Conda](https://img.shields.io/conda/vn/conda-forge/anndata.svg)](https://anaconda.org/conda-forge/anndata)
110
137
  [![Coverage](https://codecov.io/gh/scverse/anndata/branch/main/graph/badge.svg?token=IN1mJN1Wi8)](https://codecov.io/gh/scverse/anndata)
111
138
  [![Docs](https://readthedocs.com/projects/icb-anndata/badge/?version=latest)](https://anndata.readthedocs.io)
@@ -1,4 +1,4 @@
1
- [![Build Status](https://dev.azure.com/scverse/anndata/_apis/build/status/scverse.anndata?branchName=main)](https://dev.azure.com/scverse/anndata/_build)
1
+ [![Tests](https://github.com/scverse/anndata/actions/workflows/test-cpu.yml/badge.svg)](https://github.com/scverse/anndata/actions)
2
2
  [![Conda](https://img.shields.io/conda/vn/conda-forge/anndata.svg)](https://anaconda.org/conda-forge/anndata)
3
3
  [![Coverage](https://codecov.io/gh/scverse/anndata/branch/main/graph/badge.svg?token=IN1mJN1Wi8)](https://codecov.io/gh/scverse/anndata)
4
4
  [![Docs](https://readthedocs.com/projects/icb-anndata/badge/?version=latest)](https://anndata.readthedocs.io)
@@ -2,22 +2,17 @@
2
2
  // The version of the config file format. Do not change, unless
3
3
  // you know what you are doing.
4
4
  "version": 1,
5
-
6
5
  // The name of the project being benchmarked
7
6
  "project": "anndata",
8
-
9
7
  // The project's homepage
10
8
  "project_url": "https://anndata.readthedocs.io/",
11
-
12
9
  // The URL or local path of the source code repository for the
13
10
  // project being benchmarked
14
11
  "repo": "../../anndata",
15
-
16
12
  // The Python project's subdirectory in your repo. If missing or
17
13
  // the empty string, the project is assumed to be located at the root
18
14
  // of the repository.
19
15
  // "repo_subdir": "",
20
-
21
16
  // Customizable commands for building, installing, and
22
17
  // uninstalling the project. See asv.conf.json documentation.
23
18
  //
@@ -27,40 +22,32 @@
27
22
  "python -m pip install build",
28
23
  "python -m build --wheel -o {build_cache_dir} {build_dir}",
29
24
  ],
30
-
31
25
  // List of branches to benchmark. If not provided, defaults to "master"
32
26
  // (for git) or "default" (for mercurial).
33
27
  "branches": ["main"], // for git
34
28
  // "branches": ["default"], // for mercurial
35
-
36
29
  // The DVCS being used. If not set, it will be automatically
37
30
  // determined from "repo" by looking at the protocol in the URL
38
31
  // (if remote), or by looking for special directories, such as
39
32
  // ".git" (if local).
40
33
  "dvcs": "git",
41
-
42
34
  // The tool to use to create environments. May be "conda",
43
35
  // "virtualenv" or other value depending on the plugins in use.
44
36
  // If missing or the empty string, the tool will be automatically
45
37
  // determined by looking for tools on the PATH environment
46
38
  // variable.
47
39
  "environment_type": "mamba",
48
-
49
40
  // timeout in seconds for installing any dependencies in environment
50
41
  // defaults to 10 min
51
42
  //"install_timeout": 600,
52
-
53
43
  // the base URL to show a commit for the project.
54
44
  "show_commit_url": "https://github.com/theislab/anndata/commit/",
55
-
56
45
  // The Pythons you'd like to test against. If not provided, defaults
57
46
  // to the current version of Python used to run `asv`.
58
47
  // "pythons": ["2.7", "3.6"],
59
-
60
48
  // The list of conda channel names to be searched for benchmark
61
49
  // dependency packages in the specified order
62
50
  "conda_channels": ["conda-forge", "defaults"],
63
-
64
51
  // The matrix of dependencies to test. Each key is the name of a
65
52
  // package (in PyPI) and the values are version numbers. An empty
66
53
  // list or empty string indicates to just test against the default
@@ -79,14 +66,13 @@
79
66
  "natsort": [""],
80
67
  "pandas": [""],
81
68
  "memory_profiler": [""],
82
- "zarr": ["2.18.4"],
69
+ "zarr": [""],
83
70
  "pytoml": [""],
84
71
  "pytest": [""],
85
72
  "pooch": [""],
86
73
  // "scanpy": [""],
87
74
  // "psutil": [""]
88
75
  },
89
-
90
76
  // Combinations of libraries/python versions can be excluded/included
91
77
  // from the set to test. Each entry is a dictionary containing additional
92
78
  // key-value pairs to include/exclude.
@@ -119,31 +105,24 @@
119
105
  // // additional env if run on windows+conda
120
106
  // {"platform": "win32", "environment_type": "mamba", "python": "2.7", "libpython": ""},
121
107
  // ],
122
-
123
108
  // The directory (relative to the current directory) that benchmarks are
124
109
  // stored in. If not provided, defaults to "benchmarks"
125
110
  // "benchmark_dir": "benchmarks",
126
-
127
111
  // The directory (relative to the current directory) to cache the Python
128
112
  // environments in. If not provided, defaults to "env"
129
113
  "env_dir": ".asv/env",
130
-
131
114
  // The directory (relative to the current directory) that raw benchmark
132
115
  // results are stored in. If not provided, defaults to "results".
133
116
  "results_dir": ".asv/results",
134
-
135
117
  // The directory (relative to the current directory) that the html tree
136
118
  // should be written to. If not provided, defaults to "html".
137
119
  "html_dir": ".asv/html",
138
-
139
120
  // The number of characters to retain in the commit hashes.
140
121
  // "hash_length": 8,
141
-
142
122
  // `asv` will cache results of the recent builds in each
143
123
  // environment, making them faster to install next time. This is
144
124
  // the number of builds to keep, per environment.
145
125
  // "build_cache_size": 2,
146
-
147
126
  // The commits after which the regression search in `asv publish`
148
127
  // should start looking for regressions. Dictionary whose keys are
149
128
  // regexps matching to benchmark names, and values corresponding to
@@ -156,7 +135,6 @@
156
135
  // "some_benchmark": "352cdf", // Consider regressions only after this commit
157
136
  // "another_benchmark": null, // Skip regression detection altogether
158
137
  // },
159
-
160
138
  // The thresholds for relative change in results, after which `asv
161
139
  // publish` starts reporting regressions. Dictionary of the same
162
140
  // form as in ``regressions_first_commits``, with values
@@ -15,8 +15,14 @@ class GarbargeCollectionSuite:
15
15
  def display_top(snapshot, key_type="lineno"):
16
16
  snapshot = snapshot.filter_traces(
17
17
  (
18
- tracemalloc.Filter(False, "<frozen importlib._bootstrap>"),
19
- tracemalloc.Filter(False, "<unknown>"),
18
+ tracemalloc.Filter(
19
+ inclusive=False,
20
+ filename_pattern="<frozen importlib._bootstrap>",
21
+ ),
22
+ tracemalloc.Filter(
23
+ inclusive=False,
24
+ filename_pattern="<unknown>",
25
+ ),
20
26
  )
21
27
  )
22
28
  top_stats = snapshot.statistics(key_type)
@@ -10,17 +10,13 @@ from __future__ import annotations
10
10
 
11
11
  import argparse
12
12
  import sys
13
+ import tomllib
13
14
  from collections import deque
14
15
  from contextlib import ExitStack
15
16
  from functools import cached_property
16
17
  from pathlib import Path
17
18
  from typing import TYPE_CHECKING
18
19
 
19
- if sys.version_info >= (3, 11):
20
- import tomllib
21
- else:
22
- import tomli as tomllib
23
-
24
20
  from packaging.requirements import Requirement
25
21
  from packaging.version import Version
26
22
 
@@ -39,6 +35,8 @@ def min_dep(req: Requirement) -> Requirement:
39
35
 
40
36
  >>> min_dep(Requirement("numpy>=1.0"))
41
37
  <Requirement('numpy==1.0.*')>
38
+ >>> min_dep(Requirement("numpy<3.0"))
39
+ <Requirement('numpy<3.0')>
42
40
  """
43
41
  req_name = req.name
44
42
  if req.extras:
@@ -48,8 +46,8 @@ def min_dep(req: Requirement) -> Requirement:
48
46
  spec for spec in req.specifier if spec.operator in {"==", "~=", ">=", ">"}
49
47
  ]
50
48
  if not filter_specs:
51
- return Requirement(req_name)
52
-
49
+ # TODO: handle markers
50
+ return Requirement(f"{req_name}{req.specifier}")
53
51
  min_version = Version("0.0.0.a1")
54
52
  for spec in filter_specs:
55
53
  if spec.operator in {">", ">=", "~="}:
@@ -13,6 +13,8 @@ The central class:
13
13
  AnnData
14
14
  ```
15
15
 
16
+ (combining-api)=
17
+
16
18
  ## Combining
17
19
 
18
20
  Combining {class}`AnnData` objects.
@@ -25,6 +27,8 @@ See also the section on concatenation.
25
27
  concat
26
28
  ```
27
29
 
30
+ (reading-api)=
31
+
28
32
  ## Reading
29
33
 
30
34
  Reading anndata’s native formats `.h5ad` and `zarr`.
@@ -66,6 +70,8 @@ You might have more success by assembling the {class}`AnnData` object yourself f
66
70
  io.read_umi_tools
67
71
  ```
68
72
 
73
+ (writing-api)=
74
+
69
75
  ## Writing
70
76
 
71
77
  Writing a complete {class}`AnnData` object to disk in anndata’s native formats `.h5ad` and `zarr`.
@@ -146,7 +152,8 @@ Low level methods for reading and writing elements of an {class}`AnnData` object
146
152
  .. autosummary::
147
153
  :toctree: generated/
148
154
 
149
- experimental.read_elem_as_dask
155
+ experimental.read_elem_lazy
156
+ experimental.read_lazy
150
157
  ```
151
158
 
152
159
  Utilities for customizing the IO process:
@@ -171,8 +178,34 @@ Types used by the former:
171
178
  experimental.ReadCallback
172
179
  experimental.WriteCallback
173
180
  experimental.StorageType
181
+ experimental.backed._lazy_arrays.MaskedArray
182
+ experimental.backed._lazy_arrays.CategoricalArray
183
+ experimental.backed._xarray.Dataset2D
184
+ ```
185
+
186
+ (extensions-api)=
187
+
188
+ ## Extensions
189
+
190
+ ```{eval-rst}
191
+ .. autosummary::
192
+ :toctree: generated/
193
+
194
+ register_anndata_namespace
195
+
174
196
  ```
175
197
 
198
+ Types used by the former:
199
+
200
+ ```{eval-rst}
201
+ .. autosummary::
202
+ :toctree: generated/
203
+
204
+ types.ExtensionNamespace
205
+ ```
206
+
207
+ (errors-api)=
208
+
176
209
  ## Errors and warnings
177
210
 
178
211
  ```{eval-rst}
@@ -182,6 +215,8 @@ Types used by the former:
182
215
  ImplicitModificationWarning
183
216
  ```
184
217
 
218
+ (settings-api)=
219
+
185
220
  ## Settings
186
221
 
187
222
  ```{eval-rst}
@@ -192,6 +227,8 @@ Types used by the former:
192
227
  settings.override
193
228
  ```
194
229
 
230
+ (types-api)=
231
+
195
232
  ## Custom Types/Classes for Readable/Writeable Elements
196
233
 
197
234
  ```{eval-rst}
@@ -75,9 +75,10 @@ nb_execution_mode = "off"
75
75
  # Generate the API documentation when building
76
76
  autosummary_generate = True
77
77
  autodoc_member_order = "bysource"
78
+ autodoc_mock_imports = ["torch"]
79
+ # autodoc_default_flags = ['members']
78
80
  issues_github_path = "scverse/anndata"
79
81
  rtd_links_prefix = PurePosixPath("src")
80
- # autodoc_default_flags = ['members']
81
82
  napoleon_google_docstring = False
82
83
  napoleon_numpy_docstring = True
83
84
  napoleon_include_init_with_doc = False
@@ -112,9 +113,14 @@ intersphinx_mapping = dict(
112
113
  python=("https://docs.python.org/3", None),
113
114
  scipy=("https://docs.scipy.org/doc/scipy", None),
114
115
  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
118
  xarray=("https://docs.xarray.dev/en/stable", None),
116
- zarr=("https://zarr.readthedocs.io/en/v2.18.4/", None),
119
+ obstore=("https://developmentseed.org/obstore/latest/", None),
120
+ kvikio=("https://docs.rapids.ai/api/kvikio/stable/", None),
121
+ zarrs=("https://zarrs-python.readthedocs.io/en/stable/", None),
117
122
  )
123
+
118
124
  qualname_overrides = {
119
125
  "h5py._hl.group.Group": "h5py.Group",
120
126
  "h5py._hl.files.File": "h5py.File",
@@ -129,7 +135,11 @@ qualname_overrides = {
129
135
  "anndata._types.WriteCallback": "anndata.experimental.WriteCallback",
130
136
  "anndata._types.Read": "anndata.experimental.Read",
131
137
  "anndata._types.Write": "anndata.experimental.Write",
132
- "zarr._storage.store.BaseStore": "zarr.storage.MemoryStore",
138
+ "zarr.core.array.Array": "zarr.Array",
139
+ "zarr.core.group.Group": "zarr.Group",
140
+ # Buffer is not yet exported, so the buffer class registry is the closest thing
141
+ "zarr.core.buffer.core.Buffer": "zarr.registry.Registry",
142
+ "zarr.storage._common.StorePath": "zarr.storage.StorePath",
133
143
  "anndata.compat.DaskArray": "dask.array.Array",
134
144
  "anndata.compat.CupyArray": "cupy.ndarray",
135
145
  "anndata.compat.CupySparseMatrix": "cupyx.scipy.sparse.spmatrix",
@@ -139,6 +149,7 @@ qualname_overrides = {
139
149
  "pandas.DataFrame.loc": ("py:attr", "pandas.DataFrame.loc"),
140
150
  # should be fixed soon: https://github.com/tox-dev/sphinx-autodoc-typehints/pull/516
141
151
  "types.EllipsisType": ("py:data", "types.EllipsisType"),
152
+ "pathlib._local.Path": "pathlib.Path",
142
153
  }
143
154
  autodoc_type_aliases = dict(
144
155
  NDArray=":data:`~numpy.typing.NDArray`",
@@ -16,7 +16,7 @@ def autodoc_skip_member(
16
16
  what: Literal["module", "class", "exception", "function", "method", "attribute"],
17
17
  name: str,
18
18
  obj: object,
19
- skip: bool,
19
+ skip: bool, # noqa: FBT001
20
20
  options: Options,
21
21
  ):
22
22
  if what == "method" and getattr(obj, "__isabstractmethod__", False):
@@ -91,7 +91,7 @@ Using this information, we're able to dispatch onto readers for the different el
91
91
  ## Dense arrays
92
92
 
93
93
  Dense numeric arrays have the most simple representation on disk,
94
- as they have native equivalents in H5py {doc}`h5py:high/dataset` and Zarr {ref}`Arrays <zarr:tutorial_create>`.
94
+ as they have native equivalents in H5py {doc}`h5py:high/dataset` and Zarr {doc}`Arrays <zarr:user-guide/arrays>`.
95
95
  We can see an example of this with dimensionality reductions stored in the `obsm` group:
96
96
 
97
97
  `````{tab-set}
@@ -40,7 +40,7 @@ Release candidates:
40
40
  - {guilabel}`rc1` Allow `axis` parameter of e.g. {func}`anndata.concat` to accept `'obs'` and `'var'` {user}`flying-sheep` ({pr}`1244`)
41
41
  - {guilabel}`rc1` Add `settings` object with methods for altering internally-used options, like checking for uniqueness on `obs`' index {user}`ilan-gold` ({pr}`1270`)
42
42
  - {guilabel}`rc1` Add {attr}`~anndata.settings.remove_unused_categories` option to {attr}`anndata.settings` to override current behavior {user}`ilan-gold` ({pr}`1340`)
43
- - {guilabel}`rc1` Add {func}`~anndata.experimental.read_elem_as_dask` function to handle i/o with sparse and dense arrays {user}`ilan-gold` ({pr}`1469`)
43
+ - {guilabel}`rc1` Add `~anndata.experimental.read_elem_as_dask` function to handle i/o with sparse and dense arrays {user}`ilan-gold` ({pr}`1469`)
44
44
  - {guilabel}`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`)
45
45
  - {guilabel}`rc1` Add {attr}`~anndata.settings.check_uniqueness` option to {attr}`anndata.settings` to override current behavior {user}`ilan-gold` ({pr}`1507`)
46
46
  - {guilabel}`rc1` Add functionality to write from GPU {class}`dask.array.Array` to disk {user}`ilan-gold` ({pr}`1550`)
@@ -4,5 +4,5 @@
4
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
- - Fix chunking with -1 in `chunks` argument of {func}`~anndata.experimental.read_elem_as_dask` {user}`ilan-gold` ({pr}`1743`)
7
+ - Fix chunking with -1 in `chunks` argument of `~anndata.experimental.read_elem_as_dask` {user}`ilan-gold` ({pr}`1743`)
8
8
  - Fix `cupy<0.13` imports in non-gpu environments {user}`ilan-gold` ({pr}`1754`)
@@ -0,0 +1,4 @@
1
+ (v0.12.0rc1)=
2
+ ### 0.12.0rc1 {small}`2025-04-09`
3
+
4
+ No significant changes.
@@ -14,4 +14,6 @@ notebooks/anncollection-annloader
14
14
  notebooks/anndata_dask_array
15
15
  notebooks/awkward-arrays
16
16
  notebooks/{read,write}_dispatched
17
+ notebooks/read_lazy
18
+ zarr-v3
17
19
  ```