Summary: | Sparse routines do not properly support AD scalar types | ||||||
---|---|---|---|---|---|---|---|
Product: | Eigen | Reporter: | Brad Bell <bradbell> | ||||
Component: | Sparse | Assignee: | Nobody <eigen.nobody> | ||||
Status: | NEW --- | ||||||
Severity: | Feature Request | CC: | chtz, gael.guennebaud | ||||
Priority: | Normal | ||||||
Version: | 3.3 (current stable) | ||||||
Hardware: | All | ||||||
OS: | All | ||||||
Whiteboard: | |||||||
Attachments: |
|
-- 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/1480. |
Created attachment 799 [details] Demonstrates problem using eigens AutoDiffScalar type. In some cases Eigen drops entires from a sparse matrix that have value zero. For an example, see the attached program which demonstrates the problem using the unsupported AutoDiffScalar type. In the context of AD, even though a value is zero, its derivative may be non-zero. CppAD has the notation of a value being identically zero, so that certain optimizations can be done in that case. In the case where the scalar type was double, equal to zero and identically equal to zero would be the same, so any related optimizations would take place. I would like to suggest that custom scalar type could define a function IdenticalZero(x) which would return true if the value is zero, and cannot changes in any way. Then Eigen would only drop entries that are Identicaly zero.