11 #define LEVELSELECT 1e-6 
   16 template<
typename pol_t>
 
   21  typedef typename pol_t::monom_t 
mon;
 
   35 template<
typename typPk_t, 
typename mon>
 
   39   typedef typename typPk::value_type 
pol;
 
   46 template<
typename typPk_t, 
typename mon>
 
   57 template <
typename typcomp, 
typename workspace, 
typename typserv>
 
   61 template<
typename typPk, 
typename Base>
 
   71   typedef typename typPk::value_type::monom_t 
mon;
 
   72   for (
auto &iter : tmpPk)
 
   78       mon *candidate_ancestor=NULL;
 
   80       for(
auto &iterbase : b)
 
   82       mon *compancestor=NULL;
 
   84       for(
int i=0;
i<iterbase.taille1;
i++)
 
   89         cout<<
"je break ici"<<endl;
 
   95           for(
int i=0;
i<iterbase.taille2;
i++)
 
  100             candidate_ancestor=NULL;
 
  102             cout<<
"je break ici"<<endl;
 
  109             cout<<
"g trouvé ici un gus "<<iterbase.refuse[
i]<<endl;
 
  111             compancestor=&iterbase.refuse[
i];
 
  118           cout<<
"je passe ici compancestor non null"<<endl;
 
  120           candidate_ancestor=compancestor;
 
  123       iter.ancestor=candidate_ancestor;
 
  126   for(
auto &&iter : tmpPk)
 
  128       cout<<
"ancestor ---- "<<iter.ind<<endl;
 
  130     cout<<
"\t\t -> "<<*(iter.ancestor)<<endl;
 
  132     cout<<
"\e[31mcaca\e(B\e[m"<<endl;
 
  137 template<
typename typgraph, 
typename typPk, 
 
  138      typename typexceed, 
typename typsizeexceed, 
typename typmon2face,
 
  140 void makegraph(typgraph & G, 
const typPk tmpPk, 
const typexceed &exceed,
 
  141            const typsizeexceed & sizeexceed, 
 
  142            typmon2face &mon2face,
 
  148   typedef typename typPk::value_type::monom_t 
mon;
 
  152   map<typename mon::rep_t,int> root2face;
 
  156   for(
auto iterpk=tmpPk.begin();iterpk!=tmpPk.end();iterpk++)
 
  158       mon root=*(iterpk->ancestor);
 
  172     if(iterpk->ancestor->GetDegree(
i)==root.
GetDegree(
i))
 
  177       if(root2face.count(root.
rep)==0) 
 
  178     root2face[root.
rep]=numface++;
 
  179       mon2face[iterpk->ind.rep]=root2face[root.
rep];
 
  182   cout<<
"roottoface"<<endl;
 
  183   for(
auto &
i :root2face)
 
  184     cout<<
i.first<<
" --- "<<
i.second<<endl;
 
  185   cout<<
"mon2face"<<endl;
 
  186   for(
auto &
i :mon2face)
 
  187     cout<<
i.first<<
" --- "<<
i.second<<endl;
 
  198   auto iterexceed=exceed.begin();
 
  199   auto itersize=sizeexceed.begin();
 
  200   auto iterpk=tmpPk.begin();
 
  201   for(;iterpk!=tmpPk.end();iterpk++,iterexceed++,itersize++)
 
  204       for(
int i=0;
i<*itersize;
i++)
 
  205     G[mon2face[iterpk->ind.rep]][mon2face[(*iterexceed)[
i].rep]]=1;
 
  211 template<
typename typstack, 
typename typgraph, 
typename typvec>
 
  213            int &
index, typvec &lowlink,
int startindex)
 
  221   for(
int j=0;
j<G[
i].size();
j++)
 
  230           lowlink[
i]=
min(lowlink[i],lowlink[
j]);
 
  234           if(vec[
j]>=startindex)
 
  235             lowlink[
i]=
min(lowlink[i], vec[
j]);
 
  243   if(lowlink[i]==vec[i])
 
  262 template<
typename typgraph, 
typename typvec>
 
  309   vector<int> lowlink(G.size(),-1);
 
  312   for(
int i=0;
i<G.size();
i++)
 
  323   vector<int> translator(G.size(),-1);
 
  325   for(
int i=0;
i<vec.size();
i++)
 
  327     if(translator[vec[
i]]==-1)
 
  328       translator[vec[
i]]=numcomp++;
 
  329      vec[
i]=translator[vec[
i]];
 
  331   copy(vec.begin(),vec.end(),ostream_iterator<int>(cout,
" "));
 
  337 void reconstruct_pr_pc(
int *&pr,
int *&pc,
int *tmppr,
int *tmppc,
int sizetmp,
int indexinside);
 
  340 template<
typename typMat, 
typename typPk, 
typename typMk, 
typename typexceed,
 
  341      typename typsizeexceed, 
typename typP>
 
  343                   typMk &tmpMk, typexceed &exceed,
 
  344                   typsizeexceed &sizeexceed, typP &P)
 
  346    typedef typename typP::value_type::order_t ord;
 
  347    typedef typename typPk::value_type 
pol;
 
  349    typedef typename typP::value_type polyalp;
 
  352    map<mon,int,ord> mapint;
 
  353    typename typMk::iterator itermk=tmpMk.begin();
 
  354    typename typPk::iterator iterpk=tmpPk.begin();
 
  356    typename typexceed::iterator iterex=exceed.begin();
 
  357    typename typsizeexceed::iterator itersize=sizeexceed.begin();
 
  359    typsizeexceed tmpsizeex;
 
  362    mat.nrow=tmpPk.size();
 
  363    mat.ncol=tmpMk.size();
 
  364    ncol=(
int*)calloc(mat.ncol,
sizeof(
int));
 
  368      for(
int i=0;itermk!=tmpMk.end();
i++,itermk++)
 
  372      iterpk=tmpPk.begin();
 
  374      for(;iterpk!=tmpPk.end();iterpk++,iterex++,itersize++,line_num++)
 
  381      for(
int i=0;*itersize>
i;i++)
 
  384          if (mapint.count((*iterex)[i]))
 
  386          ++ncol[mapint[(*iterex)[
i]]];
 
  397      tmpsizeex.push_back(tmp);
 
  404      cout<<
"nnz of matrix "<<nnz<<endl;
 
  406      void * toto=MAC_REV_MALLOC<coeff>(nnz*
sizeof(
typename typMat::coeff_t));
 
  407      if (mat.nzval!=NULL) MAC_REV_FREE<typename typMat::coeff_t>
 
  409                  *
sizeof(
typename typMat::coeff_t));
 
  413      if(mat.rowind!=NULL) 
free(mat.rowind);
 
  414      mat.rowind=(
int*)
malloc(nnz*
sizeof(
int));
 
  415      if(mat.colptr!=NULL) 
free(mat.colptr);
 
  416      mat.colptr=(
int*)
malloc((mat.ncol+1)*
sizeof(int));
 
  417      cout<<
"matrix of size "<<mat.nrow<<
"x"<<mat.ncol<<endl;
 
  419      typename typMat::coeff_t* nzval=(
typename typMat::coeff_t*)mat.nzval;
 
  420      int *rowind=mat.rowind;
 
  421      int *colptr=mat.colptr;
 
  424     for(
int i=0;
i<mat.ncol-1;
i++)
 
  426     colptr[
i+1]=colptr[
i]+ncol[
i];
 
  428     colptr[mat.ncol]=mat.nnz;
 
  435     itermk=tmpMk.begin();
 
  436     iterpk=tmpPk.begin();
 
  437     iterex=exceed.begin();
 
  438     itersize=sizeexceed.begin();
 
  441     auto itertmp=tmpsizeex.begin();
 
  443     for(;(iterpk!=tmpPk.end());iterpk++,iterex++,itersize++,line_num++,itertmp++)
 
  447     mon *tmpex=(
mon*)MAC_REV_MALLOC<mon>(*itertmp*
sizeof(
mon));
 
  450         for(
int i=0;*itersize>
i;i++)
 
  453         if(mapint.count((*iterex)[i]))
 
  456             const coeff stock=(*iterex)[
i].
GetCoeff();
 
  457             (*iterex)[
i].SetCoeff(1);
 
  458             const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
 
  459             const unsigned int tmpex=mapint[(*iterex)[
i]];
 
  460             nzval[colptr[tmpplusex]-ncol[tmpex]]
 
  462             rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num; 
 
  468             tmpex[ktmp++]=(*iterex)[
i];
 
  473       MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
 
  486    for(
typename typPk::iterator iterpk=tmpPk.begin()
 
  487      ;iterpk!=tmpPk.end();iterpk++)
 
  488      iterpk->ind.SetCoeff(1);
 
  492 template<
typename typMat,
typename typPk,
typename typP,
 
  493          typename typMk,
typename Base,
typename typdump,
typename typexceed,
 
  496                     int &
k,
Base &b, typdump &dump,typexceed &exceed_ret, 
 
  500 typedef typename typMk::value_type 
mon;
 
  501   typedef typename typP::value_type::order_t ord;
 
  502   typedef typename typPk::value_type 
pol;
 
  504   typedef typename typP::value_type polyalp; 
 
  508   map<typename mon::rep_t,int> mon2face, mon2col; 
 
  509   vector<vector<int> > G;
 
  511   typPk tmpPk,workvect,convcrochet;
 
  514   vector<mon *> exceed,exceedcrochet;
 
  515   list<int> sizeexceed,sizeexceedcrochet;
 
  516   int nbproj=0,flagdoplus=1;
 
  517   int nbcompo=0,*pr,*pc;
 
  524   mat.destroystore();mat.ncol=0;mat.nrow=0;mat.nnz=0;
 
  525   exceed_ret.erase(exceed_ret.begin(),exceed_ret.end());
 
  526   sizeexceed_ret.erase(sizeexceed_ret.begin(),sizeexceed_ret.end());
 
  528   cerr<<
