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() t0 = time.time() rY0 = sympy_0(F) t1 = time.time() rY1 = sympy_1(F) t2 = time.time() rS0 = sage_0(F) t3 = time.time() F._clear_cache() rS1 = sage_1(F) t4 = time.time() rF = flint_0(Ff) t5 = time.time() be[-1] += 1 be[0] += t1 - t0 be[1] += t2 - t1 be[2] += t3 - t2 be[3] += t4 - t3 be[4] += t5 - t4 Yi, Si = sympy.eye(dim), identity_matrix(dim) # print rY0[0],'\n*\n',rY0[1],'\n=\n',rY0[0]*rY0[1],'\n=?=\n',Yi assert rY0[0] * rY0[1] == Yi assert rY1[0] * rY1[1] == Yi assert rS0[0] * rS0[1] == Si assert rS1[0] * rS1[1] == Si assert multiply_test_fmpz_fmpq(rF[0], rF[1], dim)
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)
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(A,det_div,loud): H=hnf(A,include_zero_rows=0)[0] for d in det_div: assert 1<d and d <= max_det_divisor F=flint.fmpz_mat_hermite_form_nonsquare( fmpz_mat(A), d ) if loud: print '\n\n\n' test_dump(A, F.export_sage(), d) print '\n\n' err=0 if trace(F) != d: print 'Determinant of F is bad: %s != %s' % (trace(F),d) err=1 if not divides( F, H ): print 'F does not divide H' err=1 if err: if not loud: test_dump(A, F.export_sage(), d) print 'H=\n',H if A.nrows() == A.ncols(): x=trace(H) if x<2**64: Q=flint.fmpz_mat_hermite_form( fmpz_mat(A), x ).export_sage() print 'Q=\n',Q sys.exit(1)