1 #ifndef STAN_MATH_REV_MAT_FUN_EIGEN_NUMTRAITS_HPP
2 #define STAN_MATH_REV_MAT_FUN_EIGEN_NUMTRAITS_HPP
18 template<>
struct NumTraits<
stan::math::var>
19 : GenericNumTraits<stan::math::var> {
21 return NumTraits<double>::dummy_precision();
25 RequireInitialization = 0,
27 ReadCost = 2 * NumTraits<double>::ReadCost,
29 AddCost = NumTraits<double>::AddCost,
31 MulCost = NumTraits<double>::MulCost
40 struct significant_decimals_default_impl<
stan::math::var, false> {
41 static inline int run() {
44 return cast<double, int>(
ceil(-
log(std::numeric_limits<double>
55 struct scalar_product_traits<
stan::math::var, double> {
64 struct scalar_product_traits<double,
stan::math::var> {
71 template<
typename Index,
bool ConjugateLhs,
bool ConjugateRhs>
72 struct general_matrix_vector_product<Index,
stan::math::var, ColMajor,
77 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
79 enum { LhsStorageOrder = ColMajor };
81 EIGEN_DONT_INLINE
static void run(
83 const LhsScalar* lhs, Index lhsStride,
84 const RhsScalar* rhs, Index rhsIncr,
87 for (Index i = 0; i <
rows; i++) {
92 (static_cast<int>(LhsStorageOrder) == static_cast<int>(ColMajor))
93 ?(&lhs[i]):(&lhs[i*lhsStride]),
94 (static_cast<int>(LhsStorageOrder) == static_cast<int>(ColMajor))
100 template<
typename Index,
bool ConjugateLhs,
bool ConjugateRhs>
101 struct general_matrix_vector_product<Index,
stan::math::var,
102 RowMajor, ConjugateLhs,
106 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
108 enum { LhsStorageOrder = RowMajor };
110 EIGEN_DONT_INLINE
static void
112 const LhsScalar* lhs, Index lhsStride,
113 const RhsScalar* rhs, Index rhsIncr,
114 ResScalar* res, Index resIncr,
const RhsScalar &alpha) {
115 for (Index i = 0; i <
rows; i++) {
120 (static_cast<int>(LhsStorageOrder) == static_cast<int>(ColMajor))
121 ? (&lhs[i]) : (&lhs[i*lhsStride]),
122 (static_cast<int>(LhsStorageOrder) == static_cast<int>(ColMajor))
124 rhs, rhsIncr, cols));
128 template<
typename Index,
int LhsStorageOrder,
bool ConjugateLhs,
129 int RhsStorageOrder,
bool ConjugateRhs>
130 struct general_matrix_matrix_product<Index,
stan::math::var,
131 LhsStorageOrder, ConjugateLhs,
133 ConjugateRhs, ColMajor> {
136 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
139 const LhsScalar* lhs, Index lhsStride,
140 const RhsScalar* rhs, Index rhsStride,
143 level3_blocking<LhsScalar, RhsScalar>& ,
144 GemmParallelInfo<Index>* ) {
145 for (Index i = 0; i <
cols; i++) {
146 general_matrix_vector_product<Index, LhsScalar, LhsStorageOrder,
147 ConjugateLhs, RhsScalar, ConjugateRhs>
148 ::run(rows, depth, lhs, lhsStride,
149 &rhs[(static_cast<int>(RhsStorageOrder)
150 == static_cast<int>(ColMajor))
151 ? (i*rhsStride) :(i) ],
152 (static_cast<int>(RhsStorageOrder)
153 == static_cast<int>(ColMajor)) ? (1) : (rhsStride),
154 &res[i*resStride], 1, alpha);
int rows(const Eigen::Matrix< T, R, C > &m)
Return the number of rows in the specified matrix, vector, or row vector.
static EIGEN_DONT_INLINE void run(Index rows, Index cols, const LhsScalar *lhs, Index lhsStride, const RhsScalar *rhs, Index rhsIncr, ResScalar *res, Index resIncr, const ResScalar &alpha)
stan::math::var LhsScalar
fvar< T > log(const fvar< T > &x)
static stan::math::var dummy_precision()
scalar_product_traits< LhsScalar, RhsScalar >::ReturnType ResScalar
scalar_product_traits< LhsScalar, RhsScalar >::ReturnType ResScalar
Independent (input) and dependent (output) variables for gradients.
(Expert) Numerical traits for algorithmic differentiation variables.
stan::math::var ReturnType
stan::math::var RhsScalar
stan::math::var LhsScalar
static void run(Index rows, Index cols, Index depth, const LhsScalar *lhs, Index lhsStride, const RhsScalar *rhs, Index rhsStride, ResScalar *res, Index resStride, const ResScalar &alpha, level3_blocking< LhsScalar, RhsScalar > &, GemmParallelInfo< Index > *)
int cols(const Eigen::Matrix< T, R, C > &m)
Return the number of columns in the specified matrix, vector, or row vector.
stan::math::var LhsScalar
scalar_product_traits< LhsScalar, RhsScalar >::ReturnType ResScalar
static EIGEN_DONT_INLINE void run(Index rows, Index cols, const LhsScalar *lhs, Index lhsStride, const RhsScalar *rhs, Index rhsIncr, ResScalar *res, Index resIncr, const RhsScalar &alpha)
stan::math::var RhsScalar
stan::math::var RhsScalar
fvar< T > ceil(const fvar< T > &x)
stan::math::var ReturnType