[BACK]Return to gr.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/gr.c between version 1.17 and 1.23

version 1.17, 2000/12/11 02:00:40 version 1.23, 2001/09/05 08:09:10
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.16 2000/12/08 06:43:09 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.22 2001/09/05 01:57:32 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 106  DP_pairs criterion_B(DP_pairs,int);
Line 106  DP_pairs criterion_B(DP_pairs,int);
 DP_pairs newpairs(NODE,int);  DP_pairs newpairs(NODE,int);
 DP_pairs updpairs(DP_pairs,NODE,int);  DP_pairs updpairs(DP_pairs,NODE,int);
 void _dp_nf(NODE,DP,DP *,int,DP *);  void _dp_nf(NODE,DP,DP *,int,DP *);
 void _dp_nf_ptozp(NODE,DP,DP *,int,int,DP *);  void _dp_nf_z(NODE,DP,DP *,int,int,DP *);
 NODE gb_mod(NODE,int);  NODE gb_mod(NODE,int);
 NODE gbd(NODE,int,NODE,NODE);  NODE gbd(NODE,int,NODE,NODE);
 NODE gb(NODE,int,NODE);  NODE gb(NODE,int,NODE);
Line 135  void pltovl(LIST,VL *);
Line 135  void pltovl(LIST,VL *);
 void printdl(DL);  void printdl(DL);
 int DPPlength(DP_pairs);  int DPPlength(DP_pairs);
 void dp_gr_mod_main(LIST,LIST,Num,int,struct order_spec *,LIST *);  void dp_gr_mod_main(LIST,LIST,Num,int,struct order_spec *,LIST *);
 void dp_gr_main(LIST,LIST,Num,int,struct order_spec *,LIST *);  void dp_gr_main(LIST,LIST,Num,int,int,struct order_spec *,LIST *);
 void dp_f4_main(LIST,LIST,struct order_spec *,LIST *);  void dp_f4_main(LIST,LIST,struct order_spec *,LIST *);
 void dp_f4_mod_main(LIST,LIST,int,struct order_spec *,LIST *);  void dp_f4_mod_main(LIST,LIST,int,struct order_spec *,LIST *);
 double get_rtime();  double get_rtime();
Line 180  static int PtozpRA = 0;
Line 180  static int PtozpRA = 0;
   
 int doing_f4;  int doing_f4;
 NODE TraceList;  NODE TraceList;
   NODE AllTraceList;
   
 int eqdl(nv,dl1,dl2)  int eqdl(nv,dl1,dl2)
 int nv;  int nv;
Line 257  NODE f;
Line 258  NODE f;
         printf("\n");          printf("\n");
 }  }
   
 void dp_gr_main(f,v,homo,modular,ord,rp)  void dp_gr_main(f,v,homo,modular,field,ord,rp)
 LIST f,v;  LIST f,v;
 Num homo;  Num homo;
 int modular;  int modular,field;
 struct order_spec *ord;  struct order_spec *ord;
 LIST *rp;  LIST *rp;
 {  {
         int i,mindex,m,nochk;          int i,mindex,m,nochk;
         struct order_spec ord1;          struct order_spec ord1;
           Q q;
         VL fv,vv,vc;          VL fv,vv,vc;
         NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx;          NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx;
           NODE ind,ind0;
           LIST trace,gbindex;
   
         mindex = 0; nochk = 0; dp_fcoeffs = 0;          mindex = 0; nochk = 0; dp_fcoeffs = field;
         get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc);          get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc);
         NVars = length((NODE)vv); PCoeffs = vc ? 1 : 0; VC = vc;          NVars = length((NODE)vv); PCoeffs = vc ? 1 : 0; VC = vc;
         CNVars = homo ? NVars+1 : NVars;          CNVars = homo ? NVars+1 : NVars;
Line 296  LIST *rp;
Line 300  LIST *rp;
                 modular = -modular; nochk = 1;                  modular = -modular; nochk = 1;
         }          }
         if ( modular )          if ( modular )
                 m = modular > 1 ? modular : lprime[mindex];                  m = modular > 1 ? modular : get_lprime(mindex);
         else          else
                 m = 0;                  m = 0;
         makesubst(vc,&subst);          makesubst(vc,&subst);
