"""
Return the difference of two domains as a new domain.
"""
- symbols = self._xsymbols([self, other])
- islset1 = self._toislset(self.polyhedra, symbols)
- islset2 = other._toislset(other.polyhedra, symbols)
- islset = libisl.isl_set_subtract(islset1, islset2)
- return self._fromislset(islset, symbols)
+ return self - other
def __sub__(self, other):
- return self.difference(other)
+ if isinstance(other, Domain):
+ symbols = self._xsymbols([self, other])
+ islset1 = self._toislset(self.polyhedra, symbols)
+ islset2 = other._toislset(other.polyhedra, symbols)
+ islset = libisl.isl_set_subtract(islset1, islset2)
+ return self._fromislset(islset, symbols)
+ return NotImplemented
__sub__.__doc__ = difference.__doc__
def lexmin(self):
islset = libisl.isl_set_lexmax(islset)
return self._fromislset(islset, self.symbols)
- _RE_COORDINATE = re.compile(r'\((?P<num>\-?\d+)\)(/(?P<den>\d+))?')
+ if islhelper.isl_version >= '0.13':
+ _RE_COORDINATE = re.compile(r'\((?P<num>\-?\d+)\)(/(?P<den>\d+))?')
+ else:
+ _RE_COORDINATE = None
def vertices(self):
"""
for vertex in vertices:
expr = libisl.isl_vertex_get_expr(vertex)
coordinates = []
- if islhelper.isl_version < '0.13':
+ if self._RE_COORDINATE is None:
constraints = islhelper.isl_basic_set_constraints(expr)
for constraint in constraints:
constant = libisl.isl_constraint_get_constant_val(constraint)
elif self.dimension == 3:
return self._plot_3d(plot=plot, **kwargs)
else:
- raise ValueError('polyhedron must be 2 or 3-dimensional')
+ raise ValueError('domain must be 2 or 3-dimensional')
def subs(self, symbol, expression=None):
"""
@classmethod
def fromsympy(cls, expr):
"""
- Create a domain from a sympy expression.
+ Create a domain from a SymPy expression.
"""
import sympy
from .polyhedra import Lt, Le, Eq, Ne, Ge, Gt
def tosympy(self):
"""
- Convert the domain to a sympy expression.
+ Convert the domain to a SymPy expression.
"""
import sympy
polyhedra = [polyhedron.tosympy() for polyhedron in polyhedra]
return Universe
else:
return domains[0].intersection(*domains[1:])
-And.__doc__ = Domain.intersection.__doc__
def Or(*domains):
"""
return Empty
else:
return domains[0].union(*domains[1:])
-Or.__doc__ = Domain.union.__doc__
def Not(domain):
"""
Create the complementary domain of the domain given in argument.
"""
return ~domain
-Not.__doc__ = Domain.complement.__doc__