autodiff::fvar doesn't work with Eigen
- 主要語言
- 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 還沒有評估資料。