Skip to content

Commit a003323

Browse files
authored
Merge pull request #53 from KrishnaswamyLab/dev
graphtools v1.5.0
2 parents bf509bb + 4f68d34 commit a003323

11 files changed

Lines changed: 1072 additions & 154 deletions

File tree

graphtools/base.py

Lines changed: 23 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,7 @@
1515
import sys
1616
import tasklogger
1717

18-
try:
19-
import pandas as pd
20-
except ImportError:
21-
# pandas not installed
22-
pass
23-
24-
try:
25-
import anndata
26-
except (ImportError, SyntaxError):
27-
# anndata not installed
28-
pass
29-
30-
from . import utils
18+
from . import matrix, utils
3119

3220
_logger = tasklogger.get_tasklogger("graphtools")
3321

@@ -126,28 +114,19 @@ def __init__(
126114

127115
self._check_data(data)
128116
n_pca, rank_threshold = self._parse_n_pca_threshold(data, n_pca, rank_threshold)
129-
try:
130-
pd
131-
except NameError:
132-
# pandas not installed
133-
pass
134-
else:
135-
if utils.is_SparseDataFrame(data):
136-
data = data.to_coo()
137-
elif isinstance(data, pd.DataFrame):
138-
try:
139-
data = data.sparse.to_coo()
140-
except AttributeError:
141-
data = np.array(data)
142117

143-
try:
144-
anndata
145-
except NameError:
146-
# anndata not installed
147-
pass
148-
else:
149-
if isinstance(data, anndata.AnnData):
150-
data = data.X
118+
if utils.is_SparseDataFrame(data):
119+
data = data.to_coo()
120+
elif utils.is_DataFrame(data):
121+
try:
122+
# sparse data
123+
data = data.sparse.to_coo()
124+
except AttributeError:
125+
# dense data
126+
data = np.array(data)
127+
elif utils.is_Anndata(data):
128+
data = data.X
129+
151130
self.data = data
152131
self.n_pca = n_pca
153132
self.rank_threshold = rank_threshold
@@ -584,18 +563,14 @@ def symmetrize_kernel(self, K):
584563
K = K.multiply(K.T)
585564
elif self.kernel_symm == "mnn":
586565
_logger.debug("Using mnn symmetrization (theta = {}).".format(self.theta))
587-
K = self.theta * utils.elementwise_minimum(K, K.T) + (
566+
K = self.theta * matrix.elementwise_minimum(K, K.T) + (
588567
1 - self.theta
589-
) * utils.elementwise_maximum(K, K.T)
568+
) * matrix.elementwise_maximum(K, K.T)
590569
elif self.kernel_symm is None:
591570
_logger.debug("Using no symmetrization.")
592571
pass
593572
else:
594-
# this should never happen
595-
raise ValueError(
596-
"Expected kernel_symm in ['+', '*', 'mnn' or None]. "
597-
"Got {}".format(self.theta)
598-
)
573+
raise NotImplementedError
599574
return K
600575

601576
def apply_anisotropy(self, K):
@@ -683,7 +658,9 @@ def kernel_degree(self):
683658
try:
684659
return self._kernel_degree
685660
except AttributeError:
686-
self._kernel_degree = utils.to_array(self.kernel.sum(axis=1)).reshape(-1, 1)
661+
self._kernel_degree = matrix.to_array(self.kernel.sum(axis=1)).reshape(
662+
-1, 1
663+
)
687664
return self._kernel_degree
688665

689666
@property
@@ -814,7 +791,7 @@ def to_igraph(self, attribute="weight", **kwargs):
814791
"""
815792
try:
816793
import igraph as ig
817-
except ImportError:
794+
except ImportError: # pragma: no cover
818795
raise ImportError(
819796
"Please install igraph with " "`pip install --user python-igraph`."
820797
)
@@ -823,12 +800,12 @@ def to_igraph(self, attribute="weight", **kwargs):
823800
except AttributeError:
824801
# not a pygsp graph
825802
W = self.K.copy()
826-
W = utils.set_diagonal(W, 0)
803+
W = matrix.set_diagonal(W, 0)
827804
sources, targets = W.nonzero()
828805
edgelist = list(zip(sources, targets))
829806
g = ig.Graph(W.shape[0], edgelist, **kwargs)
830807
weights = W[W.nonzero()]
831-
weights = utils.to_array(weights)
808+
weights = matrix.to_array(weights)
832809
g.es[attribute] = weights.flatten().tolist()
833810
return g
834811

@@ -987,7 +964,7 @@ def _build_weight_from_kernel(self, kernel):
987964

988965
weight = kernel.copy()
989966
self._diagonal = weight.diagonal().copy()
990-
weight = utils.set_diagonal(weight, 0)
967+
weight = matrix.set_diagonal(weight, 0)
991968
return weight
992969

993970

0 commit comments

Comments
 (0)