anndata 0.12.2__tar.gz → 0.12.3__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.3/.github/dependabot.yml +9 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/workflows/benchmark.yml +7 -4
- anndata-0.12.2/.github/workflows/check-pr-milestoned.yml → anndata-0.12.3/.github/workflows/check-pr.yml +5 -1
- {anndata-0.12.2 → anndata-0.12.3}/.github/workflows/publish.yml +1 -1
- {anndata-0.12.2 → anndata-0.12.3}/.github/workflows/test-cpu.yml +37 -32
- {anndata-0.12.2 → anndata-0.12.3}/.github/workflows/test-gpu.yml +14 -17
- {anndata-0.12.2 → anndata-0.12.3}/.pre-commit-config.yaml +2 -2
- {anndata-0.12.2 → anndata-0.12.3}/.readthedocs.yml +1 -1
- {anndata-0.12.2 → anndata-0.12.3}/PKG-INFO +6 -7
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/asv.conf.json +1 -1
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/benchmarks/anndata.py +10 -12
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/benchmarks/readwrite.py +5 -3
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/benchmarks/sparse_dataset.py +10 -12
- {anndata-0.12.2 → anndata-0.12.3}/docs/conf.py +2 -1
- anndata-0.12.3/docs/release-notes/0.12.3.md +14 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/tutorials/zarr-v3.md +0 -5
- {anndata-0.12.2 → anndata-0.12.3}/pyproject.toml +23 -16
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/__init__.py +23 -18
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/anndata.py +8 -7
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/merge.py +28 -39
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/sparse_dataset.py +8 -8
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/views.py +1 -1
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/h5ad.py +18 -27
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/specs/lazy_methods.py +1 -1
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/specs/methods.py +33 -40
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/specs/registry.py +17 -20
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/utils.py +2 -7
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/zarr.py +16 -7
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_settings.py +8 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_settings.pyi +1 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/compat/__init__.py +3 -11
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/merge.py +86 -50
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/multi_files/_anncollection.py +2 -2
- {anndata-0.12.2 → anndata-0.12.3}/src/testing/anndata/_pytest.py +2 -6
- {anndata-0.12.2 → anndata-0.12.3}/tests/conftest.py +2 -2
- {anndata-0.12.2 → anndata-0.12.3}/tests/lazy/test_read.py +4 -3
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_awkward.py +43 -45
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_backed_hdf5.py +65 -18
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_backed_sparse.py +19 -6
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_base.py +4 -4
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_concatenate.py +101 -113
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_concatenate_disk.py +12 -2
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_dask.py +31 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_dask_view_mem.py +3 -1
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_deprecations.py +6 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_extensions.py +3 -3
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_io_dispatched.py +20 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_io_elementwise.py +1 -4
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_io_partial.py +1 -6
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_io_warnings.py +5 -18
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_readwrite.py +41 -36
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_views.py +21 -21
- anndata-0.12.2/src/anndata/_version.py +0 -62
- {anndata-0.12.2 → anndata-0.12.3}/.cirun.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.codecov.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.editorconfig +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/ISSUE_TEMPLATE/enhancement-request.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/workflows/close-stale.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/workflows/codespell.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.github/workflows/label-stale.yml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.gitignore +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.gitmodules +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.prettierignore +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.prettierrc.yaml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.taplo.toml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.vscode/launch.json +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/.vscode/settings.json +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/LICENSE +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/README.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/README.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/benchmarks/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/benchmarks/dataset2d.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/benchmarks/benchmarks/utils.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/biome.jsonc +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/ci/constraints.txt +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/ci/scripts/min-deps.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/ci/scripts/towncrier_automation.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/Makefile +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/_key_contributors.rst +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/_static/img/anndata_schema.svg +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/_templates/autosummary/class.rst +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/api.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/benchmark-read-write.ipynb +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/benchmarks.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/concatenation.rst +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/contributing.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/extensions/autosummary_skip_inherited.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/extensions/no_skip_abc_members.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/extensions/patch_myst_cite.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/fileformat-prose.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/index.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/interoperability.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/news.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/references.rst +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.1.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.2.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.3.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.4.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.5.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.6.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.7.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.8.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.10.9.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.11.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.11.1.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.11.2.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.11.3.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.11.4.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.12.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.12.1.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.12.2.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.4.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.5.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.6.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.6.x.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.2.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.3.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.4.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.5.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.6.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.7.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.7.8.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.8.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.9.0.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.9.1.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/0.9.2.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/release-notes/index.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/docs/tutorials/index.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/hatch.toml +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/access.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/aligned_df.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/aligned_mapping.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/extensions.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/file_backing.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/index.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/raw.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/storage.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_core/xarray.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/read.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/specs/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_io/write.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_types.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/_warnings.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/abc.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/_dispatch_io.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/backed/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/backed/_compat.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/backed/_io.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/backed/_lazy_arrays.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/multi_files/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/pytorch/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/experimental/pytorch/_annloader.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/io.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/logging.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/tests/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/tests/helpers.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/types.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/typing.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/anndata/utils.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/testing/anndata/__init__.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/testing/anndata/_doctest.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/src/testing/anndata/py.typed +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/adata-comments.tsv +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/adata.csv +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/readme.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/v0.11.4/adata.h5ad +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/v0.11.4/adata.zarr.zip +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/v0.11.4/readme.md +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/v0.7.0/adata.h5ad +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/v0.7.0/adata.zarr.zip +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/v0.7.8/adata.h5ad +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/archives/v0.7.8/adata.zarr.zip +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/excel.xlsx +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/data/umi_tools.tsv.gz +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/lazy/conftest.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/lazy/test_concat.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/lazy/test_write.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_anncollection.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_annot.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_backed_dense.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_get_vector.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_gpu.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_helpers.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_inplace_subset.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_io_backwards_compat.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_io_conversion.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_io_utils.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_layers.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_obsmvarm.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_obspvarp.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_raw.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_repr.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_settings.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_structured_arrays.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_transpose.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_uns.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_utils.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_x.py +0 -0
- {anndata-0.12.2 → anndata-0.12.3}/tests/test_xarray.py +0 -0
|
@@ -11,7 +11,10 @@ env:
|
|
|
11
11
|
|
|
12
12
|
defaults:
|
|
13
13
|
run:
|
|
14
|
-
|
|
14
|
+
# Add `-l` to GitHub’s default bash options to activate mamba environments
|
|
15
|
+
# https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#exit-codes-and-error-action-preference
|
|
16
|
+
# https://github.com/mamba-org/setup-micromamba/#readme
|
|
17
|
+
shell: bash -elo pipefail {0}
|
|
15
18
|
|
|
16
19
|
jobs:
|
|
17
20
|
benchmark:
|
|
@@ -29,9 +32,10 @@ jobs:
|
|
|
29
32
|
ASV_DIR: "./benchmarks"
|
|
30
33
|
|
|
31
34
|
steps:
|
|
32
|
-
- uses: actions/checkout@
|
|
35
|
+
- uses: actions/checkout@v5
|
|
33
36
|
with:
|
|
34
37
|
fetch-depth: 0
|
|
38
|
+
# no blob filter so asv can checkout other commits
|
|
35
39
|
|
|
36
40
|
- run: git fetch origin main:main
|
|
37
41
|
if: ${{ github.ref_name != 'main' }}
|
|
@@ -42,11 +46,10 @@ jobs:
|
|
|
42
46
|
environment-name: asv
|
|
43
47
|
cache-environment: true
|
|
44
48
|
# Deps documented in https://asv.readthedocs.io/en/latest/installing.html
|
|
45
|
-
# libmambapy upper bound: https://github.com/airspeed-velocity/asv/issues/1438
|
|
46
49
|
create-args: >-
|
|
47
50
|
python=${{ matrix.python }}
|
|
48
51
|
asv
|
|
49
|
-
|
|
52
|
+
py_rattler
|
|
50
53
|
conda-build
|
|
51
54
|
|
|
52
55
|
- name: Cache datasets
|
|
@@ -24,7 +24,7 @@ env:
|
|
|
24
24
|
|
|
25
25
|
jobs:
|
|
26
26
|
check-milestone:
|
|
27
|
-
name: "Triage: Check
|
|
27
|
+
name: "Triage: Check PR title, milestone, and labels"
|
|
28
28
|
runs-on: ubuntu-latest
|
|
29
29
|
steps:
|
|
30
30
|
- name: Check if merging isn’t blocked
|
|
@@ -35,3 +35,7 @@ jobs:
|
|
|
35
35
|
uses: flying-sheep/check@v1
|
|
36
36
|
with:
|
|
37
37
|
success: ${{ github.event.pull_request.milestone != null || contains(env.LABELS, 'no milestone') }}
|
|
38
|
+
- name: Check if PR title is valid
|
|
39
|
+
uses: amannn/action-semantic-pull-request@v6
|
|
40
|
+
env: # Needs repo options: “Squash and merge” with commit message set to “PR title”
|
|
41
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -10,12 +10,7 @@ on:
|
|
|
10
10
|
env:
|
|
11
11
|
FORCE_COLOR: "1"
|
|
12
12
|
|
|
13
|
-
|
|
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
|
|
13
|
+
# Cancel the job if new commits are pushed: https://stackoverflow.com/q/66335225/247482
|
|
19
14
|
concurrency:
|
|
20
15
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
21
16
|
cancel-in-progress: true
|
|
@@ -26,11 +21,11 @@ jobs:
|
|
|
26
21
|
outputs:
|
|
27
22
|
envs: ${{ steps.get-envs.outputs.envs }}
|
|
28
23
|
steps:
|
|
29
|
-
- uses: actions/checkout@
|
|
24
|
+
- uses: actions/checkout@v5
|
|
30
25
|
with:
|
|
31
26
|
filter: blob:none
|
|
32
27
|
fetch-depth: 0
|
|
33
|
-
- uses: astral-sh/setup-uv@
|
|
28
|
+
- uses: astral-sh/setup-uv@v6
|
|
34
29
|
with:
|
|
35
30
|
enable-cache: false
|
|
36
31
|
- id: get-envs
|
|
@@ -41,6 +36,7 @@ jobs:
|
|
|
41
36
|
| { name: .key, python: .value.python, args: (.value."extra-args" // [] | join(" ")) }
|
|
42
37
|
)')
|
|
43
38
|
echo "envs=${ENVS_JSON}" | tee $GITHUB_OUTPUT
|
|
39
|
+
|
|
44
40
|
test:
|
|
45
41
|
needs: get-environments
|
|
46
42
|
runs-on: ubuntu-latest
|
|
@@ -48,10 +44,11 @@ jobs:
|
|
|
48
44
|
matrix:
|
|
49
45
|
env: ${{ fromJSON(needs.get-environments.outputs.envs) }}
|
|
50
46
|
io_mark: ["zarr_io", "not zarr_io"]
|
|
51
|
-
env: # environment
|
|
47
|
+
env: # environment variables for use in codecov’s env_vars tagging
|
|
52
48
|
ENV_NAME: ${{ matrix.env.name }}
|
|
49
|
+
IO_MARK: ${{ matrix.io_mark }}
|
|
53
50
|
steps:
|
|
54
|
-
- uses: actions/checkout@
|
|
51
|
+
- uses: actions/checkout@v5
|
|
55
52
|
with:
|
|
56
53
|
fetch-depth: 0
|
|
57
54
|
filter: blob:none
|
|
@@ -59,43 +56,56 @@ jobs:
|
|
|
59
56
|
- name: Install system dependencies
|
|
60
57
|
run: sudo apt install -y hdf5-tools
|
|
61
58
|
|
|
62
|
-
- name: Set up Python ${{ matrix.env.python }}
|
|
63
|
-
uses: actions/setup-python@v5
|
|
64
|
-
with:
|
|
65
|
-
python-version: ${{ matrix.env.python }}
|
|
66
|
-
|
|
67
59
|
- name: Install UV
|
|
68
|
-
uses: astral-sh/setup-uv@
|
|
60
|
+
uses: astral-sh/setup-uv@v6
|
|
69
61
|
with:
|
|
70
62
|
enable-cache: true
|
|
71
|
-
|
|
63
|
+
python-version: ${{ matrix.env.python }}
|
|
72
64
|
|
|
73
65
|
- name: Install dependencies
|
|
74
|
-
run:
|
|
66
|
+
run: |
|
|
67
|
+
# https://github.com/pallets/click/issues/3066
|
|
68
|
+
uv tool install --with='click!=8.3.0' hatch
|
|
69
|
+
hatch -v env create ${{ matrix.env.name }}
|
|
75
70
|
|
|
76
71
|
- name: Run tests
|
|
77
|
-
|
|
72
|
+
env:
|
|
73
|
+
COVERAGE_PROCESS_START: ${{ github.workspace }}/pyproject.toml
|
|
74
|
+
run: |
|
|
75
|
+
hatch run ${{ matrix.env.name }}:run-cov -v --color=yes -n auto --junitxml=test-data/test-results.xml -m "${{ matrix.io_mark }}" ${{ matrix.env.args }}
|
|
76
|
+
hatch run ${{ matrix.env.name }}:cov-combine
|
|
77
|
+
hatch run ${{ matrix.env.name }}:coverage xml
|
|
78
|
+
|
|
79
|
+
- name: Upload test results
|
|
80
|
+
if: ${{ !cancelled() }}
|
|
81
|
+
uses: codecov/test-results-action@v1
|
|
82
|
+
with:
|
|
83
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
84
|
+
env_vars: ENV_NAME,IO_MARK
|
|
85
|
+
fail_ci_if_error: true
|
|
86
|
+
file: test-data/test-results.xml
|
|
78
87
|
|
|
79
88
|
- name: Upload coverage data
|
|
80
89
|
uses: codecov/codecov-action@v5
|
|
81
90
|
with:
|
|
82
91
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
83
|
-
env_vars: ENV_NAME
|
|
92
|
+
env_vars: ENV_NAME,IO_MARK
|
|
84
93
|
fail_ci_if_error: true
|
|
85
94
|
files: test-data/coverage.xml
|
|
86
95
|
|
|
87
96
|
build:
|
|
88
|
-
runs-on: ubuntu-
|
|
97
|
+
runs-on: ubuntu-24.04
|
|
89
98
|
steps:
|
|
90
|
-
- uses: actions/checkout@
|
|
99
|
+
- uses: actions/checkout@v5
|
|
91
100
|
with:
|
|
92
101
|
fetch-depth: 0
|
|
93
102
|
filter: blob:none
|
|
94
103
|
|
|
95
|
-
- name: Set up Python
|
|
104
|
+
- name: Set up Python
|
|
96
105
|
uses: actions/setup-python@v5
|
|
97
106
|
with:
|
|
98
|
-
python-version: '3.
|
|
107
|
+
python-version: '3.x'
|
|
108
|
+
cache: pip
|
|
99
109
|
|
|
100
110
|
- name: Install build tools and requirements
|
|
101
111
|
run: |
|
|
@@ -110,11 +120,6 @@ jobs:
|
|
|
110
120
|
python -m build --sdist --wheel .
|
|
111
121
|
twine check dist/*
|
|
112
122
|
|
|
113
|
-
- name: Check runtime version
|
|
114
|
-
run: |
|
|
115
|
-
pip install dist/*.whl
|
|
116
|
-
python -c 'import anndata; print(anndata.__version__)'
|
|
117
|
-
|
|
118
123
|
check:
|
|
119
124
|
if: always()
|
|
120
125
|
needs:
|
|
@@ -123,6 +128,6 @@ jobs:
|
|
|
123
128
|
- build
|
|
124
129
|
runs-on: ubuntu-latest
|
|
125
130
|
steps:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
- uses: re-actors/alls-green@release/v1
|
|
132
|
+
with:
|
|
133
|
+
jobs: ${{ toJSON(needs) }}
|
|
@@ -13,10 +13,6 @@ env:
|
|
|
13
13
|
PYTEST_ADDOPTS: "-v --color=yes"
|
|
14
14
|
FORCE_COLOR: "1"
|
|
15
15
|
|
|
16
|
-
defaults:
|
|
17
|
-
run:
|
|
18
|
-
shell: bash -el {0}
|
|
19
|
-
|
|
20
16
|
# Cancel the job if new commits are pushed
|
|
21
17
|
# https://stackoverflow.com/questions/66335225/how-to-cancel-previous-runs-in-the-pr-when-you-push-new-commitsupdate-the-curre
|
|
22
18
|
concurrency:
|
|
@@ -48,7 +44,7 @@ jobs:
|
|
|
48
44
|
timeout-minutes: 30
|
|
49
45
|
|
|
50
46
|
steps:
|
|
51
|
-
- uses: actions/checkout@v4
|
|
47
|
+
- uses: actions/checkout@v4 # TODO: upgrade once cirun image supports node 24
|
|
52
48
|
with:
|
|
53
49
|
fetch-depth: 0
|
|
54
50
|
filter: blob:none
|
|
@@ -66,28 +62,29 @@ jobs:
|
|
|
66
62
|
max_version=$(echo "$classifiers" | sort -V | tail -1)
|
|
67
63
|
echo "max_python_version=$max_version" >> $GITHUB_ENV
|
|
68
64
|
|
|
69
|
-
- name: Install Python
|
|
70
|
-
uses: actions/setup-python@v5
|
|
71
|
-
with:
|
|
72
|
-
# https://github.com/cupy/cupy/issues/8651 cupy does not support python3.13 yet
|
|
73
|
-
python-version: "3.12"
|
|
74
|
-
|
|
75
65
|
- name: Install UV
|
|
76
|
-
uses: astral-sh/setup-uv@
|
|
66
|
+
uses: astral-sh/setup-uv@v6
|
|
77
67
|
with:
|
|
78
68
|
enable-cache: true
|
|
79
|
-
|
|
69
|
+
python-version: ${{ env.max_python_version }}
|
|
80
70
|
|
|
81
71
|
- name: Install AnnData
|
|
82
|
-
run:
|
|
72
|
+
run: |
|
|
73
|
+
uv venv
|
|
74
|
+
uv pip install -e ".[dev,test,cu12]" -c ci/constraints.txt
|
|
83
75
|
|
|
84
76
|
- name: Env list
|
|
85
|
-
run: pip list
|
|
77
|
+
run: uv pip list
|
|
86
78
|
|
|
87
79
|
- name: Run test
|
|
88
|
-
|
|
80
|
+
env:
|
|
81
|
+
COVERAGE_PROCESS_START: ${{ github.workspace }}/pyproject.toml
|
|
82
|
+
run: |
|
|
83
|
+
uv run coverage run -m pytest -m gpu -n auto
|
|
84
|
+
uv run coverage combine
|
|
85
|
+
uv run coverage xml
|
|
89
86
|
|
|
90
|
-
- uses: codecov/codecov-action@
|
|
87
|
+
- uses: codecov/codecov-action@v5
|
|
91
88
|
with:
|
|
92
89
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
93
90
|
fail_ci_if_error: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: anndata
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.3
|
|
4
4
|
Summary: Annotated data.
|
|
5
5
|
Project-URL: Documentation, https://anndata.readthedocs.io/
|
|
6
6
|
Project-URL: Source, https://github.com/scverse/anndata
|
|
@@ -38,15 +38,14 @@ Requires-Dist: cupy-cuda11x; extra == 'cu11'
|
|
|
38
38
|
Provides-Extra: cu12
|
|
39
39
|
Requires-Dist: cupy-cuda12x; extra == 'cu12'
|
|
40
40
|
Provides-Extra: dask
|
|
41
|
-
Requires-Dist: dask[array]!=2024.8.*,!=2024.9
|
|
41
|
+
Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,!=2025.2.*,!=2025.3.*,!=2025.4.*,!=2025.5.*,!=2025.6.*,!=2025.7.*,!=2025.8.*,>=2023.5.1; extra == 'dask'
|
|
42
42
|
Provides-Extra: dev
|
|
43
|
-
Requires-Dist: hatch-vcs; extra == 'dev'
|
|
44
43
|
Requires-Dist: towncrier>=24.8.0; extra == 'dev'
|
|
45
44
|
Provides-Extra: dev-doc
|
|
46
45
|
Requires-Dist: towncrier>=24.8.0; extra == 'dev-doc'
|
|
47
46
|
Provides-Extra: doc
|
|
48
47
|
Requires-Dist: awkward>=2.3; extra == 'doc'
|
|
49
|
-
Requires-Dist: dask[array]!=2024.8.*,!=2024.9
|
|
48
|
+
Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,!=2025.2.*,!=2025.3.*,!=2025.4.*,!=2025.5.*,!=2025.6.*,!=2025.7.*,!=2025.8.*,>=2023.5.1; extra == 'doc'
|
|
50
49
|
Requires-Dist: ipython; extra == 'doc'
|
|
51
50
|
Requires-Dist: myst-nb; extra == 'doc'
|
|
52
51
|
Requires-Dist: myst-parser; extra == 'doc'
|
|
@@ -64,14 +63,14 @@ Provides-Extra: gpu
|
|
|
64
63
|
Requires-Dist: cupy; extra == 'gpu'
|
|
65
64
|
Provides-Extra: lazy
|
|
66
65
|
Requires-Dist: aiohttp; extra == 'lazy'
|
|
67
|
-
Requires-Dist: dask[array]!=2024.8.*,!=2024.9
|
|
66
|
+
Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,!=2025.2.*,!=2025.3.*,!=2025.4.*,!=2025.5.*,!=2025.6.*,!=2025.7.*,!=2025.8.*,>=2023.5.1; extra == 'lazy'
|
|
68
67
|
Requires-Dist: requests; extra == 'lazy'
|
|
69
68
|
Requires-Dist: xarray>=2025.06.1; extra == 'lazy'
|
|
70
69
|
Provides-Extra: test
|
|
71
70
|
Requires-Dist: aiohttp; extra == 'test'
|
|
72
71
|
Requires-Dist: awkward>=2.3.2; extra == 'test'
|
|
73
72
|
Requires-Dist: boltons; extra == 'test'
|
|
74
|
-
Requires-Dist: dask[array]!=2024.8.*,!=2024.9
|
|
73
|
+
Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,!=2025.2.*,!=2025.3.*,!=2025.4.*,!=2025.5.*,!=2025.6.*,!=2025.7.*,!=2025.8.*,>=2023.5.1; extra == 'test'
|
|
75
74
|
Requires-Dist: dask[distributed]; extra == 'test'
|
|
76
75
|
Requires-Dist: filelock; extra == 'test'
|
|
77
76
|
Requires-Dist: httpx<1.0; extra == 'test'
|
|
@@ -93,7 +92,7 @@ Requires-Dist: xarray>=2025.06.1; extra == 'test'
|
|
|
93
92
|
Provides-Extra: test-min
|
|
94
93
|
Requires-Dist: awkward>=2.3.2; extra == 'test-min'
|
|
95
94
|
Requires-Dist: boltons; extra == 'test-min'
|
|
96
|
-
Requires-Dist: dask[array]!=2024.8.*,!=2024.9
|
|
95
|
+
Requires-Dist: dask[array]!=2024.8.*,!=2024.9.*,!=2025.2.*,!=2025.3.*,!=2025.4.*,!=2025.5.*,!=2025.6.*,!=2025.7.*,!=2025.8.*,>=2023.5.1; extra == 'test-min'
|
|
97
96
|
Requires-Dist: dask[distributed]; extra == 'test-min'
|
|
98
97
|
Requires-Dist: filelock; extra == 'test-min'
|
|
99
98
|
Requires-Dist: httpx<1.0; extra == 'test-min'
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
// If missing or the empty string, the tool will be automatically
|
|
37
37
|
// determined by looking for tools on the PATH environment
|
|
38
38
|
// variable.
|
|
39
|
-
"environment_type": "
|
|
39
|
+
"environment_type": "rattler",
|
|
40
40
|
// timeout in seconds for installing any dependencies in environment
|
|
41
41
|
// defaults to 10 min
|
|
42
42
|
//"install_timeout": 600,
|
|
@@ -13,18 +13,16 @@ class GarbargeCollectionSuite:
|
|
|
13
13
|
# custom because `memory_profiler` is a line-by-line profiler (also: https://github.com/pythonprofilers/memory_profiler/issues/402)
|
|
14
14
|
def track_peakmem_garbage_collection(self, *_):
|
|
15
15
|
def display_top(snapshot, key_type="lineno"):
|
|
16
|
-
snapshot = snapshot.filter_traces(
|
|
17
|
-
(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
)
|
|
27
|
-
)
|
|
16
|
+
snapshot = snapshot.filter_traces((
|
|
17
|
+
tracemalloc.Filter(
|
|
18
|
+
inclusive=False,
|
|
19
|
+
filename_pattern="<frozen importlib._bootstrap>",
|
|
20
|
+
),
|
|
21
|
+
tracemalloc.Filter(
|
|
22
|
+
inclusive=False,
|
|
23
|
+
filename_pattern="<unknown>",
|
|
24
|
+
),
|
|
25
|
+
))
|
|
28
26
|
top_stats = snapshot.statistics(key_type)
|
|
29
27
|
total = sum(stat.size for stat in top_stats)
|
|
30
28
|
return total
|
|
@@ -171,9 +171,11 @@ class H5ADWriteSuite:
|
|
|
171
171
|
self.adata.write_h5ad(self.writepth, compression="gzip")
|
|
172
172
|
|
|
173
173
|
def track_peakmem_write_compressed(self, *_):
|
|
174
|
-
return get_peak_mem(
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
return get_peak_mem((
|
|
175
|
+
sedate(self.adata.write_h5ad),
|
|
176
|
+
(self.writepth,),
|
|
177
|
+
{"compression": "gzip"},
|
|
178
|
+
))
|
|
177
179
|
|
|
178
180
|
|
|
179
181
|
class H5ADBackedWriteSuite(H5ADWriteSuite):
|
|
@@ -21,18 +21,16 @@ def make_alternating_mask(n):
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class SparseCSRContiguousSlice:
|
|
24
|
-
_slices = MappingProxyType(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
)
|
|
24
|
+
_slices = MappingProxyType({
|
|
25
|
+
"0:1000": slice(0, 1000),
|
|
26
|
+
"0:9000": slice(0, 9000),
|
|
27
|
+
":9000:-1": slice(None, 9000, -1),
|
|
28
|
+
"::-2": slice(None, None, 2),
|
|
29
|
+
"array": np.array([0, 5000, 9999]),
|
|
30
|
+
"arange": np.arange(0, 1000),
|
|
31
|
+
"first": 0,
|
|
32
|
+
"alternating": make_alternating_mask(10),
|
|
33
|
+
})
|
|
36
34
|
params = (
|
|
37
35
|
[
|
|
38
36
|
(10_000, 10_000),
|
|
@@ -133,7 +133,8 @@ intersphinx_mapping = dict(
|
|
|
133
133
|
numpy=("https://numpy.org/doc/stable", None),
|
|
134
134
|
obstore=("https://developmentseed.org/obstore/latest/", None),
|
|
135
135
|
pandas=("https://pandas.pydata.org/pandas-docs/stable", None),
|
|
136
|
-
|
|
136
|
+
# TODO: switch to `/3` once docs are built with Python 3.14
|
|
137
|
+
python=("https://docs.python.org/3.13", None),
|
|
137
138
|
scipy=("https://docs.scipy.org/doc/scipy", None),
|
|
138
139
|
sklearn=("https://scikit-learn.org/stable", None),
|
|
139
140
|
xarray=("https://docs.xarray.dev/en/stable", None),
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
(v0.12.3)=
|
|
2
|
+
### 0.12.3 {small}`2025-10-16`
|
|
3
|
+
|
|
4
|
+
#### Miscellaneous changes
|
|
5
|
+
|
|
6
|
+
- Deprecate `AnnData.*_keys()` methods. {user}`flying-sheep` ({pr}`2102`)
|
|
7
|
+
|
|
8
|
+
#### Bug fixes
|
|
9
|
+
|
|
10
|
+
- Deprecate `__version__` and use standard {func}`~importlib.metadata.version` API {user}`flying-sheep` ({pr}`1318`)
|
|
11
|
+
- Allow writing of views of {class}`dask.array.Array` {user}`ilan-gold` ({pr}`2084`)
|
|
12
|
+
- Enable writing of views of {class}`~anndata.AnnData` in backed mode {user}`ilan-gold` ({pr}`2092`)
|
|
13
|
+
- Reallow writing of keys in `h5ad` files with forward slashes instead of erroring. Now a warning will be raised that the behavior will be disallowed in the future. To enable the new behavior, use {attr}`anndata.settings.disallow_forward_slash_in_h5ad`. {user}`ilan-gold` ({pr}`2097`)
|
|
14
|
+
- Respect off-axis merge options in {func}`anndata.experimental.concat_on_disk` {user}`ilan-gold` ({pr}`2122`)
|
|
@@ -94,11 +94,6 @@ The default `zarr-python` v3 codec for the v3 format is no longer `blosc` but `z
|
|
|
94
94
|
While `zstd` is more widespread, you may find its performance to not meet your old expectations.
|
|
95
95
|
Therefore, we recommend passing in the {class}`zarr.codecs.BloscCodec` to `compressor` on {func}`~anndata.AnnData.write_zarr` if you wish to return to the old behavior.
|
|
96
96
|
|
|
97
|
-
There is currently a bug with `numcodecs` that prevents data written from other non-numcodecs `zstd` implementations from being read in by the default zarr pipeline (to which the above rust pipeline falls back if it cannot handle a datatype or indexing scheme, like `vlen-string`): {issue}`zarr-developers/numcodecs#424`.
|
|
98
|
-
Thus is may be advisable to use `BloscCodec` with `zarr` v3 file format data if you wish to use the rust-accelerated pipeline until this issue is resolved.
|
|
99
|
-
|
|
100
|
-
The same issue with `zstd` applies to data that may eventually be written by the GPU `zstd` implementation (see below).
|
|
101
|
-
|
|
102
97
|
## Dask
|
|
103
98
|
|
|
104
99
|
Zarr v3 should be compatible with dask, although the default behavior is to use zarr's chunking for dask's own. With sharding, this behavior may be undesirable as shards can often contain many small chunks, thereby slowing down i/o as dask will need to index into the zarr store for every chunk. Therefore it may be better to customize this behavior by passing `chunks=my_zarr_array.shards` as an argument to {func}`dask.array.from_zarr` or similar.
|
|
@@ -57,8 +57,6 @@ Home-page = "https://github.com/scverse/anndata"
|
|
|
57
57
|
|
|
58
58
|
[project.optional-dependencies]
|
|
59
59
|
dev = [
|
|
60
|
-
# runtime dev version generation
|
|
61
|
-
"hatch-vcs",
|
|
62
60
|
"anndata[dev-doc]",
|
|
63
61
|
]
|
|
64
62
|
doc = [
|
|
@@ -82,7 +80,7 @@ dev-doc = [ "towncrier>=24.8.0" ] # release notes tool
|
|
|
82
80
|
test-min = [
|
|
83
81
|
"loompy>=3.0.5",
|
|
84
82
|
"pytest>=8.2,<8.3.4",
|
|
85
|
-
"pytest-cov",
|
|
83
|
+
"pytest-cov", # only for VS Code
|
|
86
84
|
"pytest-randomly",
|
|
87
85
|
"pytest-memray",
|
|
88
86
|
"pytest-mock",
|
|
@@ -109,7 +107,9 @@ cu11 = [ "cupy-cuda11x" ]
|
|
|
109
107
|
lazy = [ "xarray>=2025.06.1", "aiohttp", "requests", "anndata[dask]" ]
|
|
110
108
|
# https://github.com/dask/dask/issues/11290
|
|
111
109
|
# https://github.com/dask/dask/issues/11752
|
|
112
|
-
dask = [
|
|
110
|
+
dask = [
|
|
111
|
+
"dask[array]>=2023.5.1,!=2024.8.*,!=2024.9.*,!=2025.2.*,!=2025.3.*,!=2025.4.*,!=2025.5.*,!=2025.6.*,!=2025.7.*,!=2025.8.*",
|
|
112
|
+
]
|
|
113
113
|
|
|
114
114
|
[tool.hatch.version]
|
|
115
115
|
source = "vcs"
|
|
@@ -118,17 +118,15 @@ raw-options.version_scheme = "release-branch-semver"
|
|
|
118
118
|
packages = [ "src/anndata", "src/testing" ]
|
|
119
119
|
|
|
120
120
|
[tool.coverage.run]
|
|
121
|
-
data_file = "test-data/coverage"
|
|
121
|
+
data_file = "test-data/raw-coverage"
|
|
122
122
|
source_pkgs = [ "anndata" ]
|
|
123
123
|
omit = [ "src/anndata/_version.py", "**/test_*.py" ]
|
|
124
124
|
concurrency = [ "multiprocessing" ]
|
|
125
|
-
parallel =
|
|
126
|
-
|
|
125
|
+
parallel = true
|
|
127
126
|
[tool.coverage.xml]
|
|
128
127
|
output = "test-data/coverage.xml"
|
|
129
128
|
[tool.coverage.paths]
|
|
130
129
|
source = [ "./src", "**/site-packages" ]
|
|
131
|
-
|
|
132
130
|
[tool.coverage.report]
|
|
133
131
|
exclude_also = [
|
|
134
132
|
"if TYPE_CHECKING:",
|
|
@@ -146,7 +144,12 @@ addopts = [
|
|
|
146
144
|
filterwarnings = [
|
|
147
145
|
"ignore::anndata._warnings.OldFormatWarning",
|
|
148
146
|
"ignore::anndata._warnings.ExperimentalFeatureWarning",
|
|
149
|
-
"ignore:.*first_column_names:FutureWarning:scanpy",
|
|
147
|
+
"ignore:.*first_column_names:FutureWarning:scanpy", # scanpy 1.10.x
|
|
148
|
+
"ignore:Importing read_.* from `anndata` is deprecated:FutureWarning:scanpy",
|
|
149
|
+
"ignore:`__version__` is deprecated:FutureWarning:scanpy",
|
|
150
|
+
# https://github.com/matplotlib/matplotlib/pull/30589
|
|
151
|
+
"ignore:.*'(oneOf|parseString|resetCache|enablePackrat)'.*'(one_of|parse_string|reset_cache|enable_packrat)':DeprecationWarning:matplotlib",
|
|
152
|
+
|
|
150
153
|
]
|
|
151
154
|
# When `--strict-warnings` is used, all warnings are treated as errors, except those:
|
|
152
155
|
filterwarnings_when_strict = [
|
|
@@ -177,6 +180,7 @@ markers = [ "gpu: mark test to run on GPU", "zarr_io: mark tests that involve za
|
|
|
177
180
|
src = [ "src" ]
|
|
178
181
|
|
|
179
182
|
[tool.ruff.format]
|
|
183
|
+
preview = true
|
|
180
184
|
docstring-code-format = true
|
|
181
185
|
|
|
182
186
|
[tool.ruff.lint]
|
|
@@ -250,10 +254,13 @@ single_file = false
|
|
|
250
254
|
package_dir = "src"
|
|
251
255
|
issue_format = "{{pr}}`{issue}`"
|
|
252
256
|
title_format = "(v{version})=\n### {version} {{small}}`{project_date}`"
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
fragment.
|
|
257
|
-
fragment.
|
|
258
|
-
fragment.
|
|
259
|
-
fragment.
|
|
257
|
+
# Valid fragments should be a subset of conventional commit types (except for `breaking`):
|
|
258
|
+
# https://github.com/commitizen/conventional-commit-types/blob/master/index.json
|
|
259
|
+
# style, refactor, test, build, ci: should not go into changelog
|
|
260
|
+
fragment.feat.name = "Features"
|
|
261
|
+
fragment.fix.name = "Bug fixes"
|
|
262
|
+
fragment.docs.name = "Documentation"
|
|
263
|
+
fragment.perf.name = "Performance"
|
|
264
|
+
fragment.chore.name = "Miscellaneous changes"
|
|
265
|
+
fragment.revert.name = "Revert"
|
|
266
|
+
fragment.breaking.name = "Breaking changes" # add `!` to commit type (e.g. “feature!:”)
|
|
@@ -12,7 +12,6 @@ from ._core.extensions import register_anndata_namespace
|
|
|
12
12
|
from ._core.merge import concat
|
|
13
13
|
from ._core.raw import Raw
|
|
14
14
|
from ._settings import settings
|
|
15
|
-
from ._version import __version__
|
|
16
15
|
from ._warnings import (
|
|
17
16
|
ExperimentalFeatureWarning,
|
|
18
17
|
ImplicitModificationWarning,
|
|
@@ -28,22 +27,6 @@ from . import abc, experimental, typing, io, types # isort: skip
|
|
|
28
27
|
# We use these in tests by attribute access
|
|
29
28
|
from . import logging # noqa: F401 # isort: skip
|
|
30
29
|
|
|
31
|
-
_DEPRECATED_IO = (
|
|
32
|
-
"read_loom",
|
|
33
|
-
"read_hdf",
|
|
34
|
-
"read_excel",
|
|
35
|
-
"read_umi_tools",
|
|
36
|
-
"read_csv",
|
|
37
|
-
"read_text",
|
|
38
|
-
"read_mtx",
|
|
39
|
-
)
|
|
40
|
-
_DEPRECATED = {method: f"io.{method}" for method in _DEPRECATED_IO}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def __getattr__(attr_name: str) -> Any:
|
|
44
|
-
return module_get_attr_redirect(attr_name, deprecated_mapping=_DEPRECATED)
|
|
45
|
-
|
|
46
|
-
|
|
47
30
|
__all__ = [
|
|
48
31
|
"AnnData",
|
|
49
32
|
"ExperimentalFeatureWarning",
|
|
@@ -51,7 +34,6 @@ __all__ = [
|
|
|
51
34
|
"OldFormatWarning",
|
|
52
35
|
"Raw",
|
|
53
36
|
"WriteWarning",
|
|
54
|
-
"__version__",
|
|
55
37
|
"abc",
|
|
56
38
|
"concat",
|
|
57
39
|
"experimental",
|
|
@@ -63,3 +45,26 @@ __all__ = [
|
|
|
63
45
|
"types",
|
|
64
46
|
"typing",
|
|
65
47
|
]
|
|
48
|
+
|
|
49
|
+
_DEPRECATED_IO = (
|
|
50
|
+
"read_loom",
|
|
51
|
+
"read_hdf",
|
|
52
|
+
"read_excel",
|
|
53
|
+
"read_umi_tools",
|
|
54
|
+
"read_csv",
|
|
55
|
+
"read_text",
|
|
56
|
+
"read_mtx",
|
|
57
|
+
)
|
|
58
|
+
_DEPRECATED = {method: f"io.{method}" for method in _DEPRECATED_IO}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def __getattr__(attr_name: str) -> Any:
|
|
62
|
+
if attr_name == "__version__":
|
|
63
|
+
import warnings
|
|
64
|
+
from importlib.metadata import version
|
|
65
|
+
|
|
66
|
+
msg = "`__version__` is deprecated, use `importlib.metadata.version('anndata')` instead."
|
|
67
|
+
warnings.warn(msg, FutureWarning, stacklevel=2)
|
|
68
|
+
return version("anndata")
|
|
69
|
+
|
|
70
|
+
return module_get_attr_redirect(attr_name, deprecated_mapping=_DEPRECATED)
|