1919import anndata as ad
2020import h5py
2121from 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
2522from anndata .compat import _read_attr
23+ from anndata .experimental import read_dispatched
2624from anndata .io import read_elem , write_elem
2725from anndata .io import read_zarr as anndata_read_zarr
2826from 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