Source code for dolomite_ranges.read_atomic_vector_list
import os
from typing import Optional
import dolomite_base as dl
import h5py
from compressed_lists import Partitioning, splitAsCompressedList
from dolomite_base.read_object import read_object_registry
read_object_registry["atomic_vector_list"] = "dolomite_ranges.read_atomic_vector_list"
[docs]
def read_atomic_vector_list(path: str, metadata: Optional[dict], **kwargs):
"""Load a list of atomic vectors from its on-disk representation.
Args:
path:
Path to the directory containing the object.
metadata:
Metadata for the object.
kwargs:
Further arguments, ignored.
"""
return _read_compressed_list(path, metadata, "atomic_vector_list", **kwargs)
def _read_compressed_list(path: str, metadata: Optional[dict], name: str, **kwargs):
concat_path = os.path.join(path, "concatenated")
concat = dl.alt_read_object(concat_path, **kwargs)
fpath = os.path.join(path, "partitions.h5")
with h5py.File(fpath, "r") as fhandle:
ghandle = fhandle[name]
lengths = dl.load_vector_from_hdf5(ghandle["lengths"], expected_type=int, report_1darray=True)
names = None
if "names" in ghandle:
names = dl.load_vector_from_hdf5(ghandle["names"], expected_type=str, report_1darray=True)
output = splitAsCompressedList(concat, Partitioning.from_lengths(lengths=lengths, names=names))
_elem_annotation_path = os.path.join(path, "element_annotations")
if os.path.exists(_elem_annotation_path):
_mcols = dl.alt_read_object(_elem_annotation_path, **kwargs)
output = output.set_element_metadata(_mcols)
_meta_path = os.path.join(path, "other_annotations")
if os.path.exists(_meta_path):
_meta = dl.alt_read_object(_meta_path, **kwargs)
output = output.set_metadata(_meta.as_dict())
return output