Source code for mdvtools.conversions

import scanpy
import mudata
import scipy

from .mdvproject import MDVProject

[docs] def convert_scanpy_to_mdv(folder,scanpy_object,max_dims=3): mdv = MDVProject(folder) #create datasources 'cells' cell_table = scanpy_object.obs cell_table["cell_id"] = cell_table.index #add any dimension reduction _add_dims(cell_table,scanpy_object.obsm,max_dims) mdv.add_datasource("cells",cell_table) #create two datasources 'genes' gene_table = scanpy_object.var gene_table["name"]=gene_table.index _add_dims(gene_table,scanpy_object.varm,max_dims) mdv.add_datasource("genes",gene_table) #link the two datasets mdv.add_rows_as_columns_link("cells","genes","name","Gene Expr") #add the gene expression mdv.add_rows_as_columns_subgroup("cells","genes","gs",scanpy_object.X,name="gene_scores",label="Gene Scores") #create a default view mdv.set_view("default",{ "initialCharts":{ "cells":[], "genes":[] } },True) return mdv
[docs] def convert_mudata_to_mdv(folder,mudata_object,max_dims=3): md=mudata_object p= MDVProject(folder) #add the cells _add_dims(md.obs,md.obsm,max_dims) p.add_datasource("cells",md.obs) for mod in md.mod.keys(): mdata = md.mod[mod] matrix = mdata.X.value if hasattr(mdata.X,"value") else mdata.X if matrix.shape[1] !=0: p.add_datasource(mod,mdata.var) p.set_column(mod,{"name":"name","datatype":"unique"},mdata.var.index) p.add_rows_as_columns_link("cells",mod,"name",mod) matrix = scipy.sparse.csr_matrix(matrix).transpose().tocsr() p.add_rows_as_columns_subgroup("cells",mod,mod+"_expr",matrix,sparse=True) return p
[docs] def _add_dims(table,dims,max_dims): if len(dims.keys())==0: return for dname in dims: if len(dims[dname].shape)==1: continue dm= dims[dname].transpose() md= min(max_dims,dm.shape[0]) for n in range(md): table[f"{dname}_{n+1}"]=dm[n]