]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/cone/trivial_cone.py
cone/trivial_cone.py: add the trivial_cone() function.
[sage.d.git] / mjo / cone / trivial_cone.py
diff --git a/mjo/cone/trivial_cone.py b/mjo/cone/trivial_cone.py
new file mode 100644 (file)
index 0000000..17c6835
--- /dev/null
@@ -0,0 +1,64 @@
+from sage.all import *
+
+def trivial_cone(n, lattice=None):
+    r"""
+    The trivial cone with no generators in ``n`` dimensions.
+
+    INPUT:
+
+      - ``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 trivial cone with no generators.
+
+    If a ``lattice`` was specified, then the resulting 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.trivial_cone import trivial_cone
+
+    EXAMPLES::
+
+    We can construct the trivial cone as the nonnegative orthant in a
+    trivial ambient space::
+
+        sage: trivial_cone(0)
+        0-d cone in 0-d lattice N
+
+    Or in a nontrivial ambient space::
+
+        sage: trivial_cone(3)
+        0-d cone in 3-d lattice N
+
+    If a ``lattice`` is given, the trivial cone will live in that lattice::
+
+        sage: L = ToricLattice(3, 'M')
+        sage: trivial_cone(3, lattice=L)
+        0-d cone in 3-d lattice M
+
+    TESTS:
+
+    An error is raised if the rank of the lattice disagrees with ``n``::
+
+        sage: L = ToricLattice(1, 'M')
+        sage: trivial_cone(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))
+
+    return Cone([], lattice)