Skip to content

Commit 79be7fd

Browse files
authored
Merge pull request #90 from serralba/master
Support for networkx==2.4
2 parents 59b3f5d + 6fc9d1d commit 79be7fd

File tree

9 files changed

+29
-29
lines changed

9 files changed

+29
-29
lines changed

gem/embedding/gf.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def learn_embedding(self, graph=None, edge_f=None,
125125
try:
126126
self._X = graph_util.loadEmbedding(embFileName)
127127
except FileNotFoundError:
128-
self._X = np.random.randn(graph.number_of_nodes(), self._d)
128+
self._X = np.random.randn(len(graph.nodes), self._d)
129129
t2 = time()
130130
try:
131131
call(["rm", embFileName])
@@ -135,7 +135,7 @@ def learn_embedding(self, graph=None, edge_f=None,
135135
if not graph:
136136
graph = graph_util.loadGraphFromEdgeListTxt(edge_f)
137137
t1 = time()
138-
self._node_num = graph.number_of_nodes()
138+
self._node_num = len(graph.nodes)
139139
self._X = 0.01 * np.random.randn(self._node_num, self._d)
140140
for iter_id in range(self._max_iter):
141141
if not iter_id % self._print_step:

gem/embedding/hope.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def learn_embedding(self, graph=None, edge_f=None,
6161
# M_g = I - self._beta*A
6262
# M_l = self._beta*A
6363
A = nx.to_numpy_matrix(graph)
64-
M_g = np.eye(graph.number_of_nodes()) - self._beta * A
64+
M_g = np.eye(len(graph.nodes)) - self._beta * A
6565
M_l = self._beta * A
6666
S = np.dot(np.linalg.inv(M_g), M_l)
6767

gem/embedding/lle.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def learn_embedding(self, graph=None, edge_f=None,
5959
t1 = time()
6060
A = nx.to_scipy_sparse_matrix(graph)
6161
normalize(A, norm='l1', axis=1, copy=False)
62-
I_n = sp.eye(graph.number_of_nodes())
62+
I_n = sp.eye(len(graph.nodes))
6363
I_min_A = I_n - A
6464
u, s, vt = lg.svds(I_min_A, k=self._d + 1, which='SM')
6565
t2 = time()

gem/embedding/sdne.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def learn_embedding(self, graph=None, edge_f=None,
8080
S = nx.to_scipy_sparse_matrix(graph)
8181
t1 = time()
8282
S = (S + S.T) / 2
83-
self._node_num = graph.number_of_nodes()
83+
self._node_num = len(graph.nodes)
8484

8585
# Generate encoder, decoder and autoencoder
8686
self._num_iter = self._n_iter

gem/evaluation/evaluate_graph_reconstruction.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def evaluateStaticGraphReconstruction(digraph, graph_embedding,
1010
X_stat, node_l=None, file_suffix=None,
1111
sample_ratio_e=None, is_undirected=True,
1212
is_weighted=False):
13-
node_num = digraph.number_of_nodes()
13+
node_num = len(digraph.nodes)
1414
# evaluation
1515
if sample_ratio_e:
1616
eval_edge_pairs = evaluation_util.getRandomEdgePairs(
@@ -54,7 +54,7 @@ def expGR(digraph, graph_embedding,
5454
print('\tGraph Reconstruction')
5555
summ_file = open('%s_%s.grsumm' % (res_pre, m_summ), 'w')
5656
summ_file.write('Method\t%s\n' % metrics.getMetricsHeader())
57-
if digraph.number_of_nodes() <= n_sampled_nodes:
57+
if len(digraph.nodes) <= n_sampled_nodes:
5858
rounds = 1
5959
MAP = [None] * rounds
6060
prec_curv = [None] * rounds
@@ -67,8 +67,8 @@ def expGR(digraph, graph_embedding,
6767
digraph,
6868
n_sampled_nodes=n_sampled_nodes
6969
)
70-
n_nodes[round_id] = sampled_digraph.number_of_nodes()
71-
n_edges[round_id] = sampled_digraph.number_of_edges()
70+
n_nodes[round_id] = len(sampled_digraph.nodes)
71+
n_edges[round_id] = len(sampled_digraph.edges)
7272
print('\t\tRound: %d, n_nodes: %d, n_edges:%d\n' % (round_id,
7373
n_nodes[round_id],
7474
n_edges[round_id]))

gem/evaluation/evaluate_link_prediction.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def evaluateStaticLinkPrediction(digraph, graph_embedding,
1616
sample_ratio_e=None,
1717
no_python=False,
1818
is_undirected=True):
19-
node_num = digraph.number_of_nodes()
19+
node_num = len(digraph.nodes)
2020
# seperate train and test graph
2121
train_digraph, test_digraph = evaluation_util.splitDiGraphToTrainTest(
2222
digraph,
@@ -28,7 +28,7 @@ def evaluateStaticLinkPrediction(digraph, graph_embedding,
2828
nx.weakly_connected_component_subgraphs(train_digraph),
2929
key=len
3030
)
31-
tdl_nodes = train_digraph.nodes()
31+
tdl_nodes = list(train_digraph.nodes())
3232
nodeListMap = dict(zip(tdl_nodes, range(len(tdl_nodes))))
3333
nx.relabel_nodes(train_digraph, nodeListMap, copy=False)
3434
test_digraph = test_digraph.subgraph(tdl_nodes)
@@ -63,7 +63,7 @@ def evaluateStaticLinkPrediction(digraph, graph_embedding,
6363
edge_pairs=eval_edge_pairs
6464
)
6565
if node_l is None:
66-
node_l = list(range(train_digraph.number_of_nodes()))
66+
node_l = list(range(len(train_digraph.nodes)))
6767
filtered_edge_list = [e for e in predicted_edge_list if not train_digraph.has_edge(node_l(e[0]), node_l(e[1]))]
6868

6969
MAP = metrics.computeMAP(filtered_edge_list, test_digraph)

gem/evaluation/metrics.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def computePrecisionCurve(predicted_edge_list, true_digraph, max_k=-1):
2323
return precision_scores, delta_factors
2424

2525
def computeMAP(predicted_edge_list, true_digraph, max_k=-1):
26-
node_num = true_digraph.number_of_nodes()
26+
node_num = len(true_digraph.nodes)
2727
node_edges = []
2828
for i in range(node_num):
2929
node_edges.append([])

gem/utils/evaluation_util.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def getEdgeListFromAdjMtx(adj, threshold=0.0, is_undirected=True, edge_pairs=Non
3636
def splitDiGraphToTrainTest(di_graph, train_ratio, is_undirected=True):
3737
train_digraph = di_graph.copy()
3838
test_digraph = di_graph.copy()
39-
node_num = di_graph.number_of_nodes()
39+
node_num = len(di_graph.nodes)
4040
for (st, ed, w) in di_graph.edges_iter(data='weight', default=1):
4141
if(is_undirected and st >= ed):
4242
continue

gem/utils/graph_util.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010

1111
def transform_DiGraph_to_adj(di_graph):
12-
n = di_graph.number_of_nodes()
12+
n = len(di_graph.nodes)
1313
adj = np.zeros((n, n))
1414
for st, ed, w in di_graph.edges(data='weight', default=1):
1515
adj[st, ed] = w
@@ -30,19 +30,19 @@ def transform_adj_to_DiGraph(adj):
3030

3131
def get_lcc(di_graph):
3232
di_graph = max(nx.weakly_connected_component_subgraphs(di_graph), key=len)
33-
tdl_nodes = di_graph.nodes()
33+
tdl_nodes = list(di_graph.nodes())
3434
nodeListMap = dict(zip(tdl_nodes, range(len(tdl_nodes))))
3535
nx.relabel_nodes(di_graph, nodeListMap, copy=False)
3636
return di_graph, nodeListMap
3737

3838

3939
def print_graph_stats(G):
40-
print('# of nodes: %d, # of edges: %d' % (G.number_of_nodes(),
41-
G.number_of_edges()))
40+
print('# of nodes: %d, # of edges: %d' % (len(G.nodes),
41+
len(G.edges)))
4242

4343

4444
def sample_graph(di_graph, n_sampled_nodes=None):
45-
node_num = di_graph.number_of_nodes()
45+
node_num = len(di_graph.nodes)
4646
if n_sampled_nodes and node_num > n_sampled_nodes:
4747
node_l = np.random.choice(node_num, n_sampled_nodes, replace=False)
4848
node_l_inv = {v: k for k, v in enumerate(node_l)}
@@ -57,13 +57,13 @@ def sample_graph(di_graph, n_sampled_nodes=None):
5757
continue
5858
return sampled_graph, node_l
5959
else:
60-
return di_graph, np.arange(di_graph.number_of_nodes())
60+
return di_graph, np.arange(len(di_graph.nodes))
6161

6262

6363
def randwalk_DiGraph_to_adj(di_graph, node_frac=0.1,
6464
n_walks_per_node=5, len_rw=2):
6565
t0 = time.time()
66-
n = di_graph.number_of_nodes()
66+
n = len(di_graph.nodes)
6767
adj = np.zeros((n, n))
6868
rw_node_num = int(node_frac * n)
6969
rw_node_list = np.random.choice(n, size=[rw_node_num],
@@ -97,8 +97,8 @@ def randwalk_DiGraph_to_adj(di_graph, node_frac=0.1,
9797
def addChaos(di_graphs, k):
9898
anomaly_time_steps = sorted(random.sample(range(len(di_graphs)), k))
9999
for t in anomaly_time_steps:
100-
n = di_graphs[t].number_of_nodes()
101-
e = di_graphs[t].number_of_edges()
100+
n = len(di_graphs[t].nodes)
101+
e = len(di_graphs[t].edges)
102102
di_graphs[t] = nx.fast_gnp_random_graph(n, e / float(n * (n - 1)),
103103
seed=None, directed=False)
104104
di_graphs[t] = di_graphs[t].to_directed()
@@ -108,11 +108,11 @@ def addChaos(di_graphs, k):
108108
def addNodeAnomalies(di_graphs, p, k):
109109
anomaly_time_steps = sorted(random.sample(range(len(di_graphs)), k))
110110
for t in anomaly_time_steps:
111-
n_nodes = di_graphs[t].number_of_nodes()
111+
n_nodes = len(di_graphs[t].nodes)
112112
anomalous_nodes_idx = np.random.choice([0, 1],
113113
size=(n_nodes, 1),
114114
p=(1 - p, p))
115-
node_list = np.array(di_graphs[t].nodes())
115+
node_list = np.array(list(di_graphs[t].nodes()))
116116
node_list = node_list.reshape((n_nodes, 1))
117117
anomalous_nodes = np.multiply(anomalous_nodes_idx, node_list)
118118
anomalous_nodes = anomalous_nodes[anomalous_nodes > 0]
@@ -123,15 +123,15 @@ def addNodeAnomalies(di_graphs, p, k):
123123
di_graphs[t].add_edges_from(
124124
itertools.product(range(n_nodes), list(anomalous_nodes))
125125
)
126-
print('Nodes: %d, Edges: %d' % (di_graphs[t].number_of_nodes(),
127-
di_graphs[t].number_of_edges()))
126+
print('Nodes: %d, Edges: %d' % (len(di_graphs[t].nodes),
127+
len(di_graphs[t].edges)))
128128
return anomaly_time_steps
129129

130130

131131
def saveGraphToEdgeListTxt(graph, file_name):
132132
with open(file_name, 'w') as f:
133-
f.write('%d\n' % graph.number_of_nodes())
134-
f.write('%d\n' % graph.number_of_edges())
133+
f.write('%d\n' % len(graph.nodes))
134+
f.write('%d\n' % len(graph.edges))
135135
for i, j, w in graph.edges(data='weight', default=1):
136136
f.write('%d %d %f\n' % (i, j, w))
137137

0 commit comments

Comments
 (0)