Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport PR #1185 on branch 0.10.x (Backwards compat for SparseDataset usage) #1190

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 27 additions & 0 deletions anndata/_core/sparse_dataset.py
Expand Up @@ -508,3 +508,30 @@ def sparse_dataset(group: ZarrGroup | H5Group) -> CSRDataset | CSCDataset:
@_subset.register(BaseCompressedSparseDataset)
def subset_sparsedataset(d, subset_idx):
return d[subset_idx]


## Backwards compat

_sparsedataset_depr_msg = """\
SparseDataset is deprecated and will be removed in late 2024. It has been replaced by the public classes CSRDataset and CSCDataset.

For instance checks, use `isinstance(X, (anndata.experimental.CSRDataset, anndata.experimental.CSCDataset))` instead.

For creation, use `anndata.experimental.sparse_dataset(X)` instead.
"""


class SparseDataset(ABC):
"""DEPRECATED.

Use CSRDataset, CSCDataset, and sparse_dataset from anndata.experimental instead.
"""

def __new__(cls, group):
warnings.warn(FutureWarning(_sparsedataset_depr_msg), stacklevel=2)
return sparse_dataset(group)

@classmethod
def __subclasshook__(cls, C):
warnings.warn(FutureWarning(_sparsedataset_depr_msg), stacklevel=3)
return issubclass(C, (CSRDataset, CSCDataset))
17 changes: 17 additions & 0 deletions anndata/tests/test_deprecations.py
Expand Up @@ -10,10 +10,12 @@
import h5py
import numpy as np
import pytest
import zarr
from scipy import sparse

import anndata as ad
from anndata import AnnData
from anndata.experimental import CSRDataset, write_elem
from anndata.tests.helpers import assert_equal


Expand Down Expand Up @@ -144,3 +146,18 @@ def test_deprecated_sparse_dataset_values():

with pytest.warns(FutureWarning, match="Please use .format"):
mtx_backed.format_str


def test_deprecated_sparse_dataset():
from anndata._core.sparse_dataset import SparseDataset

mem_X = sparse.random(50, 50, format="csr")
g = zarr.group()
write_elem(g, "X", mem_X)
with pytest.warns(FutureWarning, match="SparseDataset is deprecated"):
X = SparseDataset(g["X"])

assert isinstance(X, CSRDataset)

with pytest.warns(FutureWarning, match="SparseDataset is deprecated"):
assert isinstance(X, SparseDataset)
4 changes: 4 additions & 0 deletions docs/release-notes/0.10.2.md
Expand Up @@ -3,6 +3,10 @@
```{rubric} Bugfix
```

* Added compatibility layer for packages relying on `anndata._core.sparse_dataset.SparseDataset`.
Note that this API is *deprecated* and new code should use {class}`~anndata.experimental.CSRDataset`, {class}`~anndata.experimental.CSCDataset`, and {func}`~anndata.experimental.sparse_dataset` instead.
{pr}`1185` {user}`ivirshup`

```{rubric} Documentation
```

Expand Down