There are various means to obtain new objects without having to type the data in a new file manually. Application topaz defines many standard construction and transformation algorithms. Unfortunately, due to the preliminary state of `polymake` reconstruction, we can't supply a uniform, comfortable function-like interface to all of them. At the moment you still have to call the construction clients as separate programs from the shell command line.

## Producing from scratch

With these clients you can create simplicial complexes belonging to various parameterized families.

ball <file> <dimension>
Produce a d-ball.
cube_complex <file> <x_1> <x_2> .. <x_d>
Produces a triangulated pile of hyper cubes: Each cube is split into d! tetrahedra, and the tetrahedra are all grouped around one of the diagonal axes of the cube.
klein_bottle <file>
The Klein bottle.
projective_plane <file>
The projective plane.
sphere <file> <dimension>
Produce a d-sphere.
surface <file> <genus>
Produce a surface of genus g. For g >= 0 the client produces an orientable surface, otherwise it produces an nonorientable one.
torus <file>
The torus.

## Producing a new simplicial complex from others

Another important way of constructing simplicial complexes is to modify an already existing one. Actually, these clients don't alter the input file, but create a copy and modify it.

The clients try to preserve existing vertex labels or choose the new labels according to the old ones to help you keep track of special vertices throughout a series of constructions. You may suppress the labeling of the vertices of the new complex by using the -nol flag if it is of no interest to you.

