2 template<
typename typlistplus,
typename Base>
12 typedef typename typlistplus::value_type::monom_t
mon;
13 for (
auto &tmpresmul : listplus)
16 mon tmp=tmpresmul.poly.ind;
20 mon *candidate_ancestor=NULL;
22 for(
auto &iterbase : b)
24 mon *compancestor=NULL;
26 for(
int i=0;
i<iterbase.taille1;
i++)
31 cout<<
"je break ici"<<endl;
37 for(
int i=0;
i<iterbase.taille2;
i++)
42 candidate_ancestor=NULL;
44 cout<<
"je break ici"<<endl;
51 cout<<
"g trouvé ici un gus "<<iterbase.refuse[
i]<<endl;
53 compancestor=&iterbase.refuse[
i];
60 cout<<
"je passe ici compancestor non null"<<endl;
62 candidate_ancestor=compancestor;
65 tmpresmul.poly.ancestor=candidate_ancestor;
69 for(
auto &&iter : listplus)
71 cout<<
"ancestor ---- "<<iter->poly.ind<<endl;
73 cout<<
"\t\t -> "<<*(iter->poly.ancestor)<<endl;
75 cout<<
"\e[31mcaca\e(B\e[m"<<endl;
80 template<
typename typgraph,
typename typlistplus,
81 typename typmon2face,
typename Base>
82 void makegraph(typgraph & G,
const typlistplus & list_plus,
83 typmon2face &mon2face,
89 typedef typename typlistplus::value_type::monom_t
mon;
93 map<typename mon::rep_t,int> root2face;
97 for(
auto iterlist=list_plus.begin();iterlist!=list_plus.end();iterlist++)
100 mon root=*(poly.ancestor);
119 if(root2face.count(root.
rep)==0)
120 root2face[root.
rep]=numface++;
121 mon2face[poly.ind.rep]=root2face[root.
rep];
124 cout<<
"roottoface"<<endl;
125 for(
auto &
i :root2face)
126 cout<<
i.first<<
" --- "<<
i.second<<endl;
127 cout<<
"mon2face"<<endl;
128 for(
auto &
i :mon2face)
129 cout<<
i.first<<
" --- "<<
i.second<<endl;
141 for(
auto iterlist=list_plus.begin();iterlist!=list_plus.end();iterlist++)
144 for(
int i=0;
i<iterlist->sizeexceed;
i++)
145 G[mon2face[iterlist->poly.ind.rep]][mon2face[iterlist->exceed[
i].rep]]=1;
150 namespace pol2terasync{
156 template <
typename typdump,
typename Base,
typename mon,
typename monomial_server>
160 pol2terasync::synchromutex.lock();
162 res=
mult(i,p,dump,b,serv);
164 pol2terasync::synchromutex.unlock();
167 template<
typename typdump,
typename Base,
typename mon,
typename monomial_server>
172 static const mon monzero=
mon(0);
174 static const COEFF zero=0;
178 res.
exceed=(mon*)MAC_REV_MALLOC<mon>((p.
size+1)*
sizeof(
mon));
179 int *stockindicetab=(
int*)
malloc(p.
size*
sizeof(
int));
180 int noquo=0,maxind=0,pp=0,q=0,compt_coeff=0;
184 pol2terasync::tmpmutex.lock();
188 init_pointer<COEFF>();
191 pol2terasync::tmpmutex.unlock();
194 for(
int j=0;
j<p.sizenf;++
j)
199 if(((p.nfind[
j]>>
k)&1))
202 int stockindice2=serv.mulind_th(8*
j+
k,i,b);
204 int stockindice2=serv.
mulind(8*
j+
k,i,b);
208 cout<<
"stockindice2 "<<8*
j+
k<<
" "<<i<<
" "<<stockindice2<<endl;
209 cout<<
"i "<<i<<
" j "<<
j<<
" k "<<
k<<endl;
212 stockindice2=-1*(8*
j+
k)-1;
213 stockindicetab[pp++]=stockindice2;
214 if (stockindice2>=maxind)
224 w.
tabcoeff=(coeff*)MAC_REV_MALLOC<coeff>(w.
size*
sizeof(coeff));
225 for(
int i=0;i<w.
sizenf;i++)
227 for(
int i=0;i<w.
size;i++)
230 for(
int j=0;
j<pp;
j++)
231 if(stockindicetab[
j]>=0)
235 w.
tabnf[stockindicetab[j]/8]|=1<<(stockindicetab[j]%8);
241 tmp=serv.nf_th(i,-1*(stockindicetab[
j]+1),dump,b);
243 tmp=serv.nf(i,-1*(stockindicetab[
j]+1),dump,b);
250 unsigned long *tmpptr=(
unsigned long*)tmp.nfind;
251 unsigned long mask=1;
254 for(k=0;k<tmp.sizenf/
sizeof(
unsigned long);k++)
258 ((
unsigned long*)w.
tabnf)[
k]|=mask;
259 for(l=0;l<8*sizeof(unsigned long);l+=8,mask>>=8)
264 w.
tabcoeff+(8*
sizeof(
unsigned long)*k+l)
265 ,&(p.
nf[
j]),tmp.
nf+compteurtmp);
266 compteurtmp+=
nbbits[mask&255];
271 for(k=tmp.sizenf-(tmp.sizenf%
sizeof(
unsigned long))
277 for(l=0;l<8;l++,mask<<=1)
279 if(tmp.nfind[k]&mask)
294 serv.
int2mon(-1*(stockindicetab[
j]+1),tmpmon);
296 res.
exceed[noquo]*=tmpmon;
307 ,(noquo)*
sizeof(
mon));
324 res.
poly.sizenf=pp+1;
327 for(
int j=0;
j<res.
poly.sizenf;
j++)
339 free(stockindicetab);
345 template<
typename typPk,
typename typMk,
typename typdump,
typename Base,
346 typename typplus,
typename typwork,
typename typserv>
347 void compute_newpol(typplus &listplus, typPk &Pk, typMk &tmpMk, typdump &dump,
348 Base &b,
int &k, typwork &w, typserv &serv)
350 typedef typename typdump::value_type
dumpstruct;
351 typedef typename typPk::value_type
pol;
352 typedef typename typMk::value_type
mon;
354 list<std::thread >listfuture;
355 map<mon,int,my_Dlex<typename typMk::value_type> > mapint;
357 int nbthreadrunning=0;
360 serv.reinit_multiple();
366 cout<<
"debut compute newpol"<<endl;
368 for(
int i=0;i<b.
nbvar();i++)
370 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
374 pol2terasync::synchromutex.lock();
377 mon tmpmon=iter->ind*
mon(i,1);
379 if(mapint.count(tmpmon)==0)
383 mapint[tmpmon]=nbface++;
384 tmpMk.push_back(tmpmon);
386 std::thread t=std::thread(
387 wrap_mult<typdump, Base, mon, typserv>
388 ,std::ref(tabmul[nbthreadrunning++]),i
389 ,std::ref(*iter),std::ref(dump),
393 listfuture.push_back(std::move(t));
396 listfuture.push_back(
397 std::async(std::launch::async,
398 mult<typdump, Base, mon, typserv>
399 ,i,std::ref(*iter),std::ref(dump),
407 pol2terasync::synchromutex.unlock();
412 for(
auto &iterfuture : listfuture)
416 listplus.push_back(std::move(tabmul[compt_th++]));
418 listfuture.erase(listfuture.begin(),listfuture.end());
420 pol2terasync::synchromutex.lock();
424 pol2terasync::synchromutex.unlock();
429 for(
auto &iterfuture : listfuture)
435 listplus.push_back(std::move(tabmul[compt_th++]));
437 listfuture.erase(listfuture.begin(),listfuture.end());
439 cout<<
"fin compute newpol"<<endl;
443 template<
typename typMat,
typename typPk,
typename typP,
444 typename typMk,
typename Base,
typename typdump,
typename typexceed,
447 int &k,Base &b, typdump &dump,typexceed &exceed_ret,
451 typedef typename typMk::value_type
mon;
452 typedef typename typP::value_type::order_t ord;
453 typedef typename typPk::value_type
pol;
455 typedef typename typP::value_type polyalp;
459 map<typename mon::rep_t,int> mon2face, mon2col;
460 vector<vector<int> > G;
462 typPk tmpPk,workvect,convcrochet;
465 vector<mon *> exceed,exceedcrochet;
466 list<int> sizeexceed,sizeexceedcrochet;
467 int nbproj=0,flagdoplus=1;
468 int nbcompo=0,*pr,*pc;
474 list<resmul<pol> > list_plus;
475 list<std::future<resmul<pol> > >list_future;
476 list<resmul<pol> > list_conv;
478 struct timeval t1,t2;
479 gettimeofday(&t1,NULL);
480 mat.destroystore();mat.ncol=0;mat.nrow=0;mat.nnz=0;
481 exceed_ret.erase(exceed_ret.begin(),exceed_ret.end());
482 sizeexceed_ret.erase(sizeexceed_ret.begin(),sizeexceed_ret.end());
484 cerr<<
"k on entering newpkmkmatrixof "<<k<<endl;
488 for(
auto & p : ttmpP)
489 cout<<
"crochet ici"<<p<<endl;
492 Mk, dump, b, flagdoplus, k, recall, exceed, sizeexceed, serv);
493 cout<<
"en sortie tmpPk.size "<<tmpPk.size()<<endl;
500 tmp.
exceed=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
503 list_plus.push_back(tmp);
509 cout<<
"newpol"<<endl;
511 cout<<
"fin newpol "<<list_plus.size()<<endl;
520 for(
auto & p : ttmpP)
521 cout<<
"crochet ici"<<p<<endl;
522 conv_merge(convcrochet,ttmpP,exceedcrochet,sizeexceedcrochet,b,serv);
523 crochet.poly.resize(convcrochet.size());
524 crochet.sizeexceed.resize(convcrochet.size());
525 copy(convcrochet.begin(),convcrochet.end(),crochet.poly.begin());
526 crochet.exceed=exceedcrochet;
527 copy(sizeexceedcrochet.begin(),sizeexceedcrochet.end(),crochet.sizeexceed.begin());
529 cout<<
"crochet "<<endl;
530 for(
int i=0;i<crochet.poly.size();i++)
532 cout<<
"ind "<<crochet.poly[
i].ind<<endl;
533 copy(crochet.exceed[i],crochet.exceed[i]+crochet.sizeexceed[i],ostream_iterator<mon>(cout,
" + "));
534 cout<<invconv<Poly>(crochet.poly[
i],serv)<<endl;
539 auto itersizeexceed=sizeexceed.begin();
558 vec.resize(G.size(),-1);
560 cout<<
"le graph"<<endl;
568 cout<<
"je rentre ds tarjan "<<G.size()<<
" "<<tmpMk.size()<<endl;
570 cout<<
"alloc pr "<<tmpPk.size()<<
" "<<tmpMk.size()<<endl;
571 pr=(
int *)
malloc(list_plus.size()*
sizeof(int));
572 pc=(
int *)
malloc(tmpMk.size()*
sizeof(int));
573 tmpMk.erase(tmpMk.begin(),tmpMk.end());
576 for_each(vec.begin(),vec.end(),[&nbcompo](
int i){nbcompo=(nbcompo<i?i:nbcompo);});
578 for(
int i=0;i<=nbcompo;i++)
581 list<mon*> tmpexceed;
582 list<int> tmpsizeexceed;
585 for_each(list_plus.begin(),list_plus.end(),
589 if(vec[mon2face[iter.poly.ind.rep]]==i)
591 tmpcomp.poly.push_back(iter.poly);
592 tmpcomp.sizeexceed.push_back(iter.sizeexceed);
593 tmpcomp.exceed.push_back(iter.exceed);
596 listcomp.push_back(tmpcomp);
598 gettimeofday(&t2,NULL);
599 cout<<
"\e[31m Temps poly+graph "<<t2.tv_sec-t1.tv_sec+1e-6*(t2.tv_usec-t1.tv_usec);
600 cout<<
"\e(B\e[m"<<endl;
607 cout<<
"nb total de compo dans la loiste "<<listcomp.size()<<endl;
608 for(
auto iter=listcomp.begin();iter!=listcomp.end();iter++,numcompo++)
615 cout<<
"pour la composante "<<prout++<<endl;
617 auto toto=iter->sizeexceed.begin();
618 typename vector<pol>::iterator tutu=iter->poly.begin();
619 for(
auto m : iter->exceed)
621 cout<<
"sizeexceed ici "<<*toto<<endl;
622 copy(m,m+*(toto++),ostream_iterator<mon>(cout,
" + ")),cout<<endl;;
623 cout<<tutu->ind<<endl;
625 copy(tutu->nf,tutu->nf+tutu->size,ostream_iterator<coeff>(cout,
" ")),cout<<endl;
626 cout<<invconv<Poly>(*(tutu++),serv)<<endl;
627 cout<<
"------------------------------------ "<<endl;
631 for(
auto &&iterind : iter->poly)
633 verytmpMk.push_back(iterind.ind);
636 gettimeofday(&t1,NULL);
638 iter->exceed, iter->sizeexceed, P);
641 cout<<
"matrix of comp"<<endl;
643 cout<<
"\e[32mpour la composante \e[37m"<<prout<<endl;
645 auto toto=iter->sizeexceed.begin();
646 typename vector<pol>::iterator tutu=iter->poly.begin();
647 for(
auto m : iter->exceed)
649 copy(m,m+*(toto++),ostream_iterator<mon>(cout,
" - ")),cout<<endl;;
650 cout<<tutu->ind<<endl;
651 cout<<
"size tutu "<<tutu->size<<endl;
653 copy(tutu->nf,tutu->nf+tutu->size,ostream_iterator<coeff>(cout,
" "));
654 cout<<invconv<Poly>(*(tutu++),serv)<<endl;
655 cout<<
"------------------------------------ "<<endl;
660 cout<<
"la petite matrice"<<endl;
678 gettimeofday(&t2,NULL);
679 cout<<
"\e[31m Temps contrustmatrix "<<t2.tv_sec-t1.tv_sec+1e-6*(t2.tv_usec-t1.tv_usec);
680 cout<<
"\e(B\e[m"<<endl;
682 Solve(tmpmat,L,*iter,&tmppr,&tmppc,verytmpMk,w,serv);
684 cout<<
"\e[31mApres SOLVE \e[37m"<<prout<<endl;
686 auto toto=iter->sizeexceed.begin();
687 typename vector<pol>::iterator tutu=iter->poly.begin();
688 for(
auto m : iter->exceed)
690 copy(m,m+*(toto++),ostream_iterator<mon>(cout,
" - ")),cout<<endl;;
691 cout<<tutu->ind<<endl;
692 cout<<invconv<Poly>(*(tutu++),serv)<<endl;
696 gettimeofday(&t2,NULL);
697 cout<<
"\e[31m Temps Solve "<<t2.tv_sec-t1.tv_sec+1e-6*(t2.tv_usec-t1.tv_usec);
698 cout<<
"\e(B\e[m"<<endl;
704 for(
auto &m :verytmpMk)
715 typename typMk::iterator itermon=verytmpMk.begin();
717 for(
auto iter_in_poly=iter->poly.begin();
718 itermon!=verytmpMk.end();iter_in_poly++,itermon++,j++)
720 cout<<
" dans verytmp "<<*itermon<<
721 invconv<typename typP::value_type>(*iter_in_poly,serv)<<endl;
726 iter_in_poly->ind=*itermon;
727 iter_in_poly->ind.SetCoeff(1);
733 for(
int i=tmpmat.colptr[j];i<tmpmat.colptr[j+1];i++)
734 if(!(((coeff*)tmpmat.nzval)[i]==0))
739 coeff tmpcoeff=((coeff*)tmpmat.nzval)[
i];
743 if(!
Iszero(tmpmat(tmpmat.rowind[i],tmpmat.rowind[i])))
744 tmpcoeff/=tmpmat(tmpmat.rowind[i],tmpmat.rowind[i]);
747 iter->exceed[tmpmat.rowind[
i]]=(mon*)
748 MAC_REV_REALLOC<mon>(iter->exceed[tmpmat.rowind[i]],
749 iter->sizeexceed[tmpmat.rowind[i]]*
sizeof(mon),
750 (iter->sizeexceed[tmpmat.rowind[
i]]+1)*
sizeof(mon));
752 iter->exceed[tmpmat.rowind[
i]][iter->sizeexceed[tmpmat.rowind[
i]]]=tmpmon;
753 iter->sizeexceed[tmpmat.rowind[
i]]++;
755 iter_in_poly->ind=
mon(0);
762 #ifdef CACABOUDIN// 1//ICICICICI
763 cout<<
"apres solve les poly de la compo"<<endl;
764 for(
int i=0;i<iter->poly.size();i++)
766 cout<<
"ind "<<iter->poly[
i].ind<<endl;
767 copy(iter->exceed[i],iter->exceed[i]+iter->sizeexceed[i],
768 ostream_iterator<mon>(cout,
" + "));cout<<endl;
769 cout<<invconv<typename typP::value_type>(iter->poly[
i],serv)<<endl;
770 cout<<
"--------------------********************"<<endl;
772 for(
auto i : iter->poly)
773 cout<<
"ind "<<i.ind<<endl;
774 copy(iter->sizeexceed.begin(),iter->sizeexceed.end(),ostream_iterator<int>(cout,
" "));
775 cout<<
"iciiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"<<endl;
779 cout<<
"update "<<endl;
781 cout<<
"la map"<<endl;
783 map<typename mon::rep_t,resmul<typename compo::typPk::value_type> > mon2pol;
785 auto iterexceed=iter->exceed.begin();
786 auto itersizeexceed=iter->sizeexceed.begin();
787 auto iterpoly=iter->poly.begin();
789 for(
auto iterpoly=iter->poly.begin();iterpoly!=iter->poly.end();
790 iterpoly++,iterexceed++,itersizeexceed++,i++)
796 if(!(tmpmat(i,i)==0)) mon2pol[iterpoly->ind.rep]=tmp;
802 cout<<
"le graph"<<endl;
806 vector<char> toupdate(nbcompo+1,0);
809 for(
int i_vec=0;i_vec<G.size();i_vec++)
811 if(vec[i_vec]==numcompo)
815 for(
int j=0;j<G.size();j++)
820 if(G[j][i_vec] && vec[j]!=numcompo)
825 for(
int j_graph=0;j_graph<G.size();j_graph++)
826 G[j][j_graph]|=G[i_vec][j_graph];
836 list<std::thread> list_up;
839 cout<<
"les poly"<<endl;
840 for(
auto itercomp=listcomp.begin();itercomp!=listcomp.end();
841 itercomp++,indexcompo++)
843 if(toupdate[indexcompo])
845 #ifdef CACABOUDIN// 1//ICICICICICICI
846 cout<<
"la compo a updater avant"<<endl;
847 for(
int i=0;i<itercomp->poly.size();i++)
849 cout<<
"ind "<<itercomp->poly[
i].ind<<endl;
850 copy(itercomp->exceed[i],itercomp->exceed[i]+itercomp->sizeexceed[i],
851 ostream_iterator<mon>(cout,
" + "));cout<<endl;
852 cout<<invconv<typename typP::value_type>(itercomp->poly[
i],serv)<<endl;
853 cout<<
"--------------------********************"<<endl;
863 std::ref(*iter),std::ref(mon2pol),std::ref(serv)));
866 for(
auto &i : list_up)
868 list_up.erase(list_up.begin(),list_up.end());
873 cout<<
"la compo apres update"<<endl;
874 for(
int i=0;i<itercomp->poly.size();i++)
876 cout<<
"ind "<<itercomp->poly[
i].ind<<endl;
877 copy(itercomp->exceed[i],itercomp->exceed[i]+itercomp->sizeexceed[i],
878 ostream_iterator<mon>(cout,
" + "));cout<<endl;
879 cout<<invconv<typename typP::value_type>(itercomp->poly[
i],serv)<<endl;
880 cout<<
"--------------------********************"<<endl;
885 for(
auto &i : list_up)
887 list_up.erase(list_up.begin(),list_up.end());
892 cout<<
"avant update du crochet "<<endl;
893 for(
int i=0;i<crochet.poly.size();i++)
895 cout<<
"ind "<<crochet.poly[
i].ind<<endl;
896 copy(crochet.exceed[i],crochet.exceed[i]+crochet.sizeexceed[i],ostream_iterator<mon>(cout,
" + "));
897 cout<<invconv<Poly>(crochet.poly[
i],serv)<<endl;
901 cout<<
"fin des updates "<<endl;
903 cout<<
"apres update du crochet "<<endl;
904 for(
int i=0;i<crochet.poly.size();i++)
906 cout<<
"ind "<<crochet.poly[
i].ind<<endl;
907 copy(crochet.exceed[i],crochet.exceed[i]+crochet.sizeexceed[i],ostream_iterator<mon>(cout,
" + "));
908 cout<<invconv<Poly>(crochet.poly[
i],serv)<<endl;
915 cout<<
"indexinside "<<indexinside<<endl;
918 indexinside+=verytmpMk.size();
929 for(
auto c : listcomp)
932 verytmpPk.push_back(p);
933 for(
auto &p:
c.exceed)
934 exceed_ret.push_back(p);
935 for(
auto &p:
c.sizeexceed)
938 sizeexceed_ret.push_back(p);
942 cout<<
"apres reconstruction des Pk "<<endl;
944 copy(sizeexceed_ret.begin(),sizeexceed_ret.end(),ostream_iterator<int>(cout,
" **--** "));cout<<endl;
948 for(
auto &p : crochet.poly)
951 verytmpPk.push_back(p);
953 for(
auto &p : crochet.exceed)
954 exceed_ret.push_back(p);
955 for(
auto &p : crochet.sizeexceed)
956 sizeexceed_ret.push_back(p);
963 mon2col[m.rep]=indexmat++;
966 cout<<
"avant updatematrix "<<endl;
968 copy(sizeexceed_ret.begin(),sizeexceed_ret.end(),ostream_iterator<int>(cout,
" **--** "));cout<<endl;
973 for(
auto c : listcomp)
976 indexmat+=
c.poly.size();
979 cout<<
"apres updatematrix"<<endl;
985 mat.nrow+=crochet.poly.size();
987 cout<<
"verytmp"<<endl;
988 for(
auto &p :verytmpPk)
989 cout<<invconv<typename typP::value_type>(p,serv)<<endl;
997 template<
typename typP,
typename typdump,
typename Base,
998 template<
typename mon,
typename pol>
class monomial_server,
typename mon>
999 void algo_borderbases(typP P,typdump &dump,Base &b,
1002 typedef typename typP::value_type polyalp;
1003 typedef list<pol2ter<mon,typename mon::coeff_t> > typPk;
1004 typedef list<typename typPk::value_type::monom_t> typMk;
1006 typedef typename typPk::value_type
pol;
1013 typedef harewell<typename typP::value_type::coeff_t> typMat;
1015 int nouveaumon,allpolused=0,maxdeg,
k,*pr,*pc;
1016 vector<typename typMk::value_type*> exceed;
1017 list<int> sizeexceed;
1020 init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv);
1027 while(nouveaumon||(k<=maxdeg))
1032 cout<<
"Spolordsup"<<endl;
1035 for(
typename typPk::iterator iter=S.begin();iter!=S.end();iter++)
1038 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1041 cout<<
"poly a la fin de la boulcle de l'algo "<<Pk.size()<<endl;
1042 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1045 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1047 cout<<endl<<
"newpkmkmatrixof"<<endl;
1053 cout<<
"poly apres solve (attention exceed)"<<endl;
1054 copy(sizeexceed.begin(),sizeexceed.end(),ostream_iterator<int>(cout,
" *** "));cout<<endl;
1055 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1058 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1061 if(killspol) S.erase(S.begin(),S.end());
1062 if (k+1>=maxdeg) allpolused=1;
1063 if(Mk.size()==0) nouveaumon=0;
1068 if ((
unsigned)my_rank(Mat)==Mk.size())
1072 typMk tmpSpoldejavu;
1073 typPk redspol,secd=secondmembre(Mat,Pk);;
1077 cout<<
"matrice de rang plein "<<endl;
1084 cout<<
"secd/size() "<<secd.size()<<endl;
1089 cout<<
"redspol.size "<<redspol.size()<<endl;
1091 if(redspol.size()==0)
1094 my_merge(Spoldejavu,tmpSpoldejavu);
1104 int tmpdeg=
mindeg(redspol,serv);
1108 cout<<
"redspol.size() "<<redspol.size()<<endl;
1112 my_merge(Spoldejavu,tmpSpoldejavu);
1119 cout<<
"debut newcrochetchoix"<<endl;
1123 cout<<
"fin newcrochetchoix"<<endl;
1140 cout<<
"matrice de rang pas plein "<<endl;
1147 cout<<
"avant addB "<<Pk.size()<<endl;
1148 auto iterexceed=exceed.begin();
1149 auto itersizeexceed=sizeexceed.begin();
1150 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++,iterexceed++,itersizeexceed++)
1152 cout<<
"ind "<<iter->ind<<
" est sikzeexceed "<<*itersizeexceed<<endl;
1153 copy(*iterexceed,*iterexceed+*itersizeexceed,ostream_iterator<mon>(cout,
" + "));
1155 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1158 AddB(Mat,Pk,Mk,exceed,sizeexceed,dump,b,serv);
1160 cout<<
"apres addB "<<Pk.size()<<endl;
1161 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1163 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1170 secd=secondmembre(Mat,Pk);
1185 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
1186 P.push_back(invconv<polyalp>(*iter));
1188 if(redspol.size()==0)
1204 cout<<
"il ya un passage par mat rang pas"
1205 <<
"plein et pol non zero"<<endl;
1231 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
1232 P.push_back(invconv<polyalp>(*iter));
1238 cout<<
"poly avant newcrochetchoix (attention exceed)"<<endl;
1239 copy(sizeexceed.begin(),sizeexceed.end(),ostream_iterator<int>(cout,
" *** "));cout<<endl;
1240 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1243 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1249 cout<<
"poly apres newcrochetchoix (attention exceed)"<<endl;
1250 copy(sizeexceed.begin(),sizeexceed.end(),ostream_iterator<int>(cout,
" *** "));cout<<endl;
1251 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1254 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1276 cout<<
"sortie d'algo flash et dimension "<<endl;
1287 template<
typename typcompo,
typename typP,
typename typwork,
typename typserv>
1288 void treatment_component(typcompo &iter,
int numcompo,
int nbcompo, typP &P,
1289 typwork &w, typserv &serv)
1295 for(
auto &&iterind : iter->poly)
1297 verytmpMk.push_back(iterind.ind);
1300 gettimeofday(&t1,NULL);
1302 iter->exceed, iter->sizeexceed, P);
1313 gettimeofday(&t2,NULL);
1315 cout<<
"\e[31m Temps contrustmatrix "<<t2.tv_sec-t1.tv_sec+1e-6*(t2.tv_usec-t1.tv_usec);
1316 cout<<
"\e(B\e[m"<<endl;
1319 Solve(tmpmat,L,*iter,&tmppr,&tmppc,verytmpMk,w,serv);
1321 gettimeofday(&t2,NULL);
1323 cout<<
"\e[31m Temps Solve "<<t2.tv_sec-t1.tv_sec+1e-6*(t2.tv_usec-t1.tv_usec);
1324 cout<<
"\e(B\e[m"<<endl;
1327 for(
auto &m :verytmpMk)
1333 cout<<
"update "<<endl;
1335 cout<<
"la map"<<endl;
1337 map<typename mon::rep_t,resmul<typename compo::typPk::value_type> > mon2pol;
1339 auto iterexceed=iter->exceed.begin();
1340 auto itersizeexceed=iter->sizeexceed.begin();
1341 auto iterpoly=iter->poly.begin();
1343 for(
auto iterpoly=iter->poly.begin();iterpoly!=iter->poly.end();
1344 iterpoly++,iterexceed++,itersizeexceed++,i++)
1350 if(!(tmpmat(i,i)==0)) mon2pol[iterpoly->ind.rep]=tmp;
1356 cout<<
"le graph"<<endl;
1361 vector<char> toupdate(nbcompo+1,0);
1363 for(
int i_vec=0;i_vec<G.size();i_vec++)
1365 if(vec[i_vec]==numcompo)
1369 for(
int j=0;j<G.size();j++)
1371 if(G[j][i_vec] && vec[j]!=numcompo)
1376 for(
int j_graph=0;j_graph<G.size();j_graph++)
1377 G[j][j_graph]|=G[i_vec][j_graph];
1385 list<std::thread> list_up;
1388 cout<<
"les poly"<<endl;
1390 for(
auto itercomp=listcomp.begin();itercomp!=listcomp.end();
1391 itercomp++,indexcompo++)
1393 if(toupdate[indexcompo])
1401 std::ref(*itercomp),
1402 std::ref(*iter),std::ref(mon2pol),std::ref(serv)));
1405 for(
auto &i : list_up)
1407 list_up.erase(list_up.begin(),list_up.end());
1412 for(
auto &i : list_up)
1414 list_up.erase(list_up.begin(),list_up.end());
1417 cout<<
"avant update du crochet "<<endl;
1418 for(
int i=0;i<crochet.poly.size();i++)
1419 { cout<<
"ind "<<crochet.poly[
i].ind<<endl;
1420 copy(crochet.exceed[i],crochet.exceed[i]+crochet.sizeexceed[i],ostream_iterator<mon>(cout,
" + "));
1421 cout<<invconv<Poly>(crochet.poly[
i],serv)<<endl;
1427 cout<<
"fin des updates "<<endl;
1428 cout<<
"apres update du crochet "<<endl;
1429 for(
int i=0;i<crochet.poly.size();i++)
1431 cout<<
"ind "<<crochet.poly[
i].ind<<endl;
1432 copy(crochet.exceed[i],crochet.exceed[i]+crochet.sizeexceed[i],ostream_iterator<mon>(cout,
" + "));
1433 cout<<invconv<Poly>(crochet.poly[
i],serv)<<endl;
1438 indexinside+=verytmpMk.size();
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
Definition: dlexorder.hpp:4
Definition: workspace.hpp:11
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
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 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 sizeexceed
Definition: pol2terspecial.hpp:24
long nextdim(std::vector< int > &coeff_mac, int k)
Definition: macaulay.hpp:45
void my_merge(T &l1, const T &l2)
Definition: corealgo.hpp:35
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
typpol mult(int i, const typpol &pol, const typdump &dump, const Base &b, mon **exce, int &exsize)
Definition: corealgo.hpp:1077
void reconstruct_mat(typMat &mat, const typMat &tmpmat)
Definition: pol2terspecial.hpp:1687
void NewDestroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo.hpp:2824
long flag
Definition: alp_f2c.H:52
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
T coeff_t
Definition: pol.hpp:9
void nextmon(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:74
int nbvar()
Definition: types.hpp:37
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
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
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
Definition: pol2ter.hpp:15
R rep_t
Definition: Monom.hpp:27
Mon mon
Definition: solver_bb_floating.cpp:136
int nbvars
Definition: types.hpp:17
#define NBFUTURE
Definition: pol2terspecial.hpp:14
void increase_space(workspace< coeff > *w)
Definition: workspace.hpp:19
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
int GoodDir(const typmon &m, int i, const Base &b)
Definition: corealgo.hpp:1278
int sizenf
Definition: workspace.hpp:15
void makegraph(typgraph &G, const typPk tmpPk, const typexceed &exceed, const typsizeexceed &sizeexceed, typmon2face &mon2face, Base &b)
Definition: pol2terspecial.hpp:140
int size
Definition: pol.hpp:10
#define COEFF
Definition: symbo2.hpp:8
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
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)
void initial_mon(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:57
void update_matrix(typmat &m, typcomp &c, typmap &mon2col, int indexmat)
Definition: pol2terspecial.hpp:1125
#define pol
Definition: pol2ter.hpp:3
int size
Definition: workspace.hpp:14
void SetCoeff(const C &c)
Definition: Monom.hpp:68
void compress(typPk &Pk, typdump &dump, const Base &b, int k)
Definition: placemon3.hpp:1076
int mindeg(const typPk &l)
Definition: corealgo.hpp:2422
mon ind
Definition: pol.hpp:11
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