X-Git-Url: https://svn.cri.ensmp.fr/git/linpy.git/blobdiff_plain/dba7d8fa774455d02d3cd3e0ab740fa9a727e4bb..59770a7322eb89d91b45516e3a5b5693010a3035:/pypol/domains.py diff --git a/pypol/domains.py b/pypol/domains.py index 45040c8..255c995 100644 --- a/pypol/domains.py +++ b/pypol/domains.py @@ -6,6 +6,7 @@ from fractions import Fraction from . import islhelper from .islhelper import mainctx, libisl, isl_set_basic_sets +from .coordinates import Point from .linexprs import Expression, Symbol @@ -268,7 +269,7 @@ class Domain: points = [] for vertex in vertices: expr = libisl.isl_vertex_get_expr(vertex) - point = {} + coordinates = [] if islhelper.isl_version < '0.13': constraints = islhelper.isl_basic_set_constraints(expr) for constraint in constraints: @@ -280,7 +281,7 @@ class Domain: coefficient = islhelper.isl_val_to_int(coefficient) if coefficient != 0: coordinate = -Fraction(constant, coefficient) - point[symbol]= coordinate + coordinates.append((symbol, coordinate)) else: # horrible hack, find a cleaner solution string = islhelper.isl_multi_aff_to_str(expr) @@ -290,8 +291,8 @@ class Domain: denominator = match.group('den') denominator = 1 if denominator is None else int(denominator) coordinate = Fraction(numerator, denominator) - point[symbol] = coordinate - points.append(point) + coordinates.append((symbol, coordinate)) + points.append(Point(coordinates)) return points def points(self): @@ -302,15 +303,21 @@ class Domain: islpoints = islhelper.isl_set_points(islset) points = [] for islpoint in islpoints: - point = {} + coordinates = {} for index, symbol in enumerate(self.symbols): coordinate = libisl.isl_point_get_coordinate_val(islpoint, libisl.isl_dim_set, index) coordinate = islhelper.isl_val_to_int(coordinate) - point[symbol] = coordinate - points.append(point) + coordinates[symbol] = coordinate + points.append(Point(coordinates)) return points + def __contains__(self, point): + for polyhedron in self.polyhedra: + if point in polyhedron: + return True + return False + def subs(self, symbol, expression=None): polyhedra = [polyhedron.subs(symbol, expression) for polyhedron in self.polyhedra]