Guest User

Untitled

a guest
Jan 21st, 2016
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1.  
  2.  
  3. class DVRouting(object):
  4.  
  5. def __init__(self, list_of_nodes):
  6. self.list_of_nodes = list_of_nodes
  7. self.dvlist = [ [ None for x in range(len(self.list_of_nodes)) ] for y in range(len(self.list_of_nodes)) ]
  8. for x in range(len(self.list_of_nodes)):
  9. self.dvlist[x][x] = 0
  10.  
  11. def manufacturer(self):
  12. helper = self.list_of_nodes
  13. for i in self.list_of_nodes:
  14. for k in i:
  15. if i[k] <= 0:
  16. raise Exception('weight can\'t be negative ')
  17. if i[k] == 0:
  18. raise Exception('weight can\'t be zero')
  19. for i, v in enumerate(helper):
  20. for k in v:
  21. helper_dict = self.list_of_nodes[k]
  22. for key in helper_dict:
  23. if key == i:
  24. if v[k] != helper_dict[key]:
  25. raise Exception('weight can\'t be negative ')
  26.  
  27. return
  28.  
  29. def weight(self, x, y):
  30. if x == y:
  31. return 0
  32. if x > (len(self.list_of_nodes) - 1) or y > (len(self.list_of_nodes) - 1):
  33. return None
  34. if isinstance(self.list_of_nodes[x], dict) and isinstance(self.list_of_nodes[y], dict):
  35. node_x = self.list_of_nodes[x]
  36. node_y = self.list_of_nodes[y]
  37. if x not in node_y or y not in node_x:
  38. return None
  39. if node_x[y] == node_y[x]:
  40. return node_x[y]
  41. else:
  42. return None
  43. else:
  44. return None
  45.  
  46. def set(self,x, y, w):
  47.  
  48. try:
  49. node_x = self.list_of_nodes[x]
  50. node_y = self.list_of_nodes[y]
  51. except TypeError:
  52. raise Exception('Node don\'t exist')
  53. if w is None:
  54. node_y.pop(x)
  55. node_x.pop(y)
  56. if x < 0 or y < 0 or w < 0:
  57. raise Exception('Negative Value')
  58. if x == y:
  59. raise Exception('W is not 0')
  60. else:
  61. node_x[y] = w
  62. node_y[x] = w
  63. self.list_of_nodes[x] = node_x
  64. self.list_of_nodes[y] = node_y
  65. return self.list_of_nodes
  66.  
  67. def add(self):
  68. new_node = {}
  69. self.list_of_nodes.append(new_node)
  70. return self.list_of_nodes.index(new_node)
  71.  
  72. def remove(self, x):
  73. if 0 <= x < len(self.list_of_nodes) - 1:
  74. for node in self.list_of_nodes:
  75. if x in node:
  76. node.pop(x)
  77. self.list_of_nodes[x] = {}
  78. return
  79. else:
  80. return
  81.  
  82. def setdv(self, dvlist):
  83. return dvlist
  84.  
  85. def getdv(self, x):
  86. if self.list_of_nodes[x] not in self.list_of_nodes:
  87. return None
  88. else:
  89. dvlist = None
  90. node_x = self.list_of_nodes[x]
  91. for k in node_x:
  92. dvlist.append(node_x[k])
  93. return dvlist
  94.  
  95. def step(self):
  96. if self.isstable():
  97. return True
  98. else:
  99. return False
  100.  
  101. def isstable(self):
  102. for i in self.dvlist:
  103. if None not in i:
  104. return True
  105. else:
  106. return False
  107.  
  108. def compute(self):
  109. counter = 0
  110. while not self.isstable():
  111. self.step()
  112. counter += 1
  113. return counter
  114.  
  115. def route(self, x, y):
  116. while self.isstable() == False:
  117. # do steps
  118. # then compute
  119. return None
Advertisement
Add Comment
Please, Sign In to add comment