version 1.39, 2001/11/19 00:57:10 |
version 1.44, 2002/12/27 07:37:57 |
|
|
* 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.38 2001/11/16 10:35:07 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.43 2002/07/18 02:23:53 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 108 static int Denominator = 1; |
|
Line 108 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 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 ) { |
|
|
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 ) { |
|
|
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,VECT *gp,LIST *pp) |
void gbcheck_list(NODE f,int n,VECT *gp,LIST *pp) |
{ |
{ |
int i; |
int i; |
NODE r,g,gall,u,u0,t; |
NODE r,g,gall,u,u0,t; |
Line 2003 void gbcheck_list(NODE f,VECT *gp,LIST *pp) |
|
Line 2009 void gbcheck_list(NODE f,VECT *gp,LIST *pp) |
|
DP_pairs d,l; |
DP_pairs d,l; |
Q q1,q2; |
Q q1,q2; |
|
|
|
/* we need the following settings */ |
|
NVars = CNVars = n; |
setup_arrays(f,0,&r); |
setup_arrays(f,0,&r); |
for ( gall = g = 0, d = 0; r; r = NEXT(r) ) { |
for ( gall = g = 0, d = 0; r; r = NEXT(r) ) { |
i = (int)BDY(r); |
i = (int)BDY(r); |
Line 2057 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 2067 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 2110 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; |