1 #ifndef __STAN__AGRAD__REV__MATRIX__SUM_HPP__
2 #define __STAN__AGRAD__REV__MATRIX__SUM_HPP__
15 class sum_v_vari :
public vari{
19 inline static double var_sum(
const var *v,
size_t length) {
21 for (
size_t i = 0; i <
length; i++)
22 result += v[i].vi_->val_;
25 template<
typename Derived>
26 inline static double var_sum(
const Eigen::DenseBase<Derived> &v) {
28 for (
int i = 0; i < v.size(); i++)
29 result += v(i).vi_->val_;
33 template<
typename Derived>
34 sum_v_vari(
const Eigen::DenseBase<Derived> &v) :
37 for (
size_t i = 0; i <
length_; i++)
40 template<
int R1,
int C1>
41 sum_v_vari(
const Eigen::Matrix<var,R1,C1> &v1) :
42 vari(var_sum(v1)), length_(v1.
size()) {
44 for (
size_t i = 0; i <
length_; i++)
47 sum_v_vari(
const var *v,
size_t len) :
48 vari(var_sum(v,len)), length_(len) {
50 for (
size_t i = 0; i <
length_; i++)
53 virtual void chain() {
54 for (
size_t i = 0; i <
length_; i++) {
67 template <
int R,
int C>
68 inline var sum(
const Eigen::Matrix<var,R,C>& m) {
71 return var(
new sum_v_vari(m));