From 57d2324bc518c736bcd3a754ca75874c202557ca Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Tue, 24 Nov 2015 20:40:57 -0500 Subject: [PATCH] Add a test for K.is_proper() <==> pi(K).is_proper(). --- mjo/cone/cone.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/mjo/cone/cone.py b/mjo/cone/cone.py index 1ab6b97..15857be 100644 --- a/mjo/cone/cone.py +++ b/mjo/cone/cone.py @@ -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) -- 2.44.2