def louvain(graph, layer, node_l, node_c, top, bot, couple, edge_l, edge_c, mu): current_graph = graph.copy() status = Status() status.layer = layer status.node_l = node_l status.node_c = node_c status.top = top status.bot = bot status.edge_l = edge_l status.edge_c = edge_c status.couple = couple status.mu = mu status.init(current_graph) old_status = status.copy() status_list = list() level_count = 0 mod = __modularity(_get_commu_dict(status.node2com), status, graph) #print "Modularity before First Iteration ",mod __one_level(graph, old_status, current_graph, status, status_list, level_count) partition = __renumber(status.node2com) status_list.append(partition) current_graph, part, status = induced_graph_multilayer( partition, current_graph, status) mod1 = __modularity(_get_com_wise_nodes(part), status, current_graph) p = _get_com_wise_nodes( partition_at_level(status_list, len(status_list) - 1)) new_mod = __modularity(p, old_status, graph) #print "-> merge mod after level 0 : ", mod1 #print "-> Modularity after level 0: ",new_mod, "\n" ##print("Louvain, partition: ",partition) #print("Louvain partition: ",part) A = nx.adjacency_matrix(current_graph) ##print(A.todense()) status.init(current_graph) while True: level_count += 1 ##print level_count modif = __one_level(graph, old_status, current_graph, status, status_list, level_count, 1) partition = __renumber(status.node2com) status_list.append(partition) new_mod = __modularity( _get_commu_dict(partition_at_level(status_list, level_count)), old_status, graph) #print "-> Modularity after level ",level_count,": ",new_mod, "\n" #new_mod = __modularity(_get_commu_dict(partition), status, current_graph) #new_mod = __modularity(_get_com_wise_nodes(partition), status, current_graph) if modif == False: #if new_mod - mod < __MIN : break mod = new_mod #current_graph = induced_graph(partition, current_graph) current_graph, part, status = induced_graph_multilayer( partition, current_graph, status) #status.init(current_graph) status.init(current_graph, part) ##print("Louvain, partition: ",partition) # #print("Louvain, part after: ",part) # A = nx.adjacency_matrix(current_graph) ##print(A.todense()) return status_list, mod