+import ctypes, ctypes.util
+
+from . import _islhelper
+from ._islhelper import isl_basic_set_constraints, isl_set_basic_sets
+
+
+__all__ = [
+ 'libisl',
+ 'mainctx',
+ 'isl_val_to_int',
+ 'isl_basic_set_to_str', 'isl_basic_set_constraints',
+ 'isl_set_to_str', 'isl_set_basic_sets',
+]
+
+
+libisl = ctypes.CDLL(ctypes.util.find_library('isl'))
+
+libisl.isl_printer_get_str.restype = ctypes.c_char_p
+libisl.isl_dim_set = _islhelper.dim_set
+
+
+mainctx = libisl.isl_ctx_alloc()
+
+
+def isl_val_to_int(islval):
+ islpr = libisl.isl_printer_to_str(mainctx)
+ islpr = libisl.isl_printer_print_val(islpr, islval)
+ string = libisl.isl_printer_get_str(islpr).decode()
+ return int(string)
+
+def isl_basic_set_to_str(islbset):
+ islpr = libisl.isl_printer_to_str(mainctx)
+ islpr = libisl.isl_printer_print_basic_set(islpr, islbset)
+ string = libisl.isl_printer_get_str(islpr).decode()
+ return string
+
+def isl_set_to_str(islset):
+ islpr = libisl.isl_printer_to_str(mainctx)
+ islpr = libisl.isl_printer_print_set(islpr, islset)
+ string = libisl.isl_printer_get_str(islpr).decode()
+ return string