Line 326  LIST *rp;
Line 330  LIST *rp;
                         if ( modular > 1 ) {                          if ( modular > 1 ) {
                                 *rp = 0; return;                                  *rp = 0; return;
                         } else                          } else
                                 m = lprime[++mindex];                                  m = get_lprime(++mindex);
                 makesubst(vc,&subst);                  makesubst(vc,&subst);
                 psn = length(s);                  psn = length(s);
                 for ( i = psn; i < pslen; i++ ) {                  for ( i = psn; i < pslen; i++ ) {
                         pss[i] = 0; psh[i] = 0; psc[i] = 0; ps[i] = 0;                          pss[i] = 0; psh[i] = 0; psc[i] = 0; ps[i] = 0;
                 }                  }
         }          }
         for ( r0 = 0; x; x = NEXT(x) ) {          for ( r0 = 0, ind0 = 0; x; x = NEXT(x) ) {
                 NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]);                  NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]);
                 dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r));                  dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r));
                   NEXTNODE(ind0,ind);
                   STOQ((int)BDY(x),q); BDY(ind) = q;
         }          }
         if ( r0 ) NEXT(r) = 0;          if ( r0 ) NEXT(r) = 0;
           if ( ind0 ) NEXT(ind) = 0;
         MKLIST(*rp,r0);          MKLIST(*rp,r0);
           MKLIST(gbindex,ind0);
   
           if ( GenTrace && OXCheck < 0 ) {
   
                   x = AllTraceList;
                   for ( r = 0; x; x = NEXT(x) ) {
                           MKNODE(r0,BDY(x),r); r = r0;
                   }
                   MKLIST(trace,r);
                   r0 = mknode(3,*rp,gbindex,trace);
                   MKLIST(*rp,r0);
           }
         print_stat();          print_stat();
         if ( ShowMag )          if ( ShowMag )
                 fprintf(asir_out,"\nMax_mag=%d\n",Max_mag);                  fprintf(asir_out,"\nMax_mag=%d\n",Max_mag);
