=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/gr.c,v retrieving revision 1.53 retrieving revision 1.73 diff -u -p -r1.53 -r1.73 --- OpenXM_contrib2/asir2000/builtin/gr.c 2003/07/18 10:13:12 1.53 +++ OpenXM_contrib2/asir2000/builtin/gr.c 2017/08/31 02:36:20 1.73 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.52 2003/07/16 05:31:21 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.72 2016/08/08 07:18:10 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -53,14 +53,14 @@ #include "ox.h" #if defined(__GNUC__) -#define INLINE inline -#elif defined(VISUAL) +#define INLINE static inline +#elif defined(VISUAL) || defined(__MINGW32__) #define INLINE __inline #else #define INLINE #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))) @@ -69,7 +69,7 @@ double get_rtime(); struct oEGT eg_nf,eg_nfm; struct oEGT eg_znfm,eg_pz,eg_np,eg_ra,eg_mc,eg_gc; -int TP,NBP,NMP,NFP,NDP,ZR,NZR; +int TP,N_BP,NMP,NFP,NDP,ZR,NZR; extern int (*cmpdl)(); extern int do_weyl; @@ -95,21 +95,24 @@ int DP_NFStat = 0; LIST Dist = 0; int NoGCD = 0; int GenTrace = 0; +int GenSyz = 0; int OXCheck = -1; +int OneZeroHomo = 0; +int MaxDeg = 0; -static int NoSugar = 0; +int NoSugar = 0; static int NoCriB = 0; static int NoGC = 0; static int NoMC = 0; static int NoRA = 0; static int ShowMag = 0; static int Stat = 0; -static int Denominator = 1; +int Denominator = 1; int Top = 0; int Reverse = 0; static int Max_mag = 0; static int Max_coef = 0; -static char *Demand = 0; +char *Demand = 0; static int PtozpRA = 0; int doing_f4; @@ -298,12 +301,13 @@ void pdl(NODE f) void dp_gr_main(LIST f,LIST v,Num homo,int modular,int field,struct order_spec *ord,LIST *rp) { int i,mindex,m,nochk; - struct order_spec ord1; + struct order_spec *ord1; Q q; VL fv,vv,vc; NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx; NODE ind,ind0; LIST trace,gbindex; + int input_is_dp = 0; mindex = 0; nochk = 0; dp_fcoeffs = field; get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); @@ -316,14 +320,22 @@ void dp_gr_main(LIST f,LIST v,Num homo,int modular,int homogenize_order(ord,NVars,&ord1); for ( fd0 = fi0 = 0, t = BDY(f); t; t = NEXT(t) ) { NEXTNODE(fd0,fd); NEXTNODE(fi0,fi); - ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fi)); dp_homo((DP)BDY(fi),(DP *)&BDY(fd)); + if ( BDY(t) && OID(BDY(t)) == O_DP ) { + dp_sort((DP)BDY(t),(DP *)&BDY(fi)); input_is_dp = 1; + } else + ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fi)); + dp_homo((DP)BDY(fi),(DP *)&BDY(fd)); } if ( fd0 ) NEXT(fd) = 0; if ( fi0 ) NEXT(fi) = 0; - initd(&ord1); + initd(ord1); } else { for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { - NEXTNODE(fd0,fd); ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); + NEXTNODE(fd0,fd); + if ( BDY(t) && OID(BDY(t)) == O_DP ) { + dp_sort((DP)BDY(t),(DP *)&BDY(fd)); input_is_dp = 1; + } else + ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); } if ( fd0 ) NEXT(fd) = 0; fi0 = fd0; @@ -340,7 +352,7 @@ void dp_gr_main(LIST f,LIST v,Num homo,int modular,int init_stat(); while ( 1 ) { if ( homo ) { - initd(&ord1); CNVars = NVars+1; + initd(ord1); CNVars = NVars+1; } if ( DP_Print && modular ) { fprintf(asir_out,"mod= %d, eval = ",m); printsubst(subst); @@ -371,7 +383,10 @@ void dp_gr_main(LIST f,LIST v,Num homo,int modular,int } for ( r0 = 0, ind0 = 0; x; x = NEXT(x) ) { NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]); - dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); + if ( input_is_dp ) + BDY(r) = (pointer)ps[(int)BDY(x)]; + else + dtop(CO,vv,ps[(int)BDY(x)],(Obj *)&BDY(r)); NEXTNODE(ind0,ind); STOQ((int)BDY(x),q); BDY(ind) = q; } @@ -395,13 +410,60 @@ void dp_gr_main(LIST f,LIST v,Num homo,int modular,int fprintf(asir_out,"\nMax_mag=%d, Max_coef=%d\n",Max_mag, Max_coef); } +void dp_interreduce(LIST f,LIST v,int field,struct order_spec *ord,LIST *rp) +{ + int i,mindex,m,nochk; + struct order_spec *ord1; + Q q; + VL fv,vv,vc; + NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx; + NODE ind,ind0; + LIST trace,gbindex; + int input_is_dp = 0; + + mindex = 0; nochk = 0; dp_fcoeffs = field; + get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); + NVars = length((NODE)vv); PCoeffs = vc ? 1 : 0; VC = vc; + CNVars = NVars; + if ( ord->id && NVars != ord->nv ) + error("dp_interreduce : invalid order specification"); + initd(ord); + for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { + NEXTNODE(fd0,fd); + if ( BDY(t) && OID(BDY(t)) == O_DP ) { + dp_sort((DP)BDY(t),(DP *)&BDY(fd)); input_is_dp = 1; + } else + ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); + } + if ( fd0 ) NEXT(fd) = 0; + fi0 = fd0; + setup_arrays(fd0,0,&s); + init_stat(); + x = s; + reduceall(x,&xx); x = xx; + for ( r0 = 0, ind0 = 0; x; x = NEXT(x) ) { + NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]); + if ( input_is_dp ) + BDY(r) = (pointer)ps[(int)BDY(x)]; + else + dtop(CO,vv,ps[(int)BDY(x)],(Obj *)&BDY(r)); + NEXTNODE(ind0,ind); + STOQ((int)BDY(x),q); BDY(ind) = q; + } + if ( r0 ) NEXT(r) = 0; + if ( ind0 ) NEXT(ind) = 0; + MKLIST(*rp,r0); + MKLIST(gbindex,ind0); +} + void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struct order_spec *ord,LIST *rp) { - struct order_spec ord1; + struct order_spec *ord1; VL fv,vv,vc; NODE fd,fd0,r,r0,t,x,s,xx; DP a,b,c; -extern struct oEGT eg_red_mod; + extern struct oEGT eg_red_mod; + int input_is_dp = 0; get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); NVars = length((NODE)vv); PCoeffs = vc ? 1 : 0; VC = vc; @@ -411,7 +473,11 @@ extern struct oEGT eg_red_mod; initd(ord); if ( homo ) { for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { - ptod(CO,vv,(P)BDY(t),&a); dp_homo(a,&b); + if ( BDY(t) && OID(BDY(t)) == O_DP ) { + dp_sort((DP)BDY(t),&a); input_is_dp = 1; + } else + ptod(CO,vv,(P)BDY(t),&a); + dp_homo(a,&b); if ( PCoeffs ) dp_mod(b,m,0,&c); else @@ -420,10 +486,13 @@ extern struct oEGT eg_red_mod; NEXTNODE(fd0,fd); BDY(fd) = (pointer)c; } } - homogenize_order(ord,NVars,&ord1); initd(&ord1); + homogenize_order(ord,NVars,&ord1); initd(ord1); } else { for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { - ptod(CO,vv,(P)BDY(t),&b); + if ( BDY(t) && OID(BDY(t)) == O_DP ) { + dp_sort((DP)BDY(t),&b); input_is_dp = 1; + } else + ptod(CO,vv,(P)BDY(t),&b); if ( PCoeffs ) dp_mod(b,m,0,&c); else @@ -437,7 +506,7 @@ extern struct oEGT eg_red_mod; setup_arrays(fd0,m,&s); init_stat(); if ( homo ) { - initd(&ord1); CNVars = NVars+1; + initd(ord1); CNVars = NVars+1; } /* init_eg(&eg_red_mod); */ x = gb_mod(s,m); @@ -449,11 +518,19 @@ extern struct oEGT eg_red_mod; reduceall_mod(x,m,&xx); x = xx; if ( PCoeffs ) for ( r0 = 0; x; x = NEXT(x) ) { - NEXTNODE(r0,r); mdtop(CO,m,vv,ps[(int)BDY(x)],(P *)&BDY(r)); + NEXTNODE(r0,r); + if ( input_is_dp ) + mdtodp(ps[(int)BDY(x)],(DP *)&BDY(r)); + else + mdtop(CO,m,vv,ps[(int)BDY(x)],(P *)&BDY(r)); } else for ( r0 = 0; x; x = NEXT(x) ) { - NEXTNODE(r0,r); _dtop_mod(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); + NEXTNODE(r0,r); + if ( input_is_dp ) + _mdtodp(ps[(int)BDY(x)],(DP *)&BDY(r)); + else + _dtop_mod(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); } print_stat(); if ( r0 ) NEXT(r) = 0; @@ -465,6 +542,7 @@ void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L int homogen; VL fv,vv,vc; NODE fd,fd0,r,r0,t,x,s,xx; + int input_is_dp = 0; dp_fcoeffs = 0; get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); @@ -474,7 +552,11 @@ void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L error("dp_f4_main : invalid order specification"); initd(ord); for ( fd0 = 0, t = BDY(f), homogen = 1; t; t = NEXT(t) ) { - NEXTNODE(fd0,fd); ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); + NEXTNODE(fd0,fd); + if ( BDY(t) && OID(BDY(t)) == O_DP ) { + dp_sort((DP)BDY(t),(DP *)&BDY(fd)); input_is_dp = 1; + } else + ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); if ( homogen ) homogen = dp_homogeneous(BDY(fd)); } @@ -486,7 +568,10 @@ void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L } for ( r0 = 0; x; x = NEXT(x) ) { NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]); - dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); + if ( input_is_dp ) + BDY(r) = (pointer)ps[(int)BDY(x)]; + else + dtop(CO,vv,ps[(int)BDY(x)],(Obj *)&BDY(r)); } if ( r0 ) NEXT(r) = 0; MKLIST(*rp,r0); @@ -498,6 +583,7 @@ void dp_f4_mod_main(LIST f,LIST v,int m,struct order_s VL fv,vv,vc; DP b,c,c1; NODE fd,fd0,r,r0,t,x,s,xx; + int input_is_dp = 0; dp_fcoeffs = 0; get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); @@ -507,7 +593,10 @@ void dp_f4_mod_main(LIST f,LIST v,int m,struct order_s error("dp_f4_mod_main : invalid order specification"); initd(ord); for ( fd0 = 0, t = BDY(f), homogen = 1; t; t = NEXT(t) ) { - ptod(CO,vv,(P)BDY(t),&b); + if ( BDY(t) && OID(BDY(t)) == O_DP ) { + dp_sort((DP)BDY(t),&b); input_is_dp = 1; + } else + ptod(CO,vv,(P)BDY(t),&b); if ( homogen ) homogen = dp_homogeneous(b); _dp_mod(b,m,0,&c); @@ -527,7 +616,11 @@ void dp_f4_mod_main(LIST f,LIST v,int m,struct order_s reduceall_mod(x,m,&xx); x = xx; } for ( r0 = 0; x; x = NEXT(x) ) { - NEXTNODE(r0,r); _dtop_mod(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); + NEXTNODE(r0,r); + if ( input_is_dp ) + _mdtodp(ps[(int)BDY(x)],(DP *)&BDY(r)); + else + _dtop_mod(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); } if ( r0 ) NEXT(r) = 0; MKLIST(*rp,r0); @@ -626,11 +719,11 @@ NODE gb_f4(NODE f) if ( k == nred ) { /* this is a new base */ 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++ ) if ( nm->body[i][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; MKDP(nv,mp0,nf); nf->sugar = dm->sugar; @@ -819,8 +912,8 @@ NODE gb_f4_mod(NODE f,int m) /* XXX free redmat explicitly */ for ( k = 0; k < nred; k++ ) { - GC_free(BDY(redmat[k])); - GC_free(redmat[k]); + GCFREE(BDY(redmat[k])); + GCFREE(redmat[k]); } get_eg(&tmp0); add_eg(&eg_elim1,&tmp1,&tmp0); @@ -860,11 +953,11 @@ NODE gb_f4_mod(NODE f,int m) for ( j = 0, i = 0; j < spcol; j++ ) if ( colstat[j] ) { 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++ ) if ( !colstat[k] && spmat[i][k] ) { NEXTMP(mp0,mp); mp->dl = st[k]; - mp->c = STOI(spmat[i][k]); + mp->c = (Obj)STOI(spmat[i][k]); } NEXT(mp) = 0; MKDP(nv,mp0,nf); nf->sugar = dm->sugar; @@ -883,7 +976,7 @@ NODE gb_f4_mod(NODE f,int m) /* XXX free spmat[] explicitly */ for ( j = 0; j < nsp; j++ ) { - GC_free(spmat[j]); + GCFREE(spmat[j]); } } if ( DP_Print ) { @@ -1040,11 +1133,11 @@ NODE gb_f4_mod_old(NODE f,int m) for ( j = 0, i = 0; j < spcol; j++ ) if ( colstat[j] ) { 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++ ) if ( !colstat[k] && spmat[i][k] ) { NEXTMP(mp0,mp); mp->dl = st[k]; - mp->c = STOI(spmat[i][k]); + mp->c = (Obj)STOI(spmat[i][k]); } NEXT(mp) = 0; MKDP(nv,mp0,nf); nf->sugar = dm->sugar; @@ -1095,6 +1188,20 @@ void pltovl(LIST l,VL *vl) *vl = r0; } +void vltopl(VL vl,LIST *l) +{ + VL n; + NODE r,r0; + P p; + + n = vl; + for ( r0 = 0; n; n = NEXT(n) ) { + NEXTNODE(r0,r); MKV(n->v,p); BDY(r) = (pointer)p; + } + if ( r0 ) NEXT(r) = 0; + MKLIST(*l,r0); +} + void makesubst(VL v,NODE *s) { NODE r,r0; @@ -1194,7 +1301,7 @@ void setup_arrays(NODE f,int m,NODE *r) dp_save(i,(Obj)ps[i],0); psh[i] = BDY(ps[i])->dl; pss[i] = ps[i]->sugar; - psc[i] = BDY(ps[i])->c; + psc[i] = (P)BDY(ps[i])->c; } if ( GenTrace ) { Q q; @@ -1243,7 +1350,7 @@ void prim_part(DP f,int m,DP *r) if ( GenTrace && TraceList ) { /* adust the denominator according to the final 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); ARG3(BDY((LIST)BDY(TraceList))) = t; } @@ -1325,9 +1432,10 @@ void reduceall(NODE in,NODE *h) w = (int *)ALLOCA(n*sizeof(int)); for ( i = 0, t = r; i < n; i++, t = NEXT(t) ) w[i] = (int)BDY(t); + /* w[i] < 0 : reduced to 0 */ for ( i = 0; i < n; i++ ) { for ( top = 0, j = n-1; j >= 0; j-- ) - if ( j != i ) { + if ( w[j] >= 0 && j != i ) { MKNODE(t,(pointer)w[j],top); top = t; } get_eg(&tmp0); @@ -1349,10 +1457,16 @@ void reduceall(NODE in,NODE *h) if ( DP_Print || DP_PrintShort ) { fprintf(asir_out,"."); fflush(asir_out); } - w[i] = newps(g1,0,(NODE)0); + if ( g1 ) { + w[i] = newps(g1,0,(NODE)0); + } else { + w[i] = -1; + } } for ( top = 0, j = n-1; j >= 0; j-- ) { - MKNODE(t,(pointer)w[j],top); top = t; + if ( w[j] >= 0 ) { + MKNODE(t,(pointer)w[j],top); top = t; + } } *h = top; if ( DP_Print || DP_PrintShort ) @@ -1378,9 +1492,10 @@ void reduceall_mod(NODE in,int m,NODE *h) w = (int *)ALLOCA(n*sizeof(int)); for ( i = 0, t = r; i < n; i++, t = NEXT(t) ) w[i] = (int)BDY(t); + /* w[i] < 0 : reduced to 0 */ for ( i = 0; i < n; i++ ) { for ( top = 0, j = n-1; j >= 0; j-- ) - if ( j != i ) { + if ( w[j] >= 0 && j != i ) { MKNODE(t,(pointer)w[j],top); top = t; } get_eg(&tmp0); @@ -1394,10 +1509,16 @@ void reduceall_mod(NODE in,int m,NODE *h) if ( DP_Print || DP_PrintShort ) { fprintf(asir_out,"."); fflush(asir_out); } - w[i] = newps_mod(g,m); + if ( g ) { + w[i] = newps_mod(g,m); + } else { + w[i] = -1; + } } for ( top = 0, j = n-1; j >= 0; j-- ) { - MKNODE(t,(pointer)w[j],top); top = t; + if ( w[j] >= 0 ) { + MKNODE(t,(pointer)w[j],top); top = t; + } } *h = top; if ( DP_Print || DP_PrintShort ) @@ -1406,7 +1527,7 @@ void reduceall_mod(NODE in,int m,NODE *h) 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; if ( psn == pslen ) { pslen *= 2; @@ -1427,7 +1548,7 @@ int newps(DP a,int m,NODE subst) ps[psn] = a; psh[psn] = BDY(a)->dl; pss[psn] = a->sugar; - psc[psn] = BDY(a)->c; + psc[psn] = (P)BDY(a)->c; if ( m ) _dp_mod(a,m,subst,&psm[psn]); if ( GenTrace ) { @@ -1465,7 +1586,7 @@ int newps(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; if ( psn == pslen ) { pslen *= 2; @@ -1479,7 +1600,7 @@ int newps_nosave(DP a,int m,NODE subst) ps[psn] = 0; psh[psn] = BDY(a)->dl; pss[psn] = a->sugar; - psc[psn] = BDY(a)->c; + psc[psn] = (P)BDY(a)->c; if ( m ) _dp_mod(a,m,subst,&psm[psn]); return psn++; @@ -1536,7 +1657,7 @@ void reducebase_dehomo(NODE f,NODE *g) NODE node; STOQ(r[i],q); - node = mknode(4,0,q,0,0); + node = mknode(4,NULLP,q,NULLP,NULLP); MKLIST(hist,node); MKNODE(TraceList,hist,0); } @@ -1628,6 +1749,7 @@ NODE gb(NODE f,int m,NODE subst) Max_coef = 0; prev = 1; doing_f4 = 0; + init_denomlist(); if ( m ) { psm = (DP *)MALLOC(pslen*sizeof(DP)); for ( i = 0; i < psn; i++ ) @@ -1688,6 +1810,7 @@ skip_nf: get_eg(&tpz0); prim_part(nf,0,&h); get_eg(&tpz1); add_eg(&eg_pz,&tpz0,&tpz1); + add_denomlist((P)BDY(h)->c); get_eg(&tnp0); if ( Demand && skip_nf_flag ) nh = newps_nosave(h,m,subst); @@ -1812,7 +1935,7 @@ DP_pairs updpairs( DP_pairs d, NODE /* of index */ g, if ( !NoCriB && d ) { dl = DPPlength(d); d = criterion_B( d, t ); - dl -= DPPlength(d); NBP += dl; + dl -= DPPlength(d); N_BP += dl; } d1 = newpairs( g, t ); if ( NEXT(d1) ) { @@ -2200,6 +2323,12 @@ void dp_set_flag(Obj name,Obj value) GenTrace = v; else if ( !strcmp(n,"OXCheck") ) OXCheck = v; + else if ( !strcmp(n,"GenSyz") ) + GenSyz = v; + else if ( !strcmp(n,"OneZeroHomo") ) + OneZeroHomo = v; + else if ( !strcmp(n,"MaxDeg") ) + MaxDeg = v; } void dp_make_flaglist(LIST *list) @@ -2226,6 +2355,9 @@ void dp_make_flaglist(LIST *list) 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(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(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(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; @@ -2299,7 +2431,7 @@ void init_stat() { init_eg(&eg_nf); init_eg(&eg_nfm); init_eg(&eg_znfm); init_eg(&eg_pz); init_eg(&eg_np); init_eg(&eg_ra); init_eg(&eg_mc); init_eg(&eg_gc); - ZR = NZR = TP = NMP = NBP = NFP = NDP = 0; + ZR = NZR = TP = NMP = N_BP = NFP = NDP = 0; } void print_stat() { @@ -2308,7 +2440,7 @@ void print_stat() { print_eg("NF",&eg_nf); print_eg("NFM",&eg_nfm); print_eg("ZNFM",&eg_znfm); print_eg("PZ",&eg_pz); print_eg("NP",&eg_np); print_eg("RA",&eg_ra); print_eg("MC",&eg_mc); print_eg("GC",&eg_gc); - fprintf(asir_out,"T=%d,B=%d M=%d F=%d D=%d ZR=%d NZR=%d\n",TP,NBP,NMP,NFP,NDP,ZR,NZR); + fprintf(asir_out,"T=%d,B=%d M=%d F=%d D=%d ZR=%d NZR=%d\n",TP,N_BP,NMP,NFP,NDP,ZR,NZR); } /* @@ -2331,7 +2463,7 @@ void dp_mulc_d(DP p,P c,DP *r) dp_imul_d(p,(Q)c,r); } else { if ( DP_NFStat ) fprintf(asir_out,"_"); - muldc(CO,p,c,r); + muldc(CO,p,(Obj)c,r); } } @@ -2443,10 +2575,10 @@ void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple if ( GenTrace ) { /* u = cr*rp + (-cred)*shift*red */ STOQ((int)BDY(l),cq); - node = mknode(4,cr,cq,0,0); + node = mknode(4,cr,cq,NULLP,NULLP); mulq(cred,rc,&rcred); chsgnnum((Num)rcred,(Num *)&mrcred); - muldc(CO,shift,(P)mrcred,(DP *)&ARG2(node)); + muldc(CO,shift,(Obj)mrcred,(DP *)&ARG2(node)); MKLIST(hist,node); } @@ -2504,8 +2636,8 @@ void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple t_0 = get_rtime(); mulq((Q)BDY(rp)->c,rc,&c); igcd_cofactor(dc,c,&dc,&dcq,&cq); - muldc(CO,dp,(P)dcq,&t); - dp_hm(rp,&t1); BDY(t1)->c = (P)cq; addd(CO,t,t1,&dp); + muldc(CO,dp,(Obj)dcq,&t); + dp_hm(rp,&t1); BDY(t1)->c = (Obj)cq; addd(CO,t,t1,&dp); dp_rest(rp,&rp); t_a += get_rtime()-t_0; } @@ -2549,7 +2681,7 @@ void dp_imul_d(DP p,Q q,DP *rp) nsep = ndist + 1; for ( m = BDY(p), n = 0; m; m = NEXT(m), n++ ); if ( n <= nsep ) { - muldc(CO,p,(P)q,rp); return; + muldc(CO,p,(Obj)q,rp); return; } MKSTR(imul,"imulv"); t0 = get_rtime();