]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/cone: add the nonnegative_orthant module.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 2 Nov 2018 14:00:44 +0000 (10:00 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 2 Nov 2018 14:00:44 +0000 (10:00 -0400)
mjo/cone/all.py
mjo/cone/nonnegative_orthant.py [new file with mode: 0644]

index bda0d031a152c3a862093768b877bb3ee27aa34e..e7d3bffcc4efccb3c145c354a06ecb27a789507e 100644 (file)
@@ -6,6 +6,7 @@ from mjo.cone.cone import *
 from mjo.cone.completely_positive import *
 from mjo.cone.doubly_nonnegative import *
 from mjo.cone.faces import *
+from mjo.cone.nonnegative_orthant import *
 from mjo.cone.permutation_invariant import *
 from mjo.cone.rearrangement import *
 from mjo.cone.symmetric_psd import *
diff --git a/mjo/cone/nonnegative_orthant.py b/mjo/cone/nonnegative_orthant.py
new file mode 100644 (file)
index 0000000..c116330
--- /dev/null
@@ -0,0 +1,53 @@
+"""
+The nonnegative orthant in `\mathbb{Z}^{n}`. I'm sick and tired of
+typing it.
+"""
+
+from sage.all import *
+
+def nonnegative_orthant(n):
+    r"""
+    The nonnegative orthant in ``n`` dimensions.
+
+    INPUT:
+
+      - ``n`` -- the dimension of the ambient space.
+
+    OUTPUT:
+
+    The convex cone having ``n`` standard basis vectors as its
+    generators. Each generating ray will have the integer ring as its
+    base ring.
+
+    SETUP::
+
+        sage: from mjo.cone.nonnegative_orthant import nonnegative_orthant
+
+    EXAMPLES::
+
+        sage: nonnegative_orthant(3).rays()
+        N(1, 0, 0),
+        N(0, 1, 0),
+        N(0, 0, 1)
+        in 3-d lattice N
+
+    TESTS:
+
+    We can construct the trivial cone as the nonnegative orthant in a
+    trivial vector space::
+
+        sage: nonnegative_orthant(0)
+        0-d cone in 0-d lattice N
+
+    The nonnegative orthant is a proper cone::
+
+        sage: set_random_seed()
+        sage: n = ZZ.random_element(10)
+        sage: K = nonnegative_orthant(n)
+        sage: K.is_proper()
+        True
+
+    """
+    I = identity_matrix(ZZ,n)
+    lattice = ToricLattice(n)
+    return Cone(I.rows(), lattice)