11 #ifndef EIGEN_MOREMETA_H
12 #define EIGEN_MOREMETA_H
15 #include "../InternalHeaderCheck.h"
21 template <
typename... tt>
23 constexpr
static int count =
sizeof...(tt);
26 template <
typename t,
typename... tt>
28 constexpr
static int count =
sizeof...(tt) + 1;
32 template <
typename T,
T... nn>
34 constexpr
static std::size_t
count =
sizeof...(nn);
37 template <
typename T,
T n,
T... nn>
39 static constexpr std::size_t
count =
sizeof...(nn) + 1;
40 static constexpr
T first_value =
n;
43 #ifndef EIGEN_PARSED_BY_DOXYGEN
54 template <
typename T, std::size_t
n,
T start = 0,
T... ii>
56 template <
typename T,
T start,
T... ii>
61 template <
typename T, std::size_t
n,
T start = 0,
T... ii>
63 template <
typename T,
T start,
T... ii>
68 template <
typename T, std::size_t
n,
T a,
T b,
T start = 0,
T... ii>
71 (start + n - 1) == a ? b : ((start + n - 1) == b ? a : (start + n - 1)), ii...> {};
77 template <
typename T, std::size_t
n,
T V,
T... nn>
79 template <
typename T,
T V,
T... nn>
86 template <
class a,
class b>
89 template <
typename... as,
typename... bs>
93 template <
typename T,
T... as,
T... bs>
98 template <
typename...
p>
100 template <
typename a>
104 template <
typename a,
typename b>
106 template <
typename a,
typename b,
typename... cs>
111 template <
int n,
typename x>
113 template <
int n,
typename a,
typename... as>
119 template <
typename a,
typename... as>
128 template <
typename T,
int n,
T a,
T... as>
130 :
concat<numeric_list<T, a>, typename take<n - 1, numeric_list<T, as...>>::type> {};
134 template <
typename T,
T a,
T... as>
138 template <
typename T>
143 template <
typename T,
int n,
T... ii>
145 template <
typename T,
int n,
T i,
T... ii>
147 template <
typename T,
T i,
T... ii>
151 template <
typename T,
int n>
155 template <
typename T>
160 template <
int n,
typename... tt>
162 template <
int n,
typename t,
typename... tt>
164 template <
typename t,
typename... tt>
180 template <
typename T,
T... ii>
185 template <
typename... tt>
191 template <
int n,
typename a>
196 template <
int start,
int count, typename
a>
201 template <
int n,
typename x>
204 template <
int n,
typename a,
typename... as>
206 template <
typename a,
typename... as>
211 template <
typename T,
int n,
T a,
T... as>
213 template <
typename T,
T a,
T... as>
218 template <std::size_t
n,
typename T,
T a,
T... as>
225 template <
typename T, T dummy,
typename t>
229 template <
typename dummy,
typename t>
236 template <
typename a,
typename b>
238 constexpr
static int global_flags = 0;
243 template <
bool from_left,
244 template <
typename,
typename>
class op,
typename additional_param,
typename... values>
248 template <
template <
typename,
typename>
class op,
typename additional_param,
typename... values>
253 template <
bool from_left,
template <
typename,
typename>
class op,
typename additional_param>
255 template <
typename... values>
262 template <
template <
typename,
typename>
class op,
typename additional_param,
typename a>
267 template <template <typename, typename> class
op, typename additional_param, typename
a>
274 template <template <typename, typename> class
test, typename check_against, typename h_list,
275 bool last_check_positive = false>
278 template <template <typename, typename> class
test, typename check_against, typename h_list>
283 template <
template <
typename,
typename>
class test,
typename check_against,
typename a,
typename... as>
285 :
contained_in_list<test, check_against, type_list<as...>, test<check_against, a>::value> {};
287 template <
template <
typename,
typename>
class test,
typename check_against,
typename... empty>
289 constexpr
static bool value =
false;
294 template <
template <
typename,
typename>
class test,
typename check_against,
typename h_list,
int default_flags = 0,
295 bool last_check_positive =
false,
int last_check_flags = default_flags>
298 template <
template <
typename,
typename>
class test,
typename check_against,
typename h_list,
int default_flags,
299 int last_check_flags>
302 constexpr
static int global_flags = last_check_flags;
305 template <
template <
typename,
typename>
class test,
typename check_against,
typename a,
typename... as,
306 int default_flags,
int last_check_flags>
308 :
contained_in_list_gf<test, check_against, type_list<as...>, default_flags, test<check_against, a>::value,
309 test<check_against, a>::global_flags> {};
311 template <
template <
typename,
typename>
class test,
typename check_against,
typename... empty,
int default_flags,
312 int last_check_flags>
314 constexpr
static bool value =
false;
315 constexpr
static int global_flags = default_flags;
320 template <
typename Reducer,
typename... Ts>
323 template <
typename Reducer>
328 template <
typename Reducer,
typename A>
333 template <
typename Reducer,
typename A,
typename... Ts>
344 template <
typename A,
typename B>
348 static constexpr
int Identity = 0;
351 template <
typename A,
typename B>
355 static constexpr
int Identity = 1;
359 template <
typename A,
typename B>
365 template <
typename A,
typename B>
372 template <
typename A,
typename B>
378 template <
typename A,
typename B>
384 template <
typename A,
typename B>
390 template <
typename A,
typename B>
396 template <
typename A,
typename B>
402 template <
typename A,
typename B>
411 template <
typename A>
417 template <
typename A>
423 template <
typename A>
434 template <
typename... Ts>
440 template <
typename... Ts>
447 template <
typename Array,
int...
n>
449 return {{
array_get<
sizeof...(n) -
n - 1>(arr)...}};
452 template <
typename T, std::
size_t N>
464 template <
typename Reducer,
typename T, std::size_t
N, std::size_t
n =
N - 1>
472 template <
typename Reducer,
typename T, std::
size_t N>
477 template <
typename Reducer,
typename T>
482 template <
typename Reducer,
typename T, std::
size_t N>
490 template <
typename T, std::
size_t N>
492 -> decltype(array_reduce<sum_op, T, N>(arr,
static_cast<T>(0))) {
493 return array_reduce<sum_op, T, N>(arr,
static_cast<T>(0));
496 template <
typename T, std::
size_t N>
498 -> decltype(array_reduce<product_op, T, N>(arr,
static_cast<T>(1))) {
499 return array_reduce<product_op, T, N>(arr,
static_cast<T>(1));
502 template <
typename t>
506 for (
size_t i = 0;
i <
a.size(); ++
i) {
514 template <
typename Op,
typename A,
typename B, std::size_t
N,
int...
n>
520 template <
typename Op,
typename A,
typename B, std::
size_t N>
527 template <
typename Reducer,
typename Op,
typename A,
typename B, std::size_t
N,
int...
n>
530 Op::run(array_get<n>(
a), array_get<n>(
b))...)) {
532 Op::run(array_get<n>(
a), array_get<n>(
b))...);
535 template <
typename Reducer,
typename Op,
typename A,
typename B, std::
size_t N>
543 template <
typename Op,
typename A, std::size_t
N,
int...
n>
548 template <
typename Op,
typename A, std::
size_t N>
555 template <
typename Reducer,
typename Op,
typename A, std::size_t
N,
int...
n>
558 Op::run(array_get<n>(arr))...)) {
560 Op::run(array_get<n>(arr))...);
563 template <
typename Reducer,
typename Op,
typename A, std::
size_t N>
576 template <
typename t,
int... ii>
582 template <
int n,
typename t>
588 template <
class InstType,
typename ArrType, std::size_t
N,
bool Reverse,
typename... Ps>
591 template <
class InstType,
typename ArrType, std::size_t
N,
typename... Ps>
593 static InstType
run(ArrType* arr, Ps...
args) {
598 template <
class InstType,
typename ArrType, std::size_t
N,
typename... Ps>
600 static InstType
run(ArrType* arr, Ps...
args) {
605 template <
class InstType,
typename ArrType,
typename... Ps>
607 static InstType
run(ArrType* arr, Ps...
args) {
609 return InstType(
args...);
613 template <
class InstType,
typename ArrType,
typename... Ps>
615 static InstType
run(ArrType* arr, Ps...
args) {
617 return InstType(
args...);
621 template <
class InstType,
typename ArrType, std::
size_t N,
bool Reverse = false>
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
MatrixXcd V
Definition: EigenSolver_EigenSolver_MatrixType.cpp:15
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
float * p
Definition: Tutorial_Map_using.cpp:9
Scalar * b
Definition: benchVecAdd.cpp:17
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Matrix< SCALARB, Dynamic, Dynamic, opt_B > B
Definition: bench_gemm.cpp:48
General-purpose arrays with easy API for coefficient-wise operations.
Definition: Array.h:48
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
Expression of the reverse of a vector or matrix.
Definition: Reverse.h:65
Definition: matrices.h:74
@ N
Definition: constructor.cpp:22
const Scalar * a
Definition: level2_cplx_impl.h:32
char char * op
Definition: level2_impl.h:374
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_reduce(const array< T, N > &arr, T identity) -> decltype(h_array_reduce< Reducer, T, N >::run(arr, identity))
Definition: MoreMeta.h:483
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A())), N > h_array_apply(array< A, N > a, numeric_list< int, n... >)
Definition: MoreMeta.h:544
constexpr EIGEN_DEVICE_FUNCdecltype(reduce< product_op, Ts... >::run((*((Ts *) 0))...)) EIGEN_STRONG_INLIN arg_prod)(Ts... ts)
Definition: MoreMeta.h:435
constexpr EIGEN_STRONG_INLINE auto h_array_apply_and_reduce(array< A, N > arr, numeric_list< int, n... >) -> decltype(reduce< Reducer, typename id_numeric< int, n, decltype(Op::run(A()))>::type... >::run(Op::run(array_get< n >(arr))...))
Definition: MoreMeta.h:556
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A(), B())), N > h_array_zip(array< A, N > a, array< B, N > b, numeric_list< int, n... >)
Definition: MoreMeta.h:515
constexpr EIGEN_STRONG_INLINE Array h_array_reverse(Array arr, numeric_list< int, n... >)
Definition: MoreMeta.h:448
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_prod(const array< T, N > &arr) -> decltype(array_reduce< product_op, T, N >(arr, static_cast< T >(1)))
Definition: MoreMeta.h:497
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A())), N > array_apply(array< A, N > a)
Definition: MoreMeta.h:549
constexpr EIGEN_STRONG_INLINE auto h_array_zip_and_reduce(array< A, N > a, array< B, N > b, numeric_list< int, n... >) -> decltype(reduce< Reducer, typename id_numeric< int, n, decltype(Op::run(A(), B()))>::type... >::run(Op::run(array_get< n >(a), array_get< n >(b))...))
Definition: MoreMeta.h:528
constexpr T & array_get(std::array< T, N > &a)
Definition: EmulateArray.h:251
constexpr EIGEN_STRONG_INLINE array< T, N > array_reverse(array< T, N > arr)
Definition: MoreMeta.h:453
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_sum(const array< T, N > &arr) -> decltype(array_reduce< sum_op, T, N >(arr, static_cast< T >(0)))
Definition: MoreMeta.h:491
constexpr array< t, n > repeat(t v)
Definition: MoreMeta.h:583
constexpr EIGEN_STRONG_INLINE auto array_zip_and_reduce(array< A, N > a, array< B, N > b) -> decltype(h_array_zip_and_reduce< Reducer, Op, A, B, N >(a, b, typename gen_numeric_list< int, N >::type()))
Definition: MoreMeta.h:536
constexpr decltype(reduce< sum_op, Ts... >::run((*((Ts *) 0))...)) EIGEN_STRONG_INLIN arg_sum)(Ts... ts)
Definition: MoreMeta.h:441
InstType instantiate_by_c_array(ArrType *arr)
Definition: MoreMeta.h:622
constexpr EIGEN_STRONG_INLINE auto array_apply_and_reduce(array< A, N > a) -> decltype(h_array_apply_and_reduce< Reducer, Op, A, N >(a, typename gen_numeric_list< int, N >::type()))
Definition: MoreMeta.h:564
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A(), B())), N > array_zip(array< A, N > a, array< B, N > b)
Definition: MoreMeta.h:521
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
std::array< T, N > array
Definition: EmulateArray.h:231
squared absolute value
Definition: GlobalFunctions.h:87
squared absolute sa ArrayBase::abs2 DOXCOMMA MatrixBase::cwiseAbs2 sa Eigen::abs2 DOXCOMMA Eigen::pow DOXCOMMA ArrayBase::square nearest sa Eigen::floor DOXCOMMA Eigen::ceil DOXCOMMA ArrayBase::round nearest integer not less than the given sa Eigen::floor DOXCOMMA ArrayBase::ceil not a number test
Definition: GlobalFunctions.h:109
const Product< Lhs, Rhs > prod(const Lhs &lhs, const Rhs &rhs)
Definition: evaluators.cpp:7
args
Definition: compute_granudrum_aor.py:143
type
Definition: compute_granudrum_aor.py:141
Definition: Eigen_Colamd.h:49
void start(const unsigned &i)
(Re-)start i-th timer
Definition: oomph_utilities.cc:243
t
Definition: plotPSD.py:36
Definition: indexed_view.cpp:20
Definition: MoreMeta.h:263
Definition: MoreMeta.h:268
numeric_list< T, as..., bs... > type
Definition: MoreMeta.h:95
type_list< as..., bs... > type
Definition: MoreMeta.h:91
Definition: MoreMeta.h:87
Definition: MoreMeta.h:296
Definition: MoreMeta.h:276
Definition: MoreMeta.h:371
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a==b)
Definition: MoreMeta.h:373
numeric_list< T, ii... > type
Definition: MoreMeta.h:58
numeric_list< T, nn... > type
Definition: MoreMeta.h:81
Definition: MoreMeta.h:78
numeric_list< T, ii... > type
Definition: MoreMeta.h:65
Definition: MoreMeta.h:62
numeric_list< T, ii... > type
Definition: MoreMeta.h:74
Definition: MoreMeta.h:71
Definition: MoreMeta.h:55
a type
Definition: MoreMeta.h:208
Definition: MoreMeta.h:202
Definition: MoreMeta.h:401
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a >=b)
Definition: MoreMeta.h:403
Definition: MoreMeta.h:422
constexpr static EIGEN_STRONG_INLINE auto run(A a) -> decltype(a >=0)
Definition: MoreMeta.h:424
Definition: MoreMeta.h:395
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a > b)
Definition: MoreMeta.h:397
type_list< typename op< additional_param, values >::type... > type
Definition: MoreMeta.h:250
Definition: MoreMeta.h:245
type_list< typename op< values, additional_param >::type... > type
Definition: MoreMeta.h:246
Definition: MoreMeta.h:254
constexpr static h_apply_op_helper< from_left, op, additional_param, values... >::type helper(type_list< values... >)
Definition: MoreMeta.h:256
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T run(const array< T, 0 > &, T identity)
Definition: MoreMeta.h:479
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T run(const array< T, N > &arr, T)
Definition: MoreMeta.h:474
Definition: MoreMeta.h:465
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto run(array< T, N > arr, T identity) -> decltype(Reducer::run(h_array_reduce< Reducer, T, N, n - 1 >::run(arr, identity), array_get< n >(arr)))
Definition: MoreMeta.h:466
static InstType run(ArrType *arr, Ps... args)
Definition: MoreMeta.h:607
static InstType run(ArrType *arr, Ps... args)
Definition: MoreMeta.h:615
static InstType run(ArrType *arr, Ps... args)
Definition: MoreMeta.h:593
static InstType run(ArrType *arr, Ps... args)
Definition: MoreMeta.h:600
Definition: MoreMeta.h:589
Definition: MoreMeta.h:575
constexpr static EIGEN_STRONG_INLINE array< t, n > run(t v, numeric_list< int, ii... >)
Definition: MoreMeta.h:577
numeric_list< T, i, ii... > type
Definition: MoreMeta.h:149
numeric_list< T > type
Definition: MoreMeta.h:157
numeric_list< T > type
Definition: MoreMeta.h:153
Definition: MoreMeta.h:144
type_list< t, tt... > type
Definition: MoreMeta.h:166
type_list type
Definition: MoreMeta.h:174
type_list type
Definition: MoreMeta.h:170
Definition: MoreMeta.h:161
Definition: MoreMeta.h:179
constexpr static EIGEN_STRONG_INLINE h_skip_helper_type< n, tt... >::type helper(type_list< tt... >)
Definition: MoreMeta.h:186
constexpr static EIGEN_STRONG_INLINE h_skip_helper_numeric< T, n, ii... >::type helper(numeric_list< T, ii... >)
Definition: MoreMeta.h:181
Definition: MoreMeta.h:226
t type
Definition: MoreMeta.h:227
Definition: MoreMeta.h:230
t type
Definition: MoreMeta.h:231
Definition: MoreMeta.h:237
Definition: MoreMeta.h:389
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a<=b)
Definition: MoreMeta.h:391
Definition: MoreMeta.h:383
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a< b)
Definition: MoreMeta.h:385
Definition: MoreMeta.h:358
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a &&b)
Definition: MoreMeta.h:360
Definition: MoreMeta.h:364
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a||b)
Definition: MoreMeta.h:366
a type
Definition: MoreMeta.h:102
Definition: MoreMeta.h:99
Definition: MoreMeta.h:416
constexpr static EIGEN_STRONG_INLINE auto run(A a) -> decltype(-a)
Definition: MoreMeta.h:418
Definition: MoreMeta.h:377
constexpr static EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a !=b)
Definition: MoreMeta.h:379
Definition: MoreMeta.h:410
constexpr static EIGEN_STRONG_INLINE auto run(A a) -> decltype(!a)
Definition: MoreMeta.h:412
Definition: MoreMeta.h:33
constexpr static std::size_t count
Definition: MoreMeta.h:34
Definition: MoreMeta.h:350
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a *b)
Definition: MoreMeta.h:352
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto run(A a, Ts... ts) -> decltype(Reducer::run(a, reduce< Reducer, Ts... >::run(ts...)))
Definition: MoreMeta.h:335
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE A run(A a)
Definition: MoreMeta.h:330
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE int run()
Definition: MoreMeta.h:325
Definition: MoreMeta.h:321
Definition: MoreMeta.h:192
decltype(h_skip< n >::helper(a())) typedef type
Definition: MoreMeta.h:193
Definition: MoreMeta.h:197
Definition: MoreMeta.h:343
constexpr static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto run(A a, B b) -> decltype(a+b)
Definition: MoreMeta.h:345
numeric_list< T > type
Definition: MoreMeta.h:136
numeric_list< T > type
Definition: MoreMeta.h:140
type_list type
Definition: MoreMeta.h:121
type_list type
Definition: MoreMeta.h:125
type_list type
Definition: MoreMeta.h:117
Definition: MoreMeta.h:112
t first_type
Definition: MoreMeta.h:29
Definition: MoreMeta.h:22
constexpr static int count
Definition: MoreMeta.h:23
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317