"k on entering newpkmkmatrixof "<<k<<endl;
 
  534                             Mk, dump, b, flagdoplus, k, recall, exceed, sizeexceed, serv);
 
  535     cout<<
"en sortie tmpPk.size "<<tmpPk.size()<<endl;
 
  539     cout<<
"newpol"<<endl;
 
  540     compute_newpol(Pk,tmpPk,tmpMk,dump,exceed,sizeexceed, b, k, recall, w,serv);
 
  541     cout<<
"fin newpol"<<endl;
 
  551   conv_merge(convcrochet,ttmpP,exceedcrochet,sizeexceedcrochet,b,serv);
 
  552   crochet.poly.resize(convcrochet.size());
 
  553   crochet.sizeexceed.resize(convcrochet.size());
 
  554   copy(convcrochet.begin(),convcrochet.end(),crochet.poly.begin());
 
  555   crochet.exceed=exceedcrochet;
 
  556   copy(sizeexceedcrochet.begin(),sizeexceedcrochet.end(),crochet.sizeexceed.begin());
 
  558  cout<<
"crochet "<<endl;
 
  559   for(
int i=0;
i<crochet.poly.size();
i++)
 
  561       cout<<
"ind "<<crochet.poly[
i].ind<<endl;
 
  562       copy(crochet.exceed[
i],crochet.exceed[
i]+crochet.sizeexceed[
i],ostream_iterator<mon>(cout,
" + "));
 
  563       cout<<invconv<Poly>(crochet.poly[
i],serv)<<endl;
 
  568   auto itersizeexceed=sizeexceed.begin();
 
  582   makegraph(G, tmpPk, exceed, sizeexceed, mon2face,b);
 
  585   vec.resize(G.size(),-1);
 
  587   cout<<
"le graph"<<endl;
 
  595   cout<<
"je rentre ds tarjan "<<G.size()<<
" "<<tmpMk.size()<<endl;
 
  597   pr=(
int *)
malloc(tmpPk.size()*
sizeof(int));
 
  598   pc=(
int *)
malloc(tmpMk.size()*
sizeof(int));
 
  599    tmpMk.erase(tmpMk.begin(),tmpMk.end());
 
  602   for_each(vec.begin(),vec.end(),[&nbcompo](
int i){nbcompo=(nbcompo<
i?
i:nbcompo);});
 
  604   for(
int i=0;
i<=nbcompo;
i++)
 
  607     list<mon*> tmpexceed;
 
  608     list<int> tmpsizeexceed;
 
  611     auto itersizeexceed=sizeexceed.begin();
 
  612     auto iterexceed=exceed.begin();
 
  614     for_each(tmpPk.begin(),tmpPk.end(),
 
  616         (
typename typPk::value_type &iter)
 
  619       cout<<
"mon2face "<<iter.ind.rep<<
" "<<mon2face[iter.ind.rep]<<endl;
 
  620       cout<<
"vec[mon2face[iter.ind.rep]] "<<vec[mon2face[iter.ind.rep]]<<
 
  623       if(vec[mon2face[iter.ind.rep]]==
i) 
 
  626           tmpcomp.poly.push_back(iter);
 
  629           for(
int i=0;
i<*itersizeexceed;
i++)
 
  630         cout<<
" "<<(*iterexceed)[
i];
 
  633           tmpcomp.sizeexceed.push_back(*itersizeexceed);
 
  636           tmpcomp.exceed.push_back(*iterexceed);
 
  644     listcomp.push_back(tmpcomp);
 
  647   for(
auto iter=listcomp.begin();iter!=listcomp.end();iter++)
 
  649     for(
auto &m : iter->poly)
 
  650       cout<<
"ind compo "<<m.ind<<endl;
 
  651    cout<<
"----------------------------------------------------------"<<endl;
 
  659   cout<<
"nb total de compo dans la loiste "<<listcomp.size()<<endl;
 
  660   for(
auto iter=listcomp.begin();iter!=listcomp.end();iter++,numcompo++)
 
  667      cout<<
"pour la composante "<<prout++<<endl;
 
  669      auto toto=iter->sizeexceed.begin();
 
  670      typename vector<pol>::iterator tutu=iter->poly.begin();
 
  671     for(
auto m : iter->exceed)
 
  673     cout<<
"sizeexceed ici "<<*toto<<endl;
 
  674     copy(m,m+*(toto++),ostream_iterator<mon>(cout,
" + ")),cout<<endl;;
 
  675     cout<<tutu->ind<<endl;
 
  677       copy(tutu->nf,tutu->nf+tutu->size,ostream_iterator<coeff>(cout,
" ")),cout<<endl;
 
  678     cout<<invconv<Poly>(*(tutu++),serv)<<endl;
 
  679     cout<<
"------------------------------------ "<<endl;
 
  683      for(
auto &&iterind : iter->poly)
 
  685        verytmpMk.push_back(iterind.ind);
 
  689                      iter->exceed, iter->sizeexceed, P);
 
  692      cout<<
"matrix of comp"<<endl;
 
  694      cout<<
"\e[32mpour la composante \e[37m"<<prout<<endl;
 
  696        auto toto=iter->sizeexceed.begin();
 
  697        typename vector<pol>::iterator tutu=iter->poly.begin();
 
  698        for(
auto m : iter->exceed)
 
  700        copy(m,m+*(toto++),ostream_iterator<mon>(cout,
" - ")),cout<<endl;;
 
  701        cout<<tutu->ind<<endl;
 
  702        cout<<
"size tutu "<<tutu->size<<endl;
 
  704          copy(tutu->nf,tutu->nf+tutu->size,ostream_iterator<coeff>(cout,
" "));
 
  705        cout<<invconv<Poly>(*(tutu++),serv)<<endl;
 
  706        cout<<
"------------------------------------ "<<endl;
 
  711      cout<<
"la petite matrice"<<endl;
 
  729      Solve(tmpmat,L,*iter,&tmppr,&tmppc,verytmpMk,w,serv);
 
  731     cout<<
"\e[31mApres SOLVE \e[37m"<<prout<<endl;
 
  733       auto toto=iter->sizeexceed.begin();
 
  734       typename vector<pol>::iterator tutu=iter->poly.begin();
 
  735       for(
auto m : iter->exceed)
 
  737           copy(m,m+*(toto++),ostream_iterator<mon>(cout,
" - ")),cout<<endl;;
 
  738           cout<<tutu->ind<<endl;
 
  739           cout<<invconv<Poly>(*(tutu++),serv)<<endl;
 
  748      for(
auto &m :verytmpMk)
 
  759     typename typMk::iterator itermon=verytmpMk.begin();
 
  761     for(
auto iter_in_poly=iter->poly.begin();
 
  762         itermon!=verytmpMk.end();iter_in_poly++,itermon++,j++)
 
  764        cout<<
" dans verytmp "<<*itermon<<
 
  765          invconv<typename typP::value_type>(*iter_in_poly,serv)<<endl;
 
  770            iter_in_poly->ind=*itermon;
 
  771            iter_in_poly->ind.SetCoeff(1);
 
  777            for(
int i=tmpmat.colptr[j];
i<tmpmat.colptr[j+1];
i++)
 
  778          if(!(((coeff*)tmpmat.nzval)[
i]==0))
 
  783              coeff tmpcoeff=((coeff*)tmpmat.nzval)[
i];
 
  787              if(!
Iszero(tmpmat(tmpmat.rowind[
i],tmpmat.rowind[
i])))
 
  788                tmpcoeff/=tmpmat(tmpmat.rowind[
i],tmpmat.rowind[
i]);
 
  791              iter->exceed[tmpmat.rowind[
i]]=(mon*)
 
  792                MAC_REV_REALLOC<mon>(iter->exceed[tmpmat.rowind[
i]],
 
  793                         iter->sizeexceed[tmpmat.rowind[
i]]*
sizeof(mon),
 
  794                         (iter->sizeexceed[tmpmat.rowind[
i]]+1)*
sizeof(mon));
 
  796              iter->exceed[tmpmat.rowind[
i]][iter->sizeexceed[tmpmat.rowind[
i]]]=tmpmon;
 
  797              iter->sizeexceed[tmpmat.rowind[
i]]++;
 
  799            iter_in_poly->ind=
mon(0);
 
  806     cout<<
"apres solve les poly de la compo"<<endl;
 
  807     for(
int i=0;
i<iter->poly.size();
i++)
 
  809         cout<<
"ind "<<iter->poly[
i].ind<<endl;
 
  810         copy(iter->exceed[
i],iter->exceed[
i]+iter->sizeexceed[
i],
 
  811          ostream_iterator<mon>(cout,
" + "));cout<<endl;
 
  812         cout<<invconv<typename typP::value_type>(iter->poly[
i],serv)<<endl;
 
  813         cout<<
"--------------------********************"<<endl;
 
  815     for(
auto i : iter->poly)
 
  816       cout<<
"ind "<<
i.ind<<endl;
 
  817     copy(iter->sizeexceed.begin(),iter->sizeexceed.end(),ostream_iterator<int>(cout,
" "));
 
  818     cout<<
"iciiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"<<endl;
 
  822     cout<<
"update "<<endl;
 
  825     cout<<
"la map"<<endl;
 
  826     map<typename mon::rep_t,resmul<typename compo::typPk::value_type> > mon2pol;
 
  828       auto iterexceed=iter->exceed.begin();
 
  829           auto itersizeexceed=iter->sizeexceed.begin();
 
  830       auto iterpoly=iter->poly.begin();
 
  832       for(
auto iterpoly=iter->poly.begin();iterpoly!=iter->poly.end();
 
  833           iterpoly++,iterexceed++,itersizeexceed++,i++)
 
  839           if(!(tmpmat(i,i)==0)) mon2pol[iterpoly->ind.rep]=tmp;
 
  844     cout<<
