The polymake backend for polyhedral computations

Note

This backend requires polymake. To install it, type sage -i polymake in the terminal.

AUTHORS:

  • Matthias Köppe (2017-03): initial version

class sage.geometry.polyhedron.backend_polymake.Polyhedron_QQ_polymake(parent, Vrep, Hrep, polymake_polytope=None, **kwds)[source]

Bases: Polyhedron_polymake, Polyhedron_QQ

Polyhedra over \(\QQ\) with polymake.

INPUT:

  • Vrep – list [vertices, rays, lines] or None

  • Hrep – list [ieqs, eqns] or None

EXAMPLES:

sage: p = Polyhedron(vertices=[(0,0),(1,0),(0,1)],                 # optional - jupymake
....:                rays=[(1,1)], lines=[],
....:                backend='polymake', base_ring=QQ)
sage: TestSuite(p).run()                                           # optional - jupymake
>>> from sage.all import *
>>> p = Polyhedron(vertices=[(Integer(0),Integer(0)),(Integer(1),Integer(0)),(Integer(0),Integer(1))],                 # optional - jupymake
...                rays=[(Integer(1),Integer(1))], lines=[],
...                backend='polymake', base_ring=QQ)
>>> TestSuite(p).run()                                           # optional - jupymake
p = Polyhedron(vertices=[(0,0),(1,0),(0,1)],                 # optional - jupymake
               rays=[(1,1)], lines=[],
               backend='polymake', base_ring=QQ)
TestSuite(p).run()                                           # optional - jupymake
class sage.geometry.polyhedron.backend_polymake.Polyhedron_ZZ_polymake(parent, Vrep, Hrep, polymake_polytope=None, **kwds)[source]

Bases: Polyhedron_polymake, Polyhedron_ZZ

Polyhedra over \(\ZZ\) with polymake.

INPUT:

  • Vrep – list [vertices, rays, lines] or None

  • Hrep – list [ieqs, eqns] or None

EXAMPLES:

sage: p = Polyhedron(vertices=[(0,0),(1,0),(0,1)],                 # optional - jupymake
....:                rays=[(1,1)], lines=[],
....:                backend='polymake', base_ring=ZZ)
sage: TestSuite(p).run()                                           # optional - jupymake
>>> from sage.all import *
>>> p = Polyhedron(vertices=[(Integer(0),Integer(0)),(Integer(1),Integer(0)),(Integer(0),Integer(1))],                 # optional - jupymake
...                rays=[(Integer(1),Integer(1))], lines=[],
...                backend='polymake', base_ring=ZZ)
>>> TestSuite(p).run()                                           # optional - jupymake
p = Polyhedron(vertices=[(0,0),(1,0),(0,1)],                 # optional - jupymake
               rays=[(1,1)], lines=[],
               backend='polymake', base_ring=ZZ)
TestSuite(p).run()                                           # optional - jupymake
class sage.geometry.polyhedron.backend_polymake.Polyhedron_polymake(parent, Vrep, Hrep, polymake_polytope=None, **kwds)[source]

Bases: Polyhedron_base

Polyhedra with polymake.

INPUT:

  • parentPolyhedra the parent

  • Vrep – list [vertices, rays, lines] or None; the V-representation of the polyhedron. If None, the polyhedron is determined by the H-representation.

  • Hrep – list [ieqs, eqns] or None; the H-representation of the polyhedron. If None, the polyhedron is determined by the V-representation.

  • polymake_polytope – a polymake polytope object

Only one of Vrep, Hrep, or polymake_polytope can be different from None.

EXAMPLES:

sage: p = Polyhedron(vertices=[(0,0),(1,0),(0,1)], rays=[(1,1)],   # optional - jupymake
....:                lines=[], backend='polymake')
sage: TestSuite(p).run()                                           # optional - jupymake
>>> from sage.all import *
>>> p = Polyhedron(vertices=[(Integer(0),Integer(0)),(Integer(1),Integer(0)),(Integer(0),Integer(1))], rays=[(Integer(1),Integer(1))],   # optional - jupymake
...                lines=[], backend='polymake')
>>> TestSuite(p).run()                                           # optional - jupymake
p = Polyhedron(vertices=[(0,0),(1,0),(0,1)], rays=[(1,1)],   # optional - jupymake
               lines=[], backend='polymake')
TestSuite(p).run()                                           # optional - jupymake

A lower-dimensional affine cone; we test that there are no mysterious inequalities coming in from the homogenization:

