]> gitweb.michael.orlitzky.com - dunshire.git/commitdiff
Make sure SymmetricPSD doesn't contain asymmetric matrices.
authorMichael Orlitzky <michael@orlitzky.com>
Thu, 13 Oct 2016 23:14:26 +0000 (19:14 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Thu, 13 Oct 2016 23:14:26 +0000 (19:14 -0400)
src/dunshire/cones.py

index 92a03a96245e79db4bce92f013e782c1964bf458..61feab453bd0866b54c053d2871d722a63ec3730 100644 (file)
@@ -384,10 +384,10 @@ class SymmetricPSD(SymmetricCone):
 
             >>> K = SymmetricPSD(5)
             >>> A = matrix([[5,4,3,2,1],
-            ...            [4,5,4,3,2],
-            ...            [3,4,5,4,3],
-            ...            [2,3,4,5,4],
-            ...            [1,2,3,4,5]])
+            ...             [4,5,4,3,2],
+            ...             [3,4,5,4,3],
+            ...             [2,3,4,5,4],
+            ...             [1,2,3,4,5]])
             >>> A in K
             True
 
@@ -409,8 +409,16 @@ class SymmetricPSD(SymmetricCone):
         However, this matrix has a negative eigenvalue:
 
            >>> K = SymmetricPSD(2)
-           >>> A = matrix([[1,-2],
-           ...             [-2,1]])
+           >>> A = matrix([[ 1, -2],
+           ...             [-2,  1]])
+           >>> A in K
+           False
+
+        An asymmetric cone with positive eigenvalues is not in the cone:
+
+           >>> K = SymmetricPSD(2)
+           >>> A = matrix([[10, 2],
+           ...             [4,  8]])
            >>> A in K
            False
 
@@ -435,6 +443,9 @@ class SymmetricPSD(SymmetricCone):
             raise TypeError('the given point has the wrong dimensions')
         if not point.typecode == 'd':
             point = matrix(point, (self.dimension(), self.dimension()), 'd')
+        if not norm(point - point.trans()) < options.ABS_TOL:
+            # It's not symmetric.
+            return False
         return all([e > -options.ABS_TOL for e in eigenvalues(point)])