# application: polytope

This is the historically first application, and the largest one.

It deals with convex pointed polyhedra. It allows to define a polyhedron either as a convex hull of a point set, an intersection of halfspaces, or as an incidence matrix without any embedding. Then you can ask for a plenty of its (especially combinatorial) properties, construct new polyhedra by modifying it, or study the behavior of the objective functions.

There is a wide range of visualization methods for polyhedra, even for dimensions > 4 and purely combinatorial descriptions, including interfaces to interactive geometry viewers (such as JavaView or geomview), generating PostScript drawings and povray scene files.

imports from: common, graph
uses: group, ideal, topaz

## Objects

•

### AffineLattice

Category: Geometry

a lattice that is displaced from the origin, i.e., a set of the form x + L, where x is a non-zero vector and L a (linear) lattice

•

### Cone

A polyhedral cone, not necessarily pointed. Note that in contrast to the vertices of a polytope, the RAYS are given in affine coordinates.

#### Specializations of Cone

•
Cone<Rational>

An affine rational cone realized in Rd.

•
Cone<Float>

An affine cone with float coordinates realized in Rd.

•
Cone::ExactCoord

An affine cone with an exact coordinate type, like Rational.

•

### Backward compatibility

These methods are provided for backward compatibility with older versions of polymake only. They should not be used in new code.

•
DIAMETER () → Int

The diameter of the GRAPH of the cone

##### Returns
 Int
•
DUAL_DIAMETER () → Int

The diameter of the DUAL_GRAPH

##### Returns
 Int
•
DUAL_TRIANGLE_FREE () → Bool

True if the DUAL_GRAPH contains no triangle

##### Returns
 Bool
•
TRIANGLE_FREE () → Bool

True if the GRAPH contains no triangle

##### Returns
 Bool
•

### Combinatorics

These methods capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice.

•
CONNECTIVITY () → Int

Connectivity of the GRAPH this is the minimum number of nodes that have to be removed from the GRAPH to make it disconnected

##### Returns
 Int
•
DUAL_CONNECTIVITY () → Int

Connectivity of the DUAL_GRAPH this is the minimum number of nodes that have to be removed from the DUAL_GRAPH to make it disconnected

##### Returns
 Int
•
DUAL_EVEN () → Bool

True if the DUAL_GRAPH is bipartite

##### Returns
 Bool
•
EVEN () → Bool

True if the GRAPH is bipartite

##### Returns
 Bool
•
faces_of_dim (c) → Array<Set<Int>>

Output the faces of a given dimension

##### Parameters
 Cone c the input cone
##### Returns
 Array>
•
FACET_DEGREES () → Vector<Int>

Facet degrees of the polytope. The degree of a facet is the number of adjacent facets.

##### Returns
 Vector - in the same order as FACETS
•
N_FLAGS (type ...) → Int

Determine the number of flags of a given type. type must belong to {0,...,COMBINATORIAL_DIM-1}. Example: "N_FLAGS(0,3,4)" determines the entry f034 of the flag vector.

##### Parameters
 Int type ... flag type
##### Returns
 Int
•
VERTEX_DEGREES () → Vector<Int>

Ray degrees of the cone

##### Returns
 Vector - in the same order as RAYS
•

### Geometry

These methods capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets.

•
AMBIENT_DIM () → Int

returns the dimension of the ambient space of the cone

##### Returns
 Int
•
contains (v) → Bool

checks whether a given point is contained in a cone

##### Parameters
 Vector v point
##### Returns
 Bool
•
contains_in_interior (v) → Bool

checks whether a given point is contained in the strict interior of a cone

##### Parameters
 Vector v point
##### Returns
 Bool
•
DIM () → Int

returns the geometric dimension of the cone (including the lineality space) for the dimension of the pointed part ask for COMBINATORIAL_DIM

##### Returns
 Int
•

### Lattice points in cones

These methods capture information that depends on the lattice structure of the cone. polymake always works with the integer lattice.

•
HILBERT_BASIS () → Matrix<Integer>

Only defined for Cone<Rational>

for a cone this method returns a Hilbert basis of the cone for a polytope this method returns a Hilbert basis of the homogenization cone of the polytope note: if the cone is not pointed (the polytope is not bounded) then the returned basis is not unique and usually not minimal

##### Returns
 Matrix
•

### Topology

The following methods compute topological invariants.

•

### Visualization

These methods are for visualization.

•
VISUAL () → Visual::Cone

Visualizes the cone, intersected with the unit ball.

##### Options
 option list: Visual::Polygons::decorations option list: geometric_options_linear
##### Returns
 Visual::Cone

•

### GroebnerBasis

Category: Lattice points in cones

The Groebner basis of the homogeneous toric ideal associated to the polytope, the term order is given in matrix form.

•

### LinearProgram

Category: Optimization

A linear program specified by a linear or abstract objective function

#### Properties of LinearProgram

•
ABSTRACT_OBJECTIVE: common::Vector

Abstract objective function. Defines a direction for each edge such that each non-empty face has a unique source and a unique sink. The i-th element is the value of the objective function at vertex number i. Only defined for bounded polytopes.

Example:
• The following creates a new LinearProgram object and assigns an abstract objective to it:> $l = cube(2)->LP(ABSTRACT_OBJECTIVE=>[1,2,3,4]);> print$l->ABSTRACT_OBJECTIVE; 1 2 3 4
•
DIRECTED_BOUNDED_GRAPH: graph::Graph<Directed>

Subgraph of BOUNDED_GRAPH. Consists only of directed arcs along which the value of the objective function increases.

•
DIRECTED_GRAPH: graph::Graph<Directed>

Subgraph of Polytope::GRAPH. Consists only of directed arcs along which the value of the objective function increases.

Example:
• The following defines a LinearProgram together with a linear objective for the centered square with side length 2. The directed graph according to the linear objective is stored in a new variable and the corresponding edges are printend.> $c = new Vector([0, 1, 0]);>$p = cube(2);> $p->LP(LINEAR_OBJECTIVE=>$c);> $g =$p->LP->DIRECTED_GRAPH;> print $g->EDGES; {0 1} {2 3} • LINEAR_OBJECTIVE: common::Vector Linear objective function. In d-space a linear objective function is given by a (d+1)-vector. The first coordinate specifies a constant that is added to the resulting value. Example: • The following creates a new LinearProgram object and assigns a linear objective to it:>$l = cube(2)->LP(LINEAR_OBJECTIVE=>[0,1,1]);> print $l->LINEAR_OBJECTIVE; 0 1 1 • MAXIMAL_FACE: common::Set<Int> Indices of vertices at which the maximum of the objective function is attained. Example: • The following defines a LinearProgram together with a linear objective for the centered square with side length 2 and asks for the maximal face:>$c = new Vector([0, 1, 0]);> $p = cube(2);>$p->LP(LINEAR_OBJECTIVE=>$c);> print$p->LP->MAXIMAL_FACE; {1 3}
•
MAXIMAL_VALUE: LinearProgram::Scalar

Maximum value of the objective function. Negated if linear problem is unbounded.

Examples:
• The following defines a LinearProgram together with a linear objective for the centered square with side length 2 and asks for the maximal value:> $c = new Vector([0, 1, 0]);>$p = cube(2);> $p->LP(LINEAR_OBJECTIVE=>$c);> print $p->LP->MAXIMAL_VALUE; 1 • The following defines a LinearProgram together with a linear objective with bias 3 for the centered square with side length 4 and asks for the maximal value:>$c = new Vector([3, 1, 0]);> $p = cube(2,2);>$p->LP(LINEAR_OBJECTIVE=>$c);> print$p->LP->MAXIMAL_VALUE; 5
• The following defines a LinearProgram together with a linear objective for the positive quadrant (unbounded) and asks for the maximal value:> $c = new Vector([0, 1, 1]);>$p = facet_to_infinity(simplex(2),0);> $p->LP(LINEAR_OBJECTIVE=>$c);> print $p->LP->MAXIMAL_VALUE; inf • MAXIMAL_VERTEX: common::Vector Coordinates of a (possibly not unique) affine vertex at which the maximum of the objective function is attained. Example: • The following defines a LinearProgram together with a linear objective for the centered square with side length 2 and asks for a maximal vertex:>$c = new Vector([0, 1, -1/2]);> $p = cube(2);>$p->LP(LINEAR_OBJECTIVE=>$c);> print$p->LP->MAXIMAL_VERTEX; 1 1 -1
•
MINIMAL_FACE: common::Set<Int>

Similar to MAXIMAL_FACE.

Example:
• The following defines a LinearProgram together with a linear objective for the centered square with side length 2 and asks for the minimal face:> $c = new Vector([0, 1, 0]);>$p = cube(2);> $p->LP(LINEAR_OBJECTIVE=>$c);> print $p->LP->MINIMAL_FACE; {0 2} • MINIMAL_VALUE: LinearProgram::Scalar Similar to MAXIMAL_VALUE. Examples: • The following defines a LinearProgram together with a linear objective for the centered square with side length 2 and asks for the minimal value:>$c = new Vector([0, 1, 0]);> $p = cube(2);>$p->LP(LINEAR_OBJECTIVE=>$c);> print$p->LP->MINIMAL_VALUE; -1
• The following defines a LinearProgram together with a linear objective with bias 3 for the centered square with side length 4 and asks for the minimal value:> $c = new Vector([3, 1, 0]);>$p = cube(2,2);> $p->LP(LINEAR_OBJECTIVE=>$c);> print $p->LP->MINIMAL_VALUE; 1 • MINIMAL_VERTEX: common::Vector Similar to MAXIMAL_VERTEX. Example: • The following defines a LinearProgram together with a linear objective for the centered square with side length 2 and asks for a minimal vertex:>$c = new Vector([0, 1, 0]);> $p = cube(2);>$p->LP(LINEAR_OBJECTIVE=>$c);> print$p->LP->MINIMAL_VERTEX; 1 -1 -1
•
RANDOM_EDGE_EPL: common::Vector<Rational>

Expected average path length for a simplex algorithm employing "random edge" pivoting strategy.

#### User Methods of LinearProgram

•
VERTEX_IN_DEGREES () → Array<Int>

Array of in-degrees for all nodes of DIRECTED_GRAPH or numbers of objective decreasing edges at each vertex

##### Returns
 Array
•
VERTEX_OUT_DEGREES () → Array<Int>

Array of out-degrees for all nodes of DIRECTED_GRAPH or numbers of objective increasing edges at each vertex

##### Returns
 Array
•

### MixedIntegerLinearProgram

Category: Optimization

A mixed integer linear program specified by a linear or abstract objective function

#### Properties of MixedIntegerLinearProgram

•
INTEGER_VARIABLES: common::Set<Int>

Set of integers that indicate which entries of the solution should be integral. If no value is specified, all entries are required to be integral. If all entries should be rational, please use an LinearProgram instead.

Examples:
• The following defines a MixedIntegerLinearProgram together with a linear objective on a rational line segment embedded in two-dimensional space. > $l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);>$obj = new Vector([0,1,0]);> $intvar = new Set<Int>([0,1,2]);>$milp = $l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print$milp->INTEGER_VARIABLES; {0 1 2}
• Same as the previous example, but we do not require the first coordinate to be integral anymore.> $l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);>$obj = new Vector([0,1,0]);> $intvar = new Set<Int>([0,2]);>$milp = $l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print$milp->INTEGER_VARIABLES; {0 2}
•
LINEAR_OBJECTIVE: common::Vector

Linear objective funtion. In d-space a linear objective function is given by a (d+1)-vector. The first coordinate specifies a constant that is added to the resulting value.

Example:
• The following defines a MixedIntegerLinearProgram together with a linear objective on a rational line segment embedded in two-dimensional space. > $l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);>$obj = new Vector([0,-1,0]);> $intvar = new Set<Int>([0,1,2]);>$milp = $l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print$milp->LINEAR_OBJECTIVE; 0 -1 0
•
MAXIMAL_SOLUTION: common::Vector

Coordinates of a (possibly not unique) affine vertex at which the maximum of the objective function is attained.

Examples:
• The following defines a MixedIntegerLinearProgram together with a linear objective for the centered square with side length 2 and asks for a maximal solution:> $c = new Vector([0, 1, -1/2]);>$p = cube(2);> $p->MILP(LINEAR_OBJECTIVE=>$c);> print $p->MILP->MAXIMAL_SOLUTION; 1 1 -1 • The following defines a MixedIntegerLinearProgram together with a linear objective on a rational line segment embedded in two-dimensional space. Note that the maximal solution is not a vertex/endpoint of the line segment.>$l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);> $obj = new Vector([0,1,0]);>$intvar = new Set<Int>([0,1,2]);> $milp =$l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print $milp->MAXIMAL_SOLUTION; 1 1 0 • Same as the previous example, but we do not require the first coordinate to be integral anymore. Now the maximal solution is an endpoint of the line segment.>$l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);> $obj = new Vector([0,1,0]);>$intvar = new Set<Int>([0,2]);> $milp =$l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print $milp->MAXIMAL_SOLUTION; 1 3/2 0 • MAXIMAL_VALUE: MixedIntegerLinearProgram::Scalar Maximum value the objective funtion takes under the restriction given by INTEGER_VARIABLES. Examples: • The following defines a MixedIntegerLinearProgram together with a linear objective on a rational line segment embedded in two-dimensional space. Note that the maximal value is integral and not the same as the value of the objective function on any of the vertices.>$l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);> $obj = new Vector([0,1,0]);>$intvar = new Set<Int>([0,1,2]);> $milp =$l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print $milp->MAXIMAL_VALUE; 1 • Same as the previous example, but we do not require the first coordinate to be integral anymore.>$l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);> $obj = new Vector([0,1,0]);>$intvar = new Set<Int>([0,2]);> $milp =$l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print $milp->MAXIMAL_VALUE; 3/2 • MINIMAL_SOLUTION: common::Vector Similar to MAXIMAL_SOLUTION Example: • The following defines a MixedIntegerLinearProgram together with a linear objective for the centered square with side length 2 and asks for a maximal solution:>$c = new Vector([0, 1, -1/2]);> $p = cube(2);>$p->MILP(LINEAR_OBJECTIVE=>$c);> print$p->MILP->MINIMAL_SOLUTION; 1 -1 1
•
MINIMAL_VALUE: MixedIntegerLinearProgram::Scalar

Similar to MAXIMAL_VALUE.

Examples:
• The following defines a MixedIntegerLinearProgram together with a linear objective on a rational line segment embedded in two-dimensional space. Note that the maximal value is integral and not the same as the value of the objective function on any of the vertices.> $l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);>$obj = new Vector([0,-1,0]);> $intvar = new Set<Int>([0,1,2]);>$milp = $l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print$milp->MINIMAL_VALUE; -1
• Same as the previous example, but we do not require the first coordinate to be integral anymore.> $l = new Polytope(INEQUALITIES=>[[0,1,0],[3/2,-1,0],[1,0,0]],EQUATIONS=>[[0,0,1]]);>$obj = new Vector([0,-1,0]);> $intvar = new Set<Int>([0,2]);>$milp = $l->MILP(LINEAR_OBJECTIVE=>$obj, INTEGER_VARIABLES=>$intvar);> print$milp->MINIMAL_VALUE; -3/2
•

### PointConfiguration

The POINTS of an object of type PointConfiguration encode a not necessarily convex finite point set. The difference to a parent VectorConfiguration is that the points have homogeneous coordinates, i.e. they will be normalized to have first coordinate 1 without warning.

derived from: VectorConfiguration
##### Type Parameters
 Scalar default: Rational

•

### Combinatorics

These methods capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice.

•
faces_of_dim (p) → Array<Set<Int>>

Output the faces of a given dimension

##### Parameters
 PointConfiguration p the input point configuration
##### Returns
 Array>
•

### Geometry

These methods capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets.

•
AMBIENT_DIM () → Int

Ambient dimension of the point configuration (without the homogenization coordinate). Similar to Polytope::AMBIENT_DIM.

##### Returns
 Int
•
DIM () → Int

Affine dimension of the point configuration. Similar to Polytope::DIM.

##### Returns
 Int
•

### Visualization

These methods are for visualization.

•
VISUAL () → Visual::PointConfiguration

Visualize a point configuration.

##### Options
 option list: Visual::Polygons::decorations option list: geometric_options
##### Returns
 Visual::PointConfiguration
•
VISUAL_POINTS () → Visual::Object

Visualize the POINTS of a point configuration.

##### Options
 option list: Visual::Polygons::decorations option list: geometric_options
##### Returns
 Visual::Object
•

### Polytope

Not necessarily bounded convex polyhedron, i.e., the feasible region of a linear program. Nonetheless, the name "Polytope" is used for two reasons: Firstly, as far as the combinatorics is concerned we always deal with polytopes; see the description of VERTICES_IN_FACETS for details. Note that a pointed polyhedron is projectively equivalent to a polytope. The second reason is historical. We use homogeneous coordinates, which is why Polytope is derived from Cone. Scalar is the numeric data type used for the coordinates.

Examples:
• To construct a polytope as the convex hull of three points in the plane use> $p=new Polytope(POINTS=>[[1,0,0],[1,1,0],[1,0,1]]);> print$p->N_FACETS 3 Note that homogeneous coordinates are used throughout.
• Many standard constructions are available directly. For instance, to get a regular 120-cell (which is 4-dimensional) use:> $c=regular_120_cell();> print$c->VOLUME; 1575+705r5 This is the exact volume 1575+705*\sqrt{5}. polymake has limited support for polytopes with non-rational coordinates.
derived from: Cone

#### Specializations of Polytope

•
Polytope<Rational>

A rational polyhedron realized in Q^d

•
Polytope<Float>

A pointed polyhedron with float coordinates realized in Rd.

It mainly exists for visualization.

Convex hull and related algorithms use floating-point arithmetics. Due to numerical errors inherent to this kind of computations, the resulting combinatorial description can be arbitrarily far away from the truth, or even not correspond to any valid polytope. You have been warned.

None of the standard construction clients produces objects of this type. If you want to get one, create it with the explicit constructor or convert_to.

•
Polytope::Lattice

A polytope all of whose vertex coordinates are integral.

•
Symmetry

These specializations capture information of the object that is concerned with the action of permutation groups.

•

### Backward compatibility

These methods are provided for backward compatibility with older versions of polymake only. They should not be used in new code.

•
N_EDGES () → Int

The number of edges of the GRAPH

##### Returns
 Int
•

### Combinatorics

These methods capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice.

•
CD_INDEX () → String

Prettily print the cd-index given in CD_INDEX_COEFFICIENTS

##### Returns
 String
•
N_RIDGES () → Int

The number of ridges (faces of codimension 2) of the polytope equals the number of edges of the DUAL_GRAPH

##### Returns
 Int
•

### Geometry

These methods capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets.

•
AMBIENT_DIM () → Int

returns the dimension of the ambient space of the polytope

##### Returns
 Int
•
DIM () → Int

returns the dimension of the polytope

##### Returns
 Int
•
INNER_DESCRIPTION () → Array<Matrix<Scalar>>

Returns the inner description of a Polytope: [V,L] where V are the vertices and L is the lineality space

##### Returns
 Array>
•
labeled_vertices (label ...) → Set<Int>

Find the vertices by given labels.

##### Parameters
 String label ... vertex labels
##### Returns
 Set vertex indices
•
MINKOWSKI_CONE_COEFF (coeff) → Polytope<Rational>

Only defined for Polytope<Rational>

returns the Minkowski summand of a polytope P given by a coefficient vector to the rays of the MINKOWSKI_CONE.

##### Parameters
 Vector coeff coefficient vector to the rays of the Minkowski summand cone
##### Returns
 Polytope
•
MINKOWSKI_CONE_POINT (point) → Polytope<Rational>

Only defined for Polytope<Rational>

returns the Minkowski summand of a polytope P given by a point in the MINKOWSKI_CONE.

##### Parameters
 Vector point point in the Minkowski summand cone
##### Returns
 Polytope
•
OUTER_DESCRIPTION () → Array<Matrix<Scalar>>

Returns the outer description of a Polytope: [F,A] where F are the facets and A is the affine hull

##### Returns
 Array>
•

### Lattice points in cones

These methods capture information that depends on the lattice structure of the cone. polymake always works with the integer lattice.

•
EHRHART_POLYNOMIAL_COEFF () → Vector<Rational>

Only defined for Polytope::Lattice

Vector containing the coefficients of the EHRHART_POLYNOMIAL, ordered by increasing degree of the corresponding term.

##### Returns
 Vector
•
FACET_POINT_LATTICE_DISTANCES (v) → Vector<Integer>

Only defined for Polytope::Lattice

Vector containing the distances of a given point v from all facets

##### Parameters
 Vector v point in the ambient space of the polytope
##### Returns
 Vector
•
N_LATTICE_POINTS_IN_DILATION (n) → Int

Only defined for Polytope::Lattice

The number of LATTICE_POINTS in the n-th dilation of the polytope

##### Parameters
 Int n dilation factor
##### Returns
 Int
•
POLYTOPE_IN_STD_BASIS (P) → Polytope<Rational>

Only defined for Polytope::Lattice

returns a polytope in the integer lattice basis if a LATTICE_BASIS is given

##### Parameters
 Polytope P polytope
##### Returns
 Polytope Pnew polytope
•

### Lattice points in polytopes

These methods capture information that depends on the lattice structure of the polytope. polymake always works with the integer lattice.

•
LATTICE_POINTS () → Matrix<Integer>

Only defined for Polytope<Rational>

Returns the lattice points in bounded Polytopes.

##### Returns
 Matrix
•

### Symmetry

These methods capture information of the object that is concerned with the action of permutation groups.

•
VISUAL_NOP (colors_ref, trans_ref)

Only defined for Polytope::PointOrbit

Visualizes all (nested) orbit polytopes contained in orb in one picture.

##### Parameters
 ARRAY colors_ref the reference to an array of colors ARRAY trans_ref the reference to an array of transparency values
•
VISUAL_NOP_GRAPH (filename)

Only defined for Polytope::PointOrbit

Visualizes the NOP-graph of an orbit polytope. Requires 'graphviz' and a Postscript viewer. Produces a file which is to be processed with the program 'dot' from the graphviz package. If 'dot' is installed, the NOP-graph is visualized by the Postscript viewer.

##### Parameters
 String filename the filename for the 'dot' file
•

### Triangulation and volume

These methods collect information about triangulations of the object and properties usually computed from such, as the volume.

•
TRIANGULATION_INT_SIGNS () → Array<Int>

the orientation of the simplices of TRIANGULATION_INT in the given order of the POINTS

##### Returns
 Array - +1/-1 array specifying the sign of the determinant of each simplex
•

### Unbounded polyhedra

These methods collect geometric information of a polytope only relevant if it is unbounded, e. g. the far face or the complex of bounded faces.

•
BOUNDED_DUAL_GRAPH ()

Dual graph of the bounded subcomplex.

•
BOUNDED_FACETS () → Set<Int>

Indices of FACETS that are bounded.

##### Returns
 Set
•
BOUNDED_GRAPH ()

Graph of the bounded subcomplex.

•
BOUNDED_HASSE_DIAGRAM ()

