autodiff::fvar doesn't work with Eigen
- 主要言語
- C++
- スター
- 374
- フォーク
- 264
- 平均マージ
- 1日 23時間
- マージ済み PR(30日)
- 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 はまだ評価されていません。