From 7c71dbc3454b5211269b879462f3530d76ad6991 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 14 Jun 2015 12:25:55 -0400 Subject: [PATCH] Remove the lineality() and codim() functions (now depends on branch u/mjo/ticket/18701). --- mjo/cone/cone.py | 181 +++-------------------------------------------- 1 file changed, 8 insertions(+), 173 deletions(-) diff --git a/mjo/cone/cone.py b/mjo/cone/cone.py index c6d2682..f4b2244 100644 --- a/mjo/cone/cone.py +++ b/mjo/cone/cone.py @@ -24,7 +24,7 @@ def basically_the_same(K1,K2): if K1.dim() != K2.dim(): return False - if lineality(K1) != lineality(K2): + if K1.lineality() != K2.lineality(): return False if K1.is_solid() != K2.is_solid(): @@ -108,7 +108,7 @@ def rho(K, K2=None): sage: set_random_seed() sage: K = random_cone(max_dim = 8) - sage: lineality(K) == lineality(rho(K)) + sage: K.lineality() == rho(K).lineality() True No matter which space we restrict to, the lineality should not @@ -116,9 +116,9 @@ def rho(K, K2=None): sage: set_random_seed() sage: K = random_cone(max_dim = 8) - sage: lineality(K) >= lineality(rho(K)) + sage: K.lineality() >= rho(K).lineality() True - sage: lineality(K) >= lineality(rho(K, K.dual())) + sage: K.lineality() >= rho(K, K.dual()).lineality() True If we do this according to our paper, then the result is proper:: @@ -235,171 +235,6 @@ def rho(K, K2=None): -def lineality(K): - r""" - Compute the lineality of this cone. - - The lineality of a cone is the dimension of the largest linear - subspace contained in that cone. - - OUTPUT: - - A nonnegative integer; the dimension of the largest subspace - contained within this cone. - - REFERENCES: - - .. [Rockafellar] R.T. Rockafellar. Convex Analysis. Princeton - University Press, Princeton, 1970. - - EXAMPLES: - - The lineality of the nonnegative orthant is zero, since it clearly - contains no lines:: - - sage: K = Cone([(1,0,0), (0,1,0), (0,0,1)]) - sage: lineality(K) - 0 - - However, if we add another ray so that the entire `x`-axis belongs - to the cone, then the resulting cone will have lineality one:: - - sage: K = Cone([(1,0,0), (-1,0,0), (0,1,0), (0,0,1)]) - sage: lineality(K) - 1 - - If our cone is all of `\mathbb{R}^{2}`, then its lineality is equal - to the dimension of the ambient space (i.e. two):: - - sage: K = Cone([(1,0), (-1,0), (0,1), (0,-1)]) - sage: lineality(K) - 2 - - Per the definition, the lineality of the trivial cone in a trivial - space is zero:: - - sage: K = Cone([], lattice=ToricLattice(0)) - sage: lineality(K) - 0 - - TESTS: - - The lineality of a cone should be an integer between zero and the - dimension of the ambient space, inclusive:: - - sage: set_random_seed() - sage: K = random_cone(max_dim = 8) - sage: l = lineality(K) - sage: l in ZZ - True - sage: (0 <= l) and (l <= K.lattice_dim()) - True - - A strictly convex cone should have lineality zero:: - - sage: set_random_seed() - sage: K = random_cone(max_dim = 8, strictly_convex = True) - sage: lineality(K) - 0 - - """ - return K.linear_subspace().dimension() - - -def codim(K): - r""" - Compute the codimension of this cone. - - The codimension of a cone is the dimension of the space of all - elements perpendicular to every element of the cone. In other words, - the codimension is the difference between the dimension of the - ambient space and the dimension of the cone itself. - - OUTPUT: - - A nonnegative integer representing the dimension of the space of all - elements perpendicular to this cone. - - .. seealso:: - - :meth:`dim`, :meth:`lattice_dim` - - EXAMPLES: - - The codimension of the nonnegative orthant is zero, since the span of - its generators equals the entire ambient space:: - - sage: K = Cone([(1,0,0), (0,1,0), (0,0,1)]) - sage: codim(K) - 0 - - However, if we remove a ray so that the entire cone is contained - within the `x-y`-plane, then the resulting cone will have - codimension one, because the `z`-axis is perpendicular to every - element of the cone:: - - sage: K = Cone([(1,0,0), (0,1,0)]) - sage: codim(K) - 1 - - If our cone is all of `\mathbb{R}^{2}`, then its codimension is zero:: - - sage: K = Cone([(1,0), (-1,0), (0,1), (0,-1)]) - sage: codim(K) - 0 - - And if the cone is trivial in any space, then its codimension is - equal to the dimension of the ambient space:: - - sage: K = Cone([], lattice=ToricLattice(0)) - sage: K.lattice_dim() - 0 - sage: codim(K) - 0 - - sage: K = Cone([(0,)]) - sage: K.lattice_dim() - 1 - sage: codim(K) - 1 - - sage: K = Cone([(0,0)]) - sage: K.lattice_dim() - 2 - sage: codim(K) - 2 - - TESTS: - - The codimension of a cone should be an integer between zero and - the dimension of the ambient space, inclusive:: - - sage: set_random_seed() - sage: K = random_cone(max_dim = 8) - sage: c = codim(K) - sage: c in ZZ - True - sage: (0 <= c) and (c <= K.lattice_dim()) - True - - A solid cone should have codimension zero:: - - sage: set_random_seed() - sage: K = random_cone(max_dim = 8, solid = True) - sage: codim(K) - 0 - - The codimension of a cone is equal to the lineality of its dual:: - - sage: set_random_seed() - sage: K = random_cone(max_dim = 8, solid = True) - sage: codim(K) == lineality(K.dual()) - True - - """ - return (K.lattice_dim() - K.dim()) - - def discrete_complementarity_set(K): r""" Compute the discrete complementarity set of this cone. @@ -711,7 +546,7 @@ def lyapunov_rank(K): sage: K = Cone([e1, neg_e1, e2, neg_e2, z, z, z]) sage: lyapunov_rank(K) 19 - sage: K.lattice_dim()**2 - K.dim()*codim(K) + sage: K.lattice_dim()**2 - K.dim()*K.codim() 19 The Lyapunov rank should be additive on a product of proper cones @@ -819,8 +654,8 @@ def lyapunov_rank(K): sage: actual = lyapunov_rank(K) sage: K_S = rho(K) sage: K_SP = rho(K_S.dual()).dual() - sage: l = lineality(K) - sage: c = codim(K) + sage: l = K.lineality() + sage: c = K.codim() sage: expected = lyapunov_rank(K_SP) + K.dim()*(l + c) + c**2 sage: actual == expected True @@ -859,7 +694,7 @@ def lyapunov_rank(K): m = K.dim() n = K.lattice_dim() - l = lineality(K) + l = K.lineality() if m < n: # K is not solid, restrict to its span. -- 2.44.2