- for dim in dims:
- if dim in symbols:
- first = symbols.index(dim)
- islbset = libisl.isl_set_project_out(islset, libisl.isl_dim_set, first, 1)
- symbols.__delitem__(first)
- else:
- islbset = libisl.isl_set_project_out(islset, libisl.isl_dim_set, 0, 0)
- return Polyhedron._fromislset(islbset, symbols)
-
+ # the trick is to walk symbols in reverse order, to avoid index updates
+ 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
+ symbols = [symbol for symbol in self.symbols if symbol not in symbols]
+ return Domain._fromislset(islset, symbols)
+