1515import sys
1616import 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