29 #ifndef _CHAINCON_EZ_SHI_H_    30 #define _CHAINCON_EZ_SHI_H_    38 #include "chomp/system/config.h"    54 template <
class SimCellT, 
class ProdCellT>
    55 inline void EZ_SHI (
const SimCellT &s1, 
const SimCellT &s2,
    60                 throw "Different dimensions of cells for the SHI operator.";
    62         for (
int q = 0; q < m; ++ q)
    64                 for (
int p = 0; p < m - q; ++ p)
    67                         std::vector<int> alpha (p + 1);
    68                         std::vector<int> beta (q);
    76                                         sh. 
get (alpha, beta, sig);
    80                                 for (
int i = 0; i < q; ++ i)
    82                                         SimCellT cell1new (cell1, m - i);
    83                                         cell1. swap (cell1new);
    86                                         SimCellT cell1new (cell1,
    88                                         cell1. swap (cell1new);
    90                                 for (
int i = 0; i < q; ++ i)
    92                                         SimCellT cell1new (cell1,
    93                                                 -1 - (beta [i] + mBar));
    94                                         cell1. swap (cell1new);
    97                                 for (
int i = 0; i < p; ++ i)
    99                                         SimCellT cell2new (cell2,
   101                                         cell2. swap (cell2new);
   103                                 for (
int i = 0; i <= p; ++ i)
   105                                         SimCellT cell2new (cell2,
   106                                                 -1 - (alpha [i] + mBar));
   107                                         cell2. swap (cell2new);
   111                                 ProdCellT prod (cell1, cell2);
   112                                 if (!prod. degenerate ())
   126 template <
class SimCellT, 
class ProdCellT, 
class CoefT>
   127 inline void EZ_SHI (
const SimCellT &s1, 
const SimCellT &s2,
   134                 throw "Different dimensions of cells for the SHI operator.";
   136         for (
int q = 0; q < m; ++ q)
   138                 for (
int p = 0; p < m - q; ++ p)
   141                         std::vector<int> alpha (p + 1);
   142                         std::vector<int> beta (q);
   146                                 int mBar (m - p - q);
   150                                         sh. 
get (alpha, beta, sig);
   154                                 for (
int i = 0; i < q; ++ i)
   156                                         SimCellT cell1new (cell1, m - i);
   157                                         cell1. swap (cell1new);
   160                                         SimCellT cell1new (cell1,
   162                                         cell1. swap (cell1new);
   164                                 for (
int i = 0; i < q; ++ i)
   166                                         SimCellT cell1new (cell1,
   167                                                 -1 - (beta [i] + mBar));
   168                                         cell1. swap (cell1new);
   171                                 for (
int i = 0; i < p; ++ i)
   173                                         SimCellT cell2new (cell2,
   175                                         cell2. swap (cell2new);
   177                                 for (
int i = 0; i <= p; ++ i)
   179                                         SimCellT cell2new (cell2,
   180                                                 -1 - (alpha [i] + mBar));
   181                                         cell2. swap (cell2new);
   186                                 if ((mBar + sig) & 1)
   190                                 ProdCellT prod (cell1, cell2);
   191                                 if (!prod. degenerate ())
   212 template <
class ProdCellT>
   215         EZ_SHI (s. getLeft (), s. getRight (), t);
   221 template <
class ProdCellT, 
class CoefT>
   224         EZ_SHI (s. getLeft (), s. getRight (), t);
   233 template <
class ProdCellT>
   237         for (int_t n = 0; n < s. size (); ++ n)
   240                 EZ_SHI (s. getCell (n), result);
   248 template <
class ProdCellT, 
class CoefT>
   252         for (int_t n = 0; n < s. size (); ++ n)
   255                 EZ_SHI (s. getCell (n), result);
   256                 result *= s. getCoef (n);
   264 #endif // _CHAINCON_EZ_SHI_H_ 
An iterator of all the (p,q)-shuffles. 
 
A Cartesian product of simplicial cells of arbitrary type. 
 
A chain with coefficients in an arbitrary ring. 
 
A tensor of chains with coefficients in an arbitrary commutative ring. 
 
void EZ_SHI(const SimCellT &s1, const SimCellT &s2, tCombChain< ProdCellT > &t)
Computes the Shih operator on a product of two simplicial cells. 
 
A combinatorial tensor (for coefficients in Z_2).