Skip to content

Commit

Permalink
Merge pull request #75 from klarman-cell-observatory/yiming
Browse files Browse the repository at this point in the history
Avoid item assignment on NoneType object error
  • Loading branch information
yihming committed Oct 20, 2021
2 parents 47ecd2b + 5b15929 commit 0afdc24
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 45 deletions.
20 changes: 10 additions & 10 deletions pegasusio/citeseq_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,20 @@ def __init__(
feature_metadata: Union[dict, pd.DataFrame],
matrices: Dict[str, csr_matrix],
metadata: dict,
barcode_multiarrays: Dict[str, np.ndarray] = None,
feature_multiarrays: Dict[str, np.ndarray] = None,
barcode_multigraphs: Dict[str, csr_matrix] = None,
feature_multigraphs: Dict[str, csr_matrix] = None,
barcode_multiarrays: Dict[str, np.ndarray] = dict(),
feature_multiarrays: Dict[str, np.ndarray] = dict(),
barcode_multigraphs: Dict[str, csr_matrix] = dict(),
feature_multigraphs: Dict[str, csr_matrix] = dict(),
cur_matrix: str = "raw.count",
) -> None:
assert metadata["modality"] == "citeseq"
super().__init__(barcode_metadata, feature_metadata, matrices, metadata, barcode_multiarrays, feature_multiarrays, barcode_multigraphs, feature_multigraphs, cur_matrix)


def from_anndata(self, data: anndata.AnnData, genome: str = None, modality: str = None) -> None:
raise ValueError("Cannot convert an AnnData object to a CITESeqData object!")


def to_anndata(self) -> anndata.AnnData:
raise ValueError("Cannot convert a CITESeqData object ot an AnnData object!")

Expand All @@ -52,7 +52,7 @@ def set_aside(self, params: List[str]) -> None:
assert len(self.matrices) == 1 and "raw.count" in self.matrices
assert "_other_names" not in self.metadata

locs = self.feature_metadata.index.get_indexer(params)
locs = self.feature_metadata.index.get_indexer(params)
if (locs < 0).sum() > 0:
raise ValueError(f"Detected unknown antibodies {params[locs < 0]}!")
self.metadata["_other_names"] = self.feature_metadata.index.values[locs] # with loc: List[int], this should be a copy not a reference
Expand All @@ -61,17 +61,17 @@ def set_aside(self, params: List[str]) -> None:
obs_keys = self.metadata.get("_obs_keys", [])
obs_keys.append("_other_counts")
self.metadata["_obs_keys"] = obs_keys

idx = np.ones(self._shape[1], dtype = bool)
idx[locs] = False
self._inplace_subset_var(idx)


