]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/cone/permutation_invariant.py
mjo/**/*.py: drop obsolete set_random_seed().
[sage.d.git] / mjo / cone / permutation_invariant.py
index 65e22f58b4ead8375795659330ad906a6a5087c4..d0715867a35770470cb47c384d3b84656d012a2c 100644 (file)
@@ -1,10 +1,3 @@
-# Sage doesn't load ~/.sage/init.sage during testing (sage -t), so we
-# have to explicitly mangle our sitedir here so that "mjo.cone"
-# resolves.
-from os.path import abspath
-from site import addsitedir
-addsitedir(abspath('../../'))
-
 from sage.all import *
 
 def random_permutation_invariant_cone(lattice=None,
@@ -40,17 +33,12 @@ def random_permutation_invariant_cone(lattice=None,
     V = K.lattice().vector_space()
 
     # The set of all permutatin matrices on ``V``.
-    Sn = [ p.matrix() for p in SymmetricGroup(V.dimension()) ]
+    Sn = ( p.matrix() for p in SymmetricGroup(V.dimension()) )
 
     # Set of permuted generators
-    pgens = []
-
-    for g in K.rays():
-        for permutation in Sn:
-            pgens.append(permutation * V(g))
+    pgens = ( permutation*V(g) for permutation in Sn for g in K )
 
-    L = ToricLattice(V.dimension())
-    return Cone(pgens, lattice=L)
+    return Cone(pgens, K.lattice())
 
 
 def is_permutation_invariant(K):
@@ -60,11 +48,25 @@ def is_permutation_invariant(K):
     A cone is said to be permutation-invariant if ``P(K)`` is a subset
     of ``K`` for every permutation matrix ``P``.
 
+    SETUP::
+
+        sage: from mjo.cone.nonnegative_orthant import nonnegative_orthant
+        sage: from mjo.cone.permutation_invariant import is_permutation_invariant
+        sage: from mjo.cone.rearrangement import rearrangement_cone
+
     EXAMPLES:
 
-        sage: all([ is_permutation_invariant(rearrangement_cone(p,n))
+    The rearrangement cone is permutation-invariant::
+
+        sage: all( is_permutation_invariant(rearrangement_cone(p,n))
         ....:               for n in range(3, 6)
-        ....:               for p in range(1, n) ])
+        ....:               for p in range(1, n) )
+        True
+
+    As is the nonnegative orthant::
+
+        sage: K = nonnegative_orthant(ZZ.random_element(5))
+        sage: is_permutation_invariant(K)
         True
 
     """
@@ -73,13 +75,8 @@ def is_permutation_invariant(K):
     V = K.lattice().vector_space()
 
     # The set of all permutation matrices on ``V``.
-    Sn = [ p.matrix() for p in SymmetricGroup(V.dimension()) ]
-
-    for permutation in Sn:
-        L = ToricLattice(V.dimension())
-        permuted_gens = [ permutation * V(g) for g in K.rays() ]
-        for g in permuted_gens:
-            if not K.contains(g):
-                return False
+    Sn = ( p.matrix() for p in SymmetricGroup(V.dimension()) )
 
-    return True
+    return all(K.contains(permutation*V(g))
+                   for g in K
+                   for permutation in Sn)