Add method Polyhedron.convex_union()
authorVivien Maisonneuve <v.maisonneuve@gmail.com>
Tue, 19 Aug 2014 14:00:56 +0000 (16:00 +0200)
committerVivien Maisonneuve <v.maisonneuve@gmail.com>
Tue, 19 Aug 2014 14:01:00 +0000 (16:01 +0200)
doc/reference.rst
linpy/polyhedra.py

index 18e69c0..83ee9d3 100644 (file)
@@ -2,6 +2,7 @@
 Module Reference
 ================
 
 Module Reference
 ================
 
+
 Symbols
 -------
 
 Symbols
 -------
 
@@ -227,6 +228,7 @@ They are implemented by the :class:`Rational` class, that inherits from both :cl
 
     See the documentation of :class:`fractions.Fraction` for more information and examples.
 
 
     See the documentation of :class:`fractions.Fraction` for more information and examples.
 
+
 Polyhedra
 ---------
 
 Polyhedra
 ---------
 
@@ -278,6 +280,10 @@ This space can be unbounded.
         The tuple of constraints, i.e., equalities and inequalities.
         This is semantically equivalent to: ``equalities + inequalities``.
 
         The tuple of constraints, i.e., equalities and inequalities.
         This is semantically equivalent to: ``equalities + inequalities``.
 
+    .. method:: convex_union(polyhedron[, ...])
+
+        Return the convex union of two or more polyhedra.
+
     .. method:: widen(polyhedron)
 
         Compute the *standard widening* of two polyhedra, à la Halbwachs.
     .. method:: widen(polyhedron)
 
         Compute the *standard widening* of two polyhedra, à la Halbwachs.
index e5e2523..50af053 100644 (file)
@@ -144,6 +144,15 @@ class Polyhedron(Domain):
     def aspolyhedron(self):
         return self
 
     def aspolyhedron(self):
         return self
 
+    def convex_union(self, *others):
+        """
+        Return the convex union of two or more polyhedra.
+        """
+        for other in others:
+            if not isinstance(other, Polyhedron):
+                raise TypeError('arguments must be Polyhedron instances')
+        return Polyhedron(self.union(*others))
+
     def __contains__(self, point):
         if not isinstance(point, Point):
             raise TypeError('point must be a Point instance')
     def __contains__(self, point):
         if not isinstance(point, Point):
             raise TypeError('point must be a Point instance')