version 1.22, 2020/01/09 01:47:40 |
version 1.27, 2021/01/25 00:39:51 |
|
|
* 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/asir2018/builtin/dp.c,v 1.21 2019/12/27 08:13:59 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/dp.c,v 1.26 2020/10/26 02:41:05 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
Line 79 void Pdp_nf_mod(),Pdp_true_nf_mod(); |
|
Line 79 void Pdp_nf_mod(),Pdp_true_nf_mod(); |
|
void Pdp_criB(),Pdp_nelim(); |
void Pdp_criB(),Pdp_nelim(); |
void Pdp_minp(),Pdp_sp_mod(); |
void Pdp_minp(),Pdp_sp_mod(); |
void Pdp_homo(),Pdp_dehomo(); |
void Pdp_homo(),Pdp_dehomo(); |
void Pdpm_homo(),Pdpm_dehomo(); |
void Pdpm_homo(),Pdpm_dehomo(),Pdpm_mod(); |
void Pdp_gr_mod_main(),Pdp_gr_f_main(); |
void Pdp_gr_mod_main(),Pdp_gr_f_main(); |
void Pdp_gr_main(),Pdp_gr_hm_main(),Pdp_gr_d_main(),Pdp_gr_flags(); |
void Pdp_gr_main(),Pdp_gr_hm_main(),Pdp_gr_d_main(),Pdp_gr_flags(); |
void Pdp_interreduce(); |
void Pdp_interreduce(); |
Line 113 void Pdp_nf_f(),Pdp_weyl_nf_f(); |
|
Line 113 void Pdp_nf_f(),Pdp_weyl_nf_f(); |
|
void Pdpm_nf_f(),Pdpm_weyl_nf_f(); |
void Pdpm_nf_f(),Pdpm_weyl_nf_f(); |
void Pdp_lnf_f(); |
void Pdp_lnf_f(); |
void Pnd_gr(),Pnd_gr_trace(),Pnd_f4(),Pnd_f4_trace(); |
void Pnd_gr(),Pnd_gr_trace(),Pnd_f4(),Pnd_f4_trace(); |
|
void Pnd_sba(),Pnd_sba_f4(); |
|
void Pnd_weyl_sba(); |
void Pnd_gr_postproc(), Pnd_weyl_gr_postproc(); |
void Pnd_gr_postproc(), Pnd_weyl_gr_postproc(); |
void Pnd_gr_recompute_trace(), Pnd_btog(); |
void Pnd_gr_recompute_trace(), Pnd_btog(); |
void Pnd_weyl_gr(),Pnd_weyl_gr_trace(); |
void Pnd_weyl_gr(),Pnd_weyl_gr_trace(); |
Line 194 struct ftab dp_tab[] = { |
|
Line 196 struct ftab dp_tab[] = { |
|
{"dp_gr_checklist",Pdp_gr_checklist,2}, |
{"dp_gr_checklist",Pdp_gr_checklist,2}, |
{"nd_f4",Pnd_f4,-4}, |
{"nd_f4",Pnd_f4,-4}, |
{"nd_gr",Pnd_gr,-4}, |
{"nd_gr",Pnd_gr,-4}, |
|
{"nd_sba",Pnd_sba,-4}, |
|
{"nd_weyl_sba",Pnd_weyl_sba,-4}, |
|
{"nd_sba_f4",Pnd_sba_f4,-4}, |
{"nd_gr_trace",Pnd_gr_trace,-5}, |
{"nd_gr_trace",Pnd_gr_trace,-5}, |
{"nd_f4_trace",Pnd_f4_trace,-5}, |
{"nd_f4_trace",Pnd_f4_trace,-5}, |
{"nd_gr_postproc",Pnd_gr_postproc,5}, |
{"nd_gr_postproc",Pnd_gr_postproc,5}, |
Line 288 struct ftab dp_supp_tab[] = { |
|
Line 293 struct ftab dp_supp_tab[] = { |
|
{"dpm_dtol",Pdpm_dtol,2}, |
{"dpm_dtol",Pdpm_dtol,2}, |
{"dpm_homo",Pdpm_homo,1}, |
{"dpm_homo",Pdpm_homo,1}, |
{"dpm_dehomo",Pdpm_dehomo,1}, |
{"dpm_dehomo",Pdpm_dehomo,1}, |
|
{"dpm_mod",Pdpm_mod,2}, |
|
|
/* criteria */ |
/* criteria */ |
{"dp_cri1",Pdp_cri1,2}, |
{"dp_cri1",Pdp_cri1,2}, |
Line 1292 void Pdp_mod(NODE arg,DP *rp) |
|
Line 1298 void Pdp_mod(NODE arg,DP *rp) |
|
dp_mod(p,mod,subst,rp); |
dp_mod(p,mod,subst,rp); |
} |
} |
|
|
|
void dpm_mod(DPM,int,DPM *); |
|
|
|
void Pdpm_mod(NODE arg,DPM *rp) |
|
{ |
|
DPM p; |
|
int mod; |
|
NODE subst; |
|
|
|
asir_assert(ARG0(arg),O_DP,"dp_mod"); |
|
asir_assert(ARG1(arg),O_N,"dp_mod"); |
|
p = (DPM)ARG0(arg); mod = ZTOS((Q)ARG1(arg)); |
|
dpm_mod(p,mod,rp); |
|
} |
|
|
|
|
void Pdp_rat(NODE arg,DP *rp) |
void Pdp_rat(NODE arg,DP *rp) |
{ |
{ |
asir_assert(ARG0(arg),O_DP,"dp_rat"); |
asir_assert(ARG0(arg),O_DP,"dp_rat"); |
Line 3008 void Pnd_gr(NODE arg,LIST *rp) |
|
Line 3029 void Pnd_gr(NODE arg,LIST *rp) |
|
nd_gr(f,v,m,homo,retdp,0,ord,rp); |
nd_gr(f,v,m,homo,retdp,0,ord,rp); |
} |
} |
|
|
|
void nd_sba(LIST f,LIST v,int m,int homo,int retdp,int f4,struct order_spec *ord,LIST *rp); |
|
|
|
void Pnd_sba(NODE arg,LIST *rp) |
|
{ |
|
LIST f,v; |
|
int m,homo,retdp,ac; |
|
Obj val; |
|
Z mq,z; |
|
Num nhomo; |
|
NODE node; |
|
struct order_spec *ord; |
|
|
|
do_weyl = 0; |
|
retdp = 0; |
|
if ( (ac=argc(arg)) == 4 ) { |
|
asir_assert(ARG0(arg),O_LIST,"nd_sba"); |
|
asir_assert(ARG1(arg),O_LIST,"nd_sba"); |
|
asir_assert(ARG2(arg),O_N,"nd_sba"); |
|
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); |
|
f = remove_zero_from_list(f); |
|
if ( !BDY(f) ) { |
|
*rp = f; return; |
|
} |
|
mq = (Z)ARG2(arg); |
|
STOZ(0x40000000,z); |
|
if ( cmpz(mq,z) >= 0 ) { |
|
node = mknode(1,mq); |
|
Psetmod_ff(node,&val); |
|
m = -2; |
|
} else |
|
m = ZTOS(mq); |
|
create_order_spec(0,ARG3(arg),&ord); |
|
homo = 0; |
|
if ( get_opt("homo",&val) && val ) homo = 1; |
|
if ( get_opt("dp",&val) && val ) retdp = 1; |
|
} else if ( ac == 1 ) { |
|
f = (LIST)ARG0(arg); |
|
parse_gr_option(f,current_option,&v,&nhomo,&m,&ord); |
|
homo = ZTOS((Q)nhomo); |
|
if ( get_opt("dp",&val) && val ) retdp = 1; |
|
} else |
|
error("nd_gr : invalid argument"); |
|
nd_sba(f,v,m,homo,retdp,0,ord,rp); |
|
} |
|
|
|
void Pnd_weyl_sba(NODE arg,LIST *rp) |
|
{ |
|
LIST f,v; |
|
int m,homo,retdp,ac; |
|
Obj val; |
|
Z mq,z; |
|
Num nhomo; |
|
NODE node; |
|
struct order_spec *ord; |
|
|
|
do_weyl = 1; |
|
retdp = 0; |
|
if ( (ac=argc(arg)) == 4 ) { |
|
asir_assert(ARG0(arg),O_LIST,"nd_sba"); |
|
asir_assert(ARG1(arg),O_LIST,"nd_sba"); |
|
asir_assert(ARG2(arg),O_N,"nd_sba"); |
|
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); |
|
f = remove_zero_from_list(f); |
|
if ( !BDY(f) ) { |
|
*rp = f; do_weyl = 0; return; |
|
} |
|
mq = (Z)ARG2(arg); |
|
STOZ(0x40000000,z); |
|
if ( cmpz(mq,z) >= 0 ) { |
|
node = mknode(1,mq); |
|
Psetmod_ff(node,&val); |
|
m = -2; |
|
} else |
|
m = ZTOS(mq); |
|
create_order_spec(0,ARG3(arg),&ord); |
|
homo = 0; |
|
if ( get_opt("homo",&val) && val ) homo = 1; |
|
if ( get_opt("dp",&val) && val ) retdp = 1; |
|
} else if ( ac == 1 ) { |
|
f = (LIST)ARG0(arg); |
|
parse_gr_option(f,current_option,&v,&nhomo,&m,&ord); |
|
homo = ZTOS((Q)nhomo); |
|
if ( get_opt("dp",&val) && val ) retdp = 1; |
|
} else |
|
error("nd_gr : invalid argument"); |
|
nd_sba(f,v,m,homo,retdp,0,ord,rp); |
|
do_weyl = 0; |
|
} |
|
|
|
void Pnd_sba_f4(NODE arg,LIST *rp) |
|
{ |
|
LIST f,v; |
|
int m,homo,retdp,ac; |
|
Obj val; |
|
Z mq,z; |
|
Num nhomo; |
|
NODE node; |
|
struct order_spec *ord; |
|
|
|
do_weyl = 0; |
|
retdp = 0; |
|
if ( (ac=argc(arg)) == 4 ) { |
|
asir_assert(ARG0(arg),O_LIST,"nd_sba"); |
|
asir_assert(ARG1(arg),O_LIST,"nd_sba"); |
|
asir_assert(ARG2(arg),O_N,"nd_sba"); |
|
f = (LIST)ARG0(arg); v = (LIST)ARG1(arg); |
|
f = remove_zero_from_list(f); |
|
if ( !BDY(f) ) { |
|
*rp = f; return; |
|
} |
|
mq = (Z)ARG2(arg); |
|
STOZ(0x40000000,z); |
|
if ( cmpz(mq,z) >= 0 ) { |
|
node = mknode(1,mq); |
|
Psetmod_ff(node,&val); |
|
m = -2; |
|
} else |
|
m = ZTOS(mq); |
|
create_order_spec(0,ARG3(arg),&ord); |
|
homo = 0; |
|
if ( get_opt("homo",&val) && val ) homo = 1; |
|
if ( get_opt("dp",&val) && val ) retdp = 1; |
|
} else if ( ac == 1 ) { |
|
f = (LIST)ARG0(arg); |
|
parse_gr_option(f,current_option,&v,&nhomo,&m,&ord); |
|
homo = ZTOS((Q)nhomo); |
|
if ( get_opt("dp",&val) && val ) retdp = 1; |
|
} else |
|
error("nd_gr : invalid argument"); |
|
nd_sba(f,v,m,homo,retdp,1,ord,rp); |
|
} |
|
|
void Pnd_gr_postproc(NODE arg,LIST *rp) |
void Pnd_gr_postproc(NODE arg,LIST *rp) |
{ |
{ |
LIST f,v; |
LIST f,v; |
Line 4084 void Pdpm_set_schreyer(NODE arg,LIST *rp) |
|
Line 4237 void Pdpm_set_schreyer(NODE arg,LIST *rp) |
|
} |
} |
|
|
DMMstack_array Schreyer_Frame; |
DMMstack_array Schreyer_Frame; |
DMMstack_array dpm_schreyer_frame(NODE n); |
DMMstack_array dpm_schreyer_frame(NODE n,int lex); |
void set_schreyer_level(DMMstack_array array,int level); |
void set_schreyer_level(DMMstack_array array,int level); |
|
|
void Pdpm_set_schreyer_level(NODE arg,Q *rp) |
void Pdpm_set_schreyer_level(NODE arg,Q *rp) |
Line 4093 void Pdpm_set_schreyer_level(NODE arg,Q *rp) |
|
Line 4246 void Pdpm_set_schreyer_level(NODE arg,Q *rp) |
|
*rp = (Q)ARG0(arg); |
*rp = (Q)ARG0(arg); |
} |
} |
|
|
DPM dmmtodpm(DMM d) |
|
{ |
|
} |
|
|
|
void Pdpm_schreyer_frame(NODE arg,LIST *rp) |
void Pdpm_schreyer_frame(NODE arg,LIST *rp) |
{ |
{ |
DMMstack_array a; |
DMMstack_array a; |
Line 4107 void Pdpm_schreyer_frame(NODE arg,LIST *rp) |
|
Line 4256 void Pdpm_schreyer_frame(NODE arg,LIST *rp) |
|
LIST l; |
LIST l; |
VECT v; |
VECT v; |
Z lev,deg,ind; |
Z lev,deg,ind; |
int len,i,nv,rank,j; |
int len,i,nv,rank,j,lex; |
|
NODE tt,p; |
|
char *key; |
|
Obj value; |
|
|
Schreyer_Frame = a = dpm_schreyer_frame(BDY((LIST)ARG0(arg))); |
lex = 0; |
|
if ( current_option ) { |
|
for ( tt = current_option; tt; tt = NEXT(tt) ) { |
|
p = BDY((LIST)BDY(tt)); |
|
key = BDY((STRING)BDY(p)); |
|
value = (Obj)BDY(NEXT(p)); |
|
if ( !strcmp(key,"lex") ) |
|
lex = value!=0?1:0; |
|
else { |
|
error("dpm_schreyer_frame: unknown option."); |
|
} |
|
} |
|
} |
|
Schreyer_Frame = a = dpm_schreyer_frame(BDY((LIST)ARG0(arg)),lex); |
len = a->len; |
len = a->len; |
body = a->body; |
body = a->body; |
/* XXX */ |
/* XXX */ |