Fix Polyhedron.isempty()
[linpy.git] / pypol / linear.py
index a562a3f..5f3c559 100644 (file)
@@ -139,7 +139,7 @@ class Expression:
     @_polymorphic_method
     def __add__(self, other):
         coefficients = dict(self.coefficients())
     @_polymorphic_method
     def __add__(self, other):
         coefficients = dict(self.coefficients())
-        for symbol, coefficient in other.coefficients:
+        for symbol, coefficient in other.coefficients():
             if symbol in coefficients:
                 coefficients[symbol] += coefficient
             else:
             if symbol in coefficients:
                 coefficients[symbol] += coefficient
             else:
@@ -152,7 +152,7 @@ class Expression:
     @_polymorphic_method
     def __sub__(self, other):
         coefficients = dict(self.coefficients())
     @_polymorphic_method
     def __sub__(self, other):
         coefficients = dict(self.coefficients())
-        for symbol, coefficient in other.coefficients:
+        for symbol, coefficient in other.coefficients():
             if symbol in coefficients:
                 coefficients[symbol] -= coefficient
             else:
             if symbol in coefficients:
                 coefficients[symbol] -= coefficient
             else:
@@ -378,9 +378,6 @@ class Polyhedron:
     def inequalities(self):
         return self._inequalities
 
     def inequalities(self):
         return self._inequalities
 
-    def isempty(self):
-        return bool(libisl.isl_basic_set_is_empty(self._bset))
-
     @property
     def constraints(self):
         return self._constraints
     @property
     def constraints(self):
         return self._constraints
@@ -404,10 +401,11 @@ class Polyhedron:
         raise NotImplementedError
 
     def isempty(self):
         raise NotImplementedError
 
     def isempty(self):
-        return self == empty
+        bset = self._to_isl()
+        return bool(libisl.isl_basic_set_is_empty(bset))
 
     def isuniverse(self):
 
     def isuniverse(self):
-        return self == universe
+        raise NotImplementedError
 
     def isdisjoint(self, other):
         # return true if the polyhedron has no elements in common with other
 
     def isdisjoint(self, other):
         # return true if the polyhedron has no elements in common with other
@@ -523,7 +521,7 @@ class Polyhedron:
         return bset
 
     @classmethod
         return bset
 
     @classmethod
-    def from_isl(cls, bset):
+    def _from_isl(cls, bset):
         '''takes basic set in isl form and puts back into python version of polyhedron
         isl example code gives isl form as:
             "{[i] : exists (a : i = 2a and i >= 10 and i <= 42)}")
         '''takes basic set in isl form and puts back into python version of polyhedron
         isl example code gives isl form as:
             "{[i] : exists (a : i = 2a and i >= 10 and i <= 42)}")
@@ -551,3 +549,5 @@ if __name__ == '__main__':
     p = Polyhedron(inequalities=[ex1, ex2])
     bs = p._to_isl()
     print(bs)
     p = Polyhedron(inequalities=[ex1, ex2])
     bs = p._to_isl()
     print(bs)
+    print('empty ?', p.isempty())
+    print('empty ?', eq(0, 1).isempty())