"le graphe"<<endl;
 
  849     vector<char> toupdate(nbcompo+1,0);
 
  852     for(
int i_vec=0;i_vec<G.size();i_vec++)
 
  854         if(vec[i_vec]==numcompo)
 
  858           for(
int j=0;
j<G.size();
j++)
 
  863             if(G[
j][i_vec] && vec[
j]!=numcompo)
 
  868             for(
int j_graph=0;j_graph<G.size();j_graph++)
 
  869               G[
j][j_graph]|=G[i_vec][j_graph];
 
  878     cout<<
"calcul poly"<<endl;
 
  879     for(
auto itercomp=listcomp.begin();itercomp!=listcomp.end();
 
  880         itercomp++,indexcompo++)
 
  882        if(toupdate[indexcompo])
 
  885            cout<<
"la compo a updater avant"<<endl;
 
  886            for(
int i=0;
i<itercomp->poly.size();
i++)
 
  888            cout<<
"ind "<<itercomp->poly[
i].ind<<endl;
 
  889            copy(itercomp->exceed[
i],itercomp->exceed[
i]+itercomp->sizeexceed[
i],
 
  890             ostream_iterator<mon>(cout,
" + "));cout<<endl;
 
  891            cout<<invconv<typename typP::value_type>(itercomp->poly[
i],serv)<<endl;
 
  892            cout<<
"--------------------********************"<<endl;
 
  898            cout<<
"la compo apres update"<<endl;
 
  899            for(
int i=0;
i<itercomp->poly.size();
i++)
 
  901            cout<<
"ind "<<itercomp->poly[
i].ind<<endl;
 
  902            copy(itercomp->exceed[
i],itercomp->exceed[
i]+itercomp->sizeexceed[
i],
 
  903             ostream_iterator<mon>(cout,
" + "));cout<<endl;
 
  904            cout<<invconv<typename typP::value_type>(itercomp->poly[
i],serv)<<endl;
 
  905            cout<<
"--------------------********************"<<endl;
 
  913      cout<<
"fin des updates "<<endl;
 
  915      cout<<
"apres update du crochet "<<endl;
 
  916      for(
int i=0;
i<crochet.poly.size();
i++)
 
  918          cout<<
"ind "<<crochet.poly[
i].ind<<endl;
 
  919          copy(crochet.exceed[
i],crochet.exceed[
i]+crochet.sizeexceed[
i],ostream_iterator<mon>(cout,
" + "));
 
  920          cout<<invconv<Poly>(crochet.poly[
i],serv)<<endl;
 
  927     cout<<
"indexinside "<<indexinside<<endl;
 
  930         indexinside+=verytmpMk.size();
 
  941   cout<<
"les pol apres process newpkmk"<<endl;
 
  942   for(
auto &
c : listcomp)
 
  943     for(
int i=0;
i<
c.poly.size();
i++)
 
  945     cout<<
"ind "<<
c.poly[
i].ind<<endl;
 
  946     copy(
c.exceed[
i],
c.exceed[
i]+
c.sizeexceed[
i],
 
  947          ostream_iterator<mon>(cout,
" + "));cout<<endl;
 
  948     cout<<invconv<typename typP::value_type>(
c.poly[
i],serv)<<endl;
 
  949     cout<<
"--------------------********************------------"<<endl;
 
  953   for(
auto c : listcomp)
 
  956     verytmpPk.push_back(p);
 
  957       for(
auto &p: 
c.exceed)
 
  958     exceed_ret.push_back(p);
 
  959       for(
auto &p: 
c.sizeexceed)
 
  962       sizeexceed_ret.push_back(p);
 
  966   cout<<
"apres reconstruction des Pk "<<endl;
 
  968   copy(sizeexceed_ret.begin(),sizeexceed_ret.end(),ostream_iterator<int>(cout,
" **--** "));cout<<endl;
 
  972    for(
auto &p : crochet.poly)
 
  975        verytmpPk.push_back(p);
 
  977    for(
auto &p : crochet.exceed)
 
  978      exceed_ret.push_back(p);
 
  979    for(
auto &p : crochet.sizeexceed)
 
  980      sizeexceed_ret.push_back(p);
 
  987       mon2col[m.rep]=indexmat++;
 
  990   cout<<
"avant updatematrix "<<endl;
 
  992   copy(sizeexceed_ret.begin(),sizeexceed_ret.end(),ostream_iterator<int>(cout,
" **--** "));cout<<endl;
 
  998   for(
auto c : listcomp)
 
 1001       indexmat+=
c.poly.size();
 
 1004   cout<<
"apres updatematrix"<<endl;
 
 1010    mat.nrow+=crochet.poly.size();
 
 1012  cout<<
"verytmp"<<endl;
 
 1013   for(
auto &p :verytmpPk)
 
 1014     cout<<invconv<typename typP::value_type>(p,serv)<<endl;
 
 1023 template<
typename typmat, 
typename typlistcomp, 
typename typmap>
 
 1026   typedef typename typmat::coeff_t coeff;
 
 1027   int *shiftcol=
new int[m.ncol], *addcol=
new int[m.ncol];
 
 1031   cout<<
"en entree"<<endl;
 
 1032   for(
int i=0;
i<m.nnz;
i++)
 
 1033     cout<<((coeff*)m.nzval)[
i]<<
"/"<<
i<<
" ";
 
 1035   for(
int i=0;
i<m.nnz;
i++)
 
 1036     cout<<m.rowind[
i]<<
"/"<<
i<<
" ";
 
 1038   cout<<
"----------------------------------------"<<endl;
 
 1040   for(
int i=0;
i<m.ncol;
i++)
 
 1043   for(
auto c : listcomp)
 
 1045       auto iterexceed=
c.exceed.begin();
 
 1046       auto itersizeexceed=
c.sizeexceed.begin();
 
 1047       auto iterpoly=
c.poly.begin();
 
 1048       for(;iterexceed!=
c.exceed.end();iterexceed++,itersizeexceed++, iterpoly++)
 
 1051       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1052         if (!
Iszero((*iterexceed)[
i].GetCoeff()))
 
 1054         shiftcol[mon2col[(*iterexceed)[
i].rep]]++;
 
 1062   m.nzval=MAC_REV_REALLOC<coeff>(m.nzval,m.nnz*
sizeof(coeff),
 
 1063                  (m.nnz+compnnz)*
sizeof(coeff));
 
 1064   m.rowind=(
int*)MAC_REV_REALLOC<int>((
int*)m.rowind,m.nnz*
sizeof(int),
 
 1065                       (m.nnz+compnnz)*
sizeof(int));
 
 1069   for(
int i=0;
i<m.ncol;
i++)
 
 1070     addcol[
i]=shiftcol[
i];
 
 1071   for(
int i=1;
i<m.ncol;
i++)
 
 1072       shiftcol[
i]+=shiftcol[
i-1];
 
 1074   for(
int i=m.ncol-1;
i>0;
i--)
 
 1076       for(
int j=m.colptr[
i+1]-1;
j>=m.colptr[
i];
j--)
 
 1079       ((coeff*)m.nzval)[
j+shiftcol[
i-1]]=((coeff*)m.nzval)[
j];
 
 1080       m.rowind[
j+shiftcol[
i-1]]=m.rowind[
j];
 
 1085   for(
auto c : listcomp)
 
 1087       auto iterexceed=
c.exceed.begin();
 
 1088       auto itersizeexceed=
c.sizeexceed.begin();
 
 1089       auto iterpoly=
c.poly.begin();
 
 1090       for(;iterexceed!=
c.exceed.end();iterexceed++,itersizeexceed++, iterpoly++,tmpligne++)
 
 1092       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1094           if(!
Iszero((*iterexceed)[
i].GetCoeff()))
 
 1096           int numcol=mon2col[(*iterexceed)[
i].rep];
 
 1097           m.rowind[m.colptr[numcol+1]+shiftcol[numcol]-1]=tmpligne;
 
 1098           ((coeff*)m.nzval)[m.colptr[numcol+1]+shiftcol[numcol]-- -1]=(*iterexceed)[
i].GetCoeff();
 
 1108   cout<<
"compnnz "<<compnnz<<endl;
 
 1109   for(
int i=0;
i<m.nnz;
i++)
 
 1110     cout<<((coeff*)m.nzval)[
i]<<
"/"<<
i<<
" ";
 
 1112   for(
int i=0;
i<m.nnz;
i++)
 
 1113     cout<<m.rowind[
i]<<
"/"<<
i<<
" ";
 
 1116   for(
int i=1;
i<m.ncol;
i++)
 
 1117     addcol[
i]+=addcol[
i-1];
 
 1118   for(
int i=1;
i<=m.ncol;
i++)
 
 1119     m.colptr[
i]+=addcol[
i-1];
 
 1124 template<
typename typmat, 
typename typcomp, 
typename typmap>
 
 1130   typedef typename typmat::coeff_t coeff;
 
 1131   auto iterexceed=c.exceed.begin();
 
 1132   auto itersizeexceed=c.sizeexceed.begin();
 
 1133   auto iterpoly=c.poly.begin();
 
 1135   for(;iterexceed!=c.exceed.end();iterexceed++,itersizeexceed++, iterpoly++,numligne++)
 
 1138       m.nzval=MAC_REV_REALLOC<coeff>(m.nzval,m.nnz*
sizeof(coeff),
 
 1139                     (m.nnz+*itersizeexceed)*
sizeof(coeff));
 
 1140       m.rowind=(
int*)MAC_REV_REALLOC<int>((
void*)m.rowind,m.nnz*
sizeof(int),
 
 1141                     (m.nnz+*itersizeexceed)*
sizeof(int));
 
 1142       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1145       if((*iterexceed)[
i].rep!=iterpoly->ind.rep)
 
 1148           for(
int j=m.nnz;
j>=m.colptr[mon2col[(*iterexceed)[
i].rep]+1];
j--)
 
 1150           ((coeff*)m.nzval)[
j]=((coeff*)m.nzval)[
j-1];
 
 1151           m.rowind[
j]=m.rowind[
j-1];
 
 1155           m.rowind[m.colptr[mon2col[(*iterexceed)[
i].rep]+1]]=indexmat+numligne;
 
 1159           ((coeff*)m.nzval)[m.colptr[mon2col[(*iterexceed)[
i].rep]+1]]=(*iterexceed)[
i].GetCoeff();
 
 1161           cout<<
