Skip to content

Commit 500a870

Browse files
committed
Merge branch 'bugfix/issue-1861-2' of https://github.com/stan-dev/math into bugfix/issue-1861-2
2 parents 42fd448 + cbe96eb commit 500a870

File tree

7 files changed

+66
-448
lines changed

7 files changed

+66
-448
lines changed

stan/math/prim/prob/scaled_inv_chi_square_cdf.hpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <stan/math/prim/fun/size.hpp>
1313
#include <stan/math/prim/fun/size_zero.hpp>
1414
#include <stan/math/prim/fun/tgamma.hpp>
15+
#include <stan/math/prim/fun/to_ref.hpp>
1516
#include <stan/math/prim/fun/value_of.hpp>
1617
#include <stan/math/prim/functor/operands_and_partials.hpp>
1718
#include <cmath>
@@ -39,25 +40,32 @@ return_type_t<T_y, T_dof, T_scale> scaled_inv_chi_square_cdf(const T_y& y,
3940
using T_partials_return = partials_return_t<T_y, T_dof, T_scale>;
4041
using std::exp;
4142
using std::pow;
43+
using T_y_ref = ref_type_t<T_y>;
44+
using T_nu_ref = ref_type_t<T_dof>;
45+
using T_s_ref = ref_type_t<T_scale>;
4246
static const char* function = "scaled_inv_chi_square_cdf";
43-
check_not_nan(function, "Random variable", y);
44-
check_nonnegative(function, "Random variable", y);
45-
check_positive_finite(function, "Degrees of freedom parameter", nu);
46-
check_positive_finite(function, "Scale parameter", s);
4747
check_consistent_sizes(function, "Random variable", y,
4848
"Degrees of freedom parameter", nu, "Scale parameter",
4949
s);
50+
T_y_ref y_ref = y;
51+
T_nu_ref nu_ref = nu;
52+
T_s_ref s_ref = s;
53+
54+
check_nonnegative(function, "Random variable", y_ref);
55+
check_positive_finite(function, "Degrees of freedom parameter", nu_ref);
56+
check_positive_finite(function, "Scale parameter", s_ref);
5057

5158
if (size_zero(y, nu, s)) {
5259
return 1.0;
5360
}
5461

5562
T_partials_return P(1.0);
56-
operands_and_partials<T_y, T_dof, T_scale> ops_partials(y, nu, s);
63+
operands_and_partials<T_y_ref, T_nu_ref, T_s_ref> ops_partials(y_ref, nu_ref,
64+
s_ref);
5765

58-
scalar_seq_view<T_y> y_vec(y);
59-
scalar_seq_view<T_dof> nu_vec(nu);
60-
scalar_seq_view<T_scale> s_vec(s);
66+
scalar_seq_view<T_y_ref> y_vec(y_ref);
67+
scalar_seq_view<T_nu_ref> nu_vec(nu_ref);
68+
scalar_seq_view<T_s_ref> s_vec(s_ref);
6169
size_t N = max_size(y, nu, s);
6270

6371
// Explicit return for extreme values

stan/math/prim/prob/scaled_inv_chi_square_lccdf.hpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,31 @@ return_type_t<T_y, T_dof, T_scale> scaled_inv_chi_square_lccdf(
2727
using std::exp;
2828
using std::log;
2929
using std::pow;
30+
using T_y_ref = ref_type_t<T_y>;
31+
using T_nu_ref = ref_type_t<T_dof>;
32+
using T_s_ref = ref_type_t<T_scale>;
3033
static const char* function = "scaled_inv_chi_square_lccdf";
31-
check_not_nan(function, "Random variable", y);
32-
check_nonnegative(function, "Random variable", y);
33-
check_positive_finite(function, "Degrees of freedom parameter", nu);
34-
check_positive_finite(function, "Scale parameter", s);
3534
check_consistent_sizes(function, "Random variable", y,
3635
"Degrees of freedom parameter", nu, "Scale parameter",
3736
s);
37+
T_y_ref y_ref = y;
38+
T_nu_ref nu_ref = nu;
39+
T_s_ref s_ref = s;
40+
check_nonnegative(function, "Random variable", y_ref);
41+
check_positive_finite(function, "Degrees of freedom parameter", nu_ref);
42+
check_positive_finite(function, "Scale parameter", s_ref);
3843

3944
if (size_zero(y, nu, s)) {
4045
return 0;
4146
}
4247

4348
T_partials_return P(0.0);
44-
operands_and_partials<T_y, T_dof, T_scale> ops_partials(y, nu, s);
49+
operands_and_partials<T_y_ref, T_nu_ref, T_s_ref> ops_partials(y_ref, nu_ref,
50+
s_ref);
4551

46-
scalar_seq_view<T_y> y_vec(y);
47-
scalar_seq_view<T_dof> nu_vec(nu);
48-
scalar_seq_view<T_scale> s_vec(s);
52+
scalar_seq_view<T_y_ref> y_vec(y_ref);
53+
scalar_seq_view<T_nu_ref> nu_vec(nu_ref);
54+
scalar_seq_view<T_s_ref> s_vec(s_ref);
4955
size_t N = max_size(y, nu, s);
5056

5157
// Explicit return for extreme values

stan/math/prim/prob/scaled_inv_chi_square_lcdf.hpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,31 @@ return_type_t<T_y, T_dof, T_scale> scaled_inv_chi_square_lcdf(
2727
using std::exp;
2828
using std::log;
2929
using std::pow;
30+
using T_y_ref = ref_type_t<T_y>;
31+
using T_nu_ref = ref_type_t<T_dof>;
32+
using T_s_ref = ref_type_t<T_scale>;
3033
static const char* function = "scaled_inv_chi_square_lcdf";
31-
check_not_nan(function, "Random variable", y);
32-
check_nonnegative(function, "Random variable", y);
33-
check_positive_finite(function, "Degrees of freedom parameter", nu);
34-
check_positive_finite(function, "Scale parameter", s);
3534
check_consistent_sizes(function, "Random variable", y,
3635
"Degrees of freedom parameter", nu, "Scale parameter",
3736
s);
37+
T_y_ref y_ref = y;
38+
T_nu_ref nu_ref = nu;
39+
T_s_ref s_ref = s;
40+
check_nonnegative(function, "Random variable", y_ref);
41+
check_positive_finite(function, "Degrees of freedom parameter", nu_ref);
42+
check_positive_finite(function, "Scale parameter", s_ref);
3843

3944
if (size_zero(y, nu, s)) {
4045
return 0;
4146
}
4247

4348
T_partials_return P(0.0);
44-
operands_and_partials<T_y, T_dof, T_scale> ops_partials(y, nu, s);
49+
operands_and_partials<T_y_ref, T_nu_ref, T_s_ref> ops_partials(y_ref, nu_ref,
50+
s_ref);
4551

46-
scalar_seq_view<T_y> y_vec(y);
47-
scalar_seq_view<T_dof> nu_vec(nu);
48-
scalar_seq_view<T_scale> s_vec(s);
52+
scalar_seq_view<T_y_ref> y_vec(y_ref);
53+
scalar_seq_view<T_nu_ref> nu_vec(nu_ref);
54+
scalar_seq_view<T_s_ref> s_vec(s_ref);
4955
size_t N = max_size(y, nu, s);
5056

5157
// Explicit return for extreme values

stan/math/prim/prob/scaled_inv_chi_square_lpdf.hpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,19 @@ return_type_t<T_y, T_dof, T_scale> scaled_inv_chi_square_lpdf(
4444
const T_y& y, const T_dof& nu, const T_scale& s) {
4545
using T_partials_return = partials_return_t<T_y, T_dof, T_scale>;
4646
using std::log;
47+
using T_y_ref = ref_type_t<T_y>;
48+
using T_nu_ref = ref_type_t<T_dof>;
49+
using T_s_ref = ref_type_t<T_scale>;
4750
static const char* function = "scaled_inv_chi_square_lpdf";
48-
check_not_nan(function, "Random variable", y);
49-
check_positive_finite(function, "Degrees of freedom parameter", nu);
50-
check_positive_finite(function, "Scale parameter", s);
5151
check_consistent_sizes(function, "Random variable", y,
5252
"Degrees of freedom parameter", nu, "Scale parameter",
5353
s);
54+
T_y_ref y_ref = y;
55+
T_nu_ref nu_ref = nu;
56+
T_s_ref s_ref = s;
57+
check_not_nan(function, "Random variable", y_ref);
58+
check_positive_finite(function, "Degrees of freedom parameter", nu_ref);
59+
check_positive_finite(function, "Scale parameter", s_ref);
5460

5561
if (size_zero(y, nu, s)) {
5662
return 0;
@@ -60,11 +66,12 @@ return_type_t<T_y, T_dof, T_scale> scaled_inv_chi_square_lpdf(
6066
}
6167

6268
T_partials_return logp(0);
63-
operands_and_partials<T_y, T_dof, T_scale> ops_partials(y, nu, s);
69+
operands_and_partials<T_y_ref, T_nu_ref, T_s_ref> ops_partials(y_ref, nu_ref,
70+
s_ref);
6471

65-
scalar_seq_view<T_y> y_vec(y);
66-
scalar_seq_view<T_dof> nu_vec(nu);
67-
scalar_seq_view<T_scale> s_vec(s);
72+
scalar_seq_view<T_y_ref> y_vec(y_ref);
73+
scalar_seq_view<T_nu_ref> nu_vec(nu_ref);
74+
scalar_seq_view<T_s_ref> s_vec(s_ref);
6875
size_t N = max_size(y, nu, s);
6976

7077
for (size_t n = 0; n < N; n++) {

stan/math/prim/prob/scaled_inv_chi_square_rng.hpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <stan/math/prim/meta.hpp>
55
#include <stan/math/prim/err.hpp>
66
#include <stan/math/prim/fun/max_size.hpp>
7+
#include <stan/math/prim/fun/to_ref.hpp>
78
#include <boost/random/chi_squared_distribution.hpp>
89
#include <boost/random/variate_generator.hpp>
910

@@ -35,13 +36,15 @@ scaled_inv_chi_square_rng(const T_deg& nu, const T_scale& s, RNG& rng) {
3536
using boost::variate_generator;
3637
using boost::random::chi_squared_distribution;
3738
static const char* function = "scaled_inv_chi_square_rng";
38-
check_positive_finite(function, "Degrees of freedom parameter", nu);
39-
check_positive_finite(function, "Scale parameter", s);
4039
check_consistent_sizes(function, "Location parameter", nu, "Scale Parameter",
4140
s);
41+
const auto& nu_ref = to_ref(nu);
42+
const auto& s_ref = to_ref(s);
43+
check_positive_finite(function, "Degrees of freedom parameter", nu_ref);
44+
check_positive_finite(function, "Scale parameter", s_ref);
4245

43-
scalar_seq_view<T_deg> nu_vec(nu);
44-
scalar_seq_view<T_scale> s_vec(s);
46+
scalar_seq_view<T_deg> nu_vec(nu_ref);
47+
scalar_seq_view<T_scale> s_vec(s_ref);
4548
size_t N = max_size(nu, s);
4649
VectorBuilder<true, double, T_deg, T_scale> output(N);
4750

0 commit comments

Comments
 (0)