Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.97 KB | None | 0 0
  1. import numpy as np
  2. import sys
  3. import scipy.linalg
  4. import sympy
  5.  
  6. ###INPUT
  7.  
  8. # c = 0
  9. # for number, line in enumerate(sys.stdin):
  10. #     if number == 0:
  11. #         q = line.split(' ')[1]
  12. #     if number == 1:
  13. #         type_mat = line
  14. #     if number > 1:
  15. #         if c == 0:
  16. #             line = line.split('\n')[0]
  17. #             matrix = list(map(int, line))
  18. #             matrix = np.mat(matrix)
  19. #             c += 1
  20. #         else:
  21. #             line = line.split('\n')[0]
  22. #             line_mat = list(map(int, line))
  23. #             matrix = np.vstack((matrix, line_mat))
  24.        
  25. def gjel(A, p):
  26.     """Gauss-Jordan elimination."""
  27.     nulldim = 0
  28.     for i, row1 in enumerate(A):
  29.         pivot = A[i:, i].argmax() + i
  30.         if A[pivot, i] == 0:
  31.             nulldim = (len(A) - i) % p #####
  32.             break
  33.         new_row = (A[pivot] * A[pivot, i]) % p #####
  34.         A[pivot] = A[i]
  35.         row1[:] = new_row
  36.        
  37.         for j, row2 in enumerate(A):
  38.             if j == i:
  39.                 continue
  40.             row2[:] = (row2[:] - new_row*A[j, i]) % p ####
  41.     return A, nulldim
  42.  
  43. def transforms(matrix, field):
  44.     k, n = matrix.shape
  45.     matrix = gjel(matrix, p=field)[0]
  46.     new_matrix = np.hstack((-matrix[:,k:].T, np.diag([1]*(n-k))) ) % field
  47.    
  48.     return new_matrix
  49.  
  50. q = int(q)
  51.  
  52.  
  53. if type_mat.split(' ')[0] == 'parity':
  54.     H = matrix
  55.     G = transforms(matrix=matrix, field=q)
  56.     d = len(sympy.Matrix(H).T.rref()[1])
  57.     print('distance: ' + str(d))
  58.     print('generator matrix:')
  59.     for strng in range(G.shape[0]):
  60.         print(''.join([str(i) for i in np.array(G[strng]).flatten()]))
  61.    
  62.    
  63.    
  64. if type_mat.split(' ')[0] == 'generator':
  65.     G = matrix
  66.     H = transforms(matrix=matrix, field=q)
  67.     d = len(sympy.Matrix(H).T.rref()[1])
  68.     print('distance: ' + str(d))
  69.     print('parity check matrix:')    
  70.     for strng in range(H.shape[0]):
  71.         print(''.join([str(i) for i in np.array(H[strng]).flatten()]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement