This bugzilla service is closed. All entries have been migrated to https://gitlab.com/libeigen/eigen
Bug 234 - Autodiff missing operators, functions, ...
Summary: Autodiff missing operators, functions, ...
Status: NEW
Alias: None
Product: Eigen
Classification: Unclassified
Component: Unsupported modules (show other bugs)
Version: 3.0
Hardware: All All
: --- Unknown
Assignee: Nobody
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-03-24 11:43 UTC by dtag00
Modified: 2019-12-04 10:34 UTC (History)
1 user (show)



Attachments

Description dtag00 2011-03-24 11:43:20 UTC
Hi,

I am using the AutoDiff module and I found that it lacks a few things:

-There doesn't appear to be a unary - operator for AutoDiffScalars
-Also there is no < operator. In this case I am not sure whether that is intentional or not... but I guess it's not
-Doing 1.0-2.0*x (where x is an AutoDiffScalar) results in an error - 1.0+(-2.0*x) works
-An overload for std::atan is missing
-ActiveScalars don't work for VectorXd::norm()

It would be nice if support for these could be added soon
Thanks
Comment 1 Gael Guennebaud 2011-05-12 23:37:17 UTC
hi, most of your requests have been fixed. It remains only atan2 to implement.
Comment 2 dtag00 2011-05-13 01:22:21 UTC
Hi,

Thanks for your efforts. I just wanted to test your changes and found that they introduced new problems:
For example the statement cos(0.5*someAutoDiffScalar) produces (sorry for the long pastes -- error messages really are a pain :-/):

/usr/local/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:118: error: no matching function for call to ‘Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >::CwiseBinaryOp(const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > > >&)’                                                                                          
/usr/local/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h:138: note: candidates are: Eigen::CwiseBinaryOp<BinaryOp, Lhs, Rhs>::CwiseBinaryOp(const Lhs&, const Rhs&, const BinaryOp&) [with BinaryOp = Eigen::internal::scalar_sum_op<double>, Lhs = const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, Rhs = const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >]                                                           
/usr/local/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h:124: note:                 Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >::CwiseBinaryOp(const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >, const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > > >&)              
/usr/local/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h: In constructor ‘Eigen::CwiseUnaryOp<UnaryOp, MatrixType>::CwiseUnaryOp(const XprType&, const UnaryOp&) [with UnaryOp = Eigen::internal::scalar_multiple_op<double>, XprType = const Eigen::Matrix<double, 12, 1, 0, 12, 1>]’:
/usr/local/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h:118:   instantiated from ‘Eigen::AutoDiffScalar<_DerType>::AutoDiffScalar(const Eigen::AutoDiffScalar<OtherDerType>&) [with OtherDerType = Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >, _DerType = Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> >]’                                   
/usr/local/include/eigen3/Eigen/src/Core/MathFunctions.h:483:   instantiated from ‘typename Eigen::internal::cos_retval<typename Eigen::internal::global_math_functions_filtering_base<Scalar, void>::type>::type Eigen::internal::cos(const Scalar&) [with Scalar = Eigen::AutoDiffScalar<Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, const Eigen::Matrix<double, 12, 1, 0, 12, 1> > >]’                                                               
[...]


There are a bunch more errors showing up in my application but it looks like they were related to the error above.
Comment 3 Nobody 2019-12-04 10:34:43 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/234.

Note You need to log in before you can comment on or make changes to this bug.