from . import islhelper
from .islhelper import mainctx, libisl, isl_set_basic_sets
+from .geometry import GeometricObject
from .coordinates import Point
from .linexprs import Expression, Symbol
@functools.total_ordering
-class Domain:
+class Domain(GeometricObject):
__slots__ = (
'_polyhedra',
def __new__(cls, *polyhedra):
from .polyhedra import Polyhedron
if len(polyhedra) == 1:
- polyhedron = polyhedra[0]
- if isinstance(polyhedron, str):
- return cls.fromstring(polyhedron)
- elif isinstance(polyhedron, Polyhedron):
- return polyhedron
+ argument = polyhedra[0]
+ if isinstance(argument, str):
+ return cls.fromstring(argument)
+ elif isinstance(argument, GeometricObject):
+ return argument.aspolyhedron()
else:
raise TypeError('argument must be a string '
- 'or a Polyhedron instance')
+ 'or a GeometricObject instance')
else:
for polyhedron in polyhedra:
if not isinstance(polyhedron, Polyhedron):
islbset = libisl.isl_set_polyhedral_hull(islset)
return Polyhedron._fromislbasicset(islbset, self.symbols)
+ def asdomain(self):
+ return self
+
def project(self, dims):
# use to remove certain variables
islset = self._toislset(self.polyhedra, self.symbols)
points.append(Point(coordinates))
return points
+ def __contains__(self, point):
+ for polyhedron in self.polyhedra:
+ if point in polyhedron:
+ return True
+ return False
+
def subs(self, symbol, expression=None):
polyhedra = [polyhedron.subs(symbol, expression)
for polyhedron in self.polyhedra]