| realroot_doc 0.1.1 | 
#include <tensor_eenv.hpp>
Definition at line 9 of file tensor_eenv.hpp.
| eenv | ( | ) |  [inline] | 
constructors
Definition at line 72 of file tensor_eenv.hpp.
Referenced by eenv::common(), and eenv::eenv().
: data(0) {};
| eenv | ( | const sparse::monomial_seq< C, O > & | mpl | ) |  [inline] | 
Definition at line 435 of file tensor_eenv_fcts.hpp.
References vd::d, eenv::eenv(), mmx::tensor::mescan(), vd::n, mmx::nbvar(), eenv::nvr(), eenv::szs(), and eenv::vrs().
  {
    int nvr = nbvar (mpol);
    vd lenv[nvr];
    int last = -1;
    typename sparse::monomial_seq < C, O >::const_iterator it;
    for (it = mpol.begin (); it != mpol.end (); mescan (last, lenv, *it++)) ;
    if ( last == -1 ) 
      { 
        nvr = 1; int szs = 1; 
        new (this) eenv(1,&szs,0);
        return; 
      };
    int c = last;
    nvr = 0;
    do
      {
        c = lenv[c].n;
        nvr++;
      }
    while (c != last);
    int vrs[nvr];
    int szs[nvr];
    c = last;
    int k = 0;
    do
      {
        vrs[k] = c;
        szs[k] = lenv[c].d + 1;
        c = lenv[c].n;
        lenv[vrs[k]].n = -1;
        lenv[vrs[k]].d = 0;
        k++;
      }
    while (c != last);
    new (this) eenv (nvr, szs, vrs );
  };
| eenv | ( | int * | data | ) | 
| eenv | ( | int | nvr_, | 
| int const * | szs_ = 0, | ||
| int const * | vrs_ = 0, | ||
| int * | mem = 0 | ||
| ) |  [inline] | 
create an allocated but uninitialized environement sizes and names given by szs_ and vrs_
Definition at line 151 of file tensor_eenv_fcts.hpp.
References eenv::construct().
| ~eenv | ( | ) |  [inline] | 
| int * alloc | ( | int | nvr_ | ) |  [inline] | 
Definition at line 33 of file tensor_eenv_fcts.hpp.
References eenv::data, and eenv::msz().
Referenced by eenv::cdup(), and eenv::construct().
| eenv & cdup | ( | ) |  [inline] | 
Definition at line 95 of file tensor_eenv_fcts.hpp.
References eenv::alloc(), eenv::copy(), eenv::data, eenv::msz(), and eenv::nvr().
Referenced by eenv::szs().
Definition at line 211 of file tensor_eenv_fcts.hpp.
References eenv::cstr(), eenv::eenv(), eenv::hasvar(), mmx::max(), eenv::mrgvrs(), eenv::nvr(), eenv::szs(), and eenv::vrs().
Referenced by mmx::tensor::add(), and mmx::tensor::sub().
  {
      if ( a == b ) return eenv(a);
    int v, lva, lvb;
    eenv oenv (mrgvrs (a, b));
    const int *ovr = oenv.vrs ();
    const int *aszs = a.szs ();
    const int *bszs = b.szs ();
    int *oszs = oenv.szs ();
    for (v = 0; v < oenv.nvr (); v++)
      {
        if (a.hasvar (lva, ovr[v]))
          {
            if (b.hasvar (lvb, ovr[v]))
              {
                oszs[v] = std::max(aszs[lva], bszs[lvb]);
              }
            else
              oszs[v] = aszs[lva];
          }
        else
          {
            if (b.hasvar (lvb, ovr[v]))
              oszs[v] = bszs[lvb];
            else
              std::cout << "erreur dans common\n";
          };
      };
    oenv.cstr ();
    return oenv;
  };
