An C<isl_local_space> can be created from an C<isl_space>
using C<isl_local_space_from_space>.
+=item * The C<isl_div> type has been removed. Functions that used
+to return an C<isl_div> now return an C<isl_aff>.
+Note that the space of an C<isl_aff> is that of relation.
+When replacing a call to C<isl_div_get_coefficient> by a call to
+C<isl_aff_get_coefficient> any C<isl_dim_set> argument needs
+to be replaced by C<isl_dim_in>.
+A call to C<isl_aff_from_div> can be replaced by a call
+to C<isl_aff_floor>.
+A call to C<isl_qpolynomial_div(div)> call be replaced by
+the nested call
+
+ isl_qpolynomial_from_aff(isl_aff_floor(div))
+
+The function C<isl_constraint_div> has also been renamed
+to C<isl_constraint_get_div>.
+
+=item * The C<nparam> argument has been removed from
+C<isl_map_read_from_str> and similar functions.
+When reading input in the original PolyLib format,
+the result will have no parameters.
+If parameters are expected, the caller may want to perform
+dimension manipulation on the result.
+
=back
=head1 Installation
__isl_give isl_space *isl_space_from_range(__isl_take isl_space *space);
__isl_give isl_space *isl_space_params(
__isl_take isl_space *space);
+ __isl_give isl_space *isl_space_set_from_params(
+ __isl_take isl_space *space);
__isl_give isl_space *isl_space_reverse(__isl_take isl_space *space);
__isl_give isl_space *isl_space_join(__isl_take isl_space *left,
__isl_take isl_space *right);
enum isl_dim_type type, unsigned pos, const char *s);
__isl_give isl_space *isl_local_space_get_space(
__isl_keep isl_local_space *ls);
- __isl_give isl_div *isl_local_space_get_div(
+ __isl_give isl_aff *isl_local_space_get_div(
__isl_keep isl_local_space *ls, int pos);
__isl_give isl_local_space *isl_local_space_copy(
__isl_keep isl_local_space *ls);
#include <isl/set.h>
__isl_give isl_basic_set *isl_basic_set_read_from_file(
- isl_ctx *ctx, FILE *input, int nparam);
+ isl_ctx *ctx, FILE *input);
__isl_give isl_basic_set *isl_basic_set_read_from_str(
- isl_ctx *ctx, const char *str, int nparam);
+ isl_ctx *ctx, const char *str);
__isl_give isl_set *isl_set_read_from_file(isl_ctx *ctx,
- FILE *input, int nparam);
+ FILE *input);
__isl_give isl_set *isl_set_read_from_str(isl_ctx *ctx,
- const char *str, int nparam);
+ const char *str);
#include <isl/map.h>
__isl_give isl_basic_map *isl_basic_map_read_from_file(
- isl_ctx *ctx, FILE *input, int nparam);
+ isl_ctx *ctx, FILE *input);
__isl_give isl_basic_map *isl_basic_map_read_from_str(
- isl_ctx *ctx, const char *str, int nparam);
+ isl_ctx *ctx, const char *str);
__isl_give isl_map *isl_map_read_from_file(
- isl_ctx *ctx, FILE *input, int nparam);
+ isl_ctx *ctx, FILE *input);
__isl_give isl_map *isl_map_read_from_str(isl_ctx *ctx,
- const char *str, int nparam);
+ const char *str);
#include <isl/union_set.h>
__isl_give isl_union_set *isl_union_set_read_from_file(
The input format is autodetected and may be either the C<PolyLib> format
or the C<isl> format.
-C<nparam> specifies how many of the final columns in
-the C<PolyLib> format correspond to parameters.
-If input is given in the C<isl> format, then the number
-of parameters needs to be equal to C<nparam>.
-If C<nparam> is negative, then any number of parameters
-is accepted in the C<isl> format and zero parameters
-are assumed in the C<PolyLib> format.
=head3 Output
isl_basic_set *bset;
bset = isl_basic_set_read_from_str(ctx,
- "{[i] : exists (a : i = 2a and i >= 10 and i <= 42)}", -1);
+ "{[i] : exists (a : i = 2a and i >= 10 and i <= 42)}");
A basic set or relation can also be constructed from two matrices
describing the equalities and the inequalities.
enum isl_dim_type type, unsigned first, unsigned n);
The explicit representations of the existentially quantified
-variables can be inspected using the following functions.
-Note that the user is only allowed to use these functions
+variables can be inspected using the following function.
+Note that the user is only allowed to use this function
if the inspected set or map is the result of a call
to C<isl_set_compute_divs> or C<isl_map_compute_divs>.
+The existentially quantified variable is equal to the floor
+of the returned affine expression. The affine expression
+itself can be inspected using the functions in
+L<"Piecewise Quasi Affine Expressions">.
- __isl_give isl_div *isl_constraint_div(
+ __isl_give isl_aff *isl_constraint_get_div(
__isl_keep isl_constraint *constraint, int pos);
- isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div);
- void isl_div_get_constant(__isl_keep isl_div *div,
- isl_int *v);
- void isl_div_get_denominator(__isl_keep isl_div *div,
- isl_int *v);
- void isl_div_get_coefficient(__isl_keep isl_div *div,
- enum isl_dim_type type, int pos, isl_int *v);
To obtain the constraints of a basic set or map in matrix
form, use the following functions.
__isl_give isl_basic_set *isl_basic_map_range(
__isl_take isl_basic_map *bmap);
__isl_give isl_set *isl_set_params(__isl_take isl_set *set);
+ __isl_give isl_set *isl_map_params(__isl_take isl_map *map);
__isl_give isl_set *isl_map_domain(
__isl_take isl_map *bmap);
__isl_give isl_set *isl_map_range(
__isl_give isl_map *isl_map_insert_dims(
__isl_take isl_map *map,
enum isl_dim_type type, unsigned pos, unsigned n);
+ __isl_give isl_basic_set *isl_basic_set_move_dims(
+ __isl_take isl_basic_set *bset,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos,
+ unsigned n);
+ __isl_give isl_basic_map *isl_basic_map_move_dims(
+ __isl_take isl_basic_map *bmap,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos,
+ unsigned n);
+ __isl_give isl_set *isl_set_move_dims(
+ __isl_take isl_set *set,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos,
+ unsigned n);
+ __isl_give isl_map *isl_map_move_dims(
+ __isl_take isl_map *map,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos,
+ unsigned n);
It is usually not advisable to directly change the (input or output)
space of a set or a relation as this removes the name and the internal
Note that the space in which the resulting object lives is a map space
with the given space as domain and a one-dimensional range.
-A quasi affine expression can also be initialized from an C<isl_div>:
-
- #include <isl/div.h>
- __isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div);
-
An empty piecewise quasi affine expression (one with no cells)
or a piecewise quasi affine expression with a single cell can
be created using the following functions.
enum isl_dim_type type, int pos, isl_int *v);
int isl_aff_get_denominator(__isl_keep isl_aff *aff,
isl_int *v);
- __isl_give isl_div *isl_aff_get_div(
+ __isl_give isl_aff *isl_aff_get_div(
__isl_keep isl_aff *aff, int pos);
int isl_pw_aff_foreach_piece(__isl_keep isl_pw_aff *pwaff,
__isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain(
__isl_take isl_space *domain,
const isl_int n, const isl_int d);
- __isl_give isl_qpolynomial *isl_qpolynomial_div(
- __isl_take isl_div *div);
__isl_give isl_qpolynomial *isl_qpolynomial_var_on_domain(
__isl_take isl_space *domain,
enum isl_dim_type type, unsigned pos);
isl_int *d);
int isl_term_get_exp(__isl_keep isl_term *term,
enum isl_dim_type type, unsigned pos);
- __isl_give isl_div *isl_term_get_div(
+ __isl_give isl_aff *isl_term_get_div(
__isl_keep isl_term *term, unsigned pos);
void isl_term_free(__isl_take isl_term *term);
then the numerator and denominator of the constant
are returned in C<*n> and C<*d>, respectively.
+To check whether two union piecewise quasipolynomials are
+obviously equal, use
+
+ int isl_union_pw_qpolynomial_plain_is_equal(
+ __isl_keep isl_union_pw_qpolynomial *upwqp1,
+ __isl_keep isl_union_pw_qpolynomial *upwqp2);
+
=head3 Operations on (Piecewise) Quasipolynomials
__isl_give isl_qpolynomial *isl_qpolynomial_scale(
int (*fn)(__isl_take isl_qpolynomial *qp,
void *user), void *user);
+=head3 Properties of Piecewise Quasipolynomial Reductions
+
+To check whether two union piecewise quasipolynomial reductions are
+obviously equal, use
+
+ int isl_union_pw_qpolynomial_fold_plain_is_equal(
+ __isl_keep isl_union_pw_qpolynomial_fold *upwf1,
+ __isl_keep isl_union_pw_qpolynomial_fold *upwf2);
+
=head3 Operations on Piecewise Quasipolynomial Reductions
__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale(