version 1.60, 2005/11/16 23:42:53 |
version 1.72, 2016/08/08 07:18:10 |
|
|
* 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.59 2005/02/17 06:27:35 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.71 2015/08/14 13:51:54 fujimoto Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
|
|
#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 |
Line 95 int DP_NFStat = 0; |
|
Line 95 int DP_NFStat = 0; |
|
LIST Dist = 0; |
LIST Dist = 0; |
int NoGCD = 0; |
int NoGCD = 0; |
int GenTrace = 0; |
int GenTrace = 0; |
|
int GenSyz = 0; |
int OXCheck = -1; |
int OXCheck = -1; |
|
int OneZeroHomo = 0; |
|
int MaxDeg = 0; |
|
|
int NoSugar = 0; |
int NoSugar = 0; |
static int NoCriB = 0; |
static int NoCriB = 0; |
Line 104 static int NoMC = 0; |
|
Line 107 static int NoMC = 0; |
|
static int NoRA = 0; |
static int NoRA = 0; |
static int ShowMag = 0; |
static int ShowMag = 0; |
static int Stat = 0; |
static int Stat = 0; |
static int Denominator = 1; |
int Denominator = 1; |
int Top = 0; |
int Top = 0; |
int Reverse = 0; |
int Reverse = 0; |
static int Max_mag = 0; |
static int Max_mag = 0; |
Line 407 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int |
|
Line 410 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); |
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)],(P *)&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) |
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; |
Line 863 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 927 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 1608 void reducebase_dehomo(NODE f,NODE *g) |
|
Line 1657 void reducebase_dehomo(NODE f,NODE *g) |
|
NODE node; |
NODE node; |
|
|
STOQ(r[i],q); |
STOQ(r[i],q); |
node = mknode(4,0,q,0,0); |
node = mknode(4,NULLP,q,NULLP,NULLP); |
MKLIST(hist,node); |
MKLIST(hist,node); |
MKNODE(TraceList,hist,0); |
MKNODE(TraceList,hist,0); |
} |
} |
Line 1700 NODE gb(NODE f,int m,NODE subst) |
|
Line 1749 NODE gb(NODE f,int m,NODE subst) |
|
Max_coef = 0; |
Max_coef = 0; |
prev = 1; |
prev = 1; |
doing_f4 = 0; |
doing_f4 = 0; |
|
init_denomlist(); |
if ( m ) { |
if ( m ) { |
psm = (DP *)MALLOC(pslen*sizeof(DP)); |
psm = (DP *)MALLOC(pslen*sizeof(DP)); |
for ( i = 0; i < psn; i++ ) |
for ( i = 0; i < psn; i++ ) |
|
|
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); |
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 2272 void dp_set_flag(Obj name,Obj value) |
|
Line 2323 void dp_set_flag(Obj name,Obj value) |
|
GenTrace = v; |
GenTrace = v; |
else if ( !strcmp(n,"OXCheck") ) |
else if ( !strcmp(n,"OXCheck") ) |
OXCheck = v; |
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) |
void dp_make_flaglist(LIST *list) |
Line 2298 void dp_make_flaglist(LIST *list) |
|
Line 2355 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(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; |
|
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 2515 void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple |
|
Line 2575 void _dp_nf_z(NODE b,DP g,DP *ps,int full,int multiple |
|
if ( GenTrace ) { |
if ( GenTrace ) { |
/* u = cr*rp + (-cred)*shift*red */ |
/* u = cr*rp + (-cred)*shift*red */ |
STOQ((int)BDY(l),cq); |
STOQ((int)BDY(l),cq); |
node = mknode(4,cr,cq,0,0); |
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,(P)mrcred,(DP *)&ARG2(node)); |