application: common
This artificial application gathers functionality shared by many "real" applications. While most users can probably do without looking into this, you may find some useful functions here.
Objects
-
Category: Combinatorics
Base class for permutations of `big' objects
Properties of PermBase
- PERMUTATION: Array<Int>
Mapping of features stored in this subobject onto their order in the parent (non-permuted) object. The features to be permuted can be any discrete objects with identity imparted by their involvement in a larger structure, like graph nodes, cone rays, facets, complex celles, etc.
-
Category: Visualizationderived from: Visual::Object
The common base class of all visual objects composed of several simpler objects. Instances of such classes can carry default decoration attributes applied to all contained objects.
-
Category: Visualization
The common base class of all visualization artifacts produced by various user methods like VISUAL, VISUAL_GRAPH, SCHLEGEL, etc. Visual objects can be passed to functions explicitly calling visualization software like jreality() or povray().
User Functions
-
db_get_type_information ()
20171204: Made type_information_key undef by default to allow users to pass the key "default" explicitly, otherwise default keys have the form "default.<collection>" as there may be more than one collection in the db with a default type information entry
-
db_print_searchable_fields ()
UNDOCUMENTED
-
These are functions that perform arithmetic computations.
-
denominator (a) → Integer
-
denominator (f) → Polynomial
-
denominator (f) → Polynomial
-
ext_gcd (a, b) → ExtGCD
Compute the greatest common divisor of two numbers (a,b) and accompanying co-factors.
Example:> $GCD = ext_gcd(15,6);
The GCD of the numbers can then be accessed like this:> print $GCD->g;
3
The ExtGCD type also stores the Bezout coefficients (thus integers p and q such that g=a*p+b*q)...> print $GCD->p;
1
print $GCD->q;-2
...and the quotients k1 of a and k2 of b by g.> print $GCD->k1;
5
> print $GCD->k2;
2
-
gcd (v) → Element
Compute the greatest common divisor of the elements of the given vector.
Example:> $v = new Vector<Int>(3,6,9);
> print gcd($v);
3
-
gcd (p, q) → UniPolynomial
Returns the greatest common divisor of two univariate polynomials.
Example:- We create two UniPolynomials with said coefficient and exponent type:
> $p = new UniPolynomial<Rational,Int>([2,2],[3,2]);
> $q = new UniPolynomial<Rational,Int>([6,4],[4,2]);
Printing them reveals what the constructor does:> print $p;
2*x^3 + 2*x^2
> print $q;
6*x^4 + 4*x^2
Now we can calculate their gcd:> print gcd($p,$q);
x^2
-
get_var_names () → Array<String>
Get the current list of variable names used for pretty printing and string parsing of the given polynomial class
Returns
Array<String> -
lcm (v) → Element
Compute the least common multiple of the elements of the given vector.
Example:> $v = new Vector<Integer>(1,3,6,9);
> print lcm($v);
18
-
local_var_names (names ...)
Set the list of variable names for given polynomial class temporarily. The existing name list or the default scheme is restored at the end of the current user cycle, similarly to core::prefer_now.
Parameters
String names ... variable names, see set_var_names. -
monomials <Coefficient, Exponent> (n) → UniPolynomial<Coefficient,Exponent>
Create degree one monomials of the desired polynomial type.
Type Parameters
Coefficient The polynomial coefficient type. Rational by default.Exponent The exponent type. Int by default.Parameters
Int n The number of variablesReturns
UniPolynomial<Coefficient,Exponent> when n == 1, Polynomial<Coefficient,Exponent> when n > 1 -
numerator (f) → Polynomial
-
numerator (f) → Polynomial
-
set_var_names (names ...)
Set the list of variable names used for pretty printing and string parsing of the given polynomial class
When the number of variables in a polynomial is greater than the size of the name list, the excess variable names are produced from a template "${last_var_name}_{EXCESS}", where EXCESS starts at 0 for the variable corresponding to the last name in the list. If the last name already has a form "{Name}_{Number}", the following variables are enumerated starting from that Number plus 1.
The default naming scheme consists of a single letter "x", "y", "z", "u", "v", or "w" chosen according to the nesting depth of polynomial types in the coefficient type. That is, variables of simple polynomials (those with pure numerical coefficients) are named x_0, x_1, ..., variables of polynomials with simple polynomial coefficients are named y_0, y_1, etc.
Parameters
String names ... variable names; may also be bundled in an array an empty list resets to the default naming scheme -
sum_of_square_roots_naive (input_array) → Map<Rational, Rational>
Make a naive attempt to sum the square roots of the entries of the input array.
Parameters
Array<Rational> input_array a list of rational numbers (other coefficents are not implemented).Returns
Map<Rational, Rational> a map collecting the coefficients of roots encountered in the sum.Example:- To obtain sqrt{3/4} + sqrt{245}, type
> print sum_of_square_roots_naive(new Array<Rational>([3/4, 245]));
{(3 1/2) (5 7)}
This output represents sqrt{3}/2 + 7 sqrt{5}. If you are not satisfied with the result, please use a symbolic algebra package.
-
This category contains combinatorial functions.
-
all_permutations (n) → ARRAY
Returns a list of all permutations of the set {0...n-1} as a perl-array
Example:- To store the result in the perl array @a, type this:
> @a = all_permutations(3);
The array contains pointers to arrays. To access the 0-th pointer, do this:> $a0 = $a[0];
To print the 0-th array itself, you have to dereference it as follows:> print @{ $a0 };
012
You can loop through @a using foreach. The print statement produces the string obtained by dereferencing the current entry concatenated with the string " ".> foreach( @a ){
> print @{ $_ }, " ";
> }
012 102 201 021 120 210
-
are_permuted (a, b) → Bool
-
find_permutation (a, b) → Array<Int>
Returns the permutation that maps a to b.
Example:> $p = find_permutation([1,8,3,4],[3,8,4,1]);
> print $p;
2 1 3 0
-
n_fixed_points (p) → Int
Returns the number of fixed points of the permutation given by p.
Example:> print n_fixed_points([1,0,2,4,3]);
1
-
permutation_cycles (p) → Array<List<Int>>
Returns the cycles of a permutation given by p.
Example:> print permutation_cycles([1,0,3,2]);
{0 1}{2 3}
-
permutation_matrix <Scalar> (p) → Matrix<Scalar>
Returns the permutation matrix of the permutation given by p.
Example:- The following prints the permutation matrix in sparse representation.
> print permutation_matrix([1,0,3,2]);
(4) (1 1)
(4) (0 1)
(4) (3 1)
(4) (2 1)
-
permutation_sign (p) → Int
Returns the sign of the permutation given by p.
Example:> print permutation_sign([1,0,3,2]);
1
-
-
This contains functions for data conversions and type casts.
-
cast <Target> (object) → Object
Change the type of the polymake object to one of its base types (aka ancestor in the inheritance hierarchy). The object loses all properties that are unknown in the target type.
-
cols ()
UNDOCUMENTED
-
cols (A) → Container<Vector>
Returns an array containing the columns of A.
Example:- The following saves the columns of the vertex matrix of a square in the variable $w and then prints its contents using a foreach loop and concatenating each entry with the string " ".
> $w = cols(polytope::cube(2)->VERTICES);
> foreach( @$w ){
> print @{$_}, " ";
> }
1111 -11-11 -1-111
-
concat_rows (A) → Vector
Concatenates the rows of A.
Examples:- Make a vector out of the rows of the vertex matrix of a cube:
> $v = concat_rows(polytope::cube(2)->VERTICES);
> print $v;
1 -1 -1 1 1 -1 1 -1 1 1 1 1
- For a sparse matrix, the resulting vector is sparse, too.
> $vs = concat_rows(unit_matrix(3));
> print $vs;
(9) (0 1) (4 1) (8 1)
-
convert_to <Target> (s) → Target
-
convert_to <Target> (v) → Vector<Target>
Explicit conversion to a different element type.
Example:> $v = new Vector<Rational>(1/2,2/3,3/4);
> $vf = convert_to<Float>($v);
> print $vf;
0.5 0.6666666667 0.75
-
convert_to <Target> (m) → Matrix<Target>
Explicit conversion to a different element type.
Example:> $M = new Matrix<Rational>([1/2,2],[3,2/3]);
> $Mf = convert_to<Float>($M);
> print $Mf;
0.5 2
3 0.6666666667
-
convert_to <Target> (m) → Polynomial<Target>
Explicit conversion to a different coefficient type.
-
convert_to <Target> (m) → UniPolynomial<Target>
Explicit conversion to a different coefficient type.
-
dense <Element> (v) → Vector<Element>
Convert to an equivalent dense vector of the same element type.
-
dense <Element> (m) → Matrix<Element>
Convert to an equivalent dense matrix of the same element type.
-
dense (m) → Matrix<Int>
-
dense (s, dim) → Vector<Int>
-
index_matrix (m) → IncidenceMatrix
Get the positions of non-zero entries of a sparse matrix.
Example:> $S = new SparseMatrix([1,2,0,0,0,0],[0,0,5,0,0,32]);
> print index_matrix($S);
{0 1}
{2 5}
-
indices (v) → Set<Int>
Get the positions of non-zero entries of a sparse vector.
Example:> $v = new SparseVector(0,1,1,0,0,0,2,0,3);
> print indices($v);
{1 2 6 8}
-
lex_ordered (f) → PowerSet<Int>
Visit the facets of f sorted lexicographically.
Example:> $f = new FacetList(polytope::cube(2)->VERTICES_IN_FACETS);
> print lex_ordered($f);
{{0 1} {0 2} {1 3} {2 3}}
-
repeat_col (v, i)
-
repeat_row (v, i)
-
rows ()
UNDOCUMENTED
-
rows (A) → Container<Vector>
Returns an array containing the rows of A.
Example:- The following saves the rows of the vertex matrix of a square in the variable $w and then prints its contents using a foreach loop and concatenating each entry with the string " ".
> $w = rows(polytope::cube(2)->VERTICES);
> foreach( @$w ){
> print @{$_}, " ";
> }
1-1-1 11-1 1-11 111
-
toMatrix <Scalar> (A) → SparseMatrix<Scalar>
Convert an IncidenceMatrix to a SparseMatrix.
Example:> $M = toMatrix<Int>(polytope::cube(2)->VERTICES_IN_FACETS);
> print $M->type->full_name;
SparseMatrix<Int, NonSymmetric>
-
toTropicalPolynomial (s, vars) → Polynomial<TropicalNumber<Addition,Rational> >
This converts a string into a tropical polynomial. The syntax for the string is as follows: It is of the form "min(...)" or "max(...)" or "min{...}" or "max{...}", where ... is a comma-separated list of sums of the form "a + bx + c + dy + ...", where a,c are rational numbers, b,d are Ints and x,y are variables. Such a sum can contain several such terms for the same variable and they need not be in any order. Any text that starts with a letter and does not contain any of +-*,(){} or whitespace can be a variable. A term in a sum can be of the form "3x", "3*x", but "x3"will be interpreted as 1 * "x3". Coefficients should not contain letters and there is no evaluation of arithmetic, i.e. "(2+4)*x" does not work (though "2x+4x" would be fine). In fact, further brackets should only be used (but are not necessary!) for single coefficienst, e.g. "(-3)*x". Warning: The parser will remove all brackets before parsing the individual sums. If no further arguments are given, the function will take the number of occuring variables as total number of variables and create a ring for the result. The variables will be sorted alphabetically.
Parameters
String s The string to be parsedString vars Optional. A list of variables. If this is given, all variables used in s must match one of the variables in this list.Returns
Polynomial<TropicalNumber<Addition,Rational> > , where Addition depends on whether min or max was used in the string. -
vector2col (v) → Matrix
-
vector2row (v) → Matrix
-
-
Here you can find the functions to access the polymake database.
-
db_count (query) → Int
Returns the number of objects in the database db in collection that match the query.
-
db_cursor (query) → DBCursor
Returns a cursor on the entries for the database db in collection that match the query.
Parameters
HASH query database queryOptions
String db database nameString collection collection nameInt skip skip the first elements, default: 0Int limit limit the number of objects that will be returned (default: no limit)HASH sort_by sorting of the entries, default by _idString username String password MongoClient client Bool local set to 1 if you want to use a local database (on localhost), default 0Returns
DBCursor -
db_get_list_col_for_db () → Array
-
db_get_list_db () → Array
-
db_get_list_db_col () → Array
Returns a list of available databases and collections (in the form db.collection).
-
db_ids (query) → Array<String>
Returns the IDs of all objects in the database db in collection that match the query. This is only recommended for a reasonably small number of matching objects. If you expect many such objects you should instead construct a DBCursor.
Parameters
HASH query Options
String db String collection Bool local set to 1 if you want to use a local database (on localhost), default 0Int limit limit the number of objects that will be returned (default: no limit)HASH sort_by specify a sorting orderInt skip skip the first elements, default: 0String username Some databases might have access control.String password Some databases might have access control.MongoClient client Returns
Array<String> -
db_info ()
Print information about available databases and collections.
-
db_metadata (p) → HASH
-
db_query (query) → Array<Core::Object>
Returns all objects in the database db in collection that match the query. This is only recommended for a reasonably small number of matching objects. If you expect many such objects you should instead use a database cursor.
Parameters
HASH query Options
String db String collection Bool local set to 1 if you want to use a local database (on localhost), default 0Int limit limit the number of objects that will be returned (default: no limit)String username Some databases might have access control.String password Some databases might have access control.MongoClient client Int skip skip the first elements, default: 0HASH sort_by specify a sorting orderReturns
Array<Core::Object> -
db_searchable_fields (db, collection) → Array<String>
Return the list of property names that can be searched in the database for a given database db, collection col and optional template key.
-
db_write_collection_info ()
Add documentation for a collection You need write access for this.
Options
String db name of the database the description applies toString collection name of the collection the description applies toBool local set to 1 if you want to use a local database (on localhost), default 0Bool replace whether an existing documentation should be updated or replacedString file a file with the documentation in json format, only one of file and documentation is allowedHASH documentation a perl hash with the documentation, only one of documentation and file is allowedString username String password String polydb_version version numberBool verbose verbose mode -
db_write_db_info (db)
Add a db documentation. You need write access for this.
Parameters
String db name of the database the description applies toOptions
Bool local set to 1 if you want to use a local database (on localhost), default 0Bool replace whether an existing documentation should be updated or replacedString file a file with the documentation in json format, only one of file and documentation is allowedHASH documentation a perl hash with the documentation, only one of documentation and file is allowedString username String password String polydb_version version numberBool verbose verbose mode
-
-
These are administrative functions. You need admin access to the database for these.
This category also contains functions that I want to hide from the public because they are not yet completely presentable.
-
db_set_type_information ()
Set or update type (and template) information for collection col in the database db.
Note that you need write access to the type database for this.
Options
String db database nameString col collection nameString key the key of the type informationBool replace set to 1 if a type information for this database, collection and key already exists and should be replacedString file a filename containing the type information as json document (only one of file and type_information allowed)HASH type_information the type information as per hash (only one of file and type_information allowed)String username String password String polyDB_version the version of polyDB this type information applies toBool verbose
-
-
These are the functions to insert and update objects. You need write access to the database for these.
-
db_get_type_info (db, collection) → HASH
Returns the template object for the collection col of the database db (if this is set). returns the full template record for a given collection and a given key
-
db_insert (obj) → String
Adds an object obj to the collection col in the database db.
Note that you need write access to the database for this.
Parameters
Core::Object obj Options
String db name of the databaseString collection name of the collectionString id unique identifier, this is set to the name of the object, a different name should only be used in exceptional cases. This option is only valid if a single object is added.String contributor set the contributorBool local set to 1 if you want to use a local database (on localhost), default 0String username String password Bool use_type_information set to 1 to match properties with a template objectHASH type_information object template specifying the properties to storeString type_information_key template name to load from the databaseBool nonew set to 1 if you don't want to compute missing properties but only delete surplus ones (only takes effect if use_type_info is also set to 1)Bool keep_all_props keep all properties present in the polymake object in the stored xml. Does not effect representation in the db. For this, provide a type information without a property maskBool noinsert dont insert anything, just try evaluate the templateMongoClient client Returns
String -
db_remove (id) → String
Removes the object with a given id from the collection col in the database db.
Note that you need write access to the database for this.
-
-
Functions for pretty printing, labels or latex output of polymake types.
-
labeled (data, elem_labels) → String
Prepares a vector for printing, prepends each element with a label and a colon.
Parameters
Vector data to be printedArray<String> elem_labels optional labels for elements; if data is a Set, or similar, each element will be replaced by its label.Returns
String Example:> $v = new Vector(0,1,2);
> print labeled($v,["zeroth","first","second"]);
zeroth:0 first:1 second:2
-
latex (data, elem_labels) → String
LaTeX output of a matrix.
Parameters
Matrix data to be printedArray<String> elem_labels optional labels for elements; if data is an IncidenceMatrix, Array<Set>, or similar, each element will be replaced by its label.Returns
String to be used with \usepackage{amsmath} -
print_constraints (M)
Write the rows of a matrix M as inequalities (equations=0) or equations (equations=1) in a readable way. It is possible to specify labels for the coordinates via an optional array coord_labels.
Parameters
Matrix<Scalar> M the matrix whose rows are to be writtenOptions
Array<String> coord_labels changes the labels of the coordinatesArray<String> row_labels changes the labels of the rowsBool homogeneous false if the first coordinate should be interpreted as right hand sideBool equations true if the rows represent equations instead of inequalitiesExample:> $M = new Matrix([1,2,3],[4,5,23]);
> print_constraints($M,equations=>1);
0: 2 x1 + 3 x2 = -1
1: 5 x1 + 23 x2 = -4
-
rows_labeled (data, row_labels, elem_labels) → Array<String>
Prepares a matrix for printing, prepends each row with a label and a colon.
Parameters
Matrix data to be printedArray<String> row_labels labels for the rowsArray<String> elem_labels optional labels for elements; if data is an IncidenceMatrix, Array<Set>, or similar, each element will be replaced by its label.Returns
Array<String> each string ending with end-of-lineExample:> print rows_labeled(polytope::cube(2)->VERTICES,['a','b','c','d']);
a:1 -1 -1
b:1 1 -1
c:1 -1 1
d:1 1 1
-
rows_labeled (graph, elem_labels) → Array<String>
Like above, but specialized for Graphs (defined for convenience: a PTL Graph is not a container)
Parameters
Graph graph to be printedArray<String> elem_labels labels for the elementsReturns
Array<String> each string ending with end-of-lineExample:> print rows_labeled(graph::cycle_graph(4)->ADJACENCY, ['a','b','c','d']);
a:b d
b:a c
c:b d
d:a c
-
rows_numbered (data) → Array<String>
Equivalent to rows_labeled with omitted row_labels argument. Formerly called "numbered".
Example:> print rows_numbered(polytope::cube(2)->VERTICES);
0:1 -1 -1
1:1 1 -1
2:1 -1 1
3:1 1 1
-
-
Operations on graphs.
-
adjacency_matrix (graph) → IncidenceMatrix
Returns the adjacency matrix of graph nodes. For a normal graph, it will be a kind of IncidenceMatrix, for multigraph, it will be a SparseMatrix<Int>, with entries encoding the number of parallel edges between two nodes.
-
induced_subgraph (graph, set) → Graph
-
node_edge_incidences <Coord> (graph) → SparseMatrix<Coord>
Returns the node-edge incidence matrix of a graph.
Type Parameters
Coord coordinate type for the resulting matrix, default: IntParameters
Graph graph Returns
SparseMatrix<Coord> Example:> print node_edge_incidences(graph::cycle_graph(5)->ADJACENCY);
(5) (0 1) (3 1)
(5) (0 1) (1 1)
(5) (1 1) (2 1)
(5) (2 1) (4 1)
(5) (3 1) (4 1)
-
-
Functions for lattice related computations.
-
eliminate_denominators (v) → Vector<Integer>
Scale a vector with the least common multiple of the denominators of its coordinates.
Example:> $v = new Vector(1/2,1/3,1/4,1/5);
> $ve = eliminate_denominators($v);
> print $ve;
30 20 15 12
-
eliminate_denominators_entire (v) → Matrix<Integer>
Scales entire matrix with the least common multiple of the denominators of its coordinates.
Example:> $M = new Matrix([1/2,1/3],[1/5,7],[1/4,4/3]);
> $Me = eliminate_denominators_entire($M);
> print $Me;
30 20
12 420
15 80
-
eliminate_denominators_entire_affine (v) → Matrix<Integer>
Scales entire matrix with the least common multiple of the denominators of its coordinates (ignore first column).
Example:> $M = new Matrix([1,1/2,1/3],[1,1/5,7],[1,1/4,4/3]);
> $Me = eliminate_denominators_entire_affine($M);
> print $Me;
1 30 20
1 12 420
1 15 80
-
eliminate_denominators_in_rows (M) → Matrix<Integer>
Scale a matrix row-wise with the least common multiple of the denominators of its coordinates.
Example:> $M = new Matrix([1/2,1/3],[1/5,7],[1/4,4/3]);
> $Me = eliminate_denominators_in_rows($M);
> print $Me;
3 2
1 35
3 16
-
is_integral (v) → Bool
-
is_integral (m) → Bool
Checks whether all coordinates of a rational matrix are integral.
Example:- This rational matrix has only integral entries:
> $m = new Matrix<Rational>([1,2],[3,4]);
> print is_integral($m);
1
But if we multiply it with 1/2, that is not the case anymore.> print is_integral(1/2 * $m);
-
primitive (v) → Vector<Integer>
Scales the vector to a primitive integral vector.
Example:> print primitive(new Vector(3,3/2,3,3));
2 1 2 2
-
primitive (M) → Matrix<Integer>
Scales each row of the matrix to a primitive integral vector.
Example:> print primitive(new Matrix([1,3/2],[3,1]));
2 3
3 1
-
primitive_affine (v) → Vector<Integer>
Scales the affine part of a vector to a primitive integral vector.
Example:> print primitive_affine(new Vector(1,3/2,1,1));
1 3 2 2
-
primitive_affine (M) → Matrix<Integer>
Scales the affine part of each row of the matrix to a primitive integral vector.
Example:> print primitive_affine(new Matrix([1,1,3/2],[1,3,1]));
1 2 3
1 3 1
-
-
These functions are for algebraic computations and constructions of special matrices.
-
anti_diag (d) → SparseMatrix
Produces a SparseMatrix from its anti-diagonal.
Example:- Try this:
> $M = anti_diag(new Vector([0,1,2]));
> print $M;
(3) (2 2)
(3) (1 1)
(3)
To print a more human-readable representation, use the dense() function:> print dense($M);
0 0 2
0 1 0
0 0 0
-
anti_diag (m1, m2) → SparseMatrix
Returns a block anti-diagonal matrix with blocks m1 and m2.
Example:- Try this:
> $M = anti_diag(unit_matrix(2),unit_matrix(3));
> print $M;
(5) (2 1)
(5) (3 1)
(5) (4 1)
(5) (0 1)
(5) (1 1)
-
barycenter (A) → Vector<Scalar>
Calculate the average over the rows of a matrix.
Example:> $A = new Matrix([3,0,0],[0,3,0],[0,0,3]);
> print barycenter($A);
1 1 1
-
basis (A) → Pair<Set<Int>, Set<Int>>
Computes subsets of the rows and columns of A that form a basis for the linear space spanned by A.
Parameters
Matrix A Returns
Pair<Set<Int>, Set<Int>> The first set corresponds to the rows, the second to the columns.Example:- Here we have a nice matrix:
> $M = new Matrix([[1,0,0,0],[2,0,0,0],[0,1,0,0],[0,0,1,0]]);
Let's print bases for the row and column space:> ($row,$col) = basis($M);
> print $M->minor($row,All);
1 0 0 0
0 1 0 0
0 0 1 0
> print $M->minor(All,$col);
1 0 0
2 0 0
0 1 0
0 0 1
-
basis_affine (A) → Pair<Set<Int>, Set<Int>>
Does the same as basis ignoring the first column of the matrix.
Parameters
Matrix A Returns
Pair<Set<Int>, Set<Int>> The first set corresponds to the rows, the second to the columns. -
basis_cols (A) → Set<Int>
Computes a subset of the columns of A that form a basis for the linear space spanned by A.
Example:- Here we have a nice matrix:
> $M = new Matrix([[1,0,0,0],[2,0,0,0],[0,1,0,0],[0,0,1,0]]);
Let's print a basis of its column space:> print $M->minor(All,basis_cols($M));
1 0 0
2 0 0
0 1 0
0 0 1
-
basis_rows (A) → Set<Int>
Computes a subset of the rows of A that form a basis for the linear space spanned by A.
Example:- Here we have a nice matrix:
> $M = new Matrix([[1,0,0,0],[2,0,0,0],[0,1,0,0],[0,0,1,0]]);
Let's print a basis of its row space:> print $M->minor(basis_rows($M),All);
1 0 0 0
0 1 0 0
0 0 1 0
-
basis_rows_integer (A) → Set<Int>
Computes a lattice basis of the span of the rows of A.
-
diag (d) → SparseMatrix
Produces a SparseMatrix from its diagonal.
Example:> $v = new Vector(1,2,3,4);
> $D = diag($v);
> print $D;
(4) (0 1)
(4) (1 2)
(4) (2 3)
(4) (3 4)
-
diag (m1, m2) → SparseMatrix
Returns a block diagonal matrix with blocks m1 and m2.
Example:> $m1 = new Matrix([1,2],[3,4]);
> $m2 = new Matrix([1,0,2],[3,4,0]);
> $D = diag($m1,$m2);
> print $D;
(5) (0 1) (1 2)
(5) (0 3) (1 4)
0 0 1 0 2
0 0 3 4 0
-
equal_bases (M1, M2) → Bool
-
hadamard_product (M1, M2) → Matrix
-
hermite_normal_form (M) → HermiteNormalForm
Computes the (column) Hermite normal form of an integer matrix. Pivot entries are positive, entries to the left of a pivot are non-negative and strictly smaller than the pivot.
Parameters
Matrix M Matrix to be transformed.Options
Bool reduced If this is false, entries to the left of a pivot are left untouched. True by defaultReturns
HermiteNormalForm object H with H.hnf, H.companion and H.rank with M*H.companion=H.hnf and rank(M) = H.rank.Example:- The following stores the result for a small matrix M in H and then prints both hnf and companion:
> $M = new Matrix<Integer>([1,2],[2,3]);
> $H = hermite_normal_form($M);
> print $H->hnf;
1 0
0 1
> print $H->companion;
-3 2
2 -1
-
householder_trafo (b) → Vector
-
inv (A) → Matrix
Computes the inverse A-1 of an invertible matrix A using Gauss elimination.
Example:- We save the inverse of a small matrix M in the variable $iM:
> $M = new Matrix([1,2],[3,4]);
> $iM = inv($M);
To print the result, type this:> print $iM;
-2 1
3/2 -1/2
As we can see, that is in fact the inverse of M.> print $M * $iM;
1 0
0 1
-
lineality_space (A) → Matrix
-
moore_penrose_inverse (M) → Matrix<Float>
-
normalized (A) → Matrix<Float>
Normalize a matrix by dividing each row by its length (l2-norm).
Example:> $A = new Matrix<Float>([1.5,2],[2.5,2.5]);
> print normalized($A);
0.6 0.8
0.7071067812 0.7071067812
-
null_space (A) → Matrix
-
null_space (b) → Matrix
-
null_space_integer (A) → SparseMatrix<Integer>
Computes the lattice null space of the integer matrix A.
Parameters
Matrix<Integer> A Returns
SparseMatrix<Integer> Has a lattice basis of the null space as rows. -
ones_matrix <Element> (m, n) → Matrix<Element>
Creates a matrix with all elements equal to 1.
Type Parameters
Element default: Rational.Parameters
Int m number of rowsInt n number of columnsReturns
Matrix<Element> Example:- The following creates an all-ones matrix with Rational coefficients.
> $M = ones_matrix<Rational>(2,3);
> print $M;
1 1 1
1 1 1
-
ones_vector <Element> (d) → Vector<Element>
Creates a vector with all elements equal to 1.
Type Parameters
Element default: Rational.Parameters
Int d vector dimension. If omitted, a vector of dimension 0 is created, which can adjust itself when involved in a block matrix operation.Returns
Vector<Element> Example:- To create the all-ones Int vector of dimension 3, do this:
> $v = ones_vector<Int>(3);
You can print the result using the print statement:> print $v;
1 1 1
-
pluecker (V) → Vector
Compute the vector of maximal minors of a matrix. WARNING: interpretation different in tropical::lifted_pluecker
-
project_to_orthogonal_complement (points, orthogonal)
Projects points into the orthogonal complement of a subspace given via an orthogonal basis. The given points will be overwitten.
-
qr_decomp (M) → Pair<Matrix,Matrix>
QR decomposition of a Matrix M with rows > cols
Example:> $M = new Matrix<Float>([23,4],[6,42]);
> $qr = qr_decomp($M);
> print $qr->first;
0.9676172724 0.2524218971
0.2524218971 -0.9676172724
> print $qr->second;
23.76972865 14.47218877
0 -39.63023785
> print $qr->first * $qr->second ;
23 4
6 42
-
remove_zero_rows (m) → Matrix
-
singular_value_decomposition (M) → SingularValueDecomposition
SVD decomposition of a Matrix. Computes the SVD of a matrix into a diagonal Marix (S), orthogonal square Matrix (U), orthogonal square Matrix (V), such that U*S*V^T=M The first element of the output array is S, the second U and the thrid V.
Example:> $M = new Matrix<Float>([1,2],[23,24]);
> $SVD = singular_value_decomposition($M);
The following prints the three matrices, seperated by newline characters.> print $SVD->left_companion ,"\n", $SVD->sigma ,"\n", $SVD->right_companion;
0.06414638608 0.9979404998
0.9979404998 -0.06414638608
33.31011547 0
0 0.6604600341
0.6909846321 -0.7228694476
0.7228694476 0.6909846321
-
smith_normal_form (M, inv) → SmithNormalForm<Integer>
Compute the Smith normal form of a given matrix M. M = LSR in normal case, or S = LMR in inverted case.
Parameters
Matrix M must be of integer typeBool inv optional, if true, compute the inverse of the companion matricesReturns
SmithNormalForm<Integer> Example:> $M = new Matrix<Integer>([1,2],[23,24]);
> $SNF = smith_normal_form($M);
The following line prints the three matrices seperated by newline characters.> print $SNF->left_companion ,"\n", $SNF->form ,"\n", $SNF->right_companion;
1 0
23 1
1 0
0 -22
1 2
0 1
-
solve_left (A, B) → Matrix
Computes a matrix X that solves the system XA = B. This is useful, for instance, for computing the coordinates of some vectors with respect to a basis. The rows of the matrix solve_left(B,V) are the coordinates of the rows of V with respect to the rows of B.
Example:- Define the matrices
> $V = new Matrix([[-4,2,2],[3,-2,-1]]);
> $B = new Matrix([[-1,1,0],[0,-1,1]]);
so that the rows of B are a basis of the subspace of vectors with zero coordinate sum. Then the rows of> print solve_left($B, $V);
4 2
-3 -1
contain the coordinates of the rows of V with respect to the rows of B.
-
solve_right (A, B) → Matrix
Computes a matrix X that solves the system AX = B
Examples:- A non-degenerate example:
> $A = new Matrix([[1,0,0],[1,1,0],[1,0,1],[1,1,1]]);
> $B = new Matrix([[1,0,0],[1,0,1],[1,1,0],[1,1,1]]);
> print solve_right($A,$B);
1 0 0
0 0 1
0 1 0
- A degenerate example:
> $A = new Matrix([[1,0,0,0,0],[0,1,0,0,0],[1,0,1,0,0],[0,1,1,0,0]]);
> $B = new Matrix([[0,1,0,0,0],[1,0,0,0,0],[0,1,1,0,0],[1,0,1,0,0]]);
> print solve_right($A,$B);
0 1 0 0 0
1 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
-
sqr (v) → Scalar
-
totally_unimodular (A) → Bool
The matrix A is totally unimodular if the determinant of each square submatrix equals 0, 1, or -1. This is the naive test (exponential in the size of the matrix).
For a better implementation try Matthias Walter's polymake extension at https://github.com/xammy/unimodularity-test/wiki/Polymake-Extension.
Example:> $M = new Matrix<Int>([-1,-1,0,0,0,1],[1,0,-1,-1,0,0],[0,1,1,0,-1,0],[0,0,0,1,1,-1]);
> print totally_unimodular($M);
1
-
transpose (A) → IncidenceMatrix
Computes the transpose AT of an incidence matrix A, i.e., (aT)ij = aji.
-
unit_matrix <Element> (d) → SparseMatrix<Element>
Creates a unit matrix of given dimension
Type Parameters
Element default: RationalParameters
Int d dimension of the matrixReturns
SparseMatrix<Element> Examples:- The following stores the 3-dimensional unit matrix (ones on the diagonal and zeros otherwise) in a variable and prints it:
> $M = unit_matrix(3);
> print $M;
(3) (0 1)
(3) (1 1)
(3) (2 1)
- The following stores the 3-dimensional unit matrix (ones on the diagonal and zeros otherwise) from type Int in a variable and prints it:
> $M = unit_matrix<Int>(3);
> print $M->type->full_name;
SparseMatrix<Int, Symmetric>
-
unit_vector <Element> (d, pos) → SparseVector<Element>
Creates a SparseVector of given length d with a one entry at position pos and zeroes elsewhere.
Type Parameters
Element default: RationalParameters
Int d the dimension of the vectorInt pos the position of the 1Returns
SparseVector<Element> # @example The following stores a vector of dimension 5 with a single 1 (as a Rational) at position 2: > $v = unit_vector(5,2); > print $v; | (5) (2 1)Examples:- The following stores a vector of dimension 5 with a single 1 (as a Int) at position 2:
> $v = unit_vector<Int>(5,2);
> print $v->type->full_name;
SparseVector<Int>
- The following concatenates a unit vector of dimension 3 with a 1 at position 2 and a unit vector of dimension 2 with a 1 at position 1:
> $v = unit_vector(3,2) | unit_vector(2,1);
> print $v;
(5) (2 1) (4 1)
-
zero_matrix <Element> (i, j) → SparseMatrix<Element>
Creates a zero matrix of given dimensions
Type Parameters
Element default: RationalParameters
Int i number of rowsInt j number of columnsReturns
SparseMatrix<Element> Examples:- The following stores a 2x3 matrix with 0 as entries (from type Rational) in a variable and prints it:
> $M = zero_matrix(2,3);
> print $M;
0 0 0
0 0 0
- The following stores a 2x3 matrix with 0 as entries from type Int in a variable and prints its type:
> $M = zero_matrix<Int>(2,3);
> print $M->type->full_name;
Matrix<Int, NonSymmetric>
-
zero_vector <Element> (d) → Vector<Element>
Creates a vector with all elements equal to zero.
Type Parameters
Element default: RationalParameters
Int d vector dimension. If omitted, a vector of dimension 0 is created, which can adjust itself when involved in a block matrix operation.Returns
Vector<Element> Examples:- The following stores a vector of dimension 5 with 0 as entries (from type Rational) in a variable and prints it:
> $v = zero_vector(5);
> print $v;
0 0 0 0 0
- The following stores a vector of dimension 5 with 0 as entries from type Int in a variable and prints its type:
> $v = zero_vector<Int>(5);
> print $v->type->full_name;
Vector<Int>
- The following concatenates a vector of dimension 2 of ones and a vector of length 2 of zeros:
> $v = ones_vector(2) | zero_vector(2);
> print $v;
1 1 0 0
-
-
This category contains functions performing operations on Sets.
-
incl (s1, s2) → Int
-
scalar2set (s) → Set<SCALAR>
Returns the singleton set {s}.
Example:> print scalar2set(23);
{23}
-
select_subset (s, indices) → Set
-
-
Miscellaneous functions.
-
distance_matrix (S, d) → Matrix
Given a metric, return a triangle matrix whose (i,j)-entry contains the distance between point i and j of the point set S for i<j. All entrys below the diagonal are zero. The metric is passed as a perl subroutine mapping two input vectors to a real value.
Example:- The following defines the perl subroutine dist as the euclidean metric and then saves the distance matrix of the 3-cubes vertices in the variable $M:
> sub dist($$) {
> my $v = $_[0] - $_[1];
> return sqrt(new Float($v*$v)); }
> $M = distance_matrix(polytope::cube(3)->VERTICES, \&dist);
-
histogram (data) → Map<Element, Int>
Produce a histogram of an array: each different element value is mapped on the number of its occurences.
Example:> $H = histogram([1,1,2,2,2,3,3,2,3,3,1,1,1,3,2,3]);
> print $H;
{(1 5) (2 5) (3 6)}
-
index_of (array) → HashMap<Array<Set<Int>>, Int>
Return a map indexing an array of sets
Example:> $s1 = new Set(1,2,3);
> $s2 = $s1 - 1;
> $a = new Array<Set>($s1,$s2,$s1);
> print index_of($a);
{({1 2 3} 2) ({2 3} 1)}
-
perturb_matrix (M, eps, not_hom) → Matrix
Perturb a given matrix M by adding a random matrix. The random matrix consists of vectors that are uniformly distributed on the unit sphere. Optionally, the random matrix can be scaled by a factor eps.
Parameters
Matrix M Float eps the factor by which the random matrix is multiplied default value: 1Bool not_hom if set to 1, the first column will also be perturbed; otherwise the first columns of the input matrix M and the perturbed one coincide (useful for working with homogenized coordinates); default value: 0 (homogen. coords)Options
Int seed controls the outcome of the random number generator; fixing a seed number guarantees the same outcome.Returns
Matrix -
rand_perm (n) → Array<Int>
-
These functions are for visualization.
-
compose (vis_obj ...) → Visual::Container
Create a composite drawing of several objects.
Parameters
Visual::Object vis_obj ... objects to be drawn togetherOptions
String Title name of the whole drawing; per default the name of the first Object is taken.option list: Visual::Polygons::decorations Returns
Visual::Container if called in void context, immediately starts the preferred rendering program.Example:- Draw a pretty 8-pointed star:
> compose(cube(2)->VISUAL, cross(2,sqrt(2))->VISUAL, Title=>"A pretty star.", VertexLabels=>"hidden");
-
compose (vis_container, vis_obj ...) → Visual::Container
Add new objects to a composite drawing.
Parameters
Visual::Container vis_container drawing produced by some visualization functionVisual::Object vis_obj ... objects to be addedOptions
String Title new name for the drawingany decorations to be applied to all components as default values.Returns
Visual::Container if called in void context, immediately starts the preferred rendering program. -
geomview (vis_obj ...)
Run geomview to display given visual objects.
Parameters
Visual::Object vis_obj ... objects to displayOptions
String File "filename" or "AUTO" Store the objects in agcl
(geomview control language) file instead of starting the interactive GUI. The geometric data inOFF
format is embedded in the Lisp-style commands, but can be easily extracted using any text editor, if needed.The.gcl
suffix is automatically added to the file name.Specify AUTO if you want the filename be automatically derived from the drawing title.You can also use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. -
javaview (vis_obj ...)
Run JavaView with the given visual objects.
Contained in extensionjavaview
.Parameters
Visual::Object vis_obj ... objects to displayOptions
String File "filename" or "AUTO" Store the object description in a JVX file without starting the interactive GUI. The.jvx
suffix is automatically added to the file name.Specify AUTO if you want the filename be automatically derived from the drawing title.You can also use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. -
jreality (vis_obj ...)
Run jReality to display given visual objects.
Contained in extensionjreality
.Parameters
Visual::Object vis_obj ... objects to displayOptions
String File "filename" or "AUTO" Store the object description in a bean shell source file without starting the interactive GUI. The.bsh
suffix is automatically added to the file name.Specify AUTO if you want the filename be automatically derived from the drawing title.You can also use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. -
postscript (vis_obj ...)
Create a Postscript (tm) drawing with the given visual objects.
Parameters
Visual::Object vis_obj ... objects to drawOptions
String File "filename" or "AUTO" Store the drawing in a file without starting the viewer. The.ps
suffix is automatically added to the file name.Specify AUTO if you want the filename be automatically derived from the drawing title.You can also use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. -
povray (vis_obj ...)
Run POVRAY to display given visual objects.
Parameters
Visual::Object vis_obj ... objects to displayOptions
String File "filename" or "AUTO" Store the object description in a POVRAY source file without actual rendering. The.pov
suffix is automatically added to the file name.Specify AUTO if you want the filename be automatically derived from the drawing title.You can also use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. -
sketch (vis_obj ...)
Produce a Sketch input file with given visual objects.
Parameters
Visual::Object vis_obj ... objects to displayOptions
String File "filename" or "AUTO"For the file name you can use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. Real file names are automatically completed with the.sk
suffix if needed.An automatically generated file name is displayed in the verbose mode. -
static (vis_obj) → Visual::Object
Suppress creation of dynamic (interactive) scenes.
Parameters
Visual::Object vis_obj drawing, e.g. created byVISUAL_GRAPH
orSCHLEGEL
.Returns
Visual::Object if called in void context, immediately starts the preferred rendering program. -
svg (vis_obj ...)
Create a Svg drawing with the given visual objects.
Parameters
Visual::Object vis_obj ... objects to drawOptions
String File "filename" or "AUTO" Store the drawing in a file without starting the viewer. The.svg
suffix is automatically added to the file name.Specify AUTO if you want the filename be automatically derived from the drawing title.You can also use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. -
threejs (vis_obj)
Produce an html file with given visual objects.
Parameters
Visual::Object vis_obj object to displayOptions
String File "filename" or "AUTO"For the file name you can use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. Real file names are automatically completed with the.html
suffix if needed.An automatically generated file name is displayed in the verbose mode. -
tikz (vis_obj)
Produce a TikZ file with given visual objects.
Parameters
Visual::Object vis_obj object to displayOptions
String File "filename" or "AUTO"For the file name you can use any expression allowed for theopen
function, including "-" for terminal output, "&HANDLE" for an already opened file handle, or "| program" for a pipe. Real file names are automatically completed with the.tikz
suffix if needed.An automatically generated file name is displayed in the verbose mode.
-
Property Types
-
This category contains all "algebraic" types, such as matrices, vectors, polynomials, rings, ...
-
all_rows_or_cols
Use the keyword "All" for all rows or columns, e.g. when constructing a minor.
-
Matrix <Element, Sym>UNDOCUMENTED
Type Parameters
Element default: RationalSym default: NonSymmetricUser Methods of Matrix
- anti_diagonal (i) → Vector<Element>
Returns the anti-diagonal of the matrix.
Parameters
Int i i=0: the main anti_diagonal (optional)i>0: the i-th anti_diagonal below the main anti_diagonali<0: the i-th anti_diagonal above the main anti_diagonalReturns
Vector<Element> - clear ()
Change the dimensions setting all elements to 0.
- col (i) → Vector<Element>
- diagonal (i) → Vector<Element>
Returns the diagonal of the matrix.
Parameters
Int i i=0: the main diagonal (optional)i>0: the i-th diagonal below the main diagonali<0: the i-th diagonal above the main diagonalReturns
Vector<Element> - resize ()
Change the dimensions; when growing, set added elements to 0.
- row (i) → Vector<Element>
-
Plucker <Scalar>UNDOCUMENTED
Type Parameters
Scalar default: RationalUser Methods of Plucker
- coordinates ()
UNDOCUMENTED
- permuted ()
UNDOCUMENTED
-
Polynomial <Coefficient, Exponent>UNDOCUMENTED
User Methods of Polynomial
- coefficients_as_vector () → Vector<Coefficient>
The vector of all coefficients. The sorting agrees with monomials_as_matrix.
Returns
Vector<Coefficient> - constant_coefficient () → Int
- embed (nvars) → Polynomial
Embed the Polynomial in a polynomial ring with the given number of variables. The old variables will be put at the beginning, for more control use mapvars.
Example:> $pm = new Polynomial("1+x_0^2*x_3+x_1+3*x_3");
> print $pm->project([1,3]);
x_0 + 4*x_1 + 1
- get_var_names ()
set the variable names
- initial_form (v) → Polynomial
The initial form with respect to a weight-vector v
- mapvars (indices, nvars) → Polynomial
Map the variables of the Polynomial to the given indices. The same index may bei given multiple times and also some may be omitted for embedding with a higher number of variables. The length of the given Array must be the same as the number of variables of the original polynomial.
Parameters
Array<Int> indices indices of the target variablesInt nvars new number of variables, default: maximal indexReturns
Polynomial Example:> $pm = new Polynomial("1+x_0^2*x_3+x_1+3*x_3");
> print $pm->mapvars([0,1,1,4],6);
x_0^2*x_4 + x_1 + 3*x_4 + 1
- monomials_as_matrix () → SparseMatrix<Exponent>
The matrix of all exponent vectors (row-wise). The sorting agrees with coefficients_as_vector.
Returns
SparseMatrix<Exponent> - print_ordered (m)
- project () → Polynomial
Project the Polynomial to the given list of variables. The number of variables will be reduced to the number of indices, i.e. the variables will be renamed. Keeping the names of the variables is possible by using substitute with a Map.
Returns
Polynomial Example:> $pm = new Polynomial("1+x_0^2*x_3+x_1+3*x_3");
> print $pm->project([1,3]);
x_0 + 4*x_1 + 1
- reset_var_names ()
reset the variable names according to the default naming scheme
- set_var_names ()
set the variable names
- substitute ()
Substitute a list of values in a Polynomial with Int exponents. Either with an array of values, or with a Map mapping variable indices to values.
Example:> $pm = new Polynomial("1+x_0^2*x_3+x_1+3*x_3");
> print $pm->substitute([0,11,2,3]);
21
> $map = new Map<Int,Rational>([0,5/2],[1,1/5],[2,new Rational(7/3)]);
> print $pm->substitute($map);
37/4*x_3 + 6/5
-
PuiseuxFraction <MinMax, Coefficient, Exponent>UNDOCUMENTED
User Methods of PuiseuxFraction
- evaluate (m, x, exp) → Matrix<Coefficient>
Evaluate all PuiseuxFractions in a Matrix at a Rational number (x^exp). Let explcm be the lcm of the denominators of all exponents. If there are no denominators or explcm divides exp, then the evaluation is computed exactly. Otherwise, some rational number close to the root (x^exp)^-explcm will be chosen via an intermediate floating point number.
- evaluate (v, x, exp) → Vector<Coefficient>
Evaluate all PuiseuxFractions in a Vector at a Rational number (x^exp). Let explcm be the lcm of the denominators of all exponents. If there are no denominators or explcm divides exp, then the evaluation is computed exactly. Otherwise, some rational number close to the root (x^exp)^-explcm will be chosen via an intermediate floating point number.
- evaluate (x, exp) → Coefficient
Evaluate a PuiseuxFraction at a Rational number (x^exp). Let explcm be the lcm of the denominators of all exponents. If there are no denominators or explcm divides exp, then the evaluation is computed exactly. Otherwise, some rational number close to the root (x^exp)^-explcm will be chosen via an intermediate floating point number.
- evaluate_float (x) → Float
- evaluate_float (m, x) → Float
- evaluate_float (v, x) → Float
- val () → TropicalNumber<MinMax>
-
RationalFunction <Coefficient, Exponent>
-
SparseMatrix <Element, Sym>derived from: Matrix
A SparseMatrix is a two-dimensional associative array with row and column indices as keys; elements equal to the default value (ElementType(), which is 0 for most numerical types) are not stored, but implicitly encoded by the gaps in the key set. Each row and column is organized as an AVL-tree.
Use dense to convert this into its dense form.
You can create a new SparseMatrix by entering its entries row by row, as a list of SparseVectors e.g.:
$A = new SparseMatrix<Int>(<< '.');(5) (1 1)(5) (4 2)(5)(5) (0 3) (1 -1).Type Parameters
Element Sym User Methods of SparseMatrix
- resize ()
Resize the matrix
- squeeze ()
Removes empty rows and columns. The remaining rows and columns are renumbered without gaps.
- squeeze_cols ()
Removes empty columns. The remaining columns are renumbered without gaps.
- squeeze_rows ()
Removes empty rows. The remaining rows are renumbered without gaps.
-
SparseVector <Element>derived from: Vector
A SparseVector is an associative container with element indices (coordinates) as keys; elements equal to the default value (ElementType(), which is 0 for most numerical types) are not stored, but implicitly encoded by the gaps in the key set. It is based on an AVL tree.
The printable representation of a SparseVector looks like a sequence (l) (p1 v1) ... (pk vk), where l is the dimension of the vector and each pair (pi vi) denotes an entry with value vi at position pi. All other entries are zero.
Use dense to convert this into its dense form.
You can create a new SparseVector by entering its printable encoding as described above, e.g.:
$v = new SparseVector<Int>(<< '.');(6) (1 1) (2 2).Type Parameters
Element User Methods of SparseVector
-
UniPolynomial <Coefficient, Exponent>
A class for univariate polynomials.
User Methods of UniPolynomial
- coefficients_as_vector () → Vector<Coefficient>
The vector of all coefficients. The sorting agrees with monomials_as_vector.
Returns
Vector<Coefficient> - constant_coefficient () → Int
- evaluate (x, exp) → Coefficient
Evaluate a UniPolynomial at a number (x^exp). Note that for non-integral exponents this may require intermediate floating point computations depending on the input: Let explcm be the lcm of the denominators of all exponents. If there are no denominators or explcm divides exp, then the evaluation is computed exactly. Otherwise, some rational number close to the root (x^exp)^-explcm will be chosen via an intermediate floating point number.
- evaluate_float (x) → Float
- get_var_names ()
get the variable name
- monomial ()
create a monomial of degree 1
- monomials_as_vector () → Vector<Exponent>
- n_vars ()
Number of variables
- print_ordered (x)
- reset_var_names ()
reset the variable name according to the default naming scheme
- set_var_names ()
set the variable name
- substitute ()
Substitute some value in a UniPolynomial with Int exponents. When all exponents are positive the argument can be any scalar, matrix or polynomial type. With negative exponents, polynomials are not supported (use RationalFunction instead) and any given matrix must be invertible
-
Vector <Element>
A type for vectors with entries of type Element.
You can perform algebraic operations such as addition or scalar multiplication.
You can create a new Vector by entering its elements, e.g.:
$v = new Vector<Int>(1,2,3);or
$v = new Vector<Int>([1,2,3]);Type Parameters
Element User Methods of Vector
-
-
These types are needed as return types of arithmetic computations.
-
TropicalNumber <Addition, Scalar>UNDOCUMENTED
Type Parameters
Addition Scalar default: RationalUser Methods of TropicalNumber
- orientation () → Int
The orientation of the associated addition, i.e. +1 if the corresponding 0 is +inf -1 if the corresponding 0 is -inf
Returns
Int
-
These types are auxiliary artifacts helping to build other classes, primarily representing template parameters or enumeration constants. They should not be used alone as property types or function arguments. In the most cases they won't even have user-accessible constructors.
-
ARRAY
A perl array of whatever contents.
-
Container
One-dimensional collection of objects, aka container in STL It can be accessed like a perl array. Sequential iteration via foreach() is always supported; random access might be supported depending on the underlying C++ object.
-
DirectedMulti
Type tag for a directed multigraph.
-
EdgeIteratorUNDOCUMENTED
-
EdgeListUNDOCUMENTED
-
Iterator <Element>
An iterator over a sequence of objects. The objects may be stored in a container or be generated on the fly.
Type Parameters
Element -
LocalFloatEpsilonUNDOCUMENTED
-
NonSymmetric
Labels a Matrix or an IncidenceMatrix as non-symmetric.
-
SCALAR
A perl scalar of whatever contents.
-
Serialized <X>UNDOCUMENTED
Type Parameters
X -
Symmetric
Labels a Matrix or an IncidenceMatrix as symmetric.
-
Undirected
Type tag for an undirected Graph.
-
UndirectedMulti
Type tag for an undirected multigraph.
-
-
This category contains all basic types, in particular those that wrap C++, GMP or perl types such as Int, Integer, Rational, Long, Float, Array, String, ...
-
AccurateFloat
A wrapper for AccurateFloat.
-
Bool
Corresponds to the C++ type bool.
-
Int
Corresponds to the C++ type int.
-
List <Element>
Corresponds to the C++ type std::list.
Type Parameters
Element -
Pair <First, Second>
Corresponds to the C++ type std::pair.
Type Parameters
First Second -
QuadraticExtension <Field>
Realizes quadratic extensions of fields.
You can construct the value a+b\(\sqrt r\) via QuadraticExtension(a, b, r) (where a, b, r are of type Field).
Type Parameters
Field default: Rational -
String
Corresponds to the C++ type std::string.
-
Text
Plain text without any imposed structure.
-
-
Here you can find the functions to access the polymake database.
-
DBCursor
A database cursor. Initialize it with a database name, a collection name and a query. You can then iterate over the objects matching the query with next. It lazily fetches more objects from the database server. (Note that you have to create a new cursor if you want to start from the beginning.)
-
MongoClient
A handler for the polyDB database internally controlling the connection to the MongoDB database
-
-
This contains all property types that are related to graphs.
-
EdgeHashMap <Dir, Element>derived from: GraphMap
Sparse mapping of edges to data items.
Type Parameters
Dir Element data associated with edgesUser Methods of EdgeHashMap
-
Graph <Dir>UNDOCUMENTED
Type Parameters
Dir User Methods of Graph
- adjacent_nodes (node) → Set
- contract_edge (node1, node2)
- delete_all_edges (tail_node, head_node)
- delete_edge (tail_node, head_node)
- delete_edge (iterator)
- delete_node (node)
Deletes all edges incident to the given node and marks it as invalid. The numeration of other nodes stays unchanged.
Parameters
Int node - edge_exists (tail_node, head_node) → Bool
- invalid_node (node) → Bool
- in_adjacent_nodes (node) → Set
- node_exists (node) → Bool
- node_out_of_range (node) → Bool
- out_adjacent_nodes (node) → Set
- out_degree (node) → Int
- permute_inv_nodes ()
permute the nodes param perm inverse permutation of node indexes
- permute_nodes ()
permute the nodes param perm permutation of node indexes
- squeeze ()
Renumbers the valid nodes as to eliminate all gaps left after deleting.
- squeeze_isolated ()
Deletes all nodes of degree 0, then renumbers the remaining nodes without gaps.
-
NodeHashMap <Dir, Element>derived from: GraphMap
Sparse mapping of nodes to data items.
Type Parameters
Dir Element data associated with nodes
-
-
These types are needed as return types of algebraic computations.
-
HermiteNormalForm
Complete result of the Hermite normal form computation. Contains the following fields: Matrix<Scalar> hnf: the Hermite normal form N of M SparseMatrix<Scalar> companion: unimodular Matrix R such that M*R = N. Int rank: rank of M
-
SingularValueDecomposition
Complete result of the singular value decomposition of a matrix M, such that left_companion * sigma * transpose(right_companion) = M Contains the following fields:
Matrix<Float> sigma: the diagonalized matrixMatrix<Float> left_companion: matrix of left singular vectorsMatrix<Float> right_companion: matrix of right singular vectors -
SmithNormalForm
Complete result of the Smith normal form computation. Contains the following fields:
SparseMatrix<Scalar> form: the Smith normal form S of the given matrix MList<Pair<Scalar, Int>> torsion: absolute values of the entries greater than 1 of the diagonal together with their multiplicityInt rank: rank of MSparseMatrix<Scalar> left_companion, right_companion: unimodular matrices L and R such thatM = LSR in normal case, or S = LMR in inverted case (as specified in the call to smith_normal_form function).
-
-
In this category you find all property types related to sets, such as Set, Map, HashMap, IncidenceMatrix, ...
-
FacetList
A FacetList is a collection of sets of integral numbers from a closed contiguous range [0..n-1]. The contained sets usually encode facets of a simplicial complex, with set elements corresponding to vertices of a complex, therefore the name.
From the structural perspective, FacetList is interchangeable with IncidenceMatrix, but they significantly differ in supported operations and their performance. IncidenceMatrix offers fast random access to elements, while FacetList is optimized for finding, inserting, and deleting facets fulfilling certain conditions like all subsets or supersets of a given vertex set.
On perl side, FacetList behaves like a sequence of Set<Int> without random access to facets. Facets are visited in chronological order. Each facet has a unique integral ID generated at the moment of insertion. The IDs can be obtained via call to index() of iterators created by find() methods.
User Methods of FacetList
-
eraseSubsets (s) → Int
-
eraseSupersets (s) → Int
-
findSubsets (s) → Iterator
-
findSupersets (s) → Iterator
-
n_vertices () → Int
-
HashMap <Key, Value>
An unordered map based on a hash table. Its interface is similar to that of Map, but the order of elements is not stable across polymake sessions and does not correlate with key values.
Accessing and inserting a value by its key works in constant time O(1).
You can create a new HashMap mapping Ints to Strings by
$myhashmap = new HashMap<Int, String>([1, "Monday"], [2, "Tuesday"]);On the perl side HashMaps are treated like hashrefs. You can work with a HashMap like you work with a Map (keeping in mind differences in performance and memory demand).
Type Parameters
Key type of the key valuesValue type of the mapped valueUser Methods of HashMap
-
HashSet <Element>
An unordered set of elements based on a hash table. Can be traversed as a normal container, but the order of elements is not stable across polymake sessions, even if the set is restored from the same data file every time.
Type Parameters
Element User Methods of HashSet
-
IncidenceMatrix <Sym>
A 0/1 incidence matrix.
Type Parameters
Sym User Methods of IncidenceMatrix
- col (i) → SparseVector<Int>
- minor (r, c) → IncidenceMatrix
Returns a minor of the matrix containing the rows in r and the columns in c. You can pass All if you want all rows or columns and ~ for the complement of a set. E.g.
$A->minor(All, ~[0]);will give you the minor of a matrix containing all rows and all but the 0-th column.
- row (i) → SparseVector<Int>
- squeeze ()
Removes empty rows and columns. The remaining rows and columns are renumbered without gaps.
- squeeze_cols ()
Removes empty columns. The remaining columns are renumbered without gaps.
- squeeze_rows ()
Removes empty rows. The remaining rows are renumbered without gaps.
-
Map <Key, Value>
Maps are sorted associative containers that contain unique key/value pairs. Maps are sorted by their keys.
Accessing or inserting a value needs logarithmic time O(log n), where n is the size of the map.
You can create a new Map mapping Ints to Strings by
$mymap = new Map<Int, String>([1, "Monday"], [2, "Tuesday"]);On the perl side Maps are treated like hashrefs. You can add a new key/value pair by
$mymap->{3} = "Wednesday";(If the key is already contained in the Map, the corresponding value is replaced by the new one.) or ask for the value of a key by
print $mymap->{1};Type Parameters
Key type of the key valuesValue type of the mapped value -
Set <Element>
A type for ordered sets containing elements of type Element.
You can for example create a new Set by:
$s = new Set(2, 3, 5, 7);You can perform set theoretic operations:
$s1 + $s2 union$s1 * $s2 intersection$s1 - $s2 difference$s1 ^ $s2 symmetric differenceType Parameters
Element default: IntUser Methods of Set
-
These property_types are for visualization.
-
Flexible
This is a pseudo-type for documentation purposes only. Many options of visualization functions modifying the appearance of some set of graphical elements like points, edges, facets, etc. accept a wide range of possible values, allowing for different grades of flexibility (and complexity):
SCALAR the same attribute value is applied to all elements ARRAY each element gets its individual attribute value HASH elements found in the hash get their individual attribute values, for the rest the appropriate default applies SUB a piece of code computing the attribute value for the given element
Unless specified explicitly in the detailed option description, the indices, keys, or subroutine arguments used for retrieval of the attribute values are just the zero-based ordinal numbers of the elements.
-
HSV
A color described as a Hue-Saturation-Value triple. Is convertible to and from an RGB representation.
-
RGB
A color described as a Red-Green-Blue triple. Can be constructed from a list of three integral values from the range 0..255, or a hex triplet with a leading # symbol, or a list of three floating-point values from the range 0..1, or a symbolic name from the X11 color names.
Common Option Lists
-
These options are for visualization.
-
Visual::PointSet::decorations
Common attributes modifying the appearance of PointSets and all visual objects derived thereof. Please be aware that no one visualization program interfaced to polymake supports all of them. Unsupported options are normally ignored.
Options
String Title the name of the drawingString Name the name of this visual object in the drawingBool Hidden if set to true, the visual object is not rendered (useful for interactive visualization programs allowing for switching details on and off)String PointLabels if set to "hidden", no point labels are displayedString VertexLabels alias for PointLabelsFlexible<Color> PointColor color of the spheres or rectangles representing the pointsFlexible<Color> VertexColor alias for PointColorFlexible<Float> PointThickness scaling factor for the size of the spheres or rectangles representing the pointsFlexible<Float> VertexThickness alias for PointThicknessFlexible<Color> PointBorderColor color of the border line of rectangles representing the pointsFlexible<Float> VertexBorderColor alias for PointBorderColorFlexible<Float> PointBorderThickness scaling factor for the thickness of the border line of rectangles representing the pointsFlexible<Float> VertexBorderThickness alias for PointBorderThicknessFlexible<String> PointStyle if set to "hidden", neither point nor its label is renderedFlexible<String> VertexStyle alias for PointStyleVector<Float> ViewPoint ViewPoint for Sketch visualizationVector<Float> ViewDirection ViewDirection for Sketch visualizationVector<Float> ViewUp ViewUp for Sketch visualizationFloat Scale scale for Sketch visualizationFlexible<String> LabelAlignment Defines the alignment of the vertex labels: left, right or center -
Visual::Polygon::decorations
Attributes modifying the appearance of filled polygons.
Options
Color FacetColor filling color of the polygonFloat FacetTransparency transparency factor of the polygon between 0 (opaque) and 1 (completely translucent)String FacetStyle if set to "hidden", the inner area of the polygon is not renderedColor EdgeColor color of the boundary linesFloat EdgeThickness scaling factor for the thickness of the boundary linesString EdgeStyle if set to "hidden", the boundary lines are not rendered -
Visual::Polygons::decorations
Attributes modifying the appearance of a set of polygons (like a polygonal surface).
Options
Flexible<Color> FacetColor filling color of the polygonsFlexible<Float> FacetTransparency transparency factor of the polygons between 0 (opaque) and 1 (completely translucent)Flexible<String> FacetStyle if set to "hidden", the inner area of the polygons are not rendered at allString FacetLabels if set to "hidden", the facet labels are not displayed (in the most cases this is the default behavior)Color EdgeColor color of the boundary linesFloat EdgeThickness scaling factor for the thickness of the boundary linesString EdgeStyle if set to "hidden", the boundary lines are not rendered -
Visual::Wire::decorations
Attributes modifying the appearance of "wire frameworks". Unlike the rest, the flexible edge attributes are retrieved using the edge iterator as an index/key/argument.
Options
Flexible<Color> EdgeColor color of the lines representing the edgesFlexible<Float> EdgeThickness scaling factor for the thickness of the lines representing the edgesEdgeMap<String> EdgeLabels textual labels to be placed along the edgesFlexible<String> EdgeStyle if set to "hidden", neither the edge nor its label is rendered
-