+ def star(self):
+ delta_symbols = [symbol.asdummy() for symbol in self.range_symbols]
+ k = Dummy('k')
+ polyhedron = self.polyhedron
+ for x, xprime, dx in zip(self.range_symbols, self.domain_symbols, delta_symbols):
+ polyhedron &= Eq(dx, xprime - x)
+ polyhedron = polyhedron.project(self.symbols)
+ equalities, inequalities = [], []
+ for equality in polyhedron.equalities:
+ equality += (k-1) * equality.constant
+ equalities.append(equality)
+ for inequality in polyhedron.inequalities:
+ inequality += (k-1) * inequality.constant
+ inequalities.append(inequality)
+ polyhedron = Polyhedron(equalities, inequalities) & Ge(k, 0)
+ polyhedron = polyhedron.project([k])
+ for x, xprime, dx in zip(self.range_symbols, self.domain_symbols, delta_symbols):
+ polyhedron &= Eq(dx, xprime - x)
+ polyhedron = polyhedron.project(delta_symbols)
+ return Transformer(polyhedron, self.range_symbols, self.domain_symbols)