Improve readability of Polyhedron.__repr__()
authorVivien Maisonneuve <v.maisonneuve@gmail.com>
Wed, 20 Aug 2014 11:25:40 +0000 (13:25 +0200)
committerVivien Maisonneuve <v.maisonneuve@gmail.com>
Wed, 20 Aug 2014 11:25:40 +0000 (13:25 +0200)
linpy/polyhedra.py
linpy/tests/test_polyhedra.py

index a720b74..bfc7efe 100644 (file)
@@ -281,9 +281,33 @@ class Polyhedron(Domain):
     def __repr__(self):
         strings = []
         for equality in self.equalities:
     def __repr__(self):
         strings = []
         for equality in self.equalities:
-            strings.append('Eq({}, 0)'.format(equality))
+            left, right, swap = 0, 0, False
+            for i, (symbol, coefficient) in enumerate(equality.coefficients()):
+                if coefficient > 0:
+                    left += coefficient * symbol
+                else:
+                    right -= coefficient * symbol
+                    if i == 0:
+                        swap = True
+            if equality.constant > 0:
+                left += equality.constant
+            else:
+                right -= equality.constant
+            if swap:
+                left, right = right, left
+            strings.append('{} == {}'.format(left, right))
         for inequality in self.inequalities:
         for inequality in self.inequalities:
-            strings.append('Ge({}, 0)'.format(inequality))
+            left, right = 0, 0
+            for symbol, coefficient in inequality.coefficients():
+                if coefficient < 0:
+                    left -= coefficient * symbol
+                else:
+                    right += coefficient * symbol
+            if inequality.constant < 0:
+                left -= inequality.constant
+            else:
+                right += inequality.constant
+            strings.append('{} <= {}'.format(left, right))
         if len(strings) == 1:
             return strings[0]
         else:
         if len(strings) == 1:
             return strings[0]
         else:
index d50f0f1..d0ebe57 100644 (file)
@@ -35,13 +35,9 @@ class TestPolyhedron(unittest.TestCase):
     def test_dimension(self):
         self.assertEqual(self.square.dimension, 2)
 
     def test_dimension(self):
         self.assertEqual(self.square.dimension, 2)
 
-    def test_str(self):
-        self.assertEqual(str(self.square),
-            'And(Ge(x, 0), Ge(-x + 1, 0), Ge(y, 0), Ge(-y + 1, 0))')
-
     def test_repr(self):
         self.assertEqual(repr(self.square),
     def test_repr(self):
         self.assertEqual(repr(self.square),
-            "And(Ge(x, 0), Ge(-x + 1, 0), Ge(y, 0), Ge(-y + 1, 0))")
+            "And(0 <= x, x <= 1, 0 <= y, y <= 1)")
 
     def test_fromstring(self):
         self.assertEqual(Polyhedron.fromstring('{x >= 0, -x + 1 >= 0, '
 
     def test_fromstring(self):
         self.assertEqual(Polyhedron.fromstring('{x >= 0, -x + 1 >= 0, '