| void construct | ( | int | nvr_, | 
| int const * | szs_, | ||
| int const * | vrs_, | ||
| int * | mem | ||
| ) |  [inline] | 
Definition at line 40 of file tensor_eenv_fcts.hpp.
References eenv::alloc(), eenv::copy(), eenv::cstr(), eenv::data, eenv::msz(), and eenv::nvr().
Referenced by eenv::eenv().
  {
#ifdef EENV_DEBUG
    std::cout << "eenv::construct begin\n";
    std::cout <<nvr_<<" "<<mem<<" "<<msz (nvr_)<<std::endl;
#endif
    data = (mem==0)?alloc(nvr_):mem;
    data[0] = 1; 
    data[1] = nvr_;
    if (vrs_)
      {
        std::pair<int,int> tmp[ nvr_ ];
        for ( int i = 0; i < nvr_; i ++ ) { 
          tmp[i].first  = vrs_[i]; 
          tmp[i].second = szs_[i]; 
        }
        std::sort(tmp,tmp+nvr_);
        for ( int i = 0; i < nvr(); i ++ ) { 
          data[2+nvr()+i] = tmp[i].first;    // vrs()[i] = tmp[i].first; 
          data[2+i] = tmp[i].second;   // szs()[i] = tmp[i].second; 
        };
        cstr ();
      }
    else
      if (szs_)
        {
          std::copy (szs_, szs_ + nvr_, data+2); //szs();
          cstr ();
          /*gcc-bug       for (int v = 0; v < nvr (); vrs()[v] = v ++ ); */
          for (int v = 0; v < nvr () ; data[2+nvr()+v] = v, v++ ) ;
        };
  };
Definition at line 85 of file tensor_eenv_fcts.hpp.
References eenv::data, and eenv::dealloc().
Referenced by eenv::cdup(), eenv::construct(), eenv::mrgvrs(), and eenv::operator=().
  {    
    //    std::cout<<"copy"<<std::endl;
    e.dealloc ();
    e.data = b.data;
    if (e.data)
      e.data[0]++;
    return e;
  };
| void cstr | ( | ) |  [inline] | 
Definition at line 117 of file tensor_eenv_fcts.hpp.
References eenv::data, eenv::nvr(), and eenv::szs_data().
Referenced by eenv::common(), eenv::construct(), eenv::diff(), eenv::mul(), and eenv::rewrite().
  {
#ifdef EENV_DEBUG
    std::cout << "eenv::cstr()" << std::endl;
#endif
    int i, s = 2+2*nvr()+1;//* _st(str());
    const int *_sz(szs_data()); //data+2
    for ( i = nvr()-2, data[s+nvr()-1] = 1; i >= -1; data[s+i]=_sz[i+1]*data[s+i+1], i-- ) ;
#ifdef EENV_DEBUG
    std::cout << (*this) << std::endl;
#endif
    //    std::cout << "esz= " << _st[-1] << std::endl;
  };
| void cvrs | ( | ) | 
| void dealloc | ( | ) |  [inline] | 
Definition at line 83 of file tensor_eenv_fcts.hpp.
References eenv::data.
Referenced by eenv::copy(), eenv::new_copy(), and eenv::~eenv().
Definition at line 270 of file tensor_eenv_fcts.hpp.
References eenv::cstr(), mmx::max(), eenv::new_copy(), and eenv::szs().
Referenced by mmx::tensor::diff().
  {
    //    const int * bszs = b.szs();
    eenv oenv; eenv::new_copy(oenv,b);
    int *oszs = oenv.szs();
    oszs[lv] = std::max (oszs[lv] - 1, 1);
    oenv.cstr ();
    return oenv;
  };
Definition at line 366 of file tensor_eenv_fcts.hpp.
References eenv::hasvar(), eenv::nvr(), eenv::szs(), and eenv::vrs().
Referenced by mmx::tensor::rewrite().
  {
    int nszs[o.nvr ()];
    const int * ovrs = o.vrs();
    const int * oszs = o.szs ();
    const int * iszs = i.szs ();
    int lv;
    for (int v = 0; v < o.nvr (); v++)
      if (i.hasvar (lv, ovrs[v]))
        nszs[v] = oszs[v] - iszs[lv] + 1;
      else
        nszs[v] = oszs[v];
    eenv tmp(o.nvr (), nszs, o.vrs ());
    //    std::cout << " tmp = " << tmp << std::endl;
    return tmp;
  };
