from sage.all import * def is_positive_semidefinite_naive(A): r""" A naive positive-semidefinite check that tests the eigenvalues for nonnegativity. We follow the sage convention that positive (semi)definite matrices must be symmetric or Hermitian. SETUP:: sage: from mjo.ldlt import is_positive_semidefinite_naive TESTS: The trivial matrix is vaciously positive-semidefinite:: sage: A = matrix(QQ, 0) sage: A [] sage: is_positive_semidefinite_naive(A) True """ if A.nrows() == 0: return True # vacuously return A.is_hermitian() and all( v >= 0 for v in A.eigenvalues() )