X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Fcone%2Ffaces.py;h=6c5843e860ef9da5151150103223a1d507914fe1;hb=928b7d49fda98ff105c92293b5797bb7a2b9873a;hp=81b8421e94b28e0b9b9a68387a6b67f92c903a78;hpb=064a3c7c3796f931954f8ece0b6e9912163efc1b;p=sage.d.git diff --git a/mjo/cone/faces.py b/mjo/cone/faces.py index 81b8421..6c5843e 100644 --- a/mjo/cone/faces.py +++ b/mjo/cone/faces.py @@ -51,38 +51,34 @@ def face_generated_by(K,S): The face generated by should be a face:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, max_rays=10) - sage: S = [K.random_element() for idx in range(0,5)] + sage: S = ( K.random_element() for idx in range(5) ) sage: F = face_generated_by(K, S) sage: F.is_face_of(K) True The face generated by a set should always contain that set:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, max_rays=10) - sage: S = [K.random_element() for idx in range(0,5)] + sage: S = ( K.random_element() for idx in range(5) ) sage: F = face_generated_by(K, S) - sage: all([F.contains(x) for x in S]) + sage: all(F.contains(x) for x in S) True The generators of a proper cone are all extreme vectors of the cone, and therefore generate their own faces:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, ....: max_rays=10, ....: strictly_convex=True, ....: solid=True) - sage: all([face_generated_by(K, [r]) == Cone([r]) for r in K]) + sage: all(face_generated_by(K, [r]) == Cone([r]) for r in K) True For any point ``x`` in ``K`` and any face ``F`` of ``K``, we have that ``x`` is in the relative interior of ``F`` if and only if ``F`` is the face generated by ``x`` [Tam]_:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, max_rays=10) sage: x = K.random_element() sage: S = [x] @@ -96,7 +92,6 @@ def face_generated_by(K,S): and ``G`` in the face lattice is equal to the face generated by ``F + G`` (in the Minkowski sense) [Tam]_:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, max_rays=10) sage: L = K.face_lattice() sage: F = L.random_element() @@ -109,7 +104,6 @@ def face_generated_by(K,S): Combining Proposition 3.1 and Corollary 3.9 in [Tam]_ gives the following equality for any ``y`` in ``K``:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, max_rays=10) sage: y = K.random_element() sage: S = [y] @@ -123,7 +117,7 @@ def face_generated_by(K,S): """ face_lattice = K.face_lattice() - candidates = [F for F in face_lattice if all([F.contains(x) for x in S])] + candidates = [F for F in face_lattice if all(F.contains(x) for x in S)] # K itself is a face of K, so unless we were given a set S that # isn't a subset of K, the candidates list will be nonempty. @@ -143,6 +137,10 @@ def dual_face(K,F): REFERENCES: + .. [HilgertHofmannLawson] Joachim Hilgert, Karl Heinrich Hofmann, and Jimmie + D. Lawson. Lie groups, convex cones and semigroups. Oxford Mathematical + Monographs. Clarendon Press, Oxford, 1989. ISBN 9780198535690. + .. [Tam] Bit-Shun Tam. On the duality operator of a convex cone. Linear Algebra and its Applications, 64:33-56, 1985, doi:10.1016/0024-3795(85) 90265-4. @@ -168,10 +166,9 @@ def dual_face(K,F): The dual face of ``K`` with respect to itself should be the lineality space of its dual [Tam]_:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, max_rays=10) sage: K_dual = K.dual() - sage: lKd_gens = [ dir*l for dir in [1,-1] for l in K_dual.lines() ] + sage: lKd_gens = ( dir*l for dir in [1,-1] for l in K_dual.lines() ) sage: linspace_K_dual = Cone(lKd_gens, K_dual.lattice()) sage: dual_face(K,K).is_equivalent(linspace_K_dual) True @@ -179,7 +176,6 @@ def dual_face(K,F): If ``K`` is proper, then the dual face of its trivial face is the dual of ``K`` [Tam]_:: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, ....: max_rays=10, ....: strictly_convex=True, @@ -192,7 +188,6 @@ def dual_face(K,F): The dual of the cone of ``K`` at ``y`` is the dual face of the face of ``K`` generated by ``y`` ([Tam]_ Corollary 3.2):: - sage: set_random_seed() sage: K = random_cone(max_ambient_dim=8, max_rays=10) sage: y = K.random_element() sage: S = [y] @@ -205,11 +200,10 @@ def dual_face(K,F): Since all faces of a polyhedral cone are exposed, the dual face of a dual face should be the original face [HilgertHofmannLawson]_:: - sage: set_random_seed() sage: def check_prop(K,F): ....: return dual_face(K.dual(), dual_face(K,F)).is_equivalent(F) sage: K = random_cone(max_ambient_dim=8, max_rays=10) - sage: all([check_prop(K,F) for F in K.face_lattice()]) + sage: all(check_prop(K,F) for F in K.face_lattice()) True """ @@ -217,5 +211,5 @@ def dual_face(K,F): if not F.is_face_of(K): raise ValueError("%s is not a face of %s" % (F,K)) - span_F = Cone([c*g for c in [1,-1] for g in F], F.lattice()) + span_F = Cone((c*g for c in [1,-1] for g in F), F.lattice()) return K.dual().intersection(span_F.dual())