[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.67 and 1.73

version 1.67, 2011/06/16 08:17:14 version 1.73, 2017/08/31 02:36:20
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.66 2010/01/31 03:25:54 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.72 2016/08/08 07:18:10 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 53 
Line 53 
 #include "ox.h"  #include "ox.h"
   
 #if defined(__GNUC__)  #if defined(__GNUC__)
 #define INLINE inline  #define INLINE static inline
 #elif defined(VISUAL)  #elif defined(VISUAL) || defined(__MINGW32__)
 #define INLINE __inline  #define INLINE __inline
 #else  #else
 #define INLINE  #define INLINE
 #endif  #endif
   
 #define HMAG(p) (p_mag(BDY(p)->c))  #define HMAG(p) (p_mag((P)BDY(p)->c))
   
 #define NEWDP_pairs ((DP_pairs)MALLOC(sizeof(struct dp_pairs)))  #define NEWDP_pairs ((DP_pairs)MALLOC(sizeof(struct dp_pairs)))
   
Line 98  int GenTrace = 0;
Line 98  int GenTrace = 0;
 int GenSyz = 0;  int GenSyz = 0;
 int OXCheck = -1;  int OXCheck = -1;
 int OneZeroHomo = 0;  int OneZeroHomo = 0;
   int MaxDeg = 0;
   
 int NoSugar = 0;  int NoSugar = 0;
 static int NoCriB = 0;  static int NoCriB = 0;
Line 385  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
Line 386  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
                 if ( input_is_dp )                  if ( input_is_dp )
                         BDY(r) = (pointer)ps[(int)BDY(x)];                          BDY(r) = (pointer)ps[(int)BDY(x)];
                 else                  else
                         dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r));                          dtop(CO,vv,ps[(int)BDY(x)],(Obj *)&BDY(r));
                 NEXTNODE(ind0,ind);                  NEXTNODE(ind0,ind);
                 STOQ((int)BDY(x),q); BDY(ind) = q;                  STOQ((int)BDY(x),q); BDY(ind) = q;
         }          }
Line 445  void dp_interreduce(LIST f,LIST v,int field,struct ord
Line 446  void dp_interreduce(LIST f,LIST v,int field,struct ord
                 if ( input_is_dp )                  if ( input_is_dp )
                         BDY(r) = (pointer)ps[(int)BDY(x)];                          BDY(r) = (pointer)ps[(int)BDY(x)];
                 else                  else
                         dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r));                          dtop(CO,vv,ps[(int)BDY(x)],(Obj *)&BDY(r));
                 NEXTNODE(ind0,ind);                  NEXTNODE(ind0,ind);
                 STOQ((int)BDY(x),q); BDY(ind) = q;                  STOQ((int)BDY(x),q); BDY(ind) = q;
         }          }
Line 570  void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L
Line 571  void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L
                 if ( input_is_dp )                  if ( input_is_dp )
                         BDY(r) = (pointer)ps[(int)BDY(x)];                          BDY(r) = (pointer)ps[(int)BDY(x)];
                 else                  else
                         dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r));                          dtop(CO,vv,ps[(int)BDY(x)],(Obj *)&BDY(r));
         }          }
         if ( r0 ) NEXT(r) = 0;          if ( r0 ) NEXT(r) = 0;
         MKLIST(*rp,r0);          MKLIST(*rp,r0);
