version 1.63, 2006/06/09 09:59:12 |
version 1.66, 2006/10/26 10:49:16 |
|
|
* 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/dp.c,v 1.62 2006/06/05 08:11:10 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.65 2006/10/12 08:20:37 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
|
|
|
|
void Pdp_sort(); |
void Pdp_sort(); |
void Pdp_mul_trunc(),Pdp_quo(); |
void Pdp_mul_trunc(),Pdp_quo(); |
void Pdp_ord(), Pdp_ptod(), Pdp_dtop(); |
void Pdp_ord(), Pdp_ptod(), Pdp_dtop(), Phomogenize(); |
void Pdp_ptozp(), Pdp_ptozp2(), Pdp_red(), Pdp_red2(), Pdp_lcm(), Pdp_redble(); |
void Pdp_ptozp(), Pdp_ptozp2(), Pdp_red(), Pdp_red2(), Pdp_lcm(), Pdp_redble(); |
void Pdp_sp(), Pdp_hm(), Pdp_ht(), Pdp_hc(), Pdp_rest(), Pdp_td(), Pdp_sugar(); |
void Pdp_sp(), Pdp_hm(), Pdp_ht(), Pdp_hc(), Pdp_rest(), Pdp_td(), Pdp_sugar(); |
void Pdp_set_sugar(); |
void Pdp_set_sugar(); |
Line 100 void Pnd_weyl_gr(),Pnd_weyl_gr_trace(); |
|
Line 100 void Pnd_weyl_gr(),Pnd_weyl_gr_trace(); |
|
void Pnd_nf(); |
void Pnd_nf(); |
void Pdp_initial_term(); |
void Pdp_initial_term(); |
void Pdp_order(); |
void Pdp_order(); |
|
void Pdp_inv_or_split(); |
|
|
LIST dp_initial_term(); |
LIST dp_initial_term(); |
LIST dp_order(); |
LIST dp_order(); |
Line 185 struct ftab dp_tab[] = { |
|
Line 186 struct ftab dp_tab[] = { |
|
{"dp_weyl_f4_mod_main",Pdp_weyl_f4_mod_main,4}, |
{"dp_weyl_f4_mod_main",Pdp_weyl_f4_mod_main,4}, |
|
|
/* misc */ |
/* misc */ |
|
{"dp_inv_or_split",Pdp_inv_or_split,3}, |
{"dp_set_weight",Pdp_set_weight,-1}, |
{"dp_set_weight",Pdp_set_weight,-1}, |
{"dp_weyl_set_weight",Pdp_weyl_set_weight,-1}, |
{"dp_weyl_set_weight",Pdp_weyl_set_weight,-1}, |
{0,0,0}, |
{0,0,0}, |
Line 201 struct ftab dp_supp_tab[] = { |
|
Line 203 struct ftab dp_supp_tab[] = { |
|
{"dp_gr_print",Pdp_gr_print,-1}, |
{"dp_gr_print",Pdp_gr_print,-1}, |
|
|
/* converters */ |
/* converters */ |
|
{"homogenize",Phomogenize,3}, |
{"dp_ptod",Pdp_ptod,-2}, |
{"dp_ptod",Pdp_ptod,-2}, |
{"dp_dtop",Pdp_dtop,2}, |
{"dp_dtop",Pdp_dtop,2}, |
{"dp_homo",Pdp_homo,1}, |
{"dp_homo",Pdp_homo,1}, |
Line 248 struct ftab dp_supp_tab[] = { |
|
Line 251 struct ftab dp_supp_tab[] = { |
|
{0,0,0} |
{0,0,0} |
}; |
}; |
|
|
|
void Pdp_inv_or_split(arg,rp) |
|
NODE arg; |
|
Obj *rp; |
|
{ |
|
NODE gb,newgb; |
|
DP f,inv; |
|
struct order_spec *spec; |
|
LIST list; |
|
|
|
do_weyl = 0; dp_fcoeffs = 0; |
|
asir_assert(ARG0(arg),O_LIST,"dp_inv_or_split"); |
|
asir_assert(ARG1(arg),O_DP,"dp_inv_or_split"); |
|
if ( !create_order_spec(0,(Obj)ARG2(arg),&spec) ) |
|
error("dp_inv_or_split : invalid order specification"); |
|
gb = BDY((LIST)ARG0(arg)); |
|
f = (DP)ARG1(arg); |
|
newgb = (NODE)dp_inv_or_split(gb,f,spec,&inv); |
|
if ( !newgb ) { |
|
/* invertible */ |
|
*rp = (Obj)inv; |
|
} else { |
|
MKLIST(list,newgb); |
|
*rp = (Obj)list; |
|
} |
|
} |
|
|
void Pdp_sort(arg,rp) |
void Pdp_sort(arg,rp) |
NODE arg; |
NODE arg; |
DP *rp; |
DP *rp; |
|
|
ptod(CO,vl,p,rp); |
ptod(CO,vl,p,rp); |
} |
} |
|
|
|
void Phomogenize(arg,rp) |
|
NODE arg; |
|
P *rp; |
|
{ |
|
P p; |
|
DP d,h; |
|
NODE n; |
|
V hv; |
|
VL vl,tvl,last; |
|
struct oLIST f; |
|
LIST v; |
|
|
|
asir_assert(ARG0(arg),O_P,"homogenize"); |
|
p = (P)ARG0(arg); |
|
asir_assert(ARG1(arg),O_LIST,"homogenize"); |
|
v = (LIST)ARG1(arg); |
|
asir_assert(ARG2(arg),O_P,"homogenize"); |
|
hv = VR((P)ARG2(arg)); |
|
for ( vl = 0, n = BDY(v); n; n = NEXT(n) ) { |
|
if ( !vl ) { |
|
NEWVL(vl); tvl = vl; |
|
} else { |
|
NEWVL(NEXT(tvl)); tvl = NEXT(tvl); |
|
} |
|
VR(tvl) = VR((P)BDY(n)); |
|
} |
|
if ( vl ) { |
|
last = tvl; |
|
NEXT(tvl) = 0; |
|
} |
|
ptod(CO,vl,p,&d); |
|
dp_homo(d,&h); |
|
NEWVL(NEXT(last)); last = NEXT(last); |
|
VR(last) = hv; NEXT(last) = 0; |
|
dtop(CO,vl,h,rp); |
|
} |
|
|
void Pdp_ltod(arg,rp) |
void Pdp_ltod(arg,rp) |
NODE arg; |
NODE arg; |
DPV *rp; |
DPV *rp; |
|
|
homo = QTOS((Q)ARG2(arg)); |
homo = QTOS((Q)ARG2(arg)); |
m = QTOS((Q)ARG3(arg)); |
m = QTOS((Q)ARG3(arg)); |
create_order_spec(0,ARG4(arg),&ord); |
create_order_spec(0,ARG4(arg),&ord); |
nd_gr_trace(f,v,m,homo,ord,rp); |
nd_gr_trace(f,v,m,homo,0,ord,rp); |
} |
} |
|
|
void Pnd_nf(arg,rp) |
void Pnd_nf(arg,rp) |