Advertisement
Guest User

Untitled

a guest
Dec 7th, 2017
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.60 KB | None | 0 0
  1. import numpy as np
  2. from time import time
  3.  
  4.  
  5. # main logic function
  6. def main(result_file = 'test_output.csv', vlan_file = 'vlans.csv', requests_file = 'requests.csv'):
  7.     # get files: with vlans data and requests data
  8.     vlan_csv, requests_csv = read_data(vlan_file, requests_file)
  9.  
  10.     sorted_by_vlan_id = np.sort(vlan_csv.view('int, int, int'), kind='mergesort', order=['f2', 'f0'], axis=0)
  11.     # maximum number of elements
  12.     output_rows = len(requests_csv[requests_csv.transpose()[1] == 0]) + len(requests_csv[requests_csv.transpose()[1] == 1]) * 2
  13.     # create zero-dataframe
  14.     out_data = [np.zeros(output_rows, dtype=int) for i in range(4)]
  15.  
  16.     # index for slice
  17.     no_redundancy_start = 0
  18.     with_redundancy_start = 0
  19.     idx = 0
  20.  
  21.     for request_data in requests_csv:
  22.         # processing of non redundant requests
  23.         if not request_data[1]:
  24.             for index, element in enumerate(sorted_by_vlan_id[no_redundancy_start:]):
  25.                 element = element[0]
  26.                 if not element[2]:
  27.                     continue
  28.                 elif element[1]:
  29.                     # adding data in array
  30.                     out_data[0][idx] = request_data[0]
  31.                     out_data[1][idx] = element[0]
  32.                     out_data[2][idx] = 1
  33.                     out_data[3][idx] = element[2]
  34.  
  35.                     # drop data
  36.                     sorted_by_vlan_id[index + no_redundancy_start] = b'\x00'
  37.  
  38.                     no_redundancy_start = index + no_redundancy_start + 1
  39.                     break
  40.  
  41.         # processing of redundant requests
  42.         elif request_data[1]:
  43.             # params where we save data about pair elements
  44.             device_id, vlan_id, primary, secondary = None, None, None, None
  45.  
  46.             for index, element in enumerate(sorted_by_vlan_id[with_redundancy_start:]):
  47.                 element = element[0]
  48.                 if not element[2]:
  49.                     continue
  50.                 if not device_id or element[0] != device_id or not vlan_id or element[2]!= vlan_id:
  51.                     # update params
  52.                     device_id = element[0]
  53.                     vlan_id = element[2]
  54.                 if element[1]:
  55.                     primary = index + with_redundancy_start
  56.                 else:
  57.                     secondary = index + with_redundancy_start
  58.  
  59.                 if primary is not None and secondary is not None:
  60.                     # drop data
  61.                     sorted_by_vlan_id[primary] = b'\x00'
  62.                     sorted_by_vlan_id[secondary] = b'\x00'
  63.  
  64.                     # adding data in array
  65.                     out_data[0][idx:idx + 2] = request_data[0]
  66.                     out_data[1][idx:idx + 2] = device_id
  67.                     out_data[3][idx:idx + 2] = vlan_id
  68.                     out_data[2][idx] = 0
  69.                     out_data[2][idx + 1] = 1
  70.  
  71.                     with_redundancy_start = index + with_redundancy_start + 1
  72.                     break
  73.             idx += 1
  74.         idx += 1
  75.  
  76.     np.savetxt(result_file, np.array(out_data).transpose(), fmt="%d", delimiter=",", newline="\n",
  77.                header='request_id,device_id,primary_port,vlan_id', comments="")
  78.  
  79.  
  80. # reading data from files and cleaning it
  81. def read_data(vlan_file, requests_file):
  82.     vlans = np.loadtxt(open(vlan_file, 'rb'), delimiter=",", skiprows=1, dtype=int)
  83.     requests = np.loadtxt(open(requests_file, 'rb'), delimiter=",", skiprows=1, dtype=int)
  84.  
  85.     return vlans, requests
  86.  
  87. if __name__ == '__main__':
  88.     for i in range(10):
  89.  
  90.         tic = time()
  91.         main()
  92.         tac = time()
  93.         print(tac-tic)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement