Borderbasix

IsinB3sdp.hpp
Go to the documentation of this file.
1 #ifndef ALREADY_IsinB
2 #define ALREADY_IsinB
3 //void reinit_multiple();
4 template<typename T>
5 int Iszero(const T&);
6 
7 template<typename monom>
8 struct predicat
9 {
10  int taille1;
11  monom * accept;
12  int taille2;
13  monom * refuse;
14  typedef monom monom_t;
15 };
16 
17 template<typename predicat>
18 struct Base
19 {
20  list<predicat> def;
21  int nbvars;
23  typedef typename predicat::monom_t mon;
24  typedef typename list<predicat>::iterator iterator;
25  typedef typename list<predicat>::const_iterator const_iterator;
26  typedef typename list<predicat>::reverse_iterator reverse_iterator;
27  typedef typename list<predicat>::const_reverse_iterator const_reverse_iterator;
28 
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(); }
33 
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(); }
38 
39  iterator erase(iterator first, iterator last){return def.erase(first,last);};
40  iterator erase(iterator first){return def.erase(first);};
41  int nbvar() {return nbvars;};
42  int nbvar() const {return nbvars;};
43 };
44 
45 template<typename mon,typename predicat,typename Base>
46 int isinb(const mon &m, predicat p,const Base &b)
47 {
48  int inaccept=0,inrefuse=0;
49  for(int i=0;i<p.taille2;i++)
50  {
51  inrefuse|=isdivisible(p.refuse[i],m,b);
52  // cout<<"p.refuse[i] "<<p.refuse[i]<<" "<<m<<" "<<inrefuse<<endl;
53  if(inrefuse) {
54  goto jesais; break;}
55  }
56  if(!inrefuse)
57  for(int i=0;i<p.taille1;i++)
58  {
59  // cout<<"p.accept[i] "<<p.accept[i]<<" "<<m<<endl;
60  inaccept|=isdivisible(p.accept[i],m,b);
61  if(inaccept) break;
62  }
63  jesais:
64  return((!inrefuse)&&inaccept);
65 }
66 
67 template<typename mon,typename Base>
68 int IsinB(const mon &m,const Base &b)
69 {
70  int res=0;
71  //cout<<"monom "<<m<<endl;
72  for(typename Base::const_iterator iter=b.begin();iter!=b.end();iter++)
73  {
74  res=res||isinb(m,*iter,b);
75  //cout<<"verdict isinb "<<res<<endl;
76  if (res) break;
77  }
78 
79  return res;
80 }
81 
82 template<typename mon,typename predicat,typename Base>
83 int isinb2(const mon &m, predicat p,const Base &b,mon &div,mon &coc)
84 {
85  int inaccept=0,inrefuse=0;
86  //mon div=mon(1);
87  for(int i=0;i<p.taille2;i++)
88  {
89  inrefuse|=isdivisible2(p.refuse[i],m,b,coc);
90  // cout<<"p.refuse[i] "<<p.refuse[i]<<" "<<m<<" "<<inrefuse<<endl;
91  if(inrefuse) {
92  div=p.refuse[i];
93  goto jesais; break;}
94  }
95  if(!inrefuse)
96  for(int i=0;i<p.taille1;i++)
97  {
98  // cout<<"p.accept[i] "<<p.accept[i]<<" "<<m<<endl;
99  inaccept|=isdivisible(p.accept[i],m,b);
100  if(inaccept) break;
101  }
102  jesais:
103  return((!inrefuse)&&inaccept);
104 }
105 
106 
107 
108 
109 template<typename mon,typename Base>
110 int IsinB2(const mon &m,const Base &b, mon &div,mon &coc)
111 {
112  int res=0;
113  //mon coc=mon(1);
114  //cout<<"monom "<<m<<endl;
115  for(typename Base::const_iterator iter=b.begin();iter!=b.end();iter++)
116  {
117  res=res||isinb2(m,*iter,b,div,coc);
118  //cout<<"verdict isinb "<<res<<endl;
119  if (res) break;
120  }
121 
122  return res;
123 }
124 
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)
128 {
129  typedef typename typMk::value_type mon;
130  int i=0;
131  typename typdump::const_iterator iter=dump.begin();
132  //on determine un parent
133  typMk ancien;
134  for(i=0;i<b.nbvar();i++)
135  if(m.GetDegree(i)>0)
136  ancien.push_back(my_divmon(m,i,b));
137  //cout<<"Dans Dovoisins "<<m<<endl;
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;
141  //maintenant on l'a on prend toutes les consequences de ce parent
142  for(int j=0;j<b.nbvar();j++)
143  if(!member(voisins,iter->nf[i].ind*mon(j,1)))
144  voisins.push_back(iter->nf[i].ind*mon(j,1));
145 }
146 
147 #ifdef uninf
148  template<typename pol> void reinit_nf();
149 #endif
150 
151 template<typename typPk,typename typMk ,typename typdump,typename Base,
152  typename monomial_server, typename workspace>
153 void rajoute_voisins(typPk &Pk,const typMk & Mk,
154  const typdump &dump, Base &b,workspace &w,
155  monomial_server &serv)
156  // l'object if de la fonction est d'eviter les
157  //oublis de voisin lors d'un rajout au quotient
158 {
159  typedef typename typPk::value_type pol;
160  typedef typename pol::monom_t mon;
161  typedef typename pol::coeff_t coeff;
162 
163 #ifdef unimul
164  // void reinit_multiple();
165  serv.reinit_multiple();
166 #endif
167 #ifdef uninf
168 
169  serv.reinit_nf();
170 #endif
171 #ifdef BONRAJOUT
172  return;
173 #endif
174 
175  mon * baccept=b.rbegin()->accept;
176  int taille=b.rbegin()->taille1;
177  typMk voisins;
178  for(int i=0;i<taille;i++)
179  Dovoisins(baccept[i],voisins,dump,b);
180  //Dovoisins ne cree pas de monomes redondants!!!!!!!!!!!!
181  for(typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
182  {
183  for(int i=0;i<taille;i++)
184  if(baccept[i].rep==iter->rep)
185  {
186  voisins.erase(iter--);
187  break;
188 
189  }
190  }
191  for(typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
192  {
193  if(member(Mk,*iter))
194  voisins.erase(iter--);
195  }
196  //on vire les voisins que l on a rajoute a l'accept quotient
197  //et ceux que l'on a deja
198  for(typename typMk::iterator iter=voisins.begin();iter!=voisins.end();iter++)
199  {
200  typMk ancien;
201  for(int i=0;i<b.nbvar();i++)
202  if(iter->GetDegree(i)>0)
203  ancien.push_back(my_divmon(*iter,i,b));
204  //on vient de creer les parents possibles
205  //maintenant on cherche un pere possible
206 
207  {
208  typename typdump::const_iterator iterdump;
209  for(iterdump=dump.begin();iterdump!=dump.end();iterdump++)
210  if(iterdump->k==(iter->GetDegree()-1)) break;
211  {
212  int i,j;
213  for(i=0;i<iterdump->size;i++)
214  if(member(ancien,iterdump->nf[i].ind))
215  break;
216  //on a un parent on calcul la nf du monome *iter maintenant
217  //d'abord on calcul la bonne variable
218  for(j=0;j<b.nbvar();j++)
219  if(iter->rep==(iterdump->nf[i].ind*mon(j,1)).rep)
220  break;
221  mon * tmp=NULL;
222  int tmpsize=0;
223  //Tue Dec 4 16:39:25 MET 2001
224  //pol tmppol;
225  //densify(iterdump->nf[i],tmppol);
226  //cout<<"avant mult"<<endl;
227  //Tue Dec 4 16:39:25 MET 2001
228  //cout<<"Le parent"<<endl<<invconv<Poly>(iterdump->nf[i])<<endl;
229  //Pk.push_back(mult(j,tmppol,dump,b,&tmp,tmpsize));
230  Pk.push_back(mult(j,iterdump->nf[i],dump,b,&tmp,tmpsize,w,serv));
231  //cout<<"j'ai pushe ici"<<endl<<invconv<Poly>(*(Pk.rbegin()))<<endl;
232  //il n devrait y avoir personne dans tmp normalement
233  //int toint=0;
234  //for(;Pk.back().ind.GetCoeff()>toint;toint++);
235  for(int k=0;k<tmpsize-1;k++)
236  {
237  for(typename typPk::iterator iterpk=Pk.begin()
238  ;iterpk!=Pk.end();iterpk++)
239  if(iterpk->ind.rep==tmp[k].rep)
240  {
241  // my_plus(Pk.back(),*iterpk,tmp[k].GetCoeff(),&w,serv);//ICIOMP
242  my_plus(Pk.back(),*iterpk,tmp[k].GetCoeff(),&w);//ICIOMP
243  break;
244  }
245  }
246  MAC_REV_FREE<mon>(tmp,sizeof(mon)*(tmpsize));
247  }
248  }
249  //cout<<"coucou de rajoutevoisins "<<Pk.back().ind<<endl;
250  // cout<<"le pol rajoute vaut"<<endl<<invconv<Poly>(Pk.back())<<endl;
251  Pk.back().ind.SetCoeff((coeff)1);
252  //cout<<"Je l'ai pas !!! "<<endl;
253  //exit(10);
254  }
255  //on rajoute a B les monomes correspondants au voisin
256  //on enleve en fait...
257  //
258  // cout<<"rajoute voisins .size "<<voisins.size()<<endl;
259  b.rbegin()->refuse=(mon*)MAC_REV_REALLOC<mon>(b.rbegin()->refuse
260  ,sizeof(mon)*b.rbegin()->taille2,
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()
264  ;i++,iter++)
265  b.rbegin()->refuse[i]=*iter;
266  b.rbegin()->taille2+=voisins.size();
267 }
268 
269 //AddB n'est normalement appele que lorsque la matruice n'a pas rang plein
270 
271 template<typename typmat,typename typPk, typename typMk,typename typdump,
272  typename typB,typename monomial_server>
273 void AddB(const typmat & mat, typPk & Pk,const typMk &Mk,const typdump & dump,
274  typB &b, monomial_server &serv)
275 {
276  typedef typename typPk::value_type pol;
277  typedef typename pol::monom_t mon;
278  typedef typename pol::coeff_t coeff_t;
279  typename typPk::iterator iterpk;
280  predicat<mon> tmp;
281  typename typMk::const_iterator iter=Mk.begin();
282  int r=my_rank(mat),comprefuse=0,compaccept=0;
283  unsigned int i;
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));
288  tmp.taille2=r;
289  tmp.accept=(mon*)MAC_REV_MALLOC<mon>((Mk.size()-r)*sizeof(mon));
290  tmp.taille1=Mk.size()-r;
291  //for(i=0;i<(unsigned)r;i++,iter++)
292  // tmp.refuse[i]=*iter;
293  iter=Mk.begin();
294  for(i=0;i<Mk.size();i++,iter++)
295  {
296  if(Iszero(mat(i,i)))
297  {
298  tmp.accept[compaccept++]=*iter;
299  cout<<"monome rajoute au quotient "<<*iter<<endl;
300  }
301  else
302  {
303  tmp.refuse[comprefuse++]=*iter;
304  }
305  }
306  b.def.push_back(tmp);
307  //bon maintenant que l'on vient de rajouter des
308  //monomes au quotient il faut remttre les polynomes comme il faut
309  iter=Mk.begin();
310  for(unsigned int i=0;i<Mk.size();i++,iter++)
311  {
312  if(Iszero(mat(i,i)))
313  {
314  int index=serv.mon2int(*iter);
315  iterpk=Pk.begin();
316  //on commence a faire de l'algebre lineaire
317  coeff_t *vec=(coeff_t*)MAC_REV_MALLOC<coeff_t>(i*sizeof(coeff_t));
318  for(unsigned int j=0;j<i;j++)
319  vec[j]=mat(j,i);
320  //le vecteur est fait reste plus qu'a
321  //resoudre le syteme lineaire
322  for(int k=i-1;k>=0;k--)
323  {
324  if(Iszero(mat(k,k))) continue;
325  vec[k]/=mat(k,k);
326  for(int j=k-1;j>=0;j--)
327  vec[j]-=vec[k]*mat(j,k);
328  }
329  //bon ca a l'air d'etre bon pour la resolution du systeme lineaire
330  //on remet les coeff de vec dans les pol a la bonne place
331  for(unsigned int j=0;j<i;j++,iterpk++)
332  {
333  //cout<<"tour deboucle addB "<<j<<endl;
334  if((!Iszero(vec[j])))//&&(!Iszero(mat(j,j))))
335  {
336  int i;
337  iterpk->nf=(typename mon::coeff_t*)
338  MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
339  ,iterpk->size*sizeof(typename mon::coeff_t)
340  ,(iterpk->size+1)*sizeof(typename mon::coeff_t));
341  if((index/8)>=iterpk->sizenf)
342  {
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++)
347  iterpk->nfind[i]=0;
348  iterpk->sizenf=index/8+1;
349 
350  }
351 
352  i=iterpk->size;
353  for(int k=iterpk->sizenf-1;k>index/8;k--)
354  {
355  //cout<<"k "<<k<<endl;
356  if(iterpk->nfind[k]!=0)
357  {
358  for(int j=0;j<nbbits[iterpk->nfind[k]];j++)
359  {
360  iterpk->nf[i]=iterpk->nf[i-1];
361  i--;
362  }
363  }
364  }
365  for(int k=7;k>(index%8);k--)
366  if((iterpk->nfind[index/8]>>k)&1)
367  {
368  iterpk->nf[i]=iterpk->nf[i-1];
369  i--;
370  }
371  iterpk->nf[i]=vec[j];
372  iterpk->nfind[index/8]|=(1<<(index%8));
373  iterpk->size++;
374  //cout<<"rajoute le monome "<<*iter<<" a la ligne "<<j<<" "<<vec[j]<<" i "<<i<<endl;
375  //cout<<"le pol"<<endl<<invconv<Poly>(*iterpk)<<endl;
376  }
377  }
378  MAC_REV_FREE<coeff_t>(vec,i*sizeof(coeff_t));
379  }
380  }
381  //rajoute_voisins(Pk,Mk,dump,b);
382  return;
383 }
384 
385 
386 //AddB n'est normalement appele que lorsque la matrice n'a pas rang plein
387 //et que le second membre se reduit a 0
388 #if 1
389 template<typename mon,typename typB>
390 predicat<mon> findpred(const mon &m, const typB &b)
391 //findpred est sense renvoyer le predicat qui fait que le
392 // monome "m" se trouve sur la frontiere de b
393 // il faut que m soit sur la frontiere du predicat
394 {
395  int ok=0;
396  typename typB::const_iterator iter;
397  for(iter=b.begin();iter!=b.end();iter++)
398  {
399  for(int i=0;i<iter->taille1;i++)
400  if(isdivisible(iter->accept[i],m,b))
401  ok=1;
402  if(ok)
403  {
404  for(int i=0;i<iter->taille2;i++)
405  if(isdivisible(iter->refuse[i],m,b))
406  {
407  for(int j=0;j<b.nbvar();j++)
408  ok+=(m.GetDegree(i)>m.GetDegree(i));
409  if(ok==1+b.nbvar())
410  ok=0;
411  }
412  }
413  if(ok)
414  break;
415  }
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++)
419  {
420  cout<<"iter.accept[i] "<<iter->accept[i]<<endl;
421  }
422  for(int i=0;i<iter->taille2;i++)
423  {
424  cout<<"iter.refuse[i] "<<iter->refuse[i]<<endl;
425  }
426 
427  return *iter;
428 }
429 
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)
434 {
435 
436  typedef typename typPk::value_type pol;
437  typedef typename pol::monom_t mon;
438  typedef typename pol::coeff_t coeff_t;
439  typename typPk::iterator iterpk;
440 
441  typename typMk::const_iterator iter=Mk.begin();
442  int r=my_rank(mat),comprefuse=0,compaccept=0;
443  unsigned int i;
444  //cout<<"DANS ADDB"<<endl;
445  //cout<<"rang de la matrice m "<<r<<" Mk.size "<<Mk.size()<<endl;
446  //cout<<"taille de la matrice "<<mat.nrow<<"x"<<mat.ncol<<endl;
447  // tmp.refuse=(mon*)MAC_REV_MALLOC<mon>(r*sizeof(mon));
448  //tmp.taille2=r;
449  //tmp.accept=(mon*)MAC_REV_MALLOC<mon>((Mk.size()-r)*sizeof(mon));
450  //tmp.taille1=Mk.size()-r;
451  //for(i=0;i<(unsigned)r;i++,iter++)
452  // tmp.refuse[i]=*iter;
453 
454  //bon maintenant que l'on vient de rajouter des
455  //monomes au quotient il faut remttre les polynomes comme il faut
456  iter=Mk.begin();
457  for(unsigned int i=0;i<Mk.size();i++,iter++)
458  {
459  if(Iszero(mat(i,i)))
460  {
461  int index=mon2int(*iter);
462  iterpk=Pk.begin();
463  //on commence a faire de l'algebre lineaire
464  coeff_t *vec=(coeff_t*)MAC_REV_MALLOC<coeff_t>(i*sizeof(coeff_t));
465  for(unsigned int j=0;j<i;j++)
466  vec[j]=mat(j,i);
467  //le vecteur est fait reste plus qu'a
468  //resoudre le syteme lineaire
469  for(int k=i-1;k>=0;k--)
470  {
471  if(Iszero(mat(k,k))) continue;
472  vec[k]/=mat(k,k);
473  for(int j=k-1;j>=0;j--)
474  vec[j]-=vec[k]*mat(j,k);
475  }
476  //bon ca a l'air d'etre bon pour la resolution du systeme lineaire
477  //on remet les coeff de vec dans les pol a la bonne place
478  for(unsigned int j=0;j<i;j++,iterpk++)
479  {
480  //cout<<"tour deboucle addB "<<j<<endl;
481  if((!Iszero(vec[j])))//&&(!Iszero(mat(j,j))))
482  {
483  int i;
484  iterpk->nf=(typename mon::coeff_t*)
485  MAC_REV_REALLOC<typename mon::coeff_t>(iterpk->nf
486  ,iterpk->size*sizeof(typename mon::coeff_t)
487  ,(iterpk->size+1)*sizeof(typename mon::coeff_t));
488  if((index/8)>=iterpk->sizenf)
489  {
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++)
494  iterpk->nfind[i]=0;
495  iterpk->sizenf=index/8+1;
496 
497  }
498 
499  i=iterpk->size;
500  for(int k=iterpk->sizenf-1;k>index/8;k--)
501  {
502  //cout<<"k "<<k<<endl;
503  if(iterpk->nfind[k]!=0)
504  {
505  for(int j=0;j<nbbits[iterpk->nfind[k]];j++)
506  {
507  iterpk->nf[i]=iterpk->nf[i-1];
508  i--;
509  }
510  }
511  }
512  for(int k=7;k>(index%8);k--)
513  if((iterpk->nfind[index/8]>>k)&1)
514  {
515  iterpk->nf[i]=iterpk->nf[i-1];
516  i--;
517  }
518  iterpk->nf[i]=vec[j];
519  iterpk->nfind[index/8]|=(1<<(index%8));
520  iterpk->size++;
521  //cout<<"rajoute le monome "<<*iter<<" a la ligne "<<j<<" "<<vec[j]<<" i "<<i<<endl;
522  //cout<<"le pol"<<endl<<invconv<Poly>(*iterpk)<<endl;
523  }
524  }
525  MAC_REV_FREE<coeff_t>(vec,i*sizeof(coeff_t));
526  }
527  }
528  //rajoute_voisins(Pk,Mk,dump,b);
529  iter=Mk.begin();
530  for(i=0;i<Mk.size();i++,iter++)
531  {
532  if(Iszero(mat(i,i)))
533  {
534  list<mon> listlcm;
535  mon pere;
536  predicat<mon> tmp,stockpred=findpred(*iter,b);
537  int j=0,k=0;
538  tmp.refuse=(mon*)MAC_REV_MALLOC<mon>
539  ((stockpred.taille2)*sizeof(mon));
540  tmp.taille2=(stockpred.taille2-1);
541  tmp.accept=(mon*)MAC_REV_MALLOC<mon>(sizeof(mon));
542  tmp.taille1=1;
543  tmp.accept[0]=*iter;
544  for(int j=0;j<stockpred.taille2;j++)
545  if(isdivisible(stockpred.refuse[j],*iter,b))
546  {
547  pere.rep=stockpred.refuse[j].rep;
548  break;
549  }
550  cout<<"le pere "<<pere<<endl;
551  for(int j=0;j<stockpred.taille2;j++)
552  if(stockpred.refuse[j].rep!=pere.rep)
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)))
559  {
560  cout<<"je vire "<<*iterlcm2<<" parce que divisible par "<<*iterlcm<<endl;
561  listlcm.erase(iterlcm2--);
562  }
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;
567  //On a maintenant les minimaux pour la division
568  //reste a retirer les bons
569  for(typename list<mon>::iterator iterlcm=listlcm.begin();
570  iterlcm!=listlcm.end();iterlcm++)
571  if(iterlcm->GetDegree()>=Mk.begin()->GetDegree())
572  {
573  for(j=0;j<stockpred.taille2;j++)
574  if ((isdivisible(stockpred.refuse[j],*iterlcm,b))
575  && (stockpred.refuse[j].rep != pere.rep))
576  break;
577  tmp.refuse[k++]=stockpred.refuse[j];
578  }
579 #if 0
580  iterpk=Pk.begin();
581  cout<<"mon rajoute "<<*iter<<endl;
582  for(typename typMk::const_iterator iter2=Mk.begin()
583  ;iter2!=iter;iter2++,j++,iterpk++)
584  if(!Iszero(L(i,j)))
585  {
586  predicat<mon> tmppred=findpred(*iter2,b);
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));
590  tmp.refuse[k++]=tmpmon;
591  cout<<"iterpk->ind*tmpmon2 "<<iterpk->ind*tmpmon2<<endl;
592  cout<<invconv<Poly>(*iterpk)*tmpmon2<<endl;;
593  P.push_back(invconv<Poly>(*iterpk)*tmpmon2);
594  }
595 #endif
596  tmp.refuse=(mon*)MAC_REV_REALLOC<mon>(tmp.refuse,
597  (stockpred.taille2)*sizeof(mon)
598  ,k*sizeof(mon));
599  tmp.taille2=k;
600  b.def.push_back(tmp);
601  //cout<<"monome rajoute au quotient "<<*iter<<endl;
602  }
603  }
604  cout<<"Dans Addb"<<endl;
605  for(typename typB::iterator p=b.begin();p!=b.end();p++)
606  {
607  for(int i=0;i<p->taille1;i++)
608  {
609  cout<<"p.accept[i] "<<p->accept[i]<<endl;
610  }
611  for(int i=0;i<p->taille2;i++)
612  {
613  cout<<"p.refuse[i] "<<p->refuse[i]<<endl;
614  }
615  }
616  cout<<"eeeeeeeeeeeeeeeeeeeeeeeeeee"<<endl;
617 return;
618 }
619 
620 #endif
621 
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
Definition: types.hpp:3
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
Definition: types.hpp:14
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
int Iszero(const T &)
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
Home  |  Download & InstallContributions