def test(a,loud): global t__ntl,t_mine b=abs( a.determinant() ) if b<2 or b>=2**64: print 'bad determinant, internal error' sys.exit(1) t=ntl_HNF_mirror(a) if loud: print 'a=\n',a # benchmark t0=time.time() nmod_r=flint.fmpz_mat_hermite_form( flint.fmpz_mat( a ), b ) t1=time.time() t=t.HNF(b) t2=time.time() # convert result nmod_r=nmod_r.export_sage() if loud: print 'hnf(a)=\n',nmod_r t = ntl_HNF_unmirror( t ) if nmod_r != t: print 'bad result: ntl\n',t sys.exit(1) # update time t__ntl += t2-t1 t_mine += t1-t0
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)
def reimplement_small_det_HNF(W, g): # instead of W._hnf_mod(2*g) if g==1: r=sage.all.identity_matrix(ZZ, W.nrows()) else: r=flint.fmpz_mat_hermite_form( fmpz_mat( W ), Integer(g) ) return r
def test_with( W, g ): global t_sage,t_mine t0=time.time() sage = W._hnf_mod(2*g) t_sage += time.time()-t0 for i in range(3): t1=time.time() r=flint.fmpz_mat_hermite_form( flint.fmpz_mat( W ), g*(i+1) ) t_mine[i] += time.time()-t1 if( r.export_sage() != sage ): print 'result incorrect, g=%s mult=%s\n' % (g,i+1) print W.str() print '\n',sage.str() print '\n',r.export_sage().str() sys.exit(1)
def test(a,loud): b=abs( a.determinant() ) if b<2 or b>=2**63: print 'bad determinant, internal error' sys.exit(1) sage_r=a.hermite_form() for mult in 1,2: if loud: print '\n\n\n' test_dump(a,sage_r) print '\n\n' nmod_r=flint.fmpz_mat_hermite_form( flint.fmpz_mat( a ), b*mult ) if nmod_r != flint.fmpz_mat( sage_r ): if not loud: test_dump(a,sage_r) print 'mult=',mult nmod_r=nmod_r.export_sage() print 'nmod result:\n',nmod_r det_sage=mult_diag(sage_r) det_nmod=mult_diag(nmod_r) print 'b=%X det_sage=%X det_nmod=%X' % (b,det_sage,det_nmod) sys.exit(1)