10#ifndef EIGEN_GPU_TYPE_TRAITS_H
11#define EIGEN_GPU_TYPE_TRAITS_H
14#include "./InternalHeaderCheck.h"
38template <
typename Expr>
42struct is_device_buffer : Eigen::internal::bool_constant<false> {};
44struct is_device_buffer<
DeviceBuffer> : Eigen::internal::bool_constant<true> {};
47struct is_device_matrix : Eigen::internal::bool_constant<false> {};
48template <
typename Scalar>
49struct is_device_matrix<DeviceMatrix<Scalar>> : Eigen::internal::bool_constant<true> {};
52struct is_gemm_expr : Eigen::internal::bool_constant<false> {};
53template <
typename Lhs,
typename Rhs>
54struct is_gemm_expr<GemmExpr<Lhs, Rhs>> : Eigen::internal::bool_constant<true> {};
57struct is_adjoint_view : Eigen::internal::bool_constant<false> {};
58template <
typename Scalar>
59struct is_adjoint_view<AdjointView<Scalar>> : Eigen::internal::bool_constant<true> {};
62struct is_transpose_view : Eigen::internal::bool_constant<false> {};
63template <
typename Scalar>
64struct is_transpose_view<TransposeView<Scalar>> : Eigen::internal::bool_constant<true> {};
67struct is_scaled : Eigen::internal::bool_constant<false> {};
68template <
typename Inner>
69struct is_scaled<Scaled<Inner>> : Eigen::internal::bool_constant<true> {};
86template <
typename Inner>
99template <
typename Inner>
104template <
typename Inner,
int UpLo>
105struct is_triangular_view<
TriangularView<Inner, UpLo>> : Eigen::internal::bool_constant<true> {};
108struct is_trsm_expr : Eigen::internal::bool_constant<false> {};
109template <
typename Scalar,
int UpLo>
110struct is_trsm_expr<TrsmExpr<Scalar, UpLo>> : Eigen::internal::bool_constant<true> {};
113struct is_selfadjoint_view : Eigen::internal::bool_constant<false> {};
114template <
typename Scalar,
int UpLo>
115struct is_selfadjoint_view<SelfAdjointView<Scalar, UpLo>> : Eigen::internal::bool_constant<true> {};
118struct is_const_selfadjoint_view : Eigen::internal::bool_constant<false> {};
119template <
typename Inner,
int UpLo>
120struct is_const_selfadjoint_view<ConstSelfAdjointView<Inner, UpLo>> : Eigen::internal::bool_constant<true> {};
123struct is_symm_expr : Eigen::internal::bool_constant<false> {};
124template <
typename Scalar,
int UpLo>
125struct is_symm_expr<SymmExpr<Scalar, UpLo>> : Eigen::internal::bool_constant<true> {};
128struct is_syrk_expr : Eigen::internal::bool_constant<false> {};
129template <
typename A,
int UpLo>
130struct is_syrk_expr<SyrkExpr<A, UpLo>> : Eigen::internal::bool_constant<true> {};
133struct is_llt_solve_expr : Eigen::internal::bool_constant<false> {};
134template <
typename Scalar,
int UpLo>
135struct is_llt_solve_expr<LltSolveExpr<Scalar, UpLo>> : Eigen::internal::bool_constant<true> {};
138struct is_lu_solve_expr : Eigen::internal::bool_constant<false> {};
139template <
typename Scalar>
140struct is_lu_solve_expr<LuSolveExpr<Scalar>> : Eigen::internal::bool_constant<true> {};
143struct is_llt_view : Eigen::internal::bool_constant<false> {};
144template <
typename Scalar,
int UpLo>
145struct is_llt_view<LLTView<Scalar, UpLo>> : Eigen::internal::bool_constant<true> {};
148struct is_lu_view : Eigen::internal::bool_constant<false> {};
149template <
typename Scalar>
150struct is_lu_view<LUView<Scalar>> : Eigen::internal::bool_constant<true> {};
153struct is_device_add_expr : Eigen::internal::bool_constant<false> {};
154template <
typename Scalar>
155struct is_device_add_expr<DeviceAddExpr<Scalar>> : Eigen::internal::bool_constant<true> {};
158struct is_device_scaled_device : Eigen::internal::bool_constant<false> {};
159template <
typename Inner>
160struct is_device_scaled_device<DeviceScaledDevice<Inner>> : Eigen::internal::bool_constant<true> {};
163struct is_device_scalar : Eigen::internal::bool_constant<false> {};
165struct is_device_scalar<DeviceScalar<S>> : Eigen::internal::bool_constant<true> {};
240template <
typename... Types>
272template <
typename... Types>
304template <
typename... Types>
336template <
typename... Types>
345struct is_scaled : internal::is_scaled<std::decay_t<T>> {};
458template <
typename... Types>
490template <
typename... Types>
522template <
typename... Types>
554template <
typename... Types>
586template <
typename... Types>
618template <
typename... Types>
650template <
typename... Types>
682template <
typename... Types>
714template <
typename... Types>
746template <
typename... Types>
787template <
typename... Types>
819template <
typename... Types>
851template <
typename... Types>
864using scalar_type_t = internal::scalar_type_t<std::decay_t<T>>;
873struct is_device_expr : Eigen::internal::bool_constant<internal::device_expr_traits<std::decay_t<T>>::is_device_expr> {
900template <
typename... Types>
910struct is_complex : Eigen::internal::bool_constant<false> {};
913struct is_complex<std::complex<T>> : Eigen::internal::bool_constant<true> {};
938struct is_host_scalar : Eigen::internal::bool_constant<std::is_floating_point<std::decay_t<T>>::value ||
939 std::is_integral<std::decay_t<T>>::value || is_complex_v<T>> {};
Expression returned by operator*(Scalar, DeviceMatrix/View), carrying the scalar factor.
Definition DeviceExpr.h:77
Internal RAII owner for an untyped GPU device allocation.
Definition GpuSupport.h:293
internal::require_t< is_scaled< T > > require_scaled
Definition type_traits.h:361
internal::require_all_t< is_llt_view_v< Types >... > require_all_llt_view
Definition type_traits.h:715
internal::require_all_t< is_lu_view_v< Types >... > require_all_lu_view
Definition type_traits.h:747
internal::require_t< is_lu_solve_expr< T > > require_lu_solve_expr
Definition type_traits.h:675
constexpr bool is_transpose_view_v
Definition type_traits.h:321
internal::require_t< is_device_scaled_device< T > > require_device_scaled_device
Definition type_traits.h:812
internal::require_t< is_device_buffer< T > > require_device_buffer
Definition type_traits.h:201
internal::require_all_t< is_adjoint_view_v< Types >... > require_all_adjoint_view
Definition type_traits.h:305
constexpr bool is_const_selfadjoint_view_v
Definition type_traits.h:539
internal::require_all_t< is_transpose_view_v< Types >... > require_all_transpose_view
Definition type_traits.h:337
internal::require_all_t< is_selfadjoint_view_v< Types >... > require_all_selfadjoint_view
Definition type_traits.h:523
internal::require_t< is_scaled_gemm< T > > require_scaled_gemm
Definition type_traits.h:409
constexpr bool is_triangular_view_v
Definition type_traits.h:443
internal::require_not_t< is_device_matrix< T > > require_not_device_matrix
Definition type_traits.h:233
internal::require_all_t< is_syrk_expr_v< Types >... > require_all_syrk_expr
Definition type_traits.h:619
internal::require_t< is_selfadjoint_view< T > > require_selfadjoint_view
Definition type_traits.h:515
constexpr bool is_adjoint_view_v
Definition type_traits.h:289
internal::require_t< is_device_scalar< T > > require_device_scalar
Definition type_traits.h:844
constexpr bool is_device_add_expr_v
Definition type_traits.h:772
internal::require_t< Eigen::internal::bool_constant< is_adjoint_view_v< T >||is_transpose_view_v< T > > > require_adjoint_or_transpose_view
Definition type_traits.h:426
constexpr bool is_lu_view_v
Definition type_traits.h:731
constexpr bool is_gemm_expr_v
Definition type_traits.h:257
constexpr bool is_selfadjoint_view_v
Definition type_traits.h:507
constexpr bool is_gemm_like_v
Definition type_traits.h:418
constexpr bool is_complex_v
Definition type_traits.h:930
internal::require_all_t< is_lu_solve_expr_v< Types >... > require_all_lu_solve_expr
Definition type_traits.h:683
internal::require_all_t< is_symm_expr_v< Types >... > require_all_symm_expr
Definition type_traits.h:587
constexpr bool is_scaled_leaf_v
Definition type_traits.h:377
internal::require_t< is_adjoint_view< T > > require_adjoint_view
Definition type_traits.h:297
internal::require_t< is_lu_view< T > > require_lu_view
Definition type_traits.h:739
constexpr bool is_llt_solve_expr_v
Definition type_traits.h:635
internal::require_t< is_host_scalar< T > > require_host_scalar
Definition type_traits.h:947
constexpr bool is_device_matrix_v
Definition type_traits.h:217
constexpr bool is_device_buffer_v
Definition type_traits.h:193
internal::require_t< is_const_selfadjoint_view< T > > require_const_selfadjoint_view
Definition type_traits.h:547
internal::require_all_t< is_device_expr_v< Types >... > require_all_device_expr
Definition type_traits.h:901
internal::require_all_t< is_device_scaled_device_v< Types >... > require_all_device_scaled_device
Definition type_traits.h:820
constexpr bool is_llt_view_v
Definition type_traits.h:699
internal::require_t< is_gemm_expr< T > > require_gemm_expr
Definition type_traits.h:265
constexpr bool is_device_scalar_v
Definition type_traits.h:836
internal::require_t< is_trsm_expr< T > > require_trsm_expr
Definition type_traits.h:483
internal::require_all_t< is_device_scalar_v< Types >... > require_all_device_scalar
Definition type_traits.h:852
internal::require_t< is_syrk_expr< T > > require_syrk_expr
Definition type_traits.h:611
internal::require_t< is_device_matrix< T > > require_device_matrix
Definition type_traits.h:225
constexpr bool is_lu_solve_expr_v
Definition type_traits.h:667
constexpr bool is_syrk_expr_v
Definition type_traits.h:603
internal::require_t< is_llt_solve_expr< T > > require_llt_solve_expr
Definition type_traits.h:643
constexpr bool is_scaled_v
Definition type_traits.h:353
internal::require_t< is_symm_expr< T > > require_symm_expr
Definition type_traits.h:579
internal::require_all_t< is_gemm_expr_v< Types >... > require_all_gemm_expr
Definition type_traits.h:273
constexpr bool is_trsm_expr_v
Definition type_traits.h:475
internal::require_all_t< is_const_selfadjoint_view_v< Types >... > require_all_const_selfadjoint_view
Definition type_traits.h:555
constexpr bool is_device_scaled_device_v
Definition type_traits.h:804
internal::require_all_t< is_triangular_view_v< Types >... > require_all_triangular_view
Definition type_traits.h:459
internal::require_all_t< is_device_add_expr_v< Types >... > require_all_device_add_expr
Definition type_traits.h:788
internal::require_all_t< is_trsm_expr_v< Types >... > require_all_trsm_expr
Definition type_traits.h:491
internal::require_t< is_device_expr< T > > require_device_expr
Definition type_traits.h:892
internal::require_t< is_device_add_expr< T > > require_device_add_expr
Definition type_traits.h:780
internal::require_t< is_scaled_leaf< T > > require_scaled_leaf
Definition type_traits.h:385
internal::require_t< is_llt_view< T > > require_llt_view
Definition type_traits.h:707
internal::require_all_t< is_llt_solve_expr_v< Types >... > require_all_llt_solve_expr
Definition type_traits.h:651
internal::require_t< is_triangular_view< T > > require_triangular_view
Definition type_traits.h:451
constexpr bool is_factor_expr_v
Definition type_traits.h:756
internal::require_all_t< is_device_matrix_v< Types >... > require_all_device_matrix
Definition type_traits.h:241
constexpr bool is_device_expr_v
Definition type_traits.h:883
internal::require_t< is_transpose_view< T > > require_transpose_view
Definition type_traits.h:329
constexpr bool is_scaled_gemm_v
Definition type_traits.h:401
constexpr bool is_symm_expr_v
Definition type_traits.h:571
Namespace containing all symbols from the Eigen library.
Describes GPU device expression types.
Definition DeviceExpr.h:173
Detects a Scaled directly over a GemmExpr (a product carrying ONE deferred scalar).
Definition type_traits.h:98
Detects a Scaled directly over a leaf DeviceMatrix (no view in between).
Definition type_traits.h:85
Definition type_traits.h:281
Definition type_traits.h:922
Definition type_traits.h:531
Definition type_traits.h:764
Definition type_traits.h:185
Definition type_traits.h:873
Definition type_traits.h:209
Definition type_traits.h:828
Definition type_traits.h:796
Definition type_traits.h:249
Definition type_traits.h:939
Definition type_traits.h:627
Definition type_traits.h:691
Definition type_traits.h:659
Definition type_traits.h:723
Definition type_traits.h:393
Definition type_traits.h:369
Definition type_traits.h:345
Definition type_traits.h:499
Definition type_traits.h:563
Definition type_traits.h:595
Definition type_traits.h:313
Definition type_traits.h:435
Definition type_traits.h:467