In [11]:
import networkx as nx
import community 
import random
from math import floor
import clusterrewire
%pylab inline


Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['random', 'floor']
`%matplotlib` prevents importing * from pylab and numpy

In [ ]:
def sbm(cmtysize, pin, pout):
    graphs = []
    for i in range(0, len(cmtysize)):
        graphs.append(nx.gnp_random_graph(cmtysize[i], pin))
    G=nx.disjoint_union_all(graphs)

    s=[]
    s.append(0)
    for i in range(0, len(cmtysize)):
        s.append(s[i-1]+cmtysize[i])

    for i in range(0, len(cmtysize)):
        for n in range(s[i], s[i+1]):
            for m in range(s[i+1], G.number_of_nodes()):
                if rand()<pout:
                        G.add_edge(n, m)
    return G;

In [3]:
g=sbm([20, 20, 20], .64, .5)
partition_before_rewire = community.best_partition(g)
sets_before_rewire = [[]]
for i in range(0, len(partition_before_rewire)):
    s = partition_before_rewire[i]
    if s>len(sets_before_rewire)-1:
        sets_before_rewire.append([])
    sets_before_rewire[s].append(i)

print(sets_before_rewire)


[[0, 1, 5, 7, 8, 10, 11, 13, 17, 18, 24, 25, 28, 33, 36, 38, 40, 43, 44, 46, 52], [2, 6, 9, 21, 23, 26, 29, 32, 34], [3, 4, 14, 16, 19, 30, 39, 41, 45, 48, 50, 51, 53, 54, 55, 56, 57], [12, 15, 20, 22, 27, 31, 35, 37, 42, 47, 49, 58, 59]]

In [10]:
imshow(nx.to_numpy_matrix(g))
title("Network before rewiring")


Out[10]:
<matplotlib.text.Text at 0x10788c320>

In [13]:
A = nx.to_numpy_matrix(g)
A = clusterrewire.cluster_rewire_graph(A,
                                       percent_of_edges_to_rewire=1,
                                       verbose=False,
                                       property_functions=None)
rewired_graph = nx.Graph(A)

In [19]:
partition_after_rewire = community.best_partition(rewired_graph)
sets_after_rewire = [[]]
for i in range(0, len(partition_after_rewire)):
    s = partition_after_rewire[i]
    if s>len(sets_after_rewire)-1:
        sets_after_rewire.append([])
    sets_after_rewire[s].append(i)

print(sets_after_rewire)

imshow(nx.to_numpy_matrix(rewired_graph))
title("Adjacency after rewire")


[[0, 4, 6, 7, 12, 14, 15, 17, 18, 22, 24, 25, 26, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 43, 45, 49, 50, 52, 53, 54, 57, 58], [1, 2, 3, 5, 8, 9, 10, 11, 13, 16, 19, 20, 21, 23, 27, 30, 39, 40, 41, 42, 44, 46, 47, 48, 51, 55, 56, 59]]
Out[19]:
<matplotlib.text.Text at 0x1079b8cf8>