2 #ifndef ALREADY_corealgo3
3 #define ALREADY_corealgo3
13 #include "linalg/clapack.h"
20 #include "sdpinclude.hpp"
26 template<
typename typP,
typename typPk,
typename Base>
27 void Crochetchoix(
const typP & P,typPk & Pk, typPk & redspol,
int k,
30 template<
typename typPk>
33 typedef typename typPk::value_type
pol;
34 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
37 for(
typename pol::iterator iterpol=iter->begin();iterpol!=iter->end();
40 if(!
Iszero(iterpol->GetCoeff()))
50 typename T::const_iterator iter=l2.begin();
51 for(;iter!=l2.end();iter++)
54 template<
typename mon>
59 for(
int i=0;
i<=maxi;
i++)
64 static int max_degppcm;
66 template<
typename typppcm,
typename Base>
73 list<mon> list1,list2,tmplist2;
80 for(
int i=0;
i<iter->taille2;
i++)
81 for(
int j=
i+1;
j<iter->taille2;
j++)
83 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
85 if((!ppcm.count(tmpmon))&&
87 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
97 for(
int i=0;
i<iter->taille2;
i++)
98 for(
int j=
i+1;
j<iter->taille2;
j++)
100 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
103 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
106 for(
int k=0;
k<iter->taille2;
k++)
111 mon lc_i=
lcm(iter->refuse[
k],iter->refuse[
i]);
112 mon lc_j=
lcm(iter->refuse[
k],iter->refuse[
j]);
121 list2.push_back(tmpmon);
129 for(
typename list<mon>::iterator iter2=list2.begin();
130 iter2!=list2.end();iter2++)
134 if(iter2->GetDegree()>maxdeg)
135 maxdeg=iter2->GetDegree();
145 if(k>max_degppcm) res=1;
149 template<
typename mon,
typename Base,
typename typppcm,
typename typMk>
151 ,
const typMk &Spoldejavu)
181 return (res==2)&&(comp==2)&&ppcm[m]&&!
member(Spoldejavu,m);
183 return (res==2)&&(comp==2)&&ppcm.count(m);
187 template<
typename typPk,
typename Base,
typename typMk>
190 typedef typename typPk::value_type::monom_t
mon;
198 for(
typename typPk::const_iterator iter1=Pk.begin();iter1!=Pk.end();iter1++)
200 for(
typename typPk::const_iterator iter2=iter1;iter2!=Pk.end();iter2++)
204 if (
goodspol(iter1->ind,iter2->ind,ppcm,b,Spoldejavu))
208 res.push_back(*iter1);
209 res.push_back(*iter2);
214 template<
typename typP>
217 int res=
Degree(P.front());
219 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
226 template<
typename typP>
230 for(
typename typP::const_iterator iter=P.begin();iter!=P.end();iter++)
232 if(
Degree(*iter)==
k) res.push_back(*iter);
237 template<
typename mon,
typename T,
typename monomial_server>
241 std::list<pol<mon,T> > res;
242 for(
typename std::list<
pol<mon,T> >::const_iterator iter=P.begin()
243 ;iter!=P.end();iter++)
245 if(
Degree(*iter,serv)==
k) res.push_back(*iter);
250 template<
typename typP,
typename Base>
254 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
255 for(
typename typP::value_type::const_iterator iterpol=iter->begin();
256 iterpol!=iter->end();iterpol++)
260 if(tmpvar<
lvar(iterpol->rep)) tmpvar=
lvar(iterpol->rep);
265 template<
typename typP>
269 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
270 for(
typename typP::value_type::const_iterator iterpol=iter->begin();
271 iterpol!=iter->end();iterpol++)
275 if(tmpvar<
lvar(iterpol->rep)) tmpvar=
lvar(iterpol->rep);
281 template<
typename typP,
typename typMk,
typename Base,
285 typedef typename typMk::value_type
mon;
290 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
292 mon tmp(choice(*iter,b,serv));
296 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++)
297 if(*iter==tmp) {yes=0;
break;};
298 if(yes) Mk.push_back(tmp);
302 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(tmp.
taille2*
sizeof(mon));
304 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
309 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++,i++)
324 b.
def.push_back(tmp);
328 template <
typename typPk,
typename typMk,
typename typmat >
331 const typMk & lm,
const typmat &mat)
333 typedef typename typPk::value_type POL;
334 typedef typename typMk::value_type monom_t;
336 map<monom_t,int>
index;
338 if (res!=NULL) {
delete res;};
339 for(
typename typMk::const_iterator m = lm.begin(); m!=lm.end(); m++){
345 res=
new typmat(L.size(),lm.size());
349 for(
typename typPk::const_iterator pi = L.begin(); pi != L.end(); ++pi){
350 for(
typename POL::const_iterator m = pi->begin(); m!=pi->end(); m++)
353 if((index.count(*m)))
356 (*res)(l,c-1,m->GetCoeff());
365 template<
typename typMat,
typename typP,
typename typPk,
typename typMk,
typename Base,
typename typdump,
class monomial_server,
typename workspace>
366 void init_algo(typP &P,
int &nouveaumon,
int &maxdeg,
int &
k,
367 typPk &Pk, typMk & Mk,
Base & b, typdump & dump,
workspace &w,
370 typedef typename typPk::value_type
pol;
373 const typename typP::value_type::order_t (tmpord)(
const mon,
const mon);
397 Mk.erase(Mk.begin(),Mk.end());
400 mdebug()<<
"Dans While 2"<<
"k"<<k<<
"hola";
408 tmpPk=
Solve(*Mat,tmpPk,&pr,&pc);
414 if(my_rank(*Mat)==(
int)tmpPk.size()) flag=0;
421 for(
typename typP::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
423 Pk.push_back(convert<pol>(*iter,b,serv));
433 template<
typename typMat,
typename typP,
typename typPk,
typename typMk,
typename Base,
typename typdump,
class monomial_server,
typename workspace>
435 typPk &Pk, typMk & Mk,
Base & b, typdump & dump,
workspace &w,
438 typedef typename typPk::value_type
pol;
441 const typename typP::value_type::order_t (tmpord)(
const mon,
const mon);
453 mdebug()<<
"Init Space fini";
464 Mk.erase(Mk.begin(),Mk.end());
474 tmpPk=
Solve(*Mat,tmpPk,&pr,&pc);
478 mdebug()<<
"my_rank(*Mat)"<<my_rank(*Mat);
479 mdebug()<<
"tmpPk.size()"<<tmpPk.size();
480 if(my_rank(*Mat)==(
int)tmpPk.size()) flag=0;
487 for(
typename typP::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
489 Pk.push_back(convert<pol>(*iter,b,serv));
499 template<
typename pol,
typename coeff,
typename workspace>
505 int i=0,
j=0,
k=0,p=0,q=0;
507 mcoeff_t *tmpnf,*tmpspace,zero=0;
508 unsigned char *tmpnfind;
510 mdebug()<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res)<<endl<<
511 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf);
513 if(res.sizenf<nf.sizenf)
520 for(i=0;i<res.sizenf;i++)
522 if(res.nfind[i]|nf.nfind[i])
524 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
527 if ((res.nfind[i]>>
j)&1)
529 if((nf.nfind[i]>>
j)&1)
537 for(i=res.sizenf;i<nf.sizenf;i++)
541 if ((nf.nfind[i]>>
j)&1)
543 w->
tabcoeff[8*i+
j]=((mcoeff_t)-1)*toto*(nf.
nf[q-1]);
548 for(
int i=0;i<nf.sizenf;i++)
551 ,tmpsize*
sizeof(
COEFF));
553 res.nfind=(
unsigned char*)realloc(res.nfind,nf.sizenf);
554 res.sizenf=nf.sizenf;
556 for(
int i=0;i<nf.sizenf;i++)
577 for(i=0;i<nf.sizenf;i++)
582 unsigned char mask=1;
584 if(res.nfind[i]==255)
588 for(
int j=0;
j<8;
j++,mask<<=1)
591 if (res.nfind[i]&mask)
597 unsigned char mask=1;
600 for(
int j=0;
j<8;
j++,mask<<=1)
607 for(
int j=0;
j<8;
j++,mask<<=1)
618 if(res.nfind[i]|nf.nfind[i])
620 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
623 if ((res.nfind[i]>>
j)&1)
627 if((nf.nfind[i]>>
j)&1)
635 for(i=nf.sizenf;i<res.sizenf;i++)
639 if ((res.nfind[i]>>
j)&1)
646 for(
int i=0;i<res.sizenf;i++)
649 ,tmpsize*
sizeof(
COEFF));
653 for(
int i=0;i<res.sizenf;i++)
672 mdebug()<<
"k "<<
k<<
" tmpsize "<<tmpsize;
674 for(
int i=0;i<res.sizenf;i++)
677 if ((res.nfind[i]>>
j)&1)
679 mdebug()<<
"j'ai fait n'importe quoi ici";
680 mdebug()<<
"les resultat "<<endl<<invconv<Poly>(res);
684 template<
typename pol,
typename coeff>
690 int i=0,
j=0,
k=0,p=0,q=0;
692 mcoeff_t *tmpnf,*tmpspace;
693 unsigned char *tmpnfind;
695 mdebug()<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res)<<endl<<
696 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf);
698 if(res.sizenf<nf.sizenf)
701 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*nf.sizenf*8);
702 for(
int i=0;i<nf.sizenf*8;i++)
704 for(
int i=0;i<res.sizenf;i++)
705 tmpsize+=
nbbits[res.nfind[i]|nf.nfind[i]];
706 for(
int i=0;i<nf.sizenf;i++)
709 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
710 tmpnfind=(
unsigned char*)
711 MAC_REV_MALLOC<unsigned char>(nf.sizenf);
714 for(
int i=0;i<res.sizenf;i++)
716 if(res.nfind[i]|nf.nfind[i])
719 if ((res.nfind[i]>>
j)&1)
720 tmpspace[8*i+
j]=res.
nf[p++];
721 if((nf.nfind[i]>>
j)&1)
722 tmpspace[8*i+
j]-=toto*nf.
nf[q++];
724 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
727 for(
int i=res.sizenf;i<nf.sizenf;i++)
731 if ((nf.nfind[i]>>
j)&1)
732 tmpspace[8*i+
j]=((mcoeff_t)-1)*toto*(nf.
nf[q++]);
733 tmpnfind[
i]=nf.nfind[
i];
735 for(
int i=0;i<nf.sizenf;i++)
738 if ((tmpnfind[i]>>
j)&1)
740 tmpnf[
k++]=tmpspace[8*i+
j];
742 tmpnfind[
i]&=~(1<<
j);
743 MAC_REV_FREE<mcoeff_t>(tmpspace,nf.sizenf*8*
sizeof(mcoeff_t));
744 res.sizenf=nf.sizenf;
749 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*res.sizenf*8);
750 for(
int i=0;i<res.sizenf*8;i++)
752 for(
int i=0;i<nf.sizenf;i++)
753 tmpsize+=
nbbits[res.nfind[i]|nf.nfind[i]];
754 for(
int i=0;i<res.sizenf;i++)
757 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
758 tmpnfind=(
unsigned char*)
759 MAC_REV_MALLOC<unsigned char>(res.sizenf);
761 for(
int i=0;i<nf.sizenf;i++)
763 if(res.nfind[i]|nf.nfind[i])
766 if((res.nfind[i]>>
j)&1)
767 tmpspace[8*i+
j]=res.
nf[p++];
768 if((nf.nfind[i]>>
j)&1)
769 tmpspace[8*i+
j]-=toto*nf.
nf[q++];
771 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
774 for(
int i=nf.sizenf;i<res.sizenf;i++)
778 if((res.nfind[i]>>
j)&1)
779 tmpspace[8*i+
j]=res.
nf[p++];
780 tmpnfind[i]=res.nfind[i];
783 for(
int i=0;i<res.sizenf;i++)
786 if ((tmpnfind[i]>>
j)&1)
788 tmpnf[
k++]=tmpspace[8*i+
j];
790 tmpnfind[
i]&=~(1<<
j);
792 MAC_REV_FREE<mcoeff_t>(tmpspace,res.sizenf*8*
sizeof(mcoeff_t));
795 mdebug()<<
"k "<<
k<<
" tmpsize "<<tmpsize;
797 MAC_REV_FREE<mcoeff_t>(res.
nf,res.
size*
sizeof(mcoeff_t));
799 MAC_REV_FREE<unsigned char>(res.nfind,res.sizenf);
803 res.
nf=(mcoeff_t*)MAC_REV_REALLOC<mcoeff_t>(res.
nf,res.
size*
sizeof(mcoeff_t)
804 ,
k*
sizeof(mcoeff_t));
812 for(
int i=0;i<res.sizenf;i++)
815 if ((tmpnfind[i]>>
j)&1)
817 mdebug()<<
"j'ai fait n'importe quoi ici";
818 mdebug()<<
"les resultat "<<endl<<invconv<Poly>(res);
825 template<
typename mon,
typename Base>
845 template<
typename typpol,
typename typdump,
typename Base>
846 typpol
nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
850 typedef typename typdump::value_type
dumpstruct;
858 typename typdump::const_iterator iter;
863 for(iter=dump.begin();
864 (iter!=dump.end()) && (iter->k!=deg);iter++);
873 for(i=0;i<iter->size;i++)
876 if(iter->nf[i].ind.rep==tmpmon.
rep)
891 void getperm(
int *perm,
int sizeperm,
int *indextab)
893 int median=indextab[sizeperm/2],
i,
j=sizeperm-1;
896 if(indextab[i]>median)
899 indextab[
j]=indextab[
i];
903 perm[sizeperm/2]=sizeperm-
i;
904 getperm(perm,sizeperm-i-1,indextab);
905 getperm(perm+sizeperm-i,i,indextab+sizeperm-i);
909 template<
typename typpol,
typename typdump,
typename Base,
typename mon,
911 typpol
inline mult(
int i,
const typpol &
pol,
const typdump &dump,
915 typedef typename typpol::coeff_t coeff;
916 static const mon monzero=
mon(0);
919 (*exce)=(
mon*)MAC_REV_MALLOC<mon>((pol.size+1)*
sizeof(
mon));
920 int *stockindicetab=(
int*)
malloc(pol.size*
sizeof(
int));
921 int noquo=0,maxind=0,p=0,q=0;
925 for(
int j=0;
j<pol.sizenf;++
j)
929 if((pol.nfind[
j]>>
k)&1)
931 int stockindice2=mulind(8*
j+
k,i,b);
933 stockindice2=-1*(8*
j+
k)-1;
934 stockindicetab[p++]=stockindice2;
938 if (stockindice2>=maxind)
962 if(stockindicetab[j]>=0)
967 int2mon(stockindicetab[j],tmpmm);
968 mdebug()<<
"le monome la "<<tmpmm<<
" "<<pol.nf[
j];
972 w.
tabnf[stockindicetab[
j]/8]|=1<<(stockindicetab[
j]%8);
978 tmp=serv.nf(i,-1*(stockindicetab[j]+1),dump,b);
1000 unsigned *tmpptr=(
unsigned*)tmp.nfind;
1002 for(k=0;k<tmp.sizenf/
sizeof(
unsigned);k++)
1005 ((
unsigned*)w.
tabnf)[
k]|=tmpptr[
k];
1007 for(l=0;l<8*
sizeof(unsigned);l++,mask<<=1)
1011 -=pol.nf[j]*tmp.nf[compteurtmp++];
1016 for(k=tmp.sizenf-(tmp.sizenf%
sizeof(
unsigned))
1022 for(l=0;l<8;l++,mask<<=1)
1024 if(tmp.nfind[k]&mask)
1025 w.
tabcoeff[8*k+l]-=pol.nf[
j]*tmp.nf[compteurtmp++];
1032 for(
int k=0;k<tmp.sizenf;k++)
1036 if(tmp.nfind[k]==255)
1038 unsigned char mask=1;
1040 for(
int l=0;l<8;l++,mask<<=1)
1043 pol.nf[
j]*tmp.nf[compteurtmp++];
1050 unsigned char mask=1;
1052 for(
int l=0;l<8;l++,mask<<=1)
1053 if(tmp.nfind[k]&mask)
1056 pol.nf[
j]*tmp.nf[compteurtmp++];
1069 (*exce)[noquo]=
mon(i,1);
1070 int2mon(-1*(stockindicetab[j]+1),tmpmon);
1071 (*exce)[noquo]*=tmpmon;
1072 (*exce)[noquo]*=pol.nf[
j];
1078 (*exce)[noquo++]=ret.ind;
1080 (*exce)=(
mon*)MAC_REV_REALLOC<mon>((*exce),(pol.size+1)*
sizeof(
mon)
1081 ,(noquo)*
sizeof(
mon));
1083 for(
int j=0;j<exsize;j++)
1087 ret.ind.SetCoeff(noquo+1);
1090 for(
int j=0;j<w.
sizenf;j++)
1097 mdebug()<<
" val p "<<p<<
" et pol.size "<<pol.size;
1099 ret.nf=(coeff*)MAC_REV_MALLOC<coeff>(ret.size*
sizeof(coeff));
1101 ret.nfind=(
unsigned char *)
malloc(ret.sizenf);
1103 for(
int j=0;j<ret.sizenf;j++)
1107 for(
int k=0;
k<8;
k++)
1117 ret.nfind[
j]&=~(1<<
k);
1122 ret.nf=(coeff*)MAC_REV_REALLOC<coeff>(ret.nf,ret.size*
sizeof(coeff),
1126 free(stockindicetab);
1128 mdebug()<<
"ret.size "<<ret.size;
1129 mdebug()<<invconv<Poly>(ret);
1130 mdebug()<<
"-----------------------------------";
1132 for(
int i=0;i<ret.sizenf;i++)
1134 for(
int j=0;j<8;j++)
1135 if ((ret.nfind[i]>>j)&1)
1136 if (
Iszero(ret.nf[cpt++]))
1143 template <
typename Mon,
typename Base>
1159 template<
typename typmon,
typename Base>
1167 for(j=0;j<b.
nbvar();j++)
1178 template<
typename typPk,
typename typP,
typename typexceed,
1183 typedef typename typP::value_type polalp;
1184 typedef typename polalp::order_t ord;
1185 typedef typename polalp::monom_t
mon;
1186 typedef typename typPk::value_type
pol;
1188 coeff * tabcoeff=NULL;
1189 unsigned char *tabindices=NULL;
1190 int tabsize=0,tabnfsize=0;
1192 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1199 for(
typename polalp::iterator iterpol=iter->begin();
1200 iterpol!=iter->end();iterpol++)
1205 if (
IsinB(*iterpol,b) && (serv.
mon2int(*iterpol)>maxind))
1206 maxind=serv.
mon2int(*iterpol);
1209 tabcoeff=(coeff*)MAC_REV_MALLOC<coeff>((maxind+1)*
sizeof(coeff));
1210 tabindices=(
unsigned char*)
malloc(maxind/8+1);
1213 tabnfsize=maxind/8+1;
1214 memset((
void*)tabindices,0,tabnfsize);
1217 for(i=0;i<tabsize;i++)
1225 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,0,iter->size()
1228 for(
typename polalp::iterator iterpol=iter->begin();
1229 iterpol!=iter->end();iterpol++)
1234 if (
IsinB(*iterpol,b))
1239 int tmp=serv.
mon2int(*iterpol);
1240 tabcoeff[tmp]=iterpol->GetCoeff();
1241 tabindices[tmp/8]|=1<<(tmp%8);
1248 mdebug()<<
"y en a un qu'est pas dans B "<<*iterpol;
1250 if(!
Iszero(iterpol->GetCoeff()))
1251 tmpex[comp++]=*iterpol;
1254 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,iter->size()*
sizeof(
mon)
1255 ,(comp+1)*
sizeof(
mon));
1257 tmp.
nf=(coeff*)MAC_REV_MALLOC<coeff>(tmp.
size*
sizeof(coeff));
1258 tmp.nfind=tabindices;
1259 tmp.sizenf=tabnfsize;
1262 for(
int i=0;i<tabnfsize;i++)
1265 for(
int j=0;
j<8;
j++)
1266 if (((tabindices[i]>>
j)&1) && !
Iszero(tabcoeff[8*i+
j]))
1267 tmp.
nf[maxind++]=tabcoeff[8*i+
j];
1269 tmp.nfind[
i]&=~(1<<
j);
1271 tmp.
nf=(coeff*)MAC_REV_REALLOC<coeff>(tmp.
nf,tmp.
size*
sizeof(coeff)
1272 ,maxind*
sizeof(coeff));
1274 MAC_REV_FREE<coeff>(tabcoeff,tabsize*
sizeof(coeff));
1279 ex.push_back(tmpex);
1280 sizeex.push_back(comp);
1282 mdebug()<<
"ici dans conv merge";
1283 for(
int i=0;i<comp;i++)
1290 template<
typename typMk>
1291 int member(
const typMk & tmpMk,
const typename typMk::value_type
mon)
1294 for(
typename typMk::const_iterator iter=tmpMk.begin();
1295 iter!=tmpMk.end();iter++)
1296 if(iter->rep==mon.rep) {res=1;
break;}
1300 template<
typename typMat,
typename typPk,
typename typP,
1301 typename typMk,
typename Base,
typename typdump,
typename typrecall,
1304 int &
k,
Base &b, typdump &dump,typrecall &recall
1307 typedef typename typMk::value_type
mon;
1308 typedef typename typP::value_type::order_t ord;
1309 typedef typename typPk::value_type
pol;
1311 typedef typename typP::value_type polyalp;
1312 typPk tmpPk,workvect;
1315 list<int> sizeexceed;
1316 int nbproj=0,flagdoplus=1,*ncol;
1318 mdebug()<<
"k on entering newpkmkmatrixof "<<
k;
1320 typrecall verytmp=
Crochet(recall,k+1,serv);
1321 recall.erase(recall.begin(),recall.end());
1325 proj(ttmpP,dump,b,serv);
1329 for(
typename typP::iterator iter=ttmpP.begin();iter!=ttmpP.end();iter++)
1332 #ifdef NO_TWICE_FALL
1333 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1334 if(
Degree(*iter)==k+1) P.erase(iter--);
1335 for(
typename typP::iterator iter=ttmpP.begin()
1336 ;iter!=ttmpP.end();iter++)
1341 nbproj=ttmpP.size();
1350 mdebug()<<
"un des pol de pretendu degre le bon se reduit mal";
1355 recover(tmpPk,Mk,dump,tmpdeg);
1357 for (
typename typP::iterator iter=ttmpP.begin();iter!=ttmpP.end();iter++)
1358 mdebug()<<
"pol ICI "<<*iter;
1362 forget(b,dump,tmpdeg,recall);
1363 serv.
compress(tmpPk,dump,b,tmpdeg);
1364 verytmp.erase(verytmp.begin(),verytmp.end());
1372 for(
typename typP::iterator iter=P.begin()
1373 ;iter!=P.end();iter++)
1374 if(
Degree(*iter)==tmpdeg)
1377 nbproj=ttmpP.size();
1386 Mk.erase(Mk.begin(),Mk.end());
1387 for (
typename typPk::iterator iterpk=tmpPk.begin();
1388 iterpk!=tmpPk.end();iterpk++)
1392 if (
IsinB(iterpk->ind,b))
1395 ;iterb!=b.
end();iterb++)
1397 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
1398 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
1399 (iterb->taille2+1)*
sizeof(
mon));
1400 iterb->refuse[iterb->taille2]=iterpk->ind;
1401 iterb->refuse[iterb->taille2].SetCoeff(1);
1406 for(
typename typPk::iterator iter=tmpPk.begin()
1407 ;iter!=tmpPk.end();iter++)
1409 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
1411 tmpMk.push_back(*tmp);
1412 exceed.push_back(tmp);
1413 sizeexceed.push_back(1);
1438 for(i=0;i<b.
nbvar();i++)
1441 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1446 mon tmpmon=iter->ind*
mon(i,1);
1449 if(!
member(tmpMk,tmpmon))
1455 typename typrecall::iterator iterrec;
1460 pol stockmult=
mult(i,*iter,dump,b,&tmp,tmpsize,w
1468 mdebug()<<
"apres mult "<<tmpsize;
1472 tmpMk.push_back(tmpmon);
1473 tmpPk.push_back(stockmult);
1474 exceed.push_back(tmp);
1475 sizeexceed.push_back(tmpsize);
1487 conv_merge(tmpPk,ttmpP,exceed,sizeexceed,b,serv);
1491 for(
typename typPk::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
1492 mdebug()<<
"invocn"<<invconv<Poly>(*iter,serv);
1544 typename typPk::iterator tmpiter=tmpPk.begin();
1545 list<int>::iterator itersize=sizeexceed.begin();
1546 for(
typename list<mon*>::iterator iter=exceed.begin();iter!=exceed.end()
1547 ;tmpiter++,iter++,itersize++)
1549 mdebug()<<
"pour un exceeed la taille attendue est "
1551 for(
int i=0;*itersize>
i;i++)
1553 mdebug()<<
"le gus que je regarde "<<(*iter)[
i];
1554 if(!
member(tmpMk,(*iter)[i]))
1557 mdebug()<<
"dans ce pol "<<invconv<Poly>(*tmpiter);
1558 mdebug()<<
"l'ind "<<tmpiter->ind;
1565 mat.nrow=tmpPk.size();
1566 mat.ncol=tmpMk.size();
1567 ncol=(
int*)calloc(mat.ncol,
sizeof(
int));
1569 map<mon,int,ord> mapint;
1570 typename typMk::iterator itermk=tmpMk.begin();
1571 typename typPk::iterator iterpk=tmpPk.begin();
1572 typename list<mon*>::iterator iterex=exceed.begin();
1573 list<int>::iterator itersize=sizeexceed.begin();
1575 for(
int i=0;itermk!=tmpMk.end();
i++,itermk++)
1580 iterpk=tmpPk.begin();
1582 for(;iterpk!=tmpPk.end();iterpk++,iterex++,itersize++,line_num++)
1586 mdebug()<<
"itesize "<<*itersize;
1599 for(
int i=0;*itersize>
i;i++)
1602 if (mapint.count((*iterex)[i]))
1605 mdebug()<<
"iterex ici "<<(*iterex)[
i];
1607 ++ncol[mapint[(*iterex)[
i]]];
1614 mdebug()<<
"OUILLE OUILLE OUILLE "<<(*iterex)[
i];
1617 mapint[(*iterex)[
i]]=mat.ncol-1;
1618 ncol=(
int*)realloc(ncol,mat.ncol*
sizeof(
int));
1619 ncol[mapint[(*iterex)[
i]]]=1;
1622 mon tmpmon=(*iterex)[
i];
1625 tmpMk.push_back(tmpmon);
1630 tmppol=convert<pol>(tmppolyalp,b);
1631 tmpPk.push_back(
mult(j,tmppol,dump,b,&tmp,tmpsize,w));
1632 exceed.push_back(tmp);
1633 sizeexceed.push_back(tmpsize);
1649 void * toto=MAC_REV_MALLOC<coeff>(nnz*
sizeof(
typename typMat::coeff_t));
1651 if (mat.nzval!=NULL) MAC_REV_FREE<typename typMat::coeff_t>
1653 *
sizeof(
typename typMat::coeff_t));
1663 if(mat.rowind!=NULL)
free(mat.rowind);
1664 mat.rowind=(
int*)
malloc(nnz*
sizeof(
int));
1666 if(mat.colptr!=NULL)
free(mat.colptr);
1667 mat.colptr=(
int*)
malloc((mat.ncol+1)*
sizeof(int));
1670 typename typMat::coeff_t* nzval=(
typename typMat::coeff_t*)mat.nzval;
1671 int *rowind=mat.rowind;
1672 int *colptr=mat.colptr;
1675 for(
int i=0;
i<mat.ncol-1;
i++)
1677 colptr[
i+1]=colptr[
i]+ncol[
i];
1681 colptr[mat.ncol]=mat.nnz;
1689 itermk=tmpMk.begin();
1690 iterpk=tmpPk.begin();
1691 iterex=exceed.begin();
1692 itersize=sizeexceed.begin();
1695 for(;0&&(line_num < (int)(tmpPk.size()-nbproj));
1696 iterpk++,iterex++,itersize++,line_num++)
1700 mon tmpmon=iterpk->ind;
1703 const unsigned int tmpplus
1704 =mapint[tmpmon]+1,tmp=tmpplus-1;
1707 nzval[colptr[tmpplus]-ncol[tmp]]=1;
1713 rowind[colptr[tmpplus]-ncol[tmp]]=line_num;
1718 for(
int i=0;*itersize>
i;i++)
1720 const coeff stock=(*iterex)[
i].GetCoeff();
1721 (*iterex)[
i].SetCoeff(1);
1722 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1723 const unsigned int tmpex=mapint[(*iterex)[
i]];
1724 nzval[colptr[tmpplusex]-ncol[tmpex]]
1726 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1728 mdebug()<<(*iterex)[
i]<<
" valeur de ncol["<<tmpex<<
"] "<<ncol[tmpex];
1731 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1733 for(;(iterpk!=tmpPk.end());iterpk++,iterex++,itersize++,line_num++)
1740 for(
int i=0;*itersize>
i;i++)
1743 const coeff stock=(*iterex)[
i].GetCoeff();
1744 (*iterex)[
i].SetCoeff(1);
1745 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1746 const unsigned int tmpex=mapint[(*iterex)[
i]];
1747 nzval[colptr[tmpplusex]-ncol[tmpex]]
1749 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1761 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1766 for(
typename typPk::iterator iterpk=tmpPk.begin()
1767 ;iterpk!=tmpPk.end();iterpk++)
1768 iterpk->ind.SetCoeff(1);
1791 template<
typename typdump,
typename mon,
typename pol>
1795 typename typdump::const_iterator iter=dump.begin();
1796 for(;(iter!=dump.end())&&(iter->k!=d);iter++);
1802 if(iter!=dump.end())
1804 for(i=0;(i<iter->size)&&(iter->nf[i].ind.rep!=m.
rep);i++);
1829 template<
typename iterator,
typename mon,
typename Base>
1834 if(iter1->ind.GetDegree(
i)>iter2->ind.GetDegree(
i))
1836 if(iter2->ind.GetDegree(
i)>iter1->ind.GetDegree(
i))
1841 template <
typename mon,
typename pol,
typename typdump,
typename Base,
1843 pol
halfred(
const mon &targetind,
const pol & p,
const typdump & dump
1847 static const mon monzero=
mon(0);
1849 int *place=(
int*)MAC_REV_MALLOC<int>(p.
size*
sizeof(
int)),comp=0;
1856 int i,maxref=0,ppp=0,nbbitsun=0;
1860 for(i=0;i<b.
nbvar();i++)
1881 for(i=0;i<p.sizenf;i++)
1886 mdebug()<<nbbitsun<<
" p.nfind[i] "<<(int)p.nfind[i];
1888 nbbitsun+=
nbbits[p.nfind[i]];
1889 for(
int j=0;
j<8;
j++)
1891 if((p.nfind[i]>>
j)&1)
1898 place[comp]=serv.
mulind(8*i+
j,varref,b);
1901 place[comp]=-1*(8*i+
j+1);
1902 if (place[comp]>maxref)
1919 place[comp]=indtmpmon;
1923 place[comp]=-1*(8*i+
j);
1932 coeff *tmpspace=(coeff*)MAC_REV_MALLOC<coeff>((maxref/8+1)*8*
sizeof(coeff));
1934 mdebug()<<
"comp "<<comp<<
" et p.size "<<p.
size;
1936 res.sizenf=(maxref/8+1);
1937 for(
int j=0;
j<8*res.sizenf;
j++)
1939 res.nfind=(
unsigned char*)MAC_REV_MALLOC<unsigned char>(res.sizenf);
1940 memset(res.nfind,0,res.sizenf);
1942 for(
int j=0;
j<nbbitsun;
j++)
1948 mdebug()<<
"le monome la "<<tmpmm<<
" "<<p.
nf[
j];
1950 tmpspace[place[
j]]+=p.
nf[
j];
1951 res.nfind[place[
j]/8]|=1<<(place[
j]%8);
1957 tmp=serv.nf(varref,-1*place[
j]-1,dump,b);
1962 tmp=nf<typpol>(tmpmon,dump,b);
1970 if(tmp.sizenf>res.sizenf)
1972 res.nfind=(
unsigned char*)realloc(res.nfind,tmp.sizenf);
1973 for(
int k=res.sizenf;
k<tmp.sizenf;
k++)
1975 tmpspace=(coeff*)MAC_REV_REALLOC<coeff>(tmpspace,
1976 res.sizenf*8*
sizeof(coeff),
1977 tmp.sizenf*8*
sizeof(coeff));
1978 for(
int k=res.sizenf*8;
k<tmp.sizenf*8;
k++)
1980 res.sizenf=tmp.sizenf;
1983 for(
int k=0;
k<tmp.sizenf;
k++)
1987 for(
int l=0;l<8;l++)
1988 if((tmp.nfind[
k]>>l)&1)
1989 tmpspace[8*
k+l]-=p.
nf[j]*tmp.
nf[compteurtmp++];
1991 res.nfind[
k]|=tmp.nfind[
k];
1997 serv.
int2mon(-1*place[j]-1,tmpmon);
1998 tmpmon*=
mon(varref,1);
2001 mdebug()<<
"monom "<<tmpmon<<
" "<<-1*place[
j]
2003 cerr<<
"Je n'aurrai pas du passer par la ";
2010 for(
int j=0;
j<res.sizenf;
j++)
2013 res.
nf=(coeff*)MAC_REV_MALLOC<coeff>(comp*
sizeof(coeff));
2017 for(
int j=0;
j<res.sizenf;
j++)
2019 for(
int k=0;
k<8;
k++)
2020 if((res.nfind[
j]>>
k)&1)
2021 if(tmpspace[8*
j+
k]!=0)
2022 {res.
nf[comp++]=tmpspace[8*
j+
k];
2026 res.nfind[
j]&=~(1<<
k);
2028 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
2029 ,comp*
sizeof(coeff));
2036 MAC_REV_FREE<coeff>(tmpspace,res.sizenf*8*
sizeof(coeff));
2043 template <
typename typPk,
typename typdump,
typename Base,
2045 void ReduceSpol(typPk &S,
const typdump & dump,typPk &redspol,
const Base &b
2049 typedef typename typPk::value_type
pol;
2053 list<typPk> membermon;
2054 mdebug()<<
"en entree de RedSpol S.size "<<S.size()/2;
2056 for(
typename typPk::iterator iterS=S.begin();iterS!=S.end();iterS++,iterS++)
2058 typename typPk::iterator iterS2=iterS;
2059 typename list<mon>::iterator itermon=leadmon.begin();
2060 typename list<typPk>::iterator itermemb=membermon.begin();
2061 mon var1,var2,tmpleadmon;
2063 varmult(iterS,iterS2,var1,var2,b);
2064 tmpleadmon=iterS->ind*var1;
2067 for(;itermon!=leadmon.end()&&itermon->rep!=tmpleadmon.
rep;
2068 itermon++,itermemb++);
2069 if(itermon!=leadmon.end())
2072 for(
typename typPk::iterator tmpiter=itermemb->begin();
2073 tmpiter!=itermemb->end();tmpiter++)
2075 if(tmpiter->ind.rep==iterS->ind.rep) yes1=0;
2076 if(tmpiter->ind.rep==iterS2->ind.rep) yes2=0;
2078 if(yes1) itermemb->push_back(*iterS);
2079 if(yes2) itermemb->push_back(*iterS2);
2086 leadmon.push_back(tmpleadmon);
2088 membermon.push_back(verytmp);
2089 membermon.back().push_back(*iterS);
2090 membermon.back().push_back(*iterS2);
2093 mdebug()<<
"sale del primer for";
2097 typename list<mon>::iterator itermon=leadmon.begin();
2098 typename list<typPk>::iterator itermemb=membermon.begin();
2100 for(;itermon!=leadmon.end();itermon++,itermemb++)
2102 typename typPk::value_type ref;
2103 typename typPk::iterator tmpiter=itermemb->begin();
2104 mdebug()<<
"antes halfred";
2105 mdebug()<<
"itermon"<<*itermon;
2107 ref=
halfred(*itermon,*tmpiter,dump,b,serv);
2111 for(;tmpiter!=itermemb->end();tmpiter++)
2113 typename typPk::value_type redcur;
2114 redcur=
halfred(*itermon,*tmpiter,dump,b,serv);
2115 my_plus(redcur,ref,(coeff)1,&w);
2118 redspol.push_back(redcur);
2124 MAC_REV_FREE<coeff>(redcur.nf,redcur.size*
sizeof(coeff));
2125 MAC_REV_FREE<unsigned char>(redcur.nfind,redcur.sizenf);
2128 MAC_REV_FREE<coeff>(ref.nf,ref.size*
sizeof(coeff));
2129 MAC_REV_FREE<unsigned char>(ref.nfind,ref.sizenf);
2134 template<
typename typPk,
typename monomial_server>
2137 typedef typename typPk::value_type::monom_t
mon;
2141 for(
typename typPk::const_iterator iter=l.begin() ;iter!=l.end();iter++)
2145 for(
int i=0;
i<iter->sizenf;
i++)
2147 for(
int j=0;
j<8;
j++)
2148 if((iter->nfind[
i]>>
j)&1)
2155 if (iter->ind.GetCoeff()==(coeff)1)
2156 mmax=(mmax<iter->ind.GetDegree())?iter->ind.GetDegree():mmax;
2160 if(res==-1) res=mmax;
2161 res=(mmax>res)?res:mmax;
2168 template<
typename coeff,
typename typiterpk,
typename workspace>
2173 if((iterPk->sizenf>tmpind/8)&&(((iterPk->nfind[tmpind/8])>>(tmpind%8))&1))
2179 for(
int j=0;8*
j<=tmpind;
j++)
2181 for(
int j=7;
j>=(tmpind % 8);
j--)
2182 if((iterPk->nfind[tmpind/8]>>
j)&1)
2186 mdebug()<<
"i ici "<<i<<
" et iterPk->size "<<iterPk->size;
2193 for(
int j=i;
j<iterPk->size-1;
j++){
2194 iterPk->nf[
j]=iterPk->nf[
j+1];
2196 iterPk->nfind[tmpind/8]&=~(1<< (tmpind%8));
2197 iterPk->nf=(coeff*)MAC_REV_REALLOC<coeff>(iterPk->nf,
2198 iterPk->size*
sizeof(coeff),(iterPk->size-1)*
sizeof(coeff));
2201 my_plus(*iterPk,*iter,tmp,&w);
2208 template<
typename typP,
typename typPk,
typename typMk
2209 ,
typename Base,
typename typdump,
typename typrecall,
2212 ,
int &
k,typdump &dump, Base &b, typrecall & recall
2219 typedef typename typP::value_type polyalp;
2220 typedef typename polyalp::monom_t
mon;
2221 typedef typename polyalp::coeff_t coeff;
2240 typPk res=
Crochet(redspol,k,serv),tmpres;
2243 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2245 for(
typename typPk::iterator iterredspol=redspol.begin();
2246 iterredspol!=redspol.end();iterredspol++)
2247 if(iter->nf==iterredspol->nf)
2249 redspol.erase(iterredspol);
2254 redspol.erase(redspol.begin(),redspol.end());
2257 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2259 mdebug()<<
"un nouveau tour de boucle ";
2263 iter->ind=choice(*iter,b,serv);
2268 if(iter->ind.GetDegree()<
k)
2271 k=iter->ind.GetDegree();
2276 tmpres.erase(tmpres.begin(),tmpres.end());
2277 res.erase(res.begin(),res.end());
2280 for(
typename typPk::iterator iterres=res.begin()
2281 ;iterres!=res.end();iterres++)
2283 for(
typename typPk::iterator iterredspol=redspol.begin();
2284 iterredspol!=redspol.end();iterredspol++)
2285 if(iterres->nf==iterredspol->nf)
2287 redspol.erase(iterredspol);
2291 for(
typename typPk::iterator iterredspol=redspol.begin();
2292 iterredspol!=redspol.end();iterredspol++)
2293 if(
Degree(*iterredspol,serv)<=
k)
2295 tmpres.push_back(*iterredspol);
2296 redspol.erase(iterredspol--);
2299 redspol.erase(redspol.begin(),redspol.end());
2301 tmpres.erase(tmpres.begin(),tmpres.end());
2303 iter->ind=choice(*iter,b,serv);
2313 serv.
compress(Pk,redspol,dump,b,k);
2337 *iter/=iter->ind.GetCoeff();
2339 iter->ind*=(coeff)1/iter->ind.GetCoeff();
2340 tmpind=serv.
mon2int(iter->ind);
2342 for(
int j=0;8*
j<=tmpind;
j++)
2344 for(
int j=7;
j>=(tmpind % 8);
j--)
2345 if((iter->nfind[tmpind/8]>>
j)&1)
2347 for(
int j=i;
j<iter->size-1;
j++)
2348 iter->nf[
j]=iter->nf[
j+1];
2349 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf,
2350 iter->size*
sizeof(coeff),
2351 (iter->size-1)*
sizeof(coeff));
2352 iter->nfind[tmpind/8]&=~(1<<(tmpind%8));
2355 mdebug()<<
"apres tambouille"<<endl<<invconv<Poly>(*iter);
2370 tmpres.push_back(*iter);
2375 for(
typename typPk::iterator iterPk=Pk.begin();iterPk!=Pk.end();iterPk++)
2376 update_crochetchoix<coeff>(iterPk,iter,tmpind,w);
2377 typename typPk::iterator iterredspol=iter;
2379 for(;iterredspol!=res.end();iterredspol++)
2383 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w);
2386 typename typPk::iterator iterend=tmpres.end();
2388 for(iterredspol=tmpres.begin();iterredspol!=iterend;iterredspol++)
2392 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w);
2398 mdebug()<<
"avant met a jour";
2403 mdebug()<<
"iterb->taille1"<<iterb->taille1;
2404 mdebug()<<
"iterb->taille2"<<iterb->taille2;
2406 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iterb->taille1*
sizeof(mon));
2407 for(
int i=0;i<iterb->taille1;i++)
2409 tmp[tmptaille1++]=iterb->accept[i];
2410 tmp=(mon*)MAC_REV_REALLOC<mon>(tmp,iterb->taille1*
sizeof(
mon)
2411 ,tmptaille1*
sizeof(mon));
2412 MAC_REV_FREE<mon>(iterb->accept,iterb->taille1*
sizeof(
mon));
2414 iterb->taille1=tmptaille1;
2415 if(iterb->taille1==0)
2417 mdebug()<<
"passe par ici";
2418 MAC_REV_FREE<mon>(iterb->refuse,iterb->taille2*
sizeof(
mon));
2422 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2423 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2424 (iterb->taille2+1)*
sizeof(
mon));
2425 iterb->refuse[iterb->taille2]=iter->ind;
2426 mdebug()<<
"reffuse rajoute "<<iter->ind;
2427 iterb->refuse[iterb->taille2].SetCoeff(1);
2434 for (
typename typPk::iterator iterpk=Pk.begin();iterpk!=Pk.end();iterpk++)
2438 if (
IsinB(iterpk->ind,b))
2442 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2443 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2444 (iterb->taille2+1)*
sizeof(
mon));
2445 iterb->refuse[iterb->taille2]=iterpk->ind;
2446 iterb->refuse[iterb->taille2].SetCoeff(1);
2451 #ifdef NO_TWICE_FALL
2452 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2453 P.push_back(invconv<polyalp>(*iter));
2456 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2457 P.push_back(invconv<polyalp>(*iter));
2458 mdebug()<<
"a la fin de \A7New";
2461 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2462 mdebug()<<
"tmpres"<<endl<<invconv<polyalp>(*iter);
2463 mdebug()<<
"tmpres.size "<<tmpres.size();
2486 template<
typename typPk>
2490 for(
typename typPk::iterator iter=redspol.begin();
2491 iter!=redspol.end();iter++)
2494 MAC_REV_FREE<typename typPk::value_type::coeff_t>(iter->nf,iter->size*
sizeof(
typename typPk::value_type::coeff_t));
2495 MAC_REV_FREE<unsigned char>(iter->nfind,iter->sizenf);
2499 template<
typename typMk>
2502 Spoldejavu.erase(Spoldejavu.begin(),Spoldejavu.end());
2503 for(
typename typMk::const_iterator iter1=Mk.begin();iter1!=Mk.end();
2505 for(
typename typMk::const_iterator iter2=iter1;iter2!=Mk.end();
2508 typename typMk::value_type tmp=
lcm(*iter1,*iter2);
2509 if (tmp.GetDegree()==iter1->GetDegree()+1)
2510 Spoldejavu.push_back(tmp);
2517 template<
typename Base,
typename typstock,
typename typdump>
2519 const Base &b,
const typdump &dump)
2521 typedef typename typstock::value_type
mon;
2524 current.push_back(
mon(1));
2525 stockmon.push_back(
mon(1));
2533 for(
int j=0;
j<
k;
j++)
2535 typstock tmpcurrent=current;
2536 current.erase(current.begin(),current.end());
2540 for(
typename list<mon>::iterator iter=tmpcurrent.begin();
2541 iter!=tmpcurrent.end();iter++)
2543 mon tmpmon=(*iter)*
mon(
i,1);
2545 current.push_back(tmpmon);
2551 for(
typename list<mon>::iterator iter=current.begin();iter!=current.end();iter++)
2552 if(!
member(stockmon,*iter))
2554 stockmon.push_back(*iter);
2558 current.erase(iter--);
2564 template<
typename Base,
typename typstock,
typename typdump>
2566 const Base &b,
const typdump &dump)
2568 typedef typename typstock::value_type
mon;
2571 current.push_back(
mon(1));
2572 stockmon.push_back(
mon(1));
2580 for(
int j=0;
j<
k;
j++)
2582 typstock tmpcurrent=current;
2583 current.erase(current.begin(),current.end());
2587 for(
typename list<mon>::iterator iter=tmpcurrent.begin();
2588 iter!=tmpcurrent.end();iter++)
2590 mon tmpmon=(*iter)*
mon(
i,1);
2592 current.push_back(tmpmon);
2598 for(
typename list<mon>::iterator iter=current.begin();iter!=current.end();iter++)
2599 if(!
member(stockmon,*iter))
2601 stockmon.push_back(*iter);
2605 current.erase(iter--);
2614 template<
typename Base,
typename typstock,
typename typdump>
2616 const Base &b,
const typdump &dump,
int n)
2618 typedef typename typstock::value_type
mon;
2621 current.push_back(
mon(1));
2622 stockmon.push_back(
mon(1));
2630 for(
int j=0;
j<
k;
j++)
2632 typstock tmpcurrent=current;
2633 current.erase(current.begin(),current.end());
2634 for(
int i=0;
i<n;
i++)
2637 for(
typename list<mon>::iterator iter=tmpcurrent.begin();
2638 iter!=tmpcurrent.end();iter++)
2640 mon tmpmon=(*iter)*
mon(
i,1);
2642 current.push_back(tmpmon);
2648 for(
typename list<mon>::iterator iter=current.begin();iter!=current.end();iter++)
2649 if(!
member(stockmon,*iter))
2651 stockmon.push_back(*iter);
2655 current.erase(iter--);
2664 static bool less (
const M &,
const M &);
2665 bool operator() (
const M &,
const M &)
const;
2674 typedef typename M::monom_t
mon;
2675 mon m1=*(p1.begin());
2676 mon m2=*(p2.begin());
2677 int dm1=0,dm2=0,firstdiff=0,tmpdeg1,tmpdeg2;
2681 if(n1 <0 && n2>0)
return false;
2682 if(n2 <0 && n1>0)
return true;
2683 for(
int i=0;
i<=n;
i++)
2687 if(tmpdeg1>tmpdeg2 && firstdiff==0) firstdiff=1;
2688 if(tmpdeg2>tmpdeg1 && firstdiff==0) firstdiff=-1;
2692 if (dm1 < dm2)
return false;
2693 else if (dm1 > dm2)
return true;
2694 return (firstdiff==1);
2697 template<
typename typprod,
typename Base,
typename typstock,
typename typdump>
2702 for(
typename typstock::iterator
i=stockmon.begin();
2703 i!=stockmon.end();
i++)
2705 for(
typename typstock::iterator
j=
i;
j!=stockmon.end();
j++)
2706 prod.push_back(*
i * *
j);
2718 template<
typename T>
2719 int dgesvd_(
char *jobu,
char *jobvt,
long *m,
long *n,
2720 T *
a,
long *lda, T *s, T *u,
long *
2721 ldu, T *vt,
long *ldvt, T *work,
long *lwork,
2724 template<
typename typP,
typename typdump,
typename Base,
typename typserv>
2726 const typdump &dump, Base &b, typserv &serv)
2729 typedef typename typP::value_type::order_t ord;
2733 struct blockmatrix<COEFF> C;
2734 struct sparseblock<COEFF> *blockptr;
2737 struct constraintmatrix<COEFF> *constraints;
2748 typP stockprod,stockproj;
2753 list<typename typserv::monom_t> stockmon,stockksur2;
2754 map<mon,int,ord> mapintligne,mapintcolonne,maphankel;
2765 for(
typename list<typename typserv::monom_t>::iterator
2766 iter=stockksur2.begin(); iter!=stockksur2.end();iter++)
2767 if(!
IsinB(*iter,b)) stockksur2.erase(iter--);
2769 mdebug()<<
"monome en degre k/2 ";
2770 for(
typename list<typename typserv::monom_t>::iterator
2771 iter=stockksur2.begin(); iter!=stockksur2.end();iter++)
2776 for(
typename list<typename typserv::monom_t>::iterator
2777 iter=stockksur2.begin();iter!=stockksur2.end();iter++,i++)
2780 for(
typename list<typename typserv::monom_t>::iterator
2781 iter2=stockksur2.begin();iter2!=stockksur2.end();iter2++,j++)
2783 typename typserv::monom_t mono=*iter * (*iter2);
2785 if (!mapintligne.count(mono))
2787 mapintligne[mono]=
i;
2788 mapintcolonne[mono]=
j;
2800 stockproj=stockprod;
2801 proj(stockproj,dump,b,serv);
2805 for(
typename typP::iterator iter=stockprod.begin();iter!=stockprod.end();
2810 for(
typename typP::iterator iter=stockproj.begin();iter!=stockproj.end();
2825 for(
typename typP::iterator iter=stockprod.begin();
2826 iter!=stockprod.end();iter++)
2827 if(!
IsinB(*(iter->begin()),b))
2830 constraints=
new constraintmatrix<COEFF>[nbconstraint+1];
2832 constraints=(
struct constraintmatrix<COEFF> *)
2833 malloc((nbconstraint+1)*
sizeof(
struct constraintmatrix<COEFF>));
2844 constraints[0].blocks=NULL;
2847 typename typP::iterator iterstockprod=stockprod.begin();
2848 for(
typename typP::iterator iter=stockproj.begin();
2849 iter!=stockproj.end();iter++,iterstockprod++)
2851 if(!
IsinB(*(iterstockprod->begin()),b))
2859 constraints[
i].blocks=NULL;
2862 blockptr=
new sparseblock<COEFF>[1];
2864 blockptr=(
struct sparseblock<COEFF> *)
malloc(
sizeof(
struct sparseblock<COEFF>));
2866 blockptr->blocknum=1;
2869 blockptr->blocksize=stockksur2.size();
2870 blockptr->numentries=2*iter->size()+2;
2871 decal=iter->size()+1;
2873 blockptr->blocksize=stockksur2.size();
2874 blockptr->numentries=iter->size()+1;
2877 blockptr->constraintnum=
i;
2878 blockptr->next=NULL;
2879 blockptr->nextbyblock=NULL;
2881 blockptr->entries=
new COEFF[(blockptr->numentries+1)];
2883 blockptr->entries=(COEFF *)
2887 blockptr->iindices=(
short unsigned int *)
2888 malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2889 blockptr->jindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
2891 blockptr->iindices=(
int *)
2892 malloc((blockptr->numentries+1)*
sizeof( int));
2893 blockptr->jindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof( int));
2898 for(
typename typP::value_type::iterator iterpol=iter->begin();
2899 iterpol!=iter->end();k++,iterpol++)
2901 if(mapintligne[*iterpol]<mapintcolonne[*iterpol])
2903 blockptr->iindices[
k]=mapintligne[*iterpol];
2904 blockptr->jindices[
k]=mapintcolonne[*iterpol];
2905 blockptr->entries[
k]=((
COEFF)-1)*iterpol->GetCoeff();
2914 if (mapintligne[*iterpol]!=mapintcolonne[*iterpol] )
2916 blockptr->jindices[
k]=mapintligne[*iterpol];
2917 blockptr->iindices[
k]=mapintcolonne[*iterpol];
2918 blockptr->entries[
k]=((
COEFF)-1)*iterpol->GetCoeff();
2922 blockptr->jindices[
k]=mapintligne[*iterpol];
2923 blockptr->iindices[
k]=mapintcolonne[*iterpol];
2924 blockptr->entries[
k]=((
COEFF)-2)*iterpol->GetCoeff();
2931 if(mapintligne[*(iterstockprod->begin())]<
2932 mapintcolonne[*(iterstockprod->begin())] )
2934 blockptr->iindices[
k]=mapintligne[*(iterstockprod->begin())];
2935 blockptr->jindices[
k]=mapintcolonne[*(iterstockprod->begin())];
2936 blockptr->entries[
k]=1;
2942 if (mapintligne[*(iterstockprod->begin())]!=
2943 mapintcolonne[*(iterstockprod->begin())])
2945 blockptr->iindices[
k]
2946 =mapintcolonne[*(iterstockprod->begin())];
2948 blockptr->jindices[
k]
2949 =mapintligne[*(iterstockprod->begin())];
2950 blockptr->entries[
k]=1;
2956 blockptr->iindices[
k]=mapintligne[*(iterstockprod->begin())];
2957 blockptr->jindices[
k]=mapintcolonne[*(iterstockprod->begin())];
2958 blockptr->entries[
k]=2;
2965 blockptr->next=NULL;
2967 constraints[
i].blocks=blockptr;
2981 int nbhankelrel=0,i_counter=1,j_counter;
2982 for(
typename list<typename typserv::monom_t>::iterator i=stockksur2.begin();
2983 i!=stockksur2.end();i++,i_counter++)
2986 for(
typename list<typename typserv::monom_t>::iterator
j=stockksur2.begin();
2987 j!=stockksur2.end();
j++,j_counter++)
2988 if(!maphankel.count(*i * *
j))
2990 maphankel[*i * *
j]=j_counter*stockksur2.size()+i_counter;
2993 if((maphankel[*i * *j]%stockksur2.size()!=j_counter)
2994 ||(maphankel[*i * *j]/stockksur2.size()!=i_counter))
2999 constraintmatrix<COEFF> *tmpconstraints=
new constraintmatrix<COEFF>[nbhankelrel+nbconstraint+1];
3000 for(
int ii=0;ii<nbhankelrel+nbconstraint;ii++)
3001 tmpconstraints[ii]=constraints[ii];
3002 delete[] constraints;
3003 constraints=tmpconstraints;
3004 blockptr=
new sparseblock<COEFF>[1];
3006 constraints=(
struct constraintmatrix<COEFF> *)
3007 realloc(constraints,
3008 (nbhankelrel+nbconstraint+1)
3009 *
sizeof(
struct constraintmatrix<COEFF>));
3011 blockptr=(
struct sparseblock<COEFF> *)
malloc(
sizeof(
struct sparseblock<COEFF>));
3013 blockptr->blocknum=1;
3014 blockptr->blocksize=stockksur2.size();
3016 blockptr->numentries=4;
3018 blockptr->numentries=2;
3020 blockptr->constraintnum=nbconstraint+nbhankelrel;
3021 blockptr->next=NULL;
3022 blockptr->nextbyblock=NULL;
3024 blockptr->entries=
new COEFF[(blockptr->numentries+1)];
3026 blockptr->entries=(COEFF *)
3030 blockptr->iindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
3031 blockptr->jindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
3033 blockptr->iindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
3034 blockptr->jindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
3037 if((maphankel[*i * *j]%stockksur2.size())<
3038 (maphankel[*i * *j]/stockksur2.size()))
3040 blockptr->iindices[1]=maphankel[*i * *
j]%stockksur2.size();
3041 blockptr->jindices[1]=maphankel[*i * *
j]/stockksur2.size();
3042 blockptr->entries[1]=1;
3046 if((maphankel[*i * *j]/stockksur2.size())!=
3047 (maphankel[*i * *j]%stockksur2.size()))
3049 blockptr->jindices[1]=maphankel[*i * *
j]%stockksur2.size();
3050 blockptr->iindices[1]=maphankel[*i * *
j]/stockksur2.size();
3051 blockptr->entries[1]=1;
3055 blockptr->jindices[1]=maphankel[*i * *
j]%stockksur2.size();
3056 blockptr->iindices[1]=maphankel[*i * *
j]/stockksur2.size();
3057 blockptr->entries[1]=2;
3061 if(i_counter<j_counter)
3063 blockptr->iindices[2]=i_counter;
3064 blockptr->jindices[2]=j_counter;
3065 blockptr->entries[2]=-1;
3069 if(i_counter!=j_counter)
3071 blockptr->iindices[2]=j_counter;
3072 blockptr->jindices[2]=i_counter;
3073 blockptr->entries[2]=-1;
3077 blockptr->iindices[2]=j_counter;
3078 blockptr->jindices[2]=i_counter;
3079 blockptr->entries[2]=-2;
3083 if((maphankel[*i * *j]/stockksur2.size())!=
3084 (maphankel[*i * *j]%stockksur2.size()))
3086 blockptr->iindices[3]=maphankel[*i * *
j]/stockksur2.size();
3087 blockptr->jindices[3]=maphankel[*i * *
j]%stockksur2.size();;
3088 blockptr->entries[3]=1;
3093 blockptr->numentries--;
3094 blockptr->entries[1]=2;
3097 if(i_counter!=j_counter)
3099 blockptr->iindices[4-decal]=j_counter;
3100 blockptr->jindices[4-decal]=i_counter;
3101 blockptr->entries[4-decal]=-1;
3105 blockptr->numentries--;
3106 blockptr->entries[2]=-2;
3120 blockptr->next=NULL;
3121 constraints[nbconstraint+nbhankelrel].blocks=blockptr;
3135 constraintmatrix<COEFF> *tmpconstraints=
3136 new constraintmatrix<COEFF>[(nbhankelrel+nbconstraint+1)];
3137 for(
int ii=0;ii<nbhankelrel+nbconstraint;ii++)
3138 tmpconstraints[ii]=constraints[ii];
3139 delete [] constraints;
3140 constraints=tmpconstraints;
3142 constraints=(
struct constraintmatrix<COEFF> *)
3143 realloc(constraints,
3144 (nbhankelrel+nbconstraint+1)
3145 *
sizeof(
struct constraintmatrix<COEFF>));
3149 blockptr=
new sparseblock<COEFF>[1];
3151 blockptr=(
struct sparseblock<COEFF> *)
malloc(
sizeof(
struct sparseblock<COEFF>));
3153 blockptr->blocknum=1;
3154 blockptr->blocksize=stockksur2.size();
3155 blockptr->numentries=1;
3156 blockptr->constraintnum=nbconstraint+nbhankelrel;
3157 blockptr->next=NULL;
3158 blockptr->nextbyblock=NULL;
3160 blockptr->entries=
new COEFF[blockptr->numentries+1];
3162 blockptr->entries=(COEFF *)
3166 blockptr->iindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
3167 blockptr->jindices=(
short unsigned int *)
malloc((blockptr->numentries+1)*
sizeof(
short unsigned int));
3169 blockptr->iindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
3170 blockptr->jindices=(
int *)
malloc((blockptr->numentries+1)*
sizeof(int));
3174 blockptr->iindices[1]=1;
3175 blockptr->jindices[1]=1;
3176 blockptr->entries[1]=1;
3177 blockptr->next=NULL;
3178 constraints[nbconstraint+nbhankelrel].blocks=blockptr;
3182 struct blockmatrix<COEFF> X,Z;
3185 int tmpsize=(int)stockksur2.size();
3187 bb=
new COEFF[nbhankelrel+nbconstraint+1];
3189 bb=(COEFF *)
malloc((nbhankelrel+nbconstraint+1)*
sizeof(
COEFF));
3190 #endif //oon a un block de 0
3193 C.blocks=
new blockrec<COEFF>[2];
3195 C.blocks=(
struct blockrec<COEFF> *)
malloc(2*
sizeof(
struct blockrec<COEFF>));
3198 C.blocks[1].blockcategory=MATRIX;
3199 C.blocks[1].blocksize=stockksur2.size();
3201 C.blocks[1].data.mat=
new COEFF[stockksur2.size()*stockksur2.size()+1];
3203 C.blocks[1].data.mat=(COEFF *)
malloc(
3204 (stockksur2.size()*stockksur2.size()+1)*
sizeof(COEFF));
3206 for(
int k=0;k<=(stockksur2.size()*stockksur2.size());k++)
3207 C.blocks[1].data.mat[k]=0;
3209 C.blocks[1].data.mat[1]=0;
3211 C.blocks[1].blockcategory=DIAG;
3212 C.blocks[1].blocksize=stockksur2.size();
3213 C.blocks[1].data.vec=(COEFF *)
malloc(
3214 (stockksur2.size()+1)*
sizeof(COEFF));
3215 for(
int k=0;k<=(stockksur2.size());k++)
3216 C.blocks[1].data.vec[k]=0;
3219 for(i=0;i<=nbhankelrel+nbconstraint;i++)
3221 bb[nbconstraint+nbhankelrel]=(
COEFF)1.;
3226 for(i=1;i<nbconstraint+nbhankelrel+1;i++)
3229 int tsize=constraints[
i].blocks->blocksize;
3230 COEFF* tmp =
new COEFF[tsize*tsize];
3232 for(
int j;
j<tsize*tsize;
j++)
3234 for(
int j=1;
j<=constraints[
i].blocks->numentries;
j++)
3235 tmp[constraints[i].blocks->iindices[
j]-tsize-1+
3236 constraints[i].blocks->jindices[
j]*tsize]=
3237 constraints[i].blocks->entries[
j];
3239 for(
int j=0;
j<tsize;
j++)
3241 for(
int jj=0;jj<tsize;jj++)
3242 mdebug()<<tmp[tsize*(jj)+
j]<<
" ";
3250 sprintf(nom,
"ficprob_%d",d++);
3251 write_prob(nom,tmpsize,
3252 nbhankelrel+nbconstraint,C,bb,constraints);
3254 mdebug()<<
"SDP of size : "<<stockksur2.size()<<
"x"<<nbhankelrel+
3256 initsoln(tmpsize,nbhankelrel+nbconstraint,
3257 C,bb,constraints,&X,&y,&Z);
3258 struct timeval tvini, tvfin;
3259 gettimeofday(&tvini,NULL);
3260 int return_code=easy_sdp((
int)stockksur2.size(),nbhankelrel+
3264 gettimeofday(&tvfin,NULL);
3265 tempsCDSP+=tvfin.tv_sec-tvini.tv_sec+1e-6*(tvfin.tv_usec-tvini.tv_usec);
3273 mdebug()<<
"pobj "<<pobj<<
" dobj "<<dobj<<
" diff "<<pobj-
dobj;
3275 if (1||return_code==8)
3277 long n=stockksur2.size();
3278 COEFF *matdense=
new COEFF[n*n];
3279 COEFF *V=
new COEFF[n*n];
3280 COEFF *S=
new COEFF[n];
3281 COEFF *work=
new COEFF[16*n];
3282 long lwork=16*n,info;
3284 for(
int j=0;
j<n*n;
j++)
3300 for(
int i=1;i<=nbconstraint+nbhankelrel;i++)
3302 mdebug()<<
"nombre de blocks de X "<<X.nblocks;
3304 for(
int i=1;i<=X.nblocks;i++)
3307 struct blockrec<COEFF> tmp=X.blocks[
i];
3312 mdebug()<<
"n _________________________________ "<<n;
3313 mdebug()<<
"blockcat "<<tmp.blockcategory<<
" "<<
k;
3315 switch(tmp.blockcategory)
3318 for(
int j=1;
j<=tmp.blocksize;
j++)
3319 matdense[n*(k+
j-1)+(k+
j-1)]=tmp.data.vec[
j];
3321 for(
int j=1;
j<=tmp.blocksize;
j++)
3323 for(
int jj=1;jj<=tmp.blocksize;jj++)
3324 mdebug()<<matdense[n*(k+jj-1)+
j-1]<<
" ";
3331 for(
int j=1;
j<=tmp.blocksize;
j++)
3332 for(
int jj=1;jj<=tmp.blocksize;jj++)
3333 matdense[n*(k+jj-1)+
j-1]=
3334 tmp.data.mat[tmp.blocksize*(jj-1)+
j-1];
3336 for(
int j=1;
j<=tmp.blocksize;
j++)
3338 for(
int jj=1;jj<=tmp.blocksize;jj++)
3339 mdebug()<<matdense[n*(k+jj-1)+
j-1]<<
" ";
3350 dgesvd_((
char*)
"N",(
char*)
"A",&n,&n,matdense,
3351 &n,S,(COEFF*)NULL,&n,V,&n,work,&lwork,&info);
3353 mdebug()<<
"info svd "<<info;
3354 mdebug()<<
"val singulieres ";
3361 if((
abs(S[k-1])==0) || (
abs(S[k-1])>
abs(S[k])*1e6))
break;
3363 mdebug()<<
"----k ici "<<k<<
" et n "<<n;
3365 for(
int j=1;
j<=n;
j++)
3367 for(
int jj=1;jj<=n;jj++)
3368 mdebug()<<V[n*(jj-1)+
j-1]<<
" ";
3377 mdebug()<<
"equation dans le noyau";
3379 typedef typename typP::value_type polyalp;
3381 for(
typename list<typename typserv::monom_t>::iterator
3382 iter=stockksur2.begin();
3383 iter!=stockksur2.end();iter++)
3388 if(!
Iszero(
abs(V[k+n*(mapintcolonne[*iter]-1)])))
3393 tmp+=polyalp(*iter*(COEFF)V[k+n*(mapintcolonne[*iter]-1)]);
3401 newpol.push_back(tmp);
3409 for(
int i=1;i<nbconstraint;i++)
3411 free(constraints[i].blocks->iindices);
3412 free(constraints[i].blocks->jindices);
3413 delete [] constraints[
i].blocks->entries;
3414 delete [] constraints[
i].blocks;
3416 delete [] constraints;
3418 delete [] C.blocks[1].data.mat;
3428 template<
typename typmatmap,
typename typserv>
3433 typename typserv::monom_t m(1);
3434 COEFF *tmpval=matrixmap[m];
3436 sprintf(nomdufic,
"tmpfile_%d",d);
3437 tmpfic.open(nomdufic);
3438 tmpfic<<setprecision(80);
3439 tmpfic<<
"\" Ceci est un message \"";
3440 tmpfic<<matrixmap.size()-1<<
" = mDIM";
3441 tmpfic<<1<<
" = nBLOCK";
3442 tmpfic<<dim<<
" = bLOCKsTRUCT";
3444 for(
int i=0;
i<((long)matrixmap.size())-2;
i++)
3448 for(
int i=0;
i<dim-1;
i++)
3451 for(
int j=0;
j<dim-1;
j++)
3454 tmpfic<<(
COEFF)(-1*matrixmap[m][
i*dim+
j])<<
",";
3457 tmpfic<<(
COEFF)(-1*matrixmap[m][
i*dim+dim-1])<<
"},";
3461 for(
int j=0;
j<dim-1;
j++)
3462 tmpfic<<-1*matrixmap[m][(dim-1)*dim+
j]<<
",";
3463 tmpfic<<-1*matrixmap[m][dim*dim-1]<<
"}}";
3465 matrixmap.erase(matrixmap.find(m));
3466 for(
typename typmatmap::iterator itermat=matrixmap.begin();
3467 itermat!=matrixmap.end();itermat++)
3470 COEFF *tt=itermat->second;
3472 for(
int i=0;
i<dim-1;
i++)
3475 for(
int j=0;
j<dim-1;
j++)
3476 tmpfic<<tt[
i*dim+
j]<<
",";
3477 tmpfic<<tt[
i*dim+dim-1]<<
"},";
3481 for(
int j=0;
j<dim-1;
j++)
3482 tmpfic<<tt[(dim-1)*dim+
j]<<
",";
3483 tmpfic<<tt[dim*dim-1]<<
"}}";
3486 matrixmap[m]=tmpval;
3490 template<
typename typmatmap,
typename coeff,
typename typserv>
3493 typedef typename typserv::monom_t
mon;
3495 string ligne,ligne2;
3496 typename string::iterator debut;
3499 stringstream tmpstr;
3501 "perl -i.bak -0777 -ne 'if (/^xMat *= *(.*)(?=yMat)/ms) {$toto=$1; $toto=~s/[[:blank:]{}]\\+?//g; $toto=~s/,\\+?/ /g; print $toto}' lenom"
3503 tmpfic.open(
"lenom");
3506 mdebug()<<
"ligne xVec :"<<ligne;
3508 mdebug()<<
"ligne coordq :"<<ligne;
3509 dim=count(ligne.begin(),ligne.end(),
'i')+1;
3510 xVec=
new coeff[
dim];
3511 sol=
new coeff[dim*
dim];
3514 for(string::iterator iter=ligne.begin()+1;iter!=ligne.end();
3515 iter=ligne.begin()+tmpindex+1)
3517 stringstream tmpstr;
3518 mdebug()<<
"iter "<<iter-ligne.begin();
3519 tmpindex=ligne.find(
",",iter-ligne.begin());
3520 if (tmpindex==string::npos) tmpindex=ligne.size()-1;
3521 mdebug()<<
"tmpindex "<<tmpindex;
3522 copy(iter,ligne.begin()+tmpindex,ostream_iterator<char>(tmpstr,
""));
3524 mdebug()<<
"eeeee "<<ligne2<<
" "<<ligne.find(
",",iter-ligne.begin());
3533 mdebug()<<
"ligne xmat :"<<ligne;
3539 for(string::iterator iter=ligne.begin()+ligne.find_last_of(
'{');
3541 iter=ligne.begin()+ligne.find(
",",iter-ligne.begin()))
3543 stringstream tmpstr;
3546 int toto=ligne.find(
",",iter-ligne.begin());
3547 mdebug()<<
"ligne "<<ligne;
3548 mdebug()<<
"toto "<<toto<<
" "<<string::npos;
3549 if(toto==string::npos) toto=ligne.size()-2;
3550 mdebug()<<
"toto "<<toto<<
" "<<string::npos;
3551 tmpstr<<ligne.substr(iter-ligne.begin(),toto);
3552 tmpstr>>xMat[dim*j++ +
i];
3558 sol=
new coeff[dim*
dim];
3559 for(
int i=0;i<dim*
dim;i++)
3565 for(
int i=0;i<dim*
dim;i++)
3570 for(
int i=0;i<dim*
dim;i++)
3571 sol[i]+=matmap[
mon(1)][
i];
3572 matmap.erase(matmap.find(mon(1)));
3574 for(
typename typmatmap::iterator itermat=matmap.begin();
3575 itermat!=matmap.end();itermat++)
3577 for(
int i=0;i<dim*
dim;i++)
3578 sol[i]-=xVec[j]*itermat->second[i];
3584 template<
typename typP,
typename typdump,
typename Base,
typename typserv>
3586 const typdump &dump, Base &b, typserv &serv)
3588 typedef typename typP::value_type::order_t ord;
3589 typedef typename typserv::monom_t Monomial;
3594 map<Monomial,COEFF*,ord> matrixmap;
3606 typP stockprod,stockproj;
3611 typedef list<typename typserv::monom_t> typstock;
3612 list<typename typserv::monom_t> stockmon,stockksur2;
3613 map<mon,int,ord> mapintligne,mapintcolonne,maphankel;
3624 for(
typename list<typename typserv::monom_t>::iterator
3625 iter=stockksur2.begin(); iter!=stockksur2.end();iter++)
3626 if(!
IsinB(*iter,b)) stockksur2.erase(iter--);
3628 for(
typename list<typename typserv::monom_t>::iterator
3629 iter=stockksur2.begin();iter!=stockksur2.end();iter++,i++)
3632 for(
typename list<typename typserv::monom_t>::iterator
3633 iter2=stockksur2.begin();iter2!=stockksur2.end();iter2++,j++)
3635 typename typserv::monom_t mono=*iter * (*iter2);
3637 if (!mapintligne.count(mono))
3639 mapintligne[mono]=
i;
3640 mapintcolonne[mono]=
j;
3650 int dim=stockksur2.size();
3651 for(
typename typstock::iterator i=stockmon.begin();
3652 i!=stockmon.end();i++)
3657 for(
int ii=0;ii<dim*
dim;ii++)
3658 matrixmap[*i][ii]=0;
3664 for(
typename typstock::iterator i=stockksur2.begin();
3665 i!=stockksur2.end();i++,ii++)
3669 for(
typename typstock::iterator
j=i;
j!=stockksur2.end();jj++,
j++)
3672 typename typserv::monom_t tmpmon=(*j)*(*i);
3674 if (
IsinB(tmpmon,b))
3676 matrixmap[tmpmon][ii*dim+jj]+=1;
3678 matrixmap[tmpmon][jj*dim+ii]+=1;
3683 tmplist.push_back(tmpmon);
3684 proj(tmplist,dump,b,serv);
3687 for(
typename typP::value_type::iterator iter=tmplist.front().begin();
3688 iter!=tmplist.front().end();iter++)
3690 Monomial verytmpmon=*iter;
3691 verytmpmon.SetCoeff(1);
3693 matrixmap[verytmpmon][ii*dim+jj]+=iter->GetCoeff();
3695 matrixmap[verytmpmon][jj*dim+ii]+=iter->GetCoeff();
3704 struct timeval tvini, tvfin;
3707 static char nom[1024];
3708 gettimeofday(&tvini,NULL);
3711 sprintf(nom,
"sdpa_gmp -dd tmpfile_%d -o lenom",d++);
3716 gettimeofday(&tvfin,NULL);
3717 tempsCDSP+=tvfin.tv_sec-tvini.tv_sec+1e-6*(tvfin.tv_usec-tvini.tv_usec);
3725 long n=stockksur2.size();
3729 long lwork=16*n,info;
3731 dgesvd_((
char*)
"N",(
char*)
"A",&n,&n,sol,
3732 &n,S,(
COEFF*)NULL,&n,V,&n,work,&lwork,&info);
3734 mdebug()<<
"info svd "<<info;
3743 if((
abs(S[kk-1])==0) ||(
abs(S[kk-1])>
abs(S[kk])*1e6))
break;
3745 mdebug()<<
"kk ici "<<kk<<
" et n "<<n;
3747 for(
int j=0;
j<n;
j++)
3749 for(
int jj=0;jj<n;jj++)
3756 for(;kk<(int)n;kk++)
3759 mdebug()<<
"equation dans le noyau";
3761 typedef typename typP::value_type polyalp;
3763 for(
typename list<typename typserv::monom_t>::iterator
3764 iter=stockksur2.begin();
3765 iter!=stockksur2.end();iter++)
3770 if(!
Iszero(
abs(V[kk+n*(mapintcolonne[*iter]-1)])))
3775 tmp+=polyalp(*iter*(
COEFF)V[kk+n*(mapintcolonne[*iter]-1)]);
3782 mdebug()<<
"g trouve ca comme nvlle eq \n "<<tmp;
3783 newpol.push_back(tmp);
3794 template<
typename typdump,
typename Base,
typename typserv>
3795 int testsdp(
int k,
const typdump &dump,
const Base &b,
const typserv &serv)
3799 template<
typename typP,
typename typPk,
typename typdump,
typename Base
3808 typedef typename typP::value_type polyalp;
3809 typedef list<typename typPk::value_type::monom_t> typMk;
3810 typedef typename typMk::value_type
mon;
3811 typedef typename typPk::value_type
pol;
3821 typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
3823 int onemoretime=1,nouveaumon,allpolused=0,maxdeg,
k,*pr,*pc;
3826 init_algo1<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv);
3828 mdebug()<<
"onemoretime "<<onemoretime;
3829 mdebug()<<
"nouveaumon "<<nouveaumon;
3831 mdebug()<<
"maxdeg "<<maxdeg;
3838 while(nouveaumon||(k<=maxdeg)||onemoretime)
3840 while(nouveaumon||(k<=maxdeg))
3843 while(!
GB_stop(k)||(k<=maxdeg))
3859 gettimeofday(&initclock,NULL);
3860 mdebug()<<
"onemoretime "<<onemoretime;
3861 mdebug()<<
"nouveaumon"<<nouveaumon<<
"\n";
3863 mdebug()<<
"maxdeg "<<maxdeg;
3864 mdebug()<<
"testsdp(k,dump,b,serv) "<<
testsdp(k,dump,b,serv);
3865 if(
testsdp(k,dump,b,serv)||(!onemoretime))
3870 mdebug()<<
"un nouveau tour de boucle et k vaut"<<
k;
3873 generickernel_testT(newpol,2*k,dump,b,serv);
3877 generickernel_testT(newpol,k,dump,b,serv);
3884 mdebug()<<
"newpol "<<newpol.empty();
3887 mindeg_newpol=
Degree(newpol.front());
3889 for(
typename typP::iterator iter=newpol.begin();
3890 iter!=newpol.end();iter++)
3891 mindeg_newpol=(mindeg_newpol<
Degree(*iter)
3892 ?mindeg_newpol:
Degree(*iter));
3893 for(
typename typP::iterator iter=newpol.begin();
3894 iter!=newpol.end();iter++)
3895 if(
Degree(*iter)==mindeg_newpol)
3898 if(k>=mindeg_newpol)
3901 list<int> sizeexceed;
3903 conv_merge(tmpPk,newpol,exceed,sizeexceed,b,serv);
3929 for(
int i=0;
i<p->taille1;
i++)
3931 mdebug()<<
"p.accept[i] "<<p->accept[
i];
3933 for(
int i=0;
i<p->taille2;
i++)
3935 mdebug()<<
"p.refuse[i] "<<p->refuse[
i];
3944 mdebug()<<
"poly a la fin de la boulcle de l'algo "<<Pk.size();
3945 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
3949 mdebug()<<invconv<typename typP::value_type>(*iter,serv);
3950 for(
int i=0;
i<iter->sizenf;
i++)
3951 for(
int j=0;
j<8;
j++)
3952 if (((iter->nfind[
i]>>
j)&1) && (iter->nf[cpt++]==0))
3954 mdebug()<<
"ici ca couille a la place"<<8*
i+
j;
3955 mdebug()<<iter->sizenf<<
" "<<iter->size;
3971 sprintf(name,
"mat%d",toto);
3972 fic=fopen(name,
"w");
3979 if(killspol) S.erase(S.begin(),S.end());
3980 if (k+1>=maxdeg) allpolused=1;
3981 if(Mk.size()==0) nouveaumon=0;
4000 Solve(Mat,L,Pk,&pr,&pc,w);
4010 typename typMk::iterator itermon=Mk.begin();
4011 typename typPk::iterator iter;
4012 for(iter=Pk.begin();
4013 itermon!=Mk.end();iter++,itermon++,j++)
4018 iter->ind=*itermon*(iter->ind.GetCoeff());
4045 if ((
unsigned)my_rank(Mat)==Mk.size())
4048 typMk tmpSpoldejavu;
4049 typPk redspol,secd=secondmembre(Mat,Pk);;
4052 mdebug()<<
"matrice de rang plein ";
4062 if(redspol.size()==0)
4066 my_merge(Spoldejavu,tmpSpoldejavu);
4076 int tmpdeg=
mindeg(redspol,serv);
4079 mdebug()<<
"redspol.size() "<<redspol.size();
4082 my_merge(Spoldejavu,tmpSpoldejavu);
4093 mdebug()<<
"Pk.size() avant Crochetchoix "<<Pk.size();
4099 mdebug()<<
"Pk.size apres Crochetchoix "<<Pk.size()<<
" et k "<<
k;
4112 mdebug()<<
"matrice de rang pas plein ";
4117 AddB(Mat,Pk,Mk,dump,b,serv);
4122 secd=secondmembre(Mat,Pk);
4139 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
4140 P.push_back(invconv<polyalp>(*iter));
4142 if(redspol.size()==0)
4164 mdebug()<<
"il ya un passage par mat rang pas"
4165 <<
"plein et pol non zero";
4200 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
4201 P.push_back(invconv<polyalp>(*iter));
4227 mdebug()<<
"Apres NewCrochetchoix";
4231 for(
int i=0;
i<p->taille1;
i++)
4233 mdebug()<<
"p.accept[i] "<<p->accept[
i];
4235 for(
int i=0;
i<p->taille2;
i++)
4237 mdebug()<<
"p.refuse[i] "<<p->refuse[
i];
4261 for(
int i=0;
i<p->taille1;
i++)
4263 mdebug()<<
"p.accept[i] "<<p->accept[
i];
4265 for(
int i=0;
i<p->taille2;
i++)
4267 mdebug()<<
"p.refuse[i] "<<p->refuse[
i];
4280 template<
typename typP,
typename typPk,
typename typdump,
typename Base
4281 ,
template<
typename T>
class tmptypmat ,
typename monomial_server,
typename coeff>
4282 void algo(typP P,typdump &dump,Base &b, monomial_server &serv,typP F, coeff *&fmin, Base &b2, typP restr, coeff *&solfin,
int solver,
int &method,
string param,
double &tresh,
int borderbasis)
4289 typedef typename typP::value_type polyalp;
4290 typedef list<typename typPk::value_type::monom_t> typMk;
4291 typedef typename typMk::value_type
mon;
4292 typedef typename typPk::value_type
pol;
4300 typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
4302 int onemoretime=1,nouveaumon,allpolused=0,maxdeg,
k,maxdegb,kb,*pr,*pc,optimo=0,k1,rest,m=0,kk,drest,
dmax=0,sup,flat,noeq=0,numeq=0;
4303 int nogap=0,deg=0,nok=1, noreduced=0, kbon,kini,basesdifferent,fois=0,premierfois=0,knew=0,bonbases=0,bonborder=0,elemnoyau=0,nvar,solsize;
4306 typP newpol,newpol1;
4307 COEFF *sol2,*sol3,*solfinal;
4310 for(
typename typP::iterator iter2=P.begin();
4311 iter2!=P.end();iter2++)
4314 Pini.push_back(*iter2);
4316 init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv,b2);
4324 mdebug()<<
"maxdeg"<<maxdeg;
4325 if (maxdeg==
Degree(F.front())) maxdeg*=2;
4332 else maxdeg=
max(maxdeg,
Degree(F.front()));
4353 if (2*maxdeg>
Degree(F.front()))
4361 mdebug()<<
"se mete por aqui maxdeg"<<maxdeg;
4365 if (method==1 && (2*maxdeg!=
Degree(F.front()))) k=
Degree(F.front());
4366 else k=
Degree(F.front())+1;
4379 mdebug()<<
"no hay constraint"<<restr.empty()<<
"k"<<
k;
4385 while(nouveaumon||(k<=maxdeg)||onemoretime)
4387 while(nouveaumon||(k<=maxdeg)|| (!optimo) || nok )
4391 while(!
GB_stop(k)||(k<=maxdeg))
4406 gettimeofday(&initclock,NULL);
4407 mdebug()<<
"onemoretime "<<onemoretime;
4408 mdebug()<<
"nouveaumon"<<nouveaumon;
4410 mdebug()<<
"maxdeg "<<maxdeg;
4411 mdebug()<<
"testsdp(k,dump,b,serv) "<<
testsdp(k,dump,b,serv);
4414 mdebug()<<
"p->taille1"<<p->taille1;
4415 mdebug()<<
"p->taille2"<<p->taille2;
4416 for(
int i=0;
i<p->taille1;
i++)
4418 mdebug()<<
"p.accept[i] "<<p->accept[
i];
4420 for(
int i=0;
i<p->taille2;
i++)
4422 mdebug()<<
"p.refuse[i] "<<p->refuse[
i];
4428 mdebug()<<
"maxdeg"<<maxdeg;
4429 mdebug()<<
"optimo"<<optimo;
4435 if((
testsdp(k,dump,b,serv) && (!optimo)) && (k!=1) || (k==deg) )
4441 mdebug()<<
"k cuando emepzamos"<<k<<
"sup"<<sup;
4447 if (premierfois==0 && (k<=sup) && (!basesdifferent))
4456 mdebug()<<
"un nouveau tour de boucle et k vaut avec compare bases"<<
k;
4462 if (p2->taille2!=p->taille2)
4465 for(
int i=0;
i<p2->taille2;
i++)
4467 if (p2->refuse[
i]!=p->refuse[
i])
4471 mdebug()<<
"basesdifferent"<<basesdifferent;
4480 p2->taille2 =p->taille2 ;
4481 p2->refuse=(mon*)MAC_REV_MALLOC<mon>(p2->taille2*
sizeof(mon));
4483 for(
int i=0;
i<p2->taille1;
i++)
4485 p2->accept[
i]=p->accept[
i];
4488 for(
int i=0;
i<p2->taille2;
i++)
4491 p2->refuse[
i]=p->refuse[
i];
4502 if ((borderbasis==0 && !basesdifferent && k>=maxdeg ) || (borderbasis==1 && k>=maxdeg) )
4513 newpol1.erase(newpol1.begin(),newpol1.end());
4516 for(
typename typP::iterator iter=newpol.begin();iter!=newpol.end();
4525 newpol1.erase(newpol1.begin(),newpol1.end());
4531 mdebug()<<
"tresh"<<tresh;
4532 generickernelNEW(newpol1,k,dump,b,serv,F,*&sol3,restr,*&solfinal,solver,method,flat,param,tresh);
4536 mdebug()<<
"solfinal[0]"<<solfinal[0];
4539 solsize=solfinal[0]*nvar+2;
4542 mdebug()<<
"solsize"<<solsize;
4543 solfin =
new coeff[solsize];
4544 for (
int l=0; l<solsize;l++)
4546 solfin[l]=solfinal[l];
4547 mdebug()<<
"solution final"<<solfin[l]<<
"l"<<l;
4566 mdebug()<<
"!newpol.empty()"<<!newpol.empty();
4567 mdebug()<<
"newpol1.empty()"<<newpol1.empty();
4570 if (((
abs(sol2[2]-sol3[2])*1e+4<1) && (!newpol.empty()) && (k1!=k))
4573 if (k==deg && newpol1.empty())
4590 for(
typename typP::iterator iter=newpol.begin();iter!=newpol.end();
4599 if (k==deg && (!newpol.empty()) )
4601 newpol.erase(newpol.begin(),newpol.end());
4606 mindeg_newpol=
Degree(newpol.front());
4607 for(
typename typP::iterator iter=newpol.begin();
4608 iter!=newpol.end();iter++)
4609 mindeg_newpol=(mindeg_newpol<
Degree(*iter)
4610 ?mindeg_newpol:
Degree(*iter));
4612 P.erase(P.begin(),P.end());
4613 for(
typename typP::iterator iter=newpol.begin();
4614 iter!=newpol.end();iter++)
4615 if(
Degree(*iter)==mindeg_newpol)
4617 for(
typename typP::iterator iter2=Pini.begin();
4618 iter2!=Pini.end();iter2++)
4623 P.push_back(*iter2);
4625 for(
typename typP::iterator iter3=P.begin();
4626 iter3!=P.end();iter3++)
4627 mindeg_newpol=(mindeg_newpol<
Degree(*iter3)
4628 ?mindeg_newpol:
Degree(*iter3));
4629 if(k-2>=mindeg_newpol)
4632 list<int> sizeexceed;
4634 conv_merge(tmpPk,newpol,exceed,sizeexceed,b,serv);
4650 serv.compress(Pk,dump,b,k);
4672 newpol.erase(newpol.begin(),newpol.end());
4678 generickernelNEW(newpol,k,dump,b,serv,F,*&sol2,restr,*&solfinal,solver,method,flat,param,tresh);
4679 mdebug()<<
"Number of solutions"<<solfinal[0];
4680 if (solfinal[0]!=0 && solfinal[0]!=-1 && method==0)
4685 solsize=solfinal[0]*nvar+2;
4687 mdebug()<<
"solsize"<<solsize;
4688 solfin =
new coeff[solsize];
4689 for (
int k=0; k<solsize;k++)
4691 solfin[
k]=solfinal[
k];
4692 mdebug()<<
"solution final"<<solfin[
k];
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
struct timeval initclock tmpclock
Definition: solver_bb_floating.cpp:67
Definition: workspace.hpp:11
void remiseenforme(typpol &p)
Definition: ugly.hpp:2
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo3sdpa.hpp:55
void my_plus(pol &res, const pol &nf, const coeff toto, workspace *w)
Definition: corealgo3sdpa.hpp:500
void init_algo1(typP &P, int &nouveaumon, int &maxdeg, int &k, typPk &Pk, typMk &Mk, Base &b, typdump &dump, workspace &w, monomial_server &serv)
Definition: corealgo3sdpa.hpp:434
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
void conv_merge(typPk &Pk, typP &P, typexceed &ex, typsize &sizeex, const Base &b, monomial_server &serv)
Definition: corealgo3sdpa.hpp:1180
#define max(a, b)
Definition: alp_f2c.H:167
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo3sdpa.hpp:1291
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
void setorder(ptrfun tmpord)
Definition: placemon3.hpp:301
void read_sol_from_sdpa(coeff *&sol, typmatmap &matmap, int dim, typserv &serv)
Definition: corealgo3sdpa.hpp:3491
mon * int2mon_
Definition: placemon3.hpp:21
void computeprod(typprod &prod, typstock &stockmon, Base &b, typdump &dump)
Definition: corealgo3sdpa.hpp:2698
Definition: corealgo3sdp.hpp:14
void forget0(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump3sdp.hpp:197
void findcorresppol(const mon &m, const typdump &dump, pol &res)
Definition: corealgo3sdpa.hpp:1792
void generickernel(typP &newpol, int k, const typdump &dump, Base &b, typserv &serv)
Definition: corealgo3sdpa.hpp:2725
void generickernelNEW(typP &newpol, int k, const typdump &dump, Base &b, typserv &serv, typP F, coeff *&sol2, typP rest, coeff *&solfinal, int solver, int &method, int &flat, string param, double &tresh)
Definition: generkeropt.hpp:18
list< predicat >::iterator iterator
Definition: types.hpp:20
int GoodDir(const typmon &m, int i, const Base &b)
Definition: corealgo3sdpa.hpp:1160
void init_multiple(int n)
Definition: placemon3.hpp:59
Definition: Scl_mpfr.hpp:827
int Ispolzero(const pol &p)
Definition: Iszero.hpp:30
typmat * MatrixOf(const typPk &L, const typMk &lm, const typmat &mat)
Definition: corealgo3sdpa.hpp:330
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
typP Crochet(const typP &P, int k)
Definition: corealgo3sdpa.hpp:227
typpol nf(int var, int indmon, const typdump &dump, const Base &b)
Definition: corealgo3sdpa.hpp:846
long flag
Definition: alp_f2c.H:52
void inverse(int *&, int)
list< predicat >::const_iterator const_iterator
Definition: types.hpp:21
void update_crochetchoix(typiterpk &iterPk, typiterpk &iter, int tmpind, workspace &w)
Definition: corealgo3sdpa.hpp:2169
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
int goodspol(const mon &m1, const mon &m2, typppcm &ppcm, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3sdpa.hpp:150
coeff * tabcoeff
Definition: workspace.hpp:12
int testsdp(int k, const typdump &dump, const Base &b, const typserv &serv)
Definition: corealgo3sdpa.hpp:3795
void Dump(const typPk &Pk, typdump &dump)
Definition: dump.hpp:48
T coeff_t
Definition: pol.hpp:9
MSKint32t MSKCONST MSKint32t * dim
Definition: mosek.h:2407
int taille1
Definition: types.hpp:5
void selectnozero(typP &ttmp)
Definition: Iszero.hpp:40
int nbvar()
Definition: types.hpp:37
void init_algo(typP &P, int &nouveaumon, int &maxdeg, int &k, typPk &Pk, typMk &Mk, Base &b, typdump &dump, workspace &w, monomial_server &serv, Base &b2)
Definition: corealgo3sdpa.hpp:366
int mon2int(const mon &mm)
Definition: placemon.hpp:294
void reinit_multiple()
Definition: placemon3.hpp:85
void write_to_sdpa_fic(typmatmap &matrixmap, int &dim, typserv &serv, int d)
Definition: corealgo3sdpa.hpp:3429
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
unsigned char * tabnf
Definition: workspace.hpp:13
void stab(typPk &Pk)
Definition: corealgo3sdpa.hpp:31
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
Definition: mdebug.hpp:11
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
void init_space(workspace< coeff > *w)
Definition: workspace.hpp:43
pol halfred(const mon &targetind, const pol &p, const typdump &dump, const Base &b, monomial_server &serv)
Definition: corealgo3sdpa.hpp:1843
int minmaxdegP(typP P, int &maxdeg)
Definition: corealgo3sdpa.hpp:215
int nbbits[256]
Definition: pol2ter.hpp:4
MSKdparame param
Definition: mosek.h:2743
typpol mult(int i, const typpol &pol, const typdump &dump, const Base &b, mon **exce, int &exsize, workspace &w, monomial_server &serv)
Definition: corealgo3sdpa.hpp:911
void algo(typP P, typdump &dump, Base &b, monomial_server &serv)
Definition: corealgo3sdpa.hpp:3801
Mon my_divmon(const Mon &mon, int i, const Base &b)
Definition: corealgo3sdpa.hpp:1144
Definition: placemon3.hpp:14
int indice2(int i, int j, const Base &b)
Definition: corealgo3sdpa.hpp:826
void varmult(iterator iter1, iterator iter2, mon &var1, mon &var2, const Base &b)
Definition: corealgo3sdpa.hpp:1830
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
void printmatfile_pequan(const typmat< Scl< MPF > > &m, FILE *fic)
Definition: io.hpp:381
iterator end()
Definition: types.hpp:30
int IsinB(const mon &m, const Base &b)
Definition: IsinB3.hpp:68
list< predicat > def
Definition: types.hpp:16
void Crochetchoix(const typP &P, typPk &Pk, typPk &redspol, int k, Base &b)
void enumeratemon(typstock &stockmon, int k, const Base &b, const typdump &dump)
Definition: corealgo3sdpa.hpp:2565
int Setnvars(const typP &tmpPk)
Definition: corealgo3sdpa.hpp:266
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
void enumeratemonvar(typstock &stockmon, int k, const Base &b, const typdump &dump, int n)
Definition: corealgo3sdpa.hpp:2615
int taille2
Definition: types.hpp:7
void Listedejafait(const typMk &Mk, typMk &Spoldejavu)
Definition: corealgo3sdpa.hpp:2500
exponent_t GetDegree() const
Definition: Monom.hpp:70
#define dmax(a, b)
Definition: alp_f2c.H:169
void ReduceSpol(typPk &S, const typdump &dump, typPk &redspol, const Base &b, workspace &w, monomial_server &serv)
Definition: corealgo3sdpa.hpp:2045
void enumeratemoninv(typstock &stockmon, int k, const Base &b, const typdump &dump)
Definition: corealgo3sdpa.hpp:2518
MSKrealt * c
Definition: mosek.h:2678
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 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)
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
int compute_ppcm(typppcm &ppcm, const Base &b)
Definition: corealgo3sdpa.hpp:67
#define COEFF
Definition: symbo2.hpp:8
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
int GB_stop(int k)
Definition: corealgo3sdpa.hpp:142
mon * refuse
Definition: types.hpp:8
void generickernelsdpa(typP &newpol, int k, const typdump &dump, Base &b, typserv &serv)
Definition: corealgo3sdpa.hpp:3585
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 NewCrochetchoix(typP &P, typPk &Pk, typMk &Mk, typPk &redspol, int &k, typdump &dump, Base &b, typrecall &recall, workspace &w, monomial_server &serv)
Definition: corealgo3sdpa.hpp:2211
int newPkMkMatrixof(typMat &mat, typPk &Pk, typP &P, typMk &Mk, int &k, Base &b, typdump &dump, typrecall &recall, workspace &w, monomial_server &serv)
Definition: corealgo3sdpa.hpp:1303
void Setnbvars(const typP &tmpPk, Base &b)
Definition: corealgo3sdpa.hpp:251
iterator begin()
Definition: types.hpp:25
void my_merge(T &l1, const T &l2)
Definition: corealgo3sdpa.hpp:48
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
typPk Spolordsup(const typPk &Pk, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3sdpa.hpp:188
int mindeg(const typPk &l, monomial_server &serv)
Definition: corealgo3sdpa.hpp:2135
void SetCoeff(const C &c)
Definition: Monom.hpp:68
void DoBaseMk(const typP &tmpPk, typMk &Mk, Base &b, monomial_server &serv)
Definition: corealgo3sdpa.hpp:283
void compress(typPk &Pk, typdump &dump, const Base &b, int k)
Definition: placemon3.hpp:1076
mon ind
Definition: pol.hpp:11
Multivariate monomials.
Definition: Monom.hpp:21
iterator erase(iterator first, iterator last)
Definition: types.hpp:35
T * nf
Definition: pol.hpp:12
reverse_iterator rbegin()
Definition: types.hpp:27
void getperm(int *perm, int sizeperm, int *indextab)
Definition: corealgo3sdpa.hpp:891
void NewDestroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo3sdpa.hpp:2487
MSKint32t MSKint32t char * name
Definition: mosek.h:2853