29#include <isl_config.h>
32#define EL_BASE qpolynomial
37#define EL_BASE pw_qpolynomial
46 case isl_dim_out:
return space->nparam + space->n_in;
98 if (poly1->var != poly2->var)
99 return poly1->var - poly2->var;
120 if (rec1->
n != rec2->
n)
121 return rec1->
n - rec2->
n;
123 for (i = 0; i < rec1->
n; ++i) {
140 if (is_cst1 < 0 || !poly2)
144 if (poly1->var != poly2->var)
163 if (rec1->
n != rec2->
n)
166 for (i = 0; i < rec1->
n; ++i) {
181 if (is_cst < 0 || !is_cst)
197 if (is_cst < 0 || !is_cst)
213 if (is_cst < 0 || !is_cst)
229 if (is_cst < 0 || !is_cst)
245 if (is_cst < 0 || !is_cst)
262 if (is_cst < 0 || !is_cst)
279 if (is_cst < 0 || !is_cst)
451 if (qp->dim == space) {
489 return qp ? qp->dim->ctx : NULL;
497 return qp ? qp->dim : NULL;
509#define TYPE isl_qpolynomial
511#define PEEK_SPACE peek_domain_space
564 if (qp->div == local) {
622 return qp->div->n_row;
705 return qp ? qp->poly : NULL;
748 for (i = 0; i < rec->n; ++i)
793 for (i = 0; i < rec->
n; ++i) {
868 if (!poly1 || !poly2)
929 if (!poly1 || !poly2)
964 if (poly1->var < poly2->var)
967 if (poly2->var < poly1->var) {
972 if (is_infty >= 0 && !is_infty)
1001 if (rec1->
n < rec2->
n)
1009 for (i = rec2->
n - 1; i >= 0; --i) {
1016 if (i != rec1->
n - 1)
1029 else if (rec1->
n == 1)
1123 for (i = 0; i < rec->
n; ++i) {
1182 for (i = 0; i < rec->
n; ++i) {
1201 if (!poly1 || !poly2)
1233 size = rec1->
n + rec2->
n - 1;
1238 for (i = 0; i < rec1->
n; ++i) {
1245 for (; i <
size; ++i) {
1251 for (i = 0; i < rec1->
n; ++i) {
1252 for (j = 1; j < rec2->
n; ++j) {
1276 isl_bool is_zero, is_nan, is_one, is_cst;
1278 if (!poly1 || !poly2)
1329 if (poly1->var < poly2->var)
1332 if (poly2->var < poly1->var) {
1338 if (is_infty >= 0 && !is_infty)
1353 for (i = 0; i < rec->
n; ++i) {
1390 while (
power >>= 1) {
1412 "domain of polynomial should be a set",
goto error);
1486 if (qp->poly ==
poly) {
1565 for (i = 0; i < 1 +
power; ++i) {
1605 for (i = rec->
n - 2; i >= 0; --i) {
1625 isl_assert(div1->ctx, div1->n_row >= div2->n_row &&
1626 div1->n_col >= div2->n_col,
1629 if (div1->n_row == div2->n_row)
1632 n_row = div1->n_row;
1633 n_col = div1->n_col;
1634 div1->n_row = div2->n_row;
1635 div1->n_col = div2->n_col;
1639 div1->n_row = n_row;
1640 div1->n_col = n_col;
1680 int *
pos = NULL, *
at = NULL;
1681 int *reordering = NULL;
1686 if (qp->div->n_row <= 1)
1697 len = qp->div->n_col - 2;
1699 if (!array || !
pos || !
at || !reordering)
1702 for (i = 0; i < qp->div->n_row; ++i) {
1703 array[i].
div = qp->div;
1712 for (i = 0; i < div_pos; ++i)
1715 for (i = 0; i < qp->div->n_row; ++i) {
1716 if (
pos[array[i].
row] == i)
1720 at[
pos[array[i].row]] =
at[i];
1721 at[i] = array[i].row;
1722 pos[array[i].row] = i;
1726 for (i = 0; i < len - div_pos; ++i) {
1729 qp->div->row[i - skip], qp->div->n_col)) {
1732 2 + div_pos + i - skip);
1734 2 + div_pos + i - skip, 1);
1737 reordering[div_pos + array[i].
row] = div_pos + i - skip;
1740 qp->poly =
reorder(qp->poly, reordering);
1742 if (!qp->poly || !qp->div)
1773 if (
poly->var < first)
1776 if (exp[
poly->var - first] ==
poly->var - first)
1783 poly->var = exp[
poly->var - first] + first;
1789 for (i = 0; i < rec->
n; ++i) {
1790 rec->
p[i] =
expand(rec->
p[i], exp, first);
1817 isl_assert(qp1->div->ctx, qp1->div->n_row >= qp2->div->n_row &&
1818 qp1->div->n_col >= qp2->div->n_col,
goto error);
1820 n_div1 = qp1->div->n_row;
1821 n_div2 = qp2->div->n_row;
1824 if ((n_div1 && !exp1) || (n_div2 && !exp2))
1839 if (!qp1->poly || !qp2->poly)
1846 return fn(qp1, qp2);
1862 if (isl_qpolynomial_check_equal_space(qp1, qp2) < 0)
1865 if (qp1->div->n_row < qp2->div->n_row)
1966 "expecting rational factor",
goto error);
2004 "expecting rational factor",
goto error);
2007 "cannot scale down by zero",
goto error);
2022 if (isl_qpolynomial_check_equal_space(qp1, qp2) < 0)
2025 if (qp1->div->n_row < qp2->div->n_row)
2071 for (i = 0; i <
pwqp->n; ++i) {
2146 if (is_cst < 0 || !is_cst)
2217 if (is_cst < 0 || !is_cst)
2236 if (qp->div->n_row > 0)
2270 if (
poly->var < 0) {
2395 for (i = 0; i < rec->
n; ++i)
2463 if (
poly->var < first)
2472 if (
poly->var >= first +
n)
2478 for (i = rec->
n - 2; i >= 0; --i) {
2503 for (i = 0; i < len - 1; ++i) {
2524 unsigned total = qp->div->n_col - 2;
2570 for (i = 0; i < div_pos + div; ++i)
2572 for (i = div_pos + div + 1; i < div_pos + qp->div->n_row; ++i)
2573 reordering[i] = i - 1;
2576 qp->poly =
reorder(qp->poly, reordering);
2579 if (!qp->poly || !qp->div)
2604 for (i = 0; qp && i < qp->div->n_row; ++i) {
2607 for (j = i + 1; j < qp->div->n_row; ++j) {
2611 qp->div->ctx->one, qp->div->row[j] + 1,
2612 qp->div->row[j][2 + div_pos + i],
2613 qp->div->row[i] + 1, 1 + div_pos + i);
2618 qp->div->row[i][0], qp->div->n_col - 1);
2640 unsigned total = qp->div->n_col - qp->div->n_row - 2;
2643 for (i = 0; i < 1 +
total + div; ++i) {
2645 isl_int_lt(qp->div->row[div][1 + i], qp->div->row[div][0]))
2647 isl_int_fdiv_q(v, qp->div->row[div][1 + i], qp->div->row[div][0]);
2649 qp->div->row[div][1 + i], qp->div->row[div][0]);
2651 for (j = div + 1; j < qp->div->n_row; ++j) {
2655 v, qp->div->row[j][2 +
total + div]);
2673 for (i = div->n_col - 1; i >= 1; --i) {
2696 unsigned total = qp->div->n_col - qp->div->n_row - 2;
2699 qp->div->row[div] + 1, qp->div->n_col - 1);
2702 qp->div->row[div][1], qp->div->row[div][0]);
2705 qp->div->ctx->negone, 2 +
total + div);
2734 if (
total < 0 || n_div < 0)
2739 for (i = 0; i < n_div; ++i)
2742 for (i = 0; i < qp->div->n_row; ++i) {
2756 for (i = 0; i < n_div; ++i)
2760 for (i = 0; i < n_div; ++i)
2773 if (new_n_div < n_div)
2837 active[
poly->var] = 1;
2840 for (i = 0; i < rec->
n; ++i)
2855 if (d < 0 || !active)
2858 for (i = 0; i < d; ++i)
2859 for (j = 0; j < qp->div->n_row; ++j) {
2870#define TYPE isl_qpolynomial
2889 if (isl_qpolynomial_check_range(qp,
type, first,
n) < 0)
2906 for (i = 0; i <
n; ++i)
2907 if (active[first + i]) {
2931 int *reordering = NULL;
2938 if (qp->div->n_row == 0)
2944 len = qp->div->n_col - 2;
2953 for (i = qp->div->n_row - 1; i >= 0; --i) {
2954 if (!active[div_pos + i]) {
2958 for (j = 0; j < i; ++j) {
2961 active[div_pos + j] = 1;
2975 for (i = 0; i < div_pos; ++i)
2979 n_div = qp->div->n_row;
2980 for (i = 0; i < n_div; ++i) {
2981 if (!active[div_pos + i]) {
2984 2 + div_pos + i - skip, 1);
2987 reordering[div_pos + i] = div_pos + i - skip;
2990 qp->poly =
reorder(qp->poly, reordering);
2992 if (!qp->poly || !qp->div)
3007 unsigned first,
unsigned n)
3014 if (
n == 0 ||
poly->var < 0 ||
poly->var < first)
3016 if (
poly->var < first +
n) {
3028 for (i = 0; i < rec->
n; ++i) {
3050 "cannot set name of output/set dimension",
3070 "cannot drop output/set dimension",
3072 if (isl_qpolynomial_check_range(qp,
type, first,
n) < 0)
3127 "polynomial involves some of the domain dimensions",
3147 if (eq->n_eq == 0) {
3162 for (i = 0; i < eq->n_eq; ++i) {
3164 if (j < 0 || j == 0 || j >=
total)
3167 for (k = 0; k < qp->div->n_row; ++k) {
3171 &qp->div->row[k][0]);
3181 eq->eq[i], denom,
total);
3209 if (qp->div->n_row > 0)
3256#define isl_qpolynomial_involves_nan isl_qpolynomial_is_nan
3259#define PW isl_pw_qpolynomial
3261#define BASE qpolynomial
3263#define EL_IS_ZERO is_zero
3267#define IS_ZERO is_zero
3270#undef DEFAULT_IS_ZERO
3271#define DEFAULT_IS_ZERO 1
3290#define BASE pw_qpolynomial
3316 return isl_pw_qpolynomial_union_add_(pwqp1, pwqp2);
3326 if (!pwqp1 || !pwqp2)
3352 n = pwqp1->n * pwqp2->n;
3355 for (i = 0; i < pwqp1->n; ++i) {
3356 for (j = 0; j < pwqp2->n; ++j) {
3410 vec->el[1 +
poly->var], vec->el[0]);
3415 for (i = rec->
n - 2; i >= 0; --i) {
3489 unsigned first,
unsigned n)
3500 "cannot insert output/set dimensions",
3502 if (isl_qpolynomial_check_range(qp,
type, first, 0) < 0)
3512 g_pos =
pos(qp->dim,
type) + first;
3518 total = qp->div->n_col - 2;
3519 if (
total > g_pos) {
3524 for (i = 0; i <
total - g_pos; ++i)
3526 qp->poly =
expand(qp->poly, exp, g_pos);
3555 unsigned len,
unsigned dst,
unsigned src,
unsigned n)
3565 for (i = 0; i < dst; ++i)
3567 for (i = 0; i <
n; ++i)
3568 reordering[src + i] = dst + i;
3569 for (i = 0; i < src - dst; ++i)
3570 reordering[dst + i] = dst +
n + i;
3571 for (i = 0; i < len - src -
n; ++i)
3572 reordering[src +
n + i] = src +
n + i;
3574 for (i = 0; i < src; ++i)
3576 for (i = 0; i <
n; ++i)
3577 reordering[src + i] = dst + i;
3578 for (i = 0; i < dst - src; ++i)
3579 reordering[src +
n + i] = src + i;
3580 for (i = 0; i < len - dst -
n; ++i)
3581 reordering[dst +
n + i] = dst +
n + i;
3593 unsigned dst_pos,
unsigned src_pos,
unsigned n)
3639 "cannot move output/set dimension",
3644 if (isl_qpolynomial_check_range(qp, src_type, src_pos,
n) < 0)
3658 if (src_off < 0 || dst_off < 0)
3661 g_dst_pos = dst_off + dst_pos;
3662 g_src_pos = src_off + src_pos;
3663 if (dst_type > src_type)
3670 src_type, src_pos,
n);
3690 if (
offset < 0 || n_in < 0 || n_out < 0)
3763 for (i = 0; i < pwaff->n; ++i) {
3806 "cannot substitute output/set dimension",
3808 if (isl_qpolynomial_check_range(qp,
type, first,
n) < 0)
3812 for (i = 0; i <
n; ++i)
3816 for (i = 0; i <
n; ++i)
3817 if (isl_qpolynomial_check_equal_space(qp, subs[i]) < 0)
3820 isl_assert(qp->dim->ctx, qp->div->n_row == 0,
goto error);
3821 for (i = 0; i <
n; ++i)
3822 isl_assert(qp->dim->ctx, subs[i]->div->n_row == 0,
goto error);
3829 for (i = 0; i <
n; ++i)
3830 polys[i] = subs[i]->
poly;
3861 if (qp->div->n_row == 0)
3873 return fn(bset, polynomial,
user);
3893 if (is_cst ||
poly->var < first)
3900 for (i = 0; i < rec->
n; ++i) {
3909 if (
poly->var < last)
3930 if (ovar < 0 || nvar < 0)
3936 unsigned pos,
int deg)
3945 if (is_cst ||
poly->var <
pos) {
3969 for (i = 0; i < rec->
n; ++i) {
3999 "output/set dimension does not have a coefficient",
4001 if (isl_qpolynomial_check_range(qp,
type, t_pos, 1) < 0)
4005 g_pos =
pos(qp->dim,
type) + t_pos;
4009 qp->div->n_row,
poly);
4027 int target,
int first,
int last)
4043 if (is_cst ||
poly->var < first) {
4060 for (i = 0; i < rec->
n; ++i) {
4067 poly->var < last ? deg + i : i, target,
4099 if (ovar < 0 || nvar < 0)
4125 sizeof(
struct isl_term) + (
n - 1) *
sizeof(
int));
4168 for (i = 0; i <
total; ++i)
4169 dup->pow[i] = term->pow[i];
4190 if (--term->ref > 0)
4217 return dim + term->div->n_row;
4226 return term ? term->dim : NULL;
4253 return term ? term->dim->ctx : NULL;
4275#define TYPE isl_term
4284 if (isl_term_check_range(term,
type,
pos, 1) < 0)
4323 if (is_zero < 0 || !term)
4331 if (is_bad >= 0 && !is_bad)
4333 if (is_bad >= 0 && !is_bad)
4335 if (is_cst < 0 || is_bad < 0)
4339 "cannot handle NaN/infty polynomial",
4361 for (i = 0; i < rec->
n; ++i) {
4365 term->pow[
poly->var] = i;
4373 term->pow[
poly->var] = 0;
4417 for (i = 0; i <
n; ++i) {
4425 term->div->n_row,
poly);
4462 extra = d_set - d_qp;
4464 if (d_set < 0 || d_qp < 0 ||
total < 0)
4466 if (qp->div->n_row) {
4472 for (i = 0; i < qp->div->n_row; ++i)
4482 for (i = 0; i < qp->div->n_row; ++i)
4515 for (i = 0; i < d; ++i)
4526 if (nparam < 0 || nvar < 0)
4528 for (i = 0; i < nparam; ++i) {
4534 for (i = 0; i < nvar; ++i) {
4535 if (active[nparam + i])
4566 }
else if (data->
max) {
4630 n_sub = morph->inv->n_row - 1;
4631 if (morph->inv->n_row != morph->inv->n_col)
4637 for (i = 0; 1 + i < morph->inv->n_row; ++i)
4639 morph->inv->row[0][0], morph->inv->n_col);
4640 if (morph->inv->n_row != morph->inv->n_col)
4642 subs[morph->inv->n_row - 1 + i] =
4647 for (i = 0; i < n_sub; ++i)
4677 return isl_union_pw_qpolynomial_match_bin_op(upwqp1, upwqp2,
4724 if (equal_params < 0)
4726 if (!equal_params) {
4764 if (
total < 0 || !qp)
4780 isl_int_add(bset->ineq[k][0], bset->ineq[k][0], qp->div->row[div][0]);
4814 for (i = div + 1; i < qp->div->n_row; ++i) {
4818 qp->div->row[i][2 + div_pos + div], v);
4844 if (
set_div(set_i, qp_i, div, min, data) < 0)
4877 if (qp->div->n_row == 0) {
4889 for (i = 0; i < qp->div->n_row; ++i) {
4897 set->ctx->one, &min, NULL, NULL);
4905 set->ctx->one, &max, NULL, NULL);
4919 if (i < qp->div->n_row) {
5023 if (n2 < 0 || n_eq < 0)
5025 else if (n2 < n1 || n_eq > 0)
5069 if (
f->n_group == 0) {
5129 if (bset->n_eq == 0)
5161 if (qp->div->n_row == 0)
5168 for (i = qp->div->n_row - 1; i >= 0; --i) {
5171 qp->div->row[i][1], qp->div->row[i][0]);
5173 qp->div->row[i][1], 1);
5176 qp->div->row[i][0], qp->div->n_col - 1);
5203 for (i = 0; i <
pwqp->n; ++i) {
5248 for (i = 0; i < qp->div->n_row; ++i) {
5249 isl_int *row = qp->div->row[i];
5258 for (j = 0; j < div_pos; ++j) {
5267 for (j = 0; j < i; ++j) {
5271 row[2 + div_pos + j], row[0]);
5273 row[0], v->
el[1 + div_pos + j]);
5275 for (j = i + 1; j < qp->div->n_row; ++j) {
5279 qp->div->ctx->one, qp->div->row[j] + 1,
5280 qp->div->row[j][2 + div_pos + i], v->
el,
5285 qp->div->ctx->one, v->
size);
5315 int *signs,
void *
user)
5365 for (i = 0; i <
pwqp->n; ++i) {
5366 if (
pwqp->p[i].qp->div->n_row == 0) {
5400 return isl_union_pw_qpolynomial_transform_inplace(upwqp,
5418 "input quasi-polynomial not affine",
goto error);
isl_ctx * isl_aff_get_ctx(__isl_keep isl_aff *aff)
__isl_null isl_aff * isl_aff_free(__isl_take isl_aff *aff)
__isl_null isl_pw_aff * isl_pw_aff_free(__isl_take isl_pw_aff *pwaff)
__isl_export __isl_give isl_space * isl_pw_aff_get_space(__isl_keep isl_pw_aff *pwaff)
__isl_give isl_aff * isl_aff_copy(__isl_keep isl_aff *aff)
__isl_give isl_space * isl_aff_get_domain_space(__isl_keep isl_aff *aff)
__isl_give isl_aff * isl_constraint_get_bound(__isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos)
__isl_null isl_constraint * isl_constraint_free(__isl_take isl_constraint *c)
isl_size isl_basic_set_n_constraint(__isl_keep isl_basic_set *bset)
#define isl_calloc_type(ctx, type)
#define isl_die(ctx, errno, msg, code)
void isl_ctx_deref(struct isl_ctx *ctx)
#define isl_assert(ctx, test, code)
isl_bool isl_bool_ok(int b)
#define isl_alloc_array(ctx, type, n)
#define isl_calloc_array(ctx, type, n)
#define isl_calloc(ctx, type, size)
#define isl_alloc_type(ctx, type)
void isl_ctx_ref(struct isl_ctx *ctx)
__isl_export __isl_give ISL_HMAP __isl_take ISL_KEY __isl_take ISL_VAL * val
isl_stat isl_stat(* fn)(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, void *user)
isl_stat isl_stat void * user
int GMPQAPI cmp(mp_rat op1, mp_rat op2)
void GMPZAPI gcd(mp_int rop, mp_int op1, mp_int op2)
__isl_give isl_aff * isl_aff_normalize(__isl_take isl_aff *aff)
__isl_give isl_aff * isl_aff_alloc_vec(__isl_take isl_local_space *ls, __isl_take isl_vec *v)
__isl_give isl_aff * isl_aff_alloc(__isl_take isl_local_space *ls)
static __isl_give isl_ast_expr * var(struct isl_ast_add_term_data *data, enum isl_dim_type type, int pos)
__isl_give isl_factorizer * isl_basic_set_factorizer(__isl_keep isl_basic_set *bset)
__isl_give isl_bool isl_factorizer_every_factor_basic_set(__isl_keep isl_factorizer *f, isl_bool(*test)(__isl_keep isl_basic_set *bset, void *user), void *user)
__isl_null isl_factorizer * isl_factorizer_free(__isl_take isl_factorizer *f)
#define isl_int_is_nonneg(i)
#define isl_int_is_zero(i)
#define isl_int_is_one(i)
#define isl_int_is_pos(i)
#define isl_int_is_negone(i)
#define isl_int_is_neg(i)
#define isl_int_divexact_ui(r, i, j)
#define isl_int_gcd(r, i, j)
#define isl_int_add_ui(r, i, j)
#define isl_int_add(r, i, j)
#define isl_int_cmp(i, j)
#define isl_int_addmul(r, i, j)
#define isl_int_fdiv_r(r, i, j)
#define isl_int_set(r, i)
#define isl_int_cdiv_q(r, i, j)
#define isl_int_mul_ui(r, i, j)
#define isl_int_lcm(r, i, j)
#define isl_int_divexact(r, i, j)
#define isl_int_mul(r, i, j)
#define isl_int_set_si(r, i)
#define isl_int_sub_ui(r, i, j)
#define isl_int_fdiv_q(r, i, j)
#define isl_int_sub(r, i, j)
#define isl_int_abs(r, i)
#define isl_int_cmp_si(i, si)
#define isl_int_submul(r, i, j)
__isl_give dup(__isl_keep LIST(EL) *list)
__isl_give isl_local * isl_local_copy(__isl_keep isl_local *local)
__isl_give isl_vec * isl_local_extend_point_vec(__isl_keep isl_local *local, __isl_take isl_vec *v)
__isl_give isl_local * isl_local_reorder(__isl_take isl_local *local, __isl_take isl_reordering *r)
__isl_null isl_local * isl_local_free(__isl_take isl_local *local)
__isl_give isl_local * isl_local_move_vars(__isl_take isl_local *local, unsigned dst_pos, unsigned src_pos, unsigned n)
int isl_local_cmp(__isl_keep isl_local *local1, __isl_keep isl_local *local2)
__isl_give isl_mat * isl_merge_divs(__isl_keep isl_mat *div1, __isl_keep isl_mat *div2, int *exp1, int *exp2)
__isl_give isl_set * isl_local_space_lift_set(__isl_take isl_local_space *ls, __isl_take isl_set *set)
__isl_give isl_basic_set * isl_local_space_lift_basic_set(__isl_take isl_local_space *ls, __isl_take isl_basic_set *bset)
__isl_give isl_local_space * isl_local_space_alloc_div(__isl_take isl_space *space, __isl_take isl_mat *div)
enum isl_lp_result isl_set_solve_lp(__isl_keep isl_set *set, int max, isl_int *f, isl_int d, isl_int *opt, isl_int *opt_denom, __isl_give isl_vec **sol)
__isl_give isl_basic_set * isl_basic_set_alloc_space(__isl_take isl_space *space, unsigned extra, unsigned n_eq, unsigned n_ineq)
isl_size isl_basic_set_n_equality(__isl_keep isl_basic_set *bset)
unsigned isl_basic_set_offset(__isl_keep isl_basic_set *bset, enum isl_dim_type type)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
isl_stat isl_set_foreach_orthant(__isl_keep isl_set *set, isl_stat(*fn)(__isl_take isl_set *orthant, int *signs, void *user), void *user)
int isl_basic_set_alloc_inequality(__isl_keep isl_basic_set *bset)
__isl_give isl_mat * isl_mat_cow(__isl_take isl_mat *mat)
__isl_give isl_mat * isl_mat_col_neg(__isl_take isl_mat *mat, int col)
__isl_give isl_mat * isl_mat_diag(isl_ctx *ctx, unsigned n_row, isl_int d)
__isl_give isl_mat * isl_mat_zero(isl_ctx *ctx, unsigned n_row, unsigned n_col)
void isl_mat_col_mul(__isl_keep isl_mat *mat, int dst_col, isl_int f, int src_col)
__isl_give isl_mat * isl_mat_col_addmul(__isl_take isl_mat *mat, int dst_col, isl_int f, int src_col)
isl_stat isl_morph_check_applies(__isl_keep isl_morph *morph, __isl_keep isl_space *space)
__isl_give isl_morph * isl_basic_set_full_compression(__isl_keep isl_basic_set *bset)
__isl_give isl_morph * isl_morph_inverse(__isl_take isl_morph *morph)
__isl_give isl_morph * isl_morph_ran_params(__isl_take isl_morph *morph)
__isl_give isl_morph * isl_morph_dom_params(__isl_take isl_morph *morph)
__isl_null isl_morph * isl_morph_free(__isl_take isl_morph *morph)
__isl_give isl_basic_set * isl_morph_basic_set(__isl_take isl_morph *morph, __isl_take isl_basic_set *bset)
__isl_give isl_morph * isl_morph_copy(__isl_keep isl_morph *morph)
static __isl_give isl_qpolynomial * with_merged_divs(__isl_give isl_qpolynomial *(*fn)(__isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2), __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_add(__isl_take isl_pw_qpolynomial *pwqp1, __isl_take isl_pw_qpolynomial *pwqp2)
__isl_give isl_basic_map * isl_basic_map_from_qpolynomial(__isl_take isl_qpolynomial *qp)
isl_bool isl_poly_is_infty(__isl_keep isl_poly *poly)
__isl_give isl_poly_rec * isl_poly_alloc_rec(isl_ctx *ctx, int var, int size)
static isl_stat set_div(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, int div, isl_int v, struct isl_split_periods_data *data)
__isl_give isl_poly * isl_poly_cst_mul_isl_int(__isl_take isl_poly *poly, isl_int v)
int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_mul(__isl_take isl_pw_qpolynomial *pwqp1, __isl_take isl_pw_qpolynomial *pwqp2)
static int div_sort_cmp(const void *p1, const void *p2)
__isl_give isl_qpolynomial * isl_qpolynomial_lift(__isl_take isl_qpolynomial *qp, __isl_take isl_space *space)
__isl_give isl_qpolynomial * isl_qpolynomial_alloc(__isl_take isl_space *space, unsigned n_div, __isl_take isl_poly *poly)
__isl_give isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_to_polynomial(__isl_take isl_union_pw_qpolynomial *upwqp, int sign)
static isl_stat poly_set_active(__isl_keep isl_poly *poly, int *active, int d)
static isl_bool multiplicative_call_factor_pw_qpolynomial(__isl_keep isl_basic_set *bset, void *user)
int isl_poly_update_affine(__isl_keep isl_poly *poly, __isl_keep isl_vec *aff)
static isl_bool isl_qpolynomial_involves_dims(__isl_keep isl_qpolynomial *qp, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_qpolynomial * isl_qpolynomial_neg(__isl_take isl_qpolynomial *qp)
__isl_keep isl_poly_cst * isl_poly_as_cst(__isl_keep isl_poly *poly)
__isl_give isl_poly * isl_poly_sum_cst(__isl_take isl_poly *poly1, __isl_take isl_poly *poly2)
static __isl_give isl_qpolynomial * isl_qpolynomial_substitute_equalities_lifted(__isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq)
__isl_give isl_qpolynomial * isl_qpolynomial_from_affine(__isl_take isl_space *space, isl_int *f, isl_int denom)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_split_periods(__isl_take isl_pw_qpolynomial *pwqp, int max_periods)
static int * reordering_move(isl_ctx *ctx, unsigned len, unsigned dst, unsigned src, unsigned n)
__isl_give isl_qpolynomial * isl_qpolynomial_var_on_domain(__isl_take isl_space *domain, enum isl_dim_type type, unsigned pos)
__isl_give isl_qpolynomial * isl_qpolynomial_reset_domain_space(__isl_take isl_qpolynomial *qp, __isl_take isl_space *space)
static __isl_give isl_val * eval_void(__isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt)
__isl_give isl_poly * isl_qpolynomial_get_poly(__isl_keep isl_qpolynomial *qp)
__isl_give isl_poly * isl_poly_cow(__isl_take isl_poly *poly)
static __isl_give isl_pw_qpolynomial * compressed_multiplicative_call(__isl_take isl_basic_set *bset, __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset))
static __isl_give isl_poly * reorder(__isl_take isl_poly *poly, int *r)
isl_ctx * isl_term_get_ctx(__isl_keep isl_term *term)
static void normalize_div(__isl_keep isl_qpolynomial *qp, int div)
__isl_give isl_qpolynomial * isl_qpolynomial_set_dim_name(__isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned pos, const char *s)
static __isl_give isl_poly * isl_qpolynomial_take_poly(__isl_keep isl_qpolynomial *qp)
static __isl_give isl_pw_qpolynomial * constant_on_domain(__isl_take isl_basic_set *bset, int cst)
__isl_give isl_qpolynomial * isl_qpolynomial_realign_domain(__isl_take isl_qpolynomial *qp, __isl_take isl_reordering *r)
__isl_give isl_poly * isl_poly_dup_cst(__isl_keep isl_poly *poly)
__isl_give isl_term * isl_term_dup(__isl_keep isl_term *term)
static isl_stat split_periods(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, void *user)
__isl_give isl_poly * isl_poly_cst_add_isl_int(__isl_take isl_poly *poly, isl_int v)
static isl_stat opt_fn(__isl_take isl_point *pnt, void *user)
__isl_give isl_qpolynomial * isl_qpolynomial_infty_on_domain(__isl_take isl_space *domain)
static __isl_give isl_pw_qpolynomial * pwqp_drop_floors(__isl_take isl_pw_qpolynomial *pwqp)
isl_bool isl_qpolynomial_is_nan(__isl_keep isl_qpolynomial *qp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_to_polynomial(__isl_take isl_pw_qpolynomial *pwqp, int sign)
__isl_give isl_qpolynomial * isl_qpolynomial_coeff(__isl_keep isl_qpolynomial *qp, enum isl_dim_type type, unsigned t_pos, int deg)
static __isl_give isl_qpolynomial * local_poly_move_dims(__isl_take isl_qpolynomial *qp, unsigned dst_pos, unsigned src_pos, unsigned n)
__isl_keep isl_poly_rec * isl_poly_as_rec(__isl_keep isl_poly *poly)
static void update_coeff(__isl_keep isl_vec *aff, __isl_keep isl_poly_cst *cst, int pos)
__isl_give isl_poly * isl_poly_one(isl_ctx *ctx)
__isl_give isl_qpolynomial * isl_qpolynomial_homogenize(__isl_take isl_qpolynomial *poly)
static void invert_div(__isl_keep isl_qpolynomial *qp, int div, __isl_keep isl_mat **mat)
__isl_give isl_qpolynomial * isl_qpolynomial_move_dims(__isl_take isl_qpolynomial *qp, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n)
__isl_give isl_qpolynomial * isl_qpolynomial_from_constraint(__isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos)
__isl_give isl_poly * isl_poly_homogenize(__isl_take isl_poly *poly, int deg, int target, int first, int last)
__isl_give isl_poly * isl_poly_subs(__isl_take isl_poly *poly, unsigned first, unsigned n, __isl_keep isl_poly **subs)
isl_bool isl_poly_is_cst(__isl_keep isl_poly *poly)
static __isl_give isl_pw_qpolynomial * poly_entry(__isl_take isl_pw_qpolynomial *pwqp, void *user)
__isl_give isl_poly * isl_poly_rat_cst(isl_ctx *ctx, isl_int n, isl_int d)
__isl_give isl_qpolynomial * isl_qpolynomial_val_on_domain(__isl_take isl_space *domain, __isl_take isl_val *val)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
static __isl_give isl_poly * expand(__isl_take isl_poly *poly, int *exp, int first)
static __isl_keep isl_space * isl_qpolynomial_peek_domain_space(__isl_keep isl_qpolynomial *qp)
static __isl_give isl_pw_qpolynomial * multiplicative_call_base(__isl_take isl_basic_set *bset, __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset))
int isl_qpolynomial_sgn(__isl_keep isl_qpolynomial *qp)
static enum isl_dim_type domain_type(enum isl_dim_type type)
static __isl_give isl_poly * replace_by_constant_term(__isl_take isl_poly *poly)
__isl_give isl_qpolynomial * isl_qpolynomial_from_aff(__isl_take isl_aff *aff)
__isl_give isl_qpolynomial * isl_qpolynomial_sub(__isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2)
static int cmp_row(__isl_keep isl_mat *div, int i, int j)
isl_bool isl_qpolynomial_is_neginfty(__isl_keep isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_mul(__isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2)
__isl_give isl_qpolynomial * isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp)
static __isl_give isl_poly * replace_by_zero(__isl_take isl_poly *poly)
__isl_give isl_space * isl_qpolynomial_get_domain_space(__isl_keep isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_substitute_equalities(__isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq)
__isl_null isl_qpolynomial * isl_qpolynomial_free(__isl_take isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_nan_on_domain(__isl_take isl_space *domain)
static isl_bool compatible_divs(__isl_keep isl_mat *div1, __isl_keep isl_mat *div2)
__isl_give isl_term * isl_term_copy(__isl_keep isl_term *term)
static __isl_give isl_qpolynomial * substitute_div(__isl_take isl_qpolynomial *qp, int div, __isl_take isl_poly *s)
__isl_give isl_poly * isl_poly_mul_rec(__isl_take isl_poly *poly1, __isl_take isl_poly *poly2)
__isl_give isl_poly * isl_poly_var_pow(isl_ctx *ctx, int pos, int power)
__isl_give isl_qpolynomial * isl_qpolynomial_scale_down_val(__isl_take isl_qpolynomial *qp, __isl_take isl_val *v)
__isl_give isl_qpolynomial * isl_qpolynomial_one_on_domain(__isl_take isl_space *domain)
__isl_give isl_qpolynomial * isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp)
int isl_poly_sgn(__isl_keep isl_poly *poly)
__isl_give isl_poly * isl_poly_mul_isl_int(__isl_take isl_poly *poly, isl_int v)
isl_stat isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp, __isl_keep isl_basic_set *bset, isl_stat(*fn)(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, void *user), void *user)
static __isl_give isl_qpolynomial * isl_qpolynomial_zero_in_space(__isl_take isl_space *space)
isl_bool isl_poly_is_affine(__isl_keep isl_poly *poly)
__isl_give isl_vec * isl_qpolynomial_extract_affine(__isl_keep isl_qpolynomial *qp)
static __isl_give isl_qpolynomial * substitute_non_divs(__isl_take isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_scale_val(__isl_take isl_qpolynomial *qp, __isl_take isl_val *v)
isl_stat isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp, isl_stat(*fn)(__isl_take isl_term *term, void *user), void *user)
__isl_null isl_term * isl_term_free(__isl_take isl_term *term)
__isl_give isl_qpolynomial * isl_qpolynomial_project_domain_on_params(__isl_take isl_qpolynomial *qp)
__isl_give isl_poly * isl_poly_mul_cst(__isl_take isl_poly *poly1, __isl_take isl_poly *poly2)
int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly)
__isl_give isl_poly * isl_poly_add_isl_int(__isl_take isl_poly *poly, isl_int v)
__isl_give isl_qpolynomial * isl_qpolynomial_cst_on_domain(__isl_take isl_space *domain, isl_int v)
static __isl_give isl_qpolynomial * qp_drop_floors(__isl_take isl_qpolynomial *qp, int down)
static __isl_give isl_local * isl_qpolynomial_take_local(__isl_keep isl_qpolynomial *qp)
static __isl_give isl_qpolynomial * reduce_divs(__isl_take isl_qpolynomial *qp)
__isl_give isl_val * isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp)
isl_bool isl_poly_is_zero(__isl_keep isl_poly *poly)
static __isl_give isl_qpolynomial * isl_qpolynomial_restore_poly(__isl_keep isl_qpolynomial *qp, __isl_take isl_poly *poly)
__isl_give isl_qpolynomial * isl_qpolynomial_neginfty_on_domain(__isl_take isl_space *domain)
static void isl_poly_cst_reduce(__isl_keep isl_poly_cst *cst)
__isl_give isl_qpolynomial * isl_qpolynomial_var_pow_on_domain(__isl_take isl_space *domain, int pos, int power)
static isl_stat to_polynomial_on_orthant(__isl_take isl_set *orthant, int *signs, void *user)
__isl_give isl_val * isl_poly_eval(__isl_take isl_poly *poly, __isl_take isl_vec *vec)
__isl_give isl_pw_qpolynomial * isl_basic_set_multiplicative_call(__isl_take isl_basic_set *bset, __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset))
__isl_give isl_poly * isl_poly_nan(isl_ctx *ctx)
__isl_give isl_qpolynomial * isl_qpolynomial_scale(__isl_take isl_qpolynomial *qp, isl_int v)
static __isl_give isl_poly * isl_poly_scale_val(__isl_take isl_poly *poly, __isl_keep isl_val *v)
__isl_give isl_qpolynomial * isl_qpolynomial_zero_on_domain(__isl_take isl_space *domain)
__isl_null isl_poly * isl_poly_free(__isl_take isl_poly *poly)
isl_bool isl_poly_is_equal(__isl_keep isl_poly *poly1, __isl_keep isl_poly *poly2)
__isl_give isl_poly_cst * isl_poly_cst_alloc(isl_ctx *ctx)
__isl_give isl_val * isl_term_get_coefficient_val(__isl_keep isl_term *term)
static __isl_keep isl_space * isl_term_peek_space(__isl_keep isl_term *term)
static isl_stat poly_update_den(__isl_keep isl_poly *poly, isl_int *d)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_from_pw_aff(__isl_take isl_pw_aff *pwaff)
static __isl_give isl_local_space * isl_qpolynomial_get_domain_local_space(__isl_keep isl_qpolynomial *qp)
__isl_give isl_poly * isl_poly_dup(__isl_keep isl_poly *poly)
isl_bool isl_poly_is_one(__isl_keep isl_poly *poly)
isl_bool isl_poly_is_nan(__isl_keep isl_poly *poly)
int isl_poly_cmp(__isl_keep isl_poly_cst *cst1, __isl_keep isl_poly_cst *cst2)
isl_size isl_qpolynomial_dim(__isl_keep isl_qpolynomial *qp, enum isl_dim_type type)
int isl_qpolynomial_plain_cmp(__isl_keep isl_qpolynomial *qp1, __isl_keep isl_qpolynomial *qp2)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_pow(__isl_take isl_pw_qpolynomial *pwqp, unsigned power)
__isl_give isl_qpolynomial * isl_qpolynomial_rat_cst_on_domain(__isl_take isl_space *domain, const isl_int n, const isl_int d)
static static __isl_keep isl_local * isl_qpolynomial_get_local(__isl_keep isl_qpolynomial *qp)
static int needs_invert(__isl_keep isl_mat *div, int row)
__isl_give isl_qpolynomial * isl_qpolynomial_morph_domain(__isl_take isl_qpolynomial *qp, __isl_take isl_morph *morph)
__isl_give isl_poly * isl_poly_zero(isl_ctx *ctx)
__isl_give isl_qpolynomial * isl_qpolynomial_add(__isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2)
static __isl_give isl_qpolynomial * sort_divs(__isl_take isl_qpolynomial *qp)
static __isl_give isl_qpolynomial * remove_redundant_divs(__isl_take isl_qpolynomial *qp)
isl_size isl_qpolynomial_domain_dim(__isl_keep isl_qpolynomial *qp, enum isl_dim_type type)
__isl_give isl_term * isl_term_alloc(__isl_take isl_space *space, __isl_take isl_mat *div)
__isl_give isl_qpolynomial * isl_qpolynomial_gist_params(__isl_take isl_qpolynomial *qp, __isl_take isl_set *context)
static __isl_give isl_set * fix_inactive(__isl_take isl_set *set, __isl_keep isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_add_dims(__isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned n)
unsigned isl_qpolynomial_domain_offset(__isl_keep isl_qpolynomial *qp, enum isl_dim_type type)
__isl_give isl_poly * isl_poly_coeff(__isl_keep isl_poly *poly, unsigned pos, int deg)
static isl_size isl_term_get_exp(__isl_keep isl_term *term, enum isl_dim_type type, unsigned pos)
__isl_give isl_qpolynomial * isl_qpolynomial_add_isl_int(__isl_take isl_qpolynomial *qp, isl_int v)
isl_bool isl_qpolynomial_isa_aff(__isl_keep isl_qpolynomial *qp)
__isl_give isl_poly * isl_poly_sum(__isl_take isl_poly *poly1, __isl_take isl_poly *poly2)
isl_bool isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp, isl_int *n, isl_int *d)
isl_bool isl_qpolynomial_is_zero(__isl_keep isl_qpolynomial *qp)
__isl_give isl_val * isl_qpolynomial_get_constant_val(__isl_keep isl_qpolynomial *qp)
static void poly_free_rec(__isl_take isl_poly_rec *rec)
__isl_give isl_qpolynomial * isl_qpolynomial_align_params(__isl_take isl_qpolynomial *qp, __isl_take isl_space *model)
isl_bool isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_gist(__isl_take isl_qpolynomial *qp, __isl_take isl_set *context)
__isl_give isl_poly * isl_poly_dup_rec(__isl_keep isl_poly *poly)
static isl_size isl_term_offset(__isl_keep isl_term *term, enum isl_dim_type type)
static isl_stat set_active(__isl_keep isl_qpolynomial *qp, int *active)
static __isl_give isl_qpolynomial * make_divs_pos(__isl_take isl_qpolynomial *qp, int *signs)
__isl_give isl_term * isl_term_cow(__isl_take isl_term *term)
isl_bool isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp)
__isl_give isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_mul(__isl_take isl_union_pw_qpolynomial *upwqp1, __isl_take isl_union_pw_qpolynomial *upwqp2)
__isl_give isl_poly * isl_poly_mul(__isl_take isl_poly *poly1, __isl_take isl_poly *poly2)
__isl_give isl_term * isl_poly_foreach_term(__isl_keep isl_poly *poly, isl_stat(*fn)(__isl_take isl_term *term, void *user), __isl_take isl_term *term, void *user)
__isl_give isl_qpolynomial * isl_qpolynomial_mul_isl_int(__isl_take isl_qpolynomial *qp, isl_int v)
__isl_give isl_qpolynomial * isl_qpolynomial_dup(__isl_keep isl_qpolynomial *qp)
static void poly_free_cst(__isl_take isl_poly_cst *cst)
static isl_stat split_div(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, int div, isl_int min, isl_int max, struct isl_split_periods_data *data)
static __isl_give isl_poly * isl_poly_cst_scale_val(__isl_take isl_poly *poly, __isl_keep isl_val *v)
isl_bool isl_poly_is_neginfty(__isl_keep isl_poly *poly)
int isl_poly_degree(__isl_keep isl_poly *poly, int first, int last)
isl_size isl_term_dim(__isl_keep isl_term *term, enum isl_dim_type type)
__isl_give isl_qpolynomial * isl_qpolynomial_substitute(__isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned first, unsigned n, __isl_keep isl_qpolynomial **subs)
static __isl_give isl_space * isl_qpolynomial_take_domain_space(__isl_keep isl_qpolynomial *qp)
static __isl_give isl_set * set_div_slice(__isl_take isl_space *space, __isl_keep isl_qpolynomial *qp, int div, isl_int v)
__isl_give isl_poly * isl_poly_drop(__isl_take isl_poly *poly, unsigned first, unsigned n)
__isl_give isl_poly * isl_poly_infty(isl_ctx *ctx)
void isl_term_get_num(__isl_keep isl_term *term, isl_int *n)
__isl_give isl_qpolynomial * isl_qpolynomial_add_on_domain(__isl_keep isl_set *dom, __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2)
isl_bool isl_qpolynomial_plain_is_equal(__isl_keep isl_qpolynomial *qp1, __isl_keep isl_qpolynomial *qp2)
static __isl_keep isl_poly * isl_qpolynomial_peek_poly(__isl_keep isl_qpolynomial *qp)
static void reduce_div(__isl_keep isl_qpolynomial *qp, int div, __isl_keep isl_mat **mat)
__isl_give isl_qpolynomial * isl_qpolynomial_reset_space_and_domain(__isl_take isl_qpolynomial *qp, __isl_take isl_space *space, __isl_take isl_space *domain)
__isl_give isl_qpolynomial * isl_qpolynomial_pow(__isl_take isl_qpolynomial *qp, unsigned power)
__isl_give isl_space * isl_qpolynomial_get_space(__isl_keep isl_qpolynomial *qp)
isl_bool isl_poly_is_negone(__isl_keep isl_poly *poly)
__isl_give isl_val * isl_qpolynomial_opt_on_domain(__isl_take isl_qpolynomial *qp, __isl_take isl_set *set, int max)
static __isl_give isl_val * isl_poly_get_constant_val(__isl_keep isl_poly *poly)
isl_bool isl_qpolynomial_is_infty(__isl_keep isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_from_term(__isl_take isl_term *term)
static int isl_poly_plain_cmp(__isl_keep isl_poly *poly1, __isl_keep isl_poly *poly2)
__isl_give isl_qpolynomial * isl_qpolynomial_domain_reverse(__isl_take isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_drop_dims(__isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned first, unsigned n)
static isl_size isl_qpolynomial_domain_var_offset(__isl_keep isl_qpolynomial *qp, enum isl_dim_type type)
isl_ctx * isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp)
__isl_give isl_val * isl_qpolynomial_eval(__isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt)
static __isl_give isl_qpolynomial * isl_qpolynomial_restore_local(__isl_keep isl_qpolynomial *qp, __isl_take isl_local *local)
__isl_give isl_poly * isl_poly_pow(__isl_take isl_poly *poly, unsigned power)
__isl_give isl_poly * isl_poly_from_affine(isl_ctx *ctx, isl_int *f, isl_int denom, unsigned len)
__isl_give isl_qpolynomial * isl_qpolynomial_insert_dims(__isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_aff * isl_term_get_div(__isl_keep isl_term *term, unsigned pos)
__isl_give isl_poly * isl_poly_copy(__isl_keep isl_poly *poly)
__isl_give isl_poly * isl_poly_neginfty(isl_ctx *ctx)
static __isl_give isl_qpolynomial * isl_qpolynomial_restore_domain_space(__isl_take isl_qpolynomial *qp, __isl_take isl_space *space)
__isl_give isl_aff * isl_qpolynomial_as_aff(__isl_take isl_qpolynomial *qp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_cow(__isl_take isl_pw_qpolynomial *pwqp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_morph_domain(__isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_morph *morph)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_add_piece(__isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_set *set, __isl_take isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_terms_of_sign(__isl_keep isl_qpolynomial *poly, int *signs, int sign)
__isl_null isl_reordering * isl_reordering_free(__isl_take isl_reordering *exp)
__isl_give isl_reordering * isl_reordering_extend(__isl_take isl_reordering *exp, unsigned extra)
__isl_give isl_reordering * isl_parameter_alignment_reordering(__isl_keep isl_space *alignee, __isl_keep isl_space *aligner)
__isl_give isl_space * isl_reordering_get_space(__isl_keep isl_reordering *r)
__isl_give isl_reordering * isl_reordering_copy(__isl_keep isl_reordering *exp)
static int at(int i, void *user)
void isl_seq_combine(isl_int *dst, isl_int m1, isl_int *src1, isl_int m2, isl_int *src2, unsigned len)
int isl_seq_last_non_zero(isl_int *p, unsigned len)
void isl_seq_scale_down(isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd)
void isl_seq_clr(isl_int *p, unsigned len)
void isl_seq_scale(isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, isl_int *m)
int isl_seq_cmp(isl_int *p1, isl_int *p2, unsigned len)
void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len)
int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len)
int isl_seq_any_non_zero(isl_int *p, unsigned len)
void isl_seq_neg(isl_int *dst, isl_int *src, unsigned len)
isl_stat isl_space_check_is_set(__isl_keep isl_space *space)
isl_size isl_space_wrapped_dim(__isl_keep isl_space *space, enum isl_dim_type outer, enum isl_dim_type inner)
isl_size isl_space_offset(__isl_keep isl_space *space, enum isl_dim_type type)
isl_bool isl_space_is_named_or_nested(__isl_keep isl_space *space, enum isl_dim_type type)
int isl_space_cmp(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
isl_stat isl_space_check_range(__isl_keep isl_space *space, enum isl_dim_type type, unsigned first, unsigned n)
static isl_stat power(__isl_take isl_map *map, void *user)
static __isl_give isl_union_map * total(__isl_take isl_union_map *umap, __isl_give isl_map *(*fn)(__isl_take isl_map *))
__isl_give isl_val * isl_val_rat_from_isl_int(isl_ctx *ctx, isl_int n, isl_int d)
__isl_give isl_basic_map * isl_basic_map_from_aff(__isl_take isl_aff *aff)
__isl_give isl_mat * isl_mat_copy(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_product(__isl_take isl_mat *left, __isl_take isl_mat *right)
__isl_give isl_mat * isl_mat_drop_rows(__isl_take isl_mat *mat, unsigned row, unsigned n)
__isl_give isl_mat * isl_mat_diagonal(__isl_take isl_mat *mat1, __isl_take isl_mat *mat2)
__isl_give isl_mat * isl_mat_swap_rows(__isl_take isl_mat *mat, unsigned i, unsigned j)
__isl_null isl_mat * isl_mat_free(__isl_take isl_mat *mat)
__isl_give isl_mat * isl_mat_insert_zero_cols(__isl_take isl_mat *mat, unsigned first, unsigned n)
void isl_mat_col_add(__isl_keep isl_mat *mat, int dst_col, int src_col)
__isl_give isl_mat * isl_mat_alloc(isl_ctx *ctx, unsigned n_row, unsigned n_col)
isl_bool isl_mat_is_equal(__isl_keep isl_mat *mat1, __isl_keep isl_mat *mat2)
__isl_give isl_mat * isl_mat_set_element_si(__isl_take isl_mat *mat, int row, int col, int v)
__isl_give isl_mat * isl_mat_insert_cols(__isl_take isl_mat *mat, unsigned col, unsigned n)
__isl_give isl_mat * isl_mat_drop_cols(__isl_take isl_mat *mat, unsigned col, unsigned n)
isl_bool isl_point_is_void(__isl_keep isl_point *pnt)
__isl_null isl_point * isl_point_free(__isl_take isl_point *pnt)
isl_ctx * isl_point_get_ctx(__isl_keep isl_point *pnt)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_mul(__isl_take isl_pw_qpolynomial *pwqp1, __isl_take isl_pw_qpolynomial *pwqp2)
isl_bool isl_pw_qpolynomial_is_zero(__isl_keep isl_pw_qpolynomial *pwqp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_zero(__isl_take isl_space *space)
__isl_null isl_pw_qpolynomial * isl_pw_qpolynomial_free(__isl_take isl_pw_qpolynomial *pwqp)
__isl_give isl_qpolynomial * isl_qpolynomial_mul(__isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2)
__isl_give isl_qpolynomial * isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp)
__isl_give isl_qpolynomial * isl_qpolynomial_add(__isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_alloc(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp)
isl_stat isl_pw_qpolynomial_foreach_piece(__isl_keep isl_pw_qpolynomial *pwqp, isl_stat(*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, void *user), void *user)
__isl_give isl_space * isl_pw_qpolynomial_get_space(__isl_keep isl_pw_qpolynomial *pwqp)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_add_disjoint(__isl_take isl_pw_qpolynomial *pwqp1, __isl_take isl_pw_qpolynomial *pwqp2)
struct isl_union_pw_qpolynomial isl_union_pw_qpolynomial
__isl_export __isl_give isl_set * isl_set_universe(__isl_take isl_space *space)
isl_size isl_basic_set_dim(__isl_keep isl_basic_set *bset, enum isl_dim_type type)
__isl_export __isl_give isl_basic_set * isl_basic_set_detect_equalities(__isl_take isl_basic_set *bset)
isl_ctx * isl_set_get_ctx(__isl_keep isl_set *set)
__isl_export __isl_give isl_space * isl_set_get_space(__isl_keep isl_set *set)
isl_bool isl_set_plain_is_empty(__isl_keep isl_set *set)
__isl_give isl_space * isl_basic_set_get_space(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_set * isl_set_intersect_params(__isl_take isl_set *set, __isl_take isl_set *params)
__isl_export __isl_give isl_basic_set * isl_basic_set_params(__isl_take isl_basic_set *bset)
__isl_give isl_set * isl_set_eliminate(__isl_take isl_set *set, enum isl_dim_type type, unsigned first, unsigned n)
__isl_null isl_basic_set * isl_basic_set_free(__isl_take isl_basic_set *bset)
isl_bool isl_basic_set_is_bounded(__isl_keep isl_basic_set *bset)
isl_bool isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
__isl_give isl_set * isl_set_copy(__isl_keep isl_set *set)
__isl_give isl_basic_set * isl_basic_set_remove_redundancies(__isl_take isl_basic_set *bset)
__isl_export isl_stat isl_set_foreach_point(__isl_keep isl_set *set, isl_stat(*fn)(__isl_take isl_point *pnt, void *user), void *user)
__isl_give isl_basic_set * isl_basic_set_add_dims(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned n)
isl_size isl_set_dim(__isl_keep isl_set *set, enum isl_dim_type type)
isl_bool isl_set_plain_is_universe(__isl_keep isl_set *set)
__isl_export isl_bool isl_basic_set_is_empty(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_set * isl_set_intersect(__isl_take isl_set *set1, __isl_take isl_set *set2)
__isl_constructor __isl_give isl_set * isl_set_from_basic_set(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_copy(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_set_affine_hull(__isl_take isl_set *set)
__isl_give isl_set * isl_set_fix_si(__isl_take isl_set *set, enum isl_dim_type type, unsigned pos, int value)
isl_bool isl_space_has_equal_params(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
__isl_give isl_space * isl_space_from_domain(__isl_take isl_space *space)
__isl_export __isl_give isl_space * isl_space_params(__isl_take isl_space *space)
__isl_give isl_space * isl_space_insert_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned pos, unsigned n)
isl_ctx * isl_space_get_ctx(__isl_keep isl_space *space)
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
__isl_give isl_space * isl_space_set_dim_name(__isl_take isl_space *space, enum isl_dim_type type, unsigned pos, __isl_keep const char *name)
__isl_export isl_bool isl_space_is_equal(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
__isl_give isl_space * isl_space_drop_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned first, unsigned num)
isl_size isl_space_dim(__isl_keep isl_space *space, enum isl_dim_type type)
isl_bool isl_space_is_set(__isl_keep isl_space *space)
__isl_export __isl_give isl_space * isl_space_wrapped_reverse(__isl_take isl_space *space)
__isl_give isl_space * isl_space_move_dims(__isl_take isl_space *space, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n)
__isl_give isl_space * isl_space_add_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned n)
__isl_export __isl_give isl_space * isl_space_domain(__isl_take isl_space *space)
isl_pw_qpolynomial * pwqp
__isl_give isl_pw_qpolynomial *(* fn)(__isl_take isl_basic_set *bset)
__isl_give isl_val * isl_val_copy(__isl_keep isl_val *v)
__isl_export __isl_give isl_val * isl_val_inv(__isl_take isl_val *v)
__isl_export __isl_give isl_val * isl_val_max(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_export __isl_give isl_val * isl_val_add(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_export __isl_give isl_val * isl_val_one(isl_ctx *ctx)
__isl_export __isl_give isl_val * isl_val_zero(isl_ctx *ctx)
isl_ctx * isl_val_get_ctx(__isl_keep isl_val *val)
__isl_export __isl_give isl_val * isl_val_nan(isl_ctx *ctx)
__isl_null isl_val * isl_val_free(__isl_take isl_val *v)
__isl_export isl_bool isl_val_is_zero(__isl_keep isl_val *v)
__isl_export isl_bool isl_val_is_one(__isl_keep isl_val *v)
__isl_export __isl_give isl_val * isl_val_min(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_export isl_bool isl_val_is_rat(__isl_keep isl_val *v)
__isl_export __isl_give isl_val * isl_val_mul(__isl_take isl_val *v1, __isl_take isl_val *v2)
__isl_null isl_vec * isl_vec_free(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_copy(__isl_keep isl_vec *vec)
__isl_give isl_vec * isl_vec_clr(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_alloc(isl_ctx *ctx, unsigned size)