alexander_dual <out_file> <in_file> [ -nol ]
Computes the Alexander dual complex, that is the complements of all non-faces.
The vertex labels are preserved unless the -nol flag is specified.
barycentric_subdivision <out_file> <in_file> [ -relabel ] [ -geom_real ]
Create a simplicial complex as a barycentric subdivision of a given complex. Each vertex in the new complex corresponds to a face in the old complex.
The option -relabel creates an additional section VERTEX_LABELS. The labels are, most naturally, the faces of the original complex.
The option -geom_real reads the GEOMETRIC_REALIZATION of the input complex, computes the coordinates of the new vertices and stores them in
GEOMETRIC_REALIZATION of the produced complex.
bistellar <out_file> <in_file> [ -rounds <r> -abs -obj {0|1|2} -relax <r> -heat <h> -constant -allow_rev_move -verbose <r> -seed <s> -quiet -distribution s_(dim+1)/2 .. s_dim ]
Heuristic for simplifying the triangulation of the given manifold without changing the represented topological space. The client uses bistellar flips and a simulated annealing strategy.
You may specify the maximal number of -rounds, how often the system may -relax before heating up and how much -heat should be applied. The client stops computing, once the size of the triangulation has not decreased for -rounds iterations. If the -abs flag is set, the client stops after -rounds iterations regardless of when the last improvement took place.
If you want to influence the distribution of the dimension of the moves when warming up you may do so by specifying a -distribution. The number of values in -distribution determine the dimensions used for heating up. The heating and relaxing parameters decrease dynamically unless the -constant flag is set. The client prohibits to execute the reversed move of a move directly after the move itself unless the -allow_rev_move flag is set.
If you are interested in how the process is coming on, try the -verbose option. It specifies after how many rounds the current best result is displayed.
The -obj determines the objective function used for the optimization. If -obj is set to 0, the client searches for the triangulation with the lexicographically smallest f-vector, if -obj is set to 1, the client searches for the triangulation with the reversed-lexicographically smallest f-vector and if -obj is set to 2 the sum of the f-vector entries is used. The default is 0.
cone <out_file> <in_file> <in_complex_section> [ <k> ] [ -l <l_1> <l_2> ... ] [ -nol ]
Produce the k-cone over a given simplicial complex.
Default for the parameter k is 1.
The option -l specifies how to label the apex vertices. Default labels have the form `apex_0, apex_1, ...` . In the case the input complex has already vertex labels of this kind, the duplicates are avoided.
The -nol flag tells the client not to write any labels at all.
connected_sum <out_file> <in_file_1> <in_file_2> [ <f_1> [ <f_2> ] ] [ -p <p_1> ... <p_n> ] [ -nol ]
Compute the connected sum of two complexes.
Parameters f_1 and f_2 specify which facet of the first and second complex correspondingly are glued together. Default is the 0-th facet of both.
The vertices in the selected facets are identified with each other according to their order in the facet (that is, in icreasing index order). The option -p allows to get an alternative identification. It should specify a permutation of the vertices of the second facet. If the permutation contains contiguous sequences, they can be shortened as n_1 ... n_2 (perl lovers might use just two points.) For example, (7 2 ... 4 12) = (7 2 3 4 12).
The vertices of the new complex get the original labels with _1 or _2 appended, according to the input complex they came from. If you specify the -nol flag, the label generation will be omitted.
deletion <out_file> <in_file> { -v <v_1> <v_2>...<v_i> ... | -l <l_1> <l_2> ... } [ -nol ]
Removes the vertex star of a given face, specified by it's vertices.
Vertices can be specified by their indices (using the -v option) or by their labels (using the -l option). Indices may be specified individually or as a sequence. e.g. {1 7...9 20} = {1 7 8 9 20}. (perl lovers might use just two points to indicate a sequence.)
The -nol flag tells the client not to write any labels.
disjoint_union <out_file> <in_file_1> <in_file_2> [ -nol ]
Produce the union of the two given complexes.
The vertex labels are built from the original labels with a suffix _1 or _2 appended.
The -nol flag skips the label generation.
extract_subcomplex <out_file> <in_file> <subcomplex_section> [ -geom_real ] [ -nol ]
Extracts a subcomplex of a given complex and creates a new complex. The indices of the selected vertices have to be stored as an ordered set in a separate file section subcomplex_section.
The vertex labels are preserved unless the -nol flag is specified.
The -geom_real flag tells the client to inherit the GEOMETRIC_REALIZATION.
glue_induced_subcomplexes <out_file> <in_file> <glueing_section> [ -nol ]
The new complex is produced by replacing all vertices from each glueing set by one representative and removing all redundancies.
The glueing sets have to be stored in a separate file section glueing_section as an array of sets of vertex indices. If two sets are not disjoint, their union serves as a single glueing set instead, thus providing transitivity. Vertices not contained in any glueing set are considered to be in a glueing set by themselves, therefore will not be glued at all.
The labels of the new vertices are the original labels of the representative vertices (that is, with the smallest index) of their glueing sets.
The -nol flag skips the label creation.
h_induced_quotient <out_file> <in_file> [ apex ] { -v <v_1> <v_2>...<v_i> ... | -l <l_1> <l_2> ... } [ -nol ]
Let C be the given simplicial complex and A the subcomplex induced by the given vertices. Then this client produces a simplicial complex homotopy equivalent to C mod A, by adding the cone over A with apex a to C.
The apex a may be specified (by its label) and vertices can be specified by their indices (using the -v option) or by their labels (using the -l option). Indices may be specified individually or as a sequence. e.g. {1 7...9 20} = {1 7 8 9 20}. (perl lovers might use just two points to indicate a sequence.)
The -nol flag tells the client not to write any labels.
induced_subcomplex <out_file> <in_file> { -v <v_1> <v_2>...<v_i> ... | -l <l_1> <l_2> ... } [ -geom_real ] [ -nol ]
Produce the subcomplex consisting of all faces which are contained in the given vertices.
Vertices can be specified by their indices (using the -v option) or by their labels (using the -l option). Indices may be specified individually or as a sequence. e.g. {1 7...9 20} = {1 7 8 9 20}. (perl lovers might use just two points to indicate a sequence.)
The -nol flag tells the client not to write any labels.
The -geom_real flag tells the client to inherit the GEOMETRIC_REALIZATION.
k_skeleton <out_file> <in_file> <k> [ -geom_real ] [ -nol ]
Produce the k-skeleton.
The -nol flag tells the client not to write any labels.
stellar_subd_face <out_file> <in_file> { -v <v_1> <v_2>...<v_i> ... | <faces_section> } [ -nol ] [ -geom_real ]
Stellar subdivides either the face specified by the command line input or all faces specified in the <faces_section>.
suspension <out_file> <in_file> <in_complex_section> [ <k> ] [ -l <l_1+> <l_1-> <l_2+> <l_2-> ... ] [ -nol ]
Produce the k-suspension over a given simplicial complex.
Default for the parameter k is 1.
The labels of the apexes may be specified. In case too few apexes are specified the client labels the remaining ones apex_0+, apex_0-, apex_1+, apex_1-, ... . In case one of the labels exists already, the client chooses a unique one by appending _i where i is the smallest integer which makes the label unique.
The -nol flag tells the client not to write any labels.
t_balanced_prism <out_file> <in_file> [ -geom_real ]
Produce a prism over a given simplicial complex.
t_join <out_file> <in_file_1> <in_file_2> [ -nol ]
Produce the join of the two given complexes.
The vertex labels are built from the original labels with a suffix _1 or _2 appended.
The -nol flag tells the client not to write any labels.
t_link <out_file> <in_file> { -v <v_1> <v_2>...<v_i> ... | -l <l_1> <l_2> ... } [ -nol ]
Produce the link of the face specified by the given vertices.
Vertices can be specified by their indices (using the -v option) or by their labels (using the -l option). Indices may be specified individually or as a sequence. e.g. {1 7...9 20} = {1 7 8 9 20}. (perl lovers might use just two points to indicate a sequence.)
The -nol flag tells the client not to write any labels.
t_simplicial_product <out_file> <in_file_1> <in_file_2> [ <vertex_order_section1> [ <vertex_order_section1> ] ] [ -nol ] [ -geom_real ] [ -collor_cons ]
Computes the simplicial product of two complexes.
Vertexorderings may be given by specifying sections.
t_star <out_file> <in_file> { -v <v_1> <v_2>...<v_i> ... | -l <l_1> <l_2> ... } [ -nol ]
Produce the star of the face specified by the given vertices.
Vertices can be specified by their indices (using the -v option) or by their labels (using the -l option). Indices may be specified individually or as a sequence. e.g. {1 7...9 20} = {1 7 8 9 20}. (perl lovers might use just two points to indicate a sequence.)
The -nol flag tells the client not to write any labels.
t_union <out_file> <in_file_1> <in_file_2> [ -nol ]
Produce the union of the two given complexes, identifying vertices with equal labels.
The -nol flag tells the client not to write any labels.

