fix(eigen): reject nonfinite modal validation scales
This commit is contained in:
@@ -1091,12 +1091,17 @@ Result<FeastEigenResult> MklFeastEigenSolver::SolveImpl(
|
||||
euclidean = std::hypot(euclidean, vectors[row + input * n]);
|
||||
residual_denominator = (norm_k + std::abs(mu) * norm_m) * euclidean;
|
||||
}
|
||||
if (!std::isfinite(residual_norm) || !std::isfinite(residual_denominator))
|
||||
return Result<FeastEigenResult>::Failure(
|
||||
TraceFailure("eigenpair-validation-failed", std::to_string(input),
|
||||
"A nonfinite independent residual numerator or scale "
|
||||
"cannot certify a pair."));
|
||||
const double rho_b =
|
||||
residual_denominator == 0.0
|
||||
? (residual_norm == 0.0 ? 0.0
|
||||
: (std::numeric_limits<double>::infinity)())
|
||||
: std::sqrt(residual_norm) / residual_denominator;
|
||||
if (rho_b > 1.0e-10) {
|
||||
if (!std::isfinite(rho_b) || rho_b > 1.0e-10) {
|
||||
if (mass != nullptr)
|
||||
return Result<FeastEigenResult>::Failure(TraceFailure(
|
||||
"eigenpair-validation-failed", std::to_string(input),
|
||||
@@ -1198,7 +1203,7 @@ Result<FeastEigenResult> MklFeastEigenSolver::SolveImpl(
|
||||
}
|
||||
gram_error = std::sqrt(gram_squared /
|
||||
(mass != nullptr ? 1.0 : static_cast<double>(count)));
|
||||
if (gram_error > 1.0e-10) {
|
||||
if (!std::isfinite(gram_error) || gram_error > 1.0e-10) {
|
||||
return Result<FeastEigenResult>::Failure(TraceFailure(
|
||||
"eigenpair-validation-failed", "gram",
|
||||
"The normalized all-c Frobenius Gram error exceeds 1e-10: " +
|
||||
|
||||
Reference in New Issue
Block a user