Changeset ab8e53d in git


Ignore:
Timestamp:
Feb 20, 2014, 2:46:30 PM (10 years ago)
Author:
Adi Popescu <adi_popescum@…>
Branches:
(u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
Children:
8ca38a76b2cb266f641e2f317363644fe3db8c67
Parents:
f0cd66c1f26eeb797e2b9d7e5427eefb62882e07
git-author:
Adi Popescu <adi_popescum@yahoo.de>2014-02-20 14:46:30+01:00
git-committer:
Adi Popescu <adi_popescum@yahoo.de>2014-05-05 11:08:44+02:00
Message:
Qrings: - BugFix #559
        - Added feature: constant in qring allowed: Stil in Work
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Singular/ipassign.cc

    rf0cd66c rab8e53d  
    755755  if (rField_is_Ring(currRing))
    756756  {
     757// computing over Rings: handle constant generators of id properly
    757758    if (idPosConstant(id) != -1)
    758759    {
    759       WerrorS("constant in q-ideal; please modify ground field/ring instead");
    760       return TRUE;
     760      mpz_t gcd;
     761      if(nCoeff_is_Ring_ModN(currRing->cf) ||
     762         nCoeff_is_Ring_PtoM(currRing->cf) ||
     763         nCoeff_is_Ring_2toM(currRing->cf))
     764      {
     765      // already computing mod modNumber: use gcd(modNumber,constant entry of id)
     766        mpz_t newConst;
     767        mpz_init(newConst);
     768        mpz_set_ui(newConst, currRing->cf->cfInt(p_GetCoeff(id->m[idPosConstant(id)], currRing),currRing->cf));
     769        mpz_init(gcd);
     770        mpz_gcd(gcd, currRing->cf->modNumber, newConst);
     771        if(mpz_cmp_ui(gcd, 1) == 0)
     772        {
     773            WerrorS("constant in q-ideal is coprime to modulus in ground ring");
     774            WerrorS("Unable to create qring!");
     775            return TRUE;
     776        }
     777        if(nCoeff_is_Ring_PtoM(currRing->cf) ||
     778           nCoeff_is_Ring_2toM(currRing->cf))
     779        {
     780        // modNumber is prime power: set modExponent appropriately
     781          int kNew = 1;
     782          mpz_t baseTokNew;
     783          mpz_init(baseTokNew);
     784          mpz_set(baseTokNew, currRing->cf->modBase);
     785          while(mpz_cmp(gcd, baseTokNew) > 0)
     786          {
     787            kNew++;
     788            mpz_mul(baseTokNew, baseTokNew, currRing->cf->modBase);
     789          }
     790          currRing->cf->modExponent = kNew;
     791          mpz_set(currRing->cf->modNumber, gcd);
     792          mpz_sub_ui(baseTokNew, baseTokNew, 1);
     793          mpz_t dummy;
     794          mpz_init(dummy);
     795          mpz_set_si(dummy, sizeof(unsigned long));
     796          printf("\nmod2mMask = %i \n", currRing->cf->mod2mMask);
     797          #if 0
     798          if(nCoeff_is_Ring_2toM(currRing->cf))
     799          {
     800          // handle shortcut for 2^m appropriately
     801            if(mpz_cmp(dummy, baseTokNew) > 0)
     802            {
     803              idPrint(id);
     804              currRing->cf->mod2mMask = mpz_get_ui(baseTokNew);
     805              idPrint(id);
     806            }
     807          }
     808          #endif
     809          mpz_clear(dummy);
     810          mpz_clear(baseTokNew);
     811        }
     812        else
     813        {
     814        // previously over modNumber, now over new modNumber
     815          mpz_set(currRing->cf->modBase, gcd);
     816          mpz_set(currRing->cf->modNumber, gcd);
     817        }
     818        currRing->cf->ch = mpz_get_ui(gcd);
     819        mpz_clear(gcd);
     820        mpz_clear(newConst);
     821      }
     822      else
     823      {
     824      // previously over Z, now over Z/m
     825        mpz_t newConst;
     826        mpz_init(newConst);
     827        mpz_set_ui(newConst, currRing->cf->cfInt(p_GetCoeff(id->m[idPosConstant(id)], currRing), currRing->cf));
     828        currRing->cf->modExponent = 1;
     829        mpz_set(currRing->cf->modBase, newConst);
     830        mpz_set(currRing->cf->modNumber, newConst);
     831        currRing->cf->ch = mpz_get_ui(newConst);
     832        mpz_clear(newConst);
     833        currRing->cf->type = n_Zn;
     834      }
    761835    }
    762836  }
    763837#endif
    764 
     838 
    765839  if (currRing->qideal!=NULL) /* we are already in a qring! */
    766840  {
  • kernel/GBEngine/kstd2.cc

    rf0cd66c rab8e53d  
    13621362    strat->use_buckets = 1;
    13631363#endif
    1364 
    13651364  // redtailBBa against T for inhomogenous input
    13661365  if (!TEST_OPT_OLDSTD)
  • kernel/GBEngine/kutil.cc

    rf0cd66c rab8e53d  
    79137913        for(q=IDELEMS(Q)-1; q>=0;q--)
    79147914        {
    7915           if ((Q->m[q]!=NULL)
    7916           &&(pLmEqual(r->m[l],Q->m[q])))
     7915          if ((Q->m[q]!=NULL)&&(pLmEqual(Q->m[q],r->m[l])))
    79177916          {
     7917            #ifdef HAVE_RINGS
     7918            //Also need divisibility of the leading coefficients
     7919            if((!rField_is_Ring(currRing)) || (pDivisibleBy(Q->m[q],r->m[l])))
     7920            #endif
    79187921            if (TEST_OPT_REDSB)
    79197922            {
Note: See TracChangeset for help on using the changeset viewer.