27 #ifndef IPPL_TYPE_COMPUTATIONS_H
28 #define IPPL_TYPE_COMPUTATIONS_H
37 template<
class T,
unsigned D>
class Vektor;
38 template<
class T,
unsigned D>
class Tenzor;
40 template<
class T,
unsigned D>
class SymTenzor;
51 inline int sign(
T a) {
return ((a > 0) ? 1 : (a == 0 ? 0 : -1)); }
66 #ifdef IPPL_USE_SINGLE_PRECISION
74 #define _SCALAR_RNG_OP_RETURNS_(GEN,SCA,OP) \
76 struct PETEBinaryReturn<GEN,SCA,OP> { \
77 typedef PETEBinaryReturn<CTYPE,SCA,OP>::type type; \
80 struct PETEBinaryReturn<SCA,GEN,OP> { \
81 typedef PETEBinaryReturn<SCA,CTYPE,OP>::type type; \
84 #define _SCALAR_RNG_RETURNS_(GEN,SCA) \
85 _SCALAR_RNG_OP_RETURNS_(GEN,SCA,OpAdd) \
86 _SCALAR_RNG_OP_RETURNS_(GEN,SCA,OpSubtract) \
87 _SCALAR_RNG_OP_RETURNS_(GEN,SCA,OpMultipply) \
88 _SCALAR_RNG_OP_RETURNS_(GEN,SCA,OpDivide)
90 #define _PETE_RNG_RETURNS_(GEN) \
92 template <> struct PETE_Type2Index< GEN > { \
93 enum { val = PETE_Type2Index<CTYPE>::val }; \
96 _SCALAR_RNG_RETURNS_(GEN,short) \
97 _SCALAR_RNG_RETURNS_(GEN,int) \
98 _SCALAR_RNG_RETURNS_(GEN,long) \
99 _SCALAR_RNG_RETURNS_(GEN,float) \
100 _SCALAR_RNG_RETURNS_(GEN,double) \
101 _SCALAR_RNG_RETURNS_(GEN,dcomplex)
111 #if defined(IPPL_USE_PARTIAL_SPECIALIZATION)
115 template<
class T,
unsigned Dim>
120 template<
class T,
unsigned Dim>
125 template<
class T,
unsigned Dim>
130 template<
class T,
unsigned Dim>
382 #if !defined(IPPL_USE_PARTIAL_SPECIALIZATION)
639 FnAbs& operator=(
const FnAbs &) {
return *
this; }
677 FnArg& operator=(
const FnArg &) {
return *
this; }
751 FnDet& operator=(
const FnDet &) {
return *
this; }
774 #if defined(IPPL_USE_PARTIAL_SPECIALIZATION)
778 template<
class T,
unsigned Dim>
783 template<
class T,
unsigned Dim>
788 template<
class T,
unsigned Dim>
793 template<
class T,
unsigned Dim>
798 template<
class T,
unsigned Dim>
803 template<
class T,
unsigned Dim>
808 template<
class T,
unsigned Dim>
813 template<
class T,
unsigned Dim>
818 template<
class T,
unsigned Dim>
823 template<
class T,
unsigned Dim>
828 template<
class T,
unsigned Dim>
833 template<
class T,
unsigned Dim>
843 #define _UNARY_TENSOR_RETURNS_(T, D)
890 #undef _UNARY_TENSOR_RETURNS_
907 FnMin& operator=(
const FnMin &) {
return *
this; }
916 FnMax& operator=(
const FnMax &) {
return *
this; }
927 FnDot& operator=(
const FnDot &) {
return *
this; }
961 #if defined(IPPL_USE_PARTIAL_SPECIALIZATION)
968 template<
class T1,
class T2,
unsigned Dim>
973 template<
class T1,
class T2,
unsigned Dim>
978 template<
class T1,
class T2,
unsigned Dim>
985 template<
class T1,
class T2,
unsigned Dim>
990 template<
class T1,
class T2,
unsigned Dim>
995 template<
class T1,
class T2,
unsigned Dim>
1000 template<
class T1,
class T2,
unsigned Dim>
1007 template<
class T1,
class T2,
unsigned Dim>
1013 template<
class T1,
class T2,
unsigned Dim>
1018 template<
class T1,
class T2,
unsigned Dim>
1023 template<
class T1,
class T2,
unsigned Dim>
1028 template<
class T1,
class T2,
unsigned Dim>
1033 template<
class T1,
class T2,
unsigned Dim>
1038 template<
class T1,
class T2,
unsigned Dim>
1043 template<
class T1,
class T2,
unsigned Dim>
1048 template<
class T1,
class T2,
unsigned Dim>
1053 template<
class T1,
class T2,
unsigned Dim>
1058 template<
class T1,
class T2,
unsigned Dim>
1063 template<
class T1,
class T2,
unsigned Dim>
1068 template<
class T1,
class T2,
unsigned Dim>
1075 template<
class T1,
class T2,
unsigned Dim>
1081 template<
class T1,
class T2,
unsigned Dim>
1087 template<
class T1,
class T2,
unsigned Dim>
1092 template<
class T1,
class T2,
unsigned Dim>
1097 template<
class T1,
class T2,
unsigned Dim>
1102 template<
class T1,
class T2,
unsigned Dim>
1107 template<
class T1,
class T2,
unsigned Dim>
1112 template<
class T1,
class T2,
unsigned Dim>
1117 template<
class T1,
class T2,
unsigned Dim>
1122 template<
class T1,
class T2,
unsigned Dim>
1127 template<
class T1,
class T2,
unsigned Dim>
1132 template<
class T1,
class T2,
unsigned Dim>
1137 template<
class T1,
class T2,
unsigned Dim>
1142 template<
class T1,
class T2,
unsigned Dim>
1147 template<
class T1,
class T2,
unsigned Dim>
1152 template<
class T1,
class T2,
unsigned Dim>
1157 template<
class T1,
class T2,
unsigned Dim>
1162 template<
class T1,
class T2,
unsigned Dim>
1167 template<
class T1,
class T2,
unsigned Dim>
1172 template<
class T1,
class T2,
unsigned Dim>
1177 template<
class T1,
class T2,
unsigned Dim>
1182 template<
class T1,
class T2,
unsigned Dim>
1189 #define _SCALAR_VST_RETURNS_(Sca) \
1190 template<class T1, unsigned Dim> \
1191 struct PETEBinaryReturn<Vektor<T1,Dim>,Sca,OpMultipply> { \
1192 typedef Vektor<typename PETEBinaryReturn<T1,Sca,OpMultipply>::type,Dim> \
1195 template<class T2, unsigned Dim> \
1196 struct PETEBinaryReturn<Sca,Vektor<T2,Dim>,OpMultipply> { \
1197 typedef Vektor<typename PETEBinaryReturn<Sca,T2,OpMultipply>::type,Dim> \
1200 template<class T1, unsigned Dim> \
1201 struct PETEBinaryReturn<Vektor<T1,Dim>,Sca,OpDivide> { \
1202 typedef Vektor<typename PETEBinaryReturn<T1,Sca,OpDivide>::type,Dim> \
1205 template<class T1, unsigned Dim> \
1206 struct PETEBinaryReturn<Tenzor<T1,Dim>,Sca,OpMultipply> { \
1207 typedef Tenzor<typename PETEBinaryReturn<T1,Sca,OpMultipply>::type,Dim> \
1210 template<class T2, unsigned Dim> \
1211 struct PETEBinaryReturn<Sca,Tenzor<T2,Dim>,OpMultipply> { \
1212 typedef Tenzor<typename PETEBinaryReturn<Sca,T2,OpMultipply>::type,Dim> \
1215 template<class T1, unsigned Dim> \
1216 struct PETEBinaryReturn<Tenzor<T1,Dim>,Sca,OpDivide> { \
1217 typedef Tenzor<typename PETEBinaryReturn<T1,Sca,OpDivide>::type,Dim> \
1220 template<class T1, unsigned Dim> \
1221 struct PETEBinaryReturn<SymTenzor<T1,Dim>,Sca,OpMultipply> { \
1222 typedef SymTenzor<typename PETEBinaryReturn<T1,Sca,OpMultipply>::type,Dim> \
1225 template<class T2, unsigned Dim> \
1226 struct PETEBinaryReturn<Sca,SymTenzor<T2,Dim>,OpMultipply> { \
1227 typedef SymTenzor<typename PETEBinaryReturn<Sca,T2,OpMultipply>::type,Dim> \
1230 template<class T1, unsigned Dim> \
1231 struct PETEBinaryReturn<SymTenzor<T1,Dim>,Sca,OpDivide> { \
1232 typedef SymTenzor<typename PETEBinaryReturn<T1,Sca,OpDivide>::type,Dim> \
1235 template<class T1, unsigned Dim> \
1236 struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,Sca,OpMultipply> { \
1238 AntiSymTenzor<typename PETEBinaryReturn<T1,Sca,OpMultipply>::type,Dim> \
1241 template<class T2, unsigned Dim> \
1242 struct PETEBinaryReturn<Sca,AntiSymTenzor<T2,Dim>,OpMultipply> { \
1244 AntiSymTenzor<typename PETEBinaryReturn<Sca,T2,OpMultipply>::type,Dim> \
1247 template<class T1, unsigned Dim> \
1248 struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,Sca,OpDivide> { \
1250 AntiSymTenzor<typename PETEBinaryReturn<T1,Sca,OpDivide>::type,Dim> \
1254 _SCALAR_VST_RETURNS_(
short)
1255 _SCALAR_VST_RETURNS_(
int)
1256 _SCALAR_VST_RETURNS_(
long)
1257 _SCALAR_VST_RETURNS_(
float)
1258 _SCALAR_VST_RETURNS_(
double)
1259 _SCALAR_VST_RETURNS_(dcomplex)
1261 #undef _SCALAR_VST_RETURNS_
1268 #define _VEKTOR_RETURNS_(T1,T2,Dim) \
1270 PETEBinaryReturn<Vektor<T1,Dim>,Vektor<T2,Dim>, FnOuterProduct> \
1271 { typedef Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> \
1273 template<> struct PETEBinaryReturn<Vektor<T1,Dim>,Vektor<T2,Dim>,FnDot> \
1274 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1275 template<> struct PETEBinaryReturn<Vektor<T1,Dim>,T2,OpMultipply> \
1276 { typedef Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> \
1278 template<> struct PETEBinaryReturn<T2,Vektor<T1,Dim>,OpMultipply> \
1279 { typedef Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> \
1281 template<> struct PETEBinaryReturn<Vektor<T1,Dim>,T2,OpDivide> \
1282 { typedef Vektor<PETEBinaryReturn<T1,T2,OpDivide>::type,Dim> \
1284 template<> struct PETEBinaryReturn<Vektor<T1,Dim>,Vektor<T2,Dim>,FnCross> \
1285 { typedef Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; };
1353 #undef _VEKTOR_RETURNS_
1355 #define _TENZOR_RETURNS_(T1,T2,Dim) \
1356 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,Tenzor<T2,Dim>, FnDot> \
1358 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1359 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,Tenzor<T2,Dim>, FnDotDot> \
1360 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1361 template<> struct PETEBinaryReturn<Vektor<T1,Dim>,Tenzor<T2,Dim>, FnDot> \
1363 Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1364 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,Vektor<T2,Dim>, FnDot> \
1366 Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1367 template<> struct PETEBinaryReturn<T1,Tenzor<T2,Dim>,OpMultipply> \
1369 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1370 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,T2,OpMultipply> \
1372 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1373 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,T2,OpDivide> \
1375 Tenzor<PETEBinaryReturn<T1,T2,OpDivide>::type,Dim> type; };
1443 #undef _TENZOR_RETURNS_
1446 #define _SYMTENZOR_RETURNS_(T1,T2,Dim) \
1448 PETEBinaryReturn<SymTenzor<T1,Dim>,SymTenzor<T2,Dim>, FnDot> \
1450 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1452 PETEBinaryReturn<SymTenzor<T1,Dim>,SymTenzor<T2,Dim>, FnDotDot> \
1453 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1454 template<> struct PETEBinaryReturn<Vektor<T1,Dim>,SymTenzor<T2,Dim>, FnDot> \
1456 Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1457 template<> struct PETEBinaryReturn<SymTenzor<T1,Dim>,Vektor<T2,Dim>, FnDot> \
1459 Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1460 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,SymTenzor<T2,Dim>,OpAdd> \
1462 Tenzor<PETEBinaryReturn<T1,T2,OpAdd>::type,Dim> type; }; \
1464 PETEBinaryReturn<Tenzor<T1,Dim>,SymTenzor<T2,Dim>,OpSubtract> \
1466 Tenzor<PETEBinaryReturn<T1,T2,OpSubtract>::type,Dim> type; }; \
1468 PETEBinaryReturn<Tenzor<T1,Dim>,SymTenzor<T2,Dim>,OpMultipply> \
1470 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1471 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,SymTenzor<T2,Dim>, FnDot> \
1473 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1475 PETEBinaryReturn<Tenzor<T1,Dim>,SymTenzor<T2,Dim>, FnDotDot> \
1476 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1477 template<> struct PETEBinaryReturn<SymTenzor<T1,Dim>,Tenzor<T2,Dim>,OpAdd> \
1479 Tenzor<PETEBinaryReturn<T1,T2,OpAdd>::type,Dim> type; }; \
1481 PETEBinaryReturn<SymTenzor<T1,Dim>,Tenzor<T2,Dim>,OpSubtract> \
1483 Tenzor<PETEBinaryReturn<T1,T2,OpSubtract>::type,Dim> type; }; \
1484 template<> struct PETEBinaryReturn<SymTenzor<T1,Dim>,Tenzor<T2,Dim>, FnDot> \
1486 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1488 PETEBinaryReturn<SymTenzor<T1,Dim>,Tenzor<T2,Dim>, FnDotDot> \
1489 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1490 template<> struct PETEBinaryReturn<SymTenzor<T1,Dim>,T2,OpMultipply> \
1492 SymTenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1493 template<> struct PETEBinaryReturn<T1,SymTenzor<T2,Dim>,OpMultipply> \
1495 SymTenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> \
1497 template<> struct PETEBinaryReturn<SymTenzor<T1,Dim>,T2,OpDivide> \
1498 { typedef SymTenzor<PETEBinaryReturn<T1,T2,OpDivide>::type,Dim> type; };
1566 #undef _SYMTENZOR_RETURNS_
1569 #define _ANTISYMTENZOR_RETURNS_(T1,T2,Dim) \
1571 PETEBinaryReturn<AntiSymTenzor<T1,Dim>,AntiSymTenzor<T2,Dim>, FnDot> \
1573 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1575 PETEBinaryReturn<AntiSymTenzor<T1,Dim>,AntiSymTenzor<T2,Dim>, FnDotDot> \
1576 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1577 template<> struct PETEBinaryReturn<Vektor<T1,Dim>,AntiSymTenzor<T2,Dim>,FnDot>\
1579 Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1580 template<> struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,Vektor<T2,Dim>,FnDot>\
1582 Vektor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1583 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,OpAdd>\
1585 Tenzor<PETEBinaryReturn<T1,T2,OpAdd>::type,Dim> type; }; \
1587 PETEBinaryReturn<Tenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,OpSubtract> \
1589 Tenzor<PETEBinaryReturn<T1,T2,OpSubtract>::type,Dim> type; }; \
1591 PETEBinaryReturn<Tenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,OpMultipply> \
1593 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1594 template<> struct PETEBinaryReturn<Tenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,FnDot>\
1596 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1598 PETEBinaryReturn<Tenzor<T1,Dim>,AntiSymTenzor<T2,Dim>, FnDotDot> \
1599 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1600 template<> struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,Tenzor<T2,Dim>,OpAdd>\
1602 Tenzor<PETEBinaryReturn<T1,T2,OpAdd>::type,Dim> type; }; \
1604 PETEBinaryReturn<AntiSymTenzor<T1,Dim>,Tenzor<T2,Dim>,OpSubtract> \
1606 Tenzor<PETEBinaryReturn<T1,T2,OpSubtract>::type,Dim> type; }; \
1607 template<> struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,Tenzor<T2,Dim>,FnDot>\
1609 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1611 PETEBinaryReturn<AntiSymTenzor<T1,Dim>,Tenzor<T2,Dim>, FnDotDot> \
1612 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1614 struct PETEBinaryReturn<SymTenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,OpAdd> \
1616 Tenzor<PETEBinaryReturn<T1,T2,OpAdd>::type,Dim> type; }; \
1618 PETEBinaryReturn<SymTenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,OpSubtract> \
1620 Tenzor<PETEBinaryReturn<T1,T2,OpSubtract>::type,Dim> type; }; \
1622 PETEBinaryReturn<SymTenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,OpMultipply> \
1624 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1626 struct PETEBinaryReturn<SymTenzor<T1,Dim>,AntiSymTenzor<T2,Dim>,FnDot> \
1628 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1630 PETEBinaryReturn<SymTenzor<T1,Dim>,AntiSymTenzor<T2,Dim>, FnDotDot> \
1631 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1633 struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,SymTenzor<T2,Dim>,OpAdd> \
1635 Tenzor<PETEBinaryReturn<T1,T2,OpAdd>::type,Dim> type; }; \
1637 PETEBinaryReturn<AntiSymTenzor<T1,Dim>,SymTenzor<T2,Dim>,OpSubtract> \
1639 Tenzor<PETEBinaryReturn<T1,T2,OpSubtract>::type,Dim> type; }; \
1641 struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,SymTenzor<T2,Dim>,FnDot> \
1643 Tenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1645 PETEBinaryReturn<AntiSymTenzor<T1,Dim>,SymTenzor<T2,Dim>, FnDotDot> \
1646 { typedef PETEBinaryReturn<T1,T2,OpMultipply>::type type; }; \
1647 template<> struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,T2,OpMultipply> \
1649 AntiSymTenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> type; }; \
1650 template<> struct PETEBinaryReturn<T1,AntiSymTenzor<T2,Dim>,OpMultipply> \
1652 AntiSymTenzor<PETEBinaryReturn<T1,T2,OpMultipply>::type,Dim> \
1654 template<> struct PETEBinaryReturn<AntiSymTenzor<T1,Dim>,T2,OpDivide> \
1655 { typedef AntiSymTenzor<PETEBinaryReturn<T1,T2,OpDivide>::type,Dim> type; };
1723 #undef _SYMTENZOR_RETURNS_
1778 #if defined(IPPL_USE_PARTIAL_SPECIALIZATION)
1780 template<
class T,
class TP,
unsigned Dim>
1785 template<
class T,
class TP,
unsigned Dim>
1790 template<
class T,
class TP,
unsigned Dim>
1795 template<
class T,
class TP,
unsigned Dim>
1804 #define _PETE_DEFINE_PARENS_RETURNS_(T,D) \
1805 template<> struct PETEUnaryReturn<class Vektor<T,D>,OpParens<int> > \
1806 { typedef T type; }; \
1808 PETEUnaryReturn<class Tenzor<T,D>,OpParens<std::pair<int,int> > > \
1809 { typedef T type; }; \
1811 PETEUnaryReturn<class AntiSymTenzor<T,D>,OpParens<std::pair<int,int> > > \
1812 { typedef T type; }; \
1814 PETEUnaryReturn<class SymTenzor<T,D>,OpParens<std::pair<int,int> > > \
1815 { typedef T type; };
1836 #undef _PETE_DEFINE_PARENS_RETURNS_
1847 #endif // IPPL_TYPE_COMPUTATIONS_H
AntiSymTenzor< T, D > type
#define _ANTISYMTENZOR_RETURNS_(T1, T2, Dim)
Vektor< double, 1U > type
SymTenzor< dcomplex, 3U > type
SymTenzor< short, 3U > type
const int PETE_BinaryUseLeftTag
const int PETE_BinaryPromoteTag
SymTenzor< double, 2U > type
SymTenzor< long, 1U > type
std::complex< double > dcomplex
PETE_ComputeUnaryType< PETE_Type2Index< T >::val, Op::tag >::type type
SymTenzor< short, 1U > type
#define _SYMTENZOR_RETURNS_(T1, T2, Dim)
#define _VEKTOR_RETURNS_(T1, T2, Dim)
SymTenzor< dcomplex, 1U > type
Tenzor< dcomplex, 2U > type
SymTenzor< float, 3U > type
SymTenzor< long, 2U > type
SymTenzor< float, 1U > type
Tenzor< dcomplex, 1U > type
Vektor< double, 3U > type
#define _UNARY_TENSOR_RETURNS_(T, D)
#define _TENZOR_RETURNS_(T1, T2, Dim)
#define _PETE_DEFINE_PARENS_RETURNS_(T, D)
Vektor< dcomplex, 3U > type
const int PETE_UnaryPassThruTag
Tenzor< double, 3U > type
SymTenzor< int, 1U > type
SymTenzor< int, 3U > type
SymTenzor< long, 3U > type
SymTenzor< int, 2U > type
PETE_ComputeBinaryType< PETE_Type2Index< T1 >::val, PETE_Type2Index< T2 >::val, Op::tag >::type type
#define _PETE_RNG_RETURNS_(GEN)
Vektor< dcomplex, 1U > type
Tenzor< dcomplex, 3U > type
Vektor< double, 2U > type
Tenzor< double, 1U > type
Tenzor< double, 2U > type
Vektor< dcomplex, 2U > type
SymTenzor< short, 2U > type
SymTenzor< dcomplex, 2U > type
SymTenzor< double, 1U > type
SymTenzor< double, 3U > type
SymTenzor< float, 2U > type