From: Michael Orlitzky Date: Sun, 11 Nov 2018 22:54:10 +0000 (-0500) Subject: cone/nonnegative_orthant.py: add "lattice" argument. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=cc84aa97cee45609d60893755d5b06be2c79f32e;p=sage.d.git cone/nonnegative_orthant.py: add "lattice" argument. --- diff --git a/mjo/cone/nonnegative_orthant.py b/mjo/cone/nonnegative_orthant.py index c116330..288f794 100644 --- a/mjo/cone/nonnegative_orthant.py +++ b/mjo/cone/nonnegative_orthant.py @@ -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)