HASSE_DIAGRAM constrained to affine vertices Nodes representing the maximal inclusion-independent faces are connected to the top-node regardless of their dimension

•
BOUNDED_VERTICES () → Set<Int>

Indices of VERTICES that are no rays.

##### Returns
 Set
•

### Visualization

These methods are for visualization.

•
GALE () → Visual::Gale

Generate the Gale diagram of a d-polyhedron with at most d+4 vertices.

##### Returns
 Visual::Gale
•
SCHLEGEL () → Visual::SchlegelDiagram

Create a Schlegel diagram and draw it.

##### Options
 Visual::Graph::decorations proj_facet decorations for the edges of the projection face option list: schlegel_init option list: Visual::Wire::decorations
##### Returns
 Visual::SchlegelDiagram
•
VISUAL () → Visual::Polytope

Visualize a polytope as a graph (if 1d), or as a solid object (if 2d or 3d), or as a Schlegel diagram (4d).

##### Options
 option list: Visual::Polygons::decorations option list: Visual::Wire::decorations option list: Visual::PointSet::decorations option list: geometric_options
##### Returns
 Visual::Polytope
•
VISUAL_BOUNDED_GRAPH () → Visual::PolytopeGraph

Visualize the BOUNDED_COMPLEX.GRAPH of a polyhedron.

##### Options
 Int seed random seed value for the string embedder option list: Visual::Graph::decorations
##### Returns
 Visual::PolytopeGraph
•
VISUAL_DUAL () → Visual::Object

Visualize the dual polytope as a solid 3-d object. The polytope must be BOUNDED and CENTERED.

##### Options
 option list: Visual::Polygons::decorations option list: geometric_options
##### Returns
 Visual::Object
•
VISUAL_DUAL_FACE_LATTICE () → Visual::PolytopeLattice

Visualize the dual face lattice of a polyhedron as a multi-layer graph.

##### Options
 Int seed random seed value for the node placement option list: Visual::Lattice::decorations
##### Returns
 Visual::PolytopeLattice
•
VISUAL_DUAL_GRAPH () → Visual::Graph

Visualize the DUAL_GRAPH of a polyhedron.

##### Options
 Int seed random seed value for the string embedder option list: Visual::Graph::decorations
##### Returns
 Visual::Graph
•
VISUAL_FACE_LATTICE () → Visual::PolytopeLattice

Visualize the HASSE_DIAGRAM of a polyhedron as a multi-layer graph.

##### Options
 Int seed random seed value for the node placement option list: Visual::Lattice::decorations
##### Returns
 Visual::PolytopeLattice
•
VISUAL_GRAPH () → Visual::PolytopeGraph

Visualize the GRAPH of a polyhedron.

##### Options
 Int seed random seed value for the string embedder option list: Visual::Graph::decorations
##### Returns
 Visual::PolytopeGraph
•
VISUAL_ORBIT_COLORED_GRAPH () → Visual::PolytopeGraph

Visualizes the graph of a symmetric cone: All nodes belonging to one orbit get the same color.

##### Options
 option list: Visual::Graph::decorations
##### Returns
 Visual::PolytopeGraph
•
write_stl (filename)

Take a 3-polytope and write ASCII STL output.

##### Parameters
 String filename

Example:
• > dodecahedron()->write_stl("/tmp/dodecahedron.stl");
•

### PropagatedPolytope

Polytope propagation means to define a polytope inductively by assigning vectors to arcs of a directed graph. At each node of such a graph a polytope arises as the joint convex hull of the polytopes at the translated sources of the inward pointing arcs.

For details see Joswig: Polytope Propagation on Graphs. Chapter 6 in Pachter/Sturmfels: Algebraic Statistics for Computational Biology, Cambridge 2005.

derived from: Polytope

•

### QuotientSpace

Category: Symmetry

A topological quotient space obtained from a Polytope by identifying faces. This object will sit inside the polytope.

•

### SchlegelDiagram

A Schlegel diagram of a polytope.

##### Type Parameters
 Scalar default Rational

#### User Methods of SchlegelDiagram

•
VISUAL () → Visual::SchlegelDiagram

Draw the Schlegel diagram.

##### Options
 Visual::Graph::decorations proj_facet decorations for the edges of the projection face option list: Visual::Graph::decorations
##### Returns
 Visual::SchlegelDiagram
•

### SymmetrizedCocircuitEquations

Category: Symmetry
UNDOCUMENTED

•

### VectorConfiguration

Category: Geometry

An object of type VectorConfiguration deals with properties of row vectors, assembled into an n x d matrix called VECTORS. The entries of these row vectors are interpreted as non-homogeneous coordinates. In particular, the coordinates of a VECTOR will *NOT* be normalized to have a leading 1.

##### Type Parameters
 Scalar default: Rational

•

### Visualization

These methods are for visualization.

•
VISUAL () → Visual::PointConfiguration

Visualize a vector configuration.

##### Options
 option list: Visual::Polygons::decorations option list: geometric_options_linear
##### Returns
 Visual::PointConfiguration
•

### Visual::Cone

Category: Visualization

Visualization of a Cone as a graph (if 1d), or as a solid object (if 2d or 3d)

derived from: Visual::Container
•

### Visual::Gale

Category: Visualization

A gale diagram prepared for drawing.

derived from: Visual::Object
•

### Visual::PointConfiguration

Category: Visualization

Visualization of the point configuration.

#### User Methods of Visual::PointConfiguration

•
POLYTOPAL_SUBDIVISION (index) → Visual::PointConfiguration

Visualize a POLYTOPAL_SUBDIVISION of a point configuration.

##### Parameters
 Int index Index of the subdivision to visualize
##### Options
 option list: Visual::Polygons::decorations option list: geometric_options
##### Returns
 Visual::PointConfiguration
•
TRIANGULATION (t) → Visual::PointConfiguration

Visualize the TRIANGULATION of a point configuration

##### Parameters
 Array> t facets of the triangulation
##### Options
 option list: Visual::Polygons::decorations
##### Returns
 Visual::PointConfiguration
•

### Visual::Polytope

Category: Visualization

Visualization of a polytope as a graph (if 1d), or as a solid object (if 2d or 3d), or as a Schlegel diagram (4d).

#### User Methods of Visual::Polytope

•
DIRECTED_GRAPH (lp) → Visual::Polytope

Illustrate the behavior of a linear objective function on the polytope. Superpose the drawing with the directed graph induced by the objective function.

##### Parameters
 LinearProgram lp a Linear Program object attached to the polytope
##### Returns
 Visual::Polytope

Example:
• Attaches a linear program to the 3-dimensional cube and visualizes the directed graph, giving the cube a blue facet color> $p = cube(3);>$p->LP = new LinearProgram(LINEAR_OBJECTIVE=>[0,0,0,1]);> $p->VISUAL(FacetColor=>"blue")->DIRECTED_GRAPH; • LATTICE () → Visual::Polytope Visualize the LATTICE_POINTS of a polytope ##### Options  option list: Visual::PointSet::decorations ##### Returns  Visual::Polytope Example: • Visualizes the lattice points of the threedimensional cube.> cube(3)->VISUAL->LATTICE; • LATTICE_COLORED () → Visual::Polytope Visualize the LATTICE_POINTS of a polytope in different colors (interior / boundary / vertices) ##### Options  option list: Visual::PointSet::decorations ##### Returns  Visual::Polytope Example: • Creates the threedimensional unit cube scaled by 1.5 and displays the colored version of its lattice points> cube(3,(3/2),0)->VISUAL->LATTICE_COLORED; • MIN_MAX_FACE (lp) → Visual::Polytope Illustrate the behavior of a linear objective function on the polytope. Draw the facets contained in MAXIMAL_FACE and MINIMAL_FACE in distinct colors. ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope. ##### Options  Color min minimal face decoration (default: yellow vertices and/or facets) Color max maximal face decoration (default: red vertices and/or facets) ##### Returns  Visual::Polytope Example: • Attaches a linear program to the threedimensional cube and displays the minimal/maximal faces in a different color, choosing purple instead of the default red for the maximal face>$p = cube(3);> $p->LP = new LinearProgram(LINEAR_OBJECTIVE=>[0,1,0,0]);>$p->VISUAL->MIN_MAX_FACE(max=>"purple");
•
STEINER () → Visual::Polytope

Add the STEINER_POINTS to the 3-d visualization. The facets become transparent.

##### Options
 option list: Visual::PointSet::decorations
##### Returns
 Visual::Polytope

Example:
• Displays the Steiner points of a random threedimensional sphere with 20 vertices. The labels of the vertices are turned off.> rand_sphere(3,20)->VISUAL(VertexLabels=>"hidden")->STEINER;
•
TRIANGULATION (t) → Visual::Polytope

Add the triangulation to the drawing.

You may specify any triangulation of the current polytope. Per default, the TRIANGULATION property is taken. (Currently there is only one possible alternative triangulation: TRIANGULATION_INT).

Hint: Use the method Method -> Effect -> Explode Group of Geometries of JavaView for better insight in the internal structure.

##### Parameters
 Array> t facets of the triangulation
##### Options
 option list: Visual::Polygons::decorations
##### Returns
 Visual::Polytope

Example:
• Displays a triangulation of the threedimensional cube. Facets are made transparent and vertices are hidden.> cube(3)->VISUAL->TRIANGULATION(FacetTransparency=>0.7,VertexStyle=>"hidden");
•
TRIANGULATION_BOUNDARY () → Visual::Polytope

Draw the edges of the TRIANGULATION_BOUNDARY. The facets are made transparent.

##### Options
 option list: Visual::Graph::decorations
##### Returns
 Visual::Polytope

Examples:
• Displays the boundary triangulation of the threedimensional cube.> cube(3)->VISUAL->TRIANGULATION_BOUNDARY;
• For a slightly different visualization of essentially the same:> cube(3)->TRIANGULATION->BOUNDARY->VISUAL;
•
VERTEX_COLORS (lp) → Visual::Polytope

Illustrate the behavior of a linear objective function on the polytope. Color the vertices according to the values of the objective function.

##### Parameters
 LinearProgram lp a LinearProgram object attached to the polytope
##### Options
 Color min minimal vertex color (default: yellow) Color max maximal vertex color (default: red)
##### Returns
 Visual::Polytope

Example:
• Attaches a linear program to the threedimensional cube and displays the minimal/maximal vertices in a different color, choosing purple instead of the default red for the maximal vertices> $p = cube(3);>$p->LP = new LinearProgram(LINEAR_OBJECTIVE=>[0,1,0,0]);> $p->VISUAL->VERTEX_COLORS(max=>"purple"); • ### Visual::PolytopeGraph Category: Visualization Visualization of the graph of a polyhedron. #### User Methods of Visual::PolytopeGraph • DIRECTED_GRAPH (lp) → Visual::PolytopeGraph Show the growth direction of a linear objective function via arrowed edges. ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope ##### Returns  Visual::PolytopeGraph • EDGE_COLORS () → Visual::PolytopeGraph Produce an edge coloring of a bounded graph from local data in the Hasse diagram. ##### Returns  Visual::PolytopeGraph • MIN_MAX_FACE (lp) → Visual::PolytopeGraph Illustrate the behavior of a linear objective function on the polytope. The vertices belonging to MINIMAL_FACE and MAXIMAL_FACE are drawn in distinct colors The spring embedder applies an additional force, which tries to arrange the nodes in the z-axis direction corresponding to the objective function values. ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope ##### Options  Color min minimal face decoration (default: yellow nodes) Color max maximal face decoration (default: red nodes) ##### Returns  Visual::PolytopeGraph • VERTEX_COLORS (lp) → Visual::PolytopeGraph Illustrate the behavior of a linear objective function on the polytope. Color the nodes according to the value the objective function takes on the vertices. The spring embedder applies an additional force, which tries to arrange the nodes in the z-axis direction corresponding to the objective function values. ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope. ##### Options  Color min minimal face color (default: yellow) Color max maximal face color (default: red) ##### Returns  Visual::PolytopeGraph • ### Visual::PolytopeLattice Category: Visualization Visualization of the HASSE_DIAGRAM of a polyhedron as a multi-layer graph.. #### User Methods of Visual::PolytopeLattice • MIN_MAX_FACE (lp) → Visual::PolytopeLattice Illustrate the behavior of a linear objective function on the polytope. Draw the filters of the MAXIMAL_FACE and MINIMAL_FACE in distinct colors. ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope ##### Options  Color min minimal face decoration (default: yellow border and ingoing edges) Color max maximal face decoration (default: red border and ingoing edges) ##### Returns  Visual::PolytopeLattice • ### Visual::SchlegelDiagram Category: Visualization Visualization of the Schlegel diagram of a polytope. #### User Methods of Visual::SchlegelDiagram • CONSTRUCTION () → Visual::SchlegelDiagram Visualize the construction of a 3D Schlegel diagram, that is, the Viewpoint, the 3-polytope and the projection onto one facet. ##### Options  option list: Visual::Polygons::decorations ##### Returns  Visual::SchlegelDiagram • DIRECTED_GRAPH (lp) → Visual::SchlegelDiagram Illustrate the behavior of a linear objective function on the polytope. Superpose the drawing with the directed graph induced by the objective function. ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope. ##### Returns  Visual::SchlegelDiagram • MIN_MAX_FACE (lp) → Visual::SchlegelDiagram Illustrate the behavior of a linear objective function on the polytope. The vertices belonging to MINIMAL_FACE and MAXIMAL_FACE are drawn in distinct colors ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope. ##### Options  Color min minimal face decoration (default: yellow vertices and/or facets) Color max maximal face decoration (default: red vertices and/or facets) ##### Returns  Visual::SchlegelDiagram • SOLID () → Visual::SchlegelDiagram Draw the facets of the Schlegel diagram as polytopes. ##### Options  option list: Visual::Polygons::decorations ##### Returns  Visual::SchlegelDiagram • STEINER () UNDOCUMENTED ##### Options  option list: Visual::PointSet::decorations • TRIANGULATION_BOUNDARY () → Visual::SchlegelDiagram Draw the edges of the TRIANGULATION_BOUNDARY ##### Options  option list: Visual::Graph::decorations ##### Returns  Visual::SchlegelDiagram • TRIANGULATION_BOUNDARY_SOLID () → Visual::SchlegelDiagram Draw the boundary simplices of the triangulation as solid tetrahedra. ##### Options  option list: Visual::Polygons::decorations ##### Returns  Visual::SchlegelDiagram • VERTEX_COLORS (lp) → Visual::SchlegelDiagram Illustrate the behavior of a linear objective function on the polytope. Color the vertices according to the values of the objective function. ##### Parameters  LinearProgram lp a LinearProgram object attached to the polytope. ##### Options  Color min minimal vertex color (default: yellow) Color max maximal vertex color (default: red) ##### Returns  Visual::SchlegelDiagram • ### VoronoiPolyhedron For a finite set of SITES S the Voronoi region of each site is the set of points closest (with respect to Euclidean distance) to the given site. All Voronoi regions (and their faces) form a polyhedral complex which is a vertical projection of the boundary complex of an unbounded polyhedron P(S). This way VoronoiPolyhedron becomes a derived class from Polytope<Scalar>. derived from: Polytope #### Properties of VoronoiPolyhedron #### User Methods of VoronoiPolyhedron • ### Visualization These methods are for visualization. • VISUAL_CRUST () → Visual::Container Draw a Voronoi diagram, its |dual graph and the crust. Use the interactive features of the viewer to select. ##### Options  option list: Visual::Graph::decorations ##### Returns  Visual::Container • VISUAL_NN_CRUST () → Visual::Container Draw a Voronoi diagram, its dual graph and the nearest neighbor crust. Use the interactive features of the viewer to select. ##### Options  option list: Visual::Graph::decorations ##### Returns  Visual::Container • VISUAL_VORONOI () → Visual::Container Visualize the Voronoi diagram together with its sites. ##### Options  option list: Visual::Polygons::decorations ##### Returns  Visual::Container ## User Functions • ### Combinatorics These functions capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice. • circuits2matrix (co) → SparseMatrix<Rational> Convert CIRCUITS or COCIRCUITS to a 0/+1/-1 matrix, with one row for each circuit/cocircuit, and as many columns as there are VECTORs/POINTS. ##### Parameters  Set,Set>> co /circuits a set of circuits or cocircuits ##### Returns  SparseMatrix • cocircuit_equations (C, interior_ridge_simplices, interior_simplices) → SparseMatrix<Int> A matrix whose rows contain the cocircuit equations of a cone C with respect to a list of interior ridge simplices symmetries of the cone are NOT taken into account ##### Parameters  Cone C Array interior_ridge_simplices interior codimension 1 simplices Array interior_simplices interior simplices of maximal dimension ##### Options  String filename where to write the output (default empty) Bool reduce_rows whether to perform row reduction (default 1) Int log_frequency how often to print log messages ##### Returns  SparseMatrix • cocircuit_equation_of_ridge (C, rho) → HashMap<Set,Rational> The cocircuit equations of a cone C corresponding to some interior ridge rho with respect to a list of interior simplices symmetries of the cone are NOT taken into account ##### Parameters  Cone C Set rho the interior ridge ##### Returns  HashMap • codegree <Scalar> (P) Calculate the codegree of a cone or polytope P. This is the maximal positive integer c such that every subset of size < c lies in a common facet of conv P. Moreover, the relation degree(P) + codegree(P) = dim(P) + 1 holds. ##### Type Parameters  Scalar the underlying number type, ##### Parameters  Cone P Example: • To find the codegree of the 3-cube, type> print codegree(cube(3)); 1 • codegree <Scalar> (P) Calculate the codegree of a point configuration P. This is the maximal positive integer c such that every subset of size < c lies in a common facet of conv P. Moreover, the relation degree(P) + codegree(P) = dim(P) + 1 holds. ##### Type Parameters  Scalar the underlying number type, ##### Parameters  PointConfiguration P • contraction (C, v) Contract a vector configuration C along a specified vector v. ##### Parameters  VectorConfiguration C Int v index of the vector to contract • degree <Scalar> (P) Calculate the degree of a cone, polytope or point configuration P. This is the maximal dimension of an interior face of P, where an interior face is a subset of the points of P whose convex hull does not lie on the boundary of P. Moreover, the relation degree(P) + codegree(P) = dim(P) + 1 holds. ##### Type Parameters  Scalar the underlying number type, ##### Parameters  PointConfiguration P (or Cone or Polytope) Example: • To find the degree of the 3-cube, type> print degree(cube(3)); 3 • deletion (C, v) Delete a specified vector v from a vector configuration C. ##### Parameters  VectorConfiguration C Int v index of the vector to delete • ### Comparing Functions based on graph isomorphisms. • congruent (P1, P2) → Scalar Check whether two given polytopes P1 and P2 are congruent, i.e. whether there is an affine isomorphism between them that is induced by a (possibly scaled) orthogonal matrix. Returns the scale factor, or 0 if the polytopes are not congruent. We are using the reduction of the congruence problem (for arbitrary point sets) to the graph isomorphism problem due to: Akutsu, T.: On determining the congruence of point sets in d dimensions. Comput. Geom. Theory Appl. 9, 247--256 (1998), no. 4 ##### Parameters  Polytope P1 the first polytope Polytope P2 the second polytope ##### Returns  Scalar the square of the scale factor or 0 if the polytopes are not congruent Example: • Let's first consider an isosceles triangle and its image of the reflection in the origin:>$t = simplex(2);> $tr = simplex(2,-1); Those two are congruent:> print congruent($t,$tr); 1 If we scale one of them, we get a factor:> print congruent(scale($t,2),$tr); 4 But if we instead take a triangle that is not isosceles, we get a negative result.>$tn = new Polytope(VERTICES => [[1,0,0],[1,2,0],[1,0,1]]);> print congruent($t,$tn); 0
•
equal_polyhedra (P1, P2) → Bool

UNDOCUMENTED
##### Parameters
 Polytope P1 the first polytope Polytope P2 the second polytope
##### Options
 Bool verbose Prints information on the difference between P1 and P2 if they are not equal.
##### Returns
 Bool true if the two polyhedra are equal, false otherwise

Example:
• > $p = new Polytope(VERTICES => [[1,-1,-1],[1,1,-1],[1,-1,1],[1,1,1]]);> print equal_polyhedra($p,cube(2)); true To see why two polytopes are unequal, try this:> print equal_polyhedra($p,cube(3),verbose => 1); Cones/Polytopes do no live in the same ambient space. false> print equal_polyhedra($p,simplex(2),verbose => 1); Inequality 1 -1 -1 not satisfied by point 1 1 1. false
•
find_facet_vertex_permutations (P1, P2) → Pair<Array<Int>, Array<Int>>

Find the permutations of facets and vertices which maps the cone or polyhedron P1 to P2. The facet permutation is the first component, the vertex permutation is the second component of the return value.

Only the combinatorial isomorphism is considered. If the polytopes are not isomorphic, an exception is thrown.

##### Parameters
 Cone P1 the first cone/polytope Cone P2 the second cone/polytope
##### Returns
 Pair, Array> the facet and the vertex permutations

Example:
• To print the vertex permutation that maps the 3-simplex to its mirror image, type this:> $p = find_facet_vertex_permutations(simplex(3),scale(simplex(3),-1));> print$p->first; 1 2 3 0
•
included_polyhedra (P1, P2) → Bool

UNDOCUMENTED
##### Parameters
 Polytope P1 the first polytope Polytope P2 the second polytope
##### Options
 Bool verbose Prints information on the difference between P1 and P2 if none is included in the other.
##### Returns
 Bool 'true' if P1 is included in P2, 'false' otherwise

Example:
• > print included_polyhedra(simplex(3),cube(3)); true To see in what way the two polytopes differ, try this:> print included_polyhedra(cube(2),cube(3),verbose=>1); Cones/Polytopes do no live in the same ambient space. false
•
isomorphic (P1, P2) → Bool

Check whether the face lattices of two cones or polytopes are isomorphic. The problem is reduced to graph isomorphism of the vertex-facet incidence graphs.

##### Parameters
 Cone P1 the first cone/polytope Cone P2 the second cone/polytope
##### Returns
 Bool 'true' if the face lattices are isomorphic, 'false' otherwise

Example:
• The following compares the standard 2-cube with a polygon generated as the convex hull of five points. The return value is true since both polygons are quadrangles.> $p = new Polytope(POINTS=>[[1,-1,-1],[1,1,-1],[1,-1,1],[1,1,1],[1,0,0]]);> print isomorphic(cube(2),$p); true
•
lattice_isomorphic_smooth_polytopes (P1, P2) → Bool

Tests whether two smooth lattice polytopes are lattice equivalent by comparing lattice distances between vertices and facets.

##### Parameters
 Polytope P1 the first lattice polytope Polytope P2 the second lattice polytope
##### Returns
 Bool 'true' if the polytopes are lattice equivalent, 'false' otherwise

Example:
• > $t = new Vector(2,2);> print lattice_isomorphic_smooth_polytopes(cube(2),translate(cube(2),$t)); true
•

### Consistency check

These functions are for checking the consistency of some properties.

•
check_inc (points, hyperplanes, sign, verbose) → Bool

Check coordinate data. For each pair of vectors from two given matrices their inner product must satisfy the given relation.

