Changeset 81f40d7 in git for kernel/GBEngine


Ignore:
Timestamp:
Jul 6, 2015, 11:02:59 AM (9 years ago)
Author:
Adi Popescu <adi_popescum@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'd08f5f0bb3329b8ca19f23b74cb1473686415c3a')
Children:
83b334dad0b1a90e01e1ae2ea14eb8a09c1c3709
Parents:
a4698147758e1dabc111299150716127442050e9
Message:
fixed push
Location:
kernel/GBEngine
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/GBEngine/kutil.cc

    ra469814 r81f40d7  
    3636#include <kernel/ideals.h>
    3737#endif
    38 #include <gmp.h>
    3938
    4039// define if enterL, enterT should use memmove instead of doing it manually
     
    50315030#if 0
    50325031  if (length < 0) return 0;
    5033   //if(pIsConstant(pHead(p->p))) return length+1;
    50345032  if (pLmCmp(set[length].p, p->p) == 1)
    50355033      return length+1;
     
    50415039  int en = length+1;
    50425040  bool isFromF = (p->p1 == NULL) && (p->p2 == NULL);
    5043   #if 0
    5044   printf("\nThis is L:\n");
    5045   for(int ii=0; ii<=strat->Ll; ii++)
    5046   {
    5047         printf("\nL[%i]: grad  = %i, length = %i\n", ii,set[ii].FDeg,set[ii].length);
    5048         pWrite(set[ii].p);
    5049         pWrite(set[ii].p1);
    5050         pWrite(set[ii].p2);
    5051         pWrite(pHead(set[ii].p));
    5052         printf("\nlmcmp = %i\n",pLmCmp(pHead(set[ii].p), pHead(p->p)));
    5053   }
    5054   printf("\nThis is P:\n");pWrite(p->p);pWrite(p->p1);pWrite(p->p2);
    5055   #endif
    50565041  if(isFromF)
    50575042  {
    5058     //printf("\nisFromF\n");
    50595043    i = 0;
    50605044    while(i<=length && pLmCmp(set[i].p, p->p)==1)
     
    50705054  else
    50715055  {
    5072     //printf("\nis not FromF\n");
    50735056    i = 0;
    50745057    while(i<= length && pLmCmp(set[i].p, p->p) == 1)
    50755058      i++;
    50765059    an = i;
    5077     //printf("\nan = %i\n",an);
    50785060    i = length;
    5079     //printf("\ni = %i\n", i);
    50805061    while(i>=0 && pLmCmp(set[i].p, p->p)==-1)
    50815062      i--;
    5082     //printf("\ni2 = %i\n", i);
    50835063    while(i<= length && ((set[i].p1 == NULL) && (set[i].p2 == NULL)) && (pLmCmp(set[i].p,p->p) == 0) && (i > an))
    50845064      i--;
    50855065    en = i+1;
    5086     //printf("\nen = %i\n",en);
    5087   }
    5088   //printf("\nan = %i\n en = %i\n",an,en);
    5089   //getchar();
     5066  }
    50905067  loop
    50915068  {
     
    51215098    }                                 
    51225099  }
    5123   #else
     5100#else
    51245101  if (length < 0) return 0;
    51255102  if(pIsConstant(p->p)) return length+1;
     
    51385115  return 0;
    51395116
    5140 bool isFromF = (p->p1 == NULL) && (p->p2 == NULL);
    5141 #if 0
    5142 //printf("\nThis is L:\n");
    5143 /*for(int ii=0; ii<=strat->Ll; ii++)
    5144 {
    5145 printf("\nL[%i]: grad = %i, length = %i\n", ii,set[ii].FDeg,set[ii].length);
    5146 pWrite(set[ii].p);
    5147 pWrite(set[ii].p1);
    5148 pWrite(set[ii].p2);
    5149 }*/
    5150 printf("\nThis is P:\n");pWrite(p->p);pWrite(p->p1);pWrite(p->p2);
    5151 #endif
    5152 if(isFromF)
    5153 {
    5154 //printf("\nisFromF\n");
    5155 i = 0;
    5156  while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p))
    5157 i++;
    5158  while(i<= length && ((set[i].p1 != NULL) || (set[i].p2 != NULL)) && (set[i].FDeg == p->FDeg) && !pIsConstant(set[i].p))
    5159 i++;
    5160 an = i;
    5161 if(pIsConstant(set[length].p))
    5162   i = length-1;
    5163 else
    5164   i = length;
    5165  while(i>=0 && set[i].FDeg < p->FDeg)
    5166 i--;
    5167 en = i+1;
    5168 }
    5169 else
    5170 {
    5171 //printf("\nis not FromF\n");
    5172 i = 0;
    5173  while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p))
    5174 i++;
    5175 an = i;
    5176 //printf("\nan = %i\n",an);
    5177 if(pIsConstant(set[length].p))
    5178   i = length-1;
    5179 else
    5180   i = length;
    5181 //printf("\ni = %i\n", i);
    5182  while(i>= 0 && set[i].FDeg < p->FDeg)
    5183 i--;
    5184 //printf("\ni2 = %i\n", i);
    5185  while(i>=0 && ((set[i].p1 == NULL) && (set[i].p2 == NULL)) && (set[i].FDeg == p->FDeg) && (i > an))
    5186 i--;
    5187 en = i+1;
    5188 //printf("\nen = %i\n",en);
    5189 }
    5190 //printf("\nan = %i\n en = %i\n",an,en);
    5191 //getchar();
    5192 loop
    5193 {
    5194   if(an > length)
    5195     return length+1;
    5196   if (an >= en-1)
    5197   {
    5198     if(an == en)
    5199       return en;
    5200     if (pLmCmp(set[an].p, p->p) == 1)
    5201       return en;
    5202     if (pLmCmp(set[an].p, p->p) == -1)
    5203       return an;
     5117  bool isFromF = (p->p1 == NULL) && (p->p2 == NULL);
     5118
     5119  if(isFromF)
     5120  {
     5121    i = 0;
     5122    while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p))
     5123      i++;
     5124    while(i<= length && ((set[i].p1 != NULL) || (set[i].p2 != NULL)) &&
     5125         (set[i].FDeg == p->FDeg) && !pIsConstant(set[i].p))
     5126      i++;
     5127    an = i;
     5128    if(pIsConstant(set[length].p))
     5129      i = length-1;
     5130    else
     5131      i = length;
     5132    while(i>=0 && set[i].FDeg < p->FDeg)
     5133      i--;
     5134    en = i+1;
     5135  }
     5136  else
     5137  {
     5138    i = 0;
     5139    while(i<= length && set[i].FDeg > p->FDeg && !pIsConstant(set[i].p))
     5140      i++;
     5141    an = i;
     5142    if(pIsConstant(set[length].p))
     5143      i = length-1;
     5144    else
     5145      i = length;
     5146    while(i>= 0 && set[i].FDeg < p->FDeg)
     5147      i--;
     5148    while(i>=0 && ((set[i].p1 == NULL) && (set[i].p2 == NULL)) &&
     5149         (set[i].FDeg == p->FDeg) && (i > an))
     5150      i--;
     5151    en = i+1;
     5152  }
     5153  loop
     5154  {
     5155    if(an > length)
     5156      return length+1;
     5157    if (an >= en-1)
     5158    {
     5159      if(an == en)
     5160        return en;
     5161      if (pLmCmp(set[an].p, p->p) == 1)
     5162        return en;
     5163      if (pLmCmp(set[an].p, p->p) == -1)
     5164        return an;
     5165      if (pLmCmp(set[i].p, p->p) == 0)
     5166      {
     5167        if(nGreater(set[an].p->coef, p->p->coef))
     5168          return en;
     5169        else
     5170          return an;
     5171      }
     5172    }
     5173    i=(an+en) / 2;
     5174    if (pLmCmp(set[i].p, p->p) == 1)
     5175      an=i;
     5176    if (pLmCmp(set[i].p, p->p) == -1)
     5177      en=i;
    52045178    if (pLmCmp(set[i].p, p->p) == 0)
    52055179    {
    5206       if(nGreater(set[an].p->coef, p->p->coef))
    5207         return en;
     5180      if(nGreater(set[i].p->coef, p->p->coef))
     5181        an = i;
    52085182      else
    5209         return an;
    5210     }
    5211   }
    5212   i=(an+en) / 2;
    5213   if (pLmCmp(set[i].p, p->p) == 1)
    5214     an=i;
    5215   if (pLmCmp(set[i].p, p->p) == -1)
    5216     en=i;
    5217   if (pLmCmp(set[i].p, p->p) == 0)
    5218   {
    5219     if(nGreater(set[i].p->coef, p->p->coef))
    5220       an = i;
    5221     else
    5222       en = i;
    5223   }
    5224 }
    5225 #endif
    5226 }
     5183        en = i;
     5184    }
     5185  }
     5186#endif
     5187}
     5188
     5189
    52275190/*2 Position for rings L: Here I am
    52285191* looks up the position of polynomial p in set
     
    88048767        }
    88058768    }
    8806     ring QQ_ring = rCopy(currRing);
    8807     rUnComplete(QQ_ring);
    8808     QQ_ring->cf->ref--;
     8769    ring QQ_ring = rCopy0(currRing,FALSE);
     8770    nKillChar(QQ_ring->cf);
    88098771    QQ_ring->cf = nInitChar(n_Q, NULL);
    8810     if(Q!= NULL)
    8811         QQ_ring->qideal = NULL;
    88128772    rComplete(QQ_ring,1);
    88138773    QQ_ring = rAssure_c_dp(QQ_ring);
     
    88158775    nMapFunc nMap = n_SetMap(origR->cf, QQ_ring->cf);
    88168776    ideal II = idInit(IDELEMS(F)+idelemQ+2,id_RankFreeModule(F, origR));
    8817     int *perm = (int *)omAlloc0((QQ_ring->N+1)*sizeof(int));
    8818     for(int i=QQ_ring->N;i>0;i--)
    8819         perm[i]=i;
    88208777    for(int i = 0, j = 0; i<IDELEMS(F); i++)
    8821         II->m[j++] = p_PermPoly(F->m[i], perm, origR, QQ_ring, nMap, NULL, 0);
     8778        II->m[j++] = prMapR(F->m[i], nMap, origR, QQ_ring);
    88228779    for(int i = 0, j = IDELEMS(F); i<idelemQ; i++)
    8823         II->m[j++] = p_PermPoly(Q->m[i], perm, origR, QQ_ring, nMap, NULL, 0);
    8824     //rWrite(currRing);
     8780        II->m[j++] = prMapR(Q->m[i], nMap, origR, QQ_ring);
    88258781    ideal one = kStd(II, NULL, isNotHomog, NULL);
    88268782    idSkipZeroes(one);
     
    88388794            if(pGetComp(syz->m[i]) == 1)
    88398795            {
    8840                 if(p_Deg(pHead(syz->m[i]), currRing) == 0)
     8796                if(pIsConstant(syz->m[i]))
    88418797                {
    8842                     integer = pCopy(pHead(syz->m[i]));
     8798                    integer = pHead(syz->m[i]);
    88438799                    pSetComp(integer, 0);
    88448800                    break;
     
    88488804        rChangeCurrRing(origR);
    88498805        nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf);
    8850         pmon = p_PermPoly(integer, perm, QQ_ring, origR, nMap2, NULL, 0);
     8806        pmon = prMapR(integer, nMap2, QQ_ring, origR);
     8807        rDelete(QQ_ring);
    88518808        return pmon;
    88528809    }
     
    88818838                if(pGetComp(syz->m[i]) == 1)
    88828839                {
    8883                     if(p_Deg(pHead(syz->m[i]), currRing) == 0)
     8840                    if(pIsConstant(syz->m[i]))
    88848841                    {
    88858842                        pSetCoeff(mindegmon, syz->m[i]->coef);
     
    88928849            {
    88938850                rChangeCurrRing(origR);
     8851                rDelete(QQ_ring);
    88948852                return NULL;
    88958853            }
    88968854            rChangeCurrRing(origR);
    88978855            nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf);
    8898             pmon = p_PermPoly(mindegmon, perm, QQ_ring, origR, nMap2, NULL, 0);
     8856            pmon = prMapR(mindegmon, nMap2, QQ_ring, origR);
     8857            rDelete(QQ_ring);
    88998858            return pmon;
    89008859        }
     
    89058864        rChangeCurrRing(origR);
    89068865    }
     8866    rDelete(QQ_ring);
    89078867    return NULL;
    89088868  }
     
    89308890        if(pLmDivisibleBy(strat->S[i], p))
    89318891        {
     8892          nDelete(&(p->coef));
    89328893          p->coef = currRing->cf->cfIntMod(p->coef, strat->S[i]->coef, currRing->cf);
    89338894        }
     
    89478908        if(pLmDivisibleBy(strat->S[i], pp))
    89488909        {
     8910          nDelete(&(pp->coef));
    89498911          pp->coef = currRing->cf->cfIntMod(pp->coef, strat->S[i]->coef, currRing->cf);
    89508912          if(nIsZero(pp->coef))
     
    89668928        }
    89678929      }
    8968       //printf("\nAfter\n");pWrite(pH);
    8969     }
    8970   }
    8971   //printf("\nFinal\n");pWrite(pH);getchar();
     8930    }
     8931  }
    89728932  h->SetLmCurrRing();
    89738933  if(deleted)
     
    89808940              intermediate coefficient swell and beautifies output
    89818941*/
    8982 void finalReduceByMon(kStrategy &strat)
     8942void finalReduceByMon(kStrategy strat)
    89838943{
    89848944  if(!nCoeff_is_Ring_Z(currRing->cf))
     
    89968956          if(pLmDivisibleBy(strat->S[j], p))
    89978957          {
     8958            nDelete(&(p->coef));
    89988959            p->coef = currRing->cf->cfIntMod(p->coef, strat->S[j]->coef, currRing->cf);
    89998960          }
     
    90018962          if((pp == NULL) && (nIsZero(p->coef)))
    90028963          {
    9003             strat->S[i] = NULL;
    9004             //deleteInS(i, strat);
     8964            deleteInS(i, strat);
    90058965          }
    90068966          else
     
    90108970                if(pLmDivisibleBy(strat->S[j], pp))
    90118971                {
     8972                  nDelete(&(pp->coef));
    90128973                  pp->coef = currRing->cf->cfIntMod(pp->coef, strat->S[j]->coef, currRing->cf);
    90138974                  if(nIsZero(pp->coef))
  • kernel/GBEngine/kutil.h

    ra469814 r81f40d7  
    200200                      // detected by Buchberger's Product Criterion and can be
    201201                      // deleted
    202 
    203   bool strong;
    204202
    205203  // initialization
Note: See TracChangeset for help on using the changeset viewer.