303f69845ebae0753e7fabf8f129090e2aa98295
[platform/upstream/isl.git] / include / isl / polynomial.h
1 #ifndef ISL_POLYNOMIAL_H
2 #define ISL_POLYNOMIAL_H
3
4 #include <isl/ctx.h>
5 #include <isl/constraint.h>
6 #include <isl/dim.h>
7 #include <isl/div.h>
8 #include <isl/set.h>
9 #include <isl/point.h>
10 #include <isl/printer.h>
11 #include <isl/union_set.h>
12
13 #if defined(__cplusplus)
14 extern "C" {
15 #endif
16
17 struct isl_qpolynomial;
18 typedef struct isl_qpolynomial isl_qpolynomial;
19
20 isl_ctx *isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp);
21 __isl_give isl_dim *isl_qpolynomial_get_dim(__isl_keep isl_qpolynomial *qp);
22 __isl_give isl_qpolynomial *isl_qpolynomial_reset_dim(
23         __isl_take isl_qpolynomial *qp, __isl_take isl_dim *dim);
24 unsigned isl_qpolynomial_dim(__isl_keep isl_qpolynomial *qp,
25         enum isl_dim_type type);
26 int isl_qpolynomial_involves_dims(__isl_keep isl_qpolynomial *qp,
27         enum isl_dim_type type, unsigned first, unsigned n);
28
29 __isl_give isl_qpolynomial *isl_qpolynomial_set_dim_name(
30         __isl_take isl_qpolynomial *qp,
31         enum isl_dim_type type, unsigned pos, const char *s);
32
33 __isl_give isl_qpolynomial *isl_qpolynomial_zero(__isl_take isl_dim *dim);
34 __isl_give isl_qpolynomial *isl_qpolynomial_one(__isl_take isl_dim *dim);
35 __isl_give isl_qpolynomial *isl_qpolynomial_infty(__isl_take isl_dim *dim);
36 __isl_give isl_qpolynomial *isl_qpolynomial_neginfty(__isl_take isl_dim *dim);
37 __isl_give isl_qpolynomial *isl_qpolynomial_nan(__isl_take isl_dim *dim);
38 __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst(__isl_take isl_dim *dim,
39         const isl_int n, const isl_int d);
40 __isl_give isl_qpolynomial *isl_qpolynomial_div(__isl_take isl_div *div);
41 __isl_give isl_qpolynomial *isl_qpolynomial_var(__isl_take isl_dim *dim,
42         enum isl_dim_type type, unsigned pos);
43 __isl_give isl_qpolynomial *isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp);
44 void isl_qpolynomial_free(__isl_take isl_qpolynomial *qp);
45
46 int isl_qpolynomial_is_equal(__isl_keep isl_qpolynomial *qp1,
47         __isl_keep isl_qpolynomial *qp2);
48 int isl_qpolynomial_is_zero(__isl_keep isl_qpolynomial *qp);
49 int isl_qpolynomial_is_nan(__isl_keep isl_qpolynomial *qp);
50 int isl_qpolynomial_is_infty(__isl_keep isl_qpolynomial *qp);
51 int isl_qpolynomial_is_neginfty(__isl_keep isl_qpolynomial *qp);
52 int isl_qpolynomial_sgn(__isl_keep isl_qpolynomial *qp);
53 int isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp,
54         isl_int *n, isl_int *d);
55 void isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp, isl_int *d);
56
57 __isl_give isl_qpolynomial *isl_qpolynomial_neg(__isl_take isl_qpolynomial *qp);
58 __isl_give isl_qpolynomial *isl_qpolynomial_add(__isl_take isl_qpolynomial *qp1,
59         __isl_take isl_qpolynomial *qp2);
60 __isl_give isl_qpolynomial *isl_qpolynomial_sub(__isl_take isl_qpolynomial *qp1,
61         __isl_take isl_qpolynomial *qp2);
62 __isl_give isl_qpolynomial *isl_qpolynomial_mul(__isl_take isl_qpolynomial *qp1,
63         __isl_take isl_qpolynomial *qp2);
64 __isl_give isl_qpolynomial *isl_qpolynomial_pow(__isl_take isl_qpolynomial *qp,
65         unsigned power);
66 __isl_give isl_qpolynomial *isl_qpolynomial_add_isl_int(
67         __isl_take isl_qpolynomial *qp, isl_int v);
68 __isl_give isl_qpolynomial *isl_qpolynomial_mul_isl_int(
69         __isl_take isl_qpolynomial *qp, isl_int v);
70
71 __isl_give isl_qpolynomial *isl_qpolynomial_insert_dims(
72         __isl_take isl_qpolynomial *qp, enum isl_dim_type type,
73         unsigned first, unsigned n);
74 __isl_give isl_qpolynomial *isl_qpolynomial_add_dims(
75         __isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned n);
76 __isl_give isl_qpolynomial *isl_qpolynomial_move_dims(
77         __isl_take isl_qpolynomial *qp,
78         enum isl_dim_type dst_type, unsigned dst_pos,
79         enum isl_dim_type src_type, unsigned src_pos, unsigned n);
80 __isl_give isl_qpolynomial *isl_qpolynomial_drop_dims(
81         __isl_take isl_qpolynomial *qp,
82         enum isl_dim_type type, unsigned first, unsigned n);
83
84 __isl_give isl_qpolynomial *isl_qpolynomial_substitute(
85         __isl_take isl_qpolynomial *qp,
86         enum isl_dim_type type, unsigned first, unsigned n,
87         __isl_keep isl_qpolynomial **subs);
88
89 int isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp,
90         __isl_keep isl_basic_set *bset,
91         int (*fn)(__isl_take isl_basic_set *bset,
92                   __isl_take isl_qpolynomial *poly, void *user), void *user);
93
94 __isl_give isl_qpolynomial *isl_qpolynomial_homogenize(
95         __isl_take isl_qpolynomial *poly);
96
97 __isl_give isl_qpolynomial *isl_qpolynomial_align_params(
98         __isl_take isl_qpolynomial *qp, __isl_take isl_dim *model);
99
100 struct isl_term;
101 typedef struct isl_term isl_term;
102
103 isl_ctx *isl_term_get_ctx(__isl_keep isl_term *term);
104
105 void isl_term_free(__isl_take isl_term *term);
106
107 unsigned isl_term_dim(__isl_keep isl_term *term, enum isl_dim_type type);
108 void isl_term_get_num(__isl_keep isl_term *term, isl_int *n);
109 void isl_term_get_den(__isl_keep isl_term *term, isl_int *d);
110 int isl_term_get_exp(__isl_keep isl_term *term,
111         enum isl_dim_type type, unsigned pos);
112 __isl_give isl_div *isl_term_get_div(__isl_keep isl_term *term, unsigned pos);
113
114 int isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp,
115         int (*fn)(__isl_take isl_term *term, void *user), void *user);
116
117 __isl_give isl_qpolynomial *isl_qpolynomial_eval(
118         __isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt);
119
120 __isl_give isl_qpolynomial *isl_qpolynomial_gist(
121         __isl_take isl_qpolynomial *qp, __isl_take isl_set *context);
122
123 __isl_give isl_qpolynomial *isl_qpolynomial_from_constraint(
124         __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos);
125 __isl_give isl_qpolynomial *isl_qpolynomial_from_term(__isl_take isl_term *term);
126 __isl_give isl_basic_map *isl_basic_map_from_qpolynomial(
127         __isl_take isl_qpolynomial *qp);
128
129 __isl_give isl_printer *isl_printer_print_qpolynomial(
130         __isl_take isl_printer *p, __isl_keep isl_qpolynomial *qp);
131 void isl_qpolynomial_print(__isl_keep isl_qpolynomial *qp, FILE *out,
132         unsigned output_format);
133 void isl_qpolynomial_dump(__isl_keep isl_qpolynomial *qp);
134
135 struct isl_pw_qpolynomial;
136 typedef struct isl_pw_qpolynomial isl_pw_qpolynomial;
137
138 isl_ctx *isl_pw_qpolynomial_get_ctx(__isl_keep isl_pw_qpolynomial *pwqp);
139
140 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_zero(__isl_take isl_dim *dim);
141 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_alloc(__isl_take isl_set *set,
142         __isl_take isl_qpolynomial *qp);
143 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_copy(
144         __isl_keep isl_pw_qpolynomial *pwqp);
145 void isl_pw_qpolynomial_free(__isl_take isl_pw_qpolynomial *pwqp);
146
147 int isl_pw_qpolynomial_is_zero(__isl_keep isl_pw_qpolynomial *pwqp);
148
149 __isl_give isl_dim *isl_pw_qpolynomial_get_dim(
150         __isl_keep isl_pw_qpolynomial *pwqp);
151 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_reset_dim(
152         __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_dim *dim);
153 unsigned isl_pw_qpolynomial_dim(__isl_keep isl_pw_qpolynomial *pwqp,
154         enum isl_dim_type type);
155 int isl_pw_qpolynomial_involves_dims(__isl_keep isl_pw_qpolynomial *pwqp,
156         enum isl_dim_type type, unsigned first, unsigned n);
157 int isl_pw_qpolynomial_has_equal_dim(__isl_keep isl_pw_qpolynomial *pwqp1,
158         __isl_keep isl_pw_qpolynomial *pwqp2);
159
160 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_set_dim_name(
161         __isl_take isl_pw_qpolynomial *pwqp,
162         enum isl_dim_type type, unsigned pos, const char *s);
163
164 __isl_give isl_set *isl_pw_qpolynomial_domain(__isl_take isl_pw_qpolynomial *pwqp);
165 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_domain(
166         __isl_take isl_pw_qpolynomial *pwpq, __isl_take isl_set *set);
167
168 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_drop_dims(
169         __isl_take isl_pw_qpolynomial *pwqp,
170         enum isl_dim_type type, unsigned first, unsigned n);
171 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_dims(
172         __isl_take isl_pw_qpolynomial *pwqp,
173         enum isl_dim_type type, unsigned first, unsigned n);
174
175 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add(
176         __isl_take isl_pw_qpolynomial *pwqp1,
177         __isl_take isl_pw_qpolynomial *pwqp2);
178 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_sub(
179         __isl_take isl_pw_qpolynomial *pwqp1,
180         __isl_take isl_pw_qpolynomial *pwqp2);
181 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_disjoint(
182         __isl_take isl_pw_qpolynomial *pwqp1,
183         __isl_take isl_pw_qpolynomial *pwqp2);
184 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_neg(
185         __isl_take isl_pw_qpolynomial *pwqp);
186 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul(
187         __isl_take isl_pw_qpolynomial *pwqp1,
188         __isl_take isl_pw_qpolynomial *pwqp2);
189 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul_isl_int(
190         __isl_take isl_pw_qpolynomial *pwqp, isl_int v);
191
192 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_insert_dims(
193         __isl_take isl_pw_qpolynomial *pwqp, enum isl_dim_type type,
194         unsigned first, unsigned n);
195 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_dims(
196         __isl_take isl_pw_qpolynomial *pwqp,
197         enum isl_dim_type type, unsigned n);
198 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_move_dims(
199         __isl_take isl_pw_qpolynomial *pwqp,
200         enum isl_dim_type dst_type, unsigned dst_pos,
201         enum isl_dim_type src_type, unsigned src_pos, unsigned n);
202
203 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_fix_dim(
204         __isl_take isl_pw_qpolynomial *pwqp,
205         enum isl_dim_type type, unsigned n, isl_int v);
206
207 __isl_give isl_qpolynomial *isl_pw_qpolynomial_eval(
208         __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_point *pnt);
209
210 __isl_give isl_qpolynomial *isl_pw_qpolynomial_max(
211         __isl_take isl_pw_qpolynomial *pwqp);
212 __isl_give isl_qpolynomial *isl_pw_qpolynomial_min(
213         __isl_take isl_pw_qpolynomial *pwqp);
214
215 int isl_pw_qpolynomial_foreach_piece(__isl_keep isl_pw_qpolynomial *pwqp,
216         int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp,
217                     void *user), void *user);
218 int isl_pw_qpolynomial_foreach_lifted_piece(__isl_keep isl_pw_qpolynomial *pwqp,
219         int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp,
220                     void *user), void *user);
221
222 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_str(isl_ctx *ctx,
223                 const char *str);
224 __isl_give isl_printer *isl_printer_print_pw_qpolynomial(
225         __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp);
226 void isl_pw_qpolynomial_print(__isl_keep isl_pw_qpolynomial *pwqp, FILE *out,
227         unsigned output_format);
228 void isl_pw_qpolynomial_dump(__isl_keep isl_pw_qpolynomial *pwqp);
229
230 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_coalesce(
231         __isl_take isl_pw_qpolynomial *pwqp);
232 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist(
233         __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_set *context);
234
235 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_periods(
236         __isl_take isl_pw_qpolynomial *pwqp, int max_periods);
237
238 __isl_give isl_pw_qpolynomial *isl_basic_set_multiplicative_call(
239         __isl_take isl_basic_set *bset,
240         __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset));
241
242 enum isl_fold {
243         isl_fold_min,
244         isl_fold_max,
245         isl_fold_list
246 };
247
248 struct isl_qpolynomial_fold;
249 typedef struct isl_qpolynomial_fold isl_qpolynomial_fold;
250
251 isl_ctx *isl_qpolynomial_fold_get_ctx(__isl_keep isl_qpolynomial_fold *fold);
252 enum isl_fold isl_qpolynomial_fold_get_type(__isl_keep isl_qpolynomial_fold *fold);
253
254 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_empty(enum isl_fold type,
255         __isl_take isl_dim *dim);
256 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_alloc(
257         enum isl_fold type, __isl_take isl_qpolynomial *qp);
258 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy(
259         __isl_keep isl_qpolynomial_fold *fold);
260 void isl_qpolynomial_fold_free(__isl_take isl_qpolynomial_fold *fold);
261
262 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_dim(
263         __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim);
264
265 int isl_qpolynomial_fold_is_empty(__isl_keep isl_qpolynomial_fold *fold);
266 int isl_qpolynomial_fold_is_equal(__isl_keep isl_qpolynomial_fold *fold1,
267         __isl_keep isl_qpolynomial_fold *fold2);
268
269 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold(
270         __isl_take isl_qpolynomial_fold *fold1,
271         __isl_take isl_qpolynomial_fold *fold2);
272
273 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_mul_isl_int(
274         __isl_take isl_qpolynomial_fold *fold, isl_int v);
275
276 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_move_dims(
277         __isl_take isl_qpolynomial_fold *fold,
278         enum isl_dim_type dst_type, unsigned dst_pos,
279         enum isl_dim_type src_type, unsigned src_pos, unsigned n);
280
281 __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute(
282         __isl_take isl_qpolynomial_fold *fold,
283         enum isl_dim_type type, unsigned first, unsigned n,
284         __isl_keep isl_qpolynomial **subs);
285
286 __isl_give isl_qpolynomial *isl_qpolynomial_fold_eval(
287         __isl_take isl_qpolynomial_fold *fold, __isl_take isl_point *pnt);
288
289 int isl_qpolynomial_fold_foreach_qpolynomial(
290         __isl_keep isl_qpolynomial_fold *fold,
291         int (*fn)(__isl_take isl_qpolynomial *qp, void *user), void *user);
292
293 __isl_give isl_printer *isl_printer_print_qpolynomial_fold(
294         __isl_take isl_printer *p, __isl_keep isl_qpolynomial_fold *fold);
295 void isl_qpolynomial_fold_print(__isl_keep isl_qpolynomial_fold *fold, FILE *out,
296         unsigned output_format);
297 void isl_qpolynomial_fold_dump(__isl_keep isl_qpolynomial_fold *fold);
298
299 struct isl_pw_qpolynomial_fold;
300 typedef struct isl_pw_qpolynomial_fold isl_pw_qpolynomial_fold;
301
302 isl_ctx *isl_pw_qpolynomial_fold_get_ctx(__isl_keep isl_pw_qpolynomial_fold *pwf);
303
304 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_from_pw_qpolynomial(
305         enum isl_fold type, __isl_take isl_pw_qpolynomial *pwqp);
306
307 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_alloc(
308         enum isl_fold type,
309         __isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold);
310 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_copy(
311         __isl_keep isl_pw_qpolynomial_fold *pwf);
312 void isl_pw_qpolynomial_fold_free(__isl_take isl_pw_qpolynomial_fold *pwf);
313
314 int isl_pw_qpolynomial_fold_is_zero(__isl_keep isl_pw_qpolynomial_fold *pwf);
315
316 __isl_give isl_dim *isl_pw_qpolynomial_fold_get_dim(
317         __isl_keep isl_pw_qpolynomial_fold *pwf);
318 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_reset_dim(
319         __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_dim *dim);
320 unsigned isl_pw_qpolynomial_fold_dim(__isl_keep isl_pw_qpolynomial_fold *pwf,
321         enum isl_dim_type type);
322 int isl_pw_qpolynomial_fold_has_equal_dim(
323         __isl_keep isl_pw_qpolynomial_fold *pwf1,
324         __isl_keep isl_pw_qpolynomial_fold *pwf2);
325
326 size_t isl_pw_qpolynomial_fold_size(__isl_keep isl_pw_qpolynomial_fold *pwf);
327
328 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_zero(
329         __isl_take isl_dim *dim, enum isl_fold type);
330
331 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_set_dim_name(
332         __isl_take isl_pw_qpolynomial_fold *pwf,
333         enum isl_dim_type type, unsigned pos, const char *s);
334
335 __isl_give isl_set *isl_pw_qpolynomial_fold_domain(
336         __isl_take isl_pw_qpolynomial_fold *pwf);
337 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_intersect_domain(
338         __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *set);
339
340 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add(
341         __isl_take isl_pw_qpolynomial_fold *pwf1,
342         __isl_take isl_pw_qpolynomial_fold *pwf2);
343 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold(
344         __isl_take isl_pw_qpolynomial_fold *pwf1,
345         __isl_take isl_pw_qpolynomial_fold *pwf2);
346 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add_disjoint(
347         __isl_take isl_pw_qpolynomial_fold *pwf1,
348         __isl_take isl_pw_qpolynomial_fold *pwf2);
349 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_mul_isl_int(
350         __isl_take isl_pw_qpolynomial_fold *pwf, isl_int v);
351
352 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_drop_dims(
353         __isl_take isl_pw_qpolynomial_fold *pwf,
354         enum isl_dim_type type, unsigned first, unsigned n);
355 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_move_dims(
356         __isl_take isl_pw_qpolynomial_fold *pwf,
357         enum isl_dim_type dst_type, unsigned dst_pos,
358         enum isl_dim_type src_type, unsigned src_pos, unsigned n);
359
360 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fix_dim(
361         __isl_take isl_pw_qpolynomial_fold *pwf,
362         enum isl_dim_type type, unsigned n, isl_int v);
363
364 __isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_eval(
365         __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_point *pnt);
366
367 int isl_pw_qpolynomial_fold_foreach_piece(
368         __isl_keep isl_pw_qpolynomial_fold *pwf,
369         int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold,
370                     void *user), void *user);
371 int isl_pw_qpolynomial_fold_foreach_lifted_piece(
372         __isl_keep isl_pw_qpolynomial_fold *pwf,
373         int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold,
374                     void *user), void *user);
375
376 __isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold(
377         __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf);
378 void isl_pw_qpolynomial_fold_print(__isl_keep isl_pw_qpolynomial_fold *pwf,
379         FILE *out, unsigned output_format);
380 void isl_pw_qpolynomial_fold_dump(__isl_keep isl_pw_qpolynomial_fold *pwf);
381
382 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_coalesce(
383         __isl_take isl_pw_qpolynomial_fold *pwf);
384 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist(
385         __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *context);
386
387 __isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_max(
388         __isl_take isl_pw_qpolynomial_fold *pwf);
389 __isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_min(
390         __isl_take isl_pw_qpolynomial_fold *pwf);
391
392 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_bound(
393         __isl_take isl_pw_qpolynomial *pwqp, enum isl_fold type, int *tight);
394 __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_bound(
395         __isl_take isl_pw_qpolynomial_fold *pwf, int *tight);
396 __isl_give isl_pw_qpolynomial_fold *isl_set_apply_pw_qpolynomial_fold(
397         __isl_take isl_set *set, __isl_take isl_pw_qpolynomial_fold *pwf,
398         int *tight);
399 __isl_give isl_pw_qpolynomial_fold *isl_map_apply_pw_qpolynomial_fold(
400         __isl_take isl_map *map, __isl_take isl_pw_qpolynomial_fold *pwf,
401         int *tight);
402
403 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial(
404         __isl_take isl_pw_qpolynomial *pwqp, int sign);
405
406 struct isl_union_pw_qpolynomial;
407 typedef struct isl_union_pw_qpolynomial isl_union_pw_qpolynomial;
408
409 isl_ctx *isl_union_pw_qpolynomial_get_ctx(
410         __isl_keep isl_union_pw_qpolynomial *upwqp);
411
412 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_from_pw_qpolynomial(__isl_take isl_pw_qpolynomial *pwqp);
413 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_zero(
414         __isl_take isl_dim *dim);
415 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add_pw_qpolynomial(
416         __isl_take isl_union_pw_qpolynomial *upwqp,
417         __isl_take isl_pw_qpolynomial *pwqp);
418 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_copy(
419         __isl_keep isl_union_pw_qpolynomial *upwqp);
420 void isl_union_pw_qpolynomial_free(__isl_take isl_union_pw_qpolynomial *upwqp);
421
422 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add(
423         __isl_take isl_union_pw_qpolynomial *upwqp1,
424         __isl_take isl_union_pw_qpolynomial *upwqp2);
425 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_sub(
426         __isl_take isl_union_pw_qpolynomial *upwqp1,
427         __isl_take isl_union_pw_qpolynomial *upwqp2);
428 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul(
429         __isl_take isl_union_pw_qpolynomial *upwqp1,
430         __isl_take isl_union_pw_qpolynomial *upwqp2);
431 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul_isl_int(
432         __isl_take isl_union_pw_qpolynomial *upwqp, isl_int v);
433
434 __isl_give isl_union_set *isl_union_pw_qpolynomial_domain(
435         __isl_take isl_union_pw_qpolynomial *upwqp);
436 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_intersect_domain(
437         __isl_take isl_union_pw_qpolynomial *upwpq,
438         __isl_take isl_union_set *uset);
439
440 __isl_give isl_dim *isl_union_pw_qpolynomial_get_dim(
441         __isl_keep isl_union_pw_qpolynomial *upwqp);
442
443 __isl_give isl_qpolynomial *isl_union_pw_qpolynomial_eval(
444         __isl_take isl_union_pw_qpolynomial *upwqp, __isl_take isl_point *pnt);
445
446 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce(
447         __isl_take isl_union_pw_qpolynomial *upwqp);
448 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_gist(
449         __isl_take isl_union_pw_qpolynomial *upwqp,
450         __isl_take isl_union_set *context);
451
452 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_align_params(
453         __isl_take isl_union_pw_qpolynomial *upwqp,
454         __isl_take isl_dim *model);
455
456 int isl_union_pw_qpolynomial_foreach_pw_qpolynomial(
457         __isl_keep isl_union_pw_qpolynomial *upwqp,
458         int (*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user), void *user);
459 __isl_give isl_pw_qpolynomial *isl_union_pw_qpolynomial_extract_pw_qpolynomial(
460         __isl_keep isl_union_pw_qpolynomial *upwqp, __isl_take isl_dim *dim);
461
462 __isl_give isl_printer *isl_printer_print_union_pw_qpolynomial(
463         __isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp);
464
465 struct isl_union_pw_qpolynomial_fold;
466 typedef struct isl_union_pw_qpolynomial_fold isl_union_pw_qpolynomial_fold;
467
468 isl_ctx *isl_union_pw_qpolynomial_fold_get_ctx(
469         __isl_keep isl_union_pw_qpolynomial_fold *upwf);
470
471 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(__isl_take isl_pw_qpolynomial_fold *pwf);
472 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_zero(
473         __isl_take isl_dim *dim, enum isl_fold type);
474 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(
475         __isl_take isl_union_pw_qpolynomial_fold *upwqp,
476         __isl_take isl_pw_qpolynomial_fold *pwqp);
477 void isl_union_pw_qpolynomial_fold_free(
478         __isl_take isl_union_pw_qpolynomial_fold *upwf);
479 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_copy(
480         __isl_keep isl_union_pw_qpolynomial_fold *upwf);
481
482 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold(
483         __isl_take isl_union_pw_qpolynomial_fold *upwf1,
484         __isl_take isl_union_pw_qpolynomial_fold *upwf2);
485 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial(
486         __isl_take isl_union_pw_qpolynomial_fold *upwf,
487         __isl_take isl_union_pw_qpolynomial *upwqp);
488 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_mul_isl_int(
489         __isl_take isl_union_pw_qpolynomial_fold *upwf, isl_int v);
490
491 __isl_give isl_union_set *isl_union_pw_qpolynomial_fold_domain(
492         __isl_take isl_union_pw_qpolynomial_fold *upwf);
493 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_intersect_domain(
494         __isl_take isl_union_pw_qpolynomial_fold *upwf,
495         __isl_take isl_union_set *uset);
496
497 enum isl_fold isl_union_pw_qpolynomial_fold_get_type(
498         __isl_keep isl_union_pw_qpolynomial_fold *upwf);
499 __isl_give isl_dim *isl_union_pw_qpolynomial_fold_get_dim(
500         __isl_keep isl_union_pw_qpolynomial_fold *upwf);
501
502 __isl_give isl_qpolynomial *isl_union_pw_qpolynomial_fold_eval(
503         __isl_take isl_union_pw_qpolynomial_fold *upwf,
504         __isl_take isl_point *pnt);
505
506 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_coalesce(
507         __isl_take isl_union_pw_qpolynomial_fold *upwf);
508 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_gist(
509         __isl_take isl_union_pw_qpolynomial_fold *upwf,
510         __isl_take isl_union_set *context);
511
512 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_align_params(
513         __isl_take isl_union_pw_qpolynomial_fold *upwf,
514         __isl_take isl_dim *model);
515
516 int isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold(
517         __isl_keep isl_union_pw_qpolynomial_fold *upwf,
518         int (*fn)(__isl_take isl_pw_qpolynomial_fold *pwf,
519                     void *user), void *user);
520 __isl_give isl_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold(
521         __isl_keep isl_union_pw_qpolynomial_fold *upwf, __isl_take isl_dim *dim);
522
523 __isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold(
524         __isl_take isl_printer *p,
525         __isl_keep isl_union_pw_qpolynomial_fold *upwf);
526
527 __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_bound(
528         __isl_take isl_union_pw_qpolynomial *upwqp,
529         enum isl_fold type, int *tight);
530 __isl_give isl_union_pw_qpolynomial_fold *isl_union_set_apply_union_pw_qpolynomial_fold(
531         __isl_take isl_union_set *uset,
532         __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight);
533 __isl_give isl_union_pw_qpolynomial_fold *isl_union_map_apply_union_pw_qpolynomial_fold(
534         __isl_take isl_union_map *umap,
535         __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight);
536
537 __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_to_polynomial(
538         __isl_take isl_union_pw_qpolynomial *upwqp, int sign);
539
540 #if defined(__cplusplus)
541 }
542 #endif
543
544 #endif