##### Parameters
 Matrix points Matrix hyperplanes String sign composed of one or two characters from [-+0], representing the allowed domain of the vector inner products. Bool verbose print all products violating the required relation
##### Returns
 Bool 'true' if all relations are satisfied, 'false' otherwise

Example:
• Let's check which vertices of the square lie in its zeroth facet:> $H = cube(2)->FACETS->minor([0],All);> print check_inc(cube(2)->VERTICES,$H,'0',1); <1,0> ( 1 1 -1 ) * [ 1 1 0 ] == 2 <3,0> ( 1 1 1 ) * [ 1 1 0 ] == 2 #points==4, #hyperplanes==1, -:0, 0:2, +:2, total:4 false Thus, the first and third vertex don't lie on the hyperplane defined by the facet but on the positive side of it, and the remaining two lie on the hyperplane.
•
check_poly (VIF) → Polytope

Try to check whether a given vertex-facet incidence matrix VIF defines a polytope. Note that a successful certification by check_poly is not sufficient to determine whether an incidence matrix actually defines a polytope. Think of it as a plausibility check.

##### Parameters
 IncidenceMatrix VIF
##### Options
 Bool dual transposes the incidence matrix Bool verbose prints information about the check.
##### Returns
 Polytope the resulting polytope under the assumption that VIF actually defines a polytope
•
validate_moebius_strip (P) → Bool

Validates the output of the client edge_orientable, in particular it checks whether the MOEBIUS_STRIP_EDGES form a Moebius strip with parallel opposite edges. Prints a message to stdout.

##### Parameters
 Polytope P the given polytope
##### Returns
 Bool 'true' if the Moebius strip edges form such a Moebius strip, 'false' otherwise
•

Checks whether the MOEBIUS_STRIP_QUADS form a Moebius strip with parallel opposite edges. Prints a message to stdout and returns the MOEBIUS_STRIP_EDGES if the answer is affirmative.

##### Parameters
 Polytope P the given polytope
##### Options
 Bool verbose print details
##### Returns
 Matrix the Moebius strip edges
•

### Coordinate conversions

The following functions allow for the conversion of the coordinate type of cones and polytopes.

•
affine_float_coords (P) → Matrix<Float>

Dehomogenize the vertex coordinates and convert them to Float

##### Parameters
 Polytope P source object
##### Returns
 Matrix the dehomogenized vertices converted to Float

Example:
• > print cube(2,1/2)->VERTICES; 1 -1/2 -1/2 1 1/2 -1/2 1 -1/2 1/2 1 1/2 1/2> print affine_float_coords(cube(2,1/2)); -0.5 -0.5 0.5 -0.5 -0.5 0.5 0.5 0.5
•
convert_to <Coord> (c) → Cone<Coord>

Creates a new Cone object with different coordinate type target coordinate type Coord must be specified in angle brackets e.g. $new_cone = convert_to<Coord>($cone)

##### Type Parameters
 Coord target coordinate type
##### Parameters
 Cone c the input cone
##### Returns
 Cone a new cone object or C itself it has the requested type
•
convert_to <Coord> (P) → Polytope<Coord>

provide a Polytope object with desired coordinate type

##### Type Parameters
 Coord target coordinate type
##### Parameters
 Polytope P source object
##### Returns
 Polytope P if it already has the requested type, a new object otherwise

Example:
• > print cube(2)->type->full_name; Polytope<Rational>> $pf = convert_to<Float>(cube(2));> print$pf->type->full_name; Polytope<Float>
•

### Finite metric spaces

Tight spans and their connections to polyhedral geometry

•
tight_span_envelope (sd) → Polytope

Computes the envelope for a given subdivision of points.

##### Parameters
 fan::SubdivisionOfPoints sd
##### Options
 Bool extended If True, the envelope of the extended tight span is computed.
##### Returns
 Polytope
•

### Geometry

These functions capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets.

•
all_steiner_points (P) → Matrix

Compute the Steiner points of all faces of a polyhedron P using a randomized approximation of the angles. P must be BOUNDED.

##### Parameters
 Polytope P
##### Options
 Float eps controls the accuracy of the angles computed Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Matrix
•
center_distance (p) → Float

Compute the mean or median distance of the VERTICES to the VERTEX_BARYCENTER.

##### Parameters
 Polytope p
##### Options
 Bool median use median instead of arithmetic mean
##### Returns
 Float
•
circuit_completions (L, R) → Array<Set>

Given two matrices L (n x d) and R (m x d) such that (L/R) has rank r, select all (r+1-n)-subsets C of rows of R such that (L,S) or (S,L) is a circuit. Optionally, if d > r, a basis H for the orthogonal span of the affine hull of (L/R) may be given.

##### Parameters
 Matrix L Matrix R
##### Options
 Matrix H
##### Returns
 Array

Example:
• Divide the vertex set of the 3-cube into a body diagonal L and six remaining vertices R. To find the subsets of R that complete L to a circuit, type> $c = cube(3);>$L = $c->VERTICES->minor([0,7],All);>$R = $c->VERTICES->minor([1,2,3,4,5,6],All);> print circuit_completions($L,$R); {0 1 3} {2 4 5} • containing_normal_cone (P, q) → Set Return the vertices of the face of P whose normal cone contains a point q. ##### Parameters  Cone P Vector q ##### Returns  Set Example: • To find the face whose normal cone contains a given point, type>$p = new Polytope(VERTICES=>[[1,-1,0],[1,0,-1],[1,0,1],[1,100,0]]);> print containing_normal_cone($p, new Vector([1,1,2])); {2 3} • containing_outer_cone (P, q) → Set Return the vertices of the face of P whose outer cone contains a point q. ##### Parameters  Polytope P Vector q ##### Returns  Set Example: • To find the face whose outer cone contains a given point, type> print containing_outer_cone(cube(3), new Vector([1,2,2,2])); {7} • dihedral_angle (H1, H2) → Float Compute the dihedral angle between two (oriented) affine or linear hyperplanes. ##### Parameters  Vector H1 : first hyperplane Vector H2 : second hyperplane ##### Options  Bool deg output in degrees rather than radians, default is false Bool cone hyperplanes seen as linear hyperplanes, default is false ##### Returns  Float Example: • >$H1 = new Vector(1,5,5);> $H2 = new Vector(1,-5,5);> print dihedral_angle($H1,$H2,deg=>1); 90 • induced_lattice_basis (p) → Matrix<Integer> Returns a basis of the affine lattice spanned by the vertices ##### Parameters  Polytope p the input polytope ##### Returns  Matrix - the lattice basis. Example: • The vertices of the 2-simplex span all of Z^2...> print induced_lattice_basis(simplex(2)); 0 1 0 0 0 1 ...but if we scale it with 2, we get only every second lattice point.> print induced_lattice_basis(scale(simplex(2),2)); 0 2 0 0 0 2 • integer_points_bbox (P) → Matrix<Integer> Enumerate all integer points in the given polytope by searching a bounding box. ##### Parameters  Polytope P ##### Returns  Matrix Example: • >$p = new Polytope(VERTICES=>[[1,13/10,1/2],[1,1/5,6/5],[1,1/10,-3/2],[1,-7/5,1/5]]);> print integer_points_bbox($p); 1 0 -1 1 -1 0 1 0 0 1 1 0 1 0 1 • minimal_vertex_angle (P) → Float Computes the minimal angle between two vertices of the input polytope P. ##### Parameters  Polytope P ##### Returns  Float Example: • > print minimal_vertex_angle(simplex(3)); 3.14159265358979 • normaliz_compute (C) → List Compute degree one elements, Hilbert basis or Hilbert series of a cone C with libnormaliz Hilbert series and Hilbert h-vector depend on the given grading and will not work unless C is HOMOGENEOUS or a MONOID_GRADING is set Contained in extension libnormaliz. ##### Parameters  Cone C ##### Options  Bool from_facets supply facets instead of rays to normaliz Bool degree_one_generators compute the generators of degree one, i.e. lattice points of the polytope Bool hilbert_basis compute Hilbert basis of the cone C Bool h_star_vector compute Hilbert h-vector of the cone C Bool hilbert_series compute Hilbert series of the monoid Bool ehrhart_quasi_polynomial compute Ehrhart quasi polynomial of a polytope Bool facets compute support hyperplanes (=FACETS,LINEAR_SPAN) Bool rays compute extreme rays (=RAYS) Bool dual_algorithm use the dual algorithm by Pottier Bool skip_long do not try to use long coordinates first Bool verbose libnormaliz debug output ##### Returns  List (Matrix degree one generators, Matrix Hilbert basis, Vector Hilbert h-vector, RationalFunction Hilbert series, Matrix facets, Matrix linear_span, Matrix rays) (only requested items) • occluding_cone (P, F) → Cone For a face F of a cone or polytope P, return the polyhedral cone C such that taking the convex hull of P and any point in C destroys the face F ##### Parameters  Cone P Set F ##### Returns  Cone Example: • To find the occluding cone of an edge of the 3-cube, type>$c=occluding_cone(cube(3), [0,1]);> print $c->FACETS; -1 0 -1 0 -1 0 0 -1 • print_face_lattice (VIF, dual) Write the face lattice of a vertex-facet incidence matrix VIF to stdout. If dual is set true the face lattice of the dual is printed. ##### Parameters  IncidenceMatrix VIF Bool dual Example: • To get a nice representation of the squares face lattice, do this:> print_face_lattice(cube(2)->VERTICES_IN_FACETS); FACE_LATTICE [ -1 : 4 ] {{0 1} {0 2} {1 3} {2 3}} [ -2 : 4 ] {{0} {1} {2} {3}} • separable (q, P) → Bool Checks whether there exists a hyperplane separating a given point q from a polytope/cone P by solving a suitable LP. If true, q is a vertex of the polytope defined by q and the vertices of P. To get the separating hyperplane, use separating_hyperplane. Works without knowing the facets of P! ##### Parameters  Vector q the vertex (candidate) which is to be separated from P Cone P the polytope/cone from which q is to be separated ##### Options  Bool strong Test for strong separability. default: true ##### Returns  Bool 'true' if q is separable from p Example: • >$q = cube(2)->VERTICES->row(0);> print separable(cube(2), $q, strong=>0); true • steiner_point (P) → Vector Compute the Steiner point of a polyhedron P using a randomized approximation of the angles. ##### Parameters  Polytope P ##### Options  Float eps controls the accuracy of the angles computed Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome. ##### Returns  Vector • violations (P, q) → Set Check which relations, if any, are violated by a point. ##### Parameters  Cone P Vector q ##### Options  String section Which section of P to test against q Int violating_criterion has the options: +1 (positive values violate; this is the default), 0 (*non*zero values violate), -1 (negative values violate) ##### Returns  Set Example: • This calculates and prints the violated equations defining a square with the origin as its center and side length 2 with respect to a certain point:>$p = cube(2);> $v = new Vector([1,2,2]);>$S = violations($p,$v);> print $S; {1 3} • visible_facet_indices (P, q) → Set Return the indices of all facets that are visible from a point q. ##### Parameters  Cone P Vector q ##### Returns  Set Example: • This prints the facets of a square with the origin as its center and side length 2 that are visible from a certain point:>$p = cube(2);> $v = new Vector([1,2,2]);> map { print$p->VERTICES_IN_FACETS->[$_], "\n" } @{visible_facet_indices($p,$v)}; {1 3} {2 3} • visible_face_indices (P, q) → Set Return the indices (in the HASSE_DIAGRAM) of all faces that are visible from a point q. ##### Parameters  Cone P Vector q ##### Returns  Set Example: • This prints the faces of a square with the origin as its center and side length 2 that are visible from a certain point:>$p = cube(2);> $v = new Vector([1,2,2]);> map { print$p->HASSE_DIAGRAM->FACES->[$_], "\n" } @{visible_face_indices($p,$v)}; {} {1} {2} {3} {1 3} {2 3} • zonotope_tiling_lattice (P) → AffineLattice Calculates a generating set for a tiling lattice for P, i.e., a lattice L such that P + L tiles the affine span of P. ##### Parameters  Polytope P the zonotope ##### Options  Bool lattice_origin_is_vertex true if the origin of the tiling lattice should be a vertex of P; default false, ie, the origin will be the barycenter of P ##### Returns  AffineLattice Example: • This determines a tiling lattice for a parallelogram with the origin as its vertex barycenter and prints it base vectors:>$M = new Matrix([[1,1,0],[1,1,1]]);> $p = zonotope($M);> $A = zonotope_tiling_lattice($p);> print $A->BASIS; 0 -1 -1 0 0 1 • ### Optimization These functions provide tools from linear, integer and dicrete optimization. In particular, linear programs are defined here. • ball_lifting_lp (c, facet_index, conv_eps) → Polytope Computes the inequalities and the linear objective for an LP to lift a simplicial d-ball embedded starshaped in Rd. Contained in extension local. ##### Parameters  topaz::GeometricSimplicialComplex c Int facet_index index of the facet to be lifted Rational conv_eps some epsilon > 0 ##### Returns  Polytope • core_point_algo (p, optLPvalue) → List Algorithm to solve highly symmetric integer linear programs (ILP). It is required that the group of the ILP induces the alternating or symmetric group on the set of coordinate directions. The linear objective function is the vector (0,1,1,..,1). ##### Parameters  Polytope p Rational optLPvalue optimal value of LP approximation ##### Options  Bool verbose ##### Returns  List (Vector optimal solution, Rational optimal value) may be empty • core_point_algo_Rote (p, optLPvalue) → List Version of core_point_algo with improved running time (according to a suggestion by G. Rote). The core_point_algo is an algorithm to solve highly symmetric integer linear programs (ILP). It is required that the group of the ILP induces the alternating or symmetric group on the set of coordinate directions. The linear objective function is the vector (0,1,1,..,1). ##### Parameters  Polytope p Rational optLPvalue optimal value of LP approximation ##### Options  Bool verbose ##### Returns  List (Vector optimal solution, Rational optimal value) may be empty • find_transitive_lp_sol (Inequalities) → List Algorithm to solve symmetric linear programs (LP) of the form max ctx , c=(0,1,1,..,1) subject to the inequality system given by Inequalities. It is required that the symmetry group of the LP acts transitively on the coordinate directions. ##### Parameters  Matrix Inequalities the inequalities describing the feasible region ##### Returns  List (Vector optimal solution, Rational optimal value, Bool feasible, Bool max_bounded) Example: • Consider the LP described by the facets of the 3-cube:> @sol=find_transitive_lp_sol(cube(3)->FACETS);> print$_, "\n" for @sol; 1 1 1 1 3 true true The optimal solution is [1,1,1,1], its value under c is 3, and the LP is feasible and bounded in direction of c.
•
inner_point (points) → Vector

Compute a true inner point of a convex hull of the given set of points.

##### Parameters
 Matrix points
##### Returns
 Vector

Example:
• To print an inner point of the square, do this:> print inner_point(cube(2)->VERTICES); 1 -1/3 -1/3
•
lp2poly <Scalar> (file, testvec, prefix) → Polytope<Scalar>

Read a linear programming problem given in LP-Format (as used by cplex & Co.) and convert it to a Polytope<Scalar> object.

WARNING The property FEASIBLE is NOT computed upon creation. This is done to avoid possibly long computation times before the object becomes available to the caller. This is NOT in keeping with standard practice in polymake, but after, all, these are linear programs and not polytopes.

##### Type Parameters
 Scalar coordinate type of the resulting polytope; default is Rational.
##### Parameters
 String file filename of a linear programming problem in LP-Format Vector testvec If present, after reading in each line of the LP it is checked whether testvec fulfills it String prefix If testvec is present, all variables in the LP file are assumed to have the form $prefix$i
##### Options
 Int nocheck Do not automatically compute FEASIBLE for the polytope (recommended for very large LPs)
##### Returns
 Polytope
•
poly2lp (P, LP, maximize, file)

Convert a polymake description of a polyhedron to LP format (as used by CPLEX and other linear problem solvers) and write it to standard output or to a file. If LP comes with an attachment 'INTEGER_VARIABLES' (of type Array<Bool>), the output will contain an additional section 'GENERAL', allowing for IP computations in CPLEX. If the polytope is not FEASIBLE, the function will throw a runtime error.

##### Parameters
 Polytope P LinearProgram LP default value: P->LP Bool maximize produces a maximization problem; default value: 0 (minimize) String file default value: standard output
•
poly2porta (p, file)

take a rational polytope and write a porta input file (.ieq or .poi)

##### Parameters
 Polytope p String file filename for the porta file (.ieq or .poi) or an open IO handle
##### Options
 Bool primal true if points should be written, false if inequalities should be written (default is true)
•
porta2poly (file) → Polytope<Rational>

Read an .ieq or .poi file (porta input) or .poi.ieq or .ieq.poi (porta output) and convert it to a Polytope<Rational> object

##### Parameters
 String file filename of a porta file (.ieq or .poi)
##### Returns
 Polytope
•
print_constraints (C)

Write the FACETS / INEQUALITIES and the LINEAR_SPAN / EQUATIONS (if present) of a polytope P or cone C in a readable way. COORDINATE_LABELS are adopted if present.

##### Parameters
 Cone C the given polytope or cone
##### Options
 Array ineq_labels changes the labels of the inequality rows Array eq_labels changes the labels of the equation rows

Example:
• The following prints the facet inequalities of the square, changing the labels.> print_constraints(cube(2),ineq_labels=>['zero','one','two','three']); Facets: zero: x1 >= -1 one: -x1 >= -1 two: x2 >= -1 three: -x2 >= -1
•
random_edge_epl (G) → Vector<Rational>

Computes a vector containing the expected path length to the maximum for each vertex of a directed graph G. The random edge pivot rule is applied.

##### Parameters
 Graph G a directed graph
##### Returns
 Vector
•
rand_aof (P, start) → Vector<Rational>

Produce a random abstract objective function on a given simple polytope P. It is assumed that the boundary complex of the dual polytope is extendibly shellable. If, during the computation, it turns out that a certain partial shelling cannot be extended, then this is given instead of an abstract objective function. It is possible (but not required) to specify the index of the starting vertex start.

##### Parameters
 Polytope P a simple polytope Int start the index of the starting vertex; default value: random
##### Options
 Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Vector
•
separating_hyperplane (q, points) → Vector

Computes (the normal vector of) a hyperplane which separates a given point q from points via solving a suitable LP. The scalar product of the normal vector of the separating hyperplane and a point in points is greater or equal than 0 (same behavior as for facets!). If q is not a vertex of P=conv(points,q), the function throws an infeasible exception. Works without knowing the facets of P!

##### Parameters
 Vector q the vertex (candidate) which is to be separated from points Matrix points the points from which q is to be separated
##### Returns
 Vector sep_hyp

Example:
• The following stores the result in the List @r and then prints the answer and a description of the hyperplane separating the zeroth vertex of the square from the others.> $q = cube(2)->VERTICES->row(0);>$points = cube(2)->VERTICES->minor(sequence(1,3),All);> print separating_hyperplane($q,$points); 0 1/2 1/2
•
separating_hyperplane (p1, p2) → Vector

Computes (the normal vector of) a hyperplane which separates two given polytopes p1 and p2 if possible. Works by solving a linear program, not by facet enumeration.

##### Parameters
 Polytope p1 the first polytope, will be on the positive side of the separating hyperplane Polytope p2 the second polytope
##### Options
 Bool strong If this is set to true, the resulting hyperplane will be strongly separating, i.e. it wont touch either of the polytopes. If such a plane does not exist, an exception will be thrown. default: true
##### Returns
 Vector a hyperplane separating p1 from p2
•
totally_dual_integral (inequalities) → Bool

Checks weather a given system of inequalities is totally dual integral or not. The inequalities should describe a full dimensional polyhedron

##### Parameters
 Matrix inequalities
##### Returns
 Bool

Example:
• > print totally_dual_integral(cube(2)->FACETS); true
•
vertex_colors (P, LP) → Array<RGB>

Calculate RGB-color-values for each vertex depending on a linear or abstract objective function. Maximal and minimal affine vertices are colored as specified. Far vertices (= rays) orthogonal to the linear function normal vector are white. The colors for other affine vertices are linearly interpolated in the HSV color model.

If the objective function is linear and the corresponding LP problem is unbounded, then the affine vertices that would become optimal after the removal of the rays are painted pale.

##### Parameters
 Polytope P LinearProgram LP
##### Options
 RGB min the minimal RGB value RGB max the maximal RGB value
##### Returns
 Array

