Changeset 4c6e420 in git for libpolys/polys/monomials


Ignore:
Timestamp:
Apr 27, 2011, 4:25:41 PM (13 years ago)
Author:
Oleksandr Motsak <motsak@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
760a78f4333abdcf36c17059f611fa15a34c2dac
Parents:
5c97e10bb44ba586b18c55984cb4187d64f2d618
git-author:
Oleksandr Motsak <motsak@mathematik.uni-kl.de>2011-04-27 16:25:41+02:00
git-committer:
Mohamed Barakat <mohamed.barakat@rwth-aachen.de>2011-11-09 12:31:30+01:00
Message:
ADD: algring to coeffs (for extension fields via polynomials)
FIX: eliminated the use of minpoly/P/params in polynomials (as much as was possible)
ADD: complex numbers need a name for the imaginary root of -1 (use complex_parameter instead of parameter[0])
Location:
libpolys/polys/monomials
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • libpolys/polys/monomials/maps.cc

    r5c97e10 r4c6e420  
    155155      omFreeSize((ADDRESS)monoms,l*sizeof(poly));
    156156    }
    157     if (dst_r->cf->minpoly!=NULL) result=p_MinPolyNormalize(result, dst_r);
     157    if (!rMinpolyIsNULL(dst_r)) result=p_MinPolyNormalize(result, dst_r);
    158158  }
    159159  return result;
     
    270270  int *perm=(int *)omAlloc0((r->N+1)*sizeof(int));
    271271  //int *par_perm=(int *)omAlloc0(rPar(r)*sizeof(int));
    272   maFindPerm(r->names, rVar(r), r->cf->parameter, rPar(r),
    273              dst_r->names, rVar(dst_r),dst_r->cf->parameter, rPar(dst_r),
     272  maFindPerm(r->names, rVar(r), rParameter(r), rPar(r),
     273             dst_r->names, rVar(dst_r),rParameter(dst_r), rPar(dst_r),
    274274             perm,NULL, dst_r->cf->ch);
    275275  poly res=p_PermPoly(p,perm,r,dst_r, nMap /*,par_perm,rPar(r)*/);
  • libpolys/polys/monomials/p_polys.cc

    r5c97e10 r4c6e420  
    18561856      p=ph;
    18571857    }
    1858     else if ((rField_is_Extension(r))
    1859     && ((rPar(r)>1)||(r->cf->minpoly==NULL)))
     1858    else if (rField_is_Extension(r)
     1859             &&
     1860             (
     1861              (rPar(r)>1) || rMinpolyIsNULL(r)
     1862             )
     1863            )
    18601864    {
    18611865      h=p_InitContent_a(ph,r);
     
    32403244      qq = p_Init(dst);
    32413245      number n=nMap(pGetCoeff(p),oldRing->cf,dst->cf);
    3242       if ((dst->cf->minpoly!=NULL)
     3246      if ((!rMinpolyIsNULL(dst))
    32433247      && ((rField_is_Zp_a(dst)) || (rField_is_Q_a(dst))))
    32443248      {
     
    32543258      #if 0
    32553259      aq=naPermNumber(pGetCoeff(p),par_perm,OldPar, oldRing);
    3256       if ((dst->cf->minpoly!=NULL)
     3260      if ((!rMinpolyIsNULL(dst))
    32573261      && ((rField_is_Zp_a(dst)) || (rField_is_Q_a(dst))))
    32583262      {
     
    33293333      }
    33303334      if (mapped_to_par
    3331       && (dst->cf->minpoly!=NULL))
     3335      && (!rMinpolyIsNULL(dst)))
    33323336      {
    33333337        number n=pGetCoeff(qq);
  • libpolys/polys/monomials/ring.cc

    r5c97e10 r4c6e420  
    108108void rChangeCurrRing(ring r)
    109109{
    110  // if ((currRing!=NULL) && (currRing->cf->minpoly!=NULL))
     110 // if (!rMinpolyIsNULL(currRing))
    111111 // {
    112112 //   omCheckAddr(currRing->cf->minpoly);
     
    282282  {
    283283    PrintS("//   characteristic : ");
    284     if (r->cf->parameter!=NULL)
     284    if (rParameter(r)!=NULL)
    285285    {
    286286      Print ("//   %d parameter    : ",rPar(r));
    287       char **sp=r->cf->parameter;
     287      char **sp= rParameter(r);
    288288      int nop=0;
    289289      while (nop<rPar(r))
     
    297297      {
    298298        // i^2+1:
    299         Print("(%s^2+1)\n",r->cf->parameter[0]);
    300       }
    301       else if (r->cf->minpoly==NULL)
     299        Print("(%s^2+1)\n",rParameter(r)[0]);
     300      }
     301      else if (rMinpolyIsNULL(r))
    302302      {
    303303        PrintS("0\n");
     
    482482
    483483//   // delete parameter
    484 //   if (r->cf->parameter!=NULL)
     484//   if (rParameter(r)!=NULL)
    485485//   {
    486 //     char **s=r->cf->parameter;
     486//     char **s= rParameter(r);
    487487//     j = 0;
    488488//     while (j < rPar(r))
     
    492492//       j++;
    493493//     }
    494 //     omFreeSize((ADDRESS)r->cf->parameter,rPar(r)*sizeof(char *));
     494//     omFreeSize((ADDRESS)rParameter(r),rPar(r)*sizeof(char *));
    495495//   }
    496496  omFreeBin(r, sip_sring_bin);
     
    637637  }
    638638#endif
    639   if (r->cf->parameter==NULL)
     639  if (rParameter(r)==NULL)
    640640  {
    641641    i=r->cf->ch;
     
    651651  if (rField_is_long_C(r))
    652652  {
    653     s=(char *)omAlloc(21+strlen(r->cf->parameter[0]));
    654     sprintf(s,"complex,%d,%s",r->float_len,r->cf->parameter[0]);   /* C */
     653    s=(char *)omAlloc(21+strlen(rParameter(r)[0]));
     654    sprintf(s,"complex,%d,%s",r->float_len,rParameter(r)[0]);   /* C */
    655655    return s;
    656656  }
     
    658658  for(i=0; i<rPar(r);i++)
    659659  {
    660     l+=(strlen(r->cf->parameter[i])+1);
     660    l+=(strlen(rParameter(r)[i])+1);
    661661  }
    662662  s=(char *)omAlloc((long)(l+MAX_INT_LEN+1));
     
    666666  else
    667667  {
    668     sprintf(s,"%d,%s",r->cf->ch,r->cf->parameter[0]); /* GF(q)  */
     668    sprintf(s,"%d,%s",r->cf->ch,rParameter(r)[0]); /* GF(q)  */
    669669    return s;
    670670  }
     
    675675  {
    676676    strcat(s,tt);
    677     strcat(s,r->cf->parameter[i]);
     677    strcat(s,rParameter(r)[i]);
    678678  }
    679679  return s;
     
    682682char * rParStr(ring r)
    683683{
    684   if ((r==NULL)||(r->cf->parameter==NULL)) return omStrDup("");
     684  if ((r==NULL)||(rParameter(r)==NULL)) return omStrDup("");
    685685
    686686  int i;
     
    689689  for (i=0; i<rPar(r); i++)
    690690  {
    691     l+=strlen(r->cf->parameter[i])+1;
     691    l+=strlen(rParameter(r)[i])+1;
    692692  }
    693693  char *s=(char *)omAlloc((long)l);
     
    695695  for (i=0; i<rPar(r)-1; i++)
    696696  {
    697     strcat(s,r->cf->parameter[i]);
     697    strcat(s,rParameter(r)[i]);
    698698    strcat(s,",");
    699699  }
    700   strcat(s,r->cf->parameter[i]);
     700  strcat(s,rParameter(r)[i]);
    701701  return s;
    702702}
     
    715715}
    716716
    717 int  rIsExtension(const ring r)
    718 {
    719   return (r->cf->parameter!=NULL); /* R, Q, Fp: FALSE */
    720 }
    721717
    722718static int binaryPower (const int a, const int b)
     
    866862    if (*(r1->names[i]) == '\0')
    867863      b = FALSE;
    868     else if ((r2->cf->parameter!=NULL) && (strlen(r1->names[i])==1))
     864    else if ((rParameter(r2)!=NULL) && (strlen(r1->names[i])==1))
    869865    {
    870866      if (vartest)
     
    872868        for(j=0;j<rPar(r2);j++)
    873869        {
    874           if (strcmp(r1->names[i],r2->cf->parameter[j])==0)
     870          if (strcmp(r1->names[i],rParameter(r2)[j])==0)
    875871          {
    876872            b=FALSE;
     
    898894    if (*(r2->names[i]) == '\0')
    899895      b = FALSE;
    900     else if ((r1->cf->parameter!=NULL) && (strlen(r2->names[i])==1))
     896    else if ((rParameter(r1)!=NULL) && (strlen(r2->names[i])==1))
    901897    {
    902898      if (vartest)
     
    904900        for(j=0;j<rPar(r1);j++)
    905901        {
    906           if (strcmp(r2->names[i],r1->cf->parameter[j])==0)
     902          if (strcmp(r2->names[i],rParameter(r1)[j])==0)
    907903          {
    908904            b=FALSE;
     
    11601156      if (rPar(R2)!=0) par_perm2=(int *)omAlloc0((rPar(R2)+1)*sizeof(int));
    11611157
    1162       maFindPerm(R1->names,  rVar(R1),  R1->cf->parameter,  rPar(R1),
    1163                  sum->names, rVar(sum), sum->cf->parameter, rPar(sum),
     1158      maFindPerm(R1->names,  rVar(R1),  rParameter(R1),  rPar(R1),
     1159                 sum->names, rVar(sum), rParameter(sum), rPar(sum),
    11641160                 perm1, par_perm1, sum->cf->ch);
    11651161
    1166       maFindPerm(R2->names,  rVar(R2),  R2->cf->parameter,  rPar(R2),
    1167                  sum->names, rVar(sum), sum->cf->parameter, rPar(sum),
     1162      maFindPerm(R2->names,  rVar(R2),  rParameter(R2),  rPar(R2),
     1163                 sum->names, rVar(sum), rParameter(sum), rPar(sum),
    11681164                 perm2, par_perm2, sum->cf->ch);
    11691165
     
    12651261    int *par_perm1 = NULL;
    12661262    if (rPar(r1)!=0) par_perm1=(int *)omAlloc0((rPar(r1)+1)*sizeof(int));
    1267     maFindPerm(r1->names,  rVar(r1),  r1->cf->parameter,  rPar(r1),
    1268                sum->names, rVar(sum), sum->cf->parameter, rPar(sum),
     1263    maFindPerm(r1->names,  rVar(r1),  rParameter(r1),  rPar(r1),
     1264               sum->names, rVar(sum), rParameter(sum), rPar(sum),
    12691265               perm1, par_perm1, sum->cf->ch);
    12701266    nMapFunc nMap1 = n_SetMap(r1->cf,sum->cf);
     
    12881284    int *par_perm2 = NULL;
    12891285    if (rPar(r2)!=0) par_perm2=(int *)omAlloc0((rPar(r2)+1)*sizeof(int));
    1290     maFindPerm(r2->names,  rVar(r2),  r2->cf->parameter,  rPar(r2),
    1291                sum->names, rVar(sum), sum->cf->parameter, rPar(sum),
     1286    maFindPerm(r2->names,  rVar(r2),  rParameter(r2),  rPar(r2),
     1287               sum->names, rVar(sum), rParameter(sum), rPar(sum),
    12921288               perm2, par_perm2, sum->cf->ch);
    12931289    nMapFunc nMap2 = n_SetMap(r2->cf,sum->cf);
     
    14131409  //memset: res->cf=NULL;
    14141410  res->options=r->options;
    1415   //
     1411
     1412/*
    14161413  if (r->algring!=NULL)
    14171414    r->algring->ref++;
    1418   res->algring=r->algring;
     1415 
     1416  res->algring=r->algring; 
    14191417  //memset: res->minideal=NULL;
     1418*/
     1419 
     1420 
    14201421  if (copy_ordering == TRUE)
    14211422  {
     
    15511552  for (i=0; i<rPar(r1);i++)
    15521553  {
    1553       if (strcmp(r1->cf->parameter[i], r2->cf->parameter[i])!=0)
     1554      if (strcmp(rParameter(r1)[i], rParameter(r2)[i])!=0)
    15541555        return FALSE;
    15551556  }
    15561557
    1557   if (r1->cf->minpoly != NULL)
    1558   {
    1559     if (r2->cf->minpoly == NULL) return FALSE;
     1558  if ( !rMinpolyIsNULL(r1) )
     1559  {
     1560    if ( rMinpolyIsNULL(r2) ) return FALSE;
    15601561    if (! n_Equal(r1->cf->minpoly, r2->cf->minpoly, r1->cf)) return FALSE;
    15611562  }
    1562   else if (r2->cf->minpoly != NULL) return FALSE;
     1563  else if (!rMinpolyIsNULL(r2)) return FALSE;
    15631564
    15641565  if (qr)
     
    19821983    }
    19831984  }
    1984   if (r->cf->minpoly!=NULL)
    1985   {
     1985
     1986  if (!rMinpolyIsNULL(r))
    19861987    omCheckAddr(r->cf->minpoly);
    1987   }
     1988
    19881989  //assume(r->cf!=NULL);
    19891990
     
    28662867  {
    28672868    int i;
    2868     if (r->cf->parameter!=NULL)
     2869    if (rParameter(r)!=NULL)
    28692870    {
    28702871      for (i=0;i<rPar(r);i++)
    28712872      {
    2872         if(strlen(r->cf->parameter[i])>1)
     2873        if(strlen(rParameter(r)[i])>1)
    28732874        {
    28742875          r->ShortOut=FALSE;
     
    53815382   }
    53825383}
     5384
     5385
     5386BOOLEAN rMinpolyIsNULL(const ring r)
     5387{
     5388  assume(r != NULL);
     5389  const coeffs C = r->cf;
     5390  assume(C != NULL);
     5391
     5392  if( rField_is_Extension(r) )
     5393  {
     5394    const ring R = C->algring;
     5395    assume( R != NULL );
     5396    return idIs0(R->qideal);
     5397  }
     5398  return TRUE;
     5399}
     5400
  • libpolys/polys/monomials/ring.h

    r5c97e10 r4c6e420  
    306306  p_SetmProc    p_Setm;
    307307  n_Procs_s*    cf;
    308   ring          algring;
    309308#ifdef HAVE_PLURAL
    310309  private:
     
    401400char * rString(ring r);
    402401int    rChar(ring r);
    403 #define rPar(r) (r->cf->P)
    404 #define rVar(r) (r->N)
     402
    405403char * rParStr(ring r);
    406 int    rIsExtension(const ring r);
     404
    407405int    rSum(ring r1, ring r2, ring &sum);
    408406int rSumInternal(ring r1, ring r2, ring &sum, BOOLEAN vartest, BOOLEAN dp_dp);
     
    518516  assume(r != NULL); return (r->ShortOut);
    519517}
     518
     519/// #define rVar(r) (r->N)
     520static inline short rVar(const ring r)
     521{
     522  assume(r != NULL);
     523  return r->N;
     524}
     525
     526/// (r->cf->P)
     527static inline short rPar(const ring r)
     528{
     529  assume(r != NULL);
     530  const coeffs C = r->cf;
     531  assume(C != NULL);
     532
     533  if( rField_is_Extension(r) )
     534  {
     535    const ring R = C->algring;
     536    assume( R != NULL );
     537    return rVar( R );
     538  }
     539  return 0;
     540}
     541
     542
     543/// (r->cf->parameter)
     544static inline char** rParameter(const ring r)
     545{
     546  assume(r != NULL);
     547  const coeffs C = r->cf;
     548  assume(C != NULL);
     549
     550  if( rField_is_Extension(r) )
     551  {
     552    const ring R = C->algring;
     553    assume( R != NULL );
     554    return R->names;
     555  }
     556  return NULL;
     557}
     558   
     559/* R, Q, Fp: FALSE */
     560static inline BOOLEAN rIsExtension(const ring r)
     561{
     562  assume( (rParameter(r)!=NULL) == rField_is_Extension(r) ); // ?
     563  return rField_is_Extension(r);
     564}
     565
     566/// Tests whether '(r->cf->minpoly) == NULL'
     567BOOLEAN rMinpolyIsNULL(const ring r);
     568
    520569
    521570/// order stuff
Note: See TracChangeset for help on using the changeset viewer.