[docs]defread_spatial_experiment(path:str,metadata:dict,**kwargs)->SpatialExperiment:"""Load a :py:class:`~spatialexperiment.SpatialExperiment.SpatialExperiment` from its on-disk representation. This method should generally not be called directly but instead be invoked by :py:meth:`~dolomite_base.read_object.read_object`. Args: path: Path to the directory containing the object. metadata: Metadata for the object. kwargs: Further arguments. Returns: A :py:class:`~spatialexperiment.SpatialExperiment.SpatialExperiment` with file-backed arrays in the assays. """sce=dlsce.read_single_cell_experiment(path,metadata=metadata,**kwargs)spe=SpatialExperiment(assays=sce.get_assays(),row_data=sce.get_row_data(),column_data=sce.get_column_data(),row_ranges=sce.get_row_ranges(),metadata=sce.get_metadata(),main_experiment_name=sce.get_main_experiment_name(),reduced_dims=sce.get_reduced_dims(),alternative_experiments=sce.get_alternative_experiments(),)_sp_coords_path=os.path.join(path,"coordinates")ifos.path.exists(_sp_coords_path):_coords=dl.alt_read_object(_sp_coords_path,**kwargs)spe=spe.set_spatial_coordinates(_coords)else:raiseFileNotFoundError(f"cannot find spatial coordinates at {path}.")_img_path=os.path.join(path,"images")ifos.path.exists(_img_path):withh5py.File(os.path.join(_img_path,"mapping.h5"),"r")ashandle:ghandle=handle["spatial_experiment"]sample_names=dl.load_vector_from_hdf5(ghandle["sample_names"],expected_type=str,report_1darray=True)column_samples=dl.load_vector_from_hdf5(ghandle["column_samples"],expected_type=int,report_1darray=True)image_samples=dl.load_vector_from_hdf5(ghandle["image_samples"],expected_type=int,report_1darray=True)image_ids=dl.load_vector_from_hdf5(ghandle["image_ids"],expected_type=str,report_1darray=True)image_formats=dl.load_vector_from_hdf5(ghandle["image_formats"],expected_type=str,report_1darray=True)image_scale_factors=dl.load_vector_from_hdf5(ghandle["image_scale_factors"],expected_type=float,report_1darray=True)# replace column names; just in casespe=spe.set_column_data(spe.get_column_data().set_column("sample_id",sample_names[column_samples]))image_data=[]iflen(image_samples)>0:fori,_inenumerate(image_samples):# TODO: write reader for SpatialImage classimage_data.append(construct_spatial_image_class(os.path.join(_img_path,f"{i}.{str(image_formats[i]).lower()}")))_image_frame=BiocFrame({"sample_id":sample_names[image_samples],"image_id":image_ids,"data":image_data,"scale_factor":image_scale_factors,})# add image dataspe=spe.set_image_data(_image_frame)returnspe