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
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 5
0
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)