"G ecrit "<<(*iterexceed)[
i].GetCoeff()<<endl;
 
 1162           cout<<
"en colonne "<<mon2col[(*iterexceed)[
i].rep]<<
" ligne "<<m.colptr[mon2col[(*iterexceed)[
i].rep]+1]<<
" "<<indexmat+numligne<<endl;
 
 1164           for(
int j=mon2col[(*iterexceed)[
i].rep]+1;
j<=m.ncol;
j++)
 
 1180 template <
typename typcomp, 
typename typserv>
 
 1181 void  update_pol(typcomp &comp_to_update,typcomp &updating_comp, typserv &serv)
 
 1183   typedef typename typcomp::typPk typPk;
 
 1184   typedef typename typserv::monom_t 
mon;
 
 1188   if(comp_to_update==updating_comp)
 
 1191   auto iterexceed=updating_comp.exceed.begin();
 
 1192   auto itersizeexceed=updating_comp.sizeexceed.begin();
 
 1193   auto iterpoly=updating_comp.poly.begin();
 
 1197   auto myitersize=updating_comp.sizeexceed.begin();
 
 1199   for(
auto &
i : updating_comp.poly)
 
 1200     cout<<
"ind qui update "<<
i.ind<<
" "<<*myitersize++<<endl;
 
 1202   myitersize=comp_to_update.sizeexceed.begin();
 
 1204   for(
auto &
i : comp_to_update.poly)
 
 1205     cout<<
"ind a up "<<
i.ind<<
" "<<*myitersize++<<endl;
 
 1208   map<typename mon::rep_t,resmul<typename typPk::value_type> > mon2pol;
 
 1209   for(;iterpoly!=updating_comp.poly.end();iterpoly++,iterexceed++,itersizeexceed++)
 
 1215       mon2pol[iterpoly->ind.rep]=tmp;
 
 1219   iterexceed=comp_to_update.
exceed.begin();
 
 1220   itersizeexceed=comp_to_update.sizeexceed.begin();
 
 1221   for(iterpoly=comp_to_update.poly.begin();
 
 1222     iterpoly!=comp_to_update.poly.end();
 
 1223     iterpoly++,iterexceed++,itersizeexceed++)
 
 1228       map<typename mon::rep_t,COEFF> exceedmap;
 
 1229       map<typename mon::rep_t,COEFF> nfmap;
 
 1232       int newsizenfind=iterpoly->sizenf;
 
 1236       for(
int i=0;
i<iterpoly->sizenf;
i++)
 
 1239       for(
int j=0;
j<8;
j++)
 
 1240         if(iterpoly->nfind[
i]>>
j&1)
 
 1243           serv.int2mon(8*
i+
j,tmp);
 
 1244           nfmap[tmp.
rep]=iterpoly->nf[pos_nf++];
 
 1247       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1251       if(!mon2pol.count((*iterexceed)[
i].rep))
 
 1252        exceedmap[(*iterexceed)[
i].rep]= 
 
 1253          (*iterexceed)[
i].GetCoeff();
 
 1255       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1257       if(mon2pol.count((*iterexceed)[
i].rep))
 
 1264           if(newsizenfind<tmpresmul.
poly.sizenf)
 
 1265         newsizenfind=tmpresmul.
poly.sizenf;
 
 1277           exceedmap[tmpresmul.
exceed[
j].rep]-=
 
 1278             tmpresmul.
exceed[
j].GetCoeff()*(*iterexceed)[
i].GetCoeff();
 
 1285         for(
int ii=0;ii<tmpresmul.
poly.sizenf;ii++)
 
 1286             if(tmpresmul.
poly.nfind)
 
 1288               for(
int j=0;
j<8;
j++)
 
 1289               if(tmpresmul.
poly.nfind[ii]>>
j&1)
 
 1294                   serv.int2mon(8*ii+
j,tmp);
 
 1296                   cout<<
"mon mis a jour "<<tmp<<
" "<<tmpresmul.
poly.
nf[pos_nfiter]<<endl;
 
 1297                   cout<<
"nfmap "<<nfmap[tmp.
rep]<<endl;
 
 1298                   cout<<tmpresmul.
poly.
nf[pos_nfiter]<<endl;
 
 1299                   cout<<(*iterexceed)[
i].GetCoeff()<<endl;
 
 1300                   cout<<coeff_t(0)-tmpresmul.
poly.
nf[pos_nfiter]
 
 1301                                      *(*iterexceed)[
i].GetCoeff()<<endl;
 
 1302                   cout<<nfmap[tmp.
rep]-tmpresmul.
poly.
nf[pos_nfiter]
 
 1303                                      *(*iterexceed)[
i].GetCoeff()<<endl;
 
 1305                   nfmap[tmp.
rep]-=tmpresmul.
poly.
nf[pos_nfiter]
 
 1306                 *(*iterexceed)[
i].GetCoeff();
 
 1313           cout<<
"exceed apres"<<endl;
 
 1314           for(
auto &i : exceedmap)
 
 1315         cout<<i.first<<
" "<<i.second<<
" ";
 
 1317           cout<<
"nf apres"<<endl;
 
 1318           for(
auto &i : nfmap)
 
 1319         cout<<i.first<<
" "<<i.second<<
" ";
 
 1325       cout<<
"nfmap.size() "<<nfmap.size()<<endl;
 
 1326       cout<<
"newsizenfind "<<newsizenfind<<
" "<<(
void*)iterpoly->nfind<<endl;
 
 1328       *iterexceed=(mon*)MAC_REV_REALLOC<mon>(*iterexceed,*itersizeexceed*
sizeof(
mon)
 
 1329                          ,exceedmap.size()*
sizeof(
mon));
 
 1330       iterpoly->nfind=(
unsigned char *)realloc(iterpoly->nfind,newsizenfind);
 
 1331       if(iterpoly->size != nfmap.size())
 
 1332        iterpoly->nf=(coeff_t*)MAC_REV_REALLOC<coeff_t>(iterpoly->nf,
 
 1333                         iterpoly->size*
sizeof(coeff_t),
 
 1334                     nfmap.size()*
sizeof(coeff_t));
 
 1335       for(
int k=0;k<newsizenfind;k++)
 
 1336     iterpoly->nfind[k]=0;
 
 1337       for(
auto iter : nfmap)
 
 1341     int place=serv.mon2int(m);
 
 1342     iterpoly->nfind[place/8]|=(1<<(place%8));
 
 1345       for(
int k=0;k<newsizenfind;k++)
 
 1347     if(iterpoly->nfind[k])
 
 1349       for(
int kk=0;kk<8;kk++)
 
 1350         if((iterpoly->nfind[k]>>kk)&1)
 
 1353            serv.int2mon(8*k+kk,m);
 
 1354            iterpoly->nf[posnf++]=nfmap[m.
rep];
 
 1358       iterpoly->size=nfmap.size();
 
 1359       iterpoly->sizenf=newsizenfind;
 
 1360       for(
auto iter : exceedmap)
 
 1363       tmpmon.
rep=iter.first;
 
 1364       tmpmon.
coeff=iter.second;
 
 1365       (*iterexceed)[k++]=tmpmon;
 
 1367       *itersizeexceed=exceedmap.size();
 
 1371 template <
typename typcomp, 
typename typserv>
 
 1375   update_pol(comp_to_update,updating_comp,w,serv);
 
 1378 template <
