5 template<
typename monom>
15 template<
typename predicat>
22 typedef typename list<predicat>::iterator
iterator;
27 iterator
begin () {
return def.begin(); }
28 const_iterator
begin ()
const {
return def.begin(); }
29 reverse_iterator
rbegin () {
return def.rbegin(); }
30 const_reverse_iterator
rbegin ()
const {
return def.rbegin(); }
32 iterator
end () {
return def.end(); }
33 const_iterator
end ()
const {
return def.end(); }
34 reverse_iterator
rend () {
return def.rend(); }
35 const_reverse_iterator
rend ()
const {
return def.rend(); }
37 iterator
erase(iterator
first, iterator
last){
return def.erase(first,last);};
38 iterator
erase(iterator
first){
return def.erase(first);};
43 template<
typename mon,
typename predicat,
typename Base>
46 int inaccept=0,inrefuse=0;
54 if(inrefuse) {
goto jesais;
break;}
64 return((!inrefuse)&&inaccept);
67 template<
typename mon,
typename Base>
75 res=res||
isinb(m,*iter,b);
83 template<
typename typMk,
typename typdump,
typename Base>
84 void Dovoisins(
const typename typMk::value_type &m, typMk &voisins,
85 const typdump & dump,
const Base &b)
87 typedef typename typMk::value_type
mon;
89 typename typdump::const_iterator iter=dump.begin();
92 for(i=0;i<b.
nbvar();i++)
96 for(;iter->k!=(m.GetDegree()-1);iter++);
97 for(i=0;i<iter->size;i++)
98 if(
member(ancien,iter->nf[i].ind))
break;
101 if(!
member(voisins,iter->nf[i].ind*mon(
j,1)))
102 voisins.push_back(iter->nf[i].ind*mon(
j,1));
106 template<
typename pol>
void reinit_nf();
109 template<
typename typPk,
typename typMk ,
typename typdump,
typename Base,
117 typedef typename typPk::value_type
pol;
133 mon * baccept=b.
rbegin()->accept;
134 int taille=b.
rbegin()->taille1;
136 for(
int i=0;
i<taille;
i++)
139 for(
typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
141 for(
int i=0;i<taille;i++)
142 if(baccept[i].rep==iter->
rep)
144 voisins.erase(iter--);
149 for(
typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
152 voisins.erase(iter--);
156 for(
typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
159 for(
int i=0;i<b.
nbvar();i++)
160 if(iter->GetDegree(i)>0)
166 typename typdump::const_iterator iterdump;
167 for(iterdump=dump.begin();iterdump!=dump.end();iterdump++)
168 if(iterdump->k==(iter->GetDegree()-1))
break;
171 for(i=0;i<iterdump->size;i++)
172 if(
member(ancien,iterdump->nf[i].ind))
176 for(j=0;j<b.
nbvar();j++)
177 if(iter->rep==(iterdump->nf[i].ind*mon(j,1)).rep)
188 Pk.push_back(
mult(j,iterdump->nf[i],dump,b,&tmp,tmpsize,w,serv));
193 for(
int k=0;
k<tmpsize-1;
k++)
195 for(
typename typPk::iterator iterpk=Pk.begin()
196 ;iterpk!=Pk.end();iterpk++)
197 if(iterpk->ind.rep==tmp[
k].
rep)
204 MAC_REV_FREE<mon>(tmp,
sizeof(
mon)*(tmpsize));
209 Pk.back().ind.SetCoeff((coeff)1);
217 b.
rbegin()->refuse=(mon*)MAC_REV_REALLOC<mon>(b.
rbegin()->refuse
219 sizeof(
mon)*(b.
rbegin()->taille2+voisins.size()));
220 typename typMk::iterator iter=voisins.begin();
221 for(
unsigned int i=b.
rbegin()->taille2;i<b.
rbegin()->taille2+voisins.size()
224 b.
rbegin()->taille2+=voisins.size();
242 template<
typename typmat,
typename typPk,
typename typMk,
typename typdump,
244 void AddB(
const typmat & mat, typPk & Pk,
const typMk &Mk,
const typdump & dump,
247 typedef typename typPk::value_type
pol;
250 typename typPk::iterator iterpk;
252 typename typMk::const_iterator iter=Mk.begin();
253 int r=my_rank(mat),comprefuse=0,compaccept=0;
258 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(r*
sizeof(mon));
260 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>((Mk.size()-
r)*
sizeof(mon));
265 for(i=0;i<Mk.size();i++,iter++)
269 tmp.
accept[compaccept++]=*iter;
273 tmp.
refuse[comprefuse++]=*iter;
276 b.
def.push_back(tmp);
285 map<int,typename typMk::value_type> mapmon;
286 vector<int> index_line;
287 vector<int> newmonindex;
288 int rowdim=mat.nrow, coldim=0;
289 for(
unsigned int i=0;i<Mk.size();i++,iter++)
292 mapmon[coldim]=*iter;
293 newmonindex.push_back(serv.
mon2int(*iter));
294 index_line.push_back(i);
296 rowdim=
max(rowdim,mat.colptr[i+1]-mat.colptr[i]);
300 tmpmat=(coeff_t*)MAC_REV_MALLOC<coeff_t>(coldim*rowdim*
sizeof(coeff_t));
301 for(
int i=0;i<coldim*rowdim;i++)
304 for(
unsigned int i=0;i<Mk.size();i++)
307 for(
int j=mat.colptr[i];
j<mat.colptr[i+1];
j++)
308 tmpmat[rowdim*coldim+mat.rowind[
j]]=((coeff_t*)mat.nzval)[
j];
312 for(
int k=mat.ncol-1;
k>=0;
k--)
315 coeff_t pivot=mat(
k,
k);
316 for(
int j=0;
j<coldim;
j++)
317 tmpmat[rowdim*
j+
k]/=pivot;
318 for(
int j=
k-1;
j>=0;
j--)
320 coeff_t tmp=mat(
j,
k);
321 for(
int jj=0;jj<coldim;jj++)
323 tmpmat[rowdim*jj+
j]-=tmpmat[rowdim*jj+
k]*tmp;
329 typename typPk::iterator iterpk=Pk.begin();
330 vector<int>::iterator iterline=index_line.begin();
332 for(
unsigned int i=0;i<Pk.size();i++,iterpk++,iter++)
335 vector<sortstruct<coeff_t> > decal;
338 for(
int j=0;
j<coldim;
j++)
342 if(!
Iszero(tmpmat[rowdim*
j+i]))
348 tmp.
coeff=tmpmat[rowdim*j+
i];
349 decal.push_back(tmp);
354 if(decal.empty())
continue;
357 MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
360 if((maxindex/8)>=iterpk->sizenf)
362 iterpk->nfind=(
unsigned char*)
363 MAC_REV_REALLOC<unsigned char>(iterpk->nfind
364 ,iterpk->sizenf,maxindex/8+1);
365 for(
int i=iterpk->sizenf;i<maxindex/8+1;i++)
367 iterpk->sizenf=maxindex/8+1;
373 int nbcoeff=iterpk->size-1;
374 for(
int j=iterpk->sizenf-1;
j>=0;
j--)
376 if(8*
j>decal.rbegin()->index)
377 for (
int jj=0;jj<
nbbits[iterpk->nfind[
j]];jj++)
379 iterpk->nf[nbcoeff+decal.size()]=
385 int indexnf=decal.back().index;
386 typename typMk::value_type tmpmon;
388 while(8*
j<=decal.back().index)
390 indexnf=decal.back().index % 8;
391 for (;jj>(indexnf);jj--)
392 if(iterpk->nfind[
j]&(1<<jj))
394 iterpk->nf[nbcoeff+decal.size()]=
398 iterpk->nf[nbcoeff+decal.size()]=decal.back().coeff;
399 iterpk->nfind[
j]|=(1<<(indexnf));
402 if(decal.empty())
break;
405 if(iterpk->nfind[
j]&(1<<jj))
407 iterpk->nf[nbcoeff+decal.size()]=
411 if(decal.empty())
break;
415 iterpk->size+=expend;
418 MAC_REV_FREE<coeff_t>(tmpmat,coldim*rowdim*
sizeof(coeff_t));
422 for(
unsigned int i=0;i<Mk.size();i++,iter++)
429 coeff_t *vec=(coeff_t*)MAC_REV_MALLOC<coeff_t>(i*
sizeof(coeff_t));
430 for(
unsigned int j=0;
j<
i;
j++)
434 for(
int k=i-1;
k>=0;
k--)
438 for(
int j=
k-1;
j>=0;
j--)
439 vec[
j]-=vec[
k]*mat(
j,
k);
443 for(
unsigned int j=0;
j<
i;
j++,iterpk++)
450 MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
453 if((index/8)>=iterpk->sizenf)
455 iterpk->nfind=(
unsigned char*)
456 MAC_REV_REALLOC<unsigned char>(iterpk->nfind
457 ,iterpk->sizenf,index/8+1);
458 for(
int i=iterpk->sizenf;i<index/8+1;i++)
460 iterpk->sizenf=index/8+1;
465 for(
int k=iterpk->sizenf-1;
k>index/8;
k--)
468 if(iterpk->nfind[
k]!=0)
470 for(
int j=0;j<
nbbits[iterpk->nfind[
k]];j++)
472 iterpk->nf[
i]=iterpk->nf[i-1];
477 for(
int k=7;
k>(index%8);
k--)
478 if((iterpk->nfind[index/8]>>
k)&1)
480 iterpk->nf[
i]=iterpk->nf[i-1];
483 iterpk->nf[
i]=vec[
j];
484 iterpk->nfind[index/8]|=(1<<(index%8));
490 MAC_REV_FREE<coeff_t>(vec,i*
sizeof(coeff_t));
502 template<
typename mon,
typename typB>
510 for(iter=b.
begin();iter!=b.
end();iter++)
512 for(
int i=0;
i<iter->taille1;
i++)
517 for(
int i=0;
i<iter->taille2;
i++)
529 cout<<
"je cherche le pred pere de "<<m<<endl;
530 cout<<
"je renvoie ce pred"<<endl;
531 for(
int i=0;
i<iter->taille1;
i++)
533 cout<<
"iter.accept[i] "<<iter->accept[
i]<<endl;
535 for(
int i=0;
i<iter->taille2;
i++)
537 cout<<
"iter.refuse[i] "<<iter->refuse[
i]<<endl;
543 template<
typename typmat,
typename typPk,
typename typMk,
typename typdump,
544 typename typB,
typename typP>
545 void AddB_dim(
const typmat & mat,
const typmat &L, typP &P, typPk & Pk
546 ,
const typMk &Mk,
const typdump & dump,
typB &b)
549 typedef typename typPk::value_type
pol;
552 typename typPk::iterator iterpk;
554 typename typMk::const_iterator iter=Mk.begin();
570 for(
unsigned int i=0;i<Mk.size();i++,iter++)
577 coeff_t *vec=(coeff_t*)MAC_REV_MALLOC<coeff_t>(i*
sizeof(coeff_t));
578 for(
unsigned int j=0;
j<
i;
j++)
582 for(
int k=i-1;
k>=0;
k--)
586 for(
int j=
k-1;
j>=0;
j--)
587 vec[
j]-=vec[
k]*mat(
j,
k);
591 for(
unsigned int j=0;
j<
i;
j++,iterpk++)
598 MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
601 if((index/8)>=iterpk->sizenf)
603 iterpk->nfind=(
unsigned char*)
604 MAC_REV_REALLOC<unsigned char>(iterpk->nfind
605 ,iterpk->sizenf,index/8+1);
606 for(
int i=iterpk->sizenf;i<index/8+1;i++)
608 iterpk->sizenf=index/8+1;
613 for(
int k=iterpk->sizenf-1;
k>index/8;
k--)
616 if(iterpk->nfind[
k]!=0)
618 for(
int j=0;j<
nbbits[iterpk->nfind[
k]];j++)
620 iterpk->nf[
i]=iterpk->nf[i-1];
625 for(
int k=7;
k>(index%8);
k--)
626 if((iterpk->nfind[index/8]>>
k)&1)
628 iterpk->nf[
i]=iterpk->nf[i-1];
631 iterpk->nf[
i]=vec[
j];
632 iterpk->nfind[index/8]|=(1<<(index%8));
638 MAC_REV_FREE<coeff_t>(vec,i*
sizeof(coeff_t));
643 for(i=0;i<Mk.size();i++,iter++)
651 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>
654 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
657 for(
int j=0;j<stockpred.
taille2;j++)
663 cout<<
"le pere "<<pere<<endl;
664 for(
int j=0;j<stockpred.
taille2;j++)
666 listlcm.push_back(
lcm(pere,stockpred.
refuse[j]));
667 for(
typename list<mon>::iterator iterlcm=listlcm.begin();
668 iterlcm!=listlcm.end();iterlcm++)
669 for(
typename list<mon>::iterator iterlcm2=listlcm.begin();
670 iterlcm2!=listlcm.end();iterlcm2++)
671 if ((iterlcm2!=iterlcm) && (
isdivisible(*iterlcm,*iterlcm2,b)))
673 cout<<
"je vire "<<*iterlcm2<<
" parce que divisible par "<<*iterlcm<<endl;
674 listlcm.erase(iterlcm2--);
676 cout<<
"apres tri il me reste"<<endl;
677 for(
typename list<mon>::iterator iterlcm=listlcm.begin();
678 iterlcm!=listlcm.end();iterlcm++)
679 cout<<*iterlcm<<endl;
682 for(
typename list<mon>::iterator iterlcm=listlcm.begin();
683 iterlcm!=listlcm.end();iterlcm++)
684 if(iterlcm->GetDegree()>=Mk.begin()->GetDegree())
686 for(j=0;j<stockpred.
taille2;j++)
694 cout<<
"mon rajoute "<<*iter<<endl;
695 for(
typename typMk::const_iterator iter2=Mk.begin()
696 ;iter2!=iter;iter2++,j++,iterpk++)
700 mon tmpmon=
lcm(*iter,*iter2), tmpmon2=
mon(1);
701 for(
int l=0;l<b.
nbvar();l++)
702 tmpmon2*=
mon(l,tmpmon.
GetDegree(l)-iter2->GetDegree(l));
704 cout<<
"iterpk->ind*tmpmon2 "<<iterpk->ind*tmpmon2<<endl;
705 cout<<invconv<Poly>(*iterpk)*tmpmon2<<endl;;
706 P.push_back(invconv<Poly>(*iterpk)*tmpmon2);
713 b.
def.push_back(tmp);
717 cout<<
"Dans Addb"<<endl;
720 for(
int i=0;i<p->taille1;i++)
722 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
724 for(
int i=0;i<p->taille2;i++)
726 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
729 cout<<
"eeeeeeeeeeeeeeeeeeeeeeeeeee"<<endl;
735 #endif //ALREADY_IsinB
Definition: workspace.hpp:11
T coeff
Definition: IsinB3.hpp:232
const_iterator end() const
Definition: IsinB3.hpp:33
#define max(a, b)
Definition: alp_f2c.H:167
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
Base< predicat< mon > > typB
Definition: solver_bb_floating.cpp:142
reverse_iterator rend()
Definition: IsinB3.hpp:34
C GetCoeff() const
Definition: Monom.hpp:67
monom monom_t
Definition: IsinB3.hpp:12
MSKaccmodee MSKint32t MSKint32t last
Definition: mosek.h:2545
void Dovoisins(const typename typMk::value_type &m, typMk &voisins, const typdump &dump, const Base &b)
Definition: IsinB3.hpp:84
list< predicat >::iterator iterator
Definition: IsinB3.hpp:22
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: IsinB3.hpp:40
mon * accept
Definition: types.hpp:6
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo.hpp:1391
void AddB(const typmat &mat, typPk &Pk, const typMk &Mk, const typdump &dump, typB &b, monomial_server &serv)
Definition: IsinB3.hpp:244
list< predicat >::const_iterator const_iterator
Definition: IsinB3.hpp:23
T coeff_t
Definition: pol.hpp:9
int taille1
Definition: types.hpp:5
MSKaccmodee MSKint32t first
Definition: mosek.h:2545
bool operator()(const sortstruct< T > &a, const sortstruct< T > &b)
Definition: IsinB3.hpp:236
int nbvar()
Definition: IsinB3.hpp:39
int mon2int(const mon &mm)
Definition: placemon.hpp:294
void reinit_multiple()
Definition: placemon3.hpp:85
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
MSKint32t k
Definition: mosek.h:2713
R rep
Definition: Monom.hpp:30
void rajoute_voisins(typPk &Pk, const typMk &Mk, const typdump &dump, Base &b, workspace &w, monomial_server &serv)
Definition: IsinB3.hpp:111
C coeff_t
Definition: Monom.hpp:26
int nbbits[256]
Definition: pol2ter.hpp:4
list< predicat >::reverse_iterator reverse_iterator
Definition: IsinB3.hpp:24
Definition: placemon3.hpp:14
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
const_iterator begin() const
Definition: IsinB3.hpp:28
Definition: IsinB3.hpp:229
iterator end()
Definition: IsinB3.hpp:32
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 taille2
Definition: types.hpp:7
exponent_t GetDegree() const
Definition: Monom.hpp:70
const_reverse_iterator rbegin() const
Definition: IsinB3.hpp:30
Mon my_divmon(const Mon &mon, int i, const Base &b)
Definition: corealgo.hpp:1262
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
predicat predicat_t
Definition: IsinB3.hpp:20
int index
Definition: IsinB3.hpp:231
MSKrescodee r
Definition: mosek.h:2321
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo.hpp:43
MSKstreamtypee MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t MSKint32t a
Definition: mosek.h:3833
int isinb(const mon &m, predicat p, const Base &b)
Definition: IsinB3.hpp:44
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: IsinB3.hpp:545
monom * refuse
Definition: IsinB3.hpp:11
iterator erase(iterator first)
Definition: IsinB3.hpp:38
predicat< mon > findpred(const mon &m, const typB &b)
Definition: IsinB3.hpp:503
iterator begin()
Definition: IsinB3.hpp:27
const_reverse_iterator rend() const
Definition: IsinB3.hpp:35
monom * accept
Definition: IsinB3.hpp:9
list< predicat >::const_reverse_iterator const_reverse_iterator
Definition: IsinB3.hpp:25
predicat::monom_t mon
Definition: IsinB3.hpp:21
#define pol
Definition: pol2ter.hpp:3
Multivariate monomials.
Definition: Monom.hpp:21
iterator erase(iterator first, iterator last)
Definition: IsinB3.hpp:37
reverse_iterator rbegin()
Definition: IsinB3.hpp:29
Definition: IsinB3.hpp:235