=item isl_int_set_si(r,i)
+=item isl_int_set_gmp(r,g)
+
+=item isl_int_get_gmp(i,g)
+
=item isl_int_abs(r,i)
=item isl_int_neg(r,i)
The coefficients of any existentially quantified variables appear
between those of the set variables and those of the parameters.
+=head3 Extended C<PolyLib> format
+
+The extended C<PolyLib> format is nearly identical to the
+C<PolyLib> format. The only difference is that the line
+containing the number of rows and columns of a constraint matrix
+also contains four additional numbers:
+the number of output dimensions, the number of input dimensions,
+the number of local dimensions (i.e., the number of existentially
+quantified variables) and the number of parameters.
+For sets, the number of ``output'' dimensions is equal
+to the number of set dimensions, while the number of ``input''
+dimensions is zero.
+
=head3 Input
#include <isl_set.h>
__isl_give isl_printer *isl_printer_set_suffix(
__isl_take isl_printer *p, const char *suffix);
-The C<output_format> may be either C<ISL_FORMAT_ISL>, C<ISL_FORMAT_OMEGA>
-or C<ISL_FORMAT_POLYLIB> and defaults to C<ISL_FORMAT_ISL>.
+The C<output_format> may be either C<ISL_FORMAT_ISL>, C<ISL_FORMAT_OMEGA>,
+C<ISL_FORMAT_POLYLIB>, C<ISL_FORMAT_EXT_POLYLIB> or C<ISL_FORMAT_LATEX>
+and defaults to C<ISL_FORMAT_ISL>.
Each line in the output is indented by C<indent> spaces
(default: 0), prefixed by C<prefix> and suffixed by C<suffix>.
In the C<PolyLib> format output,
The functions above construct a (basic, regular or union) relation
that maps (a wrapped version of) the input relation to its domain or range.
+=item * Identity
+
+ __isl_give isl_map *isl_set_identity(
+ __isl_take isl_set *set);
+ __isl_give isl_union_map *isl_union_set_identity(
+ __isl_take isl_union_set *uset);
+
+Construct an identity relation on the given (union) set.
+
=item * Deltas
__isl_give isl_basic_set *isl_basic_map_deltas(
In case of union sets and relations, the affine hull is computed
per space.
+=item * Polyhedral hull
+
+ __isl_give isl_basic_set *isl_set_polyhedral_hull(
+ __isl_take isl_set *set);
+ __isl_give isl_basic_map *isl_map_polyhedral_hull(
+ __isl_take isl_map *map);
+ __isl_give isl_union_set *isl_union_set_polyhedral_hull(
+ __isl_take isl_union_set *uset);
+ __isl_give isl_union_map *isl_union_map_polyhedral_hull(
+ __isl_take isl_union_map *umap);
+
+These functions compute a single basic set or relation
+not involving any existentially quantified variables
+that contains the whole input set or relation.
+In case of union sets and relations, the polyhedral hull is computed
+per space.
+
=item * Power
__isl_give isl_map *isl_map_power(__isl_take isl_map *map,
__isl_give isl_union_map *isl_union_set_unwrap(
__isl_take isl_union_set *uset);
+=item * Flattening
+
+Remove any internal structure of domain (and range) of the given
+set or relation. If there is any such internal structure in the input,
+then the name of the space is also removed.
+
+ __isl_give isl_set *isl_set_flatten(
+ __isl_take isl_set *set);
+ __isl_give isl_map *isl_map_flatten(
+ __isl_take isl_map *map);
+
+ __isl_give isl_map *isl_set_flatten_map(
+ __isl_take isl_set *set);
+
+The function above constructs a relation
+that maps the input set to a flattened version of the set.
+
=item * Dimension manipulation
__isl_give isl_set *isl_set_add_dims(
If the enumeration is performed successfully and to completion,
then C<isl_set_foreach_point> returns C<0>.
-To obtain a single point of a set, use
+To obtain a single point of a (basic) set, use
+ __isl_give isl_point *isl_basic_set_sample_point(
+ __isl_take isl_basic_set *bset);
__isl_give isl_point *isl_set_sample_point(
__isl_take isl_set *set);
The gist operation applies the gist operation to each of
the cells in the domain of the input piecewise quasipolynomial.
-In future, the operation will also exploit the context
+The context is also exploited
to simplify the quasipolynomials associated to each cell.
+ __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial(
+ __isl_take isl_pw_qpolynomial *pwqp, int sign);
+ __isl_give isl_union_pw_qpolynomial *
+ isl_union_pw_qpolynomial_to_polynomial(
+ __isl_take isl_union_pw_qpolynomial *upwqp, int sign);
+
+Approximate each quasipolynomial by a polynomial. If C<sign> is positive,
+the polynomial will be an overapproximation. If C<sign> is negative,
+it will be an underapproximation. If C<sign> is zero, the approximation
+will lie somewhere in between.
+
=head2 Bounds on Piecewise Quasipolynomials and Piecewise Quasipolynomial Reductions
A piecewise quasipolynomial reduction is a piecewise
needs to be set to either C<ISL_FORMAT_ISL> or C<ISL_FORMAT_C>.
For C<isl_printer_print_union_pw_qpolynomial_fold>,
output format of the printer
-needs to be set to either C<ISL_FORMAT_ISL>.
+needs to be set to C<ISL_FORMAT_ISL>.
+In case of printing in C<ISL_FORMAT_C>, the user may want
+to set the names of all dimensions
+
+ __isl_give isl_pw_qpolynomial_fold *
+ isl_pw_qpolynomial_fold_set_dim_name(
+ __isl_take isl_pw_qpolynomial_fold *pwf,
+ enum isl_dim_type type, unsigned pos,
+ const char *s);
=head3 Inspecting (Piecewise) Quasipolynomial Reductions
=head3 Operations on Piecewise Quasipolynomial Reductions
+ __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add(
+ __isl_take isl_pw_qpolynomial_fold *pwf1,
+ __isl_take isl_pw_qpolynomial_fold *pwf2);
+
__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold(
__isl_take isl_pw_qpolynomial_fold *pwf1,
__isl_take isl_pw_qpolynomial_fold *pwf2);