from fpylll import * import copy # документация https://readthedocs.org/projects/fpylll/downloads/pdf/latest/ """ A = IntegerMatrix.random(30, "qary", k=15, bits=30) #базисные вектора - строки print(A) dim = A.nrows print('dimension:', dim) M = GSO.Mat(A, float_type="d") #float_type \in {'d', 'dd', 'qd','mpfr'} print(M.get_r(0,0)) #R[0,0] print(M.d) # размерность решетки #print(M.B) # текущий базис решетки M.update_gso() # вычислить все интересные матрицы (Грам-Шмидт ортогонализацию, mu, ...) print(M.get_r(0,0)) print(A[0].norm()**2) # норма первого вектра в базисе print('before:', [M.get_r(i,i) for i in range(dim)]) # выдать все r_ii L = LLL.Reduction(M, delta=0.99, eta=0.501) # создание объекта LLL L() # запуск LLL редукции __call__ print('after:', [M.get_r(i,i) for i in range(dim)]) print(A) """ A = IntegerMatrix.random(100, "qary", k=50, bits=30) dim = A.nrows Ac = copy.deepcopy(A) # копия A U = IntegerMatrix.identity(dim) UinvT = IntegerMatrix.identity(dim) M_transf = GSO.Mat(Ac, float_type="d", U = U, UinvT = UinvT) #U -- матрица преобразования от A к LLL-редцуцированному Ac print(M_transf.inverse_transform_enabled) # LLL вычисляет в процессе U L = LLL.Reduction(M_transf, delta=0.99, eta=0.501) L() print(A[0]) print(Ac[0]) print((U*A)[0])