[BACK]Return to ntl.rr CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_ntl

Diff for /OpenXM/src/ox_ntl/ntl.rr between version 1.1 and 1.4

version 1.1, 2003/11/03 03:11:21 version 1.4, 2008/09/19 10:55:40
Line 1 
Line 1 
 /* $OpenXM$ */  /* $OpenXM: OpenXM/src/ox_ntl/ntl.rr,v 1.3 2003/11/25 13:48:50 iwane Exp $ */
   
 module ntl;  module ntl;
 localf factor$  localf factor$
   localf lll$
 localf ex_data$  localf ex_data$
 localf ex_data_tmp$  localf ex_data_tmp$
   localf mat2list$
   localf list2mat$
   
   
 /* static variables */  /* static variables */
Line 11  localf ex_data_tmp$
Line 14  localf ex_data_tmp$
 /* extern variables */  /* extern variables */
   
 #if 1  #if 1
 localf test$  localf test_factor$
   localf test_lll$
   
 /*&usage begin: ntl.test(PID, POLY)  /*&usage begin: ntl.test_factor(PID, POLY)
  compare on ox_NTL and on asir.   compare on ox_NTL and on asir.
   
 example:  example:
   [1027] PID=ox_launch(ox_ntl);
 [1028] F=ntl.ex_data(4);  [1028] F=ntl.ex_data(4);
 x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-7453176*x^6+13950764*x^4-5596840*x^2+46225  x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-7453176*x^6+13950764*x^4-5596840*x^2+46225
 [1029] F = F * subst(F, x, x + 1)$  [1029] F = F * subst(F, x, x + 1)$
Line 25  x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-745317
Line 30  x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-745317
 [1031] ntl.test(PID, F);  [1031] ntl.test(PID, F);
 [CPU,0.121539,0.001354,GC,0.0222,0]  [CPU,0.121539,0.001354,GC,0.0222,0]
   
   
 end: */  end: */
 def test(PID, F)  def test_factor(PID, F)
 {  {
         T0 = time();          T0 = time();
         fctr(F);          fctr(F);
Line 38  def test(PID, F)
Line 42  def test(PID, F)
         return (["CPU", T1[0]-T0[0],T2[0]-T1[0],"GC",T1[1]-T0[1],T2[1]-T1[1]]);          return (["CPU", T1[0]-T0[0],T2[0]-T1[0],"GC",T1[1]-T0[1],T2[1]-T1[1]]);
 }  }
   
   def test_lll(PID, F)
   {
           T0 = time();
           pari(lllint, F);
           T1 = time();
           ntl.lll(PID, F);
           T2 = time();
   
           return (["CPU", T1[0]-T0[0],T2[0]-T1[0],"GC",T1[1]-T0[1],T2[1]-T1[1]]);
   }
   
 #endif  #endif
   
 /*&usage begin: ntl.factor(PID, POLY)  /*&usage begin: ntl.factor(PID, POLY)
Line 104  def factor(PID, POLY)
Line 119  def factor(PID, POLY)
   
         /* ERROR Check */          /* ERROR Check */
         if (type(RET_NTL) != 4 || length(RET_NTL) < 2) {          if (type(RET_NTL) != 4 || length(RET_NTL) < 2) {
                 error(RET_NTL);                  return (RET_NTL);
         }          }
   
         RET = cons([RET_NTL[0] * C, 1], RET_NTL[1]);          RET = cons([RET_NTL[0] * C, 1], RET_NTL[1]);
Line 160  def ex_data(N)
Line 175  def ex_data(N)
         }          }
   
         return (ex_data_tmp(t^2-p, N));          return (ex_data_tmp(t^2-p, N));
   }
   
   
   def mat2list(M)
   {
           A = size(M);
   
           ROW=A[0];
           COL=A[1];
   
           for (I = 0; I < ROW; I++) {
                   for (J = 0; J < COL; J++) {
                           A = append(A, [M[I][J]]);
                   }
           }
   
           return (A);
   }
   
   def list2mat(L)
   {
           if (type(L) != 4) {
                   return ("Invalid Argument");
           }
   
           ROW = L[0];
           if (type(ROW) == 10)
                   ROW = int32ton(ROW);
           COL = L[1];
           if (type(COL) == 10)
                   COL = int32ton(COL);
   
           A = newmat(ROW, COL);
   
           C = 2;
           for (I = 0; I < ROW; I++) {
                   for (J = 0; J < COL; J++) {
                           A[I][J] = L[C];
                           C++;
                   }
           }
   
   
           return (A);
   }
   
   
   
   /*&usage begin: ntl.lll(PID, MAT)
     the basics of LLL reducation.
   
   {M}
           Matrix which element is Integer.
   
   example:
   [1046] def trans(M) {
     RET = newmat(size(M)[1], size(M)[0]);
       for (I = 0; I < size(M)[0]; I++)
         for (J = 0; J < size(M)[1]; J++)
           RET[J][I] = M[I][J];
     return (RET);
   }
   [1047] def lllpari(A) {
     return (trans(trans(A) * pari(lllint, trans(A))));
   }
   [1048] M=newmat(3, 3, [[10,0, 10], [-7,3, 30], [7, 3, 20]]);
   [ 10 0 10 ]
   [ -7 3 30 ]
   [ 7 3 20 ]
   [1049] ntl.lll(PID, M);
   [ 2 -6 0 ]
   [ -1 -3 10 ]
   [ 11 3 0 ]
   [1050] lllpari(M);
   [ 2 -6 0 ]
   [ -1 -3 10 ]
   [ 11 3 0 ]
   
   
   ref:
   pari(lll)
   
   end: */
   def lll(PID, M)
   {
           /* parameter check */
           TYPE = type(M);
           if (TYPE != 6) {        /* matrix */
                   MES = "ntl.lll: invalid argument: " + TYPE;
                   error(MES);
           }
   
           A = mat2list(M);
   
           ox_cmo_rpc(PID, "lll", A);
   
           RET_NTL = ox_pop_cmo(PID);
   
           /* return value check */
           if (type(RET_NTL) != 4) { /* list */
                   error("ntl.lll: error");
           }
   
           R = list2mat(RET_NTL);
   
           return (R);
 }  }
   
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.4

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>