## Producing a simplicial complex from other objects

boundary_complex <out_file> <in_file> [ -noc ]
Produce the boundary complex which arises out of a triangulation of the boundary of polytope.
If the -noc flag is set, no coordinates for the GEOMETRIC_REALIZATION will be written.
This client lives in between the applications poly and topaz. Since it produces a simplicial complex (from a polytope), it is counted as a client for the topaz application.
crosscut_complex <out_file> <in_file> [ -noc ]
Produce the crosscut complex which arises out of a triangulation of the boundary of polytope.
If the -noc flag is set, no coordinates for the GEOMETRIC_REALIZATION will be written.
This client lives in between the applications poly and topaz. Since it produces a simplicial complex (from a polytope), it is counted as a client for the topaz application.
flag_complex <out_file> <in_file> <graph_section> [ -nol ]
Produce the flag_complex of a given graph.
The -nol flag tells the client not to write any labels.
surf2top <out_file> <in_file> [ -noc ] [ -nol ]
Produce a simplicial complex from a surface by triangulating each n-gon.
If the -noc flag is set, no coordinates for the GEOMETRIC_REALIZATION will be written.
This client lives in between the applications surface and topaz. Since it produces a simplicial complex (from a surface), it is counted as a client for the topaz application.
triangulation_complex <out_file> <in_file> [ -noc ]
Produce the complex which arises out of a triangulation of the polytope.
If the -noc flag is set, no coordinates for the GEOMETRIC_REALIZATION will be written.
This client lives in between the applications poly and topaz. Since it produces a simplicial complex (from a polytope), it is counted as a client for the topaz application.

## Consistency checks

facets_consistency <file> [ <complex_section> [ -auto ] ]
Verifies whether a complex has any redundandent facets, whether the facets are ordered sets and if the vertices are numbered 0..n-1.
The default for the complex_section is FACETS.
If the -auto flag is set the client writes the correct facets into FACETS and the old numbering (if the numbering has changed at all) into VERTEX_LABELS. The complex_section must not equal FACETS.
labels_consistency <file>
Verifies whether the VERTEX_LABELS are unique and that their size matches N_VERTICES

## Other

is_vert_dec <file> <shedding_vertices_section>
Check whether a given ordered subset of the vertex set is a vertex decomposition.
The client works for 1-, 2- and 3-manifolds only!
projectivities <file> <proj_orbits_section> <proj_dictionary_section>
Computes the orbits of the group of projectivities.

## Clients for internal use

These clients are called by `polymake` automatically via the rules. They compute some new properties of an object. You will hardly ever need to call them directly. They are documented here first of all for the sake of completeness.

