Changeset d5856f in git


Ignore:
Timestamp:
Dec 6, 2013, 4:05:10 PM (9 years ago)
Author:
Christian Eder
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '48f1dd268d0ff74ef2f7dccbf02545425002ddcc')
Children:
1eba3916d70fdfa610391e2779d72b202c1b7915
Parents:
cda0b04282903cc2bac5f3b79cb72d0319602785
git-author:
Christian Eder <ederc@mathematik.uni-kl.de>2013-12-06 16:05:10+01:00
git-committer:
Christian Eder <ederc@mathematik.uni-kl.de>2013-12-12 13:51:29+01:00
Message:
fixes & improves syzygy handling in sba
Location:
kernel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/kstd2.cc

    rcda0b0 rd5856f  
    5555#define SBA_TAIL_RED                        1
    5656#define SBA_PRODUCT_CRITERION               0
    57 #define SBA_PRINT_ZERO_REDUCTIONS           1
    58 #define SBA_PRINT_REDUCTION_STEPS           1
    59 #define SBA_PRINT_OPERATIONS                1
    60 #define SBA_PRINT_SIZE_G                    1
    61 #define SBA_PRINT_SIZE_SYZ                  1
     57#define SBA_PRINT_ZERO_REDUCTIONS           0
     58#define SBA_PRINT_REDUCTION_STEPS           0
     59#define SBA_PRINT_OPERATIONS                0
     60#define SBA_PRINT_SIZE_G                    0
     61#define SBA_PRINT_SIZE_SYZ                  0
    6262#define SBA_PRINT_PRODUCT_CRITERION         0
    6363
     
    17151715  for (int i=0; i<sort->length();++i)
    17161716    F->m[i] = F1->m[(*sort)[i]-1];
    1717 #if 1
     1717#if F5DEBUG
    17181718  printf("SBA COMPUTATIONS DONE IN THE FOLLOWING RING:\n");
    17191719  rWrite (currRing);
     
    20562056      if(strat->sbaOrder != 1)
    20572057      {
    2058         BOOLEAN overwrite = TRUE;
     2058        BOOLEAN overwrite = FALSE;
    20592059        for (int tk=0; tk<strat->sl+1; tk++)
    20602060        {
     
    20772077          strat->P.sevSig = pGetShortExpVector (strat->P.sig);
    20782078          int i;
     2079          LObject Q;
    20792080          for(int ps=0;ps<strat->sl+1;ps++)
    20802081          {
     
    20902091              strat->syzmax += setmaxTinc;
    20912092            }
    2092             LObject Q;
    20932093            Q.sig = pCopy(strat->P.sig);
    20942094            // add LM(F->m[i]) to the signature to get a Schreyer order
     
    21172117      // deg - idx - lp/rp
    21182118      // => we need to add syzygies with indices > pGetComp(strat->P.sig)
    2119       /*
    21202119      if(strat->sbaOrder == 3)
    21212120      {
    2122         BOOLEAN overwrite = TRUE;
    2123         for (int tk=0; tk<strat->sl+1; tk++)
    2124         {
    2125           if (pGetComp(strat->sig[tk]) == pGetComp(strat->P.sig))
    2126           {
    2127             //printf("TK %d / %d\n",tk,strat->sl);
    2128             overwrite = FALSE;
    2129             break;
    2130           }
    2131         }
    2132         //printf("OVERWRITE %d\n",overwrite);
    2133         if (overwrite)
    2134         {
    2135           int cmp = pGetComp(strat->P.sig);
    2136           int* vv = (int*)omAlloc((currRing->N+1)*sizeof(int));
    2137           pGetExpV (strat->P.p,vv);
    2138           pSetExpV (strat->P.sig, vv);
    2139           pSetComp (strat->P.sig,cmp);
    2140 
    2141           strat->P.sevSig = pGetShortExpVector (strat->P.sig);
    2142           for(int ps=0;ps<strat->sl+1;ps++)
    2143           {
    2144             int i = strat->syzl;
    2145 
    2146             strat->newt = TRUE;
    2147             if (strat->syzl == strat->syzmax)
    2148             {
    2149               pEnlargeSet(&strat->syz,strat->syzmax,setmaxTinc);
    2150               strat->sevSyz = (unsigned long*) omRealloc0Size(strat->sevSyz,
    2151                   (strat->syzmax)*sizeof(unsigned long),
    2152                   ((strat->syzmax)+setmaxTinc)
    2153                   *sizeof(unsigned long));
    2154               strat->syzmax += setmaxTinc;
    2155             }
    2156             strat->syz[i] = pCopy(strat->P.sig);
    2157             // add LM(F->m[i]) to the signature to get a Schreyer order
    2158             // without changing the underlying polynomial ring at all
    2159             if (strat->sbaOrder == 0)
    2160               p_ExpVectorAdd (strat->syz[i],strat->S[ps],currRing);
    2161             // since p_Add_q() destroys all input
    2162             // data we need to recreate help
    2163             // each time
    2164             // ----------------------------------------------------------
    2165             // in the Schreyer order we always know that the multiplied
    2166             // module monomial strat->P.sig gives the leading monomial of
    2167             // the corresponding principal syzygy
    2168             // => we do not need to compute the "real" syzygy completely
    2169             poly help = pCopy(strat->sig[ps]);
    2170             p_ExpVectorAdd (help,strat->P.p,currRing);
    2171             strat->syz[i] = p_Add_q(strat->syz[i],help,currRing);
    2172             //printf("%d. SYZ  ",i+1);
    2173             //pWrite(strat->syz[i]);
    2174             strat->sevSyz[i] = p_GetShortExpVector(strat->syz[i],currRing);
    2175             strat->syzl++;
    2176           }
    2177         }
    2178       }
    2179       */
     2121        int cmp     = pGetComp(strat->P.sig);
     2122        int max_cmp = IDELEMS(F);
     2123        int* vv = (int*)omAlloc((currRing->N+1)*sizeof(int));
     2124        pGetExpV (strat->P.p,vv);
     2125        LObject Q;
     2126        int pos;
     2127        for (int i=cmp+1; i<=max_cmp; ++i) {
     2128          Q.sig = p_One(currRing);
     2129          p_SetExpV(Q.sig, vv, currRing);
     2130          p_SetComp(Q.sig, i, currRing);
     2131          pos = posInSyz(strat, Q.sig);
     2132          enterSyz(Q, strat, pos);
     2133        }
     2134      }
    21802135//#if 1
    21812136#if DEBUGF50
  • kernel/kutil.cc

    rcda0b0 rd5856f  
    46394639if (pLmCmp(strat->syz[strat->syzl-1],sig) != currRing->OrdSgn)
    46404640  return strat->syzl;
    4641 
    46424641int i;
    46434642int an = 0;
     
    50915090  for (int k=0; k<strat->syzl; k++)
    50925091  {
     5092    //printf("-%d",k);
    50935093//#if 1
    50945094#ifdef DEBUGF5
    5095     Print("checking with: %d --  \n",k);
     5095    Print("checking with: %d / %d --  \n",k,strat->syzl);
    50965096    pWrite(pHead(strat->syz[k]));
    50975097#endif
     
    51025102      printf("DELETE!\n");
    51035103#endif
     5104      //printf("- T -\n\n");
    51045105      return TRUE;
    51055106    }
    5106     //k++;
    5107   }
     5107  }
     5108  //printf("- F -\n\n");
    51085109  return FALSE;
    51095110}
     
    51165117//#if 1
    51175118#ifdef DEBUGF5
    5118   Print("syzygy criterion checks:  ");
     5119  Print("--- syzygy criterion checks:  ");
    51195120  pWrite(sig);
    51205121#endif
     
    51395140    for (int k=min; k<max; k++)
    51405141    {
    5141 #ifdef DEBUGF5
     5142#ifdef F5DEBUG
    51425143      printf("COMP %d/%d - MIN %d - MAX %d - SYZL %ld\n",comp,strat->currIdx,min,max,strat->syzl);
    51435144      Print("checking with: %d --  ",k);
     
    51465147      if (p_LmShortDivisibleBy(strat->syz[k], strat->sevSyz[k], sig, not_sevSig, currRing))
    51475148        return TRUE;
    5148       //k++;
    51495149    }
    51505150    return FALSE;
     
    61146114    strat->sevSyz     = initsevS(ps);
    61156115    strat->syz        = (poly *)omAlloc(ps*sizeof(poly));
    6116     strat->syzl       = strat->syzmax = ps;
     6116    strat->syzmax     = ps;
     6117    strat->syzl       = 0;
    61176118    strat->syzidxmax  = comp;
    61186119#if defined(DEBUGF5) || defined(DEBUGF51)
     
    61526153        strat->syzIdx[j]  = ctr;
    61536154        j++;
     6155        LObject Q;
     6156        int pos;
    61546157        for (k = 0; k<i; k++)
    61556158        {
    6156           poly p          = pOne();
    6157           p_ExpVectorCopy(p,strat->S[k],currRing);
    6158           strat->syz[ctr] = p;
    6159           p_SetCompP (strat->syz[ctr], comp, currRing);
    6160           poly q          = p_Copy(p, currRing);
     6159          Q.sig          = pOne();
     6160          p_ExpVectorCopy(Q.sig,strat->S[k],currRing);
     6161          p_SetCompP (Q.sig, comp, currRing);
     6162          poly q          = p_One(currRing);
    61616163          p_ExpVectorCopy(q,strat->S[i],currRing);
    61626164          q               = p_Neg (q, currRing);
    61636165          p_SetCompP (q, p_GetComp(strat->sig[k], currRing), currRing);
    6164           strat->syz[ctr] = p_Add_q (strat->syz[ctr], q, currRing);
    6165 #if defined(DEBUGF5) || defined(DEBUGF51)
    6166 //#if 1
    6167           printf(". . \n");
    6168           pWrite(strat->syz[ctr]);
    6169 #endif
    6170           strat->sevSyz[ctr] = p_GetShortExpVector(strat->syz[ctr],currRing);
     6166          Q.sig = p_Add_q (Q.sig, q, currRing);
     6167          Q.sevSig  = p_GetShortExpVector(Q.sig,currRing);
     6168          pos = posInSyz(strat, Q.sig);
     6169          enterSyz(Q, strat, pos);
    61716170          ctr++;
    61726171        }
     
    61946193    }
    61956194    strat->syzIdx[j]  = ctr;
     6195    LObject Q;
     6196    int pos;
    61966197    for (k = 0; k<strat->sl+1; k++)
    61976198    {
    6198       poly p          = pOne();
    6199       p_ExpVectorCopy(p,strat->S[k],currRing);
    6200       strat->syz[ctr] = p;
    6201       p_SetCompP (strat->syz[ctr], comp, currRing);
    6202       poly q          = p_Copy(p, currRing);
     6199      Q.sig          = pOne();
     6200      p_ExpVectorCopy(Q.sig,strat->S[k],currRing);
     6201      p_SetCompP (Q.sig, comp, currRing);
     6202      poly q          = p_One(currRing);
    62036203      p_ExpVectorCopy(q,strat->L[strat->Ll].p,currRing);
    62046204      q               = p_Neg (q, currRing);
    62056205      p_SetCompP (q, p_GetComp(strat->sig[k], currRing), currRing);
    6206       strat->syz[ctr] = p_Add_q (strat->syz[ctr], q, currRing);
    6207 //#if 1
    6208 #if DEBUGF5 || DEBUGF51
    6209       printf("..");
    6210       pWrite(strat->syz[ctr]);
    6211 #endif
    6212       strat->sevSyz[ctr] = p_GetShortExpVector(strat->syz[ctr],currRing);
     6206      Q.sig = p_Add_q (Q.sig, q, currRing);
     6207      Q.sevSig = p_GetShortExpVector(Q.sig,currRing);
     6208      pos = posInSyz(strat, Q.sig);
     6209      enterSyz(Q, strat, pos);
    62136210      ctr++;
    62146211    }
     
    62206217    printf("ps     %d\n",ps);
    62216218    Print("--------------------------------\n");
    6222     for(i=0;i<=ps-1;i++)
    6223     {
     6219    for(i=0;i<=strat->syzl-1;i++)
     6220    {
     6221      printf("%d - ",i);
    62246222      pWrite(strat->syz[i]);
     6223    }
     6224    for(i=0;i<strat->currIdx;i++)
     6225    {
     6226      printf("%d - %d\n",i,strat->syzIdx[i]);
    62256227    }
    62266228    Print("--------------------------------\n");
     
    72337235  int i;
    72347236  strat->newt = TRUE;
    7235   if (strat->syzl == strat->syzmax)
     7237  if (strat->syzl == strat->syzmax-1)
    72367238  {
    72377239    pEnlargeSet(&strat->syz,strat->syzmax,setmaxTinc);
     
    72427244    strat->syzmax += setmaxTinc;
    72437245  }
    7244   if (atT < strat->syzl-1)
     7246  if (atT < strat->syzl)
    72457247  {
    72467248#ifdef ENTER_USE_MEMMOVE
     
    72587260    }
    72597261  }
    7260   i = strat->syzl;
    7261   //i = atT;
    7262   strat->syz[i] = p.sig;
    7263   strat->sevSyz[i] = p.sevSig;
     7262  //i = strat->syzl;
     7263  i = atT;
     7264  strat->syz[atT] = p.sig;
     7265  strat->sevSyz[atT] = p.sevSig;
    72647266  strat->syzl++;
    7265 #ifdef DEBUGF5
    7266   Print("last element in strat->syz: %d--%d  ",i+1,strat->syzmax);
    7267   pWrite(strat->syz[i]);
     7267#if F5DEBUG
     7268  Print("element in strat->syz: %d--%d  ",atT+1,strat->syzmax);
     7269  pWrite(strat->syz[atT]);
    72687270#endif
    72697271  // recheck pairs in strat->L with new rule and delete correspondingly
     
    72787280    cc--;
    72797281  }
     7282//#if 1
     7283#ifdef DEBUGF5
     7284    Print("--- Syzygies ---\n");
     7285    printf("syzl   %d\n",strat->syzl);
     7286    printf("syzmax %d\n",strat->syzmax);
     7287    Print("--------------------------------\n");
     7288    for(i=0;i<=strat->syzl-1;i++)
     7289    {
     7290      printf("%d - ",i);
     7291      pWrite(strat->syz[i]);
     7292    }
     7293    Print("--------------------------------\n");
     7294#endif
    72807295}
    72817296
Note: See TracChangeset for help on using the changeset viewer.