Skip to content

Commit b958d95

Browse files
committed
debug eigen tests
1 parent 441024f commit b958d95

File tree

2 files changed

+57
-21
lines changed

2 files changed

+57
-21
lines changed

include/boost/math/differentiation/autodiff_eigen.hpp

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,34 @@ struct NumTraits<boost::math::differentiation::autodiff_v1::detail::
2020
};
2121
};
2222

23-
template <typename RealType, size_t Order, typename BinaryOp, typename A>
24-
struct ScalarBinaryOpTraits<boost::math::differentiation::autodiff_v1::detail::
25-
template fvar<RealType, Order>,
26-
A, BinaryOp> {
27-
typedef boost::math::differentiation::autodiff_v1::detail::template fvar<
28-
RealType, Order>
29-
ReturnType;
30-
};
23+
#define BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(A) \
24+
template <class Scalar, size_t Order, typename BinaryOp> \
25+
struct ScalarBinaryOpTraits<boost::math::differentiation::autodiff_v1:: \
26+
detail::template fvar<Scalar, Order>, \
27+
A, BinaryOp> { \
28+
typedef boost::math::differentiation::autodiff_v1::detail::template fvar< \
29+
Scalar, Order> \
30+
ReturnType; \
31+
}; \
32+
template <class Scalar, size_t Order, typename BinaryOp> \
33+
struct ScalarBinaryOpTraits<A, \
34+
boost::math::differentiation::autodiff_v1:: \
35+
detail::template fvar<Scalar, Order>, \
36+
BinaryOp> { \
37+
typedef boost::math::differentiation::autodiff_v1::detail::template fvar< \
38+
Scalar, Order> \
39+
ReturnType; \
40+
};
3141

32-
template <typename RealType, size_t Order, typename BinaryOp, typename A>
33-
struct ScalarBinaryOpTraits<A,
34-
boost::math::differentiation::autodiff_v1::detail::
35-
template fvar<RealType, Order>,
36-
BinaryOp> {
37-
typedef boost::math::differentiation::autodiff_v1::detail::template fvar<
38-
RealType, Order>
39-
ReturnType;
40-
};
42+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(float);
43+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(double);
44+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(long double);
45+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(short);
46+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(unsigned short);
47+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(int);
48+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(unsigned int);
49+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(long);
50+
BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(unsigned long);
4151

4252
template <typename RealType, size_t Order, typename RealType2, size_t Order2,
4353
typename BinaryOp>
@@ -53,7 +63,7 @@ struct ScalarBinaryOpTraits<
5363
typedef boost::math::differentiation::autodiff_v1::detail::template fvar<
5464
RealReturn, ReturnOrder>
5565
ReturnType;
56-
}
66+
};
5767
} // namespace Eigen
5868

5969
#endif // BOOST_MATH_DIFFERENTIATION_AUTODIFF_EIGEN_HPP

test/test_autodiff_9.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,32 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_vector, T, all_float_types) {
224224
xD0 * sin(xD0) - 4 * cos(xD0));
225225
}
226226

227-
// BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_determinant, T, all_float_types) {
228-
// constexpr int dim = 4;
229-
// }
227+
BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_determinant, T, all_float_types) {
228+
using std::cos;
229+
using std::sin;
230+
constexpr int dim = 4;
231+
constexpr size_t n = 1;
232+
233+
typedef typename fvar<T, n> fTn;
234+
fTn x = 3;
235+
T xD0 = x.derivative(0);
236+
Eigen::Matrix<fTn, dim, dim> M = 10 * Eigen::Matrix<fTn, dim, dim>::Random();
237+
M(0, 3) = x;
238+
M(1, 0) = 3 * x;
239+
M(1, 2) = 1 / x;
240+
M(2, 2) = x * x;
241+
M(3, 1) = sin(x);
242+
fTn y = M.determinant();
243+
244+
Eigen::Matrix<T, dim, dim> dMdx = Eigen::Matrix<T, dim, dim>::Zero();
245+
dMdx(0, 3) = 1;
246+
dMdx(1, 0) = 3;
247+
dMdx(1, 2) = -1 / (xD0 * xD0);
248+
dMdx(2, 2) = 2 * xD0;
249+
dMdx(3, 1) = cos(xD0);
250+
251+
T ans = y.derivative(0) * (M.inverse() * dMdx).trace();
252+
BOOST_CHECK_EQUAL(y.derivative(1), ans);
253+
}
254+
255+
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)