Example:
• This calculates a vertex coloring with respect to a linear program. For a better visualization, we also set the vertex thickness to 2.> $p = cube(3);>$p->LP(LINEAR_OBJECTIVE=>[0,1,2,3]);> $v = vertex_colors($p,$p->LP);>$p->VISUAL(VertexColor=>$v,VertexThickness=>2); • write_foldable_max_signature_ilp (P, outfile_name) construct a linear program whose optimal value is an upper bound for the algebraic signature of a triangulation of P. This is the absolute value of the difference of normalized volumes of black minus white simplices (counting only those with odd normalized volume) in a triangulation of P whose dual graph is bipartite. If P has a GROUP, it will be used to construct the linear program. ##### Parameters  Polytope P String outfile_name Examples: • For the 0/1 2-cube without a GROUP, the foldable max signature lp is computed as follows:> write_foldable_max_signature_ilp(cube(2,0)); MINIMIZE obj: +1 x1 -1 x2 +1 x3 -1 x4 +1 x5 -1 x6 +1 x7 -1 x8 Subject To ie0: +1 x1 >= 0 ie1: +1 x2 >= 0 ie2: +1 x3 >= 0 ie3: +1 x4 >= 0 ie4: +1 x5 >= 0 ie5: +1 x6 >= 0 ie6: +1 x7 >= 0 ie7: +1 x8 >= 0 ie8: -1 x1 -1 x2 >= -1 ie9: -1 x3 -1 x4 >= -1 ie10: -1 x5 -1 x6 >= -1 ie11: -1 x7 -1 x8 >= -1 eq0: -1 x4 +1 x5 = 0 eq1: +1 x3 -1 x6 = 0 eq2: -1 x2 +1 x7 = 0 eq3: +1 x1 -1 x8 = 0 eq4: +1 x1 +1 x2 +1 x3 +1 x4 +1 x5 +1 x6 +1 x7 +1 x8 = 2 BOUNDS x1 free x2 free x3 free x4 free x5 free x6 free x7 free x8 free GENERAL x1 x2 x3 x4 x5 x6 x7 x8 END There are eight variables, one for each possible black or white maximal interior simplex. The optimal value of this LP is zero, because any triangulation has exactly one black and one white simplex of odd normalized volume. Notice that the objective function becomes empty for cube(2), because in the +1/-1 cube, each simplex has even volume. • For the 0/1 3-cube, we use a GROUP property:> write_foldable_max_signature_ilp(cube(3,0,group=>1)); MINIMIZE obj: +1 x1 -1 x2 +1 x3 -1 x4 +1 x5 -1 x6 Subject To ie0: +1 x1 >= 0 ie1: +1 x2 >= 0 ie2: +1 x3 >= 0 ie3: +1 x4 >= 0 ie4: +1 x5 >= 0 ie5: +1 x6 >= 0 ie6: +1 x7 >= 0 ie7: +1 x8 >= 0 ie8: -1 x1 -1 x2 >= -8 ie9: -1 x3 -1 x4 >= -24 ie10: -1 x5 -1 x6 >= -24 ie11: -1 x7 -1 x8 >= -2 eq0: +2 x3 -2 x4 +2 x5 -2 x6 = 0 eq1: -2 x3 +2 x4 -2 x5 +2 x6 = 0 eq2: -6 x2 +6 x5 +24 x7 = 0 eq3: -6 x1 +6 x6 +24 x8 = 0 eq4: +1 x1 +1 x2 +1 x3 +1 x4 +1 x5 +1 x6 +2 x7 +2 x8 = 6 BOUNDS x1 free x2 free x3 free x4 free x5 free x6 free x7 free x8 free GENERAL x1 x2 x3 x4 x5 x6 x7 x8 END There are again 8 variables, but now they correspond to the black and white representatives of the four symmetry classes of maximal interior simplices. The optimal value of this linear program is 4, because the most imbalanced triangulation is the one with 5 simplices, in which the volume of the big interior simplex is even and doesn't get counted in the objective function. • write_simplexity_ilp (P) construct a linear program whose optimal value is a lower bound for the minimal number of simplices in a triangulation of P. ##### Parameters  Polytope P ##### Options  String outfile_name . If the string is '-' (as is the default), the linear program is printed to STDOUT. Example: • To print the linear program for the 2-dimensional cube, write> write_simplexity_ilp(cube(2)); MINIMIZE obj: +1 x1 +1 x2 +1 x3 +1 x4 Subject To ie0: +1 x1 >= 0 ie1: +1 x2 >= 0 ie2: +1 x3 >= 0 ie3: +1 x4 >= 0 eq0: +4 x1 +4 x2 +4 x3 +4 x4 = 8 eq1: -1 x2 +1 x3 = 0 eq2: -1 x1 +1 x4 = 0 BOUNDS x1 free x2 free x3 free x4 free GENERAL x1 x2 x3 x4 END • write_simplexity_ilp_with_angles (P, outfile_name) construct a linear program whose optimal value is a lower bound for the minimal number of simplices in a triangulation of P, and that takes into account the angle constraint around codimension 2 faces. The first set of variables correspond to possible maximal internal simplices, the second set to the simplices of codimension 2. See the source file polytope/src/symmetrized_codim_2_angle_sums.cc for details. ##### Parameters  Polytope P String outfile_name Example: • To print the linear program for the 2-dimensional cube, write> write_simplexity_ilp_with_angles(cube(2)); MINIMIZE obj: +1 x1 +1 x2 +1 x3 +1 x4 Subject To ie0: +1 x1 >= 0 ie1: +1 x2 >= 0 ie2: +1 x3 >= 0 ie3: +1 x4 >= 0 ie4: +1 x5 >= 0 ie5: +1 x6 >= 0 ie6: +1 x7 >= 0 ie7: +1 x8 >= 0 eq0: -1 x2 +1 x3 = 0 eq1: -1 x1 +1 x4 = 0 eq2: +0.5 x1 +0.25 x2 +0.2500000000000001 x3 -0.5 x5 = 0 eq3: +0.25 x1 +0.5 x3 +0.2500000000000001 x4 -0.5 x6 = 0 eq4: +0.25 x1 +0.5 x2 +0.2500000000000001 x4 -0.5 x7 = 0 eq5: +0.25 x2 +0.2500000000000001 x3 +0.5 x4 -0.5 x8 = 0 eq6: +1 x5 = 1 eq7: +1 x6 = 1 eq8: +1 x7 = 1 eq9: +1 x8 = 1 eq10: +4 x1 +4 x2 +4 x3 +4 x4 = 8 BOUNDS x1 free x2 free x3 free x4 free x5 free x6 free x7 free x8 free GENERAL x1 x2 x3 x4 x5 x6 x7 x8 END • write_symmetrized_simplexity_ilp (P, isotypic_components, outfile_name) construct a linear program whose optimal value is a lower bound for the minimal number of simplices in a triangulation of P. The symmetry group of P is taken into account, in that the variables in the linear program are projections of the indicator variables of the maximal interior simplices to a given direct sum of isotypic components of the symmetry group of P acting on these simplices. ##### Parameters  Polytope P Set isotypic_components the set of indices of isotypic components to project to; default [0] String outfile_name . Setting this to '-' (as is the default) prints the LP to stdout. Example: • For the 3-cube, the symmetrized LP for isotypic component 0 reads as follows:> write_symmetrized_simplexity_ilp(cube(3,group=>1)); MINIMIZE obj: +1 x1 +1 x2 +1 x3 +1 x4 Subject To ie0: +1 x1 >= 0 ie1: +1 x2 >= 0 ie2: +1 x3 >= 0 ie3: +1 x4 >= 0 eq0: +8 x1 +8 x2 +8 x3 +16 x4 = 48 eq1: -6 x1 +6 x3 +24 x4 = 0 BOUNDS x1 free x2 free x3 free x4 free GENERAL x1 x2 x3 x4 END The interpretation is as follows: The variables x1,...,x4 correspond to the representatives of interior simplices:> print cube(3,group=>1)->GROUP->REPRESENTATIVE_MAX_INTERIOR_SIMPLICES; {0 1 2 4} {0 1 2 5} {0 1 2 7} {0 3 5 6} The solution (x1,x2,x3,x4) = (4,0,0,1) of the LP says that in a minimal triangulation of the 3-cube, there are 4 simplices in the same symmetry class as {0,1,2,4}, and one in the class of {0,3,5,6}. • ### Other Special purpose functions. • edge_orientable (P) Checks whether a 2-cubical polytope P is edge-orientable (in the sense of Hetyei), that means that there exits an orientation of the edges such that for each 2-face the opposite edges point in the same direction. It produces the certificates EDGE_ORIENTATION if the polytope is edge-orientable, or MOEBIUS_STRIP_EDGES otherwise. In the latter case, the output can be checked with the client validate_moebius_strip. ##### Parameters  Polytope P the given 2-cubical polytope • face_pair (P, S) → Pair<Set,Set> For a given set S of rays compute the smallest face F of a cone P containing them all; see also face. ##### Parameters  Cone P Set S ##### Returns  Pair where the first is the set of vertices of F, while the second is the set of facets containing F. Example: • computes the dimension of the face of the 3-cube which is spanned by the vertices 0 and 1>$c=cube(3);> print rank($c->VERTICES->minor(face_pair($c,[0,1])->first(),All))-1; 1
•
lawrence_matrix (M) → Matrix

UNDOCUMENTED
##### Parameters
 Matrix M Create the Lawrence matrix Lambda(M) corresponding to M. If M has n rows and d columns, then Lambda(M) equals ( M I_n ) ( 0_{n,d} I_n ).
##### Returns
 Matrix
•
matroid_indices_of_hypersimplex_vertices () → Set<Int>

For a given matroid return the bases as a subset of the vertices of the hypersimplex

##### Options
 matroid::Matroid m the matroid
##### Returns
 Set
•
m_sequence (h) → Bool

Test if the given vector is an M-sequence.

##### Parameters
 Vector h
##### Returns
 Bool

Example:
• The h-vector of a simplicial or simple polytope is an M-sequence.> print m_sequence(cyclic(7,23)->H_VECTOR); true
•
wronski_center_ideal (L, lambda)

Returns a system of polynomials which is necessary to check if degeneration avoids center of projection: compute eliminant e(s); this must not have a zero in (0,1)

##### Parameters
 Matrix L lattice points Vector lambda height function on lattice points
•
wronski_polynomial (M, lambda, coeff, s)

Returns a Wronski polynomial of a topaz::FOLDABLE triangulation of a lattice polytope

##### Parameters
 Matrix M points (in homogeneous coordinates); affinely span the space Vector lambda height function on lattice points Array coeff coefficients Rational s additional Parameter in the polynomial
##### Options
 topaz::SimplicialComplex triangulation The triangulation of the pointset corresponding to the lifting function
•
wronski_system (M, lambda, coeff_array, s)

Returns a Wronski system of a topaz::FOLDABLE triangulation of a lattice polytope

##### Parameters
 Matrix M points (in homogeneous coordinates); affinely span the space Vector lambda height function on lattice points Array> coeff_array coefficients Rational s additional Parameter in the polynomial
##### Options
 topaz::SimplicialComplex triangulation The triangulation of the pointset corresponding to the lifting function
•

### Producing a cone

Various constructions of cones.

•
inner_cone (p, F) → Cone

Computes the inner cone of p at a face F (or a vertex v).

##### Parameters
 Cone p Set F (or Int v) vertex indices which are not contained in the far face
##### Options
 Bool outer Make it point outside the polytope? Default value is 0 (= point inside) Bool attach Attach the cone to F? Default 0 (ie, return the cone inside the hyperplane at infinity)
##### Returns
 Cone

Examples:
• To compute the inner cone at a vertex of the 3-cube, do this:> $c = inner_cone(cube(3), 1);> print$c->RAYS; -1 0 0 0 1 0 0 0 1
• To compute the inner cone along an edge of the 3-cube, and make it point outside the polytope, do this:> print inner_cone(cube(3), [0,1], outer=>1)->RAYS; 0 0 -1 0 -1 0
• If you want to attach the cone to the polytope, specify the corresponding option:> print normal_cone(cube(3), [0,1], attach=>1)->RAYS; 1 -1 -1 -1 1 1 -1 -1 0 0 1 0 0 0 0 1
•
normal_cone (p, F) → Cone

Computes the normal cone of p at a face F (or vertex v). By default this is the inner normal cone.

##### Parameters
 PointConfiguration p Set F (or Int v) point indices which are not contained in the far face
##### Options
 Bool outer Calculate outer normal cone? Default value is 0 (= inner) Bool attach Attach the cone to F? Default 0 (ie, return the cone inside the hyperplane at infinity)
##### Returns
 Cone

Example:
• To compute the outer normal cone of a doubled 2-cube, do this:> $v = cube(2)->VERTICES;>$p = new PointConfiguration(POINTS=>($v/$v));> print normal_cone($p, 4, outer=>1)->RAYS; 0 -1 -1 0 • normal_cone (p, F) → Cone Computes the normal cone of p at a face F (or a vertex v). By default this is the inner normal cone. ##### Parameters  Cone p Set F (or Int v) vertex indices which are not contained in the far face ##### Options  Bool outer Calculate outer normal cone? Default value is 0 (= inner) Bool attach Attach the cone to F? Default 0 (ie, return the cone inside the hyperplane at infinity) ##### Returns  Cone Examples: • To compute the outer normal cone at a vertex of the 3-cube, do this:>$c = normal_cone(cube(3), 0, outer=>1);> print $c->RAYS; -1 0 0 0 -1 0 0 0 -1 • To compute the outer normal cone along an edge of the 3-cube, do this:> print normal_cone(cube(3), [0,1], outer=>1)->RAYS; 0 -1 0 0 0 -1 • If you want to attach the cone to the polytope, specify the corresponding option:> print normal_cone(cube(3), [0,1], outer=>1, attach=>1)->RAYS; 1 -1 -1 -1 1 1 -1 -1 0 0 -1 0 0 0 0 -1 • recession_cone (P) → Cone<Scalar> retuns the recession cone (tail cone, characteristic cone) of a polytope ##### Parameters  Polytope P polytope ##### Returns  Cone • subcone (C) → Cone Make a subcone from a cone. ##### Parameters  Cone C the input cone ##### Options  Bool no_labels Do not create RAY_LABELS. default: 0 ##### Returns  Cone • ### Producing a point configuration Constructing a point configuration, either from scratch or from existing objects. • minkowski_sum (P1, P2) → PointConfiguration Produces the Minkowski sum of P1 and P2. ##### Parameters  PointConfiguration P1 PointConfiguration P2 ##### Returns  PointConfiguration Example: • >$P1 = new PointConfiguration(POINTS=>simplex(2)->VERTICES);> $P2 = new PointConfiguration(POINTS=>[[1,1,1],[1,-1,1],[1,1,-1],[1,-1,-1],[1,0,0]]);>$m = minkowski_sum($P1,$P2);> print $m->POINTS; 1 1 1 1 -1 1 1 1 -1 1 -1 -1 1 0 0 1 2 1 1 0 1 1 2 -1 1 0 -1 1 1 0 1 1 2 1 -1 2 1 1 0 1 -1 0 1 0 1 • minkowski_sum (lambda, P1, mu, P2) → PointConfiguration Produces the polytope lambda*P1+mu*P2, where * and + are scalar multiplication and Minkowski addition, respectively. ##### Parameters  Scalar lambda PointConfiguration P1 Scalar mu PointConfiguration P2 ##### Returns  PointConfiguration Example: • >$P1 = new PointConfiguration(POINTS=>simplex(2)->VERTICES);> $P2 = new PointConfiguration(POINTS=>[[1,1,1],[1,-1,1],[1,1,-1],[1,-1,-1],[1,0,0]]);>$m = minkowski_sum(1,$P1,3,$P2);> print $m->POINTS; 1 3 3 1 -3 3 1 3 -3 1 -3 -3 1 0 0 1 4 3 1 -2 3 1 4 -3 1 -2 -3 1 1 0 1 3 4 1 -3 4 1 3 -2 1 -3 -2 1 0 1 • ### Producing a polytope from graphs Polytope constructions which take graphs as input. • flow_polytope <Scalar> (G, Arc_Bounds, source, sink) → Polytope Produces the flow polytope of a directed Graph G=(V,E) with a given source and sink. The flow polytope has the following outer description: forall v in V-{source, sink}: sum_{e in E going into v} x_e - sum_{e in E going out of v} x_e = 0 sum_{e in E going into source} x_e - sum_{e in E going out of source} x_e <= 0 sum_{e in E going into sink} x_e - sum_{e in E going out of sink} x_e >= 0 forall e in E: x_e <= given bound on edge e ##### Type Parameters  Scalar ##### Parameters  Graph G EdgeMap Arc_Bounds Int source Int sink ##### Returns  Polytope • flow_polytope <Scalar> (G, Arc_Bounds, source, sink) → Polytope Produces the flow polytope of a directed Graph G=(V,E) with a given source and sink. The flow polytope has the following outer description: forall v in V-{source, sink}: sum_{e in E going into v} x_e - sum_{e in E going out of v} x_e = 0 sum_{e in E going into source} x_e - sum_{e in E going out of source} x_e <= 0 sum_{e in E going into sink} x_e - sum_{e in E going out of sink} x_e >= 0 forall e in E: x_e <= given bound on edge e ##### Type Parameters  Scalar ##### Parameters  Graph G Array Arc_Bounds Int source Int sink ##### Returns  Polytope • fractional_cut_polytope (G) → Polytope Cut polytope of an undirected graph. ##### Parameters  Graph G ##### Returns  Polytope • fractional_matching_polytope (G) → Polytope Matching polytope of an undirected graph. ##### Parameters  Graph G ##### Returns  Polytope • tutte_lifting (G) → Polytope Let G be a 3-connected planar graph. If the corresponding polytope contains a triangular facet (ie. the graph contains a non- separating cycle of length 3), the client produces a realization in R3. ##### Parameters  Graph G ##### Returns  Polytope • weighted_digraph_polyhedron (encoding) → polytope::Polytope Weighted digraph polyhedron of a directed graph with a weight function. The graph and the weight function are combined into a matrix. ##### Parameters  Matrix encoding weighted digraph ##### Returns  polytope::Polytope • ### Producing a polytope from other objects Polytope constructions which take other big objects as input. • billera_lee (H) → Polytope Produces a simplicial polytope whose H-vector is the given input vector. The G-vector coming from the given vector must be an M-sequence. This is an implementation of the algorithm described in the paper "A Proof of the Sufficiency of McMullen’s Conditions of Simplicial Convex Polytopes" by Louis Billera and Carl Lee, DOI: 10.1016/0097-3165(81)90058-3 ##### Parameters  Vector H ##### Returns  Polytope Example: • >$p = billera_lee([1,5,15,15,5,1]);> print $p->H_VECTOR; 1 5 15 15 5 1 • ### Producing a polytope from polytopes An important way of constructing polytopes is to modify an already existing polytope. Actually, these functions don't alter the input polytope (it is forbidden in polymake), but create a new polytope object. Many functions can at your choice either calculate the vertex or facet coordinates, or constrain themselves on the purely combinatorial description of the resulting polytope. • bipyramid (P, z, z_prime) → Polytope Make a bipyramid over a pointed polyhedron. The bipyramid is the convex hull of the input polyhedron P and two points (v, z), (v, z_prime) on both sides of the affine span of P. For bounded polyhedra, the apex projections v to the affine span of P coincide with the vertex barycenter of P. ##### Parameters  Polytope P Scalar z distance between the vertex barycenter and the first apex, default value is 1. Scalar z_prime distance between the vertex barycenter and the second apex, default value is -z. ##### Options  Bool no_coordinates : don't compute the coordinates, purely combinatorial description is produced. Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 label the new vertices with "Apex" and "Apex'". ##### Returns  Polytope Example: • Here's a way to construct the 3-dimensional cross polytope:>$p = bipyramid(bipyramid(cube(1)));> print equal_polyhedra($p,cross(3)); true • blending (P1, v1, P2, v2) → Polytope Compute the blending of two polyhedra at simple vertices. This is a slightly less standard construction. A vertex is simple if its vertex figure is a simplex. Moving a vertex v of a bounded polytope to infinity yields an unbounded polyhedron with all edges through v becoming mutually parallel rays. Do this to both input polytopes P1 and P2 at simple vertices v1 and v2, respectively. Up to an affine transformation one can assume that the orthogonal projections of P1 and P2 in direction v1 and v2, respectively, are mutually congruent. Any bijection b from the set of edges through v1 to the edges through v2 uniquely defines a way of glueing the unbounded polyhedra to obtain a new bounded polytope, the blending with respect to b. The bijection is specified as a permutation of indices 0 1 2 etc. The default permutation is the identity. The number of vertices of the blending is the sum of the numbers of vertices of the input polytopes minus 2. The number of facets is the sum of the numbers of facets of the input polytopes minus the dimension. The resulting polytope is described only combinatorially. ##### Parameters  Polytope P1 Int v1 the index of the first vertex Polytope P2 Int v2 the index of the second vertex ##### Options  Array permutation Bool no_labels Do not copy VERTEX_LABELS from the original polytopes. default: 0 ##### Returns  Polytope Example: • The following gives the smallest EVEN 3-polytope which is not a zonotope.>$c = cube(3); $bc = blending($c,0,$c,0);> print$bc->EVEN true> print $bc->F_VECTOR 14 21 9 • cayley_embedding (P_0, P_1, t_0, t_1) → Polytope Create a Cayley embedding of two polytopes (one of them must be pointed). The vertices of the first polytope P_0 get embedded to (t_0,0) and the vertices of the second polytope P_1 to (0,t_1). Default values are t_0=t_1=1. ##### Parameters  Polytope P_0 the first polytope Polytope P_1 the second polytope Scalar t_0 the extra coordinate for the vertices of P_0 Scalar t_1 the extra coordinate for the vertices of P_1 ##### Options  Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 ##### Returns  Polytope • cayley_embedding (A) → Polytope Create a Cayley embedding of an array (P1,...,Pm) of polytopes. All polytopes must have the same dimension, at least one of them must be pointed, and all must be defined over the same number type. Each vertex v of the i-th polytope is embedded to v|t_i e_i, where t_i is the i-th entry of the optional array t. ##### Parameters  Array A the input polytopes ##### Options  Array factors array of scaling factors for the Cayley embedding; defaults to the all-1 vector Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 ##### Returns  Polytope • cayley_polytope (P_Array) → Polytope Construct the cayley polytope of a set of pointed lattice polytopes contained in P_Array which is the convex hull of P1×e1, ..., Pk×ek where e1, ...,ek are the standard unit vectors in Rk. In this representation the last k coordinates always add up to 1. The option proj projects onto the complement of the last coordinate. ##### Parameters  Array P_Array an array containing the lattice polytopes P1,...,Pk ##### Options  Bool proj ##### Returns  Polytope • cells_from_subdivision (P, cells) → Polytope<Scalar> Extract the given cells of the subdivision of a polyhedron and create a new polyhedron that has as vertices the vertices of the cells. ##### Parameters  Polytope P Set cells ##### Options  Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 ##### Returns  Polytope Example: • First we create a nice subdivision for a small polytope:>$p = new Polytope(VERTICES=>[[1,0,0],[1,0,1],[1,1,0],[1,1,1],[1,3/2,1/2]]);> $p->POLYTOPAL_SUBDIVISION(MAXIMAL_CELLS=>[[0,1,3],[1,2,3],[2,3,4]]); Then we create the polytope that has as vertices the vertices from cell 1 and 2, while keeping their labels.>$c = cells_from_subdivision($p,[1,2]);> print$c->VERTICES; 1 0 1 1 1 0 1 1 1 1 3/2 1/2> print $c->VERTEX_LABELS; 1 2 3 4 • cell_from_subdivision (P, cell) → Polytope Extract the given cell of the subdivision of a polyhedron and write it as a new polyhedron. ##### Parameters  Polytope P Int cell ##### Options  Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 ##### Returns  Polytope Example: • First we create a nice subdivision for our favourite 2-polytope, the square:>$p = cube(2);> $p->POLYTOPAL_SUBDIVISION(MAXIMAL_CELLS=>[[0,1,3],[1,2,3]]); Then we extract the [1,2,3]-cell, copying the vertex labels.>$c = cell_from_subdivision($p,1);> print$c->VERTICES; 1 1 -1 1 -1 1 1 1 1> print $c->VERTEX_LABELS; 1 2 3 • conv (P_Array) → PropagatedPolytope Construct a new polyhedron as the convex hull of the polyhedra given in P_Array. ##### Parameters  Array P_Array ##### Returns  PropagatedPolytope Example: • >$p = conv([cube(2,1,0),cube(2,6,5)]);> print $p->VERTICES; 1 0 0 1 1 0 1 0 1 1 6 5 1 5 6 1 6 6 • dual_linear_program (P, maximize) → Polytope Produces the dual linear program for a given linear program of the form min {cx | Ax >= b, Bx = d}. Here (A,b) are given by the FACETS (or the INEQAULITIES), and (B,d) are given by the AFFINE_HULL (or by the EQUATIONS) of the polytope P, while the objective function c comes from an LP subobject. ##### Parameters  Polytope P = {x | Ax >= b, Bx = d} Bool maximize tells if the primal lp is a maximization problem. Default value is 0 (= minimize) ##### Returns  Polytope • edge_middle (P) → Polytope Produce the convex hull of all edge middle points of some polytope P. The polytope must be BOUNDED. ##### Parameters  Polytope P ##### Returns  Polytope • face (P, S) → Cone For a given set S of rays compute the smallest face F of a cone P containing them all; see also face_pair. ##### Parameters  Cone P Set S ##### Options  Bool no_coordinates don't copy the coordinates, produce purely combinatorial description. Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 ##### Returns  Cone Example: • To create a cone from the vertices of the zeroth facet of the 3-cube, type this:>$p = face(cube(3),[0,1]);
•
facet (P, facet) → Cone

