Incorrect Choleskly (LLT) return code when MKL is enabled
Submitted by ric..@..il.com
Assigned to Nobody
Link to original bugzilla bug (#705)
Version: 3.2
Description
When MKL is enabled, LLT returns the wrong error/success code. This appears to be due to misinterpretation of the return code of an internal function:
For both MKL and non-MKL mode, LLT_Traits::inplace_decomposition() returns the value llt_inplace<...>::blocked(m) == -1.
The non-MKL llt_inplace<...>::blocked returns -1 on success and another number >=0 (?) on failure.
However, the MKL llt_inplace<...>::blocked calls mkl_llt::potrf, which returns Success (0) and NumericalIssue (1).
I think the fix is that mkl_llt::potrf should instead return -1 on success and some other number on failure.
In my tests, changing the line "info = (info==0) ? Success : NumericalIssue;" to "info = (info==0) ? -1 : 1;" in the file Eigen/src/Cholesky/LLT_MKL.h fixes the problem. However, I'm not sure what the meaning of a failure return code is, so I'm not sure if 1 is the best value to return on error.