Make Domain.sample() consistent with Domain.points()
authorVivien Maisonneuve <v.maisonneuve@gmail.com>
Sat, 5 Jul 2014 08:45:38 +0000 (10:45 +0200)
committerVivien Maisonneuve <v.maisonneuve@gmail.com>
Sat, 5 Jul 2014 08:45:38 +0000 (10:45 +0200)
pypol/domains.py
pypol/tests/test_domains.py

index 632335b..6088e32 100644 (file)
@@ -170,10 +170,17 @@ class Domain:
     def sample(self):
         from .polyhedra import Polyhedron
         islset = self._toislset(self.polyhedra, self.symbols)
     def sample(self):
         from .polyhedra import Polyhedron
         islset = self._toislset(self.polyhedra, self.symbols)
-        islbset = libisl.isl_set_sample(islset)
-        # next instruction should NOT be required
-        islbset = libisl.isl_basic_set_finalize(islbset)
-        return Polyhedron._fromislbasicset(islbset, self.symbols)
+        islpoint = libisl.isl_set_sample_point(islset)
+        point = {}
+        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
+        if bool(libisl.isl_point_is_void(islpoint)):
+            point = None
+        libisl.isl_point_free(islpoint)
+        return point
 
     def intersection(self, *others):
         if len(others) == 0:
 
     def intersection(self, *others):
         if len(others) == 0:
index 820d556..e4f996c 100644 (file)
@@ -22,7 +22,6 @@ class TestDomain(unittest.TestCase):
         self.complement = Or(Ge(-x - 1, 0), Ge(x - 3, 0), And(Ge(x, 0), Ge(-x + 2, 0), Ge(-y - 1, 0)), And(Ge(x, 0), Ge(-x + 2, 0), Ge(y - 3, 0)))
         self.hull = And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0))
         self.dropped = And(Ge(y, 0), Ge(-y + 2, 0))
         self.complement = Or(Ge(-x - 1, 0), Ge(x - 3, 0), And(Ge(x, 0), Ge(-x + 2, 0), Ge(-y - 1, 0)), And(Ge(x, 0), Ge(-x + 2, 0), Ge(y - 3, 0)))
         self.hull = And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0))
         self.dropped = And(Ge(y, 0), Ge(-y + 2, 0))
-        self.sample = And(Eq(y - 3, 0), Eq(x - 1, 0))
         self.intersection = And(Ge(x - 1, 0), Ge(-x + 2, 0), Ge(y - 1, 0), Ge(-y + 2, 0))
         self.union = Or(And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0)), And(Ge(x - 1, 0), Ge(-x + 3, 0), Ge(y - 1, 0), Ge(-y + 3, 0)))
         self.sum1 = Or(And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0)), And(Ge(x - 1, 0), Ge(-x + 3, 0), Ge(y - 1, 0), Ge(-y + 3, 0)))
         self.intersection = And(Ge(x - 1, 0), Ge(-x + 2, 0), Ge(y - 1, 0), Ge(-y + 2, 0))
         self.union = Or(And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0)), And(Ge(x - 1, 0), Ge(-x + 3, 0), Ge(y - 1, 0), Ge(-y + 3, 0)))
         self.sum1 = Or(And(Ge(x, 0), Ge(-x + 2, 0), Ge(y, 0), Ge(-y + 2, 0)), And(Ge(x - 1, 0), Ge(-x + 3, 0), Ge(y - 1, 0), Ge(-y + 3, 0)))
@@ -104,9 +103,9 @@ class TestDomain(unittest.TestCase):
         self.assertEqual(self.empty.simplify(), Empty)
 
     def test_sample(self):
         self.assertEqual(self.empty.simplify(), Empty)
 
     def test_sample(self):
-        self.assertEqual(self.square6.sample(), self.sample)
-        self.assertEqual(self.empty.sample(), Empty)
-        self.assertEqual(self.universe.sample(), self.universe)
+        self.assertEqual(self.square6.sample(), {Symbol('x'): 1, Symbol('y'): 3})
+        self.assertEqual(self.empty.sample(), None)
+        self.assertEqual(self.universe.sample(), {})
 
     def test_intersection(self):
         self.assertEqual(self.square1.intersection(self.square2), self.intersection)
 
     def test_intersection(self):
         self.assertEqual(self.square1.intersection(self.square2), self.intersection)