Skip to content

Commit

Permalink
Updated unimodal_data.copy_from_anndata
Browse files Browse the repository at this point in the history
  • Loading branch information
bli25 committed Oct 8, 2021
1 parent bab8427 commit b6fde33
Showing 1 changed file with 21 additions and 13 deletions.
34 changes: 21 additions & 13 deletions pegasusio/unimodal_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ def _scan_dict(mapping: dict, black_list: Set[str]):


def from_anndata(self, data: anndata.AnnData, genome: str = None, modality: str = None) -> None:
""" Initialize from an anndata object
""" Initialize from an anndata object, try best not to copy
If genome/modality is not None, set 'genome'/'modality' as genome/modality
"""
self.barcode_metadata = data.obs
Expand All @@ -410,20 +410,28 @@ def from_anndata(self, data: anndata.AnnData, genome: str = None, modality: str
if "gene_ids" in self.feature_metadata:
self.feature_metadata.rename(columns = {"gene_ids": "featureid"}, inplace = True)

def _to_csr(X):
return X if isinstance(X, csr_matrix) else csr_matrix(X)

self.matrices = DataDict({"X": _to_csr(data.X)})
self.matrices = DataDict({"X": csr_matrix(data.X)}) # csr_matrix will not copy X.data
if data.raw is not None:
self.matrices["raw.X"] = _to_csr(data.raw.X)
self.matrices["raw.X"] = csr_matrix(data.raw.X)
for key, value in data.layers.items():
self.matrices[key] = _to_csr(value)

self.barcode_multiarrays = DataDict(dict(data.obsm))

self.feature_multiarrays = DataDict(dict(data.varm))

self.metadata = DataDict(dict(data.uns))
self.matrices[key] = csr_matrix(value)

def _create_data_dict(old_dict: dict) -> DataDict:
new_dict = dict()
for key, value in old_dict.items():
if str(type(value)).find("anndata") >= 0:
# This is anndata defined type
if isinstance(value, dict):
new_dict[key] = dict(value)
else:
logger.warning(f"{key} is in anndata-defined data type {type(value)} and thus skipped!")
else:
new_dict[key] = value
return DataDict(new_dict)

self.barcode_multiarrays = _create_data_dict(data.obsm)
self.feature_multiarrays = _create_data_dict(data.varm)
self.metadata = _create_data_dict(data.uns)

self._set_genome(genome)
self._set_modality(modality)
Expand Down

0 comments on commit b6fde33

Please sign in to comment.