[docs]defread_dense_array(path:str,metadata:Dict[str,Any],**kwargs)->ReloadedArray:""" Read a dense array from its on-disk representation. In general, this function should not be called directly but instead be dispatched via :py:meth:`~dolomite_base.read_object.read_object`. Args: path: Path to the directory containing the object. metadata: Metadata for this object. kwargs: Further arguments, ignored. Returns: A :py:class:`~dolomite_matrix.ReloadedArray.ReloadedArray` containing a HDF5-backed dense array as a seed. """fpath=os.path.join(path,"array.h5")name="dense_array"withh5py.File(fpath,"r")ashandle:ghandle=handle[name]transposed=Falseif"transposed"inghandle.attrs:transposed=(ghandle.attrs["transposed"]!=0)tt=ghandle.attrs["type"]iftt=="vls":returnReloadedArray(_read_vls_array(ghandle,transposed),path)dhandle=ghandle["data"]dtype=Noneiftt=="boolean":dtype=numpy.dtype("bool")eliftt=="string":dtype_name="U"+str(dhandle.dtype.itemsize)dtype=numpy.dtype(dtype_name)eliftt=="float":ifnotnumpy.issubdtype(dhandle.dtype,numpy.floating):dtype=numpy.dtype("float64")placeholder=Noneif"missing-value-placeholder"indhandle.attrs:placeholder=dhandle.attrs["missing-value-placeholder"]dname=name+"/data"is_native=nottransposedifplaceholderisNone:seed=Hdf5DenseArraySeed(fpath,dname,dtype=dtype,native_order=is_native)else:core=Hdf5DenseArraySeed(fpath,dname,native_order=is_native)seed=DelayedMask(core,placeholder=placeholder,dtype=dtype)returnReloadedArray(seed,path)
# TODO: make this into a delayedarray.def_read_vls_array(ghandle:h5py.Group,transposed:bool)->numpy.ndarray:phandle=ghandle["pointers"]pointers=phandle[:].ravel(order="C")heap=ghandle["heap"][:]collected=[]fori,valinenumerate(pointers):offset,length=valcollected.append(bytes(heap[offset:offset+length]).decode("UTF-8"))payload=numpy.reshape(collected,phandle.shape,order="C")if"missing-value-placeholder"inphandle.attrs:placeholder=phandle.attrs["missing-value-placeholder"]ifisinstance(placeholder,bytes):placeholder=placeholder.decode("UTF-8")payload=numpy.ma.array(payload,mask=(payload==placeholder))iftransposed:payload=payload.Treturnpayload