Bipartite example ----------------- :download:`Downloadable Source Code ` .. image:: bipartite/bipartite.png :width: 80 % :: import EoN import networkx as nx import random import matplotlib.pyplot as plt G= nx.bipartite.configuration_model([1,11]*2000, [3]*8000) #the graph now consists of two parts. The first part has 2000 degree 1 nodes #and 2000 degree 11 nodes. The second has 8000 degree 3 nodes. #there are 24000 edges in the network. # # We assume the first ones are twice as infectious as the second ones. # for node in G: if G.degree(node) in [1,11]: G.node[node]['type'] = 'A' else: G.node[node]['type'] = 'B' #We have defined the two types of nodes. #now define the transmission and recovery functions: def trans_time_function(source, target, tau): if G.node[source]['type'] is 'A': return random.expovariate(2*tau) else: return random.expovariate(tau) def rec_time_function(node, gamma): return random.expovariate(gamma) tau = 0.4 gamma = 1. sim = EoN.fast_nonMarkov_SIR(G, trans_time_function, rec_time_function, trans_time_args=(tau,), rec_time_args=(gamma,), rho = 0.01, return_full_data=True) t, S, I, R = sim.summary() plt.plot(t, I, label='Total Infecteds') t1, S1, I1, R1 = sim.summary(nodelist = [node for node in G if G.node[node]['type']=='A']) plt.plot(t1, I1, label = 'Partition 1') t2, S2, I2, R2 = sim.summary(nodelist = [node for node in G if G.node[node]['type']=='B']) plt.plot(t2, I2, label = 'Partition 2') plt.legend() plt.xlabel('\$t\$') plt.ylabel('Infecteds') plt.savefig('bipartite.png')