X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/blobdiff_plain/4ae512f39c14835badbfab6fc1ce877f601d104e..29ed88d1a15d283ea6f3340a4dd97e8cc7c2d2d4:/pypol/domains.py diff --git a/pypol/domains.py b/pypol/domains.py index c844e55..9187081 100644 --- a/pypol/domains.py +++ b/pypol/domains.py @@ -50,7 +50,7 @@ class Domain: symbols = set() for item in iterator: symbols.update(item.symbols) - return tuple(sorted(symbols)) + return tuple(sorted(symbols, key=lambda symbol: symbol.name)) @property def polyhedra(self): @@ -155,11 +155,15 @@ class Domain: def project_out(self, symbols): # use to remove certain variables islset = self._toislset(self.polyhedra, self.symbols) - # the trick is to walk symbols in reverse order, to avoid index updates + n = 0 for index, symbol in reversed(list(enumerate(self.symbols))): if symbol in symbols: - islset = libisl.isl_set_project_out(islset, libisl.isl_dim_set, index, 1) - # remaining symbols + n += 1 + elif n > 0: + islset = libisl.isl_set_project_out(islset, libisl.isl_dim_set, index + 1, n) + n = 0 + if n > 0: + islset = libisl.isl_set_project_out(islset, libisl.isl_dim_set, 0, n) symbols = [symbol for symbol in self.symbols if symbol not in symbols] return Domain._fromislset(islset, symbols)