Return the union of two or more domains as a new domain. As an
alternative, function Or() can be used.
"""
- if len(others) == 0:
- return self
- symbols = self._xsymbols((self,) + others)
- islset1 = self._toislset(self.polyhedra, symbols)
+ result = self
for other in others:
- islset2 = other._toislset(other.polyhedra, symbols)
- islset1 = libisl.isl_set_union(islset1, islset2)
- return self._fromislset(islset1, symbols)
+ result |= other
+ return result
def __or__(self, other):
- return self.union(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_union(islset1, islset2)
+ return self._fromislset(islset, symbols)
+ return NotImplemented
__or__.__doc__ = union.__doc__
def __add__(self, other):
- return self.union(other)
+ return self | other
__add__.__doc__ = union.__doc__
def difference(self, other):
"""
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):