2 #ifndef ALREADY_corealgo3
3 #define ALREADY_corealgo3
12 #include "linalg/clapack.h"
18 #include "sdpinclude.hpp"
23 template<
typename typP,
typename typPk,
typename Base>
24 void Crochetchoix(
const typP & P,typPk & Pk, typPk & redspol,
int k,
27 template<
typename typPk>
30 typedef typename typPk::value_type
pol;
31 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
34 for(
typename pol::iterator iterpol=iter->begin();iterpol!=iter->end();
37 if(!
Iszero(iterpol->GetCoeff()))
47 typename T::const_iterator iter=l2.begin();
48 for(;iter!=l2.end();iter++)
51 template<
typename mon>
56 for(
int i=0;
i<=maxi;
i++)
61 static int max_degppcm;
63 template<
typename typppcm,
typename Base>
70 list<mon> list1,list2,tmplist2;
77 for(
int i=0;
i<iter->taille2;
i++)
78 for(
int j=
i+1;
j<iter->taille2;
j++)
80 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
82 if((!ppcm.count(tmpmon))&&
84 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
94 for(
int i=0;
i<iter->taille2;
i++)
95 for(
int j=
i+1;
j<iter->taille2;
j++)
97 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
100 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
103 for(
int k=0;
k<iter->taille2;
k++)
108 mon lc_i=
lcm(iter->refuse[
k],iter->refuse[
i]);
109 mon lc_j=
lcm(iter->refuse[
k],iter->refuse[
j]);
118 list2.push_back(tmpmon);
126 for(
typename list<mon>::iterator iter2=list2.begin();
127 iter2!=list2.end();iter2++)
131 if(iter2->GetDegree()>maxdeg)
132 maxdeg=iter2->GetDegree();
142 if(k>max_degppcm) res=1;
146 template<
typename mon,
typename Base,
typename typppcm,
typename typMk>
148 ,
const typMk &Spoldejavu)
178 return (res==2)&&(comp==2)&&ppcm[m]&&!
member(Spoldejavu,m);
180 return (res==2)&&(comp==2)&&ppcm.count(m);
184 template<
typename typPk,
typename Base,
typename typMk>
187 typedef typename typPk::value_type::monom_t
mon;
193 cout<<
"maxdeg"<<maxdeg<<endl;
195 for(
typename typPk::const_iterator iter1=Pk.begin();iter1!=Pk.end();iter1++)
197 for(
typename typPk::const_iterator iter2=iter1;iter2!=Pk.end();iter2++)
198 { cout<<
"iter1->ind"<<iter1->ind<<endl;
199 cout<<
"iter2->ind"<<iter2->ind<<endl;
200 cout<<
"goodspol"<<
goodspol(iter1->ind,iter2->ind,ppcm,b,Spoldejavu)<<endl;
201 if (
goodspol(iter1->ind,iter2->ind,ppcm,b,Spoldejavu))
205 res.push_back(*iter1);
206 res.push_back(*iter2);
211 template<
typename typP>
214 int res=
Degree(P.front());
216 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
223 template<
typename typP>
227 for(
typename typP::const_iterator iter=P.begin();iter!=P.end();iter++)
229 if(
Degree(*iter)==
k) res.push_back(*iter);
234 template<
typename mon,
typename T,
typename monomial_server>
238 std::list<pol<mon,T> > res;
239 for(
typename std::list<
pol<mon,T> >::const_iterator iter=P.begin()
240 ;iter!=P.end();iter++)
242 if(
Degree(*iter,serv)==
k) res.push_back(*iter);
247 template<
typename typP,
typename Base>
251 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
252 for(
typename typP::value_type::const_iterator iterpol=iter->begin();
253 iterpol!=iter->end();iterpol++)
255 cout<<
"iterpol->rep"<<iterpol->rep<<endl;
256 cout<<
"lvar(iterpol->rep)"<<
lvar(iterpol->rep)<<endl;
257 if(tmpvar<
lvar(iterpol->rep)) tmpvar=
lvar(iterpol->rep);
262 template<
typename typP>
266 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
267 for(
typename typP::value_type::const_iterator iterpol=iter->begin();
268 iterpol!=iter->end();iterpol++)
270 cout<<
"iterpol->rep"<<iterpol->rep<<endl;
271 cout<<
"lvar(iterpol->rep)"<<
lvar(iterpol->rep)<<endl;
272 if(tmpvar<
lvar(iterpol->rep)) tmpvar=
lvar(iterpol->rep);
278 template<
typename typP,
typename typMk,
typename Base,
282 typedef typename typMk::value_type
mon;
287 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
289 mon tmp(choice(*iter,b,serv));
293 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++)
294 if(*iter==tmp) {yes=0;
break;};
295 if(yes) Mk.push_back(tmp);
299 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(tmp.
taille2*
sizeof(mon));
301 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
306 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++,i++)
321 b.
def.push_back(tmp);
325 template <
typename typPk,
typename typMk,
typename typmat >
328 const typMk & lm,
const typmat &mat)
330 typedef typename typPk::value_type POL;
331 typedef typename typMk::value_type monom_t;
333 map<monom_t,int>
index;
335 if (res!=NULL) {
delete res;};
336 for(
typename typMk::const_iterator m = lm.begin(); m!=lm.end(); m++){
342 res=
new typmat(L.size(),lm.size());
345 cout<<
"L.size() "<<L.size()<<
" lm.size() "<<lm.size()<<endl;
346 for(
typename typPk::const_iterator pi = L.begin(); pi != L.end(); ++pi){
347 for(
typename POL::const_iterator m = pi->begin(); m!=pi->end(); m++)
350 if((index.count(*m)))
353 (*res)(l,c-1,m->GetCoeff());
362 template<
typename typMat,
typename typP,
typename typPk,
typename typMk,
typename Base,
typename typdump,
class monomial_server,
typename workspace>
363 void init_algo(typP &P,
int &nouveaumon,
int &maxdeg,
int &
k,
364 typPk &Pk, typMk & Mk,
Base & b, typdump & dump,
workspace &w,
367 typedef typename typPk::value_type
pol;
370 const typename typP::value_type::order_t (tmpord)(
const mon,
const mon);
378 cout<<
"Init Space"<<endl;
380 cout<<
"Init Space fini"<<endl;
390 cout<<
"Dans While"<<endl;
391 Mk.erase(Mk.begin(),Mk.end());
392 cout<<
"Dans While 1"<<endl;
394 cout<<
"Dans While 2"<<endl;
396 cout<<
"Dans While 3"<<endl;
398 cout<<
"Dans While 4"<<endl;
400 cout<<
"Dans While 5"<<endl;
401 tmpPk=
Solve(*Mat,tmpPk,&pr,&pc);
402 cout<<
"Dans While 6"<<endl;
405 cout<<
"my_rank(*Mat)"<<my_rank(*Mat)<<endl;
406 cout<<
"tmpPk.size()"<<tmpPk.size()<<endl;
407 if(my_rank(*Mat)==(
int)tmpPk.size()) flag=0;
413 cout<<
"While fini"<<endl;
414 for(
typename typP::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
416 Pk.push_back(convert<pol>(*iter,b,serv));
417 cout<<
"tmpPk"<<*iter<<endl;
426 template<
typename pol,
typename coeff,
typename workspace>
432 int i=0,
j=0,
k=0,p=0,q=0;
434 mcoeff_t *tmpnf,*tmpspace,zero=0;
435 unsigned char *tmpnfind;
437 cout<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res)<<endl<<
438 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf)<<endl;
440 if(res.sizenf<nf.sizenf)
447 for(i=0;i<res.sizenf;i++)
449 if(res.nfind[i]|nf.nfind[i])
451 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
454 if ((res.nfind[i]>>
j)&1)
456 if((nf.nfind[i]>>
j)&1)
464 for(i=res.sizenf;i<nf.sizenf;i++)
468 if ((nf.nfind[i]>>
j)&1)
470 w->
tabcoeff[8*i+
j]=((mcoeff_t)-1)*toto*(nf.
nf[q-1]);
475 for(
int i=0;i<nf.sizenf;i++)
478 ,tmpsize*
sizeof(
COEFF));
480 res.nfind=(
unsigned char*)realloc(res.nfind,nf.sizenf);
481 res.sizenf=nf.sizenf;
483 for(
int i=0;i<nf.sizenf;i++)
504 for(i=0;i<nf.sizenf;i++)
509 unsigned char mask=1;
511 if(res.nfind[i]==255)
515 for(
int j=0;
j<8;
j++,mask<<=1)
518 if (res.nfind[i]&mask)
524 unsigned char mask=1;
527 for(
int j=0;
j<8;
j++,mask<<=1)
534 for(
int j=0;
j<8;
j++,mask<<=1)
545 if(res.nfind[i]|nf.nfind[i])
547 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
550 if ((res.nfind[i]>>
j)&1)
554 if((nf.nfind[i]>>
j)&1)
562 for(i=nf.sizenf;i<res.sizenf;i++)
566 if ((res.nfind[i]>>
j)&1)
573 for(
int i=0;i<res.sizenf;i++)
576 ,tmpsize*
sizeof(
COEFF));
580 for(
int i=0;i<res.sizenf;i++)
599 cout<<
"k "<<
k<<
" tmpsize "<<tmpsize<<endl;
601 for(
int i=0;i<res.sizenf;i++)
604 if ((res.nfind[i]>>
j)&1)
606 cout<<
"j'ai fait n'importe quoi ici"<<endl;
607 cout<<
"les resultat "<<endl<<invconv<Poly>(res)<<endl;
611 template<
typename pol,
typename coeff>
617 int i=0,
j=0,
k=0,p=0,q=0;
619 mcoeff_t *tmpnf,*tmpspace;
620 unsigned char *tmpnfind;
622 cout<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res)<<endl<<
623 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf)<<endl;
625 if(res.sizenf<nf.sizenf)
628 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*nf.sizenf*8);
629 for(
int i=0;i<nf.sizenf*8;i++)
631 for(
int i=0;i<res.sizenf;i++)
632 tmpsize+=
nbbits[res.nfind[i]|nf.nfind[i]];
633 for(
int i=0;i<nf.sizenf;i++)
636 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
637 tmpnfind=(
unsigned char*)
638 MAC_REV_MALLOC<unsigned char>(nf.sizenf);
641 for(
int i=0;i<res.sizenf;i++)
643 if(res.nfind[i]|nf.nfind[i])
646 if ((res.nfind[i]>>
j)&1)
647 tmpspace[8*i+
j]=res.
nf[p++];
648 if((nf.nfind[i]>>
j)&1)
649 tmpspace[8*i+
j]-=toto*nf.
nf[q++];
651 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
654 for(
int i=res.sizenf;i<nf.sizenf;i++)
658 if ((nf.nfind[i]>>
j)&1)
659 tmpspace[8*i+
j]=((mcoeff_t)-1)*toto*(nf.
nf[q++]);
660 tmpnfind[
i]=nf.nfind[
i];
662 for(
int i=0;i<nf.sizenf;i++)
665 if ((tmpnfind[i]>>
j)&1)
667 tmpnf[
k++]=tmpspace[8*i+
j];
669 tmpnfind[
i]&=~(1<<
j);
670 MAC_REV_FREE<mcoeff_t>(tmpspace,nf.sizenf*8*
sizeof(mcoeff_t));
671 res.sizenf=nf.sizenf;
676 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*res.sizenf*8);
677 for(
int i=0;i<res.sizenf*8;i++)
679 for(
int i=0;i<nf.sizenf;i++)
680 tmpsize+=
nbbits[res.nfind[i]|nf.nfind[i]];
681 for(
int i=0;i<res.sizenf;i++)
684 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
685 tmpnfind=(
unsigned char*)
686 MAC_REV_MALLOC<unsigned char>(res.sizenf);
688 for(
int i=0;i<nf.sizenf;i++)
690 if(res.nfind[i]|nf.nfind[i])
693 if((res.nfind[i]>>
j)&1)
694 tmpspace[8*i+
j]=res.
nf[p++];
695 if((nf.nfind[i]>>
j)&1)
696 tmpspace[8*i+
j]-=toto*nf.
nf[q++];
698 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
701 for(
int i=nf.sizenf;i<res.sizenf;i++)
705 if((res.nfind[i]>>
j)&1)
706 tmpspace[8*i+
j]=res.
nf[p++];
707 tmpnfind[i]=res.nfind[i];
710 for(
int i=0;i<res.sizenf;i++)
713 if ((tmpnfind[i]>>
j)&1)
715 tmpnf[
k++]=tmpspace[8*i+
j];
717 tmpnfind[
i]&=~(1<<
j);
719 MAC_REV_FREE<mcoeff_t>(tmpspace,res.sizenf*8*
sizeof(mcoeff_t));
722 cout<<
"k "<<
k<<
" tmpsize "<<tmpsize<<endl;
724 MAC_REV_FREE<mcoeff_t>(res.
nf,res.
size*
sizeof(mcoeff_t));
726 MAC_REV_FREE<unsigned char>(res.nfind,res.sizenf);
730 res.
nf=(mcoeff_t*)MAC_REV_REALLOC<mcoeff_t>(res.
nf,res.
size*
sizeof(mcoeff_t)
731 ,
k*
sizeof(mcoeff_t));
739 for(
int i=0;i<res.sizenf;i++)
742 if ((tmpnfind[i]>>
j)&1)
744 cout<<
"j'ai fait n'importe quoi ici"<<endl;
745 cout<<
"les resultat "<<endl<<invconv<Poly>(res)<<endl;
752 template<
typename mon,
typename Base>
772 template<
typename typpol,
typename typdump,
typename Base>
773 typpol
nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
777 typedef typename typdump::value_type
dumpstruct;
785 typename typdump::const_iterator iter;
790 for(iter=dump.begin();
791 (iter!=dump.end()) && (iter->k!=deg);iter++);
800 for(i=0;i<iter->size;i++)
803 if(iter->nf[i].ind.rep==tmpmon.
rep)
818 void getperm(
int *perm,
int sizeperm,
int *indextab)
820 int median=indextab[sizeperm/2],
i,
j=sizeperm-1;
823 if(indextab[i]>median)
826 indextab[
j]=indextab[
i];
830 perm[sizeperm/2]=sizeperm-
i;
831 getperm(perm,sizeperm-i-1,indextab);
832 getperm(perm+sizeperm-i,i,indextab+sizeperm-i);
836 template<
typename typpol,
typename typdump,
typename Base,
typename mon,
838 typpol
inline mult(
int i,
const typpol &
pol,
const typdump &dump,
842 typedef typename typpol::coeff_t coeff;
843 static const mon monzero=
mon(0);
846 (*exce)=(
mon*)MAC_REV_MALLOC<mon>((pol.size+1)*
sizeof(
mon));
847 int *stockindicetab=(
int*)
malloc(pol.size*
sizeof(
int));
848 int noquo=0,maxind=0,p=0,q=0;
852 for(
int j=0;
j<pol.sizenf;++
j)
856 if((pol.nfind[
j]>>
k)&1)
858 int stockindice2=mulind(8*
j+
k,i,b);
860 stockindice2=-1*(8*
j+
k)-1;
861 stockindicetab[p++]=stockindice2;
865 if (stockindice2>=maxind)
884 cout<<
" a '"<<q<<endl;
889 if(stockindicetab[
j]>=0)
895 cout<<
"le monome la "<<tmpmm<<
" "<<pol.nf[
j]<<endl;
899 w.
tabnf[stockindicetab[
j]/8]|=1<<(stockindicetab[
j]%8);
905 tmp=serv.nf(i,-1*(stockindicetab[
j]+1),dump,b);
927 unsigned *tmpptr=(
unsigned*)tmp.nfind;
929 for(k=0;k<tmp.sizenf/
sizeof(
unsigned);k++)
932 ((
unsigned*)w.
tabnf)[
k]|=tmpptr[
k];
934 for(l=0;l<8*
sizeof(unsigned);l++,mask<<=1)
938 -=pol.nf[
j]*tmp.nf[compteurtmp++];
943 for(k=tmp.sizenf-(tmp.sizenf%
sizeof(
unsigned))
949 for(l=0;l<8;l++,mask<<=1)
951 if(tmp.nfind[k]&mask)
952 w.
tabcoeff[8*k+l]-=pol.nf[
j]*tmp.nf[compteurtmp++];
959 for(
int k=0;k<tmp.sizenf;k++)
963 if(tmp.nfind[k]==255)
965 unsigned char mask=1;
967 for(
int l=0;l<8;l++,mask<<=1)
970 pol.nf[
j]*tmp.nf[compteurtmp++];
977 unsigned char mask=1;
979 for(
int l=0;l<8;l++,mask<<=1)
980 if(tmp.nfind[k]&mask)
983 pol.nf[
j]*tmp.nf[compteurtmp++];
996 (*exce)[noquo]=
mon(i,1);
997 int2mon(-1*(stockindicetab[
j]+1),tmpmon);
998 (*exce)[noquo]*=tmpmon;
999 (*exce)[noquo]*=pol.nf[
j];
1005 (*exce)[noquo++]=ret.ind;
1007 (*exce)=(
mon*)MAC_REV_REALLOC<mon>((*exce),(pol.size+1)*
sizeof(
mon)
1008 ,(noquo)*
sizeof(
mon));
1010 for(
int j=0;
j<exsize;
j++)
1011 cout<<
" "<<(*exce)[
j];
1014 ret.ind.SetCoeff(noquo+1);
1024 cout<<
" val p "<<p<<
" et pol.size "<<pol.size<<endl;
1026 ret.nf=(coeff*)MAC_REV_MALLOC<coeff>(ret.size*
sizeof(coeff));
1028 ret.nfind=(
unsigned char *)
malloc(ret.sizenf);
1030 for(
int j=0;
j<ret.sizenf;
j++)
1034 for(
int k=0;
k<8;
k++)
1044 ret.nfind[
j]&=~(1<<
k);
1049 ret.nf=(coeff*)MAC_REV_REALLOC<coeff>(ret.nf,ret.size*
sizeof(coeff),
1053 free(stockindicetab);
1055 cout<<
"ret.size "<<ret.size<<endl;
1056 cout<<invconv<Poly>(ret)<<endl;
1057 cout<<
"-----------------------------------"<<endl;
1059 for(
int i=0;i<ret.sizenf;i++)
1061 for(
int j=0;
j<8;
j++)
1062 if ((ret.nfind[i]>>
j)&1)
1063 if (
Iszero(ret.nf[cpt++]))
1064 cout<<
"nimpici"<<endl;
1070 template <
typename Mon,
typename Base>
1086 template<
typename typmon,
typename Base>
1094 for(j=0;j<b.
nbvar();j++)
1105 template<
typename typPk,
typename typP,
typename typexceed,
1110 typedef typename typP::value_type polalp;
1111 typedef typename polalp::order_t ord;
1112 typedef typename polalp::monom_t
mon;
1113 typedef typename typPk::value_type
pol;
1115 coeff * tabcoeff=NULL;
1116 unsigned char *tabindices=NULL;
1117 int tabsize=0,tabnfsize=0;
1119 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1126 for(
typename polalp::iterator iterpol=iter->begin();
1127 iterpol!=iter->end();iterpol++)
1132 if (
IsinB(*iterpol,b) && (serv.
mon2int(*iterpol)>maxind))
1133 maxind=serv.
mon2int(*iterpol);
1136 tabcoeff=(coeff*)MAC_REV_MALLOC<coeff>((maxind+1)*
sizeof(coeff));
1137 tabindices=(
unsigned char*)
malloc(maxind/8+1);
1140 tabnfsize=maxind/8+1;
1141 memset((
void*)tabindices,0,tabnfsize);
1144 for(i=0;i<tabsize;i++)
1152 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,0,iter->size()
1155 for(
typename polalp::iterator iterpol=iter->begin();
1156 iterpol!=iter->end();iterpol++)
1159 cout<<
"IsinB("<<*iterpol<<
","<<
"b)"<<
IsinB(*iterpol,b)<<endl;
1161 if (
IsinB(*iterpol,b))
1164 cout<<
"dedans"<<endl;
1166 int tmp=serv.
mon2int(*iterpol);
1167 tabcoeff[tmp]=iterpol->GetCoeff();
1168 tabindices[tmp/8]|=1<<(tmp%8);
1175 cout<<
"y en a un qu'est pas dans B "<<*iterpol<<endl;
1177 if(!
Iszero(iterpol->GetCoeff()))
1178 tmpex[comp++]=*iterpol;
1181 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,iter->size()*
sizeof(
mon)
1182 ,(comp+1)*
sizeof(
mon));
1184 tmp.
nf=(coeff*)MAC_REV_MALLOC<coeff>(tmp.
size*
sizeof(coeff));
1185 tmp.nfind=tabindices;
1186 tmp.sizenf=tabnfsize;
1189 for(
int i=0;i<tabnfsize;i++)
1192 for(
int j=0;
j<8;
j++)
1193 if (((tabindices[i]>>
j)&1) && !
Iszero(tabcoeff[8*i+
j]))
1194 tmp.
nf[maxind++]=tabcoeff[8*i+
j];
1196 tmp.nfind[
i]&=~(1<<
j);
1198 tmp.
nf=(coeff*)MAC_REV_REALLOC<coeff>(tmp.
nf,tmp.
size*
sizeof(coeff)
1199 ,maxind*
sizeof(coeff));
1201 MAC_REV_FREE<coeff>(tabcoeff,tabsize*
sizeof(coeff));
1202 cout<<
"tmp"<<tmp.
nf<<endl;
1203 cout<<
"tmpex"<<*tmpex<<endl;
1204 cout<<
"comp"<<comp<<endl;
1206 ex.push_back(tmpex);
1207 sizeex.push_back(comp);
1209 cout<<
"ici dans conv merge"<<endl;
1210 for(
int i=0;i<comp;i++)
1211 cout<<tmpex[i]<<
" ";
1217 template<
typename typMk>
1218 int member(
const typMk & tmpMk,
const typename typMk::value_type
mon)
1221 for(
typename typMk::const_iterator iter=tmpMk.begin();
1222 iter!=tmpMk.end();iter++)
1223 if(iter->rep==mon.rep) {res=1;
break;}
1227 template<
typename typMat,
typename typPk,
typename typP,
1228 typename typMk,
typename Base,
typename typdump,
typename typrecall,
1231 int &
k,
Base &b, typdump &dump,typrecall &recall
1234 typedef typename typMk::value_type
mon;
1235 typedef typename typP::value_type::order_t ord;
1236 typedef typename typPk::value_type
pol;
1238 typedef typename typP::value_type polyalp;
1239 typPk tmpPk,workvect;
1242 list<int> sizeexceed;
1243 int nbproj=0,flagdoplus=1,*ncol;
1245 cerr<<
"k on entering newpkmkmatrixof "<<k<<endl;
1247 typrecall verytmp=
Crochet(recall,k+1,serv);
1248 recall.erase(recall.begin(),recall.end());
1252 proj(ttmpP,dump,b,serv);
1255 cout<<
"---------"<<endl;
1256 for(
typename typP::iterator iter=ttmpP.begin();iter!=ttmpP.end();iter++)
1259 #ifdef NO_TWICE_FALL
1260 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1261 if(
Degree(*iter)==k+1) P.erase(iter--);
1262 for(
typename typP::iterator iter=ttmpP.begin()
1263 ;iter!=ttmpP.end();iter++)
1268 nbproj=ttmpP.size();
1277 cout<<
"un des pol de pretendu degre le bon se reduit mal"<<endl;
1282 recover(tmpPk,Mk,dump,tmpdeg);
1284 for (
typename typP::iterator iter=ttmpP.begin();iter!=ttmpP.end();iter++)
1285 cout<<
"pol ICI "<<*iter<<endl;
1289 forget(b,dump,tmpdeg,recall);
1290 serv.
compress(tmpPk,dump,b,tmpdeg);
1291 verytmp.erase(verytmp.begin(),verytmp.end());
1299 for(
typename typP::iterator iter=P.begin()
1300 ;iter!=P.end();iter++)
1301 if(
Degree(*iter)==tmpdeg)
1304 nbproj=ttmpP.size();
1313 Mk.erase(Mk.begin(),Mk.end());
1314 for (
typename typPk::iterator iterpk=tmpPk.begin();
1315 iterpk!=tmpPk.end();iterpk++)
1319 if (
IsinB(iterpk->ind,b))
1322 ;iterb!=b.
end();iterb++)
1324 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
1325 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
1326 (iterb->taille2+1)*
sizeof(
mon));
1327 iterb->refuse[iterb->taille2]=iterpk->ind;
1328 iterb->refuse[iterb->taille2].SetCoeff(1);
1333 for(
typename typPk::iterator iter=tmpPk.begin()
1334 ;iter!=tmpPk.end();iter++)
1336 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
1338 tmpMk.push_back(*tmp);
1339 exceed.push_back(tmp);
1340 sizeexceed.push_back(1);
1365 for(i=0;i<b.
nbvar();i++)
1368 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1373 mon tmpmon=iter->ind*
mon(i,1);
1376 if(!
member(tmpMk,tmpmon))
1382 typename typrecall::iterator iterrec;
1387 pol stockmult=
mult(i,*iter,dump,b,&tmp,tmpsize,w
1395 cout<<
"apres mult "<<tmpsize<<endl;
1399 tmpMk.push_back(tmpmon);
1400 tmpPk.push_back(stockmult);
1401 exceed.push_back(tmp);
1402 sizeexceed.push_back(tmpsize);
1414 conv_merge(tmpPk,ttmpP,exceed,sizeexceed,b,serv);
1418 for(
typename typPk::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
1419 cout<<
"invocn"<<invconv<Poly>(*iter,serv)<<endl;
1471 typename typPk::iterator tmpiter=tmpPk.begin();
1472 list<int>::iterator itersize=sizeexceed.begin();
1473 for(
typename list<mon*>::iterator iter=exceed.begin();iter!=exceed.end()
1474 ;tmpiter++,iter++,itersize++)
1476 cout<<
"pour un exceeed la taille attendue est "
1478 for(
int i=0;*itersize>
i;i++)
1480 cout<<
"le gus que je regarde "<<(*iter)[
i]<<endl;
1481 if(!
member(tmpMk,(*iter)[i]))
1483 cout<<(*iter)[
i]<<endl;
1484 cout<<
"dans ce pol "<<invconv<Poly>(*tmpiter)<<endl;
1485 cout<<
"l'ind "<<tmpiter->ind<<endl;
1492 mat.nrow=tmpPk.size();
1493 mat.ncol=tmpMk.size();
1494 ncol=(
int*)calloc(mat.ncol,
sizeof(
int));
1496 map<mon,int,ord> mapint;
1497 typename typMk::iterator itermk=tmpMk.begin();
1498 typename typPk::iterator iterpk=tmpPk.begin();
1499 typename list<mon*>::iterator iterex=exceed.begin();
1500 list<int>::iterator itersize=sizeexceed.begin();
1502 for(
int i=0;itermk!=tmpMk.end();
i++,itermk++)
1505 cout<<
"mapint "<<*itermk<<
" "<<
i<<endl;
1507 iterpk=tmpPk.begin();
1509 for(;iterpk!=tmpPk.end();iterpk++,iterex++,itersize++,line_num++)
1513 cout<<
"itesize "<<*itersize<<endl;
1526 for(
int i=0;*itersize>
i;i++)
1529 if (mapint.count((*iterex)[i]))
1532 cout<<
"iterex ici "<<(*iterex)[
i]<<endl;
1534 ++ncol[mapint[(*iterex)[
i]]];
1541 cout<<
"OUILLE OUILLE OUILLE "<<(*iterex)[
i]<<endl;
1544 mapint[(*iterex)[
i]]=mat.ncol-1;
1545 ncol=(
int*)realloc(ncol,mat.ncol*
sizeof(
int));
1546 ncol[mapint[(*iterex)[
i]]]=1;
1549 mon tmpmon=(*iterex)[
i];
1552 tmpMk.push_back(tmpmon);
1557 tmppol=convert<pol>(tmppolyalp,b);
1558 tmpPk.push_back(
mult(j,tmppol,dump,b,&tmp,tmpsize,w));
1559 exceed.push_back(tmp);
1560 sizeexceed.push_back(tmpsize);
1574 cout<<
"nnz of matrix "<<nnz<<endl;
1576 void * toto=MAC_REV_MALLOC<coeff>(nnz*
sizeof(
typename typMat::coeff_t));
1578 if (mat.nzval!=NULL) MAC_REV_FREE<typename typMat::coeff_t>
1580 *
sizeof(
typename typMat::coeff_t));
1590 if(mat.rowind!=NULL)
free(mat.rowind);
1591 mat.rowind=(
int*)
malloc(nnz*
sizeof(
int));
1593 if(mat.colptr!=NULL)
free(mat.colptr);
1594 mat.colptr=(
int*)
malloc((mat.ncol+1)*
sizeof(int));
1595 cout<<
"matrix of size "<<mat.nrow<<
"x"<<mat.ncol<<endl;
1597 typename typMat::coeff_t* nzval=(
typename typMat::coeff_t*)mat.nzval;
1598 int *rowind=mat.rowind;
1599 int *colptr=mat.colptr;
1602 for(
int i=0;
i<mat.ncol-1;
i++)
1604 colptr[
i+1]=colptr[
i]+ncol[
i];
1608 colptr[mat.ncol]=mat.nnz;
1616 itermk=tmpMk.begin();
1617 iterpk=tmpPk.begin();
1618 iterex=exceed.begin();
1619 itersize=sizeexceed.begin();
1622 for(;0&&(line_num < (int)(tmpPk.size()-nbproj));
1623 iterpk++,iterex++,itersize++,line_num++)
1627 mon tmpmon=iterpk->ind;
1630 const unsigned int tmpplus
1631 =mapint[tmpmon]+1,tmp=tmpplus-1;
1634 nzval[colptr[tmpplus]-ncol[tmp]]=1;
1640 rowind[colptr[tmpplus]-ncol[tmp]]=line_num;
1645 for(
int i=0;*itersize>
i;i++)
1647 const coeff stock=(*iterex)[
i].GetCoeff();
1648 (*iterex)[
i].SetCoeff(1);
1649 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1650 const unsigned int tmpex=mapint[(*iterex)[
i]];
1651 nzval[colptr[tmpplusex]-ncol[tmpex]]
1653 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1655 cout<<(*iterex)[
i]<<
" valeur de ncol["<<tmpex<<
"] "<<ncol[tmpex]<<endl;
1658 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1660 for(;(iterpk!=tmpPk.end());iterpk++,iterex++,itersize++,line_num++)
1665 cout<<
"=================================================="<<endl;
1667 for(
int i=0;*itersize>
i;i++)
1669 cout<<
" le monome "<<(*iterex)[
i]<<endl;
1670 const coeff stock=(*iterex)[
i].GetCoeff();
1671 (*iterex)[
i].SetCoeff(1);
1672 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1673 const unsigned int tmpex=mapint[(*iterex)[
i]];
1674 nzval[colptr[tmpplusex]-ncol[tmpex]]
1676 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1678 cout<<
"tmpex "<<tmpex<<endl;
1679 cout<<
"tmpplusex "<<tmpplusex<<endl;
1680 cout<<
"colptr[tmpplusex] "<<colptr[tmpplusex]<<endl;
1681 cout<<
"ncol[tmpex] "<<ncol[tmpex]<<endl;
1682 cout<<
"linenum "<<line_num<<endl;
1683 cout<<
"nzval "<<stock<<endl;
1684 cout<<
"rowind "<<line_num<<endl;
1685 cout<<
"colptr[tmpplusex]-ncol[tmpex] "<<colptr[tmpplusex]-ncol[tmpex]+1<<endl;
1688 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1693 for(
typename typPk::iterator iterpk=tmpPk.begin()
1694 ;iterpk!=tmpPk.end();iterpk++)
1695 iterpk->ind.SetCoeff(1);
1705 cout<<
"les indices de lignes et le nnz"<<endl;
1706 for(
int i=0;
i<mat.nnz;
i++)
1707 cout<<mat.rowind[
i]<<
" "<<((
typename typMat::coeff_t*)mat.nzval)[
i]<<endl;
1708 cout<<
"fin matrice"<<endl;
1718 template<
typename typdump,
typename mon,
typename pol>
1722 typename typdump::const_iterator iter=dump.begin();
1723 for(;(iter!=dump.end())&&(iter->k!=d);iter++);
1725 cout<<
"dump"<<iter->k<<endl;
1726 cout<<
"nf"<<iter->nf[
i].ind.rep<<endl;
1727 cout<<
"m.rep"<<m.
rep<<endl;
1729 if(iter!=dump.end())
1731 for(i=0;(i<iter->size)&&(iter->nf[i].ind.rep!=m.
rep);i++);
1732 cout<<
"monomes passe en revue pour chercher "<<m<<
" : "<<iter->nf[
i].ind<<endl;;
1756 template<
typename iterator,
typename mon,
typename Base>
1761 if(iter1->ind.GetDegree(
i)>iter2->ind.GetDegree(
i))
1763 if(iter2->ind.GetDegree(
i)>iter1->ind.GetDegree(
i))
1768 template <
typename mon,
typename pol,
typename typdump,
typename Base,
1770 pol
halfred(
const mon &targetind,
const pol & p,
const typdump & dump
1774 static const mon monzero=
mon(0);
1776 int *place=(
int*)MAC_REV_MALLOC<int>(p.
size*
sizeof(
int)),comp=0;
1783 int i,maxref=0,ppp=0,nbbitsun=0;
1787 for(i=0;i<b.
nbvar();i++)
1789 cout<<
"targetind.GetDegree(i)"<<targetind.
GetDegree(i)<<endl;
1807 cout<<
"p.size"<<endl;
1808 for(i=0;i<p.sizenf;i++)
1813 cout<<nbbitsun<<
" p.nfind[i] "<<(int)p.nfind[i]<<endl;
1815 nbbitsun+=
nbbits[p.nfind[i]];
1816 for(
int j=0;
j<8;
j++)
1818 if((p.nfind[i]>>
j)&1)
1821 cout<<
"8*i+j"<<8*i+
j<<endl;
1822 cout<<
"varref"<<varref<<endl;
1823 cout<<
"comp"<<comp<<endl;
1824 cout<<
"place[comp]"<<place[comp]<<endl;
1825 place[comp]=serv.
mulind(8*i+
j,varref,b);
1826 cout<<
"place[comp]"<<place[comp]<<endl;
1828 place[comp]=-1*(8*i+
j+1);
1829 if (place[comp]>maxref)
1831 cout<<
"maxref"<<maxref<<endl;
1846 place[comp]=indtmpmon;
1850 place[comp]=-1*(8*i+
j);
1858 cout<<
"despues del for"<<endl;
1859 coeff *tmpspace=(coeff*)MAC_REV_MALLOC<coeff>((maxref/8+1)*8*
sizeof(coeff));
1861 cout<<
"comp "<<comp<<
" et p.size "<<p.
size<<endl;
1863 res.sizenf=(maxref/8+1);
1864 for(
int j=0;
j<8*res.sizenf;
j++)
1866 res.nfind=(
unsigned char*)MAC_REV_MALLOC<unsigned char>(res.sizenf);
1867 memset(res.nfind,0,res.sizenf);
1868 cout<<
"por aqui"<<endl;
1869 for(
int j=0;
j<nbbitsun;
j++)
1875 cout<<
"le monome la "<<tmpmm<<
" "<<p.
nf[
j]<<endl;
1877 tmpspace[place[
j]]+=p.
nf[
j];
1878 res.nfind[place[
j]/8]|=1<<(place[
j]%8);
1884 tmp=serv.nf(varref,-1*place[
j]-1,dump,b);
1889 tmp=nf<typpol>(tmpmon,dump,b);
1897 if(tmp.sizenf>res.sizenf)
1899 res.nfind=(
unsigned char*)realloc(res.nfind,tmp.sizenf);
1900 for(
int k=res.sizenf;
k<tmp.sizenf;
k++)
1902 tmpspace=(coeff*)MAC_REV_REALLOC<coeff>(tmpspace,
1903 res.sizenf*8*
sizeof(coeff),
1904 tmp.sizenf*8*
sizeof(coeff));
1905 for(
int k=res.sizenf*8;
k<tmp.sizenf*8;
k++)
1907 res.sizenf=tmp.sizenf;
1910 for(
int k=0;
k<tmp.sizenf;
k++)
1914 for(
int l=0;l<8;l++)
1915 if((tmp.nfind[
k]>>l)&1)
1916 tmpspace[8*
k+l]-=p.
nf[j]*tmp.
nf[compteurtmp++];
1918 res.nfind[
k]|=tmp.nfind[
k];
1924 serv.
int2mon(-1*place[j]-1,tmpmon);
1925 tmpmon*=
mon(varref,1);
1927 cout<<i<<
" "<<serv.
int2mon_[i]<<endl;
1928 cout<<
"monom "<<tmpmon<<
" "<<-1*place[j]
1929 <<
" "<<p.
nf[j]<<endl;
1930 cerr<<
"Je n'aurrai pas du passer par la "<<endl;
1934 cout<<
"despues del segundo for"<<endl;
1937 for(
int j=0;
j<res.sizenf;
j++)
1940 res.
nf=(coeff*)MAC_REV_MALLOC<coeff>(comp*
sizeof(coeff));
1943 cout<<
"antes del ultimo for"<<endl;
1944 for(
int j=0;
j<res.sizenf;
j++)
1946 for(
int k=0;
k<8;
k++)
1947 if((res.nfind[
j]>>
k)&1)
1948 if(tmpspace[8*
j+
k]!=0)
1949 {res.
nf[comp++]=tmpspace[8*
j+
k];
1953 res.nfind[
j]&=~(1<<
k);
1954 cout<<
"despues del ultimo for"<<endl;
1955 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
1956 ,comp*
sizeof(coeff));
1957 cout<<
"res.nf"<<endl;
1959 cout<<
"res.size"<<endl;
1962 cout<<
"tmpspace.size"<<res.sizenf*8*
sizeof(coeff)<<res.sizenf*8<<endl;
1963 MAC_REV_FREE<coeff>(tmpspace,res.sizenf*8*
sizeof(coeff));
1964 cout<<
"antes de free"<<endl;
1970 template <
typename typPk,
typename typdump,
typename Base,
1972 void ReduceSpol(typPk &S,
const typdump & dump,typPk &redspol,
const Base &b
1976 typedef typename typPk::value_type
pol;
1980 list<typPk> membermon;
1981 cout<<
"en entree de RedSpol S.size "<<S.size()/2<<endl;
1983 for(
typename typPk::iterator iterS=S.begin();iterS!=S.end();iterS++,iterS++)
1985 typename typPk::iterator iterS2=iterS;
1986 typename list<mon>::iterator itermon=leadmon.begin();
1987 typename list<typPk>::iterator itermemb=membermon.begin();
1988 mon var1,var2,tmpleadmon;
1990 varmult(iterS,iterS2,var1,var2,b);
1991 tmpleadmon=iterS->ind*var1;
1992 cout<<
"tmpleadmon"<<tmpleadmon<<endl;
1994 for(;itermon!=leadmon.end()&&itermon->rep!=tmpleadmon.
rep;
1995 itermon++,itermemb++);
1996 if(itermon!=leadmon.end())
1999 for(
typename typPk::iterator tmpiter=itermemb->begin();
2000 tmpiter!=itermemb->end();tmpiter++)
2002 if(tmpiter->ind.rep==iterS->ind.rep) yes1=0;
2003 if(tmpiter->ind.rep==iterS2->ind.rep) yes2=0;
2005 if(yes1) itermemb->push_back(*iterS);
2006 if(yes2) itermemb->push_back(*iterS2);
2010 cout<<
"iterS"<<iterS->ind<<endl;
2011 cout<<
"iterS2"<<iterS2->ind<<endl;
2013 leadmon.push_back(tmpleadmon);
2015 membermon.push_back(verytmp);
2016 membermon.back().push_back(*iterS);
2017 membermon.back().push_back(*iterS2);
2020 cout<<
"sale del primer for"<<endl;
2024 typename list<mon>::iterator itermon=leadmon.begin();
2025 typename list<typPk>::iterator itermemb=membermon.begin();
2026 cout<<
"antes del otro for"<<endl;
2027 for(;itermon!=leadmon.end();itermon++,itermemb++)
2029 typename typPk::value_type ref;
2030 typename typPk::iterator tmpiter=itermemb->begin();
2031 cout<<
"antes halfred"<<endl;
2033 cout<<
"tmpiter"<<tmpiter->ind<<endl;
2034 ref=
halfred(*itermon,*tmpiter,dump,b,serv);
2035 cout<<
"ref.size "<<ref.size<<
" "<<ref.ind<<endl;
2038 for(;tmpiter!=itermemb->end();tmpiter++)
2040 typename typPk::value_type redcur;
2041 redcur=
halfred(*itermon,*tmpiter,dump,b,serv);
2042 my_plus(redcur,ref,(coeff)1,&w);
2045 redspol.push_back(redcur);
2051 MAC_REV_FREE<coeff>(redcur.nf,redcur.size*
sizeof(coeff));
2052 MAC_REV_FREE<unsigned char>(redcur.nfind,redcur.sizenf);
2055 MAC_REV_FREE<coeff>(ref.nf,ref.size*
sizeof(coeff));
2056 MAC_REV_FREE<unsigned char>(ref.nfind,ref.sizenf);
2061 template<
typename typPk,
typename monomial_server>
2064 typedef typename typPk::value_type::monom_t
mon;
2068 for(
typename typPk::const_iterator iter=l.begin() ;iter!=l.end();iter++)
2072 for(
int i=0;
i<iter->sizenf;
i++)
2074 for(
int j=0;
j<8;
j++)
2075 if((iter->nfind[
i]>>
j)&1)
2082 if (iter->ind.GetCoeff()==(coeff)1)
2083 mmax=(mmax<iter->ind.GetDegree())?iter->ind.GetDegree():mmax;
2087 if(res==-1) res=mmax;
2088 res=(mmax>res)?res:mmax;
2095 template<
typename coeff,
typename typiterpk,
typename workspace>
2100 if((iterPk->sizenf>tmpind/8)&&(((iterPk->nfind[tmpind/8])>>(tmpind%8))&1))
2106 for(
int j=0;8*
j<=tmpind;
j++)
2108 for(
int j=7;
j>=(tmpind % 8);
j--)
2109 if((iterPk->nfind[tmpind/8]>>
j)&1)
2113 cout<<
"i ici "<<i<<
" et iterPk->size "<<iterPk->size<<endl;
2120 for(
int j=i;
j<iterPk->size-1;
j++){
2121 iterPk->nf[
j]=iterPk->nf[
j+1];
2123 iterPk->nfind[tmpind/8]&=~(1<< (tmpind%8));
2124 iterPk->nf=(coeff*)MAC_REV_REALLOC<coeff>(iterPk->nf,
2125 iterPk->size*
sizeof(coeff),(iterPk->size-1)*
sizeof(coeff));
2128 my_plus(*iterPk,*iter,tmp,&w);
2135 template<
typename typP,
typename typPk,
typename typMk
2136 ,
typename Base,
typename typdump,
typename typrecall,
2139 ,
int &
k,typdump &dump, Base &b, typrecall & recall
2146 typedef typename typP::value_type polyalp;
2147 typedef typename polyalp::monom_t
mon;
2148 typedef typename polyalp::coeff_t coeff;
2167 typPk res=
Crochet(redspol,k,serv),tmpres;
2170 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2172 for(
typename typPk::iterator iterredspol=redspol.begin();
2173 iterredspol!=redspol.end();iterredspol++)
2174 if(iter->nf==iterredspol->nf)
2176 redspol.erase(iterredspol);
2181 redspol.erase(redspol.begin(),redspol.end());
2184 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2190 iter->ind=choice(*iter,b,serv);
2195 if(iter->ind.GetDegree()<
k)
2198 k=iter->ind.GetDegree();
2203 tmpres.erase(tmpres.begin(),tmpres.end());
2204 res.erase(res.begin(),res.end());
2207 for(
typename typPk::iterator iterres=res.begin()
2208 ;iterres!=res.end();iterres++)
2210 for(
typename typPk::iterator iterredspol=redspol.begin();
2211 iterredspol!=redspol.end();iterredspol++)
2212 if(iterres->nf==iterredspol->nf)
2214 redspol.erase(iterredspol);
2218 for(
typename typPk::iterator iterredspol=redspol.begin();
2219 iterredspol!=redspol.end();iterredspol++)
2220 if(
Degree(*iterredspol,serv)<=
k)
2222 tmpres.push_back(*iterredspol);
2223 redspol.erase(iterredspol--);
2226 redspol.erase(redspol.begin(),redspol.end());
2228 tmpres.erase(tmpres.begin(),tmpres.end());
2230 iter->ind=choice(*iter,b,serv);
2240 serv.
compress(Pk,redspol,dump,b,k);
2264 *iter/=iter->ind.GetCoeff();
2266 iter->ind*=(coeff)1/iter->ind.GetCoeff();
2267 tmpind=serv.
mon2int(iter->ind);
2269 for(
int j=0;8*
j<=tmpind;
j++)
2271 for(
int j=7;
j>=(tmpind % 8);
j--)
2272 if((iter->nfind[tmpind/8]>>
j)&1)
2274 for(
int j=i;
j<iter->size-1;
j++)
2275 iter->nf[
j]=iter->nf[
j+1];
2276 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf,
2277 iter->size*
sizeof(coeff),
2278 (iter->size-1)*
sizeof(coeff));
2279 iter->nfind[tmpind/8]&=~(1<<(tmpind%8));
2282 cout<<
"apres tambouille"<<endl<<invconv<Poly>(*iter)<<endl;
2297 tmpres.push_back(*iter);
2302 for(
typename typPk::iterator iterPk=Pk.begin();iterPk!=Pk.end();iterPk++)
2303 update_crochetchoix<coeff>(iterPk,iter,tmpind,w);
2304 typename typPk::iterator iterredspol=iter;
2306 for(;iterredspol!=res.end();iterredspol++)
2310 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w);
2313 typename typPk::iterator iterend=tmpres.end();
2315 for(iterredspol=tmpres.begin();iterredspol!=iterend;iterredspol++)
2319 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w);
2327 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iterb->taille1*
sizeof(mon));
2328 for(
int i=0;i<iterb->taille1;i++)
2330 tmp[tmptaille1++]=iterb->accept[i];
2331 tmp=(mon*)MAC_REV_REALLOC<mon>(tmp,iterb->taille1*
sizeof(
mon)
2332 ,tmptaille1*
sizeof(mon));
2333 MAC_REV_FREE<mon>(iterb->accept,iterb->taille1*
sizeof(
mon));
2335 iterb->taille1=tmptaille1;
2336 if(iterb->taille1==0)
2338 MAC_REV_FREE<mon>(iterb->refuse,iterb->taille2*
sizeof(
mon));
2342 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2343 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2344 (iterb->taille2+1)*
sizeof(
mon));
2345 iterb->refuse[iterb->taille2]=iter->ind;
2347 iterb->refuse[iterb->taille2].SetCoeff(1);
2354 for (
typename typPk::iterator iterpk=Pk.begin();iterpk!=Pk.end();iterpk++)
2358 if (
IsinB(iterpk->ind,b))
2362 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2363 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2364 (iterb->taille2+1)*
sizeof(
mon));
2365 iterb->refuse[iterb->taille2]=iterpk->ind;
2366 iterb->refuse[iterb->taille2].SetCoeff(1);
2371 #ifdef NO_TWICE_FALL
2372 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2373 P.push_back(invconv<polyalp>(*iter));
2376 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2377 P.push_back(invconv<polyalp>(*iter));
2378 cout<<
"a la fin de §New"<<endl;
2381 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2382 cout<<
"tmpres"<<endl<<invconv<polyalp>(*iter)<<endl;
2383 cout<<
"tmpres.size "<<tmpres.size()<<endl;
2406 template<
typename typPk>
2410 for(
typename typPk::iterator iter=redspol.begin();
2411 iter!=redspol.end();iter++)
2414 MAC_REV_FREE<typename typPk::value_type::coeff_t>(iter->nf,iter->size*
sizeof(
typename typPk::value_type::coeff_t));
2415 MAC_REV_FREE<unsigned char>(iter->nfind,iter->sizenf);
2419 template<
typename typMk>
2422 Spoldejavu.erase(Spoldejavu.begin(),Spoldejavu.end());
2423 for(
typename typMk::const_iterator iter1=Mk.begin();iter1!=Mk.end();
2425 for(
typename typMk::const_iterator iter2=iter1;iter2!=Mk.end();
2428 typename typMk::value_type tmp=
lcm(*iter1,*iter2);
2429 if (tmp.GetDegree()==iter1->GetDegree()+1)
2430 Spoldejavu.push_back(tmp);
2435 template<
typename Base,
typename typstock,
typename typdump>
2437 const Base &b,
const typdump &dump)
2439 typedef typename typstock::value_type
mon;
2442 current.push_back(
mon(1));
2443 stockmon.push_back(
mon(1));
2450 for(
int i=0;
i<
k;
i++)
2452 typstock tmpcurrent=current;
2453 current.erase(current.begin(),current.end());
2456 for(
typename list<mon>::iterator iter=tmpcurrent.begin();
2457 iter!=tmpcurrent.end();iter++)
2459 mon tmpmon=(*iter)*
mon(
i,1);
2461 current.push_back(tmpmon);
2465 for(
typename list<mon>::iterator iter=current.begin();iter!=current.end();iter++)
2466 if(!
member(stockmon,*iter))
2468 stockmon.push_back(*iter);
2472 current.erase(iter--);
2480 static bool less (
const M &,
const M &);
2481 bool operator() (
const M &,
const M &)
const;
2490 typedef typename M::monom_t
mon;
2491 mon m1=*(p1.begin());
2492 mon m2=*(p2.begin());
2493 int dm1=0,dm2=0,firstdiff=0,tmpdeg1,tmpdeg2;
2497 if(n1 <0 && n2>0)
return false;
2498 if(n2 <0 && n1>0)
return true;
2499 for(
int i=0;
i<=n;
i++)
2503 if(tmpdeg1>tmpdeg2 && firstdiff==0) firstdiff=1;
2504 if(tmpdeg2>tmpdeg1 && firstdiff==0) firstdiff=-1;
2508 if (dm1 < dm2)
return false;
2509 else if (dm1 > dm2)
return true;
2510 return (firstdiff==1);
2513 template<
typename typprod,
typename Base,
typename typstock,
typename typdump>
2518 for(
typename typstock::iterator
i=stockmon.begin();
2519 i!=stockmon.end();
i++)
2521 for(
typename typstock::iterator
j=
i;
j!=stockmon.end();
j++)
2522 prod.push_back(*
i * *
j);
2533 template<
typename T>
2534 int dgesvd_(
char *jobu,
char *jobvt,
long *m,
long *n,
2535 T *
a,
long *lda, T *s, T *u,
long *
2536 ldu, T *vt,
long *ldvt, T *work,
long *lwork,
2539 template<
typename typP,
typename typdump,
typename Base,
typename typserv>
2541 const typdump &dump, Base &b, typserv &serv)
2544 typedef typename typP::value_type::order_t ord;
2548 struct blockmatrix<COEFF> C;
2549 struct sparseblock<COEFF> *blockptr;
2552 struct constraintmatrix<COEFF> *constraints;
2563 typP stockprod,stockproj;
2568 list<typename typserv::monom_t> stockmon,stockksur2;
2569 map<mon,int,ord> mapintligne,mapintcolonne,maphankel;
2580 for(
typename list<typename typserv::monom_t>::iterator
2581 iter=stockksur2.begin(); iter!=stockksur2.end();iter++)
2582 if(!
IsinB(*iter,b)) stockksur2.erase(iter--);
2584 cout<<
"monome en degre k/2 "<<endl;
2585 for(
typename list<typename typserv::monom_t>::iterator
2586 iter=stockksur2.begin(); iter!=stockksur2.end();iter++)
2591 for(
typename list<typename typserv::monom_t>::iterator
2592 iter=stockksur2.begin();iter!=stockksur2.end();iter++,i++)
2595 for(
typename list<typename typserv::monom_t>::iterator
2596 iter2=stockksur2.begin();iter2!=stockksur2.end();iter2++,j++)
2598 typename typserv::monom_t mono=*iter * (*iter2);
2600 if (!mapintligne.count(mono))
2602 mapintligne[mono]=
i;
2603 mapintcolonne[mono]=
j;
2615 stockproj=stockprod;
2616 proj(stockproj,dump,b,serv);
2619 cout<<
"produits "<<endl;
2620 for(
typename typP::iterator iter=stockprod.begin();iter!=stockprod.end();
2624 cout<<
"proj "<<endl;
2625 for(
typename typP::iterator iter=stockproj.begin();iter!=stockproj.end();
2640 for(
typename typP::iterator iter=stockprod.begin();
2641 iter!=stockprod.end();iter++)
2642 if(!
IsinB(*(iter->begin()),b))
2645 constraints=
new constraintmatrix<COEFF>[nbconstraint+1];
2647 constraints=(
struct constraintmatrix<COEFF> *)
2648 malloc((nbconstraint+1)*
sizeof(
struct constraintmatrix<COEFF>));
2659 constraints[0].blocks=NULL;
2662 typename typP::iterator iterstockprod=stockprod.begin();
2663 for(
typename typP::iterator iter=stockproj.begin();
2664 iter!=stockproj.end();iter++,iterstockprod++)
2666 if(!
IsinB(*(iterstockprod->begin()),b))
2674 constraints[
i].blocks=NULL;
2677 blockptr=
new sparseblock<COEFF>[1];
2679 blockptr=(
struct sparseblock<COEFF> *)
malloc(
sizeof(
struct sparseblock<COEFF>));
2681 blockptr->blocknum=1;
2684 blockptr->blocksize=stockksur2.size();
2685 blockptr->numentries=2*iter->size()+2;
2686 decal=iter->size()+1;
2688 blockptr->blocksize=stockksur2.size();
2689 blockptr->numentries=iter->size()+1;
2692 blockptr->constraintnum=
i;
2693 blockptr->next=NULL;
2694 blockptr->nextbyblock=NULL;
2696 blockptr->entries=
new COEFF[(blockptr->numentries+1)];
2698 blockptr->entries=(COEFF *)
2702 blockptr->iindices=(
short unsigned int *)
2703 malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2704 blockptr->jindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2706 blockptr->iindices=(
int *)
2707 malloc((blockptr->numentries+1)*
sizeof( int));
2708 blockptr->jindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof( int));
2713 for(
typename typP::value_type::iterator iterpol=iter->begin();
2714 iterpol!=iter->end();k++,iterpol++)
2716 if(mapintligne[*iterpol]<mapintcolonne[*iterpol])
2718 blockptr->iindices[
k]=mapintligne[*iterpol];
2719 blockptr->jindices[
k]=mapintcolonne[*iterpol];
2720 blockptr->entries[
k]=((
COEFF)-1)*iterpol->GetCoeff();
2729 if (mapintligne[*iterpol]!=mapintcolonne[*iterpol] )
2731 blockptr->jindices[
k]=mapintligne[*iterpol];
2732 blockptr->iindices[
k]=mapintcolonne[*iterpol];
2733 blockptr->entries[
k]=((
COEFF)-1)*iterpol->GetCoeff();
2737 blockptr->jindices[
k]=mapintligne[*iterpol];
2738 blockptr->iindices[
k]=mapintcolonne[*iterpol];
2739 blockptr->entries[
k]=((
COEFF)-2)*iterpol->GetCoeff();
2746 if(mapintligne[*(iterstockprod->begin())]<
2747 mapintcolonne[*(iterstockprod->begin())] )
2749 blockptr->iindices[
k]=mapintligne[*(iterstockprod->begin())];
2750 blockptr->jindices[
k]=mapintcolonne[*(iterstockprod->begin())];
2751 blockptr->entries[
k]=1;
2757 if (mapintligne[*(iterstockprod->begin())]!=
2758 mapintcolonne[*(iterstockprod->begin())])
2760 blockptr->iindices[
k]
2761 =mapintcolonne[*(iterstockprod->begin())];
2763 blockptr->jindices[
k]
2764 =mapintligne[*(iterstockprod->begin())];
2765 blockptr->entries[
k]=1;
2771 blockptr->iindices[
k]=mapintligne[*(iterstockprod->begin())];
2772 blockptr->jindices[
k]=mapintcolonne[*(iterstockprod->begin())];
2773 blockptr->entries[
k]=2;
2780 blockptr->next=NULL;
2782 constraints[
i].blocks=blockptr;
2796 int nbhankelrel=0,i_counter=1,j_counter;
2797 for(
typename list<typename typserv::monom_t>::iterator i=stockksur2.begin();
2798 i!=stockksur2.end();i++,i_counter++)
2801 for(
typename list<typename typserv::monom_t>::iterator
j=stockksur2.begin();
2802 j!=stockksur2.end();
j++,j_counter++)
2803 if(!maphankel.count(*i * *
j))
2805 maphankel[*i * *
j]=j_counter*stockksur2.size()+i_counter;
2808 if((maphankel[*i * *j]%stockksur2.size()!=j_counter)
2809 ||(maphankel[*i * *j]/stockksur2.size()!=i_counter))
2814 constraintmatrix<COEFF> *tmpconstraints=
new constraintmatrix<COEFF>[nbhankelrel+nbconstraint+1];
2815 for(
int ii=0;ii<nbhankelrel+nbconstraint;ii++)
2816 tmpconstraints[ii]=constraints[ii];
2817 delete[] constraints;
2818 constraints=tmpconstraints;
2819 blockptr=
new sparseblock<COEFF>[1];
2821 constraints=(
struct constraintmatrix<COEFF> *)
2822 realloc(constraints,
2823 (nbhankelrel+nbconstraint+1)
2824 *
sizeof(
struct constraintmatrix<COEFF>));
2826 blockptr=(
struct sparseblock<COEFF> *)
malloc(
sizeof(
struct sparseblock<COEFF>));
2828 blockptr->blocknum=1;
2829 blockptr->blocksize=stockksur2.size();
2831 blockptr->numentries=4;
2833 blockptr->numentries=2;
2835 blockptr->constraintnum=nbconstraint+nbhankelrel;
2836 blockptr->next=NULL;
2837 blockptr->nextbyblock=NULL;
2839 blockptr->entries=
new COEFF[(blockptr->numentries+1)];
2841 blockptr->entries=(COEFF *)
2845 blockptr->iindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2846 blockptr->jindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2848 blockptr->iindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
2849 blockptr->jindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
2852 if((maphankel[*i * *j]%stockksur2.size())<
2853 (maphankel[*i * *j]/stockksur2.size()))
2855 blockptr->iindices[1]=maphankel[*i * *
j]%stockksur2.size();
2856 blockptr->jindices[1]=maphankel[*i * *
j]/stockksur2.size();
2857 blockptr->entries[1]=1;
2861 if((maphankel[*i * *j]/stockksur2.size())!=
2862 (maphankel[*i * *j]%stockksur2.size()))
2864 blockptr->jindices[1]=maphankel[*i * *
j]%stockksur2.size();
2865 blockptr->iindices[1]=maphankel[*i * *
j]/stockksur2.size();
2866 blockptr->entries[1]=1;
2870 blockptr->jindices[1]=maphankel[*i * *
j]%stockksur2.size();
2871 blockptr->iindices[1]=maphankel[*i * *
j]/stockksur2.size();
2872 blockptr->entries[1]=2;
2876 if(i_counter<j_counter)
2878 blockptr->iindices[2]=i_counter;
2879 blockptr->jindices[2]=j_counter;
2880 blockptr->entries[2]=-1;
2884 if(i_counter!=j_counter)
2886 blockptr->iindices[2]=j_counter;
2887 blockptr->jindices[2]=i_counter;
2888 blockptr->entries[2]=-1;
2892 blockptr->iindices[2]=j_counter;
2893 blockptr->jindices[2]=i_counter;
2894 blockptr->entries[2]=-2;
2898 if((maphankel[*i * *j]/stockksur2.size())!=
2899 (maphankel[*i * *j]%stockksur2.size()))
2901 blockptr->iindices[3]=maphankel[*i * *
j]/stockksur2.size();
2902 blockptr->jindices[3]=maphankel[*i * *
j]%stockksur2.size();;
2903 blockptr->entries[3]=1;
2908 blockptr->numentries--;
2909 blockptr->entries[1]=2;
2912 if(i_counter!=j_counter)
2914 blockptr->iindices[4-decal]=j_counter;
2915 blockptr->jindices[4-decal]=i_counter;
2916 blockptr->entries[4-decal]=-1;
2920 blockptr->numentries--;
2921 blockptr->entries[2]=-2;
2935 blockptr->next=NULL;
2936 constraints[nbconstraint+nbhankelrel].blocks=blockptr;
2950 constraintmatrix<COEFF> *tmpconstraints=
2951 new constraintmatrix<COEFF>[(nbhankelrel+nbconstraint+1)];
2952 for(
int ii=0;ii<nbhankelrel+nbconstraint;ii++)
2953 tmpconstraints[ii]=constraints[ii];
2954 delete [] constraints;
2955 constraints=tmpconstraints;
2957 constraints=(
struct constraintmatrix<COEFF> *)
2958 realloc(constraints,
2959 (nbhankelrel+nbconstraint+1)
2960 *
sizeof(
struct constraintmatrix<COEFF>));
2964 blockptr=
new sparseblock<COEFF>[1];
2966 blockptr=(
struct sparseblock<COEFF> *)
malloc(
sizeof(
struct sparseblock<COEFF>));
2968 blockptr->blocknum=1;
2969 blockptr->blocksize=stockksur2.size();
2970 blockptr->numentries=1;
2971 blockptr->constraintnum=nbconstraint+nbhankelrel;
2972 blockptr->next=NULL;
2973 blockptr->nextbyblock=NULL;
2975 blockptr->entries=
new COEFF[blockptr->numentries+1];
2977 blockptr->entries=(COEFF *)
2981 blockptr->iindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2982 blockptr->jindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2984 blockptr->iindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
2985 blockptr->jindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
2989 blockptr->iindices[1]=1;
2990 blockptr->jindices[1]=1;
2991 blockptr->entries[1]=1;
2992 blockptr->next=NULL;
2993 constraints[nbconstraint+nbhankelrel].blocks=blockptr;
2997 struct blockmatrix<COEFF> X,Z;
3000 int tmpsize=(int)stockksur2.size();
3002 bb=
new COEFF[nbhankelrel+nbconstraint+1];
3004 bb=(COEFF *)
malloc((nbhankelrel+nbconstraint+1)*
sizeof(
COEFF));
3005 #endif //oon a un block de 0
3008 C.blocks=
new blockrec<COEFF>[2];
3010 C.blocks=(
struct blockrec<COEFF> *)
malloc(2*
sizeof(
struct blockrec<COEFF>));
3013 C.blocks[1].blockcategory=MATRIX;
3014 C.blocks[1].blocksize=stockksur2.size();
3016 C.blocks[1].data.mat=
new COEFF[stockksur2.size()*stockksur2.size()+1];
3018 C.blocks[1].data.mat=(COEFF *)
malloc(
3019 (stockksur2.size()*stockksur2.size()+1)*
sizeof(COEFF));
3021 for(
int k=0;k<=(stockksur2.size()*stockksur2.size());k++)
3022 C.blocks[1].data.mat[k]=0;
3024 C.blocks[1].data.mat[1]=0;
3026 C.blocks[1].blockcategory=DIAG;
3027 C.blocks[1].blocksize=stockksur2.size();
3028 C.blocks[1].data.vec=(COEFF *)
malloc(
3029 (stockksur2.size()+1)*
sizeof(COEFF));
3030 for(
int k=0;k<=(stockksur2.size());k++)
3031 C.blocks[1].data.vec[k]=0;
3034 for(i=0;i<=nbhankelrel+nbconstraint;i++)
3036 bb[nbconstraint+nbhankelrel]=(
COEFF)1.;
3041 for(i=1;i<nbconstraint+nbhankelrel+1;i++)
3044 int tsize=constraints[
i].blocks->blocksize;
3045 COEFF* tmp=
new COEFF[tsize*tsize];
3047 for(
int j;
j<tsize*tsize;
j++)
3049 for(
int j=1;
j<=constraints[
i].blocks->numentries;
j++)
3050 tmp[constraints[i].blocks->iindices[
j]-tsize-1+
3051 constraints[i].blocks->jindices[
j]*tsize]=
3052 constraints[i].blocks->entries[
j];
3054 for(
int j=0;
j<tsize;
j++)
3056 for(
int jj=0;jj<tsize;jj++)
3057 cout<<tmp[tsize*(jj)+
j]<<
" ";
3065 sprintf(nom,
"ficprob_%d",d++);
3066 write_prob(nom,tmpsize,
3067 nbhankelrel+nbconstraint,C,bb,constraints);
3069 cout<<
"SDP of size : "<<stockksur2.size()<<
"x"<<nbhankelrel+
3071 initsoln(tmpsize,nbhankelrel+nbconstraint,
3072 C,bb,constraints,&X,&y,&Z);
3073 struct timeval tvini, tvfin;
3074 gettimeofday(&tvini,NULL);
3075 int return_code=easy_sdp((
int)stockksur2.size(),nbhankelrel+
3079 gettimeofday(&tvfin,NULL);
3080 tempsCDSP+=tvfin.tv_sec-tvini.tv_sec+1e-6*(tvfin.tv_usec-tvini.tv_usec);
3088 cout<<
"pobj "<<pobj<<
" dobj "<<dobj<<
" diff "<<pobj-dobj<<endl;
3090 if (1||return_code==8)
3092 long n=stockksur2.size();
3093 COEFF *matdense=
new COEFF[n*n];
3094 COEFF *V=
new COEFF[n*n];
3095 COEFF *S=
new COEFF[n];
3096 COEFF *work=
new COEFF[16*n];
3097 long lwork=16*n,info;
3099 for(
int j=0;
j<n*n;
j++)
3115 for(
int i=1;i<=nbconstraint+nbhankelrel;i++)
3116 cout<<
"y "<<i<<
" "<<y[i]<<endl;
3117 cout<<
"nombre de blocks de X "<<X.nblocks<<endl;
3119 for(
int i=1;i<=X.nblocks;i++)
3122 struct blockrec<COEFF> tmp=X.blocks[
i];
3127 cout<<
"n _________________________________ "<<n<<endl;
3128 cout<<
"blockcat "<<tmp.blockcategory<<
" "<<k<<endl;
3130 switch(tmp.blockcategory)
3133 for(
int j=1;
j<=tmp.blocksize;
j++)
3134 matdense[n*(k+
j-1)+(k+
j-1)]=tmp.data.vec[
j];
3136 for(
int j=1;
j<=tmp.blocksize;
j++)
3138 for(
int jj=1;jj<=tmp.blocksize;jj++)
3139 cout<<matdense[n*(k+jj-1)+
j-1]<<
" ";
3146 for(
int j=1;
j<=tmp.blocksize;
j++)
3147 for(
int jj=1;jj<=tmp.blocksize;jj++)
3148 matdense[n*(k+jj-1)+
j-1]=
3149 tmp.data.mat[tmp.blocksize*(jj-1)+
j-1];
3151 for(
int j=1;
j<=tmp.blocksize;
j++)
3153 for(
int jj=1;jj<=tmp.blocksize;jj++)
3154 cout<<matdense[n*(k+jj-1)+
j-1]<<
" ";
3165 dgesvd_((
char*)
"N",(
char*)
"A",&n,&n,matdense,
3166 &n,S,(COEFF*)NULL,&n,V,&n,work,&lwork,&info);
3168 cout<<
"info svd "<<info<<endl;
3169 cout<<
"val singulieres "<<endl;
3176 if((
abs(S[k-1])==0) || (
abs(S[k-1])>
abs(S[k])*1e6))
break;
3178 cout<<
"----k ici "<<k<<
" et n "<<n<<endl;
3180 for(
int j=1;
j<=n;
j++)
3182 for(
int jj=1;jj<=n;jj++)
3183 cout<<V[n*(jj-1)+
j-1]<<
" ";
3192 cout<<
"equation dans le noyau"<<endl;
3194 typedef typename typP::value_type polyalp;
3196 for(
typename list<typename typserv::monom_t>::iterator
3197 iter=stockksur2.begin();
3198 iter!=stockksur2.end();iter++)
3203 if(!
Iszero(
abs(V[k+n*(mapintcolonne[*iter]-1)])))
3208 tmp+=polyalp(*iter*(COEFF)V[k+n*(mapintcolonne[*iter]-1)]);
3216 newpol.push_back(tmp);
3224 for(
int i=1;i<nbconstraint;i++)
3226 free(constraints[i].blocks->iindices);
3227 free(constraints[i].blocks->jindices);
3228 delete [] constraints[
i].blocks->entries;
3229 delete [] constraints[
i].blocks;
3231 delete [] constraints;
3233 delete [] C.blocks[1].data.mat;
3241 #include"genekersdpa.hpp"
3243 template<
typename typmatmap,
typename typserv>
3248 typename typserv::monom_t m(1);
3249 COEFF *tmpval=matrixmap[m];
3251 sprintf(nomdufic,
"tmpfile_%d",d);
3252 tmpfic.open(nomdufic);
3253 tmpfic<<setprecision(80);
3254 tmpfic<<
"\" Ceci est un message \""<<endl;
3255 tmpfic<<matrixmap.size()-1<<
" = mDIM"<<endl;
3256 tmpfic<<1<<
" = nBLOCK"<<endl;
3257 tmpfic<<dim<<
" = bLOCKsTRUCT"<<endl;
3259 for(
int i=0;
i<((long)matrixmap.size())-2;
i++)
3263 for(
int i=0;
i<dim-1;
i++)
3266 for(
int j=0;
j<dim-1;
j++)
3269 tmpfic<<(
COEFF)(-1*matrixmap[m][
i*dim+
j])<<
",";
3272 tmpfic<<(
COEFF)(-1*matrixmap[m][
i*dim+dim-1])<<
"},";
3276 for(
int j=0;
j<dim-1;
j++)
3277 tmpfic<<-1*matrixmap[m][(dim-1)*dim+
j]<<
",";
3278 tmpfic<<-1*matrixmap[m][dim*dim-1]<<
"}}"<<endl;
3280 matrixmap.erase(matrixmap.find(m));
3281 for(
typename typmatmap::iterator itermat=matrixmap.begin();
3282 itermat!=matrixmap.end();itermat++)
3285 COEFF *tt=itermat->second;
3287 for(
int i=0;
i<dim-1;
i++)
3290 for(
int j=0;
j<dim-1;
j++)
3291 tmpfic<<tt[
i*dim+
j]<<
",";
3292 tmpfic<<tt[
i*dim+dim-1]<<
"},";
3296 for(
int j=0;
j<dim-1;
j++)
3297 tmpfic<<tt[(dim-1)*dim+
j]<<
",";
3298 tmpfic<<tt[dim*dim-1]<<
"}}"<<endl;
3301 matrixmap[m]=tmpval;
3305 template<
typename typmatmap,
typename coeff,
typename typserv>
3308 typedef typename typserv::monom_t
mon;
3310 string ligne,ligne2;
3311 typename string::iterator debut;
3314 stringstream tmpstr;
3316 "perl -i.bak -0777 -ne 'if (/^xMat *= *(.*)(?=yMat)/ms) {$toto=$1; $toto=~s/[[:blank:]{}]\\+?//g; $toto=~s/,\\+?/ /g; print $toto}' lenom"
3318 tmpfic.open(
"lenom");
3321 cout<<
"ligne xVec :"<<ligne<<endl;
3323 cout<<
"ligne coordq :"<<ligne<<endl;
3324 dim=count(ligne.begin(),ligne.end(),
'i')+1;
3325 xVec=
new coeff[
dim];
3326 sol=
new coeff[dim*
dim];
3329 for(string::iterator iter=ligne.begin()+1;iter!=ligne.end();
3330 iter=ligne.begin()+tmpindex+1)
3332 stringstream tmpstr;
3333 cout<<
"iter "<<iter-ligne.begin()<<endl;
3334 tmpindex=ligne.find(
",",iter-ligne.begin());
3335 if (tmpindex==string::npos) tmpindex=ligne.size()-1;
3336 cout<<
"tmpindex "<<tmpindex<<endl;
3337 copy(iter,ligne.begin()+tmpindex,ostream_iterator<char>(tmpstr,
""));
3339 cout<<
"eeeee "<<ligne2<<
" "<<ligne.find(
",",iter-ligne.begin())<<endl;
3342 cout<<
"i "<<i<<endl;
3348 cout<<
"ligne xmat :"<<ligne<<endl;
3354 for(string::iterator iter=ligne.begin()+ligne.find_last_of(
'{');
3356 iter=ligne.begin()+ligne.find(
",",iter-ligne.begin()))
3358 stringstream tmpstr;
3361 int toto=ligne.find(
",",iter-ligne.begin());
3362 cout<<
"ligne "<<ligne<<endl;
3363 cout<<
"toto "<<toto<<
" "<<string::npos<<endl;
3364 if(toto==string::npos) toto=ligne.size()-2;
3365 cout<<
"toto "<<toto<<
" "<<string::npos<<endl;
3366 tmpstr<<ligne.substr(iter-ligne.begin(),toto);
3367 tmpstr>>xMat[dim*j++ +
i];
3373 sol=
new coeff[dim*
dim];
3374 for(
int i=0;i<dim*
dim;i++)
3379 cout<<
"Solution "<<endl;
3380 for(
int i=0;i<dim*
dim;i++)
3385 for(
int i=0;i<dim*
dim;i++)
3386 sol[i]+=matmap[
mon(1)][
i];
3387 matmap.erase(matmap.find(mon(1)));
3389 for(
typename typmatmap::iterator itermat=matmap.begin();
3390 itermat!=matmap.end();itermat++)
3392 for(
int i=0;i<dim*
dim;i++)
3393 sol[i]-=xVec[j]*itermat->second[i];
3399 template<
typename typP,
typename typdump,
typename Base,
typename typserv>
3401 const typdump &dump, Base &b, typserv &serv)
3403 typedef typename typP::value_type::order_t ord;
3404 typedef typename typserv::monom_t Monomial;
3409 map<Monomial,COEFF*,ord> matrixmap;
3421 typP stockprod,stockproj;
3426 typedef list<typename typserv::monom_t> typstock;
3427 list<typename typserv::monom_t> stockmon,stockksur2;
3428 map<mon,int,ord> mapintligne,mapintcolonne,maphankel;
3439 for(
typename list<typename typserv::monom_t>::iterator
3440 iter=stockksur2.begin(); iter!=stockksur2.end();iter++)
3441 if(!
IsinB(*iter,b)) stockksur2.erase(iter--);
3443 for(
typename list<typename typserv::monom_t>::iterator
3444 iter=stockksur2.begin();iter!=stockksur2.end();iter++,i++)
3447 for(
typename list<typename typserv::monom_t>::iterator
3448 iter2=stockksur2.begin();iter2!=stockksur2.end();iter2++,j++)
3450 typename typserv::monom_t mono=*iter * (*iter2);
3452 if (!mapintligne.count(mono))
3454 mapintligne[mono]=
i;
3455 mapintcolonne[mono]=
j;
3465 int dim=stockksur2.size();
3466 for(
typename typstock::iterator i=stockmon.begin();
3467 i!=stockmon.end();i++)
3470 cout<<
"ici "<<*i<<
" dim "<<dim<<endl;
3472 for(
int ii=0;ii<dim*
dim;ii++)
3473 matrixmap[*i][ii]=0;
3478 cout<<
"coiucou"<<endl;
3479 for(
typename typstock::iterator i=stockksur2.begin();
3480 i!=stockksur2.end();i++,ii++)
3483 cout<<
"coiucou"<<endl;
3484 for(
typename typstock::iterator
j=i;
j!=stockksur2.end();jj++,
j++)
3487 typename typserv::monom_t tmpmon=(*j)*(*i);
3489 if (
IsinB(tmpmon,b))
3491 matrixmap[tmpmon][ii*dim+jj]+=1;
3493 matrixmap[tmpmon][jj*dim+ii]+=1;
3498 tmplist.push_back(tmpmon);
3499 proj(tmplist,dump,b,serv);
3502 for(
typename typP::value_type::iterator iter=tmplist.front().begin();
3503 iter!=tmplist.front().end();iter++)
3505 Monomial verytmpmon=*iter;
3506 verytmpmon.SetCoeff(1);
3508 matrixmap[verytmpmon][ii*dim+jj]+=iter->GetCoeff();
3510 matrixmap[verytmpmon][jj*dim+ii]+=iter->GetCoeff();
3519 struct timeval tvini, tvfin;
3522 static char nom[1024];
3523 gettimeofday(&tvini,NULL);
3524 cout<<
"coucou dim "<<dim<<endl;
3526 sprintf(nom,
"sdpa_gmp -dd tmpfile_%d -o lenom",d++);
3531 gettimeofday(&tvfin,NULL);
3532 tempsCDSP+=tvfin.tv_sec-tvini.tv_sec+1e-6*(tvfin.tv_usec-tvini.tv_usec);
3540 long n=stockksur2.size();
3544 long lwork=16*n,info;
3546 dgesvd_((
char*)
"N",(
char*)
"A",&n,&n,sol,
3547 &n,S,(
COEFF*)NULL,&n,V,&n,work,&lwork,&info);
3549 cout<<
"info svd "<<info<<endl;
3550 cout<<
"val sing"<<endl;
3555 cout<<
"coiucou"<<endl;
3558 if((
abs(S[kk-1])==0) ||(
abs(S[kk-1])>
abs(S[kk])*1e6))
break;
3560 cout<<
"kk ici "<<kk<<
" et n "<<n<<endl;
3562 for(
int j=0;
j<n;
j++)
3564 for(
int jj=0;jj<n;jj++)
3565 cout<<V[n*(jj)+
j]<<
" ";
3571 for(;kk<(int)n;kk++)
3574 cout<<
"equation dans le noyau"<<endl;
3576 typedef typename typP::value_type polyalp;
3578 for(
typename list<typename typserv::monom_t>::iterator
3579 iter=stockksur2.begin();
3580 iter!=stockksur2.end();iter++)
3585 if(!
Iszero(
abs(V[kk+n*(mapintcolonne[*iter]-1)])))
3590 tmp+=polyalp(*iter*(
COEFF)V[kk+n*(mapintcolonne[*iter]-1)]);
3597 cout<<
"g trouve ca comme nvlle eq "<<endl<<tmp<<endl;
3598 newpol.push_back(tmp);
3609 template<
typename typdump,
typename Base,
typename typserv>
3610 int testsdp(
int k,
const typdump &dump,
const Base &b,
const typserv &serv)
3614 template<
typename typP,
typename typPk,
typename typdump,
typename Base
3623 typedef typename typP::value_type polyalp;
3624 typedef list<typename typPk::value_type::monom_t> typMk;
3625 typedef typename typMk::value_type
mon;
3626 typedef typename typPk::value_type
pol;
3635 typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
3637 int onemoretime=1,nouveaumon,allpolused=0,maxdeg,
k,*pr,*pc;
3638 cout<<
"avant init"<<endl;
3640 init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv);
3641 cout<<
"apres init"<<endl;
3642 cout<<
"onemoretime "<<onemoretime<<endl;
3643 cout<<
"nouveaumon "<<nouveaumon<<endl;
3644 cout<<
"k "<<k<<endl;
3645 cout<<
"maxdeg "<<maxdeg<<endl;
3652 while(nouveaumon||(k<=maxdeg)||onemoretime)
3654 while(nouveaumon||(k<=maxdeg))
3657 while(!
GB_stop(k)||(k<=maxdeg))
3663 cout<<
"nouveaumon"<<endl;
3673 gettimeofday(&initclock,NULL);
3674 cout<<
"onemoretime "<<onemoretime<<endl;
3675 cout<<
"nouveaumon"<<nouveaumon<< endl;
3676 cout<<
"k "<<k<<endl;
3677 cout<<
"maxdeg "<<maxdeg<<endl;
3678 cout<<
"testsdp(k,dump,b,serv) "<<
testsdp(k,dump,b,serv)<<endl;
3679 if(
testsdp(k,dump,b,serv)||(!onemoretime))
3684 cout<<
"un nouveau tour de boucle et k vaut "<<k<<endl;
3687 generickernel_testT(newpol,2*k,dump,b,serv);
3691 generickernel_testT(newpol,k,dump,b,serv);
3698 cout<<
"newpol "<<newpol.empty()<<endl;
3701 mindeg_newpol=
Degree(newpol.front());
3703 for(
typename typP::iterator iter=newpol.begin();
3704 iter!=newpol.end();iter++)
3705 mindeg_newpol=(mindeg_newpol<
Degree(*iter)
3706 ?mindeg_newpol:
Degree(*iter));
3707 for(
typename typP::iterator iter=newpol.begin();
3708 iter!=newpol.end();iter++)
3709 if(
Degree(*iter)==mindeg_newpol)
3711 if(k>=mindeg_newpol)
3714 list<int> sizeexceed;
3716 conv_merge(tmpPk,newpol,exceed,sizeexceed,b,serv);
3733 cout<<
"compress"<<endl;
3742 for(
int i=0;
i<p->taille1;
i++)
3744 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
3746 for(
int i=0;
i<p->taille2;
i++)
3748 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
3757 cout<<
"poly a la fin de la boulcle de l'algo "<<Pk.size()<<endl;
3758 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
3762 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
3763 for(
int i=0;
i<iter->sizenf;
i++)
3764 for(
int j=0;
j<8;
j++)
3765 if (((iter->nfind[
i]>>
j)&1) && (iter->nf[cpt++]==0))
3767 cout<<
"ici ca couille a la place"<<8*
i+
j<<endl;
3768 cout<<iter->sizenf<<
" "<<iter->size<<endl;
3779 cout<<endl<<
"newpkmkmatrixof"<<endl;
3784 sprintf(name,
"mat%d",toto);
3785 fic=fopen(name,
"w");
3792 if(killspol) S.erase(S.begin(),S.end());
3793 if (k+1>=maxdeg) allpolused=1;
3794 if(Mk.size()==0) nouveaumon=0;
3813 Solve(Mat,L,Pk,&pr,&pc,w);
3823 typename typMk::iterator itermon=Mk.begin();
3824 typename typPk::iterator iter;
3825 for(iter=Pk.begin();
3826 itermon!=Mk.end();iter++,itermon++,j++)
3831 iter->ind=*itermon*(iter->ind.GetCoeff());
3858 if ((
unsigned)my_rank(Mat)==Mk.size())
3861 typMk tmpSpoldejavu;
3862 typPk redspol,secd=secondmembre(Mat,Pk);;
3865 cout<<
"matrice de rang plein "<<endl;
3875 if(redspol.size()==0)
3879 my_merge(Spoldejavu,tmpSpoldejavu);
3889 int tmpdeg=
mindeg(redspol,serv);
3892 cout<<
"redspol.size() "<<redspol.size()<<endl;
3895 my_merge(Spoldejavu,tmpSpoldejavu);
3906 cout<<
"Pk.size() avant Crochetchoix "<<Pk.size()<<endl;
3912 cout<<
"Pk.size apres Crochetchoix "<<Pk.size()<<
" et k "<<k<<endl;
3925 cout<<
"matrice de rang pas plein "<<endl;
3930 AddB(Mat,Pk,Mk,dump,b,serv);
3935 secd=secondmembre(Mat,Pk);
3952 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
3953 P.push_back(invconv<polyalp>(*iter));
3955 if(redspol.size()==0)
3977 cout<<
"il ya un passage par mat rang pas"
3978 <<
"plein et pol non zero"<<endl;
4013 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
4014 P.push_back(invconv<polyalp>(*iter));
4040 cout<<
"Apres NewCrochetchoix"<<endl;
4044 for(
int i=0;
i<p->taille1;
i++)
4046 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
4048 for(
int i=0;
i<p->taille2;
i++)
4050 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
4074 for(
int i=0;
i<p->taille1;
i++)
4076 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
4078 for(
int i=0;
i<p->taille2;
i++)
4080 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
4085 cout<<
"sortie d'algo flash et dimension "<<endl;
4093 template<
typename typP,
typename typPk,
typename typdump,
typename Base
4102 typedef typename typP::value_type polyalp;
4103 typedef list<typename typPk::value_type::monom_t> typMk;
4104 typedef typename typMk::value_type
mon;
4105 typedef typename typPk::value_type
pol;
4106 cout<<
"entra aqui "<<endl;
4113 typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
4115 int onemoretime=1,nouveaumon,allpolused=0,maxdeg,
k,maxdegb,kb,*pr,*pc,optimo=0,k1;
4116 int nogap=0,deg=0,nok=1, noreduced=0, kbon,kini;
4118 typP newpol,newpol1;
4120 cout<<
"avant init"<<endl;
4122 init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv);
4125 cout<<
"apres init"<<endl;
4126 cout<<
"onemoretime "<<onemoretime<<endl;
4127 cout<<
"nouveaumon "<<nouveaumon<<endl;
4128 cout<<
"k "<<k<<endl;
4129 cout<<
"maxdeg "<<maxdeg<<endl;
4134 while(nouveaumon||(k<=maxdeg)||onemoretime)
4136 while(nouveaumon||(k<=maxdeg)|| (!optimo) || nok )
4140 while(!
GB_stop(k)||(k<=maxdeg))
4146 cout<<
"nouveaumon"<<endl;
4155 gettimeofday(&initclock,NULL);
4156 cout<<
"onemoretime "<<onemoretime<<endl;
4157 cout<<
"nouveaumon"<<nouveaumon<< endl;
4158 cout<<
"k "<<k<<endl;
4159 cout<<
"maxdeg "<<maxdeg<<endl;
4160 cout<<
"testsdp(k,dump,b,serv) "<<
testsdp(k,dump,b,serv)<<endl;
4163 for(
int i=0;
i<p->taille1;
i++)
4165 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
4167 for(
int i=0;
i<p->taille2;
i++)
4169 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
4175 cout<<
"maxdeg"<<maxdeg<<endl;
4176 cout<<
"optimo"<<optimo<<endl;
4177 cout<<
"nok"<<nok<<endl;
4181 if((
testsdp(k,dump,b,serv) && (!optimo)) || (k==deg))
4189 cout<<
"un nouveau tour de boucle et k vaut "<<k<<endl;
4194 cout<<
"deg"<<deg<<endl;
4198 cout<<
"sol3"<<k<<endl;
4199 cout<<
"kbon"<<kbon<<endl;
4201 { cout<<
"pasas por aqui"<<endl;
4202 newpol1.erase(newpol1.begin(),newpol1.end());
4205 for(
typename typP::iterator iter=newpol.begin();iter!=newpol.end();
4214 newpol1.erase(newpol1.begin(),newpol1.end());
4218 generickernel_testF(newpol1,k,dump,b,serv,F,*&sol3);
4220 cout<<
"solucionprimal k"<< sol2[2] << endl;
4221 cout<<
"solucionprimal k+1"<< sol3[2] << endl;
4222 cout<<
"diferenciasprimales"<<
abs(sol2[2]-sol3[2])*1e+1<<endl;
4223 cout<<
"k1"<<k1<<endl;
4225 cout<<
"gap"<<
abs(sol3[2]-sol3[3])*1e+4<<endl;
4226 cout<<
"deg"<<deg<<endl;
4227 cout<<
"!newpol.empty()"<<!newpol.empty()<<endl;
4228 cout<<
"newpol1.empty()"<<newpol1.empty()<<endl;
4231 if (((
abs(sol2[2]-sol3[2])*1e+1<1) && (!newpol.empty()) && (k1!=k))
4236 if (k==deg && newpol1.empty())
4249 cout<<
"deg dentro"<<deg<<endl;
4251 cout<<
"noyau bon"<<endl;
4252 for(
typename typP::iterator iter=newpol.begin();iter!=newpol.end();
4258 mindeg_newpol=
Degree(newpol.front());
4259 cout<<
"mindeg "<<mindeg_newpol<<
" k1 "<<k1<<endl;
4260 for(
typename typP::iterator iter=newpol.begin();
4261 iter!=newpol.end();iter++)
4262 mindeg_newpol=(mindeg_newpol<
Degree(*iter)
4263 ?mindeg_newpol:
Degree(*iter));
4264 cout<<
"mindeg "<<mindeg_newpol<<
" k1 "<<k1<<endl;
4266 if (k==deg && (!newpol.empty()))
4277 newpol.erase(newpol.begin(),newpol.end());
4279 mindeg_newpol=
Degree(newpol.front());
4280 cout<<
"mindeg2fois"<<mindeg_newpol<<endl;
4287 P.erase(P.begin(),P.end());
4288 for(
typename typP::iterator iter=newpol.begin();
4289 iter!=newpol.end();iter++)
4290 if(
Degree(*iter)==mindeg_newpol)
4292 if(k-2>=mindeg_newpol)
4295 list<int> sizeexceed;
4297 conv_merge(tmpPk,newpol,exceed,sizeexceed,b,serv);
4302 cout<<
"k noyau bon"<< k<<endl;
4318 for(
typename typP::iterator iter=P.begin();iter!=P.end();
4323 cout<<
"compress"<<endl;
4333 cout<<
"pasa por aqui cambiamos"<<endl;
4342 cout<<
"sol2"<<k<<endl;
4344 newpol.erase(newpol.begin(),newpol.end());
4348 generickernel_testF(newpol,k,dump,b,serv,F,*&sol2);
4352 for(
typename typP::iterator iter=newpol.begin();iter!=newpol.end();
4356 cout<<
"newpol "<<newpol.empty()<<endl;
4357 cout<<
"numker"<<numker<<endl;
4359 if (k==2 && maxdeg==1)
4368 cout<<
"gap"<<sol2[0]<<endl;
4369 cout<<
"gapx"<<
abs(sol2[0])*1e+4<<endl;
4370 if (
abs(sol2[0])*1e+4<1){
4372 for(
typename typP::iterator iter=newpol.begin();iter!=newpol.end();
4376 cout<<
"newpol "<<newpol.empty()<<endl;
4377 cout<<
"numker"<<numker<<endl;
4393 for(
int i=0;
i<p->taille1;
i++)
4395 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
4397 for(
int i=0;
i<p->taille2;
i++)
4399 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
4408 cout<<
"poly a la fin de la boulcle de l'algo "<<Pk.size()<<endl;
4409 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
4413 cout<<invconv<typename typP::value_type>(*iter)<<endl;
4414 for(
int i=0;
i<iter->sizenf;
i++)
4415 for(
int j=0;
j<8;
j++)
4416 if (((iter->nfind[
i]>>
j)&1) && (iter->nf[cpt++]==0))
4418 cout<<
"ici ca couille a la place"<<8*
i+
j<<endl;
4419 cout<<iter->sizenf<<
" "<<iter->size<<endl;
4428 cout<<
"newpkmkmatrixof"<<endl;
4433 sprintf(name,
"mat%d",toto);
4434 fic=fopen(name,
"w");
4440 if(killspol) S.erase(S.begin(),S.end());
4441 if (k+1>=maxdeg) allpolused=1;
4442 cout<<
"Mk.size()"<<Mk.size()<<endl;
4443 if(Mk.size()==0) nouveaumon=0;
4446 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
4447 cout<<
"avant solve les ind "<<iter->ind<<endl;
4448 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++)
4449 cout<<
"monomes dans Mk "<<*iter<<endl;
4450 cout<<
"Mat.ncol"<<Mat.ncol<<endl;
4454 Solve(Mat,L,Pk,&pr,&pc,w);
4464 typename typMk::iterator itermon=Mk.begin();
4465 typename typPk::iterator iter;
4466 for(iter=Pk.begin();
4467 itermon!=Mk.end();iter++,itermon++,j++)
4472 iter->ind=*itermon*(iter->ind.GetCoeff());
4499 if ((
unsigned)my_rank(Mat)==Mk.size())
4502 typMk tmpSpoldejavu;
4503 typPk redspol,secd=secondmembre(Mat,Pk);;
4504 cout<<
"matrice de rang plein "<<endl;
4506 cout<<
"Reduce Spol "<<endl;
4510 cout<<
"secd.size() "<<secd.size()<<endl;
4512 if(redspol.size()==0)
4516 my_merge(Spoldejavu,tmpSpoldejavu);
4526 int tmpdeg=
mindeg(redspol,serv);
4529 cout<<
"redspol.size() "<<redspol.size()<<endl;
4531 my_merge(Spoldejavu,tmpSpoldejavu);
4542 cout<<
"Pk.size() avant Crochetchoix "<<Pk.size()<<endl;
4548 cout<<
"Pk.size apres Crochetchoix "<<Pk.size()<<
" et k "<<k<<endl;
4555 cout<<
"kaquiPini"<<k<<endl;
4563 cout<<
"matrice de rang pas plein "<<endl;
4568 AddB(Mat,Pk,Mk,dump,b,serv);
4573 secd=secondmembre(Mat,Pk);
4583 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
4584 P.push_back(invconv<polyalp>(*iter));
4586 if(redspol.size()==0)
4605 cout<<
"il ya un passage par mat rang pas"
4606 <<
"plein et pol non zero"<<endl;
4643 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
4644 P.push_back(invconv<polyalp>(*iter));
4670 cout<<
"Apres NewCrochetchoix"<<endl;
4674 for(
int i=0;
i<p->taille1;
i++)
4676 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
4678 for(
int i=0;
i<p->taille2;
i++)
4680 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
4701 for(
int i=0;
i<p->taille1;
i++)
4703 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
4705 for(
int i=0;
i<p->taille2;
i++)
4707 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
4716 cout<<
"sortie d'algo flash et dimension "<<endl;
4724 #endif //ALREADY_corealgo3
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
Mon my_divmon(const Mon &mon, int i, const Base &b)
Definition: corealgo3sdp.hpp:1071
struct timeval initclock tmpclock
Definition: solver_bb_floating.cpp:67
Definition: workspace.hpp:11
int testsdp(int k, const typdump &dump, const Base &b, const typserv &serv)
Definition: corealgo3sdp.hpp:3610
void remiseenforme(typpol &p)
Definition: ugly.hpp:2
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo3sdp.hpp:1218
Multivariate polynomials.
Definition: MPoly.hpp:28
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
int GB_stop(int k)
Definition: corealgo3sdp.hpp:139
list< polbis< mono, T > > & Solve(typmat &S, std::list< polbis< mono, T > > &TildePk, int **pr, int **pc, workspace &w)
Definition: pol2bisspecial.hpp:609
bool operator()(const M &, const M &) const
Definition: corealgo3sdp.hpp:2484
int mon2int(const mon &mm)
Definition: placemon3.hpp:679
int isdivisible(const mon &m1, const mon &m2, int nbvar)
Definition: isdivisible.hpp:5
void proj(T &Crochet, const typdump &dump, const Base &b)
Definition: proj.hpp:51
int lvar(const dynamicexp< X, E > &A)
Definition: dynamicexp.hpp:178
pol halfred(const mon &targetind, const pol &p, const typdump &dump, const Base &b, monomial_server &serv)
Definition: corealgo3sdp.hpp:1770
int compute_ppcm(typppcm &ppcm, const Base &b)
Definition: corealgo3sdp.hpp:64
void write_to_sdpa_fic(typmatmap &matrixmap, int &dim, typserv &serv, int d)
Definition: corealgo3sdp.hpp:3244
void my_merge(T &l1, const T &l2)
Definition: corealgo3sdp.hpp:45
void setorder(ptrfun tmpord)
Definition: placemon3.hpp:301
mon * int2mon_
Definition: placemon3.hpp:21
void generickernelsdpa(typP &newpol, int k, const typdump &dump, Base &b, typserv &serv)
Definition: corealgo3sdp.hpp:3400
Definition: corealgo3sdp.hpp:14
void forget0(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump3sdp.hpp:197
list< predicat >::iterator iterator
Definition: types.hpp:20
int minmaxdegP(typP P, int &maxdeg)
Definition: corealgo3sdp.hpp:212
void conv_merge(typPk &Pk, typP &P, typexceed &ex, typsize &sizeex, const Base &b, monomial_server &serv)
Definition: corealgo3sdp.hpp:1107
void init_multiple(int n)
Definition: placemon3.hpp:59
Definition: Scl_mpfr.hpp:827
int Ispolzero(const pol &p)
Definition: Iszero.hpp:30
typP Crochet(const typP &P, int k)
Definition: corealgo3sdp.hpp:224
void NewCrochetchoix(typP &P, typPk &Pk, typMk &Mk, typPk &redspol, int &k, typdump &dump, Base &b, typrecall &recall, workspace &w, monomial_server &serv)
Definition: corealgo3sdp.hpp:2138
mon * accept
Definition: types.hpp:6
int my_ord(const mon &m1, const mon &m2)
Definition: ord.hpp:2
MSKsoltypee MSKrealt * pobj
Definition: mosek.h:3621
double tempsdssdp
Definition: solver_bb_floating.cpp:68
typpol mult(int i, const typpol &pol, const typdump &dump, const Base &b, mon **exce, int &exsize, workspace &w, monomial_server &serv)
Definition: corealgo3sdp.hpp:838
long flag
Definition: alp_f2c.H:52
void inverse(int *&, int)
list< predicat >::const_iterator const_iterator
Definition: types.hpp:21
MSKcallbackcodee MSKsoltypee MSKprostae MSKsolstae MSKstakeye MSKstakeye MSKstakeye MSKrealt MSKrealt MSKrealt * y
Definition: mosek.h:2689
void recover(typPk &Pk, typMk &Mk, const typdump &dump, int k)
Definition: dump.hpp:192
coeff * tabcoeff
Definition: workspace.hpp:12
void ReduceSpol(typPk &S, const typdump &dump, typPk &redspol, const Base &b, workspace &w, monomial_server &serv)
Definition: corealgo3sdp.hpp:1972
void Dump(const typPk &Pk, typdump &dump)
Definition: dump.hpp:48
T coeff_t
Definition: pol.hpp:9
void NewDestroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo3sdp.hpp:2407
MSKint32t MSKCONST MSKint32t * dim
Definition: mosek.h:2407
int taille1
Definition: types.hpp:5
void selectnozero(typP &ttmp)
Definition: Iszero.hpp:40
void enumeratemon(typstock &stockmon, int k, const Base &b, const typdump &dump)
Definition: corealgo3sdp.hpp:2436
int nbvar()
Definition: types.hpp:37
int mon2int(const mon &mm)
Definition: placemon.hpp:294
void read_sol_from_sdpa(coeff *&sol, typmatmap &matmap, int dim, typserv &serv)
Definition: corealgo3sdp.hpp:3306
void reinit_multiple()
Definition: placemon3.hpp:85
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
unsigned char * tabnf
Definition: workspace.hpp:13
int mindeg(const typPk &l, monomial_server &serv)
Definition: corealgo3sdp.hpp:2062
void destroy_space(workspace< coeff > *w)
Definition: workspace.hpp:34
static bool less(const M &, const M &)
Definition: corealgo3sdp.hpp:2489
void int2mon(const int &i, mon &res)
Definition: placemon.hpp:288
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
int newPkMkMatrixof(typMat &mat, typPk &Pk, typP &P, typMk &Mk, int &k, Base &b, typdump &dump, typrecall &recall, workspace &w, monomial_server &serv)
Definition: corealgo3sdp.hpp:1230
void computeprod(typprod &prod, typstock &stockmon, Base &b, typdump &dump)
Definition: corealgo3sdp.hpp:2514
int goodspol(const mon &m1, const mon &m2, typppcm &ppcm, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3sdp.hpp:147
C coeff_t
Definition: Monom.hpp:26
void init_space(workspace< coeff > *w)
Definition: workspace.hpp:43
int nbbits[256]
Definition: pol2ter.hpp:4
Definition: placemon3.hpp:14
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
int dgesvd_(char *jobu, char *jobvt, long *m, long *n, T *a, long *lda, T *s, T *u, long *ldu, T *vt, long *ldvt, T *work, long *lwork, long *info)
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
typmat * MatrixOf(const typPk &L, const typMk &lm, const typmat &mat)
Definition: corealgo3sdp.hpp:327
void stab(typPk &Pk)
Definition: corealgo3sdp.hpp:28
void printmatfile_pequan(const typmat< Scl< MPF > > &m, FILE *fic)
Definition: io.hpp:381
iterator end()
Definition: types.hpp:30
void Setnbvars(const typP &tmpPk, Base &b)
Definition: corealgo3sdp.hpp:248
int Setnvars(const typP &tmpPk)
Definition: corealgo3sdp.hpp:263
int IsinB(const mon &m, const Base &b)
Definition: IsinB3.hpp:68
list< predicat > def
Definition: types.hpp:16
Mon mon
Definition: solver_bb_floating.cpp:136
int nbvars
Definition: types.hpp:17
int sizeplacemon()
Definition: placemon3.hpp:313
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 getperm(int *perm, int sizeperm, int *indextab)
Definition: corealgo3sdp.hpp:818
MSKrealt * c
Definition: mosek.h:2678
void algo(typP P, typdump &dump, Base &b, monomial_server &serv)
Definition: corealgo3sdp.hpp:3616
int indice2(int i, int j, const Base &b)
Definition: corealgo3sdp.hpp:753
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
MSKsoltypee MSKrealt MSKrealt MSKrealt MSKrealt MSKrealt MSKrealt MSKrealt * dobj
Definition: mosek.h:3621
MPoly< vector< Mon >, my_Dlex< Mon > > Poly
Definition: solver_bb_floating.cpp:138
int sizenf
Definition: workspace.hpp:15
#define abs(x)
Definition: f2c.H:161
Monom< COEFF, dynamicexp<'x'> > Mon
Definition: solver_bb_floating.cpp:134
int GoodDir(const typmon &m, int i, const Base &b)
Definition: corealgo3sdp.hpp:1087
int size
Definition: pol.hpp:10
MSKstreamtypee MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t a
Definition: mosek.h:3833
Definition: corealgo3sdp.hpp:2478
void my_plus(pol &res, const pol &nf, const coeff toto, workspace *w)
Definition: corealgo3sdp.hpp:427
#define COEFF
Definition: symbo2.hpp:8
void update_crochetchoix(typiterpk &iterPk, typiterpk &iter, int tmpind, workspace &w)
Definition: corealgo3sdp.hpp:2096
void Listedejafait(const typMk &Mk, typMk &Spoldejavu)
Definition: corealgo3sdp.hpp:2420
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
mon * refuse
Definition: types.hpp:8
int mulind(int indexbase, int var, const typBase &b)
Definition: placemon3.hpp:126
void AddB_dim(const typmat &mat, const typmat &L, typP &P, typPk &Pk, const typMk &Mk, const typdump &dump, typB &b)
Definition: IsinB3.hpp:545
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: corealgo3sdp.hpp:363
void Crochetchoix(const typP &P, typPk &Pk, typPk &redspol, int k, Base &b)
iterator begin()
Definition: types.hpp:25
void generickernel(typP &newpol, int k, const typdump &dump, Base &b, typserv &serv)
Definition: corealgo3sdp.hpp:2540
list< predicat >::const_reverse_iterator const_reverse_iterator
Definition: types.hpp:23
predicat::monom_t mon
Definition: types.hpp:19
#define pol
Definition: pol2ter.hpp:3
double tempsCDSP
Definition: solver_bb_floating.cpp:69
void SetCoeff(const C &c)
Definition: Monom.hpp:68
void findcorresppol(const mon &m, const typdump &dump, pol &res)
Definition: corealgo3sdp.hpp:1719
void compress(typPk &Pk, typdump &dump, const Base &b, int k)
Definition: placemon3.hpp:1076
typPk Spolordsup(const typPk &Pk, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3sdp.hpp:185
mon ind
Definition: pol.hpp:11
Multivariate monomials.
Definition: Monom.hpp:21
iterator erase(iterator first, iterator last)
Definition: types.hpp:35
typpol nf(int var, int indmon, const typdump &dump, const Base &b)
Definition: corealgo3sdp.hpp:773
T * nf
Definition: pol.hpp:12
void DoBaseMk(const typP &tmpPk, typMk &Mk, Base &b, monomial_server &serv)
Definition: corealgo3sdp.hpp:280
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo3sdp.hpp:52
void varmult(iterator iter1, iterator iter2, mon &var1, mon &var2, const Base &b)
Definition: corealgo3sdp.hpp:1757
reverse_iterator rbegin()
Definition: types.hpp:27
MSKint32t MSKint32t char * name
Definition: mosek.h:2853