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:
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, '