[BACK]Return to dp.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/dp.c between version 1.97 and 1.104

version 1.97, 2016/03/31 07:33:32 version 1.104, 2017/03/27 09:35:13
Line 44 
Line 44 
  * 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.96 2015/09/24 04:43:12 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.103 2017/03/27 09:05:46 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 69  void Pdp_set_sugar();
Line 69  void Pdp_set_sugar();
 void Pdp_cri1(),Pdp_cri2(),Pdp_subd(),Pdp_mod(),Pdp_red_mod(),Pdp_tdiv();  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_prim(),Pdp_red_coef(),Pdp_mag(),Pdp_set_kara(),Pdp_rat();
 void Pdp_nf(),Pdp_true_nf(),Pdp_true_nf_marked(),Pdp_true_nf_marked_mod();  void Pdp_nf(),Pdp_true_nf(),Pdp_true_nf_marked(),Pdp_true_nf_marked_mod();
 void Pdp_true_nf_and_quotient();  
   void Pdp_true_nf_and_quotient(),Pdp_true_nf_and_quotient_mod();
 void Pdp_true_nf_and_quotient_marked(),Pdp_true_nf_and_quotient_marked_mod();  void Pdp_true_nf_and_quotient_marked(),Pdp_true_nf_and_quotient_marked_mod();
   
 void Pdp_nf_mod(),Pdp_true_nf_mod();  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();
Line 88  void Pdp_ltod(),Pdpv_ord(),Pdpv_ht(),Pdpv_hm(),Pdpv_hc
Line 90  void Pdp_ltod(),Pdpv_ord(),Pdpv_ht(),Pdpv_hm(),Pdpv_hc
   
 void Pdp_weyl_red();  void Pdp_weyl_red();
 void Pdp_weyl_sp();  void Pdp_weyl_sp();
   
 void Pdp_weyl_nf(),Pdp_weyl_nf_mod();  void Pdp_weyl_nf(),Pdp_weyl_nf_mod();
   void Pdp_weyl_true_nf_and_quotient(),Pdp_weyl_true_nf_and_quotient_mod();
   void Pdp_weyl_true_nf_and_quotient_marked(),Pdp_weyl_true_nf_and_quotient_marked_mod();
   
 void Pdp_weyl_gr_main(),Pdp_weyl_gr_mod_main(),Pdp_weyl_gr_f_main();  void Pdp_weyl_gr_main(),Pdp_weyl_gr_mod_main(),Pdp_weyl_gr_f_main();
 void Pdp_weyl_f4_main(),Pdp_weyl_f4_mod_main(),Pdp_weyl_f4_f_main();  void Pdp_weyl_f4_main(),Pdp_weyl_f4_mod_main(),Pdp_weyl_f4_f_main();
 void Pdp_weyl_mul(),Pdp_weyl_mul_mod(),Pdp_weyl_act();  void Pdp_weyl_mul(),Pdp_weyl_mul_mod(),Pdp_weyl_act();