bipartite <file> <graph_section> <bipartite_section> [ <signature_section> ]
Determine whether an undirected graph is bipartite.
connected <file> <graph_section> <connected_section>
Determine whether an undirected graph is connected.
connected_comp <file> <graph_section> <connected_comp_section>
Computes the connected components. The connected components are encoded by their node sets.
connectivity <file> <graph_section> <connectivity_section>
Compute the connectivity of a given graph using the Ford-Fulkerson flow algorithm.
diameter <file> <graph_section> <diameter_section>
Compute the diameter of an undirected graph.
edge_lengths <file> <coords_section> <graph_section> <result_section> [ -redirect ]
Compute the lenghts of all edges of a given graph with assigned coordinates for the nodes. If the -redirect option is set then it is assumed that the graph has indices as node attributes which point into the coordinate section.
greedy_coloring <file> <graph_section> <coloring_section>
Computes a coloring.
hd_embedder <file> <hd_section> <embedding_section> <label_width_section> { -primal | -dual }
Create an embedding of the Hasse diagram as a layered graph.
The embedding algorithm tries to minimize the weighted sum of squares of edge lengths, starting from a random distribution. The weights are relative to the fatness of the layers.
The y-space between the layers is constant; in the -primal mode the whole-lattice node is placed on the top, in the -dual mode it is the empty node.
label_width_section should contain estimates (better upper bounds) of the label width of each node. The computed layout guarantees that the distances between the nodes in a layer are at least equal to the widest label in this layer.
eps is the calculation accuracy.
option seed effects the initial placement of the nodes.
induced_subgraph <file> <graph_section> <subgraph_nodes_section> <subgraph_section> [ -nol ]
Compute the subgraph induced by a given set of nodes.
max_cliques <file> <max_cliques_section> <graph_section>
Computes all inclusion maximal cliques of a graph.
se_interactive <file.poly> <port> [ -objective <section> -read-edge-weights -seed <s> -max-iterations <n> {-eps,-scale,-balance,-viscosity,-inertion,-objective-factor} <x> ... ]
Driver for interactive graph visualization
spring_embedder <file> <graph_section> <embedding_section>
Produce a 3-d embedding for the graph using the spring embedding algorithm along the lines of Thomas Fruchtermann and Edward Reingold: Graph Drawing by Force-directed Placement. Software Practice and Experience Vol. 21, 1129-1164 (1992), no. 11
The initial node coordinates are chosen randomly on the unit sphere. The optional parameter seed controls the initial setting.
In the standard setting, the embedding algorithm tries to stretch all edges to the same length. If you prefer different edge lengths, store them as the edge attributes of the input graph, and put the -read-edge-weights option on the command line.
If the nodes already have an embedding in Rd and there is a linear objective function defined in the coordinate space, it can be used to rearrange the 3-d embedding along the z-axis corresponding to the objective function growth. This mode is enabled with option objective.
The embedding algorithm can be fine-tuned with several "black magic" options. All of them take double values, which are multiplied with internal initial settings, so all defaults are equal to 1.
scale enlarges the ideal edge length. balance changes the balance between the edge contraction and node repulsion forces. inertion and viscosity affects how the nodes are moved, and can be used to restrain oscillations. objective-factor changes the relative influence of the linear objective function on the embedding. eps controls how far a point may move, to be considered standing still.
triangle_free <file> <graph_section> <triangle_free_section>
Determine whether a (possibly directed) graph has triangles or not.
boundary_of_pseudo_manifold <file> <boundary_section>
Produce the boundary (= ridges contained in one facet only) of a PSEUDO_MANIFOLD.
faces_to_facets <file> <input_section>
Consistency check and redundancy removal.
facets_from_hasse_diagram <file>
Extracts the facets of a hasse diagram
fundamental_group <file>
Calculate a finite representation of the fundamental group, which may easily be treated with GAP.
intersection_form <file> <cycle_section> <cocycle_section> <intersection_form_section>
Calculate the parity and the signature of the intersection form of an oriented 4-manifold.
is_ball <file>
Check whether a complex is a ball. The client works for balls of dim 2 or smaller only.
is_ball_h <file> [ -seed <s> -strategy {0|1} -stable_rounds <r> -quiet ]
Heuristic to determin if a complex is a ball.
is_ball_or_sphere <file>
Check whether a complex is a ball or sphere. The client works for manifolds of dim 2 or smaller only.
is_ball_or_sphere_h <file> [ -seed <s> -strategy {0|1} -stable_rounds <r> -quiet ]
Heuristic to determin if a complex is a ball or a ball or a sphere.
is_closed_pseudo_manifold <file>
Check whether a complex is a closed pseudo-manifold.
is_locally_strongly_connected <file> [ -all -quiet ]
Check whether a complex is locally strongly connected.
The -all flag tells the client to compute all faces with non strongly connected star.
is_manifold <file> [ -quiet ]
Check whether a complex is a manifold. The client works for manifolds of dim 3 or smaller only.
is_manifold_h <file> [ -seed <s> -strategy {0|1} -stable_rounds <r> -quiet ]
Heuristic to determin if a complex is a manifold.
is_pseudo_manifold <file>
Check whether a complex is a pseudo_manifold.
is_sphere <file>
Check whether a complex is a sphere. The client works for spheres of dim 2 or smaller only.
is_sphere_h <file> [ -seed <s> -strategy {0|1} -stable_rounds <r> -quiet ]
Heuristic to determin if a complex is a sphere.
lawler <file>
Produces the minimal (with respect to inclusion) non-faces of a simplicial complex. Only the facets of the complex are used as input, i.e., no hasse diagram is computed.
This implements an old algorithm described by Lawler: "Covering problems: duality relations and a new method of solution" SIAM J. Appl. Math., Vol. 14, No. 5, 1966
See also Chapter 2 of "Hypergraphs", C. Berge, North-Holland, Amsterdam, 1989
8/23/2002
minimal_non_faces <file>
Find the inclusion-minimal non-faces of a complex.
morse_matching <file> [ {-greedy, -cancel, -both} {-top, -bottom, -bottomtop} ]
Input: simplicial complex given by its Hasse diagram
Output: a Morse matching
This client computes a Morse matching. Two heuristics are implemented:
- A simple greedy algorithm: The arcs are visited in lexicographical order, i.e.:
we proceed by levels from top to bottom, visit the faces in each dimension in lexicographical order, and visited the faces covered by these faces in lexicographical order.
This heuristic is used with no options and with "-greedy".
- A Morse matching can be improved by canceling critical cells along unique alternating paths, see function processAlternatingPaths() in file morse_matching_tools.h. This idea is due to Robin Forman:
Morse Theory for Cell-Complexes, Advances in Math., 134 (1998), pp. 90-145.
This heuristic is used with no options and with "-cancel".
The default setting is to run the greedy algorithm and then improve the result by the canceling algorithm, i.e., option "-both" is the default.
Morse matchings for the bottom level can be found optimally by spanning tree techniques. This can be enabled by the option "-bottom". If the complex is a pseudo-manifold the same can be done for the top level (option "-top"). By specifying option "-bottomtop", both levels can be computed by spanning trees. For 2-dim pseudo-manifolds this computes an optimal Morse matching.
morse_matching_critical_faces <file>
Input: Morse matching
Output: list of critical faces and for each dimension: number of critical faces
morse_matching_n_critical_faces <file>
Input: Morse matching
Output: number of critical cells in Morse matching
morse_matching_size <file>
Input: Morse matching
Output: size of the Morse matching
odd_complex <file>
Find all faces of co-dimension -2 which have a non bipartied link.
odd_complex_of_manifold <file>
Find all faces of co-dimension -2 of which have a non bipartied link.
orientation <file>
Determines whether a PSEUDO_MANIFOLD is orientable and computes a consistent orientation.
stiefel_whitney <file> <out_section> [-v] [<dim_low> [<dim_high>]]
Computes Stiefel-Whitney classes of mod 2 Euler space (in particular, closed manifold). Use option "-v" to show regular pairs and cycles.
A narrower dimension range of interest can be specified. Negative values are treated as co-dimension - 1.
t_dual_graph <file>
Produce the dual graph of a simplicial complex.
t_f_vector <file>
Produce the f-vector of a simplicial complex.
t_graph <file>
Produces the graph of a simplicial complex.
t_hasse_diagram <file> [ -pure ]
Produce the Hasse Diagram of a simplicial complex.
t_homology <file> <complex_section> <homology_section> [-co] [ <cycle_section> | <dim_high> <dim_low> ]
Calculate the homology groups and, optionally, cycle representatives of a simplicial complex.
A narrower dimension range of interest can be specified. Negative values are treated as co-dimension - 1.
With option -co, cohomologies and cocycles will be computed.
t_mixed_graph <file> [ -weighted <mixed_edge_weight> ]
Produces the mixed graph of a simplicial complex.
t_signature <file>
Determine the signature of a embedded simplicial complex.
t_staircase <file> <m> <n>
Produce the staircase triangulation of the product of simplices Delta_m x Delta_n.
t_volume <file>
Compute the volume of a simplicial complex.