[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.37 and 1.47

version 1.37, 2001/10/09 01:36:06 version 1.47, 2003/05/30 06:03:28
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.36 2001/10/01 01:58:02 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.46 2003/04/21 02:49:40 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 89  static VL VC;
Line 89  static VL VC;
   
 int PCoeffs;  int PCoeffs;
 int DP_Print = 0;  int DP_Print = 0;
   int DP_PrintShort = 0;
 int DP_Multiple = 0;  int DP_Multiple = 0;
 int DP_NFStat = 0;  int DP_NFStat = 0;
 LIST Dist = 0;  LIST Dist = 0;
Line 101  static int NoCriB = 0;
Line 102  static int NoCriB = 0;
 static int NoGC = 0;  static int NoGC = 0;
 static int NoMC = 0;  static int NoMC = 0;
 static int NoRA = 0;  static int NoRA = 0;
 static int DP_PrintShort = 0;  
 static int ShowMag = 0;  static int ShowMag = 0;
 static int Stat = 0;  static int Stat = 0;
 static int Denominator = 1;  static int Denominator = 1;
 static int Top = 0;  static int Top = 0;
 static int Reverse = 0;  static int Reverse = 0;
 static int Max_mag = 0;  static int Max_mag = 0;
   static int Max_coef = 0;
 static char *Demand = 0;  static char *Demand = 0;
 static int PtozpRA = 0;  static int PtozpRA = 0;
   
Line 338  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
Line 339  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
         }          }
         print_stat();          print_stat();
         if ( ShowMag )          if ( ShowMag )
                 fprintf(asir_out,"\nMax_mag=%d\n",Max_mag);                  fprintf(asir_out,"\nMax_mag=%d, Max_coef=%d\n",Max_mag, Max_coef);
 }  }
   
 void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struct order_spec *ord,LIST *rp)  void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struct order_spec *ord,LIST *rp)
Line 662  NODE gb_f4_mod(NODE f,int m)
Line 663  NODE gb_f4_mod(NODE f,int m)
                                 dltod(BDY(s),nv,&tdp);                                  dltod(BDY(s),nv,&tdp);
                                 dp_subd(tdp,ps[(int)BDY(r)],&sd);                                  dp_subd(tdp,ps[(int)BDY(r)],&sd);
                                 dt = mul_dllist(BDY(sd)->dl,ps[(int)BDY(r)]);                                  dt = mul_dllist(BDY(sd)->dl,ps[(int)BDY(r)]);
 /*                              fprintf(stderr,"[%d]",length(dt)); */                                  fprintf(stderr,"[%d]",length(dt));
                                 /* list of [t,f] */                                  /* list of [t,f] */
                                 bt1 = mknode(2,BDY(sd)->dl,BDY(r));                                  bt1 = mknode(2,BDY(sd)->dl,BDY(r));
                                 MKNODE(bt,bt1,blist); blist = bt;                                  MKNODE(bt,bt1,blist); blist = bt;
                                 symb_merge(s,dt,nv);                                  symb_merge(s,dt,nv);
 /*                              fprintf(stderr,"%d-",length(s)); */                                  fprintf(stderr,"%d-",length(s0));
                                 nred++;                                  nred++;
                         }                          }
                 }                  }
