Advertisement
Guest User

Untitled

a guest
Dec 6th, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. import time
  2. import numpy as np
  3. import sys
  4.  
  5. def main():
  6. t0 = time.time()
  7. vlans, requests = load_files()
  8. total = len(requests)
  9. no_redundancy = len(requests[requests[:,1] == 0])
  10. with_redundancy = total - no_redundancy
  11. output_rows = no_redundancy + with_redundancy * 2
  12. out = [np.zeros(output_rows, dtype=int) for i in range(4)]
  13.  
  14. by_vlan_id = np.sort(vlans.view('int, int, int'), kind='mergesort', order=['f2', 'f0'], axis=0)
  15.  
  16. no_red_start = 0
  17. with_red_start = 0
  18. idx = 0
  19. t1 = time.time()
  20. for req in requests:
  21. if req[1]:
  22. dev_id, vlan_id, with_red_start = next_with_redundancy(by_vlan_id, with_red_start)
  23. out[0][idx:idx+2] = req[0]
  24. out[1][idx:idx+2] = dev_id
  25. out[3][idx:idx+2] = vlan_id
  26. out[2][idx] = 0
  27. out[2][idx+1] = 1
  28. idx += 2
  29. else:
  30. dev_id, vlan_id, no_red_start = next_no_redundancy(by_vlan_id, no_red_start)
  31. out[0][idx] = req[0]
  32. out[1][idx] = dev_id
  33. out[2][idx] = 1
  34. out[3][idx] = vlan_id
  35. idx += 1
  36. t2 = time.time()
  37.  
  38. np.savetxt('output_np2.csv', np.array(out).transpose(), fmt="%d", delimiter=",", newline="\n", header='request_id,device_id,primary_port,vlan_id', comments="")
  39. t3 = time.time()
  40. print("%.2fsec: reading: %dms, processing: %dms, writing: %dms" % (
  41. t3 - t0, (t1 - t0) * 1000, (t2 - t1) * 1000, (t3 - t2) * 1000))
  42.  
  43. def next_no_redundancy(vlan_info, start):
  44. for idx, info in enumerate(vlan_info[start:]):
  45. info = info[0]
  46. if not info[2]:
  47. continue
  48. if info[1]:
  49. dev_id = info[0]
  50. vlan_id = info[2]
  51. vlan_info[start + idx] = b'\x00'
  52. return dev_id, vlan_id, start + idx + 1
  53. raise ValueError("No free devices for a no-redundancy request! Need more moneyz!")
  54.  
  55. def next_with_redundancy(vlan_info, start):
  56. dev_id, vlan_id, primary, secondary = None, None, None, None
  57. for idx, info in enumerate(vlan_info[start:]):
  58. info = info[0]
  59. if not info[2]:
  60. continue
  61. if dev_id is None or info[0] != dev_id or not vlan_id or info[2] != vlan_id:
  62. dev_id = info[0]
  63. vlan_id = info[2]
  64. primary, secondary = None, None
  65. if info[1]:
  66. primary = start + idx
  67. else:
  68. secondary = start + idx
  69. if primary is not None and secondary is not None:
  70. vlan_info[primary] = b'\x00'
  71. vlan_info[secondary] = b'\x00'
  72. return dev_id, vlan_id, start + idx + 1
  73. raise ValueError("No free devices for a request with redundancy! Need funding!")
  74.  
  75. def load_files():
  76. vlans = np.loadtxt(open('vlans.csv', 'rb'), delimiter=",", skiprows=1, dtype=int)
  77. requests = np.loadtxt(open('requests.csv', 'rb'), delimiter=",", skiprows=1, dtype=int)
  78. return vlans, requests
  79.  
  80. if __name__ == "__main__":
  81. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement