Automatic Differentiation
 
Loading...
Searching...
No Matches
is_vector.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_PRIM_META_IS_VECTOR_HPP
2#define STAN_MATH_PRIM_META_IS_VECTOR_HPP
3
10#include <type_traits>
11#include <vector>
12
13namespace stan {
14
18template <typename T, typename = void>
19struct is_std_vector : std::false_type {};
20
21namespace internal {
26template <typename T, bool = is_eigen<T>::value>
28 : bool_constant<std::decay_t<T>::ColsAtCompileTime == 1> {};
29
33template <typename T>
34struct is_eigen_col_vector_impl<T, false> : std::false_type {};
35
39template <typename T, bool = is_eigen<T>::value>
41 : std::integral_constant<bool, std::decay_t<T>::RowsAtCompileTime == 1> {};
42
46template <typename T>
47struct is_eigen_row_vector_impl<T, false> : std::false_type {};
48
52template <typename T, bool = bool_constant<is_eigen<T>::value
53 || (is_eigen<value_type_t<T>>::value
54 && is_var<T>::value)>::value>
56 : bool_constant<std::decay_t<T>::ColsAtCompileTime == 1> {};
57
61template <typename T>
62struct is_col_vector_impl<T, false> : std::false_type {};
63
67template <typename T, bool = bool_constant<is_eigen<T>::value
68 || (is_eigen<value_type_t<T>>::value
69 && is_var<T>::value)>::value>
71 : std::integral_constant<bool, std::decay_t<T>::RowsAtCompileTime == 1> {};
72
76template <typename T>
77struct is_row_vector_impl<T, false> : std::false_type {};
78
79} // namespace internal
80
86template <typename T>
88
96template <typename T>
99
102template <typename T>
105
108template <typename... Types>
123template <template <class...> class TypeCheck, class... Check>
126 TypeCheck, Check...>>;
135template <typename T>
137
145template <typename T>
147
150template <typename T>
152
155template <typename... Types>
165template <typename T>
167
175template <typename T>
186template <typename T>
187struct is_row_vector : internal::is_row_vector_impl<std::decay_t<T>> {};
188
189template <typename T>
191
199template <typename T>
208template <typename T>
209struct is_eigen_vector : bool_constant<is_eigen_col_vector<T>::value
210 || is_eigen_row_vector<T>::value> {};
211
219template <typename T>
221
224template <typename T>
227
230template <typename... Types>
233
236template <typename... Types>
239
242template <typename... Types>
245
249template <typename... Types>
264template <template <class...> class TypeCheck, class... Check>
267 TypeCheck, Check...>>;
268
274template <template <class...> class TypeCheck, class... Check>
277 TypeCheck, Check...>>;
278
284template <template <class...> class TypeCheck, class... Check>
287 TypeCheck, Check>...>;
288
295template <template <class...> class TypeCheck, class... Check>
298 TypeCheck, Check>...>;
299
305template <template <class...> class TypeCheck, class... Check>
308 TypeCheck, Check>...>;
309
315template <template <class...> class TypeCheck, class... Check>
318 TypeCheck, Check>...>;
319
325template <template <class...> class TypeCheck, class... Check>
328 TypeCheck, Check...>>;
329
335template <template <class...> class TypeCheck, class... Check>
338 TypeCheck, Check...>>;
339
345template <template <class...> class TypeCheck, class... Check>
348 TypeCheck, Check>...>;
349
356template <template <class...> class TypeCheck, class... Check>
359 is_eigen_vector, scalar_type_t, TypeCheck, Check>...>;
360
366template <template <class...> class TypeCheck, class... Check>
369 TypeCheck, Check>...>;
370
376template <template <class...> class TypeCheck, class... Check>
379 is_eigen_vector, scalar_type_t, TypeCheck, Check>...>;
386template <typename Row, typename Col>
389
394template <typename Row, typename Col>
397
402template <typename Row, typename Col>
405
410template <typename Row, typename Col>
413
420template <typename T>
422 : bool_constant<is_eigen_vector<T>::value || is_std_vector<T>::value
423 || (is_var<T>::value
424 && is_eigen_vector<value_type_t<T>>::value)> {};
425
433template <typename T>
435
438template <typename T>
440
443template <typename... Types>
445
448template <typename... Types>
450
453template <typename... Types>
456
459template <typename... Types>
474template <template <class...> class TypeCheck, class... Check>
476 container_type_check_base<is_vector, value_type_t, TypeCheck, Check...>>;
477
483template <template <class...> class TypeCheck, class... Check>
485 container_type_check_base<is_vector, value_type_t, TypeCheck, Check...>>;
486
492template <template <class...> class TypeCheck, class... Check>
495
501template <template <class...> class TypeCheck, class... Check>
504
510template <template <class...> class TypeCheck, class... Check>
513
519template <template <class...> class TypeCheck, class... Check>
522
528template <template <class...> class TypeCheck, class... Check>
530 container_type_check_base<is_vector, scalar_type_t, TypeCheck, Check...>>;
531
537template <template <class...> class TypeCheck, class... Check>
539 container_type_check_base<is_vector, scalar_type_t, TypeCheck, Check...>>;
540
546template <template <class...> class TypeCheck, class... Check>
549
555template <template <class...> class TypeCheck, class... Check>
558
564template <template <class...> class TypeCheck, class... Check>
567
573template <template <class...> class TypeCheck, class... Check>
578namespace internal {
579
583template <typename T>
584struct is_std_vector_impl : std::false_type {};
585
590template <typename... Args>
591struct is_std_vector_impl<std::vector<Args...>> : std::true_type {};
592
593} // namespace internal
594
598template <typename T>
600 T, std::enable_if_t<internal::is_std_vector_impl<std::decay_t<T>>::value>>
601 : std::true_type {};
602
603template <typename T>
605
612template <typename T>
613struct scalar_type<T, std::enable_if_t<is_std_vector<T>::value>> {
615};
616
623template <typename T>
624struct value_type<T, std::enable_if_t<is_std_vector<T>::value>> {
625 using type = typename std::decay_t<T>::value_type;
626};
627
635template <typename T>
637
640template <typename T>
642
645template <typename... Types>
648
651template <typename... Types>
654
657template <typename... Types>
660
664template <typename... Types>
679template <template <class...> class TypeCheck, class... Check>
682 TypeCheck, Check...>>;
683
689template <template <class...> class TypeCheck, class... Check>
692 TypeCheck, Check...>>;
693
699template <template <class...> class TypeCheck, class... Check>
702 TypeCheck, Check>...>;
703
710template <template <class...> class TypeCheck, class... Check>
713 TypeCheck, Check>...>;
714
720template <template <class...> class TypeCheck, class... Check>
723 TypeCheck, Check>...>;
724
730template <template <class...> class TypeCheck, class... Check>
733 TypeCheck, Check>...>;
734
740template <template <class...> class TypeCheck, class... Check>
743 TypeCheck, Check...>>;
744
750template <template <class...> class TypeCheck, class... Check>
753 TypeCheck, Check...>>;
754
760template <template <class...> class TypeCheck, class... Check>
763 TypeCheck, Check>...>;
764
771template <template <class...> class TypeCheck, class... Check>
774 TypeCheck, Check>...>;
775
781template <template <class...> class TypeCheck, class... Check>
784 TypeCheck, Check>...>;
785
791template <template <class...> class TypeCheck, class... Check>
794 TypeCheck, Check>...>;
797} // namespace stan
798#endif
require_t< is_col_vector< std::decay_t< T > > > require_col_vector_t
Require type satisfies is_col_vector.
require_not_t< is_col_vector< std::decay_t< T > > > require_not_col_vector_t
Require type does not satisfy is_col_vector.
require_all_t< is_col_vector< std::decay_t< Types > >... > require_all_col_vector_t
Require all of the types satisfy is_col_vector.
require_t< container_type_check_base< is_eigen_col_vector, value_type_t, TypeCheck, Check... > > require_eigen_col_vector_vt
Require type satisfies is_eigen_col_vector.
require_t< is_eigen_col_vector< std::decay_t< T > > > require_eigen_col_vector_t
Require type satisfies is_eigen_col_vector.
Definition is_vector.hpp:98
require_not_t< is_eigen_col_vector< std::decay_t< T > > > require_not_eigen_col_vector_t
Require type does not satisfy is_eigen_col_vector.
require_all_t< is_eigen_col_vector< std::decay_t< Types > >... > require_all_eigen_col_vector_t
Require all of the types satisfy is_eigen_col_vector.
require_t< is_eigen_row_vector< std::decay_t< T > > > require_eigen_row_vector_t
Require type satisfies is_eigen_row_vector.
require_any_not_t< container_type_check_base< is_eigen_vector, value_type_t, TypeCheck, Check >... > require_any_not_eigen_vector_vt
Require at least one of the types does not satisfy is_eigen_vector.
require_all_not_t< is_eigen_vector< std::decay_t< Types > >... > require_all_not_eigen_vector_t
Require none of the types satisfy is_eigen_vector.
require_all_not_t< container_type_check_base< is_eigen_vector, value_type_t, TypeCheck, Check >... > require_all_not_eigen_vector_vt
Require none of the types satisfy is_eigen_vector.
require_not_t< container_type_check_base< is_eigen_vector, value_type_t, TypeCheck, Check... > > require_not_eigen_vector_vt
Require type does not satisfy is_eigen_vector or.
require_not_t< container_type_check_base< is_eigen_vector, scalar_type_t, TypeCheck, Check... > > require_not_eigen_vector_st
Require type does not satisfy is_eigen_vector.
require_any_t< container_type_check_base< is_eigen_vector, value_type_t, TypeCheck, Check >... > require_any_eigen_vector_vt
Require any of the types satisfy is_eigen_vector.
require_all_t< container_type_check_base< is_eigen_vector, value_type_t, TypeCheck, Check >... > require_all_eigen_vector_vt
Require all of the types satisfy is_eigen_vector.
require_t< is_eigen_vector< std::decay_t< T > > > require_eigen_vector_t
Require type satisfies is_eigen_vector.
require_t< container_type_check_base< is_eigen_vector, value_type_t, TypeCheck, Check... > > require_eigen_vector_vt
Require type satisfies is_eigen_vector.
require_any_t< container_type_check_base< is_eigen_vector, scalar_type_t, TypeCheck, Check >... > require_any_eigen_vector_st
Require any of the types satisfy is_eigen_vector.
require_not_t< is_eigen_vector< std::decay_t< T > > > require_not_eigen_vector_t
Require type does not satisfy is_eigen_vector.
require_all_not_t< container_type_check_base< is_eigen_vector, scalar_type_t, TypeCheck, Check >... > require_all_not_eigen_vector_st
Require none of the types satisfy is_eigen_vector.
require_any_not_t< container_type_check_base< is_eigen_vector, scalar_type_t, TypeCheck, Check >... > require_any_not_eigen_vector_st
Require at least one of the types does not satisfy is_eigen_vector.
require_any_t< is_eigen_vector< std::decay_t< Types > >... > require_any_eigen_vector_t
Require any of the types satisfy is_eigen_vector.
require_any_not_t< is_eigen_vector< std::decay_t< Types > >... > require_any_not_eigen_vector_t
Require at least one of the types do not satisfy is_eigen_vector.
require_all_t< is_eigen_vector< std::decay_t< Types > >... > require_all_eigen_vector_t
Require all of the types satisfy is_eigen_vector.
require_t< container_type_check_base< is_eigen_vector, scalar_type_t, TypeCheck, Check... > > require_eigen_vector_st
Require type satisfies is_eigen_vector.
require_all_t< container_type_check_base< is_eigen_vector, scalar_type_t, TypeCheck, Check >... > require_all_eigen_vector_st
Require all of the types does not satisfy is_eigen_vector.
require_t< is_row_vector< std::decay_t< T > > > require_row_vector_t
Require type satisfies is_row_vector.
require_any_not_t< container_type_check_base< is_std_vector, value_type_t, TypeCheck, Check >... > require_any_not_std_vector_vt
Require at least one of the types does not satisfy is_std_vector.
require_not_t< is_std_vector< std::decay_t< T > > > require_not_std_vector_t
Require type does not satisfy is_std_vector.
require_t< container_type_check_base< is_std_vector, value_type_t, TypeCheck, Check... > > require_std_vector_vt
Require type satisfies is_std_vector.
require_all_not_t< container_type_check_base< is_std_vector, scalar_type_t, TypeCheck, Check >... > require_all_not_std_vector_st
Require none of the types satisfy is_std_vector.
require_any_t< container_type_check_base< is_std_vector, value_type_t, TypeCheck, Check >... > require_any_std_vector_vt
Require any of the types satisfy is_std_vector.
require_not_t< container_type_check_base< is_std_vector, value_type_t, TypeCheck, Check... > > require_not_std_vector_vt
Require type does not satisfy is_std_vector or.
require_t< container_type_check_base< is_std_vector, scalar_type_t, TypeCheck, Check... > > require_std_vector_st
Require type satisfies is_std_vector.
require_any_t< is_std_vector< std::decay_t< Types > >... > require_any_std_vector_t
Require any of the types satisfy is_std_vector.
require_all_not_t< is_std_vector< std::decay_t< Types > >... > require_all_not_std_vector_t
Require none of the types satisfy is_std_vector.
require_t< is_std_vector< std::decay_t< T > > > require_std_vector_t
Require type satisfies is_std_vector.
require_any_not_t< container_type_check_base< is_std_vector, scalar_type_t, TypeCheck, Check >... > require_any_not_std_vector_st
Require at least one of the types does not satisfy is_std_vector.
require_not_t< container_type_check_base< is_std_vector, scalar_type_t, TypeCheck, Check... > > require_not_std_vector_st
Require type does not satisfy is_std_vector.
require_all_t< container_type_check_base< is_std_vector, value_type_t, TypeCheck, Check >... > require_all_std_vector_vt
Require all of the types satisfy is_std_vector.
require_all_t< is_std_vector< std::decay_t< Types > >... > require_all_std_vector_t
Require all of the types satisfy is_std_vector.
require_all_t< container_type_check_base< is_std_vector, scalar_type_t, TypeCheck, Check >... > require_all_std_vector_st
Require all of the types does not satisfy is_std_vector.
require_any_t< container_type_check_base< is_std_vector, scalar_type_t, TypeCheck, Check >... > require_any_std_vector_st
Require any of the types satisfy is_std_vector.
require_all_not_t< container_type_check_base< is_std_vector, value_type_t, TypeCheck, Check >... > require_all_not_std_vector_vt
Require none of the types satisfy is_std_vector.
require_any_not_t< is_std_vector< std::decay_t< Types > >... > require_any_not_std_vector_t
Require at least one of the types do not satisfy is_std_vector.
typename value_type< T >::type value_type_t
Helper function for accessing underlying type.
std::integral_constant< bool, B > bool_constant
Alias for structs used for wraps a static constant of bool.
require_t< container_type_check_base< is_vector, value_type_t, TypeCheck, Check... > > require_vector_vt
Require type satisfies is_vector.
require_not_t< container_type_check_base< is_vector, scalar_type_t, TypeCheck, Check... > > require_not_vector_st
Require type does not satisfy is_vector.
require_all_t< is_vector< std::decay_t< Types > >... > require_all_vector_t
Require all of the types satisfy is_vector.
require_t< container_type_check_base< is_vector, scalar_type_t, TypeCheck, Check... > > require_vector_st
Require type satisfies is_vector.
require_t< is_vector< std::decay_t< T > > > require_vector_t
Require type satisfies is_vector.
require_all_not_t< container_type_check_base< is_vector, scalar_type_t, TypeCheck, Check >... > require_all_not_vector_st
Require none of the types satisfy is_vector.
require_any_not_t< is_vector< std::decay_t< Types > >... > require_any_not_vector_t
Require at least one of the types do not satisfy is_vector.
require_all_t< container_type_check_base< is_vector, value_type_t, TypeCheck, Check >... > require_all_vector_vt
Require all of the types satisfy is_vector.
require_any_not_t< container_type_check_base< is_vector, value_type_t, TypeCheck, Check >... > require_any_not_vector_vt
Require at least one of the types does not satisfy is_vector.
require_not_t< container_type_check_base< is_vector, value_type_t, TypeCheck, Check... > > require_not_vector_vt
Require type does not satisfy is_vector or.
require_all_t< container_type_check_base< is_vector, scalar_type_t, TypeCheck, Check >... > require_all_vector_st
Require all of the types does not satisfy is_vector.
require_any_t< container_type_check_base< is_vector, scalar_type_t, TypeCheck, Check >... > require_any_vector_st
Require any of the types satisfy is_vector.
require_any_t< container_type_check_base< is_vector, value_type_t, TypeCheck, Check >... > require_any_vector_vt
Require any of the types satisfy is_vector.
require_all_not_t< is_vector< std::decay_t< Types > >... > require_all_not_vector_t
Require none of the types satisfy is_vector.
require_not_t< is_vector< std::decay_t< T > > > require_not_vector_t
Require type does not satisfy is_vector.
require_any_not_t< container_type_check_base< is_vector, scalar_type_t, TypeCheck, Check >... > require_any_not_vector_st
Require at least one of the types does not satisfy is_vector.
require_any_t< is_vector< std::decay_t< Types > >... > require_any_vector_t
Require any of the types satisfy is_vector.
require_all_not_t< container_type_check_base< is_vector, value_type_t, TypeCheck, Check >... > require_all_not_vector_vt
Require none of the types satisfy is_vector.
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.
require_not_t< math::conjunction< is_eigen_row_vector< Row >, is_eigen_col_vector< Col > > > require_not_eigen_row_and_col_t
Require Row is not a row vector and Col is not a column vector.
require_not_t< math::conjunction< is_row_vector< Row >, is_col_vector< Col > > > require_not_row_and_col_vector_t
Require Row is not a row vector and Col is not a column vector.
require_t< math::conjunction< is_eigen_row_vector< Row >, is_eigen_col_vector< Col > > > require_eigen_row_and_col_t
Require Row is a row vector and Col is a column vector.
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_row_vector_v
constexpr bool is_std_vector_v
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...
require_t< math::conjunction< is_row_vector< Row >, is_col_vector< Col > > > require_row_and_col_vector_t
Require Row is a row vector and Col is a column vector.
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...
STL namespace.
Underlying implementation for detecting if a Matrix is a column vector.
Definition is_vector.hpp:56
Underlying implementation for detecting if an Eigen Matrix is a column vector.
Definition is_vector.hpp:28
Underlying implementation for detecting if an Eigen Matrix is a row vector.
Definition is_vector.hpp:41
Underlying implementation for detecting if a Matrix is a row vector.
Definition is_vector.hpp:71
This underlying implementation is used when the type is not an std vector.
If the input type T has a static comple time constant type ColsAtCompileTime equal to 1 this has a st...
If the input type T is an eigen matrix with 1 row at compile time this has a static member with a val...
Definition is_vector.hpp:87
If the input type T is an eigen matrix with 1 column at compile time this has a static member with a ...
If the input type T is an eigen matrix with 1 column or 1 row at compile time this has a static membe...
Check if type derives from EigenBase
Definition is_eigen.hpp:21
If the input type T has a static comple time constant type RowsAtCompileTime equal to 1 this has a st...
Base implementation for checking if type is std vector.
Definition is_vector.hpp:19
Defines a static member named value which is defined to be false as the primitive scalar types cannot...
Definition is_var.hpp:14
If the input type T is either an eigen matrix with 1 column or 1 row at compile time or a standard ve...
Extends std::true_type when instantiated with zero or more template parameters, all of which extend t...
scalar_type_t< typename std::decay_t< T >::value_type > type
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.