Skip to content

Commit

Permalink
[Jenkins] auto-formatting by clang-format version 10.0.0-4ubuntu1
Browse files Browse the repository at this point in the history
  • Loading branch information
stan-buildbot committed Dec 1, 2023
1 parent bdc7e52 commit 208658a
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 38 deletions.
74 changes: 38 additions & 36 deletions stan/math/prim/prob/multi_normal_lpdf.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,24 +67,24 @@ return_type_t<T_y, T_loc, T_covar> multi_normal_lpdf(const T_y& y,

// check size consistency of all random variables y
for (size_t i = 1, size_mvt_y = size_mvt(y); i < size_mvt_y; i++) {
check_size_match(function,
"Size of one of the vectors of "
"the random variable",
y_vec[i].size(),
"Size of the first vector of the "
"random variable",
size_y);
}
// check size consistency of all means mu
for (size_t i = 1, size_mvt_mu = size_mvt(mu); i < size_mvt_mu; i++) {
check_size_match(function,
"Size of one of the vectors of "
"the location variable",
mu_vec[i].size(),
"Size of the first vector of the "
"location variable",
size_mu);
}
check_size_match(function,
"Size of one of the vectors of "
"the random variable",
y_vec[i].size(),
"Size of the first vector of the "
"random variable",
size_y);
}
// check size consistency of all means mu
for (size_t i = 1, size_mvt_mu = size_mvt(mu); i < size_mvt_mu; i++) {
check_size_match(function,
"Size of one of the vectors of "
"the location variable",
mu_vec[i].size(),
"Size of the first vector of the "
"location variable",
size_mu);
}

check_size_match(function, "Size of random variable", size_y,
"size of location parameter", size_mu);
Expand Down Expand Up @@ -123,24 +123,25 @@ return_type_t<T_y, T_loc, T_covar> multi_normal_lpdf(const T_y& y,
decltype(auto) y_val = as_value_column_vector_or_scalar(y_vec[i]);
decltype(auto) mu_val = as_value_column_vector_or_scalar(mu_vec[i]);
y_val_minus_mu_val.col(i) = y_val - mu_val;
}
}

matrix_partials_t half;
vector_partials_t D_inv = 1.0 / value_of(ldlt_Sigma.ldlt().vectorD().array());
vector_partials_t D_inv
= 1.0 / value_of(ldlt_Sigma.ldlt().vectorD().array());

// If the covariance is not autodiff, we can avoid computing a matrix
// inverse
if (is_constant<T_covar_elem>::value) {
half = mdivide_left_ldlt(ldlt_Sigma, y_val_minus_mu_val);
half = mdivide_left_ldlt(ldlt_Sigma, y_val_minus_mu_val);

if (include_summand<propto>::value) {
logp += 0.5 * sum(log(D_inv)) * size_vec;
}
} else {
matrix_partials_t inv_Sigma
= mdivide_left_ldlt(ldlt_Sigma, Eigen::MatrixXd::Identity(K,K));
= mdivide_left_ldlt(ldlt_Sigma, Eigen::MatrixXd::Identity(K, K));

half = (inv_Sigma * y_val_minus_mu_val);
half = (inv_Sigma * y_val_minus_mu_val);

logp += 0.5 * sum(log(D_inv)) * size_vec;

Expand Down Expand Up @@ -229,30 +230,31 @@ return_type_t<T_y, T_loc, T_covar> multi_normal_lpdf(const T_y& y,
if (include_summand<propto, T_y, T_loc, T_covar_elem>::value) {
vector_partials_t half;
vector_partials_t y_val_minus_mu_val = y_val - mu_val;
vector_partials_t D_inv = 1.0 / value_of(ldlt_Sigma.ldlt().vectorD().array());
vector_partials_t D_inv
= 1.0 / value_of(ldlt_Sigma.ldlt().vectorD().array());

// If the covariance is not autodiff, we can avoid computing a matrix
// inverse
if (is_constant<T_covar_elem>::value) {
half = mdivide_left_ldlt(ldlt_Sigma, y_val_minus_mu_val);
half = mdivide_left_ldlt(ldlt_Sigma, y_val_minus_mu_val);

if (include_summand<propto>::value) {
logp += 0.5 * sum(log(D_inv));
}
} else {
matrix_partials_t inv_Sigma
= mdivide_left_ldlt(ldlt_Sigma, Eigen::MatrixXd::Identity(K,K));
half = (inv_Sigma * y_val_minus_mu_val);

logp += 0.5 * sum(log(D_inv));
edge<2>(ops_partials).partials_ += 0.5 * (half * half.transpose() - inv_Sigma) ;
matrix_partials_t inv_Sigma
= mdivide_left_ldlt(ldlt_Sigma, Eigen::MatrixXd::Identity(K, K));
half = (inv_Sigma * y_val_minus_mu_val);

logp += 0.5 * sum(log(D_inv));
edge<2>(ops_partials).partials_
+= 0.5 * (half * half.transpose() - inv_Sigma);
}

// logp = sum(half.cwiseAbs2());
// std::cout << " * \n\t" << half << std::endl;
// std::cout << " * \n\t" << half << std::endl;
logp += -0.5 * dot_product(y_val_minus_mu_val.transpose(), half);

if (!is_constant_all<T_y>::value) {
partials<0>(ops_partials) -= half;
}
Expand Down
3 changes: 1 addition & 2 deletions test/unit/math/rev/prob/multi_normal_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ TEST(ProbDistributionsMultiNormal, MultiNormalVar) {
mu << 1.0, -1.0, 3.0;
Matrix<var, Dynamic, Dynamic> Sigma(3, 3);
Sigma << 9.0, -3.0, 0.0, -3.0, 4.0, 0.0, 0.0, 0.0, 5.0;
EXPECT_FLOAT_EQ(-11.73908,
stan::math::multi_normal_lpdf(y, mu, Sigma).val());
EXPECT_FLOAT_EQ(-11.73908, stan::math::multi_normal_lpdf(y, mu, Sigma).val());
}

TEST(ProbDistributionsMultiNormal, check_varis_on_stack) {
Expand Down

0 comments on commit 208658a

Please sign in to comment.