From 57824cb514182bb70be721827edd38843a339ed1 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Mon, 11 Jan 2016 09:34:10 -0500 Subject: [PATCH] Add tests for the dimension of the Z-transformation cone. --- mjo/cone/cone.py | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/mjo/cone/cone.py b/mjo/cone/cone.py index a327720..28ad0a4 100644 --- a/mjo/cone/cone.py +++ b/mjo/cone/cone.py @@ -562,7 +562,8 @@ def Z_transformation_gens(K): ....: for (x,s) in dcs]) True - The lineality space of Z is LL:: + The lineality space of the cone of Z-transformations is the space of + Lyapunov-like transformations:: sage: set_random_seed() sage: K = random_cone(max_ambient_dim=4) @@ -575,7 +576,8 @@ def Z_transformation_gens(K): sage: z_cone.linear_subspace() == lls True - And thus, the lineality of Z is the Lyapunov rank:: + The lineality of the Z-transformations on a cone is the Lyapunov + rank of that cone:: sage: set_random_seed() sage: K = random_cone(max_ambient_dim=4) @@ -587,7 +589,10 @@ def Z_transformation_gens(K): sage: z_cone.lineality() == K.lyapunov_rank() True - The lineality spaces of pi-star and Z-star are equal: + The lineality spaces of the duals of the positive operator and + Z-transformation cones are equal. From this it follows that the + dimensions of the Z-transformation cone and positive operator cone + are equal:: sage: set_random_seed() sage: K = random_cone(max_ambient_dim=4) @@ -597,13 +602,46 @@ def Z_transformation_gens(K): sage: pi_cone = Cone([p.list() for p in pi_of_K], ....: lattice=L, ....: check=False) - sage: pi_star = pi_cone.dual() sage: z_cone = Cone([ z.list() for z in Z_of_K], ....: lattice=L, ....: check=False) + sage: pi_cone.dim() == z_cone.dim() + True + sage: pi_star = pi_cone.dual() sage: z_star = z_cone.dual() sage: pi_star.linear_subspace() == z_star.linear_subspace() True + + The trivial cone, full space, and half-plane all give rise to the + expected dimensions:: + + sage: n = ZZ.random_element().abs() + sage: K = Cone([[0] * n], ToricLattice(n)) + sage: K.is_trivial() + True + sage: L = ToricLattice(n^2) + sage: Z_of_K = Z_transformation_gens(K) + sage: z_cone = Cone([z.list() for z in Z_of_K], + ....: lattice=L, + ....: check=False) + sage: actual = z_cone.dim() + sage: actual == n^2 + True + sage: K = K.dual() + sage: K.is_full_space() + True + sage: z_of_K = Z_transformation_gens(K) + sage: z_cone = Cone([z.list() for z in Z_of_K], + ....: lattice=L, + ....: check=False) + sage: actual = z_cone.dim() + sage: actual == n^2 + True + sage: K = Cone([(1,0),(0,1),(0,-1)]) + sage: Z_of_K = Z_transformation_gens(K) + sage: actual = Cone([z.list() for z in Z_of_K], check=False).dim() + sage: actual == 3 + 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 -- 2.44.2