Extract the given facet of a polyhedron and write it as a new polyhedron.

##### Parameters
 Cone P Int facet
##### Options
 Bool no_coordinates don't copy the coordinates, produce purely combinatorial description. Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0
##### Returns
 Cone

Example:
• To create a cone from the vertices of the zeroth facet of the 3-cube, type this:> $p = facet(cube(3),0); • facet_to_infinity (P, i) → Polytope Make an affine transformation such that the i-th facet is transformed to infinity ##### Parameters  Polytope P Int i the facet index ##### Returns  Polytope Example: • This generates the polytope that is the positive quadrant in 2-space:>$q = new Polytope(VERTICES=>[[1,-1,-1],[1,0,1],[1,1,0]]);> $pf = facet_to_infinity($q,2);> print $pf->VERTICES; 0 -1 -1 0 0 1 1 0 1 • free_sum (P1, P2) → Polytope Construct a new polyhedron as the free sum of two given bounded ones. ##### Parameters  Polytope P1 Polytope P2 ##### Options  Bool force_centered if the input polytopes must be centered. Defaults to true. Bool no_coordinates produces a pure combinatorial description. Defaults to false. ##### Returns  Polytope Example: • >$p = free_sum(cube(2),cube(2));> print $p->VERTICES; 1 -1 -1 0 0 1 1 -1 0 0 1 -1 1 0 0 1 1 1 0 0 1 0 0 -1 -1 1 0 0 1 -1 1 0 0 -1 1 1 0 0 1 1 • free_sum_decomposition (P) → Array<Polytope> Decompose a given polytope into the free sum of smaller ones ##### Parameters  Polytope P ##### Returns  Array • free_sum_decomposition_indices (P) → Array<Set> Decompose a given polytope into the free sum of smaller ones, and return the vertex indices of the summands ##### Parameters  Polytope P ##### Returns  Array Example: • >$p = free_sum(cube(1),cube(1));> print $p->VERTICES; 1 -1 0 1 1 0 1 0 -1 1 0 1> print free_sum_decomposition_indices($p); {0 1} {2 3}
•
gc_closure (P) → Polytope

Produces the gomory-chvatal closure of a full dimensional polyhedron

##### Parameters
 Polytope P
##### Returns
 Polytope
•
integer_hull (P) → Polytope

Produces the integer hull of a polyhedron

##### Parameters
 Polytope P
##### Returns
 Polytope

Example:
• > $p = new Polytope(VERTICES=>[[1,13/10,1/2],[1,1/5,6/5],[1,1/10,-3/2],[1,-7/5,1/5]]);>$ih = integer_hull($p);> print$ih->VERTICES; 1 -1 0 1 0 -1 1 0 1 1 1 0
•
intersection (C ...) → Cone

Construct a new polyhedron or cone as the intersection of given polyhedra and/or cones. Works only if all CONE_AMBIENT_DIM values are equal. If the input contains both cones and polytopes, the output will be a polytope.

##### Parameters
 Cone C ... polyhedra and cones to be intersected
##### Returns
 Cone

Example:
• > $p = intersection(cube(2), cross(2,3/2));> print$p->VERTICES; 1 -1/2 1 1 -1 1/2 1 1/2 1 1 1 1/2 1 1/2 -1 1 1 -1/2 1 -1/2 -1 1 -1 -1/2
•
join_polytopes (P1, P2) → Polytope

Construct a new polyhedron as the join of two given bounded ones.

##### Parameters
 Polytope P1 Polytope P2
##### Options
 Bool no_coordinates produces a pure combinatorial description. Bool group Compute the canonical group induced by the groups on P1 and P2 Throws an exception if the GROUPs of the input polytopes are not provided. default 0
##### Returns
 Polytope

Example:
• To join two squares, use this:> $p = join_polytopes(cube(2),cube(2));> print$p->VERTICES; 1 -1 -1 -1 0 0 1 1 -1 -1 0 0 1 -1 1 -1 0 0 1 1 1 -1 0 0 1 0 0 1 -1 -1 1 0 0 1 1 -1 1 0 0 1 -1 1 1 0 0 1 1 1
•
lattice_bipyramid (P, v, v_prime, z, z_prime) → Polytope

Make a lattice bipyramid over a polyhedron. The bipyramid is the convex hull of the input polyhedron P and two points (v, z), (v_prime, z_prime) on both sides of the affine span of P.

##### Parameters
 Polytope P Vector v basis point for the first apex Vector v_prime basis for the second apex If v_prime is omitted, v will be used for both apices. If both v and v_prime are omitted, it tries to find two vertices which don't lie in a common facet. If no such vertices can be found or P is a simplex, it uses an interior lattice point as both v and v_prime. Rational z height for the first apex, default value is 1 Rational z_prime height for the second apex, default value is -z
##### Options
 Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 label the new vertices with "Apex" and "Apex'".
##### Returns
 Polytope

Example:
• To create the bipyramid over a square and keep the vertex labels, do this:> $p = lattice_bipyramid(cube(2),new Vector(1,0,0));> print$p->VERTICES; 1 -1 -1 0 1 1 -1 0 1 -1 1 0 1 1 1 0 1 0 0 1 1 0 0 -1> print $p->VERTEX_LABELS; 0 1 2 3 Apex Apex' • lattice_pyramid (P, z, v) → Polytope Make a lattice pyramid over a polyhedron. The pyramid is the convex hull of the input polyhedron P and a point v outside the affine span of P. ##### Parameters  Polytope P Rational z the height for the apex (v,z), default value is 1. Vector v the lattice point to use as apex, default is the first vertex of P. ##### Options  Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 label the new top vertex with "Apex". ##### Returns  Polytope Example: • To create the pyramid of height 5 over a square and keep the vertex labels, do this:>$p = lattice_pyramid(cube(2),5,new Vector(1,0,0));> print $p->VERTICES; 1 -1 -1 0 1 1 -1 0 1 -1 1 0 1 1 1 0 1 0 0 5> print$p->VERTEX_LABELS; 0 1 2 3 Apex
•
lawrence (P) → Cone

Create the Lawrence polytope Lambda(P) corresponding to P. Lambda(P) has the property that Gale(Lambda(P)) = Gale(P) union -Gale(P).

##### Parameters
 Cone P an input cone or polytope
##### Returns
 Cone the Lawrence cone or polytope to P
•
make_totally_dual_integral (P) → Polytope

Produces a polyhedron with an totally dual integral inequality formulation of a full dimensional polyhedron

##### Parameters
 Polytope P
##### Returns
 Polytope
•
mapping_polytope (P1, P2) → Polytope

Construct a new polytope as the mapping polytope of two polytopes P1 and P2. The mapping polytope is the set of all affine maps from Rp to Rq, that map P1 into P2.

The label of a new facet corresponding to v1 and h1 will have the form "v1*h1".

##### Parameters
 Polytope P1 Polytope P2
##### Options
 Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0
##### Returns
 Polytope
•
minkowski_sum (P1, P2) → Polytope

Produces the Minkowski sum of P1 and P2.

##### Parameters
 Polytope P1 Polytope P2
##### Returns
 Polytope

Example:
• The following stores the minkowski sum of a square and a triangle in the variable $p and then prints its vertices.>$p = minkowski_sum(cube(2),simplex(2));> print $p->VERTICES; 1 -1 -1 1 2 -1 1 -1 2 1 2 1 1 1 2 • minkowski_sum (lambda, P1, mu, P2) → Polytope Produces the polytope lambda*P1+mu*P2, where * and + are scalar multiplication and Minkowski addition, respectively. ##### Parameters  Scalar lambda Polytope P1 Scalar mu Polytope P2 ##### Returns  Polytope Example: • The following stores the minkowski sum of a scaled square and a triangle in the variable$p and then prints its vertices.> $p = minkowski_sum(2,cube(2),1,simplex(2));> print$p->VERTICES; 1 -2 -2 1 3 -2 1 -2 3 1 3 2 1 2 3
•
minkowski_sum_fukuda (summands) → Polytope<Scalar>

Computes the (VERTICES of the) Minkowski sum of a list of polytopes using the algorithm by Fukuda described in

Komei Fukuda, From the zonotope construction to the Minkowski addition of convex polytopes, J. Symbolic Comput., 38(4):1261-1272, 2004.
##### Parameters
 Array> summands
##### Returns
 Polytope

Example:
• > $p = minkowski_sum_fukuda([cube(2),simplex(2),cross(2)]);> print$p->VERTICES; 1 3 -1 1 3 1 1 -1 -2 1 1 3 1 -1 3 1 2 -2 1 -2 2 1 -2 -1
•
mixed_integer_hull (P, int_coords) → Polytope

Produces the mixed integer hull of a polyhedron

##### Parameters
 Polytope P Array int_coords the coordinates to be integral;
##### Returns
 Polytope
•
pointed_part (P) → Polytope

Produces the pointed part of a polyhedron

##### Parameters
 Polytope P
##### Returns
 Polytope

Example:
• > $p = new Polytope(POINTS=>[[1,0,0],[1,0,1],[1,1,0],[1,1,1],[0,1,0],[0,0,1]]);>$pp = pointed_part($p);> print$pp->VERTICES; 1 0 0 0 1 0 0 0 1
•
prism (P, z1, z2) → Polytope

Make a prism over a pointed polyhedron. The prism is the product of the input polytope P and the interval [z1, z2].

##### Parameters
 Polytope P the input polytope Scalar z1 the left endpoint of the interval; default value: -1 Scalar z2 the right endpoint of the interval; default value: -z1