sage: P = Polyhedron(vertices=[(1, 1)], rays=[(0, 1)],             # optional - jupymake
....:                backend='polymake')
sage: P.n_inequalities()                                           # optional - jupymake
1
sage: P.equations()                                                # optional - jupymake
(An equation (1, 0) x - 1 == 0,)
>>> from sage.all import *
>>> P = Polyhedron(vertices=[(Integer(1), Integer(1))], rays=[(Integer(0), Integer(1))],             # optional - jupymake
...                backend='polymake')
>>> P.n_inequalities()                                           # optional - jupymake
1
>>> P.equations()                                                # optional - jupymake
(An equation (1, 0) x - 1 == 0,)
P = Polyhedron(vertices=[(1, 1)], rays=[(0, 1)],             # optional - jupymake
               backend='polymake')
P.n_inequalities()                                           # optional - jupymake
P.equations()                                                # optional - jupymake

The empty polyhedron:

sage: Polyhedron(eqns=[[1, 0, 0]], backend='polymake')             # optional - jupymake
The empty polyhedron in QQ^2
>>> from sage.all import *
>>> Polyhedron(eqns=[[Integer(1), Integer(0), Integer(0)]], backend='polymake')             # optional - jupymake
The empty polyhedron in QQ^2
Polyhedron(eqns=[[1, 0, 0]], backend='polymake')             # optional - jupymake

It can also be obtained differently:

sage: # optional - jupymake
sage: P=Polyhedron(ieqs=[[-2, 1, 1], [-3, -1, -1], [-4, 1, -2]],
....:              backend='polymake')
sage: P
The empty polyhedron in QQ^2
sage: P.Vrepresentation()
()
sage: P.Hrepresentation()
(An equation -1 == 0,)
>>> from sage.all import *
>>> # optional - jupymake
>>> P=Polyhedron(ieqs=[[-Integer(2), Integer(1), Integer(1)], [-Integer(3), -Integer(1), -Integer(1)], [-Integer(4), Integer(1), -Integer(2)]],
...              backend='polymake')
>>> P
The empty polyhedron in QQ^2
>>> P.Vrepresentation()
()
>>> P.Hrepresentation()
(An equation -1 == 0,)
# optional - jupymake
P=Polyhedron(ieqs=[[-2, 1, 1], [-3, -1, -1], [-4, 1, -2]],
             backend='polymake')
P
P.Vrepresentation()
P.Hrepresentation()

The full polyhedron:

sage: Polyhedron(eqns=[[0, 0, 0]], backend='polymake')             # optional - jupymake
A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 vertex and 2 lines
sage: Polyhedron(ieqs=[[0, 0, 0]], backend='polymake')             # optional - jupymake
A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 vertex and 2 lines
>>> from sage.all import *
>>> Polyhedron(eqns=[[Integer(0), Integer(0), Integer(0)]], backend='polymake')             # optional - jupymake
A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 vertex and 2 lines
>>> Polyhedron(ieqs=[[Integer(0), Integer(0), Integer(0)]], backend='polymake')             # optional - jupymake
A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 1 vertex and 2 lines
Polyhedron(eqns=[[0, 0, 0]], backend='polymake')             # optional - jupymake
Polyhedron(ieqs=[[0, 0, 0]], backend='polymake')             # optional - jupymake

Quadratic fields work:

sage: V = polytopes.dodecahedron().vertices_list()                              # needs sage.groups sage.rings.number_field
sage: Polyhedron(vertices=V, backend='polymake')        # optional - jupymake, needs sage.groups sage.rings.number_field
A 3-dimensional polyhedron
 in (Number Field in sqrt5 with defining polynomial x^2 - 5
     with sqrt5 = 2.236067977499790?)^3
 defined as the convex hull of 20 vertices
>>> from sage.all import *
>>> V = polytopes.dodecahedron().vertices_list()                              # needs sage.groups sage.rings.number_field
>>> Polyhedron(vertices=V, backend='polymake')        # optional - jupymake, needs sage.groups sage.rings.number_field
A 3-dimensional polyhedron
 in (Number Field in sqrt5 with defining polynomial x^2 - 5
     with sqrt5 = 2.236067977499790?)^3
 defined as the convex hull of 20 vertices
V = polytopes.dodecahedron().vertices_list()                              # needs sage.groups sage.rings.number_field
Polyhedron(vertices=V, backend='polymake')        # optional - jupymake, needs sage.groups sage.rings.number_field