def test_serie_2(be,A,det_div): dim=A.ncols() for d in det_div: assert 1<d and d <= max_det_divisor Ff=flint.fmpz_mat_hermite_form_nonsquare( fmpz_mat(A), d ) F=Ff.export_sage() t2=time.time() rS0=sage_0( F ) t3=time.time() rF0=flint_0( Ff ) t4=time.time() # calling flint_sage method A before B makes method A appear to run slower, at # least for small dim. Calling fmpz_triU_small_det_inverse() first, to give # FLINT subroutine fmpz_mat_inv() a handicap rM0=mine_0( Ff ) t5=time.time() rF1=flint_1( Ff ) t6=time.time() be[-1] += 1 be[0] += t3-t2 be[1] += t4-t3 be[3] += t5-t4 be[2] += t6-t5 Si=identity_matrix(dim) assert rS0[0]*rS0[1] == Si assert multiply_test_fmpz_fmpq( rF0[0], rF0[1], dim ) # den must divide determinant trace_F = trace(F) assert 0 == trace_F % rF1[2] assert multiply_test_fmpz_fmpz_den( rF1, Si ) assert 0 == trace_F % rM0[2] assert multiply_test_fmpz_fmpz_den( rM0, Si )
def test_serie_2(be, A, det_div): dim = A.ncols() for d in det_div: assert 1 < d and d <= max_det_divisor Ff = flint.fmpz_mat_hermite_form_nonsquare(fmpz_mat(A), d) F = Ff.export_sage() t2 = time.time() rS0 = sage_0(F) t3 = time.time() rF0 = flint_0(Ff) t4 = time.time() rF1 = flint_1(Ff) t5 = time.time() # print 'A sou=\n',F # print 'A =\n',rF1[0].export_sage() be[-1] += 1 be[0] += t3 - t2 be[1] += t4 - t3 be[2] += t5 - t4 Si = identity_matrix(dim) assert rS0[0] * rS0[1] == Si assert multiply_test_fmpz_fmpq(rF0[0], rF0[1], dim) # FLINT documentation on mpz_mat_inv() says den must divide determinant assert 0 == trace(F) % rF1[2] assert multiply_test_fmpz_fmpz_den(rF1, Si)