##### Options
 Bool group Compute the canonical group induced by the group on P with an extra generator swapping the upper and lower copy. throws an exception if GROUP of P is not provided. default 0 Bool no_coordinates only combinatorial information is handled Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 the bottom facet vertices get the labels from the original polytope; the labels of their clones in the top facet get a tick (') appended.
##### Returns
 Polytope

Example:
• The following saves the prism over the square and the interval [-2,2] to the variable $p, and then prints a nice representation of its vertices.>$p = prism(cube(2),-2);> print rows_labeled($p->VERTICES,$p->VERTEX_LABELS); 0:1 -1 -1 -2 1:1 1 -1 -2 2:1 -1 1 -2 3:1 1 1 -2 0':1 -1 -1 2 1':1 1 -1 2 2':1 -1 1 2 3':1 1 1 2
•
product (P1, P2) → Polytope

Construct a new polytope as the product of two given polytopes P1 and P2. As little additional properties of the input polytopes as possible are computed. You can control this behaviour using the option flags.

##### Parameters
 Polytope P1 Polytope P2
##### Options
 Bool no_coordinates only combinatorial information is handled Bool no_vertices do not compute vertices Bool no_facets do not compute facets Bool no_labels Do not copy VERTEX_LABELS from the original polytopes, if present. the label of a new vertex corresponding to v1 ⊕ v2 will have the form LABEL_1*LABEL_2. default: 0 Bool group Compute the canonical group of the product, as induced by the groups on FACETS of VERTICES of P1 and P2. If neither FACETS_ACTION nor VERTICES_ACTION of the GROUPs of the input polytopes are provided, an exception is thrown. default 0
##### Returns
 Polytope

Example:
• The following builds the product of a square and an interval, without computing vertices of neither the input nor the output polytopes.> $p = product(cube(2),cube(1), no_vertices=>1); • projection (P, indices) → Cone Orthogonally project a pointed polyhedron to a coordinate subspace. The subspace the polyhedron P is projected on is given by indices in the set indices. The option revert inverts the coordinate list. The client scans for all coordinate sections and produces proper output from each. If a description in terms of inequalities is found, the client performs Fourier-Motzkin elimination unless the nofm option is set. Setting the nofm option is useful if the corank of the projection is large; in this case the number of inequalities produced grows quickly. ##### Parameters  Cone P Array indices ##### Options  Bool revert inverts the coordinate list Bool nofm suppresses Fourier-Motzkin elimination ##### Returns  Cone Example: • project the 3-cube along the first coordinate, i.e. to the subspace spanned by the second and third coordinate:>$p = projection(cube(3),[1],revert=>1);> print $p->VERTICES; 1 1 -1 1 1 1 1 -1 1 1 -1 -1 • projection_preimage (P_Array) → Cone Construct a new polyhedron that projects to a given array of polyhedra. If the n polyhedra are d_1, d_2, ..., d_n-dimensional and all have m vertices, the resulting polyhedron is (d_1+...+d_n)-dimensional, has m vertices, and the projection to the i-th d_i coordinates gives the i-th input polyhedron. ##### Parameters  Array P_Array ##### Returns  Cone Example: • >$p = projection_preimage(cube(2),cube(2));> print $p->VERTICES; 1 -1 -1 -1 -1 1 1 -1 1 -1 1 -1 1 -1 1 1 1 1 1 1 • project_full (P) → Cone Orthogonally project a polyhedron to a coordinate subspace such that redundant columns are omitted, i.e., the projection becomes full-dimensional without changing the combinatorial type. The client scans for all coordinate sections and produces proper output from each. If a description in terms of inequalities is found, the client performs Fourier-Motzkin elimination unless the nofm option is set. Setting the nofm option is useful if the corank of the projection is large; in this case the number of inequalities produced grows quickly. ##### Parameters  Cone P ##### Options  Bool nofm suppresses Fourier-Motzkin elimination Bool no_labels Do not copy VERTEX_LABELS to the projection. default: 0 ##### Returns  Cone • pyramid (P, z) → Polytope Make a pyramid over a polyhedron. The pyramid is the convex hull of the input polyhedron P and a point v outside the affine span of P. For bounded polyhedra, the projection of v to the affine span of P coincides with the vertex barycenter of P. ##### Parameters  Polytope P Scalar z is the distance between the vertex barycenter and v, default value is 1. ##### Options  Bool group compute the group induced by the GROUP of P and leaving the apex fixed. throws an exception if GROUP of P is not provided. default 0 Bool no_coordinates don't compute new coordinates, produce purely combinatorial description. Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 label the new top vertex with "Apex". ##### Returns  Polytope Example: • The following saves the pyramid of height 2 over the square to the variable$p. The vertices are relabeled.> $p = pyramid(cube(2),2); To print the vertices and vertex labels of the newly generated pyramid, do this:> print$p->VERTICES; 1 -1 -1 0 1 1 -1 0 1 -1 1 0 1 1 1 0 1 0 0 2> print $p->VERTEX_LABELS; 0 1 2 3 Apex • rand_inner_points (P, n) → Polytope Produce a polytope with n random points from the input polytope P. Each generated point is a convex linear combination of the input vertices with uniformly distributed random coefficients. Thus, the output points can't in general be expected to be distributed uniformly within the input polytope; cf. unirand for this. The polytope must be BOUNDED. ##### Parameters  Polytope P the input polytope Int n the number of random points ##### Options  Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome. ##### Returns  Polytope • rand_vert (V, n) → Matrix Selects n random vertices from the set of vertices V. This can be used to produce random polytopes which are neither simple nor simplicial as follows: First produce a simple polytope (for instance at random, by using rand_sphere, rand, or unirand). Then use this client to choose among the vertices at random. Generalizes random 0/1-polytopes. ##### Parameters  Matrix V the vertices of a polytope Int n the number of random points ##### Options  Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome. ##### Returns  Matrix • spherize (P) → Polytope Project all vertices of a polyhedron P on the unit sphere. P must be CENTERED and BOUNDED. ##### Parameters  Polytope P ##### Returns  Polytope Example: • The following scales the 2-dimensional cross polytope by 23 and then projects it back onto the unit circle.>$p = scale(cross(2),23);> $s = spherize($p);> print $s->VERTICES; 1 1 0 1 -1 0 1 0 1 1 0 -1 • stack (P, stack_facets) → Polytope Stack a (simplicial or cubical) polytope over one or more of its facets. For each facet of the polytope P specified in stack_facets, the barycenter of its vertices is lifted along the normal vector of the facet. In the simplicial case, this point is directly added to the vertex set, thus building a pyramid over the facet. In the cubical case, this pyramid is truncated by a hyperplane parallel to the original facet at its half height. This way, the property of being simplicial or cubical is preserved in both cases. The option lift controls the exact coordinates of the new vertices. It should be a rational number between 0 and 1, which expresses the ratio of the distance between the new vertex and the stacked facet, to the maximal possible distance. When lift=0, the new vertex would lie on the original facet. lift=1 corresponds to the opposite extremal case, where the new vertex hit the hyperplane of some neighbor facet. As an additional restriction, the new vertex can't lie further from the facet as the vertex barycenter of the whole polytope. Alternatively, the option noc (no coordinates) can be specified to produce a pure combinatorial description of the resulting polytope. ##### Parameters  Polytope P Set stack_facets the facets to be stacked; A single facet to be stacked is specified by its number. Several facets can be passed in a Set or in an anonymous array of indices: [n1,n2,...] Special keyword All means that all factes are to be stacked. ##### Options  Rational lift controls the exact coordinates of the new vertices; rational number between 0 and 1; default value: 1/2 Bool no_coordinates produces a pure combinatorial description (in contrast to lift) Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 New vertices get labels 'f(FACET_LABEL)' in the simplicial case, and 'f(FACET_LABEL)-NEIGHBOR_VERTEX_LABEL' in the cubical case. ##### Returns  Polytope Example: • To generate a cubical polytope by stacking all facets of the 3-cube to height 1/4, do this:>$p = stack(cube(3),All,lift=>1/4);
•
stellar_all_faces (P, d) → Polytope

Perform a stellar subdivision of all proper faces, starting with the facets.

Parameter d specifies the lowest dimension of the faces to be divided. It can also be negative, then treated as the co-dimension. Default is 1, that is, the edges of the polytope.

##### Parameters
 Polytope P , must be bounded Int d the lowest dimension of the faces to be divided; negative values: treated as the co-dimension; default value: 1.
##### Returns
 Polytope
•
stellar_indep_faces (P, in_faces) → Polytope

Perform a stellar subdivision of the faces in_faces of a polyhedron P.

The faces must have the following property: The open vertex stars of any pair of faces must be disjoint.

##### Parameters
 Polytope P , must be bounded Array> in_faces
##### Returns
 Polytope
•
tensor (P1, P2) → Polytope

Construct a new polytope as the convex hull of the tensor products of the vertices of two polytopes P1 and P2. Unbounded polyhedra are not allowed. Does depend on the vertex coordinates of the input.

##### Parameters
 Polytope P1 Polytope P2
##### Returns
 Polytope

Example:
• The following creates the tensor product polytope of two squares and then prints its vertices.> $p = tensor(cube(2),cube(2));> print$p->VERTICES; 1 1 1 1 1 1 -1 1 -1 1 1 1 -1 1 -1 1 -1 1 1 -1 1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 1 -1 -1 -1 -1
•
truncation (P, trunc_vertices) → Polytope

Cut off one or more vertices of a polyhedron.

The exact location of the cutting hyperplane(s) can be controlled by the option cutoff, a rational number between 0 and 1. When cutoff=0, the hyperplane would go through the chosen vertex, thus cutting off nothing. When cutoff=1, the hyperplane touches the nearest neighbor vertex of a polyhedron.

Alternatively, the option no_coordinates can be specified to produce a pure combinatorial description of the resulting polytope, which corresponds to the cutoff factor 1/2.

##### Parameters
 Polytope P Set trunc_vertices the vertex/vertices to be cut off; A single vertex to be cut off is specified by its number. Several vertices can be passed in a Set or in an anonymous array of indices: [n1,n2,...] Special keyword All means that all vertices are to be cut off.
##### Options
 Scalar cutoff controls the exact location of the cutting hyperplane(s); rational number between 0 and 1; default value: 1/2 Bool no_coordinates produces a pure combinatorial description (in contrast to cutoff) Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 New vertices get labels of the form 'LABEL1-LABEL2', where LABEL1 is the original label of the truncated vertex, and LABEL2 is the original label of its neighbor.
##### Returns
 Polytope

Example:
• To truncate the second vertex of the square at 1/4, try this:> $p = truncation(cube(2),2,cutoff=>1/4);> print$p->VERTICES; 1 -1 -1 1 1 -1 1 1 1 1 -1 1/2 1 -1/2 1
•
unirand (P, n) → Polytope

Produce a polytope with n random points that are uniformly distributed within the given polytope P. P must be bounded and full-dimensional.

##### Parameters
 Polytope P Int n the number of random points
##### Options
 Bool boundary forces the points to lie on the boundary of the given polytope Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Polytope

Examples:
• This produces a polytope as the convex hull of 5 random points in the square with the origin as its center and side length 2:> $p = unirand(cube(2),5); • This produces a polytope as the convex hull of 5 random points on the boundary of the square with the origin as its center and side length 2:>$p = unirand(cube(2),5,boundary=>1);
•
vertex_figure (p, n) → Polytope

Construct the vertex figure of the vertex n of a polyhedron. The vertex figure is dual to a facet of the dual polytope.

##### Parameters
 Polytope p Int n number of the chosen vertex
##### Options
 Scalar cutoff controls the exact location of the cutting hyperplane. It should lie between 0 and 1. Value 0 would let the hyperplane go through the chosen vertex, thus degenerating the vertex figure to a single point. Value 1 would let the hyperplane touch the nearest neighbor vertex of a polyhedron. Default value is 1/2. Bool no_coordinates skip the coordinates computation, producing a pure combinatorial description. Bool no_labels Do not copy VERTEX_LABELS from the original polytope. default: 0 by default, the labels are produced from the corresponding neighbor vertices of the original polytope.
##### Returns
 Polytope

Example:
• This produces a vertex figure of one vertex of a 3-dimensional cube with the origin as its center and side length 2. The result is a 2-simplex.> $p = vertex_figure(cube(3),5);> print$p->VERTICES; 1 1 -1 0 1 0 -1 1 1 1 0 1
•
wedge (P, facet, z, z_prime) → Polytope

Make a wedge from a polytope over the given facet. The polytope must be bounded. The inclination of the bottom and top side facet is controlled by z and z_prime, which are heights of the projection of the old vertex barycenter on the bottom and top side facet respectively.

##### Parameters
 Polytope P , must be bounded Int facet the `cutting edge'. Rational z default value is 0. Rational z_prime default value is -z, or 1 if z==0.
##### Options
 Bool no_coordinates don't compute coordinates, pure combinatorial description is produced. Bool no_labels Do not copy VERTEX_LABELS from the original polytopes. default: 0 By default, the vertices get labelled as follows: The bottom facet vertices obtain the labels from the original polytope; the labels of their clones in the top facet get a tick (') appended.
##### Returns
 Polytope

Example:
• This produces the wedge from a square (over the facet 0), which yields a prism over a triangle:> $p = wedge(cube(2),0);> print$p->VERTICES; 1 -1 -1 0 1 1 -1 0 1 -1 1 0 1 1 1 0 1 1 -1 2 1 1 1 2
•
wreath (P1, P2) → Polytope

Construct a new polytope as the wreath product of two input polytopes P1, P2. P1 and P2 have to be BOUNDED.

##### Parameters
 Polytope P1 Polytope P2
##### Options
 Bool dual invokes the computation of the dual wreath product Bool no_labels Do not copy VERTEX_LABELS from the original polytopes. default: 0 the label of a new vertex corresponding to v1 ⊕ v2 will have the form LABEL_1*LABEL_2.
##### Returns
 Polytope
•

### Producing a polytope from scratch

With these clients you can create polytopes belonging to various parameterized families which occur frequently in polytope theory, as well as several kinds of random polytopes. Regular polytopes and their friends are listed separately.

•
associahedron (d) → Polytope

Produce a d-dimensional associahedron (or Stasheff polytope). We use the facet description given in Ziegler's book on polytopes, section 9.2.

##### Parameters
 Int d the dimension
##### Options
 Bool group Compute the combinatorial symmetry group of the polytope. It has two generators, as it is induced by the symmetry group of an d+3-gon, the dihedral group of degree d+3. See arXiv 1109.5544v2 for details.
##### Returns
 Polytope
•
binary_markov_graph (observation) → PropagatedPolytope

Defines a very simple graph for a polytope propagation related to a Hidden Markov Model. The propagated polytope is always a polygon. For a detailed description see

M. Joswig: Polytope propagation, in: Algebraic statistics and computational biology
by L. Pachter and B. Sturmfels (eds.), Cambridge, 2005.
##### Parameters
 Array observation
##### Returns
 PropagatedPolytope
•
binary_markov_graph (observation)

##### Parameters
 String observation encoded as a string of "0" and "1".
•
birkhoff (n, even) → Polytope

Constructs the Birkhoff polytope of dimension n2. It is the polytope of nxn stochastic matrices (encoded as n2 row vectors), thus matrices with non-negative entries whose row and column entries sum up to one. Its vertices are the permutation matrices.

##### Parameters
 Int n Bool even Defaults to '0'. Set this to '1' to get vertices only for even permutation matrices.
##### Options
 Bool group add the symmetry group induced by the symmetric group to the resulting polytope
##### Returns
 Polytope
•
cyclic (d, n) → Polytope<Rational>

Produce a d-dimensional cyclic polytope with n points. Prototypical example of a neighborly polytope. Combinatorics completely known due to Gale's evenness criterion. Coordinates are chosen on the (spherical) moment curve at integer steps from start, or 0 if unspecified. If spherical is true the vertices lie on the sphere with center (1/2,0,...,0) and radius 1/2. In this case (the necessarily positive) parameter start defaults to 1.

##### Parameters
 Int d the dimension Int n the number of points
##### Options
 Int start defaults to 0 (or to 1 if spherical) Bool spherical defaults to false
##### Returns
 Polytope

Example:
• To create the 2-dimensional cyclic polytope with 6 points on the sphere, starting at 3:> $p = cyclic(2,6,start=>3,spherical=>1);> print$p->VERTICES; 1 1/10 3/10 1 1/17 4/17 1 1/26 5/26 1 1/37 6/37 1 1/50 7/50 1 1/65 8/65
•
cyclic_caratheodory (d, n) → Polytope

Produce a d-dimensional cyclic polytope with n points. Prototypical example of a neighborly polytope. Combinatorics completely known due to Gale's evenness criterion. Coordinates are chosen on the trigonometric moment curve. For cyclic polytopes from other curves, see polytope::cyclic.

##### Parameters
 Int d the dimension. Required to be even. Int n the number of points
##### Options
 Bool group add a symmetry group description. If 0 (default), the return type is Polytope, else Polytope so that the matrices corresponding to the symmetry action may be approximated
##### Returns
 Polytope
•
delpezzo (d, scale) → Polytope<Scalar>

Produce a d-dimensional del-Pezzo polytope, which is the convex hull of the cross polytope together with the all-ones and minus all-ones vector.

All coordinates are +/- scale or 0.

##### Parameters
 Int d the dimension Scalar scale the absolute value of each non-zero vertex coordinate. Needs to be positive. The default value is 1.
##### Returns
 Polytope
•
dwarfed_cube (d) → Polytope

Produce a d-dimensional dwarfed cube.

##### Parameters
 Int d the dimension
##### Returns
 Polytope
•
dwarfed_product_polygons (d, s) → Polytope

Produce a d-dimensional dwarfed product of polygons of size s.

##### Parameters
 Int d the dimension Int s the size
##### Returns
 Polytope
•
explicit_zonotope (zones) → Polytope

Produce the POINTS of a zonotope as the iterated Minkowski sum of all intervals [-x,x], where x ranges over the rows of the input matrix zones.

##### Parameters
 Matrix zones the input vectors
##### Options
 Bool rows_are_points the rows of the input matrix represent affine points(true, default) or linear vectors(false)
##### Returns
 Polytope

Example:
• > $M = new Matrix([1,1],[1,-1]);>$p = explicit_zonotope($M,rows_are_points=>0);> print$p->VERTICES; 1 2 0 1 0 -2 1 0 2 1 -2 0
•
fano_simplex (d) → Polytope

Produce a Fano d-simplex.

##### Parameters
 Int d the dimension
##### Options
 Bool group
##### Returns
 Polytope

Example:
• To create the 2-dimensional fano simplex and compute its symmetry group, type this: and print ints generators, do this:> $p = fano_simplex(2,group=>1);> print$p->GROUP->RAYS_ACTION->GENERATORS; 1 0 2 2 0 1
•
fractional_knapsack (b) → Polytope

Produce a knapsack polytope defined by one linear inequality (and non-negativity constraints).

##### Parameters
 Vector b linear inequality
##### Returns
 Polytope
•
goldfarb (d, e, g) → Polytope

Produces a d-dimensional Goldfarb cube if e<1/2 and g<=e/4. The Goldfarb cube is a combinatorial cube and yields a bad example for the Simplex Algorithm using the Shadow Vertex Pivoting Strategy. Here we use the description as a deformed product due to Amenta and Ziegler. For e<1/2 and g=0 we obtain the Klee-Minty cubes.

##### Parameters
 Int d the dimension Scalar e Scalar g
##### Returns
 Polytope
•
goldfarb_sit (d, eps, delta) → Polytope

Produces a d-dimensional variation of the Klee-Minty cube if eps<1/2 and delta<=1/2. This Klee-Minty cube is scaled in direction x_(d-i) by (eps*delta)^i. This cube is a combinatorial cube and yields a bad example for the Simplex Algorithm using the 'steepest edge' Pivoting Strategy. Here we use a scaled description of the construction of Goldfarb and Sit.

##### Parameters
 Int d the dimension Scalar eps Scalar delta
##### Returns
 Polytope
•
hypersimplex (k, d) → Polytope

Produce the hypersimplex Δ(k,d), that is the the convex hull of all 0/1-vector in Rd with exactly k 1s. Note that the output is never full-dimensional.

##### Parameters
 Int k number of 1s Int d ambient dimension
##### Options
 Bool group Bool no_vertices do not compute vertices Bool no_facets do not compute facets Bool no_vif do not compute vertices in facets
##### Returns
 Polytope

Example:
• This creates the hypersimplex in dimension 4 with vertices with exactly two 1-entries and computes its symmetry group:> $h = hypersimplex(2,4,group=>1); • hypertruncated_cube <Scalar> (d, k, lambda) → Polytope<Scalar> Produce a d-dimensional hypertruncated cube. With symmetric linear objective function (0,1,1,...,1). ##### Type Parameters  Scalar Coordinate type of the resulting polytope. Unless specified explicitly, deduced from the type of bound values, defaults to Rational. ##### Parameters  Int d the dimension Scalar k cutoff parameter Scalar lambda scaling of extra vertex ##### Returns  Polytope • klee_minty_cube (d, e) → Polytope Produces a d-dimensional Klee-Minty-cube if e<1/2. Uses the goldfarb client with g=0. ##### Parameters  Int d the dimension Scalar e ##### Returns  Polytope • k_cyclic (n, s) → Polytope Produce a (rounded) 2*k-dimensional k-cyclic polytope with n points, where k is the length of the input vector s. Special cases are the bicyclic (k=2) and tricyclic (k=3) polytopes. Only possible in even dimensions. The parameters s_i can be specified as integer, floating-point, or rational numbers. The coordinates of the i-th point are taken as follows: cos(s_1 * 2πi/n), sin(s_1 * 2πi/n), ... cos(s_k * 2πi/n), sin(s_k * 2πi/n) Warning: Some of the k-cyclic polytopes are not simplicial. Since the components are rounded, this function might output a polytope which is not a k-cyclic polytope! More information can be found in the following references: P. Schuchert: "Matroid-Polytope und Einbettungen kombinatorischer Mannigfaltigkeiten", PhD thesis, TU Darmstadt, 1995. Z. Smilansky: "Bi-cyclic 4-polytopes", Isr. J. Math. 70, 1990, 82-92 ##### Parameters  Int n the number of points Vector s s=(s_1,...,s_k) ##### Returns  Polytope Example: • To produce a (not exactly) regular pentagon, type this:>$p = k_cyclic(5,[1]);
•
lecture_hall_simplex (d) → Polytope

Produce a lecture hall d-simplex.

##### Parameters
 Int d the dimension
##### Options
 Bool group
##### Returns
 Polytope

Example:
• To create the 2-dimensional lecture hall simplex and compute its symmetry group, type this:> $p = lecture_hall_simplex(2, group=>1);> print$p->GROUP->RAYS_ACTION->GENERATORS; 1 0 2 2 0 1
•
long_and_winding (r) → Polytope<PuiseuxFraction<Max, Rational, Rational> >

Produce polytope in dimension 2r with 3r+2 facets such that the total curvature of the central path is at least Omega(2^r). This establishes a counter-example to a continuous analog of the Hirsch conjecture by Deza, Terlaky and Zinchenko, Adv. Mech. Math. 17 (2009). The same construction (written in a slightly different form) and its analysis can be found in Allamigeon, Benchimol, Gaubert and Joswig, arXiv:1405.4161 See also perturbed_long_and_winding.

##### Parameters
 Int r defining parameter
##### Options
 Rational eval_ratio parameter for evaluating the puiseux rational functions Int eval_exp to evaluate at eval_ratio^eval_exp, default: 1 Float eval_float parameter for evaluating the puiseux rational functions
##### Returns
 Polytope >

Examples:
• This yields a 4-polytope over the field of Puiseux fractions.> $p = long_and_winding(2); • This yields a rational 4-polytope with the same combinatorics.>$p = long_and_winding(2,eval_ratio=>2);
•
max_GC_rank (d) → Polytope

Produce a d-dimensional polytope of maximal Gomory-Chvatal rank Omega(d/log(d)), integrally infeasible. With symmetric linear objective function (0,1,1..,1). Construction due to Pokutta and Schulz.

##### Parameters
 Int d the dimension
##### Returns
 Polytope
•
multiplex (d, n) → Polytope

Produce a combinatorial description of a multiplex with parameters d and n. This yields a self-dual d-dimensional polytope with n+1 vertices.

They are introduced by

T. Bisztriczky,
On a class of generalized simplices, Mathematika 43:27-285, 1996,

M.M. Bayer, A.M. Bruening, and J.D. Stewart,
A combinatorial study of multiplexes and ordinary polytopes,
Discrete Comput. Geom. 27(1):49--63, 2002.
##### Parameters
 Int d the dimension Int n
##### Returns
 Polytope
•
neighborly_cubical (d, n) → Polytope

Produce the combinatorial description of a neighborly cubical polytope. The facets are labelled in oriented matroid notation as in the cubical Gale evenness criterion.

See Joswig and Ziegler, Discr. Comput. Geom. 24:315-344 (2000).
##### Parameters
 Int d dimension of the polytope Int n dimension of the equivalent cube
##### Returns
 Polytope
•
newton (p) → Polytope<Rational>

Produce the Newton polytope of a polynomial p.

##### Parameters
 Polynomial p
##### Returns
 Polytope

Example:
• Create the newton polytope of 1+x^2+y like so:> local_var_names<Polynomial>(qw(x y)); $p=new Polynomial('1+x^2+y');>$n = newton($p);> print$n->VERTICES; 1 0 0 1 0 1 1 2 0
•
n_gon (n, r, alpha_0) → Polytope

Produce a regular n-gon. All vertices lie on a circle of radius r. The radius defaults to 1.

##### Parameters
 Int n the number of vertices Rational r the radius (defaults to 1) Rational alpha_0 the initial angle divided by pi (defaults to 0)
##### Options
 Bool group
##### Returns
 Polytope

Example:
• To store the regular pentagon in the variable $p and calculate its symmetry group, do this:>$p = n_gon(5,group=>1);> print $p->GROUP->RAYS_ACTION->GENERATORS; 0 4 3 2 1 1 2 3 4 0 • perles_irrational_8_polytope () → Polytope Create an 8-dimensional polytope without rational realizations due to Perles ##### Returns  Polytope • permutahedron (d) → Polytope Produce a d-dimensional permutahedron. The vertices correspond to the elements of the symmetric group of degree d+1. ##### Parameters  Int d the dimension ##### Options  Bool group ##### Returns  Polytope Example: • To create the 3-permutahedron and also compute its symmetry group, do this:>$p = permutahedron(3,group=>1);> print $p->GROUP->COORDINATE_ACTION->GENERATORS; 1 0 2 3 3 0 1 2 • perturbed_long_and_winding (r) → Polytope<PuiseuxFraction<Max, Rational, Rational> > Produce polytope in dimension 2r with 3r+2 facets such that the total curvature of the central path is at least Omega(2^r). This is a perturbed version of long_and_winding, which yields simple polytopes. ##### Parameters  Int r defining parameter ##### Options  Rational eval_ratio parameter for evaluating the puiseux rational functions Int eval_exp to evaluate at eval_ratio^eval_exp, default: 1 Float eval_float parameter for evaluating the puiseux rational functions ##### Returns  Polytope > Example: • This yields a simple 4-polytope over the field of Puiseux fractions.>$p = perturbed_long_and_winding(2);
•
pile (sizes) → Polytope

Produce a (d+1)-dimensional polytope from a pile of cubes. Start with a d-dimensional pile of cubes. Take a generic convex function to lift this polytopal complex to the boundary of a (d+1)-polytope.

##### Parameters
 Vector sizes a vector (s1,...,sd, where si specifies the number of boxes in the i-th dimension.
##### Returns
 Polytope
•
pseudo_delpezzo (d, scale) → Polytope<Scalar>

Produce a d-dimensional del-Pezzo polytope, which is the convex hull of the cross polytope together with the all-ones vector.

All coordinates are +/- scale or 0.

##### Parameters
 Int d the dimension Scalar scale the absolute value of each non-zero vertex coordinate. Needs to be positive. The default value is 1.
##### Returns
 Polytope
•
rand01 (d, n) → Polytope

Produce a d-dimensional 0/1-polytope with n random vertices. Uniform distribution.

##### Parameters
 Int d the dimension Int n the number of random vertices
##### Options
 Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Polytope
•
rand_box (d, n, b) → Polytope

Computes the convex hull of n points sampled uniformly at random from the integer points in the cube [0,b]d.

##### Parameters
 Int d the dimension of the box Int n the number of random points Int b the size of the box
##### Options
 Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Polytope
•
rand_cyclic (d, n) → Polytope

Computes a random instance of a cyclic polytope of dimension d on n vertices by randomly generating a Gale diagram whose cocircuits have alternating signs.

##### Parameters
 Int d the dimension Int n the number of vertices
##### Options
 Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Polytope
•
rand_metric <Scalar> (n) → Matrix

Produce an n-point metric with random distances. The values are uniformily distributed in [1,2].

##### Type Parameters
 Scalar element type of the result matrix
##### Parameters
 Int n
##### Options
 Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Matrix
•
rand_metric_int <Scalar> (n) → Matrix

Produce an n-point metric with random distances. The values are uniformily distributed in [1,2].

##### Type Parameters
 Scalar element type of the result matrix
##### Parameters
 Int n
##### Options
 Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.
##### Returns
 Matrix
•
rand_sphere (d, n) → Polytope

Produce a d-dimensional polytope with n random vertices uniformly distributed on the unit sphere.

##### Parameters
 Int d the dimension Int n the number of random vertices
##### Options
 Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome. Int precision Number of bits for MPFR sphere approximation
##### Returns
 Polytope
•

Produce a polytope of constrained expansions in dimension l according to

Rote, Santos, and Streinu: Expansive motions and the polytope of pointed pseudo-triangulations.
Discrete and computational geometry, 699--736, Algorithms Combin., 25, Springer, Berlin, 2003.
##### Parameters
 Int l ambient dimension
##### Returns
 Polytope
•
signed_permutahedron (d) → Polytope

Produce a d-dimensional signed permutahedron.

##### Parameters
 Int d the dimension
##### Options
 Bool group
##### Returns
 Polytope
•
simplex (d, scale) → Polytope

Produce the standard d-simplex. Combinatorially equivalent to a regular polytope corresponding to the Coxeter group of type Ad-1. Optionally, the simplex can be scaled by the parameter scale.

##### Parameters
 Int d the dimension Scalar scale default value: 1
##### Options
 Bool group
##### Returns
 Polytope

Examples:
• To print the vertices (in homogeneous coordinates) of the standard 2-simplex, i.e. a right-angled isoceles triangle, type this:> print simplex(2)->VERTICES; (3) (0 1) 1 1 0 1 0 1 The first row vector is sparse and encodes the origin.
• To create a 3-simplex and also calculate its symmetry group, type this:> simplex(3, group=>1);
•
stable_set (G) → Polytope

Produces the stable set polytope from an undirected graph G=(V,E). The stable set Polytope has the following inequalities: x_i + x_j <= 1 forall {i,j} in E x_i >= 0 forall i in V x_i <= 1 forall i in V with deg(i)=0

##### Parameters
 Graph G
##### Returns
 Polytope
•
transportation (r, c) → Polytope

Produce the transportation polytope from two vectors r of length m and c of length n, i.e. all positive m×n Matrizes with row sums equal to r and column sums equal to c.

##### Parameters
 Vector r Vector c
##### Returns
 Polytope
•
upper_bound_theorem (d, n) → Polytope

Produce combinatorial data common to all simplicial d-polytopes with n vertices with the maximal number of facets as given by McMullen's Upper-Bound-Theorem. Essentially this lets you read off all possible entries of the H_VECTOR and the F_VECTOR.

##### Parameters
 Int d the dimension Int n the number of points
##### Returns
 Polytope

Example:
• This produces the combinatorial data as mentioned above for 5 points in dimension 3 and prints the h-vector:> $p = upper_bound_theorem(3,5);> print$p->H_VECTOR; 1 2 2 1
•
zonotope (M) → Polytope<Scalar>

Create a zonotope from a matrix whose rows are input points or vectors.

This method merely defines a Polytope object with the property ZONOTOPE_INPUT_POINTS.

##### Parameters
 Matrix M input points or vectors
##### Options
 Bool rows_are_points true if M are points instead of vectors; default true Bool centered true if output should be centered; default true
##### Returns
 Polytope the zonotope generated by the input points or vectors

Examples:
• The following produces a parallelogram with the origin as its vertex barycenter:> $M = new Matrix([[1,1,0],[1,1,1]]);>$p = zonotope($M);> print$p->VERTICES; 1 0 -1/2 1 0 1/2 1 -1 -1/2 1 1 1/2
• The following produces a parallelogram with the origin being a vertex (not centered case):> $M = new Matrix([[1,1,0],[1,1,1]]);>$p = zonotope($M,centered=>0);> print$p->VERTICES; 1 1 0 1 0 0 1 1 1 1 2 1
•
zonotope_vertices_fukuda (M) → Matrix<E>

Create the vertices of a zonotope from a matrix whose rows are input points or vectors.

##### Parameters
 Matrix M
##### Options
 Bool centered_zonotope default 1
##### Returns
 Matrix

Example:
• The following stores the vertices of a parallelogram with the origin as its vertex barycenter and prints them:> $M = new Matrix([[1,1,0],[1,1,1]]);> print zonotope_vertices_fukuda($M); 1 0 -1/2 1 0 1/2 1 -1 -1/2 1 1 1/2
•

### Producing a vector configuration

A way of constructing vector configurations is to modify an already existing vector configuration.

•
free_sum (P1, P2) → VectorConfiguration

Construct the free sum of two vector configurations.

##### Parameters
 VectorConfiguration P1 VectorConfiguration P2
##### Options
 Bool force_centered if the input polytopes must be centered. Defaults to true. Bool no_coordinates produces a pure combinatorial description. Defaults to false.
##### Returns
 VectorConfiguration
•
projection <Scalar> (P, indices) → VectorConfiguration

Orthogonally project a vector configuration to a coordinate subspace.

The subspace the VectorConfiguration P is projected on is given by indices in the set indices. The option revert inverts the coordinate list.

##### Type Parameters
 Scalar coordinate type
##### Parameters
 VectorConfiguration P Array indices
##### Options
 Bool revert inverts the coordinate list
##### Returns
 VectorConfiguration
•
projection_preimage <Scalar> (P_Array) → VectorConfiguration

Construct a new vector configuration that projects to a given array of vector configurations If the n vector configurations are d_1, d_2, ..., d_n-dimensional and all have m vectors, the resulting vector configuration is (d_1+...+d_n)-dimensional, has m vectors, and the projection to the i-th d_i coordinates gives the i-th input vector configuration.

##### Type Parameters
 Scalar coordinate type
##### Parameters
 Array P_Array
##### Returns
 VectorConfiguration
•
project_full <Scalar> (P) → VectorConfiguration

Orthogonally project a vector configuration to a coordinate subspace such that redundant columns are omitted, i.e., the projection becomes full-dimensional without changing the combinatorial type.

##### Type Parameters
 Scalar coordinate type
##### Parameters
 VectorConfiguration P
##### Options
 Bool no_labels Do not copy VERTEX_LABELS to the projection. default: 0
##### Returns
 VectorConfiguration
•
project_out <Scalar> (V, B) → VectorConfiguration

Project a vector configuration V along the subspace with the given basis B. The result is still expressed in the original ambient basis. If V is a PointConfiguration and the first column of B is zero, the result is a PointConfiguration, else a VectorConfiguration.

##### Type Parameters
 Scalar coordinate type
##### Parameters
 VectorConfiguration V Matrix B a matrix whose rows contain the basis of the space to be projected out
##### Returns
 VectorConfiguration
•
project_out <Scalar> (C, B) → Cone

Project a Cone C along the subspace with the given basis B The result is still expressed in the original ambient basis. If V is a Polytope and the first column of B is zero, the result is a Polytope, else a Cone.

##### Type Parameters
 Scalar coordinate type
##### Parameters
 Cone C Matrix B a matrix whose rows contain the basis of the space to be projected out
##### Returns
 Cone
•
project_to <Scalar> (V, B) → VectorConfiguration

Project a vector configuration V to the subspace with a given basis B and express the result in that basis. A boolean flag make_affine (by default undef) determines whether the resulting coordinates acquire an extra leading '1'. The return type is a VectorConfiguration, unless (i) P is a PointConfiguration, (ii) the first column of B is zero, (iii) make_affine is not 0, in which case it is a PointConfiguration. The return type depends on the input: (1) If V is a VectorConfiguration, the result is also a VectorConfiguration. (2a) If V is a PointConfiguration and all rows in B start with a 0, the result is a PointConfiguration. If, furthermore, make_affine is undef, it is set to 1. (2b) If V is a PointConfiguration and some row of B has a non-zero first entry, the result is a VectorConfiguration. The reasoning here is that B having a zero first column or not influences the hyperplane at infinity.

##### Type Parameters
 Scalar coordinate type
##### Parameters
 VectorConfiguration V Matrix B a matrix whose rows contain the basis of the image space
##### Options
 Bool make_affine . If undef (default), apply the above reasoning. If 1 (0), unconditionally (don't) add leading 1's.
##### Returns
 VectorConfiguration or PointConfiguration
•
project_to <Scalar> (C, B) → Cone

Project a Polytope or Cone to the subspace with a given basis, and express the result in that basis A boolean flag make_affine (by default undef) determines whether the resulting coordinates acquire an extra leading '1'. The return type is a Cone, unless (i) P is a Polytope, (ii) the first column of B is zero, (iii) make_affine is not 0, in which case it is a Polytope. If make_affine is undef and (ii) is true, make_affine is set to 1. The reasoning here is that B having a zero first column or not influences the hyperplane at infinity.

##### Type Parameters
 Scalar coordinate type
##### Parameters
 Cone C Matrix B a matrix whose rows contain the basis of the image space
##### Returns
 Cone or Polytope
•

### Producing other objects

Functions producing big objects which are not contained in application polytope.

•
coxeter_group (type) → group::Group

Produces the Coxeter group of type type. The Dynkin diagrams of the different types can be found in the description of the clients simple_roots_type_*.

##### Parameters
 String type the type of the Coxeter group
##### Returns
 group::Group the Coxeter group of type type
•
crosscut_complex (p) → topaz::SimplicialComplex

Produce the crosscut complex of the boundary of a polytope.

##### Parameters
 Polytope p
##### Options
 Bool geometric_realization create a topaz::GeometricSimplicialComplex; default is true
##### Returns
 topaz::SimplicialComplex
•

### Producing regular polytopes and their generalizations

This includes the Platonic solids and their generalizations into two directions. In dimension 3 there are the Archimedean, Catalan and Johnson solids. In higher dimensions there are the simplices, the cubes, the cross polytopes and three other regular 4-polytopes.

•
archimedean_solid (s) → Polytope

Create Archimedean solid of the given name. Some polytopes are realized with floating point numbers and thus not exact; Vertex-facet-incidences are correct in all cases.

##### Parameters
 String s the name of the desired Archimedean solidPossible values:'truncated_tetrahedron'Truncated tetrahedron. Regular polytope with four triangular and four hexagonal facets. 'cuboctahedron'Cuboctahedron. Regular polytope with eight triangular and six square facets. 'truncated_cube'Truncated cube. Regular polytope with eight triangular and six octagonal facets. 'truncated_octahedron'Truncated Octahedron. Regular polytope with six square and eight hexagonal facets. 'rhombicuboctahedron'Rhombicuboctahedron. Regular polytope with eight triangular and 18 square facets. 'truncated_cuboctahedron'Truncated Cuboctahedron. Regular polytope with 12 square, eight hexagonal and six octagonal facets. 'snub_cube'Snub Cube. Regular polytope with 32 triangular and six square facets. The vertices are realized as floating point numbers. This is a chiral polytope. 'icosidodecahedron'Icosidodecahedon. Regular polytope with 20 triangular and 12 pentagonal facets. 'truncated_dodecahedron'Truncated Dodecahedron. Regular polytope with 20 triangular and 12 decagonal facets. 'truncated_icosahedron'Truncated Icosahedron. Regular polytope with 12 pentagonal and 20 hexagonal facets. 'rhombicosidodecahedron'Rhombicosidodecahedron. Regular polytope with 20 triangular, 30 square and 12 pentagonal facets. 'truncated_icosidodecahedron'Truncated Icosidodecahedron. Regular polytope with 30 square, 20 hexagonal and 12 decagonal facets. 'snub_dodecahedron'Snub Dodecahedron. Regular polytope with 80 triangular and 12 pentagonal facets. The vertices are realized as floating point numbers. This is a chiral polytope.
##### Returns
 Polytope

Example:
• To show the mirror image of the snub cube use:> scale(archimedean_solid('snub_cube'),-1)->VISUAL;
•
catalan_solid (s) → Polytope

Create Catalan solid of the given name. Some polytopes are realized with floating point numbers and thus not exact; Vertex-facet-incidences are correct in all cases.

##### Returns
 Polytope
•
cross <Scalar> (d, scale) → Polytope<Scalar>

Produce a d-dimensional cross polytope. Regular polytope corresponding to the Coxeter group of type Bd-1 = Cd-1.

All coordinates are +/- scale or 0.

##### Type Parameters
 Scalar Coordinate type of the resulting polytope. Unless specified explicitly, deduced from the type of bound values, defaults to Rational.
##### Parameters
 Int d the dimension Scalar scale the absolute value of each non-zero vertex coordinate. Needs to be positive. The default value is 1.
##### Options
 Bool group add a symmetry group description to the resulting polytope Bool character_table add the character table to the symmetry group description, if 0
##### Returns
 Polytope

Example:
• To create the 3-dimensional cross polytope, type> $p = cross(3); Check out it's vertices and volume:> print$p->VERTICES; 1 1 0 0 1 -1 0 0 1 0 1 0 1 0 -1 0 1 0 0 1 1 0 0 -1> print cross(3)->VOLUME; 4/3 If you rather had a bigger one, type> $p_scaled = cross(3,2);> print$p_scaled->VOLUME; 32/3 To also calculate the symmetry group, do this:> $p = cross(3,group=>1); You can then print the generators of this group like this:> print$p->GROUP->RAYS_ACTION->GENERATORS; 1 0 2 3 4 5 2 3 0 1 4 5 0 1 4 5 2 3
•
cube <Scalar> (d, x_up, x_low) → Polytope<Scalar>

Produce a d-dimensional cube. Regular polytope corresponding to the Coxeter group of type Bd-1 = Cd-1.

The bounding hyperplanes are xi <= x_up and xi >= x_low.

##### Type Parameters
 Scalar Coordinate type of the resulting polytope. Unless specified explicitly, deduced from the type of bound values, defaults to Rational.
##### Parameters
 Int d the dimension Scalar x_up upper bound in each dimension Scalar x_low lower bound in each dimension
##### Options
 Bool group add a symmetry group description to the resulting polytope Bool character_table add the character table to the symmetry group description, if 0
##### Returns
 Polytope

Examples:
• This yields a +/-1 cube of dimension 3 and stores it in the variable $c.>$c = cube(3);
• This stores a standard unit cube of dimension 3 in the variable $c.>$c = cube(3,0);
• This prints the area of a square with side length 4 translated to have its vertex barycenter at [5,5]:> print cube(2,7,3)->VOLUME; 16
•
cuboctahedron () → Polytope

Create cuboctahedron. An Archimedean solid.

##### Returns
 Polytope
•
dodecahedron () → Polytope

Create exact regular dodecahedron in Q(sqrt{5}). A Platonic solid.

##### Returns
 Polytope
•
icosahedron () → Polytope

Create exact regular icosahedron in Q(sqrt{5}). A Platonic solid.

##### Returns
 Polytope
•
icosidodecahedron () → Polytope

Create exact icosidodecahedron in Q(sqrt{5}). An Archimedean solid.

##### Returns
 Polytope
•
johnson_solid (n) → Polytope

Create Johnson solid number n, where 1 <= n <= 92. A Johnson solid is a 3-polytope all of whose facets are regular polygons. Some are realized with floating point numbers and thus not exact; yet VERTICES_IN_FACETS is correct in all cases.

##### Parameters
 Int n the index of the desired Johnson polytope
##### Returns
 Polytope
•
johnson_solid (s) → Polytope

Create Johnson solid with the given name. A Johnson solid is a 3-polytope all of whose facets are regular polygons. Some are realized with floating point numbers and thus not exact; yet VERTICES_IN_FACETS is correct in all cases.

##### Parameters
 String s the name of the desired Johnson polytopePossible values:'square_pyramid'Square pyramid with regular facets. Johnson solid J1. 'pentagonal_pyramid'Pentagonal pyramid with regular facets. Johnson solid J2. 'triangular_cupola'Triangular cupola with regular facets. Johnson solid J3. 'square_cupola'Square cupola with regular facets. Johnson solid J4. 'pentagonal_cupola'Pentagonal cupola with regular facets. Johnson solid J5. 'pentagonal_rotunda'Pentagonal rotunda with regular facets. Johnson solid J6. 'elongated_triangular_pyramid'Elongated triangular pyramid with regular facets. Johnson solid J7. 'elongated_square_pyramid'Elongated square pyramid with regular facets. Johnson solid J8. 'elongated_pentagonal_pyramid'Elongated pentagonal pyramid with regular facets. Johnson solid J9. The vertices are realized as floating point numbers. 'gyroelongated_square_pyramid'Gyroelongated square pyramid with regular facets. Johnson solid J10. The vertices are realized as floating point numbers. 'gyroelongated_pentagonal_pyramid'Gyroelongated pentagonal pyramid with regular facets. Johnson solid J11. 'triangular_bipyramid'Triangular bipyramid with regular facets. Johnson solid J12. 'pentagonal_bipyramid'Pentagonal bipyramid with regular facets. Johnson solid J13. The vertices are realized as floating point numbers. 'elongated_triangular_bipyramid'Elongated triangular bipyramid with regular facets. Johnson solid J14. 'elongated_square_bipyramid'Elongated square bipyramid with regular facets. Johnson solid J15. 'elongated_pentagonal_bipyramid'Elongated pentagonal bipyramid with regular facets. Johnson solid J16. The vertices are realized as floating point numbers. 'gyroelongated_square_bipyramid'Gyroelongted square bipyramid with regular facets. Johnson solid J17. The vertices are realized as floating point numbers. 'elongated_triangular_cupola'Elongted triangular cupola with regular facets. Johnson solid J18. The vertices are realized as floating point numbers. 'elongated_square_cupola'Elongted square cupola with regular facets. Johnson solid J19. 'elongated_pentagonal_cupola'Elongted pentagonal cupola with regular facets. Johnson solid J20 The vertices are realized as floating point numbers. 'elongated_pentagonal_rotunda'Elongated pentagonal rotunda with regular facets. Johnson solid J21. The vertices are realized as floating point numbers. 'gyroelongated_triangular_cupola'Gyroelongted triangular cupola with regular facets. Johnson solid J22. The vertices are realized as floating point numbers. 'gyroelongated_square_cupola'Gyroelongted square cupola with regular facets. Johnson solid J23. The vertices are realized as floating point numbers. 'gyroelongated_pentagonal_cupola'Gyroelongted pentagonal cupola with regular facets. Johnson solid J24. The vertices are realized as floating point numbers. 'gyroelongated_pentagonal_rotunda'Gyroelongted pentagonal rotunda with regular facets. Johnson solid J25. The vertices are realized as floating point numbers. 'gyrobifastigium'Gyrobifastigium with regular facets. Johnson solid J26. 'triangular_orthobicupola'Triangular orthobicupola with regular facets. Johnson solid J27. 'square_orthobicupola'Square orthobicupola with regular facets. Johnson solid J28. 'square_gyrobicupola'Square gyrobicupola with regular facets. Johnson solid J29. 'pentagonal_orthobicupola'Pentagonal orthobicupola with regular facets. Johnson solid J30. The vertices are realized as floating point numbers. 'pentagonal_gyrobicupola'Pentagonal gyrobicupola with regular facets. Johnson solid J31. The vertices are realized as floating point numbers. 'pentagonal_orthocupolarotunda'Pentagonal orthocupolarotunda with regular facets. Johnson solid J32. The vertices are realized as floating point numbers. 'pentagonal_gyrocupolarotunda'Pentagonal gyrocupolarotunda with regular facets. Johnson solid J33. The vertices are realized as floating point numbers. 'pentagonal_orthobirotunda'Pentagonal orthobirotunda with regular facets. Johnson solid J32. The vertices are realized as floating point numbers. 'elongated_triangular_orthbicupola'Elongated triangular orthobicupola with regular facets. Johnson solid J35. The vertices are realized as floating point numbers. 'elongated_triangular_gyrobicupola'Elongated triangular gyrobicupola with regular facets. Johnson solid J36. The vertices are realized as floating point numbers. 'elongated_square_gyrobicupola'Elongated square gyrobicupola with regular facets. Johnson solid J37. 'elongated_pentagonal_orthobicupola'Elongated pentagonal orthobicupola with regular facets. Johnson solid J38. The vertices are realized as floating point numbers. 'elongated_pentagonal_gyrobicupola'Elongated pentagonal gyrobicupola with regular facets. Johnson solid J39. The vertices are realized as floating point numbers. 'elongated_pentagonal_orthocupolarotunda'Elongated pentagonal orthocupolarotunda with regular facets. Johnson solid J40. The vertices are realized as floating point numbers. 'elongated_pentagonal_gyrocupolarotunda'Elongated pentagonal gyrocupolarotunda with regular facets. Johnson solid J41. The vertices are realized as floating point numbers. 'elongated_pentagonal_orthobirotunda'Elongated pentagonal orthobirotunda with regular facets. Johnson solid J42. The vertices are realized as floating point numbers. 'elongated_pentagonal_gyrobirotunda'Elongated pentagonal gyrobirotunda with regular facets. Johnson solid J43. The vertices are realized as floating point numbers. 'gyroelongated_triangular_bicupola'Gyroelongated triangular bicupola with regular facets. Johnson solid J44. The vertices are realized as floating point numbers. 'elongated_square_bicupola'Elongated square bicupola with regular facets. Johnson solid J45. The vertices are realized as floating point numbers. 'gyroelongated_pentagonal_bicupola'Gyroelongated pentagonal bicupola with regular facets. Johnson solid J46. The vertices are realized as floating point numbers. 'gyroelongated_pentagonal_cupolarotunda'Gyroelongated pentagonal cupolarotunda with regular facets. Johnson solid J47. The vertices are realized as floating point numbers. 'gyroelongated_pentagonal_birotunda'Gyroelongated pentagonal birotunda with regular facets. Johnson solid J48. The vertices are realized as floating point numbers. 'augmented_triangular_prism'Augmented triangular prism with regular facets. Johnson solid J49. The vertices are realized as floating point numbers. 'biaugmented_triangular_prism'Biaugmented triangular prism with regular facets. Johnson solid J50. The vertices are realized as floating point numbers. 'triaugmented_triangular_prism'Triaugmented triangular prism with regular facets. Johnson solid J51. The vertices are realized as floating point numbers. 'augmented_pentagonal_prism'Augmented prantagonal prism with regular facets. Johnson solid J52. The vertices are realized as floating point numbers. 'biaugmented_pentagonal_prism'Augmented pentagonal prism with regular facets. Johnson solid J53. The vertices are realized as floating point numbers. 'augmented_hexagonal_prism'Augmented hexagonal prism with regular facets. Johnson solid J54. The vertices are realized as floating point numbers. 'parabiaugmented_hexagonal_prism'Parabiaugmented hexagonal prism with regular facets. Johnson solid J55. The vertices are realized as floating point numbers. 'metabiaugmented_hexagonal_prism'Metabiaugmented hexagonal prism with regular facets. Johnson solid J56. The vertices are realized as floating point numbers. 'triaugmented_hexagonal_prism'triaugmented hexagonal prism with regular facets. Johnson solid J57. The vertices are realized as floating point numbers. 'augmented_dodecahedron'Augmented dodecahedron with regular facets. Johnson solid J58. The vertices are realized as floating point numbers. 'parabiaugmented_dodecahedron'Parabiaugmented dodecahedron with regular facets. Johnson solid J59. The vertices are realized as floating point numbers. 'metabiaugmented_dodecahedron'Metabiaugmented dodecahedron with regular facets. Johnson solid J60. The vertices are realized as floating point numbers. 'triaugmented_dodecahedron'Triaugmented dodecahedron with regular facets. Johnson solid J61. The vertices are realized as floating point numbers. 'metabidiminished_icosahedron'Metabidiminished icosahedron with regular facets. Johnson solid J62. 'tridiminished_icosahedron'Tridiminished icosahedron with regular facets. Johnson solid J63. 'augmented_tridiminished_icosahedron'Augmented tridiminished icosahedron with regular facets. Johnson solid J64. The vertices are realized as floating point numbers. 'augmented_truncated_tetrahedron'Augmented truncated tetrahedron with regular facets. Johnson solid J65. 'augmented_truncated_cube'Augmented truncated cube with regular facets. Johnson solid J66. 'biaugmented_truncated_cube'Biaugmented truncated cube with regular facets. Johnson solid J67. 'augmented_truncated_dodecahedron'Augmented truncated dodecahedron with regular facets. Johnson solid J68. The vertices are realized as floating point numbers. 'parabiaugmented_truncated_dodecahedron'Parabiaugmented truncated dodecahedron with regular facets. Johnson solid J69. The vertices are realized as floating point numbers. 'metabiaugmented_truncated_dodecahedron'Metabiaugmented truncated dodecahedron with regular facets. Johnson solid J70. The vertices are realized as floating point numbers. 'triaugmented_truncated_dodecahedron'Triaugmented truncated dodecahedron with regular facets. Johnson solid J71. The vertices are realized as floating point numbers. 'gyrate_rhombicosidodecahedron'Gyrate rhombicosidodecahedron with regular facets. Johnson solid J72. The vertices are realized as floating point numbers. 'parabigyrate_rhombicosidodecahedron'Parabigyrate rhombicosidodecahedron with regular facets. Johnson solid J73. The vertices are realized as floating point numbers. 'metabigyrate_rhombicosidodecahedron'Metabigyrate rhombicosidodecahedron with regular facets. Johnson solid J74. The vertices are realized as floating point numbers. 'trigyrate_rhombicosidodecahedron'Trigyrate rhombicosidodecahedron with regular facets. Johnson solid J75. The vertices are realized as floating point numbers. 'diminished_rhombicosidodecahedron'Diminished rhombicosidodecahedron with regular facets. Johnson solid J76. 'paragyrate_diminished_rhombicosidodecahedron'Paragyrate diminished rhombicosidodecahedron with regular facets. Johnson solid J77. The vertices are realized as floating point numbers. 'metagyrate_diminished_rhombicosidodecahedron'Metagyrate diminished rhombicosidodecahedron with regular facets. Johnson solid J78. The vertices are realized as floating point numbers. 'bigyrate_diminished_rhombicosidodecahedron'Bigyrate diminished rhombicosidodecahedron with regular facets. Johnson solid J79. The vertices are realized as floating point numbers. 'parabidiminished_rhombicosidodecahedron'Parabidiminished rhombicosidodecahedron with regular facets. Johnson solid J80. 'metabidiminished_rhombicosidodecahedron'Metabidiminished rhombicosidodecahedron with regular facets. Johnson solid J81. 'gyrate_bidiminished_rhombicosidodecahedron'Gyrate bidiminished rhombicosidodecahedron with regular facets. Johnson solid J82. The vertices are realized as floating point numbers. 'tridiminished_rhombicosidodecahedron'Tridiminished rhombicosidodecahedron with regular facets. Johnson solid J83. 'snub_disphenoid'Snub disphenoid with regular facets. Johnson solid J84. The vertices are realized as floating point numbers. 'snub_square_antisprim'Snub square antiprism with regular facets. Johnson solid J85. The vertices are realized as floating point numbers. 'sphenocorona'Sphenocorona with regular facets. Johnson solid J86. The vertices are realized as floating point numbers. 'augmented_sphenocorona'Augmented sphenocorona with regular facets. Johnson solid J87. The vertices are realized as floating point numbers. 'sphenomegacorona'Sphenomegacorona with regular facets. Johnson solid J88. The vertices are realized as floating point numbers. 'hebesphenomegacorona'Hebesphenomegacorona with regular facets. Johnson solid J89. The vertices are realized as floating point numbers. 'disphenocingulum'Disphenocingulum with regular facets. Johnson solid J90. The vertices are realized as floating point numbers. 'bilunabirotunda'Bilunabirotunda with regular facets. Johnson solid J91. 'triangular_hebesphenorotunda'Triangular hebesphenorotunda with regular facets. Johnson solid J92.
##### Returns
 Polytope
•
octahedron () → Polytope

Produce a regular octahedron, which is the same as the 3-dimensional cross polytope.

##### Returns
 Polytope
•
platonic_solid (s) → Polytope

Create Platonic solid of the given name.

##### Parameters
 String s the name of the desired Platonic solidPossible values:'tetrahedron'Tetrahedron. Regular polytope with four triangular facets. 'cube'Cube. Regular polytope with six square facets. 'octahedron'Octahedron. Regular polytope with eight triangular facets. 'dodecahedron'Dodecahedron. Regular polytope with 12 pentagonal facets. 'icosahedron'Icosahedron. Regular polytope with 20 triangular facets.
##### Returns
 Polytope
•
reduced (t, x, s, h, r) → Polytope<Rational>

Produce a 3-dimensional reduced polytope (for suitably chosen parameters). That is, a polytope of constant width which does not properly contain a subpolytope of the same width. Construction due to Bernardo González Merino, Thomas Jahn, Alexandr Polyanskii and Gerd Wachsmuth, arXiv:1701.08629

##### Parameters
 Rational t Rational x Rational s Rational h Rational r
##### Returns
 Polytope

Example:
• These values yield a reduced 3-polytope (approximately). The width equals 1.> $r = reduced(0.55, 0.6176490959800, 0.1351384931026, 0.0984300252409, 0.3547183586709); • regular_120_cell () → Polytope Create exact regular 120-cell in Q(sqrt{5}). ##### Returns  Polytope • regular_24_cell () → Polytope Create regular 24-cell. ##### Returns  Polytope • regular_600_cell () → Polytope Create exact regular 600-cell in Q(sqrt{5}). ##### Returns  Polytope • regular_simplex (d) → Polytope Produce a regular d-simplex embedded in R^d with edge length sqrt(2). ##### Parameters  Int d the dimension ##### Options  Bool group ##### Returns  Polytope Examples: • To print the vertices (in homogeneous coordinates) of the regular 2-simplex, i.e. an equilateral triangle, type this:> print regular_simplex(2)->VERTICES; 1 1 0 1 0 1 1 1/2-1/2r3 1/2-1/2r3 The polytopes cordinate type is QuadraticExtension<Rational>, thus numbers that can be represented as a + b*sqrt(c) with Rational numbers a, b and c. The last row vectors entrys thus represent the number 1/2*(1-sqrt(3)). • To store a regular 3-simplex in the variable$s and also calculate its symmetry group, type this:> $s = regular_simplex(3, group=>1); You can then print the groups generators like so:> print$s->GROUP->RAYS_ACTION->GENERATORS; 1 0 2 3 3 0 1 2
•
rhombicosidodecahedron () → Polytope

Create exact rhombicosidodecahedron in Q(sqrt{5}). An Archimedean solid.

##### Returns
 Polytope
•
rhombicuboctahedron () → Polytope

Create rhombicuboctahedron. An Archimedean solid.

##### Returns
 Polytope
•
root_system (type) → VectorConfiguration

Produce the root systems of the Coxeter arrangement of a given type The roots lie at infinity to facilitate reflecting in them.

##### Parameters
 String type the type of the Coxeter arrangement, for example A4 or E8
##### Returns
 VectorConfiguration
•
simple_roots_type_A (index) → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type A Indices are taken w.r.t. the Dynkin diagram 0 ---- 1 ---- ... ---- n-1 Note that the roots lie at infinity to facilitate reflecting in them, and are normalized to length sqrt{2}.

##### Parameters
 Int index of the arrangement (3, 4, etc)
##### Returns
 SparseMatrix
•
simple_roots_type_B (index) → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type B Indices are taken w.r.t. the Dynkin diagram 0 ---- 1 ---- ... ---- n-2 --(4)--> n-1 Note that the roots lie at infinity to facilitate reflecting in them, and are normalized to length sqrt{2}.

##### Parameters
 Int index of the arrangement (3, 4, etc)
##### Returns
 SparseMatrix
•
simple_roots_type_C (index) → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type C Indices are taken w.r.t. the Dynkin diagram 0 ---- 1 ---- ... ---- n-2 <--(4)-- n-1 Note that the roots lie at infinity to facilitate reflecting in them, and are normalized to length sqrt{2}.

##### Parameters
 Int index of the arrangement (3, 4, etc)
##### Returns
 SparseMatrix
•
simple_roots_type_D (index) → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type D Indices are taken w.r.t. the Dynkin diagram n-2 / 0 - 1 - ... - n-3 # n-1 Note that the roots lie at infinity to facilitate reflecting in them, and are normalized to length sqrt{2}.

##### Parameters
 Int index of the arrangement (3, 4, etc)
##### Returns
 SparseMatrix
•
simple_roots_type_E6 () → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type E6 Indices are taken w.r.t. the Dynkin diagram 3 | | 0 ---- 1 ---- 2 ---- 4 ---- 5 Note that the roots lie at infinity to facilitate reflecting in them.

##### Returns
 SparseMatrix
•
simple_roots_type_E7 () → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type E7 Indices are taken w.r.t. the Dynkin diagram 4 | | 0 ---- 1 ---- 2 ---- 3 ---- 5 ---- 6 Note that the roots lie at infinity to facilitate reflecting in them.

##### Returns
 SparseMatrix
•
simple_roots_type_E8 () → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type E8 Indices are taken w.r.t. the Dynkin diagram 5 | | 0 ---- 1 ---- 2 ---- 3 ---- 4 ---- 6 ---- 7 Note that the roots lie at infinity to facilitate reflecting in them.

##### Returns
 SparseMatrix
•
simple_roots_type_F4 () → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type F4 Indices are taken w.r.t. the Dynkin diagram 0 ---- 1 --(4)--> 2 ---- 3

##### Returns
 SparseMatrix
•
simple_roots_type_G2 () → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type G2 Indices are taken w.r.t. the Dynkin diagram 0 <--(6)-- 1

##### Returns
 SparseMatrix
•
simple_roots_type_H3 () → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type H3 Indices are taken w.r.t. the Dynkin diagram 0 --(5)-- 1 ---- 2 Note that the roots lie at infinity to facilitate reflecting in them, and are normalized to length 2

##### Returns
 SparseMatrix
•
simple_roots_type_H4 () → SparseMatrix

Produce the simple roots of the Coxeter arrangement of type H4 Indices are taken w.r.t. the Dynkin diagram 0 --(5)-- 1 ---- 2 ---- 3 Note that the roots lie at infinity to facilitate reflecting in them, and are normalized to length sqrt{2}

##### Returns
 SparseMatrix
•
tetrahedron () → Polytope

Create regular tetrahedron. A Platonic solid.

##### Returns
 Polytope
•
truncated_cube () → Polytope

Create truncated cube. An Archimedean solid.

##### Returns
 Polytope
•
truncated_cuboctahedron () → Polytope

Create truncated cuboctahedron. An Archimedean solid. This is actually a misnomer. The actual truncation of a cuboctahedron is normally equivalent to this construction, but has two different edge lengths. This construction has regular 2-faces.

##### Returns
 Polytope
•
truncated_dodecahedron () → Polytope

Create exact truncated dodecahedron in Q(sqrt{5}). An Archimedean solid.

##### Returns
 Polytope
•
truncated_icosahedron () → Polytope

Create exact truncated icosahedron in Q(sqrt{5}). An Archimedean solid. Also known as the soccer ball.

##### Returns
 Polytope
•
truncated_icosidodecahedron () → Polytope

Create exact truncated icosidodecahedron in Q(sqrt{5}). An Archimedean solid.

##### Returns
 Polytope
•
truncated_octahedron () → Polytope

Create truncated octahedron. An Archimedean solid. Also known as the 3-permutahedron.

##### Returns
 Polytope
•
wythoff (type, rings) → Polytope

Produce the orbit polytope of a point under a Coxeter arrangement with exact coordinates, possibly in a qudratic extension field of the rationals

##### Parameters
 String type single letter followed by rank representing the type of the arrangement Set rings indices of the hyperplanes corresponding to simple roots of the arrangement that the initial point should NOT lie on. You may specify just an integer or a perl array ref like [0,1] or [0..2].
##### Options
 Bool lattice Should the vertices of the orbit polytope be chosen to lie on the corresponding root lattice? default 0, which means that the vertices will instead be chosen to lie as symmetrically as possible.
##### Returns
 Polytope
•

### Quotient spaces

Topologic cell complexes defined as quotients over polytopes modulo a discrete group.

•
cs_quotient (P)

For a centrally symmetric polytope, divide out the central symmetry, i.e, identify diametrically opposite faces.

##### Parameters
 Polytope P , centrally symmetric

Example:
• > $P = cube(3);> cs_quotient($P);> print $P->CS_PERMUTATION; 7 6 5 4 3 2 1 0 The zeroth vertex gets identified with the seventh, the first with the sixth etc. • cylinder_2 () → Polytope Return a 2-dimensional cylinder obtained by identifying two opposite sides of a square. ##### Returns  Polytope Example: • To obtain a topological space homeomorphic to a cylinder, type>$p = cylinder_2();> print $p->QUOTIENT_SPACE->IDENTIFICATION_ACTION->GENERATORS; 2 3 0 1> print$p->QUOTIENT_SPACE->IDENTIFICATION_ACTION->ORBITS; {0 2} {1 3} Thus, vertices 0,2 and vertices 1,3 are identified.> print $p->QUOTIENT_SPACE->FACES; {{0} {1}} {{0 1} {0 2} {1 3}} {{0 1 2 3}} Thus, after identification two vertices, three edges, and one two-dimensional face remain:> print$p->QUOTIENT_SPACE->F_VECTOR; 2 3 1
•
davis_manifold () → Polytope

Return the 4-dimensional hyperbolic manifold obtained by Michael Davis

##### Returns
 Polytope [Proceedings of the AMS, Vol. 93, No. 2 (Feb., 1985), pp. 325-328] by identifying opposite faces of the 120-cell

Example:
• The Davis manifold is the centrally symmetric quotient of the regular 210-cell:> $d = davis_manifold();> print$d->F_VECTOR; 600 1200 720 120> print $d->QUOTIENT_SPACE->F_VECTOR; 300 600 360 60 1 • quarter_turn_manifold () → Polytope Return the 3-dimensional Euclidean manifold obtained by identifying opposite faces of a 3-dimensional cube by a quarter turn. After identification, two classes of vertices remain. ##### Returns  Polytope Example: • To obtain a topological space homeomorphic to the quarter turn manifold, type>$p = quarter_turn_manifold();> print $p->QUOTIENT_SPACE->IDENTIFICATION_ACTION->GENERATORS; 5 7 4 6 2 0 3 1 6 2 1 5 7 3 0 4 To see which vertices are identified, type> print$p->QUOTIENT_SPACE->IDENTIFICATION_ACTION->ORBITS; {0 3 5 6} {1 2 4 7} Thus, two classes of vertices remain, with 0 and 1 being representatives. To see the faces remaining after identification, type> print $p->QUOTIENT_SPACE->FACES; {{0} {1}} {{0 1} {0 2} {0 4} {0 7}} {{0 1 2 3} {0 1 4 5} {0 1 6 7}} {{0 1 2 3 4 5 6 7}}> print$p->QUOTIENT_SPACE->F_VECTOR; 2 4 3 1
•
write_quotient_space_simplexity_ilp ()

outputs a linear program whose optimal value is a lower bound for the number of simplices necessary to triangulate the polytope in such a way that its symmetries respect the triangulation of the boundary.

•

### Symmetry

These functions capture information of the object that is concerned with the action of permutation groups.

•
cocircuit_equations_support_reps (points, gens, rirs, rmis) → Int

write the indices of the representatives of the support of the cocircuit equations to a file

##### Parameters
 Matrix points Array> gens the generators of the action of the symmetry group Array rirs representatives of interior ridge simplices Array rmis representatives of maximal interior simplices
##### Options
 String filename where large output should go to. 'filename=>"-"' writes to stdout.
##### Returns
 Int
•
combinatorial_symmetries (p) → group::PermutationAction

Compute the combinatorial symmetries (i.e., automorphisms of the face lattice) of a given polytope p. They are stored in terms of a GROUP.VERTICES_ACTION and a GROUP.FACETS_ACTION property in p, and the GROUP.VERTICES_ACTION is also returned.

##### Parameters
 Polytope p
##### Returns
 group::PermutationAction the action of the combinatorial symmetry group on the vertices

Example:
• To get the vertex symmetry group of the square and print its generators, type the following:> print combinatorial_symmetries(cube(2))->GENERATORS; 2 3 0 1 1 0 2 3> $p = cube(2); combinatorial_symmetries($p);> print $p->GROUP->VERTICES_ACTION->GENERATORS; 0 2 1 3 1 0 3 2> print$p->GROUP->FACETS_ACTION->GENERATORS; 2 3 0 1 1 0 2 3
•
combinatorial_symmetrized_cocircuit_equations (P, comps)

calculate a sparse representation of the cocircuit equations corresponding to a direct sum of isotypic components

##### Parameters
 Cone P Set comps the list of indices of the isotypic components to project to; default [0], which amounts to summing all cocircuit equations corresponding to the orbit of each ridge.
•
combinatorial_symmetrized_cocircuit_equations (P, rirs, rmis, comps) → Array<Pair<SetType, HashMap<SetType,Rational>>>

calculate the projection of the cocircuit equations to a direct sum of isotypic components and represent it combinatorially

##### Parameters
 Cone P Array rirs representatives of interior ridge simplices Array rmis representatives of maximal interior simplices Set comps the list of indices of the isotypic components to project to; default [0], which amounts to summing all cocircuit equations corresponding to the orbit of each ridge.
##### Options
 String filename where large output should go to. 'filename=>"-"' writes to stdout.
##### Returns
 Array>> indexed_cocircuit_equations a list of interior ridge simplices together with the corresponding sparsely represented cocircuit equation
•
isotypic_configuration (P, i) → polytope::PointConfiguration<Float>

Given a polytope that has a matrix group acting on it, return the projections of the vertices to the i-th isotypic component C_i. If the input is a group with a permutation action a, regard a as acting on the unit basis vectors of the ambient space and return the projection of the unit basis vectors to the i-th isotypic component.

##### Parameters
 Polytope P a polytope with a matrix action, or a group::Group g with a permutation action Int i the index of the desired isotypic component
##### Returns
 polytope::PointConfiguration

Example:
• Consider the symmetry group of the cyclic polytope c(4,10) in the Carathéodory realization.> $p = cyclic_caratheodory(4,10,group=>1); For i=4, we obtain a 10-gon:> print isotypic_configuration($p,4)->POINTS; 1 1 0 1 0.8090169944 0.5877852523 1 0.3090169944 0.9510565163 1 -0.3090169944 0.9510565163 1 -0.8090169944 0.5877852523 1 -1 0 1 -0.8090169944 -0.5877852523 1 -0.3090169944 -0.9510565163 1 0.3090169944 -0.9510565163 1 0.8090169944 -0.5877852523 Similarly, for i=5 we get two copies of a pentagon.
•
lattice_automorphisms_smooth_polytope (P) → Array<Array<Int>>

Returns a generating set for the lattice automorphism group of a smooth polytope P by comparing lattice distances between vertices and facets.

##### Parameters
 Polytope P the given polytope
##### Returns
 Array> the generating set for the lattice automorphism group

Example:
• > print lattice_automorphisms_smooth_polytope(cube(2)); 2 3 0 1 1 0 3 2 0 2 1 3
•
linear_symmetries ()

wrapper function to store the symmetry group in the parent object

Contained in extension sympol.
•
linear_symmetries (m) → group::Group

Use sympol to compute the linear symmetries of - the rows of a rational matrix m, or - the RAYS|VERTICES, FACETS, or POINTS of a rational cone or polytope C (whatever is available, in this order), or - the VECTORS|POINTS of a rational vector or point configuration P. Except for matrices, the action of the symmetry group is stored inside the parent object. In the case of cones, sympol might compute only a subset of the linear symmetry group. Sympol, and therefore this function, can only handle rational objects.

Contained in extension sympol.
##### Parameters
 Matrix m | Cone C | VectorConfiguration P
##### Returns
 group::Group the linear symmetry group, together with a PERMUTATION_ACTION, VERTEX_ACTION, FACETS_ACTION, or VECTOR_ACTION

Example:
• > $ls = linear_symmetries(cube(2)->VERTICES);> print$ls->PERMUTATION_ACTION->GENERATORS; 0 2 1 3 3 1 2 0 2 3 0 1> print linear_symmetries(cube(3)->VERTICES)->PERMUTATION_ACTION->GENERATORS; 0 4 2 6 1 5 3 7 0 1 4 5 2 3 6 7 7 6 5 4 3 2 1 0 2 6 0 4 3 7 1 5> print linear_symmetries(cube(3))->FACETS_ACTION->GENERATORS; 1 0 2 3 4 5 0 1 3 2 4 5 2 3 0 1 4 5 0 1 2 3 5 4 0 1 4 5 2 3
•
nestedOPGraph (gen_point, points, lattice_points, group, verbose) → ARRAY

Constructs the NOP-graph of an orbit polytope. It is used by the rule for the NOP_GRAPH.

##### Parameters
 Vector gen_point the generating point Matrix points the vertices of the orbit polytope Matrix lattice_points the lattice points of the orbit polytope group::Group group the generating group Bool verbose print out additional information
##### Returns
 ARRAY ($Graph,$lp_reps, $minInStartOrbit, \@core_point_reps,$CPindices)
•
orbit_polytope (input_point, a) → Polytope

Constructs the orbit polytope of a given point input_point with respect to a given group action a.

##### Parameters
 Vector input_point the basis point of the orbit polytope group::PermutationAction a the action of a permutation group on the coordinates of the ambient space
##### Returns
 Polytope the orbit polytope of input_point w.r.t. the action a

Example:
• Another line segment containing only two lattice points:> $p = new Polytope(VERTICES=>[[1,0,0],[1,1,2]]);>$P = ambient_lattice_normalization($p,store_transform=>1);> print$P->VERTICES; 1 0 1 1 To get the transformation, do the following:> $M =$P->get_attachment('REVERSE_LATTICE_PROJECTION');> print $M; 1 0 0 0 1 2> print$P->VERTICES * $M; 1 0 0 1 1 2 • bound (P) → Polytope Make a positive polyhedron bounded. Apply a projective linear transformation to a polyhedron mapping the far hyperplane to the hyperplane spanned by the unit vectors. The origin (1,0,...,0) is fixed. The input polyhedron should be POSITIVE; i.e. no negative coordinates. ##### Parameters  Polytope P a positive polyhedron ##### Returns  Polytope Example: • Observe the transformation of a simple unbounded 2-polyhedron:>$P = new Polytope(VERTICES=>[[1,0,0],[0,1,1],[0,0,1]]);> print bound($P)->VERTICES; 1 0 0 1 1/2 1/2 1 0 1 As you can see, the far points are mapped to the hyperplane spanned by (1,1,0) and (1,0,1). • center (P) → Polytope Make a polyhedron centered. Apply a linear transformation to a polyhedron P such that a relatively interior point (preferably the vertex barycenter) is moved to the origin (1,0,...,0). ##### Parameters  Polytope P ##### Returns  Polytope Example: • Consider this triangle not containing the origin:>$P = new Polytope(VERTICES => [[1,1,1],[1,2,1],[1,1,2]]);> $origin = new Vector([1,0,0]);> print$P->contains_in_interior($origin); false To create a translate that contains the origin, do this:>$PC = center($P);> print$PC->contains_in_interior($origin); true This is what happened to the vertices:> print$PC->VERTICES; 1 -1/3 -1/3 1 2/3 -1/3 1 -1/3 2/3 There also exists a property to check whether a polytope is centered:> print $PC->CENTERED; true • orthantify (P, v) → Polytope Make a polyhedron POSITIVE. Apply an affine transformation to a polyhedron such that the vertex v is mapped to the origin (1,0,...,0) and as many facets through this vertex as possible are mapped to the bounding facets of the first orthant. ##### Parameters  Polytope P Int v vertex to be moved to the origin. By default it is the first affine vertex of the polyhedron. ##### Returns  Polytope Example: • To orthantify the square, moving its first vertex to the origin, do this:>$p = orthantify(cube(2),1);> print $p->VERTICES; 1 2 0 1 0 0 1 2 2 1 0 2 • orthonormal_col_basis (M) → Matrix<Float> Return an orthonormal column basis of the input matrix. ##### Parameters  Matrix M the input matrix ##### Returns  Matrix • orthonormal_row_basis (M) → Matrix<Float> Return an orthonormal row basis of the input matrix. ##### Parameters  Matrix M the input matrix ##### Returns  Matrix • polarize (C) → Cone This method takes either a polytope (1.) or a cone (2.) as input. 1. Given a bounded, centered, not necessarily full-dimensional polytope P, produce its polar with respect to the standard Euclidean scalar product. 2. Given a cone C produce its dual with respect to the standard Euclidean scalar product, i.e. all the vectors that evaluate positively on C. Note that the definition of the polar has changed after version 2.10: the polar is reflected in the origin to conform with cone polarization If P is not full-dimensional, the output will contain lineality orthogonal to the affine span of P. In particular, polarize() of a pointed polytope will always produce a full-dimensional polytope. If you want to compute the polar inside the affine hull you may use the pointed_part client afterwards. ##### Parameters  Cone C ##### Options  Bool no_coordinates only combinatorial information is handled ##### Returns  Cone Examples: • To save the polar of the square in the variable$p and then print its vertices, do this:> $p = polarize(cube(2));> print$p->VERTICES; 1 1 0 1 -1 0 1 0 1 1 0 -1
• To dualize the cone over a hexagon and print its rays, do this:> $c = new Cone(INPUT_RAYS=>[[1,0,0],[1,1,0],[1,2,1],[1,2,2],[1,1,2],[1,0,1]]);>$cd = polarize($c);> print$cd->RAYS; 1 -1 1 0 0 1 0 1 0 1 1 -1 1 0 -1/2 1 -1/2 0
•
revert (P) → Polytope

Apply a reverse transformation to a given polyhedron P. All transformation clients keep track of the polytope's history. They write or update the attachment REVERSE_TRANSFORMATION.

Applying revert to the transformed polytope reconstructs the original polytope.

##### Parameters
 Polytope P a (transformed) polytope
##### Returns
 Polytope the original polytope

Example:
• The following translates the square and then reverts the transformation:> $v = new Vector(1,2);>$p = translate(cube(2),$v);> print$p->VERTICES; 1 0 1 1 2 1 1 0 3 1 2 3> $q = revert($p);> print $q->VERTICES; 1 -1 -1 1 1 -1 1 -1 1 1 1 1 • scale (P, factor, store) → Polytope Scale a polyhedron P by a given scaling parameter factor. ##### Parameters  Polytope P the polyhedron to be scaled Scalar factor the scaling factor Bool store stores the reverse transformation as an attachment (REVERSE_TRANSFORMATION); default value: 1. ##### Returns  Polytope Example: • To scale the square by 23, do this:>$p = scale(cube(2),23);> print $p->VERTICES; 1 -23 -23 1 23 -23 1 -23 23 1 23 23 The transformation matrix is stored in an attachment:> print$p->get_attachment('REVERSE_TRANSFORMATION'); 1 0 0 0 1/23 0 0 0 1/23 To reverse the transformation, you can use the revert function.> $q = revert($p);> print $q->VERTICES; 1 -1 -1 1 1 -1 1 -1 1 1 1 1 • transform (P, trans, store) → Polytope Transform a polyhedron P according to the linear transformation trans. ##### Parameters  Polytope P the polyhedron to be transformed Matrix trans the transformation matrix Bool store stores the reverse transformation as an attachment (REVERSE_TRANSFORMATION); default value: 1. ##### Returns  Polytope Example: • This translates the square by (23,23) and stores the transformation:>$M = new Matrix([1,23,23],[0,1,0],[0,0,1]);> $p = transform(cube(2),$M,1);> print $p->VERTICES; 1 22 22 1 24 22 1 22 24 1 24 24 To retrieve the attached transformation, use this:> print$p->get_attachment('REVERSE_TRANSFORMATION'); 1 -23 -23 0 1 0 0 0 1 Check out the revert function to learn how to undo the transformation. It might be more comfortable to use the translate function to achieve the same result.
•
translate (P, trans, store) → Polytope

Translate a polyhedron P by a given translation vector trans.

##### Parameters
 Polytope P the polyhedron to be translated Vector trans the translation vector Bool store stores the reverse transformation as an attachment (REVERSE_TRANSFORMATION); default value: 1.
##### Returns
 Polytope

Example:
• This translates the square by (23,23) and stores the transformation:> $t = new Vector(23,23);>$p = translate(cube(2),$t);> print$p->VERTICES; 1 22 22 1 24 22 1 22 24 1 24 24 To retrieve the attached transformation, use this:> print \$p->get_attachment('REVERSE_TRANSFORMATION'); 1 -23 -23 0 1 0 0 0 1 Check out the revert function to learn how to undo the transformation.
•
vertex_lattice_normalization (p) → Polytope

Transform to a full-dimensional polytope while preserving the lattice spanned by vertices induced lattice of new vertices = Z^dim

##### Parameters
 Polytope p the input polytope,
##### Options
 Bool store_transform store the reverse transformation as an attachement
##### Returns
 Polytope - the transformed polytope defined by its vertices. Facets are only written if available in p.
•

### Triangulations, subdivisions and volume

These functions collect information about triangulations and other subdivisions of the object and properties usually computed from such, as the volume.

•
barycentric_subdivision (c) → topaz::SimplicialComplex

Create a simplicial complex as a barycentric subdivision of a given cone or polytope. Each vertex in the new complex corresponds to a face in the old complex.

##### Parameters
 Cone c input cone or polytope
##### Options
 Bool no_labels Do not generate VERTEX_LABELS from the faces of the original cone. default: 0 Bool geometric_realization create a topaz::GeometricSimplicialComplex; default is true
##### Returns
 topaz::SimplicialComplex
•
chirotope (P) → String

Compute the chirotope of a polytope using TOPCOM.

##### Parameters
 Polytope P
##### Returns
 String
•
chirotope (P) → String

Compute the chirotope of a point or vector configuration using TOPCOM.