anndata 0.12.0rc3__tar.gz → 0.12.0rc4__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 (207) hide show
  1. anndata-0.12.0rc4/.github/workflows/test-cpu.yml +124 -0
  2. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.gitignore +1 -0
  3. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.pre-commit-config.yaml +1 -1
  4. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/PKG-INFO +4 -27
  5. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/api.md +4 -3
  6. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/conf.py +23 -0
  7. anndata-0.12.0rc4/docs/extensions/autosummary_skip_inherited.py +55 -0
  8. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.12.0rc1.md +1 -1
  9. anndata-0.12.0rc4/docs/release-notes/0.12.0rc4.md +15 -0
  10. anndata-0.12.0rc4/docs/release-notes/2013.development.md +1 -0
  11. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/hatch.toml +4 -0
  12. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/pyproject.toml +4 -3
  13. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/aligned_mapping.py +1 -1
  14. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/index.py +2 -10
  15. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/merge.py +71 -85
  16. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/sparse_dataset.py +19 -6
  17. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/storage.py +2 -2
  18. anndata-0.12.0rc4/src/anndata/_core/xarray.py +401 -0
  19. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/specs/lazy_methods.py +27 -4
  20. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/specs/registry.py +1 -1
  21. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_types.py +7 -0
  22. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/compat/__init__.py +12 -0
  23. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/__init__.py +9 -1
  24. anndata-0.12.0rc4/src/anndata/experimental/backed/__init__.py +7 -0
  25. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/backed/_io.py +2 -7
  26. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/backed/_lazy_arrays.py +12 -4
  27. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/tests/helpers.py +28 -18
  28. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/lazy/test_concat.py +4 -1
  29. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/lazy/test_read.py +5 -1
  30. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_backed_sparse.py +21 -13
  31. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_concatenate.py +75 -97
  32. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_readwrite.py +12 -3
  33. anndata-0.12.0rc4/tests/test_xarray.py +320 -0
  34. anndata-0.12.0rc3/.github/workflows/test-cpu.yml +0 -123
  35. anndata-0.12.0rc3/src/anndata/_core/xarray.py +0 -145
  36. anndata-0.12.0rc3/src/anndata/experimental/backed/__init__.py +0 -5
  37. anndata-0.12.0rc3/tests/test_xarray.py +0 -91
  38. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.cirun.yml +0 -0
  39. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.codecov.yml +0 -0
  40. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.editorconfig +0 -0
  41. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  42. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  43. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/ISSUE_TEMPLATE/enhancement-request.yml +0 -0
  44. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  45. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  46. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/workflows/benchmark.yml +0 -0
  47. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/workflows/check-pr-milestoned.yml +0 -0
  48. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/workflows/close-stale.yml +0 -0
  49. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/workflows/codespell.yml +0 -0
  50. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/workflows/label-stale.yml +0 -0
  51. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/workflows/publish.yml +0 -0
  52. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.github/workflows/test-gpu.yml +0 -0
  53. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.gitmodules +0 -0
  54. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.prettierignore +0 -0
  55. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.prettierrc.yaml +0 -0
  56. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.readthedocs.yml +0 -0
  57. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.taplo.toml +0 -0
  58. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.vscode/launch.json +0 -0
  59. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/.vscode/settings.json +0 -0
  60. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/LICENSE +0 -0
  61. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/README.md +0 -0
  62. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/benchmarks/README.md +0 -0
  63. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/benchmarks/asv.conf.json +0 -0
  64. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/benchmarks/benchmarks/__init__.py +0 -0
  65. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/benchmarks/benchmarks/anndata.py +0 -0
  66. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/benchmarks/benchmarks/readwrite.py +0 -0
  67. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/benchmarks/benchmarks/sparse_dataset.py +0 -0
  68. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/benchmarks/benchmarks/utils.py +0 -0
  69. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/biome.jsonc +0 -0
  70. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/ci/constraints.txt +0 -0
  71. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/ci/scripts/min-deps.py +0 -0
  72. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/ci/scripts/towncrier_automation.py +0 -0
  73. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/Makefile +0 -0
  74. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/_key_contributors.rst +0 -0
  75. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/_static/img/anndata_schema.svg +0 -0
  76. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/_templates/autosummary/class.rst +0 -0
  77. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/benchmark-read-write.ipynb +0 -0
  78. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/benchmarks.md +0 -0
  79. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/concatenation.rst +0 -0
  80. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/contributing.md +0 -0
  81. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/extensions/no_skip_abc_members.py +0 -0
  82. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/extensions/patch_myst_cite.py +0 -0
  83. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/fileformat-prose.md +0 -0
  84. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/index.md +0 -0
  85. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/interoperability.md +0 -0
  86. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/news.md +0 -0
  87. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/references.rst +0 -0
  88. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.0.md +0 -0
  89. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.1.md +0 -0
  90. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.2.md +0 -0
  91. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.3.md +0 -0
  92. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.4.md +0 -0
  93. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.5.md +0 -0
  94. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.6.md +0 -0
  95. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.7.md +0 -0
  96. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.8.md +0 -0
  97. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.10.9.md +0 -0
  98. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.11.0.md +0 -0
  99. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.11.1.md +0 -0
  100. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.11.2.md +0 -0
  101. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.11.3.md +0 -0
  102. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.11.4.md +0 -0
  103. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.12.0rc2.md +0 -0
  104. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.12.0rc3.md +0 -0
  105. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.4.0.md +0 -0
  106. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.5.0.md +0 -0
  107. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.6.0.md +0 -0
  108. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.6.x.md +0 -0
  109. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.0.md +0 -0
  110. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.2.md +0 -0
  111. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.3.md +0 -0
  112. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.4.md +0 -0
  113. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.5.md +0 -0
  114. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.6.md +0 -0
  115. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.7.md +0 -0
  116. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.7.8.md +0 -0
  117. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.8.0.md +0 -0
  118. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.9.0.md +0 -0
  119. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.9.1.md +0 -0
  120. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/0.9.2.md +0 -0
  121. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/release-notes/index.md +0 -0
  122. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/tutorials/index.md +0 -0
  123. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/docs/tutorials/zarr-v3.md +0 -0
  124. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/__init__.py +0 -0
  125. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/__init__.py +0 -0
  126. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/access.py +0 -0
  127. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/aligned_df.py +0 -0
  128. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/anndata.py +0 -0
  129. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/extensions.py +0 -0
  130. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/file_backing.py +0 -0
  131. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/raw.py +0 -0
  132. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_core/views.py +0 -0
  133. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/__init__.py +0 -0
  134. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/h5ad.py +0 -0
  135. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/read.py +0 -0
  136. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/specs/__init__.py +0 -0
  137. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/specs/methods.py +0 -0
  138. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/utils.py +0 -0
  139. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/write.py +0 -0
  140. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_io/zarr.py +0 -0
  141. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_settings.py +0 -0
  142. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_version.py +0 -0
  143. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/_warnings.py +0 -0
  144. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/abc.py +0 -0
  145. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/_dispatch_io.py +0 -0
  146. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/backed/_compat.py +0 -0
  147. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/merge.py +0 -0
  148. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/multi_files/__init__.py +0 -0
  149. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/multi_files/_anncollection.py +0 -0
  150. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/pytorch/__init__.py +0 -0
  151. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/experimental/pytorch/_annloader.py +0 -0
  152. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/io.py +0 -0
  153. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/logging.py +0 -0
  154. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/tests/__init__.py +0 -0
  155. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/types.py +0 -0
  156. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/typing.py +0 -0
  157. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/anndata/utils.py +0 -0
  158. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/testing/anndata/__init__.py +0 -0
  159. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/testing/anndata/_doctest.py +0 -0
  160. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/testing/anndata/_pytest.py +0 -0
  161. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/src/testing/anndata/py.typed +0 -0
  162. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/conftest.py +0 -0
  163. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/adata-comments.tsv +0 -0
  164. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/adata.csv +0 -0
  165. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/archives/readme.md +0 -0
  166. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/archives/v0.7.0/adata.h5ad +0 -0
  167. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/archives/v0.7.0/adata.zarr.zip +0 -0
  168. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/archives/v0.7.8/adata.h5ad +0 -0
  169. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/archives/v0.7.8/adata.zarr.zip +0 -0
  170. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/excel.xlsx +0 -0
  171. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/data/umi_tools.tsv.gz +0 -0
  172. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/lazy/conftest.py +0 -0
  173. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/lazy/test_write.py +0 -0
  174. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_anncollection.py +0 -0
  175. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_annot.py +0 -0
  176. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_awkward.py +0 -0
  177. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_backed_dense.py +0 -0
  178. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_backed_hdf5.py +0 -0
  179. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_base.py +0 -0
  180. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_concatenate_disk.py +0 -0
  181. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_dask.py +0 -0
  182. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_dask_view_mem.py +0 -0
  183. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_deprecations.py +0 -0
  184. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_extensions.py +0 -0
  185. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_get_vector.py +0 -0
  186. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_gpu.py +0 -0
  187. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_helpers.py +0 -0
  188. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_inplace_subset.py +0 -0
  189. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_io_backwards_compat.py +0 -0
  190. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_io_conversion.py +0 -0
  191. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_io_dispatched.py +0 -0
  192. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_io_elementwise.py +0 -0
  193. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_io_partial.py +0 -0
  194. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_io_utils.py +0 -0
  195. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_io_warnings.py +0 -0
  196. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_layers.py +0 -0
  197. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_obsmvarm.py +0 -0
  198. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_obspvarp.py +0 -0
  199. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_raw.py +0 -0
  200. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_repr.py +0 -0
  201. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_settings.py +0 -0
  202. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_structured_arrays.py +0 -0
  203. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_transpose.py +0 -0
  204. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_uns.py +0 -0
  205. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_utils.py +0 -0
  206. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_views.py +0 -0
  207. {anndata-0.12.0rc3 → anndata-0.12.0rc4}/tests/test_x.py +0 -0