Definition at line 74 of file tensor_eenv_fcts.hpp.
References eenv::data, and eenv::nvr().
Referenced by eenv::equiv(), eenv::operator!=(), monomials< C >::operator==(), eenv::operator==(), and mmx::tensor::realloc().
  {
        if (a.data == b.data)     return true;
        
        for (int i = 1; i < 2 + 2 * a.nvr (); i++)
            if (a.data[i] != b.data[i]) return false;
        return true;
  };
Definition at line 474 of file tensor_eenv_fcts.hpp.
References eenv::equal().
  {
    return equal(a,b);
  };
| bool hasvar | ( | int & | lv, | 
| int | gv | ||
| ) | const  [inline] | 
return true if gv is in the variable set lv is the corresponding local name.
Definition at line 131 of file tensor_eenv_fcts.hpp.
References eenv::nvr(), and eenv::vrs().
Referenced by eenv::common(), eenv::elevation(), eenv::mul(), eenv::subset(), mmx::tensor::varindex(), and eenv::vmap().
  {
    int g, d, m;
    const int * _vr = vrs();
    if ((gv < _vr[0]) || (gv > _vr[(d=nvr())-1])) return false;
    if ( gv == _vr[g = 0] ) { lv = 0; return true; };
    if ( gv == _vr[d=nvr()-1]) { lv = nvr()-1; return true;};
    do
      {
        m = (g + d) / 2;
        if ( _vr[m]  == gv ) { lv = m; return true; };
        if ( _vr[m] < gv ) g = m; else d = m;
      }
    while (d - g > 1);
    return false;
  };
| int localv | ( | int | i | ) | const  [inline] | 
Definition at line 61 of file tensor_eenv.hpp.
Referenced by mmx::tensor::face(), mmx::tensor::slice(), and mmx::tensor::split().
{ return i; };
| int mnvr | ( | ) | const  [inline] | 
Definition at line 162 of file tensor_eenv_fcts.hpp.
References eenv::copy(), eenv::nvr(), and eenv::vrs().
Referenced by eenv::common(), and eenv::mul().
  {
    
    unsigned c = 0;
    int va, vb;
    int prv = (int) (-1);
    int anvr = a.nvr ();
    int bnvr = b.nvr ();
    const int * avr = a.vrs();
    const int * bvr = b.vrs() ;
    //const eenv::vr_t * agvr = a.gvr ();
    // const eenv::vr_t * bgvr = b.gvr ();
    int tmp[anvr + bnvr];
    c = va = vb = 0;
    do
      {
        if ( avr[va] <= bvr[vb] )
          {
            if ( avr[va] != prv ) tmp[c++] = prv = avr[va];
            va++;
            continue;
          };
        if ( bvr[vb] < avr[va] )
          {
            if ( bvr[vb] != prv ) tmp[c++] = prv = bvr[vb];
            vb++;
            continue;
          };
      }
    while (va < anvr && vb < bnvr);
    if (va < anvr) for (; va < anvr; va++)
      if ( avr[va] != prv ) tmp[c++] = avr[va];
    
    if (vb < bnvr) for (; vb < bnvr; vb++)
      if ( bvr[vb] != prv ) tmp[c++] = bvr[vb];
    
    eenv oenv (c);
    std::copy(tmp,tmp+oenv.nvr(),oenv.vrs());
    return oenv;
  };
| int msz | ( | int | nvr_ | ) |  [inline, static] | 
Definition at line 28 of file tensor_eenv_fcts.hpp.
Referenced by eenv::new_copy().
{ return 1 + 1 + nvr_ + nvr_ + nvr_ + 1 + 2 * nvr_; };
| int msz | ( | ) | const  [inline] | 
memory size used by the eenv representation in bytes.
Definition at line 29 of file tensor_eenv_fcts.hpp.
References eenv::nvr().
Referenced by eenv::alloc(), eenv::cdup(), and eenv::construct().
Definition at line 246 of file tensor_eenv_fcts.hpp.
References eenv::cstr(), eenv::hasvar(), eenv::mrgvrs(), eenv::nvr(), eenv::szs(), and eenv::vrs().
Referenced by mmx::tensor::conv().
  {
    int v, lva, lvb;
    eenv oenv (mrgvrs (a, b));
    //  std::cout << " mrgvrs = " << oenv << std::endl;
    int *oszs = oenv.szs ();
    const int *ovrs = oenv.vrs ();
    const int *aszs = a.szs ();
    const int *bszs = b.szs ();
    for (v = 0; v < oenv.nvr (); v++)
      {
        oszs[v] = 0;
        if (a.hasvar (lva, ovrs[v]))
          oszs[v] += aszs[lva] - 1;
        if (b.hasvar (lvb, ovrs[v]))
          oszs[v] += bszs[lvb] - 1;
        oszs[v]++;
      };
    oenv.cstr ();
    return oenv;
  };
