From 931e3a8e3f01185227fed623ffb87d4b0e7e1dd7 Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Thu, 6 Mar 2025 15:55:38 +0100 Subject: [PATCH 1/3] actually make CSRDataset and CSCDataset usable --- src/anndata/_core/sparse_dataset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/anndata/_core/sparse_dataset.py b/src/anndata/_core/sparse_dataset.py index 0db206de8..ddea223cf 100644 --- a/src/anndata/_core/sparse_dataset.py +++ b/src/anndata/_core/sparse_dataset.py @@ -639,6 +639,10 @@ class _CSCDataset(BaseCompressedSparseDataset, abc.CSCDataset): """Internal concrete version of :class:`anndata.abc.CSRDataset`.""" +abc.CSRDataset.register(_CSRDataset) +abc.CSCDataset.register(_CSCDataset) + + def sparse_dataset(group: GroupStorageType) -> abc.CSRDataset | abc.CSCDataset: """Generates a backed mode-compatible sparse dataset class. From 748d1c752b9ef846a28ec0c0dbd1af708de20cd9 Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Thu, 6 Mar 2025 16:17:02 +0100 Subject: [PATCH 2/3] test --- src/anndata/compat/__init__.py | 2 +- tests/test_backed_sparse.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/anndata/compat/__init__.py b/src/anndata/compat/__init__.py index b3d313f17..994824042 100644 --- a/src/anndata/compat/__init__.py +++ b/src/anndata/compat/__init__.py @@ -12,7 +12,7 @@ import h5py import numpy as np import pandas as pd -import scipy +import scipy.sparse from packaging.version import Version if TYPE_CHECKING: diff --git a/tests/test_backed_sparse.py b/tests/test_backed_sparse.py index 5ba807566..ffeca1b39 100644 --- a/tests/test_backed_sparse.py +++ b/tests/test_backed_sparse.py @@ -14,6 +14,7 @@ from anndata._core.anndata import AnnData from anndata._core.sparse_dataset import sparse_dataset from anndata._io.specs.registry import read_elem_as_dask +from anndata.abc import CSCDataset, CSRDataset from anndata.compat import CSArray, CSMatrix, DaskArray from anndata.experimental import read_dispatched from anndata.tests.helpers import AccessTrackingStore, assert_equal, subset_func @@ -27,7 +28,6 @@ from numpy.typing import ArrayLike, NDArray from pytest_mock import MockerFixture - from anndata.abc import CSCDataset, CSRDataset from anndata.compat import ZarrGroup Idx = slice | int | NDArray[np.integer] | NDArray[np.bool_] @@ -319,7 +319,7 @@ def test_append_array_cache_bust(tmp_path: Path, diskfmt: Literal["h5ad", "zarr" ) def test_read_array( tmp_path: Path, - sparse_format: Callable[[ArrayLike], CSMatrix], + sparse_format: type[CSMatrix], diskfmt: Literal["h5ad", "zarr"], subset_func, subset_func2, @@ -334,6 +334,9 @@ def test_read_array( f = h5py.File(path, "a") ad.io.write_elem(f, "mtx", a) diskmtx = sparse_dataset(f["mtx"]) + assert isinstance( + diskmtx, CSCDataset if sparse_format.format == "csc" else CSRDataset + ) ad.settings.use_sparse_array_on_read = True assert issubclass(type(diskmtx[obs_idx, var_idx]), CSArray) ad.settings.use_sparse_array_on_read = False From 50122b0b4c1bce8241bb8e886ac8577ec5663909 Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Thu, 6 Mar 2025 16:22:15 +0100 Subject: [PATCH 3/3] fix tests --- tests/test_backed_sparse.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/test_backed_sparse.py b/tests/test_backed_sparse.py index ffeca1b39..ad27da6fa 100644 --- a/tests/test_backed_sparse.py +++ b/tests/test_backed_sparse.py @@ -334,9 +334,7 @@ def test_read_array( f = h5py.File(path, "a") ad.io.write_elem(f, "mtx", a) diskmtx = sparse_dataset(f["mtx"]) - assert isinstance( - diskmtx, CSCDataset if sparse_format.format == "csc" else CSRDataset - ) + assert isinstance(diskmtx, CSCDataset if a.format == "csc" else CSRDataset) ad.settings.use_sparse_array_on_read = True assert issubclass(type(diskmtx[obs_idx, var_idx]), CSArray) ad.settings.use_sparse_array_on_read = False