5 #ifndef __eigenpy_fwd_hpp__
6 #define __eigenpy_fwd_hpp__
9 #define EIGENPY_CLANG_COMPILER
10 #elif defined(__GNUC__)
11 #define EIGENPY_GCC_COMPILER
12 #elif defined(_MSC_VER)
13 #define EIGENPY_MSVC_COMPILER
16 #if (__cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703))
17 #define EIGENPY_WITH_CXX17_SUPPORT
20 #if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201403))
21 #define EIGENPY_WITH_CXX14_SUPPORT
24 #if (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
25 #define EIGENPY_WITH_CXX11_SUPPORT
28 #define EIGENPY_STRING_LITERAL(string) #string
29 #define EIGENPY_STRINGIZE(string) EIGENPY_STRING_LITERAL(string)
30 #define _EIGENPY_PPCAT(A, B) A##B
31 #define EIGENPY_PPCAT(A, B) _EIGENPY_PPCAT(A, B)
32 #define EIGENPY_STRINGCAT(A, B) A B
36 #if defined(EIGENPY_CLANG_COMPILER) || defined(EIGENPY_GCC_COMPILER)
37 #define EIGENPY_PRAGMA(x) _Pragma(#x)
38 #define EIGENPY_PRAGMA_MESSAGE(the_message) \
39 EIGENPY_PRAGMA(GCC message the_message)
40 #define EIGENPY_PRAGMA_WARNING(the_message) \
41 EIGENPY_PRAGMA(GCC warning the_message)
42 #define EIGENPY_PRAGMA_DEPRECATED(the_message) \
43 EIGENPY_PRAGMA_WARNING(Deprecated : the_message)
44 #define EIGENPY_PRAGMA_DEPRECATED_HEADER(old_header, new_header) \
45 EIGENPY_PRAGMA_WARNING( \
46 Deprecated header file : #old_header has been replaced \
47 by #new_header.\n Please use #new_header instead of #old_header.)
49 #define EIGENPY_PRAGMA(x) __pragma(#x)
50 #define EIGENPY_PRAGMA_MESSAGE(the_message) \
51 EIGENPY_PRAGMA(message(#the_message))
52 #define EIGENPY_PRAGMA_WARNING(the_message) \
53 EIGENPY_PRAGMA(message(EIGENPY_STRINGCAT("WARNING: ", the_message)))
56 #define EIGENPY_DEPRECATED_MACRO(macro, the_message) \
57 EIGENPY_PRAGMA_WARNING( \
58 EIGENPY_STRINGCAT("this macro is deprecated: ", the_message))
59 #define EIGENPY_DEPRECATED_FILE(the_message) \
60 EIGENPY_PRAGMA_WARNING( \
61 EIGENPY_STRINGCAT("this file is deprecated: ", the_message))
63 #define EIGENPY_DOCUMENTATION_START_IGNORE
64 #define EIGENPY_DOCUMENTATION_END_IGNORE
66 #include "eigenpy/config.hpp"
67 #include <boost/type_traits/is_base_of.hpp>
72 #define BOOST_BIND_GLOBAL_PLACEHOLDERS
73 #include <boost/python.hpp>
74 #include <boost/python/scope.hpp>
76 #include <type_traits>
85 #define NO_IMPORT_ARRAY
87 #undef NO_IMPORT_ARRAY
89 #undef BOOST_BIND_GLOBAL_PLACEHOLDERS
92 #include <Eigen/Sparse>
93 #include <Eigen/Geometry>
95 #ifdef EIGENPY_WITH_CXX11_SUPPORT
96 #include <unsupported/Eigen/CXX11/Tensor>
97 #define EIGENPY_WITH_TENSOR_SUPPORT
100 #if EIGEN_VERSION_AT_LEAST(3, 2, 90)
101 #define EIGENPY_DEFAULT_ALIGNMENT_VALUE Eigen::Aligned16
103 #define EIGENPY_DEFAULT_ALIGNMENT_VALUE Eigen::Aligned
106 #define EIGENPY_DEFAULT_ALIGN_BYTES EIGEN_DEFAULT_ALIGN_BYTES
108 #define EIGENPY_NO_ALIGNMENT_VALUE Eigen::Unaligned
110 #define EIGENPY_UNUSED_VARIABLE(var) (void)(var)
111 #define EIGENPY_UNUSED_TYPE(type) EIGENPY_UNUSED_VARIABLE((type *)(NULL))
113 #define EIGENPY_USED_VARIABLE_ONLY_IN_DEBUG_MODE(var)
115 #define EIGENPY_USED_VARIABLE_ONLY_IN_DEBUG_MODE(var) \
116 EIGENPY_UNUSED_VARIABLE(var)
119 #ifdef EIGENPY_WITH_CXX11_SUPPORT
121 #define EIGENPY_SHARED_PTR_HOLDER_TYPE(T) ::std::shared_ptr<T>
123 #include <boost/shared_ptr.hpp>
124 #define EIGENPY_SHARED_PTR_HOLDER_TYPE(T) ::boost::shared_ptr<T>
132 template <
typename MatType,
typename Scalar>
134 template <
typename MatType,
typename Scalar>
137 template <
typename T>
139 typedef typename boost::remove_const<
143 template <
typename EigenType>
146 typedef typename boost::mpl::if_<
147 boost::is_base_of<Eigen::MatrixBase<EigenType_>,
EigenType_>,
148 Eigen::MatrixBase<EigenType_>,
149 typename boost::mpl::if_<
150 boost::is_base_of<Eigen::SparseMatrixBase<EigenType_>,
EigenType_>,
151 Eigen::SparseMatrixBase<EigenType_>
152 #ifdef EIGENPY_WITH_TENSOR_SUPPORT
154 typename boost::mpl::if_<
155 boost::is_base_of<Eigen::TensorBase<EigenType_>,
EigenType_>,
156 Eigen::TensorBase<EigenType_>,
void>
::type
163 typedef typename boost::mpl::if_<
164 boost::is_const<typename boost::remove_reference<EigenType>::type>,
168 template <
typename EigenType>
171 template <
typename MatType,
int Options,
typename Str
ide>
173 typedef typename Eigen::internal::traits<
174 Eigen::Ref<MatType, Options, Stride> >::PlainObjectType
type;
177 #ifdef EIGENPY_WITH_TENSOR_SUPPORT
178 template <
typename TensorType>
180 typedef TensorType type;
185 template <
class T1,
class T2>
187 template <
class U,
class V>
188 static auto check(
U *) -> decltype(std::declval<U>() == std::declval<V>());
189 template <
typename,
typename>
190 static auto check(...) -> std::false_type;
192 using type =
typename std::is_same<bool, decltype(check<T1, T2>(0))>::
type;
196 template <
class T1,
class T2 = T1>
204 #endif // ifndef __eigenpy_fwd_hpp__