typename typcomp, 
typename typwork, 
typename typserv>
 
 1379 void  update_pol(typcomp &comp_to_update,typcomp &updating_comp, typwork &w,
 
 1382   typedef typename typcomp::typPk typPk;
 
 1383   typedef typename typserv::monom_t 
mon;
 
 1387   if(comp_to_update==updating_comp)
 
 1390   auto iterexceed=updating_comp.exceed.begin();
 
 1391   auto itersizeexceed=updating_comp.sizeexceed.begin();
 
 1392   auto iterpoly=updating_comp.poly.begin();
 
 1396   auto myitersize=updating_comp.sizeexceed.begin();
 
 1398   for(
auto &
i : updating_comp.poly)
 
 1399     cout<<
"ind qui update "<<
i.ind<<
" "<<*myitersize++<<endl;
 
 1401   myitersize=comp_to_update.sizeexceed.begin();
 
 1403   for(
auto &
i : comp_to_update.poly)
 
 1404     cout<<
"ind a up "<<
i.ind<<
" "<<*myitersize++<<endl;
 
 1407   map<typename mon::rep_t,resmul<typename typPk::value_type> > mon2pol;
 
 1408   for(;iterpoly!=updating_comp.poly.end();iterpoly++,iterexceed++,itersizeexceed++)
 
 1414       mon2pol[iterpoly->ind.rep]=tmp;
 
 1418   iterexceed=comp_to_update.
exceed.begin();
 
 1419   itersizeexceed=comp_to_update.sizeexceed.begin();
 
 1420   for(iterpoly=comp_to_update.poly.begin();
 
 1421     iterpoly!=comp_to_update.poly.end();
 
 1422     iterpoly++,iterexceed++,itersizeexceed++)
 
 1427       map<typename mon::rep_t,COEFF> exceedmap;
 
 1428       map<typename mon::rep_t,COEFF> nfmap;
 
 1431       int newsizenfind=iterpoly->sizenf;
 
 1435       for(
int i=0;
i<iterpoly->sizenf;
i++)
 
 1438       w.tabnf[
i]=iterpoly->nfind[
i];
 
 1439       tabfun1[w.tabnf[
i]](w.tabcoeff+(8*
i),iterpoly->nf+pos_nf);
 
 1440       pos_nf+=
nbbits[iterpoly->nfind[
i]];
 
 1442       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1446       if(!mon2pol.count((*iterexceed)[
i].rep))
 
 1447        exceedmap[(*iterexceed)[
i].rep]= 
 
 1448          (*iterexceed)[
i].GetCoeff();
 
 1450       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1452       if(mon2pol.count((*iterexceed)[
i].rep))
 
 1457           if(newsizenfind<tmpresmul.
poly.sizenf)
 
 1458         newsizenfind=tmpresmul.
poly.sizenf;
 
 1461           exceedmap[tmpresmul.
exceed[
j].rep]-=
 
 1462             tmpresmul.
exceed[
j].GetCoeff()*(*iterexceed)[
i].GetCoeff();
 
 1465         for(
int ii=0;ii<tmpresmul.
poly.sizenf;ii++)
 
 1466             if(tmpresmul.
poly.nfind)
 
 1468             coeff_t tmp=(*iterexceed)[
i].GetCoeff();    
 
 1469             w.tabnf[ii]=tmpresmul.
poly.nfind[ii];
 
 1470             tabfun2[w.tabnf[ii]](w.tabcoeff+(8*ii),
 
 1472                 tmpresmul.
poly.
nf+pos_nfiter);
 
 1473             pos_nfiter+=
nbbits[tmpresmul.
poly.nfind[ii]];
 
 1477           cout<<
"exceed apres"<<endl;
 
 1478           for(
auto &i : exceedmap)
 
 1479         cout<<i.first<<
" "<<i.second<<
" ";
 
 1481           cout<<
"nf apres"<<endl;
 
 1482           for(
auto &i : nfmap)
 
 1483         cout<<i.first<<
" "<<i.second<<
" ";
 
 1489       cout<<
"newsizenfind "<<newsizenfind<<
" "<<(
void*)iterpoly->nfind<<endl;
 
 1490       cout<<
"w.sizenf "<<w.sizenf<<endl;
 
 1492       *iterexceed=(mon*)MAC_REV_REALLOC<mon>(*iterexceed,*itersizeexceed*
sizeof(
mon)
 
 1493                          ,exceedmap.size()*
sizeof(
mon));
 
 1494       iterpoly->nfind=(
unsigned char *)realloc(iterpoly->nfind,newsizenfind);
 
 1496       for(
int i=0;
i<w.sizenf;newsize+=
nbbits[w.tabnf[
i++]]);
 
 1497        iterpoly->nf=(coeff_t*)MAC_REV_REALLOC<coeff_t>(iterpoly->nf,
 
 1498                         iterpoly->size*
sizeof(coeff_t),
 
 1499                     newsize*
sizeof(coeff_t));
 
 1500       for(
int k=0;k<newsizenfind;k++)
 
 1502       iterpoly->nfind[
k]=w.tabnf[
k];
 
 1505       for(
int k=0;k<newsize;k++)
 
 1507     iterpoly->nf[
k]=w.tabcoeff[
k];
 
 1510       iterpoly->size=newsize;
 
 1511       iterpoly->sizenf=newsizenfind;
 
 1512       for(
auto iter : exceedmap)
 
 1515       tmpmon.
rep=iter.first;
 
 1516       tmpmon.
coeff=iter.second;
 
 1517       (*iterexceed)[k++]=tmpmon;
 
 1519       *itersizeexceed=exceedmap.size();
 
 1522 template <
typename typcomp, 
typename typmon2pol, 
typename typserv>
 
 1524     const typmon2pol &mon2pol, 
const typserv &serv)
 
 1531   for(
auto &p : updating_comp.poly)
 
 1533   update_pol(comp_to_update,updating_comp,mon2pol,w,serv);
 
 1536 template <
typename typcomp, 
typename typmon2pol, 
typename typwork, 
typename typserv>
 
 1537 void  update_pol(typcomp &comp_to_update,
const typcomp &updating_comp, 
 
 1538     const typmon2pol &mon2pol, typwork &w, 
const typserv &serv)
 
 1540   typedef typename typcomp::typPk typPk;
 
 1541   typedef typename typserv::monom_t 
mon;
 
 1545   if(comp_to_update==updating_comp)
 
 1548   auto iterexceed=comp_to_update.exceed.begin();
 
 1549   auto itersizeexceed=comp_to_update.sizeexceed.begin();
 
 1550   auto iterpoly=comp_to_update.poly.begin();
 
 1554   auto myitersize=updating_comp.sizeexceed.begin();
 
 1556   for(
auto &
i : updating_comp.poly)
 
 1557     cout<<
"ind qui update "<<
i.ind<<
" "<<*myitersize++<<endl;
 
 1559   myitersize=comp_to_update.sizeexceed.begin();
 
 1561   for(
auto &
i : comp_to_update.poly)
 
 1562     cout<<
"ind a up "<<
i.ind<<
" "<<*myitersize++<<endl;
 
 1565   iterexceed=comp_to_update.exceed.begin();
 
 1566   itersizeexceed=comp_to_update.sizeexceed.begin();
 
 1567   for(iterpoly=comp_to_update.poly.begin();
 
 1568     iterpoly!=comp_to_update.poly.end();
 
 1569     iterpoly++,iterexceed++,itersizeexceed++)
 
 1574       map<typename mon::rep_t,COEFF> exceedmap;
 
 1577       int newsizenfind=iterpoly->sizenf;
 
 1581       for(
int i=0;
i<iterpoly->sizenf;
i++)
 
 1584       w.tabnf[
i]=iterpoly->nfind[
i];
 
 1585       tabfun1[w.tabnf[
i]](w.tabcoeff+(8*
i),iterpoly->nf+pos_nf);
 
 1586       pos_nf+=
nbbits[iterpoly->nfind[
i]];
 
 1588       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1592       if(!mon2pol.count((*iterexceed)[
i].rep))
 
 1593        exceedmap[(*iterexceed)[
i].rep]= 
 
 1594          (*iterexceed)[
i].GetCoeff();
 
 1596       for(
int i=0;
i<*itersizeexceed;
i++)
 
 1598       if(mon2pol.count((*iterexceed)[
i].rep))
 
 1603                              mon2pol.find((*iterexceed)[i].rep)->second;
 
 1604           if(newsizenfind<tmpresmul.
poly.sizenf)
 
 1605         newsizenfind=tmpresmul.
poly.sizenf;
 
 1608           exceedmap[tmpresmul.
exceed[
j].rep]-=
 
 1609             tmpresmul.
exceed[
j].GetCoeff()*(*iterexceed)[
i].GetCoeff();
 
 1612         for(
int ii=0;ii<tmpresmul.
poly.sizenf;ii++)
 
 1613             if(tmpresmul.
poly.nfind[ii])
 
 1615             coeff_t tmp=(*iterexceed)[
i].GetCoeff();    
 
 1616             w.tabnf[ii]|=tmpresmul.
poly.nfind[ii];
 
 1618             tabfun2[tmpresmul.
poly.nfind[ii]](w.tabcoeff+(8*ii),
 
 1620                      tmpresmul.
poly.
nf+pos_nfiter);
 
 1621             pos_nfiter+=
nbbits[tmpresmul.
poly.nfind[ii]];
 
 1627       cout<<
"newsizenfind "<<newsizenfind<<
" "<<(
void*)iterpoly->nfind<<endl;
 
 1628       cout<<
"w.sizenf "<<w.sizenf<<endl;
 
 1630       *iterexceed=(mon*)MAC_REV_REALLOC<mon>(*iterexceed,*itersizeexceed*
sizeof(
mon)
 
 1631                          ,exceedmap.size()*
sizeof(
mon));
 
 1632       iterpoly->nfind=(
unsigned char *)realloc(iterpoly->nfind,newsizenfind);
 
 1634       for(
int i=0;
i<w.sizenf;newsize+=
nbbits[w.tabnf[
i++]]);
 
 1635        iterpoly->nf=(coeff_t*)MAC_REV_REALLOC<coeff_t>(iterpoly->nf,
 
 1636                         iterpoly->size*
sizeof(coeff_t),
 
 1637                     newsize*
sizeof(coeff_t));
 
 1639        cout<<
"newsize "<<newsize<<endl;
 
 1641        for(
int k=0;k<newsizenfind;k++)
 
 1643       iterpoly->nfind[
k]=w.tabnf[
k];
 
 1652        for(
int k=0;k<newsizenfind;k++)
 
 1654        if(iterpoly->nfind[k])
 
 1656            for(
int j=0;
j<8;
j++)
 
 1657          if((iterpoly->nfind[k]>>
j)&1)
 
 1659              iterpoly->nf[tmpcompt++]=w.tabcoeff[8*k+
j];
 
 1660              w.tabcoeff[8*k+
j]=0;
 
 1664       iterpoly->size=newsize;
 
 1665       iterpoly->sizenf=newsizenfind;
 
 1667       cout<<
"exceed apres "<<exceedmap.size()<<endl;
 
 1668       for(
auto &
i : exceedmap)
 
 1669     cout<<
i.first<<
" "<<
i.second<<
" ";
 
 1672       for(
auto iter : exceedmap)
 
 1675       tmpmon.
rep=iter.first;
 
 1676       tmpmon.
coeff=iter.second;
 
 1677       (*iterexceed)[k++]=tmpmon;
 
 1679       *itersizeexceed=exceedmap.size();
 
 1686 template<
typename typMat>
 
 1689   typedef typename typMat::coeff_t coeff_t;
 
 1691   cout<<
"la petitee "<<tmpmat.nnz<<endl;
 
 1693   cout<<
