Changeset 594652 in git


Ignore:
Timestamp:
Sep 22, 2022, 12:09:05 PM (19 months ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
5bec8f88c9ee2573d328cf7c3aff2bcb301d2395
Parents:
dfe0aba7819331fbb350a4fae5165e4edf3b13ab
git-author:
Hans Schoenemann <hannes@mathematik.uni-kl.de>2022-09-22 12:09:05+02:00
git-committer:
Hans Schoenemann <hannes@mathematik.uni-kl.de>2022-09-22 13:44:03+02:00
Message:
opt: id_DelDiv,id_Head, removed id_DelDiv_*
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/combinatorics/hilb.cc

    rdfe0ab r594652  
    17081708{
    17091709  // e=max(0,p-q) for all exps
    1710   for(int i=1;i<=src->N;i++)
    1711   {
    1712     p_SetExp(p,i,si_max(0L,p_GetExp(p,i,src)-exp_q[i]),src);
     1710  for(int i=src->N;i>0;i--)
     1711  {
     1712    int pi=p_GetExp(p,i,src)-exp_q[i];
     1713    if (pi<0) pi=0;
     1714    p_SetExp(p,i,pi,src);
    17131715  }
    17141716  #ifdef PDEBUG
     
    18001802    //idSkipZeroes(J);
    18011803    ideal J=id_CopyFirstK(A,i,src);
    1802     for(int ii=1;ii<=src->N;ii++)
     1804    for(int ii=src->N;ii>0;ii--)
    18031805      exp_q[ii]=p_GetExp(A->m[i],ii,src);
    18041806    for(int ii=0;ii<i;ii++) p_Div_hi(J->m[ii],exp_q,src);
    1805     id_DelDiv_Sorted(J,src);
     1807    id_DelDiv(J,src);
    18061808    // search linear elems:
    18071809    int k=0;
     
    18111813      {
    18121814        k++;
    1813         p_Delete(&J->m[ii],src);
     1815        p_LmDelete(&J->m[ii],src);
    18141816      }
    18151817    }
     
    18891891  }
    18901892  else AA=A;
    1891   id_DelDiv_Sorted(AA,src);
     1893  id_DelDiv(AA,src);
    18921894  idSkipZeroes(AA);
    18931895   /* sort */
  • libpolys/polys/simpleideals.cc

    rdfe0ab r594652  
    349349}
    350350
    351 /// delete id[j], if LT(j) == coeff*mon*LT(i) (j>i)
     351/// delete id[j], if LT(j) == coeff*mon*LT(i)
    352352static void id_DelDiv_SEV(ideal id, int k,const ring r)
    353353{
     
    355355  long *sev=(long*)omAlloc0(kk*sizeof(long));
    356356  while(id->m[k]==NULL) k--;
     357  BOOLEAN only_lm=r->cf->has_simple_Alloc;
     358  if (!only_lm)
     359  {
     360    for (int i=k; i>=0; i--)
     361    {
     362      if((id->m[i]!=NULL) && (pNext(id->m[i])!=NULL))
     363      {
     364        only_lm=FALSE;
     365        break;
     366      }
     367    }
     368  }
    357369  for (int i=k; i>=0; i--)
    358370  {
    359371    if(id->m[i]!=NULL)
     372    {
    360373      sev[i]=p_GetShortExpVector(id->m[i],r);
    361   }
    362   for (int i=0; i<k; i++)
    363   {
    364     if (id->m[i] != NULL)
    365     {
    366       poly m_i=id->m[i];
    367       for (int j=i+1; j<=k; j++)
    368       {
    369         if (id->m[j]!=NULL)
     374    }
     375  }
     376  if (only_lm)
     377  {
     378    for (int i=0; i<k; i++)
     379    {
     380      if (id->m[i] != NULL)
     381      {
     382        poly m_i=id->m[i];
     383        long sev_i=sev[i];
     384        for (int j=i+1; j<=k; j++)
    370385        {
    371           if (p_LmShortDivisibleBy(m_i, sev[i],r, id->m[j],~sev[j],r))
     386          if (id->m[j]!=NULL)
    372387          {
    373             p_Delete(&id->m[j],r);
    374           }
    375           else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev[i],r))
    376           {
    377             p_Delete(&id->m[i],r);
    378             break;
     388            if (p_LmShortDivisibleBy(m_i, sev_i,r, id->m[j],~sev[j],r))
     389            {
     390              p_LmFree(&id->m[j],r);
     391            }
     392            else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev_i,r))
     393            {
     394              p_LmFree(&id->m[i],r);
     395              break;
     396            }
    379397          }
    380398        }
     
    382400    }
    383401  }
    384   omFreeSize(sev,kk*sizeof(long));
    385 }
    386 
    387 /// delete id[j], if LT(j) == coeff*mon*LT(i) (j>i)
    388 /// assume LC(j)==NULL or n_Delete==ndDelete
    389 static void id_DelDiv_SEV0(ideal id, int k,const ring r)
    390 {
    391   int kk = k+1;
    392   long *sev=(long*)omAlloc0(kk*sizeof(long));
    393   while(id->m[k]==NULL) k--;
    394   for (int i=k; i>=0; i--)
    395   {
    396     if(id->m[i]!=NULL)
    397       sev[i]=p_GetShortExpVector(id->m[i],r);
    398   }
    399   for (int i=0; i<k; i++)
    400   {
    401     if (id->m[i] != NULL)
    402     {
    403       poly m_i=id->m[i];
    404       for (int j=i+1; j<=k; j++)
    405       {
    406         if (id->m[j]!=NULL)
     402  else
     403  {
     404    for (int i=0; i<k; i++)
     405    {
     406      if (id->m[i] != NULL)
     407      {
     408        poly m_i=id->m[i];
     409        long sev_i=sev[i];
     410        for (int j=i+1; j<=k; j++)
    407411        {
    408           if (p_LmShortDivisibleBy(m_i, sev[i],r, id->m[j],~sev[j],r))
     412          if (id->m[j]!=NULL)
    409413          {
    410             p_LmFree(&id->m[j],r);
    411           }
    412           else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev[i],r))
    413           {
    414             p_LmFree(&id->m[i],r);
    415             break;
     414            if (p_LmShortDivisibleBy(m_i, sev_i,r, id->m[j],~sev[j],r))
     415            {
     416              p_Delete(&id->m[j],r);
     417            }
     418            else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev_i,r))
     419            {
     420              p_Delete(&id->m[i],r);
     421              break;
     422            }
    416423          }
    417424        }
     
    487494    }
    488495  }
    489 }
    490 
    491 /// delete id[j], if LT(j) == coeff*mon*LT(i) (j>i)
    492 void id_DelDiv_Sorted(ideal id, const ring r)
    493 {
    494   int k = IDELEMS(id)-1;
    495   if (r->cf->has_simple_Alloc)
    496     id_DelDiv_SEV0(id,k,r);
    497   else
    498     id_DelDiv_SEV(id,k,r);
    499496}
    500497
     
    13961393  ideal m = idInit(IDELEMS(h),h->rank);
    13971394
    1398   for (int i=IDELEMS(h)-1;i>=0; i--)
    1399     if (h->m[i]!=NULL)
    1400       m->m[i]=p_Head(h->m[i],r);
     1395  if (r->cf->has_simple_Alloc)
     1396  {
     1397    for (int i=IDELEMS(h)-1;i>=0; i--)
     1398      if (h->m[i]!=NULL)
     1399        m->m[i]=p_CopyPowerProduct0(h->m[i],pGetCoeff(h->m[i]),r);
     1400  }
     1401  else
     1402  {
     1403    for (int i=IDELEMS(h)-1;i>=0; i--)
     1404      if (h->m[i]!=NULL)
     1405        m->m[i]=p_Head(h->m[i],r);
     1406  }
    14011407
    14021408  return m;
  • libpolys/polys/simpleideals.h

    rdfe0ab r594652  
    110110void id_DelLmEquals(ideal id, const ring r);
    111111void id_DelDiv(ideal id, const ring r);
    112 void id_DelDiv_Sorted(ideal id, const ring r);
    113112BOOLEAN id_IsConstant(ideal id, const ring r);
    114113
Note: See TracChangeset for help on using the changeset viewer.