]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/cone/symmetric_psd.py: don't import from sage.all
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 22 Nov 2024 21:38:30 +0000 (16:38 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 22 Nov 2024 22:13:00 +0000 (17:13 -0500)
mjo/cone/symmetric_psd.py

index d711773034666dfb8fedcfb1dabdd9bc34aa344e..8b435e1d64ddd0e52a7b732f46168b6040f67946 100644 (file)
@@ -4,8 +4,6 @@ all symmetric positive-semidefinite matrices (as a subset of
 `$\mathbb{R}^{n \times n}$`
 """
 
-from sage.all import *
-
 def unit_eigenvectors(A):
     """
     Return the unit eigenvectors of a symmetric positive-definite matrix.
@@ -117,6 +115,7 @@ def factor_psd(A):
         ValueError: The base ring of ``A`` must be a field.
 
     """
+    from sage.symbolic.ring import SR
 
     if not A.base_ring().is_exact() and not A.base_ring() is SR:
         msg = 'The base ring of ``A`` must be either exact or symbolic.'
@@ -136,10 +135,10 @@ def factor_psd(A):
     all_evs = unit_eigenvectors(A)
     evs = [ (val,vec) for (val,vec) in all_evs if not val == 0 ]
 
+    from sage.matrix.constructor import matrix
     d = ( val.sqrt() for (val,vec) in evs )
-    root_D = diagonal_matrix(d).change_ring(A.base_ring())
-
-    Q = matrix(A.base_ring(), ( vec for (val,vec) in evs )).transpose()
+    root_D = matrix.diagonal(d).change_ring(A.base_ring())
+    Q = matrix.column(A.base_ring(), ( vec for (val,vec) in evs ))
 
     return Q*root_D*Q.transpose()
 
@@ -237,6 +236,7 @@ def random_symmetric_psd(V, accept_zero=True, rank=None):
     rank_A = 0
     if rank is None:
         # Choose one randomly
+        from sage.rings.all import ZZ
         rank_A = ZZ.random_element(n+1)
     elif (rank < 0) or (rank > n):
         # The rank of ``A`` can be at most ``n``.
@@ -251,6 +251,7 @@ def random_symmetric_psd(V, accept_zero=True, rank=None):
         raise ValueError('You must have accept_zero=True when V is trivial')
 
     # Loop until we find a suitable "A" that will then be returned.
+    from sage.matrix.constructor import matrix
     while True:
         # Begin with the zero matrix, and add projectors to it if we
         # have any.