boostorg / boostorg/math

autodiff::fvar doesn't work with Eigen

オープン
#424 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
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 はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。