Skip to content

Commit c401e78

Browse files
committed
Merge branch 'feature/complex-apply-scalar-unary' into complex-numbers
Steve's fix for apply_scalar_unary
2 parents 7b2f55a + 5158917 commit c401e78

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+482
-280
lines changed

stan/math/prim/fun/acosh.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ namespace internal {
101101
*/
102102
template <typename V>
103103
inline std::complex<V> complex_acosh(const std::complex<V>& z) {
104-
std::complex<double> y_d = acosh(value_of_rec(z));
104+
std::complex<partials_type_t<V>> y_d = acosh(value_of(z));
105105
auto y = log(z + sqrt(z * z - 1));
106106
return copysign(y, y_d);
107107
}

stan/math/prim/fun/value_of.hpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ inline T value_of(T&& x) {
2525
template <typename T, require_complex_t<T>* = nullptr,
2626
require_t<std::is_arithmetic<
2727
typename std::decay_t<T>::value_type>>* = nullptr>
28-
inline decltype(auto) value_of(T&& x) {
28+
inline auto value_of(T&& x) {
2929
return std::forward<T>(x);
3030
}
3131

32+
template <
33+
typename T, require_complex_t<T>* = nullptr,
34+
require_not_arithmetic_t<typename std::decay_t<T>::value_type>* = nullptr>
35+
inline auto value_of(T&& x) {
36+
using inner_t = partials_type_t<typename std::decay_t<T>::value_type>;
37+
return std::complex<inner_t>{value_of(x.real()), value_of(x.imag())};
38+
}
39+
3240
/**
3341
* For std::vectors of non-arithmetic types, return a std::vector composed
3442
* of value_of applied to each element.

stan/math/prim/functor/apply_scalar_unary.hpp

+26
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <stan/math/prim/fun/Eigen.hpp>
55
#include <stan/math/prim/meta/is_eigen.hpp>
6+
#include <stan/math/prim/meta/is_complex.hpp>
67
#include <stan/math/prim/meta/require_generics.hpp>
78
#include <stan/math/prim/meta/is_vector.hpp>
89
#include <stan/math/prim/meta/is_vector_like.hpp>
@@ -100,6 +101,31 @@ struct apply_scalar_unary<F, T, require_floating_point_t<T>> {
100101
static inline return_t apply(T x) { return F::fun(x); }
101102
};
102103

104+
/**
105+
* Template specialization for vectorized functions applying to
106+
* double arguments.
107+
*
108+
* @tparam F Type of function defining static apply function.
109+
*/
110+
template <typename F, typename T>
111+
struct apply_scalar_unary<F, T, require_complex_t<T>> {
112+
/**
113+
* The return type, double.
114+
*/
115+
using return_t = std::decay_t<T>;
116+
117+
/**
118+
* Apply the function specified by F to the specified argument.
119+
* This is defined through a direct application of
120+
* <code>F::fun()</code>, which must be defined for double
121+
* arguments.
122+
*
123+
* @param x Argument scalar.
124+
* @return Result of applying F to the scalar.
125+
*/
126+
static inline return_t apply(const T& x) { return F::fun(x); }
127+
};
128+
103129
/**
104130
* Template specialization for vectorized functions applying to
105131
* integer arguments. Although the argument is integer, the

test/unit/math/mix/fun/Phi_approx_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, PhiApprox) {
44
auto f = [](const auto& x1) { return stan::math::Phi_approx(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -3.0, 1, 1.3, 3);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -3.0, 1, 1.3, 3);
79
}
810

911
TEST(mathMixMatFun, PhiApprox_varmat) {

test/unit/math/mix/fun/Phi_test.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
TEST(mathMixMatFun, Phi) {
44
auto f = [](const auto& x1) { return stan::math::Phi(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -27.5, 27.5);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -27.5, 27.5);
79
for (double x = -37.5; x <= 10; x += 0.5)
8-
stan::test::expect_unary_vectorized(x);
10+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(x);
911
}
1012

1113
TEST(mathMixMatFun, Phi_varmat) {

test/unit/math/mix/fun/acos_test.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ TEST(mathMixMatFun, acos) {
1111
};
1212
// can't autodiff acos through integers
1313
for (auto x : stan::test::internal::common_nonzero_args())
14-
stan::test::expect_unary_vectorized(f, x);
15-
expect_unary_vectorized(f, -2.2, -0.8, 0.5,
16-
1 + std::numeric_limits<double>::epsilon(), 1.5, 3,
17-
3.4, 4);
14+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(f, x);
15+
expect_unary_vectorized<stan::test::PromoteToComplex::No>(
16+
f, -2.2, -0.8, 0.5, 1 + std::numeric_limits<double>::epsilon(), 1.5, 3,
17+
3.4, 4);
1818
for (double re : std::vector<double>{-0.2, 0, 0.3}) {
1919
for (double im : std::vector<double>{-0.3, 0, 0.2}) {
2020
stan::test::expect_ad(f, std::complex<double>{re, im});

test/unit/math/mix/fun/acosh_test.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ TEST(mathMixMatFun, acosh) {
77
return acosh(x1);
88
};
99
for (double x : stan::test::internal::common_args())
10-
stan::test::expect_unary_vectorized(x);
10+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(f, x);
1111
stan::test::expect_unary_vectorized(f, 1.5, 3.2, 5, 10, 12.9);
1212
// avoid pole at complex zero that can't be autodiffed
1313
for (double re : std::vector<double>{-0.2, 0, 0.3}) {

test/unit/math/mix/fun/asin_test.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ TEST(mathMixMatFun, asin) {
88
};
99
// can't autodiff asin through integers
1010
for (auto x : stan::test::internal::common_nonzero_args())
11-
stan::test::expect_unary_vectorized(f, x);
12-
stan::test::expect_unary_vectorized(f, -2.6, -2, -0.2, 0.7, 1.3, 3.4, 5);
11+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(f, x);
12+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
13+
f, -2.6, -2, -0.2, 0.7, 1.3, 3.4, 5);
1314
for (double re : std::vector<double>{-0.2, 0, 0.3}) {
1415
for (double im : std::vector<double>{-0.3, 0, 0.2}) {
1516
stan::test::expect_ad(f, std::complex<double>{re, im});

test/unit/math/mix/fun/asinh_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ TEST(mathMixFun, asinh) {
77
using stan::math::asinh;
88
return asinh(x1);
99
};
10-
stan::test::expect_common_unary_vectorized(f);
11-
stan::test::expect_unary_vectorized(f, -2.6, -1.2, -0.2, 0.5, 2, -1.2);
10+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
11+
f);
12+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
13+
f, -2.6, -1.2, -0.2, 0.5, 2, -1.2);
1214
stan::test::expect_ad(f, std::complex<double>{0.2});
1315
// avoid pole at real zero that can't be autodiffed
1416
for (double re : std::vector<double>{-0.2, 0.3}) {

test/unit/math/mix/fun/atan_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ TEST(mathMixMatFun, atan) {
77
using stan::math::atan;
88
return atan(x);
99
};
10-
stan::test::expect_common_nonzero_unary_vectorized(f);
11-
stan::test::expect_unary_vectorized(f, -2.6, -2, -0.2, 0.5, 1, 1.3, 1.5, 3);
10+
stan::test::expect_common_nonzero_unary_vectorized<
11+
stan::test::PromoteToComplex::No>(f);
12+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
13+
f, -2.6, -2, -0.2, 0.5, 1, 1.3, 1.5, 3);
1214
// avoid 0 imaginary component where autodiff doesn't work
1315
for (double re : std::vector<double>{-0.2, 0, 0.3}) {
1416
for (double im : std::vector<double>{-0.3, 0.2}) {

test/unit/math/mix/fun/atanh_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ TEST(mathMixMatFun, atanh) {
66
using stan::math::atanh;
77
return atanh(x1);
88
};
9-
stan::test::expect_common_unary_vectorized(f);
10-
stan::test::expect_unary_vectorized(f, -0.9, 0.5);
9+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
10+
f);
11+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(f, -0.9,
12+
0.5);
1113
for (double re : std::vector<double>{-0.2, 0, 0.3}) {
1214
for (double im : std::vector<double>{-0.3, 0, 0.2}) {
1315
stan::test::expect_ad(f, std::complex<double>{re, im});

test/unit/math/mix/fun/cbrt_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, cbrt) {
44
auto f = [](const auto& x1) { return stan::math::cbrt(x1); };
5-
stan::test::expect_common_nonzero_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, 1, 1.3, 3);
5+
stan::test::expect_common_nonzero_unary_vectorized<
6+
stan::test::PromoteToComplex::No>(f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, 1, 1.3, 3);
79
}
810

911
TEST(mathMixMatFun, cbrt_varmat) {

test/unit/math/mix/fun/ceil_test.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ TEST(mathMixMatFun, ceil) {
44
auto f = [](const auto& x1) { return stan::math::ceil(x1); };
55
// can't autodiff ceil through integers
66
for (auto x : stan::test::internal::common_nonzero_args())
7-
stan::test::expect_unary_vectorized(f, x);
8-
stan::test::expect_unary_vectorized(f, -2.6, -2.1, -0.2, 1.1, 1.51, 3.1);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(f, x);
8+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
9+
f, -2.6, -2.1, -0.2, 1.1, 1.51, 3.1);
910
}
1011

1112
TEST(mathMixMatFun, ceilmatvar) {

test/unit/math/mix/fun/cos_test.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ TEST(mathMixMatFun, cos) {
55
using stan::math::cos;
66
return cos(x);
77
};
8-
stan::test::expect_common_nonzero_unary_vectorized(f);
8+
stan::test::expect_common_nonzero_unary_vectorized<
9+
stan::test::PromoteToComplex::No>(f);
910
stan::test::expect_unary_vectorized(f, -2.6, -2, -0.2, -0.5, 0, 1.5, 3, 5,
1011
5.3);
1112
stan::test::expect_complex_common(f);

test/unit/math/mix/fun/cosh_test.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ TEST(mathMixMatFun, cosh) {
55
using stan::math::cosh;
66
return cosh(x1);
77
};
8-
stan::test::expect_common_unary_vectorized(f);
8+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
9+
f);
910
stan::test::expect_unary_vectorized(f, -2.6, -2, -1.2, -0.2, 0.5, 1, 1.3,
1011
1.5);
1112
stan::test::expect_complex_common(f);

test/unit/math/mix/fun/digamma_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, digamma) {
44
auto f = [](const auto& x1) { return stan::math::digamma(x1); };
5-
stan::test::expect_common_nonzero_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -25, -10.2, -1.2, -1, 2.3, 5.7);
5+
stan::test::expect_common_nonzero_unary_vectorized<
6+
stan::test::PromoteToComplex::No>(f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -25, -10.2, -1.2, -1, 2.3, 5.7);
79
}
810

911
TEST(mathMixMatFun, digamma_varmat) {

test/unit/math/mix/fun/erf_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, erf) {
44
auto f = [](const auto& x1) { return stan::math::erf(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2, -1, -0.2, 2.6);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2, -1, -0.2, 2.6);
79
}
810

911
TEST(mathMixMatFun, erfmatvar) {

test/unit/math/mix/fun/erfc_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, erfc) {
44
auto f = [](const auto& x1) { return stan::math::erfc(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -1, -0.2, 1, 1.3, 2.6);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -1, -0.2, 1, 1.3, 2.6);
79
}
810

911
TEST(mathMixMatFun, erfcmatvar) {

test/unit/math/mix/fun/exp2_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, exp2) {
44
auto f = [](const auto& x1) { return stan::math::exp2(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -15.2, -10, 1, 1.3, 5, 10);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -15.2, -10, 1, 1.3, 5, 10);
79
}
810

911
TEST(mathMixMatFun, exp2matvar) {

test/unit/math/mix/fun/expm1_test.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
TEST(mathMixMatFun, expm1) {
44
auto f = [](const auto& x1) { return stan::math::expm1(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -0.5, -0.2, 0, 1.0, 1, 1.3,
7-
3);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -0.5, -0.2, 0, 1.0, 1, 1.3, 3);
89
}
910

1011
TEST(mathMixMatFun, expm1matvar) {

test/unit/math/mix/fun/fabs_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, fabs) {
44
auto f = [](const auto& x1) { return stan::math::fabs(x1); };
5-
stan::test::expect_common_nonzero_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -0.5, 1.5, 2.0, 3);
5+
stan::test::expect_common_nonzero_unary_vectorized<
6+
stan::test::PromoteToComplex::No>(f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -0.5, 1.5, 2.0, 3);
79
}
810

911
TEST(mathMixMatFun, fabs_varmat) {

test/unit/math/mix/fun/floor_test.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ TEST(mathMixMatFun, floor) {
44
auto f = [](const auto& x1) { return stan::math::floor(x1); };
55
// can't autodiff floor through integers
66
for (auto x : stan::test::internal::common_nonzero_args())
7-
stan::test::expect_unary_vectorized(f, x);
8-
stan::test::expect_unary_vectorized(f, -2.6, -2.1 - 0.5, -0.2, 1.1, 1.5,
9-
179.2);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(f, x);
8+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
9+
f, -2.6, -2.1 - 0.5, -0.2, 1.1, 1.5, 179.2);
1010
}
1111

1212
TEST(mathMixMatFun, floormatvar) {

test/unit/math/mix/fun/inv_Phi_test.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
TEST(mathMixMatFun, invPhi) {
44
auto f = [](const auto& x1) { return stan::math::inv_Phi(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, 0.02425, 0.97575); // breakpoints
7-
stan::test::expect_unary_vectorized(f, -100.25, -2, 0.01, 0.1, 0.98, 0.5,
8-
2.0);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, 0.02425, 0.97575); // breakpoints
9+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
10+
f, -100.25, -2, 0.01, 0.1, 0.98, 0.5, 2.0);
911
}
1012

1113
TEST(mathMixMatFun, invPhi_varmat) {

test/unit/math/mix/fun/inv_cloglog_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, invCLogLog) {
44
auto f = [](const auto& x1) { return stan::math::inv_cloglog(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -1.2, -0.2, 0.5, 1.3);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -1.2, -0.2, 0.5, 1.3);
79
}
810

911
TEST(mathMixMatFun, invcloglog_varmat) {

test/unit/math/mix/fun/inv_logit_test.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
TEST(mathMixMatFun, invLogit) {
44
auto f = [](const auto& x1) { return stan::math::inv_logit(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -1.2, -0.2, 0.5, 1, 1.3, 1.5,
7-
3);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -1.2, -0.2, 0.5, 1, 1.3, 1.5, 3);
89

910
std::vector<double> com_args = stan::test::internal::common_nonzero_args();
1011
std::vector<double> args{-2.6, -0.5, 0.5, 1.5};

test/unit/math/mix/fun/inv_sqrt_test.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
TEST(mathMixMatFun, invSqrt) {
44
auto f = [](const auto& x1) { return stan::math::inv_sqrt(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -1.2, -0.2, 0.5, 1, 1.3, 1.5,
7-
3, 10.2);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -1.2, -0.2, 0.5, 1, 1.3, 1.5, 3, 10.2);
89
}
910

1011
TEST(mathMixMatFun, invsqrt_varmat) {

test/unit/math/mix/fun/inv_square_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, invSquare) {
44
auto f = [](const auto& x1) { return stan::math::inv_square(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -0.2, 1, 1.3, 3);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -0.2, 1, 1.3, 3);
79
}
810

911
TEST(mathMixMatFun, invsquare_varmat) {

test/unit/math/mix/fun/inv_test.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
TEST(mathMixMatFun, inv) {
44
auto f = [](const auto& x1) { return stan::math::inv(x1); };
5-
stan::test::expect_common_unary_vectorized(f);
6-
stan::test::expect_unary_vectorized(f, -2.6, -2, -0.2, 1.3, 3);
5+
stan::test::expect_common_unary_vectorized<stan::test::PromoteToComplex::No>(
6+
f);
7+
stan::test::expect_unary_vectorized<stan::test::PromoteToComplex::No>(
8+
f, -2.6, -2, -0.2, 1.3, 3);
79
}
810

911
TEST(mathMixMatFun, inv_varmat) {

0 commit comments

Comments
 (0)