Changeset bf6051e in git


Ignore:
Timestamp:
Nov 18, 2022, 2:47:36 PM (3 months ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'ad2543eab51733612ba7d118afc77edca719600e')
Children:
115e3bf6289ca66d1b18c3836f1a1e0f79e33eaa
Parents:
073b8bec385cec2c5a3fd52795d85bdc3047485b
Message:
add; redtail_NF and other redatail stuff
Location:
kernel/GBEngine
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/GBEngine/kutil.cc

    r073b8b rbf6051e  
    71487148}
    71497149
     7150TObject* kFindDivisibleByInS_T_noCF(kStrategy strat, int end_pos, LObject* L, TObject *T, long ecart)
     7151{
     7152  int j = 0;
     7153  const unsigned long not_sev = ~L->sev;
     7154  const unsigned long* sev = strat->sevS;
     7155  poly p;
     7156  ring r;
     7157  L->GetLm(p, r);
     7158
     7159  assume(~not_sev == p_GetShortExpVector(p, r));
     7160
     7161  if (r == currRing)
     7162  {
     7163    loop
     7164    {
     7165      if (j > end_pos) return NULL;
     7166  #if defined(PDEBUG) || defined(PDIV_DEBUG)
     7167      if (strat->S[j]!= NULL && p_LmShortDivisibleBy(strat->S[j], sev[j], p, not_sev, r) &&
     7168          (ecart== LONG_MAX || ecart>= strat->ecartS[j]))
     7169  #else
     7170      if (!(sev[j] & not_sev) &&
     7171          (ecart== LONG_MAX || ecart>= strat->ecartS[j]) &&
     7172          p_LmDivisibleBy(strat->S[j], p, r))
     7173  #endif
     7174      {
     7175          break;
     7176      }
     7177      j++;
     7178    }
     7179    // if called from NF, T objects do not exist:
     7180    if (strat->tl < 0 || strat->S_2_R[j] == -1)
     7181    {
     7182      T->Set(strat->S[j], r, strat->tailRing);
     7183      assume(T->GetpLength()==pLength(T->p != __null ? T->p : T->t_p));
     7184      return T;
     7185    }
     7186    else
     7187    {
     7188      return strat->S_2_T(j);
     7189    }
     7190  }
     7191  else
     7192  {
     7193    TObject* t;
     7194    loop
     7195    {
     7196      if (j > end_pos) return NULL;
     7197      assume(strat->S_2_R[j] != -1);
     7198  #if defined(PDEBUG) || defined(PDIV_DEBUG)
     7199      t = strat->S_2_T(j);
     7200      assume(t != NULL && t->t_p != NULL && t->tailRing == r);
     7201      if (p_LmShortDivisibleBy(t->t_p, sev[j], p, not_sev, r)
     7202      && (ecart== LONG_MAX || ecart>= strat->ecartS[j]))
     7203      {
     7204        t->pLength=pLength(t->t_p);
     7205        return t;
     7206      }
     7207  #else
     7208      if (! (sev[j] & not_sev)
     7209      && (ecart== LONG_MAX || ecart>= strat->ecartS[j]))
     7210      {
     7211        t = strat->S_2_T(j);
     7212        assume(t != NULL && t->t_p != NULL && t->tailRing == r && t->p == strat->S[j]);
     7213        if (p_LmDivisibleBy(t->t_p, p, r))
     7214        {
     7215          t->pLength=pLength(t->t_p);
     7216          return t;
     7217        }
     7218      }
     7219  #endif
     7220      j++;
     7221    }
     7222  }
     7223}
     7224
    71507225poly redtail (LObject* L, int end_pos, kStrategy strat)
    71517226{
     
    76247699      poly p_Ln=Ln.GetLmCurrRing();
    76257700      poly p_With=With->GetLmCurrRing();
    7626       number z=n_IntMod(pGetCoeff(p_Ln),pGetCoeff(p_With), currRing->cf);
    7627       if (!nIsZero(z))
    7628       {
    7629         // subtract z*Ln, add z.Ln to L
    7630         poly m=pHead(p_Ln);
    7631         pSetCoeff(m,z);
    7632         poly mm=pHead(m);
    7633         pNext(h) = m;
    7634         pIter(h);
    7635         L->pLength++;
    7636         mm=pNeg(mm);
    7637         if (Ln.bucket!=NULL)
    7638         {
    7639           int dummy=1;
    7640           kBucket_Add_q(Ln.bucket,mm,&dummy);
    7641         }
    7642         else
    7643         {
    7644           if ((Ln.t_p!=NULL)&&(Ln.p==NULL))
    7645             Ln.GetP();
    7646           if (Ln.p!=NULL)
    7647           {
    7648             Ln.p=pAdd(Ln.p,mm);
    7649             if (Ln.t_p!=NULL)
    7650             {
    7651               pNext(Ln.t_p)=NULL;
    7652               p_LmDelete(Ln.t_p,strat->tailRing);
    7653             }
    7654           }
    7655         }
    7656       }
    7657       else
    7658         nDelete(&z);
    76597701
    76607702      if (ksReducePolyTail_Z(L, With, &Ln))
     
    76947736  kTest_L(L,strat);
    76957737  return L->GetLmCurrRing();
     7738}
     7739
     7740poly redtailBba_NF (poly p, kStrategy strat )
     7741{
     7742  strat->redTailChange=FALSE;
     7743  if (strat->noTailReduction) return p;
     7744  if ((p==NULL) || (pNext(p)==NULL))
     7745    return p;
     7746
     7747  int max_ind;
     7748  poly h=p;
     7749  p=pNext(p);
     7750  pNext(h)=NULL;
     7751  while(p!=NULL)
     7752  {
     7753    p=redNF(p,max_ind,1,strat);
     7754    if (p!=NULL)
     7755    {
     7756      poly hh=p;
     7757      p=pNext(p);
     7758      pNext(hh)=NULL;
     7759      h=p_Add_q(h,hh,currRing);
     7760    }
     7761  }
     7762  return h;
    76967763}
    76977764
  • kernel/GBEngine/kutil.h

    r073b8b rbf6051e  
    494494KINLINE poly redtailBba_Ring (poly p,int end_pos,kStrategy strat);
    495495KINLINE poly redtailBba_Z (poly p,int end_pos,kStrategy strat);
     496poly redtailBba_NF (poly p, kStrategy strat );
    496497poly redtailBba_Ring (LObject* L, int end_pos, kStrategy strat );
    497498poly redtailBba_Z (LObject* L, int end_pos, kStrategy strat );
Note: See TracChangeset for help on using the changeset viewer.