From: Vivien Maisonneuve Date: Wed, 20 Aug 2014 11:25:40 +0000 (+0200) Subject: Improve readability of Polyhedron.__repr__() X-Git-Tag: 1.0~10 X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/commitdiff_plain/ddefc755b0637b08a0a2788be3a0678b52942f5b?ds=sidebyside;hp=198c368d0b24dc80b1139b2a7282cc50ef654e4d Improve readability of Polyhedron.__repr__() --- diff --git a/linpy/polyhedra.py b/linpy/polyhedra.py index a720b74..bfc7efe 100644 --- a/linpy/polyhedra.py +++ b/linpy/polyhedra.py @@ -281,9 +281,33 @@ class Polyhedron(Domain): 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: - 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: diff --git a/linpy/tests/test_polyhedra.py b/linpy/tests/test_polyhedra.py index d50f0f1..d0ebe57 100644 --- a/linpy/tests/test_polyhedra.py +++ b/linpy/tests/test_polyhedra.py @@ -35,13 +35,9 @@ class TestPolyhedron(unittest.TestCase): 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), - "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, '