| int mxvr | ( | ) | const  [inline] | 
Definition at line 67 of file tensor_eenv.hpp.
References eenv::nvr(), and eenv::vrs().
Referenced by mmx::tensor::convert(), mmx::tensor::print(), and mmx::tensor::print_flatten().
Definition at line 108 of file tensor_eenv_fcts.hpp.
References eenv::data, eenv::dealloc(), eenv::msz(), and eenv::sz().
Referenced by eenv::diff().
| int nvr | ( | ) | const  [inline] | 
number of variables
Definition at line 9 of file tensor_eenv_fcts.hpp.
References eenv::data.
Referenced by mmx::tensor::binoms(), eenv::cdup(), eenv::common(), eenv::construct(), mmx::tensor::convertb2m(), mmx::tensor::convertm2b(), eenv::cstr(), eenv::eenv(), eenv::elevation(), eenv::equal(), mmx::tensor::face_env(), eenv::hasvar(), mmx::tensor::hevalm(), mmx::tensor::levalb(), mmx::tensor::levalm(), mmx::tensor::mpolfill(), eenv::mrgvrs(), eenv::msz(), eenv::mul(), eenv::mxvr(), monomials< C >::nbvar(), monomials< C >::nvr(), eenv::oaddress(), mmx::tensor::operator<<(), mmx::tensor::restrict(), eenv::rewrite(), mmx::tensor::scale(), eenv::str(), eenv::subset(), mmx::tensor::uscale(), eenv::vmap(), eenv::vridx(), eenv::vrs(), and mmx::tensor::vswap().
{ return data[1]; };
| bool oaddress | ( | const eenv & | oenv, | 
| unsigned * | osupp, | ||
| const eenv & | ienv, | ||
| unsigned * | isupp = 0, | ||
| unsigned | nsp = 0 | ||
| ) |  [inline, static] | 
addresses translation from environment i to environment o
Definition at line 295 of file tensor_eenv_fcts.hpp.
References eenv::nvr(), eenv::st(), eenv::str(), eenv::sz(), and eenv::vmap().
Referenced by mmx::tensor::add(), mmx::tensor::conv(), mmx::tensor::extend(), monomials< C >::operator==(), mmx::tensor::sub(), mmx::tensor::waddm(), and mmx::tensor::wsubm().
  {
    //  std::cout << oenv << std::endl;
    //  std::cout << ienv << std::endl;
    int v;
    unsigned c;
    int vmap_[ienv.nvr ()];
    unsigned addi, addo;
    if (!vmap (vmap_, oenv, ienv))
      return false;
    if (isupp)
      for (c = 0; c < nsp; osupp[c] = addo, c++)
        for (addi = isupp[c], addo = 0, v = ienv.nvr () - 1; addi;
             addi /= ienv.sz (v), v--)
          addo += (addi % ienv.sz (v)) * oenv.st (vmap_[v]);
    else
      {
        const int *istr = ienv.str ();
        const int *ostr = oenv.str ();
        osupp[0] = 0;
        for (v = 0; v < ienv.nvr (); v++)
          for (int j = 0; j < istr[-1]; j += istr[v - 1])
            for (int i = j + istr[v]; i < j + istr[v - 1]; i += istr[v])
              osupp[i] = osupp[i - istr[v]] + ostr[vmap_[v]];
      };
    return true;
  };
| bool operator!= | ( | const eenv & | a | ) | const  [inline] | 
Definition at line 361 of file tensor_eenv_fcts.hpp.
References eenv::equal().
  {
    return !eenv::equal (*this, e);
  };