Line 144  struct ftab dp_tab[] = {
Line 150  struct ftab dp_tab[] = {
   
         /* normal form */          /* normal form */
         {"dp_nf",Pdp_nf,4},          {"dp_nf",Pdp_nf,4},
           {"dp_nf_mod",Pdp_nf_mod,5},
         {"dp_nf_f",Pdp_nf_f,4},          {"dp_nf_f",Pdp_nf_f,4},
   
         {"dp_true_nf",Pdp_true_nf,4},          {"dp_true_nf",Pdp_true_nf,4},
         {"dp_true_nf_and_quotient",Pdp_true_nf_and_quotient,4},          {"dp_true_nf_mod",Pdp_true_nf_mod,5},
         {"dp_true_nf_marked",Pdp_true_nf_marked,4},          {"dp_true_nf_marked",Pdp_true_nf_marked,4},
           {"dp_true_nf_marked_mod",Pdp_true_nf_marked_mod,5},
   
           {"dp_true_nf_and_quotient",Pdp_true_nf_and_quotient,3},
           {"dp_true_nf_and_quotient_mod",Pdp_true_nf_and_quotient_mod,4},
         {"dp_true_nf_and_quotient_marked",Pdp_true_nf_and_quotient_marked,4},          {"dp_true_nf_and_quotient_marked",Pdp_true_nf_and_quotient_marked,4},
         {"dp_true_nf_and_quotient_marked_mod",Pdp_true_nf_and_quotient_marked_mod,5},          {"dp_true_nf_and_quotient_marked_mod",Pdp_true_nf_and_quotient_marked_mod,5},
         {"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},          {"dp_lnf_mod",Pdp_lnf_mod,3},
         {"dp_nf_tab_f",Pdp_nf_tab_f,2},          {"dp_nf_tab_f",Pdp_nf_tab_f,2},
         {"dp_nf_tab_mod",Pdp_nf_tab_mod,3},          {"dp_nf_tab_mod",Pdp_nf_tab_mod,3},
Line 164  struct ftab dp_tab[] = {
Line 174  struct ftab dp_tab[] = {
         {"dp_gr_mod_main",Pdp_gr_mod_main,5},          {"dp_gr_mod_main",Pdp_gr_mod_main,5},
         {"dp_gr_f_main",Pdp_gr_f_main,4},          {"dp_gr_f_main",Pdp_gr_f_main,4},
         {"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_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},
         {"nd_gr_recompute_trace",Pnd_gr_recompute_trace,5},          {"nd_gr_recompute_trace",Pnd_gr_recompute_trace,5},
         {"nd_btog",Pnd_btog,-6},          {"nd_btog",Pnd_btog,-6},
         {"nd_weyl_gr_postproc",Pnd_weyl_gr_postproc,5},          {"nd_weyl_gr_postproc",Pnd_weyl_gr_postproc,5},
         {"nd_weyl_gr",Pnd_weyl_gr,4},          {"nd_weyl_gr",Pnd_weyl_gr,-4},
         {"nd_weyl_gr_trace",Pnd_weyl_gr_trace,5},          {"nd_weyl_gr_trace",Pnd_weyl_gr_trace,-5},
         {"nd_nf",Pnd_nf,5},          {"nd_nf",Pnd_nf,5},
         {"nd_weyl_nf",Pnd_weyl_nf,5},          {"nd_weyl_nf",Pnd_weyl_nf,5},
   
Line 198  struct ftab dp_tab[] = {
Line 208  struct ftab dp_tab[] = {
         {"dp_weyl_nf_mod",Pdp_weyl_nf_mod,5},          {"dp_weyl_nf_mod",Pdp_weyl_nf_mod,5},
         {"dp_weyl_nf_f",Pdp_weyl_nf_f,4},          {"dp_weyl_nf_f",Pdp_weyl_nf_f,4},
   
           {"dp_weyl_true_nf_and_quotient",Pdp_weyl_true_nf_and_quotient,3},
           {"dp_weyl_true_nf_and_quotient_mod",Pdp_weyl_true_nf_and_quotient_mod,4},
           {"dp_weyl_true_nf_and_quotient_marked",Pdp_weyl_true_nf_and_quotient_marked,4},
           {"dp_weyl_true_nf_and_quotient_marked_mod",Pdp_weyl_true_nf_and_quotient_marked_mod,5},
   
   
         /* Buchberger algorithm */          /* Buchberger algorithm */
         {"dp_weyl_gr_main",Pdp_weyl_gr_main,-5},          {"dp_weyl_gr_main",Pdp_weyl_gr_main,-5},
         {"dp_weyl_gr_mod_main",Pdp_weyl_gr_mod_main,5},          {"dp_weyl_gr_mod_main",Pdp_weyl_gr_mod_main,5},
Line 932  void Pdp_true_nf(NODE arg,LIST *rp)
Line 948  void Pdp_true_nf(NODE arg,LIST *rp)
         NEXT(NEXT(n)) = 0; MKLIST(*rp,n);          NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
 }  }
   
 DP *dp_true_nf_and_quotient(NODE b,DP g,DP *ps,DP *rp,P *dnp);  DP *dp_true_nf_and_quotient_marked(NODE b,DP g,DP *ps,DP *hps,DP *rp,P *dnp);
   
 void Pdp_true_nf_and_quotient(NODE arg,LIST *rp)  
 {  
         NODE b,n;  
         DP *ps;  
         DP g;  
         DP nm;  
         VECT quo;  
         P dn;  
         int full;  
   
         do_weyl = 0; dp_fcoeffs = 0;  
         asir_assert(ARG0(arg),O_LIST,"dp_true_nf_and_quotient");  
         asir_assert(ARG1(arg),O_DP,"dp_true_nf_and_quotient");  
         asir_assert(ARG2(arg),O_VECT,"dp_true_nf_and_quotient");  
         if ( !(g = (DP)ARG1(arg)) ) {  
                 nm = 0; dn = (P)ONE;  
         } else {  
                 b = BDY((LIST)ARG0(arg));  
                 ps = (DP *)BDY((VECT)ARG2(arg));  
                 NEWVECT(quo); quo->len = ((VECT)ARG2(arg))->len;  
                 quo->body = (pointer *)dp_true_nf_and_quotient(b,g,ps,&nm,&dn);  
         }  
         n = mknode(3,nm,dn,quo);  
         MKLIST(*rp,n);  
 }  
   
 DP *dp_true_nf_and_quotient_marked (NODE b,DP g,DP *ps,DP *hps,DP *rp,P *dnp);  
   
 void Pdp_true_nf_and_quotient_marked(NODE arg,LIST *rp)  void Pdp_true_nf_and_quotient_marked(NODE arg,LIST *rp)
 {  {
         NODE b,n;          NODE b,n;
Line 990  void Pdp_true_nf_and_quotient_marked(NODE arg,LIST *rp
Line 978  void Pdp_true_nf_and_quotient_marked(NODE arg,LIST *rp
         MKLIST(*rp,n);          MKLIST(*rp,n);
 }  }
   
   void Pdp_true_nf_and_quotient(NODE arg,LIST *rp)
   {
     NODE narg = mknode(4,ARG0(arg),ARG1(arg),ARG2(arg),ARG2(arg));
     Pdp_true_nf_and_quotient_marked(narg,rp);
   }
   
   
 DP *dp_true_nf_and_quotient_marked_mod (NODE b,DP g,DP *ps,DP *hps,int mod,DP *rp,P *dnp);  DP *dp_true_nf_and_quotient_marked_mod (NODE b,DP g,DP *ps,DP *hps,int mod,DP *rp,P *dnp);
   
 void Pdp_true_nf_and_quotient_marked_mod(NODE arg,LIST *rp)  void Pdp_true_nf_and_quotient_marked_mod(NODE arg,LIST *rp)
Line 1022  void Pdp_true_nf_and_quotient_marked_mod(NODE arg,LIST
Line 1017  void Pdp_true_nf_and_quotient_marked_mod(NODE arg,LIST
         MKLIST(*rp,n);          MKLIST(*rp,n);
 }  }
   
   void Pdp_true_nf_and_quotient_mod(NODE arg,LIST *rp)
   {
     NODE narg = mknode(5,ARG0(arg),ARG1(arg),ARG2(arg),ARG2(arg),ARG3(arg));
     Pdp_true_nf_and_quotient_marked_mod(narg,rp);
   }
   
 void Pdp_true_nf_marked(NODE arg,LIST *rp)  void Pdp_true_nf_marked(NODE arg,LIST *rp)
 {  {
         NODE b,n;          NODE b,n;
Line 1134  void Pdp_true_nf_mod(NODE arg,LIST *rp)
Line 1135  void Pdp_true_nf_mod(NODE arg,LIST *rp)
         NEXT(NEXT(n)) = 0; MKLIST(*rp,n);          NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
 }  }
   
   void Pdp_weyl_true_nf_and_quotient_marked(NODE arg,LIST *rp)
   {
           NODE b,n;
           DP *ps,*hps;
           DP g;
           DP nm;
           VECT quo;
           P dn;
           int full;
   
           do_weyl = 1; dp_fcoeffs = 0;
           asir_assert(ARG0(arg),O_LIST,"dp_weyl_true_nf_and_quotient_marked");
           asir_assert(ARG1(arg),O_DP,"dp_weyl_true_nf_and_quotient_marked");
           asir_assert(ARG2(arg),O_VECT,"dp_weyl_true_nf_and_quotient_marked");
           asir_assert(ARG3(arg),O_VECT,"dp_weyl_true_nf_and_quotient_marked");
           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));
                   NEWVECT(quo); quo->len = ((VECT)ARG2(arg))->len;
                   quo->body = (pointer *)dp_true_nf_and_quotient_marked(b,g,ps,hps,&nm,&dn);
           }
           n = mknode(3,nm,dn,quo);
           MKLIST(*rp,n);
   }
   
   void Pdp_weyl_true_nf_and_quotient(NODE arg,LIST *rp)
   {
     NODE narg = mknode(4,ARG0(arg),ARG1(arg),ARG2(arg),ARG2(arg));
     Pdp_weyl_true_nf_and_quotient_marked(narg,rp);
   }
   
   
   void Pdp_weyl_true_nf_and_quotient_marked_mod(NODE arg,LIST *rp)
   {
           NODE b,n;
           DP *ps,*hps;
           DP g;
           DP nm;
           VECT quo;
           P dn;
           int full,mod;
   
           do_weyl = 1; dp_fcoeffs = 0;
           asir_assert(ARG0(arg),O_LIST,"dp_weyl_true_nf_and_quotient_marked_mod");
           asir_assert(ARG1(arg),O_DP,"dp_weyl_true_nf_and_quotient_marked_mod");
           asir_assert(ARG2(arg),O_VECT,"dp_weyl_true_nf_and_quotient_marked_mod");
           asir_assert(ARG3(arg),O_VECT,"dp_weyl_true_nf_and_quotient_marked_mod");
           asir_assert(ARG4(arg),O_N,"dp_weyl_true_nf_and_quotient_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));
                   NEWVECT(quo); quo->len = ((VECT)ARG2(arg))->len;
                   quo->body = (pointer *)dp_true_nf_and_quotient_marked_mod(b,g,ps,hps,mod,&nm,&dn);
           }
           n = mknode(3,nm,dn,quo);
           MKLIST(*rp,n);
   }
   
   void Pdp_weyl_true_nf_and_quotient_mod(NODE arg,LIST *rp)
   {
     NODE narg = mknode(5,ARG0(arg),ARG1(arg),ARG2(arg),ARG2(arg),ARG3(arg));
     Pdp_weyl_true_nf_and_quotient_marked_mod(narg,rp);
   }
   
   
 void Pdp_tdiv(NODE arg,DP *rp)  void Pdp_tdiv(NODE arg,DP *rp)
 {  {
         MP m,mr,mr0;          MP m,mr,mr0;
Line 1833  void parse_gr_option(LIST f,NODE opt,LIST *v,Num *homo
Line 1906  void parse_gr_option(LIST f,NODE opt,LIST *v,Num *homo
                         else                          else
                                 *modular = QTOS(m);                                  *modular = QTOS(m);
                         modular_is_set = 1;                          modular_is_set = 1;
                   } else if ( !strcmp(key,"dp") ) {
         /* XXX : ignore */
                 } else                  } else
                         error("parse_gr_option : not implemented");                          error("parse_gr_option : not implemented");
         }          }
Line 2028  void Pdp_gr_mod_main(NODE arg,LIST *rp)
Line 2103  void Pdp_gr_mod_main(NODE arg,LIST *rp)
 void Pnd_f4(NODE arg,LIST *rp)  void Pnd_f4(NODE arg,LIST *rp)
 {  {
         LIST f,v;          LIST f,v;
         int m,homo,retdp;          int m,homo,retdp,ac;
         Obj val;          Obj val;
     Q mq;
     Num nhomo;
     NODE node;
         struct order_spec *ord;          struct order_spec *ord;
   
         do_weyl = 0;          do_weyl = 0;
         nd_rref2 = 0;          nd_rref2 = 0;
         asir_assert(ARG0(arg),O_LIST,"nd_f4");    retdp = 0;
         asir_assert(ARG1(arg),O_LIST,"nd_f4");    if ( (ac = argc(arg)) == 4 ) {
         asir_assert(ARG2(arg),O_N,"nd_f4");            asir_assert(ARG0(arg),O_LIST,"nd_f4");
         f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);            asir_assert(ARG1(arg),O_LIST,"nd_f4");
         f = remove_zero_from_list(f);            asir_assert(ARG2(arg),O_N,"nd_f4");
         if ( !BDY(f) ) {            f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
                 *rp = f; return;            f = remove_zero_from_list(f);
         }            if ( !BDY(f) ) {
         m = QTOS((Q)ARG2(arg));                    *rp = f; return;
         create_order_spec(0,ARG3(arg),&ord);            }
         homo = retdp = 0;        mq = (Q)ARG2(arg);
         if ( get_opt("homo",&val) && val ) homo = 1;        if ( mq && (PL(NM(mq)) > 1 || BD(NM(mq))[0] >= (1<<30)) ) {
         if ( get_opt("dp",&val) && val ) retdp = 1;          node = mknode(1,mq);
         if ( get_opt("rref2",&val) && val ) nd_rref2 = 1;          Psetmod_ff(node,&val);
           m = -2;
       } else
         m = QTOS(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;
             if ( get_opt("rref2",&val) && val ) nd_rref2 = 1;
     } else if ( ac == 1 ) {
             f = (LIST)ARG0(arg);
                   parse_gr_option(f,current_option,&v,&nhomo,&m,&ord);
       homo = QTOS((Q)nhomo);
             if ( get_opt("dp",&val) && val ) retdp = 1;
             if ( get_opt("rref2",&val) && val ) nd_rref2 = 1;
     } else
       error("nd_f4 : invalid argument");
         nd_gr(f,v,m,homo,retdp,1,ord,rp);          nd_gr(f,v,m,homo,retdp,1,ord,rp);
 }  }
   
 void Pnd_gr(NODE arg,LIST *rp)  void Pnd_gr(NODE arg,LIST *rp)
 {  {
         LIST f,v;          LIST f,v;
         int m,homo,retdp;          int m,homo,retdp,ac;
         Obj val;          Obj val;
     Q mq;
     Num nhomo;
     NODE node;
         struct order_spec *ord;          struct order_spec *ord;
   
         do_weyl = 0;          do_weyl = 0;
         asir_assert(ARG0(arg),O_LIST,"nd_gr");    retdp = 0;
         asir_assert(ARG1(arg),O_LIST,"nd_gr");    if ( (ac=argc(arg)) == 4 ) {
         asir_assert(ARG2(arg),O_N,"nd_gr");            asir_assert(ARG0(arg),O_LIST,"nd_gr");
         f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);            asir_assert(ARG1(arg),O_LIST,"nd_gr");
         f = remove_zero_from_list(f);            asir_assert(ARG2(arg),O_N,"nd_gr");
         if ( !BDY(f) ) {            f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
                 *rp = f; return;            f = remove_zero_from_list(f);
         }            if ( !BDY(f) ) {
         m = QTOS((Q)ARG2(arg));                    *rp = f; return;
         create_order_spec(0,ARG3(arg),&ord);            }
         homo = retdp = 0;        mq = (Q)ARG2(arg);
         if ( get_opt("homo",&val) && val ) homo = 1;        if ( mq && (PL(NM(mq)) > 1 || BD(NM(mq))[0] >= (1<<30)) ) {
         if ( get_opt("dp",&val) && val ) retdp = 1;          node = mknode(1,mq);
           Psetmod_ff(node,&val);
           m = -2;
         } else
           m = QTOS(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 = QTOS((Q)nhomo);
             if ( get_opt("dp",&val) && val ) retdp = 1;
     } else
       error("nd_gr : invalid argument");
         nd_gr(f,v,m,homo,retdp,0,ord,rp);          nd_gr(f,v,m,homo,retdp,0,ord,rp);
 }  }
   
Line 2079  void Pnd_gr_postproc(NODE arg,LIST *rp)
Line 2191  void Pnd_gr_postproc(NODE arg,LIST *rp)
 {  {
         LIST f,v;          LIST f,v;
         int m,do_check;          int m,do_check;
       Q mq;
       Obj val;
       NODE node;
         struct order_spec *ord;          struct order_spec *ord;
   
         do_weyl = 0;          do_weyl = 0;
Line 2090  void Pnd_gr_postproc(NODE arg,LIST *rp)
Line 2205  void Pnd_gr_postproc(NODE arg,LIST *rp)
         if ( !BDY(f) ) {          if ( !BDY(f) ) {
                 *rp = f; return;                  *rp = f; return;
         }          }
         m = QTOS((Q)ARG2(arg));      mq = (Q)ARG2(arg);
       if ( mq && (PL(NM(mq)) > 1 || BD(NM(mq))[0] >= (1<<30)) ) {
         node = mknode(1,mq);
         Psetmod_ff(node,&val);
         m = -2;
       } else
         m = QTOS(mq);
         create_order_spec(0,ARG3(arg),&ord);          create_order_spec(0,ARG3(arg),&ord);
         do_check = ARG4(arg) ? 1 : 0;          do_check = ARG4(arg) ? 1 : 0;
         nd_gr_postproc(f,v,m,ord,do_check,rp);          nd_gr_postproc(f,v,m,ord,do_check,rp);
Line 2165  void Pnd_weyl_gr_postproc(NODE arg,LIST *rp)
Line 2286  void Pnd_weyl_gr_postproc(NODE arg,LIST *rp)
 void Pnd_gr_trace(NODE arg,LIST *rp)  void Pnd_gr_trace(NODE arg,LIST *rp)
 {  {
         LIST f,v;          LIST f,v;
         int m,homo;          int m,homo,ac;
     Num nhomo;
         struct order_spec *ord;          struct order_spec *ord;
   
         do_weyl = 0;          do_weyl = 0;
         asir_assert(ARG0(arg),O_LIST,"nd_gr_trace");    if ( (ac = argc(arg)) == 5 ) {
         asir_assert(ARG1(arg),O_LIST,"nd_gr_trace");            asir_assert(ARG0(arg),O_LIST,"nd_gr_trace");
         asir_assert(ARG2(arg),O_N,"nd_gr_trace");            asir_assert(ARG1(arg),O_LIST,"nd_gr_trace");
         asir_assert(ARG3(arg),O_N,"nd_gr_trace");            asir_assert(ARG2(arg),O_N,"nd_gr_trace");
         f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);            asir_assert(ARG3(arg),O_N,"nd_gr_trace");
         f = remove_zero_from_list(f);            f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
         if ( !BDY(f) ) {            f = remove_zero_from_list(f);
                 *rp = f; return;            if ( !BDY(f) ) {
         }                    *rp = f; return;
         homo = QTOS((Q)ARG2(arg));            }
         m = QTOS((Q)ARG3(arg));            homo = QTOS((Q)ARG2(arg));
         create_order_spec(0,ARG4(arg),&ord);            m = QTOS((Q)ARG3(arg));
             create_order_spec(0,ARG4(arg),&ord);
     } else if ( ac == 1 ) {
             f = (LIST)ARG0(arg);
                   parse_gr_option(f,current_option,&v,&nhomo,&m,&ord);
       homo = QTOS((Q)nhomo);
     } else
       error("nd_gr_trace : invalid argument");
         nd_gr_trace(f,v,m,homo,0,ord,rp);          nd_gr_trace(f,v,m,homo,0,ord,rp);
 }  }
   
 void Pnd_f4_trace(NODE arg,LIST *rp)  void Pnd_f4_trace(NODE arg,LIST *rp)
 {  {
         LIST f,v;          LIST f,v;
         int m,homo;          int m,homo,ac;
     Num nhomo;
         struct order_spec *ord;          struct order_spec *ord;
   
         do_weyl = 0;          do_weyl = 0;
         asir_assert(ARG0(arg),O_LIST,"nd_gr_trace");    if ( (ac = argc(arg))==5 ) {
         asir_assert(ARG1(arg),O_LIST,"nd_gr_trace");            asir_assert(ARG0(arg),O_LIST,"nd_f4_trace");
         asir_assert(ARG2(arg),O_N,"nd_gr_trace");            asir_assert(ARG1(arg),O_LIST,"nd_f4_trace");
         asir_assert(ARG3(arg),O_N,"nd_gr_trace");            asir_assert(ARG2(arg),O_N,"nd_f4_trace");
         f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);            asir_assert(ARG3(arg),O_N,"nd_f4_trace");
         f = remove_zero_from_list(f);            f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
         if ( !BDY(f) ) {            f = remove_zero_from_list(f);
                 *rp = f; return;            if ( !BDY(f) ) {
         }                    *rp = f; return;
         homo = QTOS((Q)ARG2(arg));            }
         m = QTOS((Q)ARG3(arg));            homo = QTOS((Q)ARG2(arg));
         create_order_spec(0,ARG4(arg),&ord);            m = QTOS((Q)ARG3(arg));
             create_order_spec(0,ARG4(arg),&ord);
     } else if ( ac == 1 ) {
             f = (LIST)ARG0(arg);
                   parse_gr_option(f,current_option,&v,&nhomo,&m,&ord);
       homo = QTOS((Q)nhomo);
     } else
       error("nd_gr_trace : invalid argument");
         nd_gr_trace(f,v,m,homo,1,ord,rp);          nd_gr_trace(f,v,m,homo,1,ord,rp);
 }  }
   
 void Pnd_weyl_gr(NODE arg,LIST *rp)  void Pnd_weyl_gr(NODE arg,LIST *rp)
 {  {
         LIST f,v;          LIST f,v;
         int m,homo,retdp;          int m,homo,retdp,ac;
         Obj val;          Obj val;
     Num nhomo;
         struct order_spec *ord;          struct order_spec *ord;
   
         do_weyl = 1;          do_weyl = 1;
         asir_assert(ARG0(arg),O_LIST,"nd_weyl_gr");    retdp = 0;
         asir_assert(ARG1(arg),O_LIST,"nd_weyl_gr");    if ( (ac = argc(arg)) == 4 ) {
         asir_assert(ARG2(arg),O_N,"nd_weyl_gr");            asir_assert(ARG0(arg),O_LIST,"nd_weyl_gr");
         f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);            asir_assert(ARG1(arg),O_LIST,"nd_weyl_gr");
         f = remove_zero_from_list(f);            asir_assert(ARG2(arg),O_N,"nd_weyl_gr");
         if ( !BDY(f) ) {            f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
                 *rp = f; do_weyl = 0; return;            f = remove_zero_from_list(f);
         }            if ( !BDY(f) ) {
         m = QTOS((Q)ARG2(arg));                    *rp = f; do_weyl = 0; return;
         create_order_spec(0,ARG3(arg),&ord);            }
         homo = retdp = 0;            m = QTOS((Q)ARG2(arg));
         if ( get_opt("homo",&val) && val ) homo = 1;            create_order_spec(0,ARG3(arg),&ord);
         if ( get_opt("dp",&val) && val ) retdp = 1;            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 = QTOS((Q)nhomo);
             if ( get_opt("dp",&val) && val ) retdp = 1;
     } else
       error("nd_weyl_gr : invalid argument");
         nd_gr(f,v,m,homo,retdp,0,ord,rp);          nd_gr(f,v,m,homo,retdp,0,ord,rp);
         do_weyl = 0;          do_weyl = 0;
 }  }
Line 2234  void Pnd_weyl_gr(NODE arg,LIST *rp)
Line 2381  void Pnd_weyl_gr(NODE arg,LIST *rp)
 void Pnd_weyl_gr_trace(NODE arg,LIST *rp)  void Pnd_weyl_gr_trace(NODE arg,LIST *rp)
 {  {
         LIST f,v;          LIST f,v;
         int m,homo;          int m,homo,ac;
     Num nhomo;
         struct order_spec *ord;          struct order_spec *ord;
   
         do_weyl = 1;          do_weyl = 1;
         asir_assert(ARG0(arg),O_LIST,"nd_weyl_gr_trace");    if ( (ac = argc(arg)) == 5 ) {
         asir_assert(ARG1(arg),O_LIST,"nd_weyl_gr_trace");            asir_assert(ARG0(arg),O_LIST,"nd_weyl_gr_trace");
         asir_assert(ARG2(arg),O_N,"nd_weyl_gr_trace");            asir_assert(ARG1(arg),O_LIST,"nd_weyl_gr_trace");
         asir_assert(ARG3(arg),O_N,"nd_weyl_gr_trace");            asir_assert(ARG2(arg),O_N,"nd_weyl_gr_trace");
         f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);            asir_assert(ARG3(arg),O_N,"nd_weyl_gr_trace");
         f = remove_zero_from_list(f);            f = (LIST)ARG0(arg); v = (LIST)ARG1(arg);
         if ( !BDY(f) ) {            f = remove_zero_from_list(f);
                 *rp = f; do_weyl = 0; return;            if ( !BDY(f) ) {
         }                    *rp = f; do_weyl = 0; return;
         homo = QTOS((Q)ARG2(arg));            }
         m = QTOS((Q)ARG3(arg));            homo = QTOS((Q)ARG2(arg));
         create_order_spec(0,ARG4(arg),&ord);            m = QTOS((Q)ARG3(arg));
             create_order_spec(0,ARG4(arg),&ord);
     } else if ( ac == 1 ) {
             f = (LIST)ARG0(arg);
                   parse_gr_option(f,current_option,&v,&nhomo,&m,&ord);
       homo = QTOS((Q)nhomo);
     } else
       error("nd_weyl_gr_trace : invalid argument");
         nd_gr_trace(f,v,m,homo,0,ord,rp);          nd_gr_trace(f,v,m,homo,0,ord,rp);
         do_weyl = 0;          do_weyl = 0;
 }  }
Line 2425  void Pdp_weyl_gr_mod_main(NODE arg,LIST *rp)
Line 2580  void Pdp_weyl_gr_mod_main(NODE arg,LIST *rp)
   
 VECT current_dl_weight_vector_obj;  VECT current_dl_weight_vector_obj;
 int *current_dl_weight_vector;  int *current_dl_weight_vector;
   int dp_negative_weight;
   
 void Pdp_set_weight(NODE arg,VECT *rp)  void Pdp_set_weight(NODE arg,VECT *rp)
 {  {
Line 2437  void Pdp_set_weight(NODE arg,VECT *rp)
Line 2593  void Pdp_set_weight(NODE arg,VECT *rp)
         else if ( !ARG0(arg) ) {          else if ( !ARG0(arg) ) {
                 current_dl_weight_vector_obj = 0;                  current_dl_weight_vector_obj = 0;
                 current_dl_weight_vector = 0;                  current_dl_weight_vector = 0;
           dp_negative_weight = 0;
                 *rp = 0;                  *rp = 0;
         } else {          } else {
                 if ( OID(ARG0(arg)) != O_VECT && OID(ARG0(arg)) != O_LIST )                  if ( OID(ARG0(arg)) != O_VECT && OID(ARG0(arg)) != O_LIST )
Line 2455  void Pdp_set_weight(NODE arg,VECT *rp)
Line 2612  void Pdp_set_weight(NODE arg,VECT *rp)
                 current_dl_weight_vector = (int *)CALLOC(n,sizeof(int));                  current_dl_weight_vector = (int *)CALLOC(n,sizeof(int));
                 for ( i = 0; i < n; i++ )                  for ( i = 0; i < n; i++ )
                         current_dl_weight_vector[i] = QTOS((Q)v->body[i]);                          current_dl_weight_vector[i] = QTOS((Q)v->body[i]);
           for ( i = 0; i < n; i++ )
               if ( current_dl_weight_vector[i] < 0 ) break;
           if ( i < n )
               dp_negative_weight = 1;
           else
               dp_negative_weight = 0;
                 *rp = v;                  *rp = v;
         }          }
 }  }

Legend:
Removed from v.1.97  
changed lines
  Added in v.1.104

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>