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