autodiff::fvar doesn't work with Eigen
- Langage dominant
- C++
- Étoiles
- 374
- Forks
- 264
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 17
Description
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.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Évaluation
Cette issue n'a pas encore été évaluée.