Changeset 7161aca in git


Ignore:
Timestamp:
Aug 12, 2019, 11:10:44 AM (4 years ago)
Author:
Karim Abou Zeid <karim23697@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '0604212ebb110535022efecad887940825b97c3f')
Children:
8307d2d92aa305b1a9b4e0c9353dfc467f913461
Parents:
d4cec6ab781a81162945ff680935242fcccc952ab258e2adb78434353acc85388a6c40c626c4b5ee
Message:
Merge branch 'spielwiese' into stable
Files:
6 added
14 deleted
74 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/JMBTest.lib

    rd4cec6a r7161aca  
    107107int aJ=deg(f.h);
    108108// minimal degree of polynomials in G
    109 //print(aJ);
    110109list V=list();
    111110V[1]=Terns(G,1);
     
    227226//Compare degrees;
    228227      d=-1;
    229       //print("Per Grado");
    230228     }
    231229  if(deg(P.h)==deg(Q.h))
     
    237235//head=tail
    238236               d=0;
    239                //print("Uguali");
    240237              }
    241238         }
     
    495492       }
    496493   I=M[1..size(M)];
    497 //print("IdealOfV");
    498494  //I=std(I);
    499495  }
     
    538534EXAMPLE:  example NewWeight; shows an example"
    539535{
    540 //multiply and reduce, degree by degree
    541 intvec u=NewWeight(nvars(r)+1);
    542 list L=ringlist(r);
    543 L[2]=insert(L[2],"t",size(L[2]));
    544 //print(L[2]);
    545 list ordlist="a",u;
    546 L[3]=insert(L[3],ordlist,0);
    547 def H=ring(L);
    548 //print(V1);
    549 //print(G1);
    550 list M=list();
    551 jmp p;
    552 list N;
    553 poly q;
    554 poly s;
    555 int i;
    556 int j;
    557 for(i=1; i<=size(G1); i++)
    558    {
    559            N=list();
    560            for(j=1; j<=size(G1[i]); j++)
    561               {
    562                 p=G1[i][j];
    563                 q=p.h;
    564                 s=p.t;
    565                 N[j]=list(q,s);
    566                }
    567            M[i]=N;
    568     }
    569 p.h=poly(0);
    570 p.t=poly(0);
    571 setring H;
    572 list R=list();
    573 list S=list();
    574 //print("anello definito");
    575 def V=imap(r,V1);
    576 //def G=imap(r,G1);
    577 //print(V);
    578 def MM=imap(r,M);
    579 list G=list();
    580 list N=list();
    581 for(i=1; i<=size(MM); i++)
    582    {
    583            for(j=1; j<=size(MM[i]); j++)
    584               {
    585                 p.h=MM[i][j][1];
    586                 p.t=MM[i][j][2];
    587                 N[j]=p;
    588                }
    589            G[i]=N;
    590     }
    591 ideal I=0;
    592 jmp LL;
    593 jmp UU;
    594  for(i=1; i<=size(V);i++)
    595     {
    596        R[i]=list();
    597        S[i]=list();
    598        I=0;
    599        for(j=1;j<=size(V[i]); j++)
    600           {
    601             LL=Multiply(V[i][j],G);
    602             LL.t=reduce(t*LL.t,I);
    603 //I only reduce the tail
    604               LL.t=subst(LL.t,t,1);
    605               S[i]=insert(S[i],LL,size(S[i]));
    606               LL.h=t*LL.h;
    607             R[i]=insert(R[i],LL,size(R[i]));
    608              UU=R[i][j];
    609               I=I+ideal(UU.h+UU.t);
    610               attrib(I,"isSB",1);
    611           }
    612     }
    613 list M=list();
    614 poly q;
    615 poly s;
    616 for(i=1; i<=size(S); i++)
    617    {
    618            N=list();
    619            for(j=1; j<=size(S[i]); j++)
    620               {
    621                 p=S[i][j];
    622                 q=p.h;
    623                 s=p.t;
    624                 N[j]=list(q,s);
    625                }
    626            M[i]=N;
    627     }
    628 p.h=poly(0);
    629 p.t=poly(0);
    630 setring r;
    631 def MM=imap(H,M);
    632 list MMM=list();
    633 for(i=1; i<=size(MM); i++)
    634    {
    635            N=list();
    636            for(j=1; j<=size(MM[i]); j++)
    637               {
    638                 p.h=MM[i][j][1];
    639                 p.t=MM[i][j][2];
    640                 N[j]=p;
    641                }
    642            MMM[i]=N;
    643     }
    644 return(MMM);
    645 }
    646 example
    647 { "EXAMPLE:"; echo = 2;
    648  ring r=0, (x,y,z), rp;
    649 jmp r1;
    650 r1.h=z^3;
    651 r1.t=poly(0);
    652 jmp r2;
    653 r2.h=z^2*y;
    654 r2.t=poly(0);
    655 jmp r3;
    656 r3.h=z*y^2 ;
    657 r3.t=-x^2*y;
    658 jmp r4;
    659 r4.h=y^5;
    660 r4.t=poly(0);
    661 list G2F=list(list(r1,r2,r3),list(r4));
     536  //multiply and reduce, degree by degree
     537  intvec u=NewWeight(nvars(r)+1);
     538  list L=ringlist(r);
     539  L[2]=insert(L[2],"t",size(L[2]));
     540  list ordlist="a",u;
     541  L[3]=insert(L[3],ordlist,0);
     542  def H=ring(L);
     543  list M=list();
     544  jmp p;
     545  list N;
     546  poly q;
     547  poly s;
     548  int i;
     549  int j;
     550  for(i=1; i<=size(G1); i++)
     551  {
     552    N=list();
     553    for(j=1; j<=size(G1[i]); j++)
     554    {
     555      p=G1[i][j];
     556      q=p.h;
     557      s=p.t;
     558      N[j]=list(q,s);
     559    }
     560    M[i]=N;
     561  }
     562  p.h=poly(0);
     563  p.t=poly(0);
     564  setring H;
     565  list R=list();
     566  list S=list();
     567  //print("anello definito");
     568  def V=imap(r,V1);
     569  //def G=imap(r,G1);
     570  //print(V);
     571  def MM=imap(r,M);
     572  list G=list();
     573  list N=list();
     574  for(i=1; i<=size(MM); i++)
     575  {
     576    for(j=1; j<=size(MM[i]); j++)
     577    {
     578      p.h=MM[i][j][1];
     579      p.t=MM[i][j][2];
     580      N[j]=p;
     581    }
     582    G[i]=N;
     583  }
     584  ideal I=0;
     585  jmp LL;
     586  jmp UU;
     587  for(i=1; i<=size(V);i++)
     588  {
     589    R[i]=list();
     590    S[i]=list();
     591    I=0;
     592    for(j=1;j<=size(V[i]); j++)
     593    {
     594      LL=Multiply(V[i][j],G);
     595      LL.t=reduce(t*LL.t,I);
     596      //I only reduce the tail
     597      LL.t=subst(LL.t,t,1);
     598      S[i]=insert(S[i],LL,size(S[i]));
     599      LL.h=t*LL.h;
     600      R[i]=insert(R[i],LL,size(R[i]));
     601      UU=R[i][j];
     602      I=I+ideal(UU.h+UU.t);
     603      attrib(I,"isSB",1);
     604    }
     605  }
     606  list M=list();
     607  poly q;
     608  poly s;
     609  for(i=1; i<=size(S); i++)
     610  {
     611    N=list();
     612    for(j=1; j<=size(S[i]); j++)
     613    {
     614      p=S[i][j];
     615      q=p.h;
     616      s=p.t;
     617      N[j]=list(q,s);
     618    }
     619    M[i]=N;
     620  }
     621  p.h=poly(0);
     622  p.t=poly(0);
     623  setring r;
     624  def MM=imap(H,M);
     625  list MMM=list();
     626  for(i=1; i<=size(MM); i++)
     627  {
     628    N=list();
     629    for(j=1; j<=size(MM[i]); j++)
     630    {
     631      p.h=MM[i][j][1];
     632      p.t=MM[i][j][2];
     633      N[j]=p;
     634    }
     635    MMM[i]=N;
     636  }
     637  return(MMM);
     638}
     639example
     640{ "EXAMPLE:"; echo = 2;
     641 ring r=0, (x,y,z), rp;
     642 jmp r1;
     643 r1.h=z^3;
     644 r1.t=poly(0);
     645 jmp r2;
     646 r2.h=z^2*y;
     647 r2.t=poly(0);
     648 jmp r3;
     649 r3.h=z*y^2 ;
     650 r3.t=-x^2*y;
     651 jmp r4;
     652 r4.h=y^5;
     653 r4.t=poly(0);
     654 list G2F=list(list(r1,r2,r3),list(r4));
    662655 FinalVm(VConst(G2F,6,r) , G2F, r);
    663656}
     
    671664list V=list();
    672665V= VConst(G,c);
    673 //print("VConst");
    674666//V non ordered
    675667list L=list();
     
    719711//L will contain results
    720712poly h=Minimus(variables(A.h));
    721 //print(h);
    722713int l=findvars(h,1)[2][1];
    723714if(l!=nvars(basering))
    724715 {
    725 //print("vero");
    726 //print(l);
    727716  for(int j=l+1;j<=nvars(basering); j++)
    728717   {
    729     //print("entrata");
    730     //print(var(j));
    731718    E=var(j)*A.h/B.h;
    732719//Candidate for * product
    733     //print(E);
    734720    if(E!=0)
    735721      {
     
    789775//Loop on polynomials
    790776                        C=EKCouples(G[i][j], G[k][l]);
    791 //print("coppia");
    792777                        if(C[2]!=0)
    793778                          {
     
    865850True=1/False=0
    866851EXAMPLE:  example TestJMark; shows an example"
    867 {int flag=1;
    868 if(size(G1)==1 && size(G1[1])==1)
    869  {
    870   //Hypersurface
    871   print("Only One Polynomial");
    872   flag=1;
    873  }
    874 else
    875   {
    876    int d=0;
    877    list EK,D=EKPolys(G1);
    878 //print("PolysEK");
    879    //I found EK couples
    880    int massimo=Max(D);
    881    list V1=ConstructorMain(G1,massimo,r);
    882 //print("Costruttore");
    883 //print(V1);
    884    jmp mi=V1[1][1];
    885    int minimo=Min(deg(mi.h));
    886    intvec u=NewWeight(nvars(r)+1);
    887 list L=ringlist(r);
    888 L[2]=insert(L[2],"t",size(L[2]));
    889 //print(L[2]);
    890 list ordlist="a",u;
    891 L[3]=insert(L[3],ordlist,0);
    892 def H=ring(L);
    893 list JJ=list();
    894 jmp pp;
    895 jmp qq;
    896 int i;
    897 int j;
    898 list NN;
    899 for(i=size(V1);i>0;i--)
    900     {
    901      NN=list();
    902      for(j=size(V1[i]);j>0;j--)
    903          {
    904           //print(j);
    905           pp=V1[i][j];
    906           NN[j]=list(pp.h,pp.t);
    907           }
    908 //print(NN);
    909 JJ[i]=NN;
    910 //print(JJ[i]);
    911 //print(i);
    912     }
    913 //print(JJ);
    914 list KK=list();
    915 list UU=list();
    916 //jmp qq;
    917 for(i=size(G1);i>0;i--)
    918     {
    919      for(j=size(G1[i]);j>0;j--)
    920          {
    921           //print(j);
    922           qq=G1[i][j];
    923           UU[j]=list(qq.h,qq.t);
    924           }
    925 //print(UU);
    926 KK[i]=UU;
    927     }
    928 setring H;
    929 //I defined the new ring with the weighted
    930 //variable t
    931 poly p;
    932 //print("anello definito");
    933 def JJJ=imap(r,JJ);
    934 def EK=imap(r,EK);
    935 //print(flag);
    936 //imap(r,D);
    937 list V=list();
    938 jmp fp;
    939 //int i;
    940 //int j;
    941 list N;
    942 for(i=size(JJJ); i>0; i--)
    943    {
    944            N=list();
    945            for(j=size(JJJ[i]); j>0; j--)
    946               {
    947                 fp.h=JJJ[i][j][1];
    948                 fp.t=JJJ[i][j][2];
    949                 N[j]=fp;
    950                }
    951            V[i]=N;
    952             }
    953 //print(V);
    954 def KKJ=imap(r,KK);
    955 list G=list();
    956 list U=list();
    957 for(i=1; i<=size(KKJ); i++)
    958    {
    959            for(j=1; j<=size(KKJ[i]); j++)
    960               {
    961                 fp.h=KKJ[i][j][1];
    962                 fp.t=KKJ[i][j][2];
    963                 U[j]=fp;
    964                }
    965            G[i]=U;
    966     }
    967 // print(V);
    968 //print(G);
    969 //I imported in H everithing I need
    970 poly q;
    971 ideal I;
    972    for(j=1; j<=size(EK);j++)
     852{
     853  int flag=1;
     854  if(size(G1)==1 && size(G1[1])==1)
     855  {
     856    //Hypersurface
     857    print("Only One Polynomial");
     858    flag=1;
     859  }
     860  else
     861  {
     862    int d=0;
     863    list EK,D=EKPolys(G1);
     864    //I found EK couples
     865    int massimo=Max(D);
     866    list V1=ConstructorMain(G1,massimo,r);
     867    jmp mi=V1[1][1];
     868    int minimo=Min(deg(mi.h));
     869    intvec u=NewWeight(nvars(r)+1);
     870    list L=ringlist(r);
     871    L[2]=insert(L[2],"t",size(L[2]));
     872    list ordlist="a",u;
     873    L[3]=insert(L[3],ordlist,0);
     874    def H=ring(L);
     875    list JJ=list();
     876    jmp pp;
     877    jmp qq;
     878    int i;
     879    int j;
     880    list NN;
     881    for(i=size(V1);i>0;i--)
     882    {
     883      NN=list();
     884      for(j=size(V1[i]);j>0;j--)
    973885      {
    974        d=D[j];
    975        p=EKPolynomials(EK[j],G);
    976        //print("arrivo");
    977        I=IdealOfV(V[d-minimo+1]);
    978 attrib(I,"isSB",1);
    979 //print(I);
    980 q=reduce(t*p,I);
    981 //print(I[1]);
    982 //print(t*p);
    983 q=subst(q,t,1);
    984 //I reduce all the EK polynomials
    985 //       q=RiduzPoly(V[d-minimo+1], p);
    986        if(q!=0)
    987          {
    988 //check whether reduction is 0
    989           print("NOT A BASIS");
    990          flag=0;
    991           break;
    992          }
    993      }
    994   }
    995 //print(flag);
    996 setring r;
    997 //typeof(flag);
    998 return(flag);
    999 }
    1000 example
    1001 { "EXAMPLE:"; echo = 2;
    1002  ring r=0, (x,y,z), rp;
    1003 jmp r1;
    1004 r1.h=z^3;
    1005 r1.t=poly(0);
    1006 jmp r2;
    1007 r2.h=z^2*y;
    1008 r2.t=poly(0);
    1009 jmp r3;
    1010 r3.h=z*y^2 ;
    1011 r3.t=-x^2*y;
    1012 jmp r4;
    1013 r4.h=y^5;
    1014 r4.t=poly(0);
    1015 list G2F=list(list(r1,r2,r3),list(r4));
    1016 TestJMark(G2F,r);
    1017 }
     886        pp=V1[i][j];
     887        NN[j]=list(pp.h,pp.t);
     888      }
     889      JJ[i]=NN;
     890    }
     891    list KK=list();
     892    list UU=list();
     893    //jmp qq;
     894    for(i=size(G1);i>0;i--)
     895    {
     896      for(j=size(G1[i]);j>0;j--)
     897      {
     898        qq=G1[i][j];
     899        UU[j]=list(qq.h,qq.t);
     900      }
     901      KK[i]=UU;
     902    }
     903    setring H;
     904    //I defined the new ring with the weighted
     905    //variable t
     906    poly p;
     907    //print("anello definito");
     908    def JJJ=imap(r,JJ);
     909    def EK=imap(r,EK);
     910    list V=list();
     911    jmp fp;
     912    //int i;
     913    //int j;
     914    list N;
     915    for(i=size(JJJ); i>0; i--)
     916    {
     917      N=list();
     918      for(j=size(JJJ[i]); j>0; j--)
     919      {
     920        fp.h=JJJ[i][j][1];
     921        fp.t=JJJ[i][j][2];
     922        N[j]=fp;
     923      }
     924      V[i]=N;
     925    }
     926    def KKJ=imap(r,KK);
     927    list G=list();
     928    list U=list();
     929    for(i=1; i<=size(KKJ); i++)
     930    {
     931      for(j=1; j<=size(KKJ[i]); j++)
     932      {
     933        fp.h=KKJ[i][j][1];
     934        fp.t=KKJ[i][j][2];
     935        U[j]=fp;
     936      }
     937      G[i]=U;
     938    }
     939    //I imported in H everithing I need
     940    poly q;
     941    ideal I;
     942    for(j=1; j<=size(EK);j++)
     943    {
     944      d=D[j];
     945      p=EKPolynomials(EK[j],G);
     946      I=IdealOfV(V[d-minimo+1]);
     947      attrib(I,"isSB",1);
     948      q=reduce(t*p,I);
     949      q=subst(q,t,1);
     950      //I reduce all the EK polynomials
     951      //       q=RiduzPoly(V[d-minimo+1], p);
     952      if(q!=0)
     953      {
     954        //check whether reduction is 0
     955        print("NOT A BASIS");
     956        flag=0;
     957        break;
     958      }
     959    }
     960  }
     961  setring r;
     962  //typeof(flag);
     963  return(flag);
     964}
     965example
     966{ "EXAMPLE:"; echo = 2;
     967 ring r=0, (x,y,z), rp;
     968 jmp r1;
     969 r1.h=z^3;
     970 r1.t=poly(0);
     971 jmp r2;
     972 r2.h=z^2*y;
     973 r2.t=poly(0);
     974 jmp r3;
     975 r3.h=z*y^2 ;
     976 r3.t=-x^2*y;
     977 jmp r4;
     978 r4.h=y^5;
     979 r4.t=poly(0);
     980 list G2F=list(list(r1,r2,r3),list(r4));
     981 TestJMark(G2F,r);
     982}
  • Singular/LIB/JMSConst.lib

    rd4cec6a r7161aca  
    176176int minimo=deg(m.h);
    177177int massimo=deg(M.h);
    178 //print(minimo);
    179 //print(massimo);
    180178int i=2;
    181179jmp qi;
    182180while(i<=size(Q))
    183181     {
    184        //print("entro nel ciclo");
    185        //print(i);
    186182       qi=Q[i][1];
    187183       if(deg(qi.h)!=minimo+1)
    188184         {
    189           //print("qui riempire");
    190           //print(i);
    191185          Q=insert(Q,list(),i-1);//Insert empty list for all intermediate degree between the minimum and the maximum, not having polynomials.
    192           //print(Q);
    193186         }
    194187       minimo=minimo+1;
    195188       i=i+1;
    196        //print("ora ho");
    197        //print(minimo);
    198        //print(i);
    199189     }
    200190return(Q);
     
    250240          Q[i][j]=pp;
    251241          s=s+M[2];
    252           //print(s);
    253242        }
    254243    }
     
    324313int aJ=deg(f.h);
    325314// minimal degree of polynomials in G
    326 //print(aJ);
    327315list V=list();
    328316V[1]=Terns(G,1);
     
    353341             {
    354342                   p=G[V[m-1][j][2]][V[m-1][j][3]];
    355                   //print(p.h);
    356                   //print(p.t);
    357                   //print(var(i));
    358                   //print(Minimus(V[m-1][j][1]*p.h));
    359343               if(var(i)<=Minimus(variables(V[m-1][j][1]*p.h)))
    360344                  {
    361345//Can I multiply by the current variable?
    362                     //print("minoremin");
    363                     //print("fin qui ci sono");
    364                      //print(V[m-1][j][1]);
    365346                     OO=list(var(i)*V[m-1][j][1],V[m-1][j][2],V[m-1][j][3]);
    366347                    V[m]=insert(V[m], OO ,size(V[m]));
     
    754735EXAMPLE:  example FinalVm; shows an example"
    755736{
    756 //multiply and reduce, degree by degree
    757 intvec u=NewWeight(nvars(r)+1);
    758 list L=ringlist(r);
    759 L[2]=insert(L[2],"t",size(L[2]));
    760 //print(L[2]);
    761 list ordlist="a",u;
    762 L[3]=insert(L[3],ordlist,0);
    763 def H=ring(L);
    764 //print(V1);
    765 //print(G1);
    766 list M=list();
    767 jmp p;
    768 list N;
    769 poly q;
    770 poly s;
    771 int i;
    772 int j;
    773 for(i=1; i<=size(G1); i++)
    774    {
    775            N=list();
    776            for(j=1; j<=size(G1[i]); j++)
    777               {
    778                 p=G1[i][j];
    779                 q=p.h;
    780                 s=p.t;
    781                 N[j]=list(q,s);
    782                }
    783            M[i]=N;
    784     }
    785 //print("M is");
    786 //print(M);
    787 p.h=poly(0);
    788 p.t=poly(0);
    789 setring H;
    790 list R=list();
    791 list S=list();
    792 //print("anello definito");
    793 list V=imap(r,V1);
    794 //def G=imap(r,G1);
    795 //print(V);
    796 list MM=imap(r,M);
    797 list G=list();
    798 list N=list();
    799 for(i=1; i<=size(MM); i++)
    800    {
    801            for(j=1; j<=size(MM[i]); j++)
    802               {
    803                 p.h=MM[i][j][1];
    804                 p.t=MM[i][j][2];
    805                 N[j]=p;
    806                }
    807            G[i]=N;
    808     }
    809 ideal I=0;
    810 jmp LL;
    811 jmp UU;
    812 //print("pronta x ridurre");
    813  for(i=1; i<=size(V);i++)
    814     {
    815 //print("sono a V di");
    816 //print(i);
    817        R[i]=list();
    818        S[i]=list();
    819        I=0;
    820               attrib(I,"isSB",1);
    821        for(j=1;j<=size(V[i]); j++)
    822           {
    823 //print(j);
    824 //print("esimo elem");
    825             LL=MultiplyJmP(V[i][j],G);
    826               LL.t=reduce(t*LL.t,I);
    827 //I only reduce the tail
    828 //print(LL.t);
    829               LL.t=subst(LL.t,t,1);
    830               S[i]=insert(S[i],LL,size(S[i]));
    831               LL.h=t*LL.h;
    832             R[i]=insert(R[i],LL,size(R[i]));
    833              UU=R[i][j];
    834               I=I+ideal(UU.h+UU.t);
    835               attrib(I,"isSB",1);
    836           }
    837     }
    838 //print("ho ridotto");
    839 list M=list();
    840 poly q;
    841 poly s;
    842 for(i=1; i<=size(S); i++)
    843    {
    844            N=list();
    845            for(j=1; j<=size(S[i]); j++)
    846               {
    847                 p=S[i][j];
    848                 q=p.h;
    849                 s=p.t;
    850                 N[j]=list(q,s);
    851                }
    852            M[i]=N;
    853     }
    854 p.h=poly(0);
    855 p.t=poly(0);
    856 setring r;
    857 def MM=imap(H,M);
    858 list MMM=list();
    859 for(i=1; i<=size(MM); i++)
    860    {
    861            N=list();
    862            for(j=1; j<=size(MM[i]); j++)
    863               {
    864                 p.h=MM[i][j][1];
    865                 p.t=MM[i][j][2];
    866                 N[j]=p;
    867                }
    868            MMM[i]=N;
    869     }
    870 return(MMM);
     737  //multiply and reduce, degree by degree
     738  intvec u=NewWeight(nvars(r)+1);
     739  list L=ringlist(r);
     740  L[2]=insert(L[2],"t",size(L[2]));
     741  list ordlist="a",u;
     742  L[3]=insert(L[3],ordlist,0);
     743  def H=ring(L);
     744  list M=list();
     745  jmp p;
     746  list N;
     747  poly q;
     748  poly s;
     749  int i;
     750  int j;
     751  for(i=1; i<=size(G1); i++)
     752  {
     753    N=list();
     754    for(j=1; j<=size(G1[i]); j++)
     755    {
     756      p=G1[i][j];
     757      q=p.h;
     758      s=p.t;
     759      N[j]=list(q,s);
     760    }
     761    M[i]=N;
     762  }
     763  p.h=poly(0);
     764  p.t=poly(0);
     765  setring H;
     766  list R=list();
     767  list S=list();
     768  //print("anello definito");
     769  list V=imap(r,V1);
     770  list MM=imap(r,M);
     771  list G=list();
     772  list N=list();
     773  for(i=1; i<=size(MM); i++)
     774  {
     775    for(j=1; j<=size(MM[i]); j++)
     776    {
     777      p.h=MM[i][j][1];
     778      p.t=MM[i][j][2];
     779      N[j]=p;
     780    }
     781    G[i]=N;
     782  }
     783  ideal I=0;
     784  jmp LL;
     785  jmp UU;
     786  //print("pronta x ridurre");
     787  for(i=1; i<=size(V);i++)
     788  {
     789    //print("sono a V di");
     790    //print(i);
     791    R[i]=list();
     792    S[i]=list();
     793    I=0;
     794    attrib(I,"isSB",1);
     795    for(j=1;j<=size(V[i]); j++)
     796    {
     797      //print(j);
     798      //print("esimo elem");
     799      LL=MultiplyJmP(V[i][j],G);
     800      LL.t=reduce(t*LL.t,I);
     801      //I only reduce the tail
     802      //print(LL.t);
     803      LL.t=subst(LL.t,t,1);
     804      S[i]=insert(S[i],LL,size(S[i]));
     805      LL.h=t*LL.h;
     806      R[i]=insert(R[i],LL,size(R[i]));
     807      UU=R[i][j];
     808      I=I+ideal(UU.h+UU.t);
     809      attrib(I,"isSB",1);
     810    }
     811  }
     812  //print("ho ridotto");
     813  list M=list();
     814  poly q;
     815  poly s;
     816  for(i=1; i<=size(S); i++)
     817  {
     818    N=list();
     819    for(j=1; j<=size(S[i]); j++)
     820    {
     821      p=S[i][j];
     822      q=p.h;
     823      s=p.t;
     824      N[j]=list(q,s);
     825    }
     826    M[i]=N;
     827  }
     828  p.h=poly(0);
     829  p.t=poly(0);
     830  setring r;
     831  def MM=imap(H,M);
     832  list MMM=list();
     833  for(i=1; i<=size(MM); i++)
     834  {
     835    N=list();
     836    for(j=1; j<=size(MM[i]); j++)
     837    {
     838      p.h=MM[i][j][1];
     839      p.t=MM[i][j][2];
     840      N[j]=p;
     841    }
     842    MMM[i]=N;
     843  }
     844  return(MMM);
    871845}
    872846example
    873847{ "EXAMPLE:"; echo = 2;
    874848 ring r=0, (x,y,z), rp;
    875 jmp r1;
    876 r1.h=z^3;
    877 r1.t=poly(0);
    878 jmp r2;
    879 r2.h=z^2*y;
    880 r2.t=poly(0);
    881 jmp r3;
    882 r3.h=z*y^2 ;
    883 r3.t=-x^2*y;
    884 jmp r4;
    885 r4.h=y^5;
    886 r4.t=poly(0);
    887 list G2F=list(list(r1,r2,r3),list(r4));
     849 jmp r1;
     850 r1.h=z^3;
     851 r1.t=poly(0);
     852 jmp r2;
     853 r2.h=z^2*y;
     854 r2.t=poly(0);
     855 jmp r3;
     856 r3.h=z*y^2 ;
     857 r3.t=-x^2*y;
     858 jmp r4;
     859 r4.h=y^5;
     860 r4.t=poly(0);
     861 list G2F=list(list(r1,r2,r3),list(r4));
    888862 FinalVm(VConst(G2F,6,r) , G2F, r);
    889863}
     
    10931067EXAMPLE:  example SchemeEq; shows an example"
    10941068{
    1095 list Jms=list();
    1096 //ideal I;
    1097 list M=list();
    1098 jmp mini;
    1099 mini=W[1][1];
    1100 int minimo=deg(mini.h);
    1101 //multiply variables
    1102 poly pd=poly(1);
    1103 for(int i=1;i<=nvars(r);i++)
    1104 {pd=pd*var(i);}
    1105 //CHANGE RING
    1106 intvec u=NewWeight(nvars(r)+1);
    1107 list L=ringlist(r);
    1108 L[2]=insert(L[2],"t",size(L[2]));
    1109 //print(L[2]);
    1110 list ordlist="a",u;
    1111 L[3]=insert(L[3],ordlist,0);
    1112 def H=ring(L);
    1113 //list
    1114 M=list();
    1115 jmp pu;
    1116 list N;
    1117 poly q;
    1118 poly s;
    1119 i=0;
    1120 int j;
    1121 for(i=1; i<=size(Q); i++)
    1122    {
    1123            N=list();
    1124            for(j=1; j<=size(Q[i]); j++)
    1125               {
    1126                 pu=Q[i][j];
    1127                 q=pu.h;
    1128                 s=pu.t;
    1129                 N[j]=list(q,s);
    1130                }
    1131            M[i]=N;
    1132     }
    1133 list O;
    1134 pu.h=poly(0);
    1135 pu.t=poly(0);
    1136 for(i=1; i<=size(W); i++)
    1137    {
    1138            N=list();
    1139            for(j=1; j<=size(W[i]); j++)
    1140               {
    1141                 pu=W[i][j];
    1142                 q=pu.h;
    1143                 s=pu.t;
    1144                 N[j]=list(q,s);
    1145                }
    1146            O[i]=N;
    1147     }
    1148 pu.h=poly(0);
    1149 pu.t=poly(0);
    1150 setring H;
    1151 list R=list();
    1152 list S=list();
    1153 //print("anello definito");
    1154 def EK=imap(r,EK);
    1155 def MM=imap(r,M);
    1156 def OO=imap(r,O);
    1157 def pd=imap(r,pd);
    1158 list G=list();
    1159 list N=list();
    1160 for(i=1; i<=size(MM); i++)
    1161    {
    1162            for(j=1; j<=size(MM[i]); j++)
    1163               {
    1164                 pu.h=MM[i][j][1];
    1165                 pu.t=MM[i][j][2];
    1166                 N[j]=pu;
    1167                }
    1168            G[i]=N;
    1169     }
    1170 list V;
    1171 for(i=1; i<=size(OO); i++)
    1172    {
    1173            for(j=1; j<=size(OO[i]); j++)
    1174               {
    1175                 pu.h=OO[i][j][1];
    1176                 pu.t=OO[i][j][2];
    1177                 N[j]=pu;
    1178                }
    1179            V[i]=N;
    1180     }
    1181 //print(V);
    1182 //print(G);
    1183 matrix C;
    1184 list COEFF;
    1185 poly p=0;
    1186 poly q=0;
    1187 ideal I;
    1188 list M;
    1189 i=0;
    1190 jmp g;
    1191 int k;
    1192 for(j=1; j<=size(EK);j++)
     1069  list Jms=list();
     1070  //ideal I;
     1071  list M=list();
     1072  jmp mini;
     1073  mini=W[1][1];
     1074  int minimo=deg(mini.h);
     1075  //multiply variables
     1076  poly pd=poly(1);
     1077  for(int i=1;i<=nvars(r);i++)
     1078  { pd=pd*var(i);}
     1079  //CHANGE RING
     1080  intvec u=NewWeight(nvars(r)+1);
     1081  list L=ringlist(r);
     1082  L[2]=insert(L[2],"t",size(L[2]));
     1083  //print(L[2]);
     1084  list ordlist="a",u;
     1085  L[3]=insert(L[3],ordlist,0);
     1086  def H=ring(L);
     1087  //list
     1088  M=list();
     1089  jmp pu;
     1090  list N;
     1091  poly q;
     1092  poly s;
     1093  i=0;
     1094  int j;
     1095  for(i=1; i<=size(Q); i++)
     1096  {
     1097    N=list();
     1098    for(j=1; j<=size(Q[i]); j++)
     1099    {
     1100      pu=Q[i][j];
     1101      q=pu.h;
     1102      s=pu.t;
     1103      N[j]=list(q,s);
     1104    }
     1105    M[i]=N;
     1106  }
     1107  list O;
     1108  pu.h=poly(0);
     1109  pu.t=poly(0);
     1110  for(i=1; i<=size(W); i++)
     1111  {
     1112    N=list();
     1113    for(j=1; j<=size(W[i]); j++)
     1114    {
     1115      pu=W[i][j];
     1116      q=pu.h;
     1117      s=pu.t;
     1118      N[j]=list(q,s);
     1119    }
     1120    O[i]=N;
     1121  }
     1122  pu.h=poly(0);
     1123  pu.t=poly(0);
     1124  setring H;
     1125  list R=list();
     1126  list S=list();
     1127  //print("anello definito");
     1128  def EK=imap(r,EK);
     1129  def MM=imap(r,M);
     1130  def OO=imap(r,O);
     1131  def pd=imap(r,pd);
     1132  list G=list();
     1133  list N=list();
     1134  for(i=1; i<=size(MM); i++)
     1135  {
     1136    for(j=1; j<=size(MM[i]); j++)
     1137    {
     1138      pu.h=MM[i][j][1];
     1139      pu.t=MM[i][j][2];
     1140      N[j]=pu;
     1141    }
     1142    G[i]=N;
     1143  }
     1144  list V;
     1145  for(i=1; i<=size(OO); i++)
     1146  {
     1147    for(j=1; j<=size(OO[i]); j++)
     1148    {
     1149      pu.h=OO[i][j][1];
     1150      pu.t=OO[i][j][2];
     1151      N[j]=pu;
     1152    }
     1153    V[i]=N;
     1154  }
     1155  //print(V);
     1156  //print(G);
     1157  matrix C;
     1158  list COEFF;
     1159  poly p=0;
     1160  poly q=0;
     1161  ideal I;
     1162  list M;
     1163  i=0;
     1164  jmp g;
     1165  int k;
     1166  for(j=1; j<=size(EK);j++)
     1167  {
     1168    //print("arrivo");
     1169    //print(j);
     1170    p=MultEKPolys(EK[j],G);
     1171    //ideal
     1172    I=0;
     1173    if (size(V[D[j]-minimo+1])!=0)
     1174    {
     1175      M=list();
     1176      //  jmp g;
     1177      for(i=1; i<= size(V[D[j]-minimo+1]); i++)
    11931178      {
    1194        //print("arrivo");
    1195        //print(j);
    1196        p=MultEKPolys(EK[j],G);
    1197        //ideal
    1198         I=0;
    1199        if (size(V[D[j]-minimo+1])!=0)
    1200            {
    1201             M=list();
    1202           //  jmp g;
    1203        for(i=1; i<= size(V[D[j]-minimo+1]); i++)
    1204            {
    1205             g=V[D[j]-minimo+1][i];
    1206             g.h=(g.h)*t;
    1207             M[i]=g.h+g.t;
    1208           }
     1179        g=V[D[j]-minimo+1][i];
     1180        g.h=(g.h)*t;
     1181        M[i]=g.h+g.t;
     1182      }
    12091183      I=M[1..size(M)];
    1210      attrib(I,"isSB",1);
    1211 //print(I);
    1212   }
    1213 //print(I);
    1214 q=reduce(t*p,I);
    1215 q=subst(q,t,1);
    1216        C=coef(q,pd);
    1217        COEFF=C[2,1..ncols(C)];
    1218        for(k=1;k<=size(COEFF);k++)
    1219           {
    1220             if(COEFF[k]!=0)
    1221            { Jms=insert(Jms,COEFF[k],size(Jms));}
    1222           }
    1223       }
    1224 setring r;
    1225 def Jms=imap(H,Jms);
    1226 return(Jms);
     1184      attrib(I,"isSB",1);
     1185      //print(I);
     1186    }
     1187    //print(I);
     1188    q=reduce(t*p,I);
     1189    q=subst(q,t,1);
     1190    C=coef(q,pd);
     1191    COEFF=C[2,1..ncols(C)];
     1192    for(k=1;k<=size(COEFF);k++)
     1193    {
     1194      if(COEFF[k]!=0)
     1195      { Jms=insert(Jms,COEFF[k],size(Jms));}
     1196    }
     1197  }
     1198  setring r;
     1199  def Jms=imap(H,Jms);
     1200  return(Jms);
    12271201}
    12281202example
     
    12301204 ring r=0, (x,y,z),rp;
    12311205 ideal Borid=y^2*z,y*z^2,z^3,y^5;
    1232 attrib(Borid,"isSB",1);
    1233     list B=ArrangeBorel(Borid);
    1234     list NumN;
    1235     list N;
    1236     int i;
    1237     int d;
    1238     for(i=1;i<=size(B);i++)
    1239        {
    1240         d=deg(B[i][1]);
    1241         N[i]=kbase(Borid,d);
    1242         NumN[i]=size(N[i]);
    1243        }
    1244 int qc=NumNewVar(B, NumN);
    1245 //Now I must define the NEW RING,
    1246 //putting the c parameters inside.
    1247 list L=ringlist(r);
    1248 list L2;
    1249 L2[1]=L[1];
    1250 L2[2]=list();
    1251 for(i=qc;i>=1;i--)
    1252     {
    1253      L2[2][i]="c("+string(i)+")";
    1254     }
    1255 L2[3]=list(list("rp",qc));
    1256 L2[4]=L[4];
    1257 L[1]=L2;
    1258 if(defined(K)){kill K;}
    1259 def K=ring(L);
    1260 export K;
    1261 setring(K);
    1262 def Borid=imap(r,Borid);
    1263 def N=imap(r,N);
    1264 def B=imap(r,B);
    1265 //NumN contains only scalars so I do not imap it
    1266 int j;
    1267 list Q;
    1268 int s;
    1269 list M;
    1270 jmp pp;
    1271 for(i=1;i<=size(B);i++)
    1272     {
    1273       Q[i]=list();
    1274      for(j=1;j<=size(B[i]);j++)
    1275         {
    1276           M=NewTails(N[i],s);
    1277           pp.h=B[i][j];
    1278           pp.t=M[1];
    1279           Q[i][j]=pp;
    1280           s=s+M[2];
    1281           //print(s);
    1282         }
    1283     }
    1284 list P=ArrangeTails(Q);
    1285 list EK,D= EKPolynomials(P);
    1286      int massimo=Max(D);
    1287 //list V=VConst(P, massimo);
    1288 //pause();
    1289 list V=VmConstructor(P,massimo,r);
    1290 list W=FinalVm(V,P,K);
    1291 //print("I V ridotti in ordine sono");
    1292 //print(W);
    1293 list Jms=SchemeEq(W,EK,D,P,K);
    1294 Jms;}
     1206 attrib(Borid,"isSB",1);
     1207 list B=ArrangeBorel(Borid);
     1208 list NumN;
     1209 list N;
     1210 int i;
     1211 int d;
     1212 for(i=1;i<=size(B);i++)
     1213 {
     1214   d=deg(B[i][1]);
     1215   N[i]=kbase(Borid,d);
     1216   NumN[i]=size(N[i]);
     1217 }
     1218 int qc=NumNewVar(B, NumN);
     1219 //Now I must define the NEW RING,
     1220 //putting the c parameters inside.
     1221 list L=ringlist(r);
     1222 list L2;
     1223 L2[1]=L[1];
     1224 L2[2]=list();
     1225 for(i=qc;i>=1;i--)
     1226 {
     1227   L2[2][i]="c("+string(i)+")";
     1228 }
     1229 L2[3]=list(list("rp",qc));
     1230 L2[4]=L[4];
     1231 L[1]=L2;
     1232 if(defined(K)){kill K;}
     1233 def K=ring(L);
     1234 export K;
     1235 setring(K);
     1236 def Borid=imap(r,Borid);
     1237 def N=imap(r,N);
     1238 def B=imap(r,B);
     1239 //NumN contains only scalars so I do not imap it
     1240 int j;
     1241 list Q;
     1242 int s;
     1243 list M;
     1244 jmp pp;
     1245 for(i=1;i<=size(B);i++)
     1246 {
     1247   Q[i]=list();
     1248   for(j=1;j<=size(B[i]);j++)
     1249   {
     1250     M=NewTails(N[i],s);
     1251     pp.h=B[i][j];
     1252     pp.t=M[1];
     1253     Q[i][j]=pp;
     1254     s=s+M[2];
     1255     //print(s);
     1256   }
     1257 }
     1258 list P=ArrangeTails(Q);
     1259 list EK,D= EKPolynomials(P);
     1260 int massimo=Max(D);
     1261 //list V=VConst(P, massimo);
     1262 //pause();
     1263 list V=VmConstructor(P,massimo,r);
     1264 list W=FinalVm(V,P,K);
     1265 //print("I V ridotti in ordine sono");
     1266 //print(W);
     1267 list Jms=SchemeEq(W,EK,D,P,K);
     1268 Jms;
     1269}
    12951270
    12961271//////////////////////////////////////////////////////////////////////
     
    13031278EXAMPLE:  example JMarkedScheme; shows an example"
    13041279{
    1305 list Jms;
    1306 if(BorelCheck(Borid,r))
    1307   {
    1308    if(size(Borid)==1)
    1309      { Jms=list();}
    1310   else{
    1311     //print("Input is OK");
    1312     attrib(Borid,"isSB",1);
    1313     list B=ArrangeBorel(Borid);
    1314     list NumN;
    1315     list N;
    1316     int i;
    1317     int d;
    1318     for(i=1;i<=size(B);i++)
    1319        {
     1280  list Jms;
     1281  if(BorelCheck(Borid,r))
     1282  {
     1283    if(size(Borid)==1) { Jms=list();}
     1284    else
     1285    {
     1286      //print("Input is OK");
     1287      attrib(Borid,"isSB",1);
     1288      list B=ArrangeBorel(Borid);
     1289      list NumN;
     1290      list N;
     1291      int i;
     1292      int d;
     1293      for(i=1;i<=size(B);i++)
     1294      {
    13201295        d=deg(B[i][1]);
    13211296        N[i]=kbase(Borid,d);
    13221297        NumN[i]=size(N[i]);
    1323        }
    1324 int qc=NumNewVar(B, NumN);
    1325 if(qc==0)
    1326 {Jms=list(0);}
    1327 else
    1328  {
    1329 //Now I must define the NEW RING,
    1330 //putting the c parameters inside.
    1331 list L=ringlist(r);
    1332 list L2;
    1333 L2[1]=L[1];
    1334 L2[2]=list();
    1335 for(i=qc;i>=1;i--)
    1336     {
    1337      L2[2][i]="c("+string(i)+")";
    1338     }
    1339 L2[3]=list(list("rp",qc));
    1340 L2[4]=L[4];
    1341 L[1]=L2;
    1342 if(defined(K)){kill K;}
    1343 def K=ring(L);
    1344 export K;
    1345 setring(K);
    1346 def Borid=imap(r,Borid);
    1347 def N=imap(r,N);
    1348 def B=imap(r,B);
    1349 //NumN contains only scalars so I do not imap it
    1350 int j;
    1351 list Q;
    1352 int s;
    1353 list M;
    1354 jmp pp;
    1355 for(i=1;i<=size(B);i++)
    1356     {
    1357       Q[i]=list();
    1358      for(j=1;j<=size(B[i]);j++)
     1298      }
     1299      int qc=NumNewVar(B, NumN);
     1300      if(qc==0) {Jms=list(0);}
     1301      else
     1302      {
     1303        //Now I must define the NEW RING,
     1304        //putting the c parameters inside.
     1305        list L=ringlist(r);
     1306        list L2;
     1307        L2[1]=L[1];
     1308        L2[2]=list();
     1309        for(i=qc;i>=1;i--)
    13591310        {
    1360           M=NewTails(N[i],s);
    1361           pp.h=B[i][j];
    1362           pp.t=M[1];
    1363           Q[i][j]=pp;
    1364           s=s+M[2];
    1365           //print(s);
     1311          L2[2][i]="c("+string(i)+")";
    13661312        }
    1367     }
    1368 list P=ArrangeTails(Q);
    1369 list EK,D= EKPolynomials(P);
    1370      int massimo=Max(D);
    1371 //list V=VConst(P, massimo);
    1372 //pause();
    1373 list V=VmConstructor(P,massimo,r);
    1374 list W=FinalVm(V,P,K);
    1375 //print("I V ridotti in ordine sono");
    1376 //print(W);
    1377 //list
    1378 Jms=SchemeEq(W,EK,D,P,K);
    1379 keepring K;}
    1380 }
    1381   }
    1382 else
    1383    {
     1313        L2[3]=list(list("rp",qc));
     1314        L2[4]=L[4];
     1315        L[1]=L2;
     1316        if(defined(K)){kill K;}
     1317        def K=ring(L);
     1318        export K;
     1319        setring(K);
     1320        def Borid=imap(r,Borid);
     1321        def N=imap(r,N);
     1322        def B=imap(r,B);
     1323        //NumN contains only scalars so I do not imap it
     1324        int j;
     1325        list Q;
     1326        int s;
     1327        list M;
     1328        jmp pp;
     1329        for(i=1;i<=size(B);i++)
     1330        {
     1331          Q[i]=list();
     1332          for(j=1;j<=size(B[i]);j++)
     1333          {
     1334            M=NewTails(N[i],s);
     1335            pp.h=B[i][j];
     1336            pp.t=M[1];
     1337            Q[i][j]=pp;
     1338            s=s+M[2];
     1339            //print(s);
     1340          }
     1341        }
     1342        list P=ArrangeTails(Q);
     1343        list EK,D= EKPolynomials(P);
     1344        int massimo=Max(D);
     1345        //list V=VConst(P, massimo);
     1346        //pause();
     1347        list V=VmConstructor(P,massimo,r);
     1348        list W=FinalVm(V,P,K);
     1349        //print("I V ridotti in ordine sono");
     1350        //print(W);
     1351        //list
     1352        Jms=SchemeEq(W,EK,D,P,K);
     1353        keepring K;
     1354      }
     1355    }
     1356  }
     1357  else
     1358  {
    13841359    print("WRONG IDEAL IN INPUT");
    13851360    print("It is NOT BOREL");
    1386    }
    1387 return(Jms);
     1361  }
     1362  return(Jms);
    13881363}
    13891364example
     
    13911366 ring r=0, (x,y,z),rp;
    13921367 ideal Borid=y^2*z,y*z^2,z^3,y^5;
    1393 JMarkedScheme(Borid,r);
    1394 }
    1395 ////////////////////////////////////////////////////////////////////
     1368 JMarkedScheme(Borid,r);
     1369}
     1370////////////////////////////////////////////////////////////////////
  • Singular/LIB/algebra.lib

    rd4cec6a r7161aca  
    10321032  }
    10331033  // --------------------- change of variable names -------------------------
    1034   execute("ring @bsr = ("+charstr(bsr)+"),y(1..m),("+os+");");
     1034  list l2;
     1035  for (int ii = 1; ii <= m; ii++)
     1036  {
     1037    l2[ii] = "y("+string(ii)+")";
     1038  }
     1039  ring @bsr = create_ring(ringlist(bsr)[1], l2, "("+os+")", "no_minpoly");
    10351040  ideal J = fetch(bsr,J);
    10361041  ideal PHI = fetch(bsr,PHI);
  • Singular/LIB/assprimeszerodim.lib

    rd4cec6a r7161aca  
    284284{
    285285   def R = basering;
    286    execute("ring QT = ("+charstr(R)+"), "+varstr(R, nvars(R))+", dp;");
     286   ring QT = create_ring(ringlist(R)[1], varstr(R, nvars(R)), "dp", "no_minpoly");
    287287   setring(R);
    288288   map phi = QT, f;
     
    349349     M[1..d, j] = coeffs(reduce(f*basis[j], J), basis, vars);
    350350   }
    351    execute("ring QT = ("+charstr(R)+"), "+varstr(R, nvars(R))+", dp;");
     351   ring QT = create_ring(ringlist(R)[1], varstr(R, nvars(R)), "dp", "no_minpoly");
    352352   matrix M = imap(R, M);
    353353   ideal F = det(M-var(1)*freemodule(d));
     
    364364//=== mapping T to p and test if d=deg(F)
    365365   def R = basering;
    366    execute("ring Rhelp = ("+charstr(R)+"), T, dp;");
     366   ring Rhelp = create_ring(ringlist(R)[1], "T", "dp", "no_minpoly");
    367367   setring R;
    368368   map phi = Rhelp,p;
  • Singular/LIB/chern.lib

    rd4cec6a r7161aca  
    33053305  int n=nvars(basering);
    33063306  def br@=basering; // remember the base ring
    3307   execute("ring r@=("+ charstr(basering) +"),("+varstr(basering)+",homvar@), dp;");
     3307  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+",homvar@)", "dp", "no_minpoly");
    33083308  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    33093309  ideal I=F(I);
  • Singular/LIB/classify.lib

    rd4cec6a r7161aca  
    256256     PhiG = MapReduce(PhiG);
    257257
    258      execute("ring RingB="+charstr(basering)+",("+A_Z("x",corank)+"),(c,ds);");
     258     ring RingB = create_ring(ringlist(basering)[1], "("+A_Z("x",corank)+")", "(c,ds)", "no_minpoly");
    259259     export RingB;
    260260     setring ring_rest;
  • Singular/LIB/ellipticcovers.lib

    rd4cec6a r7161aca  
    6767
    6868
    69 proc mod_init()
    70 {
    71 newstruct("graph","list vertices, list edges");
    72 newstruct("Net","list rows");
    73 
    74 system("install","graph","print",printGraph,1);
    75 system("install","Net","print",printNet,1);
    76 system("install","Net","+",catNet,2);
    77 
    78 }
    79 
     69static proc mod_init()
     70{
     71  newstruct("graph","list vertices, list edges");
     72  newstruct("Net","list rows");
     73
     74  system("install","graph","print",printGraph,1);
     75  system("install","Net","print",printNet,1);
     76  system("install","Net","+",catNet,2);
     77}
    8078
    8179static proc catNet(Net N, Net M)
    8280{
    83 list L;
    84 list LN=N.rows;
    85 list LM=M.rows;
    86 int widthN=size(LN[1]);
    87 int widthM=size(LM[1]);
    88 int nm=max(size(LN),size(LM));
    89 for (int j=1; j<=nm; j++)
    90 {
     81  list L;
     82  list LN=N.rows;
     83  list LM=M.rows;
     84  int widthN=size(LN[1]);
     85  int widthM=size(LM[1]);
     86  int nm=max(size(LN),size(LM));
     87  for (int j=1; j<=nm; j++)
     88  {
    9189    if (j>size(LN)){LN[j]=emptyString(widthN);}
    9290    if (j>size(LM)){LM[j]=emptyString(widthM);}
    9391    L[j]=LN[j]+LM[j];
    94 }
    95 Net NM;
    96 NM.rows=L;
    97 return(NM);}
     92  }
     93  Net NM;
     94  NM.rows=L;
     95  return(NM);
     96}
    9897
    9998
     
    111110static proc printNet(Net N)
    112111{
    113 list L = N.rows;
    114 for (int j=1; j<=size(L); j++)
    115 {
    116    print(L[j]);
    117 }
    118 }
    119 
    120 static proc net(def M){
    121   if (typeof(M)=="list"){
     112  list L = N.rows;
     113  for (int j=1; j<=size(L); j++)
     114  {
     115    print(L[j]);
     116  }
     117}
     118
     119static proc net(def M)
     120{
     121  if (typeof(M)=="list")
     122  {
    122123    return(netList(M));
    123124  }
     
    126127  L[1]=string(M);
    127128  N.rows=L;
    128 return(N);}
     129  return(N);
     130}
    129131
    130132
     
    147149  G;
    148150}
    149 
    150 
    151151
    152152proc makeGraph(list v, list e)
     
    170170  G;
    171171}
    172 
    173172
    174173proc propagator(def xy, def d)
     
    195194"
    196195{
    197   if ((typeof(xy)=="list")||(typeof(d)=="int")) {
     196  if ((typeof(xy)=="list")||(typeof(d)=="int"))
     197  {
    198198    number x = xy[1];
    199199    number y = xy[2];
     
    201201    if (d==0) {return(x^2*y^2/(x^2-y^2)^2);}
    202202    number p=0;
    203     for (int j=1; j<=d; j++){
     203    for (int j=1; j<=d; j++)
     204    {
    204205       if (d%j==0){p=p+(j*x^(4*j)+j*y^(4*j))/(x*y)^(2*j);}
    205206    }
    206207    return(p);
    207208  }
    208   if ((typeof(xy)=="graph")||(typeof(d)=="list"))  {
     209  if ((typeof(xy)=="graph")||(typeof(d)=="list"))
     210  {
    209211    list xl = ringlist(basering)[1][2];
    210212    list ed = xy.edges;
    211213    number f=1;
    212     for (int j=1; j<=size(ed); j++){
     214    for (int j=1; j<=size(ed); j++)
     215    {
    213216       execute("number xx1 = "+xl[ed[j][1]]);
    214217       execute("number xx2 = "+xl[ed[j][2]]);
     
    219222    return(f);
    220223  }
    221   if ((typeof(xy)=="graph")||(typeof(d)=="int"))  {
    222   }
    223 ERROR("wrong input type");}
     224  if ((typeof(xy)=="graph")||(typeof(d)=="int"))
     225  {
     226  }
     227  ERROR("wrong input type");
     228}
    224229example
    225230{ "EXAMPLE:"; echo=2;
     
    230235  propagator(G,list(1,1,1,0,0,0));
    231236}
    232 
    233 
    234 
    235 
    236237
    237238proc computeConstant(number f,number xx)
     
    240241RETURN:  number, the constant coefficient of the Laurent series of f in the variable x.
    241242THEORY:  Computes the constant coefficient of the Laurent series by iterative differentiation.
    242 
    243243KEYWORDS: Laurent series
    244244EXAMPLE:  example computeConstant; shows an example
     
    250250  int j;
    251251  poly de;
    252   while (tst==0){
    253      ff=f*xx^k;
    254      for (j=1; j<=k; j++){
    255         ff=diff(ff,xx)/j;
    256      }
    257   de = subst(denominator(ff),xx,0);
    258   if (de!=0){
    259      poly nu = subst(numerator(ff),xx,0);
    260      return(number(nu/de));
    261   }
    262   k=k+1;
    263   }
    264 ERROR("error in computeConstant");}
     252  while (tst==0)
     253  {
     254    ff=f*xx^k;
     255    for (j=1; j<=k; j++)
     256    {
     257      ff=diff(ff,xx)/j;
     258    }
     259    de = subst(denominator(ff),xx,0);
     260    if (de!=0)
     261    {
     262      poly nu = subst(numerator(ff),xx,0);
     263      return(number(nu/de));
     264    }
     265    k++;
     266  }
     267  ERROR("error in computeConstant");
     268}
    265269example
    266270{ "EXAMPLE:"; echo=2;
     
    270274  computeConstant(P,x2);
    271275}
    272 
    273 
    274 
    275276
    276277proc evaluateIntegral(number P, list xL)
     
    289290{
    290291  number p = P;
    291   for(int j=1; j<=size(xL); j++){
     292  for(int j=1; j<=size(xL); j++)
     293  {
    292294     p=computeConstant(p,xL[j]);
    293295  }
    294 return(p);}
     296  return(p);
     297}
    295298example
    296299{ "EXAMPLE:"; echo=2;
     
    300303  evaluateIntegral(p,list(x1,x3,x4,x2));
    301304}
    302 
    303305
    304306proc permute (list N)
     
    314316"
    315317{
    316    int i,j,k;
    317    list L,L1;
    318    if (size(N)==1){
    319      return(list(N));
    320    } else {
    321      k=1;
    322      for (i=1; i<=size(N); i++){
    323        L=permute(delete(N,i));
    324        for (j=1; j<=size(L); j++){
    325           L1[k]=L[j]+list(N[i]);
    326           k=k+1;
    327        }
    328      }
    329    }
    330 return(L1);}
     318  int i,j,k;
     319  list L,L1;
     320  if (size(N)==1)
     321  {
     322    return(list(N));
     323  }
     324  else
     325  {
     326    k=1;
     327    for (i=1; i<=size(N); i++)
     328    {
     329      L=permute(delete(N,i));
     330      for (j=1; j<=size(L); j++)
     331      {
     332        L1[k]=L[j]+list(N[i]);
     333        k=k+1;
     334      }
     335    }
     336  }
     337  return(L1);
     338}
    331339example
    332340{ "EXAMPLE:"; echo=2;
     
    349357"
    350358{
    351 ring R = 2,(x(1..n)),dp;
    352 ideal I = maxideal(a);
    353 list L;
    354 for (int j=1;j<=size(I);j++){
    355   L[j]=leadexp(I[j]);
    356 }
    357 return(L);}
     359  ring R = 2,(x(1..n)),dp;
     360  ideal I = maxideal(a);
     361  list L;
     362  for (int j=1;j<=size(I);j++)
     363  {
     364    L[j]=leadexp(I[j]);
     365  }
     366  return(L);
     367}
    358368example
    359369{ "EXAMPLE:"; echo=2;
    360370  partitions(3,7);
    361371}
    362 
    363 
    364372
    365373proc gromovWitten(def P,list #)
     
    385393"
    386394{
    387   if (typeof(P)=="number") {
    388   list xl = ringlist(basering)[1][2];
    389   int j;
    390   for(j=1; j<=size(xl); j++){
    391      execute("number n= "+xl[j]);
    392      xl[j]=n;
    393      kill n;
    394   }
    395   list pxl = permute(xl);
    396   number p = 0;
    397   for(j=1; j<=size(pxl); j++){
    398      p=p+evaluateIntegral(P,pxl[j]);
    399   }
    400   return(p);
    401   }
    402   if (typeof(P)=="graph"){
    403      if (size(#)>1){
    404        return(gromovWitten(propagator(P,#)));
    405      } else {
     395  if (typeof(P)=="number")
     396  {
     397    list xl = ringlist(basering)[1][2];
     398    int j;
     399    for(j=1; j<=size(xl); j++)
     400    {
     401      execute("number n= "+xl[j]);
     402      xl[j]=n;
     403      kill n;
     404    }
     405    list pxl = permute(xl);
     406    number p = 0;
     407    for(j=1; j<=size(pxl); j++)
     408    {
     409      p=p+evaluateIntegral(P,pxl[j]);
     410    }
     411    return(p);
     412  }
     413  if (typeof(P)=="graph")
     414  {
     415    if (size(#)>1)
     416    {
     417      return(gromovWitten(propagator(P,#)));
     418    }
     419    else
     420    {
    406421      int d =#[1];
    407422      list pa = partitions(size(P.edges),d);
    408423      list re;
    409424      int ti;
    410       for (int j=1; j<=size(pa); j++) {
    411        ti=timer;
    412        re[j]=gromovWitten(propagator(P,pa[j]));
    413        ti=timer-ti;
    414        //print(string(j)+" / "+string(size(pa))+"    "+string(pa[j])+"     "+string(re[j])+"      "+string(sum(re))+"     "+string(ti));
     425      for (int j=1; j<=size(pa); j++)
     426      {
     427        ti=timer;
     428        re[j]=gromovWitten(propagator(P,pa[j]));
     429        ti=timer-ti;
     430        //print(string(j)+" / "+string(size(pa))+"    "+string(pa[j])+"     "+string(re[j])+"      "+string(sum(re))+"     "+string(ti));
    415431      }
    416      return(lsum(re));
    417      }
     432      return(lsum(re));
     433    }
    418434  }
    419435}
     
    427443  gromovWitten(G,2);
    428444}
    429 
    430 
    431445
    432446proc computeGromovWitten(graph P,int d, int st, int en, list #)
     
    443457"
    444458{
    445      number s =0;
    446      list pararg;
    447      list re;
    448      list pa = partitions(size(P.edges),d);
    449      int vb=0;
    450      if (size(#)>0){vb=#[1];}
    451      int ti;
    452      if (vb>0){print(size(pa));}
    453      for (int j=1; j<=size(pa); j++) {
    454       if ((j>=st)&(j<=en)){
    455        ti=timer;
    456        //pararg[j]=list(propagator(G,pa[j]));
    457        re[j]=gromovWitten(propagator(P,pa[j]));
    458        ti=timer-ti;
    459        if (vb>0){print(string(j)+" / "+string(size(pa))+"    "+string(pa[j])+"     "+string(re[j])+"      "+string(lsum(re))+"     "+string(ti));}
    460       } else {re[j]=s;}
    461      }
    462      //list re = parallelWaitAll("gromovWitten", pararg, list(list(list(2))));
    463      return(re);
     459  number s =0;
     460  list pararg;
     461  list re;
     462  list pa = partitions(size(P.edges),d);
     463  int vb=0;
     464  if (size(#)>0){vb=#[1];}
     465  int ti;
     466  if (vb>0){print(size(pa));}
     467  for (int j=1; j<=size(pa); j++)
     468  {
     469    if ((j>=st)&(j<=en))
     470    {
     471      ti=timer;
     472      //pararg[j]=list(propagator(G,pa[j]));
     473      re[j]=gromovWitten(propagator(P,pa[j]));
     474      ti=timer-ti;
     475      if (vb>0){print(string(j)+" / "+string(size(pa))+"    "+string(pa[j])+"     "+string(re[j])+"      "+string(lsum(re))+"     "+string(ti));}
     476    }
     477    else
     478    {re[j]=s;}
     479  }
     480  //list re = parallelWaitAll("gromovWitten", pararg, list(list(list(2))));
     481  return(re);
    464482}
    465483example
     
    471489  computeGromovWitten(G,2,3,7,1);
    472490}
    473 
    474491
    475492proc lsum(list L)
     
    485502{
    486503  execute(typeof(L[1])+" s");
    487   for(int j=1; j<=size(L); j++){
    488      s=s+L[j];
    489   }
    490 return(s);}
     504  for(int j=1; j<=size(L); j++)
     505  {
     506    s=s+L[j];
     507  }
     508  return(s);
     509}
    491510example
    492511{ "EXAMPLE:"; echo=2;
     
    494513  lsum(L);
    495514}
    496 
    497 
    498515
    499516proc generatingFunction(graph G, int d)
     
    512529  int j,jj;
    513530  list pa,L;
    514   for (j=1; j<=d; j++){
     531  for (j=1; j<=d; j++)
     532  {
    515533    pa = partitions(size(G.edges),j);
    516534    L = computeGromovWitten(G,j,1,size(pa));
    517     for (jj=1; jj<=size(pa); jj++) {
    518        s=s+L[jj]*monomial(pa[jj]);
    519     }
    520   }
    521 return(s);}
     535    for (jj=1; jj<=size(pa); jj++)
     536    {
     537      s=s+L[jj]*monomial(pa[jj]);
     538    }
     539  }
     540  return(s);
     541}
    522542example
    523543{ "EXAMPLE:"; echo=2;
  • Singular/LIB/equising.lib

    rd4cec6a r7161aca  
    13991399
    14001400  def old_ring=basering;
    1401   execute("ring @myRing=("+charstr(basering)+"),("+varstr(basering)+"),ds;");
     1401  ring @myRing = create_ring(ringlist(basering)[1], "("+varstr(basering)+")", "ds", "no_minpoly");
    14021402  poly f=imap(old_ring,f);
    14031403
  • Singular/LIB/finvar.lib

    rd4cec6a r7161aca  
    13901390    poly A(1)=M[1,2];                 // denominator of Molien series (for now)
    13911391    string mp=string(minpoly);
    1392     execute("ring R=("+charstr(br)+"),("+varstr(br)+"),ds;");
     1392    ring R = create_ring(ringlist(br)[1], "("+varstr(br)+")", "ds", "no_minpoly");
    13931393    if (mp!="0")
    13941394    {
  • Singular/LIB/fpaprops.lib

    rb258e2a r7161aca  
    877877}
    878878
    879 proc lpGkDim(ideal G)
     879proc lpGkDim_lib(ideal G)
    880880"USAGE: lpGkDim(G); G an ideal in a letterplace ring
    881881RETURN: int
  • Singular/LIB/gmssing.lib

    rd4cec6a r7161aca  
    196196  }
    197197
    198   execute("ring G="+string(charstr(@R))+",("+s+","+varstr(@R)+"),(ws("+
    199     string(deg(highcorner(g))+2*gmsmaxdeg)+"),"+os+",c);");
     198  ring G = create_ring(string(charstr(@R)), "("+s+","+varstr(@R)+")", "(ws("+string(deg(highcorner(g))+2*gmsmaxdeg)+"),"+os+",c)");
    200199
    201200  poly gmspoly=imap(@R,t);
  • Singular/LIB/goettsche.lib

    rd4cec6a r7161aca  
    8181  def br@=basering; // remember the base ring
    8282  // add additional variables z@, t@ to the base ring
    83   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     83  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    8484  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    8585  // compute the generating function by the Goettsche's formula up to degree n in t@
     
    144144  def br@=basering; // remember the base ring
    145145  // add additional variables z@, t@ to the base ring
    146   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     146  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    147147  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    148148  // compute the generating function by the Goettsche's formula up to degree n in t@
     
    208208  def br@=basering; // remember the base ring
    209209  // add additional variables z@, t@ to the base ring
    210   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     210  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    211211  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    212212  poly rez=1;
     
    267267  def br@=basering; // remember the base ring
    268268  // add additional variables z@, t@ to the base ring
    269   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     269  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    270270  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    271271  // compute the generating function by the Nakajima-Yoshioka formula up to degree n in t@
     
    322322  def br@=basering; // remember the base ring
    323323  // add additional variables z@, t@ to the base ring
    324   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     324  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    325325  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    326326  // compute the generating function by the Nakajima-Yoshioka formula up to degree n in t@
     
    377377  def br@=basering; // remember the base ring
    378378  // add additional variables z@, t@ to the base ring
    379   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     379  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    380380  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    381381  poly rez=1;
     
    434434  def br@=basering; // remember the base ring
    435435  // add additional variables z@, t@ to the base ring
    436   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     436  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    437437  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    438438  poly rez=1;
     
    485485  def br@=basering; // remember the base ring
    486486  // add additional variables z@, t@ to the base ring
    487   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     487  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    488488  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    489489  poly rez=1;
     
    536536  def br@=basering; // remember the base ring
    537537  // add additional variables z@, t@ to the base ring
    538   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", z@, t@), dp;" );
     538  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", z@, t@)", "dp", "no_minpoly");
    539539  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    540540  poly rez=1;
     
    594594  def br@=basering; // remember the base ring
    595595  // add additional variable t@ to the base ring
    596   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", t@), dp;" );
     596  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", t@)", "dp", "no_minpoly");
    597597  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    598598  poly rez=(1-t@^2)*PPolyW(q, m, n, t@, d);
     
    637637  def br@=basering; // remember the base ring
    638638  // add additional variable t@ to the base ring
    639   execute("ring r@= (" + charstr(basering) + "),("+varstr(basering)+", t@), dp;" );
     639  ring r@ = create_ring(ringlist(basering)[1], "("+varstr(basering)+", t@)", "dp", "no_minpoly");
    640640  execute( "map F= br@,"+varstr(br@)+";" ); // define the corresponding inclusion of rings
    641641  poly rez=(1-t@^2)*PPolyW(q, m, n, t@, d);
  • Singular/LIB/graal.lib

    rd4cec6a r7161aca  
    210210  {
    211211    def origin = basering;
    212     execute("ring ringForGeneralPosition = ("+charstr(basering)+"),("+varstr(basering)+"),lp;");
     212    ring ringForGeneralPosition = create_ring(ringlist(basering)[1], "("+varstr(basering)+")", "lp", "no_minpoly");
    213213    ideal m = fetch(origin,m);
    214214    newRing = 1;
     
    358358  else
    359359    { string pars; string vars = varstr(basering); }
    360   execute("ring Q0 = ("+charstr(basering)+pars+"),("+vars+"),dp;");
     360  ring Q0 = create_ring("("+charstr(basering)+pars+")", "("+vars+")", "dp");
    361361  ideal J0 = imap(Q,J);
    362362  Gr.Q0 = Q0;
  • Singular/LIB/mprimdec.lib

    rd4cec6a r7161aca  
    224224  {
    225225    def BAS=basering;
    226     execute("ring Rloc=("+charstr(basering)+","+varstr(basering)+"),dummy,(C,dp);");
     226    ring Rloc = create_ring("("+charstr(basering)+","+varstr(basering)+")", "dummy", "(C,dp)");
    227227    module @N=imap(BAS, @N);
    228228    poly @q=prepareSat(@N);
     
    634634  if(size(ann)==0)
    635635  {
    636     execute("ring Rloc=("+charstr(basering)+","+varstr(basering)+"),dummy,(C,dp);");
     636    ring Rloc = create_ring("("+charstr(basering)+","+varstr(basering)+")", "dummy", "(C,dp)");
    637637    module @N=imap(BAS, @N);
    638638    poly @q=prepareSat(@N);
     
    14241424  if(size(ann)==0)      //check, whether ann=0
    14251425  {
    1426    execute("ring Rloc=("+charstr(basering)+","+varstr(basering)+"),dummy,(C,dp);");
     1426   ring Rloc = create_ring("("+charstr(basering)+","+varstr(basering)+")", "dummy", "(C,dp)");
    14271427   module @N=clrSBmod(imap(BAS, @N));
    14281428   module @M=freemodule(nrows(@N));
     
    15531553      ring RAU = create_ring(ringlist(basering)[1], "("+indep[@k1][@k2][1]+","+indep[@k1][@k2][2]+")", indep[@k1][@k2][3], "no_minpoly");
    15541554      module @N=std(imap(BAS,@N)); // the standard basis in (R[U])[A]
    1555       execute("ring Rloc=("+charstr(basering)+","+indep[@k1][@k2][2]+"),("+indep[@k1][@k2][1]+"),(C,dp);");
     1555      ring Rloc = create_ring("("+charstr(basering)+","+indep[@k1][@k2][2]+")", "("+indep[@k1][@k2][1]+")", "(C,dp)");
    15561556      module @N=imap(RAU,@N); //std in lokalisierung
    15571557      @N=clrSBmod(@N);
  • Singular/LIB/numerAlg.lib

    rd4cec6a r7161aca  
    230230 setring W1;
    231231 number j1=jj;
    232  execute("ring q=(real,0),("+varstr(S)+"),dp;");
     232 ring q = create_ring("(real,0)", "("+varstr(S)+")", "dp");
    233233 ideal I=imap(W1,I);
    234234 ideal J=imap(W1,J);
    235  execute("ring qq=0,("+varstr(S)+"),dp;");
     235 ring qq = create_ring(0, "("+varstr(S)+")", "dp");
    236236 ideal I=imap(S,I);
    237237 ideal J=imap(S,J);
     
    315315 if((u^2)==0)
    316316 {
    317   execute("ring A=(real,e-1),("+varstr(S)+",I),ds;");
     317  ring A = create_ring("(real,e-1)", "("+varstr(S)+",I)", "ds");
    318318  ideal II=imap(S,J);
    319319  list rw=imap(S,rw);
     
    332332 {
    333333  int d=dim(std(J));
    334   execute("ring R=(complex,e-1,I),("+varstr(S)+"),ds;");
     334  ring R = create_ring("(complex,e-1,I)", "("+varstr(S)+")", "ds");
    335335  list w=imap(S,w);
    336336  ideal II=imap(S,J);
     
    355355  if(tt==d)
    356356  {
    357    execute("ring A=(complex,e,I),("+varstr(S)+"),dp;");
     357   ring A = create_ring("(complex,e,I)", "("+varstr(S)+")", "dp");
    358358   t=tt;
    359359  }
    360360  else
    361361  {
    362    execute("ring RR=(real,e-2),("+varstr(S)+",I),dp;");
     362   ring RR = create_ring("(real,e-2)", "("+varstr(S)+",I)", "dp");
    363363   ideal II=imap(S,J);
    364364   list rw=imap(S,rw);
     
    398398    setring M;
    399399    sz1=size(SOL);
    400     execute("ring RRRQ=(real,e-1),("+varstr(S)+",I),dp;");
     400    ring RRRQ = create_ring("(real,e-1)", "("+varstr(S)+",I)", "dp");
    401401    ideal HH=imap(RR,HH);
    402402    if(dim(std(HH))==0)
     
    413413   if(sz1==sz2)
    414414   {
    415     execute("ring A=(complex,e,I),("+varstr(S)+"),dp;");
     415    ring A = create_ring("(complex,e,I)", "("+varstr(S)+")", "dp");
    416416    t=d;
    417417   }
    418418   else
    419419   {
    420     execute("ring RQ=(real,e-1),("+varstr(S)+"),dp;");
     420    ring RQ = create_ring("(real,e-1)", "("+varstr(S)+")", "dp");
    421421    ideal II=imap(S,J);
    422422    def RW=WitSet(II);
     
    448448        if((ni+nr)<1/10^(2*e-3))
    449449        {
    450          execute("ring A=(complex,e,I),("+varstr(S)+"),dp;");
     450         ring A = create_ring("(complex,e,I)", "("+varstr(S)+")", "dp");
    451451         list W(ii)=imap(RW,W(ii));
    452452         t=0;
     
    459459      {
    460460       def SS=Singular2bertini(W(ii));
    461        execute("ring D=(complex,e,I),("+varstr(S)+",s,gamma),dp;");
     461       ring D = create_ring("(complex,e,I)", "("+varstr(S)+",s,gamma)", "dp");
    462462       string nonsin;
    463463       ideal H,L;
     
    504504         if(tr<=1/10^(2*e-3))
    505505         {
    506           execute("ring A=(complex,e,I),("+varstr(S)+"),dp;");
     506          ring A = create_ring("(complex,e,I)", "("+varstr(S)+")", "dp");
    507507          t=ii;
    508508          ii=d+1;
  • Singular/LIB/numerDecom.lib

    rd4cec6a r7161aca  
    349349   if((n-rn)!=dd)
    350350   {
    351     execute("ring R=0,("+varstr(S)+",z(1..dd)),dp;");
     351    list l2 = ringlist(S)[2];
     352    for (int ii = 1; ii <= dd; ii++)
     353    {
     354     l2[size(l2)+1] = "z("+string(ii)+")";
     355    }
     356    ring R = create_ring(0, l2, "dp");
    352357    ideal I=imap(rs,I);
    353358    ideal H(0..n),L,LL,L(1..dd),LL(1..dd),h(1..dd),N(0..dd);
     
    483488     {
    484489      int w(q-1)=0;
    485       execute("ring D(q)=(0,s,gamma),("+varstr(S)+",z(1..q)),dp;");
     490      list l2 = ringlist(S)[2];
     491      for (int ii = 1; ii <= q; ii++)
     492      {
     493       l2[size(l2)+1] = "z("+string(ii)+")";
     494      }
     495      ring D(q) = create_ring("(0,s,gamma)", l2, "dp");
    486496      string nonsin(q),stnonsin(q);
    487497      ideal H(1..q);
     
    579589         for(qq=q-1;qq>=1;qq--)
    580590         {
    581           execute("ring T(qq)=(complex,16,I),("+varstr(S)+",z(1..qq)),dp;");
     591          list l2 = ringlist(S)[2];
     592          for (int ii = 1; ii <= qq; ii++)
     593          {
     594           l2[size(l2)+1] = "z("+string(ii)+")";
     595          }
     596          ring T(qq) = create_ring("(complex,16,I)", l2, "dp");
    582597          list W(qq-1)=var(1);
    583598         }
     
    591606       {
    592607        int w(qq-1);
    593         execute("ring T(qq)=(complex,16,I),("+varstr(S)+",z(1..qq)),dp;");
     608        list l2 = ringlist(S)[2];
     609        for (int ii = 1; ii <= qq; ii++)
     610        {
     611         l2[size(l2)+1] = "z("+string(ii)+")";
     612        }
     613        ring T(qq) = create_ring("(complex,16,I)", l2, "dp");
    594614        list W(qq-1)=var(1);
    595615       }
     
    600620      for(qq=q;qq>=1;qq--)
    601621      {
    602        execute("ring T(qq)=(complex,16,I),("+varstr(S)+",z(1..qq)),dp;");
     622       list l2 = ringlist(S)[2];
     623       for (int ii = 1; ii <= qq; ii++)
     624       {
     625        l2[size(l2)+1] = "z("+string(ii)+")";
     626       }
     627       ring T(qq) = create_ring("(complex,16,I)", l2, "dp");
    603628       list W(qq-1)=var(1);
    604629      }
     
    19511976  export(J(i));
    19521977 }
    1953  execute("ring RR=0,(x(1..n),"+varstr(S)+"),dp;");
     1978 list l2;
     1979 for (int ii = 1; ii <= n; ii++)
     1980 {
     1981  l2[ii] = "x("+string(ii)+")";
     1982 }
     1983 l2 = l2+ringlist(S)[2];
     1984 ring RR = create_ring(0, l2, "dp");
    19541985 for(i=1;i<=d;i++)
    19551986 {
     
    19952026 int zc=size(D(d));
    19962027 export(zc);
    1997  execute("ring DR=0,("+varstr(S)+",x(1..zc)),dp;");
     2028 list l2 = ringlist(S)[2];
     2029 for (int ii = 1; ii <= zc; ii++)
     2030 {
     2031  l2[size(l2)+1] = "x("+string(ii)+")";
     2032 }
     2033 ring DR = create_ring(0, l2, "dp");
    19982034 matrix TT(d)=imap(R,TT(d));
    19992035 ideal I=imap(S,I);
  • Singular/LIB/paraplanecurves.lib

    rd4cec6a r7161aca  
    16161616      poly p=beta(p);
    16171617
    1618       execute("ring C=("+charstr(S)+",a),("+varstr(S)+"),ds;");
     1618      ring C = create_ring("("+charstr(S)+",a)", "("+varstr(S)+")", "ds");
    16191619      number p=number(imap(B,p));
    16201620      minpoly=p;
  • Singular/LIB/polymake.lib

    rd4cec6a r7161aca  
    135135  LIB "customstd.so";
    136136  LIB "gfanlib.so";
    137   LIB "polymake.so";
     137  load("polymake.so","try");
    138138  option(set,save);
    139139}
  • Singular/LIB/primitiv.lib

    rd4cec6a r7161aca  
    341341
    342342  //---------------- Minimalpolynom in ein Polynom umwandeln: -----------------
    343   execute("ring splt2="+charakt+","+algname+",dp;");
     343  ring splt2 = create_ring(charakt, algname, "dp");
    344344  execute("poly mipol="+minp+";");
    345345  // f ist Polynom in algname und einer weiteren Variablen -> mache f bivariat:
    346   execute("ring splt3="+charakt+",("+algname+","+varnames+"),dp;");
     346  ring splt3 = create_ring(charakt, "("+algname+","+varnames+")", "dp");
    347347  poly f=imap(altring,f);
    348348
    349349  //-------------- Vorbereitung des Aufrufes von primitive: -------------------
    350   execute("ring splt1="+charakt+",(x,y),dp;");
     350  ring splt1 = create_ring(charakt, "(x,y)", "dp");
    351351  ideal abbnach=x;
    352352  for (i=1; i<=anzvar; i++) { abbnach=abbnach,y; }
     
    364364  if (printlevel > -1) { "// new minimal polynomial:",minp; }
    365365  //--------------------- definiere den neuen Ring: ---------------------------
    366   execute("ring neuring = ("+charakt+","+algname+"),("+varnames+"),("
    367           +ordstr(altring)+");");
     366  ring neuring = create_ring("("+charakt+","+algname+")", "("+varnames+")", "("+ordstr(altring)+")");
    368367  execute("minpoly="+minp+";");
    369368
  • Singular/LIB/resolve.lib

    rd4cec6a r7161aca  
    396396            laM=subst(laM,var(templist[4][j]),0);
    397397         }
    398          execute("ring Rnew=("+charstr(basering)+"),("+string(templist[1])+"),dp;");
     398         ring Rnew = create_ring(ringlist(basering)[1], "("+string(templist[1])+")", "dp", "no_minpoly");
    399399         ideal Jnew=imap(R,Jsub);
    400400         ideal eD=imap(R,Esub);
     
    639639         v=N[4];
    640640         for(j=1;j<=size(v);j++){BO[5]=subst(BO[5],var(v[j]),0);}
    641          execute("ring R1=("+charstr(R0)+"),("+newvar+"),dp;");
     641         ring R1 = create_ring(ringlist(R0)[1], "("+newvar+")", "dp", "no_minpoly");
    642642         list BO=imap(R0,BO);
    643643         ideal C=imap(R0,C);
     
    11151115              laM=subst(laM,var(v[j]),0);
    11161116           }
    1117            execute("ring R2=("+charstr(S)+"),("+newvar+"),dp;");
     1117           ring R2 = create_ring(ringlist(S)[1], "("+newvar+")", "dp", "no_minpoly");
    11181118           list BO=imap(S,B);
    11191119           ideal laM=imap(S,laM);
     
    29842984//--- hypersurface is V(@f)
    29852985       @f=Jb[fvec[i]];
    2986        execute("ring R1=("+charstr(R)+"),(@y,"+varstr(R)+"),dp;");
     2986       ring R1 = create_ring(ringlist(R)[1], "(@y,"+varstr(R)+")", "dp", "no_minpoly");
    29872987       poly p=imap(R,@p);
    29882988       poly f=imap(R,@f);
     
    42334233             kill tr,L;
    42344234          }
    4235           execute("ring R1=("+charstr(S)+"),(@z,"+varstr(S)+"),dp;");
     4235          ring R1 = create_ring(ringlist(S)[1], "(@z,"+varstr(S)+")", "dp", "no_minpoly");
    42364236          poly p=imap(S,@p);
    42374237          list BO=imap(S,BO);
     
    48004800      {
    48014801         string newvar=string(N[1]);
    4802          execute("ring R1=("+charstr(R)+"),("+newvar+"),dp;");
     4802         ring R1 = create_ring(ringlist(R)[1], "("+newvar+")", "dp", "no_minpoly");
    48034803         list BO=imap(R,BO);
    48044804         ideal cent=imap(R,cent);
  • Singular/LIB/rinvar.lib

    rd4cec6a r7161aca  
    658658          minPoly = string(minpoly);
    659659        }
    660         execute("ring RA1=0,(" + varstr(basering) + "," + parName + "), lp;");
     660        ring RA1 = create_ring(0, "(" + varstr(basering) + "," + parName + ")", "lp");
    661661        if (minPoly!="0") { execute("ideal mpoly = std(" + minPoly + ");"); }
    662662        ideal I = imap(RIRR,invarsGens);
     
    962962    minPoly = string(minpoly);
    963963  }
    964   execute("ring RA1=0,(" + varstr(basering) + "," + parName + "), lp;");
     964  ring RA1 = create_ring(0, "(" + varstr(basering) + "," + parName + ")", "lp");
    965965  if (minPoly!="0") { execute("ideal mpoly = std(" + minPoly + ");"); }
    966966  ideal Grp = imap(ROBR,Grp);
  • Singular/LIB/rwalk.lib

    rd4cec6a r7161aca  
    209209int printout=0;
    210210def xR = basering;
    211 execute("ring ostR = "+charstr(xR)+",("+varstr(xR)+"),"+ord_str+";");
     211ring ostR = create_ring(ringlist(xR)[1], "("+varstr(xR)+")", ord_str, "no_minpoly");
    212212def old_ring = basering;
    213213
     
    261261int printout=0;
    262262def xR = basering;
    263 execute("ring ostR = ("+charstr(xR)+"),("+varstr(xR)+"),"+ord_str+";");
     263ring ostR = create_ring(ringlist(xR)[1], "("+varstr(xR)+")", ord_str, "no_minpoly");
    264264def old_ring = basering;
    265265
     
    310310   def xR = basering;
    311311
    312    execute("ring ostR = ("+charstr(xR)+"),("+varstr(xR)+"),"+ord_str+";");
     312   ring ostR = create_ring(ringlist(xR)[1], "("+varstr(xR)+")", ord_str, "no_minpoly");
    313313   def old_ring = basering;
    314314   //print("//** help ring = " + string(basering));
  • Singular/LIB/sing.lib

    rd4cec6a r7161aca  
    10761076  int ii;
    10771077  def bas = basering;
    1078   execute("ring  @r_locstd
    1079      =("+charstr(bas)+"),(@t@,"+varstr(bas)+"),(dp(1),dp);");
     1078  ring @r_locstd = create_ring(ringlist(bas)[1], "(@t@,"+varstr(bas)+")", "(dp(1),dp)", "no_minpoly");
    10801079  ideal @id = imap(bas,id);
    10811080  ideal @hid = homog(@id,@t@);
  • Singular/LIB/solve.lib

    rd4cec6a r7161aca  
    700700    if (oldr!=1)
    701701    {
    702       execute("ring rinC =(complex,"+string(outprec)+
    703                  "),("+varstr(basering)+"),lp;");
     702      ring rinC = create_ring("(complex,"+string(outprec)+")", "("+varstr(basering)+")", "lp");
    704703      list SOL;
    705704      if (mu==0){SOL[1] = zerolist(nv);}
     
    771770      if (oldr!=1)
    772771      {
    773         execute("ring rinC =(complex,"+string(outprec)+"),("+varstr(basering)+"),lp;");
     772        ring rinC = create_ring("(complex,"+string(outprec)+")", "("+varstr(basering)+")", "lp");
    774773        list SOL;
    775774        for (ii=1; ii<=size(L); ii++ ) { execute("SOL[ii]=number("+L[ii]+");"); }
     
    800799    else
    801800    {
    802       execute("ring internC=(complex,"+string(prec)+"),("+varstr(basering)+"),lp;");
     801      ring internC = create_ring("(complex,"+string(prec)+")", "("+varstr(basering)+")", "lp");
    803802      ideal H = imap(hr,H);
    804803      list sp = splittolist(splitsqrfree(H[1],var(1)));
     
    812811      if (oldr!=1)
    813812      {
    814         execute("ring rinC =(complex,"+string(outprec)+"),("+varstr(basering)+"),lp;");
     813        ring rinC = create_ring("(complex,"+string(outprec)+")", "("+varstr(basering)+")", "lp");
    815814        list SOL;
    816815        list sp=imap(internC,sp);
     
    878877  if (outprec<prec)
    879878  {
    880     execute("ring internC=(complex,"+string(prec)+"),("+varstr(hr)+"),lp;");
     879    ring internC = create_ring("(complex,"+string(prec)+")", "("+varstr(hr)+")", "lp");
    881880  }
    882881  else
    883882  {
    884     execute("ring rinC =(complex,"+string(outprec)+"),("+varstr(basering)+"),lp;");
     883    ring rinC = create_ring("(complex,"+string(outprec)+")", "("+varstr(basering)+")", "lp");
    885884  }
    886885  list triC = imap(hr,sp);
     
    941940    if (oldr!=1)
    942941    {
    943       execute("ring rinC =(complex,"+string(outprec)+"),("+varstr(basering)+"),lp;");
     942      ring rinC = create_ring("(complex,"+string(outprec)+")", "("+varstr(basering)+")", "lp");
    944943      list SOL=imap(internC,ret1);
    945944      export SOL;
     
    14361435    int ii,jj;
    14371436    int nv=size(LL[1]);
    1438     execute("ring rinC =(complex,"+string(prec)+",I),("
    1439                            +varstr(basering)+"),lp;");
     1437    ring rinC = create_ring("(complex,"+string(prec)+",I)", "("+varstr(basering)+")", "lp");
    14401438    list SOL,SOLnew;
    14411439    for (ii=1; ii<=sizeLL; ii++)
  • Singular/LIB/standard.lib

    rd4cec6a r7161aca  
    25172517static proc parse_L1(string l1)
    25182518{
    2519   if (find(l1, "(", 1) == 0)   // no parentheses
    2520   {
    2521       return(int(l1));
    2522   }
    2523   list tokens = tuple_to_tokens(l1);
     2519  list tokens;
     2520  if (l1[1] != "(")
     2521  {
     2522    tokens[1] = l1;
     2523  }
     2524  else
     2525  {
     2526    tokens = tuple_to_tokens(l1);
     2527  }
     2528  if (tokens[1] == "real")
     2529  {
     2530    int p1 = 6;
     2531    int p2 = 6;
     2532    if (size(tokens) > 1)
     2533    {
     2534      p1 = int(tokens[2]);
     2535      p2 = p1;
     2536    }
     2537    if (size(tokens) > 2)
     2538    {
     2539      p2 = int(tokens[3]);
     2540    }
     2541    return(list(0, list(p1, p2)));
     2542  }
     2543  if (tokens[1] == "complex")
     2544  {
     2545    int p1 = 6;
     2546    int p2 = 6;
     2547    string imag_unit = "i";
     2548    if (int(tokens[size(tokens)]) == 0)   // not an integer
     2549    {
     2550      imag_unit = tokens[size(tokens)];
     2551      tokens = delete(tokens, size(tokens));
     2552    }
     2553    if (size(tokens) > 1)
     2554    {
     2555      p1 = int(tokens[2]);
     2556      p2 = p1;
     2557    }
     2558    if (size(tokens) > 2)
     2559    {
     2560      p2 = int(tokens[3]);
     2561    }
     2562    return(list(0, list(p1, p2), imag_unit));
     2563  }
    25242564  if (size(tokens) == 1)
    25252565  {
    2526       return(int(tokens[1]));
     2566    return(int(tokens[1]));
    25272567  }
    25282568  list L = int(tokens[1]);
     
    25372577  if (v[1, 4] == "var(" && defined(basering))
    25382578  {
    2539       int i = int(v[5,size(v)-5]);
    2540       v = ringlist(basering)[2][i];
     2579    int i = int(v[5,size(v)-5]);
     2580    v = ringlist(basering)[2][i];
    25412581  }
    25422582  return(v);
     
    25502590static proc parse_L2(string l2)
    25512591{
    2552   if (find(l2, "(", 1) == 0)   // no parentheses
    2553   {
    2554       return(list(parse_var(l2)));
     2592  if (l2[1] != "(")
     2593  {
     2594    return(list(parse_var(l2)));
    25552595  }
    25562596  list V = tuple_to_tokens(l2);
    25572597  for (int i = size(V); i > 0; i--)
    25582598  {
    2559       V[i] = parse_var(V[i]);
     2599    V[i] = parse_var(V[i]);
    25602600  }
    25612601  return(V);
     
    25722612{
    25732613  string name;
    2574   intvec w;
    25752614  int b1 = find(ordering, "(", 1);
    25762615  if (b1 == 0)   // no parentheses
     
    25792618    if (name == "C" || name == "c")
    25802619    {
    2581       w = intvec(0);
     2620      intvec w = intvec(0);
    25822621    }
    25832622    else
    25842623    {
    2585       w = 1:n_vars;
     2624      intvec w = 1:n_vars;
    25862625    }
    25872626  }
     
    25932632    if (c == 0)
    25942633    {
    2595       w = 1:int(ordering[b1+1, b2-b1-1]);
     2634      if (name == "L")
     2635      {
     2636        int w = int(ordering[b1+1, b2-b1-1]);
     2637      }
     2638      if (name == "wp" || name == "Wp" || name == "ws" || name == "Ws"
     2639          || name == "a")
     2640      {
     2641        intvec w = int(ordering[b1+1, b2-b1-1]);
     2642      }
     2643      if (!defined(w))   // else
     2644      {
     2645        intvec w = 1:int(ordering[b1+1, b2-b1-1]);
     2646      }
    25962647    }
    25972648    else
    25982649    {
    25992650      list W = tuple_to_tokens(ordering[b1, b2-b1+1]);
    2600       w = intvec(int(W[1..size(W)]));
     2651      intvec w = intvec(int(W[1..size(W)]));
    26012652    }
    26022653  }
  • Singular/LIB/surfex/Singular/surfex.lib

    rd4cec6a r7161aca  
    298298                                    string str_num_mp = "number "+parstr(1)+"="+
    299299                                        decstr2ratstr(rootminpoly())+";";
    300                                     execute("ring Iring = 0,("
    301 //                                          +string(coords)+","+str_para+"),dp;");
    302                                             +string(coords)+"),dp;");
     300                                    ring Iring = create_ring(0, "("+string(coords)+")", "dp");
    303301                                    basering;
    304302                                    execute(str_num_mp);
     
    320318                            string str_tmp_l = "ideal eqd_tmp = "+string(tmp_l)+";";
    321319                            def cur_ring = basering;
    322                             execute("ring Iring = (real,30),("+string(coords)+"),("+ordstr(oring)+");");
     320                            ring Iring = create_ring("(real,30)", "("+string(coords)+")", "("+ordstr(oring)+")");
    323321//                          basering;
    324322                            execute(str_I);
     
    10111009                    if(minp==1) {
    10121010                        // switch to a ring without minimal polynomial:
    1013                         execute("ring rr = (real,30,30),("+varstr(base)+"), dp;");
     1011                        ring rr = create_ring("(real,30,30)", "("+varstr(base)+")", "dp");
    10141012//                      rr;
    10151013//                      "str_I",str_I;
     
    10321030                if(n-params==3) {
    10331031                    p=cleardenom(p);
    1034                     execute("ring rr = (real,30,30),("+varstr(base)+","+parstr(base)+"), dp;");
     1032                    ring rr = create_ring("(real,30,30)", "("+varstr(base)+","+parstr(base)+")", "dp");
    10351033                    rr;
    10361034                    "str_I",str_I;
  • Singular/LIB/tropical.lib

    rd4cec6a r7161aca  
    340340  if (nvars(basering)==2)
    341341  {
    342     ring BASERING = create_ring(ringlist(ALTERRING)[1], "(t,x(1))", "("+ordstr(ALTERRING)+")", "no_minpoly");
     342    execute("ring BASERING=("+charstr(ALTERRING)+"),(t,x(1)),("+ordstr(ALTERRING)+");");
    343343  }
    344344  else
     
    470470    variablen=variablen+var(j);
    471471  }
    472   ring GRUNDRING = create_ring(ringlist(basering)[1], "("+string(variablen)+",t)", "(dp("+string(nvars(basering)-1)+"),lp(1))", "no_minpoly");
     472  execute("ring GRUNDRING=("+charstr(basering)+"),("+string(variablen)+",t),(dp("+string(nvars(basering)-1)+"),lp(1));");
    473473  ideal variablen;
    474474  for (j=1;j<=nvars(basering)-1;j++)
     
    573573        // from LIFTRING are present,
    574574        // and where also the variables of CUTDOWNRING live
    575         ring REPLACEMENTRING = create_ring(ringlist(LIFTRING)[1], "("+varstr(CUTDOWNRING)+")", "dp", "no_minpoly");
     575        execute("ring REPLACEMENTRING=("+charstr(LIFTRING)+"),("+varstr(CUTDOWNRING)+"),dp;");
    576576        list repl=imap(CUTDOWNRING,repl); // get the replacement rules
    577577                                          // from CUTDOWNRING
     
    10691069      poly mp=minpoly;
    10701070      def OLDRING=basering;
    1071       ring NEWRING = create_ring(0, "("+varstr(basering)+","+parstr(basering)+")", "ds");
     1071      execute("ring NEWRING=0,("+varstr(basering)+","+parstr(basering)+"),ds;");
    10721072      ideal I=imap(OLDRING,mp),imap(OLDRING,f);
    10731073    }
     
    17171717    {
    17181718      string polynomstring=string(f);
    1719       ring drawring = create_ring("(0,"+parstr(basering)+")", "("+varstr(basering)+")", "dp");
     1719      execute("ring drawring=(0,"+parstr(basering)+"),("+varstr(basering)+"),dp;");
    17201720      execute("poly f="+polynomstring+";");
    17211721    }
     
    26522652  }
    26532653  // we want to homogenise the ideal i ....
    2654   ring HOMOGRING = create_ring(ringlist(basering)[1], "(@s,"+string(variablen)+")", "dp", "no_minpoly");
     2654  execute("ring HOMOGRING=("+charstr(basering)+"),(@s,"+string(variablen)+"),dp;");
    26552655  ideal i=homog(std(imap(BASERING,i)),@s);
    26562656  // ... and compute a standard basis with
     
    26672667  }
    26682668  intmat O=weightVectorToOrderMatrix(whomog);
    2669   ring WEIGHTRING = create_ring(ringlist(basering)[1], "("+varstr(basering)+")", "(M("+string(O)+"))", "no_minpoly");
     2669  execute("ring WEIGHTRING=("+charstr(basering)+"),("+varstr(basering)+"),(M("+string(O)+"));");
    26702670  // map i to the new ring and compute a GB of i, then dehomogenise i,
    26712671  // so that we can be sure, that the
     
    26742674  // compute the w-initial ideal with the help of the procedure tInitialForm;
    26752675  setring BASERING;
    2676   ring COMPINIRING = create_ring(ringlist(basering)[1], "("+string(variablen)+")", "dp", "no_minpoly");
     2676  execute("ring COMPINIRING=("+charstr(basering)+"),("+string(variablen)+"),dp;");
    26772677  ideal i=imap(WEIGHTRING,i);
    26782678  ideal ini;
     
    27112711  def BASERING=basering;
    27122712  intmat O=weightVectorToOrderMatrix(w);
    2713   ring INITIALRING = create_ring(ringlist(BASERING)[1], "("+varstr(basering)+")", "M("+string(O)+")", "no_minpoly");
     2713  execute("ring INITIALRING=("+charstr(BASERING)+"),("+varstr(basering)+"),M("+string(O)+");");
    27142714  poly f=imap(BASERING,f);
    27152715  int GRAD=deg(f);
     
    27842784  def BASERING=basering;
    27852785  intmat O=weightVectorToOrderMatrix(w);
    2786   ring INITIALRING = create_ring(ringlist(BASERING)[1], "("+varstr(basering)+")", "M("+string(O)+")", "no_minpoly");
     2786  execute("ring INITIALRING=("+charstr(BASERING)+"),("+varstr(basering)+"),M("+string(O)+");");
    27872787  ideal i=imap(BASERING,i);
    27882788  i=std(i);
     
    28342834  }
    28352835  def BASERING=basering;
    2836   ring PARAMETERRING = create_ring("("+string(char(basering))+")", "("+parstr(basering)+")", "ds");
     2836  execute("ring PARAMETERRING=("+string(char(basering))+"),("+parstr(basering)+"),ds;");
    28372837  poly den=imap(BASERING,den);
    28382838  poly num=imap(BASERING,num);
     
    34933493{
    34943494  def BASERING=basering;
    3495   ring RADRING = create_ring(ringlist(basering)[1], "(@T,"+varstr(basering)+")", "(dp(1),"+ordstr(basering)+")", "no_minpoly");
     3495  execute("ring RADRING=("+charstr(basering)+"),(@T,"+varstr(basering)+"),(dp(1),"+ordstr(basering)+");");
    34963496  ideal I=ideal(imap(BASERING,i))+ideal(1-@T*imap(BASERING,f));
    34973497  if (reduce(1,std(I))==0)
     
    42184218        // return pideal, the initial and the list ergl which tells us
    42194219        // which variables we replaced by which form
    4220         ring BASERINGLESS1 = create_ring(ringlist(BASERING)[1], "("+string(variablen)+",t)", "(dp("+string(ncols(variablen))+"),lp(1))", "no_minpoly");
     4220        execute("ring BASERINGLESS1=("+charstr(BASERING)+"),("+string(variablen)+",t),(dp("+string(ncols(variablen))+"),lp(1));");
    42214221        ideal i=imap(BASERING,pideal);
    42224222        ideal ini=imap(BASERING,pini); //ideal ini2=tInitialIdeal(i,wvecp,1);
     
    42954295  }
    42964296  setring BASERING;
    4297   ring BASERINGLESS2 = create_ring(ringlist(BASERING)[1], "("+string(variablen)+",t)", "(dp("+string(ncols(variablen))+"),lp(1))", "no_minpoly");
     4297  execute("ring BASERINGLESS2=("+charstr(BASERING)+"),("+string(variablen)+",t),(dp("+string(ncols(variablen))+"),lp(1));");
    42984298  // using the 0/1-vector which tells us which variables belong
    42994299  // to the set of smallest entries of wvec
     
    46434643  if ((numberdeletedvariables>0) and (anzahlvariablen>1)) // if only t remains,
    46444644  { // all true variables are gone
    4645     ring NEURING = create_ring(ringlist(basering)[1], "("+string(variablen)+")", "(dp("+string(size(variablen)-1)+"),lp(1))", "no_minpoly");
     4645    execute("ring NEURING=("+charstr(basering)+"),("+string(variablen)+"),(dp("+string(size(variablen)-1)+"),lp(1));");
    46464646    ideal i=imap(BASERING,i);
    46474647    ideal gesamt_m=imap(BASERING,gesamt_m);
     
    46594659    {
    46604660      // pass to a ring which has variables which are suitable for gfan
    4661       ring GFANRING = create_ring(ringlist(basering)[1], "(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)", "dp", "no_minpoly");
     4661      execute("ring GFANRING=("+charstr(basering)+"),(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z),dp;");
    46624662      ideal phiideal=b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z;
    46634663      phiideal[nvars(PREGFANRING)]=a; // map t to a
     
    48294829    else
    48304830    {
    4831       ring PARARing = create_ring(ringlist(basering)[1], "t", "ls", "no_minpoly");
     4831      execute("ring PARARing=("+charstr(basering)+"),t,ls;");
    48324832    }
    48334833    ideal PARA; // will contain the parametrisation
     
    49174917    variablen=variablen+var(j);
    49184918  }
    4919   ring INITIALRING = create_ring(ringlist(basering)[1], "("+string(variablen)+")", "dp", "no_minpoly");
     4919  execute("ring INITIALRING=("+charstr(basering)+"),("+string(variablen)+"),dp;");
    49204920  ideal ini=imap(BASERING,ini);
    49214921  // compute the associated primes of the initialideal
     
    51645164  else
    51655165  {
    5166     ring TINRING = create_ring(ringlist(basering)[1], "("+string(variablen)+")", "dp", "no_minpoly");
     5166    execute("ring TINRING=("+charstr(basering)+"),("+string(variablen)+"),dp;");
    51675167  }
    51685168  ideal tin=imap(BASERING,tin);
     
    55435543    if (size(#)>0) // noAbs was used
    55445544    {
    5545       ring NOQRing = create_ring("("+string(char(LIFTRing))+")", "("+varstr(basering)+","+parstr(LIFTRing)+")", "dp");
     5545      execute("ring NOQRing=("+string(char(LIFTRing))+"),("+varstr(basering)+","+parstr(LIFTRing)+"),dp;");
    55465546      execute("qring TESTRing=std("+#[1]+");");
    55475547      ideal i=imap(BASERING,i);
  • Singular/LIB/tropicalNewton.lib

    rd4cec6a r7161aca  
    125125    number c_denom = denominator(c);
    126126    number c_num = numerator(c);
    127     execute("ring r_Val=0,"+string(uniformizingParameter)+",ds");
     127    ring r_Val = create_ring(0, string(uniformizingParameter), "ds");
    128128    poly c_denom = imap(origin,c_denom);
    129129    poly c_num = imap(origin,c_num);
  • Singular/dyn_modules/freealgebra/freealgebra.cc

    rd4cec6a r7161aca  
    66{
    77  const short t1[]={2,RING_CMD,INT_CMD};
    8   if (iiCheckTypes(args,t1,1))
     8  const short t2[]={3,RING_CMD,INT_CMD,INT_CMD};
     9  if (iiCheckTypes(args, t2, 0) || iiCheckTypes(args, t1, 1))
    910  {
    1011    ring r=(ring)args->Data();
     
    3334      return TRUE;
    3435    }
    35     ring R=freeAlgebra(r,d);
     36    int ncGenCount = 0;
     37    if (iiCheckTypes(args,t2,0))
     38      ncGenCount = (int)(long) args->next->next->Data();
     39    ring R=freeAlgebra(r,d,ncGenCount);
    3640    res->rtyp=RING_CMD;
    3741    res->data=R;
  • Singular/dyn_modules/python/Makefile.am

    rd4cec6a r7161aca  
    5151python_moduledir =  ${datadir}/singular/LIB
    5252python_module_DATA = cart.py  interpreter.py  perf.py  symm.py  util.py
     53EXTRA_DIST=cart.py  interpreter.py  perf.py  symm.py  util.py
  • Singular/dyn_modules/systhreads/Makefile.am

    rd4cec6a r7161aca  
    1818endif
    1919
    20 SOURCES = shared.cc lintree.cc bytebuf.cc thread.cc bytebuf.h lintree.h channel.h syncvar.h threadconf.h
     20SOURCES = shared.cc lintree.cc bytebuf.cc thread.cc bytebuf.h lintree.h channel.h syncvar.h threadconf.h thread.h singthreads.h
    2121systhreads_la_SOURCES   = $(SOURCES)
    2222systhreads_la_CPPFLAGS  = ${MYINCLUDES} ${P_PROCS_CPPFLAGS_COMMON}
  • Singular/iparith.cc

    rd4cec6a r7161aca  
    51535153  ideal v_id=(ideal)v->Data();
    51545154  tHomog hom=testHomog;
     5155#ifdef HAVE_SHIFTBBA
     5156  if (rIsLPRing(currRing))
     5157  {
     5158    if (currRing->LPncGenCount < IDELEMS(v_id))
     5159    {
     5160      Werror("At least %d ncgen variables are needed for this computation.", IDELEMS(v_id));
     5161      return TRUE;
     5162    }
     5163  }
     5164#endif
    51555165  if (ww!=NULL)
    51565166  {
  • Singular/ipshell.cc

    rd4cec6a r7161aca  
    22522252//  R->cf->ch=0;
    22532253  // ----------------------------------------
    2254   // 1:
     2254  // 0, (r1,r2) [, "i" ]
    22552255  if (L->m[1].rtyp!=LIST_CMD)
    22562256  {
     
    22592259  }
    22602260  lists LL=(lists)L->m[1].data;
    2261   if (((LL->nr!=2)
     2261  if ((LL->nr!=1)
    22622262    || (LL->m[0].rtyp!=INT_CMD)
    22632263    || (LL->m[1].rtyp!=INT_CMD))
    2264   && ((LL->nr!=1)
    2265     || (LL->m[0].rtyp!=INT_CMD)))
    2266   {
    2267     WerrorS("invalid coeff. field description list");
     2264  {
     2265    WerrorS("invalid coeff. field description list, expected list(`int`,`int`)");
    22682266    return;
    22692267  }
    22702268  int r1=(int)(long)LL->m[0].data;
    22712269  int r2=(int)(long)LL->m[1].data;
     2270  r1=si_min(r1,32767);
     2271  r2=si_min(r2,32767);
     2272  LongComplexInfo par; memset(&par, 0, sizeof(par));
     2273  par.float_len=r1;
     2274  par.float_len2=r2;
    22722275  if (L->nr==2) // complex
    2273     R->cf = nInitChar(n_long_C, NULL);
    2274   else if ((r1<=SHORT_REAL_LENGTH)
    2275   && (r2<=SHORT_REAL_LENGTH))
    2276     R->cf = nInitChar(n_R, NULL);
    2277   else
    2278   {
    2279     LongComplexInfo* p = (LongComplexInfo *)omAlloc0(sizeof(LongComplexInfo));
    2280     p->float_len=r1;
    2281     p->float_len2=r2;
    2282     R->cf = nInitChar(n_long_R, p);
    2283   }
    2284 
    2285   if ((r1<=SHORT_REAL_LENGTH)   // should go into nInitChar
    2286   && (r2<=SHORT_REAL_LENGTH))
    2287   {
    2288     R->cf->float_len=SHORT_REAL_LENGTH/2;
    2289     R->cf->float_len2=SHORT_REAL_LENGTH;
    2290   }
    2291   else
    2292   {
    2293     R->cf->float_len=si_min(r1,32767);
    2294     R->cf->float_len2=si_min(r2,32767);
    2295   }
    2296   // ----------------------------------------
    2297   // 2: list (par)
    2298   if (L->nr==2)
    2299   {
    2300     //R->cf->extRing->N=1;
     2276  {
    23012277    if (L->m[2].rtyp!=STRING_CMD)
    23022278    {
     
    23042280      return;
    23052281    }
    2306     //(rParameter(R))=(char**)omAlloc0(rPar(R)*sizeof(char_ptr));
    2307     rParameter(R)[0]=omStrDup((char *)L->m[2].data);
    2308   }
    2309   // ----------------------------------------
     2282    par.par_name=(char*)L->m[2].data;
     2283    R->cf = nInitChar(n_long_C, &par);
     2284  }
     2285  else if ((r1<=SHORT_REAL_LENGTH) && (r2<=SHORT_REAL_LENGTH)) /* && L->nr==1*/
     2286    R->cf = nInitChar(n_R, NULL);
     2287  else /* && L->nr==1*/
     2288  {
     2289    R->cf = nInitChar(n_long_R, &par);
     2290  }
    23102291}
    23112292
  • Singular/table.h

    rd4cec6a r7161aca  
    278278,{D(jjSTD),        STD_CMD,         SMATRIX_CMD,    SMATRIX_CMD   , ALLOW_NC |ALLOW_RING}
    279279,{D(jjDUMMY),      STRING_CMD,      STRING_CMD,     STRING_CMD    , ALLOW_NC |ALLOW_RING}
    280 ,{D(jjSYZYGY),     SYZYGY_CMD,      MODUL_CMD,      IDEAL_CMD     , ALLOW_PLURAL |ALLOW_RING}
    281 ,{D(jjSYZYGY),     SYZYGY_CMD,      MODUL_CMD,      MODUL_CMD     , ALLOW_PLURAL |ALLOW_RING}
     280,{D(jjSYZYGY),     SYZYGY_CMD,      MODUL_CMD,      IDEAL_CMD     , ALLOW_NC |ALLOW_RING}
     281,{D(jjSYZYGY),     SYZYGY_CMD,      MODUL_CMD,      MODUL_CMD     , ALLOW_NC |ALLOW_RING}
    282282#ifdef HAVE_PLURAL
    283283,{D(jjENVELOPE),   ENVELOPE_CMD,    RING_CMD,       RING_CMD      , ALLOW_PLURAL |NO_RING}
  • Tst/Letterplace.lst

    rb258e2a r7161aca  
    99Manual/makeLetterplaceRing.tst
    1010Manual/serreRelations.tst
     11Manual/lpGkDim.tst
    1112Manual/lpKDim.tst
    1213Manual/lpMonomialPrinting.tst
     
    1819Manual/lpSickleDim.tst
    1920Manual/lpHilbert.tst
     21Manual/lpLmDivisible.tst
  • Tst/Manual/letterplace_std.res.gz.uu

    rb258e2a r7161aca  
    1 begin 640 letterplace_std.res.gz
    2 M'XL(",KG3EP"`VQE='1E<G!L86-E7W-T9"YR97,`39%=:X,P%(;O_16'L@N-
    3 M6HS6?B`&-GIC&;MH=S>DZ$Q%$%<T97&_?B?1-KT0S7N>]SD$3Y_[[`,`*(/W
    4 M[`T68A#+MBD7">#7N>D:83N)I=[`&+1<"-Y?V^*;GP=1+3O^NQQ$(:S3K`EG
    5 MS:7GO"XGTV,8,>B;KH8>4@@\6WJC]^=X^ZLA5@R:3D#%:^R?RY];5R$;&R!F
    6 M.+S`$5.UXK6M>=D7=N_%CH'6#`8N]*JC23?HKGC10H9E7Y+1WY"1C&Y$))$>
    7 M8$"DCP\936=[[QRP@Q>VLZ<U.P:'Q#I\T3S5#N/$,,S3,%0RS"*BM7Y(U9%(
    8 M5T,:BZ:N6GW'W3OF&VRE;-L@F@(TT%T4S&,-Q'F*T327RK&)J8'7]`E=Y^GX
    9 :.,YWH0'3_UO]R]M@4R=YL?X!*I4F?1H"````
     1begin 644 letterplace_std.res.gz
     2M'XL("(6:P5P"`VQE='1E<G!L86-E7W-T9"YR97,`?9M)CQQ7=H7W^A6)AA=4
     3M)9/]Y@$""=CHC0##"[4!+PR"D%IL@3`A-ZAJN.A?[^][.41&RG:SR:J,C'C#
     4M'<XY][[0G__U3]__R^%PB.\.__S]/QW^\/S;\YO/GW[ZPW<'?OOPZ==/SZ^^
     5M_>X;?Q[>O3M\_OC\_/'+WS[_^)>/'WY[_OG-KQ__Z\UOSS\^?_/GRS#I,LQ?
     6MOWS\^,M/YY%N7^9WA]OOY<WACW\\Q-OG^N;PY=.OOQR^'-X>PNM7+Z^_OO[O
     7M;U__Z6_;T^W=X=.OSX>?/_["V!]^^L^___HS]];MAOZ.+_]Z^(&K3O^/GW_Y
     8M^-.7'U]]>5V_W6X:[PZ_?7Q>4_VP79V,_?/''S\?ON?AT\O3UU-_^OKT]9B?
     9M7IY>7A^X\/1RXN_3U]LS,3#2\\^OOF?P#_\>W[]=]V[/<C&]?YN2#W$M/ZW'
     10M3RGZ\>GEN&Y:M^7SLTYQO?UXO>VTW58<;81\OL`(<>9P^7K=4-^_Y=+Y^Q?'
     11MZ#5N-[=X=VM[__;K[>-U0W%S3TQO#O_QZ?/GPY=MOWAO7=K,%LO=$W4Y-!U>
     12M_>5#^1`_]`__]NWMN_;@W/+Z);]^2:]?XL[%\?_TX*%O+HR;"U_]<'=YY\.7
     13M\O123JD^^4LZO40_MB=_YM-</]/1?^/KZP`IO%F/Y6/,Y\>.,:U?HD]X[5C6
     14MSW0L<?T2<<]YZ#7@-E1DJ'R9:CV0SO<]3HF98[^LD;4F?SJV]VYW949;7[DP
     15M1SJ5\TXNPY[W=S=L.3\0C^7R?5X_X\U8J3X$[_]Z^SF$+ZNZS%BO]Y1PNXD`
     16M_G]V>P[=VS:OVSNE<-U$#Y<Q4]@&K;=GN".4BR-BS1=7M'&9K,U^=@9>*9>)
     17M4[L,?LHU]8N[N;@-WV[#EU,,Y;+B4POILJI69[]N=8[-(OW]VXLM7$\[_[Z>
     18M8)C;IW3JN5X_^-@@>Z^/I>,XW^0":VG;$#WTN`U1T\5&ES$F0!':>8BUQ+,)
     19MUL)C#+%=/[*6,OKV.:VOT^US/(YXGG49M<7;TC3&V%9WS#&GZQ(*^1#JO"TI
     20MGV*/:6SK-V'R''&W\1@PV"PUS5+JN"[>!3/43".%=K>+%FLI+2^C7/>29BJY
     21MQQI&O]L1M@FAII%3'MN^8LRM])##V+:71J^ISG&YMJ*'SS-D]Q.NFR4B9RZU
     22MS%KNKA)!O0V6V6>K=Y9H?;("K%QJV&(`>*^ML8;&WMKF/2Q39PTAY=IRBR7O
     23M+$3^I8EY&/*\E?.R0XJ)*(KE9C2V5]H8/5RNK:440IRU5+DC7Q&NQL"(;=GA
     24M8C&"*T2R(:;M3I!DY-GQQ643:^8Z6IACYK;9*^:<:HYSC+39"V\';FR]I;2%
     25M3,R#_Y41YYV]VFRY,U>;H]P%T)AQAC"P52WWUB+YR+DY8\._<6<L$(D8"?F<
     26MO&L/!&&]>F=M@$?CN/,VL[04Q[;R08"5?-GS\G+K>*;,;<6X%K*=,6_I>6I`
     27MR`C8<4L*N``KP\1Q/G@55#1!KWA9XVW!QRL&^GM.=_8`P>ZL0++O4TD)D*^D
     28MM,)MS&U4MASG-G#JZ3Z*<]L2^93;V&8]$I5AF]:L?IA7+(ZCW.82?6>,F]-/
     29M/?;1YMT$^+GWDK9)B$ARIN>[B7+'Q"6T'<A%D/EE[W(@EU`C&\CK-$:.;<9:
     30M6Z@DPIP]D"*D[(B%9,Q`36XY\Q5I"T;DVMEZ!YQS:9&'"K?WF+N.G#,!?J&G
     31M`D3-.@K)`*!Q>V2241%8D5L8O>78Y^9@EP_Q1+)_Q#1[6T;C]R98Y9);SZ.)
     32M9&#9#(/L9)S0B/Y!6(]&?O)P9@*P35T7@9G.K;!A"8XVB4A`@[LZN2@DECJE
     33MJE!J9<*"OF.8IP=C#8W501/7`W;-+-*QTQGB2(5,`.58@_B5&""Q3]AAEIXG
     34MN.=T3,@"@"H`(X*R';0DU3/VJ0#Q&(VX8W23E^6'EA/_!Y=PP[Q;#P1!G`'P
     35MV"E6`!1W]3'88\/>G9]I1%"X59W+2C)3L^8$6'`#:^BES0*MUL9204?2D;\%
     36MS,^%=8VN=1TKUH&I6FM:-F'D#.#?>VM1$RA4E_')C5HR[I9$V";C8%C,R@\P
     37M5EH`P0AAAAQR2A\U@.O\PW:ADXRQ(+H\(K[!:Z7@8)<6ZL)WJ`ZD;C@]CHX[
     38M'KT$E1.-F+LG8P,[81<,/J8AD(UQ.$1S`XS$WB1(6V%K$UMW8")%PWU@UTF:
     39MM0XY5L)5VFFAL[`4!3@@`<O"Z2'=+0&=HYWG\@CXB^NF&8(WV>FH8",6Q_O,
     40MBI_X-;$9K`W]L"-0O/!L-1%U!+\V/)M8C\MJ5;$!-Z?6.DO#V&7320L,)K@^
     41M_5+@GZ0!ZU4*P"9E5)['_CD!*?H:N!\XC]C(F1!FSY.O8&"BA"S6WVR0_&Q5
     42M_612:\FA9]BW:19B?TC=R0I-102$8W0-#&T3F4F?+&P@R4A`HQ<;X!?N`E.R
     43MWC'N!EDHSQ("U03E<7U*Z!)_"(DDV^,V2"3D\1`!"5DTPA()'1R46!DQ,0FI
     44M9!2!4PF^QL*U,P:K&$4'D7GZ&C1)4Y0B>DD%MDD*8XD63.1$FL*_P,#<@'ZQ
     45M,Z,:[`1$(+0#""6DX",`E#P#N=AMJ@0^:&-DLV?"04$@@I*5$'X3,[0\L:[8
     46M@=>)=9`<__`K2[P/MJ-I6;KN-FF;F8_Q"!C2!(@FW)L0`L6,N0PPD!N4LI,0
     47M;2*ANBSP''#)\DFS5*,X&8TPC(>7^'(78<U<CGU],;4AT$\D:$CF"\0O.U#5
     48M%%P'@$<A.)%C9#>X1'*;'F"*#(&A15RB3$!FV7UYCLAM;1=7)$,?XAAX0)BP
     49M6>*)U;-R2&C9:.`<S15<#R.X(3"B+G@-?!X(59`_*6V5S6"`/H>(,!(H60G0
     50M1SQ)43P!`,'.:.P4,8`T9$`21H'"MX._6%#EHSYCL5"`6%Z!#O:#";#41*CB
     51M=@`N+\1LFP*Z:%"(Q`2%T/$`[F%F8D/,DD.'XV,9890L5<G581)/0TNC,!$A
     52M0(@"=9`XM<K00R-L$F7%*C?#F=*G4@SH(=:7*@8S`3R(12)GFR#Q9)!!OFM$
     53MK,YFY)(B72:V$PB3X'T!;#B71G=H2,DA36$$H%4&Z`(FR!.0&18OH.B:*:KM
     54M)6T`D5QIV(TM:?61F#EI0LR][*(I"-^Q"\O5LY'*HP*W5A=G:B!/9>FBFP@J
     55MJ6GEA'PH$V(:HH(1V340RPB$%?LWA%451755PBX8EX29ZE)2J6DEXM[L@6Z)
     56M<ZXT,1A=SV"=:RB7Q?.$J%A#L0`^=F-:<,-NKI[AB-9X5^1=0G`)<T8%++$T
     57M*V07C$9.F;":7;*"V]FGJ*&"P+RZ-G>1&D2>IB!&A%"[J-W&S7SGXK2[?5P)
     58M`I,_I#ZDO7@WFG,@(-L$*8%R-#J!719[2JOJ4Q:FR[+B40D!WHZXBVYJ_6J8
     59M9=2`'*-\3*"JA@`-V`H,I;)JJYX3^P!*XHD_X$%<0"5U)05=5=[TL(_JZ<#D
     60M#,8DMC*A,M43A!N7*=I0%UB7[['A5'Z1/<:,FY$QUK:C;%BL3Z#].'9PR_=#
     61MDJ+<<H6)VX/@Q542!D0J:J71634$!2@AUJO[!=]A60:>HI[215%2DSO<$_B)
     62MU;)FY3<Y9LFO"I0XAGEMH%"5`M8D(J;+`!HN9R.&5-3VXCE[[^JC0A@NG173
     63M7K)!YZ23#,ENDH\"D^#,7(^:'/(*!L1:Q<B49YS"!4P9.!!P,+P)*V`@[$?X
     64M'7A2J<FZ-PM:/>&37>21JCLF+93ZQ,#>M]1C(%W8>0,!1:"4O?E,/7-XAT-4
     65MZ*0SYJGY<87EVG2Z5.Y'TFDW,9FR(UV*.B[U/3L1SB7]+F_KM3.5K@VUL),,
     66MIYWK*>WJR&$W%?`)(>R)D!3(Z7$J2CO<0L"1@.U^0UB3E"%]VV:1<Q,D+[8U
     67MQK<R\=S!@6@(55@1Y']@J(!T4RFKRLO>02@'Z'ZIY#9W^Q*NSYH.L5/B;H?P
     68M-Y[M%!GZ+.W"U`X>J3:L8@I_XN.N*5\)2`M452<%ZC+`Q!6DG::@T!">JGAC
     69MX0;[5B43Z$-Z6OU1Z5B2P3)AZV*L/AYU#)@'0`U[5UUZ+-(!P('X@7:[VF/`
     70M*@H<N%T%"7\.R9OTQTO@L6*P[)$V.**CH;#6H^I^S$/&HMRFM)Y,:TJ-*3P.
     71M>-$R/%N:!.OHN9)615UVB6-O`#XN2TC8HF*9"R)@EFH:(TG(<Z#0\CJ[(7-?
     72M!0Q9<'M73"W*(.4W\#OW.9@2MK0;H![%S(IKUJBEE`=P3+;,0.=9NJ('B`5K
     73M3<S!DK*J&G6H`,ICKV.M8?F#D[(=2="9C014ET6ZX`*1*_PLNN4NV$$>LT@M
     74MX!"4D(T[0!#^PO-C[#$5C2<ARCOL&&X05_DX5//$,W^3YL;=[#XJS6$/=DJ=
     75M3*A,:^!0UK0I+PVSAU/L/&U,8#0L;$_4VHNB@=#&/%6%!6:`KG9;F:$9<NS)
     76M-:L4+#&E-,.8*=OOD-3F`R2/69@"QR%^W;Z*4,ECX3T7!C,-,I4$M=XR@PF3
     77MJ3C0N)`WL]UZE.<^.RED`2'C*`497GD(`K/`G@4.C6Z?UT*""\D,(G/D/$J!
     78M060B/^ZSYZ3JGM3G2E>7C:.P*CIH29YH!XNOIZUCPE5/(*I!,)-J=:XQ49;I
     79M=BKEN`K_9J\\:R\$,J)O552&"RJ(@"$(<>O4Q,/^$W)`_"`(L2XXT"Q)RXYQ
     80MCGQM/5<M0]0'D-LB'"MO##[TZKI0;"(4R\-ASXC?[%OR$.,C[IN1N],D3&I)
     81M$VV.V8<8]JG($(3):I4`\(5457@!%DMGD?#3F@63&^!(2RQDVN]`=2`SFMZU
     82MH]/-OZY$D[J#+5_W7RQPK95'7(+6=+1,*VJN;&;*^4BX/>O$U4QB3>1L,1-9
     83M)EQAL4IY;$.(/+=D!SN()]/.LH`%HP6ROPT['$/9!6*4':8/ZY]IK82P#+8<
     84MA)!L/X3`L@"F9,R6L/C2>@;!OJI8U,>P[]A+,IR&9QR_Y]Q)GJ@LF_V49M$"
     85M('@Z`/:8R>A_0955)&LFH@PG0DTM61!X[%+LU)2['$DGE)#-$C*[NEI[&>AY
     86M_)Y5KU9X^B"N8JO9=XJB6%!!>7F6M)T6K(8R<TNOEBK]7'_WU2JP4*"2M@T"
     87MN!JZ:LJN23PU(*V3[#9'V66;!SX=]&``#6^P%GLL"+.V0H.PP&CV.P1P:DA,
     88MD>6)8FM^/E8#1PJS8D=`65C2@G%K&78)>]J$`A%;//<);4TFZ<CZ&;EIJ470
     89MC+WXMY-"=@X?E"BC(I],CK9+U1I6RM4U,M$P0;D-@;=*:3M/81UGW646Q*L4
     90MM1PN%D3^0]2**-PN/(##:?41VUD*H#^:#:YY[BR9+3L64CQ;6;95./*\>HRL
     91MA#'4$X`)&=.:-9O\:)K!;-VZ`>"DH*;LLJ&UYQY+)@*DK>82HEQXI<PS/(07
     92MA!%Q9)-V!35,!+DB!5;Y296-.A-;'@2\ZD$*MB'7XU(9=OQM/Q0S5?FF7X/I
     93MVUBY=9\B0^LF0ZK9H\W](7]R0$BNWANJ`9=*]+)KM0\*S`Y(RC86O]O]P]'6
     94M,LF:<+:[$/?`!5JV4B)S$>6V(FQJF2[=0Z4RUZ$!WY?UM1TATK#V^V&2ASCV
     95MC(!BS6B!BPA)(CO`G^6GU4C5`,Y#<25/*ZQV+&>_)Q(+V`O):T:N)"OV$.<Z
     96M5$1\>E06Z[GC1P3./:<=53?$;;1)G"WF;`1FR1HW$M/=DPCD!`A"/LJ,P5)]
     97M7^W@Y>$)!F%FL`7//Z.%%[N$(:.)K@9824S!F^P-CC!VZ815A'1@4>YP%7V=
     98M2`ZC:X%T#PLVH&RN-`NB9NH_%,S8TA!6`MB#MS`%.>QS1J-&38L:I`2)-A'#
     99MRDD(K>ZJE'+JUF%RL(<7LK?M9'&,8AS&M518.E&("^N\>G4^[-L]\,ZJH2TI
     100M04)E.:1),G@VQ?KF.CM)'L?7:4_8O)+^U['HGF3(QVZ%HTH%$J+-3//$+N-<
     101MR[,Q2;9:*`\)@F3!ACD^5HAY-0"MZ:T@SPT5NWVV04$F]!S;UCC5>C\JU>\B
     102MKQR'66^OT1,#6*\D-:1GH"TLQ>LF]'5,\DXKNRP2:E7^"#P"=O35(E7HV21C
     103M+=D/4_6^FD^YQ7WZV+!H]M64'JS6(R(!TJ[I-#FG:AZ,QV!$8M]E7SS9L4EJ
     104M@&J,*Z`!GF0G14PEXFQAJV;K.HYX**"4SW-U1DP9/![M$())=L3SVC"?F@HF
     105MIO!0)/5U@"'"P5R>`F'V2*+*@MU.$(R.S\[UR%U/8>6'HJ18M\65`U-.)S7!
     106M=)Z-UD8L;`JUR2.$NV;S6;0M5K3!UST'P?C8S?K:E5"KJK7Q0]=V5GEU7\='
     107MJPQ<7-8)F!W5J`?-C&K&>MCFN=HZ?JMN-;:'7J8G)AY46#^LW@II*K$&+6`A
     108ME06]8JWKBCR.W#<DLHT?,M>QLZAG7QZ@-G"QNXW"8E_2YC?!%ZS<'R/?ON.0
     109M6O4<&(+-TC)CL7_JV52XO0.QNA7$6;:YM1I"VA6`)[B0':7>!]9Z30"+-OO&
     110MJPG!DC"(Y,W6QI(C^?[]'VR%I"!NL`Q.46MT6\68T$.H%'9ZC80G2CWHZ[8T
     111M@5,%E<?"\/:2^3LU!OYU3[]E%O+`3BY%`F+0MO4>OX^^*^-K"D5)7%=7&4'?
     112M[=81"WE7CQ^[M=.TUP=T*M@]EF$J]FHEW/=A=TJV(8I:E7$]&$I*Y2DNXT"D
     113MSKZMXIF@*;].[:VK;0_F:M_?&CF8S[NPP@]](0%TX'FF;F?E'M58M]K>;?L&
     114MC"?[1$J,ZY"^VAHD*0PJ#<93+<7R&#;Y_=MDZ6@_&HI.ZYV.?-?>0TUE6_2K
     115MB-U>M5HV(!IL+TA[1-C802D)'X0`0-]@F#N.!RM-`_4E1(-8&_M*ERJ=`GJ]
     116MI:"<\HR^A'T8-"6^0$CP]O;0'[?[RG:M>E=K?=^R!%ILI)`2+L%CMOWA()K#
     117M5R;.YZQJWX?^A_6D?9YI+G3Q]J&%`8(4@<1""'JW/9_;PSD\P(H_@F=3MH`,
     118MI_Y8(&7?&/2]C(`-2EGD9^MJLU6^+&AFNS*6@G;@+=,7RN9[^>#!B3TZSQ*#
     119M?09[AKM$]]!%\*VK11I\=6.%9]@E>%N]KFH_76S'2YX!SM5GN<OKXALDI:PF
     120M%^'AV6%:DGG'6D<T</)PRY<P1"R+R+EO<I[6D9HZT$;\ZH#AG=+W[<X,UGM0
     121MC?.(>JM\*'L=D.Y;Q$L\V;2P%S4\(O>4I(Z]3$)R$AH`RRCKZ-?"CRR=H<;]
     122M&7[R#).5@8V>QK3S09Q=\=SW^;GTFKTEK>$A>5WHC._K^)V0\5TC]8:"M?K6
     123M&+!5[G7[N98<RKF\R@3/VV"6<BXX\SU2K;,<9X8]H(5U4K;/5IPH>J));3MV
     124M:\75JMDGK?U(6[(.(JEY,&^IM]-!Z6B1%ZR75EFL\BG3PY2=V(I'SSN'[1.%
     125M.`+)/*^E['M(>-,W7SP78\;I>S1S[@^KCE!=]_P(`0*5K^X^(I'@VY]*+#%?
     126M/9+R;1!%DIH_UOTK(=E>D3RU#NK7^Y&RU_"ECWV[?V3?5%CUJ:]LV,FK=E9'
     127M?1"X^-M^H\=;S5/7ZBM0OGB!-?>.O[Z7W+8WRE-_L_X;!/_[@K__]BI^^]T_
     128+?/,_T)H[0:XP````
    10129`
    11130end
  • Tst/Manual/letterplace_std.stat

    rb258e2a r7161aca  
    1 1 >> tst_memory_0 :: 1548675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:331856
    2 1 >> tst_memory_1 :: 1548675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:2150160
    3 1 >> tst_memory_2 :: 1548675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:2191264
    4 1 >> tst_timer_1 :: 1548675018:4114, 64 bit:4.1.1:x86_64-Linux:nepomuck:6
     11 >> tst_memory_0 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:20013576
     21 >> tst_memory_1 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:21011760
     31 >> tst_memory_2 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:21068800
     41 >> tst_timer_1 :: 1556191877:4120, 64 bit:4.1.2:x86_64-Darwin:Karims-MBP.localdomain:22
  • Tst/Manual/letterplace_std.tst

    rb258e2a r7161aca  
    11LIB "tst.lib"; tst_init();
    22LIB "freegb.lib";
     3
     4// 1
    35ring r = 0,(x,y,z),Dp;
    46int degree_bound = 5;
     
    68setring R;
    79ideal I = -x*y-7*y*y+3*x*x, x*y*x-y*x*y;
    8 ideal J = std(I);
    9 J;
     10std(I);
     11
     12kill r;
     13kill R;
     14
     15// 2 (c_4_1_7_W)
     16ring r = 0,(x4,x3,x2,x1),Dp;
     17def R = freeAlgebra(r, 7);
     18setring(R);
     19ideal I = x4*x4-25*x4*x2-x1*x4-6*x1*x3-9*x1*x2+x1*x1,
     20x4*x3+13*x4*x2+12*x4*x1-9*x3*x4+4*x3*x2+41*x3*x1-7*x1*x4-x1*x2,
     21x3*x3-9*x3*x2+2*x1*x4+x1*x1,
     2217*x4*x2-5*x2*x2-41*x1*x4,
     23x2*x2-13*x2*x1-4*x1*x3+2*x1*x2-x1*x1,
     24x2*x1+4*x1*x2-3*x1*x1;
     25std(I);
     26
    1027tst_status(1);$
  • Tst/Manual/makeLetterplaceRing.res.gz.uu

    rd4cec6a r7161aca  
    11begin 640 makeLetterplaceRing.res.gz
    2 M'XL("$:J*%T"`VUA:V5,971T97)P;&%C95)I;F<N<F5S`*U476O;,!1]]Z\X
    3 MA#[88-+::;HN9H:XH5`(@RYCKT..KSU1QS:2TC;Y];NR,[LM*8&N`EN7JZ-S
    4 M/XZDU<_%W7<`08SE78*1T69<RG04@:W?LI+&]2+'SHAC;,0#+<D84DTIUO1#
    5 M5L6XHJ>Q-L(XJP-5>*#*%5&1=FS]XB2&XEU0^(8+WWWV=_[>\Q?-@+B,D5&.
    6 M.0..A'-#;X!.8V@R+=\\`G_.^3G6->6Y7$NJC)[A_M[ZJNTF)84ZQZ-0&C-<
    7 M6>]AI&6]?K`M8'^M,FKY%LT+Q#!FJ,2&M#6?L<.^^Q\A"U^2W5A`.132M<#M
    8 ML%KN"1.O+^HJAM2WW+MY65"JA#OGBH-^^4N,LEE0D=3;*K-K`)-G5/`.I-;I
    9 MA#WXVH)_"9782"L.U&YXVQ`ITI)KDA7,'^*FL]&FYDQZHJ__9`M?Z>9FC1MX
    10 M/G@*O4&8X&(01H51JV?RGIY^T*5D:I9NTPA%LYXG&'@2+C3Y1(&STP*?DO4T
    11 FQ?&S,?G_/"X_(X_I1\]HP%?</@_VVF\UGX#HS/D+5_+6`4D$````
     2M'XL(".*-25T"`VUA:V5,971T97)P;&%C95)I;F<N<F5S`*U476O;,!1]]Z\X
     3ME#W88-+8:;LM9H9X85`H@S:CKT.VKSU11S:2LK7Y];NR,[LK&7E8!+;$U;GG
     4M?IR+-M_6MU\!1"GN;C-<6&-GC<PO$O#INU32^D'BN1UIBJUXHCNREG37B((>
     5MI*IGBG[-C!76VQRHX@-5I8GJ?&`;+Q<I-'M!XQ/FH?\<OH3[(%QW$^(J14D5
     6M5@PX$LZ/@PEZG<*0[?E6"?CS+B]1M%15LI"DK%GB_M[9U&Z;DT9;X:?0!DO<
     7M..MAY4U;/+D6L+W5)?5\Z^X58EI+*+$EXX[/>,%^^!\ABU^3?7:`9BID:($_
     8M8(W<$Q8A5%&3XNQWRF(>C#7>I)#F"[=RU=24:^&ON`'1>/T^1=.MJ<[8KW1W
     9M`,<JJ68/Y,[HQ2/X@P,_"IVYP!N.VSN\[8\4><,E2@7[@U@#/O29>HN1Z.,?
     10M%>._9/3+SH^"$+S%P:13-)]TTG'2RYO]2]XP&E*R+?=BVPE-RY$GFG@R+C0[
     11MH][E:;U/J7R:XOBH+/X_CZMSY'%]II&-^`%PCX=[%':&!R)YY_T&_C-LQ&<$
     12"````
    1213`
    1314end
  • Tst/Manual/makeLetterplaceRing.stat

    rd4cec6a r7161aca  
    1 1 >> tst_memory_0 :: 1562946118:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:232280
    2 1 >> tst_memory_1 :: 1562946118:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2151640
    3 1 >> tst_memory_2 :: 1562946118:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2192744
    4 1 >> tst_timer_1 :: 1562946118:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:7
     11 >> tst_memory_0 :: 1565101538:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:232264
     21 >> tst_memory_1 :: 1565101538:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2151640
     31 >> tst_memory_2 :: 1565101538:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2192744
     41 >> tst_timer_1 :: 1565101538:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:6
  • Tst/Short/absfact.res.gz.uu

    rd4cec6a r7161aca  
    11begin 640 absfact.res.gz
    2 M'XL("`O%'%T"`V%B<V9A8W0N<F5S`.V<6V_;.!;'W_,IB&*`D2PI(0]OX@3V
    3 MP^QB%P,L]J'IVZ`IY-2>&IM-@EC=2/WT>VC9)%W1M]:=+K9*45OFS1+/__QX
    4 M1)&^>?/7W_Y)"&$3\H_??B6OZF5]>;^8OKJ^N%GGP(1@XKO%PZ).TNL+^TXF
    5 M$U)-E_/JKKY\F+U<+NNJ=N7YA+AC<=FUNBF\W;(,2JI+\KQX^(.\)F.2T#0G
    6 M29.W^';_Y,OK"5E^>'RNQX3ZQ')"GA[O6_)D*Q9ZU-P"R0B,FE&[.E*C!E_;
    7 M6X&O3*P3A4Y'B6P@:R&]Y:.D*=KT5OA&S82\G\W)#;:)I_XW//7'Y\6G6?*4
    8 MDNN+BZLK\G.8_#.Y>YY5]>P]J587D9/%`WGYL+C[@`GWBV5M&WF\_UC/WLU7
    9 M=98DJ3_,;#N;#++.2,EB299X-'M_:?/?/)+J[FZV7!*LT+7U.._5RDG=/LU(
    10 MLIBOBCU4_Y[AN;]42U(MEXL_'F;O;5OUXRKW>59_?'X@_ZGN/\[27VS&^F\Y
    11 MJ^W9)S?I=>^$KR^(LQ6CD["L2V81\S"81-KZG;W]!1LD[_!@S*Z`,9#=9W@[
    12 M3@HT4Y4QDXZ:C'%KL<P:MLJ,2+M2_.U88F92I:.V2Q%OQVC#"ZR_:ICE+.>Y
    13 MN,"2_HNPN/\2;.\6"C6J"M2":S7!Q$RFKDU;!=^[-L%=%'<=0%[[2Q6=:-YL
    14 M:^;7O_R=H&XBLL&<'TTYTG?<&]]Q*B8<?5@XSII%D[7>AD5EE>.%D0!:F?%5
    15 MHM62M:G3B4"=L#TZJ?:)`Q6TTJJ54$0FI><;,Y?D7XO[^T`O@&YT"'D0\RF`
    16 M$'EKBOE<OH]=:+/1"`V))1#D^.4W)-E9.OWA40<BBCJ0,;.H@XJ5H:Y&GP%K
    17 MGP@[X6TDYA0&.@8B*/>#J*>!-YT&=I1/!W)AGYH8N3B-Z("S$\CE8/5U0N#@
    18 M4<-Y#S5<'$8-CVF:JWVHX1VC`VCD6EO*5'B6>=%469M7KG`YB<C+5KB^2&R%
    19 M--]T1E#)^.L2M'==@AV^+@&1ZQ)\^[I$@=<67IH0`T7/YCQ"1BDJ8N.^.#SN
    20 M%QZC%J&;X3D<\INM2)#E<.P('P_]A#N[,@9<80;@GELSDL:`*V/QD(23)!.$
    21 MBL6?H1D9W!!+L;[-?1[3'%E5I_E[CRHI-U0:-[<B2^I;7D"-02;4R$7\@"G2
    22 MIHBB2RV837>C@,2;:/=G"ZM"8(T,*V0*&\ML8Y:P/LLVE@F;9[/\F>A=^,M?
    23 M+5^EIQ"PJS!`4)91"$IS6+P^7&B@EEE3JZ+A-2^8&F&"*!@%,6IJ6=0JPP->
    24 M`Y81V2H94QN1@4TML#!D8&MUE;$JV!9LI1IOAK$TQT)%#7O"D67@!LO@MF=S
    25 M02IPW&=WF8KM0B0JA.S0U$Y,NCH#*FW?0@R5BO^_"4MXCBJYC@4#A:E)B-8M
    26 ML"KMP.J'#57N#/%.BO`&MA%EHFS3]*`$J1=$?[C=2("Z!EF,+1IVL^5$K`Q$
    27 MZ7J4QXBBQ;G-&3P`T*KGT5KO]FCMIOW'^HHQGVX&ISZ3",KX-']Y>'K#6N0D
    28 M(900\^N2#WY]9I.*F%^7\AM85'G7+G7/M<O2N79"\RJ?IGDW<Q.X>&DB@[:A
    29 M@W^?20R&1?W;P%=0_BXB!<-CSFW$X-QGMF?TX9I1YS:G]IYMRIYG&W/0LQFE
    30 MSK.3*F/IU=1GL<&_SZ,'O$F+^3>CA^\+.Z,DT_0483`J(G[.J!S\_,QV51$_
    31 M9U1_*[/ZI]B,FL_]G3%ZV-_MRI!M?Q\U/A.&J<8S*R18GQ)Z/A,G2,1-#'WY
    32 MC`T+EWL$BE%[I@*_8"9PF`AT/:MC9&#EGVUV_]"6`>T1`]AA8O@E+IX8=OV>
    33 M+\`':IQ9/?&U+@SD$2OX0NFL#&8?,H4#S<DB`A5C!^B!'=_(^F6,'6"^B_'M
    34 MNAIWS'H$L:M=#A&$\RA!6E]`#`0YLX9X=)T'X^K+131JOT9&.L807@X,^4;V
    35 MCRV28X)^)_/;U6'N&#;["UBW\F*;%FX]V'R<!+L"^.I(XI'(1'H+OOP&'HR,
    36 MMU@P3W_X_0%L:[D7\QP0ZH2%D6C^(EAE$WX4JX]^[;_$S]92@50`__%<[EO!
    37 M`P54&83K>"`+4D27PE+W'5M[`8R[J'`)KH]/Q6[(S$\#S'R`2]>C4;A(>HJF
    38 M5BK9N4\@U)AT'[VH)$H*CE\6YL4C>NJ2H0+[HI(!N:0C%\?`@[HEK@&]I*.7
    39 M+=)`*[)69=#P%K^T:46AD5_:+G#-F,!,A1VA&OPD,!%?6@\VN0';%M9(,N?[
    40 M(J)(X2$:DL'LQXWOX&."(:9,"$*/.A26W1%E-T0QL=DCE12ZVQNUM7YQ+_N<
    41 M-*U2-2I1=?N@/E^\R&2(-^ZOPN&MMX`UKA3'MVCY`7"V3Z.`4Z<`;B4,A`K3
    42 MG2[P2*9]X!VODX*I*E/0PUI/)RH@EMH0ZQG6L5;^*7_9BK?4Y_%6]@D#+<A>
    43 MA"_B[\]Z$=:>6[//RPX<4O&[,G4,B(03@UW/EX%%#XP^H<Q@%:2_P)$;5P3J
    44 M!H$5V;O"5'B7YD<BM0<Q)Q)F`$S7HU'`:'K4@!10H5"I%4-WT&X.4!3B>#U8
    45 MM*"$)$0$H0.6:,<2MGNN1X=S/;RH8)J!KJ:\`#T5Z17>3T[E^I11OGK*\;1]
    46 M93$\<3Z3P'2<-%H=\0!B;9BUL4*U3=>F6QEQWWS`75#M+C(?H$/0^%LUO1LT
    47 M3Z>!9GA"O>[1*&A*^K\A@S+`2^GPPG>%*F4T5!'92^F+B.XG,NS/8'Q<)E[Y
    48 MI1QBF+,HRBXGC/>PCB*G+(\8U+@T*`"A``0S4$HN)#=24E-247*C*0.A%?YG
    49 M#*-1J03F2$&I4D`1:O[7!P3'NA0H5L*P2@L4:C^MC:390$H+)4JI..#(I:AF
    50 M`O`K5L,CU4H8#8:656:KEH*6"D^.E>:$R`NDJD1A7WFAN?T>C."-890:.P*#
    51 MPC:5+!4#$XGKR\"5G_W]GUV&&;6'84/4=E[I&]C5U;%%^LR(4W:?HR;,BKD5
    52 MQDIKP&XGM?TD5.WQ<9ZP<1[/I+"2MDHN(2(SXW<",!/^%-!ZOBO_M)[QZ@GH
    53 M-4EV%4Y=BYOM/W,LU`H$>-'"*&%%`T%W[MH.-#\E#AQH;;O21&:^@)XT56LG
    54 M*UM1K(;;8[76'^R!LLB&;:`P4.JL)@<:@Q%0\3U,[ED"%%D2P).EUS]=_!>^
    55 '1X0-\DP`````
     2M'XL("+=525T"`V%B<V9A8W0N<F5S`.V<6V_;.!;'W_,IB&*`D2PI(0]OX@3V
     3MP^QB%P,L]J'IVZ`IY-2>&IM-@EC=2/WT>RC9)%W3M]:=+K9*45OFS1+/__QX
     4M1)&^>?/7W_Y)"&$3\H_??B6OZF5]>;^8OKJ^N%GEP(1@XKO%PZ).TNL+^TXF
     5M$U)-E_/JKKY\F+U<+NNJ=N7YA+AC<=FWNBZ\V;(,2JI+\KQX^(.\)F.2T#0G
     6M29.W^';_Y,OK"5E^>'RNQX3ZQ')"GA[O6_)D*Q9ZU-P"R0B,FE';':E1@Z_M
     7MK<!7)E:)0J>C1#:0M9#>\E'2%&UZ*WRC9D+>S^;D!MO$4_\;GOKC\^+3+'E*
     8MR?7%Q=45^3E,_IG</<^J>O:>5-U%Y&3Q0%X^+.X^8,+]8EG;1A[O/]:S=_.N
     9MSI(D]8>9;6>=0589*5DLR1*/9N\O;?Z;1U+=W<V62X(5^K8>YUNU<E*W3S.2
     10M+.9=L8?JWS,\]Y=J2:KE<O''P^R];:M^['*?9_7'YP?RG^K^XRS]Q6:L_I:S
     11MVIY]<I->;YWP]05QMF)T$I9UR2QB'@:32%N_L[>_8(/D'1Z,V14P!K+_#&_'
     12M28%FJC)FTE&3,6XMEEG#5ID1:5^*OQU+S$RJ=-3V*>+M&&UX@?6[AEG.<IZ+
     13M"RSIOPB+^R_!]FZA4*.J0"VX5A-,S&3JVK15\+UO$]Q%<=<!Y+6_5-&+YLVF
     14M9G[]R]\)ZB8B&\SYT90C?<>]\1VG8L+1AX7CK%DT6>MM6%16.5X8":"5&>\2
     15MK9:L39U.!.J$[=%)M4\<J*!.JU9"$9F4GF_,7))_+>[O`[T`NM$AY$',IP!"
     16MY*THYG/Y/G:AS48C-"260)#CE]^09&?I](=''8@HZD#&S*(.*E:&NAI]!JQ]
     17M(NR%MY:84QCH&(B@W`^B+0V\Z36PHWPZD`O[U,3(Q6E$!YR=0"X'JZ\3`@>/
     18M&LZW4,/%8=3PF*:YVH<:WC,Z@$:NM:5,A6>9%TV5M7GE"I>3B+QLA>N+Q%9(
     19M\W5G!)6,ORY!MZY+L,/7)2!R78)O7I<H\-K"2Q-BH.C9G$?(*$5%;-P7A\?]
     20MPF/4(G0]/(=#?K,1";(<CAWAXZ&?<&=7QH`KS`#<<VM&TAAP92P>DG"29()0
     21ML?@S-".#&V(I5K>YSV.:(ZOJ-'_O427EFDKCYE9D27W+"Z@QR(0:N8@?,$7:
     22M%%'TJ06SZ6X4D'@3[?YL854(K)%AA4QA8YEMS!+69]G&,F'S;)8_$[T+?_FK
     23MY:OT%`+V%08(RC(*06D.B]>'"PW4,FMJ532\Y@53(TP0!:,@1DTMBUIE>,!K
     24MP#(BZY(QM1$9V-0""T,&ME9?&:N";<%6JO%F&$MS+%34L"<<609NL`QN>]87
     25MI`+'?7:7J=@N1*)"R`Y-[<2DJS.@TO8MQ%"I^/^;L(3GJ)*K6#!0F)J$:-T`
     26MJ](.K'[84.7.$.^D"&]@&U$FRC9-#TJ0>D%L#[=K"5#7((NQ1<-NMIR(E8$H
     27M?8_R&%&T.+<Y@P<`6FUYM-:[/5J[:?^QOF+,IYO!J<\D@C(^S5\>GMZP%CE)
     28M""7$_+KD@U^?V:0BYM>E_`865=ZU2[WEVF7I7#NA>95/T[R?N0E<O#210=O0
     29MP;_/)`;#HOYMX"LH?Q>1@N$QYS9B<.XSVS/Z<,VH<YM3>\\VY99G&W/0LQFE
     30MSK.3*F/IU=1GL<&_SZ,'O$F+^3>CA^\+>Z,DT_0483`J(G[.J!S\_,QV51$_
     31M9U1_*[/ZI]B,FL_]G3%ZV-_MRI!-?Q\U/A.&J<8S*R18GQ)Z/A,G2,1-#'WY
     32MC`T+EWL$BE%[I@*_8"9PF`AT/:MC9&#EGVUV_]"6`=TB!K##Q/!+7#PQ[/H]
     33M7X`/U#BS>N)K71C((U;PA=+I#&8?,H4#S<DB`A5C!^B!'=_(^F6,'6"^B_'M
     34MNAIWS+8(8E>['"((YU&"M+Z`&`AR9@WQZ#H/QM67BVC4?HV,=(PAO!P8\HWL
     35M'ULDQP3]3N:WJ\/<,:SW%[!^Y<4F+=QZL/DX"78%\.Y(XI'(1'H+OOP:'HR,
     36M-U@P3W_X_0%L8[D7\QP0ZH2%D6C^(EAE$WX4W4>_]E_B9VNI0"J`_W@N]ZW@
     37M@0*J#,)U/)`%*:)/8:G[CHV]`,9=5+@$U\>G8C=DYJ<!9C[`I>_1*%PD/453
     38MG4IV[A,(-2;=1R\JB9*"XY>%>?&(+77)4(';HI(!N:0C%\?`@[HEK@&]I*.7
     39M+=)`*[)69=#P%K^T:46AD5_:+G#-F,!,A1VA&OPD,!%?6@\VN0;;!M9(,N?[
     40M(J)(X2$:DL'LQXWOX&."(:9,"$*/.A26W1%E-T0QL=XCE12ZWQNUL7YQ+_N<
     41M-*U2-2I1]?N@/E^\R&2(-^ZOPN%M:P%K7"F.;]'R`^!LGT8!ITX!G!4&K/<Z
     42M;=`HLLW@@$0Z@6WNC>MDLR41%<!*K6'U#*LP*_^4OVR$6NKS4"O[A#$69"_"
     43M%_&W9EO!U9Z[LL_+#@A2\1LR=0R#A!.#7<J7@:4.C#YU"K/Q^0L<N6=%H&Y0
     44M2I%M*TR%-VA^$%)[Z'(B7`:V]#T:98NF1XU%`16*;L2Q>RB[H]8=H2[$\9)`
     45MNO"RRKC6$5'H@"?:\83MGNK1X50/+RJ89J"K*2]`3T5ZA;>34[DZ:Y2PGB(=
     46M_320%L,#YS.)3,=IH]41SQ]6AED9*U3<=&6ZSHC[I@/N@FIWD>D`'<+&WZGI
     47MW;!Y.@TVPP/J58]&85/2_PT9E`%>2H<7OBM<*:/ABLA>2E]$]+^087\%X^,R
     48M\<HOY1#'G$51=C5AO(=U%#EE><3`QJ5!`0@%()B!4G(AN9&2FI**DAM-&0BM
     49M\#]C&)%*)3!'"DJ5`HI0\S\^(#C6I4"Q$H966J!0M]/:2)H-IK10HI2*`XY<
     50MBFHF`+_"1M]`M1)&@Z$X4MJJI:"EPI-CI3DA^@*I*E'85UYH;K\'HWAC&*6&
     51MV>D'A6TJ62H&)A+;EX$K/_O;/[L*,VH/PX;([;S2-["KJV-K])D1IVP^1TV8
     52MCKD5QDHKP&XFM=M)J-KC`SV!0JYX)H65M%5R"1&9&;\1@)GPEX!6TUWYI]6$
     53MUY:`7I-D5^'4M;C>_3/'0JU`@!<MC!)6-!!TYZ[=0/-3XL"!UK8K363B"^A)
     54M,[5VKK(513?<'JNU[<$>*(OLUP8*`Z7.:G*@,1@!%=_#Y)XE0)$E`3Q9>OW3
     55+Q7\!?:#A?_%,````
    5656`
    5757end
  • Tst/Short/absfact.stat

    rd4cec6a r7161aca  
    1 1 >> tst_memory_0 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:190632
    2 1 >> tst_memory_1 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2486272
    3 1 >> tst_memory_2 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2486272
    4 1 >> tst_timer :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:18
    5 2 >> tst_memory_0 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:195048
    6 2 >> tst_memory_1 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    7 2 >> tst_memory_2 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    8 2 >> tst_timer :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:50
    9 3 >> tst_memory_0 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:195048
    10 3 >> tst_memory_1 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    11 3 >> tst_memory_2 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    12 3 >> tst_timer :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:1
    13 4 >> tst_memory_0 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:196464
    14 4 >> tst_memory_1 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    15 4 >> tst_memory_2 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    16 4 >> tst_timer :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:9
    17 5 >> tst_memory_0 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:195968
    18 5 >> tst_memory_1 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    19 5 >> tst_memory_2 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2740224
    20 5 >> tst_timer_1 :: 1562166539:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:83
     11 >> tst_memory_0 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:192208
     21 >> tst_memory_1 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2506752
     31 >> tst_memory_2 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2506752
     41 >> tst_timer :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:18
     52 >> tst_memory_0 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:197648
     62 >> tst_memory_1 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     72 >> tst_memory_2 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     82 >> tst_timer :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:50
     93 >> tst_memory_0 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:197648
     103 >> tst_memory_1 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     113 >> tst_memory_2 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     123 >> tst_timer :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2
     134 >> tst_memory_0 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:202280
     144 >> tst_memory_1 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     154 >> tst_memory_2 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     164 >> tst_timer :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:9
     175 >> tst_memory_0 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:201784
     185 >> tst_memory_1 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     195 >> tst_memory_2 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:2637824
     205 >> tst_timer_1 :: 1565087159:4122, 64 bit:4.1.2:x86_64-Linux:nepomuck:83
  • Tst/Short/bug_zp.res.gz.uu

    rd4cec6a r7161aca  
    11begin 640 bug_zp.res.gz
    2 M'XL("-%LPED"`V)U9U]Z<"YR97,`E5!-3\)`$+WW5[P0#B6I"[O(AQ#6Q'@A
    3 M,5[P1K19RK9.`FTSNX3*KW>KI.K1T[QY;U[FS6Q>'M?/`*3&T_H!/>^\.-"N
    4 MMXPV5T5I!#*EDGP\6$9MA=;8G8KT4HO2GH7SQG?C8XT.WPH,AS@;+A-0CIKI
    5 M:$$.OJIP,%Q8Y!4C-YFO^&/1V28"3&4!7DW&T_E,CD8R:9)]_9-IJJ\NNEC$
    6 MC;J1(5G@[Y&]&PZ*97*>LC_+XJ-I6D*]J;O!/Z>W\G716M(`5C+:JN]6=HEF
    7 7O\Z>BZ^/M6\YN3A$ZT>?0,1X.V<!````
     2M'XL("$.:.5T"`V)U9U]Z<"YR97,`55#+;L(P$+S[*T:(0Y""P>99$$:J>D&J
     3M>H$;:B.3.F$E2"+;B)2OK].BM)QV=V9'L[/;W<OF#8!0>-T\H^.=YR<Z=)9L
     4M>V>D0@`3*LA'O25K*I3"X9(GMXH7YLJ=U[Y='RFT_9AC,,!5VR(&9:@LG0W(
     5MP9<E3MKF!EEID>G4E_9KT<HF'):*''8U&4WG,S$<BKB./ZN_FZ;JKJ*;053+
     6MO@B7!7R-]*AM8(PEYRE],(O.NFX`^2&?>FPOWA>-)`G-2K"]_!U%ZS'[%V3.
     73?W[0!+VX*)AUV3<,'@((.0$`````
    88`
    99end
  • Tst/Short/bug_zp.stat

    rd4cec6a r7161aca  
    1 1 >> tst_memory_0 :: 1505914065:4103, 64 bit:4.1.0:x86_64-Linux:nepomuck:83592
    2 1 >> tst_memory_1 :: 1505914065:4103, 64 bit:4.1.0:x86_64-Linux:nepomuck:2215936
    3 1 >> tst_memory_2 :: 1505914065:4103, 64 bit:4.1.0:x86_64-Linux:nepomuck:2215936
    4 1 >> tst_timer_1 :: 1505914065:4103, 64 bit:4.1.0:x86_64-Linux:nepomuck:0
     11 >> tst_memory_0 :: 1564056131:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:85680
     21 >> tst_memory_1 :: 1564056131:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2150192
     31 >> tst_memory_2 :: 1564056131:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:2191296
     41 >> tst_timer_1 :: 1564056131:4120, 64 bit:4.1.2:x86_64-Linux:nepomuck:5
  • doc/NEWS.texi

    rd4cec6a r7161aca  
    2121
    2222@heading News for version @value{VERSION}
     23
     24Changes in the kernel/build system:
     25@itemize
     26@item improved gcd and multiplication via FLINT
     27@end itemize
     28
     29@heading News for version 4-1-2
    2330New libraries:
    2431@itemize
  • emacs/Makefile.am

    rd4cec6a r7161aca  
    44
    55EMACS = \
    6     ChangeLog \
    76    COPYING \
    8     NEWS \
    97    singular.el \
    108    singular.xpm  .emacs-general  .emacs-singular \
  • factory/FLINTconvert.cc

    rd4cec6a r7161aca  
    2424#include "singext.h"
    2525#include "cf_algorithm.h"
     26
     27#ifdef HAVE_OMALLOC
     28#define Alloc(L) omAlloc(L)
     29#define Free(A,L) omFreeSize(A,L)
     30#else
     31#define Alloc(L) malloc(L)
     32#define Free(A,L) free(A)
     33#endif
    2634
    2735#ifdef HAVE_FLINT
     
    5361#include <flint/fq_nmod_mat.h>
    5462#endif
     63#if ( __FLINT_RELEASE >= 20503)
     64#include <flint/fmpq_mpoly.h>
     65#endif
    5566#ifdef __cplusplus
    5667}
     
    152163  if (f.isImm ())
    153164  {
    154     fmpz_set_si (fmpq_numref (result), f.num().intval());
    155     fmpz_set_si (fmpq_denref (result), f.den().intval());
    156   }
    157   else
     165    fmpq_set_si (result, f.intval(), 1);
     166  }
     167  else if(f.inQ())
    158168  {
    159169    mpz_t gmp_val;
     
    165175    mpz_clear (gmp_val);
    166176  }
     177  else if(f.inZ())
     178  {
     179    mpz_t gmp_val;
     180    f.mpzval(gmp_val);
     181    fmpz_set_mpz (fmpq_numref (result), gmp_val);
     182    mpz_clear (gmp_val);
     183    fmpz_one(fmpq_denref(result));
     184  }
     185  else
     186  {
     187    printf("wrong type\n");
     188  }
    167189}
    168190
     
    181203
    182204  CanonicalForm result;
    183   if (mpz_is_imm (nnum) && mpz_is_imm (nden))
    184   {
    185     num= CanonicalForm (mpz_get_si(nnum));
    186     den= CanonicalForm (mpz_get_si(nden));
    187     mpz_clear (nnum);
    188     mpz_clear (nden);
    189     result= num/den;
    190     if (!isRat)
    191       Off (SW_RATIONAL);
    192     return result;
     205  if (mpz_is_imm (nden))
     206  {
     207    if (mpz_is_imm(nnum))
     208    {
     209      num= CanonicalForm (mpz_get_si(nnum));
     210      den= CanonicalForm (mpz_get_si(nden));
     211      mpz_clear (nnum);
     212      mpz_clear (nden);
     213      result= num/den;
     214    }
     215    else if (mpz_cmp_si(nden,1)==0)
     216    {
     217      result= CanonicalForm( CFFactory::basic(nnum));
     218      mpz_clear (nden);
     219    }
     220    else
     221      result= CanonicalForm( CFFactory::rational( nnum, nden, false));
    193222  }
    194223  else
    195224  {
    196     result= make_cf (nnum, nden, false);
    197     if (!isRat)
    198       Off (SW_RATIONAL);
    199     return result;
    200   }
     225    result= CanonicalForm( CFFactory::rational( nnum, nden, false));
     226  }
     227  if (!isRat)
     228    Off (SW_RATIONAL);
     229  return result;
    201230}
    202231
     
    528557}
    529558#endif
    530 
    531 #endif
    532 
    533 
     559#if __FLINT_RELEASE >= 20503
     560static void convFlint_RecPP ( const CanonicalForm & f, ulong * exp, nmod_mpoly_t result, nmod_mpoly_ctx_t ctx, int N )
     561{
     562  // assume f!=0
     563  if ( ! f.inCoeffDomain() )
     564  {
     565    int l = f.level();
     566    for ( CFIterator i = f; i.hasTerms(); i++ )
     567    {
     568      exp[N-l] = i.exp();
     569      convFlint_RecPP( i.coeff(), exp, result, ctx, N );
     570    }
     571    exp[N-l] = 0;
     572  }
     573  else
     574  {
     575    int c=f.intval(); // with Off(SW_SYMMETRIC_FF): 0<=c<p
     576    nmod_mpoly_push_term_ui_ui(result,c,exp,ctx);
     577  }
     578}
     579
     580static void convFlint_RecPP ( const CanonicalForm & f, ulong * exp, fmpq_mpoly_t result, fmpq_mpoly_ctx_t ctx, int N )
     581{
     582  // assume f!=0
     583  if ( ! f.inBaseDomain() )
     584  {
     585    int l = f.level();
     586    for ( CFIterator i = f; i.hasTerms(); i++ )
     587    {
     588      exp[N-l] = i.exp();
     589      convFlint_RecPP( i.coeff(), exp, result, ctx, N );
     590    }
     591    exp[N-l] = 0;
     592  }
     593  else
     594  {
     595    fmpq_t c;
     596    fmpq_init(c);
     597    convertCF2Fmpq(c,f);
     598    fmpq_mpoly_push_term_fmpq_ui(result,c,exp,ctx);
     599    fmpq_clear(c);
     600  }
     601}
     602
     603void convFactoryPFlintMP ( const CanonicalForm & f, nmod_mpoly_t res, nmod_mpoly_ctx_t ctx, int N )
     604{
     605  if (f.isZero()) return;
     606  ulong * exp = (ulong*)Alloc(N*sizeof(ulong));
     607  memset(exp,0,N*sizeof(ulong));
     608  bool save_sym_ff= isOn (SW_SYMMETRIC_FF);
     609  if (save_sym_ff) Off (SW_SYMMETRIC_FF);
     610  convFlint_RecPP( f, exp, res, ctx, N );
     611  if (save_sym_ff) On(SW_SYMMETRIC_FF);
     612  Free(exp,N*sizeof(ulong));
     613}
     614
     615void convFactoryPFlintMP ( const CanonicalForm & f, fmpq_mpoly_t res, fmpq_mpoly_ctx_t ctx, int N )
     616{
     617  if (f.isZero()) return;
     618  ulong * exp = (ulong*)Alloc(N*sizeof(ulong));
     619  memset(exp,0,N*sizeof(ulong));
     620  convFlint_RecPP( f, exp, res, ctx, N );
     621  fmpq_mpoly_reduce(res,ctx);
     622  Free(exp,N*sizeof(ulong));
     623}
     624
     625CanonicalForm convFlintMPFactoryP(nmod_mpoly_t f, nmod_mpoly_ctx_t ctx, int N)
     626{
     627  CanonicalForm result;
     628  int d=nmod_mpoly_length(f,ctx)-1;
     629  ulong* exp=(ulong*)Alloc(N*sizeof(ulong));
     630  for(int i=d; i>=0; i--)
     631  {
     632    ulong c=nmod_mpoly_get_term_coeff_ui(f,i,ctx);
     633    nmod_mpoly_get_term_exp_ui(exp,f,i,ctx);
     634    CanonicalForm term=(int)c;
     635    for ( int i = 0; i <N; i++ )
     636    {
     637      if (exp[i]!=0) term*=CanonicalForm( Variable( N-i ), exp[i] );
     638    }
     639    result+=term;
     640  }
     641  Free(exp,N*sizeof(ulong));
     642  return result;
     643}
     644
     645CanonicalForm convFlintMPFactoryP(fmpq_mpoly_t f, fmpq_mpoly_ctx_t ctx, int N)
     646{
     647  CanonicalForm result;
     648  int d=fmpq_mpoly_length(f,ctx)-1;
     649  ulong* exp=(ulong*)Alloc(N*sizeof(ulong));
     650  fmpq_t c;
     651  fmpq_init(c);
     652  for(int i=d; i>=0; i--)
     653  {
     654    fmpq_mpoly_get_term_coeff_fmpq(c,f,i,ctx);
     655    fmpq_mpoly_get_term_exp_ui(exp,f,i,ctx);
     656    CanonicalForm term=convertFmpq_t2CF(c);
     657    for ( int i = 0; i <N; i++ )
     658    {
     659      if (exp[i]!=0) term*=CanonicalForm( Variable( N-i ), exp[i] );
     660    }
     661    result+=term;
     662  }
     663  fmpq_clear(c);
     664  Free(exp,N*sizeof(ulong));
     665  return result;
     666}
     667
     668// stolen from:
     669// https://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
     670static inline int SI_LOG2(int v)
     671{
     672  const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
     673  const unsigned int S[] = {1, 2, 4, 8, 16};
     674
     675  unsigned int r = 0; // result of log2(v) will go here
     676  if (v & b[4]) { v >>= S[4]; r |= S[4]; }
     677  if (v & b[3]) { v >>= S[3]; r |= S[3]; }
     678  if (v & b[2]) { v >>= S[2]; r |= S[2]; }
     679  if (v & b[1]) { v >>= S[1]; r |= S[1]; }
     680  if (v & b[0]) { v >>= S[0]; r |= S[0]; }
     681  return (int)r;
     682}
     683
     684CanonicalForm mulFlintMP_Zp(const CanonicalForm& F,int lF, const CanonicalForm& G, int lG,int m)
     685{
     686  int bits=SI_LOG2(m)+1;
     687  int N=F.level();
     688  nmod_mpoly_ctx_t ctx;
     689  nmod_mpoly_ctx_init(ctx,N,ORD_LEX,getCharacteristic());
     690  nmod_mpoly_t f,g,res;
     691  nmod_mpoly_init3(f,lF,bits,ctx);
     692  nmod_mpoly_init3(g,lG,bits,ctx);
     693  convFactoryPFlintMP(F,f,ctx,N);
     694  convFactoryPFlintMP(G,g,ctx,N);
     695  nmod_mpoly_init(res,ctx);
     696  nmod_mpoly_mul(res,f,g,ctx);
     697  nmod_mpoly_clear(g,ctx);
     698  nmod_mpoly_clear(f,ctx);
     699  CanonicalForm RES=convFlintMPFactoryP(res,ctx,N);
     700  nmod_mpoly_clear(res,ctx);
     701  nmod_mpoly_ctx_clear(ctx);
     702  return RES;
     703}
     704
     705CanonicalForm mulFlintMP_QQ(const CanonicalForm& F,int lF, const CanonicalForm& G, int lG, int m)
     706{
     707  int bits=SI_LOG2(m)+1;
     708  int N=F.level();
     709  fmpq_mpoly_ctx_t ctx;
     710  fmpq_mpoly_ctx_init(ctx,N,ORD_LEX);
     711  fmpq_mpoly_t f,g,res;
     712  fmpq_mpoly_init3(f,lF,bits,ctx);
     713  fmpq_mpoly_init3(g,lG,bits,ctx);
     714  convFactoryPFlintMP(F,f,ctx,N);
     715  convFactoryPFlintMP(G,g,ctx,N);
     716  fmpq_mpoly_init(res,ctx);
     717  fmpq_mpoly_mul(res,f,g,ctx);
     718  fmpq_mpoly_clear(g,ctx);
     719  fmpq_mpoly_clear(f,ctx);
     720  CanonicalForm RES=convFlintMPFactoryP(res,ctx,N);
     721  fmpq_mpoly_clear(res,ctx);
     722  fmpq_mpoly_ctx_clear(ctx);
     723  return RES;
     724}
     725
     726CanonicalForm gcdFlintMP_Zp(const CanonicalForm& F, const CanonicalForm& G)
     727{
     728  int N=F.level();
     729  int lf,lg,m=1<<MPOLY_MIN_BITS;
     730  lf=size_maxexp(F,m);
     731  lg=size_maxexp(G,m);
     732  int bits=SI_LOG2(m)+1;
     733  nmod_mpoly_ctx_t ctx;
     734  nmod_mpoly_ctx_init(ctx,N,ORD_LEX,getCharacteristic());
     735  nmod_mpoly_t f,g,res;
     736  nmod_mpoly_init3(f,lf,bits,ctx);
     737  nmod_mpoly_init3(g,lg,bits,ctx);
     738  convFactoryPFlintMP(F,f,ctx,N);
     739  convFactoryPFlintMP(G,g,ctx,N);
     740  nmod_mpoly_init(res,ctx);
     741  int ok=nmod_mpoly_gcd(res,f,g,ctx);
     742  nmod_mpoly_clear(g,ctx);
     743  nmod_mpoly_clear(f,ctx);
     744  CanonicalForm RES=1;
     745  if (ok)
     746  {
     747    RES=convFlintMPFactoryP(res,ctx,N);
     748  }
     749  nmod_mpoly_clear(res,ctx);
     750  nmod_mpoly_ctx_clear(ctx);
     751  return RES;
     752}
     753
     754static CanonicalForm b_content ( const CanonicalForm & f )
     755{
     756    if ( f.inCoeffDomain() )
     757        return f;
     758    else
     759    {
     760        CanonicalForm result = 0;
     761        CFIterator i;
     762        for ( i = f; i.hasTerms() && (!result.isOne()); i++ )
     763            result=bgcd( b_content(i.coeff()) , result );
     764        return result;
     765    }
     766}
     767
     768
     769CanonicalForm gcdFlintMP_QQ(const CanonicalForm& F, const CanonicalForm& G)
     770{
     771  int N=F.level();
     772  fmpq_mpoly_ctx_t ctx;
     773  fmpq_mpoly_ctx_init(ctx,N,ORD_LEX);
     774  fmpq_mpoly_t f,g,res;
     775  fmpq_mpoly_init(f,ctx);
     776  fmpq_mpoly_init(g,ctx);
     777  convFactoryPFlintMP(F,f,ctx,N);
     778  convFactoryPFlintMP(G,g,ctx,N);
     779  fmpq_mpoly_init(res,ctx);
     780  int ok=fmpq_mpoly_gcd(res,f,g,ctx);
     781  fmpq_mpoly_clear(g,ctx);
     782  fmpq_mpoly_clear(f,ctx);
     783  CanonicalForm RES=1;
     784  if (ok)
     785  {
     786    // Flint normalizes the gcd to be monic.
     787    // Singular wants a gcd defined over ZZ that is primitive and has a positive leading coeff.
     788    if (!fmpq_mpoly_is_zero(res, ctx))
     789    {
     790      fmpq_t content;
     791      fmpq_init(content);
     792      fmpq_mpoly_content(content, res, ctx);
     793      fmpq_mpoly_scalar_div_fmpq(res, res, content, ctx);
     794      fmpq_clear(content);
     795    }
     796    RES=convFlintMPFactoryP(res,ctx,N);
     797    // gcd(2x,4x) should be 2x, so RES should also have the gcd(lc(F),lc(G))
     798    RES*=bgcd(b_content(F),b_content(G));
     799  }
     800  fmpq_mpoly_clear(res,ctx);
     801  fmpq_mpoly_ctx_clear(ctx);
     802  return RES;
     803}
     804
     805#endif
     806
     807#endif
     808
     809
  • factory/FLINTconvert.h

    rd4cec6a r7161aca  
    250250
    251251
    252 #endif
    253 #endif
     252#if __FLINT_RELEASE >= 20503
     253CanonicalForm mulFlintMP_Zp(const CanonicalForm& F,int lF, const CanonicalForm& Gi, int lG, int m);
     254CanonicalForm mulFlintMP_QQ(const CanonicalForm& F,int lF, const CanonicalForm& Gi, int lG, int m);
     255CanonicalForm gcdFlintMP_Zp(const CanonicalForm& F, const CanonicalForm& G);
     256CanonicalForm gcdFlintMP_QQ(const CanonicalForm& F, const CanonicalForm& G);
     257#endif
     258#endif
     259#endif
  • factory/Makefile.am

    rd4cec6a r7161aca  
    173173libfactory_includedir = ${includedir}/factory
    174174
    175 nodist_libfactory_include_HEADERS = factory.h factoryconf.h globaldefs.h
     175nodist_libfactory_include_HEADERS = factory.h factoryconf.h
     176libfactory_include_HEADERS = globaldefs.h
    176177
    177178
  • factory/NTLconvert.cc

    rd4cec6a r7161aca  
    3333#include "NTLconvert.h"
    3434
     35#ifdef HAVE_OMALLOC
     36#define Alloc(L) omAlloc(L)
     37#define Free(A,L) omFreeSize(A,L)
     38#else
    3539#define Alloc(L) malloc(L)
    3640#define Free(A,L) free(A)
     41#endif
    3742
    3843void out_cf(const char *s1,const CanonicalForm &f,const char *s2);
  • factory/canonicalform.cc

    rd4cec6a r7161aca  
    1717#include "gfops.h"
    1818#include "facMul.h"
     19#include "facAlgFuncUtil.h"
    1920#include "FLINTconvert.h"
    2021
     
    707708    else  if ( value->level() == cf.value->level() ) {
    708709#if (HAVE_NTL && HAVE_FLINT && __FLINT_RELEASE >= 20400)
     710#if (__FLINT_RELEASE >= 20503)
     711        int l_this,l_cf,m=1;
     712        if ((getCharacteristic()>0)
     713        && (CFFactory::gettype() != GaloisFieldDomain)
     714        &&(!hasAlgVar(*this))
     715        &&(!hasAlgVar(cf))
     716        &&((l_cf=size_maxexp(cf,m))>10)
     717        &&((l_this=size_maxexp(*this,m))>10)
     718        )
     719        {
     720          *this=mulFlintMP_Zp(*this,l_this,cf,l_cf,m);
     721        }
     722        else
     723        /*-----------------------------------------------------*/
     724        if ((getCharacteristic()==0)
     725        &&(!hasAlgVar(*this))
     726        &&(!hasAlgVar(cf))
     727        &&((l_cf=size_maxexp(cf,m))>10)
     728        &&((l_this=size_maxexp(*this,m))>10)
     729        )
     730        {
     731          *this=mulFlintMP_QQ(*this,l_this,cf,l_cf,m);
     732        }
     733        else
     734#endif
     735
    709736        if (value->levelcoeff() == cf.value->levelcoeff() && cf.isUnivariate() && (*this).isUnivariate())
    710737        {
  • factory/cf_char.cc

    rd4cec6a r7161aca  
    3333        theDegree = 1;
    3434        CFFactory::settype( FiniteFieldDomain );
     35        ff_big = c > cf_getSmallPrime( cf_getNumSmallPrimes()-1 );
     36        if (c!=theCharacteristic)
     37        {
     38          if (c > 536870909) factoryError("characteristic is too large(max is 2^29)");
     39          ff_setprime( c );
     40        }
    3541        theCharacteristic = c;
    36         ff_big = c > cf_getSmallPrime( cf_getNumSmallPrimes()-1 );
    37         if (c > 536870909) factoryError("characteristic is too large(max is 2^29)");
    38         ff_setprime( c );
    3942    }
    4043}
  • factory/cf_gcd.cc

    rd4cec6a r7161aca  
    2626#include "cfSubResGcd.h"
    2727#include "cfModGcd.h"
     28#include "FLINTconvert.h"
    2829#include "facAlgFuncUtil.h"
    2930
     
    100101  if ( getCharacteristic() != 0 )
    101102  {
     103    #if defined(HAVE_FLINT) && ( __FLINT_RELEASE >= 20503)
     104    if ( isOn( SW_USE_FL_GCD_P)
     105    && (CFFactory::gettype() != GaloisFieldDomain)
     106    && (getCharacteristic()>10)
     107    &&(!hasAlgVar(fc)) && (!hasAlgVar(gc)))
     108    {
     109      return gcdFlintMP_Zp(fc,gc);
     110    }
     111    #endif
    102112    #ifdef HAVE_NTL
    103113    if ((!fc_and_gc_Univariate) && (isOn( SW_USE_EZGCD_P )))
     
    119129    fc = subResGCD_p( fc, gc );
    120130  }
    121   else if (!fc_and_gc_Univariate)
     131  else if (!fc_and_gc_Univariate) /* && char==0*/
    122132  {
     133    #if defined(HAVE_FLINT) && ( __FLINT_RELEASE >= 20503)
     134    if (( isOn( SW_USE_FL_GCD_0) )
     135    &&(!hasAlgVar(fc)) && (!hasAlgVar(gc)))
     136    {
     137      return gcdFlintMP_QQ(fc,gc);
     138    }
     139    else
     140    #endif
    123141    if ( isOn( SW_USE_EZGCD ) )
    124142      fc= ezgcd (fc, gc);
    125 #ifdef HAVE_NTL
     143    #ifdef HAVE_NTL
    126144    else if (isOn(SW_USE_CHINREM_GCD))
    127145      fc = modGCDZ( fc, gc);
    128 #endif
     146    #endif
    129147    else
    130148    {
     
    311329                CanonicalForm cdF = bCommonDen( f );
    312330                CanonicalForm cdG = bCommonDen( g );
     331                CanonicalForm F = f * cdF, G = g * cdG;
    313332                Off( SW_RATIONAL );
    314                 CanonicalForm l = lcm( cdF, cdG );
    315                 On( SW_RATIONAL );
    316                 CanonicalForm F = f * l, G = g * l;
    317                 Off( SW_RATIONAL );
    318                 l = gcd_poly( F, G );
     333                CanonicalForm l = gcd_poly( F, G );
    319334                On( SW_RATIONAL );
    320335                return abs( l );
  • factory/cf_inline.cc

    rd4cec6a r7161aca  
    143143CF_INLINE
    144144CanonicalForm::CanonicalForm ( const int i )
    145     : value( CFFactory::basic( (const long)i ) )
     145    : value( CFFactory::basic( (long)i ) )
    146146{
    147147}
  • factory/cf_switches.cc

    rd4cec6a r7161aca  
    3232#ifdef HAVE_NTL
    3333  On(SW_USE_CHINREM_GCD);
    34   //Off(SW_USE_NTL_SORT);
     34  On(SW_USE_NTL_SORT);
     35#endif
     36#ifdef HAVE_FLINT
    3537  On(SW_USE_FL_GCD_P);
    36   //On(SW_USE_FL_GCD_0);
     38  On(SW_USE_FL_GCD_0);
    3739#endif
    3840  On(SW_USE_EZGCD);
  • factory/facFqBivar.cc

    rd4cec6a r7161aca  
    68836883#ifdef HAVE_FLINT
    68846884  nmod_mat_t FLINTN;
    6885 #else
     6885#endif
     6886
    68866887  if (fac_NTL_char != getCharacteristic())
    68876888  {
     
    68906891  }
    68916892  mat_zz_p NTLN;
    6892 #endif
    68936893
    68946894  if (alpha.level() != 1)
     
    68986898  }
    68996899  mat_zz_pE NTLNe;
     6900
    69006901  if (alpha.level() == 1)
    69016902  {
  • factory/imm.h

    rd4cec6a r7161aca  
    165165{
    166166    if ( is_imm( op ) == FFMARK )
     167    {
    167168        if ( cf_glob_switches.isOn( SW_SYMMETRIC_FF ) )
    168169            return ff_symmetric( imm2int( op ) );
    169170        else
    170171            return imm2int( op );
    171     else  if ( is_imm( op ) == GFMARK ) {
     172    }
     173    else  if ( is_imm( op ) == GFMARK )
     174    {
    172175        ASSERT( gf_isff( imm2int( op ) ), "invalid conversion" );
    173176        if ( cf_glob_switches.isOn( SW_SYMMETRIC_FF ) )
     
    176179            return gf_gf2ff( imm2int( op ) );
    177180    }
    178     else
     181    /*else*/
    179182        return imm2int( op );
    180183}
  • kernel/GBEngine/kstd1.cc

    rd4cec6a r7161aca  
    3838#include "kernel/GBEngine/kInline.h"
    3939
     40#ifdef HAVE_SHIFTBBA
     41#include "polys/shiftop.h"
     42#endif
    4043
    4144/* the list of all options which give a warning by test */
     
    23432346
    23442347#ifdef HAVE_SHIFTBBA
    2345   if(rIsLPRing(currRing)) return freegb(F, Q);
     2348  if(rIsLPRing(currRing)) return kStdShift(F, Q, h, w, hilb, syzComp, newIdeal, vw, FALSE);
    23462349#endif
    23472350
     
    28202823                int newIdeal, intvec *vw, BOOLEAN rightGB)
    28212824{
     2825  assume(rIsLPRing(currRing));
     2826  assume(idIsInV(F));
    28222827  ideal r;
    28232828  BOOLEAN b=currRing->pLexOrder,toReset=FALSE;
     
    29132918  delete(strat);
    29142919  if ((delete_w)&&(w!=NULL)&&(*w!=NULL)) delete *w;
     2920  assume(idIsInV(r));
    29152921  return r;
    29162922}
  • kernel/GBEngine/kstd1.h

    rd4cec6a r7161aca  
    4242    int syzComp=0, int newIdeal=0, intvec *vw=NULL, BOOLEAN rightGB=FALSE);
    4343
    44 ideal freegb(ideal F, ideal Q);
    4544ideal rightgb(ideal F, ideal Q);
    4645
  • kernel/GBEngine/kstd2.cc

    rd4cec6a r7161aca  
    45204520}
    45214521
    4522 
    4523 ideal freegb(ideal F, ideal Q)
    4524 {
    4525   assume(rIsLPRing(currRing));
    4526   assume(idIsInV(F));
    4527   ideal RS = kStdShift(F, Q, testHomog, NULL);
    4528   idSkipZeroes(RS); // is this even necessary?
    4529   assume(idIsInV(RS));
    4530   return(RS);
    4531 }
    4532 
     4522#ifdef HAVE_SHIFTBBA
    45334523ideal rightgb(ideal F, ideal Q)
    45344524{
     
    45404530  return(RS);
    45414531}
     4532#endif
    45424533
    45434534/*2
  • kernel/ideals.cc

    rd4cec6a r7161aca  
    617617    p = h2->m[j];
    618618    q = pOne();
     619#ifdef HAVE_SHIFTBBA
     620    // non multiplicative variable
     621    if (rIsLPRing(currRing))
     622    {
     623      pSetExp(q, currRing->isLPring - currRing->LPncGenCount + j + 1, 1);
     624      p_Setm(q, currRing);
     625    }
     626#endif
    619627    pSetComp(q,syzcomp+1+j);
    620628    pSetmComp(q);
    621629    if (p!=NULL)
    622630    {
    623       while (pNext(p)) pIter(p);
    624       p->next = q;
     631#ifdef HAVE_SHIFTBBA
     632      if (rIsLPRing(currRing))
     633      {
     634        h2->m[j] = pAdd(p, q);
     635      }
     636      else
     637#endif
     638      {
     639        while (pNext(p)) pIter(p);
     640        p->next = q;
     641      }
    625642    }
    626643    else
     
    630647  idTest(h2);
    631648
     649#ifdef HAVE_SHIFTBBA
     650  if (rIsLPRing(currRing)) alg = GbStd;
     651#endif
    632652  ideal h3=NULL;
    633653  if (alg==GbDefault) alg=GbStd;
  • kernel/mod2.h

    rd4cec6a r7161aca  
    7777#endif
    7878
    79 #define SINGULAR_PATCHLEVEL 0
     79#define SINGULAR_PATCHLEVEL 2
    8080#define SINGULAR_VERSION ((SINGULAR_MAJOR_VERSION*1000 + SINGULAR_MINOR_VERSION*100 + SINGULAR_SUB_VERSION*10)+SINGULAR_PATCHLEVEL)
    8181
  • kernel/preimage.cc

    rd4cec6a r7161aca  
    8888  }
    8989
    90   assume(n_SetMap(theImageRing->cf, dst_r->cf) == ndCopyMap);
    91 
    9290  if (theImageRing->cf != dst_r->cf)
    9391  {
  • libpolys/coeffs/Makefile.am

    rd4cec6a r7161aca  
    4444test_LDADD   = libcoeffs.la $(libcoeffs_la_LIBADD)
    4545
    46 EXTRA_DIST = rintegers2.cc rinteger3.cc
     46EXTRA_DIST = rintegers2.cc rintegers3.cc
  • libpolys/coeffs/rintegers2.cc

    rd4cec6a r7161aca  
    515515}
    516516
     517static void nrzMPZ(mpz_t res, number &a, const coeffs)
     518{
     519  mpz_init_set(res, (mpz_ptr) a);
     520}
     521
    517522static number nrzFarey(number r, number N, const coeffs R)
    518523{
     
    621626  r->cfInit = nrzInit;
    622627  r->cfInitMPZ = nrzInitMPZ;
     628  r->cfMPZ = nrzMPZ;
    623629  r->cfSize  = nrzSize;
    624630  r->cfInt  = nrzInt;
  • libpolys/polys/clapconv.cc

    rd4cec6a r7161aca  
    8787  p1=p;
    8888  l=l/2;
    89   while(l>0) { p=pNext(p); l--; }
     89  while(l>1) { p=pNext(p); l--; }
    9090  p2=pNext(p);
    9191  pNext(p)=NULL;
     
    101101
    102102#define MIN_CONV_LEN 7
    103 CanonicalForm convSingPFactoryP( poly p, const ring r )
     103static CanonicalForm convSingPFactoryP_intern( poly p, int l, BOOLEAN & setChar,const ring r )
    104104{
    105105  CanonicalForm result = 0;
    106106  int e, n = rVar(r);
    107   BOOLEAN setChar=TRUE;
    108 
    109   int l;
    110   if ((l=pLength(p))>MIN_CONV_LEN)
     107  assume(l==pLength(p));
     108
     109  if (l>MIN_CONV_LEN)
    111110  {
    112111    poly p1,p2;
    113112    convPhalf(p,l,p1,p2);
    114     CanonicalForm P=convSingPFactoryP(p1,r);
    115     P+=convSingPFactoryP(p2,r);
     113    CanonicalForm P=convSingPFactoryP_intern(p1,l/2,setChar,r);
     114    P+=convSingPFactoryP_intern(p2,l-l/2,setChar,r);
    116115    convPunhalf(p1,p2);
    117116    return P;
    118117  }
     118  BOOLEAN setChar_loc=setChar;
     119  setChar=FALSE;
    119120  while ( p!=NULL )
    120121  {
    121     CanonicalForm term=r->cf->convSingNFactoryN(pGetCoeff( p ),setChar, r->cf);
     122    CanonicalForm term=r->cf->convSingNFactoryN(pGetCoeff( p ),setChar_loc, r->cf);
    122123    if (errorreported) break;
    123     setChar=FALSE;
     124    setChar_loc=FALSE;
    124125    for ( int i = 1; i <=n; i++ )
    125126    {
     
    131132 }
    132133 return result;
     134}
     135
     136CanonicalForm convSingPFactoryP( poly p, const ring r )
     137{
     138  BOOLEAN setChar=TRUE;
     139  return convSingPFactoryP_intern(p,pLength(p),setChar,r);
    133140}
    134141
  • libpolys/polys/clapsing.cc

    rd4cec6a r7161aca  
    5959  #ifdef HAVE_FLINT
    6060  #if __FLINT_RELEASE >= 20503
    61   if (rField_is_Zp(r) && (r->cf->ch>500))
     61  if (rField_is_Zp(r) && (r->cf->ch>10))
    6262  {
    6363    nmod_mpoly_ctx_t ctx;
  • libpolys/polys/flint_mpoly.cc

    rd4cec6a r7161aca  
    6565#if 1
    6666// memory allocation is not thread safe; singular polynomials must be constructed in serial
     67
     68/*
     69    We agree the that result of a singular -> fmpq_mpoly conversion is
     70    readonly. This restricts the usage of the result in flint functions to
     71    const arguments. However, the real readonly conversion is currently only
     72    implemented in the threaded conversion below since it requires a scan of
     73    all coefficients anyways. The _fmpq_mpoly_clear_readonly_sing needs to
     74    be provided for a consistent interface in the polynomial operations.
     75*/
     76static void _fmpq_mpoly_clear_readonly_sing(fmpq_mpoly_t a, fmpq_mpoly_ctx_t ctx)
     77{
     78    fmpq_mpoly_clear(a, ctx);
     79}
    6780
    6881void convSingPFlintMP(fmpq_mpoly_t res, fmpq_mpoly_ctx_t ctx, poly p, int lp, const ring r)
     
    186199}
    187200
     201
     202/*
     203    In order that flint may sometimes borrow the large integer coeffs of
     204    polynomials over QQ (borrow means: simply point to the same GMP structs
     205    that singular has already allocated), we define the result of a
     206    singular -> fmpq_mpoly conversion to be readonly. This means we agree
     207    that
     208        - it can only be used as an const argument to a flint function
     209        - singular must not mutate the original coeffs while the readonly object is in use
     210*/
     211
     212static void _fmpq_mpoly_clear_readonly_sing(fmpq_mpoly_t a, fmpq_mpoly_ctx_t ctx)
     213{
     214    if (fmpq_is_one(a->content))
     215    {
     216        if (a->zpoly->alloc > 0)
     217        {
     218            flint_free(a->zpoly->coeffs);
     219            flint_free(a->zpoly->exps);
     220        }
     221
     222        fmpq_clear(a->content);
     223    }
     224    else
     225    {
     226        fmpq_mpoly_clear(a, ctx);
     227    }
     228}
     229
    188230/* singular -> fmpq_mpoly conversion */
    189231
     
    197239    std::vector<poly> markers;
    198240    ring r;
    199 
    200     convert_sing_to_fmpq_mpoly_base(slong num_threads_, fmpq_mpoly_struct * res_,
    201                              const fmpq_mpoly_ctx_struct * ctx_, const ring r_, poly p)
    202       : num_threads(num_threads_),
     241    fmpq_t content;
     242
     243    convert_sing_to_fmpq_mpoly_base(fmpq_mpoly_struct * res_,
     244                     const fmpq_mpoly_ctx_struct * ctx_, const ring r_, poly p)
     245      : num_threads(0),
    203246        res(res_),
    204247        ctx(ctx_),
    205248        r(r_)
    206249    {
     250        fmpq_t c;
     251        fmpq_init(c);
     252        fmpq_init(content);
     253        fmpq_zero(content);
     254
    207255        length = 0;
    208256        while (1)
    209257        {
    210258            if ((length % 4096) == 0)
     259            {
     260                my_convSingNFlintN_QQ(c, number(pGetCoeff(p)));
     261                fmpq_gcd(content, content, c);
    211262                markers.push_back(p);
     263            }
    212264            if (p == NULL)
    213265                return;
     
    215267            pIter(p);
    216268        }
     269
     270        fmpq_clear(c);
     271    }
     272
     273    ~convert_sing_to_fmpq_mpoly_base()
     274    {
     275        fmpq_clear(content);
    217276    }
    218277};
     
    248307
    249308    flint_bitcnt_t required_bits = MPOLY_MIN_BITS;
    250     fmpq_zero(arg->content);
     309    fmpq_set(arg->content, base->content);
    251310
    252311    while (idx < arg->end_idx)
    253312    {
    254         my_convSingNFlintN_QQ(c, number(pGetCoeff(p)));
    255         fmpq_gcd(arg->content, arg->content, c);
     313        number n = number(pGetCoeff(p));
     314
     315        if (fmpq_is_one(arg->content) && (SR_HDL(n)&SR_INT || n->s >= 3))
     316        {
     317            /* content is 1 and n is an integer, nothing to do */
     318        }
     319        else
     320        {
     321            my_convSingNFlintN_QQ(c, n);
     322            fmpq_gcd(arg->content, arg->content, c);
     323        }
    256324
    257325        #if SIZEOF_LONG==8
     
    293361    }
    294362
     363    slong N = mpoly_words_per_exp(base->res->zpoly->bits, base->ctx->zctx->minfo);
     364    fmpz * res_coeffs = base->res->zpoly->coeffs;
     365    ulong * res_exps = base->res->zpoly->exps;
     366    flint_bitcnt_t res_bits = base->res->zpoly->bits;
     367
    295368    while (idx < arg->end_idx)
    296369    {
    297         my_convSingNFlintN_QQ(c, number(pGetCoeff(p)));
    298         FLINT_ASSERT(!fmpq_is_zero(base->res->content));
    299         fmpq_div(t, c, base->res->content);
    300         FLINT_ASSERT(fmpz_is_one(fmpq_denref(t)));
    301 
    302         slong N = mpoly_words_per_exp(base->res->zpoly->bits, base->ctx->zctx->minfo);
    303         fmpz_swap(base->res->zpoly->coeffs + idx, fmpq_numref(t));
     370        if (fmpq_is_one(base->res->content))
     371        {
     372            // borrowing singular integers
     373            // the entry res_coeffs[idx] is junk, we should just overwrite it
     374
     375            number n = number(pGetCoeff(p));
     376
     377            if (SR_HDL(n)&SR_INT)
     378            {
     379                // n is a singular-small integer
     380                res_coeffs[idx] = SR_TO_INT(n);
     381            }
     382            else if (n->s<3)
     383            {
     384                // n is an element of QQ \ ZZ, should not happen
     385                assume(false);
     386            }
     387            else
     388            {
     389                // n is a singular-large integer, n may be flint-small
     390                res_coeffs[idx] = PTR_TO_COEFF(n->z);
     391                if (fmpz_fits_si(res_coeffs + idx))
     392                {
     393                    slong val = fmpz_get_si(res_coeffs + idx);
     394                    if (val >= COEFF_MIN && val <= COEFF_MAX)
     395                        res_coeffs[idx] = val;
     396                }
     397            }
     398        }
     399        else
     400        {
     401            my_convSingNFlintN_QQ(c, number(pGetCoeff(p)));
     402            FLINT_ASSERT(!fmpq_is_zero(base->res->content));
     403            fmpq_div(t, c, base->res->content);
     404            FLINT_ASSERT(fmpz_is_one(fmpq_denref(t)));
     405            fmpz_swap(res_coeffs + idx, fmpq_numref(t));
     406        }
     407
    304408        #if SIZEOF_LONG==8
    305409        p_GetExpVL(p, (int64*)exp, base->r);
    306         mpoly_set_monomial_ui(base->res->zpoly->exps + N*idx, exp, base->res->zpoly->bits, base->ctx->zctx->minfo);
     410        mpoly_set_monomial_ui(res_exps + N*idx, exp, res_bits, base->ctx->zctx->minfo);
    307411        #else
    308412        p_GetExpV(p, (int*)exp, base->r);
    309         mpoly_set_monomial_ui(base->res->zpoly->exps + N*idx, &(exp[1]), base->res->zpoly->bits, base->ctx->minfo);
     413        mpoly_set_monomial_ui(res_exps + N*idx, &(exp[1]), res_bits, base->ctx->minfo);
    310414        #endif
    311415
     
    324428    thread_pool_handle * handles;
    325429    slong num_handles;
    326     slong thread_limit = 1000;
    327 
    328     /* get workers */
     430    slong thread_limit = 1000; // TODO: should be paramter to this function
     431
     432    /* the constructor works out the length of p and sets some markers */
     433    convert_sing_to_fmpq_mpoly_base base(res, ctx, r, p);
     434
     435    /* sensibly limit thread count and get workers */
     436    thread_limit = FLINT_MIN(thread_limit, base.length/1024);
    329437    handles = NULL;
    330438    num_handles = 0;
     
    340448    }
    341449
    342     convert_sing_to_fmpq_mpoly_base base(num_handles + 1, res, ctx, r, p);
    343 
    344450    /* fill in thread division points */
     451    base.num_threads = 1 + num_handles;
    345452    convert_sing_to_fmpq_mpoly_arg * args = new convert_sing_to_fmpq_mpoly_arg[base.num_threads];
    346453    slong cur_idx = 0;
     
    348455    {
    349456        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.length/base.num_threads : base.length;
     457        FLINT_ASSERT(cur_idx <= base.length);
    350458        next_idx = FLINT_MAX(next_idx, cur_idx);
    351459        next_idx = FLINT_MIN(next_idx, base.length);
     
    367475        required_bits = FLINT_MAX(required_bits, args[i].required_bits);
    368476
    369     /* initialize res with optimal bits */
    370     fmpq_mpoly_init3(res, base.length, mpoly_fix_bits(required_bits, ctx->zctx->minfo), ctx);
    371 
    372477    /* sign of content should match sign of first coeff */
    373     fmpq_zero(base.res->content);
     478    fmpq_t content;
     479    fmpq_init(content);
     480    fmpq_zero(content);
    374481    for (slong i = 0; i < base.num_threads; i++)
    375         fmpq_gcd(base.res->content, base.res->content, args[i].content);
     482        fmpq_gcd(content, content, args[i].content);
    376483    if (p != NULL)
    377484    {
     
    380487        my_convSingNFlintN_QQ(c, number(pGetCoeff(p)));
    381488        if (fmpq_sgn(c) < 0)
    382             fmpq_neg(base.res->content, base.res->content);
     489            fmpq_neg(content, content);
    383490        fmpq_clear(c);
    384491    }
     492
     493    /* initialize res with optimal bits */
     494    required_bits = mpoly_fix_bits(required_bits, ctx->zctx->minfo);
     495    if (fmpq_is_one(content))
     496    {
     497        /* initialize borrowed coeffs */
     498        slong N = mpoly_words_per_exp(required_bits, ctx->zctx->minfo);
     499        slong alloc = base.length;
     500        if (alloc != 0)
     501        {
     502            res->zpoly->coeffs = (fmpz *) flint_malloc(alloc*sizeof(fmpz));
     503            res->zpoly->exps   = (ulong *) flint_malloc(alloc*N*sizeof(ulong));
     504        }
     505        else
     506        {
     507            res->zpoly->coeffs = NULL;
     508            res->zpoly->exps = NULL;
     509        }
     510        res->zpoly->alloc = alloc;
     511        res->zpoly->length = 0;
     512        res->zpoly->bits = required_bits;
     513
     514        fmpq_init(res->content);
     515        fmpq_one(res->content);
     516    }
     517    else
     518    {
     519        /* initialize coeffs that will be created and destroyed */
     520        fmpq_mpoly_init3(res, base.length, required_bits, ctx);
     521        fmpq_swap(res->content, content);
     522    }
     523
     524    fmpq_clear(content);
    385525
    386526    /* fill in res->zpoly */
     
    468608    thread_pool_handle * handles;
    469609    slong num_handles;
    470     slong thread_limit = 1000;
    471 
    472     /* get workers */
     610    slong thread_limit = 1000;// TODO: should be paramter to this function
     611
     612    /* sensibly limit threads and get workers */
     613    thread_limit = FLINT_MIN(thread_limit, f->zpoly->length/1024);
    473614    handles = NULL;
    474615    num_handles = 0;
     
    485626
    486627    convert_fmpq_mpoly_to_sing_base base(num_handles + 1, f, ctx, r);
    487 
    488628    convert_fmpq_mpoly_to_sing_arg * args = new convert_fmpq_mpoly_to_sing_arg[base.num_threads];
    489629    slong cur_idx = 0;
     
    492632        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.f->zpoly->length/base.num_threads
    493633                                                  : base.f->zpoly->length;
     634        FLINT_ASSERT(cur_idx <= base.f->zpoly->length);
    494635        next_idx = FLINT_MAX(next_idx, cur_idx);
    495636        next_idx = FLINT_MIN(next_idx, base.f->zpoly->length);
     
    542683    ring r;
    543684
    544     convert_sing_to_nmod_mpoly_base(slong num_threads_, nmod_mpoly_struct * res_,
    545                             const nmod_mpoly_ctx_struct * ctx_, const ring r_, poly p)
    546       : num_threads(num_threads_),
     685    convert_sing_to_nmod_mpoly_base(nmod_mpoly_struct * res_,
     686                     const nmod_mpoly_ctx_struct * ctx_, const ring r_, poly p)
     687      : num_threads(0),
    547688        res(res_),
    548689        ctx(ctx_),
     
    624765    }
    625766
     767    slong N = mpoly_words_per_exp(base->res->bits, base->ctx->minfo);
     768    ulong * res_coeffs = base->res->coeffs;
     769    ulong * res_exps = base->res->exps;
     770    flint_bitcnt_t res_bits = base->res->bits;
     771
    626772    while (idx < arg->end_idx)
    627773    {
    628         slong N = mpoly_words_per_exp(base->res->bits, base->ctx->minfo);
    629774        #if SIZEOF_LONG==8
    630775        p_GetExpVL(p, (int64*)exp, base->r);
    631         mpoly_set_monomial_ui(base->res->exps + N*idx, exp, base->res->bits, base->ctx->minfo);
     776        mpoly_set_monomial_ui(res_exps + N*idx, exp, res_bits, base->ctx->minfo);
    632777        #else
    633778        p_GetExpV(p, (int*)exp, base->r);
    634         mpoly_set_monomial_ui(base->res->exps + N*idx, &(exp[1]), base->res->bits, base->ctx->minfo);
     779        mpoly_set_monomial_ui(res_exps + N*idx, &(exp[1]), res_bits, base->ctx->minfo);
    635780        #endif
    636781
    637         base->res->coeffs[idx] = (ulong)(number(pGetCoeff(p)));
     782        res_coeffs[idx] = (ulong)(number(pGetCoeff(p)));
    638783
    639784        pIter(p);
     
    649794    thread_pool_handle * handles;
    650795    slong num_handles;
    651     slong thread_limit = 1000;
    652 
    653     /* get workers */
     796    slong thread_limit = 1000; // TODO: should be paramter to this function
     797
     798    /* the constructor works out the length of p and sets some markers */
     799    convert_sing_to_nmod_mpoly_base base(res, ctx, r, p);
     800
     801    /* sensibly limit thread count and get workers */
     802    thread_limit = FLINT_MIN(thread_limit, base.length/1024);
    654803    handles = NULL;
    655804    num_handles = 0;
     
    665814    }
    666815
    667     convert_sing_to_nmod_mpoly_base base(num_handles + 1, res, ctx, r, p);
    668 
    669816    /* fill in thread division points */
     817    base.num_threads = 1 + num_handles;
    670818    convert_sing_to_nmod_mpoly_arg * args = new convert_sing_to_nmod_mpoly_arg[base.num_threads];
    671819    slong cur_idx = 0;
     
    674822        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.length/base.num_threads
    675823                                                  : base.length;
     824        FLINT_ASSERT(cur_idx <= base.length);
    676825        next_idx = FLINT_MAX(next_idx, cur_idx);
    677826        next_idx = FLINT_MIN(next_idx, base.length);
     
    777926    thread_pool_handle * handles;
    778927    slong num_handles;
    779     slong thread_limit = 1000;
    780 
    781     /* get workers */
     928    slong thread_limit = 1000; // TODO: should be paramter to this function
     929
     930    /* sensibly limit threads and get workers */
     931    thread_limit = FLINT_MIN(thread_limit, f->length/1024);
    782932    handles = NULL;
    783933    num_handles = 0;
     
    794944
    795945    convert_nmod_mpoly_to_sing_base base(num_handles + 1, f, ctx, r);
    796 
    797946    convert_nmod_mpoly_to_sing_arg * args = new convert_nmod_mpoly_to_sing_arg[base.num_threads];
    798947    slong cur_idx = 0;
     
    801950        slong next_idx = i + 1 < base.num_threads ? (i + 1)*base.f->length/base.num_threads
    802951                                                  : base.f->length;
     952        FLINT_ASSERT(cur_idx <= base.f->length);
    803953        next_idx = FLINT_MAX(next_idx, cur_idx);
    804954        next_idx = FLINT_MIN(next_idx, base.f->length);
     
    845995{
    846996  fmpq_mpoly_t pp,qq,res;
    847   convSingPFlintMP(pp,ctx,p,lp,r);
    848   convSingPFlintMP(qq,ctx,q,lq,r);
     997  convSingPFlintMP(pp,ctx,p,lp,r); // pp read only
     998  convSingPFlintMP(qq,ctx,q,lq,r); // qq read only
    849999  fmpq_mpoly_init(res,ctx);
    8501000  fmpq_mpoly_mul(res,pp,qq,ctx);
    8511001  poly pres=convFlintMPSingP(res,ctx,r);
    8521002  fmpq_mpoly_clear(res,ctx);
    853   fmpq_mpoly_clear(pp,ctx);
    854   fmpq_mpoly_clear(qq,ctx);
     1003  _fmpq_mpoly_clear_readonly_sing(pp,ctx);
     1004  _fmpq_mpoly_clear_readonly_sing(qq,ctx);
    8551005  fmpq_mpoly_ctx_clear(ctx);
    8561006  p_Test(pres,r);
     
    8781028{
    8791029  fmpq_mpoly_t pp,qq,res;
    880   convSingPFlintMP(pp,ctx,p,lp,r);
    881   convSingPFlintMP(qq,ctx,q,lq,r);
     1030  convSingPFlintMP(pp,ctx,p,lp,r); // pp read only
     1031  convSingPFlintMP(qq,ctx,q,lq,r); // qq read only
    8821032  fmpq_mpoly_init(res,ctx);
    8831033  fmpq_mpoly_divides(res,pp,qq,ctx);
    8841034  poly pres = convFlintMPSingP(res,ctx,r);
    8851035  fmpq_mpoly_clear(res,ctx);
    886   fmpq_mpoly_clear(pp,ctx);
    887   fmpq_mpoly_clear(qq,ctx);
     1036  _fmpq_mpoly_clear_readonly_sing(pp,ctx);
     1037  _fmpq_mpoly_clear_readonly_sing(qq,ctx);
    8881038  fmpq_mpoly_ctx_clear(ctx);
    8891039  p_Test(pres,r);
     
    9341084{
    9351085  fmpq_mpoly_t pp,qq,res;
    936   convSingPFlintMP(pp,ctx,p,lp,r);
    937   convSingPFlintMP(qq,ctx,q,lq,r);
     1086  convSingPFlintMP(pp,ctx,p,lp,r); // pp read only
     1087  convSingPFlintMP(qq,ctx,q,lq,r); // qq read only
    9381088  fmpq_mpoly_init(res,ctx);
    9391089  int ok=fmpq_mpoly_gcd(res,pp,qq,ctx);
     
    9591109  }
    9601110  fmpq_mpoly_clear(res,ctx);
    961   fmpq_mpoly_clear(pp,ctx);
    962   fmpq_mpoly_clear(qq,ctx);
     1111  _fmpq_mpoly_clear_readonly_sing(pp,ctx);
     1112  _fmpq_mpoly_clear_readonly_sing(qq,ctx);
    9631113  fmpq_mpoly_ctx_clear(ctx);
    9641114  return pres;
  • libpolys/polys/monomials/ring.cc

    rd4cec6a r7161aca  
    432432  if (rIsLPRing(r))
    433433  {
    434     Print("\n// letterplace ring (block size %d)",r->isLPring);
     434    Print("\n// letterplace ring (block size %d, ncgen count %d)",r->isLPring, r->LPncGenCount);
    435435  }
    436436#endif
     
    13931393#ifdef HAVE_SHIFTBBA
    13941394  res->isLPring=r->isLPring; /* 0 for non-letterplace rings, otherwise the number of LP blocks, at least 1, known also as lV */
     1395  res->LPncGenCount=r->LPncGenCount;
    13951396#endif
    13961397
     
    15221523#ifdef HAVE_SHIFTBBA
    15231524  res->isLPring=r->isLPring; /* 0 for non-letterplace rings, otherwise the number of LP blocks, at least 1, known also as lV */
     1525  res->LPncGenCount=r->LPncGenCount;
    15241526#endif
    15251527
     
    16671669  #ifdef HAVE_SHIFTBBA
    16681670  if (r1->isLPring!=r2->isLPring) return FALSE;
     1671  if (r1->LPncGenCount!=r2->LPncGenCount) return FALSE;
    16691672  #endif
    16701673
  • libpolys/polys/monomials/ring.h

    rd4cec6a r7161aca  
    312312#ifdef HAVE_SHIFTBBA
    313313  short          isLPring; /* 0 for non-letterplace rings, otherwise the number of LP blocks, at least 1, known also as lV */
     314  short          LPncGenCount;
    314315#endif
    315316
  • libpolys/polys/operations/p_Mult_q.cc

    rd4cec6a r7161aca  
    6767}
    6868
     69static void pqLengthApprox(poly p, poly q, int &lp, int &lq, const int min)
     70{
     71  int l = 0;
     72
     73  do
     74  {
     75    if (p == NULL)
     76    {
     77      lp=l;
     78      lq=l+(q!=NULL);
     79      return;
     80    }
     81    if (q == NULL) /* && p!=NULL */
     82    {
     83      lp=l+1;
     84      lq=l;
     85      return;
     86    }
     87    if (l>min) /* && p,q!=NULL */
     88    {
     89      lp=l; lq=l;
     90      return;
     91    }
     92    pIter(p);
     93    pIter(q);
     94    l++;
     95  }
     96  while (1);
     97}
     98
    6999
    70100static poly _p_Mult_q_Bucket(poly p, const int lp,
     
    290320  poly pt;
    291321
    292   pqLength(p, q, lp, lq, MIN_LENGTH_FACTORY);
     322  // MIN_LENGTH_FACTORY must be >= MIN_LENGTH_FACTORY_QQ, MIN_FLINT_QQ, MIN_FLINT_Zp 20
     323  pqLengthApprox(p, q, lp, lq, MIN_LENGTH_FACTORY);
    293324
    294325  if (lp < lq)
     
    309340    if (pure_polys && rField_is_Q(r) && !convSingRFlintR(ctx,r))
    310341    {
    311       lp=pLength(p);
    312       //printf("mul in flint\n");
    313       poly res=Flint_Mult_MP(p,lp,q,lq,ctx,r);
     342      // lq is a lower bound for the length of p and  q
     343      poly res=Flint_Mult_MP(p,lq,q,lq,ctx,r);
    314344      if (!copy)
    315345      {
     
    325355    if (pure_polys && rField_is_Zp(r) && !convSingRFlintR(ctx,r))
    326356    {
    327       lp=pLength(p);
    328       //printf("mul in flint\n");
    329       poly res=Flint_Mult_MP(p,lp,q,lq,ctx,r);
     357      // lq is a lower bound for the length of p and  q
     358      poly res=Flint_Mult_MP(p,lq,q,lq,ctx,r);
    330359      if (!copy)
    331360      {
     
    357386  {
    358387    lp=pLength(p);
    359     assume(lq == pLength(q));
     388    lq=pLength(q);
    360389    return _p_Mult_q_Bucket(p, lp, q, lq, copy, r);
    361390  }
  • libpolys/polys/shiftop.cc

    rd4cec6a r7161aca  
    529529  PrintLn(); WriteLPExpV(m1ExpV, ri);
    530530#endif
     531  assume(_p_mLPNCGenValid(m1ExpV, ri));
    531532}
    532533
     
    564565  PrintLn(); WriteLPExpV(m1ExpV, ri);
    565566#endif
     567  assume(_p_mLPNCGenValid(m1ExpV, ri));
    566568}
    567569
     
    608610  assume(p_FirstVblock(m1,r) <= 1);
    609611  assume(p_FirstVblock(m2,r) <= 1);
     612}
     613
     614BOOLEAN _p_mLPNCGenValid(int *mExpV, const ring r)
     615{
     616  BOOLEAN hasNCGen = FALSE;
     617  int lV = r->isLPring;
     618  int degbound = r->N/lV;
     619  int ncGenCount = r->LPncGenCount;
     620  for (int i = 1; i <= degbound; i++)
     621  {
     622    for (int j = i*lV; j > (i*lV - ncGenCount); j--)
     623    {
     624      if (mExpV[j])
     625      {
     626        if (hasNCGen)
     627        {
     628          return FALSE;
     629        }
     630        hasNCGen = TRUE;
     631      }
     632    }
     633  }
     634  return TRUE;
    610635}
    611636
     
    673698    if (B[j]!=0) break;
    674699  }
    675   /* do not need e anymore */
     700
     701  if (j==0)
     702  {
     703    omFreeSize((ADDRESS) e, (r->N+1)*sizeof(int));
     704    omFreeSize((ADDRESS) B, (b+1)*sizeof(int));
     705    return 1;
     706  }
     707
     708  if (!_p_mLPNCGenValid(e, r))
     709  {
     710    omFreeSize((ADDRESS) e, (r->N+1)*sizeof(int));
     711    omFreeSize((ADDRESS) B, (b+1)*sizeof(int));
     712    return 0;
     713  }
     714
    676715  omFreeSize((ADDRESS) e, (r->N+1)*sizeof(int));
    677716
    678   if (j==0) goto ret_true;
    679717//   {
    680718//     /* it is a zero exp vector, which is in V */
     
    688726    {
    689727      omFreeSize((ADDRESS) B, (b+1)*sizeof(int));
    690       return(0);
    691     }
    692   }
    693  ret_true:
     728      return 0;
     729    }
     730  }
     731
    694732  omFreeSize((ADDRESS) B, (b+1)*sizeof(int));
    695   return(1);
     733  return 1;
    696734}
    697735
     
    776814}
    777815
    778 ring freeAlgebra(ring r, int d)
    779 {
     816ring freeAlgebra(ring r, int d, int ncGenCount)
     817{
     818  if (ncGenCount) r = rCopy0(r);
     819  for (int i = 1; i <= ncGenCount; i++)
     820  {
     821    char *varname=(char *)omAlloc(256);
     822    sprintf(varname, "ncgen(%d)", i);
     823    ring save = r;
     824    r = rPlusVar(r, varname, 0);
     825    omFreeSize(varname, 256);
     826    rDelete(save);
     827  }
    780828  ring R=rCopy0(r);
    781829  int p;
     
    788836  R->N=r->N*d;
    789837  R->isLPring=r->N;
     838  R->LPncGenCount=ncGenCount;
    790839  // create R->order
    791840  BOOLEAN has_order_a=FALSE;
     
    876925  R->names=names;
    877926
     927  if (ncGenCount) rDelete(r);
    878928  rComplete(R,TRUE);
    879929  return R;
  • libpolys/polys/shiftop.h

    rd4cec6a r7161aca  
    5555BOOLEAN _p_LPLmDivisibleByNoComp(poly a, poly b, const ring r);
    5656
     57BOOLEAN _p_mLPNCGenValid(int *mExpV, const ring r);
     58
    5759poly p_LPVarAt(poly p, int pos, const ring r);
    5860
    5961/// create the letterplace ring corresponding to r up to degree d
    60 ring freeAlgebra(ring r, int d);
     62ring freeAlgebra(ring r, int d, int LPncGenCount = 0);
    6163#endif
    6264#endif
Note: See TracChangeset for help on using the changeset viewer.