| bool operator< | ( | const eenv & | b | ) | const  [inline] | 
Definition at line 31 of file tensor_eenv_fcts.hpp.
References eenv::sz().
{ return sz () < b.sz (); };
Definition at line 161 of file tensor_eenv_fcts.hpp.
References eenv::copy().
{ return copy (*this, e); };
| bool operator== | ( | const eenv & | a | ) | const  [inline] | 
Definition at line 356 of file tensor_eenv_fcts.hpp.
References eenv::equal().
  {
    return eenv::equal (*this, e);
  };
Definition at line 480 of file tensor_eenv_fcts.hpp.
References eenv::cstr(), eenv::nvr(), eenv::szs(), and eenv::vmap().
| int st | ( | int | v | ) | const  [inline] | 
return the stride for variable v
Definition at line 24 of file tensor_eenv_fcts.hpp.
References eenv::str().
Referenced by mmx::tensor::m_diff(), and eenv::oaddress().
{ return str ()[v]; };
| const int * str | ( | ) | const  [inline] | 
point to an array representing the stride for each variable
Definition at line 22 of file tensor_eenv_fcts.hpp.
References eenv::nvr(), and eenv::vrs().
| int * str | ( | ) |  [inline] | 
Definition at line 21 of file tensor_eenv_fcts.hpp.
References eenv::nvr(), and eenv::vrs().
Referenced by mmx::tensor::bdiff(), mmx::tensor::binoms(), mmx::tensor::brestrictLR(), mmx::tensor::brestrictRL(), mmx::tensor::bsplit(), mmx::tensor::bsplit2(), mmx::tensor::convertb2m(), mmx::tensor::convertm2b(), mmx::tensor::hevalm(), mmx::tensor::levalb(), mmx::tensor::levalm(), mmx::tensor::lface(), mmx::tensor::maxs(), mmx::tensor::mdiff(), mmx::tensor::mins(), mmx::tensor::mpolfill(), eenv::oaddress(), mmx::tensor::operator<<(), mmx::tensor::rface(), mmx::tensor::scale(), mmx::tensor::slice(), eenv::st(), monomials< C >::str(), eenv::sz(), mmx::tensor::uscale(), and mmx::tensor::vswap().
Definition at line 344 of file tensor_eenv_fcts.hpp.
References eenv::hasvar(), eenv::nvr(), eenv::szs(), and eenv::vrs().
Referenced by mmx::tensor::waddm(), and mmx::tensor::wsubm().
  {
    const int *avrs = a.vrs ();
    const int *aszs = a.szs ();
    const int *bszs = b.szs ();
    int lv;
    for (int i = 0; i < a.nvr (); i++)
      if ((!b.hasvar (lv, avrs[i])) || aszs[i] > bszs[lv])
        return false;
    return true;
  };
