1 #ifndef __STAN__AGRAD__PARTIALS_VARI_HPP__
2 #define __STAN__AGRAD__PARTIALS_VARI_HPP__
20 vari** operands,
double* partials)
24 partials_(partials) { }
26 for (
size_t n = 0; n < N_; ++n)
27 operands_[n]->
adj_ +=
adj_ * partials_[n];
33 T partials_to_var(
double logp,
size_t nvaris,
35 double* all_partials) {
39 var partials_to_var<var>(
double logp,
size_t nvaris,
40 agrad::vari** all_varis,
41 double* all_partials) {
42 return var(
new agrad::partials_vari(logp, nvaris, all_varis, all_partials));
46 bool is_vec = is_vector<T>::value,
47 bool is_const = is_constant_struct<T>::value>
49 inline size_t set(agrad::vari** varis,
const T& x) {
54 struct set_varis <T,true,false>{
55 inline size_t set(agrad::vari** varis,
const T& x) {
56 for (
size_t n = 0; n <
length(x); n++)
62 struct set_varis<agrad::var, false, false> {
63 inline size_t set(agrad::vari** varis,
const agrad::var& x) {
74 template<
typename T1=double,
typename T2=double,
typename T3=double,
75 typename T4=double,
typename T5=double,
typename T6=double,
76 typename T_return_type=
typename return_type<T1,T2,T3,T4,T5,T6>::type>
91 const T4& x4=0,
const T5& x5=0,
const T6& x6=0)
98 all_varis((agrad::
vari**)agrad::
chainable::operator new(sizeof(agrad::
vari*[nvaris]))),
124 base += set_varis<T1>().
set(&all_varis[base], x1);
126 base += set_varis<T2>().
set(&all_varis[base], x2);
128 base += set_varis<T3>().
set(&all_varis[base], x3);
130 base += set_varis<T4>().
set(&all_varis[base], x4);
132 base += set_varis<T5>().
set(&all_varis[base], x5);
134 set_varis<T6>().
set(&all_varis[base], x6);