10#ifndef EIGEN_CXX11_TENSORSYMMETRY_SYMMETRY_H
11#define EIGEN_CXX11_TENSORSYMMETRY_SYMMETRY_H
37template<
int One_,
int Two_>
40 static_assert(One_ != Two_,
"Symmetries must cover distinct indices.");
41 constexpr static int One = One_;
42 constexpr static int Two = Two_;
46template<
int One_,
int Two_>
49 static_assert(One_ != Two_,
"Symmetries must cover distinct indices.");
50 constexpr static int One = One_;
51 constexpr static int Two = Two_;
55template<
int One_,
int Two_>
58 static_assert(One_ != Two_,
"Symmetries must cover distinct indices.");
59 constexpr static int One = One_;
60 constexpr static int Two = Two_;
64template<
int One_,
int Two_>
67 static_assert(One_ != Two_,
"Symmetries must cover distinct indices.");
68 constexpr static int One = One_;
69 constexpr static int Two = Two_;
98template<
typename... Gen>
120template<
typename... Gen>
135template<
typename... Gen>
156 constexpr static std::size_t
value = 1;
162 constexpr static std::size_t One =
static_cast<std::size_t
>(
One_);
163 constexpr static std::size_t Two =
static_cast<std::size_t
>(
Two_);
167 constexpr static std::size_t maxOneTwoPlusOne = ((One > Two) ? One : Two) + 1;
169 constexpr static std::size_t
value = (maxOneTwoPlusOne > Three) ? maxOneTwoPlusOne : Three;
226template<std::
size_t NumIndices>
232template<std::size_t NumIndices,
typename Gen_,
typename...
Gens_>
235 constexpr static std::size_t max_static_generators = 4;
236 constexpr static std::size_t max_static_elements = 16;
238 constexpr static std::size_t possible_size = helper::size;
241 possible_size == 0 || possible_size >= max_static_elements,
243 typename helper::type
250 constexpr static std::size_t
size = 0;
254template<std::size_t NumIndices,
typename...
Gens>
257template<
typename Tensor_>
260 typedef typename Tensor_::Index
Index;
262 constexpr static std::size_t
NumIndices = Tensor_::NumIndices;
268 value = numext::conj(value);
276template<
typename Tensor_>
279 typedef typename Tensor_::Index
Index;
280 constexpr static std::size_t
NumIndices = Tensor_::NumIndices;
296template<
typename Tensor_,
typename Symmetry_,
int Flags = 0>
300 typedef typename Tensor_::Index
Index;
302 constexpr static std::size_t
NumIndices = Tensor_::NumIndices;
305 : m_tensor(tensor), m_symmetry(
symmetry), m_indices(indices) { }
315 std::array<Index, NumIndices> m_indices;
317 inline void doAssign(
Scalar const& value)
319 #ifdef EIGEN_TENSOR_SYMMETRY_CHECK_VALUES
#define eigen_assert(x)
Definition Macros.h:1037
SCALAR Scalar
Definition bench_gemm.cpp:46
Definition DynamicSymmetry.h:155
Dynamic symmetry group.
Definition DynamicSymmetry.h:16
Symmetry group, initialized from template arguments.
Definition Symmetry.h:137
static constexpr std::size_t NumIndices
Definition Symmetry.h:139
SGroup()
Definition Symmetry.h:143
SGroup< Gen... > & operator=(SGroup< Gen... > &&other)
Definition Symmetry.h:147
SGroup< Gen... > & operator=(const SGroup< Gen... > &other)
Definition Symmetry.h:146
SGroup(SGroup< Gen... > &&other)
Definition Symmetry.h:145
SGroup(const SGroup< Gen... > &other)
Definition Symmetry.h:144
internal::tensor_symmetry_pre_analysis< NumIndices, Gen... >::root_type Base
Definition Symmetry.h:140
Static symmetry group.
Definition StaticSymmetry.h:182
Definition Symmetry.h:298
tensor_symmetry_value_setter< Tensor_, Symmetry_, Flags > & operator=(Scalar const &value)
Definition Symmetry.h:307
Tensor_::Index Index
Definition Symmetry.h:300
tensor_symmetry_value_setter(Tensor_ &tensor, Symmetry_ const &symmetry, std::array< Index, NumIndices > const &indices)
Definition Symmetry.h:304
Tensor_::Scalar Scalar
Definition Symmetry.h:301
static constexpr std::size_t NumIndices
Definition Symmetry.h:302
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
@ NegationFlag
Definition Symmetry.h:16
@ ConjugationFlag
Definition Symmetry.h:17
@ GlobalZeroFlag
Definition Symmetry.h:23
@ GlobalRealFlag
Definition Symmetry.h:21
@ GlobalImagFlag
Definition Symmetry.h:22
Definition BandTriangularSolver.h:13
static constexpr int Two
Definition Symmetry.h:69
static constexpr int Flags
Definition Symmetry.h:70
static constexpr int One
Definition Symmetry.h:68
static constexpr int Flags
Definition Symmetry.h:52
static constexpr int Two
Definition Symmetry.h:51
static constexpr int One
Definition Symmetry.h:50
static constexpr int One
Definition Symmetry.h:59
static constexpr int Two
Definition Symmetry.h:60
static constexpr int Flags
Definition Symmetry.h:61
static constexpr int Two
Definition Symmetry.h:42
static constexpr int One
Definition Symmetry.h:41
static constexpr int Flags
Definition Symmetry.h:43
Definition Symmetry.h:249
void type
Definition Symmetry.h:251
static constexpr std::size_t size
Definition Symmetry.h:250
Definition StaticSymmetry.h:116
Definition Symmetry.h:259
static constexpr std::size_t NumIndices
Definition Symmetry.h:262
Tensor_::Scalar Scalar
Definition Symmetry.h:261
static int run(const std::array< Index, NumIndices > &transformed_indices, int transformation_flags, int dummy, Tensor_ &tensor, const Scalar &value_)
Definition Symmetry.h:264
Tensor_::Index Index
Definition Symmetry.h:260
Definition Symmetry.h:278
static constexpr std::size_t NumIndices
Definition Symmetry.h:280
Tensor_::Index Index
Definition Symmetry.h:279
static int run(const std::array< Index, NumIndices > &transformed_indices, int transform_flags, int current_flags, const std::array< Index, NumIndices > &orig_indices)
Definition Symmetry.h:282
Definition Symmetry.h:155
static constexpr std::size_t value
Definition Symmetry.h:156
helper::type ::type root_type
Definition Symmetry.h:244
tensor_static_symgroup_if<(sizeof...(Gens_)+1<=max_static_generators), NumIndices, Gen_, Gens_... > helper
Definition Symmetry.h:237
StaticSGroup root_type
Definition Symmetry.h:229
Definition ForwardDeclarations.h:17