@@ -0,0 +1,124 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - "[0-9]+.[0-9]+.x"
8
+ pull_request:
9
+
10
+ env:
11
+ FORCE_COLOR: "1"
12
+
13
+ defaults:
14
+ run:
15
+ shell: bash -el {0}
16
+
17
+ # Cancel the job if new commits are pushed
18
+ # https://stackoverflow.com/questions/66335225/how-to-cancel-previous-runs-in-the-pr-when-you-push-new-commitsupdate-the-curre
19
+ concurrency:
20
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
21
+ cancel-in-progress: true
22
+
23
+ jobs:
24
+ get-environments:
25
+ runs-on: ubuntu-latest
26
+ outputs:
27
+ envs: ${{ steps.get-envs.outputs.envs }}
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+ with:
31
+ filter: blob:none
32
+ fetch-depth: 0
33
+ - uses: astral-sh/setup-uv@v5
34
+ with:
35
+ enable-cache: false
36
+ - id: get-envs
37
+ run: |
38
+ ENVS_JSON=$(NO_COLOR=1 uvx hatch env show --json | jq -c 'to_entries
39
+ | map(
40
+ select(.key | startswith("hatch-test"))
41
+ | { name: .key, python: .value.python }
42
+ )')
43
+ echo "envs=${ENVS_JSON}" | tee $GITHUB_OUTPUT
44
+ test:
45
+ needs: get-environments
46
+ runs-on: ubuntu-latest
47
+ strategy:
48
+ matrix:
49
+ env: ${{ fromJSON(needs.get-environments.outputs.envs) }}
50
+ env: # environment variable for use in codecov’s env_vars tagging
51
+ ENV_NAME: ${{ matrix.env.name }}
52
+ steps:
53
+ - uses: actions/checkout@v4
54
+ with:
55
+ fetch-depth: 0
56
+ filter: blob:none
57
+
58
+ - name: Set up Python ${{ matrix.env.python }}
59
+ uses: actions/setup-python@v5
60
+ with:
61
+ python-version: ${{ matrix.env.python }}
62
+
63
+ - name: Install UV
64
+ uses: astral-sh/setup-uv@v5
65
+ with:
66
+ enable-cache: true
67
+ cache-dependency-glob: pyproject.toml
68
+
69
+ - name: Install dependencies
70
+ run: uvx hatch -v env create ${{ matrix.env.name }}
71
+
72
+ - name: Run tests
73
+ run: uvx hatch run ${{ matrix.env.name }}:run-cov -v --color=yes -n auto --cov --cov-report=xml --junitxml=test-data/test-results.xml
74
+
75
+ - name: Upload coverage data
76
+ uses: codecov/codecov-action@v5
77
+ with:
78
+ token: ${{ secrets.CODECOV_TOKEN }}
79
+ env_vars: ENV_NAME
80
+ fail_ci_if_error: true
81
+ files: test-data/coverage.xml
82
+
83
+ build:
84
+ runs-on: ubuntu-22.04
85
+ steps:
86
+ - uses: actions/checkout@v4
87
+ with:
88
+ fetch-depth: 0
89
+ filter: blob:none
90
+
91
+ - name: Set up Python 3.13
92
+ uses: actions/setup-python@v5
93
+ with:
94
+ python-version: '3.13'
95
+
96
+ - name: Install build tools and requirements
97
+ run: |
98
+ python -m pip install --upgrade pip
99
+ pip install build twine
100
+
101
+ - name: Display installed versions
102
+ run: pip list
103
+
104
+ - name: Build & Twine check
105
+ run: |
106
+ python -m build --sdist --wheel .
107
+ twine check dist/*
108
+
109
+ - name: Check runtime version
110
+ run: |
111
+ pip install dist/*.whl
112
+ python -c 'import anndata; print(anndata.__version__)'
113
+
114
+ check:
115
+ if: always()
116
+ needs:
117
+ - get-environments
118
+ - test
119
+ - build
120
+ runs-on: ubuntu-latest
121
+ steps:
122
+ - uses: re-actors/alls-green@release/v1
123
+ with:
124
+ jobs: ${{ toJSON(needs) }}
@@ -12,6 +12,7 @@ __pycache__/
12
12
  # Distribution / packaging
13
13
  /dist/
14
14
  /ci/min-deps.txt
15
+ /ci/pre-deps.txt
15
16
  /requirements*.lock
16
17
  /.python-version
17
18
 
@@ -1,6 +1,6 @@
1
1
  repos:
2
2
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
- rev: v0.11.4
3
+ rev: v0.11.12
4
4
  hooks:
5
5
  - id: ruff
6
6
  args: ["--fix"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anndata
3
- Version: 0.12.0rc3
3
+ Version: 0.12.0rc4
4
4
  Summary: Annotated data.
5
5
  Project-URL: Documentation, https://anndata.readthedocs.io/
6
6
  Project-URL: Source, https://github.com/scverse/anndata
@@ -32,7 +32,7 @@ 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
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
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,<3.1,>=2.18.7
36
36
  Provides-Extra: cu11
37
37
  Requires-Dist: cupy-cuda11x; extra == 'cu11'
38
38
  Provides-Extra: cu12
@@ -40,31 +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: aiohttp; extra == 'dev'
44
- Requires-Dist: awkward>=2.3.2; extra == 'dev'
45
- Requires-Dist: boltons; extra == 'dev'
46
- Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'dev'
47
- Requires-Dist: dask[distributed]; extra == 'dev'
48
- Requires-Dist: filelock; extra == 'dev'
49
43
  Requires-Dist: hatch-vcs; extra == 'dev'
50
- Requires-Dist: httpx; extra == 'dev'
51
- Requires-Dist: joblib; extra == 'dev'
52
- Requires-Dist: loompy>=3.0.5; extra == 'dev'
53
- Requires-Dist: matplotlib; extra == 'dev'
54
- Requires-Dist: openpyxl; extra == 'dev'
55
- Requires-Dist: pandas>=2.1.0; extra == 'dev'
56
- Requires-Dist: pyarrow; extra == 'dev'
57
- Requires-Dist: pytest-cov; extra == 'dev'
58
- Requires-Dist: pytest-memray; extra == 'dev'
59
- Requires-Dist: pytest-mock; extra == 'dev'
60
- Requires-Dist: pytest-randomly; extra == 'dev'
61
- Requires-Dist: pytest-xdist[psutil]; extra == 'dev'
62
- Requires-Dist: pytest<8.3.4,>=8.2; extra == 'dev'
63
- Requires-Dist: requests; extra == 'dev'
64
- Requires-Dist: scanpy>=1.10; extra == 'dev'
65
- Requires-Dist: scikit-learn; extra == 'dev'
66
44
  Requires-Dist: towncrier>=24.8.0; extra == 'dev'
67
- Requires-Dist: xarray>=2025.04.0; extra == 'dev'
68
45
  Provides-Extra: dev-doc
69
46
  Requires-Dist: towncrier>=24.8.0; extra == 'dev-doc'
70
47
  Provides-Extra: doc
@@ -89,7 +66,7 @@ Provides-Extra: lazy
89
66
  Requires-Dist: aiohttp; extra == 'lazy'
90
67
  Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'lazy'
91
68
  Requires-Dist: requests; extra == 'lazy'
92
- Requires-Dist: xarray>=2025.04.0; extra == 'lazy'
69
+ Requires-Dist: xarray>=2025.06.1; extra == 'lazy'
93
70
  Provides-Extra: test
94
71
  Requires-Dist: aiohttp; extra == 'test'
95
72
  Requires-Dist: awkward>=2.3.2; extra == 'test'
@@ -113,7 +90,7 @@ Requires-Dist: pytest<8.3.4,>=8.2; extra == 'test'
113
90
  Requires-Dist: requests; extra == 'test'
114
91
  Requires-Dist: scanpy>=1.10; extra == 'test'
115
92
  Requires-Dist: scikit-learn; extra == 'test'
116
- Requires-Dist: xarray>=2025.04.0; extra == 'test'
93
+ Requires-Dist: xarray>=2025.06.1; extra == 'test'
117
94
  Provides-Extra: test-min
118
95
  Requires-Dist: awkward>=2.3.2; extra == 'test-min'
119
96
  Requires-Dist: boltons; extra == 'test-min'
@@ -178,9 +178,10 @@ Types used by the former:
178
178
  experimental.ReadCallback
179
179
  experimental.WriteCallback
180
180
  experimental.StorageType
181
- experimental.backed._lazy_arrays.MaskedArray
182
- experimental.backed._lazy_arrays.CategoricalArray
183
- _core.xarray.Dataset2D
181
+ experimental.backed.MaskedArray
182
+ experimental.backed.CategoricalArray
183
+ experimental.backed.Dataset2D
184
+ experimental.Dataset2DIlocIndexer
184
185
  ```
185
186
 
186
187
  (extensions-api)=
@@ -99,6 +99,27 @@ def setup(app: Sphinx):
99
99
  app.add_generic_role("small", partial(nodes.inline, classes=["small"]))
100
100
  app.add_generic_role("smaller", partial(nodes.inline, classes=["smaller"]))
101
101
 
102
+ # TODO: move to scanpydoc
103
+ if TYPE_CHECKING:
104
+ from docutils.nodes import TextElement, reference
105
+ from sphinx.addnodes import pending_xref
106
+ from sphinx.environment import BuildEnvironment
107
+
108
+ def res(
109
+ app: Sphinx, env: BuildEnvironment, node: pending_xref, contnode: TextElement
110
+ ) -> reference | None:
111
+ return env.domains["py"].resolve_xref(
112
+ env,
113
+ node["refdoc"],
114
+ app.builder,
115
+ node["reftype"],
116
+ node["reftarget"],
117
+ node,
118
+ contnode,
119
+ )
120
+
121
+ app.connect("missing-reference", res, priority=502)
122
+
102
123
 
103
124
  intersphinx_mapping = dict(
104
125
  awkward=("https://awkward-array.org/doc/stable", None),
@@ -133,6 +154,7 @@ qualname_overrides = {
133
154
  "anndata._types.WriteCallback": "anndata.experimental.WriteCallback",
134
155
  "anndata._types.Read": "anndata.experimental.Read",
135
156
  "anndata._types.Write": "anndata.experimental.Write",
157
+ "anndata._types.Dataset2DIlocIndexer": "anndata.experimental.Dataset2DIlocIndexer",
136
158
  "zarr.core.array.Array": "zarr.Array",
137
159
  "zarr.core.group.Group": "zarr.Group",
138
160
  # Buffer is not yet exported, so the buffer class registry is the closest thing
@@ -142,6 +164,7 @@ qualname_overrides = {
142
164
  "anndata.compat.CupyArray": "cupy.ndarray",
143
165
  "anndata.compat.CupySparseMatrix": "cupyx.scipy.sparse.spmatrix",
144
166
  "anndata.compat.XDataArray": "xarray.DataArray",
167
+ "anndata.compat.XDataset": "xarray.Dataset",
145
168
  "awkward.highlevel.Array": "ak.Array",
146
169
  "numpy.int64": ("py:attr", "numpy.int64"),
147
170
  "pandas.DataFrame.iloc": ("py:attr", "pandas.DataFrame.iloc"),
@@ -0,0 +1,55 @@
1
+ """Extension to skip inherited methods and properties in autosummary."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from traceback import walk_stack
6
+ from typing import TYPE_CHECKING
7
+
8
+ if TYPE_CHECKING:
9
+ from typing import Literal
10
+
11
+ from sphinx.application import Sphinx
12
+ from sphinx.ext.autodoc import Options
13
+
14
+
15
+ def skip_inherited( # noqa: PLR0917
16
+ app: Sphinx,
17
+ what: Literal[
18
+ "module", "class", "exception", "function", "method", "attribute", "property"
19
+ ],
20
+ name: str,
21
+ obj: object,
22
+ skip: bool, # noqa: FBT001
23
+ options: Options | dict[str, object],
24
+ ) -> bool | None:
25
+ """Skip inherited members."""
26
+ # Skip `getdoc` property
27
+ if what == "method" and name == "getdoc":
28
+ return True
29
+
30
+ # find parent class
31
+ for frame, _ in walk_stack(None):
32
+ if frame.f_code.co_name == "_get_members" and frame.f_code.co_filename.endswith(
33
+ "/generate.py"
34
+ ):
35
+ parent = frame.f_locals["obj"]
36
+ if not isinstance(parent, type):
37
+ return None
38
+ break
39
+ else:
40
+ return None
41
+
42
+ # return if it’s a member of the parent class
43
+ typ = parent
44
+ while typ is not type:
45
+ if name in typ.__dict__:
46
+ return None
47
+ typ = type(typ)
48
+
49
+ # skip since we know it’s not a member of the parent class
50
+ return True
51
+
52
+
53
+ def setup(app: Sphinx) -> None:
54
+ """App setup hook."""
55
+ app.connect("autodoc-skip-member", skip_inherited)
@@ -10,7 +10,7 @@
10
10
 
11
11
  #### Bug fixes
12
12
 
13
- - Disallow writing of {class}`~anndata._core.xarray.Dataset2D` objects {user}`ilan-gold` ({pr}`1887`)
13
+ - Disallow writing of {class}`~anndata.experimental.backed.Dataset2D` objects {user}`ilan-gold` ({pr}`1887`)
14
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
15
  - Don't use {func}`asyncio.run` internally for any operations {user}`ilan-gold` ({pr}`1933`)
16
16
  - Disallow forward slashes in keys for writing {user}`ilan-gold` ({pr}`1940`)
@@ -0,0 +1,15 @@
1
+ (v0.12.0rc4)=
2
+ ### 0.12.0rc4 {small}`2025-06-18`
3
+
4
+ ### Bug fixes
5
+
6
+ - 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`)
7
+
8
+ ### Features
9
+
10
+ - {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`)
11
+ - Use {attr}`numpy.dtypes.StringDType` with `na_object` set to {attr}`pandas.NA` for nullable string data with {class}`anndata.experimental.backed.Dataset2D` {user}`ilan-gold` ({pr}`2011`)
12
+
13
+ ### Performance
14
+
15
+ - Improve {func}`~anndata.experimental.read_elem_lazy` performance for `h5ad` files by not caching `indptr`. {user}`ilan-gold` ({pr}`2005`)
@@ -0,0 +1 @@
1
+ Bound {mod}`zarr` to `<3.1` until {pr}`1995` is merged to handle the new data type structure. {user}`ilan-gold`
@@ -20,10 +20,14 @@ extra-dependencies = [ "ipykernel" ]
20
20
  env-vars.UV_CONSTRAINT = "ci/constraints.txt"
21
21
  overrides.matrix.deps.env-vars = [
22
22
  { if = [ "pre" ], key = "UV_PRERELEASE", value = "allow" },
23
+ { if = [ "pre" ], key = "UV_CONSTRAINT", value = "ci/pre-deps.txt" },
23
24
  { if = [ "min" ], key = "UV_CONSTRAINT", value = "ci/constraints.txt ci/min-deps.txt" },
24
25
  ]
25
26
  overrides.matrix.deps.pre-install-commands = [
26
27
  { if = [ "min" ], value = "uv run ci/scripts/min-deps.py pyproject.toml --all-extras -o ci/min-deps.txt" },
28
+ # To prevent situations like https://github.com/pydata/xarray/issues/10419 going forward
29
+ { if = [ "pre" ], value = "echo xarray @ git+https://github.com/pydata/xarray.git > ci/pre-deps.txt" },
30
+
27
31
  ]
28
32
  overrides.matrix.deps.python = [
29
33
  { if = [ "min" ], value = "3.11" },
@@ -46,7 +46,8 @@ dependencies = [
46
46
  "packaging>=24.2",
47
47
  "array_api_compat>=1.7.1",
48
48
  "legacy-api-wrap",
49
- "zarr >=2.18.7, !=3.0.0, !=3.0.1, !=3.0.2, !=3.0.3, !=3.0.4, !=3.0.5, !=3.0.6, !=3.0.7",
49
+ # <3.1 on account of https://github.com/scverse/anndata/pull/1995
50
+ "zarr >=2.18.7, !=3.0.0, !=3.0.1, !=3.0.2, !=3.0.3, !=3.0.4, !=3.0.5, !=3.0.6, !=3.0.7, <3.1",
50
51
  ]
51
52
  dynamic = [ "version" ]
52
53
 
@@ -60,7 +61,7 @@ Home-page = "https://github.com/scverse/anndata"
60
61
  dev = [
61
62
  # runtime dev version generation
62
63
  "hatch-vcs",
63
- "anndata[dev-doc,test]",
64
+ "anndata[dev-doc]",
64
65
  ]
65
66
  doc = [
66
67
  "sphinx>=8.2.1",
@@ -109,7 +110,7 @@ gpu = [ "cupy" ]
109
110
  cu12 = [ "cupy-cuda12x" ]
110
111
  cu11 = [ "cupy-cuda11x" ]
111
112
  # requests and aiohttp needed for zarr remote data
112
- lazy = [ "xarray>=2025.04.0", "aiohttp", "requests", "anndata[dask]" ]
113
+ lazy = [ "xarray>=2025.06.1", "aiohttp", "requests", "anndata[dask]" ]
113
114
  # https://github.com/dask/dask/issues/11290
114
115
  # https://github.com/dask/dask/issues/11752
115
116
  dask = [ "dask[array]>=2023.5.1,!=2024.8.*,!=2024.9.*,<2025.2.0" ]
@@ -79,7 +79,7 @@ class AlignedMappingBase(MutableMapping[str, Value], ABC):
79
79
  elif isinstance(val, np.ndarray | CupyArray) and len(val.shape) == 1:
80
80
  val = val.reshape((val.shape[0], 1))
81
81
  elif isinstance(val, XDataset):
82
- val = Dataset2D(data_vars=val.data_vars, coords=val.coords, attrs=val.attrs)
82
+ val = Dataset2D(val)
83
83
  for i, axis in enumerate(self.axes):
84
84
  if self.parent.shape[axis] == axis_len(val, i):
85
85
  continue
@@ -198,7 +198,8 @@ def _subset_sparse(a: CSMatrix | CSArray, subset_idx: Index):
198
198
 
199
199
 
200
200
  @_subset.register(pd.DataFrame)
201
- def _subset_df(df: pd.DataFrame, subset_idx: Index):
201
+ @_subset.register(Dataset2D)
202
+ def _subset_df(df: pd.DataFrame | Dataset2D, subset_idx: Index):
202
203
  return df.iloc[subset_idx]
203
204
 
204
205
 
@@ -209,15 +210,6 @@ def _subset_awkarray(a: AwkArray, subset_idx: Index):
209
210
  return a[subset_idx]
210
211
 
211
212
 
212
- @_subset.register(Dataset2D)
213
- def _(a: Dataset2D, subset_idx: Index):
214
- key = a.index_dim
215
- # xarray seems to have some code looking for a second entry in tuples
216
- if isinstance(subset_idx, tuple) and len(subset_idx) == 1:
217
- subset_idx = subset_idx[0]
218
- return a.isel(**{key: subset_idx})
219
-
220
-
221
213
  # Registration for SparseDataset occurs in sparse_dataset.py
222
214
  @_subset.register(h5py.Dataset)
223
215
  def _subset_dataset(d, subset_idx):