From 208658abe91cc8dc36c77ca240a52f3ad7fcfc25 Mon Sep 17 00:00:00 2001 From: Stan Jenkins Date: Fri, 1 Dec 2023 10:56:08 -0500 Subject: [PATCH] [Jenkins] auto-formatting by clang-format version 10.0.0-4ubuntu1 --- stan/math/prim/prob/multi_normal_lpdf.hpp | 74 ++++++++++--------- test/unit/math/rev/prob/multi_normal_test.cpp | 3 +- 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/stan/math/prim/prob/multi_normal_lpdf.hpp b/stan/math/prim/prob/multi_normal_lpdf.hpp index 88befc45819..d05d7a6fa2d 100644 --- a/stan/math/prim/prob/multi_normal_lpdf.hpp +++ b/stan/math/prim/prob/multi_normal_lpdf.hpp @@ -67,24 +67,24 @@ return_type_t 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); @@ -123,24 +123,25 @@ return_type_t 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::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::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; @@ -229,30 +230,31 @@ return_type_t multi_normal_lpdf(const T_y& y, if (include_summand::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::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::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::value) { partials<0>(ops_partials) -= half; } diff --git a/test/unit/math/rev/prob/multi_normal_test.cpp b/test/unit/math/rev/prob/multi_normal_test.cpp index 276a8d942c4..3757c6aa33a 100644 --- a/test/unit/math/rev/prob/multi_normal_test.cpp +++ b/test/unit/math/rev/prob/multi_normal_test.cpp @@ -13,8 +13,7 @@ TEST(ProbDistributionsMultiNormal, MultiNormalVar) { mu << 1.0, -1.0, 3.0; Matrix 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) {