Line 920  int m;
Line 939  int m;
                 pss[i] = ps[i]->sugar;                  pss[i] = ps[i]->sugar;
                 psc[i] = BDY(ps[i])->c;                  psc[i] = BDY(ps[i])->c;
         }          }
         if ( GenTrace && (OXCheck >= 0) ) {          if ( GenTrace ) {
                 Q q;                  Q q;
                 STRING fname;                  STRING fname;
                 LIST input;                  LIST input;
                 NODE arg;                  NODE arg,t,t1;
                 Obj dmy;                  Obj dmy;
   
                   t = 0;
                   for ( i = psn-1; i >= 0; i-- ) {
                           MKNODE(t1,ps[i],t);
                           t = t1;
                   }
                   MKLIST(input,t);
   
                 STOQ(OXCheck,q);                  if ( OXCheck >= 0 ) {
                 MKSTR(fname,"register_input");                          STOQ(OXCheck,q);
                 MKLIST(input,f0);                          MKSTR(fname,"register_input");
                 arg = mknode(3,q,fname,input);                          arg = mknode(3,q,fname,input);
                 Pox_cmo_rpc(arg,&dmy);                          Pox_cmo_rpc(arg,&dmy);
                   } else if ( OXCheck < 0 ) {
                           MKNODE(AllTraceList,input,0);
                   }
         }          }
         for ( s0 = 0, i = 0; i < psn; i++ ) {          for ( s0 = 0, i = 0; i < psn; i++ ) {
                 NEXTNODE(s0,s); BDY(s) = (pointer)i;                  NEXTNODE(s0,s); BDY(s) = (pointer)i;
Line 959  int m;
Line 988  int m;
                 else                  else
                         dp_ptozp(f,r);                          dp_ptozp(f,r);
                 if ( GenTrace && TraceList ) {                  if ( GenTrace && TraceList ) {
                           /* adust the denominator according to the final
                              content reduction */
                         divsp(CO,BDY(f)->c,BDY(*r)->c,&d);                          divsp(CO,BDY(f)->c,BDY(*r)->c,&d);
                         mulp(CO,(P)ARG3(BDY((LIST)BDY(TraceList))),d,&t);                          mulp(CO,(P)ARG3(BDY((LIST)BDY(TraceList))),d,&t);
                         ARG3(BDY((LIST)BDY(TraceList))) = t;                          ARG3(BDY((LIST)BDY(TraceList))) = t;
Line 1166  NODE subst;
Line 1197  NODE subst;
                 _dp_mod(a,m,subst,&psm[psn]);                  _dp_mod(a,m,subst,&psm[psn]);
         if ( GenTrace ) {          if ( GenTrace ) {
                 NODE tn,tr,tr1;                  NODE tn,tr,tr1;
                 LIST trace;                  LIST trace,trace1;
                   NODE arg;
                   Q q1,q2;
                   STRING fname;
                   Obj dmy;
   
                 /* reverse the TraceList */                  /* reverse the TraceList */
                 tn = TraceList;                  tn = TraceList;
Line 1175  NODE subst;
Line 1210  NODE subst;
                 }                  }
                 MKLIST(trace,tr);                  MKLIST(trace,tr);
                 if ( OXCheck >= 0 ) {                  if ( OXCheck >= 0 ) {
                         NODE arg;  
                         Q q1,q2;  
                         STRING fname;  
                         Obj dmy;  
   
                         STOQ(OXCheck,q1);                          STOQ(OXCheck,q1);
                         MKSTR(fname,"check_trace");                          MKSTR(fname,"check_trace");
                         STOQ(psn,q2);                          STOQ(psn,q2);
                         arg = mknode(5,q1,fname,a,q2,trace);                          arg = mknode(5,q1,fname,a,q2,trace);
                         Pox_cmo_rpc(arg,&dmy);                          Pox_cmo_rpc(arg,&dmy);
                   } else if ( OXCheck < 0 ) {
                           STOQ(psn,q1);
                           tn = mknode(2,q1,trace);
                           MKLIST(trace1,tn);
                           MKNODE(tr,trace1,AllTraceList);
                           AllTraceList = tr;
                 } else                  } else
                         dp_save(psn,(Obj)trace,"t");                          dp_save(psn,(Obj)trace,"t");
                 TraceList = 0;                  TraceList = 0;
Line 1416  NODE subst;
Line 1452  NODE subst;
                                 new_sugar = h->sugar;                                  new_sugar = h->sugar;
                         get_eg(&tnf0);                          get_eg(&tnf0);
                         t_0 = get_rtime();                          t_0 = get_rtime();
                         if ( PCoeffs )                          if ( PCoeffs || dp_fcoeffs )
                                 _dp_nf(gall,h,ps,!Top,&nf);                                  _dp_nf(gall,h,ps,!Top,&nf);
                         else                          else
                                 _dp_nf_ptozp(gall,h,ps,!Top,DP_Multiple,&nf);                                  _dp_nf_z(gall,h,ps,!Top,DP_Multiple,&nf);
                         if ( DP_Print )                          if ( DP_Print )
                                 fprintf(asir_out,"(%.3g)",get_rtime()-t_0);                                  fprintf(asir_out,"(%.3g)",get_rtime()-t_0);
                         get_eg(&tnf1); add_eg(&eg_nf,&tnf0,&tnf1);                          get_eg(&tnf1); add_eg(&eg_nf,&tnf0,&tnf1);
Line 1930  LIST *list;
Line 1966  LIST *list;
         STOQ(Reverse,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Reverse"); MKNODE(n1,name,n); n = n1;          STOQ(Reverse,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Reverse"); MKNODE(n1,name,n); n = n1;
         STOQ(Stat,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Stat"); MKNODE(n1,name,n); n = n1;          STOQ(Stat,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Stat"); MKNODE(n1,name,n); n = n1;
         STOQ(DP_Print,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Print"); MKNODE(n1,name,n); n = n1;          STOQ(DP_Print,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Print"); MKNODE(n1,name,n); n = n1;
           STOQ(DP_PrintShort,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"PrintShort"); MKNODE(n1,name,n); n = n1;
         STOQ(DP_NFStat,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"NFStat"); MKNODE(n1,name,n); n = n1;          STOQ(DP_NFStat,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"NFStat"); MKNODE(n1,name,n); n = n1;
         STOQ(OXCheck,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"OXCheck"); MKNODE(n1,name,n); n = n1;          STOQ(OXCheck,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"OXCheck"); MKNODE(n1,name,n); n = n1;
         STOQ(GenTrace,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"GenTrace"); MKNODE(n1,name,n); n = n1;          STOQ(GenTrace,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"GenTrace"); MKNODE(n1,name,n); n = n1;
Line 2107  DP *rp;
Line 2144  DP *rp;
         *rp = d;          *rp = d;
 }  }
   
 void _dp_nf_ptozp(b,g,ps,full,multiple,r)  void _dp_nf_z(b,g,ps,full,multiple,r)
 NODE b;  NODE b;
 DP g;  DP g;
 DP *ps;  DP *ps;

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.23

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