Skip to content

Commit b798428

Browse files
committed
Merge branch 'empty_twitter_graph' into 'master'
Empty graph handling See merge request imi-sad/spikexplore!1
2 parents bcc9120 + 2d9d4cc commit b798428

File tree

7 files changed

+50
-10
lines changed

7 files changed

+50
-10
lines changed

.gitlab-ci.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
image: python:3.9
2+
3+
stages:
4+
- test
5+
6+
variables:
7+
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
8+
9+
cache:
10+
paths:
11+
- .cache/pip
12+
- venv/
13+
14+
before_script:
15+
- export LANG=en_US.UTF-8
16+
- export LANGUAGE=en_US:en
17+
- export LC_ALL=en_US.UTF-8
18+
- python -m pip install --upgrade pip
19+
- python -m pip install virtualenv
20+
- virtualenv venv
21+
- source venv/bin/activate
22+
- pip install --upgrade -r requirements.txt
23+
- pip install black pytest
24+
25+
Tests:
26+
stage: test
27+
script:
28+
- python -m pytest tests
29+

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name='spikexplore',
5-
version='0.0.11',
5+
version='0.0.12',
66
description='Graph exploration using inhomogeneous filtered diffusion',
77
url='https://github.com/epfl-lts2/spikexplore',
88
author='Nicolas Aspert, Benjamin Ricaud',

spikexplore/collect_edges.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,9 @@ def spiky_ball(initial_node_list, graph_handle, cfg,
144144
total_node_list = total_node_list + new_node_list
145145
edges_df_in, edges_df_out = split_edges(edges_df, total_node_list)
146146

147-
# Equivalent of add to graph
148-
total_edges_df = total_edges_df.append(edges_df_in)
149-
total_nodes_df = total_nodes_df.append(nodes_df)
150-
# add the edges linking the new nodes
151-
total_edges_df = total_edges_df.append(new_edges)
147+
# add edges linking to new nodes
148+
total_edges_df = pd.concat([total_edges_df, edges_df_in, new_edges])
149+
total_nodes_df = pd.concat([total_nodes_df, nodes_df])
152150

153151
new_node_list, new_edges = random_subset(edges_df_out, expansion_type, mode=random_subset_mode,
154152
mode_value=random_subset_size, coeff=degree)
@@ -157,7 +155,8 @@ def spiky_ball(initial_node_list, graph_handle, cfg,
157155
logger.debug('new edges:{} subset:{} in_edges:{}'.format(len(edges_df_out), len(new_edges), len(edges_df_in)))
158156

159157
logger.debug('Nb of layers reached: {}'.format(depth))
160-
total_edges_df = total_edges_df.sort_values('weight', ascending=False)
158+
if not total_edges_df.empty:
159+
total_edges_df = total_edges_df.sort_values('weight', ascending=False)
161160

162161
return total_node_list, total_nodes_df, total_edges_df, node_acc
163162

spikexplore/graph.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ def convert_to_json(edge_df):
2929
def graph_from_edgeslist(edge_df, min_weight=0):
3030
logger.debug('Creating the graph from the edge list')
3131
# The indices in the dataframe are source and target for the edges
32+
if edge_df.empty:
33+
return nx.empty_graph()
3234
G = nx.from_pandas_edgelist(edge_df[edge_df['weight'] >= min_weight],
3335
source='source', target='target', create_using=nx.DiGraph)
3436
logger.info('Nb of nodes: {}'.format(G.number_of_nodes()))
@@ -133,10 +135,10 @@ def process_hop(graph_handle, node_list, nodes_info_acc):
133135
node_info, edges_df = graph_handle.get_neighbors(node)
134136
node_info, edges_df = graph_handle.filter(node_info, edges_df)
135137

136-
total_nodes_df = total_nodes_df.append(node_info.get_nodes())
138+
total_nodes_df = pd.concat([total_nodes_df, node_info.get_nodes()])
137139
nodes_info_acc.update(node_info) # add new info
138140

139-
total_edges_df = total_edges_df.append(edges_df)
141+
total_edges_df = pd.concat([total_edges_df, edges_df])
140142
neighbors_dic = graph_handle.neighbors_with_weights(edges_df)
141143
new_node_dic = combine_dicts(new_node_dic, neighbors_dic)
142144

spikexplore/graph_explore.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
def create_graph(backend, nodes_df, edges_df, nodes_info, config):
88
min_weight = config.min_weight
99
g = graph_from_edgeslist(edges_df, min_weight=min_weight)
10+
if nx.is_empty(g):
11+
return g
1012
g = backend.add_graph_attributes(g, nodes_df, edges_df, nodes_info)
1113
g = reduce_graph(g, config.min_degree)
1214
g = handle_spikyball_neighbors(g, backend)

tests/twitter_test.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,7 @@ def test_sampling_v2_coreball(self):
4343
self.assertTrue(g_sub.number_of_nodes() > 5)
4444
self.assertTrue(g_sub.number_of_edges() > 10)
4545

46-
46+
def test_empty_graph(self):
47+
g_sub, _ = graph_explore.explore(self.sampling_backend, ['#InvalidUsername'], self.sampling_config)
48+
self.assertTrue(g_sub.number_of_nodes() == 0)
49+
self.assertTrue(g_sub.number_of_edges() == 0)

tests/wikipedia_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,8 @@ def test_sampling_coreball(self):
4646
self.assertTrue(g_sub.number_of_edges() > 700)
4747
self.assertTrue(nx.is_connected(g_sub))
4848
self.assertTrue(set(g_sub.nodes()).intersection(self.wiki_config.pages_ignored) == set())
49+
50+
def test_empty_graph(self):
51+
g_sub, _ = graph_explore.explore(self.sampling_backend, ['Non existent page of wikipedia forever'], self.sampling_config)
52+
self.assertTrue(g_sub.number_of_nodes() == 0)
53+
self.assertTrue(g_sub.number_of_edges() == 0)

0 commit comments

Comments
 (0)