Guest User

Untitled

a guest
Feb 24th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.79 KB | None | 0 0
  1. import networks as nx
  2.  
  3. G=nx.Graph()#Original graph
  4. color=nx.get_edge_attributes(G,'color')#Original graph color dictionary
  5. #color[(vertex1,vertex2)]
  6.  
  7. Module = nx.Graph(ModuleType="0")
  8. #MD.add_node(Module)
  9. #Module.graph
  10. #{'ModuleType': '0'}
  11. #Module.graph['ModuleType']='1'
  12.  
  13. def Insert(Module, NewNode, ModuleType):
  14. if ModuleType == 0:#Complete
  15. if Agree(NewNode,Module):
  16. Module.add_node(NewNode)
  17. for node in Module.nodes():
  18. Module.add_edge(node, NewNode)
  19. #MD=Module
  20. elif SameColor(NewNode,Module):#NewNode does not distinguish the elements of the module
  21. NewModule = nx.Graph(ModuleType="0")#ModuleType = Complete
  22. NewModule.add_node(NewNode)
  23. NewModule.add_node(Module)
  24. Nodes = Module.nodes()
  25. NewModule.add_edge(Module,NewNode,,color[(Nodes[0],NewNode)])
  26. #MD=NewModule
  27. else:#NewNode distinguishes the elements of the module
  28. if len(SomeAgreeColors)=!0:#Some edges have internalcolor
  29. NewModuleSameEdges = nx.Graph()#ModuleType = Complete
  30. NewModuleSameEdges.add_nodes(SomeAgreeColors)
  31. NewModuleSameEdges.add_edges()
  32. Module.remove_nodes_from(SomeAgreeColors)
  33. #Module.remove_edges_from()
  34. m = Insert(Module,NewNode,0)#0 Module is complete
  35. NewModule = nx.Graph()#ModuleType = Complete
  36. NewModule.add_node(NewModuleSameEdges)
  37. NewModule.add_node(m)
  38. NewModule.add_edge(m,NewModuleSameEdges,color[(SameAgreeColors[0],NewNode)])
  39. #MD=NewModule
  40. else:
  41. Module.add_node(NewNode)
  42. CND=ColorsNotDefined(Node,Module)
  43. for node in Module.nodes():
  44. if node not in CND[1]:
  45. Module.add_edge(node,NewNode,color[(node,NewNode)])
  46. else:
  47. FindColor(NewNode,node)#****lista de nodos con su respectivo color hacia NewNode*****
  48. else: #Primitive
  49. if SameColor(NewNode,Module):
  50. NewModule = nx.Graph(ModuleType="0")#ModuleType = Complete
  51. NewModule.add_node(NewNode)
  52. NewModule.add_node(Module)
  53. Nodes = Module.nodes()
  54. NewModule.add_edge(Module,NewNode,,color[(Nodes[0],NewNode)])
  55. #MD=NewModule
  56. else:
  57. CND=ColorsNotDefined(NewNode,Module)
  58. if not CND[0]:#All color nodes are defined
  59. MW = ModuleWith(NewNode,Module)
  60. if MW[0]:#Hace clan con uno
  61. Module.remove_node(MW[1])
  62. m = Insert(MW[1],NewNode,)#tipo de MW[1]
  63. Module.add_node(m)
  64. for node in Module.nodes():
  65. Module.add_edge(node,m,color[(node,NewNode)])
  66. else:#no hay nodo con el que haga clan
  67. Module.add_node(NewNode)
  68. for node in Module.nodes():
  69. Module.add_edge(node,NewNode,color[(node,NewNode)])
  70. else:
  71. if len(CND[1])==1:
  72. MW = ModuleWith(NewNode,CND[1])
  73. if MW[0]:#Hace clan con este
  74. Module.remove_node(MW[1])#tipo de MW[1]
  75. m = Insert(MW[1],NewNode,)
  76. Module.add_node(m)
  77. for node in Module.nodes():
  78. Module.add_edge(node,m,color[(node,NewNode)])
  79. else:#Sino es clan con el no definido, no es clan de ninguno.
  80. Module.add_node(NewNode)
  81. for node in Module.nodes():
  82. if node not in MW[1] :
  83. Module.add_edge(node,NewNode,color[(node,NewNode)])
  84. else:
  85. FindColor(NewNode,node)#lista de nodos con su respectivo color hacia NewNode
  86. else:
  87. Module.add_node(NewNode)
  88. for node in Module.nodes():
  89. if node not in CND[1]:
  90. Module.add_edge(node,NewNode,color[(node,NewNode)])
  91. else:
  92. FindColor(NewNode,node)#lista de nodos con su respectivo color hacia NewNode
  93.  
  94.  
  95.  
  96. def Agree(Node,Module): #el nuevo nodo no distingue a los elementos de Module y comparten color con Module, incluye el tener un solo nodo, y dos
  97. AreAgree = False
  98. Nodes = Module.nodes()
  99. if len(Nodes)<2:
  100. AreAgree = True
  101. elif SameColor(Node, Module) and color[(Node,Nodes[0])] == color[(Nodes[0],Nodes[1])]:
  102. AreAgree True
  103. return AreAgree
  104.  
  105. def SameColor(Node, Module): #el nuevo nodo no distingue a los elementos de Module
  106. Nodes= Module.nodes()
  107. InitialColor=color[(Node,Nodes[0])]
  108. SColor=True
  109. i=0
  110. while i< len(Nodes) and SColor:
  111. if InitialColor!= color[(Nodes[i],Node)]:
  112. SColor=False
  113. else:
  114. i+=1
  115. return SColor
  116.  
  117. def ModuleWith(Node,Module): #SomeNode puede ser un modulo
  118. Nodes=Module.nodes()
  119. i=0
  120. ModuleFound= False
  121.  
  122. while not ModuleFound and i<len(Module):
  123. ActNode = Nodes[i]
  124. same=True
  125. j=0
  126. while same==True and j <len(Nodes):
  127. if i!=j:
  128. if color[(Nodes[j],Nodes[i])]==color[(Nodes[j],Node)]:
  129. j+=1
  130. else:
  131. same = False
  132. else:
  133. j+=1
  134. if same==False:
  135. i+=1
  136. elif j == len(Nodes):
  137. ModuleFound=True
  138. return ModuleFound, Nodes[i] #True/False,SomeNode
  139.  
  140. def SomeAgreeColors(NewNode,Module):
  141. NodesWithAgreeColors=[]
  142. return NodesWithAgreeColors
  143.  
  144. def ColorsNotDefined(NewNode,Module): #True if there are colors not defined, False if there are not, Also returns a list of nodes that have not edge defined color
  145. NotSeen=[]
  146. if NewNode:
  147. return True,NotSeen
  148. else:
  149.  
  150. return False,NotSeen
  151.  
  152. def ReturnColors(NewNode,SubModule):
Add Comment
Please, Sign In to add comment