Line 1160  void prim_part(DP f,int m,DP *r)
Line 1161  void prim_part(DP f,int m,DP *r)
                 else                  else
                         *r = f;                          *r = f;
         } else {          } else {
                 if ( dp_fcoeffs )                  if ( dp_fcoeffs || PCoeffs )
                         *r = f;  
                 else if ( PCoeffs )  
                         dp_prim(f,r);                          dp_prim(f,r);
                 else                  else
                         dp_ptozp(f,r);                          dp_ptozp(f,r);
Line 1537  void minsugar(DP_pairs d,DP_pairs *dm,DP_pairs *dr)
Line 1536  void minsugar(DP_pairs d,DP_pairs *dm,DP_pairs *dr)
   
 NODE gb(NODE f,int m,NODE subst)  NODE gb(NODE f,int m,NODE subst)
 {  {
         int i,nh,prev,mag;          int i,nh,prev,mag,mag0,magt;
         NODE r,g,gall;          NODE r,g,gall;
         DP_pairs d;          DP_pairs d;
         DP_pairs l;          DP_pairs l;
Line 1551  NODE gb(NODE f,int m,NODE subst)
Line 1550  NODE gb(NODE f,int m,NODE subst)
         static prev_sugar = -1;          static prev_sugar = -1;
   
         Max_mag = 0;          Max_mag = 0;
           Max_coef = 0;
         prev = 1;          prev = 1;
         doing_f4 = 0;          doing_f4 = 0;
         if ( m ) {          if ( m ) {
Line 1625  skip_nf:
Line 1625  skip_nf:
                         g = updbase(g,nh);                          g = updbase(g,nh);
                         gall = append_one(gall,nh);                          gall = append_one(gall,nh);
                         if ( !dp_fcoeffs && ShowMag ) {                          if ( !dp_fcoeffs && ShowMag ) {
                                 for ( mag = 0, mp = BDY(h); mp; mp = NEXT(mp) )                                  for ( mag = 0, mag0 = 0, mp = BDY(h); mp; mp = NEXT(mp) ) {
                                         mag += p_mag((P)mp->c);                                          magt = p_mag((P)mp->c);
                                           mag0 = MAX(mag0,magt);
                                           mag += magt;
                                   }
                                   Max_coef = MAX(Max_coef,mag0);
                                 Max_mag = MAX(Max_mag,mag);                                  Max_mag = MAX(Max_mag,mag);
                         }                          }
                         if ( DP_Print ) {                          if ( DP_Print ) {
Line 1638  skip_nf:
Line 1642  skip_nf:
                                         l->dp1,l->dp2,length(g),length(gall),DPPlength(d),                                          l->dp1,l->dp2,length(g),length(gall),DPPlength(d),
                                         pss[nh]);                                          pss[nh]);
                                 if ( ShowMag )                                  if ( ShowMag )
                                         fprintf(asir_out,",mag=%d",mag);                                          fprintf(asir_out,",mag=(%d,%d)",mag,mag0);
                                 fprintf(asir_out,"\n"); fflush(asir_out);                                  fprintf(asir_out,"\n"); fflush(asir_out);
                         } else if ( DP_PrintShort ) {                          } else if ( DP_PrintShort ) {
                                 fprintf(asir_out,"+"); fflush(asir_out);                                  fprintf(asir_out,"+"); fflush(asir_out);
Line 1779  DP_pairs newpairs( NODE /* of index */ g, int t )
Line 1783  DP_pairs newpairs( NODE /* of index */ g, int t )
                 p->lcm = lcm_of_DL(CNVars, dl = psh[dp], tdl, (DL)0 );                  p->lcm = lcm_of_DL(CNVars, dl = psh[dp], tdl, (DL)0 );
 #if 0  #if 0
                 if ( do_weyl )                  if ( do_weyl )
                         p->sugar = dl_weight(p->lcm);                          p->sugar = dl_weyl_weight(p->lcm);
                 else                  else
 #endif  #endif
                         p->sugar = (ts > (s = pss[dp] - dl->td) ? ts : s) + p->lcm->td;                          p->sugar = (ts > (s = pss[dp] - dl->td) ? ts : s) + p->lcm->td;
Line 1946  int dl_redble(DL dl1,DL dl2)
Line 1950  int dl_redble(DL dl1,DL dl2)
         return 1;          return 1;
 }  }
   
 int dl_weight(DL dl)  #if 0
   int dl_weyl_weight(DL dl)
 {  {
         int n,w,i;          int n,w,i;
   
Line 1955  int dl_weight(DL dl)
Line 1960  int dl_weight(DL dl)
                 w += (-dl->d[i]+dl->d[n+i]);                  w += (-dl->d[i]+dl->d[n+i]);
         return w;          return w;
 }  }
   #endif
   
 int gbcheck(NODE f)  int gbcheck(NODE f)
 {  {
Line 1994  int gbcheck(NODE f)
Line 2000  int gbcheck(NODE f)
         return 1;          return 1;
 }  }
   
   void gbcheck_list(NODE f,int n,VECT *gp,LIST *pp)
   {
           int i;
           NODE r,g,gall,u,u0,t;
           VECT vect;
           LIST pair;
           DP_pairs d,l;
           Q q1,q2;
   
           /* we need the following settings */
           NVars = CNVars = n;
           setup_arrays(f,0,&r);
           for ( gall = g = 0, d = 0; r; r = NEXT(r) ) {
                   i = (int)BDY(r);
                   d = updpairs(d,g,i);
                   g = updbase(g,i);
                   gall = append_one(gall,i);
           }
           NEWVECT(vect); vect->len = psn; vect->body = (pointer)ps;
           *gp = vect;
   
           for ( u0 = 0, l = d; l; l = NEXT(l) ) {
                   NEXTNODE(u0,u);
                   STOQ(l->dp1,q1);
                   STOQ(l->dp2,q2);
                   t = mknode(2,q1,q2);
                   MKLIST(pair,t);
                   BDY(u) = (pointer)pair;
           }
           if ( u0 )
                   NEXT(u) = 0;
           MKLIST(*pp,u0);
   }
   
 int membercheck(NODE f,NODE x)  int membercheck(NODE f,NODE x)
 {  {
         DP g;          DP g;
Line 2025  void dp_set_flag(Obj name,Obj value)
Line 2065  void dp_set_flag(Obj name,Obj value)
 {  {
         char *n;          char *n;
         int v;          int v;
           Q ratio;
   
         if ( OID(name) != O_STR )          if ( OID(name) != O_STR )
                 return;                  return;
Line 2035  void dp_set_flag(Obj name,Obj value)
Line 2076  void dp_set_flag(Obj name,Obj value)
         if ( !strcmp(n,"Dist") ) {          if ( !strcmp(n,"Dist") ) {
                 Dist = (LIST)value; return;                  Dist = (LIST)value; return;
         }          }
           if ( !strcmp(n,"Content") ) {
                   ratio = (Q)value;
                   if ( ratio ) {
                           DP_Multiple = BD(NM(ratio))[0];
                           Denominator = INT(ratio) ? 1 : BD(DN(ratio))[0];
                   } else {
                           DP_Multiple = 0;
                           Denominator = 1;
                   }
           }
         if ( value && OID(value) != O_N )          if ( value && OID(value) != O_N )
                 return;                  return;
         v = QTOS((Q)value);          v = QTOS((Q)value);
Line 2078  void dp_set_flag(Obj name,Obj value)
Line 2129  void dp_set_flag(Obj name,Obj value)
   
 void dp_make_flaglist(LIST *list)  void dp_make_flaglist(LIST *list)
 {  {
         Q v;          Q v,nm,dn;
         STRING name,path;          STRING name,path;
         NODE n,n1;          NODE n,n1;
   
   #if 0
         STOQ(DP_Multiple,v); MKNODE(n,v,0); MKSTR(name,"DP_Multiple"); MKNODE(n1,name,n); n = n1;          STOQ(DP_Multiple,v); MKNODE(n,v,0); MKSTR(name,"DP_Multiple"); MKNODE(n1,name,n); n = n1;
         STOQ(Denominator,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Denominator"); MKNODE(n1,name,n); n = n1;          STOQ(Denominator,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Denominator"); MKNODE(n1,name,n); n = n1;
   #else
           if ( DP_Multiple ) {
                   STOQ(DP_Multiple,nm); STOQ(Denominator,dn); divq(nm,dn,&v);
           } else
                   v = 0;
           MKNODE(n,v,0); MKSTR(name,"Content"); MKNODE(n1,name,n); n = n1;
   #endif
         MKNODE(n1,Dist,n); n = n1; MKSTR(name,"Dist"); MKNODE(n1,name,n); n = n1;          MKNODE(n1,Dist,n); n = n1; MKSTR(name,"Dist"); 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(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;
Line 2136  void dp_load(int index,DP *p)
Line 2195  void dp_load(int index,DP *p)
                 sprintf(path,"%s%c%d",Demand,DELIM,index);                  sprintf(path,"%s%c%d",Demand,DELIM,index);
                 if ( !(fp = fopen(path,"rb") ) )                  if ( !(fp = fopen(path,"rb") ) )
                         error("dp_load : cannot open a file");                          error("dp_load : cannot open a file");
                 skipvl(fp); loadobj(fp,(Obj *)p); fclose(fp);                  if ( PCoeffs )
                           loadvl(fp);
                   else
                           skipvl(fp);
                   loadobj(fp,(Obj *)p); fclose(fp);
         }          }
 }  }
   
Line 2149  int dp_load_t(int index,DP *p)
Line 2212  int dp_load_t(int index,DP *p)
         if ( !(fp = fopen(path,"rb") ) )          if ( !(fp = fopen(path,"rb") ) )
                 return 0;                  return 0;
         else {          else {
                 skipvl(fp); loadobj(fp,(Obj *)p); fclose(fp); return 1;                  if ( PCoeffs )
                           loadvl(fp);
                   else
                           skipvl(fp);
                   loadobj(fp,(Obj *)p); fclose(fp); return 1;
         }          }
 }  }
   

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.47

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