x, y = symbols('x y')
diam = Ge(y, x - 1) & Le(y, x + 1) & Ge(y, -x - 1) & Le(y, -x + 1)
print('diamond:', diam)
-print('projected on x:', diam.drop_dims('y'))
+print('projected on x:', diam.project_out([y]))
from . import islhelper
from .islhelper import mainctx, libisl, isl_set_basic_sets
-from .linexprs import Expression
+from .linexprs import Expression, Symbol
__all__ = [
def project_out(self, symbols):
# use to remove certain variables
+ if isinstance(symbols, str):
+ symbols = symbols.replace(',', ' ').split()
+ else:
+ symbols = list(symbols)
+ for i, symbol in enumerate(symbols):
+ if isinstance(symbol, Symbol):
+ symbols[i] = symbol.name
+ elif not isinstance(symbol, str):
+ raise TypeError('symbols must be strings or Symbol instances')
islset = self._toislset(self.polyhedra, self.symbols)
# the trick is to walk symbols in reverse order, to avoid index updates
for index, symbol in reversed(list(enumerate(self.symbols))):