]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
Remove the discrete_complementarity_set() function (into Sage proper).
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 2 Oct 2015 01:24:03 +0000 (21:24 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 2 Oct 2015 01:24:03 +0000 (21:24 -0400)
mjo/cone/cone.py

index b4d2be0d73e10ed9f58d1189c84ed4bec3d0ad94..f8b879131908a8d1a15d5069fcc888c5db319b07 100644 (file)
@@ -79,8 +79,8 @@ def _basically_the_same(K1, K2):
     if len(LL(K1)) != len(LL(K2)):
         return False
 
-    C_of_K1 = discrete_complementarity_set(K1)
-    C_of_K2 = discrete_complementarity_set(K2)
+    C_of_K1 = K1.discrete_complementarity_set()
+    C_of_K2 = K2.discrete_complementarity_set()
     if len(C_of_K1) != len(C_of_K2):
         return False
 
@@ -211,104 +211,6 @@ def _restrict_to_space(K, W):
     return Cone(K_W_rays, lattice=L)
 
 
-
-def discrete_complementarity_set(K):
-    r"""
-    Compute a discrete complementarity set of this cone.
-
-    A discrete complementarity set of `K` is the set of all orthogonal
-    pairs `(x,s)` such that `x \in G_{1}` and `s \in G_{2}` for some
-    generating sets `G_{1}` of `K` and `G_{2}` of its dual. Polyhedral
-    convex cones are input in terms of their generators, so "the" (this
-    particular) discrete complementarity set corresponds to ``G1
-    == K.rays()`` and ``G2 == K.dual().rays()``.
-
-    OUTPUT:
-
-    A list of pairs `(x,s)` such that,
-
-      * Both `x` and `s` are vectors (not rays).
-      * `x` is one of ``K.rays()``.
-      * `s` is one of ``K.dual().rays()``.
-      * `x` and `s` are orthogonal.
-
-    REFERENCES:
-
-    .. [Orlitzky/Gowda] M. Orlitzky and M. S. Gowda. The Lyapunov Rank of an
-       Improper Cone. Work in-progress.
-
-    EXAMPLES:
-
-    The discrete complementarity set of the nonnegative orthant consists
-    of pairs of standard basis vectors::
-
-        sage: K = Cone([(1,0),(0,1)])
-        sage: discrete_complementarity_set(K)
-        [((1, 0), (0, 1)), ((0, 1), (1, 0))]
-
-    If the cone consists of a single ray, the second components of the
-    discrete complementarity set should generate the orthogonal
-    complement of that ray::
-
-        sage: K = Cone([(1,0)])
-        sage: discrete_complementarity_set(K)
-        [((1, 0), (0, 1)), ((1, 0), (0, -1))]
-        sage: K = Cone([(1,0,0)])
-        sage: discrete_complementarity_set(K)
-        [((1, 0, 0), (0, 1, 0)),
-          ((1, 0, 0), (0, -1, 0)),
-          ((1, 0, 0), (0, 0, 1)),
-          ((1, 0, 0), (0, 0, -1))]
-
-    When the cone is the entire space, its dual is the trivial cone, so
-    the discrete complementarity set is empty::
-
-        sage: K = Cone([(1,0),(-1,0),(0,1),(0,-1)])
-        sage: discrete_complementarity_set(K)
-        []
-
-    Likewise when this cone is trivial (its dual is the entire space)::
-
-        sage: L = ToricLattice(0)
-        sage: K = Cone([], ToricLattice(0))
-        sage: discrete_complementarity_set(K)
-        []
-
-    TESTS:
-
-    The complementarity set of the dual can be obtained by switching the
-    components of the complementarity set of the original cone::
-
-        sage: set_random_seed()
-        sage: K1 = random_cone(max_ambient_dim=6)
-        sage: K2 = K1.dual()
-        sage: expected = [(x,s) for (s,x) in discrete_complementarity_set(K2)]
-        sage: actual = discrete_complementarity_set(K1)
-        sage: sorted(actual) == sorted(expected)
-        True
-
-    The pairs in the discrete complementarity set are in fact
-    complementary::
-
-        sage: set_random_seed()
-        sage: K = random_cone(max_ambient_dim=6)
-        sage: dcs = discrete_complementarity_set(K)
-        sage: sum([x.inner_product(s).abs() for (x,s) in dcs])
-        0
-
-    """
-    V = K.lattice().vector_space()
-
-    # Convert rays to vectors so that we can compute inner products.
-    xs = [V(x) for x in K.rays()]
-
-    # We also convert the generators of the dual cone so that we
-    # return pairs of vectors and not (vector, ray) pairs.
-    ss = [V(s) for s in K.dual().rays()]
-
-    return [(x,s) for x in xs for s in ss if x.inner_product(s) == 0]
-
-
 def LL(K):
     r"""
     Compute a basis of Lyapunov-like transformations on this cone.
@@ -384,7 +286,7 @@ def LL(K):
 
         sage: set_random_seed()
         sage: K = random_cone(max_ambient_dim=8)
-        sage: C_of_K = discrete_complementarity_set(K)
+        sage: C_of_K = K.discrete_complementarity_set()
         sage: l = [ (L*x).inner_product(s) for (x,s) in C_of_K for L in LL(K) ]
         sage: sum(map(abs, l))
         0
@@ -406,7 +308,7 @@ def LL(K):
     """
     V = K.lattice().vector_space()
 
-    C_of_K = discrete_complementarity_set(K)
+    C_of_K = K.discrete_complementarity_set()
 
     tensor_products = [ s.tensor_product(x) for (x,s) in C_of_K ]
 
@@ -748,7 +650,7 @@ def is_lyapunov_like(L,K):
 
     """
     return all([(L*x).inner_product(s) == 0
-                for (x,s) in discrete_complementarity_set(K)])
+                for (x,s) in K.discrete_complementarity_set()])
 
 
 def random_element(K):