- # 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)
-
+ for dim in dims:
+ dim_index = dims.index(dim)
+ if dim in symbols:
+ first = symbols.index(dim)
+ try:
+ for dim in dims:
+ if symbols[first+1] is dims[dim_index+1]: #check if next value in symbols is same as next value in dims
+ n += 1
+ islbset = libisl.isl_set_project_out(islset, libisl.isl_dim_set, first, n)
+ symbols.remove(dim)
+ except:
+ 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)
+