=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/dp.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -p -r1.69 -r1.70 --- OpenXM_contrib2/asir2000/builtin/dp.c 2007/09/07 00:45:50 1.69 +++ OpenXM_contrib2/asir2000/builtin/dp.c 2007/09/15 10:17:08 1.70 @@ -44,7 +44,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.68 2007/09/06 02:23:40 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.69 2007/09/07 00:45:50 noro Exp $ */ #include "ca.h" #include "base.h" @@ -67,7 +67,7 @@ void Pdp_sp(), Pdp_hm(), Pdp_ht(), Pdp_hc(), Pdp_rest( void Pdp_set_sugar(); void Pdp_cri1(),Pdp_cri2(),Pdp_subd(),Pdp_mod(),Pdp_red_mod(),Pdp_tdiv(); void Pdp_prim(),Pdp_red_coef(),Pdp_mag(),Pdp_set_kara(),Pdp_rat(); -void Pdp_nf(),Pdp_true_nf(),Pdp_true_nf_marked(); +void Pdp_nf(),Pdp_true_nf(),Pdp_true_nf_marked(),Pdp_true_nf_marked_mod(); void Pdp_nf_mod(),Pdp_true_nf_mod(); void Pdp_criB(),Pdp_nelim(); void Pdp_minp(),Pdp_sp_mod(); @@ -101,6 +101,7 @@ void Pdp_initial_term(); void Pdp_order(); void Pdp_inv_or_split(); void Pdp_compute_last_w(); +void Pdp_compute_essential_df(); LIST dp_initial_term(); LIST dp_order(); @@ -135,6 +136,7 @@ struct ftab dp_tab[] = { {"dp_nf_f",Pdp_nf_f,4}, {"dp_true_nf",Pdp_true_nf,4}, {"dp_true_nf_marked",Pdp_true_nf_marked,4}, + {"dp_true_nf_marked_mod",Pdp_true_nf_marked_mod,5}, {"dp_nf_mod",Pdp_nf_mod,5}, {"dp_true_nf_mod",Pdp_true_nf_mod,5}, {"dp_lnf_mod",Pdp_lnf_mod,3}, @@ -249,6 +251,7 @@ struct ftab dp_supp_tab[] = { {"dp_tdiv",Pdp_tdiv,2}, {"dp_minp",Pdp_minp,2}, {"dp_compute_last_w",Pdp_compute_last_w,5}, + {"dp_compute_essential_df",Pdp_compute_essential_df,2}, {0,0,0} }; @@ -297,6 +300,19 @@ void Pdp_compute_last_w(NODE arg,LIST *rp) } } +NODE compute_essential_df(DP *g,DP *gh,int n); + +void Pdp_compute_essential_df(NODE arg,LIST *rp) +{ + VECT g,gh; + NODE r; + + g = (VECT)ARG0(arg); + gh = (VECT)ARG1(arg); + r = (NODE)compute_essential_df((DP *)BDY(g),(DP *)BDY(gh),g->len); + MKLIST(*rp,r); +} + void Pdp_inv_or_split(arg,rp) NODE arg; Obj *rp; @@ -952,6 +968,36 @@ LIST *rp; dp_true_nf_marked(b,g,ps,hps,&nm,&cont,&dn); } n = mknode(3,nm,cont,dn); + MKLIST(*rp,n); +} + +void Pdp_true_nf_marked_mod(arg,rp) +NODE arg; +LIST *rp; +{ + NODE b,n; + DP *ps,*hps; + DP g; + DP nm; + P dn; + int mod; + + do_weyl = 0; dp_fcoeffs = 0; + asir_assert(ARG0(arg),O_LIST,"dp_true_nf_marked_mod"); + asir_assert(ARG1(arg),O_DP,"dp_true_nf_marked_mod"); + asir_assert(ARG2(arg),O_VECT,"dp_true_nf_marked_mod"); + asir_assert(ARG3(arg),O_VECT,"dp_true_nf_marked_mod"); + asir_assert(ARG4(arg),O_N,"dp_true_nf_marked_mod"); + if ( !(g = (DP)ARG1(arg)) ) { + nm = 0; dn = (P)ONE; + } else { + b = BDY((LIST)ARG0(arg)); + ps = (DP *)BDY((VECT)ARG2(arg)); + hps = (DP *)BDY((VECT)ARG3(arg)); + mod = QTOS((Q)ARG4(arg)); + dp_true_nf_marked_mod(b,g,ps,hps,mod,&nm,&dn); + } + n = mknode(2,nm,dn); MKLIST(*rp,n); }