[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.12 and 1.15

version 1.12, 2000/12/11 02:00:40 version 1.15, 2001/01/11 08:43:21
Line 45 
Line 45 
  * 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.11 2000/12/08 08:26:08 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.14 2000/12/14 08:43:47 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 77  void Pdp_mbase(),Pdp_lnf_mod(),Pdp_nf_tab_mod(),Pdp_md
Line 77  void Pdp_mbase(),Pdp_lnf_mod(),Pdp_nf_tab_mod(),Pdp_md
 void Pdp_vtoe(), Pdp_etov(), Pdp_dtov(), Pdp_idiv(), Pdp_sep();  void Pdp_vtoe(), Pdp_etov(), Pdp_dtov(), Pdp_idiv(), Pdp_sep();
 void Pdp_cont();  void Pdp_cont();
   
 void Pdp_weyl_red(),Pdp_weyl_sp(),Pdp_weyl_nf();  void Pdp_weyl_red();
   void Pdp_weyl_sp();
   void Pdp_weyl_nf(),Pdp_weyl_nf_mod();
 void Pdp_weyl_gr_main(),Pdp_weyl_gr_mod_main();  void Pdp_weyl_gr_main(),Pdp_weyl_gr_mod_main();
 void Pdp_weyl_f4_main(),Pdp_weyl_f4_mod_main();  void Pdp_weyl_f4_main(),Pdp_weyl_f4_mod_main();
 void Pdp_weyl_mul();  void Pdp_weyl_mul(),Pdp_weyl_mul_mod();
   void Pdp_weyl_set_weight();
   
 struct ftab dp_tab[] = {  struct ftab dp_tab[] = {
         /* content reduction */          /* content reduction */
Line 118  struct ftab dp_tab[] = {
Line 121  struct ftab dp_tab[] = {
 /* weyl algebra */  /* weyl algebra */
         /* multiplication */          /* multiplication */
         {"dp_weyl_mul",Pdp_weyl_mul,2},          {"dp_weyl_mul",Pdp_weyl_mul,2},
           {"dp_weyl_mul_mod",Pdp_weyl_mul_mod,3},
   
         /* s-poly */          /* s-poly */
         {"dp_weyl_sp",Pdp_weyl_sp,2},          {"dp_weyl_sp",Pdp_weyl_sp,2},
Line 127  struct ftab dp_tab[] = {
Line 131  struct ftab dp_tab[] = {
   
         /* normal form */          /* normal form */
         {"dp_weyl_nf",Pdp_weyl_nf,4},          {"dp_weyl_nf",Pdp_weyl_nf,4},
           {"dp_weyl_nf_mod",Pdp_weyl_nf_mod,5},
   
         /* Buchberger algorithm */          /* Buchberger algorithm */
         {"dp_weyl_gr_main",Pdp_weyl_gr_main,5},          {"dp_weyl_gr_main",Pdp_weyl_gr_main,5},
Line 136  struct ftab dp_tab[] = {
Line 141  struct ftab dp_tab[] = {
         {"dp_weyl_f4_main",Pdp_weyl_f4_main,3},          {"dp_weyl_f4_main",Pdp_weyl_f4_main,3},
         {"dp_weyl_f4_mod_main",Pdp_weyl_f4_mod_main,4},          {"dp_weyl_f4_mod_main",Pdp_weyl_f4_mod_main,4},
   
           /* misc */
           {"dp_weyl_set_weight",Pdp_weyl_set_weight,-1},
         {0,0,0},          {0,0,0},
 };  };
   
Line 509  DP *rp;
Line 516  DP *rp;
         do_weyl = 0;          do_weyl = 0;
 }  }
   
   void Pdp_nf_mod(arg,rp)
   NODE arg;
   DP *rp;
   {
           NODE b;
           DP g;
           DP *ps;
           int mod,full,ac;
           NODE n,n0;
   
           do_weyl = 0;
           ac = argc(arg);
           asir_assert(ARG0(arg),O_LIST,"dp_nf_mod");
           asir_assert(ARG1(arg),O_DP,"dp_nf_mod");
           asir_assert(ARG2(arg),O_VECT,"dp_nf_mod");
           asir_assert(ARG3(arg),O_N,"dp_nf_mod");
           asir_assert(ARG4(arg),O_N,"dp_nf_mod");
           if ( !(g = (DP)ARG1(arg)) ) {
                   *rp = 0; return;
           }
           b = BDY((LIST)ARG0(arg)); ps = (DP *)BDY((VECT)ARG2(arg));
           full = QTOS((Q)ARG3(arg)); mod = QTOS((Q)ARG4(arg));
           for ( n0 = n = 0; b; b = NEXT(b) ) {
                   NEXTNODE(n0,n);
                   BDY(n) = (pointer)QTOS((Q)BDY(b));
           }
           if ( n0 )
                   NEXT(n) = 0;
           dp_nf_mod(n0,g,ps,mod,full,rp);
   }
   
 void Pdp_true_nf(arg,rp)  void Pdp_true_nf(arg,rp)
 NODE arg;  NODE arg;
 LIST *rp;  LIST *rp;
Line 537  LIST *rp;
Line 575  LIST *rp;
         NEXT(NEXT(n)) = 0; MKLIST(*rp,n);          NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
 }  }
   
 void Pdp_nf_mod(arg,rp)  void Pdp_weyl_nf_mod(arg,rp)
 NODE arg;  NODE arg;
 DP *rp;  DP *rp;
 {  {
Line 547  DP *rp;
Line 585  DP *rp;
         int mod,full,ac;          int mod,full,ac;
         NODE n,n0;          NODE n,n0;
   
         do_weyl = 0;  
         ac = argc(arg);          ac = argc(arg);
         asir_assert(ARG0(arg),O_LIST,"dp_nf_mod");          asir_assert(ARG0(arg),O_LIST,"dp_weyl_nf_mod");
         asir_assert(ARG1(arg),O_DP,"dp_nf_mod");          asir_assert(ARG1(arg),O_DP,"dp_weyl_nf_mod");
         asir_assert(ARG2(arg),O_VECT,"dp_nf_mod");          asir_assert(ARG2(arg),O_VECT,"dp_weyl_nf_mod");
         asir_assert(ARG3(arg),O_N,"dp_nf_mod");          asir_assert(ARG3(arg),O_N,"dp_weyl_nf_mod");
         asir_assert(ARG4(arg),O_N,"dp_nf_mod");          asir_assert(ARG4(arg),O_N,"dp_weyl_nf_mod");
         if ( !(g = (DP)ARG1(arg)) ) {          if ( !(g = (DP)ARG1(arg)) ) {
                 *rp = 0; return;                  *rp = 0; return;
         }          }
Line 565  DP *rp;
Line 602  DP *rp;
         }          }
         if ( n0 )          if ( n0 )
                 NEXT(n) = 0;                  NEXT(n) = 0;
         dp_nf_mod(n,g,ps,mod,full,rp);          do_weyl = 1;
           dp_nf_mod(n0,g,ps,mod,full,rp);
           do_weyl = 0;
 }  }
   
 void Pdp_true_nf_mod(arg,rp)  void Pdp_true_nf_mod(arg,rp)
Line 685  LIST *rp;
Line 724  LIST *rp;
         NEWNODE(NEXT(n)); BDY(NEXT(n)) = (pointer)r;          NEWNODE(NEXT(n)); BDY(NEXT(n)) = (pointer)r;
         NEXT(NEXT(n)) = 0; MKLIST(*rp,n);          NEXT(NEXT(n)) = 0; MKLIST(*rp,n);
 }  }
   
 void Pdp_subd(arg,rp)  void Pdp_subd(arg,rp)
 NODE arg;  NODE arg;
 DP *rp;  DP *rp;
