Automatic Differentiation
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
is_eigen.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_PRIM_META_IS_EIGEN_HPP
2#define STAN_MATH_PRIM_META_IS_EIGEN_HPP
3
9#include <type_traits>
10
11namespace stan {
12
19template <typename T>
21 : bool_constant<is_base_pointer_convertible<Eigen::EigenBase, T>::value> {};
22
23template <typename T>
24inline constexpr bool is_eigen_v = is_eigen<T>::value;
25
26namespace internal {
27// primary template handles types that have no nested ::type member:
28template <class, class = void>
29struct has_internal_trait : std::false_type {};
30
31// specialization recognizes types that do have a nested ::type member:
32template <class T>
34 std::void_t<Eigen::internal::traits<std::decay_t<T>>>>
35 : std::true_type {};
36
37// primary template handles types that have no nested ::type member:
38template <class, class = void>
39struct has_scalar_trait : std::false_type {};
40
41// specialization recognizes types that do have a nested ::type member:
42template <class T>
43struct has_scalar_trait<T, std::void_t<typename std::decay_t<T>::Scalar>>
44 : std::true_type {};
45
46} // namespace internal
47
55template <typename T>
56struct scalar_type<T,
57 std::enable_if_t<is_eigen<T>::value
58 && internal::has_scalar_trait<T>::value>> {
60};
61
69template <typename T>
70struct value_type<T,
71 std::enable_if_t<is_eigen<T>::value
72 && internal::has_scalar_trait<T>::value>> {
73 using type = typename std::decay_t<T>::Scalar;
74};
75
83template <typename T>
84struct scalar_type<T,
85 std::enable_if_t<is_eigen<T>::value
86 && !internal::has_scalar_trait<T>::value>> {
88 typename Eigen::internal::traits<std::decay_t<T>>::Scalar>;
89};
90
98template <typename T>
99struct value_type<T,
100 std::enable_if_t<is_eigen<T>::value
101 && !internal::has_scalar_trait<T>::value>> {
102 using type = typename Eigen::internal::traits<std::decay_t<T>>::Scalar;
103};
104
112template <typename T>
114
117template <typename T>
119
122template <typename... Types>
124
127template <typename... Types>
129
132template <typename... Types>
135
138template <typename... Types>
153template <template <class...> class TypeCheck, class... Check>
155 container_type_check_base<is_eigen, value_type_t, TypeCheck, Check...>>;
156
162template <template <class...> class TypeCheck, class... Check>
164 container_type_check_base<is_eigen, value_type_t, TypeCheck, Check...>>;
165
171template <template <class...> class TypeCheck, class... Check>
174
180template <template <class...> class TypeCheck, class... Check>
183
189template <template <class...> class TypeCheck, class... Check>
192
198template <template <class...> class TypeCheck, class... Check>
201
207template <template <class...> class TypeCheck, class... Check>
209 container_type_check_base<is_eigen, scalar_type_t, TypeCheck, Check...>>;
210
216template <template <class...> class TypeCheck, class... Check>
218 container_type_check_base<is_eigen, scalar_type_t, TypeCheck, Check...>>;
219
225template <template <class...> class TypeCheck, class... Check>
228
234template <template <class...> class TypeCheck, class... Check>
237
243template <template <class...> class TypeCheck, class... Check>
246
252template <template <class...> class TypeCheck, class... Check>
262template <typename T>
264 : bool_constant<is_base_pointer_convertible<Eigen::ArrayBase, T>::value> {};
265
273template <typename T>
275
278template <typename T>
281
284template <typename... Types>
294template <typename T>
297
308template <template <class...> class TypeCheck, class... Check>
311 TypeCheck, Check...>>;
314namespace internal {
315template <typename T>
316struct is_eigen_contiguous_map_impl : std::false_type {};
317template <typename T, int Opts>
318struct is_eigen_contiguous_map_impl<Eigen::Map<T, Opts, Eigen::Stride<0, 0>>>
319 : std::true_type {};
320
321} // namespace internal
322
327template <typename T>
329 : internal::is_eigen_contiguous_map_impl<std::decay_t<T>> {};
330
331} // namespace stan
332#endif
require_any_t< is_eigen_array< std::decay_t< Types > >... > require_any_eigen_array_t
Require any of the types satisfy is_eigen_array.
Definition is_eigen.hpp:286
require_t< container_type_check_base< is_eigen_array, value_type_t, TypeCheck, Check... > > require_eigen_array_vt
Require type satisfies is_eigen_array.
Definition is_eigen.hpp:311
require_t< is_eigen_array< std::decay_t< T > > > require_eigen_array_t
Require type satisfies is_eigen_array.
Definition is_eigen.hpp:274
require_not_t< is_eigen_array< std::decay_t< T > > > require_not_eigen_array_t
Require type does not satisfy is_eigen_array.
Definition is_eigen.hpp:280
require_all_t< container_type_check_base< is_eigen, value_type_t, TypeCheck, Check >... > require_all_eigen_vt
Require all of the types satisfy is_eigen.
Definition is_eigen.hpp:191
require_any_t< is_eigen< std::decay_t< Types > >... > require_any_eigen_t
Require any of the types satisfy is_eigen.
Definition is_eigen.hpp:128
require_any_not_t< container_type_check_base< is_eigen, scalar_type_t, TypeCheck, Check >... > require_any_not_eigen_st
Require at least one of the types does not satisfy is_eigen.
Definition is_eigen.hpp:236
require_t< container_type_check_base< is_eigen, value_type_t, TypeCheck, Check... > > require_eigen_vt
Require type satisfies is_eigen.
Definition is_eigen.hpp:155
require_t< container_type_check_base< is_eigen, scalar_type_t, TypeCheck, Check... > > require_eigen_st
Require type satisfies is_eigen.
Definition is_eigen.hpp:209
require_all_t< is_eigen< std::decay_t< Types > >... > require_all_eigen_t
Require all of the types satisfy is_eigen.
Definition is_eigen.hpp:123
require_t< is_eigen< std::decay_t< T > > > require_eigen_t
Require type satisfies is_eigen.
Definition is_eigen.hpp:113
require_all_not_t< container_type_check_base< is_eigen, scalar_type_t, TypeCheck, Check >... > require_all_not_eigen_st
Require none of the types satisfy is_eigen.
Definition is_eigen.hpp:254
require_all_not_t< is_eigen< std::decay_t< Types > >... > require_all_not_eigen_t
Require none of the types satisfy is_eigen.
Definition is_eigen.hpp:134
require_any_t< container_type_check_base< is_eigen, scalar_type_t, TypeCheck, Check >... > require_any_eigen_st
Require any of the types satisfy is_eigen.
Definition is_eigen.hpp:227
require_not_t< container_type_check_base< is_eigen, value_type_t, TypeCheck, Check... > > require_not_eigen_vt
Require type does not satisfy is_eigen or.
Definition is_eigen.hpp:164
require_all_t< container_type_check_base< is_eigen, scalar_type_t, TypeCheck, Check >... > require_all_eigen_st
Require all of the types does not satisfy is_eigen.
Definition is_eigen.hpp:245
require_not_t< container_type_check_base< is_eigen, scalar_type_t, TypeCheck, Check... > > require_not_eigen_st
Require type does not satisfy is_eigen.
Definition is_eigen.hpp:218
require_not_t< is_eigen< std::decay_t< T > > > require_not_eigen_t
Require type does not satisfy is_eigen.
Definition is_eigen.hpp:118
require_all_not_t< container_type_check_base< is_eigen, value_type_t, TypeCheck, Check >... > require_all_not_eigen_vt
Require none of the types satisfy is_eigen.
Definition is_eigen.hpp:200
require_any_t< container_type_check_base< is_eigen, value_type_t, TypeCheck, Check >... > require_any_eigen_vt
Require any of the types satisfy is_eigen.
Definition is_eigen.hpp:173
require_any_not_t< is_eigen< std::decay_t< Types > >... > require_any_not_eigen_t
Require at least one of the types do not satisfy is_eigen.
Definition is_eigen.hpp:140
require_any_not_t< container_type_check_base< is_eigen, value_type_t, TypeCheck, Check >... > require_any_not_eigen_vt
Require at least one of the types does not satisfy is_eigen.
Definition is_eigen.hpp:182
typename value_type< T >::type value_type_t
Helper function for accessing underlying type.
(Expert) Numerical traits for algorithmic differentiation variables.
std::enable_if_t<!Check::value > require_not_t
If condition is false, template is disabled.
std::enable_if_t< math::disjunction< Checks... >::value > require_any_t
If any condition is true, template is enabled.
std::enable_if_t<!math::disjunction< Checks... >::value > require_all_not_t
If all conditions are false, template is enabled.
bool_constant< math::conjunction< ContainerCheck< std::decay_t< Check > >..., TypeCheck< ValueCheck< Check > >... >::value > container_type_check_base
Used as the base for checking whether a type is a container with an underlying scalar type.
typename scalar_type< T >::type scalar_type_t
std::enable_if_t<!math::conjunction< Checks... >::value > require_any_not_t
If any condition is false, template is enabled.
constexpr bool is_eigen_v
Definition is_eigen.hpp:24
std::enable_if_t< Check::value > require_t
If condition is true, template is enabled.
std::enable_if_t< math::conjunction< Checks... >::value > require_all_t
If all conditions are true, template is enabled Returns a type void if all conditions are true and ot...
typename make_void< Ts... >::type void_t
Utility metafunction that maps a sequence of any types to the type void This metafunction is used in ...
Definition void_t.hpp:21
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...
STL namespace.
Check if a type is derived from Eigen::ArrayBase
Definition is_eigen.hpp:264
Check if a type is an Eigen::Map with contiguous stride.
Definition is_eigen.hpp:329
Check if type derives from EigenBase
Definition is_eigen.hpp:21
Extends std::false_type when instantiated with zero or more template parameters, all of which extend ...
scalar_type_t< typename Eigen::internal::traits< std::decay_t< T > >::Scalar > type
Definition is_eigen.hpp:88
Metaprogram structure to determine the base scalar type of a template argument.
Primary template class for metaprogram to compute the type of values stored in a container.