"la grosse "<<endl;
 
 1697   mat.colptr=(
int *)realloc(mat.colptr,(mat.ncol+tmpmat.ncol+1)*
sizeof(int));
 
 1698   mat.nzval=MAC_REV_REALLOC<coeff_t>(mat.nzval,mat.nnz*
sizeof(coeff_t),
 
 1699     (mat.nnz+tmpmat.nnz)*
sizeof(coeff_t));
 
 1700   mat.rowind=(
int *)realloc(mat.rowind,(mat.nnz+tmpmat.nnz)*
sizeof(int));
 
 1702   for(
int i=0;
i<=tmpmat.ncol;
i++)
 
 1703     mat.colptr[mat.ncol+
i]=mat.nnz+tmpmat.colptr[
i];
 
 1705   for(
int i=0;
i<tmpmat.nnz;
i++)
 
 1706     mat.rowind[mat.nnz+
i]=mat.nrow+tmpmat.rowind[
i];
 
 1708   for(
int i=0;
i<tmpmat.nnz;
i++)
 
 1709     ((coeff_t *)mat.nzval)[mat.nnz+
i]=((coeff_t *)tmpmat.nzval)[
i];
 
 1710   mat.ncol+=tmpmat.ncol;
 
 1711   mat.nrow+=tmpmat.nrow;
 
 1712   mat.nnz+=tmpmat.nnz;
 
 1714    cout<<
"dans reconstruct mat.ncol en sortie "<<mat.ncol<<endl;
 
 1715    cout<<
"dans reconstruct mat.nrow en sortie "<<mat.nrow<<endl;
 
 1722   for(
int i=0;
i<sizetmp;
i++)
 
 1723     pr[
i+indexinside]=tmppr[
i]+indexinside;
 
 1725   for(
int i=0;
i<sizetmp;
i++)
 
 1726     pc[
i+indexinside]=tmppc[
i]+indexinside;
 
 1729 template<
typename typMat,
typename typP,
typename typPk,
typename typMk, 
typename Base,
typename typdump, 
class monomial_server, 
typename workspace>
 
 1730 void init_algo(typP &P,
int &nouveaumon, 
int &maxdeg, 
int & 
k,
 
 1731            typPk &Pk, typMk & Mk, 
Base & b, typdump & dump, 
workspace &w,
 
 1734 template<
typename typP,
typename typPk,
typename typdump,
typename Base 
 1735      , 
template<
typename  T> 
class tmptypmat ,
 
 1740   typedef typename typP::value_type polyalp;
 
 1741   typedef list<typename typPk::value_type::monom_t> typMk;
 
 1743   typedef typename typPk::value_type 
pol;
 
 1750   typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
 
 1752   int nouveaumon,allpolused=0,maxdeg,
k,*pr,*pc;
 
 1753   vector<typename typMk::value_type*> exceed;
 
 1754   list<int> sizeexceed;
 
 1757   init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv);
 
 1764     while(nouveaumon||(k<=maxdeg))
 
 1771  for(
typename typPk::iterator iter=S.begin();iter!=S.end();iter++)
 
 1774     cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;       
 
 1777 #if 0//ICICICICICICICICICICCII 
 1778 cout<<
"poly a la fin de la boulcle de l'algo "<<Pk.size()<<endl;
 
 1779 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
 
 1782    cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;       
 
 1784     cout<<endl<<
"newpkmkmatrixof"<<endl;
 
 1788 #if 0//ICICICICICICICICCI 
 1789     cout<<
"poly apres solve (attention exceed)"<<endl;
 
 1790     copy(sizeexceed.begin(),sizeexceed.end(),ostream_iterator<int>(cout,
" *** "));cout<<endl;
 
 1791     for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
 
 1794     cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;       
 
 1797     if(killspol) S.erase(S.begin(),S.end());
 
 1798     if (k+1>=maxdeg) allpolused=1;
 
 1799     if(Mk.size()==0) nouveaumon=0;
 
 1804     if ((
unsigned)my_rank(Mat)==Mk.size())
 
 1808     typMk tmpSpoldejavu;
 
 1809     typPk redspol,secd=secondmembre(Mat,Pk);;
 
 1812     cout<<
"matrice de rang plein "<<endl;
 
 1817     cout<<
"secd/size() "<<secd.size()<<endl;
 
 1820     cout<<
"redspol.size "<<redspol.size()<<endl;
 
 1821     if(redspol.size()==0)
 
 1824         my_merge(Spoldejavu,tmpSpoldejavu);
 
 1834         int tmpdeg=
mindeg(redspol,serv);
 
 1837         cout<<
"redspol.size() "<<redspol.size()<<endl;
 
 1840           my_merge(Spoldejavu,tmpSpoldejavu);
 
 1846         cout<<
"debut newcrochetchoix"<<endl;
 
 1848         cout<<
"fin newcrochetchoix"<<endl;
 
 1851         serv.compress(Pk,dump,b,k);
 
 1864     cout<<
"matrice de rang pas plein "<<endl;
 
 1868     cout<<
"avant addB "<<Pk.size()<<endl;
 
 1869     auto iterexceed=exceed.begin();
 
 1870     auto itersizeexceed=sizeexceed.begin();
 
 1871     for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++,iterexceed++,itersizeexceed++)
 
 1873         cout<<
"ind "<<iter->ind<<
" est sikzeexceed "<<*itersizeexceed<<endl;
 
 1874         copy(*iterexceed,*iterexceed+*itersizeexceed,ostream_iterator<mon>(cout,
" + "));
 
 1876         cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;       
 
 1879     AddB(Mat,Pk,Mk,exceed,sizeexceed,dump,b,serv);
 
 1881     cout<<
"apres addB "<<Pk.size()<<endl;
 
 1882     for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
 
 1884         cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;       
 
 1891     secd=secondmembre(Mat,Pk);
 
 1906 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
 
 1907       P.push_back(invconv<polyalp>(*iter));
 
 1909        if(redspol.size()==0)
 
 1924            cout<<
"il ya un passage par mat rang pas" 
 1925                <<
"plein et pol non zero"<<endl;
 
 1928            serv.compress(Pk,dump,b,k);
 
 1950 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
 
 1951          P.push_back(invconv<polyalp>(*iter));
 
 1957         cout<<
"poly avant newcrochetchoix (attention exceed)"<<endl;
 
 1958         copy(sizeexceed.begin(),sizeexceed.end(),ostream_iterator<int>(cout,
" *** "));cout<<endl;
 
 1959         for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
 
 1962         cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;       
 
 1968         cout<<
"poly apres newcrochetchoix (attention exceed)"<<endl;
 
 1969         copy(sizeexceed.begin(),sizeexceed.end(),ostream_iterator<int>(cout,
" *** "));cout<<endl;
 
 1970         for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
 
 1973         cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;       
 
 1978        serv.compress(Pk,dump,b,k);
 
 1994   cout<<
"sortie d'algo flash et dimension "<<endl;
 
 2003 template<
typename mon, 
typename T,
typename Base ,
typename monomial_server>
 
 2013     for(
int j=0;
j<8;
j++)
 
 2020         tmp.erase(tmp.begin(),tmp.end());
 
 2026         tmp.push_back(tmpmon);
 
 2036 template<
typename mon, 
typename T,
typename Base, 
typename monomial_server>
 
 2046     for(
int j=0;
j<8;
j++)
 
 2053         tmp.erase(tmp.begin(),tmp.end());
 
 2059         tmp.push_back(tmpmon);
 
 2065   for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
 
 2067       if(m.
GetCoeff()<itertmp->GetCoeff()) {m=*itertmp;};
 
 2076 template<
typename mon, 
typename T,
typename Base, 
typename monomial_server>
 
 2087     for(
int j=0;
j<8;
j++)
 
 2095           tmp.erase(tmp.begin(),tmp.end());
 
 2101           tmp.push_back(tmpmon);
 
 2106   for(;tmp.front().GetCoeff()==0;tmp.pop_front());
 
 2108   for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
 
 2110       if((itertmp->GetCoeff()!=0) && (
my_ord(*itertmp,m)<0)) {m=*itertmp;};
 
 2116 template<
typename mon, 
typename T,
typename Base, 
typename monomial_server>
 
 2126     for(
int j=0;
j<8;
j++)
 
 2133           tmp.erase(tmp.begin(),tmp.end());
 
 2139           tmp.push_back(tmpmon);
 
 2145   for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
 
 2147       if(
my_ord(*itertmp,m)>0) {m=*itertmp;};
 
 2154 template<
typename mon, 
typename T,
typename Base, 
typename monomial_server>
 
 2164     for(
int j=0;
j<8;
j++)
 
 2171           tmp.erase(tmp.begin(),tmp.end());
 
 2177           tmp.push_back(tmpmon);
 
 2183   for(
typename list<mon>::iterator itertmp=tmp.begin();itertmp!=tmp.end();itertmp++)
 
 2186       for(
int i=0;
i<=
lvar(itertmp->rep);
i++)
 
 2188       if(itertmp->GetDegree(
i)>=maxtmpdeg)
 
 2199 template<
typename mon, 
typename T,
typename Base, 
typename monomial_server>
 
 2208       for(
int j=0;
j<8;
j++)
 
 2214         __mpz_struct  *numref,*denref;
 
 2215         numref=mpq_numref(&(p.
nf[
k].rep()));
 
 2216         denref=mpq_denref(&(p.
nf[
k].rep()));
 
 2217         if(mpz_size(numref)+
 
 2218            mpz_size(denref)<mini) 
 
 2220             mini=mpz_size(mpq_numref(&(p.
nf[
k].rep())))+
 
 2221               mpz_size(mpq_denref(&(p.
nf[
k].rep())));
 
 2224             stockmon=tmpmon*p.
nf[
k];
 
 2233 template<
typename mon, 
typename T, 
typename Base, 
typename monomial_server>
 
 2246   cout<<
