Skip to content

Commit 6c1353f

Browse files
committed
use read_dispatched instead of custom logic and private functions
1 parent da9e2d3 commit 6c1353f

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

src/mudata/_core/io.py

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@
1919
import anndata as ad
2020
import h5py
2121
from anndata import AnnData
22-
from anndata._io.h5ad import _read_raw
23-
from anndata._io.h5ad import read_dataframe as read_h5ad_dataframe
24-
from anndata._io.zarr import read_dataframe as read_zarr_dataframe
2522
from anndata.compat import _read_attr
23+
from anndata.experimental import read_dispatched
2624
from anndata.io import read_elem, write_elem
2725
from anndata.io import read_zarr as anndata_read_zarr
2826
from anndata.io import write_zarr as anndata_write_zarr
@@ -437,8 +435,6 @@ def read_h5mu(
437435
)
438436
d = {}
439437
for k in f.keys():
440-
if k in ["obs", "var"]:
441-
d[k] = read_h5ad_dataframe(f[k])
442438
if k == "mod":
443439
mods = ModDict()
444440
gmods = f[k]
@@ -485,8 +481,6 @@ def read_zarr(store: str | PathLike | MutableMapping | zarr.Group | zarr.abc.sto
485481
return ad.read_zarr(store)
486482

487483
for k in f.keys():
488-
if k in {"obs", "var"}:
489-
d[k] = read_zarr_dataframe(f[k])
490484
if k == "mod":
491485
mods = {}
492486
gmods = f[k]
@@ -509,25 +503,18 @@ def read_zarr(store: str | PathLike | MutableMapping | zarr.Group | zarr.abc.sto
509503
return mu
510504

511505

512-
def _read_h5mu_mod(g: h5py.Group, manager: MuDataFileManager = None, backed: bool = False) -> dict:
513-
d = {}
506+
def _read_h5mu_mod(g: h5py.Group, manager: MuDataFileManager = None, backed: bool = False) -> AnnData:
507+
modname = Path(g.name).name
508+
Xpath = g.name + "/X"
509+
rawXpath = g.name + "/raw/X"
514510

515-
for k in g.keys():
516-
if k in ("obs", "var"):
517-
d[k] = read_h5ad_dataframe(g[k])
518-
elif k == "X":
519-
X = g["X"]
520-
if not backed:
521-
d["X"] = read_elem(X)
522-
elif k != "raw":
523-
d[k] = read_elem(g[k])
524-
ad = AnnData(**d)
525-
if manager is not None:
526-
ad.file = AnnDataFileManager(ad, Path(g.name).name, manager)
511+
def callback(func, elem_name, elem, iospec):
512+
if not backed or elem_name not in (Xpath, rawXpath):
513+
return func(elem)
527514

528-
raw = _read_raw(g, attrs=("var", "varm") if backed else ("var", "varm", "X"))
529-
if raw:
530-
ad._raw = ad.Raw(ad, **raw)
515+
ad = read_dispatched(g, callback=callback)
516+
if manager is not None:
517+
ad.file = AnnDataFileManager(ad, modname, manager)
531518
return ad
532519

533520

0 commit comments

Comments
 (0)