fwd.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2014-2024 CNRS INRIA
3  */
4 
5 #ifndef __eigenpy_fwd_hpp__
6 #define __eigenpy_fwd_hpp__
7 
8 #if defined(__clang__)
9 #define EIGENPY_CLANG_COMPILER
10 #elif defined(__GNUC__)
11 #define EIGENPY_GCC_COMPILER
12 #elif defined(_MSC_VER)
13 #define EIGENPY_MSVC_COMPILER
14 #endif
15 
16 #if (__cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703))
17 #define EIGENPY_WITH_CXX17_SUPPORT
18 #endif
19 
20 #if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201403))
21 #define EIGENPY_WITH_CXX14_SUPPORT
22 #endif
23 
24 #if (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
25 #define EIGENPY_WITH_CXX11_SUPPORT
26 #endif
27 
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
33 
34 // For more details, visit
35 // https://stackoverflow.com/questions/171435/portability-of-warning-preprocessor-directive
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 \
47  : #old_header has been replaced \
48  by #new_header.\n Please use #new_header instead of #old_header.)
49 #elif defined(WIN32)
50 #define EIGENPY_PRAGMA(x) __pragma(#x)
51 #define EIGENPY_PRAGMA_MESSAGE(the_message) \
52  EIGENPY_PRAGMA(message(#the_message))
53 #define EIGENPY_PRAGMA_WARNING(the_message) \
54  EIGENPY_PRAGMA(message(EIGENPY_STRINGCAT("WARNING: ", the_message)))
55 #endif
56 
57 #define EIGENPY_DEPRECATED_MACRO(macro, the_message) \
58  EIGENPY_PRAGMA_WARNING( \
59  EIGENPY_STRINGCAT("this macro is deprecated: ", the_message))
60 #define EIGENPY_DEPRECATED_FILE(the_message) \
61  EIGENPY_PRAGMA_WARNING( \
62  EIGENPY_STRINGCAT("this file is deprecated: ", the_message))
63 
64 #define EIGENPY_DOCUMENTATION_START_IGNORE
65 #define EIGENPY_DOCUMENTATION_END_IGNORE
66 
67 #include "eigenpy/config.hpp"
68 
69 // Silence a warning about a deprecated use of boost bind by boost python
70 // at least fo boost 1.73 to 1.75
71 // ref. https://github.com/stack-of-tasks/tsid/issues/128
72 #define BOOST_BIND_GLOBAL_PLACEHOLDERS
73 #include <boost/python.hpp>
74 #include <boost/python/scope.hpp>
75 
76 #include <type_traits>
77 #include <utility>
78 
79 namespace eigenpy {
80 
81 namespace bp = boost::python;
82 
83 }
84 
85 #define NO_IMPORT_ARRAY
86 #include "eigenpy/numpy.hpp"
87 #undef NO_IMPORT_ARRAY
88 
89 #undef BOOST_BIND_GLOBAL_PLACEHOLDERS
90 
91 #include <Eigen/Core>
92 #include <Eigen/Geometry>
93 
94 #ifdef EIGENPY_WITH_CXX11_SUPPORT
95 #include <unsupported/Eigen/CXX11/Tensor>
96 #define EIGENPY_WITH_TENSOR_SUPPORT
97 #endif
98 
99 #if EIGEN_VERSION_AT_LEAST(3, 2, 90)
100 #define EIGENPY_DEFAULT_ALIGNMENT_VALUE Eigen::Aligned16
101 #else
102 #define EIGENPY_DEFAULT_ALIGNMENT_VALUE Eigen::Aligned
103 #endif
104 
105 #define EIGENPY_DEFAULT_ALIGN_BYTES EIGEN_DEFAULT_ALIGN_BYTES
106 
107 #define EIGENPY_NO_ALIGNMENT_VALUE Eigen::Unaligned
108 
109 #define EIGENPY_UNUSED_VARIABLE(var) (void)(var)
110 #define EIGENPY_UNUSED_TYPE(type) EIGENPY_UNUSED_VARIABLE((type *)(NULL))
111 
112 #ifdef EIGENPY_WITH_CXX11_SUPPORT
113 #include <memory>
114 #define EIGENPY_SHARED_PTR_HOLDER_TYPE(T) ::std::shared_ptr<T>
115 #else
116 #include <boost/shared_ptr.hpp>
117 #define EIGENPY_SHARED_PTR_HOLDER_TYPE(T) ::boost::shared_ptr<T>
118 #endif
119 
120 namespace eigenpy {
121 template <typename MatType,
122  typename Scalar =
123  typename boost::remove_reference<MatType>::type::Scalar>
124 struct EigenToPy;
125 template <typename MatType,
126  typename Scalar =
127  typename boost::remove_reference<MatType>::type::Scalar>
128 struct EigenFromPy;
129 
130 template <typename T>
132  typedef typename boost::remove_const<
133  typename boost::remove_reference<T>::type>::type type;
134 };
135 
136 template <typename EigenType>
139  typedef typename boost::mpl::if_<
140  boost::is_base_of<Eigen::MatrixBase<EigenType_>, EigenType_>,
141  Eigen::MatrixBase<EigenType_>
142 #ifdef EIGENPY_WITH_TENSOR_SUPPORT
143  ,
144  typename boost::mpl::if_<
145  boost::is_base_of<Eigen::TensorBase<EigenType_>, EigenType_>,
146  Eigen::TensorBase<EigenType_>, void>::type
147 #else
148  ,
149  void
150 #endif
152 
153  typedef typename boost::mpl::if_<
154  boost::is_const<typename boost::remove_reference<EigenType>::type>,
156 };
157 
158 template <typename EigenType>
160 
161 template <typename MatType, int Options, typename Stride>
162 struct get_eigen_ref_plain_type<Eigen::Ref<MatType, Options, Stride> > {
163  typedef typename Eigen::internal::traits<
164  Eigen::Ref<MatType, Options, Stride> >::PlainObjectType type;
165 };
166 
167 #ifdef EIGENPY_WITH_TENSOR_SUPPORT
168 template <typename TensorType>
169 struct get_eigen_ref_plain_type<Eigen::TensorRef<TensorType> > {
170  typedef TensorType type;
171 };
172 #endif
173 
174 namespace internal {
175 template <class T1, class T2>
177  template <class U, class V>
178  static auto check(U *) -> decltype(std::declval<U>() == std::declval<V>());
179  template <typename, typename>
180  static auto check(...) -> std::false_type;
181 
182  using type = typename std::is_same<bool, decltype(check<T1, T2>(0))>::type;
183 };
184 } // namespace internal
185 
186 template <class T1, class T2 = T1>
188 
189 } // namespace eigenpy
190 
191 #include "eigenpy/alignment.hpp"
192 
193 #endif // ifndef __eigenpy_fwd_hpp__
boost::python
Definition: alignment.hpp:49
Eigen
Definition: complex.cpp:7
eigenpy::remove_const_reference
Definition: fwd.hpp:131
eigenpy::get_eigen_ref_plain_type< Eigen::Ref< MatType, Options, Stride > >::type
Eigen::internal::traits< Eigen::Ref< MatType, Options, Stride > >::PlainObjectType type
Definition: fwd.hpp:164
eigenpy::get_eigen_base_type::EigenType_
remove_const_reference< EigenType >::type EigenType_
Definition: fwd.hpp:138
eigenpy::get_eigen_base_type::type
boost::mpl::if_< boost::is_const< typename boost::remove_reference< EigenType >::type >, const _type, _type >::type type
Definition: fwd.hpp:155
eigenpy
Definition: alignment.hpp:14
eigenpy::internal::has_operator_equal_impl::check
static auto check(U *) -> decltype(std::declval< U >()==std::declval< V >())
eigenpy::get_eigen_base_type
Definition: fwd.hpp:137
alignment.hpp
eigenpy::get_eigen_ref_plain_type
Definition: fwd.hpp:159
eigenpy::internal::has_operator_equal_impl
Definition: fwd.hpp:176
eigenpy::get_eigen_base_type::_type
boost::mpl::if_< boost::is_base_of< Eigen::MatrixBase< EigenType_ >, EigenType_ >, Eigen::MatrixBase< EigenType_ >, void >::type _type
Definition: fwd.hpp:151
numpy.hpp
eigenpy::remove_const_reference::type
boost::remove_const< typename boost::remove_reference< T >::type >::type type
Definition: fwd.hpp:133
eigenpy::internal::has_operator_equal_impl::type
typename std::is_same< bool, decltype(check< T1, T2 >(0))>::type type
Definition: fwd.hpp:182
eigenpy::has_operator_equal
Definition: fwd.hpp:187


eigenpy
Author(s): Justin Carpentier, Nicolas Mansard
autogenerated on Tue Jan 23 2024 03:15:01