]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/cone: drop is_symmetric_p{s,}d() methods.
authorMichael Orlitzky <michael@orlitzky.com>
Sat, 1 May 2021 00:48:45 +0000 (20:48 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sat, 1 May 2021 00:48:45 +0000 (20:48 -0400)
These are now redundant since the sage is_positive_definite() and
is_positive_semidefinite() methods exist and work on inexact rings.

mjo/cone/completely_positive.py
mjo/cone/doubly_nonnegative.py
mjo/cone/symmetric_pd.py
mjo/cone/symmetric_psd.py

index 8bb4b6236b74d31921cb7eb2bf09c598e014ca1c..3dc66b454dfb8a85a4aa2ba4a4be03978a5b3690 100644 (file)
@@ -6,7 +6,7 @@ the set of all matrices `$A$`of the form `$\sum uu^{T}$` for `$u \in
 """
 
 from sage.all import *
 """
 
 from sage.all import *
-from mjo.cone.symmetric_psd import factor_psd, is_symmetric_psd
+from mjo.cone.symmetric_psd import factor_psd
 from mjo.cone.doubly_nonnegative import (is_doubly_nonnegative,
                                          is_extreme_doubly_nonnegative)
 
 from mjo.cone.doubly_nonnegative import (is_doubly_nonnegative,
                                          is_extreme_doubly_nonnegative)
 
@@ -89,7 +89,7 @@ def is_completely_positive(A):
         msg = 'The matrix ``A`` cannot be symbolic.'
         raise ValueError.new(msg)
 
         msg = 'The matrix ``A`` cannot be symbolic.'
         raise ValueError.new(msg)
 
-    if not is_symmetric_psd(A):
+    if not A.is_positive_semidefinite():
         return False
 
     n = A.nrows() # Makes sense since ``A`` is symmetric.
         return False
 
     n = A.nrows() # Makes sense since ``A`` is symmetric.
@@ -176,7 +176,7 @@ def is_extreme_completely_positive(A):
         msg = 'The matrix ``A`` cannot be symbolic.'
         raise ValueError(msg)
 
         msg = 'The matrix ``A`` cannot be symbolic.'
         raise ValueError(msg)
 
-    if not is_symmetric_psd(A):
+    if not A.is_positive_semidefinite():
         return False
 
     n = A.nrows() # Makes sense since ``A`` is symmetric.
         return False
 
     n = A.nrows() # Makes sense since ``A`` is symmetric.
index e8cacda5cd492100096eff2cf557c8992a34d9b3..5e10e1aebaad4c17de9e129681a57bb736e72886 100644 (file)
@@ -14,7 +14,6 @@ It is represented typically by either `\mathcal{D}^{n}` or
 from sage.all import *
 
 from mjo.cone.symmetric_psd import (factor_psd,
 from sage.all import *
 
 from mjo.cone.symmetric_psd import (factor_psd,
-                                    is_symmetric_psd,
                                     random_symmetric_psd)
 from mjo.basis_repr import basis_repr
 
                                     random_symmetric_psd)
 from mjo.basis_repr import basis_repr
 
@@ -63,7 +62,7 @@ def is_doubly_nonnegative(A):
 
     # It's nonnegative, so all we need to do is check that it's
     # symmetric positive-semidefinite.
 
     # It's nonnegative, so all we need to do is check that it's
     # symmetric positive-semidefinite.
-    return is_symmetric_psd(A)
+    return A.is_positive_semidefinite()
 
 
 
 
 
 
@@ -354,7 +353,7 @@ def is_extreme_doubly_nonnegative(A):
         # Short circuit, we know the zero matrix is extreme.
         return True
 
         # Short circuit, we know the zero matrix is extreme.
         return True
 
-    if not is_symmetric_psd(A):
+    if not A.is_positive_semidefinite():
         return False
 
     # Step 1.5, appeal to Theorem 3.1 in reference #1 to short
         return False
 
     # Step 1.5, appeal to Theorem 3.1 in reference #1 to short
index 75c4572eed3cf433b7d0bf6a0e84491919179387..e396bbcba8be01a6b53354beee9e31617c49dde4 100644 (file)
@@ -8,99 +8,6 @@ SEMI-definite cone.
 from sage.all import *
 from mjo.cone.symmetric_psd import random_symmetric_psd
 
 from sage.all import *
 from mjo.cone.symmetric_psd import random_symmetric_psd
 
-def is_symmetric_pd(A):
-    """
-    Determine whether or not the matrix ``A`` is symmetric
-    positive-definite.
-
-    INPUT:
-
-    - ``A`` - The matrix in question.
-
-    OUTPUT:
-
-    Either ``True`` if ``A`` is symmetric positive-definite, or
-    ``False`` otherwise.
-
-    SETUP::
-
-        sage: from mjo.cone.symmetric_pd import (is_symmetric_pd,
-        ....:                                    random_symmetric_pd)
-
-    EXAMPLES:
-
-    The identity matrix is obviously symmetric and positive-definite::
-
-        sage: set_random_seed()
-        sage: A = identity_matrix(ZZ, ZZ.random_element(10))
-        sage: is_symmetric_pd(A)
-        True
-
-    The following matrix is symmetric but not positive definite::
-
-        sage: A = matrix(ZZ, [[1, 2], [2, 1]])
-        sage: is_symmetric_pd(A)
-        False
-
-    This matrix isn't even symmetric::
-
-        sage: A = matrix(ZZ, [[1, 2], [3, 4]])
-        sage: is_symmetric_pd(A)
-        False
-
-    The trivial matrix in a trivial space is trivially symmetric and
-    positive-definite::
-
-        sage: A = matrix(QQ, 0,0)
-        sage: is_symmetric_pd(A)
-        True
-
-    The implementation of "is_positive_definite" in Sage leaves a bit to
-    be desired. This matrix is technically positive definite over the
-    real numbers, but isn't symmetric::
-
-        sage: A = matrix(RR,[[1,1],[-1,1]])
-        sage: A.is_positive_definite()
-        Traceback (most recent call last):
-        ...
-        ValueError: Could not see Real Field with 53 bits of precision as a
-        subring of the real or complex numbers
-        sage: is_symmetric_pd(A)
-        False
-
-    TESTS:
-
-    Every gram matrix is positive-definite, and we can sum two
-    positive-definite matrices (``A`` and its transpose) to get a new
-    positive-definite matrix that happens to be symmetric::
-
-        sage: set_random_seed()
-        sage: V = VectorSpace(QQ, ZZ.random_element(5))
-        sage: A = random_symmetric_pd(V)
-        sage: is_symmetric_pd(A)
-        True
-
-    """
-
-    if A.base_ring() == SR:
-        msg = 'The matrix ``A`` cannot be symbolic.'
-        raise ValueError.new(msg)
-
-    # First make sure that ``A`` is symmetric.
-    if not A.is_symmetric():
-        return False
-
-    # If ``A`` is symmetric, we only need to check that it is positive
-    # definite. For that we can consult its minimum eigenvalue, which
-    # should be greater than zero. Since ``A`` is symmetric, its
-    # eigenvalues are guaranteed to be real.
-    if A.is_zero():
-        # A is trivial... so trivially positive-definite.
-        return True
-    else:
-        return min(A.eigenvalues()) > 0
-
-
 def random_symmetric_pd(V):
     r"""
     Generate a random symmetric positive-definite matrix over the
 def random_symmetric_pd(V):
     r"""
     Generate a random symmetric positive-definite matrix over the
index fd6f9508196942cd59a578fc208324e87b7f326d..89eba53c9687823a0882304a49d9ddefc1d009db 100644 (file)
@@ -6,75 +6,6 @@ all symmetric positive-semidefinite matrices (as a subset of
 
 from sage.all import *
 
 
 from sage.all import *
 
-def is_symmetric_psd(A):
-    """
-    Determine whether or not the matrix ``A`` is symmetric
-    positive-semidefinite.
-
-    INPUT:
-
-    - ``A`` - The matrix in question
-
-    OUTPUT:
-
-    Either ``True`` if ``A`` is symmetric positive-semidefinite, or
-    ``False`` otherwise.
-
-    SETUP::
-
-        sage: from mjo.cone.symmetric_psd import is_symmetric_psd
-
-    EXAMPLES:
-
-    Every completely positive matrix is symmetric
-    positive-semidefinite::
-
-        sage: set_random_seed()
-        sage: v = vector(map(abs, random_vector(ZZ, 10)))
-        sage: A = v.column() * v.row()
-        sage: is_symmetric_psd(A)
-        True
-
-    The following matrix is symmetric but not positive semidefinite::
-
-        sage: A = matrix(ZZ, [[1, 2], [2, 1]])
-        sage: is_symmetric_psd(A)
-        False
-
-    This matrix isn't even symmetric::
-
-        sage: A = matrix(ZZ, [[1, 2], [3, 4]])
-        sage: is_symmetric_psd(A)
-        False
-
-    The trivial matrix in a trivial space is trivially symmetric and
-    positive-semidefinite::
-
-        sage: A = matrix(QQ, 0,0)
-        sage: is_symmetric_psd(A)
-        True
-
-    """
-
-    if A.base_ring() == SR:
-        msg = 'The matrix ``A`` cannot be symbolic.'
-        raise ValueError.new(msg)
-
-    # First make sure that ``A`` is symmetric.
-    if not A.is_symmetric():
-        return False
-
-    # If ``A`` is symmetric, we only need to check that it is positive
-    # semidefinite. For that we can consult its minimum eigenvalue,
-    # which should be zero or greater. Since ``A`` is symmetric, its
-    # eigenvalues are guaranteed to be real.
-    if A.is_zero():
-        # A is trivial... so trivially positive-semudefinite.
-        return True
-    else:
-        return min(A.eigenvalues()) >= 0
-
-
 def unit_eigenvectors(A):
     """
     Return the unit eigenvectors of a symmetric positive-definite matrix.
 def unit_eigenvectors(A):
     """
     Return the unit eigenvectors of a symmetric positive-definite matrix.
@@ -254,8 +185,7 @@ def random_symmetric_psd(V, accept_zero=True, rank=None):
 
     SETUP::
 
 
     SETUP::
 
-        sage: from mjo.cone.symmetric_psd import (is_symmetric_psd,
-        ....:                                     random_symmetric_psd)
+        sage: from mjo.cone.symmetric_psd import random_symmetric_psd
 
     EXAMPLES:
 
 
     EXAMPLES:
 
@@ -266,7 +196,7 @@ def random_symmetric_psd(V, accept_zero=True, rank=None):
         sage: A = random_symmetric_psd(V)
         sage: A.matrix_space()
         Full MatrixSpace of 2 by 2 dense matrices over Rational Field
         sage: A = random_symmetric_psd(V)
         sage: A.matrix_space()
         Full MatrixSpace of 2 by 2 dense matrices over Rational Field
-        sage: is_symmetric_psd(A)
+        sage: A.is_positive_semidefinite()
         True
 
     A matrix with the desired rank is returned::
         True
 
     A matrix with the desired rank is returned::