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_;
42 virtual ~gevv_vvv_vari() {}
45 for (
size_t i = 0; i <
length_; i++) {
65 struct NumTraits<stan::agrad::var> {
94 return std::numeric_limits<double>::epsilon();
132 RequireInitialization = 0,
145 struct significant_decimals_default_impl<stan::agrad::var,false>
151 return cast<double,int>(
ceil(-
log(std::numeric_limits<double>::epsilon())
161 struct scalar_product_traits<stan::agrad::var,double> {
170 struct scalar_product_traits<double,stan::agrad::var> {
177 template<
typename Index,
bool ConjugateLhs,
bool ConjugateRhs>
178 struct general_matrix_vector_product<Index,stan::agrad::var,ColMajor,ConjugateLhs,
stan::agrad::var,ConjugateRhs>
182 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
ResScalar;
183 enum { LhsStorageOrder = ColMajor };
185 EIGEN_DONT_INLINE
static void run(
191 for (Index i = 0; i <
rows; i++) {
192 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));
196 template<
typename Index,
bool ConjugateLhs,
bool ConjugateRhs>
197 struct general_matrix_vector_product<Index,stan::agrad::var,RowMajor,ConjugateLhs,
stan::agrad::var,ConjugateRhs>
201 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
ResScalar;
202 enum { LhsStorageOrder = RowMajor };
204 EIGEN_DONT_INLINE
static void run(
210 for (Index i = 0; i <
rows; i++) {
211 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));
215 template<
typename Index,
int LhsStorageOrder,
bool ConjugateLhs,
int RhsStorageOrder,
bool ConjugateRhs>
216 struct general_matrix_matrix_product<Index,stan::agrad::var,LhsStorageOrder,ConjugateLhs,
stan::agrad::var,RhsStorageOrder,ConjugateRhs,ColMajor>
220 typedef typename scalar_product_traits<LhsScalar, RhsScalar>::ReturnType
ResScalar;
226 level3_blocking<LhsScalar,RhsScalar>& ,
227 GemmParallelInfo<Index>* )
229 for (Index i = 0; i <
cols; i++) {
230 general_matrix_vector_product<Index,LhsScalar,LhsStorageOrder,ConjugateLhs,RhsScalar,ConjugateRhs>::run(
231 rows,depth,_lhs,lhsStride,
232 &_rhs[((
int)RhsStorageOrder == (
int)ColMajor)?(i*rhsStride):(i)],((
int)RhsStorageOrder == (
int)ColMajor)?(1):(rhsStride),
233 &res[i*resStride],1,alpha);
stan::agrad::var RhsScalar
scalar_product_traits< LhsScalar, RhsScalar >::ReturnType ResScalar
stan::agrad::var LhsScalar
stan::agrad::var LhsScalar
static Real highest()
Return standard library's highest for double-precision floating point, std::numeric_limits<double>max...
stan::agrad::var ReturnType
stan::agrad::var Real
Real-valued variables.
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 > *)
stan::agrad::var ReturnType
double max(const double a, const double b)
const double val_
The value of this variable.
memory::stack_alloc memalloc_
stan::agrad::var LhsScalar
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)
fvar< T > ceil(const fvar< T > &x)
scalar_product_traits< LhsScalar, RhsScalar >::ReturnType ResScalar
static Real lowest()
Return standard library's lowest for double-precision floating point, -std::numeric_limits<double...
vari * vi_
Pointer to the implementation of this variable.
stan::agrad::var Nested
Nested variables.
size_t rows(const Eigen::Matrix< T, R, C > &m)
The variable implementation base class.
stan::agrad::var NonInteger
Non-integer valued variables.
scalar_product_traits< LhsScalar, RhsScalar >::ReturnType ResScalar
stan::agrad::var RhsScalar
size_t cols(const Eigen::Matrix< T, R, C > &m)
Independent (input) and dependent (output) variables for gradients.
double e()
Return the base of the natural logarithm.
stan::agrad::var RhsScalar
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)
static Real dummy_precision()
Return dummy precision.
static Real epsilon()
Return standard library's epsilon for double-precision floating point, std::numeric_limits<double>::e...
fvar< T > log(const fvar< T > &x)
double adj_
The adjoint of this variable, which is the partial derivative of this variable with respect to the ro...
stan::agrad::vari * alpha_