Skip to content

Commit 8faa450

Browse files
committed
Replace ad-hoc DiagonalWrapper with built-in Eigen approach
As far as I can tell, this is mathematically and operationally equivalent, but using Eigen's built-in functionality for producing a diagonal matrix expression from a 1-d array solves issue #419.
1 parent 1e1f466 commit 8faa450

File tree

1 file changed

+2
-7
lines changed

1 file changed

+2
-7
lines changed

include/albatross/src/core/transformed_distribution.hpp

+2-7
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,12 @@ namespace albatross {
3636

3737
namespace details {
3838

39-
template <typename X> inline auto diagonal_wrapper(X &x) {
40-
return Eigen::DiagonalWrapper<X>(x);
41-
}
42-
4339
template <typename MatrixType, typename DiagType>
4440
inline Eigen::MatrixXd
4541
product_sqrt(const Eigen::MatrixBase<MatrixType> &matrix,
4642
const Eigen::DiagonalBase<DiagType> &diag_matrix) {
47-
4843
return matrix.derived() *
49-
diagonal_wrapper(diag_matrix.diagonal().array().sqrt().eval());
44+
diag_matrix.diagonal().array().sqrt().matrix().asDiagonal();
5045
}
5146

5247
template <typename Lhs, typename Rhs>
@@ -61,7 +56,7 @@ inline Eigen::MatrixXd
6156
product_sqrt(const Eigen::SparseMatrixBase<MatrixType> &matrix,
6257
const Eigen::DiagonalBase<DiagType> &diag_matrix) {
6358
return matrix.derived() *
64-
diagonal_wrapper(diag_matrix.diagonal().array().sqrt().eval());
59+
diag_matrix.diagonal().array().sqrt().matrix().asDiagonal();
6560
}
6661

6762
template <typename SparseType, typename MatrixType>

0 commit comments

Comments
 (0)