16 #ifndef OPENKALMAN_EIGEN_FORWARD_DECLARATIONS_HPP 17 #define OPENKALMAN_EIGEN_FORWARD_DECLARATIONS_HPP 19 #include <type_traits> 31 template<
typename NullaryOp,
typename PlainObjectType>
40 template<
typename Operation>
48 enum struct BinaryFunctorType: int {
60 template<
typename Operation>
69 template<
typename Operation,
typename Arg1,
typename Arg2,
typename Arg3>
89 template<
typename Derived,
typename Base>
102 template<
typename XprType>
111 #ifdef __cpp_concepts 114 constexpr
bool eigen_ArrayWrapper =
124 template<
typename XprType,
int BlockRows,
int BlockCols,
bool InnerPanel>
125 struct is_Block<
Eigen::Block<XprType, BlockRows, BlockCols, InnerPanel>> : std::true_type {};
133 #ifdef __cpp_concepts 136 constexpr
bool eigen_Block =
146 template<
typename UnaryOp,
typename XprType>
155 #ifdef __cpp_concepts 158 constexpr
bool eigen_CwiseUnaryOp =
168 template<
typename ViewOp,
typename XprType>
177 #ifdef __cpp_concepts 180 constexpr
bool eigen_CwiseUnaryView =
190 template<
typename Scalar,
int SizeAtCompileTime,
int MaxSizeAtCompileTime>
200 #ifdef __cpp_concepts 203 constexpr
bool eigen_DiagonalMatrix =
213 template<
typename DiagonalVectorType>
222 #ifdef __cpp_concepts 225 constexpr
bool eigen_DiagonalWrapper =
235 template<
typename Scalar,
typename Arg>
245 #ifdef __cpp_concepts 257 template<
typename XprType>
266 #ifdef __cpp_concepts 278 template<
typename MatrixType,
int RowFactor,
int ColFactor>
283 template<std::
size_t direction>
284 static constexpr std::size_t efactor = direction == 1 ? ColFactor : RowFactor;
288 template<std::
size_t direction>
289 static constexpr std::size_t factor = efactor<direction> == Eigen::Dynamic ?
dynamic_size : efactor<direction>;
298 #ifdef __cpp_concepts 301 constexpr
bool eigen_Replicate =
309 template<
typename T, std::
size_t direction>
311 : std::integral_constant<std::size_t, detail::is_eigen_Replicate<std::decay_t<T>>::template factor<direction>> {};
317 template<
typename T, std::
size_t direction>
326 template<
typename MatrixType,
unsigned int UpLo>
335 #ifdef __cpp_concepts 347 template<
typename MatrixType,
unsigned int UpLo>
356 #ifdef __cpp_concepts 368 template<
typename T,
int Size>
377 #ifdef __cpp_concepts 380 constexpr
bool eigen_VectorBlock =
389 template<
typename T,
bool must_be_native = false>
390 #ifdef __cpp_concepts 393 constexpr
bool eigen_general =
395 (std::is_base_of_v<Eigen::EigenBase<std::decay_t<T>>, std::decay_t<T>> or eigen_VectorBlock<T>) and
396 (not must_be_native or not std::is_base_of_v<
EigenCustomBase, std::decay_t<T>>);
404 template<
typename T,
int Size>
406 : std::is_base_of<Eigen::MatrixBase<std::decay_t<T>>, std::decay_t<T>> {};
414 template<
typename T,
bool must_be_native = false>
415 #ifdef __cpp_concepts 418 constexpr
bool eigen_matrix_general =
420 (eigen_general<T, must_be_native> and std::is_base_of_v<Eigen::MatrixBase<std::decay_t<T>>, std::decay_t<T>>) or
429 template<
typename T,
int Size>
431 : std::is_base_of<Eigen::ArrayBase<std::decay_t<T>>, std::decay_t<T>> {};
439 template<
typename T,
bool must_be_native = false>
440 #ifdef __cpp_concepts 443 constexpr
bool eigen_array_general =
445 (eigen_general<T, must_be_native> and std::is_base_of_v<Eigen::ArrayBase<std::decay_t<T>>, std::decay_t<T>>) or
453 template<
typename T,
bool must_be_native = false>
454 #ifdef __cpp_concepts 457 constexpr
bool eigen_dense_general =
459 eigen_matrix_general<T, must_be_native> or eigen_array_general<T, must_be_native>;
467 template<
typename NestedMatrix>
468 using IdentityMatrix = Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<
469 typename Eigen::internal::traits<std::decay_t<NestedMatrix>>::Scalar>, NestedMatrix>;
478 template<std::
size_t size>
479 constexpr
auto eigen_index_convert =
size ==
dynamic_size ? Eigen::Dynamic :
static_cast<Eigen::Index
>(
size);
488 template<
typename Scalar, std::size_t...dims>
490 Eigen::Matrix<Scalar, detail::eigen_index_convert<dims>..., detail::eigen_index_convert<1>>,
491 Eigen::Matrix<Scalar, detail::eigen_index_convert<dims>...>>;
497 #ifdef __cpp_concepts 501 template<
typename T,
typename =
void>
509 template<
typename Op>
static decltype(
auto) native_operation(Op&& op) {
return std::forward<Op>(op); };
510 template<
typename S>
static auto native_operation(
const std::plus<S>& op) {
return Eigen::internal::scalar_sum_op<S, S> {}; };
511 template<
typename S>
static auto native_operation(
const std::minus<S>& op) {
return Eigen::internal::scalar_difference_op<S, S> {}; };
512 template<
typename S>
static auto native_operation(
const std::multiplies<S>& op) {
return Eigen::internal::scalar_product_op<S, S> {}; };
513 template<
typename S>
static auto native_operation(
const std::divides<S>& op) {
return Eigen::internal::scalar_quotient_op<S, S> {}; };
514 template<
typename S>
static auto native_operation(
const std::negate<S>& op) {
return Eigen::internal::scalar_opposite_op<S> {}; };
516 using EIC = Eigen::internal::ComparisonName;
517 template<
typename S>
static auto native_operation(
const std::equal_to<S>& op) {
return Eigen::internal::scalar_cmp_op<S, S, EIC::cmp_EQ> {}; };
518 template<
typename S>
static auto native_operation(
const std::not_equal_to<S>& op) {
return Eigen::internal::scalar_cmp_op<S, S, EIC::cmp_NEQ> {}; };
519 template<
typename S>
static auto native_operation(
const std::greater<S>& op) {
return Eigen::internal::scalar_cmp_op<S, S, EIC::cmp_GT> {}; };
520 template<
typename S>
static auto native_operation(
const std::less<S>& op) {
return Eigen::internal::scalar_cmp_op<S, S, EIC::cmp_LT> {}; };
521 template<
typename S>
static auto native_operation(
const std::greater_equal<S>& op) {
return Eigen::internal::scalar_cmp_op<S, S, EIC::cmp_GE> {}; };
522 template<
typename S>
static auto native_operation(
const std::less_equal<S>& op) {
return Eigen::internal::scalar_cmp_op<S, S, EIC::cmp_LE> {}; };
524 template<
typename S>
static auto native_operation(
const std::logical_and<S>& op) {
return Eigen::internal::scalar_boolean_and_op {}; };
525 template<
typename S>
static auto native_operation(
const std::logical_or<S>& op) {
return Eigen::internal::scalar_boolean_or_op {}; };
526 template<
typename S>
static auto native_operation(
const std::logical_not<S>& op) {
return Eigen::internal::scalar_boolean_not_op<S> {}; };
532 #endif //OPENKALMAN_EIGEN_FORWARD_DECLARATIONS_HPP Definition: eigen-forward-declarations.hpp:324
Eigen::CwiseNullaryOp< Eigen::internal::scalar_identity_op< typename Eigen::internal::traits< std::decay_t< NestedMatrix > >::Scalar >, NestedMatrix > IdentityMatrix
An alias for the Eigen identity matrix.
Definition: eigen-forward-declarations.hpp:469
Definition: eigen-forward-declarations.hpp:90
Trait object providing get and set routines.
Definition: eigen-forward-declarations.hpp:502
Definition: eigen-forward-declarations.hpp:41
Definition: eigen-forward-declarations.hpp:122
Definition: eigen-forward-declarations.hpp:32
constexpr bool eigen_matrix_general
Specifies a native Eigen3 matrix or expression class deriving from Eigen::MatrixBase.
Definition: eigen-forward-declarations.hpp:418
Definition: eigen-comma-initializers.hpp:20
constexpr bool eigen_TriangularView
T is of type Eigen::TriangularView.
Definition: eigen-forward-declarations.hpp:359
constexpr bool value
T is numerical value or is reducible to a numerical value.
Definition: value.hpp:31
std::conditional_t< sizeof...(dims)==1, Eigen::Matrix< Scalar, detail::eigen_index_convert< dims >..., detail::eigen_index_convert< 1 > >, Eigen::Matrix< Scalar, detail::eigen_index_convert< dims >... > > eigen_matrix_t
An alias for a self-contained, writable, native Eigen matrix.
Definition: eigen-forward-declarations.hpp:491
constexpr auto eigen_Replicate_factor_v
Helper template for eigen_Replicate_factor.
Definition: eigen-forward-declarations.hpp:318
Definition: eigen-forward-declarations.hpp:144
Definition: eigen-forward-declarations.hpp:166
constexpr bool eigen_Replicate
T is of type Eigen::Replicate.
Definition: eigen-forward-declarations.hpp:301
constexpr bool eigen_Block
Specifies whether T is Eigen::Block.
Definition: eigen-forward-declarations.hpp:136
Definition: eigen-forward-declarations.hpp:22
Definition: eigen-forward-declarations.hpp:255
constexpr bool eigen_ArrayWrapper
T is of type Eigen::ArrayWrapper.
Definition: eigen-forward-declarations.hpp:114
constexpr bool eigen_array_general
Specifies a native Eigen3 array or expression class deriving from Eigen::ArrayBase.
Definition: eigen-forward-declarations.hpp:443
constexpr bool eigen_CwiseUnaryOp
Specifies whether T is Eigen::CwiseUnaryOp.
Definition: eigen-forward-declarations.hpp:158
Definition: eigen-forward-declarations.hpp:61
constexpr bool size
T is either an index representing a size, or void which represents that there is no size...
Definition: size.hpp:32
Definition: eigen-forward-declarations.hpp:366
constexpr bool eigen_dense_general
Specifies a native Eigen3 object deriving from Eigen::MatrixBase or Eigen::ArrayBase.
Definition: eigen-forward-declarations.hpp:457
decltype(auto) constexpr sum(Ts &&...ts)
Element-by-element sum of one or more objects.
Definition: sum.hpp:112
Definition: eigen-forward-declarations.hpp:345
Definition: eigen-forward-declarations.hpp:427
Definition: eigen-forward-declarations.hpp:211
constexpr bool eigen_DiagonalMatrix
T is of type Eigen::DiagonalMatrix.
Definition: eigen-forward-declarations.hpp:203
Definition: eigen-forward-declarations.hpp:100
Definition: eigen-forward-declarations.hpp:276
The replication factor for Eigen::Replicate in a given direction.
Definition: eigen-forward-declarations.hpp:310
constexpr bool eigen_CwiseUnaryView
Specifies whether T is Eigen::CwiseUnaryView.
Definition: eigen-forward-declarations.hpp:180
constexpr std::size_t dynamic_size
A constant indicating that a size or index is dynamic.
Definition: global-definitions.hpp:33
constexpr bool eigen_VectorBlock
Specifies whether T is Eigen::VectorBlock.
Definition: eigen-forward-declarations.hpp:380
constexpr bool eigen_general
Specifies any descendant of Eigen::EigenBase.
Definition: eigen-forward-declarations.hpp:393
Definition: eigen-forward-declarations.hpp:233
constexpr bool eigen_MatrixWrapper
T is of type Eigen::MatrixWrapper.
Definition: eigen-forward-declarations.hpp:269
Definition: eigen-forward-declarations.hpp:402
Definition: eigen-forward-declarations.hpp:79
constexpr bool eigen_Identity
T is an Eigen identity matrix (not necessarily an identity_matrix).
Definition: eigen-forward-declarations.hpp:248
Definition: eigen-forward-declarations.hpp:188
Definition: eigen-forward-declarations.hpp:70
constexpr bool eigen_SelfAdjointView
T is of type Eigen::SelfAdjointView.
Definition: eigen-forward-declarations.hpp:338
constexpr bool eigen_DiagonalWrapper
T is of type Eigen::DiagonalMatrix.
Definition: eigen-forward-declarations.hpp:225