| void swap | ( | eenv & | e | ) |  [inline] | 
Definition at line 7 of file tensor_eenv_fcts.hpp.
References eenv::data.
| int sz | ( | ) | const  [inline] | 
return the total number of coefficients of the dense representation
Definition at line 16 of file tensor_eenv_fcts.hpp.
References eenv::str().
Referenced by mmx::tensor::bdiff(), mmx::tensor::binoms(), mmx::tensor::convertb2m(), mmx::tensor::convertm2b(), mmx::tensor::degree(), monomials< C >::esz(), mmx::tensor::eval(), mmx::tensor::hevalm(), mmx::tensor::ibinoms(), mmx::tensor::levalb(), mmx::tensor::levalm(), mmx::tensor::lface(), mmx::tensor::m_diff(), mmx::tensor::mdiff(), eenv::new_copy(), eenv::oaddress(), eenv::operator<(), mmx::tensor::operator<<(), mmx::tensor::rface(), mmx::tensor::scale(), monomials< C >::size(), mmx::tensor::slice(), and mmx::tensor::uscale().
{ return str ()[-1]; };
| int sz | ( | int | v | ) | const  [inline] | 
return the order for variable v
Definition at line 15 of file tensor_eenv_fcts.hpp.
References eenv::szs().
{ return szs ()[v]; };
| int * szs | ( | ) |  [inline] | 
Definition at line 12 of file tensor_eenv_fcts.hpp.
References eenv::cdup(), and eenv::data.
Referenced by mmx::tensor::bdiff(), mmx::tensor::binoms(), eenv::common(), mmx::tensor::convertb2m(), mmx::tensor::convertm2b(), mmx::tensor::degree(), eenv::diff(), eenv::eenv(), eenv::elevation(), mmx::tensor::face_env(), mmx::tensor::hevalm(), mmx::tensor::levalb(), mmx::tensor::levalm(), mmx::tensor::maxs(), mmx::tensor::mins(), eenv::mul(), mmx::tensor::operator<<(), eenv::rewrite(), mmx::tensor::scale(), eenv::subset(), eenv::sz(), monomials< C >::szs(), mmx::tensor::uscale(), eenv::vrs(), and mmx::tensor::vswap().
{ return cdup ().data + 2; };
| const int * szs | ( | ) | const  [inline] | 
point to an array representing the order for each variable
Definition at line 11 of file tensor_eenv_fcts.hpp.
References eenv::data.
{ return data + 2; };
| int * szs_data | ( | ) |  [inline] | 
Definition at line 13 of file tensor_eenv_fcts.hpp.
References eenv::data.
Referenced by eenv::cstr().
{ return data + 2; };
variable names translation from environment i to environment o
Definition at line 280 of file tensor_eenv_fcts.hpp.
References eenv::hasvar(), eenv::nvr(), and eenv::vr().
Referenced by eenv::oaddress(), and eenv::rewrite().
  {
    for (int v = 0; v < i.nvr (); v++)
      {
        int lv;
        if (!o.hasvar (lv, i.vr (v)))
          {
            return false;
          };
        vmap[v] = lv;
      };
    return true;
  };
| int vr | ( | int | lv | ) | const  [inline] | 
return the global id for variable lv
Definition at line 26 of file tensor_eenv_fcts.hpp.
References eenv::vrs().
Referenced by eenv::vmap().
{ return vrs ()[v]; };
| int vridx | ( | int | i | ) | const  [inline] | 
Definition at line 62 of file tensor_eenv.hpp.
References eenv::nvr(), and eenv::vrs().
Referenced by mmx::tensor::restrict().
| int * vrs | ( | ) |  [inline] | 
Definition at line 18 of file tensor_eenv_fcts.hpp.
References eenv::nvr(), and eenv::szs().
Referenced by eenv::common(), eenv::eenv(), eenv::elevation(), mmx::tensor::face_env(), eenv::hasvar(), eenv::mnvr(), mmx::tensor::mpolfill(), eenv::mrgvrs(), eenv::mul(), eenv::mxvr(), mmx::tensor::operator<<(), eenv::str(), eenv::subset(), eenv::vr(), eenv::vridx(), and monomials< C >::vrs().
| const int * vrs | ( | ) | const  [inline] | 
point to an array representing the global id for each variable
Definition at line 19 of file tensor_eenv_fcts.hpp.
References eenv::nvr(), and eenv::szs().
| void vswap | ( | int * | perm | ) | 
Referenced by mmx::tensor::vswap().
| std::ostream& operator<< | ( | std::ostream & | o, | 
| const eenv & | env | ||
| ) |  [friend] | 
Definition at line 325 of file tensor_eenv_fcts.hpp.
  {
    out << "*eenv*\n";
    out << "\tpos: " << env.data    << "\n";
    out << "\tref: " << env.data[0] << "\n";
    out << "\tnvr: " << env.nvr()   << "\n";
    out << "\tesz: " << env.sz ()   << "\n";
    out << "\tszs: ";
    vct::print (env.szs (), env.nvr (), 1, out);
    out << "\n";
    out << "\tvrs: ";
    vct::print (env.vrs (), env.nvr (), 1, out);
    out << "\n";
    out << "\tstr: ";
    vct::print (env.str (), env.nvr (), 1, out);
    return out;
  };
| int* data | 
Definition at line 37 of file tensor_eenv.hpp.
Referenced by eenv::alloc(), eenv::cdup(), eenv::construct(), eenv::copy(), eenv::cstr(), eenv::dealloc(), eenv::eenv(), eenv::equal(), eenv::new_copy(), eenv::nvr(), mmx::tensor::operator<<(), eenv::swap(), eenv::szs(), and eenv::szs_data().