Exception handling in _isl.c
[linpy.git] / pypol / isl.py
index 0513358..a295e9f 100644 (file)
@@ -1,24 +1,25 @@
-"""
-note: for islpy
-isl format: basic set: ("{[x, y] : x >= 0 and x < 5 and y >= 0 and y < x+4 }")
-"""
-
 import ctypes, ctypes.util
-import functools
-import math
-import numbers
-import operator
-import re
+
+from . import _isl
+
+
+__all__ = [
+    'Context',
+    'BasicSet',
+]
 
 
 libisl = ctypes.CDLL(ctypes.util.find_library('isl'))
 
 libisl.isl_printer_get_str.restype = ctypes.c_char_p
+libisl.isl_dim_set = _isl.isl_dim_set
 
 
 class IslObject:
 
-    __slots__ = ('_ptr')
+    __slots__ = (
+        '_ptr',
+    )
 
     def __init__(self, ptr):
         self._ptr = ptr
@@ -31,7 +32,8 @@ class IslObject:
 class Context(IslObject):
 
     def __init__(self):
-        self._ptr = libisl.isl_ctx_alloc()
+        ptr = libisl.isl_ctx_alloc()
+        super().__init__(ptr)
 
     #comment out so does not delete itself after being created
     #def __del__(self):
@@ -50,6 +52,11 @@ class BasicSet(IslObject):
         ctx = libisl.isl_local_space_get_ctx(ls)
         p = libisl.isl_printer_to_str(ctx)
         p = libisl.isl_printer_print_basic_set(p, self)
-        string = libisl.isl_printer_get_str(p)
-        string = str(string.decode())
+        string = libisl.isl_printer_get_str(p).decode()
         return string
+
+    def __del__(self):
+        libisl.isl_basic_set_free(self)
+
+    def constraints(self):
+        return _isl.isl_basic_set_constraints(self._ptr)