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