+ def _asinequalities(self):
+ inequalities = list(self.equalities)
+ inequalities.extend([-expression for expression in self.equalities])
+ inequalities.extend(self.inequalities)
+ return inequalities
+
+ def widen(self, other):
+ if not isinstance(other, Polyhedron):
+ raise ValueError('argument must be a Polyhedron instance')
+ inequalities1 = self._asinequalities()
+ inequalities2 = other._asinequalities()
+ inequalities = []
+ for inequality1 in inequalities1:
+ if other <= Polyhedron(inequalities=[inequality1]):
+ inequalities.append(inequality1)
+ for inequality2 in inequalities2:
+ for i in range(len(inequalities1)):
+ inequalities3 = inequalities1[:i] + inequalities[i + 1:]
+ inequalities3.append(inequality2)
+ polyhedron3 = Polyhedron(inequalities=inequalities3)
+ if self == polyhedron3:
+ inequalities.append(inequality2)
+ break
+ return Polyhedron(inequalities=inequalities)
+