X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/blobdiff_plain/66e41ccd173874b3309e4c24be64c7b6b2ac6298..1d494bb187b70135df721c13306d7f26fdf33f50:/pypol/isl.py diff --git a/pypol/isl.py b/pypol/isl.py deleted file mode 100644 index 32ce305..0000000 --- a/pypol/isl.py +++ /dev/null @@ -1,136 +0,0 @@ -import ctypes, ctypes.util - -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.dim_set - - -class IslObject: - - __slots__ = ( - '_ptr', - ) - - def __init__(self, ptr): - self._ptr = ptr - - @property - def _as_parameter_(self): - return self._ptr - - -class Context(IslObject): - - def __init__(self): - ptr = libisl.isl_ctx_alloc() - super().__init__(ptr) - - #comment out so does not delete itself after being created - #def __del__(self): - # libisl.isl_ctx_free(self) - - def __eq__(self, other): - if not isinstance(other, Context): - return False - return self._ptr == other._ptr - - -class BasicSet(IslObject): - - def __str__(self): - ls = libisl.isl_basic_set_get_local_space(self) - 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).decode() - return string - - def __del__(self): - libisl.isl_basic_set_free(self) - - def constraints(self): - return _isl.basic_set_constraints(self._ptr) - - def _fromisl(self, cls, symbols): - constraints = self.constraints() - equalities = [] - inequalities = [] - co = [] - eq_string = "" - in_string = "" - string = "" - for constraint in constraints: - ls = libisl.isl_basic_set_get_local_space(self) - ctx = libisl.isl_local_space_get_ctx(ls) - p = libisl.isl_printer_to_str(ctx) - if libisl.isl_constraint_is_equality(constraint): #check if equality - constant = libisl.isl_constraint_get_constant_val(constraint) - const = libisl.isl_printer_print_val(p, constant) - const = libisl.isl_printer_get_str(const).decode() - const = int(const) - libisl.isl_printer_free(p) - for symbol in symbols: - p = libisl.isl_printer_to_str(ctx) - dim = symbols.index(symbol) - coefficient = libisl.isl_constraint_get_coefficient_val(constraint, libisl.isl_dim_set, dim) - coeff = libisl.isl_printer_print_val(p, coefficient) - coeff = libisl.isl_printer_get_str(coeff).decode() - coeff = int(coeff) - if coeff!=0: - co.append('{}{}'.format(coeff, symbols[dim])) - for value in co: - string += '{}+'.format(value) - equalities.append('{}{}==0'.format(string, const)) - co = [] - string = '' - libisl.isl_printer_free(p) - else: #same for inequality - constant = libisl.isl_constraint_get_constant_val(constraint) - const = libisl.isl_printer_print_val(p, constant) - const = libisl.isl_printer_get_str(const).decode() - const = int(const) - libisl.isl_printer_free(p) - for symbol in symbols: - p = libisl.isl_printer_to_str(ctx) - dim = symbols.index(symbol) - coefficient = libisl.isl_constraint_get_coefficient_val(constraint, libisl.isl_dim_set, dim) - coeff = libisl.isl_printer_print_val(p, coefficient) - coeff = libisl.isl_printer_get_str(coeff).decode() - coeff = int(coeff) - if coeff!=0: - co.append('{}{}'.format(coeff, symbols[dim])) - for value in co: - string += '{} + '.format(value) - inequalities.append('{}{} <= 0'.format(string, const)) - co = [] - string = "" - libisl.isl_printer_free(p) - - for equations in equalities: - eq_string += ' {}'.format(equations) - eq_strings = eq_string.split() - print(eq_strings) - - for equations in inequalities: - in_string += ', {}'.format(equations) - print(in_string) - if eq_string and in_string: - final = '{}, {}'.format(eq_string, in_string) - elif eq_string != '': - final = '{}'.format(eq_strings) - elif in_string != '' : - final = '{}'.format(in_string) - - - return ('{}({!r})'.format(cls.__name__,final)) -