Skip to content

Commit ad0e910

Browse files
committed
Perfect forwarding, template cleanup
1 parent 0acf4e4 commit ad0e910

5 files changed

+55
-50
lines changed

stan/math/mix/prob/laplace_latent_bernoulli_logit_rng.hpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace math {
3232
*/
3333
template <typename ThetaVec, typename Mean, typename CovarFun,
3434
typename CovarArgs, typename RNG,
35-
require_all_eigen_vector_t<ThetaVec>* = nullptr>
35+
require_eigen_vector_t<ThetaVec>* = nullptr>
3636
inline Eigen::VectorXd laplace_latent_tol_bernoulli_logit_rng(
3737
const std::vector<int>& y, const std::vector<int>& n_samples, Mean&& mean,
3838
CovarFun&& covariance_function, CovarArgs&& covar_args, ThetaVec&& theta_0,
@@ -68,8 +68,7 @@ inline Eigen::VectorXd laplace_latent_tol_bernoulli_logit_rng(
6868
* \rng_arg
6969
* \msg_arg
7070
*/
71-
template <typename Mean, typename CovarFun, typename CovarArgs, typename RNG,
72-
require_eigen_vector_t<Mean>* = nullptr>
71+
template <typename Mean, typename CovarFun, typename CovarArgs, typename RNG>
7372
inline Eigen::VectorXd laplace_latent_bernoulli_logit_rng(
7473
const std::vector<int>& y, const std::vector<int>& n_samples, Mean&& mean,
7574
CovarFun&& covariance_function, CovarArgs&& covar_args, RNG& rng,

stan/math/mix/prob/laplace_latent_poisson_log_rng.hpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,19 @@ template <typename ThetaVec, typename Mean, typename CovarFun,
3434
typename CovarArgs, typename RNG,
3535
require_eigen_vector_t<ThetaVec>* = nullptr>
3636
inline Eigen::VectorXd laplace_latent_tol_poisson_log_rng(
37-
const std::vector<int>& y, const std::vector<int>& y_index,
38-
const Mean& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
39-
ThetaVec&& theta_0, const double tolerance, const int max_num_steps,
37+
const std::vector<int>& y, const std::vector<int>& y_index, Mean&& mean,
38+
CovarFun&& covariance_function, CovarArgs&& covar_args, ThetaVec&& theta_0,
39+
const double tolerance, const int max_num_steps,
4040
const int hessian_block_size, const int solver,
4141
const int max_steps_line_search, RNG& rng, std::ostream* msgs) {
4242
laplace_options_user_supplied ops{hessian_block_size, solver,
4343
max_steps_line_search, tolerance,
4444
max_num_steps, value_of(theta_0)};
45-
return laplace_base_rng(poisson_log_likelihood{},
46-
std::forward_as_tuple(y, y_index, mean),
47-
std::forward<CovarFun>(covariance_function),
48-
std::forward<CovarArgs>(covar_args), ops, rng, msgs);
45+
return laplace_base_rng(
46+
poisson_log_likelihood{},
47+
std::forward_as_tuple(y, y_index, std::forward<Mean>(mean)),
48+
std::forward<CovarFun>(covariance_function),
49+
std::forward<CovarArgs>(covar_args), ops, rng, msgs);
4950
}
5051

5152
/**
@@ -70,14 +71,15 @@ inline Eigen::VectorXd laplace_latent_tol_poisson_log_rng(
7071
*/
7172
template <typename CovarFun, typename CovarArgs, typename RNG, typename Mean>
7273
inline Eigen::VectorXd laplace_latent_poisson_log_rng(
73-
const std::vector<int>& y, const std::vector<int>& y_index,
74-
const Mean& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
75-
RNG& rng, std::ostream* msgs) {
76-
return laplace_base_rng(poisson_log_likelihood{},
77-
std::forward_as_tuple(y, y_index, mean),
78-
std::forward<CovarFun>(covariance_function),
79-
std::forward<CovarArgs>(covar_args),
80-
laplace_options_default{}, rng, msgs);
74+
const std::vector<int>& y, const std::vector<int>& y_index, Mean&& mean,
75+
CovarFun&& covariance_function, CovarArgs&& covar_args, RNG& rng,
76+
std::ostream* msgs) {
77+
return laplace_base_rng(
78+
poisson_log_likelihood{},
79+
std::forward_as_tuple(y, y_index, std::forward<Mean>(mean)),
80+
std::forward<CovarFun>(covariance_function),
81+
std::forward<CovarArgs>(covar_args), laplace_options_default{}, rng,
82+
msgs);
8183
}
8284

8385
} // namespace math

stan/math/mix/prob/laplace_marginal_bernoulli_logit_lpmf.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace math {
2222
struct bernoulli_logit_likelihood {
2323
template <typename ThetaVec, typename YVec, typename Mean>
2424
inline auto operator()(const ThetaVec& theta, const YVec& y,
25-
const std::vector<int>& delta_int, const Mean& mean,
25+
const std::vector<int>& delta_int, Mean&& mean,
2626
std::ostream* pstream) const {
2727
auto theta_offset = to_ref(add(theta, mean));
2828
return sum(
@@ -55,8 +55,8 @@ template <bool propto = false, typename ThetaVec, typename Mean,
5555
typename CovarFun, typename CovarArgs,
5656
require_eigen_vector_t<ThetaVec>* = nullptr>
5757
inline auto laplace_marginal_tol_bernoulli_logit_lpmf(
58-
const std::vector<int>& y, const std::vector<int>& n_samples,
59-
const Mean& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
58+
const std::vector<int>& y, const std::vector<int>& n_samples, Mean&& mean,
59+
CovarFun&& covariance_function, CovarArgs&& covar_args,
6060
const ThetaVec& theta_0, double tolerance, int max_num_steps,
6161
const int hessian_block_size, const int solver,
6262
const int max_steps_line_search, std::ostream* msgs) {
@@ -65,7 +65,7 @@ inline auto laplace_marginal_tol_bernoulli_logit_lpmf(
6565
max_num_steps, value_of(theta_0)};
6666
return laplace_marginal_density(
6767
bernoulli_logit_likelihood{},
68-
std::forward_as_tuple(to_vector(y), n_samples, mean),
68+
std::forward_as_tuple(to_vector(y), n_samples, std::forward<Mean>(mean)),
6969
std::forward<CovarFun>(covariance_function),
7070
std::forward<CovarArgs>(covar_args), ops, msgs);
7171
}
@@ -90,12 +90,12 @@ inline auto laplace_marginal_tol_bernoulli_logit_lpmf(
9090
template <bool propto = false, typename Mean, typename CovarFun,
9191
typename CovarArgs>
9292
inline auto laplace_marginal_bernoulli_logit_lpmf(
93-
const std::vector<int>& y, const std::vector<int>& n_samples,
94-
const Mean& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
93+
const std::vector<int>& y, const std::vector<int>& n_samples, Mean&& mean,
94+
CovarFun&& covariance_function, CovarArgs&& covar_args,
9595
std::ostream* msgs) {
9696
return laplace_marginal_density(
9797
bernoulli_logit_likelihood{},
98-
std::forward_as_tuple(to_vector(y), n_samples, mean),
98+
std::forward_as_tuple(to_vector(y), n_samples, std::forward<Mean>(mean)),
9999
std::forward<CovarFun>(covariance_function),
100100
std::forward<CovarArgs>(covar_args), laplace_options_default{}, msgs);
101101
}

stan/math/mix/prob/laplace_marginal_neg_binomial_2_log_lpmf.hpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ struct neg_binomial_2_log_likelihood {
2828
require_all_eigen_vector_t<ThetaVec>* = nullptr>
2929
inline auto operator()(const ThetaVec& theta, const Eta& eta,
3030
const std::vector<int>& y,
31-
const std::vector<int>& y_index, const Mean& mean,
31+
const std::vector<int>& y_index, Mean&& mean,
3232
std::ostream* pstream) const {
3333
Eigen::VectorXi n_per_group = Eigen::VectorXi::Zero(theta.size());
3434
Eigen::VectorXi counts_per_group = Eigen::VectorXi::Zero(theta.size());
@@ -76,18 +76,18 @@ template <bool propto = false, typename Eta, typename ThetaVec, typename Mean,
7676
require_eigen_vector_t<ThetaVec>* = nullptr>
7777
inline auto laplace_marginal_tol_neg_binomial_2_log_lpmf(
7878
const std::vector<int>& y, const std::vector<int>& y_index, const Eta& eta,
79-
const Mean& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
79+
Mean&& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
8080
const ThetaVec& theta_0, double tolerance, int max_num_steps,
8181
const int hessian_block_size, const int solver,
8282
const int max_steps_line_search, std::ostream* msgs) {
8383
laplace_options_user_supplied ops{hessian_block_size, solver,
8484
max_steps_line_search, tolerance,
8585
max_num_steps, value_of(theta_0)};
86-
return laplace_marginal_density(neg_binomial_2_log_likelihood{},
87-
std::forward_as_tuple(eta, y, y_index, mean),
88-
std::forward<CovarFun>(covariance_function),
89-
std::forward<CovarArgs>(covar_args), ops,
90-
msgs);
86+
return laplace_marginal_density(
87+
neg_binomial_2_log_likelihood{},
88+
std::forward_as_tuple(eta, y, y_index, std::forward<Mean>(mean)),
89+
std::forward<CovarFun>(covariance_function),
90+
std::forward<CovarArgs>(covar_args), ops, msgs);
9191
}
9292

9393
/**
@@ -112,13 +112,13 @@ template <bool propto = false, typename Eta, typename Mean, typename CovarFun,
112112
typename CovarArgs>
113113
inline auto laplace_marginal_neg_binomial_2_log_lpmf(
114114
const std::vector<int>& y, const std::vector<int>& y_index, const Eta& eta,
115-
const Mean& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
115+
Mean&& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
116116
std::ostream* msgs) {
117-
return laplace_marginal_density(neg_binomial_2_log_likelihood{},
118-
std::forward_as_tuple(eta, y, y_index, mean),
119-
std::forward<CovarFun>(covariance_function),
120-
std::forward<CovarArgs>(covar_args),
121-
laplace_options_default{}, msgs);
117+
return laplace_marginal_density(
118+
neg_binomial_2_log_likelihood{},
119+
std::forward_as_tuple(eta, y, y_index, std::forward<Mean>(mean)),
120+
std::forward<CovarFun>(covariance_function),
121+
std::forward<CovarArgs>(covar_args), laplace_options_default{}, msgs);
122122
}
123123

124124
struct neg_binomial_2_log_likelihood_summary {
@@ -127,8 +127,8 @@ struct neg_binomial_2_log_likelihood_summary {
127127
inline auto operator()(const ThetaVec& theta, const Eta& eta,
128128
const std::vector<int>& y,
129129
const std::vector<int>& n_per_group,
130-
const std::vector<int>& counts_per_group,
131-
const Mean& mean, std::ostream* pstream) const {
130+
const std::vector<int>& counts_per_group, Mean&& mean,
131+
std::ostream* pstream) const {
132132
Eigen::Map<const Eigen::VectorXi> y_map(y.data(), y.size());
133133
Eigen::Map<const Eigen::VectorXi> n_per_group_map(n_per_group.data(),
134134
n_per_group.size());
@@ -173,7 +173,7 @@ template <bool propto = false, typename Eta, typename ThetaVec, typename Mean,
173173
require_eigen_vector_t<ThetaVec>* = nullptr>
174174
inline auto laplace_marginal_tol_neg_binomial_2_log_summary_lpmf(
175175
const std::vector<int>& y, const std::vector<int>& n_per_group,
176-
const std::vector<int>& counts_per_group, const Eta& eta, const Mean& mean,
176+
const std::vector<int>& counts_per_group, const Eta& eta, Mean&& mean,
177177
CovarFun&& covariance_function, CovarArgs&& covar_args,
178178
const ThetaVec& theta_0, double tolerance, int max_num_steps,
179179
const int hessian_block_size, const int solver,
@@ -183,7 +183,8 @@ inline auto laplace_marginal_tol_neg_binomial_2_log_summary_lpmf(
183183
max_num_steps, value_of(theta_0)};
184184
return laplace_marginal_density(
185185
neg_binomial_2_log_likelihood_summary{},
186-
std::forward_as_tuple(eta, y, n_per_group, counts_per_group, mean),
186+
std::forward_as_tuple(eta, y, n_per_group, counts_per_group,
187+
std::forward<Mean>(mean)),
187188
std::forward<CovarFun>(covariance_function),
188189
std::forward<CovarArgs>(covar_args), ops, msgs);
189190
}
@@ -210,12 +211,13 @@ template <bool propto = false, typename Eta, typename Mean, typename CovarFun,
210211
typename CovarArgs>
211212
inline auto laplace_marginal_neg_binomial_2_log_summary_lpmf(
212213
const std::vector<int>& y, const std::vector<int>& n_per_group,
213-
const std::vector<int>& counts_per_group, const Eta& eta, const Mean& mean,
214+
const std::vector<int>& counts_per_group, const Eta& eta, Mean&& mean,
214215
CovarFun&& covariance_function, CovarArgs&& covar_args,
215216
std::ostream* msgs) {
216217
return laplace_marginal_density(
217218
neg_binomial_2_log_likelihood_summary{},
218-
std::forward_as_tuple(eta, y, n_per_group, counts_per_group, mean),
219+
std::forward_as_tuple(eta, y, n_per_group, counts_per_group,
220+
std::forward<Mean>(mean)),
219221
std::forward<CovarFun>(covariance_function),
220222
std::forward<CovarArgs>(covar_args), laplace_options_default{}, msgs);
221223
}

stan/math/mix/prob/laplace_marginal_poisson_log_lpmf.hpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ struct poisson_log_likelihood {
3131
template <typename Theta, typename YVec, typename Mean,
3232
require_eigen_vector_t<Theta>* = nullptr>
3333
inline auto operator()(const Theta& theta, const YVec& y,
34-
const std::vector<int>& y_index, const Mean& mean,
34+
const std::vector<int>& y_index, Mean&& mean,
3535
std::ostream* /*pstream*/) const {
3636
Eigen::VectorXd counts_per_group = Eigen::VectorXd::Zero(theta.size());
3737
Eigen::VectorXd n_per_group = Eigen::VectorXd::Zero(theta.size());
@@ -72,16 +72,17 @@ template <bool propto = false, typename ThetaVec, typename Mean,
7272
typename CovarFun, typename CovarArgs,
7373
require_eigen_vector_t<ThetaVec>* = nullptr>
7474
inline auto laplace_marginal_tol_poisson_log_lpmf(
75-
const std::vector<int>& y, const std::vector<int>& y_index,
76-
const Mean& mean, CovarFun&& covariance_function, CovarArgs&& covar_args,
75+
const std::vector<int>& y, const std::vector<int>& y_index, Mean&& mean,
76+
CovarFun&& covariance_function, CovarArgs&& covar_args,
7777
const ThetaVec& theta_0, double tolerance, int max_num_steps,
7878
const int hessian_block_size, const int solver,
7979
const int max_steps_line_search, std::ostream* msgs) {
8080
laplace_options_user_supplied ops{hessian_block_size, solver,
8181
max_steps_line_search, tolerance,
8282
max_num_steps, value_of(theta_0)};
8383
return laplace_marginal_density(
84-
poisson_log_likelihood{}, std::forward_as_tuple(y, y_index, mean),
84+
poisson_log_likelihood{},
85+
std::forward_as_tuple(y, y_index, std::forward<Mean>(mean)),
8586
covariance_function, std::forward<CovarArgs>(covar_args), ops, msgs);
8687
}
8788

@@ -105,12 +106,13 @@ template <bool propto = false, typename CovarFun, typename CovarArgs,
105106
typename Mean>
106107
inline auto laplace_marginal_poisson_log_lpmf(const std::vector<int>& y,
107108
const std::vector<int>& y_index,
108-
const Mean& mean,
109+
Mean&& mean,
109110
CovarFun&& covariance_function,
110111
CovarArgs&& covar_args,
111112
std::ostream* msgs) {
112113
return laplace_marginal_density(
113-
poisson_log_likelihood{}, std::forward_as_tuple(y, y_index, mean),
114+
poisson_log_likelihood{},
115+
std::forward_as_tuple(y, y_index, std::forward<Mean>(mean)),
114116
covariance_function, std::forward<CovarArgs>(covar_args),
115117
laplace_options_default{}, msgs);
116118
}

0 commit comments

Comments
 (0)