Skip to content

Commit 37b4923

Browse files
committed
support anndata 0.13 layers unification
closes #148, closes #149, closes #150 (cherry picked from commit 19baeff)
1 parent fca9309 commit 37b4923

4 files changed

Lines changed: 16 additions & 8 deletions

File tree

src/mudata/_core/file_backing.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def is_open(self) -> bool:
6262

6363
@AnnDataFileManager.filename.setter
6464
def filename(self, filename: PathLike | None):
65-
self._filename = None if filename is None else filename
65+
self._filename = filename
6666

6767

6868
class AnnDataFileManager(ad._core.file_backing.AnnDataFileManager):
@@ -97,9 +97,13 @@ def close(self):
9797
self._parent._close()
9898

9999
def _to_memory_mode(self):
100-
self._adata._X = self._adata.X[()]
100+
X = self._adata.X[()]
101101
self.close()
102102
self.filename = None
103+
if hasattr(self._adata, "_X"): # anndata < 0.13
104+
self._adata._X = X
105+
else:
106+
self._adata.X = X # anndata >= 0.13
103107

104108
@property
105109
def is_open(self) -> bool:

src/mudata/_core/io.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def _write_h5mu(file: h5py.File, mdata: MuData, write_data=True, **kwargs):
9595
write_elem(group, "varm", dict(adata.varm), dataset_kwargs=kwargs)
9696
write_elem(group, "obsp", dict(adata.obsp), dataset_kwargs=kwargs)
9797
write_elem(group, "varp", dict(adata.varp), dataset_kwargs=kwargs)
98-
write_elem(group, "layers", dict(adata.layers), dataset_kwargs=kwargs)
98+
write_elem(group, "layers", {k: v for k, v in adata.layers.items() if k is not None}, dataset_kwargs=kwargs)
9999
write_elem(group, "uns", dict(adata.uns), dataset_kwargs=kwargs)
100100

101101
attrs = group.attrs
@@ -219,7 +219,7 @@ def write_zarr(
219219
write_elem(group, "varm", dict(adata.varm), dataset_kwargs=kwargs)
220220
write_elem(group, "obsp", dict(adata.obsp), dataset_kwargs=kwargs)
221221
write_elem(group, "varp", dict(adata.varp), dataset_kwargs=kwargs)
222-
write_elem(group, "layers", dict(adata.layers), dataset_kwargs=kwargs)
222+
write_elem(group, "layers", {k: v for k, v in adata.layers.items() if k is not None}, dataset_kwargs=kwargs)
223223
write_elem(group, "uns", dict(adata.uns), dataset_kwargs=kwargs)
224224

225225
attrs = group.attrs
@@ -321,7 +321,7 @@ def write_h5ad(filename: str | PathLike, mod: str, data: MuData | AnnData):
321321
write_elem(fmd, "varm", dict(adata.varm))
322322
write_elem(fmd, "obsp", dict(adata.obsp))
323323
write_elem(fmd, "varp", dict(adata.varp))
324-
write_elem(fmd, "layers", dict(adata.layers))
324+
write_elem(fmd, "layers", {k: v for k, v in adata.layers.items() if k is not None})
325325
write_elem(fmd, "uns", dict(adata.uns))
326326

327327
attrs = fmd.attrs

src/mudata/_core/mudata.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
from .compat import AlignedView, AxisArrays, PairwiseArrays
2626
from .config import OPTIONS
27-
from .file_backing import MuDataFileManager
27+
from .file_backing import AnnDataFileManager, MuDataFileManager
2828
from .repr import MUDATA_CSS, block_matrix, details_block_table
2929
from .utils import (
3030
MetadataColumn,
@@ -1214,8 +1214,10 @@ def filename(self, filename: str | PathLike | None):
12141214
elif filename is not None:
12151215
self.write(filename)
12161216
self.file.open(filename, "r+")
1217-
for ad in self._mod.values():
1218-
ad._X = None
1217+
for modname, mod in self._mod.items():
1218+
mod.X = None
1219+
if not isinstance(mod.file, AnnDataFileManager):
1220+
mod.file = AnnDataFileManager(mod, modname, self.file)
12191221

12201222
@property
12211223
def obs(self) -> pd.DataFrame:

tests/test_io.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ def test_set_filename(mdata: md.MuData, filepath_h5mu: str | Path):
5555
mdata.filename = filepath_h5mu
5656
assert mdata.isbacked
5757
assert mdata.filename == filepath_h5mu
58+
for mod in mdata.mod.values():
59+
assert mod.isbacked
5860

5961

6062
def test_write_read_zarr_adata(mdata: md.MuData, filepath_zarr: str | Path):

0 commit comments

Comments
 (0)