"Degree(p) "<<degp<<endl;
 
 2250       for(
int j=0;
j<8;
j++)
 
 2255           tmplist.push_back(tmpmon*p.
nf[k]);
 
 2259   for(
typename list<mon>::iterator iterlist=tmplist.begin()
 
 2260     ;iterlist!=tmplist.end();iterlist++)
 
 2262       for(iterb=b.
begin();iterb!=b.
end();iterb++)
 
 2265       for(
int i=0;i<iterb->taille1;i++)
 
 2268       for(
int i=0;i<iterb->taille2;i++)
 
 2274           for(
int i=0;i<iterb->taille2;i++)
 
 2276           mon m=
lcm(*iterlist,iterb->refuse[i]);
 
 2278           for(
int j=0;
j<iterb->taille2;
j++)
 
 2298   cout<<
"le pol "<<invconv<Poly>(p,serv)<<endl<<
"le mon choisi "<<res<<endl;
 
 2303 template<
typename typdump,
typename Base,
typename mon, 
 
 2310   static const mon monzero=
mon(0);
 
 2311   static COEFF zero=0;
 
 2314   (*exce)=(
mon*)MAC_REV_MALLOC<mon>((p.
size+1)*
sizeof(
mon));
 
 2315   int *stockindicetab=(
int*)
malloc(p.
size*
sizeof(
int));
 
 2316   int noquo=0,maxind=0,pp=0,q=0;
 
 2320       init_pointer<COEFF>();
 
 2321       flag=0;cout<<
"pouet pouet"<<endl;
 
 2325   cout<<
"ds mult je traite "<<p.
ind<<
" ---- "<<i<<endl;
 
 2326   cout<<invconv<Poly>(p,serv)<<endl;
 
 2327   cout<<
"p.size "<<p.size<<endl;
 
 2329   for(
int j=0;
j<p.sizenf;++
j)
 
 2332        for(
int k=0;
k<8;
k++)
 
 2333      if((p.nfind[
j]>>
k)&1)
 
 2335          int stockindice2=serv.
mulind(8*
j+
k,i,b);
 
 2337            stockindice2=-1*(8*
j+
k)-1;
 
 2338          stockindicetab[pp++]=stockindice2;
 
 2339          if (stockindice2>=maxind)
 
 2340            maxind=stockindice2;
 
 2341          cout<<
"stockindice2 "<<8*
j+
k<<
" "<<i<<stockindice2<<endl;
 
 2345   for(
int j=0;
j<pp;
j++)
 
 2346     if(stockindicetab[
j]>=0)
 
 2350       w.
tabnf[stockindicetab[j]/8]|=1<<(stockindicetab[j]%8);
 
 2355     tmp=serv.nf(i,-1*(stockindicetab[
j]+1),dump,b);
 
 2361           unsigned long *tmpptr=(
unsigned long*)tmp.nfind;
 
 2362           unsigned long mask=1;
 
 2365           for(k=0;k<tmp.sizenf/
sizeof(
unsigned long);k++)
 
 2369             ((
unsigned long*)w.
tabnf)[
k]|=mask;
 
 2370             for(l=0;l<8*sizeof(unsigned long);l+=8,mask>>=8)
 
 2375                           w.
tabcoeff+(8*
sizeof(
unsigned long)*k+l)
 
 2376                           ,&(p.nf[
j]),tmp.
nf+compteurtmp);
 
 2377                 compteurtmp+=
