=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/poly4.c,v retrieving revision 1.1.1.1 retrieving revision 1.4 diff -u -p -r1.1.1.1 -r1.4 --- OpenXM/src/kan96xx/Kan/poly4.c 1999/10/08 02:12:02 1.1.1.1 +++ OpenXM/src/kan96xx/Kan/poly4.c 2002/09/08 10:49:50 1.4 @@ -1,3 +1,4 @@ +/* $OpenXM: OpenXM/src/kan96xx/Kan/poly4.c,v 1.3 2001/05/04 01:06:25 takayama Exp $ */ #include #include "datatype.h" #include "stackm.h" @@ -10,17 +11,17 @@ static int degreeOfInitW(POLY f,int w[]); static void shell(v,n) -int v[]; -int n; + int v[]; + int n; { int gap,i,j,temp; for (gap = n/2; gap > 0; gap /= 2) { for (i = gap; i=0 && v[j]m->e[vi].x == ev[i]) { - h = newCell(ft->coeffp,monomialCopy(ft->m)); - xset0(h,vi); /* touch monomial part, so you need to copy it above. */ - ans = ppAdd(ans,h); - } + if (ft->m->e[vi].x == ev[i]) { + h = newCell(ft->coeffp,monomialCopy(ft->m)); + xset0(h,vi); /* touch monomial part, so you need to copy it above. */ + ans = ppAdd(ans,h); + } }else{ - if (ft->m->e[vi].D == ev[i]) { - h = newCell(ft->coeffp,monomialCopy(ft->m)); - dset0(h,vi); - ans = ppAdd(ans,h); - } + if (ft->m->e[vi].D == ev[i]) { + h = newCell(ft->coeffp,monomialCopy(ft->m)); + dset0(h,vi); + ans = ppAdd(ans,h); + } } ft = ft->next; } @@ -113,10 +114,10 @@ POLY v; /* v must be a single variable, e.g. x */ } return(evPoly); } - + struct object parts2(f,v) -POLY f; -POLY v; /* v must be a single variable, e.g. x */ + POLY f; + POLY v; /* v must be a single variable, e.g. x */ { struct matrixOfPOLY *evPoly; int vi = 0; /* index of v */ @@ -189,17 +190,17 @@ POLY v; /* v must be a single variable, e.g. x */ ft = f; while (ft != POLYNULL) { if (vx) { - if (ft->m->e[vi].x == ev[i]) { - h = newCell(ft->coeffp,monomialCopy(ft->m)); - xset0(h,vi); /* touch monomial part, so you need to copy it above. */ - ans = ppAdd(ans,h); - } + if (ft->m->e[vi].x == ev[i]) { + h = newCell(ft->coeffp,monomialCopy(ft->m)); + xset0(h,vi); /* touch monomial part, so you need to copy it above. */ + ans = ppAdd(ans,h); + } }else{ - if (ft->m->e[vi].D == ev[i]) { - h = newCell(ft->coeffp,monomialCopy(ft->m)); - dset0(h,vi); - ans = ppAdd(ans,h); - } + if (ft->m->e[vi].D == ev[i]) { + h = newCell(ft->coeffp,monomialCopy(ft->m)); + dset0(h,vi); + ans = ppAdd(ans,h); + } } ft = ft->next; } @@ -215,10 +216,10 @@ POLY v; /* v must be a single variable, e.g. x */ putoa(rob,0,ob1); putoa(rob,1,ob2); return(rob); } - + int pDegreeWrtV(f,v) -POLY f; -POLY v; + POLY f; + POLY v; { int vx = 1; int vi = 0; @@ -298,8 +299,8 @@ int containVectorVariable(POLY f) } POLY homogenize(f) -POLY f; -/* homogenize by using (*grade)(f) */ + POLY f; + /* homogenize by using (*grade)(f) */ { POLY t; int maxg; @@ -330,13 +331,16 @@ POLY f; } int isHomogenized(f) -POLY f; + POLY f; { POLY t; extern int Homogenize_vec; int maxg; if (!Homogenize_vec) return(isHomogenized_vec(f)); if (f == ZERO) return(1); + if (f->m->ringp->weightedHomogenization) { + return 1; /* BUG: do not chech in case of one-zero homogenization */ + } maxg = (*grade)(f); t = f; while (t != POLYNULL) { @@ -347,18 +351,21 @@ POLY f; } int isHomogenized_vec(f) -POLY f; + POLY f; { -/* This is not efficient version. *grade should be grade_module1v(). */ + /* This is not efficient version. *grade should be grade_module1v(). */ POLY t; int ggg; if (f == ZERO) return(1); + if (f->m->ringp->weightedHomogenization) { + return 1; /* BUG: do not chech in case of one-zero homogenization */ + } while (f != POLYNULL) { t = f; ggg = (*grade)(f); while (t != POLYNULL) { if ((*isSameComponent)(f,t)) { - if (ggg != (*grade)(t)) return(0); + if (ggg != (*grade)(t)) return(0); } t = t->next; } @@ -369,7 +376,7 @@ POLY f; static int degreeOfPrincipalPart(f) -POLY f; + POLY f; { int n,i,dd; if (f ISZERO) return(0); @@ -382,7 +389,7 @@ POLY f; } POLY POLYToPrincipalPart(f) -POLY f; + POLY f; { POLY node; struct listPoly nod; @@ -411,8 +418,8 @@ POLY f; } static int degreeOfInitW(f,w) -POLY f; -int w[]; + POLY f; + int w[]; { int n,i,dd; if (f ISZERO) { @@ -427,8 +434,8 @@ int w[]; } POLY POLYToInitW(f,w) -POLY f; -int w[]; /* weight vector */ + POLY f; + int w[]; /* weight vector */ { POLY node; struct listPoly nod; @@ -492,14 +499,15 @@ int isTheSameRing(struct ring *rstack[],int rp, struct if (rrr->orderMatrixSize != newRingp->orderMatrixSize) { a=12; goto bbb ; } for (i=0; iorderMatrixSize; i++) { for (j=0; j<2*(rrr->n); j++) { - if (rrr->order[i*2*(rrr->n)+j] != newRingp->order[i*2*(rrr->n)+j]) - { a=13; goto bbb ; } + if (rrr->order[i*2*(rrr->n)+j] != newRingp->order[i*2*(rrr->n)+j]) + { a=13; goto bbb ; } } } if (rrr->next != newRingp->next) { a=14; goto bbb ; } if (rrr->multiplication != newRingp->multiplication) { a=15; goto bbb ; } /* if (rrr->schreyer != newRingp->schreyer) { a=16; goto bbb ; }*/ if (newRingp->schreyer == 1) { a=16; goto bbb; } + if (rrr->weightedHomogenization != newRingp->weightedHomogenization) { a=16; goto bbb; } /* The following fields are ignored. void *gbListTower; int *outputOrder;