Changeset 5be1b7 in git


Ignore:
Timestamp:
Mar 3, 2003, 4:25:27 PM (21 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'e7cc1ebecb61be8b9ca6c18016352af89940b21a')
Children:
cb40b51ec2aa14c677131f66fbdf396121f4e949
Parents:
6cf1919180db9e6de9ce32ce1d9103622b929d39
Message:
*hannes: coef buckets


git-svn-id: file:///usr/local/Singular/svn/trunk@6553 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Singular/kbuckets.cc

    r6cf1919 r5be1b7  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: kbuckets.cc,v 1.24 2001-10-09 16:36:06 Singular Exp $ */
     4/* $Id: kbuckets.cc,v 1.25 2003-03-03 15:24:28 Singular Exp $ */
    55
    66#include "mod2.h"
     
    1515#include "p_Procs.h"
    1616
     17#ifdef HAVE_COEF_BUCKETS
     18#define USE_COEF_BUCKETS
     19#endif
     20
     21#ifdef USE_COEF_BUCKETS
     22#define MULTIPLY_BUCKET(B,I) do                                        \
     23  { if (B->coef[I]!=NULL)                                              \
     24    {                                                                  \
     25      B->buckets[I]=p_Mult_q(B->buckets[I],B->coef[I],B->bucket_ring); \
     26      B->coef[I]=NULL;                                                 \
     27    }                                                                  \
     28  } while(0)
     29#else
     30#define MULTIPLY_BUCKET(B,I)
     31#endif
    1732static omBin kBucket_bin = omGetSpecBin(sizeof(kBucket));
    1833
     
    4863BOOLEAN kbTest_i(kBucket_pt bucket, int i)
    4964{
     65  #ifdef USE_COEF_BUCKETS
     66  assume(bucket->coef[0]==NULL);
     67  if ((bucket->coef[i]!=NULL) && (bucket->buckets[i]==NULL))
     68  {
     69    dReportError("Bucket %d coef not NULL", i);
     70  }
     71  if (bucket->coef[i]!=NULL)
     72    _p_Test(bucket->coef[i],bucket->bucket_ring,PDEBUG);
     73  #endif
    5074  pFalseReturn(p_Test(bucket->buckets[i], bucket->bucket_ring));
    5175  if (bucket->buckets_length[i] != pLength(bucket->buckets[i]))
     
    81105    {
    82106      dReportError("Bucket %d larger than lm", i);
     107      return FALSE;
     108    }
     109    if (!p_Test(bucket->buckets[i],bucket->bucket_ring))
     110    {
     111      dReportError("Bucket %d is not =0(4)", i);
    83112      return FALSE;
    84113    }
     
    131160  {
    132161    if (bucket->buckets[i] != NULL)
     162    {
    133163      p_Delete(&(bucket->buckets[i]), bucket->bucket_ring);
     164#ifdef USE_COEF_BUCKETS
     165      if (bucket->coef[i]!=NULL)
     166        p_Delete(&(bucket->coef[i]), bucket->bucket_ring);
     167#endif
     168    }
    134169  }
    135170  omFreeBin(bucket, kBucket_bin);
     
    163198    }
    164199#endif
     200    MULTIPLY_BUCKET(bucket,i);
    165201    pNext(lm) = bucket->buckets[i];
    166202    bucket->buckets[i] = lm;
     
    214250int kBucketCanonicalize(kBucket_pt bucket)
    215251{
     252  kbTest(bucket);
    216253  poly p = bucket->buckets[1];
    217254  poly lm;
     
    219256  bucket->buckets[1] = NULL;
    220257  bucket->buckets_length[1] = 0;
     258  ring r=bucket->bucket_ring;
    221259
    222260
    223261  for (i=2; i<=bucket->buckets_used; i++)
    224262  {
     263  #ifdef USE_COEF_BUCKETS
     264    if (bucket->coef[i]!=NULL)
     265    {
     266      p = p_Plus_mm_Mult_qq(p, bucket->coef[i], bucket->buckets[i],
     267                 pl, bucket->buckets_length[i], r);
     268      p_Delete(&bucket->coef[i],r);
     269      p_Delete(&bucket->buckets[i],r);
     270    }
     271    else
    225272    p = p_Add_q(p, bucket->buckets[i],
    226                  pl, bucket->buckets_length[i], bucket->bucket_ring);
     273                 pl, bucket->buckets_length[i], r);
     274  #else
     275    q = p_Add_q(q, bucket->buckets[i],
     276                 pl, bucket->buckets_length[i], r);
     277  #endif
    227278    bucket->buckets[i] = NULL;
    228279    bucket->buckets_length[i] = 0;
     
    250301  bucket->buckets_used = i;
    251302  assume(pLength(p) == (int) pl);
     303  kbTest(bucket);
    252304  return i;
    253305}
     
    263315    bucket->buckets_length[i] = 0;
    264316    bucket->buckets_used = 0;
     317#ifdef USE_COEF_BUCKETS
     318    bucket->coef[i]=NULL;
     319#endif
    265320  }
    266321  else
     
    333388  for (i=0; i<= bucket->buckets_used; i++)
    334389    if (bucket->buckets[i] != NULL)
     390    {
     391      MULTIPLY_BUCKET(bucket,i);
    335392      bucket->buckets[i] = p_shallow_copy_delete(bucket->buckets[i],
    336393                                                 bucket->bucket_ring,
    337394                                                 new_tailRing,
    338395                                                 new_tailBin);
     396    }
    339397#else
    340398  bucket->p = p_shallow_copy_delete(p,
     
    355413{
    356414#ifndef HAVE_PSEUDO_BUCKETS
     415  kbTest(bucket);
     416  ring r=bucket->bucket_ring;
    357417  int i;
    358418
    359419  for (i=0; i<= bucket->buckets_used; i++)
     420  {
    360421    if (bucket->buckets[i] != NULL)
    361       bucket->buckets[i] = p_Mult_nn(bucket->buckets[i], n, bucket->bucket_ring);
     422    {
     423#ifdef USE_COEF_BUCKETS
     424      if (i<2)
     425        bucket->buckets[i] = p_Mult_nn(bucket->buckets[i], n, r);
     426      else
     427      if (bucket->coef[i]!=NULL)
     428      {
     429        bucket->coef[i] = p_Mult_nn(bucket->coef[i],n,r);
     430      }
     431      else
     432      {
     433        bucket->coef[i] = p_NSet(n_Copy(n,bucket->bucket_ring),r);
     434      }
     435#else
     436      bucket->buckets[i] = p_Mult_nn(bucket->buckets[i], n, r);
     437#endif
     438    }
     439  }
     440  kbTest(bucket);
    362441#else
    363442  bucket->p = p_Mult_nn(bucket->p, n, bucket->bucket_ring);
     
    392471  while (bucket->buckets[i] != NULL)
    393472  {
     473    //MULTIPLY_BUCKET(bucket,i);
     474  #ifdef USE_COEF_BUCKETS
     475    if (bucket->coef[i]!=NULL)
     476    {
     477      q = p_Plus_mm_Mult_qq(q, bucket->coef[i], bucket->buckets[i],
     478                 l1, bucket->buckets_length[i], r);
     479      p_Delete(&bucket->coef[i],r);
     480      p_Delete(&bucket->buckets[i],r);
     481    }
     482    else
    394483    q = p_Add_q(q, bucket->buckets[i],
    395484                 l1, bucket->buckets_length[i], r);
     485  #else
     486    q = p_Add_q(q, bucket->buckets[i],
     487                 l1, bucket->buckets_length[i], r);
     488  #endif
    396489    bucket->buckets[i] = NULL;
    397490    bucket->buckets_length[i] = 0;
     
    439532  i = pLogLength(l1);
    440533
    441   if (i <= bucket->buckets_used && bucket->buckets[i] != NULL)
    442   {
     534  if ((i <= bucket->buckets_used) && (bucket->buckets[i] != NULL))
     535  {
     536    assume(pLength(bucket->buckets[i])==bucket->buckets_length[i]);
     537//#ifdef USE_COEF_BUCKETS
     538//     if(bucket->coef[i]!=NULL)
     539//     {
     540//       poly mult=p_Mult_mm(bucket->coef[i],m,r);
     541//       bucket->coef[i]=NULL;
     542//       p1 = p_Minus_mm_Mult_qq(bucket->buckets[i], mult, p1,
     543//                               bucket->buckets_length[i], l1,
     544//                             spNoether, r);
     545//     }
     546//     else
     547//#endif
     548    MULTIPLY_BUCKET(bucket,i);
    443549    p1 = p_Minus_mm_Mult_qq(bucket->buckets[i], m, p1,
    444550                            bucket->buckets_length[i], l1,
     
    465571  while (bucket->buckets[i] != NULL)
    466572  {
     573    //kbTest(bucket);
     574    MULTIPLY_BUCKET(bucket,i);
    467575    p1 = p_Add_q(p1, bucket->buckets[i],
    468576                 l1, bucket->buckets_length[i], r);
     
    483591                               spNoether, r);
    484592#endif
    485   kbTest(bucket);
    486593}
    487594
    488595//////////////////////////////////////////////////////////////////////////
    489596///
    490 /// Bpoly == Bpoly - m*p; where m is a monom
     597/// Bpoly == Bpoly + m*p; where m is a monom
    491598/// Does not destroy p and m
    492599/// assume (l <= 0 || pLength(p) == l)
     
    515622  if (i <= bucket->buckets_used && bucket->buckets[i] != NULL)
    516623  {
     624    MULTIPLY_BUCKET(bucket,i);
    517625    p1 = p_Plus_mm_Mult_qq(bucket->buckets[i], m, p1,
    518626                           bucket->buckets_length[i], l1, r);
     
    529637  while (bucket->buckets[i] != NULL)
    530638  {
     639    MULTIPLY_BUCKET(bucket,i);
    531640    p1 = p_Add_q(p1, bucket->buckets[i],
    532641                 l1, bucket->buckets_length[i], r);
     
    550659  if (q == NULL) return append;
    551660  poly lm;
    552   do
     661  loop
    553662  {
    554663    lm = kBucketGetLm(bucket);
     
    565674    }
    566675  }
    567   while (1);
    568676}
    569677
     
    573681// Return as a polynomial *p with length *l
    574682// In other words, afterwards
    575 // Bpoly == Bpoly - (poly consisting of all monomials with component comp)
     683// Bpoly = Bpoly - (poly consisting of all monomials with component comp)
    576684// and components of monomials of *p are all 0
    577685//
     
    596704    if (bucket->buckets[i] != NULL)
    597705    {
     706      MULTIPLY_BUCKET(bucket,i);
    598707      pTakeOutComp(&(bucket->buckets[i]), comp, &q, &lq);
    599708      if (q != NULL)
     
    630739    if (bucket->buckets[i] != NULL)
    631740    {
     741      MULTIPLY_BUCKET(bucket,i);
    632742      pDecrOrdTakeOutComp(&(bucket->buckets[i]), comp, order, &q, &lq);
    633743      if (q != NULL)
  • Singular/p_kBucketSetLm__T.cc

    r6cf1919 r5be1b7  
    77 *  Author:  obachman (Olaf Bachmann)
    88 *  Created: 12/00
    9  *  Version: $Id: p_kBucketSetLm__T.cc,v 1.2 2001-08-27 14:47:31 Singular Exp $
     9 *  Version: $Id: p_kBucketSetLm__T.cc,v 1.3 2003-03-03 15:25:27 Singular Exp $
    1010 *******************************************************************/
     11#undef USE_COEF_BUCKETS
     12#ifdef HAVE_COEF_BUCKETS
     13#define USE_COEF_BUCKETS
     14#endif
    1115
     16#ifdef USE_COEF_BUCKETS
     17#define MULTIPLY_BUCKET(B,I) do                                        \
     18  { if (B->coef[I]!=NULL)                                              \
     19    {                                                                  \
     20      B->buckets[I]=p_Mult_q(B->buckets[I],B->coef[I],B->bucket_ring); \
     21      B->coef[I]=NULL;                                                 \
     22    }                                                                  \
     23  } while(0)
     24#else
     25#define MULTIPLY_BUCKET(B,I)
     26#endif
    1227LINKAGE void p_kBucketSetLm(kBucket_pt bucket)
    1328{
     
    2843      if (bucket->buckets[i] != NULL)
    2944      {
     45        MULTIPLY_BUCKET(bucket,i);
    3046        p =  bucket->buckets[j];
    3147        if (j == 0)
     
    5369        Equal:
    5470        {
     71          MULTIPLY_BUCKET(bucket,i);
    5572          number tn = pGetCoeff(p);
    5673          pSetCoeff0(p, n_Add(pGetCoeff(bucket->buckets[i]), tn, r));
Note: See TracChangeset for help on using the changeset viewer.