Line 710  DP *rp;
Line 750  DP *rp;
         do_weyl = 0;          do_weyl = 0;
 }  }
   
   void Pdp_weyl_mul_mod(arg,rp)
   NODE arg;
   DP *rp;
   {
           DP p1,p2;
           Q m;
   
           p1 = (DP)ARG0(arg); p2 = (DP)ARG1(arg); m = (Q)ARG2(arg);
           asir_assert(p1,O_DP,"dp_weyl_mul_mod");
           asir_assert(p2,O_DP,"dp_mul_mod");
           asir_assert(m,O_N,"dp_mul_mod");
           do_weyl = 1;
           mulmd(CO,QTOS(m),p1,p2,rp);
           do_weyl = 0;
   }
   
 void Pdp_red(arg,rp)  void Pdp_red(arg,rp)
 NODE arg;  NODE arg;
 LIST *rp;  LIST *rp;
Line 1266  LIST *rp;
Line 1322  LIST *rp;
         do_weyl = 0;          do_weyl = 0;
 }  }
   
   static VECT current_weight_vector_obj;
   int *current_weight_vector;
   
   void Pdp_weyl_set_weight(arg,rp)
   NODE arg;
   VECT *rp;
   {
           VECT v;
           int i,n;
   
           if ( !arg )
                   *rp = current_weight_vector_obj;
           else {
                   asir_assert(ARG0(arg),O_VECT,"dp_weyl_set_weight");
                   v = (VECT)ARG0(arg);
                   current_weight_vector_obj = v;
                   n = v->len;
                   current_weight_vector = (int *)CALLOC(n,sizeof(int));
                   for ( i = 0; i < n; i++ )
                           current_weight_vector[i] = QTOS((Q)v->body[i]);
                   *rp = v;
           }
   }

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.15

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