]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/cone/cone.py
Remove unused codim() function.
[sage.d.git] / mjo / cone / cone.py
index 87cdf704580e68b55fa72cd93b8dfa6c1d08a484..f5371d6d803cdbc97fe4ba41cb26f0ee691f1a2a 100644 (file)
@@ -8,6 +8,26 @@ addsitedir(abspath('../../'))
 from sage.all import *
 
 
+def drop_dependent(vs):
+    r"""
+    Return the largest linearly-independent subset of ``vs``.
+    """
+    if len(vs) == 0:
+        # ...for lazy enough definitions of linearly-independent
+        return vs
+
+    result = []
+    old_V = VectorSpace(vs[0].parent().base_field(), 0)
+
+    for v in vs:
+        new_V = span(result + [v])
+        if new_V.dimension() > old_V.dimension():
+            result.append(v)
+            old_V = new_V
+
+    return result
+
+
 def basically_the_same(K1,K2):
     r"""
     ``True`` if ``K1`` and ``K2`` are basically the same, and ``False``
@@ -56,7 +76,7 @@ def iso_space(K):
     # Create the space W \times W^{\perp} isomorphic to V.
     # First we get an orthogonal (but not normal) basis...
     M = matrix(V.base_field(), K.rays())
-    W_basis,_ = M.gram_schmidt()
+    W_basis = drop_dependent(K.rays())
 
     W = V.subspace_with_basis(W_basis)
     W_perp = W.complement()
@@ -388,100 +408,6 @@ def lineality(K):
     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.