7 template<
typename monom>
17 template<
typename predicat>
24 typedef typename list<predicat>::iterator
iterator;
29 iterator
begin () {
return def.begin(); }
30 const_iterator
begin ()
const {
return def.begin(); }
31 reverse_iterator
rbegin () {
return def.rbegin(); }
32 const_reverse_iterator
rbegin ()
const {
return def.rbegin(); }
34 iterator
end () {
return def.end(); }
35 const_iterator
end ()
const {
return def.end(); }
36 reverse_iterator
rend () {
return def.rend(); }
37 const_reverse_iterator
rend ()
const {
return def.rend(); }
39 iterator
erase(iterator
first, iterator
last){
return def.erase(first,last);};
40 iterator
erase(iterator
first){
return def.erase(first);};
45 template<
typename mon,
typename predicat,
typename Base>
48 int inaccept=0,inrefuse=0;
64 return((!inrefuse)&&inaccept);
67 template<
typename mon,
typename Base>
74 res=res||
isinb(m,*iter,b);
82 template<
typename mon,
typename predicat,
typename Base>
85 int inaccept=0,inrefuse=0;
103 return((!inrefuse)&&inaccept);
109 template<
typename mon,
typename Base>
117 res=res||
isinb2(m,*iter,b,div,coc);
125 template<
typename typMk,
typename typdump,
typename Base>
126 void Dovoisins(
const typename typMk::value_type &m, typMk &voisins,
127 const typdump & dump,
const Base &b)
129 typedef typename typMk::value_type
mon;
131 typename typdump::const_iterator iter=dump.begin();
134 for(i=0;i<b.
nbvar();i++)
138 for(;iter->k!=(m.GetDegree()-1);iter++);
139 for(i=0;i<iter->size;i++)
140 if(
member(ancien,iter->nf[i].ind))
break;
143 if(!
member(voisins,iter->nf[i].ind*mon(
j,1)))
144 voisins.push_back(iter->nf[i].ind*mon(
j,1));
148 template<
typename pol>
void reinit_nf();
151 template<
typename typPk,
typename typMk ,
typename typdump,
typename Base,
159 typedef typename typPk::value_type
pol;
175 mon * baccept=b.
rbegin()->accept;
176 int taille=b.
rbegin()->taille1;
178 for(
int i=0;
i<taille;
i++)
181 for(
typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
183 for(
int i=0;i<taille;i++)
184 if(baccept[i].rep==iter->
rep)
186 voisins.erase(iter--);
191 for(
typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
194 voisins.erase(iter--);
198 for(
typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
201 for(
int i=0;i<b.
nbvar();i++)
202 if(iter->GetDegree(i)>0)
208 typename typdump::const_iterator iterdump;
209 for(iterdump=dump.begin();iterdump!=dump.end();iterdump++)
210 if(iterdump->k==(iter->GetDegree()-1))
break;
213 for(i=0;i<iterdump->size;i++)
214 if(
member(ancien,iterdump->nf[i].ind))
218 for(j=0;j<b.
nbvar();j++)
219 if(iter->rep==(iterdump->nf[i].ind*mon(j,1)).rep)
230 Pk.push_back(
mult(j,iterdump->nf[i],dump,b,&tmp,tmpsize,w,serv));
235 for(
int k=0;
k<tmpsize-1;
k++)
237 for(
typename typPk::iterator iterpk=Pk.begin()
238 ;iterpk!=Pk.end();iterpk++)
239 if(iterpk->ind.rep==tmp[
k].
rep)
246 MAC_REV_FREE<mon>(tmp,
sizeof(
mon)*(tmpsize));
251 Pk.back().ind.SetCoeff((coeff)1);
259 b.
rbegin()->refuse=(mon*)MAC_REV_REALLOC<mon>(b.
rbegin()->refuse
261 sizeof(
mon)*(b.
rbegin()->taille2+voisins.size()));
262 typename typMk::iterator iter=voisins.begin();
263 for(
unsigned int i=b.
rbegin()->taille2;i<b.
rbegin()->taille2+voisins.size()
266 b.
rbegin()->taille2+=voisins.size();
271 template<
typename typmat,
typename typPk,
typename typMk,
typename typdump,
273 void AddB(
const typmat & mat, typPk & Pk,
const typMk &Mk,
const typdump & dump,
276 typedef typename typPk::value_type
pol;
279 typename typPk::iterator iterpk;
281 typename typMk::const_iterator iter=Mk.begin();
282 int r=my_rank(mat),comprefuse=0,compaccept=0;
284 cout<<
"DANS ADDB"<<endl;
285 cout<<
"rang de la matrice m "<<r<<
" Mk.size "<<Mk.size()<<endl;
286 cout<<
"taille de la matrice "<<mat.nrow<<
"x"<<mat.ncol<<endl;
287 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(r*
sizeof(mon));
289 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>((Mk.size()-
r)*
sizeof(mon));
294 for(i=0;i<Mk.size();i++,iter++)
298 tmp.
accept[compaccept++]=*iter;
299 cout<<
"monome rajoute au quotient "<<*iter<<endl;
303 tmp.
refuse[comprefuse++]=*iter;
306 b.
def.push_back(tmp);
310 for(
unsigned int i=0;i<Mk.size();i++,iter++)
317 coeff_t *vec=(coeff_t*)MAC_REV_MALLOC<coeff_t>(i*
sizeof(coeff_t));
318 for(
unsigned int j=0;
j<
i;
j++)
322 for(
int k=i-1;
k>=0;
k--)
326 for(
int j=
k-1;
j>=0;
j--)
327 vec[
j]-=vec[
k]*mat(
j,
k);
331 for(
unsigned int j=0;
j<
i;
j++,iterpk++)
338 MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
341 if((index/8)>=iterpk->sizenf)
343 iterpk->nfind=(
unsigned char*)
344 MAC_REV_REALLOC<unsigned char>(iterpk->nfind
345 ,iterpk->sizenf,index/8+1);
346 for(
int i=iterpk->sizenf;i<index/8+1;i++)
348 iterpk->sizenf=index/8+1;
353 for(
int k=iterpk->sizenf-1;
k>index/8;
k--)
356 if(iterpk->nfind[
k]!=0)
358 for(
int j=0;j<
nbbits[iterpk->nfind[
k]];j++)
360 iterpk->nf[
i]=iterpk->nf[i-1];
365 for(
int k=7;
k>(index%8);
k--)
366 if((iterpk->nfind[index/8]>>
k)&1)
368 iterpk->nf[
i]=iterpk->nf[i-1];
371 iterpk->nf[
i]=vec[
j];
372 iterpk->nfind[index/8]|=(1<<(index%8));
378 MAC_REV_FREE<coeff_t>(vec,i*
sizeof(coeff_t));
389 template<
typename mon,
typename typB>
397 for(iter=b.
begin();iter!=b.
end();iter++)
399 for(
int i=0;
i<iter->taille1;
i++)
404 for(
int i=0;
i<iter->taille2;
i++)
416 cout<<
"je cherche le pred pere de "<<m<<endl;
417 cout<<
"je renvoie ce pred"<<endl;
418 for(
int i=0;
i<iter->taille1;
i++)
420 cout<<
"iter.accept[i] "<<iter->accept[
i]<<endl;
422 for(
int i=0;
i<iter->taille2;
i++)
424 cout<<
"iter.refuse[i] "<<iter->refuse[
i]<<endl;
430 template<
typename typmat,
typename typPk,
typename typMk,
typename typdump,
431 typename typB,
typename typP>
432 void AddB_dim(
const typmat & mat,
const typmat &L, typP &P, typPk & Pk
433 ,
const typMk &Mk,
const typdump & dump,
typB &b)
436 typedef typename typPk::value_type
pol;
439 typename typPk::iterator iterpk;
441 typename typMk::const_iterator iter=Mk.begin();
442 int r=my_rank(mat),comprefuse=0,compaccept=0;
457 for(
unsigned int i=0;i<Mk.size();i++,iter++)
464 coeff_t *vec=(coeff_t*)MAC_REV_MALLOC<coeff_t>(i*
sizeof(coeff_t));
465 for(
unsigned int j=0;
j<
i;
j++)
469 for(
int k=i-1;
k>=0;
k--)
473 for(
int j=
k-1;
j>=0;
j--)
474 vec[
j]-=vec[
k]*mat(
j,
k);
478 for(
unsigned int j=0;
j<
i;
j++,iterpk++)
485 MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
488 if((index/8)>=iterpk->sizenf)
490 iterpk->nfind=(
unsigned char*)
491 MAC_REV_REALLOC<unsigned char>(iterpk->nfind
492 ,iterpk->sizenf,index/8+1);
493 for(
int i=iterpk->sizenf;i<index/8+1;i++)
495 iterpk->sizenf=index/8+1;
500 for(
int k=iterpk->sizenf-1;
k>index/8;
k--)
503 if(iterpk->nfind[
k]!=0)
505 for(
int j=0;j<
nbbits[iterpk->nfind[
k]];j++)
507 iterpk->nf[
i]=iterpk->nf[i-1];
512 for(
int k=7;
k>(index%8);
k--)
513 if((iterpk->nfind[index/8]>>
k)&1)
515 iterpk->nf[
i]=iterpk->nf[i-1];
518 iterpk->nf[
i]=vec[
j];
519 iterpk->nfind[index/8]|=(1<<(index%8));
525 MAC_REV_FREE<coeff_t>(vec,i*
sizeof(coeff_t));
530 for(i=0;i<Mk.size();i++,iter++)
538 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>
541 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
544 for(
int j=0;j<stockpred.
taille2;j++)
550 cout<<
"le pere "<<pere<<endl;
551 for(
int j=0;j<stockpred.
taille2;j++)
553 listlcm.push_back(
lcm(pere,stockpred.
refuse[j]));
554 for(
typename list<mon>::iterator iterlcm=listlcm.begin();
555 iterlcm!=listlcm.end();iterlcm++)
556 for(
typename list<mon>::iterator iterlcm2=listlcm.begin();
557 iterlcm2!=listlcm.end();iterlcm2++)
558 if ((iterlcm2!=iterlcm) && (
isdivisible(*iterlcm,*iterlcm2,b)))
560 cout<<
"je vire "<<*iterlcm2<<
" parce que divisible par "<<*iterlcm<<endl;
561 listlcm.erase(iterlcm2--);
563 cout<<
"apres tri il me reste"<<endl;
564 for(
typename list<mon>::iterator iterlcm=listlcm.begin();
565 iterlcm!=listlcm.end();iterlcm++)
566 cout<<*iterlcm<<endl;
569 for(
typename list<mon>::iterator iterlcm=listlcm.begin();
570 iterlcm!=listlcm.end();iterlcm++)
571 if(iterlcm->GetDegree()>=Mk.begin()->GetDegree())
573 for(j=0;j<stockpred.
taille2;j++)
581 cout<<
"mon rajoute "<<*iter<<endl;
582 for(
typename typMk::const_iterator iter2=Mk.begin()
583 ;iter2!=iter;iter2++,j++,iterpk++)
587 mon tmpmon=
lcm(*iter,*iter2), tmpmon2=
mon(1);
588 for(
int l=0;l<b.
nbvar();l++)
589 tmpmon2*=
mon(l,tmpmon.
GetDegree(l)-iter2->GetDegree(l));
591 cout<<
"iterpk->ind*tmpmon2 "<<iterpk->ind*tmpmon2<<endl;
592 cout<<invconv<Poly>(*iterpk)*tmpmon2<<endl;;
593 P.push_back(invconv<Poly>(*iterpk)*tmpmon2);
600 b.
def.push_back(tmp);
604 cout<<
"Dans Addb"<<endl;
607 for(
int i=0;i<p->taille1;i++)
609 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
611 for(
int i=0;i<p->taille2;i++)
613 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
616 cout<<
"eeeeeeeeeeeeeeeeeeeeeeeeeee"<<endl;
622 #endif //ALREADY_IsinB
Definition: workspace.hpp:11
const_iterator end() const
Definition: IsinB3sdp.hpp:35
void my_plus(pol &res, const pol &nf, const coeff toto)
Definition: corealgo.hpp:543
int mon2int(const mon &mm)
Definition: placemon3.hpp:679
int isdivisible(const mon &m1, const mon &m2, int nbvar)
Definition: isdivisible.hpp:5
M div(const M &m1, const M &m2)
Definition: Monom.hpp:217
void Dovoisins(const typename typMk::value_type &m, typMk &voisins, const typdump &dump, const Base &b)
Definition: IsinB3sdp.hpp:126
Base< predicat< mon > > typB
Definition: solver_bb_floating.cpp:142
reverse_iterator rend()
Definition: IsinB3sdp.hpp:36
C GetCoeff() const
Definition: Monom.hpp:67
monom monom_t
Definition: IsinB3sdp.hpp:14
MSKaccmodee MSKint32t MSKint32t last
Definition: mosek.h:2545
list< predicat >::iterator iterator
Definition: IsinB3sdp.hpp:24
int IsinB2(const mon &m, const Base &b, mon &div, mon &coc)
Definition: IsinB3sdp.hpp:110
typpol mult(int i, const typpol &pol, const typdump &dump, const Base &b, mon **exce, int &exsize)
Definition: corealgo.hpp:1077
int nbvar() const
Definition: IsinB3sdp.hpp:42
mon * accept
Definition: types.hpp:6
int IsinB(const mon &m, const Base &b)
Definition: IsinB3sdp.hpp:68
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo.hpp:1391
list< predicat >::const_iterator const_iterator
Definition: IsinB3sdp.hpp:25
T coeff_t
Definition: pol.hpp:9
int taille1
Definition: types.hpp:5
MSKaccmodee MSKint32t first
Definition: mosek.h:2545
int nbvar()
Definition: IsinB3sdp.hpp:41
int mon2int(const mon &mm)
Definition: placemon.hpp:294
void reinit_multiple()
Definition: placemon3.hpp:85
void rajoute_voisins(typPk &Pk, const typMk &Mk, const typdump &dump, Base &b, workspace &w, monomial_server &serv)
Definition: IsinB3sdp.hpp:153
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
int isinb2(const mon &m, predicat p, const Base &b, mon &div, mon &coc)
Definition: IsinB3sdp.hpp:83
int isinb(const mon &m, predicat p, const Base &b)
Definition: IsinB3sdp.hpp:46
MSKint32t k
Definition: mosek.h:2713
R rep
Definition: Monom.hpp:30
C coeff_t
Definition: Monom.hpp:26
int nbbits[256]
Definition: pol2ter.hpp:4
list< predicat >::reverse_iterator reverse_iterator
Definition: IsinB3sdp.hpp:26
Definition: placemon3.hpp:14
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
const_iterator begin() const
Definition: IsinB3sdp.hpp:30
iterator end()
Definition: IsinB3sdp.hpp:34
list< predicat > def
Definition: types.hpp:16
Mon mon
Definition: solver_bb_floating.cpp:136
int nbvars
Definition: types.hpp:17
int taille2
Definition: types.hpp:7
exponent_t GetDegree() const
Definition: Monom.hpp:70
const_reverse_iterator rbegin() const
Definition: IsinB3sdp.hpp:32
Mon my_divmon(const Mon &mon, int i, const Base &b)
Definition: corealgo.hpp:1262
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
predicat predicat_t
Definition: IsinB3sdp.hpp:22
MSKrescodee r
Definition: mosek.h:2321
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo.hpp:43
int isdivisible2(const mon &m1, const mon2 &m2, const Base &b, mon &coc)
Definition: isdivisible.hpp:32
predicat< mon > findpred(const mon &m, const typB &b)
Definition: IsinB3sdp.hpp:390
mon * refuse
Definition: types.hpp:8
void AddB_dim(const typmat &mat, const typmat &L, typP &P, typPk &Pk, const typMk &Mk, const typdump &dump, typB &b)
Definition: IsinB3sdp.hpp:432
iterator erase(iterator first)
Definition: IsinB3sdp.hpp:40
iterator begin()
Definition: IsinB3sdp.hpp:29
const_reverse_iterator rend() const
Definition: IsinB3sdp.hpp:37
list< predicat >::const_reverse_iterator const_reverse_iterator
Definition: IsinB3sdp.hpp:27
predicat::monom_t mon
Definition: IsinB3sdp.hpp:23
#define pol
Definition: pol2ter.hpp:3
Multivariate monomials.
Definition: Monom.hpp:21
iterator erase(iterator first, iterator last)
Definition: IsinB3sdp.hpp:39
void AddB(const typmat &mat, typPk &Pk, const typMk &Mk, const typdump &dump, typB &b, monomial_server &serv)
Definition: IsinB3sdp.hpp:273
reverse_iterator rbegin()
Definition: IsinB3sdp.hpp:31