Line 718  NODE gb_f4(NODE f)
Line 719  NODE gb_f4(NODE f)
                         if ( k == nred ) {                          if ( k == nred ) {
                                 /* this is a new base */                                  /* this is a new base */
                                 mp0 = 0;                                  mp0 = 0;
                                 NEXTMP(mp0,mp); mp->dl = at[rind[i]]; mp->c = (P)dn;                                  NEXTMP(mp0,mp); mp->dl = at[rind[i]]; mp->c = (Obj)dn;
                                 for ( k = 0; k < col-rank; k++ )                                  for ( k = 0; k < col-rank; k++ )
                                         if ( nm->body[i][k] ) {                                          if ( nm->body[i][k] ) {
                                                 NEXTMP(mp0,mp); mp->dl = at[cind[k]];                                                  NEXTMP(mp0,mp); mp->dl = at[cind[k]];
                                                 mp->c = (P)nm->body[i][k];                                                  mp->c = (Obj)nm->body[i][k];
                                         }                                          }
                                 NEXT(mp) = 0;                                  NEXT(mp) = 0;
                                 MKDP(nv,mp0,nf); nf->sugar = dm->sugar;                                  MKDP(nv,mp0,nf); nf->sugar = dm->sugar;
Line 911  NODE gb_f4_mod(NODE f,int m)
Line 912  NODE gb_f4_mod(NODE f,int m)
   
                 /* XXX free redmat explicitly */                  /* XXX free redmat explicitly */
                 for ( k = 0; k < nred; k++ ) {                  for ( k = 0; k < nred; k++ ) {
                         GC_free(BDY(redmat[k]));                          GCFREE(BDY(redmat[k]));
                         GC_free(redmat[k]);                          GCFREE(redmat[k]);
                 }                  }
   
                 get_eg(&tmp0); add_eg(&eg_elim1,&tmp1,&tmp0);                  get_eg(&tmp0); add_eg(&eg_elim1,&tmp1,&tmp0);
Line 952  NODE gb_f4_mod(NODE f,int m)
Line 953  NODE gb_f4_mod(NODE f,int m)
                 for ( j = 0, i = 0; j < spcol; j++ )                  for ( j = 0, i = 0; j < spcol; j++ )
                         if ( colstat[j] ) {                          if ( colstat[j] ) {
                                 mp0 = 0;                                  mp0 = 0;
                                 NEXTMP(mp0,mp); mp->dl = st[j]; mp->c = STOI(1);                                  NEXTMP(mp0,mp); mp->dl = st[j]; mp->c = (Obj)STOI(1);
                                 for ( k = j+1; k < spcol; k++ )                                  for ( k = j+1; k < spcol; k++ )
                                         if ( !colstat[k] && spmat[i][k] ) {                                          if ( !colstat[k] && spmat[i][k] ) {
                                                 NEXTMP(mp0,mp); mp->dl = st[k];                                                  NEXTMP(mp0,mp); mp->dl = st[k];
                                                 mp->c = STOI(spmat[i][k]);                                                  mp->c = (Obj)STOI(spmat[i][k]);
                                 }                                  }
                                 NEXT(mp) = 0;                                  NEXT(mp) = 0;
                                 MKDP(nv,mp0,nf); nf->sugar = dm->sugar;                                  MKDP(nv,mp0,nf); nf->sugar = dm->sugar;
Line 975  NODE gb_f4_mod(NODE f,int m)
Line 976  NODE gb_f4_mod(NODE f,int m)
   
                 /* XXX free spmat[] explicitly */                  /* XXX free spmat[] explicitly */
                 for ( j = 0; j < nsp; j++ ) {                  for ( j = 0; j < nsp; j++ ) {
                         GC_free(spmat[j]);                          GCFREE(spmat[j]);
                 }                  }
         }          }
         if ( DP_Print ) {          if ( DP_Print ) {
Line 1132  NODE gb_f4_mod_old(NODE f,int m)
Line 1133  NODE gb_f4_mod_old(NODE f,int m)
                 for ( j = 0, i = 0; j < spcol; j++ )                  for ( j = 0, i = 0; j < spcol; j++ )
                         if ( colstat[j] ) {                          if ( colstat[j] ) {
                                 mp0 = 0;                                  mp0 = 0;
                                 NEXTMP(mp0,mp); mp->dl = st[j]; mp->c = STOI(1);                                  NEXTMP(mp0,mp); mp->dl = st[j]; mp->c = (Obj)STOI(1);
                                 for ( k = j+1; k < spcol; k++ )                                  for ( k = j+1; k < spcol; k++ )
                                         if ( !colstat[k] && spmat[i][k] ) {                                          if ( !colstat[k] && spmat[i][k] ) {
                                                 NEXTMP(mp0,mp); mp->dl = st[k];                                                  NEXTMP(mp0,mp); mp->dl = st[k];
                                                 mp->c = STOI(spmat[i][k]);                                                  mp->c = (Obj)STOI(spmat[i][k]);
                                 }                                  }
                                 NEXT(mp) = 0;                                  NEXT(mp) = 0;
                                 MKDP(nv,mp0,nf); nf->sugar = dm->sugar;                                  MKDP(nv,mp0,nf); nf->sugar = dm->sugar;
Line 1300  void setup_arrays(NODE f,int m,NODE *r)
Line 1301  void setup_arrays(NODE f,int m,NODE *r)
                         dp_save(i,(Obj)ps[i],0);                          dp_save(i,(Obj)ps[i],0);
                 psh[i] = BDY(ps[i])->dl;                  psh[i] = BDY(ps[i])->dl;
                 pss[i] = ps[i]->sugar;                  pss[i] = ps[i]->sugar;
                 psc[i] = BDY(ps[i])->c;                  psc[i] = (P)BDY(ps[i])->c;
         }          }
         if ( GenTrace ) {          if ( GenTrace ) {
                 Q q;                  Q q;
Line 1349  void prim_part(DP f,int m,DP *r)
Line 1350  void prim_part(DP f,int m,DP *r)
                 if ( GenTrace && TraceList ) {                  if ( GenTrace && TraceList ) {
                         /* adust the denominator according to the final                          /* adust the denominator according to the final
                            content reduction */                             content reduction */
                         divsp(CO,BDY(f)->c,BDY(*r)->c,&d);                          divsp(CO,(P)BDY(f)->c,(P)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 1526  void reduceall_mod(NODE in,int m,NODE *h)
Line 1527  void reduceall_mod(NODE in,int m,NODE *h)
   
 int newps(DP a,int m,NODE subst)  int newps(DP a,int m,NODE subst)
 {  {
         if ( m && !validhc(!a?0:BDY(a)->c,m,subst) )          if ( m && !validhc(!a?0:(P)BDY(a)->c,m,subst) )
                 return -1;                  return -1;
         if ( psn == pslen ) {          if ( psn == pslen ) {
                 pslen *= 2;                  pslen *= 2;
Line 1547  int newps(DP a,int m,NODE subst)
Line 1548  int newps(DP a,int m,NODE subst)
                 ps[psn] = a;                  ps[psn] = a;
         psh[psn] = BDY(a)->dl;          psh[psn] = BDY(a)->dl;
         pss[psn] = a->sugar;          pss[psn] = a->sugar;
         psc[psn] = BDY(a)->c;          psc[psn] = (P)BDY(a)->c;
         if ( m )          if ( m )
                 _dp_mod(a,m,subst,&psm[psn]);                  _dp_mod(a,m,subst,&psm[psn]);
         if ( GenTrace ) {          if ( GenTrace ) {
Line 1585  int newps(DP a,int m,NODE subst)
Line 1586  int newps(DP a,int m,NODE subst)
   
 int newps_nosave(DP a,int m,NODE subst)  int newps_nosave(DP a,int m,NODE subst)
 {  {
         if ( m && !validhc(!a?0:BDY(a)->c,m,subst) )          if ( m && !validhc(!a?0:(P)BDY(a)->c,m,subst) )
                 return -1;                  return -1;
         if ( psn == pslen ) {          if ( psn == pslen ) {
                 pslen *= 2;                  pslen *= 2;
Line 1599  int newps_nosave(DP a,int m,NODE subst)
Line 1600  int newps_nosave(DP a,int m,NODE subst)
         ps[psn] = 0;          ps[psn] = 0;
         psh[psn] = BDY(a)->dl;          psh[psn] = BDY(a)->dl;
         pss[psn] = a->sugar;          pss[psn] = a->sugar;
         psc[psn] = BDY(a)->c;          psc[psn] = (P)BDY(a)->c;
         if ( m )          if ( m )
                 _dp_mod(a,m,subst,&psm[psn]);                  _dp_mod(a,m,subst,&psm[psn]);
         return psn++;          return psn++;
Line 1809  skip_nf:
Line 1810  skip_nf:
                         get_eg(&tpz0);                          get_eg(&tpz0);
                         prim_part(nf,0,&h);                          prim_part(nf,0,&h);
                         get_eg(&tpz1); add_eg(&eg_pz,&tpz0,&tpz1);                          get_eg(&tpz1); add_eg(&eg_pz,&tpz0,&tpz1);
                         add_denomlist(BDY(h)->c);                          add_denomlist((P)BDY(h)->c);
                         get_eg(&tnp0);                          get_eg(&tnp0);
                         if ( Demand && skip_nf_flag )                          if ( Demand && skip_nf_flag )
                                 nh = newps_nosave(h,m,subst);                                  nh = newps_nosave(h,m,subst);
Line 2326  void dp_set_flag(Obj name,Obj value)
Line 2327  void dp_set_flag(Obj name,Obj value)
                 GenSyz = v;                  GenSyz = v;
         else if ( !strcmp(n,"OneZeroHomo") )          else if ( !strcmp(n,"OneZeroHomo") )
                 OneZeroHomo = v;                  OneZeroHomo = v;
           else if ( !strcmp(n,"MaxDeg") )
                   MaxDeg = v;
 }  }
   
 void dp_make_flaglist(LIST *list)  void dp_make_flaglist(LIST *list)
Line 2353  void dp_make_flaglist(LIST *list)
Line 2356  void dp_make_flaglist(LIST *list)
         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;
         STOQ(GenSyz,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"GenSyz"); MKNODE(n1,name,n); n = n1;          STOQ(GenSyz,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"GenSyz"); MKNODE(n1,name,n); n = n1;
           STOQ(MaxDeg,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"MaxDeg"); MKNODE(n1,name,n); n = n1;
           STOQ(OneZeroHomo,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"OneZeroHomo"); MKNODE(n1,name,n); n = n1;
         STOQ(PtozpRA,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"PtozpRA"); MKNODE(n1,name,n); n = n1;          STOQ(PtozpRA,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"PtozpRA"); MKNODE(n1,name,n); n = n1;
         STOQ(ShowMag,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"ShowMag"); MKNODE(n1,name,n); n = n1;          STOQ(ShowMag,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"ShowMag"); MKNODE(n1,name,n); n = n1;
         STOQ(Top,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Top"); MKNODE(n1,name,n); n = n1;          STOQ(Top,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Top"); MKNODE(n1,name,n); n = n1;
Line 2458  void dp_mulc_d(DP p,P c,DP *r)
Line 2463  void dp_mulc_d(DP p,P c,DP *r)
                 dp_imul_d(p,(Q)c,r);                  dp_imul_d(p,(Q)c,r);
         } else {          } else {
                 if ( DP_NFStat ) fprintf(asir_out,"_");                  if ( DP_NFStat ) fprintf(asir_out,"_");
                 muldc(CO,p,c,r);                  muldc(CO,p,(Obj)c,r);
         }          }
 }  }
   
Line 2573  void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple
Line 2578  void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple
                                         node = mknode(4,cr,cq,NULLP,NULLP);                                          node = mknode(4,cr,cq,NULLP,NULLP);
                                         mulq(cred,rc,&rcred);                                          mulq(cred,rc,&rcred);
                                         chsgnnum((Num)rcred,(Num *)&mrcred);                                          chsgnnum((Num)rcred,(Num *)&mrcred);
                                         muldc(CO,shift,(P)mrcred,(DP *)&ARG2(node));                                          muldc(CO,shift,(Obj)mrcred,(DP *)&ARG2(node));
                                         MKLIST(hist,node);                                          MKLIST(hist,node);
                                 }                                  }
   
Line 2631  void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple
Line 2636  void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple
                         t_0 = get_rtime();                          t_0 = get_rtime();
                         mulq((Q)BDY(rp)->c,rc,&c);                          mulq((Q)BDY(rp)->c,rc,&c);
                         igcd_cofactor(dc,c,&dc,&dcq,&cq);                          igcd_cofactor(dc,c,&dc,&dcq,&cq);
                         muldc(CO,dp,(P)dcq,&t);                          muldc(CO,dp,(Obj)dcq,&t);
                         dp_hm(rp,&t1); BDY(t1)->c = (P)cq;  addd(CO,t,t1,&dp);                          dp_hm(rp,&t1); BDY(t1)->c = (Obj)cq;  addd(CO,t,t1,&dp);
                         dp_rest(rp,&rp);                          dp_rest(rp,&rp);
                         t_a += get_rtime()-t_0;                          t_a += get_rtime()-t_0;
                 }                  }
Line 2676  void dp_imul_d(DP p,Q q,DP *rp)
Line 2681  void dp_imul_d(DP p,Q q,DP *rp)
         nsep = ndist + 1;          nsep = ndist + 1;
         for ( m = BDY(p), n = 0; m; m = NEXT(m), n++ );          for ( m = BDY(p), n = 0; m; m = NEXT(m), n++ );
         if ( n <= nsep ) {          if ( n <= nsep ) {
                 muldc(CO,p,(P)q,rp); return;                  muldc(CO,p,(Obj)q,rp); return;
         }          }
         MKSTR(imul,"imulv");          MKSTR(imul,"imulv");
         t0 = get_rtime();          t0 = get_rtime();

Legend:
Removed from v.1.67  
changed lines
  Added in v.1.73

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