nbbits[mask&255];
 
 2380                 for(
int m=0;m<8;m++)
 
 2382                 ((
unsigned long*)w.
tabnf)[
k]&=~(1<<(l+m));
 
 2387           for(k=tmp.sizenf-(tmp.sizenf%
sizeof(
unsigned long))
 
 2393             for(l=0;l<8;l++,mask<<=1)
 
 2395                 if(tmp.nfind[k]&mask)
 
 2408           (*exce)[noquo]=
mon(i,1);
 
 2409           serv.
int2mon(-1*(stockindicetab[
j]+1),tmpmon);
 
 2410           (*exce)[noquo]*=tmpmon;
 
 2411           (*exce)[noquo]*=p.nf[
j];
 
 2417   ret.ancestor=p.ancestor;
 
 2421   (*exce)[noquo++]=ret.
ind;
 
 2423   (*exce)=(
mon*)MAC_REV_REALLOC<mon>((*exce),(p.size+1)*
sizeof(
mon)
 
 2424                    ,(noquo)*
sizeof(
mon));
 
 2431     for(
int m=0;m<8;m++)
 
 2442   ret.nfind=(
unsigned char *)
malloc(ret.sizenf);
 
 2444   for(
int j=0;
j<ret.sizenf;
j++)
 
 2447     for(
int k=0;
k<8;
k++)
 
 2456   free(stockindicetab);
 
 2458   cout<<
"en sortie"<<endl;
 
 2459   cout<<invconv<Poly>(ret,serv)<<endl;
 
 2460   copy(*exce,*exce+exsize,ostream_iterator<mon>(cout,
" + "));cout<<endl;
 
 2461   cout<<
"----------"<<endl;
 
 2468 template<
typename typmat,
typename typPk, 
typename typMk,
typename typdump,
 
 2470      void AddB(
const typmat & mat, typPk & Pk,
const typMk &Mk,
const typexceed & exceed,
 
 2471            const typsizeexceed & sizeexceed, 
const typdump & dump,
 
 2474   typedef typename typPk::value_type 
pol;
 
 2477   typename typPk::iterator iterpk=Pk.begin();;
 
 2478   auto iterexceed=exceed.begin();
 
 2479   auto itersizeexceed=sizeexceed.begin();
 
 2481   typename typMk::const_iterator iter=Mk.begin();
 
 2482   int r=my_rank(mat),comprefuse=0,compaccept=0;
 
 2487   tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(r*
sizeof(mon));
 
 2489   tmp.
accept=(mon*)MAC_REV_MALLOC<mon>((Mk.size()-
r)*
sizeof(mon));
 
 2494   for(i=0;i<Mk.size();i++,iter++)
 
 2498       tmp.
accept[compaccept++]=*iter;
 
 2503       tmp.
refuse[comprefuse++]=*iter;
 
 2506   b.
def.push_back(tmp);
 
 2515   for(
unsigned int i=0;i<Pk.size();i++,iterpk++,iter++,iterexceed++,itersizeexceed++)
 
 2517       vector<sortstruct<coeff_t> > decal;
 
 2520       for(
int j=0;
j<*itersizeexceed;
j++)
 
 2521     if(!
Iszero((*iterexceed)[
j].GetCoeff()))
 
 2527         maxindex=
max(maxindex,serv.
mon2int((*iterexceed)[
j]));
 
 2529         tmp.
coeff=(*iterexceed)[
j].GetCoeff();
 
 2530         decal.push_back(tmp);
 
 2534       if(decal.empty()) 
continue;
 
 2537     MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
 
 2540       if((maxindex/8)>=iterpk->sizenf)
 
 2542       iterpk->nfind=(
unsigned char*)
 
 2543         MAC_REV_REALLOC<unsigned char>(iterpk->nfind
 
 2544                        ,iterpk->sizenf,maxindex/8+1);
 
 2545       for(
int i=iterpk->sizenf;i<maxindex/8+1;i++)
 
 2547       iterpk->sizenf=maxindex/8+1;
 
 2553        int nbcoeff=iterpk->size-1;
 
 2555        for(
int j=iterpk->sizenf-1;
j>=0;
j--)
 
 2558           if(8*
j>decal.rbegin()->index)
 
 2559             for (
int jj=0;jj<
nbbits[iterpk->nfind[
j]];jj++)
 
 2561                 iterpk->nf[nbcoeff+decal.size()]=
 
 2562                   iterpk->nf[nbcoeff];
 
 2567               int indexnf=decal.back().index;
 
 2568               typename typMk::value_type tmpmon;
 
 2571               while(8*
j<=decal.back().index)
 
 2573               indexnf=decal.back().index % 8;
 
 2574               for (;jj>(indexnf);jj--)
 
 2575               if(iterpk->nfind[
j]&(1<<jj))
 
 2577                  iterpk->nf[nbcoeff+decal.size()]=
 
 2578                  iterpk->nf[nbcoeff];
 
 2584               iterpk->nf[nbcoeff+decal.size()]=decal.back().coeff;
 
 2585               iterpk->nfind[
j]|=(1<<(indexnf));
 
 2592             if(decal.empty()) 
break;
 
 2595               if(iterpk->nfind[
j]&(1<<jj))
 
 2597                  iterpk->nf[nbcoeff+decal.size()]=
 
 2598                         iterpk->nf[nbcoeff];
 
 2601             if(decal.empty()) 
break;
 
 2605        iterpk->size+=expend;
 
 2606        MAC_REV_FREE<mon>(*iterexceed,*itersizeexceed*
sizeof(
mon));
 
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
 
Definition: dlexorder.hpp:4
 
Definition: workspace.hpp:11
 
T coeff
Definition: IsinB3.hpp:232
 
mon choice_grevlex(const pol2ter< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2077
 
void wrap_update_pol(typcomp &comp_to_update, typcomp &updating_comp, typserv &serv)
Definition: pol2terspecial.hpp:1372
 
Definition: pol2terspecial.hpp:36
 
void compute_newpol(typPk &Pk, typPk &tmpPk, typMk &tmpMk, typdump &dump, typexceed &exceed, typsizeexceed &sizeexceed, Base &b, int &k, typrecall &recall, typwork &w, typserv &serv)
Definition: corealgo3.hpp:1323
 
void tarjan(typgraph &G, typvec &vec)
Definition: pol2terspecial.hpp:263
 
void AddB(const typmat &mat, typPk &Pk, const typMk &Mk, const typexceed &exceed, const typsizeexceed &sizeexceed, const typdump &dump, typB &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2470
 
void affdebug(const typmat &m)
Definition: io.hpp:30
 
#define max(a, b)
Definition: alp_f2c.H:167
 
unsigned char * nfind
Definition: pol2ter.hpp:22
 
list< polbis< mono, T > > & Solve(typmat &S, std::list< polbis< mono, T > > &TildePk, int **pr, int **pc, workspace &w)
Definition: pol2bisspecial.hpp:609
 
void treat_noempty_crochet(typP &P, typttmpP &ttmpP, typPk &tmpPk, typMk &tmpMk, typPk &Pk, typMk &Mk, typdump &dump, Base &b, int &flagdoplus, int &k, typrecall &recall, typexceed &exceed, typsizeexceed &sizeexceed, typserv &serv)
Definition: corealgo3.hpp:1251
 
int mon2int(const mon &mm)
Definition: placemon3.hpp:679
 
int isdivisible(const mon &m1, const mon &m2, int nbvar)
Definition: isdivisible.hpp:5
 
void compute_ancestors(typPk &tmpPk, Base &b)
Definition: pol2terspecial.hpp:62
 
int lvar(const dynamicexp< X, E > &A)
Definition: dynamicexp.hpp:178
 
pol::coeff_t coeff
Definition: pol2terspecial.hpp:40
 
Base< predicat< mon > > typB
Definition: solver_bb_floating.cpp:142
 
pol_t::monom_t mon
Definition: pol2terspecial.hpp:21
 
C GetCoeff() const 
Definition: Monom.hpp:67
 
int sizeexceed
Definition: pol2terspecial.hpp:24
 
long nextdim(std::vector< int > &coeff_mac, int k)
Definition: macaulay.hpp:45
 
bool operator==(const component< typPk_t, mon > &a, const component< typPk_t, mon > &b)
Definition: pol2terspecial.hpp:47
 
void my_merge(T &l1, const T &l2)
Definition: corealgo.hpp:35
 
mon * exceed
Definition: pol2terspecial.hpp:31
 
pol poly
Definition: pol2terspecial.hpp:22
 
int newpkmkMatrixofSolve(typMat &mat, typMat &L, typPk &Pk, typP &P, typMk &Mk, int &k, Base &b, typdump &dump, typexceed &exceed_ret, typsizeexceed &sizeexceed_ret, workspace &w, monomial_server &serv)
Definition: pol2terspecial.hpp:495
 
void reconstruct_mat(typMat &mat, const typMat &tmpmat)
Definition: pol2terspecial.hpp:1687
 
typPk_t poly
Definition: pol2terspecial.hpp:42
 
mon * accept
Definition: types.hpp:6
 
int my_ord(const mon &m1, const mon &m2)
Definition: ord.hpp:2
 
COEFF coeff
Definition: pol2terspecial.hpp:29
 
void NewDestroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo.hpp:2824
 
void(* tabfun1[32])(COEFF *, pol< mon, COEFF > *, int *)
Definition: auxfun.hpp:417
 
long flag
Definition: alp_f2c.H:52
 
list< predicat >::const_iterator const_iterator
Definition: types.hpp:21
 
void init_algo(typP &P, int &nouveaumon, int &maxdeg, int &k, typPk &Pk, typMk &Mk, Base &b, typdump &dump, workspace &w, monomial_server &serv)
Definition: corealgo3.hpp:335
 
void recover(typPk &Pk, typMk &Mk, const typdump &dump, int k)
Definition: dump.hpp:192
 
coeff * tabcoeff
Definition: workspace.hpp:12
 
void Dump(const typPk &Pk, typdump &dump)
Definition: dump.hpp:48
 
void strongconnect(typstack &S, typgraph &G, int i, typvec &vec, int &index, typvec &lowlink, int startindex)
Definition: pol2terspecial.hpp:212
 
T coeff_t
Definition: pol.hpp:9
 
void nextmon(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:74
 
int taille1
Definition: types.hpp:5
 
int nbvar()
Definition: types.hpp:37
 
int sizenf
Definition: pol2ter.hpp:23
 
mon choice_mpq(const pol2ter< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2200
 
pol_t pol
Definition: pol2terspecial.hpp:19
 
pol2ter< mon, COEFF > * typPk
Definition: pol2terspecial.hpp:28
 
mon choice_mac(const pol2ter< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2155
 
void global_update_matrix(typmat &m, typlistcomp &listcomp, typmap &mon2col)
Definition: pol2terspecial.hpp:1024
 
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
 
unsigned char * tabnf
Definition: workspace.hpp:13
 
void destroy_space(workspace< coeff > *w)
Definition: workspace.hpp:34
 
int critere_got(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:191
 
void reconstruct_pr_pc(int *&pr, int *&pc, int *tmppr, int *tmppc, int sizetmp, int indexinside)
Definition: pol2terspecial.hpp:1720
 
pol_t::monom_t monom_t
Definition: pol2terspecial.hpp:20
 
typPk Spolordsup(typPk Pk, const Base &b)
Definition: corealgo.hpp:147
 
MSKint32t k
Definition: mosek.h:2713
 
R rep
Definition: Monom.hpp:30
 
void rajoute_voisins(typPk &Pk, const typMk &Mk, const typdump &dump, Base &b, workspace &w, monomial_server &serv)
Definition: IsinB3.hpp:111
 
C coeff_t
Definition: Monom.hpp:26
 
int nbbits[256]
Definition: pol2ter.hpp:4
 
Definition: pol2terspecial.hpp:17
 
void(* tabfun2[32])(COEFF *, COEFF *, pol< mon, COEFF > *, int *)
Definition: auxfun.hpp:418
 
Definition: placemon3.hpp:14
 
pol2ter< mon, COEFF > * p
Definition: pol2terspecial.hpp:30
 
C coeff
Definition: Monom.hpp:29
 
Definition: pol2terspecial.hpp:27
 
mon choice_dlex(const pol2ter< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2117
 
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
 
Definition: IsinB3.hpp:229
 
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
 
vector< int > sizeexceed
Definition: pol2terspecial.hpp:44
 
iterator end()
Definition: types.hpp:30
 
void conv_merge(typPk &Pk, typP &P, typexceed &ex, typsize &sizeex, const Base &b)
Definition: corealgo.hpp:1297
 
mon * exceed
Definition: pol2terspecial.hpp:23
 
void ReduceSpol(typPk &S, const typdump &dump, typPk &redspol, const Base &b)
Definition: corealgo.hpp:2217
 
pol< mon, COEFF > mult(int i, const pol< mon, COEFF > &p, const typdump &dump, const Base &b, mon **exce, int &exsize, workspace &w, monomial_server &serv)
Definition: pol2terspecial.hpp:2306
 
Definition: pol2ter.hpp:15
 
list< predicat > def
Definition: types.hpp:16
 
Mon mon
Definition: solver_bb_floating.cpp:136
 
int nbvars
Definition: types.hpp:17
 
void increase_space(workspace< coeff > *w)
Definition: workspace.hpp:19
 
int taille2
Definition: types.hpp:7
 
exponent_t GetDegree() const 
Definition: Monom.hpp:70
 
void NewCrochetchoix(typP &P, typPk &Pk, typMk &Mk, typPk &redspol, int &k, typdump &dump, Base &b, typrecall &recall)
Definition: corealgo.hpp:2594
 
MSKrealt * c
Definition: mosek.h:2678
 
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
 
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
 
typPk_t typPk
Definition: pol2terspecial.hpp:38
 
int sizenf
Definition: workspace.hpp:15
 
mon choice_naif(const pol2ter< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2004
 
int index
Definition: IsinB3.hpp:231
 
void makegraph(typgraph &G, const typPk tmpPk, const typexceed &exceed, const typsizeexceed &sizeexceed, typmon2face &mon2face, Base &b)
Definition: pol2terspecial.hpp:140
 
MSKrescodee r
Definition: mosek.h:2321
 
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo.hpp:43
 
int size
Definition: pol.hpp:10
 
mon choice_num(const pol2ter< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2037
 
MSKstreamtypee MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t a
Definition: mosek.h:3833
 
void algo(typP P, typdump &dump, Base &b, monomial_server< mon, pol2ter< mon, typename mon::coeff_t > > &serv)
Definition: pol2terspecial.hpp:1737
 
#define COEFF
Definition: symbo2.hpp:8
 
typPk::value_type pol
Definition: pol2terspecial.hpp:39
 
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
 
mon * refuse
Definition: types.hpp:8
 
cont< pol< mon, T > > Crochet(const cont< pol< mon, T > > &P, int k)
Definition: corealgo.hpp:6
 
int mulind(int indexbase, int var, const typBase &b)
Definition: placemon3.hpp:126
 
void update_pol(typcomp &comp_to_update, typcomp &updating_comp, workspace *w, typserv &serv)
 
vector< mon * > exceed
Definition: pol2terspecial.hpp:43
 
void initial_mon(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:57
 
iterator begin()
Definition: types.hpp:25
 
void update_matrix(typmat &m, typcomp &c, typmap &mon2col, int indexmat)
Definition: pol2terspecial.hpp:1125
 
mon choice_fall(const pol2ter< mon, T > &p, const Base &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2234
 
#define pol
Definition: pol2ter.hpp:3
 
int size
Definition: workspace.hpp:14
 
void SetCoeff(const C &c)
Definition: Monom.hpp:68
 
int mindeg(const typPk &l)
Definition: corealgo.hpp:2422
 
mon ind
Definition: pol.hpp:11
 
int sizeexceed
Definition: pol2terspecial.hpp:32
 
Multivariate monomials. 
Definition: Monom.hpp:21
 
T * nf
Definition: pol.hpp:12
 
void construct_matrix_from_newpol_nofree(typMat &mat, typPk &tmpPk, typMk &tmpMk, typexceed &exceed, typsizeexceed &sizeexceed, typP &P)
Definition: pol2terspecial.hpp:342
 
T * nf
Definition: pol2ter.hpp:21
 
long min(long a, long b)
Definition: workspace.hpp:3
 
Definition: IsinB3.hpp:235