Changeset e11614 in git


Ignore:
Timestamp:
Mar 10, 2021, 8:00:52 PM (3 years ago)
Author:
Matthias Koeppe <mkoeppe@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', '98550b669234b32be762076c32b3be2c35188ac4')
Children:
081b792212e031bf0548c6607026c0100ee49bd6
Parents:
cb0364d75bce40ce8de602323894845b3695cbb5f7951d3b3bfea118917f4155803e30bac0dc2b16
Message:
Merge remote-tracking branch 'singular/spielwiese' into configure_doc
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    rf7951d re11614  
    7979/Singular/feOptGen
    8080/Singular/gftables
     81/Singular/libparse
    8182/Singular/mpsr_Tok.xx
    8283/Singular/ndbm.dl_og
  • Makefile.am

    rcb0364 re11614  
    1313install-data-local:
    1414        if test -e $(srcdir)/doc/doc.tbz2; then\
    15           (cat ${top_srcdir}/doc/doc.tbz2| (cd $(DESTDIR)$(datadir)/singular; tar jxf -));\
     15          (cat ${top_srcdir}/doc/doc.tbz2| (cd $(DESTDIR)$(datadir)/singular; tar -jx --no-same-owner -f -));\
    1616           mkdir $(DESTDIR)$(datadir)/info;\
    1717           mkdir $(DESTDIR)$(datadir)/doc;\
  • Singular/fglm.cc

    rcb0364 re11614  
    348348}
    349349
     350ideal fglmQuot( ideal first, poly second )
     351{
     352    FglmState state = FglmOk;
     353
     354    ideal sourceIdeal = first;
     355    poly quot = second;
     356    ideal destIdeal = NULL;
     357
     358    state = fglmIdealcheck( sourceIdeal );
     359    if ( state == FglmOk )
     360    {
     361      if ( quot == NULL ) state= FglmPolyIsZero;
     362      else if ( pIsConstant( quot ) ) state= FglmPolyIsOne;
     363    }
     364
     365    if ( state == FglmOk )
     366    {
     367      if ( fglmquot( sourceIdeal, quot, destIdeal ) == FALSE )
     368        state= FglmNotReduced;
     369    }
     370
     371    switch (state)
     372    {
     373        case FglmOk:
     374            break;
     375        case FglmHasOne:
     376            destIdeal= idInit(1,1);
     377            (destIdeal->m)[0]= pOne();
     378            state= FglmOk;
     379            break;
     380        case FglmNotZeroDim:
     381            WerrorS( "The ideal has to be 0-dimensional" );
     382            destIdeal= idInit(1,1);
     383            break;
     384        case FglmNotReduced:
     385            WerrorS( "The poly has to be reduced" );
     386            destIdeal= idInit(1,1);
     387            break;
     388        case FglmPolyIsOne:
     389            int k;
     390            destIdeal= idInit( IDELEMS(sourceIdeal), 1 );
     391            for ( k= IDELEMS( sourceIdeal )-1; k >=0; k-- )
     392              (destIdeal->m)[k]= pCopy( (sourceIdeal->m)[k] );
     393            state= FglmOk;
     394            break;
     395        case FglmPolyIsZero:
     396            destIdeal= idInit(1,1);
     397            (destIdeal->m)[0]= pOne();
     398            state= FglmOk;
     399            break;
     400        default:
     401            destIdeal= idInit(1,1);
     402    }
     403
     404    return destIdeal;
     405}
     406
    350407// fglmQuotProc: Calculate I:f with FGLM methods.
    351408// Checks the input-data, and calls fglmquot (see fglmzero.cc).
     
    415472} // fglmQuotProt
    416473
    417 // The main function for finduni().
    418 // Checks the input-data, and calls FindUnivariateWrapper (see fglmzero.cc).
    419 // Returns an ideal containing the univariate Polynomials or 0 if an error
    420 // has occoured.
    421 BOOLEAN
    422 findUniProc( leftv result, leftv first )
     474ideal findUni( ideal first )
    423475{
    424476    ideal sourceIdeal;
     
    426478    FglmState state;
    427479
    428     sourceIdeal = (ideal)first->Data();
    429 
    430     assumeStdFlag( first );
     480    sourceIdeal = first;
     481
    431482    state= fglmIdealcheck( sourceIdeal );
    432483    if ( state == FglmOk )
     
    470521            break;
    471522        case FglmNotZeroDim:
     523            WerrorS( "The ideal has to be 0-dimensional" );
     524            destIdeal= idInit(1,1);
     525            break;
     526        case FglmNotReduced:
     527            Werror( "The ideal has to be reduced" );
     528            destIdeal= idInit(1,1);
     529            break;
     530        default:
     531            destIdeal= idInit(1,1);
     532    }
     533
     534    return destIdeal;
     535}
     536// The main function for finduni().
     537// Checks the input-data, and calls FindUnivariateWrapper (see fglmzero.cc).
     538// Returns an ideal containing the univariate Polynomials or 0 if an error
     539// has occoured.
     540BOOLEAN
     541findUniProc( leftv result, leftv first )
     542{
     543    ideal sourceIdeal;
     544    ideal destIdeal = NULL;
     545    FglmState state;
     546
     547    sourceIdeal = (ideal)first->Data();
     548
     549    assumeStdFlag( first );
     550    state= fglmIdealcheck( sourceIdeal );
     551    if ( state == FglmOk )
     552    {
     553      // check for special cases: if the input contains
     554      // univariate polys, try to reduce the problem
     555      int i,k;
     556      int count=0;
     557      BOOLEAN * purePowers = (BOOLEAN *)omAlloc0( currRing->N*sizeof( BOOLEAN ) );
     558      for ( k= IDELEMS( sourceIdeal ) - 1; k >= 0; k-- )
     559      {
     560        if((i=pIsUnivariate(sourceIdeal->m[k]))>0)
     561        {
     562          if (purePowers[i-1]==0)
     563          {
     564            purePowers[i-1]=k;
     565            count++;
     566            if (count==currRing->N) break;
     567          }
     568        }
     569      }
     570      if (count==currRing->N)
     571      {
     572        destIdeal=idInit(currRing->N,1);
     573        for(k=currRing->N-1; k>=0; k--) destIdeal->m[k]=pCopy(sourceIdeal->m[purePowers[k]]);
     574      }
     575      omFreeSize((ADDRESS)purePowers, currRing->N*sizeof( BOOLEAN ) );
     576      if (destIdeal!=NULL)
     577            state = FglmOk;
     578      else if ( FindUnivariateWrapper( sourceIdeal, destIdeal ) == FALSE )
     579            state = FglmNotReduced;
     580    }
     581    switch (state)
     582    {
     583        case FglmOk:
     584            break;
     585        case FglmHasOne:
     586            destIdeal= idInit(1,1);
     587            (destIdeal->m)[0]= pOne();
     588            state= FglmOk;
     589            break;
     590        case FglmNotZeroDim:
    472591            Werror( "The ideal %s has to be 0-dimensional", first->Name() );
    473592            destIdeal= NULL;
  • Singular/fglm.h

    rcb0364 re11614  
    2424//  Returns TRUE if an error occoured.
    2525BOOLEAN fglmQuotProc( leftv result, leftv first, leftv second );
     26ideal fglmQuot( ideal first, poly second );
    2627
    2728// FindUnivariatePolys (test)
     
    3031// wrapper for FindUnivariatePolys (test)
    3132BOOLEAN findUniProc( leftv result, leftv first);
     33ideal findUni( ideal first );
    3234
    3335// homogeneous FGLM
  • Singular/iparith.cc

    rcb0364 re11614  
    30033003  res->data = (char *)idQuot((ideal)u->Data(),(ideal)v->Data(),
    30043004    hasFlag(u,FLAG_STD),u->Typ()==v->Typ());
    3005   id_DelMultiples((ideal)(res->data),currRing);
    30063005  if (TEST_OPT_RETURN_SB) setFlag(res,FLAG_STD);
    30073006  return FALSE;
  • configure.ac

    rf7951d re11614  
    11AC_INIT([singular], [4.2.0], [singular@mathematik.uni-kl.de])
     2
     3AC_SUBST([VERSION_DATE], 2021)
    24AC_DEFINE([VERSION_DATE],["Dec 2020"],[release date])
    35
     
    326328AC_CONFIG_FILES([desktop/Makefile desktop/Singular.desktop desktop/Singular-manual.desktop])
    327329
     330AC_CHECK_PROGS([MAKEINFO], [makeinfo])
     331AC_CHECK_PROGS([TEXI2PDF], [texi2pdf])
     332AC_CHECK_PROGS([TEXINDEX], [texindex])
     333AC_CHECK_PROGS([DVIPS], [dvips])
     334AC_CONFIG_FILES([doc/Makefile])
     335AC_CONFIG_FILES([doc/version.texi])
     336AC_CONFIG_LINKS([doc/pyobject.doc:doc/pyobject.${enable_pyobject_module}.doc
     337                 doc/cones.doc:doc/cones.yes.doc])
     338
    328339AC_OUTPUT
  • doc/Makefile.in

    rcb0364 re11614  
    7676# File sets
    7777#
    78 STANDALONE_TEXI_FILES   = COPYING.texi INSTALL_unix.texi NEWS.texi \
    79                           README_download.texi README_ftp.texi \
    80                           README_distribution.texi README_src.texi \
    81                           INSTALL_win.texi
     78STANDALONE_TEXI_FILES   = COPYING.texi NEWS.texi  lib2doc.texi
    8279
    8380DOC2TEX_FILES   = cones.tex countedref.tex decodegb.tex \
  • doc/version.texi.in

    rf7951d re11614  
    11@c DO not edit this file.
    22
    3 @set VERSION @SINGULAR_VERSION@
     3@set VERSION @PACKAGE_VERSION@
    44@set VERSION_DATE @VERSION_DATE@
    5 @set SHORT_VERSION @SINGULAR_SHORT_VERSION@
     5@set SHORT_VERSION @VERSION@
  • kernel/ideals.cc

    rcb0364 re11614  
    696696}
    697697
    698 /*2
    699 * compute the syzygies of h1 in R/quot,
    700 * weights of components are in w
    701 * if setRegularity, return the regularity in deg
    702 * do not change h1,  w
    703 */
    704 ideal idSyzygies (ideal  h1, tHomog h,intvec **w, BOOLEAN setSyzComp,
    705                   BOOLEAN setRegularity, int *deg, GbVariant alg)
    706 {
    707   ideal s_h1;
    708   int   j, k, length=0,reg;
    709   BOOLEAN isMonomial=TRUE;
    710   int ii, idElemens_h1;
    711 
    712   assume(h1 != NULL);
    713 
    714   idElemens_h1=IDELEMS(h1);
    715 #ifdef PDEBUG
    716   for(ii=0;ii<idElemens_h1 /*IDELEMS(h1)*/;ii++) pTest(h1->m[ii]);
    717 #endif
    718   if (idIs0(h1))
    719   {
    720     ideal result=idFreeModule(idElemens_h1/*IDELEMS(h1)*/);
    721     return result;
    722   }
    723   int slength=(int)id_RankFreeModule(h1,currRing);
    724   k=si_max(1,slength /*id_RankFreeModule(h1)*/);
    725 
    726   assume(currRing != NULL);
    727   ring orig_ring=currRing;
    728   ring syz_ring=rAssure_SyzComp(orig_ring,TRUE);
    729   if (setSyzComp) rSetSyzComp(k,syz_ring);
    730 
    731   if (orig_ring != syz_ring)
    732   {
    733     rChangeCurrRing(syz_ring);
    734     s_h1=idrCopyR_NoSort(h1,orig_ring,syz_ring);
    735   }
    736   else
    737   {
    738     s_h1 = h1;
    739   }
    740 
    741   idTest(s_h1);
    742 
    743   BITSET save_opt;
    744   SI_SAVE_OPT1(save_opt);
    745   si_opt_1|=Sy_bit(OPT_REDTAIL_SYZ);
    746 
    747   ideal s_h3=idPrepare(s_h1,NULL,h,k,w,alg); // main (syz) GB computation
    748 
    749   SI_RESTORE_OPT1(save_opt);
    750 
    751   if (s_h3==NULL)
    752   {
    753     if (orig_ring != syz_ring)
    754     {
    755       rChangeCurrRing(orig_ring);
    756       rDelete(syz_ring);
    757     }
    758     return idFreeModule( idElemens_h1 /*IDELEMS(h1)*/);
    759   }
    760 
    761   if (orig_ring != syz_ring)
    762   {
    763     idDelete(&s_h1);
    764     for (j=0; j<IDELEMS(s_h3); j++)
    765     {
    766       if (s_h3->m[j] != NULL)
    767       {
    768         if (p_MinComp(s_h3->m[j],syz_ring) > k)
    769           p_Shift(&s_h3->m[j], -k,syz_ring);
    770         else
    771           p_Delete(&s_h3->m[j],syz_ring);
    772       }
    773     }
    774     idSkipZeroes(s_h3);
    775     s_h3->rank -= k;
    776     rChangeCurrRing(orig_ring);
    777     s_h3 = idrMoveR_NoSort(s_h3, syz_ring, orig_ring);
    778     rDelete(syz_ring);
    779     #ifdef HAVE_PLURAL
    780     if (rIsPluralRing(orig_ring))
    781     {
    782       id_DelMultiples(s_h3,orig_ring);
    783       idSkipZeroes(s_h3);
    784     }
    785     #endif
    786     idTest(s_h3);
    787     return s_h3;
    788   }
    789 
    790   ideal e = idInit(IDELEMS(s_h3), s_h3->rank);
    791 
    792   for (j=IDELEMS(s_h3)-1; j>=0; j--)
    793   {
    794     if (s_h3->m[j] != NULL)
    795     {
    796       if (p_MinComp(s_h3->m[j],syz_ring) <= k)
    797       {
    798         e->m[j] = s_h3->m[j];
    799         isMonomial=isMonomial && (pNext(s_h3->m[j])==NULL);
    800         p_Delete(&pNext(s_h3->m[j]),syz_ring);
    801         s_h3->m[j] = NULL;
    802       }
    803     }
    804   }
    805 
    806   idSkipZeroes(s_h3);
    807   idSkipZeroes(e);
    808 
    809   if ((deg != NULL)
    810   && (!isMonomial)
    811   && (!TEST_OPT_NOTREGULARITY)
    812   && (setRegularity)
    813   && (h==isHomog)
    814   && (!rIsPluralRing(currRing))
    815   && (!rField_is_Ring(currRing))
    816   )
    817   {
    818     assume(orig_ring==syz_ring);
    819     ring dp_C_ring = rAssure_dp_C(syz_ring); // will do rChangeCurrRing later
    820     if (dp_C_ring != syz_ring)
    821     {
    822       rChangeCurrRing(dp_C_ring);
    823       e = idrMoveR_NoSort(e, syz_ring, dp_C_ring);
    824     }
    825     resolvente res = sySchreyerResolvente(e,-1,&length,TRUE, TRUE);
    826     intvec * dummy = syBetti(res,length,&reg, *w);
    827     *deg = reg+2;
    828     delete dummy;
    829     for (j=0;j<length;j++)
    830     {
    831       if (res[j]!=NULL) idDelete(&(res[j]));
    832     }
    833     omFreeSize((ADDRESS)res,length*sizeof(ideal));
    834     idDelete(&e);
    835     if (dp_C_ring != orig_ring)
    836     {
    837       rChangeCurrRing(orig_ring);
    838       rDelete(dp_C_ring);
    839     }
    840   }
    841   else
    842   {
    843     idDelete(&e);
    844   }
    845   assume(orig_ring==currRing);
    846   idTest(s_h3);
    847   if (currRing->qideal != NULL)
    848   {
    849     ideal ts_h3=kStd(s_h3,currRing->qideal,h,w);
    850     idDelete(&s_h3);
    851     s_h3 = ts_h3;
    852   }
    853   return s_h3;
    854 }
    855 
    856698ideal idExtractG_T_S(ideal s_h3,matrix *T,ideal *S,long syzComp,
    857699    int h1_size,BOOLEAN inputIsIdeal,const ring oring, const ring sring)
     
    955797      (*S)->m[i] = prMoveR_NoSort((*S)->m[i], sring,oring);
    956798    }
     799  }
     800  return s_h3;
     801}
     802
     803/*2
     804* compute the syzygies of h1 in R/quot,
     805* weights of components are in w
     806* if setRegularity, return the regularity in deg
     807* do not change h1,  w
     808*/
     809ideal idSyzygies (ideal  h1, tHomog h,intvec **w, BOOLEAN setSyzComp,
     810                  BOOLEAN setRegularity, int *deg, GbVariant alg)
     811{
     812  ideal s_h1;
     813  int   j, k, length=0,reg;
     814  BOOLEAN isMonomial=TRUE;
     815  int ii, idElemens_h1;
     816
     817  assume(h1 != NULL);
     818
     819  idElemens_h1=IDELEMS(h1);
     820#ifdef PDEBUG
     821  for(ii=0;ii<idElemens_h1 /*IDELEMS(h1)*/;ii++) pTest(h1->m[ii]);
     822#endif
     823  if (idIs0(h1))
     824  {
     825    ideal result=idFreeModule(idElemens_h1/*IDELEMS(h1)*/);
     826    return result;
     827  }
     828  int slength=(int)id_RankFreeModule(h1,currRing);
     829  k=si_max(1,slength /*id_RankFreeModule(h1)*/);
     830
     831  assume(currRing != NULL);
     832  ring orig_ring=currRing;
     833  ring syz_ring=rAssure_SyzComp(orig_ring,TRUE);
     834  if (setSyzComp) rSetSyzComp(k,syz_ring);
     835
     836  if (orig_ring != syz_ring)
     837  {
     838    rChangeCurrRing(syz_ring);
     839    s_h1=idrCopyR_NoSort(h1,orig_ring,syz_ring);
     840  }
     841  else
     842  {
     843    s_h1 = h1;
     844  }
     845
     846  idTest(s_h1);
     847
     848  BITSET save_opt;
     849  SI_SAVE_OPT1(save_opt);
     850  si_opt_1|=Sy_bit(OPT_REDTAIL_SYZ);
     851
     852  ideal s_h3=idPrepare(s_h1,NULL,h,k,w,alg); // main (syz) GB computation
     853
     854  SI_RESTORE_OPT1(save_opt);
     855
     856  if (orig_ring != syz_ring)
     857  {
     858    idDelete(&s_h1);
     859    for (j=0; j<IDELEMS(s_h3); j++)
     860    {
     861      if (s_h3->m[j] != NULL)
     862      {
     863        if (p_MinComp(s_h3->m[j],syz_ring) > k)
     864          p_Shift(&s_h3->m[j], -k,syz_ring);
     865        else
     866          p_Delete(&s_h3->m[j],syz_ring);
     867      }
     868    }
     869    idSkipZeroes(s_h3);
     870    s_h3->rank -= k;
     871    rChangeCurrRing(orig_ring);
     872    s_h3 = idrMoveR_NoSort(s_h3, syz_ring, orig_ring);
     873    rDelete(syz_ring);
     874    #ifdef HAVE_PLURAL
     875    if (rIsPluralRing(orig_ring))
     876    {
     877      id_DelMultiples(s_h3,orig_ring);
     878      idSkipZeroes(s_h3);
     879    }
     880    #endif
     881    idTest(s_h3);
     882    return s_h3;
     883  }
     884
     885  ideal e = idInit(IDELEMS(s_h3), s_h3->rank);
     886
     887  for (j=IDELEMS(s_h3)-1; j>=0; j--)
     888  {
     889    if (s_h3->m[j] != NULL)
     890    {
     891      if (p_MinComp(s_h3->m[j],syz_ring) <= k)
     892      {
     893        e->m[j] = s_h3->m[j];
     894        isMonomial=isMonomial && (pNext(s_h3->m[j])==NULL);
     895        p_Delete(&pNext(s_h3->m[j]),syz_ring);
     896        s_h3->m[j] = NULL;
     897      }
     898    }
     899  }
     900
     901  idSkipZeroes(s_h3);
     902  idSkipZeroes(e);
     903
     904  if ((deg != NULL)
     905  && (!isMonomial)
     906  && (!TEST_OPT_NOTREGULARITY)
     907  && (setRegularity)
     908  && (h==isHomog)
     909  && (!rIsPluralRing(currRing))
     910  && (!rField_is_Ring(currRing))
     911  )
     912  {
     913    assume(orig_ring==syz_ring);
     914    ring dp_C_ring = rAssure_dp_C(syz_ring); // will do rChangeCurrRing later
     915    if (dp_C_ring != syz_ring)
     916    {
     917      rChangeCurrRing(dp_C_ring);
     918      e = idrMoveR_NoSort(e, syz_ring, dp_C_ring);
     919    }
     920    resolvente res = sySchreyerResolvente(e,-1,&length,TRUE, TRUE);
     921    intvec * dummy = syBetti(res,length,&reg, *w);
     922    *deg = reg+2;
     923    delete dummy;
     924    for (j=0;j<length;j++)
     925    {
     926      if (res[j]!=NULL) idDelete(&(res[j]));
     927    }
     928    omFreeSize((ADDRESS)res,length*sizeof(ideal));
     929    idDelete(&e);
     930    if (dp_C_ring != orig_ring)
     931    {
     932      rChangeCurrRing(orig_ring);
     933      rDelete(dp_C_ring);
     934    }
     935  }
     936  else
     937  {
     938    idDelete(&e);
     939  }
     940  assume(orig_ring==currRing);
     941  idTest(s_h3);
     942  if (currRing->qideal != NULL)
     943  {
     944    ideal ts_h3=kStd(s_h3,currRing->qideal,h,w);
     945    idDelete(&s_h3);
     946    s_h3 = ts_h3;
    957947  }
    958948  return s_h3;
     
    23922382  if (T!=NULL) idDelete((ideal*)T);
    23932383
    2394   int i,rk,flength=0,slength,length;
     2384  int i,flength=0,slength,length;
    23952385  poly p,q;
    23962386
     
    24302420    //Print("weights:");wtmp->show(1);PrintLn();
    24312421  }
    2432   rk = IDELEMS(h2);
    24332422  ideal s_temp1;
    24342423  ring orig_ring=currRing;
Note: See TracChangeset for help on using the changeset viewer.