1isl_dlname='libisl.so.22'
2import os
3from ctypes import *
4from ctypes.util import find_library
5
6isl_dyld_library_path = os.environ.get('ISL_DYLD_LIBRARY_PATH')
7if isl_dyld_library_path != None:
8    os.environ['DYLD_LIBRARY_PATH'] =  isl_dyld_library_path
9try:
10    isl = cdll.LoadLibrary(isl_dlname)
11except:
12    isl = cdll.LoadLibrary(find_library("isl"))
13libc = cdll.LoadLibrary(find_library("c"))
14
15class Error(Exception):
16    pass
17
18class Context:
19    defaultInstance = None
20
21    def __init__(self):
22        ptr = isl.isl_ctx_alloc()
23        self.ptr = ptr
24
25    def __del__(self):
26        isl.isl_ctx_free(self)
27
28    def from_param(self):
29        return c_void_p(self.ptr)
30
31    @staticmethod
32    def getDefaultInstance():
33        if Context.defaultInstance == None:
34            Context.defaultInstance = Context()
35        return Context.defaultInstance
36
37isl.isl_ctx_alloc.restype = c_void_p
38isl.isl_ctx_free.argtypes = [Context]
39
40class union_pw_multi_aff(object):
41    def __init__(self, *args, **keywords):
42        if "ptr" in keywords:
43            self.ctx = keywords["ctx"]
44            self.ptr = keywords["ptr"]
45            return
46        if len(args) == 1 and args[0].__class__ is multi_aff:
47            self.ctx = Context.getDefaultInstance()
48            self.ptr = isl.isl_union_pw_multi_aff_from_multi_aff(isl.isl_multi_aff_copy(args[0].ptr))
49            return
50        if len(args) == 1 and args[0].__class__ is pw_multi_aff:
51            self.ctx = Context.getDefaultInstance()
52            self.ptr = isl.isl_union_pw_multi_aff_from_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr))
53            return
54        if len(args) == 1 and args[0].__class__ is union_pw_aff:
55            self.ctx = Context.getDefaultInstance()
56            self.ptr = isl.isl_union_pw_multi_aff_from_union_pw_aff(isl.isl_union_pw_aff_copy(args[0].ptr))
57            return
58        if len(args) == 1 and type(args[0]) == str:
59            self.ctx = Context.getDefaultInstance()
60            self.ptr = isl.isl_union_pw_multi_aff_read_from_str(self.ctx, args[0].encode('ascii'))
61            return
62        raise Error
63    def __del__(self):
64        if hasattr(self, 'ptr'):
65            isl.isl_union_pw_multi_aff_free(self.ptr)
66    def __str__(arg0):
67        try:
68            if not arg0.__class__ is union_pw_multi_aff:
69                arg0 = union_pw_multi_aff(arg0)
70        except:
71            raise
72        ptr = isl.isl_union_pw_multi_aff_to_str(arg0.ptr)
73        res = cast(ptr, c_char_p).value.decode('ascii')
74        libc.free(ptr)
75        return res
76    def __repr__(self):
77        s = str(self)
78        if '"' in s:
79            return 'isl.union_pw_multi_aff("""%s""")' % s
80        else:
81            return 'isl.union_pw_multi_aff("%s")' % s
82    def add(arg0, arg1):
83        try:
84            if not arg0.__class__ is union_pw_multi_aff:
85                arg0 = union_pw_multi_aff(arg0)
86        except:
87            raise
88        try:
89            if not arg1.__class__ is union_pw_multi_aff:
90                arg1 = union_pw_multi_aff(arg1)
91        except:
92            raise
93        ctx = arg0.ctx
94        res = isl.isl_union_pw_multi_aff_add(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr))
95        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
96        return obj
97    def apply(*args):
98        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
99            ctx = args[0].ctx
100            res = isl.isl_union_pw_multi_aff_apply_union_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
101            obj = union_pw_multi_aff(ctx=ctx, ptr=res)
102            return obj
103        raise Error
104    def as_pw_multi_aff(arg0):
105        try:
106            if not arg0.__class__ is union_pw_multi_aff:
107                arg0 = union_pw_multi_aff(arg0)
108        except:
109            raise
110        ctx = arg0.ctx
111        res = isl.isl_union_pw_multi_aff_as_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(arg0.ptr))
112        obj = pw_multi_aff(ctx=ctx, ptr=res)
113        return obj
114    def coalesce(arg0):
115        try:
116            if not arg0.__class__ is union_pw_multi_aff:
117                arg0 = union_pw_multi_aff(arg0)
118        except:
119            raise
120        ctx = arg0.ctx
121        res = isl.isl_union_pw_multi_aff_coalesce(isl.isl_union_pw_multi_aff_copy(arg0.ptr))
122        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
123        return obj
124    def domain(arg0):
125        try:
126            if not arg0.__class__ is union_pw_multi_aff:
127                arg0 = union_pw_multi_aff(arg0)
128        except:
129            raise
130        ctx = arg0.ctx
131        res = isl.isl_union_pw_multi_aff_domain(isl.isl_union_pw_multi_aff_copy(arg0.ptr))
132        obj = union_set(ctx=ctx, ptr=res)
133        return obj
134    @staticmethod
135    def empty(*args):
136        if len(args) == 0:
137            ctx = Context.getDefaultInstance()
138            res = isl.isl_union_pw_multi_aff_empty_ctx(ctx)
139            obj = union_pw_multi_aff(ctx=ctx, ptr=res)
140            return obj
141        raise Error
142    def extract_pw_multi_aff(arg0, arg1):
143        try:
144            if not arg0.__class__ is union_pw_multi_aff:
145                arg0 = union_pw_multi_aff(arg0)
146        except:
147            raise
148        try:
149            if not arg1.__class__ is space:
150                arg1 = space(arg1)
151        except:
152            raise
153        ctx = arg0.ctx
154        res = isl.isl_union_pw_multi_aff_extract_pw_multi_aff(arg0.ptr, isl.isl_space_copy(arg1.ptr))
155        obj = pw_multi_aff(ctx=ctx, ptr=res)
156        return obj
157    def flat_range_product(arg0, arg1):
158        try:
159            if not arg0.__class__ is union_pw_multi_aff:
160                arg0 = union_pw_multi_aff(arg0)
161        except:
162            raise
163        try:
164            if not arg1.__class__ is union_pw_multi_aff:
165                arg1 = union_pw_multi_aff(arg1)
166        except:
167            raise
168        ctx = arg0.ctx
169        res = isl.isl_union_pw_multi_aff_flat_range_product(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr))
170        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
171        return obj
172    def space(arg0):
173        try:
174            if not arg0.__class__ is union_pw_multi_aff:
175                arg0 = union_pw_multi_aff(arg0)
176        except:
177            raise
178        ctx = arg0.ctx
179        res = isl.isl_union_pw_multi_aff_get_space(arg0.ptr)
180        obj = space(ctx=ctx, ptr=res)
181        return obj
182    def get_space(arg0):
183        return arg0.space()
184    def gist(arg0, arg1):
185        try:
186            if not arg0.__class__ is union_pw_multi_aff:
187                arg0 = union_pw_multi_aff(arg0)
188        except:
189            raise
190        try:
191            if not arg1.__class__ is union_set:
192                arg1 = union_set(arg1)
193        except:
194            raise
195        ctx = arg0.ctx
196        res = isl.isl_union_pw_multi_aff_gist(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
197        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
198        return obj
199    def intersect_domain(*args):
200        if len(args) == 2 and args[1].__class__ is space:
201            ctx = args[0].ctx
202            res = isl.isl_union_pw_multi_aff_intersect_domain_space(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr))
203            obj = union_pw_multi_aff(ctx=ctx, ptr=res)
204            return obj
205        if len(args) == 2 and args[1].__class__ is union_set:
206            ctx = args[0].ctx
207            res = isl.isl_union_pw_multi_aff_intersect_domain_union_set(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr))
208            obj = union_pw_multi_aff(ctx=ctx, ptr=res)
209            return obj
210        raise Error
211    def intersect_domain_wrapped_domain(arg0, arg1):
212        try:
213            if not arg0.__class__ is union_pw_multi_aff:
214                arg0 = union_pw_multi_aff(arg0)
215        except:
216            raise
217        try:
218            if not arg1.__class__ is union_set:
219                arg1 = union_set(arg1)
220        except:
221            raise
222        ctx = arg0.ctx
223        res = isl.isl_union_pw_multi_aff_intersect_domain_wrapped_domain(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
224        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
225        return obj
226    def intersect_domain_wrapped_range(arg0, arg1):
227        try:
228            if not arg0.__class__ is union_pw_multi_aff:
229                arg0 = union_pw_multi_aff(arg0)
230        except:
231            raise
232        try:
233            if not arg1.__class__ is union_set:
234                arg1 = union_set(arg1)
235        except:
236            raise
237        ctx = arg0.ctx
238        res = isl.isl_union_pw_multi_aff_intersect_domain_wrapped_range(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
239        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
240        return obj
241    def intersect_params(arg0, arg1):
242        try:
243            if not arg0.__class__ is union_pw_multi_aff:
244                arg0 = union_pw_multi_aff(arg0)
245        except:
246            raise
247        try:
248            if not arg1.__class__ is set:
249                arg1 = set(arg1)
250        except:
251            raise
252        ctx = arg0.ctx
253        res = isl.isl_union_pw_multi_aff_intersect_params(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
254        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
255        return obj
256    def involves_locals(arg0):
257        try:
258            if not arg0.__class__ is union_pw_multi_aff:
259                arg0 = union_pw_multi_aff(arg0)
260        except:
261            raise
262        ctx = arg0.ctx
263        res = isl.isl_union_pw_multi_aff_involves_locals(arg0.ptr)
264        if res < 0:
265            raise
266        return bool(res)
267    def isa_pw_multi_aff(arg0):
268        try:
269            if not arg0.__class__ is union_pw_multi_aff:
270                arg0 = union_pw_multi_aff(arg0)
271        except:
272            raise
273        ctx = arg0.ctx
274        res = isl.isl_union_pw_multi_aff_isa_pw_multi_aff(arg0.ptr)
275        if res < 0:
276            raise
277        return bool(res)
278    def plain_is_empty(arg0):
279        try:
280            if not arg0.__class__ is union_pw_multi_aff:
281                arg0 = union_pw_multi_aff(arg0)
282        except:
283            raise
284        ctx = arg0.ctx
285        res = isl.isl_union_pw_multi_aff_plain_is_empty(arg0.ptr)
286        if res < 0:
287            raise
288        return bool(res)
289    def pullback(*args):
290        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
291            ctx = args[0].ctx
292            res = isl.isl_union_pw_multi_aff_pullback_union_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
293            obj = union_pw_multi_aff(ctx=ctx, ptr=res)
294            return obj
295        raise Error
296    def range_factor_domain(arg0):
297        try:
298            if not arg0.__class__ is union_pw_multi_aff:
299                arg0 = union_pw_multi_aff(arg0)
300        except:
301            raise
302        ctx = arg0.ctx
303        res = isl.isl_union_pw_multi_aff_range_factor_domain(isl.isl_union_pw_multi_aff_copy(arg0.ptr))
304        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
305        return obj
306    def range_factor_range(arg0):
307        try:
308            if not arg0.__class__ is union_pw_multi_aff:
309                arg0 = union_pw_multi_aff(arg0)
310        except:
311            raise
312        ctx = arg0.ctx
313        res = isl.isl_union_pw_multi_aff_range_factor_range(isl.isl_union_pw_multi_aff_copy(arg0.ptr))
314        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
315        return obj
316    def range_product(arg0, arg1):
317        try:
318            if not arg0.__class__ is union_pw_multi_aff:
319                arg0 = union_pw_multi_aff(arg0)
320        except:
321            raise
322        try:
323            if not arg1.__class__ is union_pw_multi_aff:
324                arg1 = union_pw_multi_aff(arg1)
325        except:
326            raise
327        ctx = arg0.ctx
328        res = isl.isl_union_pw_multi_aff_range_product(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr))
329        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
330        return obj
331    def sub(arg0, arg1):
332        try:
333            if not arg0.__class__ is union_pw_multi_aff:
334                arg0 = union_pw_multi_aff(arg0)
335        except:
336            raise
337        try:
338            if not arg1.__class__ is union_pw_multi_aff:
339                arg1 = union_pw_multi_aff(arg1)
340        except:
341            raise
342        ctx = arg0.ctx
343        res = isl.isl_union_pw_multi_aff_sub(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr))
344        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
345        return obj
346    def subtract_domain(*args):
347        if len(args) == 2 and args[1].__class__ is space:
348            ctx = args[0].ctx
349            res = isl.isl_union_pw_multi_aff_subtract_domain_space(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr))
350            obj = union_pw_multi_aff(ctx=ctx, ptr=res)
351            return obj
352        if len(args) == 2 and args[1].__class__ is union_set:
353            ctx = args[0].ctx
354            res = isl.isl_union_pw_multi_aff_subtract_domain_union_set(isl.isl_union_pw_multi_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr))
355            obj = union_pw_multi_aff(ctx=ctx, ptr=res)
356            return obj
357        raise Error
358    def union_add(arg0, arg1):
359        try:
360            if not arg0.__class__ is union_pw_multi_aff:
361                arg0 = union_pw_multi_aff(arg0)
362        except:
363            raise
364        try:
365            if not arg1.__class__ is union_pw_multi_aff:
366                arg1 = union_pw_multi_aff(arg1)
367        except:
368            raise
369        ctx = arg0.ctx
370        res = isl.isl_union_pw_multi_aff_union_add(isl.isl_union_pw_multi_aff_copy(arg0.ptr), isl.isl_union_pw_multi_aff_copy(arg1.ptr))
371        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
372        return obj
373
374isl.isl_union_pw_multi_aff_from_multi_aff.restype = c_void_p
375isl.isl_union_pw_multi_aff_from_multi_aff.argtypes = [c_void_p]
376isl.isl_union_pw_multi_aff_from_pw_multi_aff.restype = c_void_p
377isl.isl_union_pw_multi_aff_from_pw_multi_aff.argtypes = [c_void_p]
378isl.isl_union_pw_multi_aff_from_union_pw_aff.restype = c_void_p
379isl.isl_union_pw_multi_aff_from_union_pw_aff.argtypes = [c_void_p]
380isl.isl_union_pw_multi_aff_read_from_str.restype = c_void_p
381isl.isl_union_pw_multi_aff_read_from_str.argtypes = [Context, c_char_p]
382isl.isl_union_pw_multi_aff_add.restype = c_void_p
383isl.isl_union_pw_multi_aff_add.argtypes = [c_void_p, c_void_p]
384isl.isl_union_pw_multi_aff_apply_union_pw_multi_aff.restype = c_void_p
385isl.isl_union_pw_multi_aff_apply_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
386isl.isl_union_pw_multi_aff_as_pw_multi_aff.restype = c_void_p
387isl.isl_union_pw_multi_aff_as_pw_multi_aff.argtypes = [c_void_p]
388isl.isl_union_pw_multi_aff_coalesce.restype = c_void_p
389isl.isl_union_pw_multi_aff_coalesce.argtypes = [c_void_p]
390isl.isl_union_pw_multi_aff_domain.restype = c_void_p
391isl.isl_union_pw_multi_aff_domain.argtypes = [c_void_p]
392isl.isl_union_pw_multi_aff_empty_ctx.restype = c_void_p
393isl.isl_union_pw_multi_aff_empty_ctx.argtypes = [Context]
394isl.isl_union_pw_multi_aff_extract_pw_multi_aff.restype = c_void_p
395isl.isl_union_pw_multi_aff_extract_pw_multi_aff.argtypes = [c_void_p, c_void_p]
396isl.isl_union_pw_multi_aff_flat_range_product.restype = c_void_p
397isl.isl_union_pw_multi_aff_flat_range_product.argtypes = [c_void_p, c_void_p]
398isl.isl_union_pw_multi_aff_get_space.restype = c_void_p
399isl.isl_union_pw_multi_aff_get_space.argtypes = [c_void_p]
400isl.isl_union_pw_multi_aff_gist.restype = c_void_p
401isl.isl_union_pw_multi_aff_gist.argtypes = [c_void_p, c_void_p]
402isl.isl_union_pw_multi_aff_intersect_domain_space.restype = c_void_p
403isl.isl_union_pw_multi_aff_intersect_domain_space.argtypes = [c_void_p, c_void_p]
404isl.isl_union_pw_multi_aff_intersect_domain_union_set.restype = c_void_p
405isl.isl_union_pw_multi_aff_intersect_domain_union_set.argtypes = [c_void_p, c_void_p]
406isl.isl_union_pw_multi_aff_intersect_domain_wrapped_domain.restype = c_void_p
407isl.isl_union_pw_multi_aff_intersect_domain_wrapped_domain.argtypes = [c_void_p, c_void_p]
408isl.isl_union_pw_multi_aff_intersect_domain_wrapped_range.restype = c_void_p
409isl.isl_union_pw_multi_aff_intersect_domain_wrapped_range.argtypes = [c_void_p, c_void_p]
410isl.isl_union_pw_multi_aff_intersect_params.restype = c_void_p
411isl.isl_union_pw_multi_aff_intersect_params.argtypes = [c_void_p, c_void_p]
412isl.isl_union_pw_multi_aff_involves_locals.argtypes = [c_void_p]
413isl.isl_union_pw_multi_aff_isa_pw_multi_aff.argtypes = [c_void_p]
414isl.isl_union_pw_multi_aff_plain_is_empty.argtypes = [c_void_p]
415isl.isl_union_pw_multi_aff_pullback_union_pw_multi_aff.restype = c_void_p
416isl.isl_union_pw_multi_aff_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
417isl.isl_union_pw_multi_aff_range_factor_domain.restype = c_void_p
418isl.isl_union_pw_multi_aff_range_factor_domain.argtypes = [c_void_p]
419isl.isl_union_pw_multi_aff_range_factor_range.restype = c_void_p
420isl.isl_union_pw_multi_aff_range_factor_range.argtypes = [c_void_p]
421isl.isl_union_pw_multi_aff_range_product.restype = c_void_p
422isl.isl_union_pw_multi_aff_range_product.argtypes = [c_void_p, c_void_p]
423isl.isl_union_pw_multi_aff_sub.restype = c_void_p
424isl.isl_union_pw_multi_aff_sub.argtypes = [c_void_p, c_void_p]
425isl.isl_union_pw_multi_aff_subtract_domain_space.restype = c_void_p
426isl.isl_union_pw_multi_aff_subtract_domain_space.argtypes = [c_void_p, c_void_p]
427isl.isl_union_pw_multi_aff_subtract_domain_union_set.restype = c_void_p
428isl.isl_union_pw_multi_aff_subtract_domain_union_set.argtypes = [c_void_p, c_void_p]
429isl.isl_union_pw_multi_aff_union_add.restype = c_void_p
430isl.isl_union_pw_multi_aff_union_add.argtypes = [c_void_p, c_void_p]
431isl.isl_union_pw_multi_aff_copy.restype = c_void_p
432isl.isl_union_pw_multi_aff_copy.argtypes = [c_void_p]
433isl.isl_union_pw_multi_aff_free.restype = c_void_p
434isl.isl_union_pw_multi_aff_free.argtypes = [c_void_p]
435isl.isl_union_pw_multi_aff_to_str.restype = POINTER(c_char)
436isl.isl_union_pw_multi_aff_to_str.argtypes = [c_void_p]
437
438class multi_union_pw_aff(object):
439    def __init__(self, *args, **keywords):
440        if "ptr" in keywords:
441            self.ctx = keywords["ctx"]
442            self.ptr = keywords["ptr"]
443            return
444        if len(args) == 1 and args[0].__class__ is multi_pw_aff:
445            self.ctx = Context.getDefaultInstance()
446            self.ptr = isl.isl_multi_union_pw_aff_from_multi_pw_aff(isl.isl_multi_pw_aff_copy(args[0].ptr))
447            return
448        if len(args) == 1 and args[0].__class__ is union_pw_aff:
449            self.ctx = Context.getDefaultInstance()
450            self.ptr = isl.isl_multi_union_pw_aff_from_union_pw_aff(isl.isl_union_pw_aff_copy(args[0].ptr))
451            return
452        if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is union_pw_aff_list:
453            self.ctx = Context.getDefaultInstance()
454            self.ptr = isl.isl_multi_union_pw_aff_from_union_pw_aff_list(isl.isl_space_copy(args[0].ptr), isl.isl_union_pw_aff_list_copy(args[1].ptr))
455            return
456        if len(args) == 1 and type(args[0]) == str:
457            self.ctx = Context.getDefaultInstance()
458            self.ptr = isl.isl_multi_union_pw_aff_read_from_str(self.ctx, args[0].encode('ascii'))
459            return
460        raise Error
461    def __del__(self):
462        if hasattr(self, 'ptr'):
463            isl.isl_multi_union_pw_aff_free(self.ptr)
464    def __str__(arg0):
465        try:
466            if not arg0.__class__ is multi_union_pw_aff:
467                arg0 = multi_union_pw_aff(arg0)
468        except:
469            raise
470        ptr = isl.isl_multi_union_pw_aff_to_str(arg0.ptr)
471        res = cast(ptr, c_char_p).value.decode('ascii')
472        libc.free(ptr)
473        return res
474    def __repr__(self):
475        s = str(self)
476        if '"' in s:
477            return 'isl.multi_union_pw_aff("""%s""")' % s
478        else:
479            return 'isl.multi_union_pw_aff("%s")' % s
480    def add(arg0, arg1):
481        try:
482            if not arg0.__class__ is multi_union_pw_aff:
483                arg0 = multi_union_pw_aff(arg0)
484        except:
485            raise
486        try:
487            if not arg1.__class__ is multi_union_pw_aff:
488                arg1 = multi_union_pw_aff(arg1)
489        except:
490            raise
491        ctx = arg0.ctx
492        res = isl.isl_multi_union_pw_aff_add(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr))
493        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
494        return obj
495    def bind(arg0, arg1):
496        try:
497            if not arg0.__class__ is multi_union_pw_aff:
498                arg0 = multi_union_pw_aff(arg0)
499        except:
500            raise
501        try:
502            if not arg1.__class__ is multi_id:
503                arg1 = multi_id(arg1)
504        except:
505            raise
506        ctx = arg0.ctx
507        res = isl.isl_multi_union_pw_aff_bind(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
508        obj = union_set(ctx=ctx, ptr=res)
509        return obj
510    def coalesce(arg0):
511        try:
512            if not arg0.__class__ is multi_union_pw_aff:
513                arg0 = multi_union_pw_aff(arg0)
514        except:
515            raise
516        ctx = arg0.ctx
517        res = isl.isl_multi_union_pw_aff_coalesce(isl.isl_multi_union_pw_aff_copy(arg0.ptr))
518        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
519        return obj
520    def domain(arg0):
521        try:
522            if not arg0.__class__ is multi_union_pw_aff:
523                arg0 = multi_union_pw_aff(arg0)
524        except:
525            raise
526        ctx = arg0.ctx
527        res = isl.isl_multi_union_pw_aff_domain(isl.isl_multi_union_pw_aff_copy(arg0.ptr))
528        obj = union_set(ctx=ctx, ptr=res)
529        return obj
530    def flat_range_product(arg0, arg1):
531        try:
532            if not arg0.__class__ is multi_union_pw_aff:
533                arg0 = multi_union_pw_aff(arg0)
534        except:
535            raise
536        try:
537            if not arg1.__class__ is multi_union_pw_aff:
538                arg1 = multi_union_pw_aff(arg1)
539        except:
540            raise
541        ctx = arg0.ctx
542        res = isl.isl_multi_union_pw_aff_flat_range_product(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr))
543        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
544        return obj
545    def at(arg0, arg1):
546        try:
547            if not arg0.__class__ is multi_union_pw_aff:
548                arg0 = multi_union_pw_aff(arg0)
549        except:
550            raise
551        ctx = arg0.ctx
552        res = isl.isl_multi_union_pw_aff_get_at(arg0.ptr, arg1)
553        obj = union_pw_aff(ctx=ctx, ptr=res)
554        return obj
555    def get_at(arg0, arg1):
556        return arg0.at(arg1)
557    def list(arg0):
558        try:
559            if not arg0.__class__ is multi_union_pw_aff:
560                arg0 = multi_union_pw_aff(arg0)
561        except:
562            raise
563        ctx = arg0.ctx
564        res = isl.isl_multi_union_pw_aff_get_list(arg0.ptr)
565        obj = union_pw_aff_list(ctx=ctx, ptr=res)
566        return obj
567    def get_list(arg0):
568        return arg0.list()
569    def space(arg0):
570        try:
571            if not arg0.__class__ is multi_union_pw_aff:
572                arg0 = multi_union_pw_aff(arg0)
573        except:
574            raise
575        ctx = arg0.ctx
576        res = isl.isl_multi_union_pw_aff_get_space(arg0.ptr)
577        obj = space(ctx=ctx, ptr=res)
578        return obj
579    def get_space(arg0):
580        return arg0.space()
581    def gist(arg0, arg1):
582        try:
583            if not arg0.__class__ is multi_union_pw_aff:
584                arg0 = multi_union_pw_aff(arg0)
585        except:
586            raise
587        try:
588            if not arg1.__class__ is union_set:
589                arg1 = union_set(arg1)
590        except:
591            raise
592        ctx = arg0.ctx
593        res = isl.isl_multi_union_pw_aff_gist(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
594        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
595        return obj
596    def intersect_domain(arg0, arg1):
597        try:
598            if not arg0.__class__ is multi_union_pw_aff:
599                arg0 = multi_union_pw_aff(arg0)
600        except:
601            raise
602        try:
603            if not arg1.__class__ is union_set:
604                arg1 = union_set(arg1)
605        except:
606            raise
607        ctx = arg0.ctx
608        res = isl.isl_multi_union_pw_aff_intersect_domain(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
609        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
610        return obj
611    def intersect_params(arg0, arg1):
612        try:
613            if not arg0.__class__ is multi_union_pw_aff:
614                arg0 = multi_union_pw_aff(arg0)
615        except:
616            raise
617        try:
618            if not arg1.__class__ is set:
619                arg1 = set(arg1)
620        except:
621            raise
622        ctx = arg0.ctx
623        res = isl.isl_multi_union_pw_aff_intersect_params(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
624        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
625        return obj
626    def neg(arg0):
627        try:
628            if not arg0.__class__ is multi_union_pw_aff:
629                arg0 = multi_union_pw_aff(arg0)
630        except:
631            raise
632        ctx = arg0.ctx
633        res = isl.isl_multi_union_pw_aff_neg(isl.isl_multi_union_pw_aff_copy(arg0.ptr))
634        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
635        return obj
636    def plain_is_equal(arg0, arg1):
637        try:
638            if not arg0.__class__ is multi_union_pw_aff:
639                arg0 = multi_union_pw_aff(arg0)
640        except:
641            raise
642        try:
643            if not arg1.__class__ is multi_union_pw_aff:
644                arg1 = multi_union_pw_aff(arg1)
645        except:
646            raise
647        ctx = arg0.ctx
648        res = isl.isl_multi_union_pw_aff_plain_is_equal(arg0.ptr, arg1.ptr)
649        if res < 0:
650            raise
651        return bool(res)
652    def pullback(*args):
653        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
654            ctx = args[0].ctx
655            res = isl.isl_multi_union_pw_aff_pullback_union_pw_multi_aff(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
656            obj = multi_union_pw_aff(ctx=ctx, ptr=res)
657            return obj
658        raise Error
659    def range_product(arg0, arg1):
660        try:
661            if not arg0.__class__ is multi_union_pw_aff:
662                arg0 = multi_union_pw_aff(arg0)
663        except:
664            raise
665        try:
666            if not arg1.__class__ is multi_union_pw_aff:
667                arg1 = multi_union_pw_aff(arg1)
668        except:
669            raise
670        ctx = arg0.ctx
671        res = isl.isl_multi_union_pw_aff_range_product(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr))
672        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
673        return obj
674    def scale(*args):
675        if len(args) == 2 and args[1].__class__ is multi_val:
676            ctx = args[0].ctx
677            res = isl.isl_multi_union_pw_aff_scale_multi_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
678            obj = multi_union_pw_aff(ctx=ctx, ptr=res)
679            return obj
680        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
681            args = list(args)
682            try:
683                if not args[1].__class__ is val:
684                    args[1] = val(args[1])
685            except:
686                raise
687            ctx = args[0].ctx
688            res = isl.isl_multi_union_pw_aff_scale_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
689            obj = multi_union_pw_aff(ctx=ctx, ptr=res)
690            return obj
691        raise Error
692    def scale_down(*args):
693        if len(args) == 2 and args[1].__class__ is multi_val:
694            ctx = args[0].ctx
695            res = isl.isl_multi_union_pw_aff_scale_down_multi_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
696            obj = multi_union_pw_aff(ctx=ctx, ptr=res)
697            return obj
698        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
699            args = list(args)
700            try:
701                if not args[1].__class__ is val:
702                    args[1] = val(args[1])
703            except:
704                raise
705            ctx = args[0].ctx
706            res = isl.isl_multi_union_pw_aff_scale_down_val(isl.isl_multi_union_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
707            obj = multi_union_pw_aff(ctx=ctx, ptr=res)
708            return obj
709        raise Error
710    def set_at(arg0, arg1, arg2):
711        try:
712            if not arg0.__class__ is multi_union_pw_aff:
713                arg0 = multi_union_pw_aff(arg0)
714        except:
715            raise
716        try:
717            if not arg2.__class__ is union_pw_aff:
718                arg2 = union_pw_aff(arg2)
719        except:
720            raise
721        ctx = arg0.ctx
722        res = isl.isl_multi_union_pw_aff_set_at(isl.isl_multi_union_pw_aff_copy(arg0.ptr), arg1, isl.isl_union_pw_aff_copy(arg2.ptr))
723        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
724        return obj
725    def size(arg0):
726        try:
727            if not arg0.__class__ is multi_union_pw_aff:
728                arg0 = multi_union_pw_aff(arg0)
729        except:
730            raise
731        ctx = arg0.ctx
732        res = isl.isl_multi_union_pw_aff_size(arg0.ptr)
733        if res < 0:
734            raise
735        return int(res)
736    def sub(arg0, arg1):
737        try:
738            if not arg0.__class__ is multi_union_pw_aff:
739                arg0 = multi_union_pw_aff(arg0)
740        except:
741            raise
742        try:
743            if not arg1.__class__ is multi_union_pw_aff:
744                arg1 = multi_union_pw_aff(arg1)
745        except:
746            raise
747        ctx = arg0.ctx
748        res = isl.isl_multi_union_pw_aff_sub(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr))
749        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
750        return obj
751    def union_add(arg0, arg1):
752        try:
753            if not arg0.__class__ is multi_union_pw_aff:
754                arg0 = multi_union_pw_aff(arg0)
755        except:
756            raise
757        try:
758            if not arg1.__class__ is multi_union_pw_aff:
759                arg1 = multi_union_pw_aff(arg1)
760        except:
761            raise
762        ctx = arg0.ctx
763        res = isl.isl_multi_union_pw_aff_union_add(isl.isl_multi_union_pw_aff_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr))
764        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
765        return obj
766    @staticmethod
767    def zero(arg0):
768        try:
769            if not arg0.__class__ is space:
770                arg0 = space(arg0)
771        except:
772            raise
773        ctx = arg0.ctx
774        res = isl.isl_multi_union_pw_aff_zero(isl.isl_space_copy(arg0.ptr))
775        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
776        return obj
777
778isl.isl_multi_union_pw_aff_from_multi_pw_aff.restype = c_void_p
779isl.isl_multi_union_pw_aff_from_multi_pw_aff.argtypes = [c_void_p]
780isl.isl_multi_union_pw_aff_from_union_pw_aff.restype = c_void_p
781isl.isl_multi_union_pw_aff_from_union_pw_aff.argtypes = [c_void_p]
782isl.isl_multi_union_pw_aff_from_union_pw_aff_list.restype = c_void_p
783isl.isl_multi_union_pw_aff_from_union_pw_aff_list.argtypes = [c_void_p, c_void_p]
784isl.isl_multi_union_pw_aff_read_from_str.restype = c_void_p
785isl.isl_multi_union_pw_aff_read_from_str.argtypes = [Context, c_char_p]
786isl.isl_multi_union_pw_aff_add.restype = c_void_p
787isl.isl_multi_union_pw_aff_add.argtypes = [c_void_p, c_void_p]
788isl.isl_multi_union_pw_aff_bind.restype = c_void_p
789isl.isl_multi_union_pw_aff_bind.argtypes = [c_void_p, c_void_p]
790isl.isl_multi_union_pw_aff_coalesce.restype = c_void_p
791isl.isl_multi_union_pw_aff_coalesce.argtypes = [c_void_p]
792isl.isl_multi_union_pw_aff_domain.restype = c_void_p
793isl.isl_multi_union_pw_aff_domain.argtypes = [c_void_p]
794isl.isl_multi_union_pw_aff_flat_range_product.restype = c_void_p
795isl.isl_multi_union_pw_aff_flat_range_product.argtypes = [c_void_p, c_void_p]
796isl.isl_multi_union_pw_aff_get_at.restype = c_void_p
797isl.isl_multi_union_pw_aff_get_at.argtypes = [c_void_p, c_int]
798isl.isl_multi_union_pw_aff_get_list.restype = c_void_p
799isl.isl_multi_union_pw_aff_get_list.argtypes = [c_void_p]
800isl.isl_multi_union_pw_aff_get_space.restype = c_void_p
801isl.isl_multi_union_pw_aff_get_space.argtypes = [c_void_p]
802isl.isl_multi_union_pw_aff_gist.restype = c_void_p
803isl.isl_multi_union_pw_aff_gist.argtypes = [c_void_p, c_void_p]
804isl.isl_multi_union_pw_aff_intersect_domain.restype = c_void_p
805isl.isl_multi_union_pw_aff_intersect_domain.argtypes = [c_void_p, c_void_p]
806isl.isl_multi_union_pw_aff_intersect_params.restype = c_void_p
807isl.isl_multi_union_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p]
808isl.isl_multi_union_pw_aff_neg.restype = c_void_p
809isl.isl_multi_union_pw_aff_neg.argtypes = [c_void_p]
810isl.isl_multi_union_pw_aff_plain_is_equal.argtypes = [c_void_p, c_void_p]
811isl.isl_multi_union_pw_aff_pullback_union_pw_multi_aff.restype = c_void_p
812isl.isl_multi_union_pw_aff_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
813isl.isl_multi_union_pw_aff_range_product.restype = c_void_p
814isl.isl_multi_union_pw_aff_range_product.argtypes = [c_void_p, c_void_p]
815isl.isl_multi_union_pw_aff_scale_multi_val.restype = c_void_p
816isl.isl_multi_union_pw_aff_scale_multi_val.argtypes = [c_void_p, c_void_p]
817isl.isl_multi_union_pw_aff_scale_val.restype = c_void_p
818isl.isl_multi_union_pw_aff_scale_val.argtypes = [c_void_p, c_void_p]
819isl.isl_multi_union_pw_aff_scale_down_multi_val.restype = c_void_p
820isl.isl_multi_union_pw_aff_scale_down_multi_val.argtypes = [c_void_p, c_void_p]
821isl.isl_multi_union_pw_aff_scale_down_val.restype = c_void_p
822isl.isl_multi_union_pw_aff_scale_down_val.argtypes = [c_void_p, c_void_p]
823isl.isl_multi_union_pw_aff_set_at.restype = c_void_p
824isl.isl_multi_union_pw_aff_set_at.argtypes = [c_void_p, c_int, c_void_p]
825isl.isl_multi_union_pw_aff_size.argtypes = [c_void_p]
826isl.isl_multi_union_pw_aff_sub.restype = c_void_p
827isl.isl_multi_union_pw_aff_sub.argtypes = [c_void_p, c_void_p]
828isl.isl_multi_union_pw_aff_union_add.restype = c_void_p
829isl.isl_multi_union_pw_aff_union_add.argtypes = [c_void_p, c_void_p]
830isl.isl_multi_union_pw_aff_zero.restype = c_void_p
831isl.isl_multi_union_pw_aff_zero.argtypes = [c_void_p]
832isl.isl_multi_union_pw_aff_copy.restype = c_void_p
833isl.isl_multi_union_pw_aff_copy.argtypes = [c_void_p]
834isl.isl_multi_union_pw_aff_free.restype = c_void_p
835isl.isl_multi_union_pw_aff_free.argtypes = [c_void_p]
836isl.isl_multi_union_pw_aff_to_str.restype = POINTER(c_char)
837isl.isl_multi_union_pw_aff_to_str.argtypes = [c_void_p]
838
839class union_pw_aff(union_pw_multi_aff, multi_union_pw_aff):
840    def __init__(self, *args, **keywords):
841        if "ptr" in keywords:
842            self.ctx = keywords["ctx"]
843            self.ptr = keywords["ptr"]
844            return
845        if len(args) == 1 and args[0].__class__ is aff:
846            self.ctx = Context.getDefaultInstance()
847            self.ptr = isl.isl_union_pw_aff_from_aff(isl.isl_aff_copy(args[0].ptr))
848            return
849        if len(args) == 1 and args[0].__class__ is pw_aff:
850            self.ctx = Context.getDefaultInstance()
851            self.ptr = isl.isl_union_pw_aff_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr))
852            return
853        if len(args) == 1 and type(args[0]) == str:
854            self.ctx = Context.getDefaultInstance()
855            self.ptr = isl.isl_union_pw_aff_read_from_str(self.ctx, args[0].encode('ascii'))
856            return
857        raise Error
858    def __del__(self):
859        if hasattr(self, 'ptr'):
860            isl.isl_union_pw_aff_free(self.ptr)
861    def __str__(arg0):
862        try:
863            if not arg0.__class__ is union_pw_aff:
864                arg0 = union_pw_aff(arg0)
865        except:
866            raise
867        ptr = isl.isl_union_pw_aff_to_str(arg0.ptr)
868        res = cast(ptr, c_char_p).value.decode('ascii')
869        libc.free(ptr)
870        return res
871    def __repr__(self):
872        s = str(self)
873        if '"' in s:
874            return 'isl.union_pw_aff("""%s""")' % s
875        else:
876            return 'isl.union_pw_aff("%s")' % s
877    def add(arg0, arg1):
878        try:
879            if not arg0.__class__ is union_pw_aff:
880                arg0 = union_pw_aff(arg0)
881        except:
882            raise
883        try:
884            if not arg1.__class__ is union_pw_aff:
885                arg1 = union_pw_aff(arg1)
886        except:
887            return union_pw_multi_aff(arg0).add(arg1)
888        ctx = arg0.ctx
889        res = isl.isl_union_pw_aff_add(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr))
890        obj = union_pw_aff(ctx=ctx, ptr=res)
891        return obj
892    def bind(*args):
893        if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str):
894            args = list(args)
895            try:
896                if not args[1].__class__ is id:
897                    args[1] = id(args[1])
898            except:
899                raise
900            ctx = args[0].ctx
901            res = isl.isl_union_pw_aff_bind_id(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr))
902            obj = union_set(ctx=ctx, ptr=res)
903            return obj
904        raise Error
905    def coalesce(arg0):
906        try:
907            if not arg0.__class__ is union_pw_aff:
908                arg0 = union_pw_aff(arg0)
909        except:
910            raise
911        ctx = arg0.ctx
912        res = isl.isl_union_pw_aff_coalesce(isl.isl_union_pw_aff_copy(arg0.ptr))
913        obj = union_pw_aff(ctx=ctx, ptr=res)
914        return obj
915    def domain(arg0):
916        try:
917            if not arg0.__class__ is union_pw_aff:
918                arg0 = union_pw_aff(arg0)
919        except:
920            raise
921        ctx = arg0.ctx
922        res = isl.isl_union_pw_aff_domain(isl.isl_union_pw_aff_copy(arg0.ptr))
923        obj = union_set(ctx=ctx, ptr=res)
924        return obj
925    def space(arg0):
926        try:
927            if not arg0.__class__ is union_pw_aff:
928                arg0 = union_pw_aff(arg0)
929        except:
930            raise
931        ctx = arg0.ctx
932        res = isl.isl_union_pw_aff_get_space(arg0.ptr)
933        obj = space(ctx=ctx, ptr=res)
934        return obj
935    def get_space(arg0):
936        return arg0.space()
937    def gist(arg0, arg1):
938        try:
939            if not arg0.__class__ is union_pw_aff:
940                arg0 = union_pw_aff(arg0)
941        except:
942            raise
943        try:
944            if not arg1.__class__ is union_set:
945                arg1 = union_set(arg1)
946        except:
947            return union_pw_multi_aff(arg0).gist(arg1)
948        ctx = arg0.ctx
949        res = isl.isl_union_pw_aff_gist(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
950        obj = union_pw_aff(ctx=ctx, ptr=res)
951        return obj
952    def intersect_domain(*args):
953        if len(args) == 2 and args[1].__class__ is space:
954            ctx = args[0].ctx
955            res = isl.isl_union_pw_aff_intersect_domain_space(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr))
956            obj = union_pw_aff(ctx=ctx, ptr=res)
957            return obj
958        if len(args) == 2 and args[1].__class__ is union_set:
959            ctx = args[0].ctx
960            res = isl.isl_union_pw_aff_intersect_domain_union_set(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr))
961            obj = union_pw_aff(ctx=ctx, ptr=res)
962            return obj
963        raise Error
964    def intersect_domain_wrapped_domain(arg0, arg1):
965        try:
966            if not arg0.__class__ is union_pw_aff:
967                arg0 = union_pw_aff(arg0)
968        except:
969            raise
970        try:
971            if not arg1.__class__ is union_set:
972                arg1 = union_set(arg1)
973        except:
974            return union_pw_multi_aff(arg0).intersect_domain_wrapped_domain(arg1)
975        ctx = arg0.ctx
976        res = isl.isl_union_pw_aff_intersect_domain_wrapped_domain(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
977        obj = union_pw_aff(ctx=ctx, ptr=res)
978        return obj
979    def intersect_domain_wrapped_range(arg0, arg1):
980        try:
981            if not arg0.__class__ is union_pw_aff:
982                arg0 = union_pw_aff(arg0)
983        except:
984            raise
985        try:
986            if not arg1.__class__ is union_set:
987                arg1 = union_set(arg1)
988        except:
989            return union_pw_multi_aff(arg0).intersect_domain_wrapped_range(arg1)
990        ctx = arg0.ctx
991        res = isl.isl_union_pw_aff_intersect_domain_wrapped_range(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
992        obj = union_pw_aff(ctx=ctx, ptr=res)
993        return obj
994    def intersect_params(arg0, arg1):
995        try:
996            if not arg0.__class__ is union_pw_aff:
997                arg0 = union_pw_aff(arg0)
998        except:
999            raise
1000        try:
1001            if not arg1.__class__ is set:
1002                arg1 = set(arg1)
1003        except:
1004            return union_pw_multi_aff(arg0).intersect_params(arg1)
1005        ctx = arg0.ctx
1006        res = isl.isl_union_pw_aff_intersect_params(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
1007        obj = union_pw_aff(ctx=ctx, ptr=res)
1008        return obj
1009    def pullback(*args):
1010        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
1011            ctx = args[0].ctx
1012            res = isl.isl_union_pw_aff_pullback_union_pw_multi_aff(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
1013            obj = union_pw_aff(ctx=ctx, ptr=res)
1014            return obj
1015        raise Error
1016    def sub(arg0, arg1):
1017        try:
1018            if not arg0.__class__ is union_pw_aff:
1019                arg0 = union_pw_aff(arg0)
1020        except:
1021            raise
1022        try:
1023            if not arg1.__class__ is union_pw_aff:
1024                arg1 = union_pw_aff(arg1)
1025        except:
1026            return union_pw_multi_aff(arg0).sub(arg1)
1027        ctx = arg0.ctx
1028        res = isl.isl_union_pw_aff_sub(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr))
1029        obj = union_pw_aff(ctx=ctx, ptr=res)
1030        return obj
1031    def subtract_domain(*args):
1032        if len(args) == 2 and args[1].__class__ is space:
1033            ctx = args[0].ctx
1034            res = isl.isl_union_pw_aff_subtract_domain_space(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr))
1035            obj = union_pw_aff(ctx=ctx, ptr=res)
1036            return obj
1037        if len(args) == 2 and args[1].__class__ is union_set:
1038            ctx = args[0].ctx
1039            res = isl.isl_union_pw_aff_subtract_domain_union_set(isl.isl_union_pw_aff_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr))
1040            obj = union_pw_aff(ctx=ctx, ptr=res)
1041            return obj
1042        raise Error
1043    def union_add(arg0, arg1):
1044        try:
1045            if not arg0.__class__ is union_pw_aff:
1046                arg0 = union_pw_aff(arg0)
1047        except:
1048            raise
1049        try:
1050            if not arg1.__class__ is union_pw_aff:
1051                arg1 = union_pw_aff(arg1)
1052        except:
1053            return union_pw_multi_aff(arg0).union_add(arg1)
1054        ctx = arg0.ctx
1055        res = isl.isl_union_pw_aff_union_add(isl.isl_union_pw_aff_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr))
1056        obj = union_pw_aff(ctx=ctx, ptr=res)
1057        return obj
1058
1059isl.isl_union_pw_aff_from_aff.restype = c_void_p
1060isl.isl_union_pw_aff_from_aff.argtypes = [c_void_p]
1061isl.isl_union_pw_aff_from_pw_aff.restype = c_void_p
1062isl.isl_union_pw_aff_from_pw_aff.argtypes = [c_void_p]
1063isl.isl_union_pw_aff_read_from_str.restype = c_void_p
1064isl.isl_union_pw_aff_read_from_str.argtypes = [Context, c_char_p]
1065isl.isl_union_pw_aff_add.restype = c_void_p
1066isl.isl_union_pw_aff_add.argtypes = [c_void_p, c_void_p]
1067isl.isl_union_pw_aff_bind_id.restype = c_void_p
1068isl.isl_union_pw_aff_bind_id.argtypes = [c_void_p, c_void_p]
1069isl.isl_union_pw_aff_coalesce.restype = c_void_p
1070isl.isl_union_pw_aff_coalesce.argtypes = [c_void_p]
1071isl.isl_union_pw_aff_domain.restype = c_void_p
1072isl.isl_union_pw_aff_domain.argtypes = [c_void_p]
1073isl.isl_union_pw_aff_get_space.restype = c_void_p
1074isl.isl_union_pw_aff_get_space.argtypes = [c_void_p]
1075isl.isl_union_pw_aff_gist.restype = c_void_p
1076isl.isl_union_pw_aff_gist.argtypes = [c_void_p, c_void_p]
1077isl.isl_union_pw_aff_intersect_domain_space.restype = c_void_p
1078isl.isl_union_pw_aff_intersect_domain_space.argtypes = [c_void_p, c_void_p]
1079isl.isl_union_pw_aff_intersect_domain_union_set.restype = c_void_p
1080isl.isl_union_pw_aff_intersect_domain_union_set.argtypes = [c_void_p, c_void_p]
1081isl.isl_union_pw_aff_intersect_domain_wrapped_domain.restype = c_void_p
1082isl.isl_union_pw_aff_intersect_domain_wrapped_domain.argtypes = [c_void_p, c_void_p]
1083isl.isl_union_pw_aff_intersect_domain_wrapped_range.restype = c_void_p
1084isl.isl_union_pw_aff_intersect_domain_wrapped_range.argtypes = [c_void_p, c_void_p]
1085isl.isl_union_pw_aff_intersect_params.restype = c_void_p
1086isl.isl_union_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p]
1087isl.isl_union_pw_aff_pullback_union_pw_multi_aff.restype = c_void_p
1088isl.isl_union_pw_aff_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
1089isl.isl_union_pw_aff_sub.restype = c_void_p
1090isl.isl_union_pw_aff_sub.argtypes = [c_void_p, c_void_p]
1091isl.isl_union_pw_aff_subtract_domain_space.restype = c_void_p
1092isl.isl_union_pw_aff_subtract_domain_space.argtypes = [c_void_p, c_void_p]
1093isl.isl_union_pw_aff_subtract_domain_union_set.restype = c_void_p
1094isl.isl_union_pw_aff_subtract_domain_union_set.argtypes = [c_void_p, c_void_p]
1095isl.isl_union_pw_aff_union_add.restype = c_void_p
1096isl.isl_union_pw_aff_union_add.argtypes = [c_void_p, c_void_p]
1097isl.isl_union_pw_aff_copy.restype = c_void_p
1098isl.isl_union_pw_aff_copy.argtypes = [c_void_p]
1099isl.isl_union_pw_aff_free.restype = c_void_p
1100isl.isl_union_pw_aff_free.argtypes = [c_void_p]
1101isl.isl_union_pw_aff_to_str.restype = POINTER(c_char)
1102isl.isl_union_pw_aff_to_str.argtypes = [c_void_p]
1103
1104class multi_pw_aff(multi_union_pw_aff):
1105    def __init__(self, *args, **keywords):
1106        if "ptr" in keywords:
1107            self.ctx = keywords["ctx"]
1108            self.ptr = keywords["ptr"]
1109            return
1110        if len(args) == 1 and args[0].__class__ is aff:
1111            self.ctx = Context.getDefaultInstance()
1112            self.ptr = isl.isl_multi_pw_aff_from_aff(isl.isl_aff_copy(args[0].ptr))
1113            return
1114        if len(args) == 1 and args[0].__class__ is multi_aff:
1115            self.ctx = Context.getDefaultInstance()
1116            self.ptr = isl.isl_multi_pw_aff_from_multi_aff(isl.isl_multi_aff_copy(args[0].ptr))
1117            return
1118        if len(args) == 1 and args[0].__class__ is pw_aff:
1119            self.ctx = Context.getDefaultInstance()
1120            self.ptr = isl.isl_multi_pw_aff_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr))
1121            return
1122        if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is pw_aff_list:
1123            self.ctx = Context.getDefaultInstance()
1124            self.ptr = isl.isl_multi_pw_aff_from_pw_aff_list(isl.isl_space_copy(args[0].ptr), isl.isl_pw_aff_list_copy(args[1].ptr))
1125            return
1126        if len(args) == 1 and args[0].__class__ is pw_multi_aff:
1127            self.ctx = Context.getDefaultInstance()
1128            self.ptr = isl.isl_multi_pw_aff_from_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr))
1129            return
1130        if len(args) == 1 and type(args[0]) == str:
1131            self.ctx = Context.getDefaultInstance()
1132            self.ptr = isl.isl_multi_pw_aff_read_from_str(self.ctx, args[0].encode('ascii'))
1133            return
1134        raise Error
1135    def __del__(self):
1136        if hasattr(self, 'ptr'):
1137            isl.isl_multi_pw_aff_free(self.ptr)
1138    def __str__(arg0):
1139        try:
1140            if not arg0.__class__ is multi_pw_aff:
1141                arg0 = multi_pw_aff(arg0)
1142        except:
1143            raise
1144        ptr = isl.isl_multi_pw_aff_to_str(arg0.ptr)
1145        res = cast(ptr, c_char_p).value.decode('ascii')
1146        libc.free(ptr)
1147        return res
1148    def __repr__(self):
1149        s = str(self)
1150        if '"' in s:
1151            return 'isl.multi_pw_aff("""%s""")' % s
1152        else:
1153            return 'isl.multi_pw_aff("%s")' % s
1154    def add(arg0, arg1):
1155        try:
1156            if not arg0.__class__ is multi_pw_aff:
1157                arg0 = multi_pw_aff(arg0)
1158        except:
1159            raise
1160        try:
1161            if not arg1.__class__ is multi_pw_aff:
1162                arg1 = multi_pw_aff(arg1)
1163        except:
1164            return multi_union_pw_aff(arg0).add(arg1)
1165        ctx = arg0.ctx
1166        res = isl.isl_multi_pw_aff_add(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1167        obj = multi_pw_aff(ctx=ctx, ptr=res)
1168        return obj
1169    def add_constant(*args):
1170        if len(args) == 2 and args[1].__class__ is multi_val:
1171            ctx = args[0].ctx
1172            res = isl.isl_multi_pw_aff_add_constant_multi_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
1173            obj = multi_pw_aff(ctx=ctx, ptr=res)
1174            return obj
1175        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
1176            args = list(args)
1177            try:
1178                if not args[1].__class__ is val:
1179                    args[1] = val(args[1])
1180            except:
1181                raise
1182            ctx = args[0].ctx
1183            res = isl.isl_multi_pw_aff_add_constant_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
1184            obj = multi_pw_aff(ctx=ctx, ptr=res)
1185            return obj
1186        raise Error
1187    def bind(arg0, arg1):
1188        try:
1189            if not arg0.__class__ is multi_pw_aff:
1190                arg0 = multi_pw_aff(arg0)
1191        except:
1192            raise
1193        try:
1194            if not arg1.__class__ is multi_id:
1195                arg1 = multi_id(arg1)
1196        except:
1197            return multi_union_pw_aff(arg0).bind(arg1)
1198        ctx = arg0.ctx
1199        res = isl.isl_multi_pw_aff_bind(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
1200        obj = set(ctx=ctx, ptr=res)
1201        return obj
1202    def bind_domain(arg0, arg1):
1203        try:
1204            if not arg0.__class__ is multi_pw_aff:
1205                arg0 = multi_pw_aff(arg0)
1206        except:
1207            raise
1208        try:
1209            if not arg1.__class__ is multi_id:
1210                arg1 = multi_id(arg1)
1211        except:
1212            return multi_union_pw_aff(arg0).bind_domain(arg1)
1213        ctx = arg0.ctx
1214        res = isl.isl_multi_pw_aff_bind_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
1215        obj = multi_pw_aff(ctx=ctx, ptr=res)
1216        return obj
1217    def bind_domain_wrapped_domain(arg0, arg1):
1218        try:
1219            if not arg0.__class__ is multi_pw_aff:
1220                arg0 = multi_pw_aff(arg0)
1221        except:
1222            raise
1223        try:
1224            if not arg1.__class__ is multi_id:
1225                arg1 = multi_id(arg1)
1226        except:
1227            return multi_union_pw_aff(arg0).bind_domain_wrapped_domain(arg1)
1228        ctx = arg0.ctx
1229        res = isl.isl_multi_pw_aff_bind_domain_wrapped_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
1230        obj = multi_pw_aff(ctx=ctx, ptr=res)
1231        return obj
1232    def coalesce(arg0):
1233        try:
1234            if not arg0.__class__ is multi_pw_aff:
1235                arg0 = multi_pw_aff(arg0)
1236        except:
1237            raise
1238        ctx = arg0.ctx
1239        res = isl.isl_multi_pw_aff_coalesce(isl.isl_multi_pw_aff_copy(arg0.ptr))
1240        obj = multi_pw_aff(ctx=ctx, ptr=res)
1241        return obj
1242    def domain(arg0):
1243        try:
1244            if not arg0.__class__ is multi_pw_aff:
1245                arg0 = multi_pw_aff(arg0)
1246        except:
1247            raise
1248        ctx = arg0.ctx
1249        res = isl.isl_multi_pw_aff_domain(isl.isl_multi_pw_aff_copy(arg0.ptr))
1250        obj = set(ctx=ctx, ptr=res)
1251        return obj
1252    def flat_range_product(arg0, arg1):
1253        try:
1254            if not arg0.__class__ is multi_pw_aff:
1255                arg0 = multi_pw_aff(arg0)
1256        except:
1257            raise
1258        try:
1259            if not arg1.__class__ is multi_pw_aff:
1260                arg1 = multi_pw_aff(arg1)
1261        except:
1262            return multi_union_pw_aff(arg0).flat_range_product(arg1)
1263        ctx = arg0.ctx
1264        res = isl.isl_multi_pw_aff_flat_range_product(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1265        obj = multi_pw_aff(ctx=ctx, ptr=res)
1266        return obj
1267    def at(arg0, arg1):
1268        try:
1269            if not arg0.__class__ is multi_pw_aff:
1270                arg0 = multi_pw_aff(arg0)
1271        except:
1272            raise
1273        ctx = arg0.ctx
1274        res = isl.isl_multi_pw_aff_get_at(arg0.ptr, arg1)
1275        obj = pw_aff(ctx=ctx, ptr=res)
1276        return obj
1277    def get_at(arg0, arg1):
1278        return arg0.at(arg1)
1279    def list(arg0):
1280        try:
1281            if not arg0.__class__ is multi_pw_aff:
1282                arg0 = multi_pw_aff(arg0)
1283        except:
1284            raise
1285        ctx = arg0.ctx
1286        res = isl.isl_multi_pw_aff_get_list(arg0.ptr)
1287        obj = pw_aff_list(ctx=ctx, ptr=res)
1288        return obj
1289    def get_list(arg0):
1290        return arg0.list()
1291    def space(arg0):
1292        try:
1293            if not arg0.__class__ is multi_pw_aff:
1294                arg0 = multi_pw_aff(arg0)
1295        except:
1296            raise
1297        ctx = arg0.ctx
1298        res = isl.isl_multi_pw_aff_get_space(arg0.ptr)
1299        obj = space(ctx=ctx, ptr=res)
1300        return obj
1301    def get_space(arg0):
1302        return arg0.space()
1303    def gist(arg0, arg1):
1304        try:
1305            if not arg0.__class__ is multi_pw_aff:
1306                arg0 = multi_pw_aff(arg0)
1307        except:
1308            raise
1309        try:
1310            if not arg1.__class__ is set:
1311                arg1 = set(arg1)
1312        except:
1313            return multi_union_pw_aff(arg0).gist(arg1)
1314        ctx = arg0.ctx
1315        res = isl.isl_multi_pw_aff_gist(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
1316        obj = multi_pw_aff(ctx=ctx, ptr=res)
1317        return obj
1318    def identity(*args):
1319        if len(args) == 1:
1320            ctx = args[0].ctx
1321            res = isl.isl_multi_pw_aff_identity_multi_pw_aff(isl.isl_multi_pw_aff_copy(args[0].ptr))
1322            obj = multi_pw_aff(ctx=ctx, ptr=res)
1323            return obj
1324        raise Error
1325    @staticmethod
1326    def identity_on_domain(*args):
1327        if len(args) == 1 and args[0].__class__ is space:
1328            ctx = args[0].ctx
1329            res = isl.isl_multi_pw_aff_identity_on_domain_space(isl.isl_space_copy(args[0].ptr))
1330            obj = multi_pw_aff(ctx=ctx, ptr=res)
1331            return obj
1332        raise Error
1333    def insert_domain(arg0, arg1):
1334        try:
1335            if not arg0.__class__ is multi_pw_aff:
1336                arg0 = multi_pw_aff(arg0)
1337        except:
1338            raise
1339        try:
1340            if not arg1.__class__ is space:
1341                arg1 = space(arg1)
1342        except:
1343            return multi_union_pw_aff(arg0).insert_domain(arg1)
1344        ctx = arg0.ctx
1345        res = isl.isl_multi_pw_aff_insert_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr))
1346        obj = multi_pw_aff(ctx=ctx, ptr=res)
1347        return obj
1348    def intersect_domain(arg0, arg1):
1349        try:
1350            if not arg0.__class__ is multi_pw_aff:
1351                arg0 = multi_pw_aff(arg0)
1352        except:
1353            raise
1354        try:
1355            if not arg1.__class__ is set:
1356                arg1 = set(arg1)
1357        except:
1358            return multi_union_pw_aff(arg0).intersect_domain(arg1)
1359        ctx = arg0.ctx
1360        res = isl.isl_multi_pw_aff_intersect_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
1361        obj = multi_pw_aff(ctx=ctx, ptr=res)
1362        return obj
1363    def intersect_params(arg0, arg1):
1364        try:
1365            if not arg0.__class__ is multi_pw_aff:
1366                arg0 = multi_pw_aff(arg0)
1367        except:
1368            raise
1369        try:
1370            if not arg1.__class__ is set:
1371                arg1 = set(arg1)
1372        except:
1373            return multi_union_pw_aff(arg0).intersect_params(arg1)
1374        ctx = arg0.ctx
1375        res = isl.isl_multi_pw_aff_intersect_params(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
1376        obj = multi_pw_aff(ctx=ctx, ptr=res)
1377        return obj
1378    def involves_param(*args):
1379        if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str):
1380            args = list(args)
1381            try:
1382                if not args[1].__class__ is id:
1383                    args[1] = id(args[1])
1384            except:
1385                raise
1386            ctx = args[0].ctx
1387            res = isl.isl_multi_pw_aff_involves_param_id(args[0].ptr, args[1].ptr)
1388            if res < 0:
1389                raise
1390            return bool(res)
1391        if len(args) == 2 and args[1].__class__ is id_list:
1392            ctx = args[0].ctx
1393            res = isl.isl_multi_pw_aff_involves_param_id_list(args[0].ptr, args[1].ptr)
1394            if res < 0:
1395                raise
1396            return bool(res)
1397        raise Error
1398    def max(arg0, arg1):
1399        try:
1400            if not arg0.__class__ is multi_pw_aff:
1401                arg0 = multi_pw_aff(arg0)
1402        except:
1403            raise
1404        try:
1405            if not arg1.__class__ is multi_pw_aff:
1406                arg1 = multi_pw_aff(arg1)
1407        except:
1408            return multi_union_pw_aff(arg0).max(arg1)
1409        ctx = arg0.ctx
1410        res = isl.isl_multi_pw_aff_max(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1411        obj = multi_pw_aff(ctx=ctx, ptr=res)
1412        return obj
1413    def max_multi_val(arg0):
1414        try:
1415            if not arg0.__class__ is multi_pw_aff:
1416                arg0 = multi_pw_aff(arg0)
1417        except:
1418            raise
1419        ctx = arg0.ctx
1420        res = isl.isl_multi_pw_aff_max_multi_val(isl.isl_multi_pw_aff_copy(arg0.ptr))
1421        obj = multi_val(ctx=ctx, ptr=res)
1422        return obj
1423    def min(arg0, arg1):
1424        try:
1425            if not arg0.__class__ is multi_pw_aff:
1426                arg0 = multi_pw_aff(arg0)
1427        except:
1428            raise
1429        try:
1430            if not arg1.__class__ is multi_pw_aff:
1431                arg1 = multi_pw_aff(arg1)
1432        except:
1433            return multi_union_pw_aff(arg0).min(arg1)
1434        ctx = arg0.ctx
1435        res = isl.isl_multi_pw_aff_min(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1436        obj = multi_pw_aff(ctx=ctx, ptr=res)
1437        return obj
1438    def min_multi_val(arg0):
1439        try:
1440            if not arg0.__class__ is multi_pw_aff:
1441                arg0 = multi_pw_aff(arg0)
1442        except:
1443            raise
1444        ctx = arg0.ctx
1445        res = isl.isl_multi_pw_aff_min_multi_val(isl.isl_multi_pw_aff_copy(arg0.ptr))
1446        obj = multi_val(ctx=ctx, ptr=res)
1447        return obj
1448    def neg(arg0):
1449        try:
1450            if not arg0.__class__ is multi_pw_aff:
1451                arg0 = multi_pw_aff(arg0)
1452        except:
1453            raise
1454        ctx = arg0.ctx
1455        res = isl.isl_multi_pw_aff_neg(isl.isl_multi_pw_aff_copy(arg0.ptr))
1456        obj = multi_pw_aff(ctx=ctx, ptr=res)
1457        return obj
1458    def plain_is_equal(arg0, arg1):
1459        try:
1460            if not arg0.__class__ is multi_pw_aff:
1461                arg0 = multi_pw_aff(arg0)
1462        except:
1463            raise
1464        try:
1465            if not arg1.__class__ is multi_pw_aff:
1466                arg1 = multi_pw_aff(arg1)
1467        except:
1468            return multi_union_pw_aff(arg0).plain_is_equal(arg1)
1469        ctx = arg0.ctx
1470        res = isl.isl_multi_pw_aff_plain_is_equal(arg0.ptr, arg1.ptr)
1471        if res < 0:
1472            raise
1473        return bool(res)
1474    def product(arg0, arg1):
1475        try:
1476            if not arg0.__class__ is multi_pw_aff:
1477                arg0 = multi_pw_aff(arg0)
1478        except:
1479            raise
1480        try:
1481            if not arg1.__class__ is multi_pw_aff:
1482                arg1 = multi_pw_aff(arg1)
1483        except:
1484            return multi_union_pw_aff(arg0).product(arg1)
1485        ctx = arg0.ctx
1486        res = isl.isl_multi_pw_aff_product(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1487        obj = multi_pw_aff(ctx=ctx, ptr=res)
1488        return obj
1489    def pullback(*args):
1490        if len(args) == 2 and args[1].__class__ is multi_aff:
1491            ctx = args[0].ctx
1492            res = isl.isl_multi_pw_aff_pullback_multi_aff(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
1493            obj = multi_pw_aff(ctx=ctx, ptr=res)
1494            return obj
1495        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
1496            ctx = args[0].ctx
1497            res = isl.isl_multi_pw_aff_pullback_multi_pw_aff(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
1498            obj = multi_pw_aff(ctx=ctx, ptr=res)
1499            return obj
1500        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
1501            ctx = args[0].ctx
1502            res = isl.isl_multi_pw_aff_pullback_pw_multi_aff(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
1503            obj = multi_pw_aff(ctx=ctx, ptr=res)
1504            return obj
1505        raise Error
1506    def range_product(arg0, arg1):
1507        try:
1508            if not arg0.__class__ is multi_pw_aff:
1509                arg0 = multi_pw_aff(arg0)
1510        except:
1511            raise
1512        try:
1513            if not arg1.__class__ is multi_pw_aff:
1514                arg1 = multi_pw_aff(arg1)
1515        except:
1516            return multi_union_pw_aff(arg0).range_product(arg1)
1517        ctx = arg0.ctx
1518        res = isl.isl_multi_pw_aff_range_product(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1519        obj = multi_pw_aff(ctx=ctx, ptr=res)
1520        return obj
1521    def scale(*args):
1522        if len(args) == 2 and args[1].__class__ is multi_val:
1523            ctx = args[0].ctx
1524            res = isl.isl_multi_pw_aff_scale_multi_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
1525            obj = multi_pw_aff(ctx=ctx, ptr=res)
1526            return obj
1527        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
1528            args = list(args)
1529            try:
1530                if not args[1].__class__ is val:
1531                    args[1] = val(args[1])
1532            except:
1533                raise
1534            ctx = args[0].ctx
1535            res = isl.isl_multi_pw_aff_scale_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
1536            obj = multi_pw_aff(ctx=ctx, ptr=res)
1537            return obj
1538        raise Error
1539    def scale_down(*args):
1540        if len(args) == 2 and args[1].__class__ is multi_val:
1541            ctx = args[0].ctx
1542            res = isl.isl_multi_pw_aff_scale_down_multi_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
1543            obj = multi_pw_aff(ctx=ctx, ptr=res)
1544            return obj
1545        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
1546            args = list(args)
1547            try:
1548                if not args[1].__class__ is val:
1549                    args[1] = val(args[1])
1550            except:
1551                raise
1552            ctx = args[0].ctx
1553            res = isl.isl_multi_pw_aff_scale_down_val(isl.isl_multi_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
1554            obj = multi_pw_aff(ctx=ctx, ptr=res)
1555            return obj
1556        raise Error
1557    def set_at(arg0, arg1, arg2):
1558        try:
1559            if not arg0.__class__ is multi_pw_aff:
1560                arg0 = multi_pw_aff(arg0)
1561        except:
1562            raise
1563        try:
1564            if not arg2.__class__ is pw_aff:
1565                arg2 = pw_aff(arg2)
1566        except:
1567            return multi_union_pw_aff(arg0).set_at(arg1, arg2)
1568        ctx = arg0.ctx
1569        res = isl.isl_multi_pw_aff_set_at(isl.isl_multi_pw_aff_copy(arg0.ptr), arg1, isl.isl_pw_aff_copy(arg2.ptr))
1570        obj = multi_pw_aff(ctx=ctx, ptr=res)
1571        return obj
1572    def size(arg0):
1573        try:
1574            if not arg0.__class__ is multi_pw_aff:
1575                arg0 = multi_pw_aff(arg0)
1576        except:
1577            raise
1578        ctx = arg0.ctx
1579        res = isl.isl_multi_pw_aff_size(arg0.ptr)
1580        if res < 0:
1581            raise
1582        return int(res)
1583    def sub(arg0, arg1):
1584        try:
1585            if not arg0.__class__ is multi_pw_aff:
1586                arg0 = multi_pw_aff(arg0)
1587        except:
1588            raise
1589        try:
1590            if not arg1.__class__ is multi_pw_aff:
1591                arg1 = multi_pw_aff(arg1)
1592        except:
1593            return multi_union_pw_aff(arg0).sub(arg1)
1594        ctx = arg0.ctx
1595        res = isl.isl_multi_pw_aff_sub(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1596        obj = multi_pw_aff(ctx=ctx, ptr=res)
1597        return obj
1598    def unbind_params_insert_domain(arg0, arg1):
1599        try:
1600            if not arg0.__class__ is multi_pw_aff:
1601                arg0 = multi_pw_aff(arg0)
1602        except:
1603            raise
1604        try:
1605            if not arg1.__class__ is multi_id:
1606                arg1 = multi_id(arg1)
1607        except:
1608            return multi_union_pw_aff(arg0).unbind_params_insert_domain(arg1)
1609        ctx = arg0.ctx
1610        res = isl.isl_multi_pw_aff_unbind_params_insert_domain(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
1611        obj = multi_pw_aff(ctx=ctx, ptr=res)
1612        return obj
1613    def union_add(arg0, arg1):
1614        try:
1615            if not arg0.__class__ is multi_pw_aff:
1616                arg0 = multi_pw_aff(arg0)
1617        except:
1618            raise
1619        try:
1620            if not arg1.__class__ is multi_pw_aff:
1621                arg1 = multi_pw_aff(arg1)
1622        except:
1623            return multi_union_pw_aff(arg0).union_add(arg1)
1624        ctx = arg0.ctx
1625        res = isl.isl_multi_pw_aff_union_add(isl.isl_multi_pw_aff_copy(arg0.ptr), isl.isl_multi_pw_aff_copy(arg1.ptr))
1626        obj = multi_pw_aff(ctx=ctx, ptr=res)
1627        return obj
1628    @staticmethod
1629    def zero(arg0):
1630        try:
1631            if not arg0.__class__ is space:
1632                arg0 = space(arg0)
1633        except:
1634            raise
1635        ctx = arg0.ctx
1636        res = isl.isl_multi_pw_aff_zero(isl.isl_space_copy(arg0.ptr))
1637        obj = multi_pw_aff(ctx=ctx, ptr=res)
1638        return obj
1639
1640isl.isl_multi_pw_aff_from_aff.restype = c_void_p
1641isl.isl_multi_pw_aff_from_aff.argtypes = [c_void_p]
1642isl.isl_multi_pw_aff_from_multi_aff.restype = c_void_p
1643isl.isl_multi_pw_aff_from_multi_aff.argtypes = [c_void_p]
1644isl.isl_multi_pw_aff_from_pw_aff.restype = c_void_p
1645isl.isl_multi_pw_aff_from_pw_aff.argtypes = [c_void_p]
1646isl.isl_multi_pw_aff_from_pw_aff_list.restype = c_void_p
1647isl.isl_multi_pw_aff_from_pw_aff_list.argtypes = [c_void_p, c_void_p]
1648isl.isl_multi_pw_aff_from_pw_multi_aff.restype = c_void_p
1649isl.isl_multi_pw_aff_from_pw_multi_aff.argtypes = [c_void_p]
1650isl.isl_multi_pw_aff_read_from_str.restype = c_void_p
1651isl.isl_multi_pw_aff_read_from_str.argtypes = [Context, c_char_p]
1652isl.isl_multi_pw_aff_add.restype = c_void_p
1653isl.isl_multi_pw_aff_add.argtypes = [c_void_p, c_void_p]
1654isl.isl_multi_pw_aff_add_constant_multi_val.restype = c_void_p
1655isl.isl_multi_pw_aff_add_constant_multi_val.argtypes = [c_void_p, c_void_p]
1656isl.isl_multi_pw_aff_add_constant_val.restype = c_void_p
1657isl.isl_multi_pw_aff_add_constant_val.argtypes = [c_void_p, c_void_p]
1658isl.isl_multi_pw_aff_bind.restype = c_void_p
1659isl.isl_multi_pw_aff_bind.argtypes = [c_void_p, c_void_p]
1660isl.isl_multi_pw_aff_bind_domain.restype = c_void_p
1661isl.isl_multi_pw_aff_bind_domain.argtypes = [c_void_p, c_void_p]
1662isl.isl_multi_pw_aff_bind_domain_wrapped_domain.restype = c_void_p
1663isl.isl_multi_pw_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p]
1664isl.isl_multi_pw_aff_coalesce.restype = c_void_p
1665isl.isl_multi_pw_aff_coalesce.argtypes = [c_void_p]
1666isl.isl_multi_pw_aff_domain.restype = c_void_p
1667isl.isl_multi_pw_aff_domain.argtypes = [c_void_p]
1668isl.isl_multi_pw_aff_flat_range_product.restype = c_void_p
1669isl.isl_multi_pw_aff_flat_range_product.argtypes = [c_void_p, c_void_p]
1670isl.isl_multi_pw_aff_get_at.restype = c_void_p
1671isl.isl_multi_pw_aff_get_at.argtypes = [c_void_p, c_int]
1672isl.isl_multi_pw_aff_get_list.restype = c_void_p
1673isl.isl_multi_pw_aff_get_list.argtypes = [c_void_p]
1674isl.isl_multi_pw_aff_get_space.restype = c_void_p
1675isl.isl_multi_pw_aff_get_space.argtypes = [c_void_p]
1676isl.isl_multi_pw_aff_gist.restype = c_void_p
1677isl.isl_multi_pw_aff_gist.argtypes = [c_void_p, c_void_p]
1678isl.isl_multi_pw_aff_identity_multi_pw_aff.restype = c_void_p
1679isl.isl_multi_pw_aff_identity_multi_pw_aff.argtypes = [c_void_p]
1680isl.isl_multi_pw_aff_identity_on_domain_space.restype = c_void_p
1681isl.isl_multi_pw_aff_identity_on_domain_space.argtypes = [c_void_p]
1682isl.isl_multi_pw_aff_insert_domain.restype = c_void_p
1683isl.isl_multi_pw_aff_insert_domain.argtypes = [c_void_p, c_void_p]
1684isl.isl_multi_pw_aff_intersect_domain.restype = c_void_p
1685isl.isl_multi_pw_aff_intersect_domain.argtypes = [c_void_p, c_void_p]
1686isl.isl_multi_pw_aff_intersect_params.restype = c_void_p
1687isl.isl_multi_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p]
1688isl.isl_multi_pw_aff_involves_param_id.argtypes = [c_void_p, c_void_p]
1689isl.isl_multi_pw_aff_involves_param_id_list.argtypes = [c_void_p, c_void_p]
1690isl.isl_multi_pw_aff_max.restype = c_void_p
1691isl.isl_multi_pw_aff_max.argtypes = [c_void_p, c_void_p]
1692isl.isl_multi_pw_aff_max_multi_val.restype = c_void_p
1693isl.isl_multi_pw_aff_max_multi_val.argtypes = [c_void_p]
1694isl.isl_multi_pw_aff_min.restype = c_void_p
1695isl.isl_multi_pw_aff_min.argtypes = [c_void_p, c_void_p]
1696isl.isl_multi_pw_aff_min_multi_val.restype = c_void_p
1697isl.isl_multi_pw_aff_min_multi_val.argtypes = [c_void_p]
1698isl.isl_multi_pw_aff_neg.restype = c_void_p
1699isl.isl_multi_pw_aff_neg.argtypes = [c_void_p]
1700isl.isl_multi_pw_aff_plain_is_equal.argtypes = [c_void_p, c_void_p]
1701isl.isl_multi_pw_aff_product.restype = c_void_p
1702isl.isl_multi_pw_aff_product.argtypes = [c_void_p, c_void_p]
1703isl.isl_multi_pw_aff_pullback_multi_aff.restype = c_void_p
1704isl.isl_multi_pw_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p]
1705isl.isl_multi_pw_aff_pullback_multi_pw_aff.restype = c_void_p
1706isl.isl_multi_pw_aff_pullback_multi_pw_aff.argtypes = [c_void_p, c_void_p]
1707isl.isl_multi_pw_aff_pullback_pw_multi_aff.restype = c_void_p
1708isl.isl_multi_pw_aff_pullback_pw_multi_aff.argtypes = [c_void_p, c_void_p]
1709isl.isl_multi_pw_aff_range_product.restype = c_void_p
1710isl.isl_multi_pw_aff_range_product.argtypes = [c_void_p, c_void_p]
1711isl.isl_multi_pw_aff_scale_multi_val.restype = c_void_p
1712isl.isl_multi_pw_aff_scale_multi_val.argtypes = [c_void_p, c_void_p]
1713isl.isl_multi_pw_aff_scale_val.restype = c_void_p
1714isl.isl_multi_pw_aff_scale_val.argtypes = [c_void_p, c_void_p]
1715isl.isl_multi_pw_aff_scale_down_multi_val.restype = c_void_p
1716isl.isl_multi_pw_aff_scale_down_multi_val.argtypes = [c_void_p, c_void_p]
1717isl.isl_multi_pw_aff_scale_down_val.restype = c_void_p
1718isl.isl_multi_pw_aff_scale_down_val.argtypes = [c_void_p, c_void_p]
1719isl.isl_multi_pw_aff_set_at.restype = c_void_p
1720isl.isl_multi_pw_aff_set_at.argtypes = [c_void_p, c_int, c_void_p]
1721isl.isl_multi_pw_aff_size.argtypes = [c_void_p]
1722isl.isl_multi_pw_aff_sub.restype = c_void_p
1723isl.isl_multi_pw_aff_sub.argtypes = [c_void_p, c_void_p]
1724isl.isl_multi_pw_aff_unbind_params_insert_domain.restype = c_void_p
1725isl.isl_multi_pw_aff_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p]
1726isl.isl_multi_pw_aff_union_add.restype = c_void_p
1727isl.isl_multi_pw_aff_union_add.argtypes = [c_void_p, c_void_p]
1728isl.isl_multi_pw_aff_zero.restype = c_void_p
1729isl.isl_multi_pw_aff_zero.argtypes = [c_void_p]
1730isl.isl_multi_pw_aff_copy.restype = c_void_p
1731isl.isl_multi_pw_aff_copy.argtypes = [c_void_p]
1732isl.isl_multi_pw_aff_free.restype = c_void_p
1733isl.isl_multi_pw_aff_free.argtypes = [c_void_p]
1734isl.isl_multi_pw_aff_to_str.restype = POINTER(c_char)
1735isl.isl_multi_pw_aff_to_str.argtypes = [c_void_p]
1736
1737class pw_multi_aff(union_pw_multi_aff, multi_pw_aff):
1738    def __init__(self, *args, **keywords):
1739        if "ptr" in keywords:
1740            self.ctx = keywords["ctx"]
1741            self.ptr = keywords["ptr"]
1742            return
1743        if len(args) == 1 and args[0].__class__ is multi_aff:
1744            self.ctx = Context.getDefaultInstance()
1745            self.ptr = isl.isl_pw_multi_aff_from_multi_aff(isl.isl_multi_aff_copy(args[0].ptr))
1746            return
1747        if len(args) == 1 and args[0].__class__ is pw_aff:
1748            self.ctx = Context.getDefaultInstance()
1749            self.ptr = isl.isl_pw_multi_aff_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr))
1750            return
1751        if len(args) == 1 and type(args[0]) == str:
1752            self.ctx = Context.getDefaultInstance()
1753            self.ptr = isl.isl_pw_multi_aff_read_from_str(self.ctx, args[0].encode('ascii'))
1754            return
1755        raise Error
1756    def __del__(self):
1757        if hasattr(self, 'ptr'):
1758            isl.isl_pw_multi_aff_free(self.ptr)
1759    def __str__(arg0):
1760        try:
1761            if not arg0.__class__ is pw_multi_aff:
1762                arg0 = pw_multi_aff(arg0)
1763        except:
1764            raise
1765        ptr = isl.isl_pw_multi_aff_to_str(arg0.ptr)
1766        res = cast(ptr, c_char_p).value.decode('ascii')
1767        libc.free(ptr)
1768        return res
1769    def __repr__(self):
1770        s = str(self)
1771        if '"' in s:
1772            return 'isl.pw_multi_aff("""%s""")' % s
1773        else:
1774            return 'isl.pw_multi_aff("%s")' % s
1775    def add(arg0, arg1):
1776        try:
1777            if not arg0.__class__ is pw_multi_aff:
1778                arg0 = pw_multi_aff(arg0)
1779        except:
1780            raise
1781        try:
1782            if not arg1.__class__ is pw_multi_aff:
1783                arg1 = pw_multi_aff(arg1)
1784        except:
1785            return union_pw_multi_aff(arg0).add(arg1)
1786        ctx = arg0.ctx
1787        res = isl.isl_pw_multi_aff_add(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr))
1788        obj = pw_multi_aff(ctx=ctx, ptr=res)
1789        return obj
1790    def add_constant(*args):
1791        if len(args) == 2 and args[1].__class__ is multi_val:
1792            ctx = args[0].ctx
1793            res = isl.isl_pw_multi_aff_add_constant_multi_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
1794            obj = pw_multi_aff(ctx=ctx, ptr=res)
1795            return obj
1796        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
1797            args = list(args)
1798            try:
1799                if not args[1].__class__ is val:
1800                    args[1] = val(args[1])
1801            except:
1802                raise
1803            ctx = args[0].ctx
1804            res = isl.isl_pw_multi_aff_add_constant_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
1805            obj = pw_multi_aff(ctx=ctx, ptr=res)
1806            return obj
1807        raise Error
1808    def as_multi_aff(arg0):
1809        try:
1810            if not arg0.__class__ is pw_multi_aff:
1811                arg0 = pw_multi_aff(arg0)
1812        except:
1813            raise
1814        ctx = arg0.ctx
1815        res = isl.isl_pw_multi_aff_as_multi_aff(isl.isl_pw_multi_aff_copy(arg0.ptr))
1816        obj = multi_aff(ctx=ctx, ptr=res)
1817        return obj
1818    def bind_domain(arg0, arg1):
1819        try:
1820            if not arg0.__class__ is pw_multi_aff:
1821                arg0 = pw_multi_aff(arg0)
1822        except:
1823            raise
1824        try:
1825            if not arg1.__class__ is multi_id:
1826                arg1 = multi_id(arg1)
1827        except:
1828            return union_pw_multi_aff(arg0).bind_domain(arg1)
1829        ctx = arg0.ctx
1830        res = isl.isl_pw_multi_aff_bind_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
1831        obj = pw_multi_aff(ctx=ctx, ptr=res)
1832        return obj
1833    def bind_domain_wrapped_domain(arg0, arg1):
1834        try:
1835            if not arg0.__class__ is pw_multi_aff:
1836                arg0 = pw_multi_aff(arg0)
1837        except:
1838            raise
1839        try:
1840            if not arg1.__class__ is multi_id:
1841                arg1 = multi_id(arg1)
1842        except:
1843            return union_pw_multi_aff(arg0).bind_domain_wrapped_domain(arg1)
1844        ctx = arg0.ctx
1845        res = isl.isl_pw_multi_aff_bind_domain_wrapped_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
1846        obj = pw_multi_aff(ctx=ctx, ptr=res)
1847        return obj
1848    def coalesce(arg0):
1849        try:
1850            if not arg0.__class__ is pw_multi_aff:
1851                arg0 = pw_multi_aff(arg0)
1852        except:
1853            raise
1854        ctx = arg0.ctx
1855        res = isl.isl_pw_multi_aff_coalesce(isl.isl_pw_multi_aff_copy(arg0.ptr))
1856        obj = pw_multi_aff(ctx=ctx, ptr=res)
1857        return obj
1858    def domain(arg0):
1859        try:
1860            if not arg0.__class__ is pw_multi_aff:
1861                arg0 = pw_multi_aff(arg0)
1862        except:
1863            raise
1864        ctx = arg0.ctx
1865        res = isl.isl_pw_multi_aff_domain(isl.isl_pw_multi_aff_copy(arg0.ptr))
1866        obj = set(ctx=ctx, ptr=res)
1867        return obj
1868    @staticmethod
1869    def domain_map(arg0):
1870        try:
1871            if not arg0.__class__ is space:
1872                arg0 = space(arg0)
1873        except:
1874            raise
1875        ctx = arg0.ctx
1876        res = isl.isl_pw_multi_aff_domain_map(isl.isl_space_copy(arg0.ptr))
1877        obj = pw_multi_aff(ctx=ctx, ptr=res)
1878        return obj
1879    def flat_range_product(arg0, arg1):
1880        try:
1881            if not arg0.__class__ is pw_multi_aff:
1882                arg0 = pw_multi_aff(arg0)
1883        except:
1884            raise
1885        try:
1886            if not arg1.__class__ is pw_multi_aff:
1887                arg1 = pw_multi_aff(arg1)
1888        except:
1889            return union_pw_multi_aff(arg0).flat_range_product(arg1)
1890        ctx = arg0.ctx
1891        res = isl.isl_pw_multi_aff_flat_range_product(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr))
1892        obj = pw_multi_aff(ctx=ctx, ptr=res)
1893        return obj
1894    def foreach_piece(arg0, arg1):
1895        try:
1896            if not arg0.__class__ is pw_multi_aff:
1897                arg0 = pw_multi_aff(arg0)
1898        except:
1899            raise
1900        exc_info = [None]
1901        fn = CFUNCTYPE(c_int, c_void_p, c_void_p, c_void_p)
1902        def cb_func(cb_arg0, cb_arg1, cb_arg2):
1903            cb_arg0 = set(ctx=arg0.ctx, ptr=(cb_arg0))
1904            cb_arg1 = multi_aff(ctx=arg0.ctx, ptr=(cb_arg1))
1905            try:
1906                arg1(cb_arg0, cb_arg1)
1907            except:
1908                import sys
1909                exc_info[0] = sys.exc_info()
1910                return -1
1911            return 0
1912        cb = fn(cb_func)
1913        ctx = arg0.ctx
1914        res = isl.isl_pw_multi_aff_foreach_piece(arg0.ptr, cb, None)
1915        if exc_info[0] != None:
1916            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
1917        if res < 0:
1918            raise
1919    def space(arg0):
1920        try:
1921            if not arg0.__class__ is pw_multi_aff:
1922                arg0 = pw_multi_aff(arg0)
1923        except:
1924            raise
1925        ctx = arg0.ctx
1926        res = isl.isl_pw_multi_aff_get_space(arg0.ptr)
1927        obj = space(ctx=ctx, ptr=res)
1928        return obj
1929    def get_space(arg0):
1930        return arg0.space()
1931    def gist(arg0, arg1):
1932        try:
1933            if not arg0.__class__ is pw_multi_aff:
1934                arg0 = pw_multi_aff(arg0)
1935        except:
1936            raise
1937        try:
1938            if not arg1.__class__ is set:
1939                arg1 = set(arg1)
1940        except:
1941            return union_pw_multi_aff(arg0).gist(arg1)
1942        ctx = arg0.ctx
1943        res = isl.isl_pw_multi_aff_gist(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
1944        obj = pw_multi_aff(ctx=ctx, ptr=res)
1945        return obj
1946    def insert_domain(arg0, arg1):
1947        try:
1948            if not arg0.__class__ is pw_multi_aff:
1949                arg0 = pw_multi_aff(arg0)
1950        except:
1951            raise
1952        try:
1953            if not arg1.__class__ is space:
1954                arg1 = space(arg1)
1955        except:
1956            return union_pw_multi_aff(arg0).insert_domain(arg1)
1957        ctx = arg0.ctx
1958        res = isl.isl_pw_multi_aff_insert_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr))
1959        obj = pw_multi_aff(ctx=ctx, ptr=res)
1960        return obj
1961    def intersect_domain(arg0, arg1):
1962        try:
1963            if not arg0.__class__ is pw_multi_aff:
1964                arg0 = pw_multi_aff(arg0)
1965        except:
1966            raise
1967        try:
1968            if not arg1.__class__ is set:
1969                arg1 = set(arg1)
1970        except:
1971            return union_pw_multi_aff(arg0).intersect_domain(arg1)
1972        ctx = arg0.ctx
1973        res = isl.isl_pw_multi_aff_intersect_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
1974        obj = pw_multi_aff(ctx=ctx, ptr=res)
1975        return obj
1976    def intersect_params(arg0, arg1):
1977        try:
1978            if not arg0.__class__ is pw_multi_aff:
1979                arg0 = pw_multi_aff(arg0)
1980        except:
1981            raise
1982        try:
1983            if not arg1.__class__ is set:
1984                arg1 = set(arg1)
1985        except:
1986            return union_pw_multi_aff(arg0).intersect_params(arg1)
1987        ctx = arg0.ctx
1988        res = isl.isl_pw_multi_aff_intersect_params(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
1989        obj = pw_multi_aff(ctx=ctx, ptr=res)
1990        return obj
1991    def involves_locals(arg0):
1992        try:
1993            if not arg0.__class__ is pw_multi_aff:
1994                arg0 = pw_multi_aff(arg0)
1995        except:
1996            raise
1997        ctx = arg0.ctx
1998        res = isl.isl_pw_multi_aff_involves_locals(arg0.ptr)
1999        if res < 0:
2000            raise
2001        return bool(res)
2002    def isa_multi_aff(arg0):
2003        try:
2004            if not arg0.__class__ is pw_multi_aff:
2005                arg0 = pw_multi_aff(arg0)
2006        except:
2007            raise
2008        ctx = arg0.ctx
2009        res = isl.isl_pw_multi_aff_isa_multi_aff(arg0.ptr)
2010        if res < 0:
2011            raise
2012        return bool(res)
2013    def max_multi_val(arg0):
2014        try:
2015            if not arg0.__class__ is pw_multi_aff:
2016                arg0 = pw_multi_aff(arg0)
2017        except:
2018            raise
2019        ctx = arg0.ctx
2020        res = isl.isl_pw_multi_aff_max_multi_val(isl.isl_pw_multi_aff_copy(arg0.ptr))
2021        obj = multi_val(ctx=ctx, ptr=res)
2022        return obj
2023    def min_multi_val(arg0):
2024        try:
2025            if not arg0.__class__ is pw_multi_aff:
2026                arg0 = pw_multi_aff(arg0)
2027        except:
2028            raise
2029        ctx = arg0.ctx
2030        res = isl.isl_pw_multi_aff_min_multi_val(isl.isl_pw_multi_aff_copy(arg0.ptr))
2031        obj = multi_val(ctx=ctx, ptr=res)
2032        return obj
2033    def n_piece(arg0):
2034        try:
2035            if not arg0.__class__ is pw_multi_aff:
2036                arg0 = pw_multi_aff(arg0)
2037        except:
2038            raise
2039        ctx = arg0.ctx
2040        res = isl.isl_pw_multi_aff_n_piece(arg0.ptr)
2041        if res < 0:
2042            raise
2043        return int(res)
2044    def product(arg0, arg1):
2045        try:
2046            if not arg0.__class__ is pw_multi_aff:
2047                arg0 = pw_multi_aff(arg0)
2048        except:
2049            raise
2050        try:
2051            if not arg1.__class__ is pw_multi_aff:
2052                arg1 = pw_multi_aff(arg1)
2053        except:
2054            return union_pw_multi_aff(arg0).product(arg1)
2055        ctx = arg0.ctx
2056        res = isl.isl_pw_multi_aff_product(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr))
2057        obj = pw_multi_aff(ctx=ctx, ptr=res)
2058        return obj
2059    def pullback(*args):
2060        if len(args) == 2 and args[1].__class__ is multi_aff:
2061            ctx = args[0].ctx
2062            res = isl.isl_pw_multi_aff_pullback_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
2063            obj = pw_multi_aff(ctx=ctx, ptr=res)
2064            return obj
2065        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
2066            ctx = args[0].ctx
2067            res = isl.isl_pw_multi_aff_pullback_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
2068            obj = pw_multi_aff(ctx=ctx, ptr=res)
2069            return obj
2070        raise Error
2071    def range_factor_domain(arg0):
2072        try:
2073            if not arg0.__class__ is pw_multi_aff:
2074                arg0 = pw_multi_aff(arg0)
2075        except:
2076            raise
2077        ctx = arg0.ctx
2078        res = isl.isl_pw_multi_aff_range_factor_domain(isl.isl_pw_multi_aff_copy(arg0.ptr))
2079        obj = pw_multi_aff(ctx=ctx, ptr=res)
2080        return obj
2081    def range_factor_range(arg0):
2082        try:
2083            if not arg0.__class__ is pw_multi_aff:
2084                arg0 = pw_multi_aff(arg0)
2085        except:
2086            raise
2087        ctx = arg0.ctx
2088        res = isl.isl_pw_multi_aff_range_factor_range(isl.isl_pw_multi_aff_copy(arg0.ptr))
2089        obj = pw_multi_aff(ctx=ctx, ptr=res)
2090        return obj
2091    @staticmethod
2092    def range_map(arg0):
2093        try:
2094            if not arg0.__class__ is space:
2095                arg0 = space(arg0)
2096        except:
2097            raise
2098        ctx = arg0.ctx
2099        res = isl.isl_pw_multi_aff_range_map(isl.isl_space_copy(arg0.ptr))
2100        obj = pw_multi_aff(ctx=ctx, ptr=res)
2101        return obj
2102    def range_product(arg0, arg1):
2103        try:
2104            if not arg0.__class__ is pw_multi_aff:
2105                arg0 = pw_multi_aff(arg0)
2106        except:
2107            raise
2108        try:
2109            if not arg1.__class__ is pw_multi_aff:
2110                arg1 = pw_multi_aff(arg1)
2111        except:
2112            return union_pw_multi_aff(arg0).range_product(arg1)
2113        ctx = arg0.ctx
2114        res = isl.isl_pw_multi_aff_range_product(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr))
2115        obj = pw_multi_aff(ctx=ctx, ptr=res)
2116        return obj
2117    def scale(*args):
2118        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
2119            args = list(args)
2120            try:
2121                if not args[1].__class__ is val:
2122                    args[1] = val(args[1])
2123            except:
2124                raise
2125            ctx = args[0].ctx
2126            res = isl.isl_pw_multi_aff_scale_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
2127            obj = pw_multi_aff(ctx=ctx, ptr=res)
2128            return obj
2129        raise Error
2130    def scale_down(*args):
2131        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
2132            args = list(args)
2133            try:
2134                if not args[1].__class__ is val:
2135                    args[1] = val(args[1])
2136            except:
2137                raise
2138            ctx = args[0].ctx
2139            res = isl.isl_pw_multi_aff_scale_down_val(isl.isl_pw_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
2140            obj = pw_multi_aff(ctx=ctx, ptr=res)
2141            return obj
2142        raise Error
2143    def sub(arg0, arg1):
2144        try:
2145            if not arg0.__class__ is pw_multi_aff:
2146                arg0 = pw_multi_aff(arg0)
2147        except:
2148            raise
2149        try:
2150            if not arg1.__class__ is pw_multi_aff:
2151                arg1 = pw_multi_aff(arg1)
2152        except:
2153            return union_pw_multi_aff(arg0).sub(arg1)
2154        ctx = arg0.ctx
2155        res = isl.isl_pw_multi_aff_sub(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr))
2156        obj = pw_multi_aff(ctx=ctx, ptr=res)
2157        return obj
2158    def subtract_domain(arg0, arg1):
2159        try:
2160            if not arg0.__class__ is pw_multi_aff:
2161                arg0 = pw_multi_aff(arg0)
2162        except:
2163            raise
2164        try:
2165            if not arg1.__class__ is set:
2166                arg1 = set(arg1)
2167        except:
2168            return union_pw_multi_aff(arg0).subtract_domain(arg1)
2169        ctx = arg0.ctx
2170        res = isl.isl_pw_multi_aff_subtract_domain(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
2171        obj = pw_multi_aff(ctx=ctx, ptr=res)
2172        return obj
2173    def union_add(arg0, arg1):
2174        try:
2175            if not arg0.__class__ is pw_multi_aff:
2176                arg0 = pw_multi_aff(arg0)
2177        except:
2178            raise
2179        try:
2180            if not arg1.__class__ is pw_multi_aff:
2181                arg1 = pw_multi_aff(arg1)
2182        except:
2183            return union_pw_multi_aff(arg0).union_add(arg1)
2184        ctx = arg0.ctx
2185        res = isl.isl_pw_multi_aff_union_add(isl.isl_pw_multi_aff_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr))
2186        obj = pw_multi_aff(ctx=ctx, ptr=res)
2187        return obj
2188    @staticmethod
2189    def zero(arg0):
2190        try:
2191            if not arg0.__class__ is space:
2192                arg0 = space(arg0)
2193        except:
2194            raise
2195        ctx = arg0.ctx
2196        res = isl.isl_pw_multi_aff_zero(isl.isl_space_copy(arg0.ptr))
2197        obj = pw_multi_aff(ctx=ctx, ptr=res)
2198        return obj
2199
2200isl.isl_pw_multi_aff_from_multi_aff.restype = c_void_p
2201isl.isl_pw_multi_aff_from_multi_aff.argtypes = [c_void_p]
2202isl.isl_pw_multi_aff_from_pw_aff.restype = c_void_p
2203isl.isl_pw_multi_aff_from_pw_aff.argtypes = [c_void_p]
2204isl.isl_pw_multi_aff_read_from_str.restype = c_void_p
2205isl.isl_pw_multi_aff_read_from_str.argtypes = [Context, c_char_p]
2206isl.isl_pw_multi_aff_add.restype = c_void_p
2207isl.isl_pw_multi_aff_add.argtypes = [c_void_p, c_void_p]
2208isl.isl_pw_multi_aff_add_constant_multi_val.restype = c_void_p
2209isl.isl_pw_multi_aff_add_constant_multi_val.argtypes = [c_void_p, c_void_p]
2210isl.isl_pw_multi_aff_add_constant_val.restype = c_void_p
2211isl.isl_pw_multi_aff_add_constant_val.argtypes = [c_void_p, c_void_p]
2212isl.isl_pw_multi_aff_as_multi_aff.restype = c_void_p
2213isl.isl_pw_multi_aff_as_multi_aff.argtypes = [c_void_p]
2214isl.isl_pw_multi_aff_bind_domain.restype = c_void_p
2215isl.isl_pw_multi_aff_bind_domain.argtypes = [c_void_p, c_void_p]
2216isl.isl_pw_multi_aff_bind_domain_wrapped_domain.restype = c_void_p
2217isl.isl_pw_multi_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p]
2218isl.isl_pw_multi_aff_coalesce.restype = c_void_p
2219isl.isl_pw_multi_aff_coalesce.argtypes = [c_void_p]
2220isl.isl_pw_multi_aff_domain.restype = c_void_p
2221isl.isl_pw_multi_aff_domain.argtypes = [c_void_p]
2222isl.isl_pw_multi_aff_domain_map.restype = c_void_p
2223isl.isl_pw_multi_aff_domain_map.argtypes = [c_void_p]
2224isl.isl_pw_multi_aff_flat_range_product.restype = c_void_p
2225isl.isl_pw_multi_aff_flat_range_product.argtypes = [c_void_p, c_void_p]
2226isl.isl_pw_multi_aff_foreach_piece.argtypes = [c_void_p, c_void_p, c_void_p]
2227isl.isl_pw_multi_aff_get_space.restype = c_void_p
2228isl.isl_pw_multi_aff_get_space.argtypes = [c_void_p]
2229isl.isl_pw_multi_aff_gist.restype = c_void_p
2230isl.isl_pw_multi_aff_gist.argtypes = [c_void_p, c_void_p]
2231isl.isl_pw_multi_aff_insert_domain.restype = c_void_p
2232isl.isl_pw_multi_aff_insert_domain.argtypes = [c_void_p, c_void_p]
2233isl.isl_pw_multi_aff_intersect_domain.restype = c_void_p
2234isl.isl_pw_multi_aff_intersect_domain.argtypes = [c_void_p, c_void_p]
2235isl.isl_pw_multi_aff_intersect_params.restype = c_void_p
2236isl.isl_pw_multi_aff_intersect_params.argtypes = [c_void_p, c_void_p]
2237isl.isl_pw_multi_aff_involves_locals.argtypes = [c_void_p]
2238isl.isl_pw_multi_aff_isa_multi_aff.argtypes = [c_void_p]
2239isl.isl_pw_multi_aff_max_multi_val.restype = c_void_p
2240isl.isl_pw_multi_aff_max_multi_val.argtypes = [c_void_p]
2241isl.isl_pw_multi_aff_min_multi_val.restype = c_void_p
2242isl.isl_pw_multi_aff_min_multi_val.argtypes = [c_void_p]
2243isl.isl_pw_multi_aff_n_piece.argtypes = [c_void_p]
2244isl.isl_pw_multi_aff_product.restype = c_void_p
2245isl.isl_pw_multi_aff_product.argtypes = [c_void_p, c_void_p]
2246isl.isl_pw_multi_aff_pullback_multi_aff.restype = c_void_p
2247isl.isl_pw_multi_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p]
2248isl.isl_pw_multi_aff_pullback_pw_multi_aff.restype = c_void_p
2249isl.isl_pw_multi_aff_pullback_pw_multi_aff.argtypes = [c_void_p, c_void_p]
2250isl.isl_pw_multi_aff_range_factor_domain.restype = c_void_p
2251isl.isl_pw_multi_aff_range_factor_domain.argtypes = [c_void_p]
2252isl.isl_pw_multi_aff_range_factor_range.restype = c_void_p
2253isl.isl_pw_multi_aff_range_factor_range.argtypes = [c_void_p]
2254isl.isl_pw_multi_aff_range_map.restype = c_void_p
2255isl.isl_pw_multi_aff_range_map.argtypes = [c_void_p]
2256isl.isl_pw_multi_aff_range_product.restype = c_void_p
2257isl.isl_pw_multi_aff_range_product.argtypes = [c_void_p, c_void_p]
2258isl.isl_pw_multi_aff_scale_val.restype = c_void_p
2259isl.isl_pw_multi_aff_scale_val.argtypes = [c_void_p, c_void_p]
2260isl.isl_pw_multi_aff_scale_down_val.restype = c_void_p
2261isl.isl_pw_multi_aff_scale_down_val.argtypes = [c_void_p, c_void_p]
2262isl.isl_pw_multi_aff_sub.restype = c_void_p
2263isl.isl_pw_multi_aff_sub.argtypes = [c_void_p, c_void_p]
2264isl.isl_pw_multi_aff_subtract_domain.restype = c_void_p
2265isl.isl_pw_multi_aff_subtract_domain.argtypes = [c_void_p, c_void_p]
2266isl.isl_pw_multi_aff_union_add.restype = c_void_p
2267isl.isl_pw_multi_aff_union_add.argtypes = [c_void_p, c_void_p]
2268isl.isl_pw_multi_aff_zero.restype = c_void_p
2269isl.isl_pw_multi_aff_zero.argtypes = [c_void_p]
2270isl.isl_pw_multi_aff_copy.restype = c_void_p
2271isl.isl_pw_multi_aff_copy.argtypes = [c_void_p]
2272isl.isl_pw_multi_aff_free.restype = c_void_p
2273isl.isl_pw_multi_aff_free.argtypes = [c_void_p]
2274isl.isl_pw_multi_aff_to_str.restype = POINTER(c_char)
2275isl.isl_pw_multi_aff_to_str.argtypes = [c_void_p]
2276
2277class pw_aff(union_pw_aff, pw_multi_aff, multi_pw_aff):
2278    def __init__(self, *args, **keywords):
2279        if "ptr" in keywords:
2280            self.ctx = keywords["ctx"]
2281            self.ptr = keywords["ptr"]
2282            return
2283        if len(args) == 1 and args[0].__class__ is aff:
2284            self.ctx = Context.getDefaultInstance()
2285            self.ptr = isl.isl_pw_aff_from_aff(isl.isl_aff_copy(args[0].ptr))
2286            return
2287        if len(args) == 1 and type(args[0]) == str:
2288            self.ctx = Context.getDefaultInstance()
2289            self.ptr = isl.isl_pw_aff_read_from_str(self.ctx, args[0].encode('ascii'))
2290            return
2291        raise Error
2292    def __del__(self):
2293        if hasattr(self, 'ptr'):
2294            isl.isl_pw_aff_free(self.ptr)
2295    def __str__(arg0):
2296        try:
2297            if not arg0.__class__ is pw_aff:
2298                arg0 = pw_aff(arg0)
2299        except:
2300            raise
2301        ptr = isl.isl_pw_aff_to_str(arg0.ptr)
2302        res = cast(ptr, c_char_p).value.decode('ascii')
2303        libc.free(ptr)
2304        return res
2305    def __repr__(self):
2306        s = str(self)
2307        if '"' in s:
2308            return 'isl.pw_aff("""%s""")' % s
2309        else:
2310            return 'isl.pw_aff("%s")' % s
2311    def add(arg0, arg1):
2312        try:
2313            if not arg0.__class__ is pw_aff:
2314                arg0 = pw_aff(arg0)
2315        except:
2316            raise
2317        try:
2318            if not arg1.__class__ is pw_aff:
2319                arg1 = pw_aff(arg1)
2320        except:
2321            return union_pw_aff(arg0).add(arg1)
2322        ctx = arg0.ctx
2323        res = isl.isl_pw_aff_add(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2324        obj = pw_aff(ctx=ctx, ptr=res)
2325        return obj
2326    def add_constant(*args):
2327        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
2328            args = list(args)
2329            try:
2330                if not args[1].__class__ is val:
2331                    args[1] = val(args[1])
2332            except:
2333                raise
2334            ctx = args[0].ctx
2335            res = isl.isl_pw_aff_add_constant_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
2336            obj = pw_aff(ctx=ctx, ptr=res)
2337            return obj
2338        raise Error
2339    def as_aff(arg0):
2340        try:
2341            if not arg0.__class__ is pw_aff:
2342                arg0 = pw_aff(arg0)
2343        except:
2344            raise
2345        ctx = arg0.ctx
2346        res = isl.isl_pw_aff_as_aff(isl.isl_pw_aff_copy(arg0.ptr))
2347        obj = aff(ctx=ctx, ptr=res)
2348        return obj
2349    def bind(*args):
2350        if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str):
2351            args = list(args)
2352            try:
2353                if not args[1].__class__ is id:
2354                    args[1] = id(args[1])
2355            except:
2356                raise
2357            ctx = args[0].ctx
2358            res = isl.isl_pw_aff_bind_id(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr))
2359            obj = set(ctx=ctx, ptr=res)
2360            return obj
2361        raise Error
2362    def bind_domain(arg0, arg1):
2363        try:
2364            if not arg0.__class__ is pw_aff:
2365                arg0 = pw_aff(arg0)
2366        except:
2367            raise
2368        try:
2369            if not arg1.__class__ is multi_id:
2370                arg1 = multi_id(arg1)
2371        except:
2372            return union_pw_aff(arg0).bind_domain(arg1)
2373        ctx = arg0.ctx
2374        res = isl.isl_pw_aff_bind_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
2375        obj = pw_aff(ctx=ctx, ptr=res)
2376        return obj
2377    def bind_domain_wrapped_domain(arg0, arg1):
2378        try:
2379            if not arg0.__class__ is pw_aff:
2380                arg0 = pw_aff(arg0)
2381        except:
2382            raise
2383        try:
2384            if not arg1.__class__ is multi_id:
2385                arg1 = multi_id(arg1)
2386        except:
2387            return union_pw_aff(arg0).bind_domain_wrapped_domain(arg1)
2388        ctx = arg0.ctx
2389        res = isl.isl_pw_aff_bind_domain_wrapped_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
2390        obj = pw_aff(ctx=ctx, ptr=res)
2391        return obj
2392    def ceil(arg0):
2393        try:
2394            if not arg0.__class__ is pw_aff:
2395                arg0 = pw_aff(arg0)
2396        except:
2397            raise
2398        ctx = arg0.ctx
2399        res = isl.isl_pw_aff_ceil(isl.isl_pw_aff_copy(arg0.ptr))
2400        obj = pw_aff(ctx=ctx, ptr=res)
2401        return obj
2402    def coalesce(arg0):
2403        try:
2404            if not arg0.__class__ is pw_aff:
2405                arg0 = pw_aff(arg0)
2406        except:
2407            raise
2408        ctx = arg0.ctx
2409        res = isl.isl_pw_aff_coalesce(isl.isl_pw_aff_copy(arg0.ptr))
2410        obj = pw_aff(ctx=ctx, ptr=res)
2411        return obj
2412    def cond(arg0, arg1, arg2):
2413        try:
2414            if not arg0.__class__ is pw_aff:
2415                arg0 = pw_aff(arg0)
2416        except:
2417            raise
2418        try:
2419            if not arg1.__class__ is pw_aff:
2420                arg1 = pw_aff(arg1)
2421        except:
2422            return union_pw_aff(arg0).cond(arg1, arg2)
2423        try:
2424            if not arg2.__class__ is pw_aff:
2425                arg2 = pw_aff(arg2)
2426        except:
2427            return union_pw_aff(arg0).cond(arg1, arg2)
2428        ctx = arg0.ctx
2429        res = isl.isl_pw_aff_cond(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr), isl.isl_pw_aff_copy(arg2.ptr))
2430        obj = pw_aff(ctx=ctx, ptr=res)
2431        return obj
2432    def div(arg0, arg1):
2433        try:
2434            if not arg0.__class__ is pw_aff:
2435                arg0 = pw_aff(arg0)
2436        except:
2437            raise
2438        try:
2439            if not arg1.__class__ is pw_aff:
2440                arg1 = pw_aff(arg1)
2441        except:
2442            return union_pw_aff(arg0).div(arg1)
2443        ctx = arg0.ctx
2444        res = isl.isl_pw_aff_div(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2445        obj = pw_aff(ctx=ctx, ptr=res)
2446        return obj
2447    def domain(arg0):
2448        try:
2449            if not arg0.__class__ is pw_aff:
2450                arg0 = pw_aff(arg0)
2451        except:
2452            raise
2453        ctx = arg0.ctx
2454        res = isl.isl_pw_aff_domain(isl.isl_pw_aff_copy(arg0.ptr))
2455        obj = set(ctx=ctx, ptr=res)
2456        return obj
2457    def eq_set(arg0, arg1):
2458        try:
2459            if not arg0.__class__ is pw_aff:
2460                arg0 = pw_aff(arg0)
2461        except:
2462            raise
2463        try:
2464            if not arg1.__class__ is pw_aff:
2465                arg1 = pw_aff(arg1)
2466        except:
2467            return union_pw_aff(arg0).eq_set(arg1)
2468        ctx = arg0.ctx
2469        res = isl.isl_pw_aff_eq_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2470        obj = set(ctx=ctx, ptr=res)
2471        return obj
2472    def eval(arg0, arg1):
2473        try:
2474            if not arg0.__class__ is pw_aff:
2475                arg0 = pw_aff(arg0)
2476        except:
2477            raise
2478        try:
2479            if not arg1.__class__ is point:
2480                arg1 = point(arg1)
2481        except:
2482            return union_pw_aff(arg0).eval(arg1)
2483        ctx = arg0.ctx
2484        res = isl.isl_pw_aff_eval(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_point_copy(arg1.ptr))
2485        obj = val(ctx=ctx, ptr=res)
2486        return obj
2487    def floor(arg0):
2488        try:
2489            if not arg0.__class__ is pw_aff:
2490                arg0 = pw_aff(arg0)
2491        except:
2492            raise
2493        ctx = arg0.ctx
2494        res = isl.isl_pw_aff_floor(isl.isl_pw_aff_copy(arg0.ptr))
2495        obj = pw_aff(ctx=ctx, ptr=res)
2496        return obj
2497    def ge_set(arg0, arg1):
2498        try:
2499            if not arg0.__class__ is pw_aff:
2500                arg0 = pw_aff(arg0)
2501        except:
2502            raise
2503        try:
2504            if not arg1.__class__ is pw_aff:
2505                arg1 = pw_aff(arg1)
2506        except:
2507            return union_pw_aff(arg0).ge_set(arg1)
2508        ctx = arg0.ctx
2509        res = isl.isl_pw_aff_ge_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2510        obj = set(ctx=ctx, ptr=res)
2511        return obj
2512    def gist(arg0, arg1):
2513        try:
2514            if not arg0.__class__ is pw_aff:
2515                arg0 = pw_aff(arg0)
2516        except:
2517            raise
2518        try:
2519            if not arg1.__class__ is set:
2520                arg1 = set(arg1)
2521        except:
2522            return union_pw_aff(arg0).gist(arg1)
2523        ctx = arg0.ctx
2524        res = isl.isl_pw_aff_gist(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
2525        obj = pw_aff(ctx=ctx, ptr=res)
2526        return obj
2527    def gt_set(arg0, arg1):
2528        try:
2529            if not arg0.__class__ is pw_aff:
2530                arg0 = pw_aff(arg0)
2531        except:
2532            raise
2533        try:
2534            if not arg1.__class__ is pw_aff:
2535                arg1 = pw_aff(arg1)
2536        except:
2537            return union_pw_aff(arg0).gt_set(arg1)
2538        ctx = arg0.ctx
2539        res = isl.isl_pw_aff_gt_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2540        obj = set(ctx=ctx, ptr=res)
2541        return obj
2542    def insert_domain(arg0, arg1):
2543        try:
2544            if not arg0.__class__ is pw_aff:
2545                arg0 = pw_aff(arg0)
2546        except:
2547            raise
2548        try:
2549            if not arg1.__class__ is space:
2550                arg1 = space(arg1)
2551        except:
2552            return union_pw_aff(arg0).insert_domain(arg1)
2553        ctx = arg0.ctx
2554        res = isl.isl_pw_aff_insert_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr))
2555        obj = pw_aff(ctx=ctx, ptr=res)
2556        return obj
2557    def intersect_domain(arg0, arg1):
2558        try:
2559            if not arg0.__class__ is pw_aff:
2560                arg0 = pw_aff(arg0)
2561        except:
2562            raise
2563        try:
2564            if not arg1.__class__ is set:
2565                arg1 = set(arg1)
2566        except:
2567            return union_pw_aff(arg0).intersect_domain(arg1)
2568        ctx = arg0.ctx
2569        res = isl.isl_pw_aff_intersect_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
2570        obj = pw_aff(ctx=ctx, ptr=res)
2571        return obj
2572    def intersect_params(arg0, arg1):
2573        try:
2574            if not arg0.__class__ is pw_aff:
2575                arg0 = pw_aff(arg0)
2576        except:
2577            raise
2578        try:
2579            if not arg1.__class__ is set:
2580                arg1 = set(arg1)
2581        except:
2582            return union_pw_aff(arg0).intersect_params(arg1)
2583        ctx = arg0.ctx
2584        res = isl.isl_pw_aff_intersect_params(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
2585        obj = pw_aff(ctx=ctx, ptr=res)
2586        return obj
2587    def isa_aff(arg0):
2588        try:
2589            if not arg0.__class__ is pw_aff:
2590                arg0 = pw_aff(arg0)
2591        except:
2592            raise
2593        ctx = arg0.ctx
2594        res = isl.isl_pw_aff_isa_aff(arg0.ptr)
2595        if res < 0:
2596            raise
2597        return bool(res)
2598    def le_set(arg0, arg1):
2599        try:
2600            if not arg0.__class__ is pw_aff:
2601                arg0 = pw_aff(arg0)
2602        except:
2603            raise
2604        try:
2605            if not arg1.__class__ is pw_aff:
2606                arg1 = pw_aff(arg1)
2607        except:
2608            return union_pw_aff(arg0).le_set(arg1)
2609        ctx = arg0.ctx
2610        res = isl.isl_pw_aff_le_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2611        obj = set(ctx=ctx, ptr=res)
2612        return obj
2613    def lt_set(arg0, arg1):
2614        try:
2615            if not arg0.__class__ is pw_aff:
2616                arg0 = pw_aff(arg0)
2617        except:
2618            raise
2619        try:
2620            if not arg1.__class__ is pw_aff:
2621                arg1 = pw_aff(arg1)
2622        except:
2623            return union_pw_aff(arg0).lt_set(arg1)
2624        ctx = arg0.ctx
2625        res = isl.isl_pw_aff_lt_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2626        obj = set(ctx=ctx, ptr=res)
2627        return obj
2628    def max(arg0, arg1):
2629        try:
2630            if not arg0.__class__ is pw_aff:
2631                arg0 = pw_aff(arg0)
2632        except:
2633            raise
2634        try:
2635            if not arg1.__class__ is pw_aff:
2636                arg1 = pw_aff(arg1)
2637        except:
2638            return union_pw_aff(arg0).max(arg1)
2639        ctx = arg0.ctx
2640        res = isl.isl_pw_aff_max(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2641        obj = pw_aff(ctx=ctx, ptr=res)
2642        return obj
2643    def min(arg0, arg1):
2644        try:
2645            if not arg0.__class__ is pw_aff:
2646                arg0 = pw_aff(arg0)
2647        except:
2648            raise
2649        try:
2650            if not arg1.__class__ is pw_aff:
2651                arg1 = pw_aff(arg1)
2652        except:
2653            return union_pw_aff(arg0).min(arg1)
2654        ctx = arg0.ctx
2655        res = isl.isl_pw_aff_min(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2656        obj = pw_aff(ctx=ctx, ptr=res)
2657        return obj
2658    def mod(*args):
2659        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
2660            args = list(args)
2661            try:
2662                if not args[1].__class__ is val:
2663                    args[1] = val(args[1])
2664            except:
2665                raise
2666            ctx = args[0].ctx
2667            res = isl.isl_pw_aff_mod_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
2668            obj = pw_aff(ctx=ctx, ptr=res)
2669            return obj
2670        raise Error
2671    def mul(arg0, arg1):
2672        try:
2673            if not arg0.__class__ is pw_aff:
2674                arg0 = pw_aff(arg0)
2675        except:
2676            raise
2677        try:
2678            if not arg1.__class__ is pw_aff:
2679                arg1 = pw_aff(arg1)
2680        except:
2681            return union_pw_aff(arg0).mul(arg1)
2682        ctx = arg0.ctx
2683        res = isl.isl_pw_aff_mul(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2684        obj = pw_aff(ctx=ctx, ptr=res)
2685        return obj
2686    def ne_set(arg0, arg1):
2687        try:
2688            if not arg0.__class__ is pw_aff:
2689                arg0 = pw_aff(arg0)
2690        except:
2691            raise
2692        try:
2693            if not arg1.__class__ is pw_aff:
2694                arg1 = pw_aff(arg1)
2695        except:
2696            return union_pw_aff(arg0).ne_set(arg1)
2697        ctx = arg0.ctx
2698        res = isl.isl_pw_aff_ne_set(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2699        obj = set(ctx=ctx, ptr=res)
2700        return obj
2701    def neg(arg0):
2702        try:
2703            if not arg0.__class__ is pw_aff:
2704                arg0 = pw_aff(arg0)
2705        except:
2706            raise
2707        ctx = arg0.ctx
2708        res = isl.isl_pw_aff_neg(isl.isl_pw_aff_copy(arg0.ptr))
2709        obj = pw_aff(ctx=ctx, ptr=res)
2710        return obj
2711    @staticmethod
2712    def param_on_domain(*args):
2713        if len(args) == 2 and args[0].__class__ is set and (args[1].__class__ is id or type(args[1]) == str):
2714            args = list(args)
2715            try:
2716                if not args[1].__class__ is id:
2717                    args[1] = id(args[1])
2718            except:
2719                raise
2720            ctx = args[0].ctx
2721            res = isl.isl_pw_aff_param_on_domain_id(isl.isl_set_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr))
2722            obj = pw_aff(ctx=ctx, ptr=res)
2723            return obj
2724        raise Error
2725    def pullback(*args):
2726        if len(args) == 2 and args[1].__class__ is multi_aff:
2727            ctx = args[0].ctx
2728            res = isl.isl_pw_aff_pullback_multi_aff(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
2729            obj = pw_aff(ctx=ctx, ptr=res)
2730            return obj
2731        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
2732            ctx = args[0].ctx
2733            res = isl.isl_pw_aff_pullback_multi_pw_aff(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
2734            obj = pw_aff(ctx=ctx, ptr=res)
2735            return obj
2736        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
2737            ctx = args[0].ctx
2738            res = isl.isl_pw_aff_pullback_pw_multi_aff(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
2739            obj = pw_aff(ctx=ctx, ptr=res)
2740            return obj
2741        raise Error
2742    def scale(*args):
2743        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
2744            args = list(args)
2745            try:
2746                if not args[1].__class__ is val:
2747                    args[1] = val(args[1])
2748            except:
2749                raise
2750            ctx = args[0].ctx
2751            res = isl.isl_pw_aff_scale_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
2752            obj = pw_aff(ctx=ctx, ptr=res)
2753            return obj
2754        raise Error
2755    def scale_down(*args):
2756        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
2757            args = list(args)
2758            try:
2759                if not args[1].__class__ is val:
2760                    args[1] = val(args[1])
2761            except:
2762                raise
2763            ctx = args[0].ctx
2764            res = isl.isl_pw_aff_scale_down_val(isl.isl_pw_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
2765            obj = pw_aff(ctx=ctx, ptr=res)
2766            return obj
2767        raise Error
2768    def sub(arg0, arg1):
2769        try:
2770            if not arg0.__class__ is pw_aff:
2771                arg0 = pw_aff(arg0)
2772        except:
2773            raise
2774        try:
2775            if not arg1.__class__ is pw_aff:
2776                arg1 = pw_aff(arg1)
2777        except:
2778            return union_pw_aff(arg0).sub(arg1)
2779        ctx = arg0.ctx
2780        res = isl.isl_pw_aff_sub(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2781        obj = pw_aff(ctx=ctx, ptr=res)
2782        return obj
2783    def subtract_domain(arg0, arg1):
2784        try:
2785            if not arg0.__class__ is pw_aff:
2786                arg0 = pw_aff(arg0)
2787        except:
2788            raise
2789        try:
2790            if not arg1.__class__ is set:
2791                arg1 = set(arg1)
2792        except:
2793            return union_pw_aff(arg0).subtract_domain(arg1)
2794        ctx = arg0.ctx
2795        res = isl.isl_pw_aff_subtract_domain(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
2796        obj = pw_aff(ctx=ctx, ptr=res)
2797        return obj
2798    def tdiv_q(arg0, arg1):
2799        try:
2800            if not arg0.__class__ is pw_aff:
2801                arg0 = pw_aff(arg0)
2802        except:
2803            raise
2804        try:
2805            if not arg1.__class__ is pw_aff:
2806                arg1 = pw_aff(arg1)
2807        except:
2808            return union_pw_aff(arg0).tdiv_q(arg1)
2809        ctx = arg0.ctx
2810        res = isl.isl_pw_aff_tdiv_q(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2811        obj = pw_aff(ctx=ctx, ptr=res)
2812        return obj
2813    def tdiv_r(arg0, arg1):
2814        try:
2815            if not arg0.__class__ is pw_aff:
2816                arg0 = pw_aff(arg0)
2817        except:
2818            raise
2819        try:
2820            if not arg1.__class__ is pw_aff:
2821                arg1 = pw_aff(arg1)
2822        except:
2823            return union_pw_aff(arg0).tdiv_r(arg1)
2824        ctx = arg0.ctx
2825        res = isl.isl_pw_aff_tdiv_r(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2826        obj = pw_aff(ctx=ctx, ptr=res)
2827        return obj
2828    def union_add(arg0, arg1):
2829        try:
2830            if not arg0.__class__ is pw_aff:
2831                arg0 = pw_aff(arg0)
2832        except:
2833            raise
2834        try:
2835            if not arg1.__class__ is pw_aff:
2836                arg1 = pw_aff(arg1)
2837        except:
2838            return union_pw_aff(arg0).union_add(arg1)
2839        ctx = arg0.ctx
2840        res = isl.isl_pw_aff_union_add(isl.isl_pw_aff_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
2841        obj = pw_aff(ctx=ctx, ptr=res)
2842        return obj
2843
2844isl.isl_pw_aff_from_aff.restype = c_void_p
2845isl.isl_pw_aff_from_aff.argtypes = [c_void_p]
2846isl.isl_pw_aff_read_from_str.restype = c_void_p
2847isl.isl_pw_aff_read_from_str.argtypes = [Context, c_char_p]
2848isl.isl_pw_aff_add.restype = c_void_p
2849isl.isl_pw_aff_add.argtypes = [c_void_p, c_void_p]
2850isl.isl_pw_aff_add_constant_val.restype = c_void_p
2851isl.isl_pw_aff_add_constant_val.argtypes = [c_void_p, c_void_p]
2852isl.isl_pw_aff_as_aff.restype = c_void_p
2853isl.isl_pw_aff_as_aff.argtypes = [c_void_p]
2854isl.isl_pw_aff_bind_id.restype = c_void_p
2855isl.isl_pw_aff_bind_id.argtypes = [c_void_p, c_void_p]
2856isl.isl_pw_aff_bind_domain.restype = c_void_p
2857isl.isl_pw_aff_bind_domain.argtypes = [c_void_p, c_void_p]
2858isl.isl_pw_aff_bind_domain_wrapped_domain.restype = c_void_p
2859isl.isl_pw_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p]
2860isl.isl_pw_aff_ceil.restype = c_void_p
2861isl.isl_pw_aff_ceil.argtypes = [c_void_p]
2862isl.isl_pw_aff_coalesce.restype = c_void_p
2863isl.isl_pw_aff_coalesce.argtypes = [c_void_p]
2864isl.isl_pw_aff_cond.restype = c_void_p
2865isl.isl_pw_aff_cond.argtypes = [c_void_p, c_void_p, c_void_p]
2866isl.isl_pw_aff_div.restype = c_void_p
2867isl.isl_pw_aff_div.argtypes = [c_void_p, c_void_p]
2868isl.isl_pw_aff_domain.restype = c_void_p
2869isl.isl_pw_aff_domain.argtypes = [c_void_p]
2870isl.isl_pw_aff_eq_set.restype = c_void_p
2871isl.isl_pw_aff_eq_set.argtypes = [c_void_p, c_void_p]
2872isl.isl_pw_aff_eval.restype = c_void_p
2873isl.isl_pw_aff_eval.argtypes = [c_void_p, c_void_p]
2874isl.isl_pw_aff_floor.restype = c_void_p
2875isl.isl_pw_aff_floor.argtypes = [c_void_p]
2876isl.isl_pw_aff_ge_set.restype = c_void_p
2877isl.isl_pw_aff_ge_set.argtypes = [c_void_p, c_void_p]
2878isl.isl_pw_aff_gist.restype = c_void_p
2879isl.isl_pw_aff_gist.argtypes = [c_void_p, c_void_p]
2880isl.isl_pw_aff_gt_set.restype = c_void_p
2881isl.isl_pw_aff_gt_set.argtypes = [c_void_p, c_void_p]
2882isl.isl_pw_aff_insert_domain.restype = c_void_p
2883isl.isl_pw_aff_insert_domain.argtypes = [c_void_p, c_void_p]
2884isl.isl_pw_aff_intersect_domain.restype = c_void_p
2885isl.isl_pw_aff_intersect_domain.argtypes = [c_void_p, c_void_p]
2886isl.isl_pw_aff_intersect_params.restype = c_void_p
2887isl.isl_pw_aff_intersect_params.argtypes = [c_void_p, c_void_p]
2888isl.isl_pw_aff_isa_aff.argtypes = [c_void_p]
2889isl.isl_pw_aff_le_set.restype = c_void_p
2890isl.isl_pw_aff_le_set.argtypes = [c_void_p, c_void_p]
2891isl.isl_pw_aff_lt_set.restype = c_void_p
2892isl.isl_pw_aff_lt_set.argtypes = [c_void_p, c_void_p]
2893isl.isl_pw_aff_max.restype = c_void_p
2894isl.isl_pw_aff_max.argtypes = [c_void_p, c_void_p]
2895isl.isl_pw_aff_min.restype = c_void_p
2896isl.isl_pw_aff_min.argtypes = [c_void_p, c_void_p]
2897isl.isl_pw_aff_mod_val.restype = c_void_p
2898isl.isl_pw_aff_mod_val.argtypes = [c_void_p, c_void_p]
2899isl.isl_pw_aff_mul.restype = c_void_p
2900isl.isl_pw_aff_mul.argtypes = [c_void_p, c_void_p]
2901isl.isl_pw_aff_ne_set.restype = c_void_p
2902isl.isl_pw_aff_ne_set.argtypes = [c_void_p, c_void_p]
2903isl.isl_pw_aff_neg.restype = c_void_p
2904isl.isl_pw_aff_neg.argtypes = [c_void_p]
2905isl.isl_pw_aff_param_on_domain_id.restype = c_void_p
2906isl.isl_pw_aff_param_on_domain_id.argtypes = [c_void_p, c_void_p]
2907isl.isl_pw_aff_pullback_multi_aff.restype = c_void_p
2908isl.isl_pw_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p]
2909isl.isl_pw_aff_pullback_multi_pw_aff.restype = c_void_p
2910isl.isl_pw_aff_pullback_multi_pw_aff.argtypes = [c_void_p, c_void_p]
2911isl.isl_pw_aff_pullback_pw_multi_aff.restype = c_void_p
2912isl.isl_pw_aff_pullback_pw_multi_aff.argtypes = [c_void_p, c_void_p]
2913isl.isl_pw_aff_scale_val.restype = c_void_p
2914isl.isl_pw_aff_scale_val.argtypes = [c_void_p, c_void_p]
2915isl.isl_pw_aff_scale_down_val.restype = c_void_p
2916isl.isl_pw_aff_scale_down_val.argtypes = [c_void_p, c_void_p]
2917isl.isl_pw_aff_sub.restype = c_void_p
2918isl.isl_pw_aff_sub.argtypes = [c_void_p, c_void_p]
2919isl.isl_pw_aff_subtract_domain.restype = c_void_p
2920isl.isl_pw_aff_subtract_domain.argtypes = [c_void_p, c_void_p]
2921isl.isl_pw_aff_tdiv_q.restype = c_void_p
2922isl.isl_pw_aff_tdiv_q.argtypes = [c_void_p, c_void_p]
2923isl.isl_pw_aff_tdiv_r.restype = c_void_p
2924isl.isl_pw_aff_tdiv_r.argtypes = [c_void_p, c_void_p]
2925isl.isl_pw_aff_union_add.restype = c_void_p
2926isl.isl_pw_aff_union_add.argtypes = [c_void_p, c_void_p]
2927isl.isl_pw_aff_copy.restype = c_void_p
2928isl.isl_pw_aff_copy.argtypes = [c_void_p]
2929isl.isl_pw_aff_free.restype = c_void_p
2930isl.isl_pw_aff_free.argtypes = [c_void_p]
2931isl.isl_pw_aff_to_str.restype = POINTER(c_char)
2932isl.isl_pw_aff_to_str.argtypes = [c_void_p]
2933
2934class multi_aff(pw_multi_aff, multi_pw_aff):
2935    def __init__(self, *args, **keywords):
2936        if "ptr" in keywords:
2937            self.ctx = keywords["ctx"]
2938            self.ptr = keywords["ptr"]
2939            return
2940        if len(args) == 1 and args[0].__class__ is aff:
2941            self.ctx = Context.getDefaultInstance()
2942            self.ptr = isl.isl_multi_aff_from_aff(isl.isl_aff_copy(args[0].ptr))
2943            return
2944        if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is aff_list:
2945            self.ctx = Context.getDefaultInstance()
2946            self.ptr = isl.isl_multi_aff_from_aff_list(isl.isl_space_copy(args[0].ptr), isl.isl_aff_list_copy(args[1].ptr))
2947            return
2948        if len(args) == 1 and type(args[0]) == str:
2949            self.ctx = Context.getDefaultInstance()
2950            self.ptr = isl.isl_multi_aff_read_from_str(self.ctx, args[0].encode('ascii'))
2951            return
2952        raise Error
2953    def __del__(self):
2954        if hasattr(self, 'ptr'):
2955            isl.isl_multi_aff_free(self.ptr)
2956    def __str__(arg0):
2957        try:
2958            if not arg0.__class__ is multi_aff:
2959                arg0 = multi_aff(arg0)
2960        except:
2961            raise
2962        ptr = isl.isl_multi_aff_to_str(arg0.ptr)
2963        res = cast(ptr, c_char_p).value.decode('ascii')
2964        libc.free(ptr)
2965        return res
2966    def __repr__(self):
2967        s = str(self)
2968        if '"' in s:
2969            return 'isl.multi_aff("""%s""")' % s
2970        else:
2971            return 'isl.multi_aff("%s")' % s
2972    def add(arg0, arg1):
2973        try:
2974            if not arg0.__class__ is multi_aff:
2975                arg0 = multi_aff(arg0)
2976        except:
2977            raise
2978        try:
2979            if not arg1.__class__ is multi_aff:
2980                arg1 = multi_aff(arg1)
2981        except:
2982            return pw_multi_aff(arg0).add(arg1)
2983        ctx = arg0.ctx
2984        res = isl.isl_multi_aff_add(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr))
2985        obj = multi_aff(ctx=ctx, ptr=res)
2986        return obj
2987    def add_constant(*args):
2988        if len(args) == 2 and args[1].__class__ is multi_val:
2989            ctx = args[0].ctx
2990            res = isl.isl_multi_aff_add_constant_multi_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
2991            obj = multi_aff(ctx=ctx, ptr=res)
2992            return obj
2993        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
2994            args = list(args)
2995            try:
2996                if not args[1].__class__ is val:
2997                    args[1] = val(args[1])
2998            except:
2999                raise
3000            ctx = args[0].ctx
3001            res = isl.isl_multi_aff_add_constant_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
3002            obj = multi_aff(ctx=ctx, ptr=res)
3003            return obj
3004        raise Error
3005    def bind(arg0, arg1):
3006        try:
3007            if not arg0.__class__ is multi_aff:
3008                arg0 = multi_aff(arg0)
3009        except:
3010            raise
3011        try:
3012            if not arg1.__class__ is multi_id:
3013                arg1 = multi_id(arg1)
3014        except:
3015            return pw_multi_aff(arg0).bind(arg1)
3016        ctx = arg0.ctx
3017        res = isl.isl_multi_aff_bind(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
3018        obj = basic_set(ctx=ctx, ptr=res)
3019        return obj
3020    def bind_domain(arg0, arg1):
3021        try:
3022            if not arg0.__class__ is multi_aff:
3023                arg0 = multi_aff(arg0)
3024        except:
3025            raise
3026        try:
3027            if not arg1.__class__ is multi_id:
3028                arg1 = multi_id(arg1)
3029        except:
3030            return pw_multi_aff(arg0).bind_domain(arg1)
3031        ctx = arg0.ctx
3032        res = isl.isl_multi_aff_bind_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
3033        obj = multi_aff(ctx=ctx, ptr=res)
3034        return obj
3035    def bind_domain_wrapped_domain(arg0, arg1):
3036        try:
3037            if not arg0.__class__ is multi_aff:
3038                arg0 = multi_aff(arg0)
3039        except:
3040            raise
3041        try:
3042            if not arg1.__class__ is multi_id:
3043                arg1 = multi_id(arg1)
3044        except:
3045            return pw_multi_aff(arg0).bind_domain_wrapped_domain(arg1)
3046        ctx = arg0.ctx
3047        res = isl.isl_multi_aff_bind_domain_wrapped_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
3048        obj = multi_aff(ctx=ctx, ptr=res)
3049        return obj
3050    @staticmethod
3051    def domain_map(arg0):
3052        try:
3053            if not arg0.__class__ is space:
3054                arg0 = space(arg0)
3055        except:
3056            raise
3057        ctx = arg0.ctx
3058        res = isl.isl_multi_aff_domain_map(isl.isl_space_copy(arg0.ptr))
3059        obj = multi_aff(ctx=ctx, ptr=res)
3060        return obj
3061    def flat_range_product(arg0, arg1):
3062        try:
3063            if not arg0.__class__ is multi_aff:
3064                arg0 = multi_aff(arg0)
3065        except:
3066            raise
3067        try:
3068            if not arg1.__class__ is multi_aff:
3069                arg1 = multi_aff(arg1)
3070        except:
3071            return pw_multi_aff(arg0).flat_range_product(arg1)
3072        ctx = arg0.ctx
3073        res = isl.isl_multi_aff_flat_range_product(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr))
3074        obj = multi_aff(ctx=ctx, ptr=res)
3075        return obj
3076    def floor(arg0):
3077        try:
3078            if not arg0.__class__ is multi_aff:
3079                arg0 = multi_aff(arg0)
3080        except:
3081            raise
3082        ctx = arg0.ctx
3083        res = isl.isl_multi_aff_floor(isl.isl_multi_aff_copy(arg0.ptr))
3084        obj = multi_aff(ctx=ctx, ptr=res)
3085        return obj
3086    def at(arg0, arg1):
3087        try:
3088            if not arg0.__class__ is multi_aff:
3089                arg0 = multi_aff(arg0)
3090        except:
3091            raise
3092        ctx = arg0.ctx
3093        res = isl.isl_multi_aff_get_at(arg0.ptr, arg1)
3094        obj = aff(ctx=ctx, ptr=res)
3095        return obj
3096    def get_at(arg0, arg1):
3097        return arg0.at(arg1)
3098    def constant_multi_val(arg0):
3099        try:
3100            if not arg0.__class__ is multi_aff:
3101                arg0 = multi_aff(arg0)
3102        except:
3103            raise
3104        ctx = arg0.ctx
3105        res = isl.isl_multi_aff_get_constant_multi_val(arg0.ptr)
3106        obj = multi_val(ctx=ctx, ptr=res)
3107        return obj
3108    def get_constant_multi_val(arg0):
3109        return arg0.constant_multi_val()
3110    def list(arg0):
3111        try:
3112            if not arg0.__class__ is multi_aff:
3113                arg0 = multi_aff(arg0)
3114        except:
3115            raise
3116        ctx = arg0.ctx
3117        res = isl.isl_multi_aff_get_list(arg0.ptr)
3118        obj = aff_list(ctx=ctx, ptr=res)
3119        return obj
3120    def get_list(arg0):
3121        return arg0.list()
3122    def space(arg0):
3123        try:
3124            if not arg0.__class__ is multi_aff:
3125                arg0 = multi_aff(arg0)
3126        except:
3127            raise
3128        ctx = arg0.ctx
3129        res = isl.isl_multi_aff_get_space(arg0.ptr)
3130        obj = space(ctx=ctx, ptr=res)
3131        return obj
3132    def get_space(arg0):
3133        return arg0.space()
3134    def gist(arg0, arg1):
3135        try:
3136            if not arg0.__class__ is multi_aff:
3137                arg0 = multi_aff(arg0)
3138        except:
3139            raise
3140        try:
3141            if not arg1.__class__ is set:
3142                arg1 = set(arg1)
3143        except:
3144            return pw_multi_aff(arg0).gist(arg1)
3145        ctx = arg0.ctx
3146        res = isl.isl_multi_aff_gist(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
3147        obj = multi_aff(ctx=ctx, ptr=res)
3148        return obj
3149    def identity(*args):
3150        if len(args) == 1:
3151            ctx = args[0].ctx
3152            res = isl.isl_multi_aff_identity_multi_aff(isl.isl_multi_aff_copy(args[0].ptr))
3153            obj = multi_aff(ctx=ctx, ptr=res)
3154            return obj
3155        raise Error
3156    @staticmethod
3157    def identity_on_domain(*args):
3158        if len(args) == 1 and args[0].__class__ is space:
3159            ctx = args[0].ctx
3160            res = isl.isl_multi_aff_identity_on_domain_space(isl.isl_space_copy(args[0].ptr))
3161            obj = multi_aff(ctx=ctx, ptr=res)
3162            return obj
3163        raise Error
3164    def insert_domain(arg0, arg1):
3165        try:
3166            if not arg0.__class__ is multi_aff:
3167                arg0 = multi_aff(arg0)
3168        except:
3169            raise
3170        try:
3171            if not arg1.__class__ is space:
3172                arg1 = space(arg1)
3173        except:
3174            return pw_multi_aff(arg0).insert_domain(arg1)
3175        ctx = arg0.ctx
3176        res = isl.isl_multi_aff_insert_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr))
3177        obj = multi_aff(ctx=ctx, ptr=res)
3178        return obj
3179    def involves_locals(arg0):
3180        try:
3181            if not arg0.__class__ is multi_aff:
3182                arg0 = multi_aff(arg0)
3183        except:
3184            raise
3185        ctx = arg0.ctx
3186        res = isl.isl_multi_aff_involves_locals(arg0.ptr)
3187        if res < 0:
3188            raise
3189        return bool(res)
3190    def neg(arg0):
3191        try:
3192            if not arg0.__class__ is multi_aff:
3193                arg0 = multi_aff(arg0)
3194        except:
3195            raise
3196        ctx = arg0.ctx
3197        res = isl.isl_multi_aff_neg(isl.isl_multi_aff_copy(arg0.ptr))
3198        obj = multi_aff(ctx=ctx, ptr=res)
3199        return obj
3200    def plain_is_equal(arg0, arg1):
3201        try:
3202            if not arg0.__class__ is multi_aff:
3203                arg0 = multi_aff(arg0)
3204        except:
3205            raise
3206        try:
3207            if not arg1.__class__ is multi_aff:
3208                arg1 = multi_aff(arg1)
3209        except:
3210            return pw_multi_aff(arg0).plain_is_equal(arg1)
3211        ctx = arg0.ctx
3212        res = isl.isl_multi_aff_plain_is_equal(arg0.ptr, arg1.ptr)
3213        if res < 0:
3214            raise
3215        return bool(res)
3216    def product(arg0, arg1):
3217        try:
3218            if not arg0.__class__ is multi_aff:
3219                arg0 = multi_aff(arg0)
3220        except:
3221            raise
3222        try:
3223            if not arg1.__class__ is multi_aff:
3224                arg1 = multi_aff(arg1)
3225        except:
3226            return pw_multi_aff(arg0).product(arg1)
3227        ctx = arg0.ctx
3228        res = isl.isl_multi_aff_product(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr))
3229        obj = multi_aff(ctx=ctx, ptr=res)
3230        return obj
3231    def pullback(*args):
3232        if len(args) == 2 and args[1].__class__ is multi_aff:
3233            ctx = args[0].ctx
3234            res = isl.isl_multi_aff_pullback_multi_aff(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
3235            obj = multi_aff(ctx=ctx, ptr=res)
3236            return obj
3237        raise Error
3238    @staticmethod
3239    def range_map(arg0):
3240        try:
3241            if not arg0.__class__ is space:
3242                arg0 = space(arg0)
3243        except:
3244            raise
3245        ctx = arg0.ctx
3246        res = isl.isl_multi_aff_range_map(isl.isl_space_copy(arg0.ptr))
3247        obj = multi_aff(ctx=ctx, ptr=res)
3248        return obj
3249    def range_product(arg0, arg1):
3250        try:
3251            if not arg0.__class__ is multi_aff:
3252                arg0 = multi_aff(arg0)
3253        except:
3254            raise
3255        try:
3256            if not arg1.__class__ is multi_aff:
3257                arg1 = multi_aff(arg1)
3258        except:
3259            return pw_multi_aff(arg0).range_product(arg1)
3260        ctx = arg0.ctx
3261        res = isl.isl_multi_aff_range_product(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr))
3262        obj = multi_aff(ctx=ctx, ptr=res)
3263        return obj
3264    def scale(*args):
3265        if len(args) == 2 and args[1].__class__ is multi_val:
3266            ctx = args[0].ctx
3267            res = isl.isl_multi_aff_scale_multi_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
3268            obj = multi_aff(ctx=ctx, ptr=res)
3269            return obj
3270        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
3271            args = list(args)
3272            try:
3273                if not args[1].__class__ is val:
3274                    args[1] = val(args[1])
3275            except:
3276                raise
3277            ctx = args[0].ctx
3278            res = isl.isl_multi_aff_scale_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
3279            obj = multi_aff(ctx=ctx, ptr=res)
3280            return obj
3281        raise Error
3282    def scale_down(*args):
3283        if len(args) == 2 and args[1].__class__ is multi_val:
3284            ctx = args[0].ctx
3285            res = isl.isl_multi_aff_scale_down_multi_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
3286            obj = multi_aff(ctx=ctx, ptr=res)
3287            return obj
3288        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
3289            args = list(args)
3290            try:
3291                if not args[1].__class__ is val:
3292                    args[1] = val(args[1])
3293            except:
3294                raise
3295            ctx = args[0].ctx
3296            res = isl.isl_multi_aff_scale_down_val(isl.isl_multi_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
3297            obj = multi_aff(ctx=ctx, ptr=res)
3298            return obj
3299        raise Error
3300    def set_at(arg0, arg1, arg2):
3301        try:
3302            if not arg0.__class__ is multi_aff:
3303                arg0 = multi_aff(arg0)
3304        except:
3305            raise
3306        try:
3307            if not arg2.__class__ is aff:
3308                arg2 = aff(arg2)
3309        except:
3310            return pw_multi_aff(arg0).set_at(arg1, arg2)
3311        ctx = arg0.ctx
3312        res = isl.isl_multi_aff_set_at(isl.isl_multi_aff_copy(arg0.ptr), arg1, isl.isl_aff_copy(arg2.ptr))
3313        obj = multi_aff(ctx=ctx, ptr=res)
3314        return obj
3315    def size(arg0):
3316        try:
3317            if not arg0.__class__ is multi_aff:
3318                arg0 = multi_aff(arg0)
3319        except:
3320            raise
3321        ctx = arg0.ctx
3322        res = isl.isl_multi_aff_size(arg0.ptr)
3323        if res < 0:
3324            raise
3325        return int(res)
3326    def sub(arg0, arg1):
3327        try:
3328            if not arg0.__class__ is multi_aff:
3329                arg0 = multi_aff(arg0)
3330        except:
3331            raise
3332        try:
3333            if not arg1.__class__ is multi_aff:
3334                arg1 = multi_aff(arg1)
3335        except:
3336            return pw_multi_aff(arg0).sub(arg1)
3337        ctx = arg0.ctx
3338        res = isl.isl_multi_aff_sub(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_aff_copy(arg1.ptr))
3339        obj = multi_aff(ctx=ctx, ptr=res)
3340        return obj
3341    def unbind_params_insert_domain(arg0, arg1):
3342        try:
3343            if not arg0.__class__ is multi_aff:
3344                arg0 = multi_aff(arg0)
3345        except:
3346            raise
3347        try:
3348            if not arg1.__class__ is multi_id:
3349                arg1 = multi_id(arg1)
3350        except:
3351            return pw_multi_aff(arg0).unbind_params_insert_domain(arg1)
3352        ctx = arg0.ctx
3353        res = isl.isl_multi_aff_unbind_params_insert_domain(isl.isl_multi_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
3354        obj = multi_aff(ctx=ctx, ptr=res)
3355        return obj
3356    @staticmethod
3357    def zero(arg0):
3358        try:
3359            if not arg0.__class__ is space:
3360                arg0 = space(arg0)
3361        except:
3362            raise
3363        ctx = arg0.ctx
3364        res = isl.isl_multi_aff_zero(isl.isl_space_copy(arg0.ptr))
3365        obj = multi_aff(ctx=ctx, ptr=res)
3366        return obj
3367
3368isl.isl_multi_aff_from_aff.restype = c_void_p
3369isl.isl_multi_aff_from_aff.argtypes = [c_void_p]
3370isl.isl_multi_aff_from_aff_list.restype = c_void_p
3371isl.isl_multi_aff_from_aff_list.argtypes = [c_void_p, c_void_p]
3372isl.isl_multi_aff_read_from_str.restype = c_void_p
3373isl.isl_multi_aff_read_from_str.argtypes = [Context, c_char_p]
3374isl.isl_multi_aff_add.restype = c_void_p
3375isl.isl_multi_aff_add.argtypes = [c_void_p, c_void_p]
3376isl.isl_multi_aff_add_constant_multi_val.restype = c_void_p
3377isl.isl_multi_aff_add_constant_multi_val.argtypes = [c_void_p, c_void_p]
3378isl.isl_multi_aff_add_constant_val.restype = c_void_p
3379isl.isl_multi_aff_add_constant_val.argtypes = [c_void_p, c_void_p]
3380isl.isl_multi_aff_bind.restype = c_void_p
3381isl.isl_multi_aff_bind.argtypes = [c_void_p, c_void_p]
3382isl.isl_multi_aff_bind_domain.restype = c_void_p
3383isl.isl_multi_aff_bind_domain.argtypes = [c_void_p, c_void_p]
3384isl.isl_multi_aff_bind_domain_wrapped_domain.restype = c_void_p
3385isl.isl_multi_aff_bind_domain_wrapped_domain.argtypes = [c_void_p, c_void_p]
3386isl.isl_multi_aff_domain_map.restype = c_void_p
3387isl.isl_multi_aff_domain_map.argtypes = [c_void_p]
3388isl.isl_multi_aff_flat_range_product.restype = c_void_p
3389isl.isl_multi_aff_flat_range_product.argtypes = [c_void_p, c_void_p]
3390isl.isl_multi_aff_floor.restype = c_void_p
3391isl.isl_multi_aff_floor.argtypes = [c_void_p]
3392isl.isl_multi_aff_get_at.restype = c_void_p
3393isl.isl_multi_aff_get_at.argtypes = [c_void_p, c_int]
3394isl.isl_multi_aff_get_constant_multi_val.restype = c_void_p
3395isl.isl_multi_aff_get_constant_multi_val.argtypes = [c_void_p]
3396isl.isl_multi_aff_get_list.restype = c_void_p
3397isl.isl_multi_aff_get_list.argtypes = [c_void_p]
3398isl.isl_multi_aff_get_space.restype = c_void_p
3399isl.isl_multi_aff_get_space.argtypes = [c_void_p]
3400isl.isl_multi_aff_gist.restype = c_void_p
3401isl.isl_multi_aff_gist.argtypes = [c_void_p, c_void_p]
3402isl.isl_multi_aff_identity_multi_aff.restype = c_void_p
3403isl.isl_multi_aff_identity_multi_aff.argtypes = [c_void_p]
3404isl.isl_multi_aff_identity_on_domain_space.restype = c_void_p
3405isl.isl_multi_aff_identity_on_domain_space.argtypes = [c_void_p]
3406isl.isl_multi_aff_insert_domain.restype = c_void_p
3407isl.isl_multi_aff_insert_domain.argtypes = [c_void_p, c_void_p]
3408isl.isl_multi_aff_involves_locals.argtypes = [c_void_p]
3409isl.isl_multi_aff_neg.restype = c_void_p
3410isl.isl_multi_aff_neg.argtypes = [c_void_p]
3411isl.isl_multi_aff_plain_is_equal.argtypes = [c_void_p, c_void_p]
3412isl.isl_multi_aff_product.restype = c_void_p
3413isl.isl_multi_aff_product.argtypes = [c_void_p, c_void_p]
3414isl.isl_multi_aff_pullback_multi_aff.restype = c_void_p
3415isl.isl_multi_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p]
3416isl.isl_multi_aff_range_map.restype = c_void_p
3417isl.isl_multi_aff_range_map.argtypes = [c_void_p]
3418isl.isl_multi_aff_range_product.restype = c_void_p
3419isl.isl_multi_aff_range_product.argtypes = [c_void_p, c_void_p]
3420isl.isl_multi_aff_scale_multi_val.restype = c_void_p
3421isl.isl_multi_aff_scale_multi_val.argtypes = [c_void_p, c_void_p]
3422isl.isl_multi_aff_scale_val.restype = c_void_p
3423isl.isl_multi_aff_scale_val.argtypes = [c_void_p, c_void_p]
3424isl.isl_multi_aff_scale_down_multi_val.restype = c_void_p
3425isl.isl_multi_aff_scale_down_multi_val.argtypes = [c_void_p, c_void_p]
3426isl.isl_multi_aff_scale_down_val.restype = c_void_p
3427isl.isl_multi_aff_scale_down_val.argtypes = [c_void_p, c_void_p]
3428isl.isl_multi_aff_set_at.restype = c_void_p
3429isl.isl_multi_aff_set_at.argtypes = [c_void_p, c_int, c_void_p]
3430isl.isl_multi_aff_size.argtypes = [c_void_p]
3431isl.isl_multi_aff_sub.restype = c_void_p
3432isl.isl_multi_aff_sub.argtypes = [c_void_p, c_void_p]
3433isl.isl_multi_aff_unbind_params_insert_domain.restype = c_void_p
3434isl.isl_multi_aff_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p]
3435isl.isl_multi_aff_zero.restype = c_void_p
3436isl.isl_multi_aff_zero.argtypes = [c_void_p]
3437isl.isl_multi_aff_copy.restype = c_void_p
3438isl.isl_multi_aff_copy.argtypes = [c_void_p]
3439isl.isl_multi_aff_free.restype = c_void_p
3440isl.isl_multi_aff_free.argtypes = [c_void_p]
3441isl.isl_multi_aff_to_str.restype = POINTER(c_char)
3442isl.isl_multi_aff_to_str.argtypes = [c_void_p]
3443
3444class aff(pw_aff, multi_aff):
3445    def __init__(self, *args, **keywords):
3446        if "ptr" in keywords:
3447            self.ctx = keywords["ctx"]
3448            self.ptr = keywords["ptr"]
3449            return
3450        if len(args) == 1 and type(args[0]) == str:
3451            self.ctx = Context.getDefaultInstance()
3452            self.ptr = isl.isl_aff_read_from_str(self.ctx, args[0].encode('ascii'))
3453            return
3454        raise Error
3455    def __del__(self):
3456        if hasattr(self, 'ptr'):
3457            isl.isl_aff_free(self.ptr)
3458    def __str__(arg0):
3459        try:
3460            if not arg0.__class__ is aff:
3461                arg0 = aff(arg0)
3462        except:
3463            raise
3464        ptr = isl.isl_aff_to_str(arg0.ptr)
3465        res = cast(ptr, c_char_p).value.decode('ascii')
3466        libc.free(ptr)
3467        return res
3468    def __repr__(self):
3469        s = str(self)
3470        if '"' in s:
3471            return 'isl.aff("""%s""")' % s
3472        else:
3473            return 'isl.aff("%s")' % s
3474    def add(arg0, arg1):
3475        try:
3476            if not arg0.__class__ is aff:
3477                arg0 = aff(arg0)
3478        except:
3479            raise
3480        try:
3481            if not arg1.__class__ is aff:
3482                arg1 = aff(arg1)
3483        except:
3484            return pw_aff(arg0).add(arg1)
3485        ctx = arg0.ctx
3486        res = isl.isl_aff_add(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3487        obj = aff(ctx=ctx, ptr=res)
3488        return obj
3489    def add_constant(*args):
3490        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
3491            args = list(args)
3492            try:
3493                if not args[1].__class__ is val:
3494                    args[1] = val(args[1])
3495            except:
3496                raise
3497            ctx = args[0].ctx
3498            res = isl.isl_aff_add_constant_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
3499            obj = aff(ctx=ctx, ptr=res)
3500            return obj
3501        raise Error
3502    def bind(*args):
3503        if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str):
3504            args = list(args)
3505            try:
3506                if not args[1].__class__ is id:
3507                    args[1] = id(args[1])
3508            except:
3509                raise
3510            ctx = args[0].ctx
3511            res = isl.isl_aff_bind_id(isl.isl_aff_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr))
3512            obj = basic_set(ctx=ctx, ptr=res)
3513            return obj
3514        raise Error
3515    def ceil(arg0):
3516        try:
3517            if not arg0.__class__ is aff:
3518                arg0 = aff(arg0)
3519        except:
3520            raise
3521        ctx = arg0.ctx
3522        res = isl.isl_aff_ceil(isl.isl_aff_copy(arg0.ptr))
3523        obj = aff(ctx=ctx, ptr=res)
3524        return obj
3525    def div(arg0, arg1):
3526        try:
3527            if not arg0.__class__ is aff:
3528                arg0 = aff(arg0)
3529        except:
3530            raise
3531        try:
3532            if not arg1.__class__ is aff:
3533                arg1 = aff(arg1)
3534        except:
3535            return pw_aff(arg0).div(arg1)
3536        ctx = arg0.ctx
3537        res = isl.isl_aff_div(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3538        obj = aff(ctx=ctx, ptr=res)
3539        return obj
3540    def eq_set(arg0, arg1):
3541        try:
3542            if not arg0.__class__ is aff:
3543                arg0 = aff(arg0)
3544        except:
3545            raise
3546        try:
3547            if not arg1.__class__ is aff:
3548                arg1 = aff(arg1)
3549        except:
3550            return pw_aff(arg0).eq_set(arg1)
3551        ctx = arg0.ctx
3552        res = isl.isl_aff_eq_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3553        obj = set(ctx=ctx, ptr=res)
3554        return obj
3555    def eval(arg0, arg1):
3556        try:
3557            if not arg0.__class__ is aff:
3558                arg0 = aff(arg0)
3559        except:
3560            raise
3561        try:
3562            if not arg1.__class__ is point:
3563                arg1 = point(arg1)
3564        except:
3565            return pw_aff(arg0).eval(arg1)
3566        ctx = arg0.ctx
3567        res = isl.isl_aff_eval(isl.isl_aff_copy(arg0.ptr), isl.isl_point_copy(arg1.ptr))
3568        obj = val(ctx=ctx, ptr=res)
3569        return obj
3570    def floor(arg0):
3571        try:
3572            if not arg0.__class__ is aff:
3573                arg0 = aff(arg0)
3574        except:
3575            raise
3576        ctx = arg0.ctx
3577        res = isl.isl_aff_floor(isl.isl_aff_copy(arg0.ptr))
3578        obj = aff(ctx=ctx, ptr=res)
3579        return obj
3580    def ge_set(arg0, arg1):
3581        try:
3582            if not arg0.__class__ is aff:
3583                arg0 = aff(arg0)
3584        except:
3585            raise
3586        try:
3587            if not arg1.__class__ is aff:
3588                arg1 = aff(arg1)
3589        except:
3590            return pw_aff(arg0).ge_set(arg1)
3591        ctx = arg0.ctx
3592        res = isl.isl_aff_ge_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3593        obj = set(ctx=ctx, ptr=res)
3594        return obj
3595    def gist(arg0, arg1):
3596        try:
3597            if not arg0.__class__ is aff:
3598                arg0 = aff(arg0)
3599        except:
3600            raise
3601        try:
3602            if not arg1.__class__ is set:
3603                arg1 = set(arg1)
3604        except:
3605            return pw_aff(arg0).gist(arg1)
3606        ctx = arg0.ctx
3607        res = isl.isl_aff_gist(isl.isl_aff_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
3608        obj = aff(ctx=ctx, ptr=res)
3609        return obj
3610    def gt_set(arg0, arg1):
3611        try:
3612            if not arg0.__class__ is aff:
3613                arg0 = aff(arg0)
3614        except:
3615            raise
3616        try:
3617            if not arg1.__class__ is aff:
3618                arg1 = aff(arg1)
3619        except:
3620            return pw_aff(arg0).gt_set(arg1)
3621        ctx = arg0.ctx
3622        res = isl.isl_aff_gt_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3623        obj = set(ctx=ctx, ptr=res)
3624        return obj
3625    def le_set(arg0, arg1):
3626        try:
3627            if not arg0.__class__ is aff:
3628                arg0 = aff(arg0)
3629        except:
3630            raise
3631        try:
3632            if not arg1.__class__ is aff:
3633                arg1 = aff(arg1)
3634        except:
3635            return pw_aff(arg0).le_set(arg1)
3636        ctx = arg0.ctx
3637        res = isl.isl_aff_le_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3638        obj = set(ctx=ctx, ptr=res)
3639        return obj
3640    def lt_set(arg0, arg1):
3641        try:
3642            if not arg0.__class__ is aff:
3643                arg0 = aff(arg0)
3644        except:
3645            raise
3646        try:
3647            if not arg1.__class__ is aff:
3648                arg1 = aff(arg1)
3649        except:
3650            return pw_aff(arg0).lt_set(arg1)
3651        ctx = arg0.ctx
3652        res = isl.isl_aff_lt_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3653        obj = set(ctx=ctx, ptr=res)
3654        return obj
3655    def mod(*args):
3656        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
3657            args = list(args)
3658            try:
3659                if not args[1].__class__ is val:
3660                    args[1] = val(args[1])
3661            except:
3662                raise
3663            ctx = args[0].ctx
3664            res = isl.isl_aff_mod_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
3665            obj = aff(ctx=ctx, ptr=res)
3666            return obj
3667        raise Error
3668    def mul(arg0, arg1):
3669        try:
3670            if not arg0.__class__ is aff:
3671                arg0 = aff(arg0)
3672        except:
3673            raise
3674        try:
3675            if not arg1.__class__ is aff:
3676                arg1 = aff(arg1)
3677        except:
3678            return pw_aff(arg0).mul(arg1)
3679        ctx = arg0.ctx
3680        res = isl.isl_aff_mul(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3681        obj = aff(ctx=ctx, ptr=res)
3682        return obj
3683    def ne_set(arg0, arg1):
3684        try:
3685            if not arg0.__class__ is aff:
3686                arg0 = aff(arg0)
3687        except:
3688            raise
3689        try:
3690            if not arg1.__class__ is aff:
3691                arg1 = aff(arg1)
3692        except:
3693            return pw_aff(arg0).ne_set(arg1)
3694        ctx = arg0.ctx
3695        res = isl.isl_aff_ne_set(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3696        obj = set(ctx=ctx, ptr=res)
3697        return obj
3698    def neg(arg0):
3699        try:
3700            if not arg0.__class__ is aff:
3701                arg0 = aff(arg0)
3702        except:
3703            raise
3704        ctx = arg0.ctx
3705        res = isl.isl_aff_neg(isl.isl_aff_copy(arg0.ptr))
3706        obj = aff(ctx=ctx, ptr=res)
3707        return obj
3708    def pullback(*args):
3709        if len(args) == 2 and args[1].__class__ is multi_aff:
3710            ctx = args[0].ctx
3711            res = isl.isl_aff_pullback_multi_aff(isl.isl_aff_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
3712            obj = aff(ctx=ctx, ptr=res)
3713            return obj
3714        raise Error
3715    def scale(*args):
3716        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
3717            args = list(args)
3718            try:
3719                if not args[1].__class__ is val:
3720                    args[1] = val(args[1])
3721            except:
3722                raise
3723            ctx = args[0].ctx
3724            res = isl.isl_aff_scale_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
3725            obj = aff(ctx=ctx, ptr=res)
3726            return obj
3727        raise Error
3728    def scale_down(*args):
3729        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
3730            args = list(args)
3731            try:
3732                if not args[1].__class__ is val:
3733                    args[1] = val(args[1])
3734            except:
3735                raise
3736            ctx = args[0].ctx
3737            res = isl.isl_aff_scale_down_val(isl.isl_aff_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
3738            obj = aff(ctx=ctx, ptr=res)
3739            return obj
3740        raise Error
3741    def sub(arg0, arg1):
3742        try:
3743            if not arg0.__class__ is aff:
3744                arg0 = aff(arg0)
3745        except:
3746            raise
3747        try:
3748            if not arg1.__class__ is aff:
3749                arg1 = aff(arg1)
3750        except:
3751            return pw_aff(arg0).sub(arg1)
3752        ctx = arg0.ctx
3753        res = isl.isl_aff_sub(isl.isl_aff_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3754        obj = aff(ctx=ctx, ptr=res)
3755        return obj
3756    def unbind_params_insert_domain(arg0, arg1):
3757        try:
3758            if not arg0.__class__ is aff:
3759                arg0 = aff(arg0)
3760        except:
3761            raise
3762        try:
3763            if not arg1.__class__ is multi_id:
3764                arg1 = multi_id(arg1)
3765        except:
3766            return pw_aff(arg0).unbind_params_insert_domain(arg1)
3767        ctx = arg0.ctx
3768        res = isl.isl_aff_unbind_params_insert_domain(isl.isl_aff_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
3769        obj = aff(ctx=ctx, ptr=res)
3770        return obj
3771    @staticmethod
3772    def zero_on_domain(*args):
3773        if len(args) == 1 and args[0].__class__ is space:
3774            ctx = args[0].ctx
3775            res = isl.isl_aff_zero_on_domain_space(isl.isl_space_copy(args[0].ptr))
3776            obj = aff(ctx=ctx, ptr=res)
3777            return obj
3778        raise Error
3779
3780isl.isl_aff_read_from_str.restype = c_void_p
3781isl.isl_aff_read_from_str.argtypes = [Context, c_char_p]
3782isl.isl_aff_add.restype = c_void_p
3783isl.isl_aff_add.argtypes = [c_void_p, c_void_p]
3784isl.isl_aff_add_constant_val.restype = c_void_p
3785isl.isl_aff_add_constant_val.argtypes = [c_void_p, c_void_p]
3786isl.isl_aff_bind_id.restype = c_void_p
3787isl.isl_aff_bind_id.argtypes = [c_void_p, c_void_p]
3788isl.isl_aff_ceil.restype = c_void_p
3789isl.isl_aff_ceil.argtypes = [c_void_p]
3790isl.isl_aff_div.restype = c_void_p
3791isl.isl_aff_div.argtypes = [c_void_p, c_void_p]
3792isl.isl_aff_eq_set.restype = c_void_p
3793isl.isl_aff_eq_set.argtypes = [c_void_p, c_void_p]
3794isl.isl_aff_eval.restype = c_void_p
3795isl.isl_aff_eval.argtypes = [c_void_p, c_void_p]
3796isl.isl_aff_floor.restype = c_void_p
3797isl.isl_aff_floor.argtypes = [c_void_p]
3798isl.isl_aff_ge_set.restype = c_void_p
3799isl.isl_aff_ge_set.argtypes = [c_void_p, c_void_p]
3800isl.isl_aff_gist.restype = c_void_p
3801isl.isl_aff_gist.argtypes = [c_void_p, c_void_p]
3802isl.isl_aff_gt_set.restype = c_void_p
3803isl.isl_aff_gt_set.argtypes = [c_void_p, c_void_p]
3804isl.isl_aff_le_set.restype = c_void_p
3805isl.isl_aff_le_set.argtypes = [c_void_p, c_void_p]
3806isl.isl_aff_lt_set.restype = c_void_p
3807isl.isl_aff_lt_set.argtypes = [c_void_p, c_void_p]
3808isl.isl_aff_mod_val.restype = c_void_p
3809isl.isl_aff_mod_val.argtypes = [c_void_p, c_void_p]
3810isl.isl_aff_mul.restype = c_void_p
3811isl.isl_aff_mul.argtypes = [c_void_p, c_void_p]
3812isl.isl_aff_ne_set.restype = c_void_p
3813isl.isl_aff_ne_set.argtypes = [c_void_p, c_void_p]
3814isl.isl_aff_neg.restype = c_void_p
3815isl.isl_aff_neg.argtypes = [c_void_p]
3816isl.isl_aff_pullback_multi_aff.restype = c_void_p
3817isl.isl_aff_pullback_multi_aff.argtypes = [c_void_p, c_void_p]
3818isl.isl_aff_scale_val.restype = c_void_p
3819isl.isl_aff_scale_val.argtypes = [c_void_p, c_void_p]
3820isl.isl_aff_scale_down_val.restype = c_void_p
3821isl.isl_aff_scale_down_val.argtypes = [c_void_p, c_void_p]
3822isl.isl_aff_sub.restype = c_void_p
3823isl.isl_aff_sub.argtypes = [c_void_p, c_void_p]
3824isl.isl_aff_unbind_params_insert_domain.restype = c_void_p
3825isl.isl_aff_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p]
3826isl.isl_aff_zero_on_domain_space.restype = c_void_p
3827isl.isl_aff_zero_on_domain_space.argtypes = [c_void_p]
3828isl.isl_aff_copy.restype = c_void_p
3829isl.isl_aff_copy.argtypes = [c_void_p]
3830isl.isl_aff_free.restype = c_void_p
3831isl.isl_aff_free.argtypes = [c_void_p]
3832isl.isl_aff_to_str.restype = POINTER(c_char)
3833isl.isl_aff_to_str.argtypes = [c_void_p]
3834
3835class aff_list(object):
3836    def __init__(self, *args, **keywords):
3837        if "ptr" in keywords:
3838            self.ctx = keywords["ctx"]
3839            self.ptr = keywords["ptr"]
3840            return
3841        if len(args) == 1 and type(args[0]) == int:
3842            self.ctx = Context.getDefaultInstance()
3843            self.ptr = isl.isl_aff_list_alloc(self.ctx, args[0])
3844            return
3845        if len(args) == 1 and args[0].__class__ is aff:
3846            self.ctx = Context.getDefaultInstance()
3847            self.ptr = isl.isl_aff_list_from_aff(isl.isl_aff_copy(args[0].ptr))
3848            return
3849        raise Error
3850    def __del__(self):
3851        if hasattr(self, 'ptr'):
3852            isl.isl_aff_list_free(self.ptr)
3853    def __str__(arg0):
3854        try:
3855            if not arg0.__class__ is aff_list:
3856                arg0 = aff_list(arg0)
3857        except:
3858            raise
3859        ptr = isl.isl_aff_list_to_str(arg0.ptr)
3860        res = cast(ptr, c_char_p).value.decode('ascii')
3861        libc.free(ptr)
3862        return res
3863    def __repr__(self):
3864        s = str(self)
3865        if '"' in s:
3866            return 'isl.aff_list("""%s""")' % s
3867        else:
3868            return 'isl.aff_list("%s")' % s
3869    def add(arg0, arg1):
3870        try:
3871            if not arg0.__class__ is aff_list:
3872                arg0 = aff_list(arg0)
3873        except:
3874            raise
3875        try:
3876            if not arg1.__class__ is aff:
3877                arg1 = aff(arg1)
3878        except:
3879            raise
3880        ctx = arg0.ctx
3881        res = isl.isl_aff_list_add(isl.isl_aff_list_copy(arg0.ptr), isl.isl_aff_copy(arg1.ptr))
3882        obj = aff_list(ctx=ctx, ptr=res)
3883        return obj
3884    def clear(arg0):
3885        try:
3886            if not arg0.__class__ is aff_list:
3887                arg0 = aff_list(arg0)
3888        except:
3889            raise
3890        ctx = arg0.ctx
3891        res = isl.isl_aff_list_clear(isl.isl_aff_list_copy(arg0.ptr))
3892        obj = aff_list(ctx=ctx, ptr=res)
3893        return obj
3894    def concat(arg0, arg1):
3895        try:
3896            if not arg0.__class__ is aff_list:
3897                arg0 = aff_list(arg0)
3898        except:
3899            raise
3900        try:
3901            if not arg1.__class__ is aff_list:
3902                arg1 = aff_list(arg1)
3903        except:
3904            raise
3905        ctx = arg0.ctx
3906        res = isl.isl_aff_list_concat(isl.isl_aff_list_copy(arg0.ptr), isl.isl_aff_list_copy(arg1.ptr))
3907        obj = aff_list(ctx=ctx, ptr=res)
3908        return obj
3909    def drop(arg0, arg1, arg2):
3910        try:
3911            if not arg0.__class__ is aff_list:
3912                arg0 = aff_list(arg0)
3913        except:
3914            raise
3915        ctx = arg0.ctx
3916        res = isl.isl_aff_list_drop(isl.isl_aff_list_copy(arg0.ptr), arg1, arg2)
3917        obj = aff_list(ctx=ctx, ptr=res)
3918        return obj
3919    def foreach(arg0, arg1):
3920        try:
3921            if not arg0.__class__ is aff_list:
3922                arg0 = aff_list(arg0)
3923        except:
3924            raise
3925        exc_info = [None]
3926        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
3927        def cb_func(cb_arg0, cb_arg1):
3928            cb_arg0 = aff(ctx=arg0.ctx, ptr=(cb_arg0))
3929            try:
3930                arg1(cb_arg0)
3931            except:
3932                import sys
3933                exc_info[0] = sys.exc_info()
3934                return -1
3935            return 0
3936        cb = fn(cb_func)
3937        ctx = arg0.ctx
3938        res = isl.isl_aff_list_foreach(arg0.ptr, cb, None)
3939        if exc_info[0] != None:
3940            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
3941        if res < 0:
3942            raise
3943    def at(arg0, arg1):
3944        try:
3945            if not arg0.__class__ is aff_list:
3946                arg0 = aff_list(arg0)
3947        except:
3948            raise
3949        ctx = arg0.ctx
3950        res = isl.isl_aff_list_get_at(arg0.ptr, arg1)
3951        obj = aff(ctx=ctx, ptr=res)
3952        return obj
3953    def get_at(arg0, arg1):
3954        return arg0.at(arg1)
3955    def insert(arg0, arg1, arg2):
3956        try:
3957            if not arg0.__class__ is aff_list:
3958                arg0 = aff_list(arg0)
3959        except:
3960            raise
3961        try:
3962            if not arg2.__class__ is aff:
3963                arg2 = aff(arg2)
3964        except:
3965            raise
3966        ctx = arg0.ctx
3967        res = isl.isl_aff_list_insert(isl.isl_aff_list_copy(arg0.ptr), arg1, isl.isl_aff_copy(arg2.ptr))
3968        obj = aff_list(ctx=ctx, ptr=res)
3969        return obj
3970    def size(arg0):
3971        try:
3972            if not arg0.__class__ is aff_list:
3973                arg0 = aff_list(arg0)
3974        except:
3975            raise
3976        ctx = arg0.ctx
3977        res = isl.isl_aff_list_size(arg0.ptr)
3978        if res < 0:
3979            raise
3980        return int(res)
3981
3982isl.isl_aff_list_alloc.restype = c_void_p
3983isl.isl_aff_list_alloc.argtypes = [Context, c_int]
3984isl.isl_aff_list_from_aff.restype = c_void_p
3985isl.isl_aff_list_from_aff.argtypes = [c_void_p]
3986isl.isl_aff_list_add.restype = c_void_p
3987isl.isl_aff_list_add.argtypes = [c_void_p, c_void_p]
3988isl.isl_aff_list_clear.restype = c_void_p
3989isl.isl_aff_list_clear.argtypes = [c_void_p]
3990isl.isl_aff_list_concat.restype = c_void_p
3991isl.isl_aff_list_concat.argtypes = [c_void_p, c_void_p]
3992isl.isl_aff_list_drop.restype = c_void_p
3993isl.isl_aff_list_drop.argtypes = [c_void_p, c_int, c_int]
3994isl.isl_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
3995isl.isl_aff_list_get_at.restype = c_void_p
3996isl.isl_aff_list_get_at.argtypes = [c_void_p, c_int]
3997isl.isl_aff_list_insert.restype = c_void_p
3998isl.isl_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p]
3999isl.isl_aff_list_size.argtypes = [c_void_p]
4000isl.isl_aff_list_copy.restype = c_void_p
4001isl.isl_aff_list_copy.argtypes = [c_void_p]
4002isl.isl_aff_list_free.restype = c_void_p
4003isl.isl_aff_list_free.argtypes = [c_void_p]
4004isl.isl_aff_list_to_str.restype = POINTER(c_char)
4005isl.isl_aff_list_to_str.argtypes = [c_void_p]
4006
4007class ast_build(object):
4008    def __init__(self, *args, **keywords):
4009        if "ptr" in keywords:
4010            self.ctx = keywords["ctx"]
4011            self.ptr = keywords["ptr"]
4012            return
4013        if len(args) == 0:
4014            self.ctx = Context.getDefaultInstance()
4015            self.ptr = isl.isl_ast_build_alloc(self.ctx)
4016            return
4017        raise Error
4018    def __del__(self):
4019        if hasattr(self, 'ptr'):
4020            isl.isl_ast_build_free(self.ptr)
4021    def copy_callbacks(self, obj):
4022        if hasattr(obj, 'at_each_domain'):
4023            self.at_each_domain = obj.at_each_domain
4024    def set_at_each_domain(arg0, arg1):
4025        try:
4026            if not arg0.__class__ is ast_build:
4027                arg0 = ast_build(arg0)
4028        except:
4029            raise
4030        exc_info = [None]
4031        fn = CFUNCTYPE(c_void_p, c_void_p, c_void_p, c_void_p)
4032        def cb_func(cb_arg0, cb_arg1, cb_arg2):
4033            cb_arg0 = ast_node(ctx=arg0.ctx, ptr=(cb_arg0))
4034            cb_arg1 = ast_build(ctx=arg0.ctx, ptr=isl.isl_ast_build_copy(cb_arg1))
4035            try:
4036                res = arg1(cb_arg0, cb_arg1)
4037            except:
4038                import sys
4039                exc_info[0] = sys.exc_info()
4040                return None
4041            return isl.isl_ast_node_copy(res.ptr)
4042        cb = fn(cb_func)
4043        ctx = arg0.ctx
4044        res = isl.isl_ast_build_set_at_each_domain(isl.isl_ast_build_copy(arg0.ptr), cb, None)
4045        if exc_info[0] != None:
4046            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
4047        if hasattr(arg0, 'at_each_domain') and arg0.at_each_domain['exc_info'] != None:
4048            exc_info = arg0.at_each_domain['exc_info'][0]
4049            arg0.at_each_domain['exc_info'][0] = None
4050            if exc_info != None:
4051                raise (exc_info[0], exc_info[1], exc_info[2])
4052        obj = ast_build(ctx=ctx, ptr=res)
4053        obj.copy_callbacks(arg0)
4054        obj.at_each_domain = { 'func': cb, 'exc_info': exc_info }
4055        return obj
4056    def access_from(*args):
4057        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
4058            ctx = args[0].ctx
4059            res = isl.isl_ast_build_access_from_multi_pw_aff(args[0].ptr, isl.isl_multi_pw_aff_copy(args[1].ptr))
4060            if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None:
4061                exc_info = args[0].at_each_domain['exc_info'][0]
4062                args[0].at_each_domain['exc_info'][0] = None
4063                if exc_info != None:
4064                    raise (exc_info[0], exc_info[1], exc_info[2])
4065            obj = ast_expr(ctx=ctx, ptr=res)
4066            return obj
4067        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
4068            ctx = args[0].ctx
4069            res = isl.isl_ast_build_access_from_pw_multi_aff(args[0].ptr, isl.isl_pw_multi_aff_copy(args[1].ptr))
4070            if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None:
4071                exc_info = args[0].at_each_domain['exc_info'][0]
4072                args[0].at_each_domain['exc_info'][0] = None
4073                if exc_info != None:
4074                    raise (exc_info[0], exc_info[1], exc_info[2])
4075            obj = ast_expr(ctx=ctx, ptr=res)
4076            return obj
4077        raise Error
4078    def call_from(*args):
4079        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
4080            ctx = args[0].ctx
4081            res = isl.isl_ast_build_call_from_multi_pw_aff(args[0].ptr, isl.isl_multi_pw_aff_copy(args[1].ptr))
4082            if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None:
4083                exc_info = args[0].at_each_domain['exc_info'][0]
4084                args[0].at_each_domain['exc_info'][0] = None
4085                if exc_info != None:
4086                    raise (exc_info[0], exc_info[1], exc_info[2])
4087            obj = ast_expr(ctx=ctx, ptr=res)
4088            return obj
4089        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
4090            ctx = args[0].ctx
4091            res = isl.isl_ast_build_call_from_pw_multi_aff(args[0].ptr, isl.isl_pw_multi_aff_copy(args[1].ptr))
4092            if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None:
4093                exc_info = args[0].at_each_domain['exc_info'][0]
4094                args[0].at_each_domain['exc_info'][0] = None
4095                if exc_info != None:
4096                    raise (exc_info[0], exc_info[1], exc_info[2])
4097            obj = ast_expr(ctx=ctx, ptr=res)
4098            return obj
4099        raise Error
4100    def expr_from(*args):
4101        if len(args) == 2 and args[1].__class__ is pw_aff:
4102            ctx = args[0].ctx
4103            res = isl.isl_ast_build_expr_from_pw_aff(args[0].ptr, isl.isl_pw_aff_copy(args[1].ptr))
4104            if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None:
4105                exc_info = args[0].at_each_domain['exc_info'][0]
4106                args[0].at_each_domain['exc_info'][0] = None
4107                if exc_info != None:
4108                    raise (exc_info[0], exc_info[1], exc_info[2])
4109            obj = ast_expr(ctx=ctx, ptr=res)
4110            return obj
4111        if len(args) == 2 and args[1].__class__ is set:
4112            ctx = args[0].ctx
4113            res = isl.isl_ast_build_expr_from_set(args[0].ptr, isl.isl_set_copy(args[1].ptr))
4114            if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None:
4115                exc_info = args[0].at_each_domain['exc_info'][0]
4116                args[0].at_each_domain['exc_info'][0] = None
4117                if exc_info != None:
4118                    raise (exc_info[0], exc_info[1], exc_info[2])
4119            obj = ast_expr(ctx=ctx, ptr=res)
4120            return obj
4121        raise Error
4122    @staticmethod
4123    def from_context(arg0):
4124        try:
4125            if not arg0.__class__ is set:
4126                arg0 = set(arg0)
4127        except:
4128            raise
4129        ctx = arg0.ctx
4130        res = isl.isl_ast_build_from_context(isl.isl_set_copy(arg0.ptr))
4131        obj = ast_build(ctx=ctx, ptr=res)
4132        return obj
4133    def schedule(arg0):
4134        try:
4135            if not arg0.__class__ is ast_build:
4136                arg0 = ast_build(arg0)
4137        except:
4138            raise
4139        ctx = arg0.ctx
4140        res = isl.isl_ast_build_get_schedule(arg0.ptr)
4141        if hasattr(arg0, 'at_each_domain') and arg0.at_each_domain['exc_info'] != None:
4142            exc_info = arg0.at_each_domain['exc_info'][0]
4143            arg0.at_each_domain['exc_info'][0] = None
4144            if exc_info != None:
4145                raise (exc_info[0], exc_info[1], exc_info[2])
4146        obj = union_map(ctx=ctx, ptr=res)
4147        return obj
4148    def get_schedule(arg0):
4149        return arg0.schedule()
4150    def node_from(*args):
4151        if len(args) == 2 and args[1].__class__ is schedule:
4152            ctx = args[0].ctx
4153            res = isl.isl_ast_build_node_from_schedule(args[0].ptr, isl.isl_schedule_copy(args[1].ptr))
4154            if hasattr(args[0], 'at_each_domain') and args[0].at_each_domain['exc_info'] != None:
4155                exc_info = args[0].at_each_domain['exc_info'][0]
4156                args[0].at_each_domain['exc_info'][0] = None
4157                if exc_info != None:
4158                    raise (exc_info[0], exc_info[1], exc_info[2])
4159            obj = ast_node(ctx=ctx, ptr=res)
4160            return obj
4161        raise Error
4162    def node_from_schedule_map(arg0, arg1):
4163        try:
4164            if not arg0.__class__ is ast_build:
4165                arg0 = ast_build(arg0)
4166        except:
4167            raise
4168        try:
4169            if not arg1.__class__ is union_map:
4170                arg1 = union_map(arg1)
4171        except:
4172            raise
4173        ctx = arg0.ctx
4174        res = isl.isl_ast_build_node_from_schedule_map(arg0.ptr, isl.isl_union_map_copy(arg1.ptr))
4175        if hasattr(arg0, 'at_each_domain') and arg0.at_each_domain['exc_info'] != None:
4176            exc_info = arg0.at_each_domain['exc_info'][0]
4177            arg0.at_each_domain['exc_info'][0] = None
4178            if exc_info != None:
4179                raise (exc_info[0], exc_info[1], exc_info[2])
4180        obj = ast_node(ctx=ctx, ptr=res)
4181        return obj
4182
4183isl.isl_ast_build_alloc.restype = c_void_p
4184isl.isl_ast_build_alloc.argtypes = [Context]
4185isl.isl_ast_build_set_at_each_domain.restype = c_void_p
4186isl.isl_ast_build_set_at_each_domain.argtypes = [c_void_p, c_void_p, c_void_p]
4187isl.isl_ast_build_access_from_multi_pw_aff.restype = c_void_p
4188isl.isl_ast_build_access_from_multi_pw_aff.argtypes = [c_void_p, c_void_p]
4189isl.isl_ast_build_access_from_pw_multi_aff.restype = c_void_p
4190isl.isl_ast_build_access_from_pw_multi_aff.argtypes = [c_void_p, c_void_p]
4191isl.isl_ast_build_call_from_multi_pw_aff.restype = c_void_p
4192isl.isl_ast_build_call_from_multi_pw_aff.argtypes = [c_void_p, c_void_p]
4193isl.isl_ast_build_call_from_pw_multi_aff.restype = c_void_p
4194isl.isl_ast_build_call_from_pw_multi_aff.argtypes = [c_void_p, c_void_p]
4195isl.isl_ast_build_expr_from_pw_aff.restype = c_void_p
4196isl.isl_ast_build_expr_from_pw_aff.argtypes = [c_void_p, c_void_p]
4197isl.isl_ast_build_expr_from_set.restype = c_void_p
4198isl.isl_ast_build_expr_from_set.argtypes = [c_void_p, c_void_p]
4199isl.isl_ast_build_from_context.restype = c_void_p
4200isl.isl_ast_build_from_context.argtypes = [c_void_p]
4201isl.isl_ast_build_get_schedule.restype = c_void_p
4202isl.isl_ast_build_get_schedule.argtypes = [c_void_p]
4203isl.isl_ast_build_node_from_schedule.restype = c_void_p
4204isl.isl_ast_build_node_from_schedule.argtypes = [c_void_p, c_void_p]
4205isl.isl_ast_build_node_from_schedule_map.restype = c_void_p
4206isl.isl_ast_build_node_from_schedule_map.argtypes = [c_void_p, c_void_p]
4207isl.isl_ast_build_copy.restype = c_void_p
4208isl.isl_ast_build_copy.argtypes = [c_void_p]
4209isl.isl_ast_build_free.restype = c_void_p
4210isl.isl_ast_build_free.argtypes = [c_void_p]
4211
4212class ast_expr(object):
4213    def __init__(self, *args, **keywords):
4214        if "ptr" in keywords:
4215            self.ctx = keywords["ctx"]
4216            self.ptr = keywords["ptr"]
4217            return
4218        if len(args) == 1 and isinstance(args[0], ast_expr_op):
4219            self.ctx = args[0].ctx
4220            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4221            return
4222        if len(args) == 1 and isinstance(args[0], ast_expr_id):
4223            self.ctx = args[0].ctx
4224            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4225            return
4226        if len(args) == 1 and isinstance(args[0], ast_expr_int):
4227            self.ctx = args[0].ctx
4228            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4229            return
4230        raise Error
4231    def __del__(self):
4232        if hasattr(self, 'ptr'):
4233            isl.isl_ast_expr_free(self.ptr)
4234    def __new__(cls, *args, **keywords):
4235        if "ptr" in keywords:
4236            type = isl.isl_ast_expr_get_type(keywords["ptr"])
4237            if type == 0:
4238                return ast_expr_op(**keywords)
4239            if type == 1:
4240                return ast_expr_id(**keywords)
4241            if type == 2:
4242                return ast_expr_int(**keywords)
4243            raise
4244        return super(ast_expr, cls).__new__(cls)
4245    def __str__(arg0):
4246        try:
4247            if not arg0.__class__ is ast_expr:
4248                arg0 = ast_expr(arg0)
4249        except:
4250            raise
4251        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4252        res = cast(ptr, c_char_p).value.decode('ascii')
4253        libc.free(ptr)
4254        return res
4255    def __repr__(self):
4256        s = str(self)
4257        if '"' in s:
4258            return 'isl.ast_expr("""%s""")' % s
4259        else:
4260            return 'isl.ast_expr("%s")' % s
4261    def to_C_str(arg0):
4262        try:
4263            if not arg0.__class__ is ast_expr:
4264                arg0 = ast_expr(arg0)
4265        except:
4266            raise
4267        ctx = arg0.ctx
4268        res = isl.isl_ast_expr_to_C_str(arg0.ptr)
4269        if res == 0:
4270            raise
4271        string = cast(res, c_char_p).value.decode('ascii')
4272        libc.free(res)
4273        return string
4274
4275isl.isl_ast_expr_to_C_str.restype = POINTER(c_char)
4276isl.isl_ast_expr_to_C_str.argtypes = [c_void_p]
4277isl.isl_ast_expr_copy.restype = c_void_p
4278isl.isl_ast_expr_copy.argtypes = [c_void_p]
4279isl.isl_ast_expr_free.restype = c_void_p
4280isl.isl_ast_expr_free.argtypes = [c_void_p]
4281isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4282isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4283isl.isl_ast_expr_get_type.argtypes = [c_void_p]
4284
4285class ast_expr_id(ast_expr):
4286    def __init__(self, *args, **keywords):
4287        if "ptr" in keywords:
4288            self.ctx = keywords["ctx"]
4289            self.ptr = keywords["ptr"]
4290            return
4291        raise Error
4292    def __del__(self):
4293        if hasattr(self, 'ptr'):
4294            isl.isl_ast_expr_free(self.ptr)
4295    def __new__(cls, *args, **keywords):
4296        return super(ast_expr_id, cls).__new__(cls)
4297    def __str__(arg0):
4298        try:
4299            if not arg0.__class__ is ast_expr_id:
4300                arg0 = ast_expr_id(arg0)
4301        except:
4302            raise
4303        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4304        res = cast(ptr, c_char_p).value.decode('ascii')
4305        libc.free(ptr)
4306        return res
4307    def __repr__(self):
4308        s = str(self)
4309        if '"' in s:
4310            return 'isl.ast_expr_id("""%s""")' % s
4311        else:
4312            return 'isl.ast_expr_id("%s")' % s
4313    def id(arg0):
4314        try:
4315            if not arg0.__class__ is ast_expr:
4316                arg0 = ast_expr(arg0)
4317        except:
4318            raise
4319        ctx = arg0.ctx
4320        res = isl.isl_ast_expr_id_get_id(arg0.ptr)
4321        obj = id(ctx=ctx, ptr=res)
4322        return obj
4323    def get_id(arg0):
4324        return arg0.id()
4325
4326isl.isl_ast_expr_id_get_id.restype = c_void_p
4327isl.isl_ast_expr_id_get_id.argtypes = [c_void_p]
4328isl.isl_ast_expr_copy.restype = c_void_p
4329isl.isl_ast_expr_copy.argtypes = [c_void_p]
4330isl.isl_ast_expr_free.restype = c_void_p
4331isl.isl_ast_expr_free.argtypes = [c_void_p]
4332isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4333isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4334
4335class ast_expr_int(ast_expr):
4336    def __init__(self, *args, **keywords):
4337        if "ptr" in keywords:
4338            self.ctx = keywords["ctx"]
4339            self.ptr = keywords["ptr"]
4340            return
4341        raise Error
4342    def __del__(self):
4343        if hasattr(self, 'ptr'):
4344            isl.isl_ast_expr_free(self.ptr)
4345    def __new__(cls, *args, **keywords):
4346        return super(ast_expr_int, cls).__new__(cls)
4347    def __str__(arg0):
4348        try:
4349            if not arg0.__class__ is ast_expr_int:
4350                arg0 = ast_expr_int(arg0)
4351        except:
4352            raise
4353        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4354        res = cast(ptr, c_char_p).value.decode('ascii')
4355        libc.free(ptr)
4356        return res
4357    def __repr__(self):
4358        s = str(self)
4359        if '"' in s:
4360            return 'isl.ast_expr_int("""%s""")' % s
4361        else:
4362            return 'isl.ast_expr_int("%s")' % s
4363    def val(arg0):
4364        try:
4365            if not arg0.__class__ is ast_expr:
4366                arg0 = ast_expr(arg0)
4367        except:
4368            raise
4369        ctx = arg0.ctx
4370        res = isl.isl_ast_expr_int_get_val(arg0.ptr)
4371        obj = val(ctx=ctx, ptr=res)
4372        return obj
4373    def get_val(arg0):
4374        return arg0.val()
4375
4376isl.isl_ast_expr_int_get_val.restype = c_void_p
4377isl.isl_ast_expr_int_get_val.argtypes = [c_void_p]
4378isl.isl_ast_expr_copy.restype = c_void_p
4379isl.isl_ast_expr_copy.argtypes = [c_void_p]
4380isl.isl_ast_expr_free.restype = c_void_p
4381isl.isl_ast_expr_free.argtypes = [c_void_p]
4382isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4383isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4384
4385class ast_expr_op(ast_expr):
4386    def __init__(self, *args, **keywords):
4387        if "ptr" in keywords:
4388            self.ctx = keywords["ctx"]
4389            self.ptr = keywords["ptr"]
4390            return
4391        if len(args) == 1 and isinstance(args[0], ast_expr_op_and):
4392            self.ctx = args[0].ctx
4393            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4394            return
4395        if len(args) == 1 and isinstance(args[0], ast_expr_op_and_then):
4396            self.ctx = args[0].ctx
4397            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4398            return
4399        if len(args) == 1 and isinstance(args[0], ast_expr_op_or):
4400            self.ctx = args[0].ctx
4401            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4402            return
4403        if len(args) == 1 and isinstance(args[0], ast_expr_op_or_else):
4404            self.ctx = args[0].ctx
4405            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4406            return
4407        if len(args) == 1 and isinstance(args[0], ast_expr_op_max):
4408            self.ctx = args[0].ctx
4409            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4410            return
4411        if len(args) == 1 and isinstance(args[0], ast_expr_op_min):
4412            self.ctx = args[0].ctx
4413            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4414            return
4415        if len(args) == 1 and isinstance(args[0], ast_expr_op_minus):
4416            self.ctx = args[0].ctx
4417            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4418            return
4419        if len(args) == 1 and isinstance(args[0], ast_expr_op_add):
4420            self.ctx = args[0].ctx
4421            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4422            return
4423        if len(args) == 1 and isinstance(args[0], ast_expr_op_sub):
4424            self.ctx = args[0].ctx
4425            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4426            return
4427        if len(args) == 1 and isinstance(args[0], ast_expr_op_mul):
4428            self.ctx = args[0].ctx
4429            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4430            return
4431        if len(args) == 1 and isinstance(args[0], ast_expr_op_div):
4432            self.ctx = args[0].ctx
4433            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4434            return
4435        if len(args) == 1 and isinstance(args[0], ast_expr_op_fdiv_q):
4436            self.ctx = args[0].ctx
4437            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4438            return
4439        if len(args) == 1 and isinstance(args[0], ast_expr_op_pdiv_q):
4440            self.ctx = args[0].ctx
4441            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4442            return
4443        if len(args) == 1 and isinstance(args[0], ast_expr_op_pdiv_r):
4444            self.ctx = args[0].ctx
4445            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4446            return
4447        if len(args) == 1 and isinstance(args[0], ast_expr_op_zdiv_r):
4448            self.ctx = args[0].ctx
4449            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4450            return
4451        if len(args) == 1 and isinstance(args[0], ast_expr_op_cond):
4452            self.ctx = args[0].ctx
4453            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4454            return
4455        if len(args) == 1 and isinstance(args[0], ast_expr_op_select):
4456            self.ctx = args[0].ctx
4457            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4458            return
4459        if len(args) == 1 and isinstance(args[0], ast_expr_op_eq):
4460            self.ctx = args[0].ctx
4461            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4462            return
4463        if len(args) == 1 and isinstance(args[0], ast_expr_op_le):
4464            self.ctx = args[0].ctx
4465            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4466            return
4467        if len(args) == 1 and isinstance(args[0], ast_expr_op_lt):
4468            self.ctx = args[0].ctx
4469            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4470            return
4471        if len(args) == 1 and isinstance(args[0], ast_expr_op_ge):
4472            self.ctx = args[0].ctx
4473            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4474            return
4475        if len(args) == 1 and isinstance(args[0], ast_expr_op_gt):
4476            self.ctx = args[0].ctx
4477            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4478            return
4479        if len(args) == 1 and isinstance(args[0], ast_expr_op_call):
4480            self.ctx = args[0].ctx
4481            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4482            return
4483        if len(args) == 1 and isinstance(args[0], ast_expr_op_access):
4484            self.ctx = args[0].ctx
4485            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4486            return
4487        if len(args) == 1 and isinstance(args[0], ast_expr_op_member):
4488            self.ctx = args[0].ctx
4489            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4490            return
4491        if len(args) == 1 and isinstance(args[0], ast_expr_op_address_of):
4492            self.ctx = args[0].ctx
4493            self.ptr = isl.isl_ast_expr_copy(args[0].ptr)
4494            return
4495        raise Error
4496    def __del__(self):
4497        if hasattr(self, 'ptr'):
4498            isl.isl_ast_expr_free(self.ptr)
4499    def __new__(cls, *args, **keywords):
4500        if "ptr" in keywords:
4501            type = isl.isl_ast_expr_op_get_type(keywords["ptr"])
4502            if type == 0:
4503                return ast_expr_op_and(**keywords)
4504            if type == 1:
4505                return ast_expr_op_and_then(**keywords)
4506            if type == 2:
4507                return ast_expr_op_or(**keywords)
4508            if type == 3:
4509                return ast_expr_op_or_else(**keywords)
4510            if type == 4:
4511                return ast_expr_op_max(**keywords)
4512            if type == 5:
4513                return ast_expr_op_min(**keywords)
4514            if type == 6:
4515                return ast_expr_op_minus(**keywords)
4516            if type == 7:
4517                return ast_expr_op_add(**keywords)
4518            if type == 8:
4519                return ast_expr_op_sub(**keywords)
4520            if type == 9:
4521                return ast_expr_op_mul(**keywords)
4522            if type == 10:
4523                return ast_expr_op_div(**keywords)
4524            if type == 11:
4525                return ast_expr_op_fdiv_q(**keywords)
4526            if type == 12:
4527                return ast_expr_op_pdiv_q(**keywords)
4528            if type == 13:
4529                return ast_expr_op_pdiv_r(**keywords)
4530            if type == 14:
4531                return ast_expr_op_zdiv_r(**keywords)
4532            if type == 15:
4533                return ast_expr_op_cond(**keywords)
4534            if type == 16:
4535                return ast_expr_op_select(**keywords)
4536            if type == 17:
4537                return ast_expr_op_eq(**keywords)
4538            if type == 18:
4539                return ast_expr_op_le(**keywords)
4540            if type == 19:
4541                return ast_expr_op_lt(**keywords)
4542            if type == 20:
4543                return ast_expr_op_ge(**keywords)
4544            if type == 21:
4545                return ast_expr_op_gt(**keywords)
4546            if type == 22:
4547                return ast_expr_op_call(**keywords)
4548            if type == 23:
4549                return ast_expr_op_access(**keywords)
4550            if type == 24:
4551                return ast_expr_op_member(**keywords)
4552            if type == 25:
4553                return ast_expr_op_address_of(**keywords)
4554            raise
4555        return super(ast_expr_op, cls).__new__(cls)
4556    def __str__(arg0):
4557        try:
4558            if not arg0.__class__ is ast_expr_op:
4559                arg0 = ast_expr_op(arg0)
4560        except:
4561            raise
4562        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4563        res = cast(ptr, c_char_p).value.decode('ascii')
4564        libc.free(ptr)
4565        return res
4566    def __repr__(self):
4567        s = str(self)
4568        if '"' in s:
4569            return 'isl.ast_expr_op("""%s""")' % s
4570        else:
4571            return 'isl.ast_expr_op("%s")' % s
4572    def arg(arg0, arg1):
4573        try:
4574            if not arg0.__class__ is ast_expr:
4575                arg0 = ast_expr(arg0)
4576        except:
4577            raise
4578        ctx = arg0.ctx
4579        res = isl.isl_ast_expr_op_get_arg(arg0.ptr, arg1)
4580        obj = ast_expr(ctx=ctx, ptr=res)
4581        return obj
4582    def get_arg(arg0, arg1):
4583        return arg0.arg(arg1)
4584    def n_arg(arg0):
4585        try:
4586            if not arg0.__class__ is ast_expr:
4587                arg0 = ast_expr(arg0)
4588        except:
4589            raise
4590        ctx = arg0.ctx
4591        res = isl.isl_ast_expr_op_get_n_arg(arg0.ptr)
4592        if res < 0:
4593            raise
4594        return int(res)
4595    def get_n_arg(arg0):
4596        return arg0.n_arg()
4597
4598isl.isl_ast_expr_op_get_arg.restype = c_void_p
4599isl.isl_ast_expr_op_get_arg.argtypes = [c_void_p, c_int]
4600isl.isl_ast_expr_op_get_n_arg.argtypes = [c_void_p]
4601isl.isl_ast_expr_copy.restype = c_void_p
4602isl.isl_ast_expr_copy.argtypes = [c_void_p]
4603isl.isl_ast_expr_free.restype = c_void_p
4604isl.isl_ast_expr_free.argtypes = [c_void_p]
4605isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4606isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4607isl.isl_ast_expr_op_get_type.argtypes = [c_void_p]
4608
4609class ast_expr_op_access(ast_expr_op):
4610    def __init__(self, *args, **keywords):
4611        if "ptr" in keywords:
4612            self.ctx = keywords["ctx"]
4613            self.ptr = keywords["ptr"]
4614            return
4615        raise Error
4616    def __del__(self):
4617        if hasattr(self, 'ptr'):
4618            isl.isl_ast_expr_free(self.ptr)
4619    def __new__(cls, *args, **keywords):
4620        return super(ast_expr_op_access, cls).__new__(cls)
4621    def __str__(arg0):
4622        try:
4623            if not arg0.__class__ is ast_expr_op_access:
4624                arg0 = ast_expr_op_access(arg0)
4625        except:
4626            raise
4627        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4628        res = cast(ptr, c_char_p).value.decode('ascii')
4629        libc.free(ptr)
4630        return res
4631    def __repr__(self):
4632        s = str(self)
4633        if '"' in s:
4634            return 'isl.ast_expr_op_access("""%s""")' % s
4635        else:
4636            return 'isl.ast_expr_op_access("%s")' % s
4637
4638isl.isl_ast_expr_copy.restype = c_void_p
4639isl.isl_ast_expr_copy.argtypes = [c_void_p]
4640isl.isl_ast_expr_free.restype = c_void_p
4641isl.isl_ast_expr_free.argtypes = [c_void_p]
4642isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4643isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4644
4645class ast_expr_op_add(ast_expr_op):
4646    def __init__(self, *args, **keywords):
4647        if "ptr" in keywords:
4648            self.ctx = keywords["ctx"]
4649            self.ptr = keywords["ptr"]
4650            return
4651        raise Error
4652    def __del__(self):
4653        if hasattr(self, 'ptr'):
4654            isl.isl_ast_expr_free(self.ptr)
4655    def __new__(cls, *args, **keywords):
4656        return super(ast_expr_op_add, cls).__new__(cls)
4657    def __str__(arg0):
4658        try:
4659            if not arg0.__class__ is ast_expr_op_add:
4660                arg0 = ast_expr_op_add(arg0)
4661        except:
4662            raise
4663        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4664        res = cast(ptr, c_char_p).value.decode('ascii')
4665        libc.free(ptr)
4666        return res
4667    def __repr__(self):
4668        s = str(self)
4669        if '"' in s:
4670            return 'isl.ast_expr_op_add("""%s""")' % s
4671        else:
4672            return 'isl.ast_expr_op_add("%s")' % s
4673
4674isl.isl_ast_expr_copy.restype = c_void_p
4675isl.isl_ast_expr_copy.argtypes = [c_void_p]
4676isl.isl_ast_expr_free.restype = c_void_p
4677isl.isl_ast_expr_free.argtypes = [c_void_p]
4678isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4679isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4680
4681class ast_expr_op_address_of(ast_expr_op):
4682    def __init__(self, *args, **keywords):
4683        if "ptr" in keywords:
4684            self.ctx = keywords["ctx"]
4685            self.ptr = keywords["ptr"]
4686            return
4687        raise Error
4688    def __del__(self):
4689        if hasattr(self, 'ptr'):
4690            isl.isl_ast_expr_free(self.ptr)
4691    def __new__(cls, *args, **keywords):
4692        return super(ast_expr_op_address_of, cls).__new__(cls)
4693    def __str__(arg0):
4694        try:
4695            if not arg0.__class__ is ast_expr_op_address_of:
4696                arg0 = ast_expr_op_address_of(arg0)
4697        except:
4698            raise
4699        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4700        res = cast(ptr, c_char_p).value.decode('ascii')
4701        libc.free(ptr)
4702        return res
4703    def __repr__(self):
4704        s = str(self)
4705        if '"' in s:
4706            return 'isl.ast_expr_op_address_of("""%s""")' % s
4707        else:
4708            return 'isl.ast_expr_op_address_of("%s")' % s
4709
4710isl.isl_ast_expr_copy.restype = c_void_p
4711isl.isl_ast_expr_copy.argtypes = [c_void_p]
4712isl.isl_ast_expr_free.restype = c_void_p
4713isl.isl_ast_expr_free.argtypes = [c_void_p]
4714isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4715isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4716
4717class ast_expr_op_and(ast_expr_op):
4718    def __init__(self, *args, **keywords):
4719        if "ptr" in keywords:
4720            self.ctx = keywords["ctx"]
4721            self.ptr = keywords["ptr"]
4722            return
4723        raise Error
4724    def __del__(self):
4725        if hasattr(self, 'ptr'):
4726            isl.isl_ast_expr_free(self.ptr)
4727    def __new__(cls, *args, **keywords):
4728        return super(ast_expr_op_and, cls).__new__(cls)
4729    def __str__(arg0):
4730        try:
4731            if not arg0.__class__ is ast_expr_op_and:
4732                arg0 = ast_expr_op_and(arg0)
4733        except:
4734            raise
4735        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4736        res = cast(ptr, c_char_p).value.decode('ascii')
4737        libc.free(ptr)
4738        return res
4739    def __repr__(self):
4740        s = str(self)
4741        if '"' in s:
4742            return 'isl.ast_expr_op_and("""%s""")' % s
4743        else:
4744            return 'isl.ast_expr_op_and("%s")' % s
4745
4746isl.isl_ast_expr_copy.restype = c_void_p
4747isl.isl_ast_expr_copy.argtypes = [c_void_p]
4748isl.isl_ast_expr_free.restype = c_void_p
4749isl.isl_ast_expr_free.argtypes = [c_void_p]
4750isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4751isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4752
4753class ast_expr_op_and_then(ast_expr_op):
4754    def __init__(self, *args, **keywords):
4755        if "ptr" in keywords:
4756            self.ctx = keywords["ctx"]
4757            self.ptr = keywords["ptr"]
4758            return
4759        raise Error
4760    def __del__(self):
4761        if hasattr(self, 'ptr'):
4762            isl.isl_ast_expr_free(self.ptr)
4763    def __new__(cls, *args, **keywords):
4764        return super(ast_expr_op_and_then, cls).__new__(cls)
4765    def __str__(arg0):
4766        try:
4767            if not arg0.__class__ is ast_expr_op_and_then:
4768                arg0 = ast_expr_op_and_then(arg0)
4769        except:
4770            raise
4771        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4772        res = cast(ptr, c_char_p).value.decode('ascii')
4773        libc.free(ptr)
4774        return res
4775    def __repr__(self):
4776        s = str(self)
4777        if '"' in s:
4778            return 'isl.ast_expr_op_and_then("""%s""")' % s
4779        else:
4780            return 'isl.ast_expr_op_and_then("%s")' % s
4781
4782isl.isl_ast_expr_copy.restype = c_void_p
4783isl.isl_ast_expr_copy.argtypes = [c_void_p]
4784isl.isl_ast_expr_free.restype = c_void_p
4785isl.isl_ast_expr_free.argtypes = [c_void_p]
4786isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4787isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4788
4789class ast_expr_op_call(ast_expr_op):
4790    def __init__(self, *args, **keywords):
4791        if "ptr" in keywords:
4792            self.ctx = keywords["ctx"]
4793            self.ptr = keywords["ptr"]
4794            return
4795        raise Error
4796    def __del__(self):
4797        if hasattr(self, 'ptr'):
4798            isl.isl_ast_expr_free(self.ptr)
4799    def __new__(cls, *args, **keywords):
4800        return super(ast_expr_op_call, cls).__new__(cls)
4801    def __str__(arg0):
4802        try:
4803            if not arg0.__class__ is ast_expr_op_call:
4804                arg0 = ast_expr_op_call(arg0)
4805        except:
4806            raise
4807        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4808        res = cast(ptr, c_char_p).value.decode('ascii')
4809        libc.free(ptr)
4810        return res
4811    def __repr__(self):
4812        s = str(self)
4813        if '"' in s:
4814            return 'isl.ast_expr_op_call("""%s""")' % s
4815        else:
4816            return 'isl.ast_expr_op_call("%s")' % s
4817
4818isl.isl_ast_expr_copy.restype = c_void_p
4819isl.isl_ast_expr_copy.argtypes = [c_void_p]
4820isl.isl_ast_expr_free.restype = c_void_p
4821isl.isl_ast_expr_free.argtypes = [c_void_p]
4822isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4823isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4824
4825class ast_expr_op_cond(ast_expr_op):
4826    def __init__(self, *args, **keywords):
4827        if "ptr" in keywords:
4828            self.ctx = keywords["ctx"]
4829            self.ptr = keywords["ptr"]
4830            return
4831        raise Error
4832    def __del__(self):
4833        if hasattr(self, 'ptr'):
4834            isl.isl_ast_expr_free(self.ptr)
4835    def __new__(cls, *args, **keywords):
4836        return super(ast_expr_op_cond, cls).__new__(cls)
4837    def __str__(arg0):
4838        try:
4839            if not arg0.__class__ is ast_expr_op_cond:
4840                arg0 = ast_expr_op_cond(arg0)
4841        except:
4842            raise
4843        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4844        res = cast(ptr, c_char_p).value.decode('ascii')
4845        libc.free(ptr)
4846        return res
4847    def __repr__(self):
4848        s = str(self)
4849        if '"' in s:
4850            return 'isl.ast_expr_op_cond("""%s""")' % s
4851        else:
4852            return 'isl.ast_expr_op_cond("%s")' % s
4853
4854isl.isl_ast_expr_copy.restype = c_void_p
4855isl.isl_ast_expr_copy.argtypes = [c_void_p]
4856isl.isl_ast_expr_free.restype = c_void_p
4857isl.isl_ast_expr_free.argtypes = [c_void_p]
4858isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4859isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4860
4861class ast_expr_op_div(ast_expr_op):
4862    def __init__(self, *args, **keywords):
4863        if "ptr" in keywords:
4864            self.ctx = keywords["ctx"]
4865            self.ptr = keywords["ptr"]
4866            return
4867        raise Error
4868    def __del__(self):
4869        if hasattr(self, 'ptr'):
4870            isl.isl_ast_expr_free(self.ptr)
4871    def __new__(cls, *args, **keywords):
4872        return super(ast_expr_op_div, cls).__new__(cls)
4873    def __str__(arg0):
4874        try:
4875            if not arg0.__class__ is ast_expr_op_div:
4876                arg0 = ast_expr_op_div(arg0)
4877        except:
4878            raise
4879        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4880        res = cast(ptr, c_char_p).value.decode('ascii')
4881        libc.free(ptr)
4882        return res
4883    def __repr__(self):
4884        s = str(self)
4885        if '"' in s:
4886            return 'isl.ast_expr_op_div("""%s""")' % s
4887        else:
4888            return 'isl.ast_expr_op_div("%s")' % s
4889
4890isl.isl_ast_expr_copy.restype = c_void_p
4891isl.isl_ast_expr_copy.argtypes = [c_void_p]
4892isl.isl_ast_expr_free.restype = c_void_p
4893isl.isl_ast_expr_free.argtypes = [c_void_p]
4894isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4895isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4896
4897class ast_expr_op_eq(ast_expr_op):
4898    def __init__(self, *args, **keywords):
4899        if "ptr" in keywords:
4900            self.ctx = keywords["ctx"]
4901            self.ptr = keywords["ptr"]
4902            return
4903        raise Error
4904    def __del__(self):
4905        if hasattr(self, 'ptr'):
4906            isl.isl_ast_expr_free(self.ptr)
4907    def __new__(cls, *args, **keywords):
4908        return super(ast_expr_op_eq, cls).__new__(cls)
4909    def __str__(arg0):
4910        try:
4911            if not arg0.__class__ is ast_expr_op_eq:
4912                arg0 = ast_expr_op_eq(arg0)
4913        except:
4914            raise
4915        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4916        res = cast(ptr, c_char_p).value.decode('ascii')
4917        libc.free(ptr)
4918        return res
4919    def __repr__(self):
4920        s = str(self)
4921        if '"' in s:
4922            return 'isl.ast_expr_op_eq("""%s""")' % s
4923        else:
4924            return 'isl.ast_expr_op_eq("%s")' % s
4925
4926isl.isl_ast_expr_copy.restype = c_void_p
4927isl.isl_ast_expr_copy.argtypes = [c_void_p]
4928isl.isl_ast_expr_free.restype = c_void_p
4929isl.isl_ast_expr_free.argtypes = [c_void_p]
4930isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4931isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4932
4933class ast_expr_op_fdiv_q(ast_expr_op):
4934    def __init__(self, *args, **keywords):
4935        if "ptr" in keywords:
4936            self.ctx = keywords["ctx"]
4937            self.ptr = keywords["ptr"]
4938            return
4939        raise Error
4940    def __del__(self):
4941        if hasattr(self, 'ptr'):
4942            isl.isl_ast_expr_free(self.ptr)
4943    def __new__(cls, *args, **keywords):
4944        return super(ast_expr_op_fdiv_q, cls).__new__(cls)
4945    def __str__(arg0):
4946        try:
4947            if not arg0.__class__ is ast_expr_op_fdiv_q:
4948                arg0 = ast_expr_op_fdiv_q(arg0)
4949        except:
4950            raise
4951        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4952        res = cast(ptr, c_char_p).value.decode('ascii')
4953        libc.free(ptr)
4954        return res
4955    def __repr__(self):
4956        s = str(self)
4957        if '"' in s:
4958            return 'isl.ast_expr_op_fdiv_q("""%s""")' % s
4959        else:
4960            return 'isl.ast_expr_op_fdiv_q("%s")' % s
4961
4962isl.isl_ast_expr_copy.restype = c_void_p
4963isl.isl_ast_expr_copy.argtypes = [c_void_p]
4964isl.isl_ast_expr_free.restype = c_void_p
4965isl.isl_ast_expr_free.argtypes = [c_void_p]
4966isl.isl_ast_expr_to_str.restype = POINTER(c_char)
4967isl.isl_ast_expr_to_str.argtypes = [c_void_p]
4968
4969class ast_expr_op_ge(ast_expr_op):
4970    def __init__(self, *args, **keywords):
4971        if "ptr" in keywords:
4972            self.ctx = keywords["ctx"]
4973            self.ptr = keywords["ptr"]
4974            return
4975        raise Error
4976    def __del__(self):
4977        if hasattr(self, 'ptr'):
4978            isl.isl_ast_expr_free(self.ptr)
4979    def __new__(cls, *args, **keywords):
4980        return super(ast_expr_op_ge, cls).__new__(cls)
4981    def __str__(arg0):
4982        try:
4983            if not arg0.__class__ is ast_expr_op_ge:
4984                arg0 = ast_expr_op_ge(arg0)
4985        except:
4986            raise
4987        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
4988        res = cast(ptr, c_char_p).value.decode('ascii')
4989        libc.free(ptr)
4990        return res
4991    def __repr__(self):
4992        s = str(self)
4993        if '"' in s:
4994            return 'isl.ast_expr_op_ge("""%s""")' % s
4995        else:
4996            return 'isl.ast_expr_op_ge("%s")' % s
4997
4998isl.isl_ast_expr_copy.restype = c_void_p
4999isl.isl_ast_expr_copy.argtypes = [c_void_p]
5000isl.isl_ast_expr_free.restype = c_void_p
5001isl.isl_ast_expr_free.argtypes = [c_void_p]
5002isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5003isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5004
5005class ast_expr_op_gt(ast_expr_op):
5006    def __init__(self, *args, **keywords):
5007        if "ptr" in keywords:
5008            self.ctx = keywords["ctx"]
5009            self.ptr = keywords["ptr"]
5010            return
5011        raise Error
5012    def __del__(self):
5013        if hasattr(self, 'ptr'):
5014            isl.isl_ast_expr_free(self.ptr)
5015    def __new__(cls, *args, **keywords):
5016        return super(ast_expr_op_gt, cls).__new__(cls)
5017    def __str__(arg0):
5018        try:
5019            if not arg0.__class__ is ast_expr_op_gt:
5020                arg0 = ast_expr_op_gt(arg0)
5021        except:
5022            raise
5023        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5024        res = cast(ptr, c_char_p).value.decode('ascii')
5025        libc.free(ptr)
5026        return res
5027    def __repr__(self):
5028        s = str(self)
5029        if '"' in s:
5030            return 'isl.ast_expr_op_gt("""%s""")' % s
5031        else:
5032            return 'isl.ast_expr_op_gt("%s")' % s
5033
5034isl.isl_ast_expr_copy.restype = c_void_p
5035isl.isl_ast_expr_copy.argtypes = [c_void_p]
5036isl.isl_ast_expr_free.restype = c_void_p
5037isl.isl_ast_expr_free.argtypes = [c_void_p]
5038isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5039isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5040
5041class ast_expr_op_le(ast_expr_op):
5042    def __init__(self, *args, **keywords):
5043        if "ptr" in keywords:
5044            self.ctx = keywords["ctx"]
5045            self.ptr = keywords["ptr"]
5046            return
5047        raise Error
5048    def __del__(self):
5049        if hasattr(self, 'ptr'):
5050            isl.isl_ast_expr_free(self.ptr)
5051    def __new__(cls, *args, **keywords):
5052        return super(ast_expr_op_le, cls).__new__(cls)
5053    def __str__(arg0):
5054        try:
5055            if not arg0.__class__ is ast_expr_op_le:
5056                arg0 = ast_expr_op_le(arg0)
5057        except:
5058            raise
5059        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5060        res = cast(ptr, c_char_p).value.decode('ascii')
5061        libc.free(ptr)
5062        return res
5063    def __repr__(self):
5064        s = str(self)
5065        if '"' in s:
5066            return 'isl.ast_expr_op_le("""%s""")' % s
5067        else:
5068            return 'isl.ast_expr_op_le("%s")' % s
5069
5070isl.isl_ast_expr_copy.restype = c_void_p
5071isl.isl_ast_expr_copy.argtypes = [c_void_p]
5072isl.isl_ast_expr_free.restype = c_void_p
5073isl.isl_ast_expr_free.argtypes = [c_void_p]
5074isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5075isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5076
5077class ast_expr_op_lt(ast_expr_op):
5078    def __init__(self, *args, **keywords):
5079        if "ptr" in keywords:
5080            self.ctx = keywords["ctx"]
5081            self.ptr = keywords["ptr"]
5082            return
5083        raise Error
5084    def __del__(self):
5085        if hasattr(self, 'ptr'):
5086            isl.isl_ast_expr_free(self.ptr)
5087    def __new__(cls, *args, **keywords):
5088        return super(ast_expr_op_lt, cls).__new__(cls)
5089    def __str__(arg0):
5090        try:
5091            if not arg0.__class__ is ast_expr_op_lt:
5092                arg0 = ast_expr_op_lt(arg0)
5093        except:
5094            raise
5095        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5096        res = cast(ptr, c_char_p).value.decode('ascii')
5097        libc.free(ptr)
5098        return res
5099    def __repr__(self):
5100        s = str(self)
5101        if '"' in s:
5102            return 'isl.ast_expr_op_lt("""%s""")' % s
5103        else:
5104            return 'isl.ast_expr_op_lt("%s")' % s
5105
5106isl.isl_ast_expr_copy.restype = c_void_p
5107isl.isl_ast_expr_copy.argtypes = [c_void_p]
5108isl.isl_ast_expr_free.restype = c_void_p
5109isl.isl_ast_expr_free.argtypes = [c_void_p]
5110isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5111isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5112
5113class ast_expr_op_max(ast_expr_op):
5114    def __init__(self, *args, **keywords):
5115        if "ptr" in keywords:
5116            self.ctx = keywords["ctx"]
5117            self.ptr = keywords["ptr"]
5118            return
5119        raise Error
5120    def __del__(self):
5121        if hasattr(self, 'ptr'):
5122            isl.isl_ast_expr_free(self.ptr)
5123    def __new__(cls, *args, **keywords):
5124        return super(ast_expr_op_max, cls).__new__(cls)
5125    def __str__(arg0):
5126        try:
5127            if not arg0.__class__ is ast_expr_op_max:
5128                arg0 = ast_expr_op_max(arg0)
5129        except:
5130            raise
5131        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5132        res = cast(ptr, c_char_p).value.decode('ascii')
5133        libc.free(ptr)
5134        return res
5135    def __repr__(self):
5136        s = str(self)
5137        if '"' in s:
5138            return 'isl.ast_expr_op_max("""%s""")' % s
5139        else:
5140            return 'isl.ast_expr_op_max("%s")' % s
5141
5142isl.isl_ast_expr_copy.restype = c_void_p
5143isl.isl_ast_expr_copy.argtypes = [c_void_p]
5144isl.isl_ast_expr_free.restype = c_void_p
5145isl.isl_ast_expr_free.argtypes = [c_void_p]
5146isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5147isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5148
5149class ast_expr_op_member(ast_expr_op):
5150    def __init__(self, *args, **keywords):
5151        if "ptr" in keywords:
5152            self.ctx = keywords["ctx"]
5153            self.ptr = keywords["ptr"]
5154            return
5155        raise Error
5156    def __del__(self):
5157        if hasattr(self, 'ptr'):
5158            isl.isl_ast_expr_free(self.ptr)
5159    def __new__(cls, *args, **keywords):
5160        return super(ast_expr_op_member, cls).__new__(cls)
5161    def __str__(arg0):
5162        try:
5163            if not arg0.__class__ is ast_expr_op_member:
5164                arg0 = ast_expr_op_member(arg0)
5165        except:
5166            raise
5167        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5168        res = cast(ptr, c_char_p).value.decode('ascii')
5169        libc.free(ptr)
5170        return res
5171    def __repr__(self):
5172        s = str(self)
5173        if '"' in s:
5174            return 'isl.ast_expr_op_member("""%s""")' % s
5175        else:
5176            return 'isl.ast_expr_op_member("%s")' % s
5177
5178isl.isl_ast_expr_copy.restype = c_void_p
5179isl.isl_ast_expr_copy.argtypes = [c_void_p]
5180isl.isl_ast_expr_free.restype = c_void_p
5181isl.isl_ast_expr_free.argtypes = [c_void_p]
5182isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5183isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5184
5185class ast_expr_op_min(ast_expr_op):
5186    def __init__(self, *args, **keywords):
5187        if "ptr" in keywords:
5188            self.ctx = keywords["ctx"]
5189            self.ptr = keywords["ptr"]
5190            return
5191        raise Error
5192    def __del__(self):
5193        if hasattr(self, 'ptr'):
5194            isl.isl_ast_expr_free(self.ptr)
5195    def __new__(cls, *args, **keywords):
5196        return super(ast_expr_op_min, cls).__new__(cls)
5197    def __str__(arg0):
5198        try:
5199            if not arg0.__class__ is ast_expr_op_min:
5200                arg0 = ast_expr_op_min(arg0)
5201        except:
5202            raise
5203        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5204        res = cast(ptr, c_char_p).value.decode('ascii')
5205        libc.free(ptr)
5206        return res
5207    def __repr__(self):
5208        s = str(self)
5209        if '"' in s:
5210            return 'isl.ast_expr_op_min("""%s""")' % s
5211        else:
5212            return 'isl.ast_expr_op_min("%s")' % s
5213
5214isl.isl_ast_expr_copy.restype = c_void_p
5215isl.isl_ast_expr_copy.argtypes = [c_void_p]
5216isl.isl_ast_expr_free.restype = c_void_p
5217isl.isl_ast_expr_free.argtypes = [c_void_p]
5218isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5219isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5220
5221class ast_expr_op_minus(ast_expr_op):
5222    def __init__(self, *args, **keywords):
5223        if "ptr" in keywords:
5224            self.ctx = keywords["ctx"]
5225            self.ptr = keywords["ptr"]
5226            return
5227        raise Error
5228    def __del__(self):
5229        if hasattr(self, 'ptr'):
5230            isl.isl_ast_expr_free(self.ptr)
5231    def __new__(cls, *args, **keywords):
5232        return super(ast_expr_op_minus, cls).__new__(cls)
5233    def __str__(arg0):
5234        try:
5235            if not arg0.__class__ is ast_expr_op_minus:
5236                arg0 = ast_expr_op_minus(arg0)
5237        except:
5238            raise
5239        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5240        res = cast(ptr, c_char_p).value.decode('ascii')
5241        libc.free(ptr)
5242        return res
5243    def __repr__(self):
5244        s = str(self)
5245        if '"' in s:
5246            return 'isl.ast_expr_op_minus("""%s""")' % s
5247        else:
5248            return 'isl.ast_expr_op_minus("%s")' % s
5249
5250isl.isl_ast_expr_copy.restype = c_void_p
5251isl.isl_ast_expr_copy.argtypes = [c_void_p]
5252isl.isl_ast_expr_free.restype = c_void_p
5253isl.isl_ast_expr_free.argtypes = [c_void_p]
5254isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5255isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5256
5257class ast_expr_op_mul(ast_expr_op):
5258    def __init__(self, *args, **keywords):
5259        if "ptr" in keywords:
5260            self.ctx = keywords["ctx"]
5261            self.ptr = keywords["ptr"]
5262            return
5263        raise Error
5264    def __del__(self):
5265        if hasattr(self, 'ptr'):
5266            isl.isl_ast_expr_free(self.ptr)
5267    def __new__(cls, *args, **keywords):
5268        return super(ast_expr_op_mul, cls).__new__(cls)
5269    def __str__(arg0):
5270        try:
5271            if not arg0.__class__ is ast_expr_op_mul:
5272                arg0 = ast_expr_op_mul(arg0)
5273        except:
5274            raise
5275        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5276        res = cast(ptr, c_char_p).value.decode('ascii')
5277        libc.free(ptr)
5278        return res
5279    def __repr__(self):
5280        s = str(self)
5281        if '"' in s:
5282            return 'isl.ast_expr_op_mul("""%s""")' % s
5283        else:
5284            return 'isl.ast_expr_op_mul("%s")' % s
5285
5286isl.isl_ast_expr_copy.restype = c_void_p
5287isl.isl_ast_expr_copy.argtypes = [c_void_p]
5288isl.isl_ast_expr_free.restype = c_void_p
5289isl.isl_ast_expr_free.argtypes = [c_void_p]
5290isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5291isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5292
5293class ast_expr_op_or(ast_expr_op):
5294    def __init__(self, *args, **keywords):
5295        if "ptr" in keywords:
5296            self.ctx = keywords["ctx"]
5297            self.ptr = keywords["ptr"]
5298            return
5299        raise Error
5300    def __del__(self):
5301        if hasattr(self, 'ptr'):
5302            isl.isl_ast_expr_free(self.ptr)
5303    def __new__(cls, *args, **keywords):
5304        return super(ast_expr_op_or, cls).__new__(cls)
5305    def __str__(arg0):
5306        try:
5307            if not arg0.__class__ is ast_expr_op_or:
5308                arg0 = ast_expr_op_or(arg0)
5309        except:
5310            raise
5311        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5312        res = cast(ptr, c_char_p).value.decode('ascii')
5313        libc.free(ptr)
5314        return res
5315    def __repr__(self):
5316        s = str(self)
5317        if '"' in s:
5318            return 'isl.ast_expr_op_or("""%s""")' % s
5319        else:
5320            return 'isl.ast_expr_op_or("%s")' % s
5321
5322isl.isl_ast_expr_copy.restype = c_void_p
5323isl.isl_ast_expr_copy.argtypes = [c_void_p]
5324isl.isl_ast_expr_free.restype = c_void_p
5325isl.isl_ast_expr_free.argtypes = [c_void_p]
5326isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5327isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5328
5329class ast_expr_op_or_else(ast_expr_op):
5330    def __init__(self, *args, **keywords):
5331        if "ptr" in keywords:
5332            self.ctx = keywords["ctx"]
5333            self.ptr = keywords["ptr"]
5334            return
5335        raise Error
5336    def __del__(self):
5337        if hasattr(self, 'ptr'):
5338            isl.isl_ast_expr_free(self.ptr)
5339    def __new__(cls, *args, **keywords):
5340        return super(ast_expr_op_or_else, cls).__new__(cls)
5341    def __str__(arg0):
5342        try:
5343            if not arg0.__class__ is ast_expr_op_or_else:
5344                arg0 = ast_expr_op_or_else(arg0)
5345        except:
5346            raise
5347        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5348        res = cast(ptr, c_char_p).value.decode('ascii')
5349        libc.free(ptr)
5350        return res
5351    def __repr__(self):
5352        s = str(self)
5353        if '"' in s:
5354            return 'isl.ast_expr_op_or_else("""%s""")' % s
5355        else:
5356            return 'isl.ast_expr_op_or_else("%s")' % s
5357
5358isl.isl_ast_expr_copy.restype = c_void_p
5359isl.isl_ast_expr_copy.argtypes = [c_void_p]
5360isl.isl_ast_expr_free.restype = c_void_p
5361isl.isl_ast_expr_free.argtypes = [c_void_p]
5362isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5363isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5364
5365class ast_expr_op_pdiv_q(ast_expr_op):
5366    def __init__(self, *args, **keywords):
5367        if "ptr" in keywords:
5368            self.ctx = keywords["ctx"]
5369            self.ptr = keywords["ptr"]
5370            return
5371        raise Error
5372    def __del__(self):
5373        if hasattr(self, 'ptr'):
5374            isl.isl_ast_expr_free(self.ptr)
5375    def __new__(cls, *args, **keywords):
5376        return super(ast_expr_op_pdiv_q, cls).__new__(cls)
5377    def __str__(arg0):
5378        try:
5379            if not arg0.__class__ is ast_expr_op_pdiv_q:
5380                arg0 = ast_expr_op_pdiv_q(arg0)
5381        except:
5382            raise
5383        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5384        res = cast(ptr, c_char_p).value.decode('ascii')
5385        libc.free(ptr)
5386        return res
5387    def __repr__(self):
5388        s = str(self)
5389        if '"' in s:
5390            return 'isl.ast_expr_op_pdiv_q("""%s""")' % s
5391        else:
5392            return 'isl.ast_expr_op_pdiv_q("%s")' % s
5393
5394isl.isl_ast_expr_copy.restype = c_void_p
5395isl.isl_ast_expr_copy.argtypes = [c_void_p]
5396isl.isl_ast_expr_free.restype = c_void_p
5397isl.isl_ast_expr_free.argtypes = [c_void_p]
5398isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5399isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5400
5401class ast_expr_op_pdiv_r(ast_expr_op):
5402    def __init__(self, *args, **keywords):
5403        if "ptr" in keywords:
5404            self.ctx = keywords["ctx"]
5405            self.ptr = keywords["ptr"]
5406            return
5407        raise Error
5408    def __del__(self):
5409        if hasattr(self, 'ptr'):
5410            isl.isl_ast_expr_free(self.ptr)
5411    def __new__(cls, *args, **keywords):
5412        return super(ast_expr_op_pdiv_r, cls).__new__(cls)
5413    def __str__(arg0):
5414        try:
5415            if not arg0.__class__ is ast_expr_op_pdiv_r:
5416                arg0 = ast_expr_op_pdiv_r(arg0)
5417        except:
5418            raise
5419        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5420        res = cast(ptr, c_char_p).value.decode('ascii')
5421        libc.free(ptr)
5422        return res
5423    def __repr__(self):
5424        s = str(self)
5425        if '"' in s:
5426            return 'isl.ast_expr_op_pdiv_r("""%s""")' % s
5427        else:
5428            return 'isl.ast_expr_op_pdiv_r("%s")' % s
5429
5430isl.isl_ast_expr_copy.restype = c_void_p
5431isl.isl_ast_expr_copy.argtypes = [c_void_p]
5432isl.isl_ast_expr_free.restype = c_void_p
5433isl.isl_ast_expr_free.argtypes = [c_void_p]
5434isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5435isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5436
5437class ast_expr_op_select(ast_expr_op):
5438    def __init__(self, *args, **keywords):
5439        if "ptr" in keywords:
5440            self.ctx = keywords["ctx"]
5441            self.ptr = keywords["ptr"]
5442            return
5443        raise Error
5444    def __del__(self):
5445        if hasattr(self, 'ptr'):
5446            isl.isl_ast_expr_free(self.ptr)
5447    def __new__(cls, *args, **keywords):
5448        return super(ast_expr_op_select, cls).__new__(cls)
5449    def __str__(arg0):
5450        try:
5451            if not arg0.__class__ is ast_expr_op_select:
5452                arg0 = ast_expr_op_select(arg0)
5453        except:
5454            raise
5455        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5456        res = cast(ptr, c_char_p).value.decode('ascii')
5457        libc.free(ptr)
5458        return res
5459    def __repr__(self):
5460        s = str(self)
5461        if '"' in s:
5462            return 'isl.ast_expr_op_select("""%s""")' % s
5463        else:
5464            return 'isl.ast_expr_op_select("%s")' % s
5465
5466isl.isl_ast_expr_copy.restype = c_void_p
5467isl.isl_ast_expr_copy.argtypes = [c_void_p]
5468isl.isl_ast_expr_free.restype = c_void_p
5469isl.isl_ast_expr_free.argtypes = [c_void_p]
5470isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5471isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5472
5473class ast_expr_op_sub(ast_expr_op):
5474    def __init__(self, *args, **keywords):
5475        if "ptr" in keywords:
5476            self.ctx = keywords["ctx"]
5477            self.ptr = keywords["ptr"]
5478            return
5479        raise Error
5480    def __del__(self):
5481        if hasattr(self, 'ptr'):
5482            isl.isl_ast_expr_free(self.ptr)
5483    def __new__(cls, *args, **keywords):
5484        return super(ast_expr_op_sub, cls).__new__(cls)
5485    def __str__(arg0):
5486        try:
5487            if not arg0.__class__ is ast_expr_op_sub:
5488                arg0 = ast_expr_op_sub(arg0)
5489        except:
5490            raise
5491        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5492        res = cast(ptr, c_char_p).value.decode('ascii')
5493        libc.free(ptr)
5494        return res
5495    def __repr__(self):
5496        s = str(self)
5497        if '"' in s:
5498            return 'isl.ast_expr_op_sub("""%s""")' % s
5499        else:
5500            return 'isl.ast_expr_op_sub("%s")' % s
5501
5502isl.isl_ast_expr_copy.restype = c_void_p
5503isl.isl_ast_expr_copy.argtypes = [c_void_p]
5504isl.isl_ast_expr_free.restype = c_void_p
5505isl.isl_ast_expr_free.argtypes = [c_void_p]
5506isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5507isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5508
5509class ast_expr_op_zdiv_r(ast_expr_op):
5510    def __init__(self, *args, **keywords):
5511        if "ptr" in keywords:
5512            self.ctx = keywords["ctx"]
5513            self.ptr = keywords["ptr"]
5514            return
5515        raise Error
5516    def __del__(self):
5517        if hasattr(self, 'ptr'):
5518            isl.isl_ast_expr_free(self.ptr)
5519    def __new__(cls, *args, **keywords):
5520        return super(ast_expr_op_zdiv_r, cls).__new__(cls)
5521    def __str__(arg0):
5522        try:
5523            if not arg0.__class__ is ast_expr_op_zdiv_r:
5524                arg0 = ast_expr_op_zdiv_r(arg0)
5525        except:
5526            raise
5527        ptr = isl.isl_ast_expr_to_str(arg0.ptr)
5528        res = cast(ptr, c_char_p).value.decode('ascii')
5529        libc.free(ptr)
5530        return res
5531    def __repr__(self):
5532        s = str(self)
5533        if '"' in s:
5534            return 'isl.ast_expr_op_zdiv_r("""%s""")' % s
5535        else:
5536            return 'isl.ast_expr_op_zdiv_r("%s")' % s
5537
5538isl.isl_ast_expr_copy.restype = c_void_p
5539isl.isl_ast_expr_copy.argtypes = [c_void_p]
5540isl.isl_ast_expr_free.restype = c_void_p
5541isl.isl_ast_expr_free.argtypes = [c_void_p]
5542isl.isl_ast_expr_to_str.restype = POINTER(c_char)
5543isl.isl_ast_expr_to_str.argtypes = [c_void_p]
5544
5545class ast_node(object):
5546    def __init__(self, *args, **keywords):
5547        if "ptr" in keywords:
5548            self.ctx = keywords["ctx"]
5549            self.ptr = keywords["ptr"]
5550            return
5551        if len(args) == 1 and isinstance(args[0], ast_node_for):
5552            self.ctx = args[0].ctx
5553            self.ptr = isl.isl_ast_node_copy(args[0].ptr)
5554            return
5555        if len(args) == 1 and isinstance(args[0], ast_node_if):
5556            self.ctx = args[0].ctx
5557            self.ptr = isl.isl_ast_node_copy(args[0].ptr)
5558            return
5559        if len(args) == 1 and isinstance(args[0], ast_node_block):
5560            self.ctx = args[0].ctx
5561            self.ptr = isl.isl_ast_node_copy(args[0].ptr)
5562            return
5563        if len(args) == 1 and isinstance(args[0], ast_node_mark):
5564            self.ctx = args[0].ctx
5565            self.ptr = isl.isl_ast_node_copy(args[0].ptr)
5566            return
5567        if len(args) == 1 and isinstance(args[0], ast_node_user):
5568            self.ctx = args[0].ctx
5569            self.ptr = isl.isl_ast_node_copy(args[0].ptr)
5570            return
5571        raise Error
5572    def __del__(self):
5573        if hasattr(self, 'ptr'):
5574            isl.isl_ast_node_free(self.ptr)
5575    def __new__(cls, *args, **keywords):
5576        if "ptr" in keywords:
5577            type = isl.isl_ast_node_get_type(keywords["ptr"])
5578            if type == 1:
5579                return ast_node_for(**keywords)
5580            if type == 2:
5581                return ast_node_if(**keywords)
5582            if type == 3:
5583                return ast_node_block(**keywords)
5584            if type == 4:
5585                return ast_node_mark(**keywords)
5586            if type == 5:
5587                return ast_node_user(**keywords)
5588            raise
5589        return super(ast_node, cls).__new__(cls)
5590    def __str__(arg0):
5591        try:
5592            if not arg0.__class__ is ast_node:
5593                arg0 = ast_node(arg0)
5594        except:
5595            raise
5596        ptr = isl.isl_ast_node_to_str(arg0.ptr)
5597        res = cast(ptr, c_char_p).value.decode('ascii')
5598        libc.free(ptr)
5599        return res
5600    def __repr__(self):
5601        s = str(self)
5602        if '"' in s:
5603            return 'isl.ast_node("""%s""")' % s
5604        else:
5605            return 'isl.ast_node("%s")' % s
5606    def to_C_str(arg0):
5607        try:
5608            if not arg0.__class__ is ast_node:
5609                arg0 = ast_node(arg0)
5610        except:
5611            raise
5612        ctx = arg0.ctx
5613        res = isl.isl_ast_node_to_C_str(arg0.ptr)
5614        if res == 0:
5615            raise
5616        string = cast(res, c_char_p).value.decode('ascii')
5617        libc.free(res)
5618        return string
5619
5620isl.isl_ast_node_to_C_str.restype = POINTER(c_char)
5621isl.isl_ast_node_to_C_str.argtypes = [c_void_p]
5622isl.isl_ast_node_copy.restype = c_void_p
5623isl.isl_ast_node_copy.argtypes = [c_void_p]
5624isl.isl_ast_node_free.restype = c_void_p
5625isl.isl_ast_node_free.argtypes = [c_void_p]
5626isl.isl_ast_node_to_str.restype = POINTER(c_char)
5627isl.isl_ast_node_to_str.argtypes = [c_void_p]
5628isl.isl_ast_node_get_type.argtypes = [c_void_p]
5629
5630class ast_node_block(ast_node):
5631    def __init__(self, *args, **keywords):
5632        if "ptr" in keywords:
5633            self.ctx = keywords["ctx"]
5634            self.ptr = keywords["ptr"]
5635            return
5636        raise Error
5637    def __del__(self):
5638        if hasattr(self, 'ptr'):
5639            isl.isl_ast_node_free(self.ptr)
5640    def __new__(cls, *args, **keywords):
5641        return super(ast_node_block, cls).__new__(cls)
5642    def __str__(arg0):
5643        try:
5644            if not arg0.__class__ is ast_node_block:
5645                arg0 = ast_node_block(arg0)
5646        except:
5647            raise
5648        ptr = isl.isl_ast_node_to_str(arg0.ptr)
5649        res = cast(ptr, c_char_p).value.decode('ascii')
5650        libc.free(ptr)
5651        return res
5652    def __repr__(self):
5653        s = str(self)
5654        if '"' in s:
5655            return 'isl.ast_node_block("""%s""")' % s
5656        else:
5657            return 'isl.ast_node_block("%s")' % s
5658    def children(arg0):
5659        try:
5660            if not arg0.__class__ is ast_node:
5661                arg0 = ast_node(arg0)
5662        except:
5663            raise
5664        ctx = arg0.ctx
5665        res = isl.isl_ast_node_block_get_children(arg0.ptr)
5666        obj = ast_node_list(ctx=ctx, ptr=res)
5667        return obj
5668    def get_children(arg0):
5669        return arg0.children()
5670
5671isl.isl_ast_node_block_get_children.restype = c_void_p
5672isl.isl_ast_node_block_get_children.argtypes = [c_void_p]
5673isl.isl_ast_node_copy.restype = c_void_p
5674isl.isl_ast_node_copy.argtypes = [c_void_p]
5675isl.isl_ast_node_free.restype = c_void_p
5676isl.isl_ast_node_free.argtypes = [c_void_p]
5677isl.isl_ast_node_to_str.restype = POINTER(c_char)
5678isl.isl_ast_node_to_str.argtypes = [c_void_p]
5679
5680class ast_node_for(ast_node):
5681    def __init__(self, *args, **keywords):
5682        if "ptr" in keywords:
5683            self.ctx = keywords["ctx"]
5684            self.ptr = keywords["ptr"]
5685            return
5686        raise Error
5687    def __del__(self):
5688        if hasattr(self, 'ptr'):
5689            isl.isl_ast_node_free(self.ptr)
5690    def __new__(cls, *args, **keywords):
5691        return super(ast_node_for, cls).__new__(cls)
5692    def __str__(arg0):
5693        try:
5694            if not arg0.__class__ is ast_node_for:
5695                arg0 = ast_node_for(arg0)
5696        except:
5697            raise
5698        ptr = isl.isl_ast_node_to_str(arg0.ptr)
5699        res = cast(ptr, c_char_p).value.decode('ascii')
5700        libc.free(ptr)
5701        return res
5702    def __repr__(self):
5703        s = str(self)
5704        if '"' in s:
5705            return 'isl.ast_node_for("""%s""")' % s
5706        else:
5707            return 'isl.ast_node_for("%s")' % s
5708    def body(arg0):
5709        try:
5710            if not arg0.__class__ is ast_node:
5711                arg0 = ast_node(arg0)
5712        except:
5713            raise
5714        ctx = arg0.ctx
5715        res = isl.isl_ast_node_for_get_body(arg0.ptr)
5716        obj = ast_node(ctx=ctx, ptr=res)
5717        return obj
5718    def get_body(arg0):
5719        return arg0.body()
5720    def cond(arg0):
5721        try:
5722            if not arg0.__class__ is ast_node:
5723                arg0 = ast_node(arg0)
5724        except:
5725            raise
5726        ctx = arg0.ctx
5727        res = isl.isl_ast_node_for_get_cond(arg0.ptr)
5728        obj = ast_expr(ctx=ctx, ptr=res)
5729        return obj
5730    def get_cond(arg0):
5731        return arg0.cond()
5732    def inc(arg0):
5733        try:
5734            if not arg0.__class__ is ast_node:
5735                arg0 = ast_node(arg0)
5736        except:
5737            raise
5738        ctx = arg0.ctx
5739        res = isl.isl_ast_node_for_get_inc(arg0.ptr)
5740        obj = ast_expr(ctx=ctx, ptr=res)
5741        return obj
5742    def get_inc(arg0):
5743        return arg0.inc()
5744    def init(arg0):
5745        try:
5746            if not arg0.__class__ is ast_node:
5747                arg0 = ast_node(arg0)
5748        except:
5749            raise
5750        ctx = arg0.ctx
5751        res = isl.isl_ast_node_for_get_init(arg0.ptr)
5752        obj = ast_expr(ctx=ctx, ptr=res)
5753        return obj
5754    def get_init(arg0):
5755        return arg0.init()
5756    def iterator(arg0):
5757        try:
5758            if not arg0.__class__ is ast_node:
5759                arg0 = ast_node(arg0)
5760        except:
5761            raise
5762        ctx = arg0.ctx
5763        res = isl.isl_ast_node_for_get_iterator(arg0.ptr)
5764        obj = ast_expr(ctx=ctx, ptr=res)
5765        return obj
5766    def get_iterator(arg0):
5767        return arg0.iterator()
5768    def is_degenerate(arg0):
5769        try:
5770            if not arg0.__class__ is ast_node:
5771                arg0 = ast_node(arg0)
5772        except:
5773            raise
5774        ctx = arg0.ctx
5775        res = isl.isl_ast_node_for_is_degenerate(arg0.ptr)
5776        if res < 0:
5777            raise
5778        return bool(res)
5779
5780isl.isl_ast_node_for_get_body.restype = c_void_p
5781isl.isl_ast_node_for_get_body.argtypes = [c_void_p]
5782isl.isl_ast_node_for_get_cond.restype = c_void_p
5783isl.isl_ast_node_for_get_cond.argtypes = [c_void_p]
5784isl.isl_ast_node_for_get_inc.restype = c_void_p
5785isl.isl_ast_node_for_get_inc.argtypes = [c_void_p]
5786isl.isl_ast_node_for_get_init.restype = c_void_p
5787isl.isl_ast_node_for_get_init.argtypes = [c_void_p]
5788isl.isl_ast_node_for_get_iterator.restype = c_void_p
5789isl.isl_ast_node_for_get_iterator.argtypes = [c_void_p]
5790isl.isl_ast_node_for_is_degenerate.argtypes = [c_void_p]
5791isl.isl_ast_node_copy.restype = c_void_p
5792isl.isl_ast_node_copy.argtypes = [c_void_p]
5793isl.isl_ast_node_free.restype = c_void_p
5794isl.isl_ast_node_free.argtypes = [c_void_p]
5795isl.isl_ast_node_to_str.restype = POINTER(c_char)
5796isl.isl_ast_node_to_str.argtypes = [c_void_p]
5797
5798class ast_node_if(ast_node):
5799    def __init__(self, *args, **keywords):
5800        if "ptr" in keywords:
5801            self.ctx = keywords["ctx"]
5802            self.ptr = keywords["ptr"]
5803            return
5804        raise Error
5805    def __del__(self):
5806        if hasattr(self, 'ptr'):
5807            isl.isl_ast_node_free(self.ptr)
5808    def __new__(cls, *args, **keywords):
5809        return super(ast_node_if, cls).__new__(cls)
5810    def __str__(arg0):
5811        try:
5812            if not arg0.__class__ is ast_node_if:
5813                arg0 = ast_node_if(arg0)
5814        except:
5815            raise
5816        ptr = isl.isl_ast_node_to_str(arg0.ptr)
5817        res = cast(ptr, c_char_p).value.decode('ascii')
5818        libc.free(ptr)
5819        return res
5820    def __repr__(self):
5821        s = str(self)
5822        if '"' in s:
5823            return 'isl.ast_node_if("""%s""")' % s
5824        else:
5825            return 'isl.ast_node_if("%s")' % s
5826    def cond(arg0):
5827        try:
5828            if not arg0.__class__ is ast_node:
5829                arg0 = ast_node(arg0)
5830        except:
5831            raise
5832        ctx = arg0.ctx
5833        res = isl.isl_ast_node_if_get_cond(arg0.ptr)
5834        obj = ast_expr(ctx=ctx, ptr=res)
5835        return obj
5836    def get_cond(arg0):
5837        return arg0.cond()
5838    def else_node(arg0):
5839        try:
5840            if not arg0.__class__ is ast_node:
5841                arg0 = ast_node(arg0)
5842        except:
5843            raise
5844        ctx = arg0.ctx
5845        res = isl.isl_ast_node_if_get_else_node(arg0.ptr)
5846        obj = ast_node(ctx=ctx, ptr=res)
5847        return obj
5848    def get_else_node(arg0):
5849        return arg0.else_node()
5850    def then_node(arg0):
5851        try:
5852            if not arg0.__class__ is ast_node:
5853                arg0 = ast_node(arg0)
5854        except:
5855            raise
5856        ctx = arg0.ctx
5857        res = isl.isl_ast_node_if_get_then_node(arg0.ptr)
5858        obj = ast_node(ctx=ctx, ptr=res)
5859        return obj
5860    def get_then_node(arg0):
5861        return arg0.then_node()
5862    def has_else_node(arg0):
5863        try:
5864            if not arg0.__class__ is ast_node:
5865                arg0 = ast_node(arg0)
5866        except:
5867            raise
5868        ctx = arg0.ctx
5869        res = isl.isl_ast_node_if_has_else_node(arg0.ptr)
5870        if res < 0:
5871            raise
5872        return bool(res)
5873
5874isl.isl_ast_node_if_get_cond.restype = c_void_p
5875isl.isl_ast_node_if_get_cond.argtypes = [c_void_p]
5876isl.isl_ast_node_if_get_else_node.restype = c_void_p
5877isl.isl_ast_node_if_get_else_node.argtypes = [c_void_p]
5878isl.isl_ast_node_if_get_then_node.restype = c_void_p
5879isl.isl_ast_node_if_get_then_node.argtypes = [c_void_p]
5880isl.isl_ast_node_if_has_else_node.argtypes = [c_void_p]
5881isl.isl_ast_node_copy.restype = c_void_p
5882isl.isl_ast_node_copy.argtypes = [c_void_p]
5883isl.isl_ast_node_free.restype = c_void_p
5884isl.isl_ast_node_free.argtypes = [c_void_p]
5885isl.isl_ast_node_to_str.restype = POINTER(c_char)
5886isl.isl_ast_node_to_str.argtypes = [c_void_p]
5887
5888class ast_node_list(object):
5889    def __init__(self, *args, **keywords):
5890        if "ptr" in keywords:
5891            self.ctx = keywords["ctx"]
5892            self.ptr = keywords["ptr"]
5893            return
5894        if len(args) == 1 and type(args[0]) == int:
5895            self.ctx = Context.getDefaultInstance()
5896            self.ptr = isl.isl_ast_node_list_alloc(self.ctx, args[0])
5897            return
5898        if len(args) == 1 and args[0].__class__ is ast_node:
5899            self.ctx = Context.getDefaultInstance()
5900            self.ptr = isl.isl_ast_node_list_from_ast_node(isl.isl_ast_node_copy(args[0].ptr))
5901            return
5902        raise Error
5903    def __del__(self):
5904        if hasattr(self, 'ptr'):
5905            isl.isl_ast_node_list_free(self.ptr)
5906    def __str__(arg0):
5907        try:
5908            if not arg0.__class__ is ast_node_list:
5909                arg0 = ast_node_list(arg0)
5910        except:
5911            raise
5912        ptr = isl.isl_ast_node_list_to_str(arg0.ptr)
5913        res = cast(ptr, c_char_p).value.decode('ascii')
5914        libc.free(ptr)
5915        return res
5916    def __repr__(self):
5917        s = str(self)
5918        if '"' in s:
5919            return 'isl.ast_node_list("""%s""")' % s
5920        else:
5921            return 'isl.ast_node_list("%s")' % s
5922    def add(arg0, arg1):
5923        try:
5924            if not arg0.__class__ is ast_node_list:
5925                arg0 = ast_node_list(arg0)
5926        except:
5927            raise
5928        try:
5929            if not arg1.__class__ is ast_node:
5930                arg1 = ast_node(arg1)
5931        except:
5932            raise
5933        ctx = arg0.ctx
5934        res = isl.isl_ast_node_list_add(isl.isl_ast_node_list_copy(arg0.ptr), isl.isl_ast_node_copy(arg1.ptr))
5935        obj = ast_node_list(ctx=ctx, ptr=res)
5936        return obj
5937    def clear(arg0):
5938        try:
5939            if not arg0.__class__ is ast_node_list:
5940                arg0 = ast_node_list(arg0)
5941        except:
5942            raise
5943        ctx = arg0.ctx
5944        res = isl.isl_ast_node_list_clear(isl.isl_ast_node_list_copy(arg0.ptr))
5945        obj = ast_node_list(ctx=ctx, ptr=res)
5946        return obj
5947    def concat(arg0, arg1):
5948        try:
5949            if not arg0.__class__ is ast_node_list:
5950                arg0 = ast_node_list(arg0)
5951        except:
5952            raise
5953        try:
5954            if not arg1.__class__ is ast_node_list:
5955                arg1 = ast_node_list(arg1)
5956        except:
5957            raise
5958        ctx = arg0.ctx
5959        res = isl.isl_ast_node_list_concat(isl.isl_ast_node_list_copy(arg0.ptr), isl.isl_ast_node_list_copy(arg1.ptr))
5960        obj = ast_node_list(ctx=ctx, ptr=res)
5961        return obj
5962    def drop(arg0, arg1, arg2):
5963        try:
5964            if not arg0.__class__ is ast_node_list:
5965                arg0 = ast_node_list(arg0)
5966        except:
5967            raise
5968        ctx = arg0.ctx
5969        res = isl.isl_ast_node_list_drop(isl.isl_ast_node_list_copy(arg0.ptr), arg1, arg2)
5970        obj = ast_node_list(ctx=ctx, ptr=res)
5971        return obj
5972    def foreach(arg0, arg1):
5973        try:
5974            if not arg0.__class__ is ast_node_list:
5975                arg0 = ast_node_list(arg0)
5976        except:
5977            raise
5978        exc_info = [None]
5979        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
5980        def cb_func(cb_arg0, cb_arg1):
5981            cb_arg0 = ast_node(ctx=arg0.ctx, ptr=(cb_arg0))
5982            try:
5983                arg1(cb_arg0)
5984            except:
5985                import sys
5986                exc_info[0] = sys.exc_info()
5987                return -1
5988            return 0
5989        cb = fn(cb_func)
5990        ctx = arg0.ctx
5991        res = isl.isl_ast_node_list_foreach(arg0.ptr, cb, None)
5992        if exc_info[0] != None:
5993            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
5994        if res < 0:
5995            raise
5996    def at(arg0, arg1):
5997        try:
5998            if not arg0.__class__ is ast_node_list:
5999                arg0 = ast_node_list(arg0)
6000        except:
6001            raise
6002        ctx = arg0.ctx
6003        res = isl.isl_ast_node_list_get_at(arg0.ptr, arg1)
6004        obj = ast_node(ctx=ctx, ptr=res)
6005        return obj
6006    def get_at(arg0, arg1):
6007        return arg0.at(arg1)
6008    def insert(arg0, arg1, arg2):
6009        try:
6010            if not arg0.__class__ is ast_node_list:
6011                arg0 = ast_node_list(arg0)
6012        except:
6013            raise
6014        try:
6015            if not arg2.__class__ is ast_node:
6016                arg2 = ast_node(arg2)
6017        except:
6018            raise
6019        ctx = arg0.ctx
6020        res = isl.isl_ast_node_list_insert(isl.isl_ast_node_list_copy(arg0.ptr), arg1, isl.isl_ast_node_copy(arg2.ptr))
6021        obj = ast_node_list(ctx=ctx, ptr=res)
6022        return obj
6023    def size(arg0):
6024        try:
6025            if not arg0.__class__ is ast_node_list:
6026                arg0 = ast_node_list(arg0)
6027        except:
6028            raise
6029        ctx = arg0.ctx
6030        res = isl.isl_ast_node_list_size(arg0.ptr)
6031        if res < 0:
6032            raise
6033        return int(res)
6034
6035isl.isl_ast_node_list_alloc.restype = c_void_p
6036isl.isl_ast_node_list_alloc.argtypes = [Context, c_int]
6037isl.isl_ast_node_list_from_ast_node.restype = c_void_p
6038isl.isl_ast_node_list_from_ast_node.argtypes = [c_void_p]
6039isl.isl_ast_node_list_add.restype = c_void_p
6040isl.isl_ast_node_list_add.argtypes = [c_void_p, c_void_p]
6041isl.isl_ast_node_list_clear.restype = c_void_p
6042isl.isl_ast_node_list_clear.argtypes = [c_void_p]
6043isl.isl_ast_node_list_concat.restype = c_void_p
6044isl.isl_ast_node_list_concat.argtypes = [c_void_p, c_void_p]
6045isl.isl_ast_node_list_drop.restype = c_void_p
6046isl.isl_ast_node_list_drop.argtypes = [c_void_p, c_int, c_int]
6047isl.isl_ast_node_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
6048isl.isl_ast_node_list_get_at.restype = c_void_p
6049isl.isl_ast_node_list_get_at.argtypes = [c_void_p, c_int]
6050isl.isl_ast_node_list_insert.restype = c_void_p
6051isl.isl_ast_node_list_insert.argtypes = [c_void_p, c_int, c_void_p]
6052isl.isl_ast_node_list_size.argtypes = [c_void_p]
6053isl.isl_ast_node_list_copy.restype = c_void_p
6054isl.isl_ast_node_list_copy.argtypes = [c_void_p]
6055isl.isl_ast_node_list_free.restype = c_void_p
6056isl.isl_ast_node_list_free.argtypes = [c_void_p]
6057isl.isl_ast_node_list_to_str.restype = POINTER(c_char)
6058isl.isl_ast_node_list_to_str.argtypes = [c_void_p]
6059
6060class ast_node_mark(ast_node):
6061    def __init__(self, *args, **keywords):
6062        if "ptr" in keywords:
6063            self.ctx = keywords["ctx"]
6064            self.ptr = keywords["ptr"]
6065            return
6066        raise Error
6067    def __del__(self):
6068        if hasattr(self, 'ptr'):
6069            isl.isl_ast_node_free(self.ptr)
6070    def __new__(cls, *args, **keywords):
6071        return super(ast_node_mark, cls).__new__(cls)
6072    def __str__(arg0):
6073        try:
6074            if not arg0.__class__ is ast_node_mark:
6075                arg0 = ast_node_mark(arg0)
6076        except:
6077            raise
6078        ptr = isl.isl_ast_node_to_str(arg0.ptr)
6079        res = cast(ptr, c_char_p).value.decode('ascii')
6080        libc.free(ptr)
6081        return res
6082    def __repr__(self):
6083        s = str(self)
6084        if '"' in s:
6085            return 'isl.ast_node_mark("""%s""")' % s
6086        else:
6087            return 'isl.ast_node_mark("%s")' % s
6088    def id(arg0):
6089        try:
6090            if not arg0.__class__ is ast_node:
6091                arg0 = ast_node(arg0)
6092        except:
6093            raise
6094        ctx = arg0.ctx
6095        res = isl.isl_ast_node_mark_get_id(arg0.ptr)
6096        obj = id(ctx=ctx, ptr=res)
6097        return obj
6098    def get_id(arg0):
6099        return arg0.id()
6100    def node(arg0):
6101        try:
6102            if not arg0.__class__ is ast_node:
6103                arg0 = ast_node(arg0)
6104        except:
6105            raise
6106        ctx = arg0.ctx
6107        res = isl.isl_ast_node_mark_get_node(arg0.ptr)
6108        obj = ast_node(ctx=ctx, ptr=res)
6109        return obj
6110    def get_node(arg0):
6111        return arg0.node()
6112
6113isl.isl_ast_node_mark_get_id.restype = c_void_p
6114isl.isl_ast_node_mark_get_id.argtypes = [c_void_p]
6115isl.isl_ast_node_mark_get_node.restype = c_void_p
6116isl.isl_ast_node_mark_get_node.argtypes = [c_void_p]
6117isl.isl_ast_node_copy.restype = c_void_p
6118isl.isl_ast_node_copy.argtypes = [c_void_p]
6119isl.isl_ast_node_free.restype = c_void_p
6120isl.isl_ast_node_free.argtypes = [c_void_p]
6121isl.isl_ast_node_to_str.restype = POINTER(c_char)
6122isl.isl_ast_node_to_str.argtypes = [c_void_p]
6123
6124class ast_node_user(ast_node):
6125    def __init__(self, *args, **keywords):
6126        if "ptr" in keywords:
6127            self.ctx = keywords["ctx"]
6128            self.ptr = keywords["ptr"]
6129            return
6130        raise Error
6131    def __del__(self):
6132        if hasattr(self, 'ptr'):
6133            isl.isl_ast_node_free(self.ptr)
6134    def __new__(cls, *args, **keywords):
6135        return super(ast_node_user, cls).__new__(cls)
6136    def __str__(arg0):
6137        try:
6138            if not arg0.__class__ is ast_node_user:
6139                arg0 = ast_node_user(arg0)
6140        except:
6141            raise
6142        ptr = isl.isl_ast_node_to_str(arg0.ptr)
6143        res = cast(ptr, c_char_p).value.decode('ascii')
6144        libc.free(ptr)
6145        return res
6146    def __repr__(self):
6147        s = str(self)
6148        if '"' in s:
6149            return 'isl.ast_node_user("""%s""")' % s
6150        else:
6151            return 'isl.ast_node_user("%s")' % s
6152    def expr(arg0):
6153        try:
6154            if not arg0.__class__ is ast_node:
6155                arg0 = ast_node(arg0)
6156        except:
6157            raise
6158        ctx = arg0.ctx
6159        res = isl.isl_ast_node_user_get_expr(arg0.ptr)
6160        obj = ast_expr(ctx=ctx, ptr=res)
6161        return obj
6162    def get_expr(arg0):
6163        return arg0.expr()
6164
6165isl.isl_ast_node_user_get_expr.restype = c_void_p
6166isl.isl_ast_node_user_get_expr.argtypes = [c_void_p]
6167isl.isl_ast_node_copy.restype = c_void_p
6168isl.isl_ast_node_copy.argtypes = [c_void_p]
6169isl.isl_ast_node_free.restype = c_void_p
6170isl.isl_ast_node_free.argtypes = [c_void_p]
6171isl.isl_ast_node_to_str.restype = POINTER(c_char)
6172isl.isl_ast_node_to_str.argtypes = [c_void_p]
6173
6174class union_map(object):
6175    def __init__(self, *args, **keywords):
6176        if "ptr" in keywords:
6177            self.ctx = keywords["ctx"]
6178            self.ptr = keywords["ptr"]
6179            return
6180        if len(args) == 1 and args[0].__class__ is basic_map:
6181            self.ctx = Context.getDefaultInstance()
6182            self.ptr = isl.isl_union_map_from_basic_map(isl.isl_basic_map_copy(args[0].ptr))
6183            return
6184        if len(args) == 1 and args[0].__class__ is map:
6185            self.ctx = Context.getDefaultInstance()
6186            self.ptr = isl.isl_union_map_from_map(isl.isl_map_copy(args[0].ptr))
6187            return
6188        if len(args) == 1 and type(args[0]) == str:
6189            self.ctx = Context.getDefaultInstance()
6190            self.ptr = isl.isl_union_map_read_from_str(self.ctx, args[0].encode('ascii'))
6191            return
6192        raise Error
6193    def __del__(self):
6194        if hasattr(self, 'ptr'):
6195            isl.isl_union_map_free(self.ptr)
6196    def __str__(arg0):
6197        try:
6198            if not arg0.__class__ is union_map:
6199                arg0 = union_map(arg0)
6200        except:
6201            raise
6202        ptr = isl.isl_union_map_to_str(arg0.ptr)
6203        res = cast(ptr, c_char_p).value.decode('ascii')
6204        libc.free(ptr)
6205        return res
6206    def __repr__(self):
6207        s = str(self)
6208        if '"' in s:
6209            return 'isl.union_map("""%s""")' % s
6210        else:
6211            return 'isl.union_map("%s")' % s
6212    def affine_hull(arg0):
6213        try:
6214            if not arg0.__class__ is union_map:
6215                arg0 = union_map(arg0)
6216        except:
6217            raise
6218        ctx = arg0.ctx
6219        res = isl.isl_union_map_affine_hull(isl.isl_union_map_copy(arg0.ptr))
6220        obj = union_map(ctx=ctx, ptr=res)
6221        return obj
6222    def apply_domain(arg0, arg1):
6223        try:
6224            if not arg0.__class__ is union_map:
6225                arg0 = union_map(arg0)
6226        except:
6227            raise
6228        try:
6229            if not arg1.__class__ is union_map:
6230                arg1 = union_map(arg1)
6231        except:
6232            raise
6233        ctx = arg0.ctx
6234        res = isl.isl_union_map_apply_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6235        obj = union_map(ctx=ctx, ptr=res)
6236        return obj
6237    def apply_range(arg0, arg1):
6238        try:
6239            if not arg0.__class__ is union_map:
6240                arg0 = union_map(arg0)
6241        except:
6242            raise
6243        try:
6244            if not arg1.__class__ is union_map:
6245                arg1 = union_map(arg1)
6246        except:
6247            raise
6248        ctx = arg0.ctx
6249        res = isl.isl_union_map_apply_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6250        obj = union_map(ctx=ctx, ptr=res)
6251        return obj
6252    def bind_range(arg0, arg1):
6253        try:
6254            if not arg0.__class__ is union_map:
6255                arg0 = union_map(arg0)
6256        except:
6257            raise
6258        try:
6259            if not arg1.__class__ is multi_id:
6260                arg1 = multi_id(arg1)
6261        except:
6262            raise
6263        ctx = arg0.ctx
6264        res = isl.isl_union_map_bind_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
6265        obj = union_set(ctx=ctx, ptr=res)
6266        return obj
6267    def coalesce(arg0):
6268        try:
6269            if not arg0.__class__ is union_map:
6270                arg0 = union_map(arg0)
6271        except:
6272            raise
6273        ctx = arg0.ctx
6274        res = isl.isl_union_map_coalesce(isl.isl_union_map_copy(arg0.ptr))
6275        obj = union_map(ctx=ctx, ptr=res)
6276        return obj
6277    def compute_divs(arg0):
6278        try:
6279            if not arg0.__class__ is union_map:
6280                arg0 = union_map(arg0)
6281        except:
6282            raise
6283        ctx = arg0.ctx
6284        res = isl.isl_union_map_compute_divs(isl.isl_union_map_copy(arg0.ptr))
6285        obj = union_map(ctx=ctx, ptr=res)
6286        return obj
6287    def curry(arg0):
6288        try:
6289            if not arg0.__class__ is union_map:
6290                arg0 = union_map(arg0)
6291        except:
6292            raise
6293        ctx = arg0.ctx
6294        res = isl.isl_union_map_curry(isl.isl_union_map_copy(arg0.ptr))
6295        obj = union_map(ctx=ctx, ptr=res)
6296        return obj
6297    def deltas(arg0):
6298        try:
6299            if not arg0.__class__ is union_map:
6300                arg0 = union_map(arg0)
6301        except:
6302            raise
6303        ctx = arg0.ctx
6304        res = isl.isl_union_map_deltas(isl.isl_union_map_copy(arg0.ptr))
6305        obj = union_set(ctx=ctx, ptr=res)
6306        return obj
6307    def detect_equalities(arg0):
6308        try:
6309            if not arg0.__class__ is union_map:
6310                arg0 = union_map(arg0)
6311        except:
6312            raise
6313        ctx = arg0.ctx
6314        res = isl.isl_union_map_detect_equalities(isl.isl_union_map_copy(arg0.ptr))
6315        obj = union_map(ctx=ctx, ptr=res)
6316        return obj
6317    def domain(arg0):
6318        try:
6319            if not arg0.__class__ is union_map:
6320                arg0 = union_map(arg0)
6321        except:
6322            raise
6323        ctx = arg0.ctx
6324        res = isl.isl_union_map_domain(isl.isl_union_map_copy(arg0.ptr))
6325        obj = union_set(ctx=ctx, ptr=res)
6326        return obj
6327    def domain_factor_domain(arg0):
6328        try:
6329            if not arg0.__class__ is union_map:
6330                arg0 = union_map(arg0)
6331        except:
6332            raise
6333        ctx = arg0.ctx
6334        res = isl.isl_union_map_domain_factor_domain(isl.isl_union_map_copy(arg0.ptr))
6335        obj = union_map(ctx=ctx, ptr=res)
6336        return obj
6337    def domain_factor_range(arg0):
6338        try:
6339            if not arg0.__class__ is union_map:
6340                arg0 = union_map(arg0)
6341        except:
6342            raise
6343        ctx = arg0.ctx
6344        res = isl.isl_union_map_domain_factor_range(isl.isl_union_map_copy(arg0.ptr))
6345        obj = union_map(ctx=ctx, ptr=res)
6346        return obj
6347    def domain_map(arg0):
6348        try:
6349            if not arg0.__class__ is union_map:
6350                arg0 = union_map(arg0)
6351        except:
6352            raise
6353        ctx = arg0.ctx
6354        res = isl.isl_union_map_domain_map(isl.isl_union_map_copy(arg0.ptr))
6355        obj = union_map(ctx=ctx, ptr=res)
6356        return obj
6357    def domain_map_union_pw_multi_aff(arg0):
6358        try:
6359            if not arg0.__class__ is union_map:
6360                arg0 = union_map(arg0)
6361        except:
6362            raise
6363        ctx = arg0.ctx
6364        res = isl.isl_union_map_domain_map_union_pw_multi_aff(isl.isl_union_map_copy(arg0.ptr))
6365        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
6366        return obj
6367    def domain_product(arg0, arg1):
6368        try:
6369            if not arg0.__class__ is union_map:
6370                arg0 = union_map(arg0)
6371        except:
6372            raise
6373        try:
6374            if not arg1.__class__ is union_map:
6375                arg1 = union_map(arg1)
6376        except:
6377            raise
6378        ctx = arg0.ctx
6379        res = isl.isl_union_map_domain_product(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6380        obj = union_map(ctx=ctx, ptr=res)
6381        return obj
6382    @staticmethod
6383    def empty(*args):
6384        if len(args) == 0:
6385            ctx = Context.getDefaultInstance()
6386            res = isl.isl_union_map_empty_ctx(ctx)
6387            obj = union_map(ctx=ctx, ptr=res)
6388            return obj
6389        raise Error
6390    def eq_at(*args):
6391        if len(args) == 2 and args[1].__class__ is multi_union_pw_aff:
6392            ctx = args[0].ctx
6393            res = isl.isl_union_map_eq_at_multi_union_pw_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_union_pw_aff_copy(args[1].ptr))
6394            obj = union_map(ctx=ctx, ptr=res)
6395            return obj
6396        raise Error
6397    def every_map(arg0, arg1):
6398        try:
6399            if not arg0.__class__ is union_map:
6400                arg0 = union_map(arg0)
6401        except:
6402            raise
6403        exc_info = [None]
6404        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
6405        def cb_func(cb_arg0, cb_arg1):
6406            cb_arg0 = map(ctx=arg0.ctx, ptr=isl.isl_map_copy(cb_arg0))
6407            try:
6408                res = arg1(cb_arg0)
6409            except:
6410                import sys
6411                exc_info[0] = sys.exc_info()
6412                return -1
6413            return 1 if res else 0
6414        cb = fn(cb_func)
6415        ctx = arg0.ctx
6416        res = isl.isl_union_map_every_map(arg0.ptr, cb, None)
6417        if exc_info[0] != None:
6418            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
6419        if res < 0:
6420            raise
6421        return bool(res)
6422    def extract_map(arg0, arg1):
6423        try:
6424            if not arg0.__class__ is union_map:
6425                arg0 = union_map(arg0)
6426        except:
6427            raise
6428        try:
6429            if not arg1.__class__ is space:
6430                arg1 = space(arg1)
6431        except:
6432            raise
6433        ctx = arg0.ctx
6434        res = isl.isl_union_map_extract_map(arg0.ptr, isl.isl_space_copy(arg1.ptr))
6435        obj = map(ctx=ctx, ptr=res)
6436        return obj
6437    def factor_domain(arg0):
6438        try:
6439            if not arg0.__class__ is union_map:
6440                arg0 = union_map(arg0)
6441        except:
6442            raise
6443        ctx = arg0.ctx
6444        res = isl.isl_union_map_factor_domain(isl.isl_union_map_copy(arg0.ptr))
6445        obj = union_map(ctx=ctx, ptr=res)
6446        return obj
6447    def factor_range(arg0):
6448        try:
6449            if not arg0.__class__ is union_map:
6450                arg0 = union_map(arg0)
6451        except:
6452            raise
6453        ctx = arg0.ctx
6454        res = isl.isl_union_map_factor_range(isl.isl_union_map_copy(arg0.ptr))
6455        obj = union_map(ctx=ctx, ptr=res)
6456        return obj
6457    def fixed_power(*args):
6458        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
6459            args = list(args)
6460            try:
6461                if not args[1].__class__ is val:
6462                    args[1] = val(args[1])
6463            except:
6464                raise
6465            ctx = args[0].ctx
6466            res = isl.isl_union_map_fixed_power_val(isl.isl_union_map_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
6467            obj = union_map(ctx=ctx, ptr=res)
6468            return obj
6469        raise Error
6470    def foreach_map(arg0, arg1):
6471        try:
6472            if not arg0.__class__ is union_map:
6473                arg0 = union_map(arg0)
6474        except:
6475            raise
6476        exc_info = [None]
6477        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
6478        def cb_func(cb_arg0, cb_arg1):
6479            cb_arg0 = map(ctx=arg0.ctx, ptr=(cb_arg0))
6480            try:
6481                arg1(cb_arg0)
6482            except:
6483                import sys
6484                exc_info[0] = sys.exc_info()
6485                return -1
6486            return 0
6487        cb = fn(cb_func)
6488        ctx = arg0.ctx
6489        res = isl.isl_union_map_foreach_map(arg0.ptr, cb, None)
6490        if exc_info[0] != None:
6491            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
6492        if res < 0:
6493            raise
6494    @staticmethod
6495    def convert_from(*args):
6496        if len(args) == 1 and args[0].__class__ is multi_union_pw_aff:
6497            ctx = args[0].ctx
6498            res = isl.isl_union_map_from_multi_union_pw_aff(isl.isl_multi_union_pw_aff_copy(args[0].ptr))
6499            obj = union_map(ctx=ctx, ptr=res)
6500            return obj
6501        if len(args) == 1 and args[0].__class__ is union_pw_multi_aff:
6502            ctx = args[0].ctx
6503            res = isl.isl_union_map_from_union_pw_multi_aff(isl.isl_union_pw_multi_aff_copy(args[0].ptr))
6504            obj = union_map(ctx=ctx, ptr=res)
6505            return obj
6506        raise Error
6507    @staticmethod
6508    def from_domain(arg0):
6509        try:
6510            if not arg0.__class__ is union_set:
6511                arg0 = union_set(arg0)
6512        except:
6513            raise
6514        ctx = arg0.ctx
6515        res = isl.isl_union_map_from_domain(isl.isl_union_set_copy(arg0.ptr))
6516        obj = union_map(ctx=ctx, ptr=res)
6517        return obj
6518    @staticmethod
6519    def from_domain_and_range(arg0, arg1):
6520        try:
6521            if not arg0.__class__ is union_set:
6522                arg0 = union_set(arg0)
6523        except:
6524            raise
6525        try:
6526            if not arg1.__class__ is union_set:
6527                arg1 = union_set(arg1)
6528        except:
6529            raise
6530        ctx = arg0.ctx
6531        res = isl.isl_union_map_from_domain_and_range(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
6532        obj = union_map(ctx=ctx, ptr=res)
6533        return obj
6534    @staticmethod
6535    def from_range(arg0):
6536        try:
6537            if not arg0.__class__ is union_set:
6538                arg0 = union_set(arg0)
6539        except:
6540            raise
6541        ctx = arg0.ctx
6542        res = isl.isl_union_map_from_range(isl.isl_union_set_copy(arg0.ptr))
6543        obj = union_map(ctx=ctx, ptr=res)
6544        return obj
6545    def space(arg0):
6546        try:
6547            if not arg0.__class__ is union_map:
6548                arg0 = union_map(arg0)
6549        except:
6550            raise
6551        ctx = arg0.ctx
6552        res = isl.isl_union_map_get_space(arg0.ptr)
6553        obj = space(ctx=ctx, ptr=res)
6554        return obj
6555    def get_space(arg0):
6556        return arg0.space()
6557    def gist(arg0, arg1):
6558        try:
6559            if not arg0.__class__ is union_map:
6560                arg0 = union_map(arg0)
6561        except:
6562            raise
6563        try:
6564            if not arg1.__class__ is union_map:
6565                arg1 = union_map(arg1)
6566        except:
6567            raise
6568        ctx = arg0.ctx
6569        res = isl.isl_union_map_gist(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6570        obj = union_map(ctx=ctx, ptr=res)
6571        return obj
6572    def gist_domain(arg0, arg1):
6573        try:
6574            if not arg0.__class__ is union_map:
6575                arg0 = union_map(arg0)
6576        except:
6577            raise
6578        try:
6579            if not arg1.__class__ is union_set:
6580                arg1 = union_set(arg1)
6581        except:
6582            raise
6583        ctx = arg0.ctx
6584        res = isl.isl_union_map_gist_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
6585        obj = union_map(ctx=ctx, ptr=res)
6586        return obj
6587    def gist_params(arg0, arg1):
6588        try:
6589            if not arg0.__class__ is union_map:
6590                arg0 = union_map(arg0)
6591        except:
6592            raise
6593        try:
6594            if not arg1.__class__ is set:
6595                arg1 = set(arg1)
6596        except:
6597            raise
6598        ctx = arg0.ctx
6599        res = isl.isl_union_map_gist_params(isl.isl_union_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
6600        obj = union_map(ctx=ctx, ptr=res)
6601        return obj
6602    def gist_range(arg0, arg1):
6603        try:
6604            if not arg0.__class__ is union_map:
6605                arg0 = union_map(arg0)
6606        except:
6607            raise
6608        try:
6609            if not arg1.__class__ is union_set:
6610                arg1 = union_set(arg1)
6611        except:
6612            raise
6613        ctx = arg0.ctx
6614        res = isl.isl_union_map_gist_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
6615        obj = union_map(ctx=ctx, ptr=res)
6616        return obj
6617    def intersect(arg0, arg1):
6618        try:
6619            if not arg0.__class__ is union_map:
6620                arg0 = union_map(arg0)
6621        except:
6622            raise
6623        try:
6624            if not arg1.__class__ is union_map:
6625                arg1 = union_map(arg1)
6626        except:
6627            raise
6628        ctx = arg0.ctx
6629        res = isl.isl_union_map_intersect(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6630        obj = union_map(ctx=ctx, ptr=res)
6631        return obj
6632    def intersect_domain(*args):
6633        if len(args) == 2 and args[1].__class__ is space:
6634            ctx = args[0].ctx
6635            res = isl.isl_union_map_intersect_domain_space(isl.isl_union_map_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr))
6636            obj = union_map(ctx=ctx, ptr=res)
6637            return obj
6638        if len(args) == 2 and args[1].__class__ is union_set:
6639            ctx = args[0].ctx
6640            res = isl.isl_union_map_intersect_domain_union_set(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr))
6641            obj = union_map(ctx=ctx, ptr=res)
6642            return obj
6643        raise Error
6644    def intersect_params(arg0, arg1):
6645        try:
6646            if not arg0.__class__ is union_map:
6647                arg0 = union_map(arg0)
6648        except:
6649            raise
6650        try:
6651            if not arg1.__class__ is set:
6652                arg1 = set(arg1)
6653        except:
6654            raise
6655        ctx = arg0.ctx
6656        res = isl.isl_union_map_intersect_params(isl.isl_union_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
6657        obj = union_map(ctx=ctx, ptr=res)
6658        return obj
6659    def intersect_range(*args):
6660        if len(args) == 2 and args[1].__class__ is space:
6661            ctx = args[0].ctx
6662            res = isl.isl_union_map_intersect_range_space(isl.isl_union_map_copy(args[0].ptr), isl.isl_space_copy(args[1].ptr))
6663            obj = union_map(ctx=ctx, ptr=res)
6664            return obj
6665        if len(args) == 2 and args[1].__class__ is union_set:
6666            ctx = args[0].ctx
6667            res = isl.isl_union_map_intersect_range_union_set(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_set_copy(args[1].ptr))
6668            obj = union_map(ctx=ctx, ptr=res)
6669            return obj
6670        raise Error
6671    def is_bijective(arg0):
6672        try:
6673            if not arg0.__class__ is union_map:
6674                arg0 = union_map(arg0)
6675        except:
6676            raise
6677        ctx = arg0.ctx
6678        res = isl.isl_union_map_is_bijective(arg0.ptr)
6679        if res < 0:
6680            raise
6681        return bool(res)
6682    def is_disjoint(arg0, arg1):
6683        try:
6684            if not arg0.__class__ is union_map:
6685                arg0 = union_map(arg0)
6686        except:
6687            raise
6688        try:
6689            if not arg1.__class__ is union_map:
6690                arg1 = union_map(arg1)
6691        except:
6692            raise
6693        ctx = arg0.ctx
6694        res = isl.isl_union_map_is_disjoint(arg0.ptr, arg1.ptr)
6695        if res < 0:
6696            raise
6697        return bool(res)
6698    def is_empty(arg0):
6699        try:
6700            if not arg0.__class__ is union_map:
6701                arg0 = union_map(arg0)
6702        except:
6703            raise
6704        ctx = arg0.ctx
6705        res = isl.isl_union_map_is_empty(arg0.ptr)
6706        if res < 0:
6707            raise
6708        return bool(res)
6709    def is_equal(arg0, arg1):
6710        try:
6711            if not arg0.__class__ is union_map:
6712                arg0 = union_map(arg0)
6713        except:
6714            raise
6715        try:
6716            if not arg1.__class__ is union_map:
6717                arg1 = union_map(arg1)
6718        except:
6719            raise
6720        ctx = arg0.ctx
6721        res = isl.isl_union_map_is_equal(arg0.ptr, arg1.ptr)
6722        if res < 0:
6723            raise
6724        return bool(res)
6725    def is_injective(arg0):
6726        try:
6727            if not arg0.__class__ is union_map:
6728                arg0 = union_map(arg0)
6729        except:
6730            raise
6731        ctx = arg0.ctx
6732        res = isl.isl_union_map_is_injective(arg0.ptr)
6733        if res < 0:
6734            raise
6735        return bool(res)
6736    def is_single_valued(arg0):
6737        try:
6738            if not arg0.__class__ is union_map:
6739                arg0 = union_map(arg0)
6740        except:
6741            raise
6742        ctx = arg0.ctx
6743        res = isl.isl_union_map_is_single_valued(arg0.ptr)
6744        if res < 0:
6745            raise
6746        return bool(res)
6747    def is_strict_subset(arg0, arg1):
6748        try:
6749            if not arg0.__class__ is union_map:
6750                arg0 = union_map(arg0)
6751        except:
6752            raise
6753        try:
6754            if not arg1.__class__ is union_map:
6755                arg1 = union_map(arg1)
6756        except:
6757            raise
6758        ctx = arg0.ctx
6759        res = isl.isl_union_map_is_strict_subset(arg0.ptr, arg1.ptr)
6760        if res < 0:
6761            raise
6762        return bool(res)
6763    def is_subset(arg0, arg1):
6764        try:
6765            if not arg0.__class__ is union_map:
6766                arg0 = union_map(arg0)
6767        except:
6768            raise
6769        try:
6770            if not arg1.__class__ is union_map:
6771                arg1 = union_map(arg1)
6772        except:
6773            raise
6774        ctx = arg0.ctx
6775        res = isl.isl_union_map_is_subset(arg0.ptr, arg1.ptr)
6776        if res < 0:
6777            raise
6778        return bool(res)
6779    def isa_map(arg0):
6780        try:
6781            if not arg0.__class__ is union_map:
6782                arg0 = union_map(arg0)
6783        except:
6784            raise
6785        ctx = arg0.ctx
6786        res = isl.isl_union_map_isa_map(arg0.ptr)
6787        if res < 0:
6788            raise
6789        return bool(res)
6790    def lexmax(arg0):
6791        try:
6792            if not arg0.__class__ is union_map:
6793                arg0 = union_map(arg0)
6794        except:
6795            raise
6796        ctx = arg0.ctx
6797        res = isl.isl_union_map_lexmax(isl.isl_union_map_copy(arg0.ptr))
6798        obj = union_map(ctx=ctx, ptr=res)
6799        return obj
6800    def lexmin(arg0):
6801        try:
6802            if not arg0.__class__ is union_map:
6803                arg0 = union_map(arg0)
6804        except:
6805            raise
6806        ctx = arg0.ctx
6807        res = isl.isl_union_map_lexmin(isl.isl_union_map_copy(arg0.ptr))
6808        obj = union_map(ctx=ctx, ptr=res)
6809        return obj
6810    def polyhedral_hull(arg0):
6811        try:
6812            if not arg0.__class__ is union_map:
6813                arg0 = union_map(arg0)
6814        except:
6815            raise
6816        ctx = arg0.ctx
6817        res = isl.isl_union_map_polyhedral_hull(isl.isl_union_map_copy(arg0.ptr))
6818        obj = union_map(ctx=ctx, ptr=res)
6819        return obj
6820    def preimage_domain(*args):
6821        if len(args) == 2 and args[1].__class__ is multi_aff:
6822            ctx = args[0].ctx
6823            res = isl.isl_union_map_preimage_domain_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
6824            obj = union_map(ctx=ctx, ptr=res)
6825            return obj
6826        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
6827            ctx = args[0].ctx
6828            res = isl.isl_union_map_preimage_domain_multi_pw_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
6829            obj = union_map(ctx=ctx, ptr=res)
6830            return obj
6831        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
6832            ctx = args[0].ctx
6833            res = isl.isl_union_map_preimage_domain_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
6834            obj = union_map(ctx=ctx, ptr=res)
6835            return obj
6836        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
6837            ctx = args[0].ctx
6838            res = isl.isl_union_map_preimage_domain_union_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
6839            obj = union_map(ctx=ctx, ptr=res)
6840            return obj
6841        raise Error
6842    def preimage_range(*args):
6843        if len(args) == 2 and args[1].__class__ is multi_aff:
6844            ctx = args[0].ctx
6845            res = isl.isl_union_map_preimage_range_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
6846            obj = union_map(ctx=ctx, ptr=res)
6847            return obj
6848        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
6849            ctx = args[0].ctx
6850            res = isl.isl_union_map_preimage_range_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
6851            obj = union_map(ctx=ctx, ptr=res)
6852            return obj
6853        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
6854            ctx = args[0].ctx
6855            res = isl.isl_union_map_preimage_range_union_pw_multi_aff(isl.isl_union_map_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
6856            obj = union_map(ctx=ctx, ptr=res)
6857            return obj
6858        raise Error
6859    def product(arg0, arg1):
6860        try:
6861            if not arg0.__class__ is union_map:
6862                arg0 = union_map(arg0)
6863        except:
6864            raise
6865        try:
6866            if not arg1.__class__ is union_map:
6867                arg1 = union_map(arg1)
6868        except:
6869            raise
6870        ctx = arg0.ctx
6871        res = isl.isl_union_map_product(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6872        obj = union_map(ctx=ctx, ptr=res)
6873        return obj
6874    def project_out_all_params(arg0):
6875        try:
6876            if not arg0.__class__ is union_map:
6877                arg0 = union_map(arg0)
6878        except:
6879            raise
6880        ctx = arg0.ctx
6881        res = isl.isl_union_map_project_out_all_params(isl.isl_union_map_copy(arg0.ptr))
6882        obj = union_map(ctx=ctx, ptr=res)
6883        return obj
6884    def range(arg0):
6885        try:
6886            if not arg0.__class__ is union_map:
6887                arg0 = union_map(arg0)
6888        except:
6889            raise
6890        ctx = arg0.ctx
6891        res = isl.isl_union_map_range(isl.isl_union_map_copy(arg0.ptr))
6892        obj = union_set(ctx=ctx, ptr=res)
6893        return obj
6894    def range_factor_domain(arg0):
6895        try:
6896            if not arg0.__class__ is union_map:
6897                arg0 = union_map(arg0)
6898        except:
6899            raise
6900        ctx = arg0.ctx
6901        res = isl.isl_union_map_range_factor_domain(isl.isl_union_map_copy(arg0.ptr))
6902        obj = union_map(ctx=ctx, ptr=res)
6903        return obj
6904    def range_factor_range(arg0):
6905        try:
6906            if not arg0.__class__ is union_map:
6907                arg0 = union_map(arg0)
6908        except:
6909            raise
6910        ctx = arg0.ctx
6911        res = isl.isl_union_map_range_factor_range(isl.isl_union_map_copy(arg0.ptr))
6912        obj = union_map(ctx=ctx, ptr=res)
6913        return obj
6914    def range_map(arg0):
6915        try:
6916            if not arg0.__class__ is union_map:
6917                arg0 = union_map(arg0)
6918        except:
6919            raise
6920        ctx = arg0.ctx
6921        res = isl.isl_union_map_range_map(isl.isl_union_map_copy(arg0.ptr))
6922        obj = union_map(ctx=ctx, ptr=res)
6923        return obj
6924    def range_product(arg0, arg1):
6925        try:
6926            if not arg0.__class__ is union_map:
6927                arg0 = union_map(arg0)
6928        except:
6929            raise
6930        try:
6931            if not arg1.__class__ is union_map:
6932                arg1 = union_map(arg1)
6933        except:
6934            raise
6935        ctx = arg0.ctx
6936        res = isl.isl_union_map_range_product(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6937        obj = union_map(ctx=ctx, ptr=res)
6938        return obj
6939    def range_reverse(arg0):
6940        try:
6941            if not arg0.__class__ is union_map:
6942                arg0 = union_map(arg0)
6943        except:
6944            raise
6945        ctx = arg0.ctx
6946        res = isl.isl_union_map_range_reverse(isl.isl_union_map_copy(arg0.ptr))
6947        obj = union_map(ctx=ctx, ptr=res)
6948        return obj
6949    def reverse(arg0):
6950        try:
6951            if not arg0.__class__ is union_map:
6952                arg0 = union_map(arg0)
6953        except:
6954            raise
6955        ctx = arg0.ctx
6956        res = isl.isl_union_map_reverse(isl.isl_union_map_copy(arg0.ptr))
6957        obj = union_map(ctx=ctx, ptr=res)
6958        return obj
6959    def subtract(arg0, arg1):
6960        try:
6961            if not arg0.__class__ is union_map:
6962                arg0 = union_map(arg0)
6963        except:
6964            raise
6965        try:
6966            if not arg1.__class__ is union_map:
6967                arg1 = union_map(arg1)
6968        except:
6969            raise
6970        ctx = arg0.ctx
6971        res = isl.isl_union_map_subtract(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
6972        obj = union_map(ctx=ctx, ptr=res)
6973        return obj
6974    def subtract_domain(arg0, arg1):
6975        try:
6976            if not arg0.__class__ is union_map:
6977                arg0 = union_map(arg0)
6978        except:
6979            raise
6980        try:
6981            if not arg1.__class__ is union_set:
6982                arg1 = union_set(arg1)
6983        except:
6984            raise
6985        ctx = arg0.ctx
6986        res = isl.isl_union_map_subtract_domain(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
6987        obj = union_map(ctx=ctx, ptr=res)
6988        return obj
6989    def subtract_range(arg0, arg1):
6990        try:
6991            if not arg0.__class__ is union_map:
6992                arg0 = union_map(arg0)
6993        except:
6994            raise
6995        try:
6996            if not arg1.__class__ is union_set:
6997                arg1 = union_set(arg1)
6998        except:
6999            raise
7000        ctx = arg0.ctx
7001        res = isl.isl_union_map_subtract_range(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
7002        obj = union_map(ctx=ctx, ptr=res)
7003        return obj
7004    def uncurry(arg0):
7005        try:
7006            if not arg0.__class__ is union_map:
7007                arg0 = union_map(arg0)
7008        except:
7009            raise
7010        ctx = arg0.ctx
7011        res = isl.isl_union_map_uncurry(isl.isl_union_map_copy(arg0.ptr))
7012        obj = union_map(ctx=ctx, ptr=res)
7013        return obj
7014    def union(arg0, arg1):
7015        try:
7016            if not arg0.__class__ is union_map:
7017                arg0 = union_map(arg0)
7018        except:
7019            raise
7020        try:
7021            if not arg1.__class__ is union_map:
7022                arg1 = union_map(arg1)
7023        except:
7024            raise
7025        ctx = arg0.ctx
7026        res = isl.isl_union_map_union(isl.isl_union_map_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
7027        obj = union_map(ctx=ctx, ptr=res)
7028        return obj
7029    def universe(arg0):
7030        try:
7031            if not arg0.__class__ is union_map:
7032                arg0 = union_map(arg0)
7033        except:
7034            raise
7035        ctx = arg0.ctx
7036        res = isl.isl_union_map_universe(isl.isl_union_map_copy(arg0.ptr))
7037        obj = union_map(ctx=ctx, ptr=res)
7038        return obj
7039    def wrap(arg0):
7040        try:
7041            if not arg0.__class__ is union_map:
7042                arg0 = union_map(arg0)
7043        except:
7044            raise
7045        ctx = arg0.ctx
7046        res = isl.isl_union_map_wrap(isl.isl_union_map_copy(arg0.ptr))
7047        obj = union_set(ctx=ctx, ptr=res)
7048        return obj
7049    def zip(arg0):
7050        try:
7051            if not arg0.__class__ is union_map:
7052                arg0 = union_map(arg0)
7053        except:
7054            raise
7055        ctx = arg0.ctx
7056        res = isl.isl_union_map_zip(isl.isl_union_map_copy(arg0.ptr))
7057        obj = union_map(ctx=ctx, ptr=res)
7058        return obj
7059
7060isl.isl_union_map_from_basic_map.restype = c_void_p
7061isl.isl_union_map_from_basic_map.argtypes = [c_void_p]
7062isl.isl_union_map_from_map.restype = c_void_p
7063isl.isl_union_map_from_map.argtypes = [c_void_p]
7064isl.isl_union_map_read_from_str.restype = c_void_p
7065isl.isl_union_map_read_from_str.argtypes = [Context, c_char_p]
7066isl.isl_union_map_affine_hull.restype = c_void_p
7067isl.isl_union_map_affine_hull.argtypes = [c_void_p]
7068isl.isl_union_map_apply_domain.restype = c_void_p
7069isl.isl_union_map_apply_domain.argtypes = [c_void_p, c_void_p]
7070isl.isl_union_map_apply_range.restype = c_void_p
7071isl.isl_union_map_apply_range.argtypes = [c_void_p, c_void_p]
7072isl.isl_union_map_bind_range.restype = c_void_p
7073isl.isl_union_map_bind_range.argtypes = [c_void_p, c_void_p]
7074isl.isl_union_map_coalesce.restype = c_void_p
7075isl.isl_union_map_coalesce.argtypes = [c_void_p]
7076isl.isl_union_map_compute_divs.restype = c_void_p
7077isl.isl_union_map_compute_divs.argtypes = [c_void_p]
7078isl.isl_union_map_curry.restype = c_void_p
7079isl.isl_union_map_curry.argtypes = [c_void_p]
7080isl.isl_union_map_deltas.restype = c_void_p
7081isl.isl_union_map_deltas.argtypes = [c_void_p]
7082isl.isl_union_map_detect_equalities.restype = c_void_p
7083isl.isl_union_map_detect_equalities.argtypes = [c_void_p]
7084isl.isl_union_map_domain.restype = c_void_p
7085isl.isl_union_map_domain.argtypes = [c_void_p]
7086isl.isl_union_map_domain_factor_domain.restype = c_void_p
7087isl.isl_union_map_domain_factor_domain.argtypes = [c_void_p]
7088isl.isl_union_map_domain_factor_range.restype = c_void_p
7089isl.isl_union_map_domain_factor_range.argtypes = [c_void_p]
7090isl.isl_union_map_domain_map.restype = c_void_p
7091isl.isl_union_map_domain_map.argtypes = [c_void_p]
7092isl.isl_union_map_domain_map_union_pw_multi_aff.restype = c_void_p
7093isl.isl_union_map_domain_map_union_pw_multi_aff.argtypes = [c_void_p]
7094isl.isl_union_map_domain_product.restype = c_void_p
7095isl.isl_union_map_domain_product.argtypes = [c_void_p, c_void_p]
7096isl.isl_union_map_empty_ctx.restype = c_void_p
7097isl.isl_union_map_empty_ctx.argtypes = [Context]
7098isl.isl_union_map_eq_at_multi_union_pw_aff.restype = c_void_p
7099isl.isl_union_map_eq_at_multi_union_pw_aff.argtypes = [c_void_p, c_void_p]
7100isl.isl_union_map_every_map.argtypes = [c_void_p, c_void_p, c_void_p]
7101isl.isl_union_map_extract_map.restype = c_void_p
7102isl.isl_union_map_extract_map.argtypes = [c_void_p, c_void_p]
7103isl.isl_union_map_factor_domain.restype = c_void_p
7104isl.isl_union_map_factor_domain.argtypes = [c_void_p]
7105isl.isl_union_map_factor_range.restype = c_void_p
7106isl.isl_union_map_factor_range.argtypes = [c_void_p]
7107isl.isl_union_map_fixed_power_val.restype = c_void_p
7108isl.isl_union_map_fixed_power_val.argtypes = [c_void_p, c_void_p]
7109isl.isl_union_map_foreach_map.argtypes = [c_void_p, c_void_p, c_void_p]
7110isl.isl_union_map_from_multi_union_pw_aff.restype = c_void_p
7111isl.isl_union_map_from_multi_union_pw_aff.argtypes = [c_void_p]
7112isl.isl_union_map_from_union_pw_multi_aff.restype = c_void_p
7113isl.isl_union_map_from_union_pw_multi_aff.argtypes = [c_void_p]
7114isl.isl_union_map_from_domain.restype = c_void_p
7115isl.isl_union_map_from_domain.argtypes = [c_void_p]
7116isl.isl_union_map_from_domain_and_range.restype = c_void_p
7117isl.isl_union_map_from_domain_and_range.argtypes = [c_void_p, c_void_p]
7118isl.isl_union_map_from_range.restype = c_void_p
7119isl.isl_union_map_from_range.argtypes = [c_void_p]
7120isl.isl_union_map_get_space.restype = c_void_p
7121isl.isl_union_map_get_space.argtypes = [c_void_p]
7122isl.isl_union_map_gist.restype = c_void_p
7123isl.isl_union_map_gist.argtypes = [c_void_p, c_void_p]
7124isl.isl_union_map_gist_domain.restype = c_void_p
7125isl.isl_union_map_gist_domain.argtypes = [c_void_p, c_void_p]
7126isl.isl_union_map_gist_params.restype = c_void_p
7127isl.isl_union_map_gist_params.argtypes = [c_void_p, c_void_p]
7128isl.isl_union_map_gist_range.restype = c_void_p
7129isl.isl_union_map_gist_range.argtypes = [c_void_p, c_void_p]
7130isl.isl_union_map_intersect.restype = c_void_p
7131isl.isl_union_map_intersect.argtypes = [c_void_p, c_void_p]
7132isl.isl_union_map_intersect_domain_space.restype = c_void_p
7133isl.isl_union_map_intersect_domain_space.argtypes = [c_void_p, c_void_p]
7134isl.isl_union_map_intersect_domain_union_set.restype = c_void_p
7135isl.isl_union_map_intersect_domain_union_set.argtypes = [c_void_p, c_void_p]
7136isl.isl_union_map_intersect_params.restype = c_void_p
7137isl.isl_union_map_intersect_params.argtypes = [c_void_p, c_void_p]
7138isl.isl_union_map_intersect_range_space.restype = c_void_p
7139isl.isl_union_map_intersect_range_space.argtypes = [c_void_p, c_void_p]
7140isl.isl_union_map_intersect_range_union_set.restype = c_void_p
7141isl.isl_union_map_intersect_range_union_set.argtypes = [c_void_p, c_void_p]
7142isl.isl_union_map_is_bijective.argtypes = [c_void_p]
7143isl.isl_union_map_is_disjoint.argtypes = [c_void_p, c_void_p]
7144isl.isl_union_map_is_empty.argtypes = [c_void_p]
7145isl.isl_union_map_is_equal.argtypes = [c_void_p, c_void_p]
7146isl.isl_union_map_is_injective.argtypes = [c_void_p]
7147isl.isl_union_map_is_single_valued.argtypes = [c_void_p]
7148isl.isl_union_map_is_strict_subset.argtypes = [c_void_p, c_void_p]
7149isl.isl_union_map_is_subset.argtypes = [c_void_p, c_void_p]
7150isl.isl_union_map_isa_map.argtypes = [c_void_p]
7151isl.isl_union_map_lexmax.restype = c_void_p
7152isl.isl_union_map_lexmax.argtypes = [c_void_p]
7153isl.isl_union_map_lexmin.restype = c_void_p
7154isl.isl_union_map_lexmin.argtypes = [c_void_p]
7155isl.isl_union_map_polyhedral_hull.restype = c_void_p
7156isl.isl_union_map_polyhedral_hull.argtypes = [c_void_p]
7157isl.isl_union_map_preimage_domain_multi_aff.restype = c_void_p
7158isl.isl_union_map_preimage_domain_multi_aff.argtypes = [c_void_p, c_void_p]
7159isl.isl_union_map_preimage_domain_multi_pw_aff.restype = c_void_p
7160isl.isl_union_map_preimage_domain_multi_pw_aff.argtypes = [c_void_p, c_void_p]
7161isl.isl_union_map_preimage_domain_pw_multi_aff.restype = c_void_p
7162isl.isl_union_map_preimage_domain_pw_multi_aff.argtypes = [c_void_p, c_void_p]
7163isl.isl_union_map_preimage_domain_union_pw_multi_aff.restype = c_void_p
7164isl.isl_union_map_preimage_domain_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
7165isl.isl_union_map_preimage_range_multi_aff.restype = c_void_p
7166isl.isl_union_map_preimage_range_multi_aff.argtypes = [c_void_p, c_void_p]
7167isl.isl_union_map_preimage_range_pw_multi_aff.restype = c_void_p
7168isl.isl_union_map_preimage_range_pw_multi_aff.argtypes = [c_void_p, c_void_p]
7169isl.isl_union_map_preimage_range_union_pw_multi_aff.restype = c_void_p
7170isl.isl_union_map_preimage_range_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
7171isl.isl_union_map_product.restype = c_void_p
7172isl.isl_union_map_product.argtypes = [c_void_p, c_void_p]
7173isl.isl_union_map_project_out_all_params.restype = c_void_p
7174isl.isl_union_map_project_out_all_params.argtypes = [c_void_p]
7175isl.isl_union_map_range.restype = c_void_p
7176isl.isl_union_map_range.argtypes = [c_void_p]
7177isl.isl_union_map_range_factor_domain.restype = c_void_p
7178isl.isl_union_map_range_factor_domain.argtypes = [c_void_p]
7179isl.isl_union_map_range_factor_range.restype = c_void_p
7180isl.isl_union_map_range_factor_range.argtypes = [c_void_p]
7181isl.isl_union_map_range_map.restype = c_void_p
7182isl.isl_union_map_range_map.argtypes = [c_void_p]
7183isl.isl_union_map_range_product.restype = c_void_p
7184isl.isl_union_map_range_product.argtypes = [c_void_p, c_void_p]
7185isl.isl_union_map_range_reverse.restype = c_void_p
7186isl.isl_union_map_range_reverse.argtypes = [c_void_p]
7187isl.isl_union_map_reverse.restype = c_void_p
7188isl.isl_union_map_reverse.argtypes = [c_void_p]
7189isl.isl_union_map_subtract.restype = c_void_p
7190isl.isl_union_map_subtract.argtypes = [c_void_p, c_void_p]
7191isl.isl_union_map_subtract_domain.restype = c_void_p
7192isl.isl_union_map_subtract_domain.argtypes = [c_void_p, c_void_p]
7193isl.isl_union_map_subtract_range.restype = c_void_p
7194isl.isl_union_map_subtract_range.argtypes = [c_void_p, c_void_p]
7195isl.isl_union_map_uncurry.restype = c_void_p
7196isl.isl_union_map_uncurry.argtypes = [c_void_p]
7197isl.isl_union_map_union.restype = c_void_p
7198isl.isl_union_map_union.argtypes = [c_void_p, c_void_p]
7199isl.isl_union_map_universe.restype = c_void_p
7200isl.isl_union_map_universe.argtypes = [c_void_p]
7201isl.isl_union_map_wrap.restype = c_void_p
7202isl.isl_union_map_wrap.argtypes = [c_void_p]
7203isl.isl_union_map_zip.restype = c_void_p
7204isl.isl_union_map_zip.argtypes = [c_void_p]
7205isl.isl_union_map_copy.restype = c_void_p
7206isl.isl_union_map_copy.argtypes = [c_void_p]
7207isl.isl_union_map_free.restype = c_void_p
7208isl.isl_union_map_free.argtypes = [c_void_p]
7209isl.isl_union_map_to_str.restype = POINTER(c_char)
7210isl.isl_union_map_to_str.argtypes = [c_void_p]
7211
7212class map(union_map):
7213    def __init__(self, *args, **keywords):
7214        if "ptr" in keywords:
7215            self.ctx = keywords["ctx"]
7216            self.ptr = keywords["ptr"]
7217            return
7218        if len(args) == 1 and args[0].__class__ is basic_map:
7219            self.ctx = Context.getDefaultInstance()
7220            self.ptr = isl.isl_map_from_basic_map(isl.isl_basic_map_copy(args[0].ptr))
7221            return
7222        if len(args) == 1 and type(args[0]) == str:
7223            self.ctx = Context.getDefaultInstance()
7224            self.ptr = isl.isl_map_read_from_str(self.ctx, args[0].encode('ascii'))
7225            return
7226        raise Error
7227    def __del__(self):
7228        if hasattr(self, 'ptr'):
7229            isl.isl_map_free(self.ptr)
7230    def __str__(arg0):
7231        try:
7232            if not arg0.__class__ is map:
7233                arg0 = map(arg0)
7234        except:
7235            raise
7236        ptr = isl.isl_map_to_str(arg0.ptr)
7237        res = cast(ptr, c_char_p).value.decode('ascii')
7238        libc.free(ptr)
7239        return res
7240    def __repr__(self):
7241        s = str(self)
7242        if '"' in s:
7243            return 'isl.map("""%s""")' % s
7244        else:
7245            return 'isl.map("%s")' % s
7246    def affine_hull(arg0):
7247        try:
7248            if not arg0.__class__ is map:
7249                arg0 = map(arg0)
7250        except:
7251            raise
7252        ctx = arg0.ctx
7253        res = isl.isl_map_affine_hull(isl.isl_map_copy(arg0.ptr))
7254        obj = basic_map(ctx=ctx, ptr=res)
7255        return obj
7256    def apply_domain(arg0, arg1):
7257        try:
7258            if not arg0.__class__ is map:
7259                arg0 = map(arg0)
7260        except:
7261            raise
7262        try:
7263            if not arg1.__class__ is map:
7264                arg1 = map(arg1)
7265        except:
7266            return union_map(arg0).apply_domain(arg1)
7267        ctx = arg0.ctx
7268        res = isl.isl_map_apply_domain(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7269        obj = map(ctx=ctx, ptr=res)
7270        return obj
7271    def apply_range(arg0, arg1):
7272        try:
7273            if not arg0.__class__ is map:
7274                arg0 = map(arg0)
7275        except:
7276            raise
7277        try:
7278            if not arg1.__class__ is map:
7279                arg1 = map(arg1)
7280        except:
7281            return union_map(arg0).apply_range(arg1)
7282        ctx = arg0.ctx
7283        res = isl.isl_map_apply_range(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7284        obj = map(ctx=ctx, ptr=res)
7285        return obj
7286    def bind_domain(arg0, arg1):
7287        try:
7288            if not arg0.__class__ is map:
7289                arg0 = map(arg0)
7290        except:
7291            raise
7292        try:
7293            if not arg1.__class__ is multi_id:
7294                arg1 = multi_id(arg1)
7295        except:
7296            return union_map(arg0).bind_domain(arg1)
7297        ctx = arg0.ctx
7298        res = isl.isl_map_bind_domain(isl.isl_map_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
7299        obj = set(ctx=ctx, ptr=res)
7300        return obj
7301    def bind_range(arg0, arg1):
7302        try:
7303            if not arg0.__class__ is map:
7304                arg0 = map(arg0)
7305        except:
7306            raise
7307        try:
7308            if not arg1.__class__ is multi_id:
7309                arg1 = multi_id(arg1)
7310        except:
7311            return union_map(arg0).bind_range(arg1)
7312        ctx = arg0.ctx
7313        res = isl.isl_map_bind_range(isl.isl_map_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
7314        obj = set(ctx=ctx, ptr=res)
7315        return obj
7316    def coalesce(arg0):
7317        try:
7318            if not arg0.__class__ is map:
7319                arg0 = map(arg0)
7320        except:
7321            raise
7322        ctx = arg0.ctx
7323        res = isl.isl_map_coalesce(isl.isl_map_copy(arg0.ptr))
7324        obj = map(ctx=ctx, ptr=res)
7325        return obj
7326    def complement(arg0):
7327        try:
7328            if not arg0.__class__ is map:
7329                arg0 = map(arg0)
7330        except:
7331            raise
7332        ctx = arg0.ctx
7333        res = isl.isl_map_complement(isl.isl_map_copy(arg0.ptr))
7334        obj = map(ctx=ctx, ptr=res)
7335        return obj
7336    def curry(arg0):
7337        try:
7338            if not arg0.__class__ is map:
7339                arg0 = map(arg0)
7340        except:
7341            raise
7342        ctx = arg0.ctx
7343        res = isl.isl_map_curry(isl.isl_map_copy(arg0.ptr))
7344        obj = map(ctx=ctx, ptr=res)
7345        return obj
7346    def deltas(arg0):
7347        try:
7348            if not arg0.__class__ is map:
7349                arg0 = map(arg0)
7350        except:
7351            raise
7352        ctx = arg0.ctx
7353        res = isl.isl_map_deltas(isl.isl_map_copy(arg0.ptr))
7354        obj = set(ctx=ctx, ptr=res)
7355        return obj
7356    def detect_equalities(arg0):
7357        try:
7358            if not arg0.__class__ is map:
7359                arg0 = map(arg0)
7360        except:
7361            raise
7362        ctx = arg0.ctx
7363        res = isl.isl_map_detect_equalities(isl.isl_map_copy(arg0.ptr))
7364        obj = map(ctx=ctx, ptr=res)
7365        return obj
7366    def domain(arg0):
7367        try:
7368            if not arg0.__class__ is map:
7369                arg0 = map(arg0)
7370        except:
7371            raise
7372        ctx = arg0.ctx
7373        res = isl.isl_map_domain(isl.isl_map_copy(arg0.ptr))
7374        obj = set(ctx=ctx, ptr=res)
7375        return obj
7376    def domain_factor_domain(arg0):
7377        try:
7378            if not arg0.__class__ is map:
7379                arg0 = map(arg0)
7380        except:
7381            raise
7382        ctx = arg0.ctx
7383        res = isl.isl_map_domain_factor_domain(isl.isl_map_copy(arg0.ptr))
7384        obj = map(ctx=ctx, ptr=res)
7385        return obj
7386    def domain_factor_range(arg0):
7387        try:
7388            if not arg0.__class__ is map:
7389                arg0 = map(arg0)
7390        except:
7391            raise
7392        ctx = arg0.ctx
7393        res = isl.isl_map_domain_factor_range(isl.isl_map_copy(arg0.ptr))
7394        obj = map(ctx=ctx, ptr=res)
7395        return obj
7396    def domain_product(arg0, arg1):
7397        try:
7398            if not arg0.__class__ is map:
7399                arg0 = map(arg0)
7400        except:
7401            raise
7402        try:
7403            if not arg1.__class__ is map:
7404                arg1 = map(arg1)
7405        except:
7406            return union_map(arg0).domain_product(arg1)
7407        ctx = arg0.ctx
7408        res = isl.isl_map_domain_product(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7409        obj = map(ctx=ctx, ptr=res)
7410        return obj
7411    @staticmethod
7412    def empty(arg0):
7413        try:
7414            if not arg0.__class__ is space:
7415                arg0 = space(arg0)
7416        except:
7417            raise
7418        ctx = arg0.ctx
7419        res = isl.isl_map_empty(isl.isl_space_copy(arg0.ptr))
7420        obj = map(ctx=ctx, ptr=res)
7421        return obj
7422    def eq_at(*args):
7423        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
7424            ctx = args[0].ctx
7425            res = isl.isl_map_eq_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
7426            obj = map(ctx=ctx, ptr=res)
7427            return obj
7428        raise Error
7429    def factor_domain(arg0):
7430        try:
7431            if not arg0.__class__ is map:
7432                arg0 = map(arg0)
7433        except:
7434            raise
7435        ctx = arg0.ctx
7436        res = isl.isl_map_factor_domain(isl.isl_map_copy(arg0.ptr))
7437        obj = map(ctx=ctx, ptr=res)
7438        return obj
7439    def factor_range(arg0):
7440        try:
7441            if not arg0.__class__ is map:
7442                arg0 = map(arg0)
7443        except:
7444            raise
7445        ctx = arg0.ctx
7446        res = isl.isl_map_factor_range(isl.isl_map_copy(arg0.ptr))
7447        obj = map(ctx=ctx, ptr=res)
7448        return obj
7449    def flatten(arg0):
7450        try:
7451            if not arg0.__class__ is map:
7452                arg0 = map(arg0)
7453        except:
7454            raise
7455        ctx = arg0.ctx
7456        res = isl.isl_map_flatten(isl.isl_map_copy(arg0.ptr))
7457        obj = map(ctx=ctx, ptr=res)
7458        return obj
7459    def flatten_domain(arg0):
7460        try:
7461            if not arg0.__class__ is map:
7462                arg0 = map(arg0)
7463        except:
7464            raise
7465        ctx = arg0.ctx
7466        res = isl.isl_map_flatten_domain(isl.isl_map_copy(arg0.ptr))
7467        obj = map(ctx=ctx, ptr=res)
7468        return obj
7469    def flatten_range(arg0):
7470        try:
7471            if not arg0.__class__ is map:
7472                arg0 = map(arg0)
7473        except:
7474            raise
7475        ctx = arg0.ctx
7476        res = isl.isl_map_flatten_range(isl.isl_map_copy(arg0.ptr))
7477        obj = map(ctx=ctx, ptr=res)
7478        return obj
7479    def foreach_basic_map(arg0, arg1):
7480        try:
7481            if not arg0.__class__ is map:
7482                arg0 = map(arg0)
7483        except:
7484            raise
7485        exc_info = [None]
7486        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
7487        def cb_func(cb_arg0, cb_arg1):
7488            cb_arg0 = basic_map(ctx=arg0.ctx, ptr=(cb_arg0))
7489            try:
7490                arg1(cb_arg0)
7491            except:
7492                import sys
7493                exc_info[0] = sys.exc_info()
7494                return -1
7495            return 0
7496        cb = fn(cb_func)
7497        ctx = arg0.ctx
7498        res = isl.isl_map_foreach_basic_map(arg0.ptr, cb, None)
7499        if exc_info[0] != None:
7500            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
7501        if res < 0:
7502            raise
7503    def range_simple_fixed_box_hull(arg0):
7504        try:
7505            if not arg0.__class__ is map:
7506                arg0 = map(arg0)
7507        except:
7508            raise
7509        ctx = arg0.ctx
7510        res = isl.isl_map_get_range_simple_fixed_box_hull(arg0.ptr)
7511        obj = fixed_box(ctx=ctx, ptr=res)
7512        return obj
7513    def get_range_simple_fixed_box_hull(arg0):
7514        return arg0.range_simple_fixed_box_hull()
7515    def space(arg0):
7516        try:
7517            if not arg0.__class__ is map:
7518                arg0 = map(arg0)
7519        except:
7520            raise
7521        ctx = arg0.ctx
7522        res = isl.isl_map_get_space(arg0.ptr)
7523        obj = space(ctx=ctx, ptr=res)
7524        return obj
7525    def get_space(arg0):
7526        return arg0.space()
7527    def gist(arg0, arg1):
7528        try:
7529            if not arg0.__class__ is map:
7530                arg0 = map(arg0)
7531        except:
7532            raise
7533        try:
7534            if not arg1.__class__ is map:
7535                arg1 = map(arg1)
7536        except:
7537            return union_map(arg0).gist(arg1)
7538        ctx = arg0.ctx
7539        res = isl.isl_map_gist(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7540        obj = map(ctx=ctx, ptr=res)
7541        return obj
7542    def gist_domain(arg0, arg1):
7543        try:
7544            if not arg0.__class__ is map:
7545                arg0 = map(arg0)
7546        except:
7547            raise
7548        try:
7549            if not arg1.__class__ is set:
7550                arg1 = set(arg1)
7551        except:
7552            return union_map(arg0).gist_domain(arg1)
7553        ctx = arg0.ctx
7554        res = isl.isl_map_gist_domain(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
7555        obj = map(ctx=ctx, ptr=res)
7556        return obj
7557    def intersect(arg0, arg1):
7558        try:
7559            if not arg0.__class__ is map:
7560                arg0 = map(arg0)
7561        except:
7562            raise
7563        try:
7564            if not arg1.__class__ is map:
7565                arg1 = map(arg1)
7566        except:
7567            return union_map(arg0).intersect(arg1)
7568        ctx = arg0.ctx
7569        res = isl.isl_map_intersect(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7570        obj = map(ctx=ctx, ptr=res)
7571        return obj
7572    def intersect_domain(arg0, arg1):
7573        try:
7574            if not arg0.__class__ is map:
7575                arg0 = map(arg0)
7576        except:
7577            raise
7578        try:
7579            if not arg1.__class__ is set:
7580                arg1 = set(arg1)
7581        except:
7582            return union_map(arg0).intersect_domain(arg1)
7583        ctx = arg0.ctx
7584        res = isl.isl_map_intersect_domain(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
7585        obj = map(ctx=ctx, ptr=res)
7586        return obj
7587    def intersect_params(arg0, arg1):
7588        try:
7589            if not arg0.__class__ is map:
7590                arg0 = map(arg0)
7591        except:
7592            raise
7593        try:
7594            if not arg1.__class__ is set:
7595                arg1 = set(arg1)
7596        except:
7597            return union_map(arg0).intersect_params(arg1)
7598        ctx = arg0.ctx
7599        res = isl.isl_map_intersect_params(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
7600        obj = map(ctx=ctx, ptr=res)
7601        return obj
7602    def intersect_range(arg0, arg1):
7603        try:
7604            if not arg0.__class__ is map:
7605                arg0 = map(arg0)
7606        except:
7607            raise
7608        try:
7609            if not arg1.__class__ is set:
7610                arg1 = set(arg1)
7611        except:
7612            return union_map(arg0).intersect_range(arg1)
7613        ctx = arg0.ctx
7614        res = isl.isl_map_intersect_range(isl.isl_map_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
7615        obj = map(ctx=ctx, ptr=res)
7616        return obj
7617    def is_bijective(arg0):
7618        try:
7619            if not arg0.__class__ is map:
7620                arg0 = map(arg0)
7621        except:
7622            raise
7623        ctx = arg0.ctx
7624        res = isl.isl_map_is_bijective(arg0.ptr)
7625        if res < 0:
7626            raise
7627        return bool(res)
7628    def is_disjoint(arg0, arg1):
7629        try:
7630            if not arg0.__class__ is map:
7631                arg0 = map(arg0)
7632        except:
7633            raise
7634        try:
7635            if not arg1.__class__ is map:
7636                arg1 = map(arg1)
7637        except:
7638            return union_map(arg0).is_disjoint(arg1)
7639        ctx = arg0.ctx
7640        res = isl.isl_map_is_disjoint(arg0.ptr, arg1.ptr)
7641        if res < 0:
7642            raise
7643        return bool(res)
7644    def is_empty(arg0):
7645        try:
7646            if not arg0.__class__ is map:
7647                arg0 = map(arg0)
7648        except:
7649            raise
7650        ctx = arg0.ctx
7651        res = isl.isl_map_is_empty(arg0.ptr)
7652        if res < 0:
7653            raise
7654        return bool(res)
7655    def is_equal(arg0, arg1):
7656        try:
7657            if not arg0.__class__ is map:
7658                arg0 = map(arg0)
7659        except:
7660            raise
7661        try:
7662            if not arg1.__class__ is map:
7663                arg1 = map(arg1)
7664        except:
7665            return union_map(arg0).is_equal(arg1)
7666        ctx = arg0.ctx
7667        res = isl.isl_map_is_equal(arg0.ptr, arg1.ptr)
7668        if res < 0:
7669            raise
7670        return bool(res)
7671    def is_injective(arg0):
7672        try:
7673            if not arg0.__class__ is map:
7674                arg0 = map(arg0)
7675        except:
7676            raise
7677        ctx = arg0.ctx
7678        res = isl.isl_map_is_injective(arg0.ptr)
7679        if res < 0:
7680            raise
7681        return bool(res)
7682    def is_single_valued(arg0):
7683        try:
7684            if not arg0.__class__ is map:
7685                arg0 = map(arg0)
7686        except:
7687            raise
7688        ctx = arg0.ctx
7689        res = isl.isl_map_is_single_valued(arg0.ptr)
7690        if res < 0:
7691            raise
7692        return bool(res)
7693    def is_strict_subset(arg0, arg1):
7694        try:
7695            if not arg0.__class__ is map:
7696                arg0 = map(arg0)
7697        except:
7698            raise
7699        try:
7700            if not arg1.__class__ is map:
7701                arg1 = map(arg1)
7702        except:
7703            return union_map(arg0).is_strict_subset(arg1)
7704        ctx = arg0.ctx
7705        res = isl.isl_map_is_strict_subset(arg0.ptr, arg1.ptr)
7706        if res < 0:
7707            raise
7708        return bool(res)
7709    def is_subset(arg0, arg1):
7710        try:
7711            if not arg0.__class__ is map:
7712                arg0 = map(arg0)
7713        except:
7714            raise
7715        try:
7716            if not arg1.__class__ is map:
7717                arg1 = map(arg1)
7718        except:
7719            return union_map(arg0).is_subset(arg1)
7720        ctx = arg0.ctx
7721        res = isl.isl_map_is_subset(arg0.ptr, arg1.ptr)
7722        if res < 0:
7723            raise
7724        return bool(res)
7725    def lex_ge_at(*args):
7726        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
7727            ctx = args[0].ctx
7728            res = isl.isl_map_lex_ge_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
7729            obj = map(ctx=ctx, ptr=res)
7730            return obj
7731        raise Error
7732    def lex_gt_at(*args):
7733        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
7734            ctx = args[0].ctx
7735            res = isl.isl_map_lex_gt_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
7736            obj = map(ctx=ctx, ptr=res)
7737            return obj
7738        raise Error
7739    def lex_le_at(*args):
7740        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
7741            ctx = args[0].ctx
7742            res = isl.isl_map_lex_le_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
7743            obj = map(ctx=ctx, ptr=res)
7744            return obj
7745        raise Error
7746    def lex_lt_at(*args):
7747        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
7748            ctx = args[0].ctx
7749            res = isl.isl_map_lex_lt_at_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
7750            obj = map(ctx=ctx, ptr=res)
7751            return obj
7752        raise Error
7753    def lexmax(arg0):
7754        try:
7755            if not arg0.__class__ is map:
7756                arg0 = map(arg0)
7757        except:
7758            raise
7759        ctx = arg0.ctx
7760        res = isl.isl_map_lexmax(isl.isl_map_copy(arg0.ptr))
7761        obj = map(ctx=ctx, ptr=res)
7762        return obj
7763    def lexmax_pw_multi_aff(arg0):
7764        try:
7765            if not arg0.__class__ is map:
7766                arg0 = map(arg0)
7767        except:
7768            raise
7769        ctx = arg0.ctx
7770        res = isl.isl_map_lexmax_pw_multi_aff(isl.isl_map_copy(arg0.ptr))
7771        obj = pw_multi_aff(ctx=ctx, ptr=res)
7772        return obj
7773    def lexmin(arg0):
7774        try:
7775            if not arg0.__class__ is map:
7776                arg0 = map(arg0)
7777        except:
7778            raise
7779        ctx = arg0.ctx
7780        res = isl.isl_map_lexmin(isl.isl_map_copy(arg0.ptr))
7781        obj = map(ctx=ctx, ptr=res)
7782        return obj
7783    def lexmin_pw_multi_aff(arg0):
7784        try:
7785            if not arg0.__class__ is map:
7786                arg0 = map(arg0)
7787        except:
7788            raise
7789        ctx = arg0.ctx
7790        res = isl.isl_map_lexmin_pw_multi_aff(isl.isl_map_copy(arg0.ptr))
7791        obj = pw_multi_aff(ctx=ctx, ptr=res)
7792        return obj
7793    def lower_bound(*args):
7794        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
7795            ctx = args[0].ctx
7796            res = isl.isl_map_lower_bound_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
7797            obj = map(ctx=ctx, ptr=res)
7798            return obj
7799        if len(args) == 2 and args[1].__class__ is multi_val:
7800            ctx = args[0].ctx
7801            res = isl.isl_map_lower_bound_multi_val(isl.isl_map_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
7802            obj = map(ctx=ctx, ptr=res)
7803            return obj
7804        raise Error
7805    def max_multi_pw_aff(arg0):
7806        try:
7807            if not arg0.__class__ is map:
7808                arg0 = map(arg0)
7809        except:
7810            raise
7811        ctx = arg0.ctx
7812        res = isl.isl_map_max_multi_pw_aff(isl.isl_map_copy(arg0.ptr))
7813        obj = multi_pw_aff(ctx=ctx, ptr=res)
7814        return obj
7815    def min_multi_pw_aff(arg0):
7816        try:
7817            if not arg0.__class__ is map:
7818                arg0 = map(arg0)
7819        except:
7820            raise
7821        ctx = arg0.ctx
7822        res = isl.isl_map_min_multi_pw_aff(isl.isl_map_copy(arg0.ptr))
7823        obj = multi_pw_aff(ctx=ctx, ptr=res)
7824        return obj
7825    def polyhedral_hull(arg0):
7826        try:
7827            if not arg0.__class__ is map:
7828                arg0 = map(arg0)
7829        except:
7830            raise
7831        ctx = arg0.ctx
7832        res = isl.isl_map_polyhedral_hull(isl.isl_map_copy(arg0.ptr))
7833        obj = basic_map(ctx=ctx, ptr=res)
7834        return obj
7835    def preimage_domain(*args):
7836        if len(args) == 2 and args[1].__class__ is multi_aff:
7837            ctx = args[0].ctx
7838            res = isl.isl_map_preimage_domain_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
7839            obj = map(ctx=ctx, ptr=res)
7840            return obj
7841        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
7842            ctx = args[0].ctx
7843            res = isl.isl_map_preimage_domain_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
7844            obj = map(ctx=ctx, ptr=res)
7845            return obj
7846        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
7847            ctx = args[0].ctx
7848            res = isl.isl_map_preimage_domain_pw_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
7849            obj = map(ctx=ctx, ptr=res)
7850            return obj
7851        raise Error
7852    def preimage_range(*args):
7853        if len(args) == 2 and args[1].__class__ is multi_aff:
7854            ctx = args[0].ctx
7855            res = isl.isl_map_preimage_range_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
7856            obj = map(ctx=ctx, ptr=res)
7857            return obj
7858        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
7859            ctx = args[0].ctx
7860            res = isl.isl_map_preimage_range_pw_multi_aff(isl.isl_map_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
7861            obj = map(ctx=ctx, ptr=res)
7862            return obj
7863        raise Error
7864    def project_out_all_params(arg0):
7865        try:
7866            if not arg0.__class__ is map:
7867                arg0 = map(arg0)
7868        except:
7869            raise
7870        ctx = arg0.ctx
7871        res = isl.isl_map_project_out_all_params(isl.isl_map_copy(arg0.ptr))
7872        obj = map(ctx=ctx, ptr=res)
7873        return obj
7874    def range(arg0):
7875        try:
7876            if not arg0.__class__ is map:
7877                arg0 = map(arg0)
7878        except:
7879            raise
7880        ctx = arg0.ctx
7881        res = isl.isl_map_range(isl.isl_map_copy(arg0.ptr))
7882        obj = set(ctx=ctx, ptr=res)
7883        return obj
7884    def range_factor_domain(arg0):
7885        try:
7886            if not arg0.__class__ is map:
7887                arg0 = map(arg0)
7888        except:
7889            raise
7890        ctx = arg0.ctx
7891        res = isl.isl_map_range_factor_domain(isl.isl_map_copy(arg0.ptr))
7892        obj = map(ctx=ctx, ptr=res)
7893        return obj
7894    def range_factor_range(arg0):
7895        try:
7896            if not arg0.__class__ is map:
7897                arg0 = map(arg0)
7898        except:
7899            raise
7900        ctx = arg0.ctx
7901        res = isl.isl_map_range_factor_range(isl.isl_map_copy(arg0.ptr))
7902        obj = map(ctx=ctx, ptr=res)
7903        return obj
7904    def range_product(arg0, arg1):
7905        try:
7906            if not arg0.__class__ is map:
7907                arg0 = map(arg0)
7908        except:
7909            raise
7910        try:
7911            if not arg1.__class__ is map:
7912                arg1 = map(arg1)
7913        except:
7914            return union_map(arg0).range_product(arg1)
7915        ctx = arg0.ctx
7916        res = isl.isl_map_range_product(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7917        obj = map(ctx=ctx, ptr=res)
7918        return obj
7919    def range_reverse(arg0):
7920        try:
7921            if not arg0.__class__ is map:
7922                arg0 = map(arg0)
7923        except:
7924            raise
7925        ctx = arg0.ctx
7926        res = isl.isl_map_range_reverse(isl.isl_map_copy(arg0.ptr))
7927        obj = map(ctx=ctx, ptr=res)
7928        return obj
7929    def reverse(arg0):
7930        try:
7931            if not arg0.__class__ is map:
7932                arg0 = map(arg0)
7933        except:
7934            raise
7935        ctx = arg0.ctx
7936        res = isl.isl_map_reverse(isl.isl_map_copy(arg0.ptr))
7937        obj = map(ctx=ctx, ptr=res)
7938        return obj
7939    def sample(arg0):
7940        try:
7941            if not arg0.__class__ is map:
7942                arg0 = map(arg0)
7943        except:
7944            raise
7945        ctx = arg0.ctx
7946        res = isl.isl_map_sample(isl.isl_map_copy(arg0.ptr))
7947        obj = basic_map(ctx=ctx, ptr=res)
7948        return obj
7949    def subtract(arg0, arg1):
7950        try:
7951            if not arg0.__class__ is map:
7952                arg0 = map(arg0)
7953        except:
7954            raise
7955        try:
7956            if not arg1.__class__ is map:
7957                arg1 = map(arg1)
7958        except:
7959            return union_map(arg0).subtract(arg1)
7960        ctx = arg0.ctx
7961        res = isl.isl_map_subtract(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7962        obj = map(ctx=ctx, ptr=res)
7963        return obj
7964    def uncurry(arg0):
7965        try:
7966            if not arg0.__class__ is map:
7967                arg0 = map(arg0)
7968        except:
7969            raise
7970        ctx = arg0.ctx
7971        res = isl.isl_map_uncurry(isl.isl_map_copy(arg0.ptr))
7972        obj = map(ctx=ctx, ptr=res)
7973        return obj
7974    def union(arg0, arg1):
7975        try:
7976            if not arg0.__class__ is map:
7977                arg0 = map(arg0)
7978        except:
7979            raise
7980        try:
7981            if not arg1.__class__ is map:
7982                arg1 = map(arg1)
7983        except:
7984            return union_map(arg0).union(arg1)
7985        ctx = arg0.ctx
7986        res = isl.isl_map_union(isl.isl_map_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
7987        obj = map(ctx=ctx, ptr=res)
7988        return obj
7989    @staticmethod
7990    def universe(arg0):
7991        try:
7992            if not arg0.__class__ is space:
7993                arg0 = space(arg0)
7994        except:
7995            raise
7996        ctx = arg0.ctx
7997        res = isl.isl_map_universe(isl.isl_space_copy(arg0.ptr))
7998        obj = map(ctx=ctx, ptr=res)
7999        return obj
8000    def unshifted_simple_hull(arg0):
8001        try:
8002            if not arg0.__class__ is map:
8003                arg0 = map(arg0)
8004        except:
8005            raise
8006        ctx = arg0.ctx
8007        res = isl.isl_map_unshifted_simple_hull(isl.isl_map_copy(arg0.ptr))
8008        obj = basic_map(ctx=ctx, ptr=res)
8009        return obj
8010    def upper_bound(*args):
8011        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
8012            ctx = args[0].ctx
8013            res = isl.isl_map_upper_bound_multi_pw_aff(isl.isl_map_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
8014            obj = map(ctx=ctx, ptr=res)
8015            return obj
8016        if len(args) == 2 and args[1].__class__ is multi_val:
8017            ctx = args[0].ctx
8018            res = isl.isl_map_upper_bound_multi_val(isl.isl_map_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
8019            obj = map(ctx=ctx, ptr=res)
8020            return obj
8021        raise Error
8022    def wrap(arg0):
8023        try:
8024            if not arg0.__class__ is map:
8025                arg0 = map(arg0)
8026        except:
8027            raise
8028        ctx = arg0.ctx
8029        res = isl.isl_map_wrap(isl.isl_map_copy(arg0.ptr))
8030        obj = set(ctx=ctx, ptr=res)
8031        return obj
8032
8033isl.isl_map_from_basic_map.restype = c_void_p
8034isl.isl_map_from_basic_map.argtypes = [c_void_p]
8035isl.isl_map_read_from_str.restype = c_void_p
8036isl.isl_map_read_from_str.argtypes = [Context, c_char_p]
8037isl.isl_map_affine_hull.restype = c_void_p
8038isl.isl_map_affine_hull.argtypes = [c_void_p]
8039isl.isl_map_apply_domain.restype = c_void_p
8040isl.isl_map_apply_domain.argtypes = [c_void_p, c_void_p]
8041isl.isl_map_apply_range.restype = c_void_p
8042isl.isl_map_apply_range.argtypes = [c_void_p, c_void_p]
8043isl.isl_map_bind_domain.restype = c_void_p
8044isl.isl_map_bind_domain.argtypes = [c_void_p, c_void_p]
8045isl.isl_map_bind_range.restype = c_void_p
8046isl.isl_map_bind_range.argtypes = [c_void_p, c_void_p]
8047isl.isl_map_coalesce.restype = c_void_p
8048isl.isl_map_coalesce.argtypes = [c_void_p]
8049isl.isl_map_complement.restype = c_void_p
8050isl.isl_map_complement.argtypes = [c_void_p]
8051isl.isl_map_curry.restype = c_void_p
8052isl.isl_map_curry.argtypes = [c_void_p]
8053isl.isl_map_deltas.restype = c_void_p
8054isl.isl_map_deltas.argtypes = [c_void_p]
8055isl.isl_map_detect_equalities.restype = c_void_p
8056isl.isl_map_detect_equalities.argtypes = [c_void_p]
8057isl.isl_map_domain.restype = c_void_p
8058isl.isl_map_domain.argtypes = [c_void_p]
8059isl.isl_map_domain_factor_domain.restype = c_void_p
8060isl.isl_map_domain_factor_domain.argtypes = [c_void_p]
8061isl.isl_map_domain_factor_range.restype = c_void_p
8062isl.isl_map_domain_factor_range.argtypes = [c_void_p]
8063isl.isl_map_domain_product.restype = c_void_p
8064isl.isl_map_domain_product.argtypes = [c_void_p, c_void_p]
8065isl.isl_map_empty.restype = c_void_p
8066isl.isl_map_empty.argtypes = [c_void_p]
8067isl.isl_map_eq_at_multi_pw_aff.restype = c_void_p
8068isl.isl_map_eq_at_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8069isl.isl_map_factor_domain.restype = c_void_p
8070isl.isl_map_factor_domain.argtypes = [c_void_p]
8071isl.isl_map_factor_range.restype = c_void_p
8072isl.isl_map_factor_range.argtypes = [c_void_p]
8073isl.isl_map_flatten.restype = c_void_p
8074isl.isl_map_flatten.argtypes = [c_void_p]
8075isl.isl_map_flatten_domain.restype = c_void_p
8076isl.isl_map_flatten_domain.argtypes = [c_void_p]
8077isl.isl_map_flatten_range.restype = c_void_p
8078isl.isl_map_flatten_range.argtypes = [c_void_p]
8079isl.isl_map_foreach_basic_map.argtypes = [c_void_p, c_void_p, c_void_p]
8080isl.isl_map_get_range_simple_fixed_box_hull.restype = c_void_p
8081isl.isl_map_get_range_simple_fixed_box_hull.argtypes = [c_void_p]
8082isl.isl_map_get_space.restype = c_void_p
8083isl.isl_map_get_space.argtypes = [c_void_p]
8084isl.isl_map_gist.restype = c_void_p
8085isl.isl_map_gist.argtypes = [c_void_p, c_void_p]
8086isl.isl_map_gist_domain.restype = c_void_p
8087isl.isl_map_gist_domain.argtypes = [c_void_p, c_void_p]
8088isl.isl_map_intersect.restype = c_void_p
8089isl.isl_map_intersect.argtypes = [c_void_p, c_void_p]
8090isl.isl_map_intersect_domain.restype = c_void_p
8091isl.isl_map_intersect_domain.argtypes = [c_void_p, c_void_p]
8092isl.isl_map_intersect_params.restype = c_void_p
8093isl.isl_map_intersect_params.argtypes = [c_void_p, c_void_p]
8094isl.isl_map_intersect_range.restype = c_void_p
8095isl.isl_map_intersect_range.argtypes = [c_void_p, c_void_p]
8096isl.isl_map_is_bijective.argtypes = [c_void_p]
8097isl.isl_map_is_disjoint.argtypes = [c_void_p, c_void_p]
8098isl.isl_map_is_empty.argtypes = [c_void_p]
8099isl.isl_map_is_equal.argtypes = [c_void_p, c_void_p]
8100isl.isl_map_is_injective.argtypes = [c_void_p]
8101isl.isl_map_is_single_valued.argtypes = [c_void_p]
8102isl.isl_map_is_strict_subset.argtypes = [c_void_p, c_void_p]
8103isl.isl_map_is_subset.argtypes = [c_void_p, c_void_p]
8104isl.isl_map_lex_ge_at_multi_pw_aff.restype = c_void_p
8105isl.isl_map_lex_ge_at_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8106isl.isl_map_lex_gt_at_multi_pw_aff.restype = c_void_p
8107isl.isl_map_lex_gt_at_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8108isl.isl_map_lex_le_at_multi_pw_aff.restype = c_void_p
8109isl.isl_map_lex_le_at_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8110isl.isl_map_lex_lt_at_multi_pw_aff.restype = c_void_p
8111isl.isl_map_lex_lt_at_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8112isl.isl_map_lexmax.restype = c_void_p
8113isl.isl_map_lexmax.argtypes = [c_void_p]
8114isl.isl_map_lexmax_pw_multi_aff.restype = c_void_p
8115isl.isl_map_lexmax_pw_multi_aff.argtypes = [c_void_p]
8116isl.isl_map_lexmin.restype = c_void_p
8117isl.isl_map_lexmin.argtypes = [c_void_p]
8118isl.isl_map_lexmin_pw_multi_aff.restype = c_void_p
8119isl.isl_map_lexmin_pw_multi_aff.argtypes = [c_void_p]
8120isl.isl_map_lower_bound_multi_pw_aff.restype = c_void_p
8121isl.isl_map_lower_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8122isl.isl_map_lower_bound_multi_val.restype = c_void_p
8123isl.isl_map_lower_bound_multi_val.argtypes = [c_void_p, c_void_p]
8124isl.isl_map_max_multi_pw_aff.restype = c_void_p
8125isl.isl_map_max_multi_pw_aff.argtypes = [c_void_p]
8126isl.isl_map_min_multi_pw_aff.restype = c_void_p
8127isl.isl_map_min_multi_pw_aff.argtypes = [c_void_p]
8128isl.isl_map_polyhedral_hull.restype = c_void_p
8129isl.isl_map_polyhedral_hull.argtypes = [c_void_p]
8130isl.isl_map_preimage_domain_multi_aff.restype = c_void_p
8131isl.isl_map_preimage_domain_multi_aff.argtypes = [c_void_p, c_void_p]
8132isl.isl_map_preimage_domain_multi_pw_aff.restype = c_void_p
8133isl.isl_map_preimage_domain_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8134isl.isl_map_preimage_domain_pw_multi_aff.restype = c_void_p
8135isl.isl_map_preimage_domain_pw_multi_aff.argtypes = [c_void_p, c_void_p]
8136isl.isl_map_preimage_range_multi_aff.restype = c_void_p
8137isl.isl_map_preimage_range_multi_aff.argtypes = [c_void_p, c_void_p]
8138isl.isl_map_preimage_range_pw_multi_aff.restype = c_void_p
8139isl.isl_map_preimage_range_pw_multi_aff.argtypes = [c_void_p, c_void_p]
8140isl.isl_map_project_out_all_params.restype = c_void_p
8141isl.isl_map_project_out_all_params.argtypes = [c_void_p]
8142isl.isl_map_range.restype = c_void_p
8143isl.isl_map_range.argtypes = [c_void_p]
8144isl.isl_map_range_factor_domain.restype = c_void_p
8145isl.isl_map_range_factor_domain.argtypes = [c_void_p]
8146isl.isl_map_range_factor_range.restype = c_void_p
8147isl.isl_map_range_factor_range.argtypes = [c_void_p]
8148isl.isl_map_range_product.restype = c_void_p
8149isl.isl_map_range_product.argtypes = [c_void_p, c_void_p]
8150isl.isl_map_range_reverse.restype = c_void_p
8151isl.isl_map_range_reverse.argtypes = [c_void_p]
8152isl.isl_map_reverse.restype = c_void_p
8153isl.isl_map_reverse.argtypes = [c_void_p]
8154isl.isl_map_sample.restype = c_void_p
8155isl.isl_map_sample.argtypes = [c_void_p]
8156isl.isl_map_subtract.restype = c_void_p
8157isl.isl_map_subtract.argtypes = [c_void_p, c_void_p]
8158isl.isl_map_uncurry.restype = c_void_p
8159isl.isl_map_uncurry.argtypes = [c_void_p]
8160isl.isl_map_union.restype = c_void_p
8161isl.isl_map_union.argtypes = [c_void_p, c_void_p]
8162isl.isl_map_universe.restype = c_void_p
8163isl.isl_map_universe.argtypes = [c_void_p]
8164isl.isl_map_unshifted_simple_hull.restype = c_void_p
8165isl.isl_map_unshifted_simple_hull.argtypes = [c_void_p]
8166isl.isl_map_upper_bound_multi_pw_aff.restype = c_void_p
8167isl.isl_map_upper_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p]
8168isl.isl_map_upper_bound_multi_val.restype = c_void_p
8169isl.isl_map_upper_bound_multi_val.argtypes = [c_void_p, c_void_p]
8170isl.isl_map_wrap.restype = c_void_p
8171isl.isl_map_wrap.argtypes = [c_void_p]
8172isl.isl_map_copy.restype = c_void_p
8173isl.isl_map_copy.argtypes = [c_void_p]
8174isl.isl_map_free.restype = c_void_p
8175isl.isl_map_free.argtypes = [c_void_p]
8176isl.isl_map_to_str.restype = POINTER(c_char)
8177isl.isl_map_to_str.argtypes = [c_void_p]
8178
8179class basic_map(map):
8180    def __init__(self, *args, **keywords):
8181        if "ptr" in keywords:
8182            self.ctx = keywords["ctx"]
8183            self.ptr = keywords["ptr"]
8184            return
8185        if len(args) == 1 and type(args[0]) == str:
8186            self.ctx = Context.getDefaultInstance()
8187            self.ptr = isl.isl_basic_map_read_from_str(self.ctx, args[0].encode('ascii'))
8188            return
8189        raise Error
8190    def __del__(self):
8191        if hasattr(self, 'ptr'):
8192            isl.isl_basic_map_free(self.ptr)
8193    def __str__(arg0):
8194        try:
8195            if not arg0.__class__ is basic_map:
8196                arg0 = basic_map(arg0)
8197        except:
8198            raise
8199        ptr = isl.isl_basic_map_to_str(arg0.ptr)
8200        res = cast(ptr, c_char_p).value.decode('ascii')
8201        libc.free(ptr)
8202        return res
8203    def __repr__(self):
8204        s = str(self)
8205        if '"' in s:
8206            return 'isl.basic_map("""%s""")' % s
8207        else:
8208            return 'isl.basic_map("%s")' % s
8209    def affine_hull(arg0):
8210        try:
8211            if not arg0.__class__ is basic_map:
8212                arg0 = basic_map(arg0)
8213        except:
8214            raise
8215        ctx = arg0.ctx
8216        res = isl.isl_basic_map_affine_hull(isl.isl_basic_map_copy(arg0.ptr))
8217        obj = basic_map(ctx=ctx, ptr=res)
8218        return obj
8219    def apply_domain(arg0, arg1):
8220        try:
8221            if not arg0.__class__ is basic_map:
8222                arg0 = basic_map(arg0)
8223        except:
8224            raise
8225        try:
8226            if not arg1.__class__ is basic_map:
8227                arg1 = basic_map(arg1)
8228        except:
8229            return map(arg0).apply_domain(arg1)
8230        ctx = arg0.ctx
8231        res = isl.isl_basic_map_apply_domain(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr))
8232        obj = basic_map(ctx=ctx, ptr=res)
8233        return obj
8234    def apply_range(arg0, arg1):
8235        try:
8236            if not arg0.__class__ is basic_map:
8237                arg0 = basic_map(arg0)
8238        except:
8239            raise
8240        try:
8241            if not arg1.__class__ is basic_map:
8242                arg1 = basic_map(arg1)
8243        except:
8244            return map(arg0).apply_range(arg1)
8245        ctx = arg0.ctx
8246        res = isl.isl_basic_map_apply_range(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr))
8247        obj = basic_map(ctx=ctx, ptr=res)
8248        return obj
8249    def deltas(arg0):
8250        try:
8251            if not arg0.__class__ is basic_map:
8252                arg0 = basic_map(arg0)
8253        except:
8254            raise
8255        ctx = arg0.ctx
8256        res = isl.isl_basic_map_deltas(isl.isl_basic_map_copy(arg0.ptr))
8257        obj = basic_set(ctx=ctx, ptr=res)
8258        return obj
8259    def detect_equalities(arg0):
8260        try:
8261            if not arg0.__class__ is basic_map:
8262                arg0 = basic_map(arg0)
8263        except:
8264            raise
8265        ctx = arg0.ctx
8266        res = isl.isl_basic_map_detect_equalities(isl.isl_basic_map_copy(arg0.ptr))
8267        obj = basic_map(ctx=ctx, ptr=res)
8268        return obj
8269    def flatten(arg0):
8270        try:
8271            if not arg0.__class__ is basic_map:
8272                arg0 = basic_map(arg0)
8273        except:
8274            raise
8275        ctx = arg0.ctx
8276        res = isl.isl_basic_map_flatten(isl.isl_basic_map_copy(arg0.ptr))
8277        obj = basic_map(ctx=ctx, ptr=res)
8278        return obj
8279    def flatten_domain(arg0):
8280        try:
8281            if not arg0.__class__ is basic_map:
8282                arg0 = basic_map(arg0)
8283        except:
8284            raise
8285        ctx = arg0.ctx
8286        res = isl.isl_basic_map_flatten_domain(isl.isl_basic_map_copy(arg0.ptr))
8287        obj = basic_map(ctx=ctx, ptr=res)
8288        return obj
8289    def flatten_range(arg0):
8290        try:
8291            if not arg0.__class__ is basic_map:
8292                arg0 = basic_map(arg0)
8293        except:
8294            raise
8295        ctx = arg0.ctx
8296        res = isl.isl_basic_map_flatten_range(isl.isl_basic_map_copy(arg0.ptr))
8297        obj = basic_map(ctx=ctx, ptr=res)
8298        return obj
8299    def gist(arg0, arg1):
8300        try:
8301            if not arg0.__class__ is basic_map:
8302                arg0 = basic_map(arg0)
8303        except:
8304            raise
8305        try:
8306            if not arg1.__class__ is basic_map:
8307                arg1 = basic_map(arg1)
8308        except:
8309            return map(arg0).gist(arg1)
8310        ctx = arg0.ctx
8311        res = isl.isl_basic_map_gist(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr))
8312        obj = basic_map(ctx=ctx, ptr=res)
8313        return obj
8314    def intersect(arg0, arg1):
8315        try:
8316            if not arg0.__class__ is basic_map:
8317                arg0 = basic_map(arg0)
8318        except:
8319            raise
8320        try:
8321            if not arg1.__class__ is basic_map:
8322                arg1 = basic_map(arg1)
8323        except:
8324            return map(arg0).intersect(arg1)
8325        ctx = arg0.ctx
8326        res = isl.isl_basic_map_intersect(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr))
8327        obj = basic_map(ctx=ctx, ptr=res)
8328        return obj
8329    def intersect_domain(arg0, arg1):
8330        try:
8331            if not arg0.__class__ is basic_map:
8332                arg0 = basic_map(arg0)
8333        except:
8334            raise
8335        try:
8336            if not arg1.__class__ is basic_set:
8337                arg1 = basic_set(arg1)
8338        except:
8339            return map(arg0).intersect_domain(arg1)
8340        ctx = arg0.ctx
8341        res = isl.isl_basic_map_intersect_domain(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr))
8342        obj = basic_map(ctx=ctx, ptr=res)
8343        return obj
8344    def intersect_range(arg0, arg1):
8345        try:
8346            if not arg0.__class__ is basic_map:
8347                arg0 = basic_map(arg0)
8348        except:
8349            raise
8350        try:
8351            if not arg1.__class__ is basic_set:
8352                arg1 = basic_set(arg1)
8353        except:
8354            return map(arg0).intersect_range(arg1)
8355        ctx = arg0.ctx
8356        res = isl.isl_basic_map_intersect_range(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr))
8357        obj = basic_map(ctx=ctx, ptr=res)
8358        return obj
8359    def is_empty(arg0):
8360        try:
8361            if not arg0.__class__ is basic_map:
8362                arg0 = basic_map(arg0)
8363        except:
8364            raise
8365        ctx = arg0.ctx
8366        res = isl.isl_basic_map_is_empty(arg0.ptr)
8367        if res < 0:
8368            raise
8369        return bool(res)
8370    def is_equal(arg0, arg1):
8371        try:
8372            if not arg0.__class__ is basic_map:
8373                arg0 = basic_map(arg0)
8374        except:
8375            raise
8376        try:
8377            if not arg1.__class__ is basic_map:
8378                arg1 = basic_map(arg1)
8379        except:
8380            return map(arg0).is_equal(arg1)
8381        ctx = arg0.ctx
8382        res = isl.isl_basic_map_is_equal(arg0.ptr, arg1.ptr)
8383        if res < 0:
8384            raise
8385        return bool(res)
8386    def is_subset(arg0, arg1):
8387        try:
8388            if not arg0.__class__ is basic_map:
8389                arg0 = basic_map(arg0)
8390        except:
8391            raise
8392        try:
8393            if not arg1.__class__ is basic_map:
8394                arg1 = basic_map(arg1)
8395        except:
8396            return map(arg0).is_subset(arg1)
8397        ctx = arg0.ctx
8398        res = isl.isl_basic_map_is_subset(arg0.ptr, arg1.ptr)
8399        if res < 0:
8400            raise
8401        return bool(res)
8402    def lexmax(arg0):
8403        try:
8404            if not arg0.__class__ is basic_map:
8405                arg0 = basic_map(arg0)
8406        except:
8407            raise
8408        ctx = arg0.ctx
8409        res = isl.isl_basic_map_lexmax(isl.isl_basic_map_copy(arg0.ptr))
8410        obj = map(ctx=ctx, ptr=res)
8411        return obj
8412    def lexmin(arg0):
8413        try:
8414            if not arg0.__class__ is basic_map:
8415                arg0 = basic_map(arg0)
8416        except:
8417            raise
8418        ctx = arg0.ctx
8419        res = isl.isl_basic_map_lexmin(isl.isl_basic_map_copy(arg0.ptr))
8420        obj = map(ctx=ctx, ptr=res)
8421        return obj
8422    def reverse(arg0):
8423        try:
8424            if not arg0.__class__ is basic_map:
8425                arg0 = basic_map(arg0)
8426        except:
8427            raise
8428        ctx = arg0.ctx
8429        res = isl.isl_basic_map_reverse(isl.isl_basic_map_copy(arg0.ptr))
8430        obj = basic_map(ctx=ctx, ptr=res)
8431        return obj
8432    def sample(arg0):
8433        try:
8434            if not arg0.__class__ is basic_map:
8435                arg0 = basic_map(arg0)
8436        except:
8437            raise
8438        ctx = arg0.ctx
8439        res = isl.isl_basic_map_sample(isl.isl_basic_map_copy(arg0.ptr))
8440        obj = basic_map(ctx=ctx, ptr=res)
8441        return obj
8442    def union(arg0, arg1):
8443        try:
8444            if not arg0.__class__ is basic_map:
8445                arg0 = basic_map(arg0)
8446        except:
8447            raise
8448        try:
8449            if not arg1.__class__ is basic_map:
8450                arg1 = basic_map(arg1)
8451        except:
8452            return map(arg0).union(arg1)
8453        ctx = arg0.ctx
8454        res = isl.isl_basic_map_union(isl.isl_basic_map_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr))
8455        obj = map(ctx=ctx, ptr=res)
8456        return obj
8457
8458isl.isl_basic_map_read_from_str.restype = c_void_p
8459isl.isl_basic_map_read_from_str.argtypes = [Context, c_char_p]
8460isl.isl_basic_map_affine_hull.restype = c_void_p
8461isl.isl_basic_map_affine_hull.argtypes = [c_void_p]
8462isl.isl_basic_map_apply_domain.restype = c_void_p
8463isl.isl_basic_map_apply_domain.argtypes = [c_void_p, c_void_p]
8464isl.isl_basic_map_apply_range.restype = c_void_p
8465isl.isl_basic_map_apply_range.argtypes = [c_void_p, c_void_p]
8466isl.isl_basic_map_deltas.restype = c_void_p
8467isl.isl_basic_map_deltas.argtypes = [c_void_p]
8468isl.isl_basic_map_detect_equalities.restype = c_void_p
8469isl.isl_basic_map_detect_equalities.argtypes = [c_void_p]
8470isl.isl_basic_map_flatten.restype = c_void_p
8471isl.isl_basic_map_flatten.argtypes = [c_void_p]
8472isl.isl_basic_map_flatten_domain.restype = c_void_p
8473isl.isl_basic_map_flatten_domain.argtypes = [c_void_p]
8474isl.isl_basic_map_flatten_range.restype = c_void_p
8475isl.isl_basic_map_flatten_range.argtypes = [c_void_p]
8476isl.isl_basic_map_gist.restype = c_void_p
8477isl.isl_basic_map_gist.argtypes = [c_void_p, c_void_p]
8478isl.isl_basic_map_intersect.restype = c_void_p
8479isl.isl_basic_map_intersect.argtypes = [c_void_p, c_void_p]
8480isl.isl_basic_map_intersect_domain.restype = c_void_p
8481isl.isl_basic_map_intersect_domain.argtypes = [c_void_p, c_void_p]
8482isl.isl_basic_map_intersect_range.restype = c_void_p
8483isl.isl_basic_map_intersect_range.argtypes = [c_void_p, c_void_p]
8484isl.isl_basic_map_is_empty.argtypes = [c_void_p]
8485isl.isl_basic_map_is_equal.argtypes = [c_void_p, c_void_p]
8486isl.isl_basic_map_is_subset.argtypes = [c_void_p, c_void_p]
8487isl.isl_basic_map_lexmax.restype = c_void_p
8488isl.isl_basic_map_lexmax.argtypes = [c_void_p]
8489isl.isl_basic_map_lexmin.restype = c_void_p
8490isl.isl_basic_map_lexmin.argtypes = [c_void_p]
8491isl.isl_basic_map_reverse.restype = c_void_p
8492isl.isl_basic_map_reverse.argtypes = [c_void_p]
8493isl.isl_basic_map_sample.restype = c_void_p
8494isl.isl_basic_map_sample.argtypes = [c_void_p]
8495isl.isl_basic_map_union.restype = c_void_p
8496isl.isl_basic_map_union.argtypes = [c_void_p, c_void_p]
8497isl.isl_basic_map_copy.restype = c_void_p
8498isl.isl_basic_map_copy.argtypes = [c_void_p]
8499isl.isl_basic_map_free.restype = c_void_p
8500isl.isl_basic_map_free.argtypes = [c_void_p]
8501isl.isl_basic_map_to_str.restype = POINTER(c_char)
8502isl.isl_basic_map_to_str.argtypes = [c_void_p]
8503
8504class union_set(object):
8505    def __init__(self, *args, **keywords):
8506        if "ptr" in keywords:
8507            self.ctx = keywords["ctx"]
8508            self.ptr = keywords["ptr"]
8509            return
8510        if len(args) == 1 and args[0].__class__ is basic_set:
8511            self.ctx = Context.getDefaultInstance()
8512            self.ptr = isl.isl_union_set_from_basic_set(isl.isl_basic_set_copy(args[0].ptr))
8513            return
8514        if len(args) == 1 and args[0].__class__ is point:
8515            self.ctx = Context.getDefaultInstance()
8516            self.ptr = isl.isl_union_set_from_point(isl.isl_point_copy(args[0].ptr))
8517            return
8518        if len(args) == 1 and args[0].__class__ is set:
8519            self.ctx = Context.getDefaultInstance()
8520            self.ptr = isl.isl_union_set_from_set(isl.isl_set_copy(args[0].ptr))
8521            return
8522        if len(args) == 1 and type(args[0]) == str:
8523            self.ctx = Context.getDefaultInstance()
8524            self.ptr = isl.isl_union_set_read_from_str(self.ctx, args[0].encode('ascii'))
8525            return
8526        raise Error
8527    def __del__(self):
8528        if hasattr(self, 'ptr'):
8529            isl.isl_union_set_free(self.ptr)
8530    def __str__(arg0):
8531        try:
8532            if not arg0.__class__ is union_set:
8533                arg0 = union_set(arg0)
8534        except:
8535            raise
8536        ptr = isl.isl_union_set_to_str(arg0.ptr)
8537        res = cast(ptr, c_char_p).value.decode('ascii')
8538        libc.free(ptr)
8539        return res
8540    def __repr__(self):
8541        s = str(self)
8542        if '"' in s:
8543            return 'isl.union_set("""%s""")' % s
8544        else:
8545            return 'isl.union_set("%s")' % s
8546    def affine_hull(arg0):
8547        try:
8548            if not arg0.__class__ is union_set:
8549                arg0 = union_set(arg0)
8550        except:
8551            raise
8552        ctx = arg0.ctx
8553        res = isl.isl_union_set_affine_hull(isl.isl_union_set_copy(arg0.ptr))
8554        obj = union_set(ctx=ctx, ptr=res)
8555        return obj
8556    def apply(arg0, arg1):
8557        try:
8558            if not arg0.__class__ is union_set:
8559                arg0 = union_set(arg0)
8560        except:
8561            raise
8562        try:
8563            if not arg1.__class__ is union_map:
8564                arg1 = union_map(arg1)
8565        except:
8566            raise
8567        ctx = arg0.ctx
8568        res = isl.isl_union_set_apply(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
8569        obj = union_set(ctx=ctx, ptr=res)
8570        return obj
8571    def coalesce(arg0):
8572        try:
8573            if not arg0.__class__ is union_set:
8574                arg0 = union_set(arg0)
8575        except:
8576            raise
8577        ctx = arg0.ctx
8578        res = isl.isl_union_set_coalesce(isl.isl_union_set_copy(arg0.ptr))
8579        obj = union_set(ctx=ctx, ptr=res)
8580        return obj
8581    def compute_divs(arg0):
8582        try:
8583            if not arg0.__class__ is union_set:
8584                arg0 = union_set(arg0)
8585        except:
8586            raise
8587        ctx = arg0.ctx
8588        res = isl.isl_union_set_compute_divs(isl.isl_union_set_copy(arg0.ptr))
8589        obj = union_set(ctx=ctx, ptr=res)
8590        return obj
8591    def detect_equalities(arg0):
8592        try:
8593            if not arg0.__class__ is union_set:
8594                arg0 = union_set(arg0)
8595        except:
8596            raise
8597        ctx = arg0.ctx
8598        res = isl.isl_union_set_detect_equalities(isl.isl_union_set_copy(arg0.ptr))
8599        obj = union_set(ctx=ctx, ptr=res)
8600        return obj
8601    @staticmethod
8602    def empty(*args):
8603        if len(args) == 0:
8604            ctx = Context.getDefaultInstance()
8605            res = isl.isl_union_set_empty_ctx(ctx)
8606            obj = union_set(ctx=ctx, ptr=res)
8607            return obj
8608        raise Error
8609    def every_set(arg0, arg1):
8610        try:
8611            if not arg0.__class__ is union_set:
8612                arg0 = union_set(arg0)
8613        except:
8614            raise
8615        exc_info = [None]
8616        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
8617        def cb_func(cb_arg0, cb_arg1):
8618            cb_arg0 = set(ctx=arg0.ctx, ptr=isl.isl_set_copy(cb_arg0))
8619            try:
8620                res = arg1(cb_arg0)
8621            except:
8622                import sys
8623                exc_info[0] = sys.exc_info()
8624                return -1
8625            return 1 if res else 0
8626        cb = fn(cb_func)
8627        ctx = arg0.ctx
8628        res = isl.isl_union_set_every_set(arg0.ptr, cb, None)
8629        if exc_info[0] != None:
8630            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
8631        if res < 0:
8632            raise
8633        return bool(res)
8634    def extract_set(arg0, arg1):
8635        try:
8636            if not arg0.__class__ is union_set:
8637                arg0 = union_set(arg0)
8638        except:
8639            raise
8640        try:
8641            if not arg1.__class__ is space:
8642                arg1 = space(arg1)
8643        except:
8644            raise
8645        ctx = arg0.ctx
8646        res = isl.isl_union_set_extract_set(arg0.ptr, isl.isl_space_copy(arg1.ptr))
8647        obj = set(ctx=ctx, ptr=res)
8648        return obj
8649    def foreach_point(arg0, arg1):
8650        try:
8651            if not arg0.__class__ is union_set:
8652                arg0 = union_set(arg0)
8653        except:
8654            raise
8655        exc_info = [None]
8656        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
8657        def cb_func(cb_arg0, cb_arg1):
8658            cb_arg0 = point(ctx=arg0.ctx, ptr=(cb_arg0))
8659            try:
8660                arg1(cb_arg0)
8661            except:
8662                import sys
8663                exc_info[0] = sys.exc_info()
8664                return -1
8665            return 0
8666        cb = fn(cb_func)
8667        ctx = arg0.ctx
8668        res = isl.isl_union_set_foreach_point(arg0.ptr, cb, None)
8669        if exc_info[0] != None:
8670            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
8671        if res < 0:
8672            raise
8673    def foreach_set(arg0, arg1):
8674        try:
8675            if not arg0.__class__ is union_set:
8676                arg0 = union_set(arg0)
8677        except:
8678            raise
8679        exc_info = [None]
8680        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
8681        def cb_func(cb_arg0, cb_arg1):
8682            cb_arg0 = set(ctx=arg0.ctx, ptr=(cb_arg0))
8683            try:
8684                arg1(cb_arg0)
8685            except:
8686                import sys
8687                exc_info[0] = sys.exc_info()
8688                return -1
8689            return 0
8690        cb = fn(cb_func)
8691        ctx = arg0.ctx
8692        res = isl.isl_union_set_foreach_set(arg0.ptr, cb, None)
8693        if exc_info[0] != None:
8694            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
8695        if res < 0:
8696            raise
8697    def space(arg0):
8698        try:
8699            if not arg0.__class__ is union_set:
8700                arg0 = union_set(arg0)
8701        except:
8702            raise
8703        ctx = arg0.ctx
8704        res = isl.isl_union_set_get_space(arg0.ptr)
8705        obj = space(ctx=ctx, ptr=res)
8706        return obj
8707    def get_space(arg0):
8708        return arg0.space()
8709    def gist(arg0, arg1):
8710        try:
8711            if not arg0.__class__ is union_set:
8712                arg0 = union_set(arg0)
8713        except:
8714            raise
8715        try:
8716            if not arg1.__class__ is union_set:
8717                arg1 = union_set(arg1)
8718        except:
8719            raise
8720        ctx = arg0.ctx
8721        res = isl.isl_union_set_gist(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
8722        obj = union_set(ctx=ctx, ptr=res)
8723        return obj
8724    def gist_params(arg0, arg1):
8725        try:
8726            if not arg0.__class__ is union_set:
8727                arg0 = union_set(arg0)
8728        except:
8729            raise
8730        try:
8731            if not arg1.__class__ is set:
8732                arg1 = set(arg1)
8733        except:
8734            raise
8735        ctx = arg0.ctx
8736        res = isl.isl_union_set_gist_params(isl.isl_union_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
8737        obj = union_set(ctx=ctx, ptr=res)
8738        return obj
8739    def identity(arg0):
8740        try:
8741            if not arg0.__class__ is union_set:
8742                arg0 = union_set(arg0)
8743        except:
8744            raise
8745        ctx = arg0.ctx
8746        res = isl.isl_union_set_identity(isl.isl_union_set_copy(arg0.ptr))
8747        obj = union_map(ctx=ctx, ptr=res)
8748        return obj
8749    def intersect(arg0, arg1):
8750        try:
8751            if not arg0.__class__ is union_set:
8752                arg0 = union_set(arg0)
8753        except:
8754            raise
8755        try:
8756            if not arg1.__class__ is union_set:
8757                arg1 = union_set(arg1)
8758        except:
8759            raise
8760        ctx = arg0.ctx
8761        res = isl.isl_union_set_intersect(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
8762        obj = union_set(ctx=ctx, ptr=res)
8763        return obj
8764    def intersect_params(arg0, arg1):
8765        try:
8766            if not arg0.__class__ is union_set:
8767                arg0 = union_set(arg0)
8768        except:
8769            raise
8770        try:
8771            if not arg1.__class__ is set:
8772                arg1 = set(arg1)
8773        except:
8774            raise
8775        ctx = arg0.ctx
8776        res = isl.isl_union_set_intersect_params(isl.isl_union_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
8777        obj = union_set(ctx=ctx, ptr=res)
8778        return obj
8779    def is_disjoint(arg0, arg1):
8780        try:
8781            if not arg0.__class__ is union_set:
8782                arg0 = union_set(arg0)
8783        except:
8784            raise
8785        try:
8786            if not arg1.__class__ is union_set:
8787                arg1 = union_set(arg1)
8788        except:
8789            raise
8790        ctx = arg0.ctx
8791        res = isl.isl_union_set_is_disjoint(arg0.ptr, arg1.ptr)
8792        if res < 0:
8793            raise
8794        return bool(res)
8795    def is_empty(arg0):
8796        try:
8797            if not arg0.__class__ is union_set:
8798                arg0 = union_set(arg0)
8799        except:
8800            raise
8801        ctx = arg0.ctx
8802        res = isl.isl_union_set_is_empty(arg0.ptr)
8803        if res < 0:
8804            raise
8805        return bool(res)
8806    def is_equal(arg0, arg1):
8807        try:
8808            if not arg0.__class__ is union_set:
8809                arg0 = union_set(arg0)
8810        except:
8811            raise
8812        try:
8813            if not arg1.__class__ is union_set:
8814                arg1 = union_set(arg1)
8815        except:
8816            raise
8817        ctx = arg0.ctx
8818        res = isl.isl_union_set_is_equal(arg0.ptr, arg1.ptr)
8819        if res < 0:
8820            raise
8821        return bool(res)
8822    def is_strict_subset(arg0, arg1):
8823        try:
8824            if not arg0.__class__ is union_set:
8825                arg0 = union_set(arg0)
8826        except:
8827            raise
8828        try:
8829            if not arg1.__class__ is union_set:
8830                arg1 = union_set(arg1)
8831        except:
8832            raise
8833        ctx = arg0.ctx
8834        res = isl.isl_union_set_is_strict_subset(arg0.ptr, arg1.ptr)
8835        if res < 0:
8836            raise
8837        return bool(res)
8838    def is_subset(arg0, arg1):
8839        try:
8840            if not arg0.__class__ is union_set:
8841                arg0 = union_set(arg0)
8842        except:
8843            raise
8844        try:
8845            if not arg1.__class__ is union_set:
8846                arg1 = union_set(arg1)
8847        except:
8848            raise
8849        ctx = arg0.ctx
8850        res = isl.isl_union_set_is_subset(arg0.ptr, arg1.ptr)
8851        if res < 0:
8852            raise
8853        return bool(res)
8854    def isa_set(arg0):
8855        try:
8856            if not arg0.__class__ is union_set:
8857                arg0 = union_set(arg0)
8858        except:
8859            raise
8860        ctx = arg0.ctx
8861        res = isl.isl_union_set_isa_set(arg0.ptr)
8862        if res < 0:
8863            raise
8864        return bool(res)
8865    def lexmax(arg0):
8866        try:
8867            if not arg0.__class__ is union_set:
8868                arg0 = union_set(arg0)
8869        except:
8870            raise
8871        ctx = arg0.ctx
8872        res = isl.isl_union_set_lexmax(isl.isl_union_set_copy(arg0.ptr))
8873        obj = union_set(ctx=ctx, ptr=res)
8874        return obj
8875    def lexmin(arg0):
8876        try:
8877            if not arg0.__class__ is union_set:
8878                arg0 = union_set(arg0)
8879        except:
8880            raise
8881        ctx = arg0.ctx
8882        res = isl.isl_union_set_lexmin(isl.isl_union_set_copy(arg0.ptr))
8883        obj = union_set(ctx=ctx, ptr=res)
8884        return obj
8885    def polyhedral_hull(arg0):
8886        try:
8887            if not arg0.__class__ is union_set:
8888                arg0 = union_set(arg0)
8889        except:
8890            raise
8891        ctx = arg0.ctx
8892        res = isl.isl_union_set_polyhedral_hull(isl.isl_union_set_copy(arg0.ptr))
8893        obj = union_set(ctx=ctx, ptr=res)
8894        return obj
8895    def preimage(*args):
8896        if len(args) == 2 and args[1].__class__ is multi_aff:
8897            ctx = args[0].ctx
8898            res = isl.isl_union_set_preimage_multi_aff(isl.isl_union_set_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
8899            obj = union_set(ctx=ctx, ptr=res)
8900            return obj
8901        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
8902            ctx = args[0].ctx
8903            res = isl.isl_union_set_preimage_pw_multi_aff(isl.isl_union_set_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
8904            obj = union_set(ctx=ctx, ptr=res)
8905            return obj
8906        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
8907            ctx = args[0].ctx
8908            res = isl.isl_union_set_preimage_union_pw_multi_aff(isl.isl_union_set_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
8909            obj = union_set(ctx=ctx, ptr=res)
8910            return obj
8911        raise Error
8912    def sample_point(arg0):
8913        try:
8914            if not arg0.__class__ is union_set:
8915                arg0 = union_set(arg0)
8916        except:
8917            raise
8918        ctx = arg0.ctx
8919        res = isl.isl_union_set_sample_point(isl.isl_union_set_copy(arg0.ptr))
8920        obj = point(ctx=ctx, ptr=res)
8921        return obj
8922    def subtract(arg0, arg1):
8923        try:
8924            if not arg0.__class__ is union_set:
8925                arg0 = union_set(arg0)
8926        except:
8927            raise
8928        try:
8929            if not arg1.__class__ is union_set:
8930                arg1 = union_set(arg1)
8931        except:
8932            raise
8933        ctx = arg0.ctx
8934        res = isl.isl_union_set_subtract(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
8935        obj = union_set(ctx=ctx, ptr=res)
8936        return obj
8937    def union(arg0, arg1):
8938        try:
8939            if not arg0.__class__ is union_set:
8940                arg0 = union_set(arg0)
8941        except:
8942            raise
8943        try:
8944            if not arg1.__class__ is union_set:
8945                arg1 = union_set(arg1)
8946        except:
8947            raise
8948        ctx = arg0.ctx
8949        res = isl.isl_union_set_union(isl.isl_union_set_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
8950        obj = union_set(ctx=ctx, ptr=res)
8951        return obj
8952    def universe(arg0):
8953        try:
8954            if not arg0.__class__ is union_set:
8955                arg0 = union_set(arg0)
8956        except:
8957            raise
8958        ctx = arg0.ctx
8959        res = isl.isl_union_set_universe(isl.isl_union_set_copy(arg0.ptr))
8960        obj = union_set(ctx=ctx, ptr=res)
8961        return obj
8962    def unwrap(arg0):
8963        try:
8964            if not arg0.__class__ is union_set:
8965                arg0 = union_set(arg0)
8966        except:
8967            raise
8968        ctx = arg0.ctx
8969        res = isl.isl_union_set_unwrap(isl.isl_union_set_copy(arg0.ptr))
8970        obj = union_map(ctx=ctx, ptr=res)
8971        return obj
8972
8973isl.isl_union_set_from_basic_set.restype = c_void_p
8974isl.isl_union_set_from_basic_set.argtypes = [c_void_p]
8975isl.isl_union_set_from_point.restype = c_void_p
8976isl.isl_union_set_from_point.argtypes = [c_void_p]
8977isl.isl_union_set_from_set.restype = c_void_p
8978isl.isl_union_set_from_set.argtypes = [c_void_p]
8979isl.isl_union_set_read_from_str.restype = c_void_p
8980isl.isl_union_set_read_from_str.argtypes = [Context, c_char_p]
8981isl.isl_union_set_affine_hull.restype = c_void_p
8982isl.isl_union_set_affine_hull.argtypes = [c_void_p]
8983isl.isl_union_set_apply.restype = c_void_p
8984isl.isl_union_set_apply.argtypes = [c_void_p, c_void_p]
8985isl.isl_union_set_coalesce.restype = c_void_p
8986isl.isl_union_set_coalesce.argtypes = [c_void_p]
8987isl.isl_union_set_compute_divs.restype = c_void_p
8988isl.isl_union_set_compute_divs.argtypes = [c_void_p]
8989isl.isl_union_set_detect_equalities.restype = c_void_p
8990isl.isl_union_set_detect_equalities.argtypes = [c_void_p]
8991isl.isl_union_set_empty_ctx.restype = c_void_p
8992isl.isl_union_set_empty_ctx.argtypes = [Context]
8993isl.isl_union_set_every_set.argtypes = [c_void_p, c_void_p, c_void_p]
8994isl.isl_union_set_extract_set.restype = c_void_p
8995isl.isl_union_set_extract_set.argtypes = [c_void_p, c_void_p]
8996isl.isl_union_set_foreach_point.argtypes = [c_void_p, c_void_p, c_void_p]
8997isl.isl_union_set_foreach_set.argtypes = [c_void_p, c_void_p, c_void_p]
8998isl.isl_union_set_get_space.restype = c_void_p
8999isl.isl_union_set_get_space.argtypes = [c_void_p]
9000isl.isl_union_set_gist.restype = c_void_p
9001isl.isl_union_set_gist.argtypes = [c_void_p, c_void_p]
9002isl.isl_union_set_gist_params.restype = c_void_p
9003isl.isl_union_set_gist_params.argtypes = [c_void_p, c_void_p]
9004isl.isl_union_set_identity.restype = c_void_p
9005isl.isl_union_set_identity.argtypes = [c_void_p]
9006isl.isl_union_set_intersect.restype = c_void_p
9007isl.isl_union_set_intersect.argtypes = [c_void_p, c_void_p]
9008isl.isl_union_set_intersect_params.restype = c_void_p
9009isl.isl_union_set_intersect_params.argtypes = [c_void_p, c_void_p]
9010isl.isl_union_set_is_disjoint.argtypes = [c_void_p, c_void_p]
9011isl.isl_union_set_is_empty.argtypes = [c_void_p]
9012isl.isl_union_set_is_equal.argtypes = [c_void_p, c_void_p]
9013isl.isl_union_set_is_strict_subset.argtypes = [c_void_p, c_void_p]
9014isl.isl_union_set_is_subset.argtypes = [c_void_p, c_void_p]
9015isl.isl_union_set_isa_set.argtypes = [c_void_p]
9016isl.isl_union_set_lexmax.restype = c_void_p
9017isl.isl_union_set_lexmax.argtypes = [c_void_p]
9018isl.isl_union_set_lexmin.restype = c_void_p
9019isl.isl_union_set_lexmin.argtypes = [c_void_p]
9020isl.isl_union_set_polyhedral_hull.restype = c_void_p
9021isl.isl_union_set_polyhedral_hull.argtypes = [c_void_p]
9022isl.isl_union_set_preimage_multi_aff.restype = c_void_p
9023isl.isl_union_set_preimage_multi_aff.argtypes = [c_void_p, c_void_p]
9024isl.isl_union_set_preimage_pw_multi_aff.restype = c_void_p
9025isl.isl_union_set_preimage_pw_multi_aff.argtypes = [c_void_p, c_void_p]
9026isl.isl_union_set_preimage_union_pw_multi_aff.restype = c_void_p
9027isl.isl_union_set_preimage_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
9028isl.isl_union_set_sample_point.restype = c_void_p
9029isl.isl_union_set_sample_point.argtypes = [c_void_p]
9030isl.isl_union_set_subtract.restype = c_void_p
9031isl.isl_union_set_subtract.argtypes = [c_void_p, c_void_p]
9032isl.isl_union_set_union.restype = c_void_p
9033isl.isl_union_set_union.argtypes = [c_void_p, c_void_p]
9034isl.isl_union_set_universe.restype = c_void_p
9035isl.isl_union_set_universe.argtypes = [c_void_p]
9036isl.isl_union_set_unwrap.restype = c_void_p
9037isl.isl_union_set_unwrap.argtypes = [c_void_p]
9038isl.isl_union_set_copy.restype = c_void_p
9039isl.isl_union_set_copy.argtypes = [c_void_p]
9040isl.isl_union_set_free.restype = c_void_p
9041isl.isl_union_set_free.argtypes = [c_void_p]
9042isl.isl_union_set_to_str.restype = POINTER(c_char)
9043isl.isl_union_set_to_str.argtypes = [c_void_p]
9044
9045class set(union_set):
9046    def __init__(self, *args, **keywords):
9047        if "ptr" in keywords:
9048            self.ctx = keywords["ctx"]
9049            self.ptr = keywords["ptr"]
9050            return
9051        if len(args) == 1 and args[0].__class__ is basic_set:
9052            self.ctx = Context.getDefaultInstance()
9053            self.ptr = isl.isl_set_from_basic_set(isl.isl_basic_set_copy(args[0].ptr))
9054            return
9055        if len(args) == 1 and args[0].__class__ is point:
9056            self.ctx = Context.getDefaultInstance()
9057            self.ptr = isl.isl_set_from_point(isl.isl_point_copy(args[0].ptr))
9058            return
9059        if len(args) == 1 and type(args[0]) == str:
9060            self.ctx = Context.getDefaultInstance()
9061            self.ptr = isl.isl_set_read_from_str(self.ctx, args[0].encode('ascii'))
9062            return
9063        raise Error
9064    def __del__(self):
9065        if hasattr(self, 'ptr'):
9066            isl.isl_set_free(self.ptr)
9067    def __str__(arg0):
9068        try:
9069            if not arg0.__class__ is set:
9070                arg0 = set(arg0)
9071        except:
9072            raise
9073        ptr = isl.isl_set_to_str(arg0.ptr)
9074        res = cast(ptr, c_char_p).value.decode('ascii')
9075        libc.free(ptr)
9076        return res
9077    def __repr__(self):
9078        s = str(self)
9079        if '"' in s:
9080            return 'isl.set("""%s""")' % s
9081        else:
9082            return 'isl.set("%s")' % s
9083    def affine_hull(arg0):
9084        try:
9085            if not arg0.__class__ is set:
9086                arg0 = set(arg0)
9087        except:
9088            raise
9089        ctx = arg0.ctx
9090        res = isl.isl_set_affine_hull(isl.isl_set_copy(arg0.ptr))
9091        obj = basic_set(ctx=ctx, ptr=res)
9092        return obj
9093    def apply(arg0, arg1):
9094        try:
9095            if not arg0.__class__ is set:
9096                arg0 = set(arg0)
9097        except:
9098            raise
9099        try:
9100            if not arg1.__class__ is map:
9101                arg1 = map(arg1)
9102        except:
9103            return union_set(arg0).apply(arg1)
9104        ctx = arg0.ctx
9105        res = isl.isl_set_apply(isl.isl_set_copy(arg0.ptr), isl.isl_map_copy(arg1.ptr))
9106        obj = set(ctx=ctx, ptr=res)
9107        return obj
9108    def bind(arg0, arg1):
9109        try:
9110            if not arg0.__class__ is set:
9111                arg0 = set(arg0)
9112        except:
9113            raise
9114        try:
9115            if not arg1.__class__ is multi_id:
9116                arg1 = multi_id(arg1)
9117        except:
9118            return union_set(arg0).bind(arg1)
9119        ctx = arg0.ctx
9120        res = isl.isl_set_bind(isl.isl_set_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
9121        obj = set(ctx=ctx, ptr=res)
9122        return obj
9123    def coalesce(arg0):
9124        try:
9125            if not arg0.__class__ is set:
9126                arg0 = set(arg0)
9127        except:
9128            raise
9129        ctx = arg0.ctx
9130        res = isl.isl_set_coalesce(isl.isl_set_copy(arg0.ptr))
9131        obj = set(ctx=ctx, ptr=res)
9132        return obj
9133    def complement(arg0):
9134        try:
9135            if not arg0.__class__ is set:
9136                arg0 = set(arg0)
9137        except:
9138            raise
9139        ctx = arg0.ctx
9140        res = isl.isl_set_complement(isl.isl_set_copy(arg0.ptr))
9141        obj = set(ctx=ctx, ptr=res)
9142        return obj
9143    def detect_equalities(arg0):
9144        try:
9145            if not arg0.__class__ is set:
9146                arg0 = set(arg0)
9147        except:
9148            raise
9149        ctx = arg0.ctx
9150        res = isl.isl_set_detect_equalities(isl.isl_set_copy(arg0.ptr))
9151        obj = set(ctx=ctx, ptr=res)
9152        return obj
9153    def dim_max_val(arg0, arg1):
9154        try:
9155            if not arg0.__class__ is set:
9156                arg0 = set(arg0)
9157        except:
9158            raise
9159        ctx = arg0.ctx
9160        res = isl.isl_set_dim_max_val(isl.isl_set_copy(arg0.ptr), arg1)
9161        obj = val(ctx=ctx, ptr=res)
9162        return obj
9163    def dim_min_val(arg0, arg1):
9164        try:
9165            if not arg0.__class__ is set:
9166                arg0 = set(arg0)
9167        except:
9168            raise
9169        ctx = arg0.ctx
9170        res = isl.isl_set_dim_min_val(isl.isl_set_copy(arg0.ptr), arg1)
9171        obj = val(ctx=ctx, ptr=res)
9172        return obj
9173    @staticmethod
9174    def empty(arg0):
9175        try:
9176            if not arg0.__class__ is space:
9177                arg0 = space(arg0)
9178        except:
9179            raise
9180        ctx = arg0.ctx
9181        res = isl.isl_set_empty(isl.isl_space_copy(arg0.ptr))
9182        obj = set(ctx=ctx, ptr=res)
9183        return obj
9184    def flatten(arg0):
9185        try:
9186            if not arg0.__class__ is set:
9187                arg0 = set(arg0)
9188        except:
9189            raise
9190        ctx = arg0.ctx
9191        res = isl.isl_set_flatten(isl.isl_set_copy(arg0.ptr))
9192        obj = set(ctx=ctx, ptr=res)
9193        return obj
9194    def foreach_basic_set(arg0, arg1):
9195        try:
9196            if not arg0.__class__ is set:
9197                arg0 = set(arg0)
9198        except:
9199            raise
9200        exc_info = [None]
9201        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
9202        def cb_func(cb_arg0, cb_arg1):
9203            cb_arg0 = basic_set(ctx=arg0.ctx, ptr=(cb_arg0))
9204            try:
9205                arg1(cb_arg0)
9206            except:
9207                import sys
9208                exc_info[0] = sys.exc_info()
9209                return -1
9210            return 0
9211        cb = fn(cb_func)
9212        ctx = arg0.ctx
9213        res = isl.isl_set_foreach_basic_set(arg0.ptr, cb, None)
9214        if exc_info[0] != None:
9215            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
9216        if res < 0:
9217            raise
9218    def foreach_point(arg0, arg1):
9219        try:
9220            if not arg0.__class__ is set:
9221                arg0 = set(arg0)
9222        except:
9223            raise
9224        exc_info = [None]
9225        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
9226        def cb_func(cb_arg0, cb_arg1):
9227            cb_arg0 = point(ctx=arg0.ctx, ptr=(cb_arg0))
9228            try:
9229                arg1(cb_arg0)
9230            except:
9231                import sys
9232                exc_info[0] = sys.exc_info()
9233                return -1
9234            return 0
9235        cb = fn(cb_func)
9236        ctx = arg0.ctx
9237        res = isl.isl_set_foreach_point(arg0.ptr, cb, None)
9238        if exc_info[0] != None:
9239            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
9240        if res < 0:
9241            raise
9242    def plain_multi_val_if_fixed(arg0):
9243        try:
9244            if not arg0.__class__ is set:
9245                arg0 = set(arg0)
9246        except:
9247            raise
9248        ctx = arg0.ctx
9249        res = isl.isl_set_get_plain_multi_val_if_fixed(arg0.ptr)
9250        obj = multi_val(ctx=ctx, ptr=res)
9251        return obj
9252    def get_plain_multi_val_if_fixed(arg0):
9253        return arg0.plain_multi_val_if_fixed()
9254    def simple_fixed_box_hull(arg0):
9255        try:
9256            if not arg0.__class__ is set:
9257                arg0 = set(arg0)
9258        except:
9259            raise
9260        ctx = arg0.ctx
9261        res = isl.isl_set_get_simple_fixed_box_hull(arg0.ptr)
9262        obj = fixed_box(ctx=ctx, ptr=res)
9263        return obj
9264    def get_simple_fixed_box_hull(arg0):
9265        return arg0.simple_fixed_box_hull()
9266    def space(arg0):
9267        try:
9268            if not arg0.__class__ is set:
9269                arg0 = set(arg0)
9270        except:
9271            raise
9272        ctx = arg0.ctx
9273        res = isl.isl_set_get_space(arg0.ptr)
9274        obj = space(ctx=ctx, ptr=res)
9275        return obj
9276    def get_space(arg0):
9277        return arg0.space()
9278    def stride(arg0, arg1):
9279        try:
9280            if not arg0.__class__ is set:
9281                arg0 = set(arg0)
9282        except:
9283            raise
9284        ctx = arg0.ctx
9285        res = isl.isl_set_get_stride(arg0.ptr, arg1)
9286        obj = val(ctx=ctx, ptr=res)
9287        return obj
9288    def get_stride(arg0, arg1):
9289        return arg0.stride(arg1)
9290    def gist(arg0, arg1):
9291        try:
9292            if not arg0.__class__ is set:
9293                arg0 = set(arg0)
9294        except:
9295            raise
9296        try:
9297            if not arg1.__class__ is set:
9298                arg1 = set(arg1)
9299        except:
9300            return union_set(arg0).gist(arg1)
9301        ctx = arg0.ctx
9302        res = isl.isl_set_gist(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
9303        obj = set(ctx=ctx, ptr=res)
9304        return obj
9305    def identity(arg0):
9306        try:
9307            if not arg0.__class__ is set:
9308                arg0 = set(arg0)
9309        except:
9310            raise
9311        ctx = arg0.ctx
9312        res = isl.isl_set_identity(isl.isl_set_copy(arg0.ptr))
9313        obj = map(ctx=ctx, ptr=res)
9314        return obj
9315    def indicator_function(arg0):
9316        try:
9317            if not arg0.__class__ is set:
9318                arg0 = set(arg0)
9319        except:
9320            raise
9321        ctx = arg0.ctx
9322        res = isl.isl_set_indicator_function(isl.isl_set_copy(arg0.ptr))
9323        obj = pw_aff(ctx=ctx, ptr=res)
9324        return obj
9325    def insert_domain(arg0, arg1):
9326        try:
9327            if not arg0.__class__ is set:
9328                arg0 = set(arg0)
9329        except:
9330            raise
9331        try:
9332            if not arg1.__class__ is space:
9333                arg1 = space(arg1)
9334        except:
9335            return union_set(arg0).insert_domain(arg1)
9336        ctx = arg0.ctx
9337        res = isl.isl_set_insert_domain(isl.isl_set_copy(arg0.ptr), isl.isl_space_copy(arg1.ptr))
9338        obj = map(ctx=ctx, ptr=res)
9339        return obj
9340    def intersect(arg0, arg1):
9341        try:
9342            if not arg0.__class__ is set:
9343                arg0 = set(arg0)
9344        except:
9345            raise
9346        try:
9347            if not arg1.__class__ is set:
9348                arg1 = set(arg1)
9349        except:
9350            return union_set(arg0).intersect(arg1)
9351        ctx = arg0.ctx
9352        res = isl.isl_set_intersect(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
9353        obj = set(ctx=ctx, ptr=res)
9354        return obj
9355    def intersect_params(arg0, arg1):
9356        try:
9357            if not arg0.__class__ is set:
9358                arg0 = set(arg0)
9359        except:
9360            raise
9361        try:
9362            if not arg1.__class__ is set:
9363                arg1 = set(arg1)
9364        except:
9365            return union_set(arg0).intersect_params(arg1)
9366        ctx = arg0.ctx
9367        res = isl.isl_set_intersect_params(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
9368        obj = set(ctx=ctx, ptr=res)
9369        return obj
9370    def involves_locals(arg0):
9371        try:
9372            if not arg0.__class__ is set:
9373                arg0 = set(arg0)
9374        except:
9375            raise
9376        ctx = arg0.ctx
9377        res = isl.isl_set_involves_locals(arg0.ptr)
9378        if res < 0:
9379            raise
9380        return bool(res)
9381    def is_disjoint(arg0, arg1):
9382        try:
9383            if not arg0.__class__ is set:
9384                arg0 = set(arg0)
9385        except:
9386            raise
9387        try:
9388            if not arg1.__class__ is set:
9389                arg1 = set(arg1)
9390        except:
9391            return union_set(arg0).is_disjoint(arg1)
9392        ctx = arg0.ctx
9393        res = isl.isl_set_is_disjoint(arg0.ptr, arg1.ptr)
9394        if res < 0:
9395            raise
9396        return bool(res)
9397    def is_empty(arg0):
9398        try:
9399            if not arg0.__class__ is set:
9400                arg0 = set(arg0)
9401        except:
9402            raise
9403        ctx = arg0.ctx
9404        res = isl.isl_set_is_empty(arg0.ptr)
9405        if res < 0:
9406            raise
9407        return bool(res)
9408    def is_equal(arg0, arg1):
9409        try:
9410            if not arg0.__class__ is set:
9411                arg0 = set(arg0)
9412        except:
9413            raise
9414        try:
9415            if not arg1.__class__ is set:
9416                arg1 = set(arg1)
9417        except:
9418            return union_set(arg0).is_equal(arg1)
9419        ctx = arg0.ctx
9420        res = isl.isl_set_is_equal(arg0.ptr, arg1.ptr)
9421        if res < 0:
9422            raise
9423        return bool(res)
9424    def is_singleton(arg0):
9425        try:
9426            if not arg0.__class__ is set:
9427                arg0 = set(arg0)
9428        except:
9429            raise
9430        ctx = arg0.ctx
9431        res = isl.isl_set_is_singleton(arg0.ptr)
9432        if res < 0:
9433            raise
9434        return bool(res)
9435    def is_strict_subset(arg0, arg1):
9436        try:
9437            if not arg0.__class__ is set:
9438                arg0 = set(arg0)
9439        except:
9440            raise
9441        try:
9442            if not arg1.__class__ is set:
9443                arg1 = set(arg1)
9444        except:
9445            return union_set(arg0).is_strict_subset(arg1)
9446        ctx = arg0.ctx
9447        res = isl.isl_set_is_strict_subset(arg0.ptr, arg1.ptr)
9448        if res < 0:
9449            raise
9450        return bool(res)
9451    def is_subset(arg0, arg1):
9452        try:
9453            if not arg0.__class__ is set:
9454                arg0 = set(arg0)
9455        except:
9456            raise
9457        try:
9458            if not arg1.__class__ is set:
9459                arg1 = set(arg1)
9460        except:
9461            return union_set(arg0).is_subset(arg1)
9462        ctx = arg0.ctx
9463        res = isl.isl_set_is_subset(arg0.ptr, arg1.ptr)
9464        if res < 0:
9465            raise
9466        return bool(res)
9467    def is_wrapping(arg0):
9468        try:
9469            if not arg0.__class__ is set:
9470                arg0 = set(arg0)
9471        except:
9472            raise
9473        ctx = arg0.ctx
9474        res = isl.isl_set_is_wrapping(arg0.ptr)
9475        if res < 0:
9476            raise
9477        return bool(res)
9478    def lexmax(arg0):
9479        try:
9480            if not arg0.__class__ is set:
9481                arg0 = set(arg0)
9482        except:
9483            raise
9484        ctx = arg0.ctx
9485        res = isl.isl_set_lexmax(isl.isl_set_copy(arg0.ptr))
9486        obj = set(ctx=ctx, ptr=res)
9487        return obj
9488    def lexmax_pw_multi_aff(arg0):
9489        try:
9490            if not arg0.__class__ is set:
9491                arg0 = set(arg0)
9492        except:
9493            raise
9494        ctx = arg0.ctx
9495        res = isl.isl_set_lexmax_pw_multi_aff(isl.isl_set_copy(arg0.ptr))
9496        obj = pw_multi_aff(ctx=ctx, ptr=res)
9497        return obj
9498    def lexmin(arg0):
9499        try:
9500            if not arg0.__class__ is set:
9501                arg0 = set(arg0)
9502        except:
9503            raise
9504        ctx = arg0.ctx
9505        res = isl.isl_set_lexmin(isl.isl_set_copy(arg0.ptr))
9506        obj = set(ctx=ctx, ptr=res)
9507        return obj
9508    def lexmin_pw_multi_aff(arg0):
9509        try:
9510            if not arg0.__class__ is set:
9511                arg0 = set(arg0)
9512        except:
9513            raise
9514        ctx = arg0.ctx
9515        res = isl.isl_set_lexmin_pw_multi_aff(isl.isl_set_copy(arg0.ptr))
9516        obj = pw_multi_aff(ctx=ctx, ptr=res)
9517        return obj
9518    def lower_bound(*args):
9519        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
9520            ctx = args[0].ctx
9521            res = isl.isl_set_lower_bound_multi_pw_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
9522            obj = set(ctx=ctx, ptr=res)
9523            return obj
9524        if len(args) == 2 and args[1].__class__ is multi_val:
9525            ctx = args[0].ctx
9526            res = isl.isl_set_lower_bound_multi_val(isl.isl_set_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
9527            obj = set(ctx=ctx, ptr=res)
9528            return obj
9529        raise Error
9530    def max_multi_pw_aff(arg0):
9531        try:
9532            if not arg0.__class__ is set:
9533                arg0 = set(arg0)
9534        except:
9535            raise
9536        ctx = arg0.ctx
9537        res = isl.isl_set_max_multi_pw_aff(isl.isl_set_copy(arg0.ptr))
9538        obj = multi_pw_aff(ctx=ctx, ptr=res)
9539        return obj
9540    def max_val(arg0, arg1):
9541        try:
9542            if not arg0.__class__ is set:
9543                arg0 = set(arg0)
9544        except:
9545            raise
9546        try:
9547            if not arg1.__class__ is aff:
9548                arg1 = aff(arg1)
9549        except:
9550            return union_set(arg0).max_val(arg1)
9551        ctx = arg0.ctx
9552        res = isl.isl_set_max_val(arg0.ptr, arg1.ptr)
9553        obj = val(ctx=ctx, ptr=res)
9554        return obj
9555    def min_multi_pw_aff(arg0):
9556        try:
9557            if not arg0.__class__ is set:
9558                arg0 = set(arg0)
9559        except:
9560            raise
9561        ctx = arg0.ctx
9562        res = isl.isl_set_min_multi_pw_aff(isl.isl_set_copy(arg0.ptr))
9563        obj = multi_pw_aff(ctx=ctx, ptr=res)
9564        return obj
9565    def min_val(arg0, arg1):
9566        try:
9567            if not arg0.__class__ is set:
9568                arg0 = set(arg0)
9569        except:
9570            raise
9571        try:
9572            if not arg1.__class__ is aff:
9573                arg1 = aff(arg1)
9574        except:
9575            return union_set(arg0).min_val(arg1)
9576        ctx = arg0.ctx
9577        res = isl.isl_set_min_val(arg0.ptr, arg1.ptr)
9578        obj = val(ctx=ctx, ptr=res)
9579        return obj
9580    def params(arg0):
9581        try:
9582            if not arg0.__class__ is set:
9583                arg0 = set(arg0)
9584        except:
9585            raise
9586        ctx = arg0.ctx
9587        res = isl.isl_set_params(isl.isl_set_copy(arg0.ptr))
9588        obj = set(ctx=ctx, ptr=res)
9589        return obj
9590    def polyhedral_hull(arg0):
9591        try:
9592            if not arg0.__class__ is set:
9593                arg0 = set(arg0)
9594        except:
9595            raise
9596        ctx = arg0.ctx
9597        res = isl.isl_set_polyhedral_hull(isl.isl_set_copy(arg0.ptr))
9598        obj = basic_set(ctx=ctx, ptr=res)
9599        return obj
9600    def preimage(*args):
9601        if len(args) == 2 and args[1].__class__ is multi_aff:
9602            ctx = args[0].ctx
9603            res = isl.isl_set_preimage_multi_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_aff_copy(args[1].ptr))
9604            obj = set(ctx=ctx, ptr=res)
9605            return obj
9606        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
9607            ctx = args[0].ctx
9608            res = isl.isl_set_preimage_multi_pw_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
9609            obj = set(ctx=ctx, ptr=res)
9610            return obj
9611        if len(args) == 2 and args[1].__class__ is pw_multi_aff:
9612            ctx = args[0].ctx
9613            res = isl.isl_set_preimage_pw_multi_aff(isl.isl_set_copy(args[0].ptr), isl.isl_pw_multi_aff_copy(args[1].ptr))
9614            obj = set(ctx=ctx, ptr=res)
9615            return obj
9616        raise Error
9617    def product(arg0, arg1):
9618        try:
9619            if not arg0.__class__ is set:
9620                arg0 = set(arg0)
9621        except:
9622            raise
9623        try:
9624            if not arg1.__class__ is set:
9625                arg1 = set(arg1)
9626        except:
9627            return union_set(arg0).product(arg1)
9628        ctx = arg0.ctx
9629        res = isl.isl_set_product(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
9630        obj = set(ctx=ctx, ptr=res)
9631        return obj
9632    def project_out_all_params(arg0):
9633        try:
9634            if not arg0.__class__ is set:
9635                arg0 = set(arg0)
9636        except:
9637            raise
9638        ctx = arg0.ctx
9639        res = isl.isl_set_project_out_all_params(isl.isl_set_copy(arg0.ptr))
9640        obj = set(ctx=ctx, ptr=res)
9641        return obj
9642    def project_out_param(*args):
9643        if len(args) == 2 and (args[1].__class__ is id or type(args[1]) == str):
9644            args = list(args)
9645            try:
9646                if not args[1].__class__ is id:
9647                    args[1] = id(args[1])
9648            except:
9649                raise
9650            ctx = args[0].ctx
9651            res = isl.isl_set_project_out_param_id(isl.isl_set_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr))
9652            obj = set(ctx=ctx, ptr=res)
9653            return obj
9654        if len(args) == 2 and args[1].__class__ is id_list:
9655            ctx = args[0].ctx
9656            res = isl.isl_set_project_out_param_id_list(isl.isl_set_copy(args[0].ptr), isl.isl_id_list_copy(args[1].ptr))
9657            obj = set(ctx=ctx, ptr=res)
9658            return obj
9659        raise Error
9660    def sample(arg0):
9661        try:
9662            if not arg0.__class__ is set:
9663                arg0 = set(arg0)
9664        except:
9665            raise
9666        ctx = arg0.ctx
9667        res = isl.isl_set_sample(isl.isl_set_copy(arg0.ptr))
9668        obj = basic_set(ctx=ctx, ptr=res)
9669        return obj
9670    def sample_point(arg0):
9671        try:
9672            if not arg0.__class__ is set:
9673                arg0 = set(arg0)
9674        except:
9675            raise
9676        ctx = arg0.ctx
9677        res = isl.isl_set_sample_point(isl.isl_set_copy(arg0.ptr))
9678        obj = point(ctx=ctx, ptr=res)
9679        return obj
9680    def subtract(arg0, arg1):
9681        try:
9682            if not arg0.__class__ is set:
9683                arg0 = set(arg0)
9684        except:
9685            raise
9686        try:
9687            if not arg1.__class__ is set:
9688                arg1 = set(arg1)
9689        except:
9690            return union_set(arg0).subtract(arg1)
9691        ctx = arg0.ctx
9692        res = isl.isl_set_subtract(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
9693        obj = set(ctx=ctx, ptr=res)
9694        return obj
9695    def unbind_params(arg0, arg1):
9696        try:
9697            if not arg0.__class__ is set:
9698                arg0 = set(arg0)
9699        except:
9700            raise
9701        try:
9702            if not arg1.__class__ is multi_id:
9703                arg1 = multi_id(arg1)
9704        except:
9705            return union_set(arg0).unbind_params(arg1)
9706        ctx = arg0.ctx
9707        res = isl.isl_set_unbind_params(isl.isl_set_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
9708        obj = set(ctx=ctx, ptr=res)
9709        return obj
9710    def unbind_params_insert_domain(arg0, arg1):
9711        try:
9712            if not arg0.__class__ is set:
9713                arg0 = set(arg0)
9714        except:
9715            raise
9716        try:
9717            if not arg1.__class__ is multi_id:
9718                arg1 = multi_id(arg1)
9719        except:
9720            return union_set(arg0).unbind_params_insert_domain(arg1)
9721        ctx = arg0.ctx
9722        res = isl.isl_set_unbind_params_insert_domain(isl.isl_set_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
9723        obj = map(ctx=ctx, ptr=res)
9724        return obj
9725    def union(arg0, arg1):
9726        try:
9727            if not arg0.__class__ is set:
9728                arg0 = set(arg0)
9729        except:
9730            raise
9731        try:
9732            if not arg1.__class__ is set:
9733                arg1 = set(arg1)
9734        except:
9735            return union_set(arg0).union(arg1)
9736        ctx = arg0.ctx
9737        res = isl.isl_set_union(isl.isl_set_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
9738        obj = set(ctx=ctx, ptr=res)
9739        return obj
9740    @staticmethod
9741    def universe(arg0):
9742        try:
9743            if not arg0.__class__ is space:
9744                arg0 = space(arg0)
9745        except:
9746            raise
9747        ctx = arg0.ctx
9748        res = isl.isl_set_universe(isl.isl_space_copy(arg0.ptr))
9749        obj = set(ctx=ctx, ptr=res)
9750        return obj
9751    def unshifted_simple_hull(arg0):
9752        try:
9753            if not arg0.__class__ is set:
9754                arg0 = set(arg0)
9755        except:
9756            raise
9757        ctx = arg0.ctx
9758        res = isl.isl_set_unshifted_simple_hull(isl.isl_set_copy(arg0.ptr))
9759        obj = basic_set(ctx=ctx, ptr=res)
9760        return obj
9761    def unwrap(arg0):
9762        try:
9763            if not arg0.__class__ is set:
9764                arg0 = set(arg0)
9765        except:
9766            raise
9767        ctx = arg0.ctx
9768        res = isl.isl_set_unwrap(isl.isl_set_copy(arg0.ptr))
9769        obj = map(ctx=ctx, ptr=res)
9770        return obj
9771    def upper_bound(*args):
9772        if len(args) == 2 and args[1].__class__ is multi_pw_aff:
9773            ctx = args[0].ctx
9774            res = isl.isl_set_upper_bound_multi_pw_aff(isl.isl_set_copy(args[0].ptr), isl.isl_multi_pw_aff_copy(args[1].ptr))
9775            obj = set(ctx=ctx, ptr=res)
9776            return obj
9777        if len(args) == 2 and args[1].__class__ is multi_val:
9778            ctx = args[0].ctx
9779            res = isl.isl_set_upper_bound_multi_val(isl.isl_set_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
9780            obj = set(ctx=ctx, ptr=res)
9781            return obj
9782        raise Error
9783
9784isl.isl_set_from_basic_set.restype = c_void_p
9785isl.isl_set_from_basic_set.argtypes = [c_void_p]
9786isl.isl_set_from_point.restype = c_void_p
9787isl.isl_set_from_point.argtypes = [c_void_p]
9788isl.isl_set_read_from_str.restype = c_void_p
9789isl.isl_set_read_from_str.argtypes = [Context, c_char_p]
9790isl.isl_set_affine_hull.restype = c_void_p
9791isl.isl_set_affine_hull.argtypes = [c_void_p]
9792isl.isl_set_apply.restype = c_void_p
9793isl.isl_set_apply.argtypes = [c_void_p, c_void_p]
9794isl.isl_set_bind.restype = c_void_p
9795isl.isl_set_bind.argtypes = [c_void_p, c_void_p]
9796isl.isl_set_coalesce.restype = c_void_p
9797isl.isl_set_coalesce.argtypes = [c_void_p]
9798isl.isl_set_complement.restype = c_void_p
9799isl.isl_set_complement.argtypes = [c_void_p]
9800isl.isl_set_detect_equalities.restype = c_void_p
9801isl.isl_set_detect_equalities.argtypes = [c_void_p]
9802isl.isl_set_dim_max_val.restype = c_void_p
9803isl.isl_set_dim_max_val.argtypes = [c_void_p, c_int]
9804isl.isl_set_dim_min_val.restype = c_void_p
9805isl.isl_set_dim_min_val.argtypes = [c_void_p, c_int]
9806isl.isl_set_empty.restype = c_void_p
9807isl.isl_set_empty.argtypes = [c_void_p]
9808isl.isl_set_flatten.restype = c_void_p
9809isl.isl_set_flatten.argtypes = [c_void_p]
9810isl.isl_set_foreach_basic_set.argtypes = [c_void_p, c_void_p, c_void_p]
9811isl.isl_set_foreach_point.argtypes = [c_void_p, c_void_p, c_void_p]
9812isl.isl_set_get_plain_multi_val_if_fixed.restype = c_void_p
9813isl.isl_set_get_plain_multi_val_if_fixed.argtypes = [c_void_p]
9814isl.isl_set_get_simple_fixed_box_hull.restype = c_void_p
9815isl.isl_set_get_simple_fixed_box_hull.argtypes = [c_void_p]
9816isl.isl_set_get_space.restype = c_void_p
9817isl.isl_set_get_space.argtypes = [c_void_p]
9818isl.isl_set_get_stride.restype = c_void_p
9819isl.isl_set_get_stride.argtypes = [c_void_p, c_int]
9820isl.isl_set_gist.restype = c_void_p
9821isl.isl_set_gist.argtypes = [c_void_p, c_void_p]
9822isl.isl_set_identity.restype = c_void_p
9823isl.isl_set_identity.argtypes = [c_void_p]
9824isl.isl_set_indicator_function.restype = c_void_p
9825isl.isl_set_indicator_function.argtypes = [c_void_p]
9826isl.isl_set_insert_domain.restype = c_void_p
9827isl.isl_set_insert_domain.argtypes = [c_void_p, c_void_p]
9828isl.isl_set_intersect.restype = c_void_p
9829isl.isl_set_intersect.argtypes = [c_void_p, c_void_p]
9830isl.isl_set_intersect_params.restype = c_void_p
9831isl.isl_set_intersect_params.argtypes = [c_void_p, c_void_p]
9832isl.isl_set_involves_locals.argtypes = [c_void_p]
9833isl.isl_set_is_disjoint.argtypes = [c_void_p, c_void_p]
9834isl.isl_set_is_empty.argtypes = [c_void_p]
9835isl.isl_set_is_equal.argtypes = [c_void_p, c_void_p]
9836isl.isl_set_is_singleton.argtypes = [c_void_p]
9837isl.isl_set_is_strict_subset.argtypes = [c_void_p, c_void_p]
9838isl.isl_set_is_subset.argtypes = [c_void_p, c_void_p]
9839isl.isl_set_is_wrapping.argtypes = [c_void_p]
9840isl.isl_set_lexmax.restype = c_void_p
9841isl.isl_set_lexmax.argtypes = [c_void_p]
9842isl.isl_set_lexmax_pw_multi_aff.restype = c_void_p
9843isl.isl_set_lexmax_pw_multi_aff.argtypes = [c_void_p]
9844isl.isl_set_lexmin.restype = c_void_p
9845isl.isl_set_lexmin.argtypes = [c_void_p]
9846isl.isl_set_lexmin_pw_multi_aff.restype = c_void_p
9847isl.isl_set_lexmin_pw_multi_aff.argtypes = [c_void_p]
9848isl.isl_set_lower_bound_multi_pw_aff.restype = c_void_p
9849isl.isl_set_lower_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p]
9850isl.isl_set_lower_bound_multi_val.restype = c_void_p
9851isl.isl_set_lower_bound_multi_val.argtypes = [c_void_p, c_void_p]
9852isl.isl_set_max_multi_pw_aff.restype = c_void_p
9853isl.isl_set_max_multi_pw_aff.argtypes = [c_void_p]
9854isl.isl_set_max_val.restype = c_void_p
9855isl.isl_set_max_val.argtypes = [c_void_p, c_void_p]
9856isl.isl_set_min_multi_pw_aff.restype = c_void_p
9857isl.isl_set_min_multi_pw_aff.argtypes = [c_void_p]
9858isl.isl_set_min_val.restype = c_void_p
9859isl.isl_set_min_val.argtypes = [c_void_p, c_void_p]
9860isl.isl_set_params.restype = c_void_p
9861isl.isl_set_params.argtypes = [c_void_p]
9862isl.isl_set_polyhedral_hull.restype = c_void_p
9863isl.isl_set_polyhedral_hull.argtypes = [c_void_p]
9864isl.isl_set_preimage_multi_aff.restype = c_void_p
9865isl.isl_set_preimage_multi_aff.argtypes = [c_void_p, c_void_p]
9866isl.isl_set_preimage_multi_pw_aff.restype = c_void_p
9867isl.isl_set_preimage_multi_pw_aff.argtypes = [c_void_p, c_void_p]
9868isl.isl_set_preimage_pw_multi_aff.restype = c_void_p
9869isl.isl_set_preimage_pw_multi_aff.argtypes = [c_void_p, c_void_p]
9870isl.isl_set_product.restype = c_void_p
9871isl.isl_set_product.argtypes = [c_void_p, c_void_p]
9872isl.isl_set_project_out_all_params.restype = c_void_p
9873isl.isl_set_project_out_all_params.argtypes = [c_void_p]
9874isl.isl_set_project_out_param_id.restype = c_void_p
9875isl.isl_set_project_out_param_id.argtypes = [c_void_p, c_void_p]
9876isl.isl_set_project_out_param_id_list.restype = c_void_p
9877isl.isl_set_project_out_param_id_list.argtypes = [c_void_p, c_void_p]
9878isl.isl_set_sample.restype = c_void_p
9879isl.isl_set_sample.argtypes = [c_void_p]
9880isl.isl_set_sample_point.restype = c_void_p
9881isl.isl_set_sample_point.argtypes = [c_void_p]
9882isl.isl_set_subtract.restype = c_void_p
9883isl.isl_set_subtract.argtypes = [c_void_p, c_void_p]
9884isl.isl_set_unbind_params.restype = c_void_p
9885isl.isl_set_unbind_params.argtypes = [c_void_p, c_void_p]
9886isl.isl_set_unbind_params_insert_domain.restype = c_void_p
9887isl.isl_set_unbind_params_insert_domain.argtypes = [c_void_p, c_void_p]
9888isl.isl_set_union.restype = c_void_p
9889isl.isl_set_union.argtypes = [c_void_p, c_void_p]
9890isl.isl_set_universe.restype = c_void_p
9891isl.isl_set_universe.argtypes = [c_void_p]
9892isl.isl_set_unshifted_simple_hull.restype = c_void_p
9893isl.isl_set_unshifted_simple_hull.argtypes = [c_void_p]
9894isl.isl_set_unwrap.restype = c_void_p
9895isl.isl_set_unwrap.argtypes = [c_void_p]
9896isl.isl_set_upper_bound_multi_pw_aff.restype = c_void_p
9897isl.isl_set_upper_bound_multi_pw_aff.argtypes = [c_void_p, c_void_p]
9898isl.isl_set_upper_bound_multi_val.restype = c_void_p
9899isl.isl_set_upper_bound_multi_val.argtypes = [c_void_p, c_void_p]
9900isl.isl_set_copy.restype = c_void_p
9901isl.isl_set_copy.argtypes = [c_void_p]
9902isl.isl_set_free.restype = c_void_p
9903isl.isl_set_free.argtypes = [c_void_p]
9904isl.isl_set_to_str.restype = POINTER(c_char)
9905isl.isl_set_to_str.argtypes = [c_void_p]
9906
9907class basic_set(set):
9908    def __init__(self, *args, **keywords):
9909        if "ptr" in keywords:
9910            self.ctx = keywords["ctx"]
9911            self.ptr = keywords["ptr"]
9912            return
9913        if len(args) == 1 and args[0].__class__ is point:
9914            self.ctx = Context.getDefaultInstance()
9915            self.ptr = isl.isl_basic_set_from_point(isl.isl_point_copy(args[0].ptr))
9916            return
9917        if len(args) == 1 and type(args[0]) == str:
9918            self.ctx = Context.getDefaultInstance()
9919            self.ptr = isl.isl_basic_set_read_from_str(self.ctx, args[0].encode('ascii'))
9920            return
9921        raise Error
9922    def __del__(self):
9923        if hasattr(self, 'ptr'):
9924            isl.isl_basic_set_free(self.ptr)
9925    def __str__(arg0):
9926        try:
9927            if not arg0.__class__ is basic_set:
9928                arg0 = basic_set(arg0)
9929        except:
9930            raise
9931        ptr = isl.isl_basic_set_to_str(arg0.ptr)
9932        res = cast(ptr, c_char_p).value.decode('ascii')
9933        libc.free(ptr)
9934        return res
9935    def __repr__(self):
9936        s = str(self)
9937        if '"' in s:
9938            return 'isl.basic_set("""%s""")' % s
9939        else:
9940            return 'isl.basic_set("%s")' % s
9941    def affine_hull(arg0):
9942        try:
9943            if not arg0.__class__ is basic_set:
9944                arg0 = basic_set(arg0)
9945        except:
9946            raise
9947        ctx = arg0.ctx
9948        res = isl.isl_basic_set_affine_hull(isl.isl_basic_set_copy(arg0.ptr))
9949        obj = basic_set(ctx=ctx, ptr=res)
9950        return obj
9951    def apply(arg0, arg1):
9952        try:
9953            if not arg0.__class__ is basic_set:
9954                arg0 = basic_set(arg0)
9955        except:
9956            raise
9957        try:
9958            if not arg1.__class__ is basic_map:
9959                arg1 = basic_map(arg1)
9960        except:
9961            return set(arg0).apply(arg1)
9962        ctx = arg0.ctx
9963        res = isl.isl_basic_set_apply(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_map_copy(arg1.ptr))
9964        obj = basic_set(ctx=ctx, ptr=res)
9965        return obj
9966    def detect_equalities(arg0):
9967        try:
9968            if not arg0.__class__ is basic_set:
9969                arg0 = basic_set(arg0)
9970        except:
9971            raise
9972        ctx = arg0.ctx
9973        res = isl.isl_basic_set_detect_equalities(isl.isl_basic_set_copy(arg0.ptr))
9974        obj = basic_set(ctx=ctx, ptr=res)
9975        return obj
9976    def dim_max_val(arg0, arg1):
9977        try:
9978            if not arg0.__class__ is basic_set:
9979                arg0 = basic_set(arg0)
9980        except:
9981            raise
9982        ctx = arg0.ctx
9983        res = isl.isl_basic_set_dim_max_val(isl.isl_basic_set_copy(arg0.ptr), arg1)
9984        obj = val(ctx=ctx, ptr=res)
9985        return obj
9986    def flatten(arg0):
9987        try:
9988            if not arg0.__class__ is basic_set:
9989                arg0 = basic_set(arg0)
9990        except:
9991            raise
9992        ctx = arg0.ctx
9993        res = isl.isl_basic_set_flatten(isl.isl_basic_set_copy(arg0.ptr))
9994        obj = basic_set(ctx=ctx, ptr=res)
9995        return obj
9996    def gist(arg0, arg1):
9997        try:
9998            if not arg0.__class__ is basic_set:
9999                arg0 = basic_set(arg0)
10000        except:
10001            raise
10002        try:
10003            if not arg1.__class__ is basic_set:
10004                arg1 = basic_set(arg1)
10005        except:
10006            return set(arg0).gist(arg1)
10007        ctx = arg0.ctx
10008        res = isl.isl_basic_set_gist(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr))
10009        obj = basic_set(ctx=ctx, ptr=res)
10010        return obj
10011    def intersect(arg0, arg1):
10012        try:
10013            if not arg0.__class__ is basic_set:
10014                arg0 = basic_set(arg0)
10015        except:
10016            raise
10017        try:
10018            if not arg1.__class__ is basic_set:
10019                arg1 = basic_set(arg1)
10020        except:
10021            return set(arg0).intersect(arg1)
10022        ctx = arg0.ctx
10023        res = isl.isl_basic_set_intersect(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr))
10024        obj = basic_set(ctx=ctx, ptr=res)
10025        return obj
10026    def intersect_params(arg0, arg1):
10027        try:
10028            if not arg0.__class__ is basic_set:
10029                arg0 = basic_set(arg0)
10030        except:
10031            raise
10032        try:
10033            if not arg1.__class__ is basic_set:
10034                arg1 = basic_set(arg1)
10035        except:
10036            return set(arg0).intersect_params(arg1)
10037        ctx = arg0.ctx
10038        res = isl.isl_basic_set_intersect_params(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr))
10039        obj = basic_set(ctx=ctx, ptr=res)
10040        return obj
10041    def is_empty(arg0):
10042        try:
10043            if not arg0.__class__ is basic_set:
10044                arg0 = basic_set(arg0)
10045        except:
10046            raise
10047        ctx = arg0.ctx
10048        res = isl.isl_basic_set_is_empty(arg0.ptr)
10049        if res < 0:
10050            raise
10051        return bool(res)
10052    def is_equal(arg0, arg1):
10053        try:
10054            if not arg0.__class__ is basic_set:
10055                arg0 = basic_set(arg0)
10056        except:
10057            raise
10058        try:
10059            if not arg1.__class__ is basic_set:
10060                arg1 = basic_set(arg1)
10061        except:
10062            return set(arg0).is_equal(arg1)
10063        ctx = arg0.ctx
10064        res = isl.isl_basic_set_is_equal(arg0.ptr, arg1.ptr)
10065        if res < 0:
10066            raise
10067        return bool(res)
10068    def is_subset(arg0, arg1):
10069        try:
10070            if not arg0.__class__ is basic_set:
10071                arg0 = basic_set(arg0)
10072        except:
10073            raise
10074        try:
10075            if not arg1.__class__ is basic_set:
10076                arg1 = basic_set(arg1)
10077        except:
10078            return set(arg0).is_subset(arg1)
10079        ctx = arg0.ctx
10080        res = isl.isl_basic_set_is_subset(arg0.ptr, arg1.ptr)
10081        if res < 0:
10082            raise
10083        return bool(res)
10084    def is_wrapping(arg0):
10085        try:
10086            if not arg0.__class__ is basic_set:
10087                arg0 = basic_set(arg0)
10088        except:
10089            raise
10090        ctx = arg0.ctx
10091        res = isl.isl_basic_set_is_wrapping(arg0.ptr)
10092        if res < 0:
10093            raise
10094        return bool(res)
10095    def lexmax(arg0):
10096        try:
10097            if not arg0.__class__ is basic_set:
10098                arg0 = basic_set(arg0)
10099        except:
10100            raise
10101        ctx = arg0.ctx
10102        res = isl.isl_basic_set_lexmax(isl.isl_basic_set_copy(arg0.ptr))
10103        obj = set(ctx=ctx, ptr=res)
10104        return obj
10105    def lexmin(arg0):
10106        try:
10107            if not arg0.__class__ is basic_set:
10108                arg0 = basic_set(arg0)
10109        except:
10110            raise
10111        ctx = arg0.ctx
10112        res = isl.isl_basic_set_lexmin(isl.isl_basic_set_copy(arg0.ptr))
10113        obj = set(ctx=ctx, ptr=res)
10114        return obj
10115    def params(arg0):
10116        try:
10117            if not arg0.__class__ is basic_set:
10118                arg0 = basic_set(arg0)
10119        except:
10120            raise
10121        ctx = arg0.ctx
10122        res = isl.isl_basic_set_params(isl.isl_basic_set_copy(arg0.ptr))
10123        obj = basic_set(ctx=ctx, ptr=res)
10124        return obj
10125    def sample(arg0):
10126        try:
10127            if not arg0.__class__ is basic_set:
10128                arg0 = basic_set(arg0)
10129        except:
10130            raise
10131        ctx = arg0.ctx
10132        res = isl.isl_basic_set_sample(isl.isl_basic_set_copy(arg0.ptr))
10133        obj = basic_set(ctx=ctx, ptr=res)
10134        return obj
10135    def sample_point(arg0):
10136        try:
10137            if not arg0.__class__ is basic_set:
10138                arg0 = basic_set(arg0)
10139        except:
10140            raise
10141        ctx = arg0.ctx
10142        res = isl.isl_basic_set_sample_point(isl.isl_basic_set_copy(arg0.ptr))
10143        obj = point(ctx=ctx, ptr=res)
10144        return obj
10145    def union(arg0, arg1):
10146        try:
10147            if not arg0.__class__ is basic_set:
10148                arg0 = basic_set(arg0)
10149        except:
10150            raise
10151        try:
10152            if not arg1.__class__ is basic_set:
10153                arg1 = basic_set(arg1)
10154        except:
10155            return set(arg0).union(arg1)
10156        ctx = arg0.ctx
10157        res = isl.isl_basic_set_union(isl.isl_basic_set_copy(arg0.ptr), isl.isl_basic_set_copy(arg1.ptr))
10158        obj = set(ctx=ctx, ptr=res)
10159        return obj
10160
10161isl.isl_basic_set_from_point.restype = c_void_p
10162isl.isl_basic_set_from_point.argtypes = [c_void_p]
10163isl.isl_basic_set_read_from_str.restype = c_void_p
10164isl.isl_basic_set_read_from_str.argtypes = [Context, c_char_p]
10165isl.isl_basic_set_affine_hull.restype = c_void_p
10166isl.isl_basic_set_affine_hull.argtypes = [c_void_p]
10167isl.isl_basic_set_apply.restype = c_void_p
10168isl.isl_basic_set_apply.argtypes = [c_void_p, c_void_p]
10169isl.isl_basic_set_detect_equalities.restype = c_void_p
10170isl.isl_basic_set_detect_equalities.argtypes = [c_void_p]
10171isl.isl_basic_set_dim_max_val.restype = c_void_p
10172isl.isl_basic_set_dim_max_val.argtypes = [c_void_p, c_int]
10173isl.isl_basic_set_flatten.restype = c_void_p
10174isl.isl_basic_set_flatten.argtypes = [c_void_p]
10175isl.isl_basic_set_gist.restype = c_void_p
10176isl.isl_basic_set_gist.argtypes = [c_void_p, c_void_p]
10177isl.isl_basic_set_intersect.restype = c_void_p
10178isl.isl_basic_set_intersect.argtypes = [c_void_p, c_void_p]
10179isl.isl_basic_set_intersect_params.restype = c_void_p
10180isl.isl_basic_set_intersect_params.argtypes = [c_void_p, c_void_p]
10181isl.isl_basic_set_is_empty.argtypes = [c_void_p]
10182isl.isl_basic_set_is_equal.argtypes = [c_void_p, c_void_p]
10183isl.isl_basic_set_is_subset.argtypes = [c_void_p, c_void_p]
10184isl.isl_basic_set_is_wrapping.argtypes = [c_void_p]
10185isl.isl_basic_set_lexmax.restype = c_void_p
10186isl.isl_basic_set_lexmax.argtypes = [c_void_p]
10187isl.isl_basic_set_lexmin.restype = c_void_p
10188isl.isl_basic_set_lexmin.argtypes = [c_void_p]
10189isl.isl_basic_set_params.restype = c_void_p
10190isl.isl_basic_set_params.argtypes = [c_void_p]
10191isl.isl_basic_set_sample.restype = c_void_p
10192isl.isl_basic_set_sample.argtypes = [c_void_p]
10193isl.isl_basic_set_sample_point.restype = c_void_p
10194isl.isl_basic_set_sample_point.argtypes = [c_void_p]
10195isl.isl_basic_set_union.restype = c_void_p
10196isl.isl_basic_set_union.argtypes = [c_void_p, c_void_p]
10197isl.isl_basic_set_copy.restype = c_void_p
10198isl.isl_basic_set_copy.argtypes = [c_void_p]
10199isl.isl_basic_set_free.restype = c_void_p
10200isl.isl_basic_set_free.argtypes = [c_void_p]
10201isl.isl_basic_set_to_str.restype = POINTER(c_char)
10202isl.isl_basic_set_to_str.argtypes = [c_void_p]
10203
10204class fixed_box(object):
10205    def __init__(self, *args, **keywords):
10206        if "ptr" in keywords:
10207            self.ctx = keywords["ctx"]
10208            self.ptr = keywords["ptr"]
10209            return
10210        raise Error
10211    def __del__(self):
10212        if hasattr(self, 'ptr'):
10213            isl.isl_fixed_box_free(self.ptr)
10214    def __str__(arg0):
10215        try:
10216            if not arg0.__class__ is fixed_box:
10217                arg0 = fixed_box(arg0)
10218        except:
10219            raise
10220        ptr = isl.isl_fixed_box_to_str(arg0.ptr)
10221        res = cast(ptr, c_char_p).value.decode('ascii')
10222        libc.free(ptr)
10223        return res
10224    def __repr__(self):
10225        s = str(self)
10226        if '"' in s:
10227            return 'isl.fixed_box("""%s""")' % s
10228        else:
10229            return 'isl.fixed_box("%s")' % s
10230    def offset(arg0):
10231        try:
10232            if not arg0.__class__ is fixed_box:
10233                arg0 = fixed_box(arg0)
10234        except:
10235            raise
10236        ctx = arg0.ctx
10237        res = isl.isl_fixed_box_get_offset(arg0.ptr)
10238        obj = multi_aff(ctx=ctx, ptr=res)
10239        return obj
10240    def get_offset(arg0):
10241        return arg0.offset()
10242    def size(arg0):
10243        try:
10244            if not arg0.__class__ is fixed_box:
10245                arg0 = fixed_box(arg0)
10246        except:
10247            raise
10248        ctx = arg0.ctx
10249        res = isl.isl_fixed_box_get_size(arg0.ptr)
10250        obj = multi_val(ctx=ctx, ptr=res)
10251        return obj
10252    def get_size(arg0):
10253        return arg0.size()
10254    def space(arg0):
10255        try:
10256            if not arg0.__class__ is fixed_box:
10257                arg0 = fixed_box(arg0)
10258        except:
10259            raise
10260        ctx = arg0.ctx
10261        res = isl.isl_fixed_box_get_space(arg0.ptr)
10262        obj = space(ctx=ctx, ptr=res)
10263        return obj
10264    def get_space(arg0):
10265        return arg0.space()
10266    def is_valid(arg0):
10267        try:
10268            if not arg0.__class__ is fixed_box:
10269                arg0 = fixed_box(arg0)
10270        except:
10271            raise
10272        ctx = arg0.ctx
10273        res = isl.isl_fixed_box_is_valid(arg0.ptr)
10274        if res < 0:
10275            raise
10276        return bool(res)
10277
10278isl.isl_fixed_box_get_offset.restype = c_void_p
10279isl.isl_fixed_box_get_offset.argtypes = [c_void_p]
10280isl.isl_fixed_box_get_size.restype = c_void_p
10281isl.isl_fixed_box_get_size.argtypes = [c_void_p]
10282isl.isl_fixed_box_get_space.restype = c_void_p
10283isl.isl_fixed_box_get_space.argtypes = [c_void_p]
10284isl.isl_fixed_box_is_valid.argtypes = [c_void_p]
10285isl.isl_fixed_box_copy.restype = c_void_p
10286isl.isl_fixed_box_copy.argtypes = [c_void_p]
10287isl.isl_fixed_box_free.restype = c_void_p
10288isl.isl_fixed_box_free.argtypes = [c_void_p]
10289isl.isl_fixed_box_to_str.restype = POINTER(c_char)
10290isl.isl_fixed_box_to_str.argtypes = [c_void_p]
10291
10292class id(object):
10293    def __init__(self, *args, **keywords):
10294        if "ptr" in keywords:
10295            self.ctx = keywords["ctx"]
10296            self.ptr = keywords["ptr"]
10297            return
10298        if len(args) == 1 and type(args[0]) == str:
10299            self.ctx = Context.getDefaultInstance()
10300            self.ptr = isl.isl_id_read_from_str(self.ctx, args[0].encode('ascii'))
10301            return
10302        raise Error
10303    def __del__(self):
10304        if hasattr(self, 'ptr'):
10305            isl.isl_id_free(self.ptr)
10306    def __str__(arg0):
10307        try:
10308            if not arg0.__class__ is id:
10309                arg0 = id(arg0)
10310        except:
10311            raise
10312        ptr = isl.isl_id_to_str(arg0.ptr)
10313        res = cast(ptr, c_char_p).value.decode('ascii')
10314        libc.free(ptr)
10315        return res
10316    def __repr__(self):
10317        s = str(self)
10318        if '"' in s:
10319            return 'isl.id("""%s""")' % s
10320        else:
10321            return 'isl.id("%s")' % s
10322    def name(arg0):
10323        try:
10324            if not arg0.__class__ is id:
10325                arg0 = id(arg0)
10326        except:
10327            raise
10328        ctx = arg0.ctx
10329        res = isl.isl_id_get_name(arg0.ptr)
10330        if res == 0:
10331            raise
10332        string = cast(res, c_char_p).value.decode('ascii')
10333        return string
10334    def get_name(arg0):
10335        return arg0.name()
10336
10337isl.isl_id_read_from_str.restype = c_void_p
10338isl.isl_id_read_from_str.argtypes = [Context, c_char_p]
10339isl.isl_id_get_name.restype = POINTER(c_char)
10340isl.isl_id_get_name.argtypes = [c_void_p]
10341isl.isl_id_copy.restype = c_void_p
10342isl.isl_id_copy.argtypes = [c_void_p]
10343isl.isl_id_free.restype = c_void_p
10344isl.isl_id_free.argtypes = [c_void_p]
10345isl.isl_id_to_str.restype = POINTER(c_char)
10346isl.isl_id_to_str.argtypes = [c_void_p]
10347
10348class id_list(object):
10349    def __init__(self, *args, **keywords):
10350        if "ptr" in keywords:
10351            self.ctx = keywords["ctx"]
10352            self.ptr = keywords["ptr"]
10353            return
10354        if len(args) == 1 and type(args[0]) == int:
10355            self.ctx = Context.getDefaultInstance()
10356            self.ptr = isl.isl_id_list_alloc(self.ctx, args[0])
10357            return
10358        if len(args) == 1 and (args[0].__class__ is id or type(args[0]) == str):
10359            args = list(args)
10360            try:
10361                if not args[0].__class__ is id:
10362                    args[0] = id(args[0])
10363            except:
10364                raise
10365            self.ctx = Context.getDefaultInstance()
10366            self.ptr = isl.isl_id_list_from_id(isl.isl_id_copy(args[0].ptr))
10367            return
10368        raise Error
10369    def __del__(self):
10370        if hasattr(self, 'ptr'):
10371            isl.isl_id_list_free(self.ptr)
10372    def __str__(arg0):
10373        try:
10374            if not arg0.__class__ is id_list:
10375                arg0 = id_list(arg0)
10376        except:
10377            raise
10378        ptr = isl.isl_id_list_to_str(arg0.ptr)
10379        res = cast(ptr, c_char_p).value.decode('ascii')
10380        libc.free(ptr)
10381        return res
10382    def __repr__(self):
10383        s = str(self)
10384        if '"' in s:
10385            return 'isl.id_list("""%s""")' % s
10386        else:
10387            return 'isl.id_list("%s")' % s
10388    def add(arg0, arg1):
10389        try:
10390            if not arg0.__class__ is id_list:
10391                arg0 = id_list(arg0)
10392        except:
10393            raise
10394        try:
10395            if not arg1.__class__ is id:
10396                arg1 = id(arg1)
10397        except:
10398            raise
10399        ctx = arg0.ctx
10400        res = isl.isl_id_list_add(isl.isl_id_list_copy(arg0.ptr), isl.isl_id_copy(arg1.ptr))
10401        obj = id_list(ctx=ctx, ptr=res)
10402        return obj
10403    def clear(arg0):
10404        try:
10405            if not arg0.__class__ is id_list:
10406                arg0 = id_list(arg0)
10407        except:
10408            raise
10409        ctx = arg0.ctx
10410        res = isl.isl_id_list_clear(isl.isl_id_list_copy(arg0.ptr))
10411        obj = id_list(ctx=ctx, ptr=res)
10412        return obj
10413    def concat(arg0, arg1):
10414        try:
10415            if not arg0.__class__ is id_list:
10416                arg0 = id_list(arg0)
10417        except:
10418            raise
10419        try:
10420            if not arg1.__class__ is id_list:
10421                arg1 = id_list(arg1)
10422        except:
10423            raise
10424        ctx = arg0.ctx
10425        res = isl.isl_id_list_concat(isl.isl_id_list_copy(arg0.ptr), isl.isl_id_list_copy(arg1.ptr))
10426        obj = id_list(ctx=ctx, ptr=res)
10427        return obj
10428    def drop(arg0, arg1, arg2):
10429        try:
10430            if not arg0.__class__ is id_list:
10431                arg0 = id_list(arg0)
10432        except:
10433            raise
10434        ctx = arg0.ctx
10435        res = isl.isl_id_list_drop(isl.isl_id_list_copy(arg0.ptr), arg1, arg2)
10436        obj = id_list(ctx=ctx, ptr=res)
10437        return obj
10438    def foreach(arg0, arg1):
10439        try:
10440            if not arg0.__class__ is id_list:
10441                arg0 = id_list(arg0)
10442        except:
10443            raise
10444        exc_info = [None]
10445        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
10446        def cb_func(cb_arg0, cb_arg1):
10447            cb_arg0 = id(ctx=arg0.ctx, ptr=(cb_arg0))
10448            try:
10449                arg1(cb_arg0)
10450            except:
10451                import sys
10452                exc_info[0] = sys.exc_info()
10453                return -1
10454            return 0
10455        cb = fn(cb_func)
10456        ctx = arg0.ctx
10457        res = isl.isl_id_list_foreach(arg0.ptr, cb, None)
10458        if exc_info[0] != None:
10459            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
10460        if res < 0:
10461            raise
10462    def at(arg0, arg1):
10463        try:
10464            if not arg0.__class__ is id_list:
10465                arg0 = id_list(arg0)
10466        except:
10467            raise
10468        ctx = arg0.ctx
10469        res = isl.isl_id_list_get_at(arg0.ptr, arg1)
10470        obj = id(ctx=ctx, ptr=res)
10471        return obj
10472    def get_at(arg0, arg1):
10473        return arg0.at(arg1)
10474    def insert(arg0, arg1, arg2):
10475        try:
10476            if not arg0.__class__ is id_list:
10477                arg0 = id_list(arg0)
10478        except:
10479            raise
10480        try:
10481            if not arg2.__class__ is id:
10482                arg2 = id(arg2)
10483        except:
10484            raise
10485        ctx = arg0.ctx
10486        res = isl.isl_id_list_insert(isl.isl_id_list_copy(arg0.ptr), arg1, isl.isl_id_copy(arg2.ptr))
10487        obj = id_list(ctx=ctx, ptr=res)
10488        return obj
10489    def size(arg0):
10490        try:
10491            if not arg0.__class__ is id_list:
10492                arg0 = id_list(arg0)
10493        except:
10494            raise
10495        ctx = arg0.ctx
10496        res = isl.isl_id_list_size(arg0.ptr)
10497        if res < 0:
10498            raise
10499        return int(res)
10500
10501isl.isl_id_list_alloc.restype = c_void_p
10502isl.isl_id_list_alloc.argtypes = [Context, c_int]
10503isl.isl_id_list_from_id.restype = c_void_p
10504isl.isl_id_list_from_id.argtypes = [c_void_p]
10505isl.isl_id_list_add.restype = c_void_p
10506isl.isl_id_list_add.argtypes = [c_void_p, c_void_p]
10507isl.isl_id_list_clear.restype = c_void_p
10508isl.isl_id_list_clear.argtypes = [c_void_p]
10509isl.isl_id_list_concat.restype = c_void_p
10510isl.isl_id_list_concat.argtypes = [c_void_p, c_void_p]
10511isl.isl_id_list_drop.restype = c_void_p
10512isl.isl_id_list_drop.argtypes = [c_void_p, c_int, c_int]
10513isl.isl_id_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
10514isl.isl_id_list_get_at.restype = c_void_p
10515isl.isl_id_list_get_at.argtypes = [c_void_p, c_int]
10516isl.isl_id_list_insert.restype = c_void_p
10517isl.isl_id_list_insert.argtypes = [c_void_p, c_int, c_void_p]
10518isl.isl_id_list_size.argtypes = [c_void_p]
10519isl.isl_id_list_copy.restype = c_void_p
10520isl.isl_id_list_copy.argtypes = [c_void_p]
10521isl.isl_id_list_free.restype = c_void_p
10522isl.isl_id_list_free.argtypes = [c_void_p]
10523isl.isl_id_list_to_str.restype = POINTER(c_char)
10524isl.isl_id_list_to_str.argtypes = [c_void_p]
10525
10526class multi_id(object):
10527    def __init__(self, *args, **keywords):
10528        if "ptr" in keywords:
10529            self.ctx = keywords["ctx"]
10530            self.ptr = keywords["ptr"]
10531            return
10532        if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is id_list:
10533            self.ctx = Context.getDefaultInstance()
10534            self.ptr = isl.isl_multi_id_from_id_list(isl.isl_space_copy(args[0].ptr), isl.isl_id_list_copy(args[1].ptr))
10535            return
10536        if len(args) == 1 and type(args[0]) == str:
10537            self.ctx = Context.getDefaultInstance()
10538            self.ptr = isl.isl_multi_id_read_from_str(self.ctx, args[0].encode('ascii'))
10539            return
10540        raise Error
10541    def __del__(self):
10542        if hasattr(self, 'ptr'):
10543            isl.isl_multi_id_free(self.ptr)
10544    def __str__(arg0):
10545        try:
10546            if not arg0.__class__ is multi_id:
10547                arg0 = multi_id(arg0)
10548        except:
10549            raise
10550        ptr = isl.isl_multi_id_to_str(arg0.ptr)
10551        res = cast(ptr, c_char_p).value.decode('ascii')
10552        libc.free(ptr)
10553        return res
10554    def __repr__(self):
10555        s = str(self)
10556        if '"' in s:
10557            return 'isl.multi_id("""%s""")' % s
10558        else:
10559            return 'isl.multi_id("%s")' % s
10560    def flat_range_product(arg0, arg1):
10561        try:
10562            if not arg0.__class__ is multi_id:
10563                arg0 = multi_id(arg0)
10564        except:
10565            raise
10566        try:
10567            if not arg1.__class__ is multi_id:
10568                arg1 = multi_id(arg1)
10569        except:
10570            raise
10571        ctx = arg0.ctx
10572        res = isl.isl_multi_id_flat_range_product(isl.isl_multi_id_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
10573        obj = multi_id(ctx=ctx, ptr=res)
10574        return obj
10575    def at(arg0, arg1):
10576        try:
10577            if not arg0.__class__ is multi_id:
10578                arg0 = multi_id(arg0)
10579        except:
10580            raise
10581        ctx = arg0.ctx
10582        res = isl.isl_multi_id_get_at(arg0.ptr, arg1)
10583        obj = id(ctx=ctx, ptr=res)
10584        return obj
10585    def get_at(arg0, arg1):
10586        return arg0.at(arg1)
10587    def list(arg0):
10588        try:
10589            if not arg0.__class__ is multi_id:
10590                arg0 = multi_id(arg0)
10591        except:
10592            raise
10593        ctx = arg0.ctx
10594        res = isl.isl_multi_id_get_list(arg0.ptr)
10595        obj = id_list(ctx=ctx, ptr=res)
10596        return obj
10597    def get_list(arg0):
10598        return arg0.list()
10599    def space(arg0):
10600        try:
10601            if not arg0.__class__ is multi_id:
10602                arg0 = multi_id(arg0)
10603        except:
10604            raise
10605        ctx = arg0.ctx
10606        res = isl.isl_multi_id_get_space(arg0.ptr)
10607        obj = space(ctx=ctx, ptr=res)
10608        return obj
10609    def get_space(arg0):
10610        return arg0.space()
10611    def plain_is_equal(arg0, arg1):
10612        try:
10613            if not arg0.__class__ is multi_id:
10614                arg0 = multi_id(arg0)
10615        except:
10616            raise
10617        try:
10618            if not arg1.__class__ is multi_id:
10619                arg1 = multi_id(arg1)
10620        except:
10621            raise
10622        ctx = arg0.ctx
10623        res = isl.isl_multi_id_plain_is_equal(arg0.ptr, arg1.ptr)
10624        if res < 0:
10625            raise
10626        return bool(res)
10627    def range_product(arg0, arg1):
10628        try:
10629            if not arg0.__class__ is multi_id:
10630                arg0 = multi_id(arg0)
10631        except:
10632            raise
10633        try:
10634            if not arg1.__class__ is multi_id:
10635                arg1 = multi_id(arg1)
10636        except:
10637            raise
10638        ctx = arg0.ctx
10639        res = isl.isl_multi_id_range_product(isl.isl_multi_id_copy(arg0.ptr), isl.isl_multi_id_copy(arg1.ptr))
10640        obj = multi_id(ctx=ctx, ptr=res)
10641        return obj
10642    def set_at(arg0, arg1, arg2):
10643        try:
10644            if not arg0.__class__ is multi_id:
10645                arg0 = multi_id(arg0)
10646        except:
10647            raise
10648        try:
10649            if not arg2.__class__ is id:
10650                arg2 = id(arg2)
10651        except:
10652            raise
10653        ctx = arg0.ctx
10654        res = isl.isl_multi_id_set_at(isl.isl_multi_id_copy(arg0.ptr), arg1, isl.isl_id_copy(arg2.ptr))
10655        obj = multi_id(ctx=ctx, ptr=res)
10656        return obj
10657    def size(arg0):
10658        try:
10659            if not arg0.__class__ is multi_id:
10660                arg0 = multi_id(arg0)
10661        except:
10662            raise
10663        ctx = arg0.ctx
10664        res = isl.isl_multi_id_size(arg0.ptr)
10665        if res < 0:
10666            raise
10667        return int(res)
10668
10669isl.isl_multi_id_from_id_list.restype = c_void_p
10670isl.isl_multi_id_from_id_list.argtypes = [c_void_p, c_void_p]
10671isl.isl_multi_id_read_from_str.restype = c_void_p
10672isl.isl_multi_id_read_from_str.argtypes = [Context, c_char_p]
10673isl.isl_multi_id_flat_range_product.restype = c_void_p
10674isl.isl_multi_id_flat_range_product.argtypes = [c_void_p, c_void_p]
10675isl.isl_multi_id_get_at.restype = c_void_p
10676isl.isl_multi_id_get_at.argtypes = [c_void_p, c_int]
10677isl.isl_multi_id_get_list.restype = c_void_p
10678isl.isl_multi_id_get_list.argtypes = [c_void_p]
10679isl.isl_multi_id_get_space.restype = c_void_p
10680isl.isl_multi_id_get_space.argtypes = [c_void_p]
10681isl.isl_multi_id_plain_is_equal.argtypes = [c_void_p, c_void_p]
10682isl.isl_multi_id_range_product.restype = c_void_p
10683isl.isl_multi_id_range_product.argtypes = [c_void_p, c_void_p]
10684isl.isl_multi_id_set_at.restype = c_void_p
10685isl.isl_multi_id_set_at.argtypes = [c_void_p, c_int, c_void_p]
10686isl.isl_multi_id_size.argtypes = [c_void_p]
10687isl.isl_multi_id_copy.restype = c_void_p
10688isl.isl_multi_id_copy.argtypes = [c_void_p]
10689isl.isl_multi_id_free.restype = c_void_p
10690isl.isl_multi_id_free.argtypes = [c_void_p]
10691isl.isl_multi_id_to_str.restype = POINTER(c_char)
10692isl.isl_multi_id_to_str.argtypes = [c_void_p]
10693
10694class multi_val(object):
10695    def __init__(self, *args, **keywords):
10696        if "ptr" in keywords:
10697            self.ctx = keywords["ctx"]
10698            self.ptr = keywords["ptr"]
10699            return
10700        if len(args) == 2 and args[0].__class__ is space and args[1].__class__ is val_list:
10701            self.ctx = Context.getDefaultInstance()
10702            self.ptr = isl.isl_multi_val_from_val_list(isl.isl_space_copy(args[0].ptr), isl.isl_val_list_copy(args[1].ptr))
10703            return
10704        if len(args) == 1 and type(args[0]) == str:
10705            self.ctx = Context.getDefaultInstance()
10706            self.ptr = isl.isl_multi_val_read_from_str(self.ctx, args[0].encode('ascii'))
10707            return
10708        raise Error
10709    def __del__(self):
10710        if hasattr(self, 'ptr'):
10711            isl.isl_multi_val_free(self.ptr)
10712    def __str__(arg0):
10713        try:
10714            if not arg0.__class__ is multi_val:
10715                arg0 = multi_val(arg0)
10716        except:
10717            raise
10718        ptr = isl.isl_multi_val_to_str(arg0.ptr)
10719        res = cast(ptr, c_char_p).value.decode('ascii')
10720        libc.free(ptr)
10721        return res
10722    def __repr__(self):
10723        s = str(self)
10724        if '"' in s:
10725            return 'isl.multi_val("""%s""")' % s
10726        else:
10727            return 'isl.multi_val("%s")' % s
10728    def add(*args):
10729        if len(args) == 2 and args[1].__class__ is multi_val:
10730            ctx = args[0].ctx
10731            res = isl.isl_multi_val_add(isl.isl_multi_val_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
10732            obj = multi_val(ctx=ctx, ptr=res)
10733            return obj
10734        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
10735            args = list(args)
10736            try:
10737                if not args[1].__class__ is val:
10738                    args[1] = val(args[1])
10739            except:
10740                raise
10741            ctx = args[0].ctx
10742            res = isl.isl_multi_val_add_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
10743            obj = multi_val(ctx=ctx, ptr=res)
10744            return obj
10745        raise Error
10746    def flat_range_product(arg0, arg1):
10747        try:
10748            if not arg0.__class__ is multi_val:
10749                arg0 = multi_val(arg0)
10750        except:
10751            raise
10752        try:
10753            if not arg1.__class__ is multi_val:
10754                arg1 = multi_val(arg1)
10755        except:
10756            raise
10757        ctx = arg0.ctx
10758        res = isl.isl_multi_val_flat_range_product(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
10759        obj = multi_val(ctx=ctx, ptr=res)
10760        return obj
10761    def at(arg0, arg1):
10762        try:
10763            if not arg0.__class__ is multi_val:
10764                arg0 = multi_val(arg0)
10765        except:
10766            raise
10767        ctx = arg0.ctx
10768        res = isl.isl_multi_val_get_at(arg0.ptr, arg1)
10769        obj = val(ctx=ctx, ptr=res)
10770        return obj
10771    def get_at(arg0, arg1):
10772        return arg0.at(arg1)
10773    def list(arg0):
10774        try:
10775            if not arg0.__class__ is multi_val:
10776                arg0 = multi_val(arg0)
10777        except:
10778            raise
10779        ctx = arg0.ctx
10780        res = isl.isl_multi_val_get_list(arg0.ptr)
10781        obj = val_list(ctx=ctx, ptr=res)
10782        return obj
10783    def get_list(arg0):
10784        return arg0.list()
10785    def space(arg0):
10786        try:
10787            if not arg0.__class__ is multi_val:
10788                arg0 = multi_val(arg0)
10789        except:
10790            raise
10791        ctx = arg0.ctx
10792        res = isl.isl_multi_val_get_space(arg0.ptr)
10793        obj = space(ctx=ctx, ptr=res)
10794        return obj
10795    def get_space(arg0):
10796        return arg0.space()
10797    def max(arg0, arg1):
10798        try:
10799            if not arg0.__class__ is multi_val:
10800                arg0 = multi_val(arg0)
10801        except:
10802            raise
10803        try:
10804            if not arg1.__class__ is multi_val:
10805                arg1 = multi_val(arg1)
10806        except:
10807            raise
10808        ctx = arg0.ctx
10809        res = isl.isl_multi_val_max(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
10810        obj = multi_val(ctx=ctx, ptr=res)
10811        return obj
10812    def min(arg0, arg1):
10813        try:
10814            if not arg0.__class__ is multi_val:
10815                arg0 = multi_val(arg0)
10816        except:
10817            raise
10818        try:
10819            if not arg1.__class__ is multi_val:
10820                arg1 = multi_val(arg1)
10821        except:
10822            raise
10823        ctx = arg0.ctx
10824        res = isl.isl_multi_val_min(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
10825        obj = multi_val(ctx=ctx, ptr=res)
10826        return obj
10827    def neg(arg0):
10828        try:
10829            if not arg0.__class__ is multi_val:
10830                arg0 = multi_val(arg0)
10831        except:
10832            raise
10833        ctx = arg0.ctx
10834        res = isl.isl_multi_val_neg(isl.isl_multi_val_copy(arg0.ptr))
10835        obj = multi_val(ctx=ctx, ptr=res)
10836        return obj
10837    def plain_is_equal(arg0, arg1):
10838        try:
10839            if not arg0.__class__ is multi_val:
10840                arg0 = multi_val(arg0)
10841        except:
10842            raise
10843        try:
10844            if not arg1.__class__ is multi_val:
10845                arg1 = multi_val(arg1)
10846        except:
10847            raise
10848        ctx = arg0.ctx
10849        res = isl.isl_multi_val_plain_is_equal(arg0.ptr, arg1.ptr)
10850        if res < 0:
10851            raise
10852        return bool(res)
10853    def product(arg0, arg1):
10854        try:
10855            if not arg0.__class__ is multi_val:
10856                arg0 = multi_val(arg0)
10857        except:
10858            raise
10859        try:
10860            if not arg1.__class__ is multi_val:
10861                arg1 = multi_val(arg1)
10862        except:
10863            raise
10864        ctx = arg0.ctx
10865        res = isl.isl_multi_val_product(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
10866        obj = multi_val(ctx=ctx, ptr=res)
10867        return obj
10868    def range_product(arg0, arg1):
10869        try:
10870            if not arg0.__class__ is multi_val:
10871                arg0 = multi_val(arg0)
10872        except:
10873            raise
10874        try:
10875            if not arg1.__class__ is multi_val:
10876                arg1 = multi_val(arg1)
10877        except:
10878            raise
10879        ctx = arg0.ctx
10880        res = isl.isl_multi_val_range_product(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
10881        obj = multi_val(ctx=ctx, ptr=res)
10882        return obj
10883    def scale(*args):
10884        if len(args) == 2 and args[1].__class__ is multi_val:
10885            ctx = args[0].ctx
10886            res = isl.isl_multi_val_scale_multi_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
10887            obj = multi_val(ctx=ctx, ptr=res)
10888            return obj
10889        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
10890            args = list(args)
10891            try:
10892                if not args[1].__class__ is val:
10893                    args[1] = val(args[1])
10894            except:
10895                raise
10896            ctx = args[0].ctx
10897            res = isl.isl_multi_val_scale_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
10898            obj = multi_val(ctx=ctx, ptr=res)
10899            return obj
10900        raise Error
10901    def scale_down(*args):
10902        if len(args) == 2 and args[1].__class__ is multi_val:
10903            ctx = args[0].ctx
10904            res = isl.isl_multi_val_scale_down_multi_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_multi_val_copy(args[1].ptr))
10905            obj = multi_val(ctx=ctx, ptr=res)
10906            return obj
10907        if len(args) == 2 and (args[1].__class__ is val or type(args[1]) == int):
10908            args = list(args)
10909            try:
10910                if not args[1].__class__ is val:
10911                    args[1] = val(args[1])
10912            except:
10913                raise
10914            ctx = args[0].ctx
10915            res = isl.isl_multi_val_scale_down_val(isl.isl_multi_val_copy(args[0].ptr), isl.isl_val_copy(args[1].ptr))
10916            obj = multi_val(ctx=ctx, ptr=res)
10917            return obj
10918        raise Error
10919    def set_at(arg0, arg1, arg2):
10920        try:
10921            if not arg0.__class__ is multi_val:
10922                arg0 = multi_val(arg0)
10923        except:
10924            raise
10925        try:
10926            if not arg2.__class__ is val:
10927                arg2 = val(arg2)
10928        except:
10929            raise
10930        ctx = arg0.ctx
10931        res = isl.isl_multi_val_set_at(isl.isl_multi_val_copy(arg0.ptr), arg1, isl.isl_val_copy(arg2.ptr))
10932        obj = multi_val(ctx=ctx, ptr=res)
10933        return obj
10934    def size(arg0):
10935        try:
10936            if not arg0.__class__ is multi_val:
10937                arg0 = multi_val(arg0)
10938        except:
10939            raise
10940        ctx = arg0.ctx
10941        res = isl.isl_multi_val_size(arg0.ptr)
10942        if res < 0:
10943            raise
10944        return int(res)
10945    def sub(arg0, arg1):
10946        try:
10947            if not arg0.__class__ is multi_val:
10948                arg0 = multi_val(arg0)
10949        except:
10950            raise
10951        try:
10952            if not arg1.__class__ is multi_val:
10953                arg1 = multi_val(arg1)
10954        except:
10955            raise
10956        ctx = arg0.ctx
10957        res = isl.isl_multi_val_sub(isl.isl_multi_val_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
10958        obj = multi_val(ctx=ctx, ptr=res)
10959        return obj
10960    @staticmethod
10961    def zero(arg0):
10962        try:
10963            if not arg0.__class__ is space:
10964                arg0 = space(arg0)
10965        except:
10966            raise
10967        ctx = arg0.ctx
10968        res = isl.isl_multi_val_zero(isl.isl_space_copy(arg0.ptr))
10969        obj = multi_val(ctx=ctx, ptr=res)
10970        return obj
10971
10972isl.isl_multi_val_from_val_list.restype = c_void_p
10973isl.isl_multi_val_from_val_list.argtypes = [c_void_p, c_void_p]
10974isl.isl_multi_val_read_from_str.restype = c_void_p
10975isl.isl_multi_val_read_from_str.argtypes = [Context, c_char_p]
10976isl.isl_multi_val_add.restype = c_void_p
10977isl.isl_multi_val_add.argtypes = [c_void_p, c_void_p]
10978isl.isl_multi_val_add_val.restype = c_void_p
10979isl.isl_multi_val_add_val.argtypes = [c_void_p, c_void_p]
10980isl.isl_multi_val_flat_range_product.restype = c_void_p
10981isl.isl_multi_val_flat_range_product.argtypes = [c_void_p, c_void_p]
10982isl.isl_multi_val_get_at.restype = c_void_p
10983isl.isl_multi_val_get_at.argtypes = [c_void_p, c_int]
10984isl.isl_multi_val_get_list.restype = c_void_p
10985isl.isl_multi_val_get_list.argtypes = [c_void_p]
10986isl.isl_multi_val_get_space.restype = c_void_p
10987isl.isl_multi_val_get_space.argtypes = [c_void_p]
10988isl.isl_multi_val_max.restype = c_void_p
10989isl.isl_multi_val_max.argtypes = [c_void_p, c_void_p]
10990isl.isl_multi_val_min.restype = c_void_p
10991isl.isl_multi_val_min.argtypes = [c_void_p, c_void_p]
10992isl.isl_multi_val_neg.restype = c_void_p
10993isl.isl_multi_val_neg.argtypes = [c_void_p]
10994isl.isl_multi_val_plain_is_equal.argtypes = [c_void_p, c_void_p]
10995isl.isl_multi_val_product.restype = c_void_p
10996isl.isl_multi_val_product.argtypes = [c_void_p, c_void_p]
10997isl.isl_multi_val_range_product.restype = c_void_p
10998isl.isl_multi_val_range_product.argtypes = [c_void_p, c_void_p]
10999isl.isl_multi_val_scale_multi_val.restype = c_void_p
11000isl.isl_multi_val_scale_multi_val.argtypes = [c_void_p, c_void_p]
11001isl.isl_multi_val_scale_val.restype = c_void_p
11002isl.isl_multi_val_scale_val.argtypes = [c_void_p, c_void_p]
11003isl.isl_multi_val_scale_down_multi_val.restype = c_void_p
11004isl.isl_multi_val_scale_down_multi_val.argtypes = [c_void_p, c_void_p]
11005isl.isl_multi_val_scale_down_val.restype = c_void_p
11006isl.isl_multi_val_scale_down_val.argtypes = [c_void_p, c_void_p]
11007isl.isl_multi_val_set_at.restype = c_void_p
11008isl.isl_multi_val_set_at.argtypes = [c_void_p, c_int, c_void_p]
11009isl.isl_multi_val_size.argtypes = [c_void_p]
11010isl.isl_multi_val_sub.restype = c_void_p
11011isl.isl_multi_val_sub.argtypes = [c_void_p, c_void_p]
11012isl.isl_multi_val_zero.restype = c_void_p
11013isl.isl_multi_val_zero.argtypes = [c_void_p]
11014isl.isl_multi_val_copy.restype = c_void_p
11015isl.isl_multi_val_copy.argtypes = [c_void_p]
11016isl.isl_multi_val_free.restype = c_void_p
11017isl.isl_multi_val_free.argtypes = [c_void_p]
11018isl.isl_multi_val_to_str.restype = POINTER(c_char)
11019isl.isl_multi_val_to_str.argtypes = [c_void_p]
11020
11021class point(basic_set):
11022    def __init__(self, *args, **keywords):
11023        if "ptr" in keywords:
11024            self.ctx = keywords["ctx"]
11025            self.ptr = keywords["ptr"]
11026            return
11027        raise Error
11028    def __del__(self):
11029        if hasattr(self, 'ptr'):
11030            isl.isl_point_free(self.ptr)
11031    def __str__(arg0):
11032        try:
11033            if not arg0.__class__ is point:
11034                arg0 = point(arg0)
11035        except:
11036            raise
11037        ptr = isl.isl_point_to_str(arg0.ptr)
11038        res = cast(ptr, c_char_p).value.decode('ascii')
11039        libc.free(ptr)
11040        return res
11041    def __repr__(self):
11042        s = str(self)
11043        if '"' in s:
11044            return 'isl.point("""%s""")' % s
11045        else:
11046            return 'isl.point("%s")' % s
11047    def multi_val(arg0):
11048        try:
11049            if not arg0.__class__ is point:
11050                arg0 = point(arg0)
11051        except:
11052            raise
11053        ctx = arg0.ctx
11054        res = isl.isl_point_get_multi_val(arg0.ptr)
11055        obj = multi_val(ctx=ctx, ptr=res)
11056        return obj
11057    def get_multi_val(arg0):
11058        return arg0.multi_val()
11059
11060isl.isl_point_get_multi_val.restype = c_void_p
11061isl.isl_point_get_multi_val.argtypes = [c_void_p]
11062isl.isl_point_copy.restype = c_void_p
11063isl.isl_point_copy.argtypes = [c_void_p]
11064isl.isl_point_free.restype = c_void_p
11065isl.isl_point_free.argtypes = [c_void_p]
11066isl.isl_point_to_str.restype = POINTER(c_char)
11067isl.isl_point_to_str.argtypes = [c_void_p]
11068
11069class pw_aff_list(object):
11070    def __init__(self, *args, **keywords):
11071        if "ptr" in keywords:
11072            self.ctx = keywords["ctx"]
11073            self.ptr = keywords["ptr"]
11074            return
11075        if len(args) == 1 and type(args[0]) == int:
11076            self.ctx = Context.getDefaultInstance()
11077            self.ptr = isl.isl_pw_aff_list_alloc(self.ctx, args[0])
11078            return
11079        if len(args) == 1 and args[0].__class__ is pw_aff:
11080            self.ctx = Context.getDefaultInstance()
11081            self.ptr = isl.isl_pw_aff_list_from_pw_aff(isl.isl_pw_aff_copy(args[0].ptr))
11082            return
11083        raise Error
11084    def __del__(self):
11085        if hasattr(self, 'ptr'):
11086            isl.isl_pw_aff_list_free(self.ptr)
11087    def __str__(arg0):
11088        try:
11089            if not arg0.__class__ is pw_aff_list:
11090                arg0 = pw_aff_list(arg0)
11091        except:
11092            raise
11093        ptr = isl.isl_pw_aff_list_to_str(arg0.ptr)
11094        res = cast(ptr, c_char_p).value.decode('ascii')
11095        libc.free(ptr)
11096        return res
11097    def __repr__(self):
11098        s = str(self)
11099        if '"' in s:
11100            return 'isl.pw_aff_list("""%s""")' % s
11101        else:
11102            return 'isl.pw_aff_list("%s")' % s
11103    def add(arg0, arg1):
11104        try:
11105            if not arg0.__class__ is pw_aff_list:
11106                arg0 = pw_aff_list(arg0)
11107        except:
11108            raise
11109        try:
11110            if not arg1.__class__ is pw_aff:
11111                arg1 = pw_aff(arg1)
11112        except:
11113            raise
11114        ctx = arg0.ctx
11115        res = isl.isl_pw_aff_list_add(isl.isl_pw_aff_list_copy(arg0.ptr), isl.isl_pw_aff_copy(arg1.ptr))
11116        obj = pw_aff_list(ctx=ctx, ptr=res)
11117        return obj
11118    def clear(arg0):
11119        try:
11120            if not arg0.__class__ is pw_aff_list:
11121                arg0 = pw_aff_list(arg0)
11122        except:
11123            raise
11124        ctx = arg0.ctx
11125        res = isl.isl_pw_aff_list_clear(isl.isl_pw_aff_list_copy(arg0.ptr))
11126        obj = pw_aff_list(ctx=ctx, ptr=res)
11127        return obj
11128    def concat(arg0, arg1):
11129        try:
11130            if not arg0.__class__ is pw_aff_list:
11131                arg0 = pw_aff_list(arg0)
11132        except:
11133            raise
11134        try:
11135            if not arg1.__class__ is pw_aff_list:
11136                arg1 = pw_aff_list(arg1)
11137        except:
11138            raise
11139        ctx = arg0.ctx
11140        res = isl.isl_pw_aff_list_concat(isl.isl_pw_aff_list_copy(arg0.ptr), isl.isl_pw_aff_list_copy(arg1.ptr))
11141        obj = pw_aff_list(ctx=ctx, ptr=res)
11142        return obj
11143    def drop(arg0, arg1, arg2):
11144        try:
11145            if not arg0.__class__ is pw_aff_list:
11146                arg0 = pw_aff_list(arg0)
11147        except:
11148            raise
11149        ctx = arg0.ctx
11150        res = isl.isl_pw_aff_list_drop(isl.isl_pw_aff_list_copy(arg0.ptr), arg1, arg2)
11151        obj = pw_aff_list(ctx=ctx, ptr=res)
11152        return obj
11153    def foreach(arg0, arg1):
11154        try:
11155            if not arg0.__class__ is pw_aff_list:
11156                arg0 = pw_aff_list(arg0)
11157        except:
11158            raise
11159        exc_info = [None]
11160        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
11161        def cb_func(cb_arg0, cb_arg1):
11162            cb_arg0 = pw_aff(ctx=arg0.ctx, ptr=(cb_arg0))
11163            try:
11164                arg1(cb_arg0)
11165            except:
11166                import sys
11167                exc_info[0] = sys.exc_info()
11168                return -1
11169            return 0
11170        cb = fn(cb_func)
11171        ctx = arg0.ctx
11172        res = isl.isl_pw_aff_list_foreach(arg0.ptr, cb, None)
11173        if exc_info[0] != None:
11174            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
11175        if res < 0:
11176            raise
11177    def at(arg0, arg1):
11178        try:
11179            if not arg0.__class__ is pw_aff_list:
11180                arg0 = pw_aff_list(arg0)
11181        except:
11182            raise
11183        ctx = arg0.ctx
11184        res = isl.isl_pw_aff_list_get_at(arg0.ptr, arg1)
11185        obj = pw_aff(ctx=ctx, ptr=res)
11186        return obj
11187    def get_at(arg0, arg1):
11188        return arg0.at(arg1)
11189    def insert(arg0, arg1, arg2):
11190        try:
11191            if not arg0.__class__ is pw_aff_list:
11192                arg0 = pw_aff_list(arg0)
11193        except:
11194            raise
11195        try:
11196            if not arg2.__class__ is pw_aff:
11197                arg2 = pw_aff(arg2)
11198        except:
11199            raise
11200        ctx = arg0.ctx
11201        res = isl.isl_pw_aff_list_insert(isl.isl_pw_aff_list_copy(arg0.ptr), arg1, isl.isl_pw_aff_copy(arg2.ptr))
11202        obj = pw_aff_list(ctx=ctx, ptr=res)
11203        return obj
11204    def size(arg0):
11205        try:
11206            if not arg0.__class__ is pw_aff_list:
11207                arg0 = pw_aff_list(arg0)
11208        except:
11209            raise
11210        ctx = arg0.ctx
11211        res = isl.isl_pw_aff_list_size(arg0.ptr)
11212        if res < 0:
11213            raise
11214        return int(res)
11215
11216isl.isl_pw_aff_list_alloc.restype = c_void_p
11217isl.isl_pw_aff_list_alloc.argtypes = [Context, c_int]
11218isl.isl_pw_aff_list_from_pw_aff.restype = c_void_p
11219isl.isl_pw_aff_list_from_pw_aff.argtypes = [c_void_p]
11220isl.isl_pw_aff_list_add.restype = c_void_p
11221isl.isl_pw_aff_list_add.argtypes = [c_void_p, c_void_p]
11222isl.isl_pw_aff_list_clear.restype = c_void_p
11223isl.isl_pw_aff_list_clear.argtypes = [c_void_p]
11224isl.isl_pw_aff_list_concat.restype = c_void_p
11225isl.isl_pw_aff_list_concat.argtypes = [c_void_p, c_void_p]
11226isl.isl_pw_aff_list_drop.restype = c_void_p
11227isl.isl_pw_aff_list_drop.argtypes = [c_void_p, c_int, c_int]
11228isl.isl_pw_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
11229isl.isl_pw_aff_list_get_at.restype = c_void_p
11230isl.isl_pw_aff_list_get_at.argtypes = [c_void_p, c_int]
11231isl.isl_pw_aff_list_insert.restype = c_void_p
11232isl.isl_pw_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p]
11233isl.isl_pw_aff_list_size.argtypes = [c_void_p]
11234isl.isl_pw_aff_list_copy.restype = c_void_p
11235isl.isl_pw_aff_list_copy.argtypes = [c_void_p]
11236isl.isl_pw_aff_list_free.restype = c_void_p
11237isl.isl_pw_aff_list_free.argtypes = [c_void_p]
11238isl.isl_pw_aff_list_to_str.restype = POINTER(c_char)
11239isl.isl_pw_aff_list_to_str.argtypes = [c_void_p]
11240
11241class pw_multi_aff_list(object):
11242    def __init__(self, *args, **keywords):
11243        if "ptr" in keywords:
11244            self.ctx = keywords["ctx"]
11245            self.ptr = keywords["ptr"]
11246            return
11247        if len(args) == 1 and type(args[0]) == int:
11248            self.ctx = Context.getDefaultInstance()
11249            self.ptr = isl.isl_pw_multi_aff_list_alloc(self.ctx, args[0])
11250            return
11251        if len(args) == 1 and args[0].__class__ is pw_multi_aff:
11252            self.ctx = Context.getDefaultInstance()
11253            self.ptr = isl.isl_pw_multi_aff_list_from_pw_multi_aff(isl.isl_pw_multi_aff_copy(args[0].ptr))
11254            return
11255        raise Error
11256    def __del__(self):
11257        if hasattr(self, 'ptr'):
11258            isl.isl_pw_multi_aff_list_free(self.ptr)
11259    def __str__(arg0):
11260        try:
11261            if not arg0.__class__ is pw_multi_aff_list:
11262                arg0 = pw_multi_aff_list(arg0)
11263        except:
11264            raise
11265        ptr = isl.isl_pw_multi_aff_list_to_str(arg0.ptr)
11266        res = cast(ptr, c_char_p).value.decode('ascii')
11267        libc.free(ptr)
11268        return res
11269    def __repr__(self):
11270        s = str(self)
11271        if '"' in s:
11272            return 'isl.pw_multi_aff_list("""%s""")' % s
11273        else:
11274            return 'isl.pw_multi_aff_list("%s")' % s
11275    def add(arg0, arg1):
11276        try:
11277            if not arg0.__class__ is pw_multi_aff_list:
11278                arg0 = pw_multi_aff_list(arg0)
11279        except:
11280            raise
11281        try:
11282            if not arg1.__class__ is pw_multi_aff:
11283                arg1 = pw_multi_aff(arg1)
11284        except:
11285            raise
11286        ctx = arg0.ctx
11287        res = isl.isl_pw_multi_aff_list_add(isl.isl_pw_multi_aff_list_copy(arg0.ptr), isl.isl_pw_multi_aff_copy(arg1.ptr))
11288        obj = pw_multi_aff_list(ctx=ctx, ptr=res)
11289        return obj
11290    def clear(arg0):
11291        try:
11292            if not arg0.__class__ is pw_multi_aff_list:
11293                arg0 = pw_multi_aff_list(arg0)
11294        except:
11295            raise
11296        ctx = arg0.ctx
11297        res = isl.isl_pw_multi_aff_list_clear(isl.isl_pw_multi_aff_list_copy(arg0.ptr))
11298        obj = pw_multi_aff_list(ctx=ctx, ptr=res)
11299        return obj
11300    def concat(arg0, arg1):
11301        try:
11302            if not arg0.__class__ is pw_multi_aff_list:
11303                arg0 = pw_multi_aff_list(arg0)
11304        except:
11305            raise
11306        try:
11307            if not arg1.__class__ is pw_multi_aff_list:
11308                arg1 = pw_multi_aff_list(arg1)
11309        except:
11310            raise
11311        ctx = arg0.ctx
11312        res = isl.isl_pw_multi_aff_list_concat(isl.isl_pw_multi_aff_list_copy(arg0.ptr), isl.isl_pw_multi_aff_list_copy(arg1.ptr))
11313        obj = pw_multi_aff_list(ctx=ctx, ptr=res)
11314        return obj
11315    def drop(arg0, arg1, arg2):
11316        try:
11317            if not arg0.__class__ is pw_multi_aff_list:
11318                arg0 = pw_multi_aff_list(arg0)
11319        except:
11320            raise
11321        ctx = arg0.ctx
11322        res = isl.isl_pw_multi_aff_list_drop(isl.isl_pw_multi_aff_list_copy(arg0.ptr), arg1, arg2)
11323        obj = pw_multi_aff_list(ctx=ctx, ptr=res)
11324        return obj
11325    def foreach(arg0, arg1):
11326        try:
11327            if not arg0.__class__ is pw_multi_aff_list:
11328                arg0 = pw_multi_aff_list(arg0)
11329        except:
11330            raise
11331        exc_info = [None]
11332        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
11333        def cb_func(cb_arg0, cb_arg1):
11334            cb_arg0 = pw_multi_aff(ctx=arg0.ctx, ptr=(cb_arg0))
11335            try:
11336                arg1(cb_arg0)
11337            except:
11338                import sys
11339                exc_info[0] = sys.exc_info()
11340                return -1
11341            return 0
11342        cb = fn(cb_func)
11343        ctx = arg0.ctx
11344        res = isl.isl_pw_multi_aff_list_foreach(arg0.ptr, cb, None)
11345        if exc_info[0] != None:
11346            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
11347        if res < 0:
11348            raise
11349    def at(arg0, arg1):
11350        try:
11351            if not arg0.__class__ is pw_multi_aff_list:
11352                arg0 = pw_multi_aff_list(arg0)
11353        except:
11354            raise
11355        ctx = arg0.ctx
11356        res = isl.isl_pw_multi_aff_list_get_at(arg0.ptr, arg1)
11357        obj = pw_multi_aff(ctx=ctx, ptr=res)
11358        return obj
11359    def get_at(arg0, arg1):
11360        return arg0.at(arg1)
11361    def insert(arg0, arg1, arg2):
11362        try:
11363            if not arg0.__class__ is pw_multi_aff_list:
11364                arg0 = pw_multi_aff_list(arg0)
11365        except:
11366            raise
11367        try:
11368            if not arg2.__class__ is pw_multi_aff:
11369                arg2 = pw_multi_aff(arg2)
11370        except:
11371            raise
11372        ctx = arg0.ctx
11373        res = isl.isl_pw_multi_aff_list_insert(isl.isl_pw_multi_aff_list_copy(arg0.ptr), arg1, isl.isl_pw_multi_aff_copy(arg2.ptr))
11374        obj = pw_multi_aff_list(ctx=ctx, ptr=res)
11375        return obj
11376    def size(arg0):
11377        try:
11378            if not arg0.__class__ is pw_multi_aff_list:
11379                arg0 = pw_multi_aff_list(arg0)
11380        except:
11381            raise
11382        ctx = arg0.ctx
11383        res = isl.isl_pw_multi_aff_list_size(arg0.ptr)
11384        if res < 0:
11385            raise
11386        return int(res)
11387
11388isl.isl_pw_multi_aff_list_alloc.restype = c_void_p
11389isl.isl_pw_multi_aff_list_alloc.argtypes = [Context, c_int]
11390isl.isl_pw_multi_aff_list_from_pw_multi_aff.restype = c_void_p
11391isl.isl_pw_multi_aff_list_from_pw_multi_aff.argtypes = [c_void_p]
11392isl.isl_pw_multi_aff_list_add.restype = c_void_p
11393isl.isl_pw_multi_aff_list_add.argtypes = [c_void_p, c_void_p]
11394isl.isl_pw_multi_aff_list_clear.restype = c_void_p
11395isl.isl_pw_multi_aff_list_clear.argtypes = [c_void_p]
11396isl.isl_pw_multi_aff_list_concat.restype = c_void_p
11397isl.isl_pw_multi_aff_list_concat.argtypes = [c_void_p, c_void_p]
11398isl.isl_pw_multi_aff_list_drop.restype = c_void_p
11399isl.isl_pw_multi_aff_list_drop.argtypes = [c_void_p, c_int, c_int]
11400isl.isl_pw_multi_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
11401isl.isl_pw_multi_aff_list_get_at.restype = c_void_p
11402isl.isl_pw_multi_aff_list_get_at.argtypes = [c_void_p, c_int]
11403isl.isl_pw_multi_aff_list_insert.restype = c_void_p
11404isl.isl_pw_multi_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p]
11405isl.isl_pw_multi_aff_list_size.argtypes = [c_void_p]
11406isl.isl_pw_multi_aff_list_copy.restype = c_void_p
11407isl.isl_pw_multi_aff_list_copy.argtypes = [c_void_p]
11408isl.isl_pw_multi_aff_list_free.restype = c_void_p
11409isl.isl_pw_multi_aff_list_free.argtypes = [c_void_p]
11410isl.isl_pw_multi_aff_list_to_str.restype = POINTER(c_char)
11411isl.isl_pw_multi_aff_list_to_str.argtypes = [c_void_p]
11412
11413class schedule(object):
11414    def __init__(self, *args, **keywords):
11415        if "ptr" in keywords:
11416            self.ctx = keywords["ctx"]
11417            self.ptr = keywords["ptr"]
11418            return
11419        if len(args) == 1 and type(args[0]) == str:
11420            self.ctx = Context.getDefaultInstance()
11421            self.ptr = isl.isl_schedule_read_from_str(self.ctx, args[0].encode('ascii'))
11422            return
11423        raise Error
11424    def __del__(self):
11425        if hasattr(self, 'ptr'):
11426            isl.isl_schedule_free(self.ptr)
11427    def __str__(arg0):
11428        try:
11429            if not arg0.__class__ is schedule:
11430                arg0 = schedule(arg0)
11431        except:
11432            raise
11433        ptr = isl.isl_schedule_to_str(arg0.ptr)
11434        res = cast(ptr, c_char_p).value.decode('ascii')
11435        libc.free(ptr)
11436        return res
11437    def __repr__(self):
11438        s = str(self)
11439        if '"' in s:
11440            return 'isl.schedule("""%s""")' % s
11441        else:
11442            return 'isl.schedule("%s")' % s
11443    @staticmethod
11444    def from_domain(arg0):
11445        try:
11446            if not arg0.__class__ is union_set:
11447                arg0 = union_set(arg0)
11448        except:
11449            raise
11450        ctx = arg0.ctx
11451        res = isl.isl_schedule_from_domain(isl.isl_union_set_copy(arg0.ptr))
11452        obj = schedule(ctx=ctx, ptr=res)
11453        return obj
11454    def map(arg0):
11455        try:
11456            if not arg0.__class__ is schedule:
11457                arg0 = schedule(arg0)
11458        except:
11459            raise
11460        ctx = arg0.ctx
11461        res = isl.isl_schedule_get_map(arg0.ptr)
11462        obj = union_map(ctx=ctx, ptr=res)
11463        return obj
11464    def get_map(arg0):
11465        return arg0.map()
11466    def root(arg0):
11467        try:
11468            if not arg0.__class__ is schedule:
11469                arg0 = schedule(arg0)
11470        except:
11471            raise
11472        ctx = arg0.ctx
11473        res = isl.isl_schedule_get_root(arg0.ptr)
11474        obj = schedule_node(ctx=ctx, ptr=res)
11475        return obj
11476    def get_root(arg0):
11477        return arg0.root()
11478    def pullback(*args):
11479        if len(args) == 2 and args[1].__class__ is union_pw_multi_aff:
11480            ctx = args[0].ctx
11481            res = isl.isl_schedule_pullback_union_pw_multi_aff(isl.isl_schedule_copy(args[0].ptr), isl.isl_union_pw_multi_aff_copy(args[1].ptr))
11482            obj = schedule(ctx=ctx, ptr=res)
11483            return obj
11484        raise Error
11485
11486isl.isl_schedule_read_from_str.restype = c_void_p
11487isl.isl_schedule_read_from_str.argtypes = [Context, c_char_p]
11488isl.isl_schedule_from_domain.restype = c_void_p
11489isl.isl_schedule_from_domain.argtypes = [c_void_p]
11490isl.isl_schedule_get_map.restype = c_void_p
11491isl.isl_schedule_get_map.argtypes = [c_void_p]
11492isl.isl_schedule_get_root.restype = c_void_p
11493isl.isl_schedule_get_root.argtypes = [c_void_p]
11494isl.isl_schedule_pullback_union_pw_multi_aff.restype = c_void_p
11495isl.isl_schedule_pullback_union_pw_multi_aff.argtypes = [c_void_p, c_void_p]
11496isl.isl_schedule_copy.restype = c_void_p
11497isl.isl_schedule_copy.argtypes = [c_void_p]
11498isl.isl_schedule_free.restype = c_void_p
11499isl.isl_schedule_free.argtypes = [c_void_p]
11500isl.isl_schedule_to_str.restype = POINTER(c_char)
11501isl.isl_schedule_to_str.argtypes = [c_void_p]
11502
11503class schedule_constraints(object):
11504    def __init__(self, *args, **keywords):
11505        if "ptr" in keywords:
11506            self.ctx = keywords["ctx"]
11507            self.ptr = keywords["ptr"]
11508            return
11509        if len(args) == 1 and type(args[0]) == str:
11510            self.ctx = Context.getDefaultInstance()
11511            self.ptr = isl.isl_schedule_constraints_read_from_str(self.ctx, args[0].encode('ascii'))
11512            return
11513        raise Error
11514    def __del__(self):
11515        if hasattr(self, 'ptr'):
11516            isl.isl_schedule_constraints_free(self.ptr)
11517    def __str__(arg0):
11518        try:
11519            if not arg0.__class__ is schedule_constraints:
11520                arg0 = schedule_constraints(arg0)
11521        except:
11522            raise
11523        ptr = isl.isl_schedule_constraints_to_str(arg0.ptr)
11524        res = cast(ptr, c_char_p).value.decode('ascii')
11525        libc.free(ptr)
11526        return res
11527    def __repr__(self):
11528        s = str(self)
11529        if '"' in s:
11530            return 'isl.schedule_constraints("""%s""")' % s
11531        else:
11532            return 'isl.schedule_constraints("%s")' % s
11533    def compute_schedule(arg0):
11534        try:
11535            if not arg0.__class__ is schedule_constraints:
11536                arg0 = schedule_constraints(arg0)
11537        except:
11538            raise
11539        ctx = arg0.ctx
11540        res = isl.isl_schedule_constraints_compute_schedule(isl.isl_schedule_constraints_copy(arg0.ptr))
11541        obj = schedule(ctx=ctx, ptr=res)
11542        return obj
11543    def coincidence(arg0):
11544        try:
11545            if not arg0.__class__ is schedule_constraints:
11546                arg0 = schedule_constraints(arg0)
11547        except:
11548            raise
11549        ctx = arg0.ctx
11550        res = isl.isl_schedule_constraints_get_coincidence(arg0.ptr)
11551        obj = union_map(ctx=ctx, ptr=res)
11552        return obj
11553    def get_coincidence(arg0):
11554        return arg0.coincidence()
11555    def conditional_validity(arg0):
11556        try:
11557            if not arg0.__class__ is schedule_constraints:
11558                arg0 = schedule_constraints(arg0)
11559        except:
11560            raise
11561        ctx = arg0.ctx
11562        res = isl.isl_schedule_constraints_get_conditional_validity(arg0.ptr)
11563        obj = union_map(ctx=ctx, ptr=res)
11564        return obj
11565    def get_conditional_validity(arg0):
11566        return arg0.conditional_validity()
11567    def conditional_validity_condition(arg0):
11568        try:
11569            if not arg0.__class__ is schedule_constraints:
11570                arg0 = schedule_constraints(arg0)
11571        except:
11572            raise
11573        ctx = arg0.ctx
11574        res = isl.isl_schedule_constraints_get_conditional_validity_condition(arg0.ptr)
11575        obj = union_map(ctx=ctx, ptr=res)
11576        return obj
11577    def get_conditional_validity_condition(arg0):
11578        return arg0.conditional_validity_condition()
11579    def context(arg0):
11580        try:
11581            if not arg0.__class__ is schedule_constraints:
11582                arg0 = schedule_constraints(arg0)
11583        except:
11584            raise
11585        ctx = arg0.ctx
11586        res = isl.isl_schedule_constraints_get_context(arg0.ptr)
11587        obj = set(ctx=ctx, ptr=res)
11588        return obj
11589    def get_context(arg0):
11590        return arg0.context()
11591    def domain(arg0):
11592        try:
11593            if not arg0.__class__ is schedule_constraints:
11594                arg0 = schedule_constraints(arg0)
11595        except:
11596            raise
11597        ctx = arg0.ctx
11598        res = isl.isl_schedule_constraints_get_domain(arg0.ptr)
11599        obj = union_set(ctx=ctx, ptr=res)
11600        return obj
11601    def get_domain(arg0):
11602        return arg0.domain()
11603    def proximity(arg0):
11604        try:
11605            if not arg0.__class__ is schedule_constraints:
11606                arg0 = schedule_constraints(arg0)
11607        except:
11608            raise
11609        ctx = arg0.ctx
11610        res = isl.isl_schedule_constraints_get_proximity(arg0.ptr)
11611        obj = union_map(ctx=ctx, ptr=res)
11612        return obj
11613    def get_proximity(arg0):
11614        return arg0.proximity()
11615    def validity(arg0):
11616        try:
11617            if not arg0.__class__ is schedule_constraints:
11618                arg0 = schedule_constraints(arg0)
11619        except:
11620            raise
11621        ctx = arg0.ctx
11622        res = isl.isl_schedule_constraints_get_validity(arg0.ptr)
11623        obj = union_map(ctx=ctx, ptr=res)
11624        return obj
11625    def get_validity(arg0):
11626        return arg0.validity()
11627    @staticmethod
11628    def on_domain(arg0):
11629        try:
11630            if not arg0.__class__ is union_set:
11631                arg0 = union_set(arg0)
11632        except:
11633            raise
11634        ctx = arg0.ctx
11635        res = isl.isl_schedule_constraints_on_domain(isl.isl_union_set_copy(arg0.ptr))
11636        obj = schedule_constraints(ctx=ctx, ptr=res)
11637        return obj
11638    def set_coincidence(arg0, arg1):
11639        try:
11640            if not arg0.__class__ is schedule_constraints:
11641                arg0 = schedule_constraints(arg0)
11642        except:
11643            raise
11644        try:
11645            if not arg1.__class__ is union_map:
11646                arg1 = union_map(arg1)
11647        except:
11648            raise
11649        ctx = arg0.ctx
11650        res = isl.isl_schedule_constraints_set_coincidence(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
11651        obj = schedule_constraints(ctx=ctx, ptr=res)
11652        return obj
11653    def set_conditional_validity(arg0, arg1, arg2):
11654        try:
11655            if not arg0.__class__ is schedule_constraints:
11656                arg0 = schedule_constraints(arg0)
11657        except:
11658            raise
11659        try:
11660            if not arg1.__class__ is union_map:
11661                arg1 = union_map(arg1)
11662        except:
11663            raise
11664        try:
11665            if not arg2.__class__ is union_map:
11666                arg2 = union_map(arg2)
11667        except:
11668            raise
11669        ctx = arg0.ctx
11670        res = isl.isl_schedule_constraints_set_conditional_validity(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr), isl.isl_union_map_copy(arg2.ptr))
11671        obj = schedule_constraints(ctx=ctx, ptr=res)
11672        return obj
11673    def set_context(arg0, arg1):
11674        try:
11675            if not arg0.__class__ is schedule_constraints:
11676                arg0 = schedule_constraints(arg0)
11677        except:
11678            raise
11679        try:
11680            if not arg1.__class__ is set:
11681                arg1 = set(arg1)
11682        except:
11683            raise
11684        ctx = arg0.ctx
11685        res = isl.isl_schedule_constraints_set_context(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
11686        obj = schedule_constraints(ctx=ctx, ptr=res)
11687        return obj
11688    def set_proximity(arg0, arg1):
11689        try:
11690            if not arg0.__class__ is schedule_constraints:
11691                arg0 = schedule_constraints(arg0)
11692        except:
11693            raise
11694        try:
11695            if not arg1.__class__ is union_map:
11696                arg1 = union_map(arg1)
11697        except:
11698            raise
11699        ctx = arg0.ctx
11700        res = isl.isl_schedule_constraints_set_proximity(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
11701        obj = schedule_constraints(ctx=ctx, ptr=res)
11702        return obj
11703    def set_validity(arg0, arg1):
11704        try:
11705            if not arg0.__class__ is schedule_constraints:
11706                arg0 = schedule_constraints(arg0)
11707        except:
11708            raise
11709        try:
11710            if not arg1.__class__ is union_map:
11711                arg1 = union_map(arg1)
11712        except:
11713            raise
11714        ctx = arg0.ctx
11715        res = isl.isl_schedule_constraints_set_validity(isl.isl_schedule_constraints_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
11716        obj = schedule_constraints(ctx=ctx, ptr=res)
11717        return obj
11718
11719isl.isl_schedule_constraints_read_from_str.restype = c_void_p
11720isl.isl_schedule_constraints_read_from_str.argtypes = [Context, c_char_p]
11721isl.isl_schedule_constraints_compute_schedule.restype = c_void_p
11722isl.isl_schedule_constraints_compute_schedule.argtypes = [c_void_p]
11723isl.isl_schedule_constraints_get_coincidence.restype = c_void_p
11724isl.isl_schedule_constraints_get_coincidence.argtypes = [c_void_p]
11725isl.isl_schedule_constraints_get_conditional_validity.restype = c_void_p
11726isl.isl_schedule_constraints_get_conditional_validity.argtypes = [c_void_p]
11727isl.isl_schedule_constraints_get_conditional_validity_condition.restype = c_void_p
11728isl.isl_schedule_constraints_get_conditional_validity_condition.argtypes = [c_void_p]
11729isl.isl_schedule_constraints_get_context.restype = c_void_p
11730isl.isl_schedule_constraints_get_context.argtypes = [c_void_p]
11731isl.isl_schedule_constraints_get_domain.restype = c_void_p
11732isl.isl_schedule_constraints_get_domain.argtypes = [c_void_p]
11733isl.isl_schedule_constraints_get_proximity.restype = c_void_p
11734isl.isl_schedule_constraints_get_proximity.argtypes = [c_void_p]
11735isl.isl_schedule_constraints_get_validity.restype = c_void_p
11736isl.isl_schedule_constraints_get_validity.argtypes = [c_void_p]
11737isl.isl_schedule_constraints_on_domain.restype = c_void_p
11738isl.isl_schedule_constraints_on_domain.argtypes = [c_void_p]
11739isl.isl_schedule_constraints_set_coincidence.restype = c_void_p
11740isl.isl_schedule_constraints_set_coincidence.argtypes = [c_void_p, c_void_p]
11741isl.isl_schedule_constraints_set_conditional_validity.restype = c_void_p
11742isl.isl_schedule_constraints_set_conditional_validity.argtypes = [c_void_p, c_void_p, c_void_p]
11743isl.isl_schedule_constraints_set_context.restype = c_void_p
11744isl.isl_schedule_constraints_set_context.argtypes = [c_void_p, c_void_p]
11745isl.isl_schedule_constraints_set_proximity.restype = c_void_p
11746isl.isl_schedule_constraints_set_proximity.argtypes = [c_void_p, c_void_p]
11747isl.isl_schedule_constraints_set_validity.restype = c_void_p
11748isl.isl_schedule_constraints_set_validity.argtypes = [c_void_p, c_void_p]
11749isl.isl_schedule_constraints_copy.restype = c_void_p
11750isl.isl_schedule_constraints_copy.argtypes = [c_void_p]
11751isl.isl_schedule_constraints_free.restype = c_void_p
11752isl.isl_schedule_constraints_free.argtypes = [c_void_p]
11753isl.isl_schedule_constraints_to_str.restype = POINTER(c_char)
11754isl.isl_schedule_constraints_to_str.argtypes = [c_void_p]
11755
11756class schedule_node(object):
11757    def __init__(self, *args, **keywords):
11758        if "ptr" in keywords:
11759            self.ctx = keywords["ctx"]
11760            self.ptr = keywords["ptr"]
11761            return
11762        if len(args) == 1 and isinstance(args[0], schedule_node_band):
11763            self.ctx = args[0].ctx
11764            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11765            return
11766        if len(args) == 1 and isinstance(args[0], schedule_node_context):
11767            self.ctx = args[0].ctx
11768            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11769            return
11770        if len(args) == 1 and isinstance(args[0], schedule_node_domain):
11771            self.ctx = args[0].ctx
11772            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11773            return
11774        if len(args) == 1 and isinstance(args[0], schedule_node_expansion):
11775            self.ctx = args[0].ctx
11776            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11777            return
11778        if len(args) == 1 and isinstance(args[0], schedule_node_extension):
11779            self.ctx = args[0].ctx
11780            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11781            return
11782        if len(args) == 1 and isinstance(args[0], schedule_node_filter):
11783            self.ctx = args[0].ctx
11784            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11785            return
11786        if len(args) == 1 and isinstance(args[0], schedule_node_leaf):
11787            self.ctx = args[0].ctx
11788            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11789            return
11790        if len(args) == 1 and isinstance(args[0], schedule_node_guard):
11791            self.ctx = args[0].ctx
11792            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11793            return
11794        if len(args) == 1 and isinstance(args[0], schedule_node_mark):
11795            self.ctx = args[0].ctx
11796            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11797            return
11798        if len(args) == 1 and isinstance(args[0], schedule_node_sequence):
11799            self.ctx = args[0].ctx
11800            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11801            return
11802        if len(args) == 1 and isinstance(args[0], schedule_node_set):
11803            self.ctx = args[0].ctx
11804            self.ptr = isl.isl_schedule_node_copy(args[0].ptr)
11805            return
11806        raise Error
11807    def __del__(self):
11808        if hasattr(self, 'ptr'):
11809            isl.isl_schedule_node_free(self.ptr)
11810    def __new__(cls, *args, **keywords):
11811        if "ptr" in keywords:
11812            type = isl.isl_schedule_node_get_type(keywords["ptr"])
11813            if type == 0:
11814                return schedule_node_band(**keywords)
11815            if type == 1:
11816                return schedule_node_context(**keywords)
11817            if type == 2:
11818                return schedule_node_domain(**keywords)
11819            if type == 3:
11820                return schedule_node_expansion(**keywords)
11821            if type == 4:
11822                return schedule_node_extension(**keywords)
11823            if type == 5:
11824                return schedule_node_filter(**keywords)
11825            if type == 6:
11826                return schedule_node_leaf(**keywords)
11827            if type == 7:
11828                return schedule_node_guard(**keywords)
11829            if type == 8:
11830                return schedule_node_mark(**keywords)
11831            if type == 9:
11832                return schedule_node_sequence(**keywords)
11833            if type == 10:
11834                return schedule_node_set(**keywords)
11835            raise
11836        return super(schedule_node, cls).__new__(cls)
11837    def __str__(arg0):
11838        try:
11839            if not arg0.__class__ is schedule_node:
11840                arg0 = schedule_node(arg0)
11841        except:
11842            raise
11843        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
11844        res = cast(ptr, c_char_p).value.decode('ascii')
11845        libc.free(ptr)
11846        return res
11847    def __repr__(self):
11848        s = str(self)
11849        if '"' in s:
11850            return 'isl.schedule_node("""%s""")' % s
11851        else:
11852            return 'isl.schedule_node("%s")' % s
11853    def ancestor(arg0, arg1):
11854        try:
11855            if not arg0.__class__ is schedule_node:
11856                arg0 = schedule_node(arg0)
11857        except:
11858            raise
11859        ctx = arg0.ctx
11860        res = isl.isl_schedule_node_ancestor(isl.isl_schedule_node_copy(arg0.ptr), arg1)
11861        obj = schedule_node(ctx=ctx, ptr=res)
11862        return obj
11863    def child(arg0, arg1):
11864        try:
11865            if not arg0.__class__ is schedule_node:
11866                arg0 = schedule_node(arg0)
11867        except:
11868            raise
11869        ctx = arg0.ctx
11870        res = isl.isl_schedule_node_child(isl.isl_schedule_node_copy(arg0.ptr), arg1)
11871        obj = schedule_node(ctx=ctx, ptr=res)
11872        return obj
11873    def every_descendant(arg0, arg1):
11874        try:
11875            if not arg0.__class__ is schedule_node:
11876                arg0 = schedule_node(arg0)
11877        except:
11878            raise
11879        exc_info = [None]
11880        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
11881        def cb_func(cb_arg0, cb_arg1):
11882            cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=isl.isl_schedule_node_copy(cb_arg0))
11883            try:
11884                res = arg1(cb_arg0)
11885            except:
11886                import sys
11887                exc_info[0] = sys.exc_info()
11888                return -1
11889            return 1 if res else 0
11890        cb = fn(cb_func)
11891        ctx = arg0.ctx
11892        res = isl.isl_schedule_node_every_descendant(arg0.ptr, cb, None)
11893        if exc_info[0] != None:
11894            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
11895        if res < 0:
11896            raise
11897        return bool(res)
11898    def first_child(arg0):
11899        try:
11900            if not arg0.__class__ is schedule_node:
11901                arg0 = schedule_node(arg0)
11902        except:
11903            raise
11904        ctx = arg0.ctx
11905        res = isl.isl_schedule_node_first_child(isl.isl_schedule_node_copy(arg0.ptr))
11906        obj = schedule_node(ctx=ctx, ptr=res)
11907        return obj
11908    def foreach_ancestor_top_down(arg0, arg1):
11909        try:
11910            if not arg0.__class__ is schedule_node:
11911                arg0 = schedule_node(arg0)
11912        except:
11913            raise
11914        exc_info = [None]
11915        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
11916        def cb_func(cb_arg0, cb_arg1):
11917            cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=isl.isl_schedule_node_copy(cb_arg0))
11918            try:
11919                arg1(cb_arg0)
11920            except:
11921                import sys
11922                exc_info[0] = sys.exc_info()
11923                return -1
11924            return 0
11925        cb = fn(cb_func)
11926        ctx = arg0.ctx
11927        res = isl.isl_schedule_node_foreach_ancestor_top_down(arg0.ptr, cb, None)
11928        if exc_info[0] != None:
11929            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
11930        if res < 0:
11931            raise
11932    def foreach_descendant_top_down(arg0, arg1):
11933        try:
11934            if not arg0.__class__ is schedule_node:
11935                arg0 = schedule_node(arg0)
11936        except:
11937            raise
11938        exc_info = [None]
11939        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
11940        def cb_func(cb_arg0, cb_arg1):
11941            cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=isl.isl_schedule_node_copy(cb_arg0))
11942            try:
11943                res = arg1(cb_arg0)
11944            except:
11945                import sys
11946                exc_info[0] = sys.exc_info()
11947                return -1
11948            return 1 if res else 0
11949        cb = fn(cb_func)
11950        ctx = arg0.ctx
11951        res = isl.isl_schedule_node_foreach_descendant_top_down(arg0.ptr, cb, None)
11952        if exc_info[0] != None:
11953            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
11954        if res < 0:
11955            raise
11956    @staticmethod
11957    def from_domain(arg0):
11958        try:
11959            if not arg0.__class__ is union_set:
11960                arg0 = union_set(arg0)
11961        except:
11962            raise
11963        ctx = arg0.ctx
11964        res = isl.isl_schedule_node_from_domain(isl.isl_union_set_copy(arg0.ptr))
11965        obj = schedule_node(ctx=ctx, ptr=res)
11966        return obj
11967    @staticmethod
11968    def from_extension(arg0):
11969        try:
11970            if not arg0.__class__ is union_map:
11971                arg0 = union_map(arg0)
11972        except:
11973            raise
11974        ctx = arg0.ctx
11975        res = isl.isl_schedule_node_from_extension(isl.isl_union_map_copy(arg0.ptr))
11976        obj = schedule_node(ctx=ctx, ptr=res)
11977        return obj
11978    def ancestor_child_position(arg0, arg1):
11979        try:
11980            if not arg0.__class__ is schedule_node:
11981                arg0 = schedule_node(arg0)
11982        except:
11983            raise
11984        try:
11985            if not arg1.__class__ is schedule_node:
11986                arg1 = schedule_node(arg1)
11987        except:
11988            raise
11989        ctx = arg0.ctx
11990        res = isl.isl_schedule_node_get_ancestor_child_position(arg0.ptr, arg1.ptr)
11991        if res < 0:
11992            raise
11993        return int(res)
11994    def get_ancestor_child_position(arg0, arg1):
11995        return arg0.ancestor_child_position(arg1)
11996    def child_position(arg0):
11997        try:
11998            if not arg0.__class__ is schedule_node:
11999                arg0 = schedule_node(arg0)
12000        except:
12001            raise
12002        ctx = arg0.ctx
12003        res = isl.isl_schedule_node_get_child_position(arg0.ptr)
12004        if res < 0:
12005            raise
12006        return int(res)
12007    def get_child_position(arg0):
12008        return arg0.child_position()
12009    def prefix_schedule_multi_union_pw_aff(arg0):
12010        try:
12011            if not arg0.__class__ is schedule_node:
12012                arg0 = schedule_node(arg0)
12013        except:
12014            raise
12015        ctx = arg0.ctx
12016        res = isl.isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(arg0.ptr)
12017        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
12018        return obj
12019    def get_prefix_schedule_multi_union_pw_aff(arg0):
12020        return arg0.prefix_schedule_multi_union_pw_aff()
12021    def prefix_schedule_union_map(arg0):
12022        try:
12023            if not arg0.__class__ is schedule_node:
12024                arg0 = schedule_node(arg0)
12025        except:
12026            raise
12027        ctx = arg0.ctx
12028        res = isl.isl_schedule_node_get_prefix_schedule_union_map(arg0.ptr)
12029        obj = union_map(ctx=ctx, ptr=res)
12030        return obj
12031    def get_prefix_schedule_union_map(arg0):
12032        return arg0.prefix_schedule_union_map()
12033    def prefix_schedule_union_pw_multi_aff(arg0):
12034        try:
12035            if not arg0.__class__ is schedule_node:
12036                arg0 = schedule_node(arg0)
12037        except:
12038            raise
12039        ctx = arg0.ctx
12040        res = isl.isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(arg0.ptr)
12041        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
12042        return obj
12043    def get_prefix_schedule_union_pw_multi_aff(arg0):
12044        return arg0.prefix_schedule_union_pw_multi_aff()
12045    def schedule(arg0):
12046        try:
12047            if not arg0.__class__ is schedule_node:
12048                arg0 = schedule_node(arg0)
12049        except:
12050            raise
12051        ctx = arg0.ctx
12052        res = isl.isl_schedule_node_get_schedule(arg0.ptr)
12053        obj = schedule(ctx=ctx, ptr=res)
12054        return obj
12055    def get_schedule(arg0):
12056        return arg0.schedule()
12057    def shared_ancestor(arg0, arg1):
12058        try:
12059            if not arg0.__class__ is schedule_node:
12060                arg0 = schedule_node(arg0)
12061        except:
12062            raise
12063        try:
12064            if not arg1.__class__ is schedule_node:
12065                arg1 = schedule_node(arg1)
12066        except:
12067            raise
12068        ctx = arg0.ctx
12069        res = isl.isl_schedule_node_get_shared_ancestor(arg0.ptr, arg1.ptr)
12070        obj = schedule_node(ctx=ctx, ptr=res)
12071        return obj
12072    def get_shared_ancestor(arg0, arg1):
12073        return arg0.shared_ancestor(arg1)
12074    def tree_depth(arg0):
12075        try:
12076            if not arg0.__class__ is schedule_node:
12077                arg0 = schedule_node(arg0)
12078        except:
12079            raise
12080        ctx = arg0.ctx
12081        res = isl.isl_schedule_node_get_tree_depth(arg0.ptr)
12082        if res < 0:
12083            raise
12084        return int(res)
12085    def get_tree_depth(arg0):
12086        return arg0.tree_depth()
12087    def graft_after(arg0, arg1):
12088        try:
12089            if not arg0.__class__ is schedule_node:
12090                arg0 = schedule_node(arg0)
12091        except:
12092            raise
12093        try:
12094            if not arg1.__class__ is schedule_node:
12095                arg1 = schedule_node(arg1)
12096        except:
12097            raise
12098        ctx = arg0.ctx
12099        res = isl.isl_schedule_node_graft_after(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_schedule_node_copy(arg1.ptr))
12100        obj = schedule_node(ctx=ctx, ptr=res)
12101        return obj
12102    def graft_before(arg0, arg1):
12103        try:
12104            if not arg0.__class__ is schedule_node:
12105                arg0 = schedule_node(arg0)
12106        except:
12107            raise
12108        try:
12109            if not arg1.__class__ is schedule_node:
12110                arg1 = schedule_node(arg1)
12111        except:
12112            raise
12113        ctx = arg0.ctx
12114        res = isl.isl_schedule_node_graft_before(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_schedule_node_copy(arg1.ptr))
12115        obj = schedule_node(ctx=ctx, ptr=res)
12116        return obj
12117    def has_children(arg0):
12118        try:
12119            if not arg0.__class__ is schedule_node:
12120                arg0 = schedule_node(arg0)
12121        except:
12122            raise
12123        ctx = arg0.ctx
12124        res = isl.isl_schedule_node_has_children(arg0.ptr)
12125        if res < 0:
12126            raise
12127        return bool(res)
12128    def has_next_sibling(arg0):
12129        try:
12130            if not arg0.__class__ is schedule_node:
12131                arg0 = schedule_node(arg0)
12132        except:
12133            raise
12134        ctx = arg0.ctx
12135        res = isl.isl_schedule_node_has_next_sibling(arg0.ptr)
12136        if res < 0:
12137            raise
12138        return bool(res)
12139    def has_parent(arg0):
12140        try:
12141            if not arg0.__class__ is schedule_node:
12142                arg0 = schedule_node(arg0)
12143        except:
12144            raise
12145        ctx = arg0.ctx
12146        res = isl.isl_schedule_node_has_parent(arg0.ptr)
12147        if res < 0:
12148            raise
12149        return bool(res)
12150    def has_previous_sibling(arg0):
12151        try:
12152            if not arg0.__class__ is schedule_node:
12153                arg0 = schedule_node(arg0)
12154        except:
12155            raise
12156        ctx = arg0.ctx
12157        res = isl.isl_schedule_node_has_previous_sibling(arg0.ptr)
12158        if res < 0:
12159            raise
12160        return bool(res)
12161    def insert_context(arg0, arg1):
12162        try:
12163            if not arg0.__class__ is schedule_node:
12164                arg0 = schedule_node(arg0)
12165        except:
12166            raise
12167        try:
12168            if not arg1.__class__ is set:
12169                arg1 = set(arg1)
12170        except:
12171            raise
12172        ctx = arg0.ctx
12173        res = isl.isl_schedule_node_insert_context(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
12174        obj = schedule_node(ctx=ctx, ptr=res)
12175        return obj
12176    def insert_filter(arg0, arg1):
12177        try:
12178            if not arg0.__class__ is schedule_node:
12179                arg0 = schedule_node(arg0)
12180        except:
12181            raise
12182        try:
12183            if not arg1.__class__ is union_set:
12184                arg1 = union_set(arg1)
12185        except:
12186            raise
12187        ctx = arg0.ctx
12188        res = isl.isl_schedule_node_insert_filter(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
12189        obj = schedule_node(ctx=ctx, ptr=res)
12190        return obj
12191    def insert_guard(arg0, arg1):
12192        try:
12193            if not arg0.__class__ is schedule_node:
12194                arg0 = schedule_node(arg0)
12195        except:
12196            raise
12197        try:
12198            if not arg1.__class__ is set:
12199                arg1 = set(arg1)
12200        except:
12201            raise
12202        ctx = arg0.ctx
12203        res = isl.isl_schedule_node_insert_guard(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_set_copy(arg1.ptr))
12204        obj = schedule_node(ctx=ctx, ptr=res)
12205        return obj
12206    def insert_mark(arg0, arg1):
12207        try:
12208            if not arg0.__class__ is schedule_node:
12209                arg0 = schedule_node(arg0)
12210        except:
12211            raise
12212        try:
12213            if not arg1.__class__ is id:
12214                arg1 = id(arg1)
12215        except:
12216            raise
12217        ctx = arg0.ctx
12218        res = isl.isl_schedule_node_insert_mark(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_id_copy(arg1.ptr))
12219        obj = schedule_node(ctx=ctx, ptr=res)
12220        return obj
12221    def insert_partial_schedule(arg0, arg1):
12222        try:
12223            if not arg0.__class__ is schedule_node:
12224                arg0 = schedule_node(arg0)
12225        except:
12226            raise
12227        try:
12228            if not arg1.__class__ is multi_union_pw_aff:
12229                arg1 = multi_union_pw_aff(arg1)
12230        except:
12231            raise
12232        ctx = arg0.ctx
12233        res = isl.isl_schedule_node_insert_partial_schedule(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr))
12234        obj = schedule_node(ctx=ctx, ptr=res)
12235        return obj
12236    def insert_sequence(arg0, arg1):
12237        try:
12238            if not arg0.__class__ is schedule_node:
12239                arg0 = schedule_node(arg0)
12240        except:
12241            raise
12242        try:
12243            if not arg1.__class__ is union_set_list:
12244                arg1 = union_set_list(arg1)
12245        except:
12246            raise
12247        ctx = arg0.ctx
12248        res = isl.isl_schedule_node_insert_sequence(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_list_copy(arg1.ptr))
12249        obj = schedule_node(ctx=ctx, ptr=res)
12250        return obj
12251    def insert_set(arg0, arg1):
12252        try:
12253            if not arg0.__class__ is schedule_node:
12254                arg0 = schedule_node(arg0)
12255        except:
12256            raise
12257        try:
12258            if not arg1.__class__ is union_set_list:
12259                arg1 = union_set_list(arg1)
12260        except:
12261            raise
12262        ctx = arg0.ctx
12263        res = isl.isl_schedule_node_insert_set(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_list_copy(arg1.ptr))
12264        obj = schedule_node(ctx=ctx, ptr=res)
12265        return obj
12266    def is_equal(arg0, arg1):
12267        try:
12268            if not arg0.__class__ is schedule_node:
12269                arg0 = schedule_node(arg0)
12270        except:
12271            raise
12272        try:
12273            if not arg1.__class__ is schedule_node:
12274                arg1 = schedule_node(arg1)
12275        except:
12276            raise
12277        ctx = arg0.ctx
12278        res = isl.isl_schedule_node_is_equal(arg0.ptr, arg1.ptr)
12279        if res < 0:
12280            raise
12281        return bool(res)
12282    def is_subtree_anchored(arg0):
12283        try:
12284            if not arg0.__class__ is schedule_node:
12285                arg0 = schedule_node(arg0)
12286        except:
12287            raise
12288        ctx = arg0.ctx
12289        res = isl.isl_schedule_node_is_subtree_anchored(arg0.ptr)
12290        if res < 0:
12291            raise
12292        return bool(res)
12293    def map_descendant_bottom_up(arg0, arg1):
12294        try:
12295            if not arg0.__class__ is schedule_node:
12296                arg0 = schedule_node(arg0)
12297        except:
12298            raise
12299        exc_info = [None]
12300        fn = CFUNCTYPE(c_void_p, c_void_p, c_void_p)
12301        def cb_func(cb_arg0, cb_arg1):
12302            cb_arg0 = schedule_node(ctx=arg0.ctx, ptr=(cb_arg0))
12303            try:
12304                res = arg1(cb_arg0)
12305            except:
12306                import sys
12307                exc_info[0] = sys.exc_info()
12308                return None
12309            return isl.isl_schedule_node_copy(res.ptr)
12310        cb = fn(cb_func)
12311        ctx = arg0.ctx
12312        res = isl.isl_schedule_node_map_descendant_bottom_up(isl.isl_schedule_node_copy(arg0.ptr), cb, None)
12313        if exc_info[0] != None:
12314            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
12315        obj = schedule_node(ctx=ctx, ptr=res)
12316        return obj
12317    def n_children(arg0):
12318        try:
12319            if not arg0.__class__ is schedule_node:
12320                arg0 = schedule_node(arg0)
12321        except:
12322            raise
12323        ctx = arg0.ctx
12324        res = isl.isl_schedule_node_n_children(arg0.ptr)
12325        if res < 0:
12326            raise
12327        return int(res)
12328    def next_sibling(arg0):
12329        try:
12330            if not arg0.__class__ is schedule_node:
12331                arg0 = schedule_node(arg0)
12332        except:
12333            raise
12334        ctx = arg0.ctx
12335        res = isl.isl_schedule_node_next_sibling(isl.isl_schedule_node_copy(arg0.ptr))
12336        obj = schedule_node(ctx=ctx, ptr=res)
12337        return obj
12338    def order_after(arg0, arg1):
12339        try:
12340            if not arg0.__class__ is schedule_node:
12341                arg0 = schedule_node(arg0)
12342        except:
12343            raise
12344        try:
12345            if not arg1.__class__ is union_set:
12346                arg1 = union_set(arg1)
12347        except:
12348            raise
12349        ctx = arg0.ctx
12350        res = isl.isl_schedule_node_order_after(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
12351        obj = schedule_node(ctx=ctx, ptr=res)
12352        return obj
12353    def order_before(arg0, arg1):
12354        try:
12355            if not arg0.__class__ is schedule_node:
12356                arg0 = schedule_node(arg0)
12357        except:
12358            raise
12359        try:
12360            if not arg1.__class__ is union_set:
12361                arg1 = union_set(arg1)
12362        except:
12363            raise
12364        ctx = arg0.ctx
12365        res = isl.isl_schedule_node_order_before(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
12366        obj = schedule_node(ctx=ctx, ptr=res)
12367        return obj
12368    def parent(arg0):
12369        try:
12370            if not arg0.__class__ is schedule_node:
12371                arg0 = schedule_node(arg0)
12372        except:
12373            raise
12374        ctx = arg0.ctx
12375        res = isl.isl_schedule_node_parent(isl.isl_schedule_node_copy(arg0.ptr))
12376        obj = schedule_node(ctx=ctx, ptr=res)
12377        return obj
12378    def previous_sibling(arg0):
12379        try:
12380            if not arg0.__class__ is schedule_node:
12381                arg0 = schedule_node(arg0)
12382        except:
12383            raise
12384        ctx = arg0.ctx
12385        res = isl.isl_schedule_node_previous_sibling(isl.isl_schedule_node_copy(arg0.ptr))
12386        obj = schedule_node(ctx=ctx, ptr=res)
12387        return obj
12388    def root(arg0):
12389        try:
12390            if not arg0.__class__ is schedule_node:
12391                arg0 = schedule_node(arg0)
12392        except:
12393            raise
12394        ctx = arg0.ctx
12395        res = isl.isl_schedule_node_root(isl.isl_schedule_node_copy(arg0.ptr))
12396        obj = schedule_node(ctx=ctx, ptr=res)
12397        return obj
12398
12399isl.isl_schedule_node_ancestor.restype = c_void_p
12400isl.isl_schedule_node_ancestor.argtypes = [c_void_p, c_int]
12401isl.isl_schedule_node_child.restype = c_void_p
12402isl.isl_schedule_node_child.argtypes = [c_void_p, c_int]
12403isl.isl_schedule_node_every_descendant.argtypes = [c_void_p, c_void_p, c_void_p]
12404isl.isl_schedule_node_first_child.restype = c_void_p
12405isl.isl_schedule_node_first_child.argtypes = [c_void_p]
12406isl.isl_schedule_node_foreach_ancestor_top_down.argtypes = [c_void_p, c_void_p, c_void_p]
12407isl.isl_schedule_node_foreach_descendant_top_down.argtypes = [c_void_p, c_void_p, c_void_p]
12408isl.isl_schedule_node_from_domain.restype = c_void_p
12409isl.isl_schedule_node_from_domain.argtypes = [c_void_p]
12410isl.isl_schedule_node_from_extension.restype = c_void_p
12411isl.isl_schedule_node_from_extension.argtypes = [c_void_p]
12412isl.isl_schedule_node_get_ancestor_child_position.argtypes = [c_void_p, c_void_p]
12413isl.isl_schedule_node_get_child_position.argtypes = [c_void_p]
12414isl.isl_schedule_node_get_prefix_schedule_multi_union_pw_aff.restype = c_void_p
12415isl.isl_schedule_node_get_prefix_schedule_multi_union_pw_aff.argtypes = [c_void_p]
12416isl.isl_schedule_node_get_prefix_schedule_union_map.restype = c_void_p
12417isl.isl_schedule_node_get_prefix_schedule_union_map.argtypes = [c_void_p]
12418isl.isl_schedule_node_get_prefix_schedule_union_pw_multi_aff.restype = c_void_p
12419isl.isl_schedule_node_get_prefix_schedule_union_pw_multi_aff.argtypes = [c_void_p]
12420isl.isl_schedule_node_get_schedule.restype = c_void_p
12421isl.isl_schedule_node_get_schedule.argtypes = [c_void_p]
12422isl.isl_schedule_node_get_shared_ancestor.restype = c_void_p
12423isl.isl_schedule_node_get_shared_ancestor.argtypes = [c_void_p, c_void_p]
12424isl.isl_schedule_node_get_tree_depth.argtypes = [c_void_p]
12425isl.isl_schedule_node_graft_after.restype = c_void_p
12426isl.isl_schedule_node_graft_after.argtypes = [c_void_p, c_void_p]
12427isl.isl_schedule_node_graft_before.restype = c_void_p
12428isl.isl_schedule_node_graft_before.argtypes = [c_void_p, c_void_p]
12429isl.isl_schedule_node_has_children.argtypes = [c_void_p]
12430isl.isl_schedule_node_has_next_sibling.argtypes = [c_void_p]
12431isl.isl_schedule_node_has_parent.argtypes = [c_void_p]
12432isl.isl_schedule_node_has_previous_sibling.argtypes = [c_void_p]
12433isl.isl_schedule_node_insert_context.restype = c_void_p
12434isl.isl_schedule_node_insert_context.argtypes = [c_void_p, c_void_p]
12435isl.isl_schedule_node_insert_filter.restype = c_void_p
12436isl.isl_schedule_node_insert_filter.argtypes = [c_void_p, c_void_p]
12437isl.isl_schedule_node_insert_guard.restype = c_void_p
12438isl.isl_schedule_node_insert_guard.argtypes = [c_void_p, c_void_p]
12439isl.isl_schedule_node_insert_mark.restype = c_void_p
12440isl.isl_schedule_node_insert_mark.argtypes = [c_void_p, c_void_p]
12441isl.isl_schedule_node_insert_partial_schedule.restype = c_void_p
12442isl.isl_schedule_node_insert_partial_schedule.argtypes = [c_void_p, c_void_p]
12443isl.isl_schedule_node_insert_sequence.restype = c_void_p
12444isl.isl_schedule_node_insert_sequence.argtypes = [c_void_p, c_void_p]
12445isl.isl_schedule_node_insert_set.restype = c_void_p
12446isl.isl_schedule_node_insert_set.argtypes = [c_void_p, c_void_p]
12447isl.isl_schedule_node_is_equal.argtypes = [c_void_p, c_void_p]
12448isl.isl_schedule_node_is_subtree_anchored.argtypes = [c_void_p]
12449isl.isl_schedule_node_map_descendant_bottom_up.restype = c_void_p
12450isl.isl_schedule_node_map_descendant_bottom_up.argtypes = [c_void_p, c_void_p, c_void_p]
12451isl.isl_schedule_node_n_children.argtypes = [c_void_p]
12452isl.isl_schedule_node_next_sibling.restype = c_void_p
12453isl.isl_schedule_node_next_sibling.argtypes = [c_void_p]
12454isl.isl_schedule_node_order_after.restype = c_void_p
12455isl.isl_schedule_node_order_after.argtypes = [c_void_p, c_void_p]
12456isl.isl_schedule_node_order_before.restype = c_void_p
12457isl.isl_schedule_node_order_before.argtypes = [c_void_p, c_void_p]
12458isl.isl_schedule_node_parent.restype = c_void_p
12459isl.isl_schedule_node_parent.argtypes = [c_void_p]
12460isl.isl_schedule_node_previous_sibling.restype = c_void_p
12461isl.isl_schedule_node_previous_sibling.argtypes = [c_void_p]
12462isl.isl_schedule_node_root.restype = c_void_p
12463isl.isl_schedule_node_root.argtypes = [c_void_p]
12464isl.isl_schedule_node_copy.restype = c_void_p
12465isl.isl_schedule_node_copy.argtypes = [c_void_p]
12466isl.isl_schedule_node_free.restype = c_void_p
12467isl.isl_schedule_node_free.argtypes = [c_void_p]
12468isl.isl_schedule_node_to_str.restype = POINTER(c_char)
12469isl.isl_schedule_node_to_str.argtypes = [c_void_p]
12470isl.isl_schedule_node_get_type.argtypes = [c_void_p]
12471
12472class schedule_node_band(schedule_node):
12473    def __init__(self, *args, **keywords):
12474        if "ptr" in keywords:
12475            self.ctx = keywords["ctx"]
12476            self.ptr = keywords["ptr"]
12477            return
12478        raise Error
12479    def __del__(self):
12480        if hasattr(self, 'ptr'):
12481            isl.isl_schedule_node_free(self.ptr)
12482    def __new__(cls, *args, **keywords):
12483        return super(schedule_node_band, cls).__new__(cls)
12484    def __str__(arg0):
12485        try:
12486            if not arg0.__class__ is schedule_node_band:
12487                arg0 = schedule_node_band(arg0)
12488        except:
12489            raise
12490        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
12491        res = cast(ptr, c_char_p).value.decode('ascii')
12492        libc.free(ptr)
12493        return res
12494    def __repr__(self):
12495        s = str(self)
12496        if '"' in s:
12497            return 'isl.schedule_node_band("""%s""")' % s
12498        else:
12499            return 'isl.schedule_node_band("%s")' % s
12500    def ast_build_options(arg0):
12501        try:
12502            if not arg0.__class__ is schedule_node:
12503                arg0 = schedule_node(arg0)
12504        except:
12505            raise
12506        ctx = arg0.ctx
12507        res = isl.isl_schedule_node_band_get_ast_build_options(arg0.ptr)
12508        obj = union_set(ctx=ctx, ptr=res)
12509        return obj
12510    def get_ast_build_options(arg0):
12511        return arg0.ast_build_options()
12512    def ast_isolate_option(arg0):
12513        try:
12514            if not arg0.__class__ is schedule_node:
12515                arg0 = schedule_node(arg0)
12516        except:
12517            raise
12518        ctx = arg0.ctx
12519        res = isl.isl_schedule_node_band_get_ast_isolate_option(arg0.ptr)
12520        obj = set(ctx=ctx, ptr=res)
12521        return obj
12522    def get_ast_isolate_option(arg0):
12523        return arg0.ast_isolate_option()
12524    def partial_schedule(arg0):
12525        try:
12526            if not arg0.__class__ is schedule_node:
12527                arg0 = schedule_node(arg0)
12528        except:
12529            raise
12530        ctx = arg0.ctx
12531        res = isl.isl_schedule_node_band_get_partial_schedule(arg0.ptr)
12532        obj = multi_union_pw_aff(ctx=ctx, ptr=res)
12533        return obj
12534    def get_partial_schedule(arg0):
12535        return arg0.partial_schedule()
12536    def permutable(arg0):
12537        try:
12538            if not arg0.__class__ is schedule_node:
12539                arg0 = schedule_node(arg0)
12540        except:
12541            raise
12542        ctx = arg0.ctx
12543        res = isl.isl_schedule_node_band_get_permutable(arg0.ptr)
12544        if res < 0:
12545            raise
12546        return bool(res)
12547    def get_permutable(arg0):
12548        return arg0.permutable()
12549    def member_get_coincident(arg0, arg1):
12550        try:
12551            if not arg0.__class__ is schedule_node:
12552                arg0 = schedule_node(arg0)
12553        except:
12554            raise
12555        ctx = arg0.ctx
12556        res = isl.isl_schedule_node_band_member_get_coincident(arg0.ptr, arg1)
12557        if res < 0:
12558            raise
12559        return bool(res)
12560    def member_set_coincident(arg0, arg1, arg2):
12561        try:
12562            if not arg0.__class__ is schedule_node:
12563                arg0 = schedule_node(arg0)
12564        except:
12565            raise
12566        ctx = arg0.ctx
12567        res = isl.isl_schedule_node_band_member_set_coincident(isl.isl_schedule_node_copy(arg0.ptr), arg1, arg2)
12568        obj = schedule_node(ctx=ctx, ptr=res)
12569        return obj
12570    def mod(arg0, arg1):
12571        try:
12572            if not arg0.__class__ is schedule_node:
12573                arg0 = schedule_node(arg0)
12574        except:
12575            raise
12576        try:
12577            if not arg1.__class__ is multi_val:
12578                arg1 = multi_val(arg1)
12579        except:
12580            raise
12581        ctx = arg0.ctx
12582        res = isl.isl_schedule_node_band_mod(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
12583        obj = schedule_node(ctx=ctx, ptr=res)
12584        return obj
12585    def n_member(arg0):
12586        try:
12587            if not arg0.__class__ is schedule_node:
12588                arg0 = schedule_node(arg0)
12589        except:
12590            raise
12591        ctx = arg0.ctx
12592        res = isl.isl_schedule_node_band_n_member(arg0.ptr)
12593        if res < 0:
12594            raise
12595        return int(res)
12596    def scale(arg0, arg1):
12597        try:
12598            if not arg0.__class__ is schedule_node:
12599                arg0 = schedule_node(arg0)
12600        except:
12601            raise
12602        try:
12603            if not arg1.__class__ is multi_val:
12604                arg1 = multi_val(arg1)
12605        except:
12606            raise
12607        ctx = arg0.ctx
12608        res = isl.isl_schedule_node_band_scale(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
12609        obj = schedule_node(ctx=ctx, ptr=res)
12610        return obj
12611    def scale_down(arg0, arg1):
12612        try:
12613            if not arg0.__class__ is schedule_node:
12614                arg0 = schedule_node(arg0)
12615        except:
12616            raise
12617        try:
12618            if not arg1.__class__ is multi_val:
12619                arg1 = multi_val(arg1)
12620        except:
12621            raise
12622        ctx = arg0.ctx
12623        res = isl.isl_schedule_node_band_scale_down(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
12624        obj = schedule_node(ctx=ctx, ptr=res)
12625        return obj
12626    def set_ast_build_options(arg0, arg1):
12627        try:
12628            if not arg0.__class__ is schedule_node:
12629                arg0 = schedule_node(arg0)
12630        except:
12631            raise
12632        try:
12633            if not arg1.__class__ is union_set:
12634                arg1 = union_set(arg1)
12635        except:
12636            raise
12637        ctx = arg0.ctx
12638        res = isl.isl_schedule_node_band_set_ast_build_options(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
12639        obj = schedule_node(ctx=ctx, ptr=res)
12640        return obj
12641    def set_permutable(arg0, arg1):
12642        try:
12643            if not arg0.__class__ is schedule_node:
12644                arg0 = schedule_node(arg0)
12645        except:
12646            raise
12647        ctx = arg0.ctx
12648        res = isl.isl_schedule_node_band_set_permutable(isl.isl_schedule_node_copy(arg0.ptr), arg1)
12649        obj = schedule_node(ctx=ctx, ptr=res)
12650        return obj
12651    def shift(arg0, arg1):
12652        try:
12653            if not arg0.__class__ is schedule_node:
12654                arg0 = schedule_node(arg0)
12655        except:
12656            raise
12657        try:
12658            if not arg1.__class__ is multi_union_pw_aff:
12659                arg1 = multi_union_pw_aff(arg1)
12660        except:
12661            raise
12662        ctx = arg0.ctx
12663        res = isl.isl_schedule_node_band_shift(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_union_pw_aff_copy(arg1.ptr))
12664        obj = schedule_node(ctx=ctx, ptr=res)
12665        return obj
12666    def split(arg0, arg1):
12667        try:
12668            if not arg0.__class__ is schedule_node:
12669                arg0 = schedule_node(arg0)
12670        except:
12671            raise
12672        ctx = arg0.ctx
12673        res = isl.isl_schedule_node_band_split(isl.isl_schedule_node_copy(arg0.ptr), arg1)
12674        obj = schedule_node(ctx=ctx, ptr=res)
12675        return obj
12676    def tile(arg0, arg1):
12677        try:
12678            if not arg0.__class__ is schedule_node:
12679                arg0 = schedule_node(arg0)
12680        except:
12681            raise
12682        try:
12683            if not arg1.__class__ is multi_val:
12684                arg1 = multi_val(arg1)
12685        except:
12686            raise
12687        ctx = arg0.ctx
12688        res = isl.isl_schedule_node_band_tile(isl.isl_schedule_node_copy(arg0.ptr), isl.isl_multi_val_copy(arg1.ptr))
12689        obj = schedule_node(ctx=ctx, ptr=res)
12690        return obj
12691    def member_set_ast_loop_default(arg0, arg1):
12692        try:
12693            if not arg0.__class__ is schedule_node:
12694                arg0 = schedule_node(arg0)
12695        except:
12696            raise
12697        ctx = arg0.ctx
12698        res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 0)
12699        obj = schedule_node(ctx=ctx, ptr=res)
12700        return obj
12701    def member_set_ast_loop_atomic(arg0, arg1):
12702        try:
12703            if not arg0.__class__ is schedule_node:
12704                arg0 = schedule_node(arg0)
12705        except:
12706            raise
12707        ctx = arg0.ctx
12708        res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 1)
12709        obj = schedule_node(ctx=ctx, ptr=res)
12710        return obj
12711    def member_set_ast_loop_unroll(arg0, arg1):
12712        try:
12713            if not arg0.__class__ is schedule_node:
12714                arg0 = schedule_node(arg0)
12715        except:
12716            raise
12717        ctx = arg0.ctx
12718        res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 2)
12719        obj = schedule_node(ctx=ctx, ptr=res)
12720        return obj
12721    def member_set_ast_loop_separate(arg0, arg1):
12722        try:
12723            if not arg0.__class__ is schedule_node:
12724                arg0 = schedule_node(arg0)
12725        except:
12726            raise
12727        ctx = arg0.ctx
12728        res = isl.isl_schedule_node_band_member_set_ast_loop_type(isl.isl_schedule_node_copy(arg0.ptr), arg1, 3)
12729        obj = schedule_node(ctx=ctx, ptr=res)
12730        return obj
12731
12732isl.isl_schedule_node_band_get_ast_build_options.restype = c_void_p
12733isl.isl_schedule_node_band_get_ast_build_options.argtypes = [c_void_p]
12734isl.isl_schedule_node_band_get_ast_isolate_option.restype = c_void_p
12735isl.isl_schedule_node_band_get_ast_isolate_option.argtypes = [c_void_p]
12736isl.isl_schedule_node_band_get_partial_schedule.restype = c_void_p
12737isl.isl_schedule_node_band_get_partial_schedule.argtypes = [c_void_p]
12738isl.isl_schedule_node_band_get_permutable.argtypes = [c_void_p]
12739isl.isl_schedule_node_band_member_get_coincident.argtypes = [c_void_p, c_int]
12740isl.isl_schedule_node_band_member_set_coincident.restype = c_void_p
12741isl.isl_schedule_node_band_member_set_coincident.argtypes = [c_void_p, c_int, c_int]
12742isl.isl_schedule_node_band_mod.restype = c_void_p
12743isl.isl_schedule_node_band_mod.argtypes = [c_void_p, c_void_p]
12744isl.isl_schedule_node_band_n_member.argtypes = [c_void_p]
12745isl.isl_schedule_node_band_scale.restype = c_void_p
12746isl.isl_schedule_node_band_scale.argtypes = [c_void_p, c_void_p]
12747isl.isl_schedule_node_band_scale_down.restype = c_void_p
12748isl.isl_schedule_node_band_scale_down.argtypes = [c_void_p, c_void_p]
12749isl.isl_schedule_node_band_set_ast_build_options.restype = c_void_p
12750isl.isl_schedule_node_band_set_ast_build_options.argtypes = [c_void_p, c_void_p]
12751isl.isl_schedule_node_band_set_permutable.restype = c_void_p
12752isl.isl_schedule_node_band_set_permutable.argtypes = [c_void_p, c_int]
12753isl.isl_schedule_node_band_shift.restype = c_void_p
12754isl.isl_schedule_node_band_shift.argtypes = [c_void_p, c_void_p]
12755isl.isl_schedule_node_band_split.restype = c_void_p
12756isl.isl_schedule_node_band_split.argtypes = [c_void_p, c_int]
12757isl.isl_schedule_node_band_tile.restype = c_void_p
12758isl.isl_schedule_node_band_tile.argtypes = [c_void_p, c_void_p]
12759isl.isl_schedule_node_band_member_set_ast_loop_type.restype = c_void_p
12760isl.isl_schedule_node_band_member_set_ast_loop_type.argtypes = [c_void_p, c_int, c_int]
12761isl.isl_schedule_node_copy.restype = c_void_p
12762isl.isl_schedule_node_copy.argtypes = [c_void_p]
12763isl.isl_schedule_node_free.restype = c_void_p
12764isl.isl_schedule_node_free.argtypes = [c_void_p]
12765isl.isl_schedule_node_to_str.restype = POINTER(c_char)
12766isl.isl_schedule_node_to_str.argtypes = [c_void_p]
12767
12768class schedule_node_context(schedule_node):
12769    def __init__(self, *args, **keywords):
12770        if "ptr" in keywords:
12771            self.ctx = keywords["ctx"]
12772            self.ptr = keywords["ptr"]
12773            return
12774        raise Error
12775    def __del__(self):
12776        if hasattr(self, 'ptr'):
12777            isl.isl_schedule_node_free(self.ptr)
12778    def __new__(cls, *args, **keywords):
12779        return super(schedule_node_context, cls).__new__(cls)
12780    def __str__(arg0):
12781        try:
12782            if not arg0.__class__ is schedule_node_context:
12783                arg0 = schedule_node_context(arg0)
12784        except:
12785            raise
12786        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
12787        res = cast(ptr, c_char_p).value.decode('ascii')
12788        libc.free(ptr)
12789        return res
12790    def __repr__(self):
12791        s = str(self)
12792        if '"' in s:
12793            return 'isl.schedule_node_context("""%s""")' % s
12794        else:
12795            return 'isl.schedule_node_context("%s")' % s
12796    def context(arg0):
12797        try:
12798            if not arg0.__class__ is schedule_node:
12799                arg0 = schedule_node(arg0)
12800        except:
12801            raise
12802        ctx = arg0.ctx
12803        res = isl.isl_schedule_node_context_get_context(arg0.ptr)
12804        obj = set(ctx=ctx, ptr=res)
12805        return obj
12806    def get_context(arg0):
12807        return arg0.context()
12808
12809isl.isl_schedule_node_context_get_context.restype = c_void_p
12810isl.isl_schedule_node_context_get_context.argtypes = [c_void_p]
12811isl.isl_schedule_node_copy.restype = c_void_p
12812isl.isl_schedule_node_copy.argtypes = [c_void_p]
12813isl.isl_schedule_node_free.restype = c_void_p
12814isl.isl_schedule_node_free.argtypes = [c_void_p]
12815isl.isl_schedule_node_to_str.restype = POINTER(c_char)
12816isl.isl_schedule_node_to_str.argtypes = [c_void_p]
12817
12818class schedule_node_domain(schedule_node):
12819    def __init__(self, *args, **keywords):
12820        if "ptr" in keywords:
12821            self.ctx = keywords["ctx"]
12822            self.ptr = keywords["ptr"]
12823            return
12824        raise Error
12825    def __del__(self):
12826        if hasattr(self, 'ptr'):
12827            isl.isl_schedule_node_free(self.ptr)
12828    def __new__(cls, *args, **keywords):
12829        return super(schedule_node_domain, cls).__new__(cls)
12830    def __str__(arg0):
12831        try:
12832            if not arg0.__class__ is schedule_node_domain:
12833                arg0 = schedule_node_domain(arg0)
12834        except:
12835            raise
12836        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
12837        res = cast(ptr, c_char_p).value.decode('ascii')
12838        libc.free(ptr)
12839        return res
12840    def __repr__(self):
12841        s = str(self)
12842        if '"' in s:
12843            return 'isl.schedule_node_domain("""%s""")' % s
12844        else:
12845            return 'isl.schedule_node_domain("%s")' % s
12846    def domain(arg0):
12847        try:
12848            if not arg0.__class__ is schedule_node:
12849                arg0 = schedule_node(arg0)
12850        except:
12851            raise
12852        ctx = arg0.ctx
12853        res = isl.isl_schedule_node_domain_get_domain(arg0.ptr)
12854        obj = union_set(ctx=ctx, ptr=res)
12855        return obj
12856    def get_domain(arg0):
12857        return arg0.domain()
12858
12859isl.isl_schedule_node_domain_get_domain.restype = c_void_p
12860isl.isl_schedule_node_domain_get_domain.argtypes = [c_void_p]
12861isl.isl_schedule_node_copy.restype = c_void_p
12862isl.isl_schedule_node_copy.argtypes = [c_void_p]
12863isl.isl_schedule_node_free.restype = c_void_p
12864isl.isl_schedule_node_free.argtypes = [c_void_p]
12865isl.isl_schedule_node_to_str.restype = POINTER(c_char)
12866isl.isl_schedule_node_to_str.argtypes = [c_void_p]
12867
12868class schedule_node_expansion(schedule_node):
12869    def __init__(self, *args, **keywords):
12870        if "ptr" in keywords:
12871            self.ctx = keywords["ctx"]
12872            self.ptr = keywords["ptr"]
12873            return
12874        raise Error
12875    def __del__(self):
12876        if hasattr(self, 'ptr'):
12877            isl.isl_schedule_node_free(self.ptr)
12878    def __new__(cls, *args, **keywords):
12879        return super(schedule_node_expansion, cls).__new__(cls)
12880    def __str__(arg0):
12881        try:
12882            if not arg0.__class__ is schedule_node_expansion:
12883                arg0 = schedule_node_expansion(arg0)
12884        except:
12885            raise
12886        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
12887        res = cast(ptr, c_char_p).value.decode('ascii')
12888        libc.free(ptr)
12889        return res
12890    def __repr__(self):
12891        s = str(self)
12892        if '"' in s:
12893            return 'isl.schedule_node_expansion("""%s""")' % s
12894        else:
12895            return 'isl.schedule_node_expansion("%s")' % s
12896    def contraction(arg0):
12897        try:
12898            if not arg0.__class__ is schedule_node:
12899                arg0 = schedule_node(arg0)
12900        except:
12901            raise
12902        ctx = arg0.ctx
12903        res = isl.isl_schedule_node_expansion_get_contraction(arg0.ptr)
12904        obj = union_pw_multi_aff(ctx=ctx, ptr=res)
12905        return obj
12906    def get_contraction(arg0):
12907        return arg0.contraction()
12908    def expansion(arg0):
12909        try:
12910            if not arg0.__class__ is schedule_node:
12911                arg0 = schedule_node(arg0)
12912        except:
12913            raise
12914        ctx = arg0.ctx
12915        res = isl.isl_schedule_node_expansion_get_expansion(arg0.ptr)
12916        obj = union_map(ctx=ctx, ptr=res)
12917        return obj
12918    def get_expansion(arg0):
12919        return arg0.expansion()
12920
12921isl.isl_schedule_node_expansion_get_contraction.restype = c_void_p
12922isl.isl_schedule_node_expansion_get_contraction.argtypes = [c_void_p]
12923isl.isl_schedule_node_expansion_get_expansion.restype = c_void_p
12924isl.isl_schedule_node_expansion_get_expansion.argtypes = [c_void_p]
12925isl.isl_schedule_node_copy.restype = c_void_p
12926isl.isl_schedule_node_copy.argtypes = [c_void_p]
12927isl.isl_schedule_node_free.restype = c_void_p
12928isl.isl_schedule_node_free.argtypes = [c_void_p]
12929isl.isl_schedule_node_to_str.restype = POINTER(c_char)
12930isl.isl_schedule_node_to_str.argtypes = [c_void_p]
12931
12932class schedule_node_extension(schedule_node):
12933    def __init__(self, *args, **keywords):
12934        if "ptr" in keywords:
12935            self.ctx = keywords["ctx"]
12936            self.ptr = keywords["ptr"]
12937            return
12938        raise Error
12939    def __del__(self):
12940        if hasattr(self, 'ptr'):
12941            isl.isl_schedule_node_free(self.ptr)
12942    def __new__(cls, *args, **keywords):
12943        return super(schedule_node_extension, cls).__new__(cls)
12944    def __str__(arg0):
12945        try:
12946            if not arg0.__class__ is schedule_node_extension:
12947                arg0 = schedule_node_extension(arg0)
12948        except:
12949            raise
12950        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
12951        res = cast(ptr, c_char_p).value.decode('ascii')
12952        libc.free(ptr)
12953        return res
12954    def __repr__(self):
12955        s = str(self)
12956        if '"' in s:
12957            return 'isl.schedule_node_extension("""%s""")' % s
12958        else:
12959            return 'isl.schedule_node_extension("%s")' % s
12960    def extension(arg0):
12961        try:
12962            if not arg0.__class__ is schedule_node:
12963                arg0 = schedule_node(arg0)
12964        except:
12965            raise
12966        ctx = arg0.ctx
12967        res = isl.isl_schedule_node_extension_get_extension(arg0.ptr)
12968        obj = union_map(ctx=ctx, ptr=res)
12969        return obj
12970    def get_extension(arg0):
12971        return arg0.extension()
12972
12973isl.isl_schedule_node_extension_get_extension.restype = c_void_p
12974isl.isl_schedule_node_extension_get_extension.argtypes = [c_void_p]
12975isl.isl_schedule_node_copy.restype = c_void_p
12976isl.isl_schedule_node_copy.argtypes = [c_void_p]
12977isl.isl_schedule_node_free.restype = c_void_p
12978isl.isl_schedule_node_free.argtypes = [c_void_p]
12979isl.isl_schedule_node_to_str.restype = POINTER(c_char)
12980isl.isl_schedule_node_to_str.argtypes = [c_void_p]
12981
12982class schedule_node_filter(schedule_node):
12983    def __init__(self, *args, **keywords):
12984        if "ptr" in keywords:
12985            self.ctx = keywords["ctx"]
12986            self.ptr = keywords["ptr"]
12987            return
12988        raise Error
12989    def __del__(self):
12990        if hasattr(self, 'ptr'):
12991            isl.isl_schedule_node_free(self.ptr)
12992    def __new__(cls, *args, **keywords):
12993        return super(schedule_node_filter, cls).__new__(cls)
12994    def __str__(arg0):
12995        try:
12996            if not arg0.__class__ is schedule_node_filter:
12997                arg0 = schedule_node_filter(arg0)
12998        except:
12999            raise
13000        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
13001        res = cast(ptr, c_char_p).value.decode('ascii')
13002        libc.free(ptr)
13003        return res
13004    def __repr__(self):
13005        s = str(self)
13006        if '"' in s:
13007            return 'isl.schedule_node_filter("""%s""")' % s
13008        else:
13009            return 'isl.schedule_node_filter("%s")' % s
13010    def filter(arg0):
13011        try:
13012            if not arg0.__class__ is schedule_node:
13013                arg0 = schedule_node(arg0)
13014        except:
13015            raise
13016        ctx = arg0.ctx
13017        res = isl.isl_schedule_node_filter_get_filter(arg0.ptr)
13018        obj = union_set(ctx=ctx, ptr=res)
13019        return obj
13020    def get_filter(arg0):
13021        return arg0.filter()
13022
13023isl.isl_schedule_node_filter_get_filter.restype = c_void_p
13024isl.isl_schedule_node_filter_get_filter.argtypes = [c_void_p]
13025isl.isl_schedule_node_copy.restype = c_void_p
13026isl.isl_schedule_node_copy.argtypes = [c_void_p]
13027isl.isl_schedule_node_free.restype = c_void_p
13028isl.isl_schedule_node_free.argtypes = [c_void_p]
13029isl.isl_schedule_node_to_str.restype = POINTER(c_char)
13030isl.isl_schedule_node_to_str.argtypes = [c_void_p]
13031
13032class schedule_node_guard(schedule_node):
13033    def __init__(self, *args, **keywords):
13034        if "ptr" in keywords:
13035            self.ctx = keywords["ctx"]
13036            self.ptr = keywords["ptr"]
13037            return
13038        raise Error
13039    def __del__(self):
13040        if hasattr(self, 'ptr'):
13041            isl.isl_schedule_node_free(self.ptr)
13042    def __new__(cls, *args, **keywords):
13043        return super(schedule_node_guard, cls).__new__(cls)
13044    def __str__(arg0):
13045        try:
13046            if not arg0.__class__ is schedule_node_guard:
13047                arg0 = schedule_node_guard(arg0)
13048        except:
13049            raise
13050        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
13051        res = cast(ptr, c_char_p).value.decode('ascii')
13052        libc.free(ptr)
13053        return res
13054    def __repr__(self):
13055        s = str(self)
13056        if '"' in s:
13057            return 'isl.schedule_node_guard("""%s""")' % s
13058        else:
13059            return 'isl.schedule_node_guard("%s")' % s
13060    def guard(arg0):
13061        try:
13062            if not arg0.__class__ is schedule_node:
13063                arg0 = schedule_node(arg0)
13064        except:
13065            raise
13066        ctx = arg0.ctx
13067        res = isl.isl_schedule_node_guard_get_guard(arg0.ptr)
13068        obj = set(ctx=ctx, ptr=res)
13069        return obj
13070    def get_guard(arg0):
13071        return arg0.guard()
13072
13073isl.isl_schedule_node_guard_get_guard.restype = c_void_p
13074isl.isl_schedule_node_guard_get_guard.argtypes = [c_void_p]
13075isl.isl_schedule_node_copy.restype = c_void_p
13076isl.isl_schedule_node_copy.argtypes = [c_void_p]
13077isl.isl_schedule_node_free.restype = c_void_p
13078isl.isl_schedule_node_free.argtypes = [c_void_p]
13079isl.isl_schedule_node_to_str.restype = POINTER(c_char)
13080isl.isl_schedule_node_to_str.argtypes = [c_void_p]
13081
13082class schedule_node_leaf(schedule_node):
13083    def __init__(self, *args, **keywords):
13084        if "ptr" in keywords:
13085            self.ctx = keywords["ctx"]
13086            self.ptr = keywords["ptr"]
13087            return
13088        raise Error
13089    def __del__(self):
13090        if hasattr(self, 'ptr'):
13091            isl.isl_schedule_node_free(self.ptr)
13092    def __new__(cls, *args, **keywords):
13093        return super(schedule_node_leaf, cls).__new__(cls)
13094    def __str__(arg0):
13095        try:
13096            if not arg0.__class__ is schedule_node_leaf:
13097                arg0 = schedule_node_leaf(arg0)
13098        except:
13099            raise
13100        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
13101        res = cast(ptr, c_char_p).value.decode('ascii')
13102        libc.free(ptr)
13103        return res
13104    def __repr__(self):
13105        s = str(self)
13106        if '"' in s:
13107            return 'isl.schedule_node_leaf("""%s""")' % s
13108        else:
13109            return 'isl.schedule_node_leaf("%s")' % s
13110
13111isl.isl_schedule_node_copy.restype = c_void_p
13112isl.isl_schedule_node_copy.argtypes = [c_void_p]
13113isl.isl_schedule_node_free.restype = c_void_p
13114isl.isl_schedule_node_free.argtypes = [c_void_p]
13115isl.isl_schedule_node_to_str.restype = POINTER(c_char)
13116isl.isl_schedule_node_to_str.argtypes = [c_void_p]
13117
13118class schedule_node_mark(schedule_node):
13119    def __init__(self, *args, **keywords):
13120        if "ptr" in keywords:
13121            self.ctx = keywords["ctx"]
13122            self.ptr = keywords["ptr"]
13123            return
13124        raise Error
13125    def __del__(self):
13126        if hasattr(self, 'ptr'):
13127            isl.isl_schedule_node_free(self.ptr)
13128    def __new__(cls, *args, **keywords):
13129        return super(schedule_node_mark, cls).__new__(cls)
13130    def __str__(arg0):
13131        try:
13132            if not arg0.__class__ is schedule_node_mark:
13133                arg0 = schedule_node_mark(arg0)
13134        except:
13135            raise
13136        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
13137        res = cast(ptr, c_char_p).value.decode('ascii')
13138        libc.free(ptr)
13139        return res
13140    def __repr__(self):
13141        s = str(self)
13142        if '"' in s:
13143            return 'isl.schedule_node_mark("""%s""")' % s
13144        else:
13145            return 'isl.schedule_node_mark("%s")' % s
13146
13147isl.isl_schedule_node_copy.restype = c_void_p
13148isl.isl_schedule_node_copy.argtypes = [c_void_p]
13149isl.isl_schedule_node_free.restype = c_void_p
13150isl.isl_schedule_node_free.argtypes = [c_void_p]
13151isl.isl_schedule_node_to_str.restype = POINTER(c_char)
13152isl.isl_schedule_node_to_str.argtypes = [c_void_p]
13153
13154class schedule_node_sequence(schedule_node):
13155    def __init__(self, *args, **keywords):
13156        if "ptr" in keywords:
13157            self.ctx = keywords["ctx"]
13158            self.ptr = keywords["ptr"]
13159            return
13160        raise Error
13161    def __del__(self):
13162        if hasattr(self, 'ptr'):
13163            isl.isl_schedule_node_free(self.ptr)
13164    def __new__(cls, *args, **keywords):
13165        return super(schedule_node_sequence, cls).__new__(cls)
13166    def __str__(arg0):
13167        try:
13168            if not arg0.__class__ is schedule_node_sequence:
13169                arg0 = schedule_node_sequence(arg0)
13170        except:
13171            raise
13172        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
13173        res = cast(ptr, c_char_p).value.decode('ascii')
13174        libc.free(ptr)
13175        return res
13176    def __repr__(self):
13177        s = str(self)
13178        if '"' in s:
13179            return 'isl.schedule_node_sequence("""%s""")' % s
13180        else:
13181            return 'isl.schedule_node_sequence("%s")' % s
13182
13183isl.isl_schedule_node_copy.restype = c_void_p
13184isl.isl_schedule_node_copy.argtypes = [c_void_p]
13185isl.isl_schedule_node_free.restype = c_void_p
13186isl.isl_schedule_node_free.argtypes = [c_void_p]
13187isl.isl_schedule_node_to_str.restype = POINTER(c_char)
13188isl.isl_schedule_node_to_str.argtypes = [c_void_p]
13189
13190class schedule_node_set(schedule_node):
13191    def __init__(self, *args, **keywords):
13192        if "ptr" in keywords:
13193            self.ctx = keywords["ctx"]
13194            self.ptr = keywords["ptr"]
13195            return
13196        raise Error
13197    def __del__(self):
13198        if hasattr(self, 'ptr'):
13199            isl.isl_schedule_node_free(self.ptr)
13200    def __new__(cls, *args, **keywords):
13201        return super(schedule_node_set, cls).__new__(cls)
13202    def __str__(arg0):
13203        try:
13204            if not arg0.__class__ is schedule_node_set:
13205                arg0 = schedule_node_set(arg0)
13206        except:
13207            raise
13208        ptr = isl.isl_schedule_node_to_str(arg0.ptr)
13209        res = cast(ptr, c_char_p).value.decode('ascii')
13210        libc.free(ptr)
13211        return res
13212    def __repr__(self):
13213        s = str(self)
13214        if '"' in s:
13215            return 'isl.schedule_node_set("""%s""")' % s
13216        else:
13217            return 'isl.schedule_node_set("%s")' % s
13218
13219isl.isl_schedule_node_copy.restype = c_void_p
13220isl.isl_schedule_node_copy.argtypes = [c_void_p]
13221isl.isl_schedule_node_free.restype = c_void_p
13222isl.isl_schedule_node_free.argtypes = [c_void_p]
13223isl.isl_schedule_node_to_str.restype = POINTER(c_char)
13224isl.isl_schedule_node_to_str.argtypes = [c_void_p]
13225
13226class space(object):
13227    def __init__(self, *args, **keywords):
13228        if "ptr" in keywords:
13229            self.ctx = keywords["ctx"]
13230            self.ptr = keywords["ptr"]
13231            return
13232        raise Error
13233    def __del__(self):
13234        if hasattr(self, 'ptr'):
13235            isl.isl_space_free(self.ptr)
13236    def __str__(arg0):
13237        try:
13238            if not arg0.__class__ is space:
13239                arg0 = space(arg0)
13240        except:
13241            raise
13242        ptr = isl.isl_space_to_str(arg0.ptr)
13243        res = cast(ptr, c_char_p).value.decode('ascii')
13244        libc.free(ptr)
13245        return res
13246    def __repr__(self):
13247        s = str(self)
13248        if '"' in s:
13249            return 'isl.space("""%s""")' % s
13250        else:
13251            return 'isl.space("%s")' % s
13252    def add_named_tuple(*args):
13253        if len(args) == 3 and (args[1].__class__ is id or type(args[1]) == str) and type(args[2]) == int:
13254            args = list(args)
13255            try:
13256                if not args[1].__class__ is id:
13257                    args[1] = id(args[1])
13258            except:
13259                raise
13260            ctx = args[0].ctx
13261            res = isl.isl_space_add_named_tuple_id_ui(isl.isl_space_copy(args[0].ptr), isl.isl_id_copy(args[1].ptr), args[2])
13262            obj = space(ctx=ctx, ptr=res)
13263            return obj
13264        raise Error
13265    def add_unnamed_tuple(*args):
13266        if len(args) == 2 and type(args[1]) == int:
13267            ctx = args[0].ctx
13268            res = isl.isl_space_add_unnamed_tuple_ui(isl.isl_space_copy(args[0].ptr), args[1])
13269            obj = space(ctx=ctx, ptr=res)
13270            return obj
13271        raise Error
13272    def domain(arg0):
13273        try:
13274            if not arg0.__class__ is space:
13275                arg0 = space(arg0)
13276        except:
13277            raise
13278        ctx = arg0.ctx
13279        res = isl.isl_space_domain(isl.isl_space_copy(arg0.ptr))
13280        obj = space(ctx=ctx, ptr=res)
13281        return obj
13282    def flatten_domain(arg0):
13283        try:
13284            if not arg0.__class__ is space:
13285                arg0 = space(arg0)
13286        except:
13287            raise
13288        ctx = arg0.ctx
13289        res = isl.isl_space_flatten_domain(isl.isl_space_copy(arg0.ptr))
13290        obj = space(ctx=ctx, ptr=res)
13291        return obj
13292    def flatten_range(arg0):
13293        try:
13294            if not arg0.__class__ is space:
13295                arg0 = space(arg0)
13296        except:
13297            raise
13298        ctx = arg0.ctx
13299        res = isl.isl_space_flatten_range(isl.isl_space_copy(arg0.ptr))
13300        obj = space(ctx=ctx, ptr=res)
13301        return obj
13302    def is_equal(arg0, arg1):
13303        try:
13304            if not arg0.__class__ is space:
13305                arg0 = space(arg0)
13306        except:
13307            raise
13308        try:
13309            if not arg1.__class__ is space:
13310                arg1 = space(arg1)
13311        except:
13312            raise
13313        ctx = arg0.ctx
13314        res = isl.isl_space_is_equal(arg0.ptr, arg1.ptr)
13315        if res < 0:
13316            raise
13317        return bool(res)
13318    def is_wrapping(arg0):
13319        try:
13320            if not arg0.__class__ is space:
13321                arg0 = space(arg0)
13322        except:
13323            raise
13324        ctx = arg0.ctx
13325        res = isl.isl_space_is_wrapping(arg0.ptr)
13326        if res < 0:
13327            raise
13328        return bool(res)
13329    def map_from_set(arg0):
13330        try:
13331            if not arg0.__class__ is space:
13332                arg0 = space(arg0)
13333        except:
13334            raise
13335        ctx = arg0.ctx
13336        res = isl.isl_space_map_from_set(isl.isl_space_copy(arg0.ptr))
13337        obj = space(ctx=ctx, ptr=res)
13338        return obj
13339    def params(arg0):
13340        try:
13341            if not arg0.__class__ is space:
13342                arg0 = space(arg0)
13343        except:
13344            raise
13345        ctx = arg0.ctx
13346        res = isl.isl_space_params(isl.isl_space_copy(arg0.ptr))
13347        obj = space(ctx=ctx, ptr=res)
13348        return obj
13349    def range(arg0):
13350        try:
13351            if not arg0.__class__ is space:
13352                arg0 = space(arg0)
13353        except:
13354            raise
13355        ctx = arg0.ctx
13356        res = isl.isl_space_range(isl.isl_space_copy(arg0.ptr))
13357        obj = space(ctx=ctx, ptr=res)
13358        return obj
13359    @staticmethod
13360    def unit():
13361        ctx = Context.getDefaultInstance()
13362        res = isl.isl_space_unit(ctx)
13363        obj = space(ctx=ctx, ptr=res)
13364        return obj
13365    def unwrap(arg0):
13366        try:
13367            if not arg0.__class__ is space:
13368                arg0 = space(arg0)
13369        except:
13370            raise
13371        ctx = arg0.ctx
13372        res = isl.isl_space_unwrap(isl.isl_space_copy(arg0.ptr))
13373        obj = space(ctx=ctx, ptr=res)
13374        return obj
13375    def wrap(arg0):
13376        try:
13377            if not arg0.__class__ is space:
13378                arg0 = space(arg0)
13379        except:
13380            raise
13381        ctx = arg0.ctx
13382        res = isl.isl_space_wrap(isl.isl_space_copy(arg0.ptr))
13383        obj = space(ctx=ctx, ptr=res)
13384        return obj
13385
13386isl.isl_space_add_named_tuple_id_ui.restype = c_void_p
13387isl.isl_space_add_named_tuple_id_ui.argtypes = [c_void_p, c_void_p, c_int]
13388isl.isl_space_add_unnamed_tuple_ui.restype = c_void_p
13389isl.isl_space_add_unnamed_tuple_ui.argtypes = [c_void_p, c_int]
13390isl.isl_space_domain.restype = c_void_p
13391isl.isl_space_domain.argtypes = [c_void_p]
13392isl.isl_space_flatten_domain.restype = c_void_p
13393isl.isl_space_flatten_domain.argtypes = [c_void_p]
13394isl.isl_space_flatten_range.restype = c_void_p
13395isl.isl_space_flatten_range.argtypes = [c_void_p]
13396isl.isl_space_is_equal.argtypes = [c_void_p, c_void_p]
13397isl.isl_space_is_wrapping.argtypes = [c_void_p]
13398isl.isl_space_map_from_set.restype = c_void_p
13399isl.isl_space_map_from_set.argtypes = [c_void_p]
13400isl.isl_space_params.restype = c_void_p
13401isl.isl_space_params.argtypes = [c_void_p]
13402isl.isl_space_range.restype = c_void_p
13403isl.isl_space_range.argtypes = [c_void_p]
13404isl.isl_space_unit.restype = c_void_p
13405isl.isl_space_unit.argtypes = [Context]
13406isl.isl_space_unwrap.restype = c_void_p
13407isl.isl_space_unwrap.argtypes = [c_void_p]
13408isl.isl_space_wrap.restype = c_void_p
13409isl.isl_space_wrap.argtypes = [c_void_p]
13410isl.isl_space_copy.restype = c_void_p
13411isl.isl_space_copy.argtypes = [c_void_p]
13412isl.isl_space_free.restype = c_void_p
13413isl.isl_space_free.argtypes = [c_void_p]
13414isl.isl_space_to_str.restype = POINTER(c_char)
13415isl.isl_space_to_str.argtypes = [c_void_p]
13416
13417class union_access_info(object):
13418    def __init__(self, *args, **keywords):
13419        if "ptr" in keywords:
13420            self.ctx = keywords["ctx"]
13421            self.ptr = keywords["ptr"]
13422            return
13423        if len(args) == 1 and args[0].__class__ is union_map:
13424            self.ctx = Context.getDefaultInstance()
13425            self.ptr = isl.isl_union_access_info_from_sink(isl.isl_union_map_copy(args[0].ptr))
13426            return
13427        raise Error
13428    def __del__(self):
13429        if hasattr(self, 'ptr'):
13430            isl.isl_union_access_info_free(self.ptr)
13431    def __str__(arg0):
13432        try:
13433            if not arg0.__class__ is union_access_info:
13434                arg0 = union_access_info(arg0)
13435        except:
13436            raise
13437        ptr = isl.isl_union_access_info_to_str(arg0.ptr)
13438        res = cast(ptr, c_char_p).value.decode('ascii')
13439        libc.free(ptr)
13440        return res
13441    def __repr__(self):
13442        s = str(self)
13443        if '"' in s:
13444            return 'isl.union_access_info("""%s""")' % s
13445        else:
13446            return 'isl.union_access_info("%s")' % s
13447    def compute_flow(arg0):
13448        try:
13449            if not arg0.__class__ is union_access_info:
13450                arg0 = union_access_info(arg0)
13451        except:
13452            raise
13453        ctx = arg0.ctx
13454        res = isl.isl_union_access_info_compute_flow(isl.isl_union_access_info_copy(arg0.ptr))
13455        obj = union_flow(ctx=ctx, ptr=res)
13456        return obj
13457    def set_kill(arg0, arg1):
13458        try:
13459            if not arg0.__class__ is union_access_info:
13460                arg0 = union_access_info(arg0)
13461        except:
13462            raise
13463        try:
13464            if not arg1.__class__ is union_map:
13465                arg1 = union_map(arg1)
13466        except:
13467            raise
13468        ctx = arg0.ctx
13469        res = isl.isl_union_access_info_set_kill(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
13470        obj = union_access_info(ctx=ctx, ptr=res)
13471        return obj
13472    def set_may_source(arg0, arg1):
13473        try:
13474            if not arg0.__class__ is union_access_info:
13475                arg0 = union_access_info(arg0)
13476        except:
13477            raise
13478        try:
13479            if not arg1.__class__ is union_map:
13480                arg1 = union_map(arg1)
13481        except:
13482            raise
13483        ctx = arg0.ctx
13484        res = isl.isl_union_access_info_set_may_source(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
13485        obj = union_access_info(ctx=ctx, ptr=res)
13486        return obj
13487    def set_must_source(arg0, arg1):
13488        try:
13489            if not arg0.__class__ is union_access_info:
13490                arg0 = union_access_info(arg0)
13491        except:
13492            raise
13493        try:
13494            if not arg1.__class__ is union_map:
13495                arg1 = union_map(arg1)
13496        except:
13497            raise
13498        ctx = arg0.ctx
13499        res = isl.isl_union_access_info_set_must_source(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
13500        obj = union_access_info(ctx=ctx, ptr=res)
13501        return obj
13502    def set_schedule(arg0, arg1):
13503        try:
13504            if not arg0.__class__ is union_access_info:
13505                arg0 = union_access_info(arg0)
13506        except:
13507            raise
13508        try:
13509            if not arg1.__class__ is schedule:
13510                arg1 = schedule(arg1)
13511        except:
13512            raise
13513        ctx = arg0.ctx
13514        res = isl.isl_union_access_info_set_schedule(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_schedule_copy(arg1.ptr))
13515        obj = union_access_info(ctx=ctx, ptr=res)
13516        return obj
13517    def set_schedule_map(arg0, arg1):
13518        try:
13519            if not arg0.__class__ is union_access_info:
13520                arg0 = union_access_info(arg0)
13521        except:
13522            raise
13523        try:
13524            if not arg1.__class__ is union_map:
13525                arg1 = union_map(arg1)
13526        except:
13527            raise
13528        ctx = arg0.ctx
13529        res = isl.isl_union_access_info_set_schedule_map(isl.isl_union_access_info_copy(arg0.ptr), isl.isl_union_map_copy(arg1.ptr))
13530        obj = union_access_info(ctx=ctx, ptr=res)
13531        return obj
13532
13533isl.isl_union_access_info_from_sink.restype = c_void_p
13534isl.isl_union_access_info_from_sink.argtypes = [c_void_p]
13535isl.isl_union_access_info_compute_flow.restype = c_void_p
13536isl.isl_union_access_info_compute_flow.argtypes = [c_void_p]
13537isl.isl_union_access_info_set_kill.restype = c_void_p
13538isl.isl_union_access_info_set_kill.argtypes = [c_void_p, c_void_p]
13539isl.isl_union_access_info_set_may_source.restype = c_void_p
13540isl.isl_union_access_info_set_may_source.argtypes = [c_void_p, c_void_p]
13541isl.isl_union_access_info_set_must_source.restype = c_void_p
13542isl.isl_union_access_info_set_must_source.argtypes = [c_void_p, c_void_p]
13543isl.isl_union_access_info_set_schedule.restype = c_void_p
13544isl.isl_union_access_info_set_schedule.argtypes = [c_void_p, c_void_p]
13545isl.isl_union_access_info_set_schedule_map.restype = c_void_p
13546isl.isl_union_access_info_set_schedule_map.argtypes = [c_void_p, c_void_p]
13547isl.isl_union_access_info_copy.restype = c_void_p
13548isl.isl_union_access_info_copy.argtypes = [c_void_p]
13549isl.isl_union_access_info_free.restype = c_void_p
13550isl.isl_union_access_info_free.argtypes = [c_void_p]
13551isl.isl_union_access_info_to_str.restype = POINTER(c_char)
13552isl.isl_union_access_info_to_str.argtypes = [c_void_p]
13553
13554class union_flow(object):
13555    def __init__(self, *args, **keywords):
13556        if "ptr" in keywords:
13557            self.ctx = keywords["ctx"]
13558            self.ptr = keywords["ptr"]
13559            return
13560        raise Error
13561    def __del__(self):
13562        if hasattr(self, 'ptr'):
13563            isl.isl_union_flow_free(self.ptr)
13564    def __str__(arg0):
13565        try:
13566            if not arg0.__class__ is union_flow:
13567                arg0 = union_flow(arg0)
13568        except:
13569            raise
13570        ptr = isl.isl_union_flow_to_str(arg0.ptr)
13571        res = cast(ptr, c_char_p).value.decode('ascii')
13572        libc.free(ptr)
13573        return res
13574    def __repr__(self):
13575        s = str(self)
13576        if '"' in s:
13577            return 'isl.union_flow("""%s""")' % s
13578        else:
13579            return 'isl.union_flow("%s")' % s
13580    def full_may_dependence(arg0):
13581        try:
13582            if not arg0.__class__ is union_flow:
13583                arg0 = union_flow(arg0)
13584        except:
13585            raise
13586        ctx = arg0.ctx
13587        res = isl.isl_union_flow_get_full_may_dependence(arg0.ptr)
13588        obj = union_map(ctx=ctx, ptr=res)
13589        return obj
13590    def get_full_may_dependence(arg0):
13591        return arg0.full_may_dependence()
13592    def full_must_dependence(arg0):
13593        try:
13594            if not arg0.__class__ is union_flow:
13595                arg0 = union_flow(arg0)
13596        except:
13597            raise
13598        ctx = arg0.ctx
13599        res = isl.isl_union_flow_get_full_must_dependence(arg0.ptr)
13600        obj = union_map(ctx=ctx, ptr=res)
13601        return obj
13602    def get_full_must_dependence(arg0):
13603        return arg0.full_must_dependence()
13604    def may_dependence(arg0):
13605        try:
13606            if not arg0.__class__ is union_flow:
13607                arg0 = union_flow(arg0)
13608        except:
13609            raise
13610        ctx = arg0.ctx
13611        res = isl.isl_union_flow_get_may_dependence(arg0.ptr)
13612        obj = union_map(ctx=ctx, ptr=res)
13613        return obj
13614    def get_may_dependence(arg0):
13615        return arg0.may_dependence()
13616    def may_no_source(arg0):
13617        try:
13618            if not arg0.__class__ is union_flow:
13619                arg0 = union_flow(arg0)
13620        except:
13621            raise
13622        ctx = arg0.ctx
13623        res = isl.isl_union_flow_get_may_no_source(arg0.ptr)
13624        obj = union_map(ctx=ctx, ptr=res)
13625        return obj
13626    def get_may_no_source(arg0):
13627        return arg0.may_no_source()
13628    def must_dependence(arg0):
13629        try:
13630            if not arg0.__class__ is union_flow:
13631                arg0 = union_flow(arg0)
13632        except:
13633            raise
13634        ctx = arg0.ctx
13635        res = isl.isl_union_flow_get_must_dependence(arg0.ptr)
13636        obj = union_map(ctx=ctx, ptr=res)
13637        return obj
13638    def get_must_dependence(arg0):
13639        return arg0.must_dependence()
13640    def must_no_source(arg0):
13641        try:
13642            if not arg0.__class__ is union_flow:
13643                arg0 = union_flow(arg0)
13644        except:
13645            raise
13646        ctx = arg0.ctx
13647        res = isl.isl_union_flow_get_must_no_source(arg0.ptr)
13648        obj = union_map(ctx=ctx, ptr=res)
13649        return obj
13650    def get_must_no_source(arg0):
13651        return arg0.must_no_source()
13652
13653isl.isl_union_flow_get_full_may_dependence.restype = c_void_p
13654isl.isl_union_flow_get_full_may_dependence.argtypes = [c_void_p]
13655isl.isl_union_flow_get_full_must_dependence.restype = c_void_p
13656isl.isl_union_flow_get_full_must_dependence.argtypes = [c_void_p]
13657isl.isl_union_flow_get_may_dependence.restype = c_void_p
13658isl.isl_union_flow_get_may_dependence.argtypes = [c_void_p]
13659isl.isl_union_flow_get_may_no_source.restype = c_void_p
13660isl.isl_union_flow_get_may_no_source.argtypes = [c_void_p]
13661isl.isl_union_flow_get_must_dependence.restype = c_void_p
13662isl.isl_union_flow_get_must_dependence.argtypes = [c_void_p]
13663isl.isl_union_flow_get_must_no_source.restype = c_void_p
13664isl.isl_union_flow_get_must_no_source.argtypes = [c_void_p]
13665isl.isl_union_flow_copy.restype = c_void_p
13666isl.isl_union_flow_copy.argtypes = [c_void_p]
13667isl.isl_union_flow_free.restype = c_void_p
13668isl.isl_union_flow_free.argtypes = [c_void_p]
13669isl.isl_union_flow_to_str.restype = POINTER(c_char)
13670isl.isl_union_flow_to_str.argtypes = [c_void_p]
13671
13672class union_pw_aff_list(object):
13673    def __init__(self, *args, **keywords):
13674        if "ptr" in keywords:
13675            self.ctx = keywords["ctx"]
13676            self.ptr = keywords["ptr"]
13677            return
13678        if len(args) == 1 and type(args[0]) == int:
13679            self.ctx = Context.getDefaultInstance()
13680            self.ptr = isl.isl_union_pw_aff_list_alloc(self.ctx, args[0])
13681            return
13682        if len(args) == 1 and args[0].__class__ is union_pw_aff:
13683            self.ctx = Context.getDefaultInstance()
13684            self.ptr = isl.isl_union_pw_aff_list_from_union_pw_aff(isl.isl_union_pw_aff_copy(args[0].ptr))
13685            return
13686        raise Error
13687    def __del__(self):
13688        if hasattr(self, 'ptr'):
13689            isl.isl_union_pw_aff_list_free(self.ptr)
13690    def __str__(arg0):
13691        try:
13692            if not arg0.__class__ is union_pw_aff_list:
13693                arg0 = union_pw_aff_list(arg0)
13694        except:
13695            raise
13696        ptr = isl.isl_union_pw_aff_list_to_str(arg0.ptr)
13697        res = cast(ptr, c_char_p).value.decode('ascii')
13698        libc.free(ptr)
13699        return res
13700    def __repr__(self):
13701        s = str(self)
13702        if '"' in s:
13703            return 'isl.union_pw_aff_list("""%s""")' % s
13704        else:
13705            return 'isl.union_pw_aff_list("%s")' % s
13706    def add(arg0, arg1):
13707        try:
13708            if not arg0.__class__ is union_pw_aff_list:
13709                arg0 = union_pw_aff_list(arg0)
13710        except:
13711            raise
13712        try:
13713            if not arg1.__class__ is union_pw_aff:
13714                arg1 = union_pw_aff(arg1)
13715        except:
13716            raise
13717        ctx = arg0.ctx
13718        res = isl.isl_union_pw_aff_list_add(isl.isl_union_pw_aff_list_copy(arg0.ptr), isl.isl_union_pw_aff_copy(arg1.ptr))
13719        obj = union_pw_aff_list(ctx=ctx, ptr=res)
13720        return obj
13721    def clear(arg0):
13722        try:
13723            if not arg0.__class__ is union_pw_aff_list:
13724                arg0 = union_pw_aff_list(arg0)
13725        except:
13726            raise
13727        ctx = arg0.ctx
13728        res = isl.isl_union_pw_aff_list_clear(isl.isl_union_pw_aff_list_copy(arg0.ptr))
13729        obj = union_pw_aff_list(ctx=ctx, ptr=res)
13730        return obj
13731    def concat(arg0, arg1):
13732        try:
13733            if not arg0.__class__ is union_pw_aff_list:
13734                arg0 = union_pw_aff_list(arg0)
13735        except:
13736            raise
13737        try:
13738            if not arg1.__class__ is union_pw_aff_list:
13739                arg1 = union_pw_aff_list(arg1)
13740        except:
13741            raise
13742        ctx = arg0.ctx
13743        res = isl.isl_union_pw_aff_list_concat(isl.isl_union_pw_aff_list_copy(arg0.ptr), isl.isl_union_pw_aff_list_copy(arg1.ptr))
13744        obj = union_pw_aff_list(ctx=ctx, ptr=res)
13745        return obj
13746    def drop(arg0, arg1, arg2):
13747        try:
13748            if not arg0.__class__ is union_pw_aff_list:
13749                arg0 = union_pw_aff_list(arg0)
13750        except:
13751            raise
13752        ctx = arg0.ctx
13753        res = isl.isl_union_pw_aff_list_drop(isl.isl_union_pw_aff_list_copy(arg0.ptr), arg1, arg2)
13754        obj = union_pw_aff_list(ctx=ctx, ptr=res)
13755        return obj
13756    def foreach(arg0, arg1):
13757        try:
13758            if not arg0.__class__ is union_pw_aff_list:
13759                arg0 = union_pw_aff_list(arg0)
13760        except:
13761            raise
13762        exc_info = [None]
13763        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
13764        def cb_func(cb_arg0, cb_arg1):
13765            cb_arg0 = union_pw_aff(ctx=arg0.ctx, ptr=(cb_arg0))
13766            try:
13767                arg1(cb_arg0)
13768            except:
13769                import sys
13770                exc_info[0] = sys.exc_info()
13771                return -1
13772            return 0
13773        cb = fn(cb_func)
13774        ctx = arg0.ctx
13775        res = isl.isl_union_pw_aff_list_foreach(arg0.ptr, cb, None)
13776        if exc_info[0] != None:
13777            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
13778        if res < 0:
13779            raise
13780    def at(arg0, arg1):
13781        try:
13782            if not arg0.__class__ is union_pw_aff_list:
13783                arg0 = union_pw_aff_list(arg0)
13784        except:
13785            raise
13786        ctx = arg0.ctx
13787        res = isl.isl_union_pw_aff_list_get_at(arg0.ptr, arg1)
13788        obj = union_pw_aff(ctx=ctx, ptr=res)
13789        return obj
13790    def get_at(arg0, arg1):
13791        return arg0.at(arg1)
13792    def insert(arg0, arg1, arg2):
13793        try:
13794            if not arg0.__class__ is union_pw_aff_list:
13795                arg0 = union_pw_aff_list(arg0)
13796        except:
13797            raise
13798        try:
13799            if not arg2.__class__ is union_pw_aff:
13800                arg2 = union_pw_aff(arg2)
13801        except:
13802            raise
13803        ctx = arg0.ctx
13804        res = isl.isl_union_pw_aff_list_insert(isl.isl_union_pw_aff_list_copy(arg0.ptr), arg1, isl.isl_union_pw_aff_copy(arg2.ptr))
13805        obj = union_pw_aff_list(ctx=ctx, ptr=res)
13806        return obj
13807    def size(arg0):
13808        try:
13809            if not arg0.__class__ is union_pw_aff_list:
13810                arg0 = union_pw_aff_list(arg0)
13811        except:
13812            raise
13813        ctx = arg0.ctx
13814        res = isl.isl_union_pw_aff_list_size(arg0.ptr)
13815        if res < 0:
13816            raise
13817        return int(res)
13818
13819isl.isl_union_pw_aff_list_alloc.restype = c_void_p
13820isl.isl_union_pw_aff_list_alloc.argtypes = [Context, c_int]
13821isl.isl_union_pw_aff_list_from_union_pw_aff.restype = c_void_p
13822isl.isl_union_pw_aff_list_from_union_pw_aff.argtypes = [c_void_p]
13823isl.isl_union_pw_aff_list_add.restype = c_void_p
13824isl.isl_union_pw_aff_list_add.argtypes = [c_void_p, c_void_p]
13825isl.isl_union_pw_aff_list_clear.restype = c_void_p
13826isl.isl_union_pw_aff_list_clear.argtypes = [c_void_p]
13827isl.isl_union_pw_aff_list_concat.restype = c_void_p
13828isl.isl_union_pw_aff_list_concat.argtypes = [c_void_p, c_void_p]
13829isl.isl_union_pw_aff_list_drop.restype = c_void_p
13830isl.isl_union_pw_aff_list_drop.argtypes = [c_void_p, c_int, c_int]
13831isl.isl_union_pw_aff_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
13832isl.isl_union_pw_aff_list_get_at.restype = c_void_p
13833isl.isl_union_pw_aff_list_get_at.argtypes = [c_void_p, c_int]
13834isl.isl_union_pw_aff_list_insert.restype = c_void_p
13835isl.isl_union_pw_aff_list_insert.argtypes = [c_void_p, c_int, c_void_p]
13836isl.isl_union_pw_aff_list_size.argtypes = [c_void_p]
13837isl.isl_union_pw_aff_list_copy.restype = c_void_p
13838isl.isl_union_pw_aff_list_copy.argtypes = [c_void_p]
13839isl.isl_union_pw_aff_list_free.restype = c_void_p
13840isl.isl_union_pw_aff_list_free.argtypes = [c_void_p]
13841isl.isl_union_pw_aff_list_to_str.restype = POINTER(c_char)
13842isl.isl_union_pw_aff_list_to_str.argtypes = [c_void_p]
13843
13844class union_set_list(object):
13845    def __init__(self, *args, **keywords):
13846        if "ptr" in keywords:
13847            self.ctx = keywords["ctx"]
13848            self.ptr = keywords["ptr"]
13849            return
13850        if len(args) == 1 and type(args[0]) == int:
13851            self.ctx = Context.getDefaultInstance()
13852            self.ptr = isl.isl_union_set_list_alloc(self.ctx, args[0])
13853            return
13854        if len(args) == 1 and args[0].__class__ is union_set:
13855            self.ctx = Context.getDefaultInstance()
13856            self.ptr = isl.isl_union_set_list_from_union_set(isl.isl_union_set_copy(args[0].ptr))
13857            return
13858        raise Error
13859    def __del__(self):
13860        if hasattr(self, 'ptr'):
13861            isl.isl_union_set_list_free(self.ptr)
13862    def __str__(arg0):
13863        try:
13864            if not arg0.__class__ is union_set_list:
13865                arg0 = union_set_list(arg0)
13866        except:
13867            raise
13868        ptr = isl.isl_union_set_list_to_str(arg0.ptr)
13869        res = cast(ptr, c_char_p).value.decode('ascii')
13870        libc.free(ptr)
13871        return res
13872    def __repr__(self):
13873        s = str(self)
13874        if '"' in s:
13875            return 'isl.union_set_list("""%s""")' % s
13876        else:
13877            return 'isl.union_set_list("%s")' % s
13878    def add(arg0, arg1):
13879        try:
13880            if not arg0.__class__ is union_set_list:
13881                arg0 = union_set_list(arg0)
13882        except:
13883            raise
13884        try:
13885            if not arg1.__class__ is union_set:
13886                arg1 = union_set(arg1)
13887        except:
13888            raise
13889        ctx = arg0.ctx
13890        res = isl.isl_union_set_list_add(isl.isl_union_set_list_copy(arg0.ptr), isl.isl_union_set_copy(arg1.ptr))
13891        obj = union_set_list(ctx=ctx, ptr=res)
13892        return obj
13893    def clear(arg0):
13894        try:
13895            if not arg0.__class__ is union_set_list:
13896                arg0 = union_set_list(arg0)
13897        except:
13898            raise
13899        ctx = arg0.ctx
13900        res = isl.isl_union_set_list_clear(isl.isl_union_set_list_copy(arg0.ptr))
13901        obj = union_set_list(ctx=ctx, ptr=res)
13902        return obj
13903    def concat(arg0, arg1):
13904        try:
13905            if not arg0.__class__ is union_set_list:
13906                arg0 = union_set_list(arg0)
13907        except:
13908            raise
13909        try:
13910            if not arg1.__class__ is union_set_list:
13911                arg1 = union_set_list(arg1)
13912        except:
13913            raise
13914        ctx = arg0.ctx
13915        res = isl.isl_union_set_list_concat(isl.isl_union_set_list_copy(arg0.ptr), isl.isl_union_set_list_copy(arg1.ptr))
13916        obj = union_set_list(ctx=ctx, ptr=res)
13917        return obj
13918    def drop(arg0, arg1, arg2):
13919        try:
13920            if not arg0.__class__ is union_set_list:
13921                arg0 = union_set_list(arg0)
13922        except:
13923            raise
13924        ctx = arg0.ctx
13925        res = isl.isl_union_set_list_drop(isl.isl_union_set_list_copy(arg0.ptr), arg1, arg2)
13926        obj = union_set_list(ctx=ctx, ptr=res)
13927        return obj
13928    def foreach(arg0, arg1):
13929        try:
13930            if not arg0.__class__ is union_set_list:
13931                arg0 = union_set_list(arg0)
13932        except:
13933            raise
13934        exc_info = [None]
13935        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
13936        def cb_func(cb_arg0, cb_arg1):
13937            cb_arg0 = union_set(ctx=arg0.ctx, ptr=(cb_arg0))
13938            try:
13939                arg1(cb_arg0)
13940            except:
13941                import sys
13942                exc_info[0] = sys.exc_info()
13943                return -1
13944            return 0
13945        cb = fn(cb_func)
13946        ctx = arg0.ctx
13947        res = isl.isl_union_set_list_foreach(arg0.ptr, cb, None)
13948        if exc_info[0] != None:
13949            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
13950        if res < 0:
13951            raise
13952    def at(arg0, arg1):
13953        try:
13954            if not arg0.__class__ is union_set_list:
13955                arg0 = union_set_list(arg0)
13956        except:
13957            raise
13958        ctx = arg0.ctx
13959        res = isl.isl_union_set_list_get_at(arg0.ptr, arg1)
13960        obj = union_set(ctx=ctx, ptr=res)
13961        return obj
13962    def get_at(arg0, arg1):
13963        return arg0.at(arg1)
13964    def insert(arg0, arg1, arg2):
13965        try:
13966            if not arg0.__class__ is union_set_list:
13967                arg0 = union_set_list(arg0)
13968        except:
13969            raise
13970        try:
13971            if not arg2.__class__ is union_set:
13972                arg2 = union_set(arg2)
13973        except:
13974            raise
13975        ctx = arg0.ctx
13976        res = isl.isl_union_set_list_insert(isl.isl_union_set_list_copy(arg0.ptr), arg1, isl.isl_union_set_copy(arg2.ptr))
13977        obj = union_set_list(ctx=ctx, ptr=res)
13978        return obj
13979    def size(arg0):
13980        try:
13981            if not arg0.__class__ is union_set_list:
13982                arg0 = union_set_list(arg0)
13983        except:
13984            raise
13985        ctx = arg0.ctx
13986        res = isl.isl_union_set_list_size(arg0.ptr)
13987        if res < 0:
13988            raise
13989        return int(res)
13990
13991isl.isl_union_set_list_alloc.restype = c_void_p
13992isl.isl_union_set_list_alloc.argtypes = [Context, c_int]
13993isl.isl_union_set_list_from_union_set.restype = c_void_p
13994isl.isl_union_set_list_from_union_set.argtypes = [c_void_p]
13995isl.isl_union_set_list_add.restype = c_void_p
13996isl.isl_union_set_list_add.argtypes = [c_void_p, c_void_p]
13997isl.isl_union_set_list_clear.restype = c_void_p
13998isl.isl_union_set_list_clear.argtypes = [c_void_p]
13999isl.isl_union_set_list_concat.restype = c_void_p
14000isl.isl_union_set_list_concat.argtypes = [c_void_p, c_void_p]
14001isl.isl_union_set_list_drop.restype = c_void_p
14002isl.isl_union_set_list_drop.argtypes = [c_void_p, c_int, c_int]
14003isl.isl_union_set_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
14004isl.isl_union_set_list_get_at.restype = c_void_p
14005isl.isl_union_set_list_get_at.argtypes = [c_void_p, c_int]
14006isl.isl_union_set_list_insert.restype = c_void_p
14007isl.isl_union_set_list_insert.argtypes = [c_void_p, c_int, c_void_p]
14008isl.isl_union_set_list_size.argtypes = [c_void_p]
14009isl.isl_union_set_list_copy.restype = c_void_p
14010isl.isl_union_set_list_copy.argtypes = [c_void_p]
14011isl.isl_union_set_list_free.restype = c_void_p
14012isl.isl_union_set_list_free.argtypes = [c_void_p]
14013isl.isl_union_set_list_to_str.restype = POINTER(c_char)
14014isl.isl_union_set_list_to_str.argtypes = [c_void_p]
14015
14016class val(object):
14017    def __init__(self, *args, **keywords):
14018        if "ptr" in keywords:
14019            self.ctx = keywords["ctx"]
14020            self.ptr = keywords["ptr"]
14021            return
14022        if len(args) == 1 and type(args[0]) == int:
14023            self.ctx = Context.getDefaultInstance()
14024            self.ptr = isl.isl_val_int_from_si(self.ctx, args[0])
14025            return
14026        if len(args) == 1 and type(args[0]) == str:
14027            self.ctx = Context.getDefaultInstance()
14028            self.ptr = isl.isl_val_read_from_str(self.ctx, args[0].encode('ascii'))
14029            return
14030        raise Error
14031    def __del__(self):
14032        if hasattr(self, 'ptr'):
14033            isl.isl_val_free(self.ptr)
14034    def __str__(arg0):
14035        try:
14036            if not arg0.__class__ is val:
14037                arg0 = val(arg0)
14038        except:
14039            raise
14040        ptr = isl.isl_val_to_str(arg0.ptr)
14041        res = cast(ptr, c_char_p).value.decode('ascii')
14042        libc.free(ptr)
14043        return res
14044    def __repr__(self):
14045        s = str(self)
14046        if '"' in s:
14047            return 'isl.val("""%s""")' % s
14048        else:
14049            return 'isl.val("%s")' % s
14050    def abs(arg0):
14051        try:
14052            if not arg0.__class__ is val:
14053                arg0 = val(arg0)
14054        except:
14055            raise
14056        ctx = arg0.ctx
14057        res = isl.isl_val_abs(isl.isl_val_copy(arg0.ptr))
14058        obj = val(ctx=ctx, ptr=res)
14059        return obj
14060    def abs_eq(arg0, arg1):
14061        try:
14062            if not arg0.__class__ is val:
14063                arg0 = val(arg0)
14064        except:
14065            raise
14066        try:
14067            if not arg1.__class__ is val:
14068                arg1 = val(arg1)
14069        except:
14070            raise
14071        ctx = arg0.ctx
14072        res = isl.isl_val_abs_eq(arg0.ptr, arg1.ptr)
14073        if res < 0:
14074            raise
14075        return bool(res)
14076    def add(arg0, arg1):
14077        try:
14078            if not arg0.__class__ is val:
14079                arg0 = val(arg0)
14080        except:
14081            raise
14082        try:
14083            if not arg1.__class__ is val:
14084                arg1 = val(arg1)
14085        except:
14086            raise
14087        ctx = arg0.ctx
14088        res = isl.isl_val_add(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14089        obj = val(ctx=ctx, ptr=res)
14090        return obj
14091    def ceil(arg0):
14092        try:
14093            if not arg0.__class__ is val:
14094                arg0 = val(arg0)
14095        except:
14096            raise
14097        ctx = arg0.ctx
14098        res = isl.isl_val_ceil(isl.isl_val_copy(arg0.ptr))
14099        obj = val(ctx=ctx, ptr=res)
14100        return obj
14101    def cmp_si(arg0, arg1):
14102        try:
14103            if not arg0.__class__ is val:
14104                arg0 = val(arg0)
14105        except:
14106            raise
14107        ctx = arg0.ctx
14108        res = isl.isl_val_cmp_si(arg0.ptr, arg1)
14109        return res
14110    def div(arg0, arg1):
14111        try:
14112            if not arg0.__class__ is val:
14113                arg0 = val(arg0)
14114        except:
14115            raise
14116        try:
14117            if not arg1.__class__ is val:
14118                arg1 = val(arg1)
14119        except:
14120            raise
14121        ctx = arg0.ctx
14122        res = isl.isl_val_div(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14123        obj = val(ctx=ctx, ptr=res)
14124        return obj
14125    def eq(arg0, arg1):
14126        try:
14127            if not arg0.__class__ is val:
14128                arg0 = val(arg0)
14129        except:
14130            raise
14131        try:
14132            if not arg1.__class__ is val:
14133                arg1 = val(arg1)
14134        except:
14135            raise
14136        ctx = arg0.ctx
14137        res = isl.isl_val_eq(arg0.ptr, arg1.ptr)
14138        if res < 0:
14139            raise
14140        return bool(res)
14141    def floor(arg0):
14142        try:
14143            if not arg0.__class__ is val:
14144                arg0 = val(arg0)
14145        except:
14146            raise
14147        ctx = arg0.ctx
14148        res = isl.isl_val_floor(isl.isl_val_copy(arg0.ptr))
14149        obj = val(ctx=ctx, ptr=res)
14150        return obj
14151    def gcd(arg0, arg1):
14152        try:
14153            if not arg0.__class__ is val:
14154                arg0 = val(arg0)
14155        except:
14156            raise
14157        try:
14158            if not arg1.__class__ is val:
14159                arg1 = val(arg1)
14160        except:
14161            raise
14162        ctx = arg0.ctx
14163        res = isl.isl_val_gcd(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14164        obj = val(ctx=ctx, ptr=res)
14165        return obj
14166    def ge(arg0, arg1):
14167        try:
14168            if not arg0.__class__ is val:
14169                arg0 = val(arg0)
14170        except:
14171            raise
14172        try:
14173            if not arg1.__class__ is val:
14174                arg1 = val(arg1)
14175        except:
14176            raise
14177        ctx = arg0.ctx
14178        res = isl.isl_val_ge(arg0.ptr, arg1.ptr)
14179        if res < 0:
14180            raise
14181        return bool(res)
14182    def den_si(arg0):
14183        try:
14184            if not arg0.__class__ is val:
14185                arg0 = val(arg0)
14186        except:
14187            raise
14188        ctx = arg0.ctx
14189        res = isl.isl_val_get_den_si(arg0.ptr)
14190        return res
14191    def get_den_si(arg0):
14192        return arg0.den_si()
14193    def num_si(arg0):
14194        try:
14195            if not arg0.__class__ is val:
14196                arg0 = val(arg0)
14197        except:
14198            raise
14199        ctx = arg0.ctx
14200        res = isl.isl_val_get_num_si(arg0.ptr)
14201        return res
14202    def get_num_si(arg0):
14203        return arg0.num_si()
14204    def gt(arg0, arg1):
14205        try:
14206            if not arg0.__class__ is val:
14207                arg0 = val(arg0)
14208        except:
14209            raise
14210        try:
14211            if not arg1.__class__ is val:
14212                arg1 = val(arg1)
14213        except:
14214            raise
14215        ctx = arg0.ctx
14216        res = isl.isl_val_gt(arg0.ptr, arg1.ptr)
14217        if res < 0:
14218            raise
14219        return bool(res)
14220    @staticmethod
14221    def infty():
14222        ctx = Context.getDefaultInstance()
14223        res = isl.isl_val_infty(ctx)
14224        obj = val(ctx=ctx, ptr=res)
14225        return obj
14226    def inv(arg0):
14227        try:
14228            if not arg0.__class__ is val:
14229                arg0 = val(arg0)
14230        except:
14231            raise
14232        ctx = arg0.ctx
14233        res = isl.isl_val_inv(isl.isl_val_copy(arg0.ptr))
14234        obj = val(ctx=ctx, ptr=res)
14235        return obj
14236    def is_divisible_by(arg0, arg1):
14237        try:
14238            if not arg0.__class__ is val:
14239                arg0 = val(arg0)
14240        except:
14241            raise
14242        try:
14243            if not arg1.__class__ is val:
14244                arg1 = val(arg1)
14245        except:
14246            raise
14247        ctx = arg0.ctx
14248        res = isl.isl_val_is_divisible_by(arg0.ptr, arg1.ptr)
14249        if res < 0:
14250            raise
14251        return bool(res)
14252    def is_infty(arg0):
14253        try:
14254            if not arg0.__class__ is val:
14255                arg0 = val(arg0)
14256        except:
14257            raise
14258        ctx = arg0.ctx
14259        res = isl.isl_val_is_infty(arg0.ptr)
14260        if res < 0:
14261            raise
14262        return bool(res)
14263    def is_int(arg0):
14264        try:
14265            if not arg0.__class__ is val:
14266                arg0 = val(arg0)
14267        except:
14268            raise
14269        ctx = arg0.ctx
14270        res = isl.isl_val_is_int(arg0.ptr)
14271        if res < 0:
14272            raise
14273        return bool(res)
14274    def is_nan(arg0):
14275        try:
14276            if not arg0.__class__ is val:
14277                arg0 = val(arg0)
14278        except:
14279            raise
14280        ctx = arg0.ctx
14281        res = isl.isl_val_is_nan(arg0.ptr)
14282        if res < 0:
14283            raise
14284        return bool(res)
14285    def is_neg(arg0):
14286        try:
14287            if not arg0.__class__ is val:
14288                arg0 = val(arg0)
14289        except:
14290            raise
14291        ctx = arg0.ctx
14292        res = isl.isl_val_is_neg(arg0.ptr)
14293        if res < 0:
14294            raise
14295        return bool(res)
14296    def is_neginfty(arg0):
14297        try:
14298            if not arg0.__class__ is val:
14299                arg0 = val(arg0)
14300        except:
14301            raise
14302        ctx = arg0.ctx
14303        res = isl.isl_val_is_neginfty(arg0.ptr)
14304        if res < 0:
14305            raise
14306        return bool(res)
14307    def is_negone(arg0):
14308        try:
14309            if not arg0.__class__ is val:
14310                arg0 = val(arg0)
14311        except:
14312            raise
14313        ctx = arg0.ctx
14314        res = isl.isl_val_is_negone(arg0.ptr)
14315        if res < 0:
14316            raise
14317        return bool(res)
14318    def is_nonneg(arg0):
14319        try:
14320            if not arg0.__class__ is val:
14321                arg0 = val(arg0)
14322        except:
14323            raise
14324        ctx = arg0.ctx
14325        res = isl.isl_val_is_nonneg(arg0.ptr)
14326        if res < 0:
14327            raise
14328        return bool(res)
14329    def is_nonpos(arg0):
14330        try:
14331            if not arg0.__class__ is val:
14332                arg0 = val(arg0)
14333        except:
14334            raise
14335        ctx = arg0.ctx
14336        res = isl.isl_val_is_nonpos(arg0.ptr)
14337        if res < 0:
14338            raise
14339        return bool(res)
14340    def is_one(arg0):
14341        try:
14342            if not arg0.__class__ is val:
14343                arg0 = val(arg0)
14344        except:
14345            raise
14346        ctx = arg0.ctx
14347        res = isl.isl_val_is_one(arg0.ptr)
14348        if res < 0:
14349            raise
14350        return bool(res)
14351    def is_pos(arg0):
14352        try:
14353            if not arg0.__class__ is val:
14354                arg0 = val(arg0)
14355        except:
14356            raise
14357        ctx = arg0.ctx
14358        res = isl.isl_val_is_pos(arg0.ptr)
14359        if res < 0:
14360            raise
14361        return bool(res)
14362    def is_rat(arg0):
14363        try:
14364            if not arg0.__class__ is val:
14365                arg0 = val(arg0)
14366        except:
14367            raise
14368        ctx = arg0.ctx
14369        res = isl.isl_val_is_rat(arg0.ptr)
14370        if res < 0:
14371            raise
14372        return bool(res)
14373    def is_zero(arg0):
14374        try:
14375            if not arg0.__class__ is val:
14376                arg0 = val(arg0)
14377        except:
14378            raise
14379        ctx = arg0.ctx
14380        res = isl.isl_val_is_zero(arg0.ptr)
14381        if res < 0:
14382            raise
14383        return bool(res)
14384    def le(arg0, arg1):
14385        try:
14386            if not arg0.__class__ is val:
14387                arg0 = val(arg0)
14388        except:
14389            raise
14390        try:
14391            if not arg1.__class__ is val:
14392                arg1 = val(arg1)
14393        except:
14394            raise
14395        ctx = arg0.ctx
14396        res = isl.isl_val_le(arg0.ptr, arg1.ptr)
14397        if res < 0:
14398            raise
14399        return bool(res)
14400    def lt(arg0, arg1):
14401        try:
14402            if not arg0.__class__ is val:
14403                arg0 = val(arg0)
14404        except:
14405            raise
14406        try:
14407            if not arg1.__class__ is val:
14408                arg1 = val(arg1)
14409        except:
14410            raise
14411        ctx = arg0.ctx
14412        res = isl.isl_val_lt(arg0.ptr, arg1.ptr)
14413        if res < 0:
14414            raise
14415        return bool(res)
14416    def max(arg0, arg1):
14417        try:
14418            if not arg0.__class__ is val:
14419                arg0 = val(arg0)
14420        except:
14421            raise
14422        try:
14423            if not arg1.__class__ is val:
14424                arg1 = val(arg1)
14425        except:
14426            raise
14427        ctx = arg0.ctx
14428        res = isl.isl_val_max(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14429        obj = val(ctx=ctx, ptr=res)
14430        return obj
14431    def min(arg0, arg1):
14432        try:
14433            if not arg0.__class__ is val:
14434                arg0 = val(arg0)
14435        except:
14436            raise
14437        try:
14438            if not arg1.__class__ is val:
14439                arg1 = val(arg1)
14440        except:
14441            raise
14442        ctx = arg0.ctx
14443        res = isl.isl_val_min(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14444        obj = val(ctx=ctx, ptr=res)
14445        return obj
14446    def mod(arg0, arg1):
14447        try:
14448            if not arg0.__class__ is val:
14449                arg0 = val(arg0)
14450        except:
14451            raise
14452        try:
14453            if not arg1.__class__ is val:
14454                arg1 = val(arg1)
14455        except:
14456            raise
14457        ctx = arg0.ctx
14458        res = isl.isl_val_mod(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14459        obj = val(ctx=ctx, ptr=res)
14460        return obj
14461    def mul(arg0, arg1):
14462        try:
14463            if not arg0.__class__ is val:
14464                arg0 = val(arg0)
14465        except:
14466            raise
14467        try:
14468            if not arg1.__class__ is val:
14469                arg1 = val(arg1)
14470        except:
14471            raise
14472        ctx = arg0.ctx
14473        res = isl.isl_val_mul(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14474        obj = val(ctx=ctx, ptr=res)
14475        return obj
14476    @staticmethod
14477    def nan():
14478        ctx = Context.getDefaultInstance()
14479        res = isl.isl_val_nan(ctx)
14480        obj = val(ctx=ctx, ptr=res)
14481        return obj
14482    def ne(arg0, arg1):
14483        try:
14484            if not arg0.__class__ is val:
14485                arg0 = val(arg0)
14486        except:
14487            raise
14488        try:
14489            if not arg1.__class__ is val:
14490                arg1 = val(arg1)
14491        except:
14492            raise
14493        ctx = arg0.ctx
14494        res = isl.isl_val_ne(arg0.ptr, arg1.ptr)
14495        if res < 0:
14496            raise
14497        return bool(res)
14498    def neg(arg0):
14499        try:
14500            if not arg0.__class__ is val:
14501                arg0 = val(arg0)
14502        except:
14503            raise
14504        ctx = arg0.ctx
14505        res = isl.isl_val_neg(isl.isl_val_copy(arg0.ptr))
14506        obj = val(ctx=ctx, ptr=res)
14507        return obj
14508    @staticmethod
14509    def neginfty():
14510        ctx = Context.getDefaultInstance()
14511        res = isl.isl_val_neginfty(ctx)
14512        obj = val(ctx=ctx, ptr=res)
14513        return obj
14514    @staticmethod
14515    def negone():
14516        ctx = Context.getDefaultInstance()
14517        res = isl.isl_val_negone(ctx)
14518        obj = val(ctx=ctx, ptr=res)
14519        return obj
14520    @staticmethod
14521    def one():
14522        ctx = Context.getDefaultInstance()
14523        res = isl.isl_val_one(ctx)
14524        obj = val(ctx=ctx, ptr=res)
14525        return obj
14526    def pow2(arg0):
14527        try:
14528            if not arg0.__class__ is val:
14529                arg0 = val(arg0)
14530        except:
14531            raise
14532        ctx = arg0.ctx
14533        res = isl.isl_val_pow2(isl.isl_val_copy(arg0.ptr))
14534        obj = val(ctx=ctx, ptr=res)
14535        return obj
14536    def sgn(arg0):
14537        try:
14538            if not arg0.__class__ is val:
14539                arg0 = val(arg0)
14540        except:
14541            raise
14542        ctx = arg0.ctx
14543        res = isl.isl_val_sgn(arg0.ptr)
14544        return res
14545    def sub(arg0, arg1):
14546        try:
14547            if not arg0.__class__ is val:
14548                arg0 = val(arg0)
14549        except:
14550            raise
14551        try:
14552            if not arg1.__class__ is val:
14553                arg1 = val(arg1)
14554        except:
14555            raise
14556        ctx = arg0.ctx
14557        res = isl.isl_val_sub(isl.isl_val_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14558        obj = val(ctx=ctx, ptr=res)
14559        return obj
14560    def trunc(arg0):
14561        try:
14562            if not arg0.__class__ is val:
14563                arg0 = val(arg0)
14564        except:
14565            raise
14566        ctx = arg0.ctx
14567        res = isl.isl_val_trunc(isl.isl_val_copy(arg0.ptr))
14568        obj = val(ctx=ctx, ptr=res)
14569        return obj
14570    @staticmethod
14571    def zero():
14572        ctx = Context.getDefaultInstance()
14573        res = isl.isl_val_zero(ctx)
14574        obj = val(ctx=ctx, ptr=res)
14575        return obj
14576
14577isl.isl_val_int_from_si.restype = c_void_p
14578isl.isl_val_int_from_si.argtypes = [Context, c_long]
14579isl.isl_val_read_from_str.restype = c_void_p
14580isl.isl_val_read_from_str.argtypes = [Context, c_char_p]
14581isl.isl_val_abs.restype = c_void_p
14582isl.isl_val_abs.argtypes = [c_void_p]
14583isl.isl_val_abs_eq.argtypes = [c_void_p, c_void_p]
14584isl.isl_val_add.restype = c_void_p
14585isl.isl_val_add.argtypes = [c_void_p, c_void_p]
14586isl.isl_val_ceil.restype = c_void_p
14587isl.isl_val_ceil.argtypes = [c_void_p]
14588isl.isl_val_cmp_si.argtypes = [c_void_p, c_long]
14589isl.isl_val_div.restype = c_void_p
14590isl.isl_val_div.argtypes = [c_void_p, c_void_p]
14591isl.isl_val_eq.argtypes = [c_void_p, c_void_p]
14592isl.isl_val_floor.restype = c_void_p
14593isl.isl_val_floor.argtypes = [c_void_p]
14594isl.isl_val_gcd.restype = c_void_p
14595isl.isl_val_gcd.argtypes = [c_void_p, c_void_p]
14596isl.isl_val_ge.argtypes = [c_void_p, c_void_p]
14597isl.isl_val_get_den_si.argtypes = [c_void_p]
14598isl.isl_val_get_num_si.argtypes = [c_void_p]
14599isl.isl_val_gt.argtypes = [c_void_p, c_void_p]
14600isl.isl_val_infty.restype = c_void_p
14601isl.isl_val_infty.argtypes = [Context]
14602isl.isl_val_inv.restype = c_void_p
14603isl.isl_val_inv.argtypes = [c_void_p]
14604isl.isl_val_is_divisible_by.argtypes = [c_void_p, c_void_p]
14605isl.isl_val_is_infty.argtypes = [c_void_p]
14606isl.isl_val_is_int.argtypes = [c_void_p]
14607isl.isl_val_is_nan.argtypes = [c_void_p]
14608isl.isl_val_is_neg.argtypes = [c_void_p]
14609isl.isl_val_is_neginfty.argtypes = [c_void_p]
14610isl.isl_val_is_negone.argtypes = [c_void_p]
14611isl.isl_val_is_nonneg.argtypes = [c_void_p]
14612isl.isl_val_is_nonpos.argtypes = [c_void_p]
14613isl.isl_val_is_one.argtypes = [c_void_p]
14614isl.isl_val_is_pos.argtypes = [c_void_p]
14615isl.isl_val_is_rat.argtypes = [c_void_p]
14616isl.isl_val_is_zero.argtypes = [c_void_p]
14617isl.isl_val_le.argtypes = [c_void_p, c_void_p]
14618isl.isl_val_lt.argtypes = [c_void_p, c_void_p]
14619isl.isl_val_max.restype = c_void_p
14620isl.isl_val_max.argtypes = [c_void_p, c_void_p]
14621isl.isl_val_min.restype = c_void_p
14622isl.isl_val_min.argtypes = [c_void_p, c_void_p]
14623isl.isl_val_mod.restype = c_void_p
14624isl.isl_val_mod.argtypes = [c_void_p, c_void_p]
14625isl.isl_val_mul.restype = c_void_p
14626isl.isl_val_mul.argtypes = [c_void_p, c_void_p]
14627isl.isl_val_nan.restype = c_void_p
14628isl.isl_val_nan.argtypes = [Context]
14629isl.isl_val_ne.argtypes = [c_void_p, c_void_p]
14630isl.isl_val_neg.restype = c_void_p
14631isl.isl_val_neg.argtypes = [c_void_p]
14632isl.isl_val_neginfty.restype = c_void_p
14633isl.isl_val_neginfty.argtypes = [Context]
14634isl.isl_val_negone.restype = c_void_p
14635isl.isl_val_negone.argtypes = [Context]
14636isl.isl_val_one.restype = c_void_p
14637isl.isl_val_one.argtypes = [Context]
14638isl.isl_val_pow2.restype = c_void_p
14639isl.isl_val_pow2.argtypes = [c_void_p]
14640isl.isl_val_sgn.argtypes = [c_void_p]
14641isl.isl_val_sub.restype = c_void_p
14642isl.isl_val_sub.argtypes = [c_void_p, c_void_p]
14643isl.isl_val_trunc.restype = c_void_p
14644isl.isl_val_trunc.argtypes = [c_void_p]
14645isl.isl_val_zero.restype = c_void_p
14646isl.isl_val_zero.argtypes = [Context]
14647isl.isl_val_copy.restype = c_void_p
14648isl.isl_val_copy.argtypes = [c_void_p]
14649isl.isl_val_free.restype = c_void_p
14650isl.isl_val_free.argtypes = [c_void_p]
14651isl.isl_val_to_str.restype = POINTER(c_char)
14652isl.isl_val_to_str.argtypes = [c_void_p]
14653
14654class val_list(object):
14655    def __init__(self, *args, **keywords):
14656        if "ptr" in keywords:
14657            self.ctx = keywords["ctx"]
14658            self.ptr = keywords["ptr"]
14659            return
14660        if len(args) == 1 and type(args[0]) == int:
14661            self.ctx = Context.getDefaultInstance()
14662            self.ptr = isl.isl_val_list_alloc(self.ctx, args[0])
14663            return
14664        if len(args) == 1 and (args[0].__class__ is val or type(args[0]) == int):
14665            args = list(args)
14666            try:
14667                if not args[0].__class__ is val:
14668                    args[0] = val(args[0])
14669            except:
14670                raise
14671            self.ctx = Context.getDefaultInstance()
14672            self.ptr = isl.isl_val_list_from_val(isl.isl_val_copy(args[0].ptr))
14673            return
14674        raise Error
14675    def __del__(self):
14676        if hasattr(self, 'ptr'):
14677            isl.isl_val_list_free(self.ptr)
14678    def __str__(arg0):
14679        try:
14680            if not arg0.__class__ is val_list:
14681                arg0 = val_list(arg0)
14682        except:
14683            raise
14684        ptr = isl.isl_val_list_to_str(arg0.ptr)
14685        res = cast(ptr, c_char_p).value.decode('ascii')
14686        libc.free(ptr)
14687        return res
14688    def __repr__(self):
14689        s = str(self)
14690        if '"' in s:
14691            return 'isl.val_list("""%s""")' % s
14692        else:
14693            return 'isl.val_list("%s")' % s
14694    def add(arg0, arg1):
14695        try:
14696            if not arg0.__class__ is val_list:
14697                arg0 = val_list(arg0)
14698        except:
14699            raise
14700        try:
14701            if not arg1.__class__ is val:
14702                arg1 = val(arg1)
14703        except:
14704            raise
14705        ctx = arg0.ctx
14706        res = isl.isl_val_list_add(isl.isl_val_list_copy(arg0.ptr), isl.isl_val_copy(arg1.ptr))
14707        obj = val_list(ctx=ctx, ptr=res)
14708        return obj
14709    def clear(arg0):
14710        try:
14711            if not arg0.__class__ is val_list:
14712                arg0 = val_list(arg0)
14713        except:
14714            raise
14715        ctx = arg0.ctx
14716        res = isl.isl_val_list_clear(isl.isl_val_list_copy(arg0.ptr))
14717        obj = val_list(ctx=ctx, ptr=res)
14718        return obj
14719    def concat(arg0, arg1):
14720        try:
14721            if not arg0.__class__ is val_list:
14722                arg0 = val_list(arg0)
14723        except:
14724            raise
14725        try:
14726            if not arg1.__class__ is val_list:
14727                arg1 = val_list(arg1)
14728        except:
14729            raise
14730        ctx = arg0.ctx
14731        res = isl.isl_val_list_concat(isl.isl_val_list_copy(arg0.ptr), isl.isl_val_list_copy(arg1.ptr))
14732        obj = val_list(ctx=ctx, ptr=res)
14733        return obj
14734    def drop(arg0, arg1, arg2):
14735        try:
14736            if not arg0.__class__ is val_list:
14737                arg0 = val_list(arg0)
14738        except:
14739            raise
14740        ctx = arg0.ctx
14741        res = isl.isl_val_list_drop(isl.isl_val_list_copy(arg0.ptr), arg1, arg2)
14742        obj = val_list(ctx=ctx, ptr=res)
14743        return obj
14744    def foreach(arg0, arg1):
14745        try:
14746            if not arg0.__class__ is val_list:
14747                arg0 = val_list(arg0)
14748        except:
14749            raise
14750        exc_info = [None]
14751        fn = CFUNCTYPE(c_int, c_void_p, c_void_p)
14752        def cb_func(cb_arg0, cb_arg1):
14753            cb_arg0 = val(ctx=arg0.ctx, ptr=(cb_arg0))
14754            try:
14755                arg1(cb_arg0)
14756            except:
14757                import sys
14758                exc_info[0] = sys.exc_info()
14759                return -1
14760            return 0
14761        cb = fn(cb_func)
14762        ctx = arg0.ctx
14763        res = isl.isl_val_list_foreach(arg0.ptr, cb, None)
14764        if exc_info[0] != None:
14765            raise (exc_info[0][0], exc_info[0][1], exc_info[0][2])
14766        if res < 0:
14767            raise
14768    def at(arg0, arg1):
14769        try:
14770            if not arg0.__class__ is val_list:
14771                arg0 = val_list(arg0)
14772        except:
14773            raise
14774        ctx = arg0.ctx
14775        res = isl.isl_val_list_get_at(arg0.ptr, arg1)
14776        obj = val(ctx=ctx, ptr=res)
14777        return obj
14778    def get_at(arg0, arg1):
14779        return arg0.at(arg1)
14780    def insert(arg0, arg1, arg2):
14781        try:
14782            if not arg0.__class__ is val_list:
14783                arg0 = val_list(arg0)
14784        except:
14785            raise
14786        try:
14787            if not arg2.__class__ is val:
14788                arg2 = val(arg2)
14789        except:
14790            raise
14791        ctx = arg0.ctx
14792        res = isl.isl_val_list_insert(isl.isl_val_list_copy(arg0.ptr), arg1, isl.isl_val_copy(arg2.ptr))
14793        obj = val_list(ctx=ctx, ptr=res)
14794        return obj
14795    def size(arg0):
14796        try:
14797            if not arg0.__class__ is val_list:
14798                arg0 = val_list(arg0)
14799        except:
14800            raise
14801        ctx = arg0.ctx
14802        res = isl.isl_val_list_size(arg0.ptr)
14803        if res < 0:
14804            raise
14805        return int(res)
14806
14807isl.isl_val_list_alloc.restype = c_void_p
14808isl.isl_val_list_alloc.argtypes = [Context, c_int]
14809isl.isl_val_list_from_val.restype = c_void_p
14810isl.isl_val_list_from_val.argtypes = [c_void_p]
14811isl.isl_val_list_add.restype = c_void_p
14812isl.isl_val_list_add.argtypes = [c_void_p, c_void_p]
14813isl.isl_val_list_clear.restype = c_void_p
14814isl.isl_val_list_clear.argtypes = [c_void_p]
14815isl.isl_val_list_concat.restype = c_void_p
14816isl.isl_val_list_concat.argtypes = [c_void_p, c_void_p]
14817isl.isl_val_list_drop.restype = c_void_p
14818isl.isl_val_list_drop.argtypes = [c_void_p, c_int, c_int]
14819isl.isl_val_list_foreach.argtypes = [c_void_p, c_void_p, c_void_p]
14820isl.isl_val_list_get_at.restype = c_void_p
14821isl.isl_val_list_get_at.argtypes = [c_void_p, c_int]
14822isl.isl_val_list_insert.restype = c_void_p
14823isl.isl_val_list_insert.argtypes = [c_void_p, c_int, c_void_p]
14824isl.isl_val_list_size.argtypes = [c_void_p]
14825isl.isl_val_list_copy.restype = c_void_p
14826isl.isl_val_list_copy.argtypes = [c_void_p]
14827isl.isl_val_list_free.restype = c_void_p
14828isl.isl_val_list_free.argtypes = [c_void_p]
14829isl.isl_val_list_to_str.restype = POINTER(c_char)
14830isl.isl_val_list_to_str.argtypes = [c_void_p]
14831