[BACK]Return to poly4.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Diff for /OpenXM/src/kan96xx/Kan/poly4.c between version 1.5 and 1.7

version 1.5, 2003/07/10 08:20:04 version 1.7, 2003/07/19 06:03:57
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kan96xx/Kan/poly4.c,v 1.4 2002/09/08 10:49:50 takayama Exp $ */  /* $OpenXM: OpenXM/src/kan96xx/Kan/poly4.c,v 1.6 2003/07/17 07:33:03 takayama Exp $ */
 #include <stdio.h>  #include <stdio.h>
 #include "datatype.h"  #include "datatype.h"
 #include "stackm.h"  #include "stackm.h"
Line 508  int isTheSameRing(struct ring *rstack[],int rp, struct
Line 508  int isTheSameRing(struct ring *rstack[],int rp, struct
     /* if (rrr->schreyer != newRingp->schreyer) { a=16; goto bbb ; }*/      /* if (rrr->schreyer != newRingp->schreyer) { a=16; goto bbb ; }*/
     if (newRingp->schreyer == 1) { a=16; goto bbb; }      if (newRingp->schreyer == 1) { a=16; goto bbb; }
     if (rrr->weightedHomogenization != newRingp->weightedHomogenization) { a=16; goto bbb; }      if (rrr->weightedHomogenization != newRingp->weightedHomogenization) { a=16; goto bbb; }
       if (rrr->degreeShiftSize != newRingp->degreeShiftSize) {
         a = 17; goto bbb;
       }
       if (rrr->degreeShiftN != newRingp->degreeShiftN) {
         a = 17; goto bbb;
       }
       for (i=0; i < rrr->degreeShiftSize; i++) {
         for (j=0; j< rrr->degreeShiftN; j++) {
           if (rrr->degreeShift[i*(rrr->degreeShiftN)+j] !=
               newRingp->degreeShift[i*(rrr->degreeShiftN)+j]) {
             a = 17; goto bbb;
           }
         }
       }
   
     /* The following fields are ignored.      /* The following fields are ignored.
        void *gbListTower;         void *gbListTower;
        int *outputOrder;         int *outputOrder;
Line 521  int isTheSameRing(struct ring *rstack[],int rp, struct
Line 536  int isTheSameRing(struct ring *rstack[],int rp, struct
   }    }
   return(-1);    return(-1);
 }  }
   
   /* s->1 */
   POLY goDeHomogenizeS(POLY f) {
     POLY node;
     POLY lastf;
     struct listPoly nod;
     POLY h;
     POLY tf;
     int gt,first;
   
     if (f == POLYNULL) return(POLYNULL);
     node = &nod;
     node->next = POLYNULL;
     lastf = POLYNULL;
     first = 1;
     while (f != POLYNULL) {
       tf = newCell(f->coeffp,monomialCopy(f->m));
       tf->m->e[0].x = 0;  /* H, s variable in the G-O paper. */
       if (first) {
         node->next = tf;
         lastf = tf;
         first = 0;
       }else{
         gt = (*mmLarger)(lastf,tf);
         if (gt == 1) {
           lastf->next = tf;
           lastf = tf;
         }else{
           h = node->next;
           h = ppAddv(h,tf);
           node->next = h;
           lastf = h;
           while (lastf->next != POLYNULL) {
             lastf = lastf->next;
           }
         }
       }
       f = f->next;
     }
     return (node->next);
   }
   
 /* Granger-Oaku's homogenization for the ecart tangent cone.  /* Granger-Oaku's homogenization for the ecart tangent cone.
    Note: 2003.07.10.     Note: 2003.07.10.
    ds[] is the degree shift.     ds[] is the degree shift.
    ei ( element index ). If it is < 0, then e[n-1]->x will be used,     ei ( element index ). If it is < 0, then e[n-1]->x will be used,
                          else ei is used.                           else ei is used.
      if onlyS is set to 1, then input is assumed to be (u,v)-h-homogeneous.
 */  */
 POLY goHomogenize(POLY f,int u[],int v[],int ds[],int dssize,int ei)  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int dssize,int ei,int onlyS)
 {  {
   POLY node;    POLY node;
   POLY lastf;    POLY lastf;
Line 536  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
Line 593  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
   POLY h;    POLY h;
   POLY tf;    POLY tf;
   int gt,first,m,mp,t,tp,dsIdx,message;    int gt,first,m,mp,t,tp,dsIdx,message;
     struct ring *rp;
   
   message = 1;    message = 1;
   if (f == POLYNULL) return(POLYNULL);    if (f == POLYNULL) return(POLYNULL);
     rp = f->m->ringp;
     if ((rp->degreeShiftSize == 0) && (dssize > 0)) {
           warningPoly("You are trying to homogenize a polynomial with degree shift. However, the polynomial belongs to the ring without degreeShift option. It may cause a trouble in comparison in free module.\n");
     }
   node = &nod;    node = &nod;
   node->next = POLYNULL;    node->next = POLYNULL;
   lastf = POLYNULL;    lastf = POLYNULL;
Line 560  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
Line 622  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
       /*go-debug fprintf(stderr,"Automatic dehomogenize and homogenize.\n"); */        /*go-debug fprintf(stderr,"Automatic dehomogenize and homogenize.\n"); */
           message = 0;            message = 0;
         }          }
     tf->m->e[0].D = -t;  /* h */          if (!onlyS) {
             tf->m->e[0].D = -t;  /* h */
           }
     tf->m->e[0].x = tp;  /* H, s variable in the G-O paper. */      tf->m->e[0].x = tp;  /* H, s variable in the G-O paper. */
         /*go-debug printf("t(h)=%d, tp(uv+ds)=%d\n",t,tp); */          /*go-debug printf("t(h)=%d, tp(uv+ds)=%d\n",t,tp); */
     if (first) {      if (first) {
Line 589  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
Line 653  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
   /*go-debug printf("m=%d, mp=%d\n",m,mp); */    /*go-debug printf("m=%d, mp=%d\n",m,mp); */
   while (h != POLYNULL) {    while (h != POLYNULL) {
     /*go-debug printf("Old: h=%d, s=%d\n",h->m->e[0].D,h->m->e[0].x); */      /*go-debug printf("Old: h=%d, s=%d\n",h->m->e[0].D,h->m->e[0].x); */
     h->m->e[0].D += m;   /* h */      if (!onlyS) h->m->e[0].D += m;   /* h */
     h->m->e[0].x += -mp; /* H, s*/      h->m->e[0].x += -mp; /* H, s*/
     /*go-debug printf("New: h=%d, s=%d\n",h->m->e[0].D,h->m->e[0].x); */      /*go-debug printf("New: h=%d, s=%d\n",h->m->e[0].D,h->m->e[0].x); */
     h = h->next;      h = h->next;
Line 598  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
Line 662  POLY goHomogenize(POLY f,int u[],int v[],int ds[],int 
 }  }
   
 /* u[] = -1, v[] = 1 */  /* u[] = -1, v[] = 1 */
 POLY goHomogenize11(POLY f,int ds[],int dssize,int ei)  POLY goHomogenize11(POLY f,int ds[],int dssize,int ei,int onlyS)
 {  {
   int r;    int r;
   int i,t,n,m,nn;    int i,t,n,m,nn;
Line 622  POLY goHomogenize11(POLY f,int ds[],int dssize,int ei)
Line 686  POLY goHomogenize11(POLY f,int ds[],int dssize,int ei)
           u[i] = -1; v[i] = 1;            u[i] = -1; v[i] = 1;
         }          }
   }    }
   return(goHomogenize(f,u,v,ds,dssize,ei));    return(goHomogenize(f,u,v,ds,dssize,ei,onlyS));
 }  }
   
 POLY goHomogenize_dsIdx(POLY f,int u[],int v[],int dsIdx,int ei)  POLY goHomogenize_dsIdx(POLY f,int u[],int v[],int dsIdx,int ei,int onlyS)
 {  {
   if (f == POLYNULL) return POLYNULL;    if (f == POLYNULL) return POLYNULL;
 }  }
 POLY goHomogenize11_dsIdx(POLY f,int ds[],int dsIdx,int ei)  POLY goHomogenize11_dsIdx(POLY f,int ds[],int dsIdx,int ei,int onlyS)
 {  {
   if (f == POLYNULL) return POLYNULL;    if (f == POLYNULL) return POLYNULL;
 }  }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.7

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