X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/blobdiff_plain/4ae512f39c14835badbfab6fc1ce877f601d104e..66eaddd271c4beff5451fab2030389cd634e1385:/pypol/domains.py diff --git a/pypol/domains.py b/pypol/domains.py index c844e55..b4780fc 100644 --- a/pypol/domains.py +++ b/pypol/domains.py @@ -5,7 +5,7 @@ import re from . import islhelper from .islhelper import mainctx, libisl, isl_set_basic_sets -from .linexprs import Expression +from .linexprs import Expression, Symbol __all__ = [ @@ -154,6 +154,15 @@ class Domain: 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))): @@ -240,6 +249,7 @@ class Domain: self._dimension = len(self._symbols) return self + @classmethod def _toislset(cls, polyhedra, symbols): polyhedron = polyhedra[0] islbset = polyhedron._toislbasicset(polyhedron.equalities,