boostorg / boostorg/math

autodiff::fvar doesn't work with Eigen

未關閉
#424 3 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
C++
星號
374
分支
264
平均合併
1 天 23 小時
30 天內合併 PR
17

描述

Currently, the templated copy constructor for `autodiff::fvar` interferes with Eigen's lazy evaluation, and, in my experience, produces two types of errors:
1. Ambiguous operators
- Example error: `ambiguous overload for ‘operator*’ (operand types are ‘Eigen::Transpose, 4, 1> >’ and ‘Eigen::Matrix, 4, 1>’)`
2. Failed attempts to `static_cast` a matrix into an fvar
- Example error: `error: invalid ‘static_cast’ from type ‘const Eigen::CwiseUnaryOp >, const Eigen::Matrix >’ to type ‘double’`

A solution would be to only define the constructor for types that are convertible to the fvar's RealType. A colleague and I worked out a potential fix using SFINAE that I'm currently testing against the existing `test_autodiff` files. Tests 1-3 have succeeded with the existing travis configuration, but I'm having issues in test_autodiff_4 with `boost::has_right_shift` as called from `boost::lexical_cast`.

Is there any interest in merging a solution to this problem? I can post the work I've done so far.

貢獻指南

這個儲存庫沒有索引到貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。