}
RealMatrix MTM = MatrixUtils.transposeTimesSelf(M);
double infNorm = MTM.getNorm();
if (infNorm < 1.0) {
log.warn("X'*X or Y'*Y has small inf norm ({}); try decreasing model.als.lambda", infNorm);
throw new IllConditionedSolverException("infNorm: " + infNorm);
}
return MatrixUtils.getSolver(MTM);
} finally {
readLock.unlock();
}