def arcsinh_transform(self, cofactor: float = 5.0, jitter = False, random_state = 0, select: bool = True) -> None:
"""Conduct arcsinh transform on the raw.count matrix.
Add arcsinh transformed matrix 'arcsinh.transformed'. If jitter == True, instead add a 'arcsinh.jitter' matrix in dense format, jittering by adding a randomized value in U([-0.5, 0.5)). Mimic Cytobank.
Parameters
----------
cofactor: ``float``, optional, default: ``5.0``
Expand Down
16 changes: 8 additions & 8 deletions pegasusio/cyto_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ def __init__(
feature_metadata: Union[dict, pd.DataFrame],
matrices: Dict[str, np.ndarray],
metadata: dict,
barcode_multiarrays: Dict[str, np.ndarray] = None,
feature_multiarrays: Dict[str, np.ndarray] = None,
barcode_multigraphs: Dict[str, csr_matrix] = None,
feature_multigraphs: Dict[str, csr_matrix] = None,
barcode_multiarrays: Dict[str, np.ndarray] = dict(),
feature_multiarrays: Dict[str, np.ndarray] = dict(),
barcode_multigraphs: Dict[str, csr_matrix] = dict(),
feature_multigraphs: Dict[str, csr_matrix] = dict(),
cur_matrix: str = "raw.data",
) -> None:
assert metadata["modality"] == "cyto"
Expand All @@ -35,7 +35,7 @@ def __init__(
def from_anndata(self, data: anndata.AnnData, genome: str = None, modality: str = None) -> None:
raise ValueError("Cannot convert an AnnData object to a CytoData object!")


def to_anndata(self) -> anndata.AnnData:
raise ValueError("Cannot convert a CytoData object ot an AnnData object!")

Expand All @@ -51,7 +51,7 @@ def set_aside(self, params: List[str] = ["Time"]) -> None:
assert len(self.matrices) == 1 and "raw.data" in self.matrices
assert "_parameter_names" not in self.metadata

locs = self.feature_metadata.index.get_indexer(params)
locs = self.feature_metadata.index.get_indexer(params)
if (locs < 0).sum() > 0:
raise ValueError(f"Detected unknown parameters {params[locs < 0]}!")
self.barcode_multiarrays["_parameters"] = self.matrices["raw.data"][:, locs]
Expand All @@ -63,9 +63,9 @@ def set_aside(self, params: List[str] = ["Time"]) -> None:

def arcsinh_transform(self, cofactor: float = 5.0, jitter = False, random_state = 0, select: bool = True) -> None:
"""Conduct arcsinh transform on the raw.count matrix.
Add arcsinh transformed matrix 'arcsinh.transformed'. If jitter == True, instead add a 'arcsinh.jitter' matrix in dense format, jittering by adding a randomized value in U([-0.5, 0.5)). Mimic Cytobank.
Parameters
----------
cofactor: ``float``, optional, default: ``5.0``
Expand Down
14 changes: 7 additions & 7 deletions pegasusio/nanostring_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ def __init__(
feature_metadata: Union[dict, pd.DataFrame],
matrices: Dict[str, np.ndarray],
metadata: dict,
barcode_multiarrays: Dict[str, np.ndarray] = None,
feature_multiarrays: Dict[str, np.ndarray] = None,
barcode_multigraphs: Dict[str, csr_matrix] = None,
feature_multigraphs: Dict[str, csr_matrix] = None,
barcode_multiarrays: Dict[str, np.ndarray] = dict(),
feature_multiarrays: Dict[str, np.ndarray] = dict(),
barcode_multigraphs: Dict[str, csr_matrix] = dict(),
feature_multigraphs: Dict[str, csr_matrix] = dict(),
cur_matrix: str = "Q3Norm",
) -> None:
assert metadata["modality"] == "nanostring"
Expand All @@ -33,7 +33,7 @@ def __init__(
def from_anndata(self, data: anndata.AnnData, genome: str = None, modality: str = None) -> None:
raise ValueError("Cannot convert an AnnData object to a NanostringData object!")


def to_anndata(self) -> anndata.AnnData:
raise ValueError("Cannot convert a NanostringData object ot an AnnData object!")

Expand Down Expand Up @@ -76,9 +76,9 @@ def norm_hk(self, select: bool = True) -> None:

def log_transform(self, select: bool = True) -> None:
"""Conduct log transformation on the selected matrix: log(x + 1). Selected matrix can be either Q3Norm or HKNorm
Add log-transformed matrix 'LogMatrix'.
Parameters
----------
select: ``bool``, optional, default: ``True``
Expand Down
26 changes: 11 additions & 15 deletions pegasusio/unimodal_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ def _set_modality(metadata: dict, modality: str):
class UnimodalData:
def __init__(
self,
barcode_metadata: Union[dict, pd.DataFrame, anndata.AnnData] = None,
feature_metadata: Union[dict, pd.DataFrame] = None,
matrices: Dict[str, csr_matrix] = None,
metadata: dict = None,
barcode_multiarrays: Dict[str, np.ndarray] = None,
feature_multiarrays: Dict[str, np.ndarray] = None,
barcode_multigraphs: Dict[str, csr_matrix] = None,
feature_multigraphs: Dict[str, csr_matrix] = None,
barcode_metadata: Union[dict, pd.DataFrame, anndata.AnnData] = pd.DataFrame(),
feature_metadata: Union[dict, pd.DataFrame] = pd.DataFrame(),
matrices: Dict[str, csr_matrix] = dict(),
metadata: dict = dict(),
barcode_multiarrays: Dict[str, np.ndarray] = dict(),
feature_multiarrays: Dict[str, np.ndarray] = dict(),
barcode_multigraphs: Dict[str, csr_matrix] = dict(),
feature_multigraphs: Dict[str, csr_matrix] = dict(),
cur_matrix: str = "X",
genome: str = None,
modality: str = None,
Expand All @@ -55,15 +55,11 @@ def __init__(
self.from_anndata(barcode_metadata, genome = genome, modality = modality)
return None

def replace_none_df(value):
return value if value is not None else pd.DataFrame()


_set_genome(metadata, genome)
_set_modality(metadata, modality)

self.barcode_metadata = replace_none_df(barcode_metadata) # barcode metadata
self.feature_metadata = replace_none_df(feature_metadata) # feature metadata
self.barcode_metadata = barcode_metadata # barcode metadata
self.feature_metadata = feature_metadata # feature metadata

if len(self.barcode_metadata) > 0:
if isinstance(self.barcode_metadata, MutableMapping):
Expand Down Expand Up @@ -594,7 +590,7 @@ def _copy_view(self, viewobj: UnimodalDataView) -> "UnimodalData":
viewobj.obsm[...],
viewobj.varm[...],
viewobj.obsp[...],
viewobj.varp[...],
viewobj.varp[...],
viewobj._cur_matrix)


Expand Down
10 changes: 5 additions & 5 deletions pegasusio/vdj_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ def __init__(
feature_metadata: Union[dict, pd.DataFrame],
matrices: Dict[str, csr_matrix],
metadata: dict,
barcode_multiarrays: Dict[str, np.ndarray] = None,
feature_multiarrays: Dict[str, np.ndarray] = None,
barcode_multigraphs: Dict[str, csr_matrix] = None,
feature_multigraphs: Dict[str, csr_matrix] = None,
barcode_multiarrays: Dict[str, np.ndarray] = dict(),
feature_multiarrays: Dict[str, np.ndarray] = dict(),
barcode_multigraphs: Dict[str, csr_matrix] = dict(),
feature_multigraphs: Dict[str, csr_matrix] = dict(),
cur_matrix: str = "umis",
) -> None:
assert metadata["modality"] in {"tcr", "bcr"}
Expand Down Expand Up @@ -131,7 +131,7 @@ def construct_clonotype(self, min_umis: int = 2) -> None:
def from_anndata(self, data: anndata.AnnData, genome: str = None, modality: str = None) -> None:
raise ValueError("Cannot convert an AnnData object to a VDJData object!")


def to_anndata(self) -> anndata.AnnData:
raise ValueError("Cannot convert a VDJData object ot an AnnData object!")

Expand Down

0 comments on commit 0afdc24

Please sign in to comment.