Developer documentation

tensor_eenv_loops.hpp
Go to the documentation of this file.
1 #ifndef realroot_tensor_eenvops_hpp
2 #define realroot_tensor_eenvops_hpp
3 
4 #include <realroot/texp_sup.hpp>
6 #include <realroot/binomials.hpp>
7 
8 namespace mmx {
9 
10 namespace tensor
11 {
19  template < class R, class C, class eenv, class P >
20  void levalm (R & result, const C * data, const eenv & env, const P & p)
21  {
22  typedef R result_type;
23 
24  // query for the environment information
25 
26  const int esz = env.sz (); // number of coefficients
27  const int nvr = env.nvr (); // number of variables
28  const int *szs = env.szs (); // sizes in each variables
29  const int *str = env.str (); // corresponding strides.
30 
31  //result_type tmp[env.sz ()], r; // temporary array used by the inplace evaluation loop
32  result_type* tmp = new result_type[env.sz()];
33  result_type r;
34  std::copy (data, data + env.sz (), tmp);
35  for (int v = nvr - 1; v >= 0; v--)
36  for (int i = 0; i < esz; i += str[v - 1]) {
37  vct::horner(r,tmp + i, szs[v], p[v], str[v]);
38  tmp[i] = r;
39  }
40 // let::assign(result,tmp[0]);
41  result= tmp[0];
42  };
43 
44  template < class R, class C, class eenv, class P >
45  void hevalm (R & result, const C * data, const eenv & env, const P & p)
46  {
47  typedef R result_type;
48 
49  // query for the environment information
50 
51  const int esz = env.sz (); // number of coefficients
52  const int nvr = env.nvr (); // number of variables
53  const int *szs = env.szs (); // sizes in each variables
54  const int *str = env.str (); // corresponding strides.
55 
56  //result_type tmp[env.sz ()],r; // temporary array used by the inplace evaluation loop
57  result_type* tmp=new result_type[env.sz ()], r;
58  std::copy (data, data + env.sz (), tmp);
59  for (int v = nvr - 1; v >= 0; v--)
60  for (int i = 0; i < esz; i += str[v - 1]) {
61  vct::hhorner(r,tmp + i, szs[v], p[v+1],p[0],str[v]);
62  tmp[i] = r;
63  }
64 
65  let::assign(result,tmp[0]);
66 
67  };
68 
69  template<typename real_t, typename value_t>
70  void decasteljau( real_t * r, unsigned sz, const value_t& t, int str = 1 )
71  {
72  real_t *er, *p;
73  for ( er = r + (sz-1)*str; er != r; er -= str )
74  for ( p = r; p != er; p += str )
75  *p = real_t(value_t(1)-t)* *p+t**(p+str);
76  };
77 
79  template < class R, class C, class eenv, class P >
80  void levalb (R & result, const C * data, const eenv & env, const P & p)
81  {
82  // typename sup<typename texp::value_type<P>::result_t, C >::T tmp[env.sz()];
83  //XXX typename texp::ringof_ < typename texp::value_type<P>::T,C >::T
84 
85  int szTemp = env.sz();
86 
87  R tmp[szTemp];
88 
89  const int esz (env.sz ());
90  const int nvr (env.nvr ());
91  const int *szs (env.szs ());
92  const int *str (env.str ());
93 
94  std::copy (data, data + env.sz (), tmp);
95 
96  for (int v = nvr - 1; v >= 0; v--)
97  for (int i = 0; i < esz; i += str[v - 1])
98  decasteljau (tmp + i, szs[v], p[v], str[v]);
99 
100  let::assign(result,tmp[0]);
101  };
102 
103 
104 
105  template < class OutputIterator, class C, class eenv >
106  void maxs (OutputIterator _maxs_, const C * data, const eenv & env, int v)
107  {
108  const int *eszs = env.szs ();
109  const int *estr = env.str ();
110  // const int envr = env.nvr ();
111  int k, i; //, j;
112  for ( k = 0; k < eszs[v]; k++, data += estr[v], _maxs_++)
113  {
114  *_maxs_ = *data;
115  for (i = 0; i < estr[-1]; i += estr[v - 1])
116  for (const C * edata = data + i; edata < data + i + estr[v]; edata++)
117  if (*edata > *_maxs_)
118  *_maxs_ = *edata;
119  };
120  };
121 
122  template < class OutputIterator, class C, class eenv >
123  void mins (OutputIterator _mins_, const C * data, const eenv & env, int v)
124  {
125  const int *eszs = env.szs ();
126  const int *estr = env.str ();
127  // const int envr = env.nvr ();
128  int p, k, i, j;
129  for (p = 0, k = 0; k < eszs[v]; k++, p += estr[v], _mins_++)
130  {
131  *_mins_ = data[p];
132  for (i = 0; i < estr[-1]; i += estr[v - 1])
133  for (j = i; j < i + estr[v]; j++)
134  if (data[j + p] < *_mins_)
135  *_mins_ = data[j + p];
136  };
137  };
138 
139 
140 
141  template < class C, class eenv >
142  void vswap( C * data, const eenv & env, int *perm, int *supp = 0, int nsupp = 0 )
143  {
144  const int *szs = env.szs ();
145  const int *str = env.str ();
146  int ostr[env.nvr ()];
147  int i;
148  for (i = env.nvr () - 2, str[env.nvr () - 1] = 1; i >= -1;
149  ostr[i] = szs[perm[i + 1]] * str[i + 1], i--) ;
150  if (supp == 0)
151  {
152  int a, o, v;
153  for (i = 0; i < env.esz (); i++)
154  {
155  for (a = i, v = env.nvr () - 1; a; a /= szs[v], v--)
156  o += (a % szs[v]) * ostr[perm[v]];
157  std::swap (data[i], data[o]) ;
158  };
159  }
160  else
161  {
162  int a, o, v;
163  for (i = 0; i < nsupp; supp[i++] = o)
164  {
165  for (a = supp[i], v = env.nvr () - 1; a; a /= szs[v], v--)
166  o += (a % szs[v]) * ostr[perm[v]];
167  std::swap (data[i], data[o]);
168  };
169  };
170  env.vswap (perm);
171  };
172 
173 
174  template < class C, class eenv >
175  void binoms (C * data, const eenv & env, binomials < C > & binms)
176  {
177  const int *estr = env.str ();
178  const int *eszs = env.szs ();
179  const int envr = env.nvr ();
180  const int esz = env.sz ();
181  const C *bins = binms[eszs[envr - 1] - 1];
182  for (C * pdata = data; pdata < data + esz; pdata += estr[envr - 2])
183  vct::copy (pdata, bins, eszs[envr - 1]);
184  for (int v = 0; v < envr - 1; v++)
185  {
186  bins = binms[eszs[v] - 1];
187  // int k = 0;
188  for (int i = 0; i < esz; i += estr[v - 1])
189  for (int j = 0; j < estr[v]; j++)
190  vct::pmul (data + i + j, bins, eszs[v], estr[v], 1);
191  };
192  };
193 
194  template < class C >
195  void ibinoms (C * data, const eenv & env, binomials < C > & binms)
196  {
197  binoms(data,env,binms);
198  vct::inverses(data,data+env.sz());
199  };
200 
202  template < class C, class eenv >
203  void scale (C * data, const eenv & env, binomials < C > &binoms)
204  {
205  const int *estr = env.str ();
206  const int *eszs = env.szs ();
207  const int envr = env.nvr ();
208  const int esz = env.sz ();
209  const C * bins = binoms[eszs[envr - 1] - 1];
210 
211  for (C * pdata = data; pdata < data + esz; vct::pmul (pdata, bins, eszs[envr - 1]), pdata += estr[envr - 2]) ;
212 
213  for (int v = 0; v < envr - 1; v++)
214  {
215  bins = binoms[eszs[v] - 1];
216  // int k = 0;
217  for (int i = 0; i < esz; i += estr[v - 1])
218  for (int j = 0; j < estr[v]; j++)
219  vct::pmul (data + i + j, bins, eszs[v], estr[v], 1);
220  };
221  };
222 
224  template < class C, class eenv >
225  void uscale (C * data, const eenv & env, binomials < C > &binoms)
226  {
227  const int *estr = env.str ();
228  const int *eszs = env.szs ();
229  const int envr = env.nvr ();
230  const int esz = env.sz ();
231  const C *bins = binoms[eszs[envr - 1] - 1];
232  for (C * pdata = data; pdata < data + esz; pdata += estr[envr - 2])
233  vct::pdiv (pdata, bins, eszs[envr - 1]);
234  for (int v = 0; v < envr - 1; v++)
235  {
236  bins = binoms[eszs[v] - 1];
237  // int k = 0;
238  for (int i = 0; i < esz; i += estr[v - 1])
239  for (int j = 0; j < estr[v]; j++)
240  vct::pdiv (data + i + j, bins, eszs[v], estr[v], 1);
241  };
242  };
243 
244  template<class C> inline
245  void convertb2m( C * bzc, unsigned sz, int st, binomials<C>& binom ) {
246  int i,k;
247  for ( i = st; i != st*int(sz); i += st )
248  for ( k = (sz-1)*st; k != i-st; k -= st )
249  bzc[k] -= bzc[k-st];
250  vct::pmul(bzc,binom[sz-1],sz,st,1);
251  };
252 
253 
254  template<class C> inline
255  void convertm2b( C * bzc, unsigned sz, int st, binomials<C>& binoms ) {
256  C *tmp = new C[sz];
257  const C * bin;
258  unsigned i,k,p,l;
259 
260  for ( p = 0, i = 0; i < sz; i++, p += st )
261  { tmp[i] = bzc[p]; bzc[p] = C(0); };
262  for ( p = 0, i = 0; i < sz; i++, p += st )
263  for ( bin = binoms[sz-i-1], l = p, k = 0; k < sz-i; k++, l += st )
264  bzc[l] += tmp[i]*bin[k];
265  bin = binoms[sz-1];
266  for ( i = 0, l = 0; i < sz; i ++, l += st )
267  bzc[l] /= bin[i];
268  };
269 
273  template < class C, class eenv >
274  void convertm2b (C * data, const eenv & e, binomials < C > &bins, int v)
275  {
276  const int *esz = e.szs ();
277  const int *est = e.str ();
278  int i, j;
279  for (i = 0; i < e.sz (); i += est[v - 1])
280  for (j = i; j < i + est[v]; convertm2b (data + j, esz[v], est[v], bins), j++) ;
281  };
282 
284  template < class C, class eenv >
285  void convertm2b (C * data, const eenv & env, binomials < C > &bins)
286  {
287  for (int v = 0; v < env.nvr (); convertm2b (data, env, bins, v++)) ;
288  };
289 
293  template < class C, class eenv >
294  void convertb2m (C * data, const eenv & e, binomials < C > &bins, int v)
295  {
296  const int *esz = e.szs ();
297  const int *est = e.str ();
298  int i, j;
299  for (i = 0; i < e.sz (); i += est[v - 1])
300  for (j = i; j < i + est[v];
301  convertb2m (data + j, esz[v], est[v], bins), j++) ;
302  };
303 
305  template < class C, class eenv >
306  void convertb2m (C * data, const eenv & env, binomials < C > &bins)
307  {
308  for (int v = 0; v < env.nvr (); convertb2m (data, env, bins, v++)) ;
309  };
310 
311 
312 
313 
314 
315  template<typename C> inline
316  void diff( C * b, const C * a, unsigned sz, int sb, int sa )
317  {
318  assert(sa==sb);
319  for ( unsigned i = 1; i < sz; i ++ ) { b[(i-1)*sb] = i*a[i]; };
320  // for ( unsigned i = 1, a += sa; i < sz; *b = *a*i++, b += sb, a += sa ) ;
321  };
322 
323  template<typename C> inline /* differentiation */
324  void diff( C * b, C * e, C const * a, int s )
325  {
326  unsigned i;
327  for ( i = 1, a += s; b != e; *b = *a*i++, b += s, a += s ) ;
328  };
329 
330  template<typename C> inline /* differentiation */
331  void diff( C * b, C * e, C const * a )
332  {
333  for ( int i = 1; b != e; *b++ = *(++a)*i++ ) ;
334  };
335 
336 
337  template<typename C>
338  void m_diff( C * op, const eenv& o, C const * ap, const eenv& a, int v )
339  {
340  typedef int sz_t;
341  sz_t is = 0;
342  for ( sz_t i = 0; i < o.sz(); i += o.st(v-1), is += a.st(v-1) )
343  for ( sz_t j = 0; j < a.st(v); j ++ )
344  diff(op+i+j, ap+is+j,a.sz(v), o.st(v), a.st(v)) ;
345  };
346 
347  template<typename C>
348  void mdiff( C * dst, const eenv& a, C const * const src, const eenv& esrc, int v )
349  {
350  const int ssz = esrc.sz ();
351  // const int * sszs = a.szs();
352  const int * sstr = esrc.str();
353  int rst = sstr[v-1]-sstr[v];
354  unsigned i;
355  C * ed, * fd;
356  const C * es, * fs;
357  for ( ed = dst, es = src; es < src+ssz; ed += rst, es += sstr[v-1] )
358  for ( i = 1, fd = ed, fs = es+sstr[v]; fs != es+sstr[v-1]; fd += sstr[v], fs += sstr[v], i ++ )
359  vct::scmul(fd,fd+sstr[v],fs,C(i));
360  }
361 
362 
363 
364  template<typename C>
365  static void bdiff( C * dst, const eenv& a, C const * const src, int v )
366  {
367  const int ssz = a.sz ();
368  const int * sszs = a.szs();
369  const int * sstr = a.str();
370  int rst = sstr[v-1]-sstr[v];
371  // unsigned i;
372  C * ed; const C * es;
373  for ( ed = dst, es = src; es < src+ssz; ed += rst, es += sstr[v-1] )
374  {
375  C * fd; const C * fs;
376  for ( fs = es, fd = ed; fs < es + sstr[v]; fs++, fd ++ )
377  {
378  C * dp; const C * p;
379  for ( p = fs, dp = fd; p < fs+rst; p += sstr[v], dp += sstr[v] )
380  *dp = (*(p+sstr[v])-*p)*(sszs[v]-1);
381  };
382  };
383  }
384 
385  template<class C, class T> inline
386  void bsplit_uloop( C * r, C * rlast, C * l, const T& t, int st )
387  {
388  C * er, * p;
389  for ( er = rlast - st ; er != r; er -= st, l += st )
390  {
391  *l = *r;
392  for ( p = r; p != er; p += st )
393  *p = (1.0-t)**p+t**(p+st);
394  };
395  *l = *r;
396  };
397 
398  template < class C, class eenv, class T> inline
399  void bsplit (C * l, C * r, const eenv & env, const T & t, int v )
400  {
401  // const int *sszs = env.szs ();
402  const int *sstr = env.str ();
403  // int i, j, k;
404  C *er,*el;
405  for ( el = l, er = r; el != l + sstr[-1]; el += sstr[v-1], er += sstr[v-1] )
406  {
407  C *fr,*fl;
408  for ( fl = el, fr = er; fl != el + sstr[v]; fl++, fr++ )
409  bsplit_uloop(fr,fr+sstr[v-1],fl,t,sstr[v]) ;
410  };
411  };
412 
413 
414  template<class C> inline
415  void bsplit2_uloop( C * r, C * rlast, C * l, int st )
416  {
417  C * er, * p;
418  for ( er = rlast - st ; er != r; er -= st, l += st )
419  {
420  *l = *r;
421  for ( p = r; p != er; p += st )
422  *p = (*p+*(p+st))/C(2);
423  };
424  *l = *r;
425  };
426 
427  template < class C, class eenv >
428  void bsplit2 (C * l, C * r, const eenv & env, int v )
429  {
430  // const int *sszs = env.szs ();
431  const int *sstr = env.str ();
432  C *er,*el;
433  for ( el = l, er = r; el != l + sstr[-1]; el += sstr[v-1], er += sstr[v-1] )
434  {
435  C *fr,*fl;
436  for ( fl = el, fr = er; fl != el + sstr[v]; fl++, fr++ )
437  bsplit2_uloop(fr,fr+sstr[v-1],fl,sstr[v]);
438  };
439  };
440 
441 
442  template<class C,class T> inline
443  void brestrict_uloop( C * r, C * rlast, int st, const T& a, const T& b )
444  {
445  C * er, * p;
446  for ( er = rlast - st ; er != r; er -= st )
447  for ( p = r; p != er; p += st )
448  *p = (a**p+b**(p+st));
449  };
450 
451 
452 
453  template<class C, class T> inline
454  void brestrictLR (C * s, const eenv & env, int v, const T& a, const T& b, const T& c, const T& d )
455  {
456  // std::cout << a << " " << b << std::endl;
457  // std::cout << c << " " << d << std::endl;
458  // const int *sszs = env.szs ();
459  const int *sstr = env.str ();
460  // int i, j, k;
461  for ( C * es = s; es != s + sstr[-1]; es += sstr[v-1] )
462  for ( C * fs = es; fs != es + sstr[v]; fs ++ )
463  {
464  brestrict_uloop(fs,fs+sstr[v-1],sstr[v],a,b);
465  brestrict_uloop(fs+sstr[v-1]-sstr[v],fs-sstr[v],-sstr[v],c,d);
466  };
467  };
468 
469  template<class C, class T> inline
470  void brestrictRL (C * s, const eenv & env, int v, const T& a, const T& b, const T& c, const T& d )
471  {
472  // std::cout << a << " " << b << std::endl;
473  // std::cout << c << " " << d << std::endl;
474 
475 
476 
477  // const int *sszs = env.szs ();
478  const int *sstr = env.str ();
479  // int i, j, k;
480  for ( C * es = s; es != s + sstr[-1]; es += sstr[v-1] )
481  for ( C * fs = es; fs != es + sstr[v]; fs ++ )
482  {
483  brestrict_uloop(fs+sstr[v-1]-sstr[v],fs-sstr[v],-sstr[v],c,d);
484  brestrict_uloop(fs,fs+sstr[v-1],sstr[v],a,b);
485  };
486  };
487 
488  template<class C, class eenv, class T > inline
489  void brestrict( C * src, const eenv& env, int v, const T& a, const T& b )
490  {
491  brestrictLR ( src, env, v, T(1-a), a, T((b-a)/(T(1)-a)), T((T(1)-b)/(T(1)-a)) );
492  };
493 
494 
495  template<class C>
496  void lface( C * dst, const eenv& a, const C * src, int v )
497  {
498  const int ssz = a.sz ();
499  // const int * sszs = a.szs();
500  const int * sstr = a.str();
501 
502  C * ed; const C * es;
503  const C * fs;
504  for ( ed = dst, es = src; es < src+ssz; es += sstr[v-1] )
505  for ( fs = es; fs < es + sstr[v]; *ed++ = *fs++ ) ;
506  };
507 
508  template<class C>
509  void rface( C * dst, const eenv& a, const C * src, int v )
510  {
511  const int ssz = a.sz ();
512  // const int * sszs = a.szs();
513  const int * sstr = a.str();
514 
515  C * ed; const C * es;
516  const C * fs;
517  es = src + sstr[v-1]-sstr[v];
518  for ( ed = dst; es < src+ssz; es += sstr[v-1] )
519  {
520  for ( fs = es; fs < es + sstr[v]; *ed++ = *fs++ ) ;
521  };
522  };
523 
524  template<class C>
525  void slice( C * dst, const eenv& a, const C * src, int v, int n)
526  {
527  const int ssz = a.sz ();
528  const int * sstr = a.str();
529 
530  C * ed; const C * es;
531  const C * fs;
532  es = src + sstr[v-1]-sstr[v];
533  for ( ed = dst; es < src+ssz; es += sstr[v-1] )
534  {
535  // fs = es + sstr[v-1] - sstr[v];
536  for ( fs = es; fs < es + sstr[v]; *ed++ = *fs++ ) ;
537  };
538  };
539 
540  template<class C, class X, class O, class eenv >
541  void mpolfill( C * data, const sparse::monomial_seq<X,O>& mpol, const eenv& env )
542  {
543  const int *vr = env.vrs ();
544  const int *st = env.str ();
545  const int nvr = env.nvr();
546  typename sparse::monomial_seq<X,O>::const_iterator it;
547  C c;
548  for (it =mpol.begin (); it != mpol.end (); it++)
549  {
550  int a = 0;
551  for (int v = 0; v < nvr; a += (*it)[vr[v]] * st[v], v++) ;
552  let::assign(c,(*it).coeff ());
553  data[a] += c;
554  };
555  }
556 }
557 
558 } //namespace mmx
559 #endif
void inverses(A *a, A *ea)
Definition: tensor_vctops.hpp:476
void hevalm(R &result, const C *data, const eenv &env, const P &p)
Definition: tensor_eenv_loops.hpp:45
void hhorner(O &o, C const *const c, unsigned n, const I &i, const I &i0, int s=1)
Definition: tensor_vctops.hpp:436
void brestrictRL(C *s, const eenv &env, int v, const T &a, const T &b, const T &c, const T &d)
Definition: tensor_eenv_loops.hpp:470
void bsplit2(C *l, C *r, const eenv &env, int v)
Definition: tensor_eenv_loops.hpp:428
void bsplit(C *l, C *r, const eenv &env, const T &t, int v)
Definition: tensor_eenv_loops.hpp:399
void uscale(bernstein< C > &mpl)
Definition: tensor_bernstein_fcts.hpp:20
const C & b
Definition: Interval_glue.hpp:25
int * szs()
Definition: tensor_eenv_fcts.hpp:12
MP swap(const MP &P, int var_i, int var_j)
Definition: sparse_monomials.hpp:988
void m_diff(C *op, const eenv &o, C const *ap, const eenv &a, int v)
Definition: tensor_eenv_loops.hpp:338
void ibinoms(C *data, const eenv &env, binomials< C > &binms)
Definition: tensor_eenv_loops.hpp:195
void copy(A *a, const B *b, unsigned n)
Definition: tensor_vctops.hpp:140
int * vrs()
Definition: tensor_eenv_fcts.hpp:18
void vswap(C *data, const eenv &env, int *perm, int *supp=0, int nsupp=0)
Definition: tensor_eenv_loops.hpp:142
int * str()
Definition: tensor_eenv_fcts.hpp:21
void slice(C *dst, const eenv &a, const C *src, int v, int n)
Definition: tensor_eenv_loops.hpp:525
Definition: tensor_eenv.hpp:9
void mdiff(C *dst, const eenv &a, C const *const src, const eenv &esrc, int v)
Definition: tensor_eenv_loops.hpp:348
tensor::eenv eenv
Definition: tensor_convert.hpp:12
int nvr() const
number of variables
Definition: tensor_eenv_fcts.hpp:9
TMPL void copy(Polynomial &r, const Polynomial &a)
Copy of a in r.
Definition: sparse_monomials.hpp:613
void pmul(A *a, const B *b, int sz, int sta=1, int stb=1)
Definition: tensor_vctops.hpp:38
void brestrict(C *src, const eenv &env, int v, const T &a, const T &b)
Definition: tensor_eenv_loops.hpp:489
void binoms(bernstein< C > &mpl)
Definition: tensor_bernstein_fcts.hpp:9
Definition: polynomial.hpp:37
void vswap(int *perm)
int sz() const
return the total number of coefficients of the dense representation
Definition: tensor_eenv_fcts.hpp:16
void bsplit_uloop(C *r, C *rlast, C *l, const T &t, int st)
Definition: tensor_eenv_loops.hpp:386
void maxs(OutputIterator _maxs_, const C *data, const eenv &env, int v)
Definition: tensor_eenv_loops.hpp:106
void levalm(R &result, const C *data, const eenv &env, const P &p)
Definition: tensor_eenv_loops.hpp:20
TMPL Polynomial diff(const Polynomial &p, int v)
Definition: tensor_bernstein.hpp:79
void decasteljau(real_t *r, unsigned sz, const value_t &t, int str=1)
Definition: tensor_eenv_loops.hpp:70
Definition: binomials.hpp:68
void mpolfill(C *data, const sparse::monomial_seq< X, O > &mpol, const eenv &env)
Definition: tensor_eenv_loops.hpp:541
const C & c
Definition: Interval_glue.hpp:45
double C
Definition: solver_mv_fatarcs.cpp:16
void convertm2b(bernstein< C > &mpl)
Definition: tensor_bernstein_fcts.hpp:31
void pdiv(A *a, const B *b, unsigned sz, int sta=1, int stb=1)
Definition: tensor_vctops.hpp:50
int st(int v) const
return the stride for variable v
Definition: tensor_eenv_fcts.hpp:24
void brestrict_uloop(C *r, C *rlast, int st, const T &a, const T &b)
Definition: tensor_eenv_loops.hpp:443
void lface(bernstein< C > &f, const bernstein< C > &src, int v)
Definition: tensor_bernstein_fcts.hpp:354
void bsplit2_uloop(C *r, C *rlast, C *l, int st)
Definition: tensor_eenv_loops.hpp:415
void assign(A &a, const B &b)
Generic definition of the assignement function.
Definition: assign.hpp:97
void convertb2m(monomials< C > &mpl)
Definition: tensor_bernstein_fcts.hpp:26
void levalb(R &result, const C *data, const eenv &env, const P &p)
Definition: tensor_eenv_loops.hpp:80
void scale(bernstein< C > &mpl)
Definition: tensor_bernstein_fcts.hpp:14
void horner(O &o, C const *const c, unsigned n, const I &i, int s=1)
Definition: tensor_vctops.hpp:420
Definition: array.hpp:12
void rface(bernstein< C > &f, const bernstein< C > &src, int v)
Definition: tensor_bernstein_fcts.hpp:361
void scmul(A *a, const B &b, unsigned n, int s=1)
Definition: tensor_vctops.hpp:98
void mins(OutputIterator _mins_, const C *data, const eenv &env, int v)
Definition: tensor_eenv_loops.hpp:123
void brestrictLR(C *s, const eenv &env, int v, const T &a, const T &b, const T &c, const T &d)
Definition: tensor_eenv_loops.hpp:454
#define assert(expr, msg)
Definition: shared_object.hpp:57
Home