X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Fcone%2Fdoubly_nonnegative.py;h=1fb350cb46559a55b982ee3de15678e02d5a04de;hb=b760d6ffe2554def684bf1118fff22072b8cf781;hp=7d39061d21dae6e2f9795cc63ccffe91c220cd0a;hpb=2fa2a7a2f6a5d5f1628a4f5cf3301d5e7f670038;p=sage.d.git diff --git a/mjo/cone/doubly_nonnegative.py b/mjo/cone/doubly_nonnegative.py index 7d39061..1fb350c 100644 --- a/mjo/cone/doubly_nonnegative.py +++ b/mjo/cone/doubly_nonnegative.py @@ -1,4 +1,4 @@ -""" +r""" The doubly-nonnegative cone in `S^{n}` is the set of all such matrices that both, @@ -13,13 +13,9 @@ It is represented typically by either `\mathcal{D}^{n}` or from sage.all import * -# Sage doesn't load ~/.sage/init.sage during testing (sage -t), so we -# have to explicitly mangle our sitedir here so that our module names -# resolve. -from os.path import abspath -from site import addsitedir -addsitedir(abspath('../../')) -from mjo.cone.symmetric_psd import factor_psd, is_symmetric_psd, random_psd +from mjo.cone.symmetric_psd import (factor_psd, + is_symmetric_psd, + random_symmetric_psd) from mjo.matrix_vector import isomorphism @@ -62,7 +58,7 @@ def is_doubly_nonnegative(A): raise ValueError.new(msg) # Check that all of the entries of ``A`` are nonnegative. - if not all([ a >= 0 for a in A.list() ]): + if not all( a >= 0 for a in A.list() ): return False # It's nonnegative, so all we need to do is check that it's @@ -72,7 +68,7 @@ def is_doubly_nonnegative(A): def is_admissible_extreme_rank(r, n): - """ + r""" The extreme matrices of the doubly-nonnegative cone have some restrictions on their ranks. This function checks to see whether the rank ``r`` would be an admissible rank for an ``n``-by-``n`` matrix. @@ -375,8 +371,8 @@ def is_extreme_doubly_nonnegative(A): # whenever we come across an index pair `$(i,j)$` with # `$A_{ij} = 0$`. spanning_set = [] - for j in range(0, A.ncols()): - for i in range(0,j): + for j in range(A.ncols()): + for i in range(j): if A[i,j] == 0: M = A.matrix_space() S = X.transpose() * (stdE(M,i,j) + stdE(M,j,i)) * X @@ -464,10 +460,10 @@ def random_doubly_nonnegative(V, accept_zero=True, rank=None): # Generate random symmetric positive-semidefinite matrices until # one of them is nonnegative, then return that. - A = random_psd(V, accept_zero, rank) + A = random_symmetric_psd(V, accept_zero, rank) - while not all([ x >= 0 for x in A.list() ]): - A = random_psd(V, accept_zero, rank) + while not all( x >= 0 for x in A.list() ): + A = random_symmetric_psd(V, accept_zero, rank) return A @@ -534,7 +530,7 @@ def random_extreme_doubly_nonnegative(V, accept_zero=True, rank=None): """ - if not is_admissible_extreme_rank(rank, V.dimension()): + if rank is not None and not is_admissible_extreme_rank(rank, V.dimension()): msg = 'Rank %d not possible in dimension %d.' raise ValueError(msg % (rank, V.dimension()))