]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
Add a test for K.is_proper() <==> pi(K).is_proper().
authorMichael Orlitzky <michael@orlitzky.com>
Wed, 25 Nov 2015 01:40:57 +0000 (20:40 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Wed, 25 Nov 2015 01:40:57 +0000 (20:40 -0500)
mjo/cone/cone.py

index 1ab6b97c128cde3d1e176032cf0d90f601057166..15857be3ce5d29a5a3726a3a3e9d1390fde64f70 100644 (file)
@@ -177,7 +177,7 @@ def positive_operator_gens(K):
     A positive operator on a cone should send its generators into the cone::
 
         sage: set_random_seed()
-        sage: K = random_cone(max_ambient_dim = 5)
+        sage: K = random_cone(max_ambient_dim=5)
         sage: pi_of_K = positive_operator_gens(K)
         sage: all([K.contains(p*x) for p in pi_of_K for x in K.rays()])
         True
@@ -201,7 +201,7 @@ def positive_operator_gens(K):
     corollary in my paper::
 
         sage: set_random_seed()
-        sage: K = random_cone(max_ambient_dim = 5)
+        sage: K = random_cone(max_ambient_dim=5)
         sage: n = K.lattice_dim()
         sage: pi_of_K = positive_operator_gens(K)
         sage: L = ToricLattice(n**2)
@@ -209,6 +209,17 @@ def positive_operator_gens(K):
         sage: expected = n**2 - K.dim()*K.dual().dim()
         sage: actual == expected
         True
+
+    The cone ``K`` is proper if and only if the cone of positive
+    operators on ``K`` is proper::
+
+        sage: set_random_seed()
+        sage: K = random_cone(max_ambient_dim=5)
+        sage: pi_of_K = positive_operator_gens(K)
+        sage: L = ToricLattice(K.lattice_dim()**2)
+        sage: pi_cone = Cone([p.list() for p in pi_of_K], lattice=L)
+        sage: K.is_proper() == pi_cone.is_proper()
+        True
     """
     # Matrices are not vectors in Sage, so we have to convert them
     # to vectors explicitly before we can find a basis. We need these
@@ -336,3 +347,18 @@ def Z_transformation_gens(K):
     # not cross-positive ones.
     M = MatrixSpace(F, n)
     return [ -M(v.list()) for v in Sigma_cone.rays() ]
+
+
+def Z_cone(K):
+    gens = Z_transformation_gens(K)
+    L = None
+    if len(gens) == 0:
+        L = ToricLattice(0)
+    return Cone([ g.list() for g in gens ], lattice=L)
+
+def pi_cone(K):
+    gens = positive_operator_gens(K)
+    L = None
+    if len(gens) == 0:
+        L = ToricLattice(0)
+    return Cone([ g.list() for g in gens ], lattice=L)