Skip to content

Commit

Permalink
Merge pull request #52 from KrishnaswamyLab/feature/estimator
Browse files Browse the repository at this point in the history
Feature/estimator
  • Loading branch information
scottgigante committed Feb 25, 2020
2 parents fe43da1 + 31e46eb commit 21a0033
Show file tree
Hide file tree
Showing 11 changed files with 1,072 additions and 154 deletions.
69 changes: 23 additions & 46 deletions graphtools/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,7 @@
import sys
import tasklogger

try:
import pandas as pd
except ImportError:
# pandas not installed
pass

try:
import anndata
except (ImportError, SyntaxError):
# anndata not installed
pass

from . import utils
from . import matrix, utils

_logger = tasklogger.get_tasklogger("graphtools")

Expand Down Expand Up @@ -126,28 +114,19 @@ def __init__(

self._check_data(data)
n_pca, rank_threshold = self._parse_n_pca_threshold(data, n_pca, rank_threshold)
try:
pd
except NameError:
# pandas not installed
pass
else:
if utils.is_SparseDataFrame(data):
data = data.to_coo()
elif isinstance(data, pd.DataFrame):
try:
data = data.sparse.to_coo()
except AttributeError:
data = np.array(data)

try:
anndata
except NameError:
# anndata not installed
pass
else:
if isinstance(data, anndata.AnnData):
data = data.X
if utils.is_SparseDataFrame(data):
data = data.to_coo()
elif utils.is_DataFrame(data):
try:
# sparse data
data = data.sparse.to_coo()
except AttributeError:
# dense data
data = np.array(data)
elif utils.is_Anndata(data):
data = data.X

self.data = data
self.n_pca = n_pca
self.rank_threshold = rank_threshold
Expand Down Expand Up @@ -584,18 +563,14 @@ def symmetrize_kernel(self, K):
K = K.multiply(K.T)
elif self.kernel_symm == "mnn":
_logger.debug("Using mnn symmetrization (theta = {}).".format(self.theta))
K = self.theta * utils.elementwise_minimum(K, K.T) + (
K = self.theta * matrix.elementwise_minimum(K, K.T) + (
1 - self.theta
) * utils.elementwise_maximum(K, K.T)
) * matrix.elementwise_maximum(K, K.T)
elif self.kernel_symm is None:
_logger.debug("Using no symmetrization.")
pass
else:
# this should never happen
raise ValueError(
"Expected kernel_symm in ['+', '*', 'mnn' or None]. "
"Got {}".format(self.theta)
)
raise NotImplementedError
return K

def apply_anisotropy(self, K):
Expand Down Expand Up @@ -683,7 +658,9 @@ def kernel_degree(self):
try:
return self._kernel_degree
except AttributeError:
self._kernel_degree = utils.to_array(self.kernel.sum(axis=1)).reshape(-1, 1)
self._kernel_degree = matrix.to_array(self.kernel.sum(axis=1)).reshape(
-1, 1
)
return self._kernel_degree

@property
Expand Down Expand Up @@ -814,7 +791,7 @@ def to_igraph(self, attribute="weight", **kwargs):
"""
try:
import igraph as ig
except ImportError:
except ImportError: # pragma: no cover
raise ImportError(
"Please install igraph with " "`pip install --user python-igraph`."
)
Expand All @@ -823,12 +800,12 @@ def to_igraph(self, attribute="weight", **kwargs):
except AttributeError:
# not a pygsp graph
W = self.K.copy()
W = utils.set_diagonal(W, 0)
W = matrix.set_diagonal(W, 0)
sources, targets = W.nonzero()
edgelist = list(zip(sources, targets))
g = ig.Graph(W.shape[0], edgelist, **kwargs)
weights = W[W.nonzero()]
weights = utils.to_array(weights)
weights = matrix.to_array(weights)
g.es[attribute] = weights.flatten().tolist()
return g

Expand Down Expand Up @@ -987,7 +964,7 @@ def _build_weight_from_kernel(self, kernel):

weight = kernel.copy()
self._diagonal = weight.diagonal().copy()
weight = utils.set_diagonal(weight, 0)
weight = matrix.set_diagonal(weight, 0)
return weight


Expand Down

0 comments on commit 21a0033

Please sign in to comment.