from fractions import Fraction
from . import islhelper
-from .islhelper import mainctx, libisl, isl_set_basic_sets
-from .coordinates import Point
+from .islhelper import mainctx, libisl
+from .geometry import GeometricObject, 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)
def _fromislset(cls, islset, symbols):
from .polyhedra import Polyhedron
islset = libisl.isl_set_remove_divs(islset)
- islbsets = isl_set_basic_sets(islset)
+ islbsets = islhelper.isl_set_basic_sets(islset)
libisl.isl_set_free(islset)
polyhedra = []
for islbset in islbsets:
strings = [repr(polyhedron) for polyhedron in self.polyhedra]
return 'Or({})'.format(', '.join(strings))
+ def _repr_latex_(self):
+ strings = []
+ for polyhedron in self.polyhedra:
+ strings.append('({})'.format(polyhedron._repr_latex_().strip('$')))
+ return '${}$'.format(' \\vee '.join(strings))
+
@classmethod
def fromsympy(cls, expr):
import sympy