]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
cone/nonnegative_orthant.py: add "lattice" argument.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 11 Nov 2018 22:54:10 +0000 (17:54 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 11 Nov 2018 22:54:10 +0000 (17:54 -0500)
mjo/cone/nonnegative_orthant.py

index c1163302b737b507db66cf344a644372e509227c..288f794391a031ab9010d9f70ecea0d77f3aa095 100644 (file)
@@ -5,7 +5,7 @@ typing it.
 
 from sage.all import *
 
-def nonnegative_orthant(n):
+def nonnegative_orthant(n, lattice=None):
     r"""
     The nonnegative orthant in ``n`` dimensions.
 
@@ -13,12 +13,19 @@ def nonnegative_orthant(n):
 
       - ``n`` -- the dimension of the ambient space.
 
+      - ``lattice`` -- (default: ``None``) an ambient lattice of rank ``n``
+                       to be passed to the :func:`Cone` constructor.
+
     OUTPUT:
 
     The convex cone having ``n`` standard basis vectors as its
     generators. Each generating ray will have the integer ring as its
     base ring.
 
+    If a ``lattice`` was specified, then the cone will live in that
+    lattice unless its rank is incompatible with the dimension ``n`` (in
+    which case a ``ValueError`` is raised).
+
     SETUP::
 
         sage: from mjo.cone.nonnegative_orthant import nonnegative_orthant
@@ -47,7 +54,28 @@ def nonnegative_orthant(n):
         sage: K.is_proper()
         True
 
+    If a ``lattice`` was given, it is actually used::
+
+        sage: L = ToricLattice(3, 'M')
+        sage: nonnegative_orthant(3, lattice=L)
+        3-d cone in 3-d lattice M
+
+    Unless the rank of the lattice disagrees with ``n``::
+
+        sage: L = ToricLattice(1, 'M')
+        sage: nonnegative_orthant(3, lattice=L)
+        Traceback (most recent call last):
+        ...
+        ValueError: lattice rank=1 and dimension n=3 are incompatible
+
     """
+    if lattice is None:
+        lattice = ToricLattice(n)
+
+    if lattice.rank() != n:
+        raise ValueError('lattice rank=%d and dimension n=%d are incompatible'
+                         %
+                         (lattice.rank(), n))
+
     I = identity_matrix(ZZ,n)
-    lattice = ToricLattice(n)
     return Cone(I.rows(), lattice)