1 #ifndef __STAN__AGRAD__REV__MATRIX__EIGEN_NUMTRAITS_HPP__
2 #define __STAN__AGRAD__REV__MATRIX__EIGEN_NUMTRAITS_HPP__
22 size_t length,
double *dotprod) {
24 for (
size_t i = 0; i <
length; i++)
25 result += v1[i*stride1].vi_->
val_ * v2[i*stride2].
vi_->
val_;
27 return alpha->vi_->
val_ * result;
33 vari(eval_gevv(alpha,v1,stride1,v2,stride2,length,&
dotval_)),
length_(length) {
37 for (
size_t i = 0; i <
length_; i++)
38 v1_[i] = v1[i*stride1].vi_;
39 for (
size_t i = 0; i <
length_; i++)
40 v2_[i] = v2[i*stride2].vi_;
44 for (
size_t i = 0; i <
length_; i++) {
63 template <>
struct NumTraits<stan::agrad::var>
131 RequireInitialization = 0,
144 struct significant_decimals_default_impl<stan::agrad::var,false>
146 static inline int run()
159 struct scalar_product_traits<stan::agrad::var,double> {
168 struct scalar_product_traits<double,stan::agrad::var> {
175 template<
typename Index,
bool ConjugateLhs,
bool ConjugateRhs>
176 struct general_matrix_vector_product<Index,stan::agrad::var,ColMajor,ConjugateLhs,
stan::agrad::var,ConjugateRhs>
180 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
ResScalar;
181 enum { LhsStorageOrder = ColMajor };
183 EIGEN_DONT_INLINE
static void run(
189 for (Index i = 0; i <
rows; i++) {
190 res[i*resIncr] +=
stan::agrad::var(
new stan::agrad::gevv_vvv_vari(&alpha,((
int)LhsStorageOrder == (
int)ColMajor)?(&lhs[i]):(&lhs[i*lhsStride]),((
int)LhsStorageOrder == (
int)ColMajor)?(lhsStride):(1),rhs,rhsIncr,cols));
194 template<
typename Index,
bool ConjugateLhs,
bool ConjugateRhs>
195 struct general_matrix_vector_product<Index,stan::agrad::var,RowMajor,ConjugateLhs,
stan::agrad::var,ConjugateRhs>
199 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
ResScalar;
200 enum { LhsStorageOrder = RowMajor };
202 EIGEN_DONT_INLINE
static void run(
208 for (Index i = 0; i <
rows; i++) {
209 res[i*resIncr] +=
stan::agrad::var(
new stan::agrad::gevv_vvv_vari(&alpha,((
int)LhsStorageOrder == (
int)ColMajor)?(&lhs[i]):(&lhs[i*lhsStride]),((
int)LhsStorageOrder == (
int)ColMajor)?(lhsStride):(1),rhs,rhsIncr,cols));
213 template<
typename Index,
int LhsStorageOrder,
bool ConjugateLhs,
int RhsStorageOrder,
bool ConjugateRhs>
214 struct general_matrix_matrix_product<Index,stan::agrad::var,LhsStorageOrder,ConjugateLhs,
stan::agrad::var,RhsStorageOrder,ConjugateRhs,ColMajor>
218 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
ResScalar;
219 static void run(Index
rows, Index
cols, Index depth,
224 level3_blocking<LhsScalar,RhsScalar>& ,
225 GemmParallelInfo<Index>* )
227 for (Index i = 0; i <
cols; i++) {
228 general_matrix_vector_product<Index,LhsScalar,LhsStorageOrder,ConjugateLhs,RhsScalar,ConjugateRhs>::run(
229 rows,depth,_lhs,lhsStride,
230 &_rhs[((
int)RhsStorageOrder == (
int)ColMajor)?(i*rhsStride):(i)],((
int)RhsStorageOrder == (
int)ColMajor)?(1):(rhsStride),
231 &res[i*resStride],1,alpha);