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.
- anndata-0.12.0rc3/.github/ISSUE_TEMPLATE/config.yml +5 -0
- anndata-0.12.0rc3/.github/ISSUE_TEMPLATE/question.yml +14 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/test-cpu.yml +4 -4
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.pre-commit-config.yaml +4 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/PKG-INFO +37 -33
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/readwrite.py +9 -8
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/sparse_dataset.py +15 -11
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/utils.py +0 -16
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/ci/scripts/min-deps.py +9 -3
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/api.md +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/conf.py +3 -4
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/extensions/no_skip_abc_members.py +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.1.md +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.2.md +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.3.md +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.4.md +2 -2
- anndata-0.12.0rc3/docs/release-notes/0.12.0rc1.md +26 -0
- anndata-0.12.0rc3/docs/release-notes/0.12.0rc2.md +14 -0
- anndata-0.12.0rc3/docs/release-notes/0.12.0rc3.md +6 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/hatch.toml +4 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/pyproject.toml +50 -36
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/__init__.py +14 -19
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/access.py +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/aligned_df.py +31 -4
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/aligned_mapping.py +9 -2
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/anndata.py +105 -103
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/file_backing.py +6 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/index.py +14 -8
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/merge.py +229 -98
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/raw.py +1 -4
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/sparse_dataset.py +16 -17
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/storage.py +5 -10
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/views.py +13 -7
- anndata-0.12.0rc3/src/anndata/_core/xarray.py +145 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/__init__.py +3 -3
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/h5ad.py +6 -9
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/read.py +36 -24
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/lazy_methods.py +15 -14
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/methods.py +10 -16
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/registry.py +9 -8
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/utils.py +10 -14
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/write.py +11 -14
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/zarr.py +15 -16
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_settings.py +6 -2
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_types.py +28 -24
- anndata-0.12.0rc3/src/anndata/_version.py +62 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_warnings.py +0 -6
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/abc.py +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/compat/__init__.py +39 -70
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/__init__.py +13 -8
- anndata-0.12.0rc3/src/anndata/experimental/backed/_compat.py +18 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/backed/_io.py +13 -11
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/backed/_lazy_arrays.py +11 -10
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/merge.py +11 -11
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/multi_files/_anncollection.py +24 -46
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/pytorch/_annloader.py +1 -5
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/tests/helpers.py +43 -72
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/typing.py +3 -2
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/utils.py +30 -21
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/_pytest.py +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/conftest.py +4 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/test_concat.py +3 -3
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/test_read.py +28 -6
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_backed_hdf5.py +2 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_backed_sparse.py +13 -41
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_base.py +37 -25
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_concatenate.py +234 -67
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_dask_view_mem.py +5 -7
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_deprecations.py +2 -3
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_extensions.py +3 -4
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_helpers.py +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_backwards_compat.py +1 -4
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_conversion.py +4 -4
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_dispatched.py +13 -10
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_elementwise.py +17 -20
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_partial.py +3 -3
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_utils.py +2 -2
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_io_warnings.py +13 -19
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_obsmvarm.py +27 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_readwrite.py +25 -21
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_repr.py +1 -1
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_settings.py +29 -13
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_transpose.py +1 -3
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_views.py +5 -10
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_x.py +3 -3
- anndata-0.12.0rc3/tests/test_xarray.py +91 -0
- anndata-0.12.0rc1/.github/ISSUE_TEMPLATE/config.yml +0 -8
- anndata-0.12.0rc1/docs/release-notes/0.12.0rc1.md +0 -4
- anndata-0.12.0rc1/src/anndata/_version.py +0 -37
- anndata-0.12.0rc1/src/anndata/experimental/backed/_compat.py +0 -43
- anndata-0.12.0rc1/src/anndata/experimental/backed/_xarray.py +0 -146
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.cirun.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.codecov.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.editorconfig +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/ISSUE_TEMPLATE/enhancement-request.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/benchmark.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/check-pr-milestoned.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/close-stale.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/codespell.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/label-stale.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/publish.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.github/workflows/test-gpu.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.gitignore +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.gitmodules +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.prettierignore +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.prettierrc.yaml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.readthedocs.yml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.taplo.toml +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.vscode/launch.json +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/.vscode/settings.json +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/LICENSE +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/README.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/README.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/asv.conf.json +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/__init__.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/benchmarks/benchmarks/anndata.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/biome.jsonc +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/ci/constraints.txt +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/ci/scripts/towncrier_automation.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/Makefile +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/_key_contributors.rst +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/_static/img/anndata_schema.svg +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/_templates/autosummary/class.rst +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/benchmark-read-write.ipynb +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/benchmarks.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/concatenation.rst +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/contributing.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/extensions/patch_myst_cite.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/fileformat-prose.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/index.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/interoperability.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/news.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/references.rst +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.1.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.2.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.3.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.4.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.5.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.6.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.7.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.8.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.10.9.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.11.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.4.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.5.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.6.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.6.x.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.2.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.3.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.4.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.5.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.6.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.7.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.7.8.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.8.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.9.0.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.9.1.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/0.9.2.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/release-notes/index.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/tutorials/index.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/docs/tutorials/zarr-v3.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/__init__.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_core/extensions.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/_io/specs/__init__.py +6 -6
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/_dispatch_io.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/backed/__init__.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/multi_files/__init__.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/experimental/pytorch/__init__.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/io.py +3 -3
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/logging.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/tests/__init__.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/anndata/types.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/__init__.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/_doctest.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/src/testing/anndata/py.typed +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/conftest.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/adata-comments.tsv +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/adata.csv +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/readme.md +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.0/adata.h5ad +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.0/adata.zarr.zip +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.8/adata.h5ad +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/archives/v0.7.8/adata.zarr.zip +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/excel.xlsx +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/data/umi_tools.tsv.gz +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/lazy/test_write.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_anncollection.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_annot.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_awkward.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_backed_dense.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_concatenate_disk.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_dask.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_get_vector.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_gpu.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_inplace_subset.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_layers.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_obspvarp.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_raw.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_structured_arrays.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_uns.py +0 -0
- {anndata-0.12.0rc1 → anndata-0.12.0rc3}/tests/test_utils.py +0 -0
|
@@ -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
|
|
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 --
|
|
66
|
-
uv pip install --system --compile $deps
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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>=
|
|
92
|
+
Requires-Dist: xarray>=2025.04.0; extra == 'lazy'
|
|
90
93
|
Provides-Extra: test
|
|
91
|
-
Requires-Dist:
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
Requires-Dist: awkward>=2.3; extra == 'test-
|
|
113
|
-
Requires-Dist: boltons; extra == 'test-
|
|
114
|
-
Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,<2025.2.0,>=2023.5.1; extra == 'test-
|
|
115
|
-
Requires-Dist: dask[distributed]; extra == 'test-
|
|
116
|
-
Requires-Dist: filelock; extra == 'test-
|
|
117
|
-
Requires-Dist: httpx; extra == 'test-
|
|
118
|
-
Requires-Dist: joblib; extra == 'test-
|
|
119
|
-
Requires-Dist: loompy>=3.0.5; extra == 'test-
|
|
120
|
-
Requires-Dist: matplotlib; extra == 'test-
|
|
121
|
-
Requires-Dist: openpyxl; extra == 'test-
|
|
122
|
-
Requires-Dist: pyarrow; extra == 'test-
|
|
123
|
-
Requires-Dist: pytest-cov; extra == 'test-
|
|
124
|
-
Requires-Dist: pytest-memray; extra == 'test-
|
|
125
|
-
Requires-Dist: pytest-mock; extra == 'test-
|
|
126
|
-
Requires-Dist: pytest-randomly; extra == 'test-
|
|
127
|
-
Requires-Dist: pytest-xdist[psutil]; extra == 'test-
|
|
128
|
-
Requires-Dist: pytest<8.3.4,>=8.2; extra == 'test-
|
|
129
|
-
Requires-Dist:
|
|
130
|
-
Requires-Dist:
|
|
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
|
[](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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"
|
|
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"),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(v0.11.1)=
|
|
2
2
|
### 0.11.1 {small}`2024-11-12`
|
|
3
3
|
|
|
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
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
|
-
|
|
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,7 +1,7 @@
|
|
|
1
1
|
(v0.11.4)=
|
|
2
2
|
### 0.11.4 {small}`2025-03-26`
|
|
3
3
|
|
|
4
|
-
|
|
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
|
-
|
|
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`)
|
|
@@ -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" ]
|