def index_function(n): index = Function.index(nargs=(n, ), shape=(), integer=True) k = Symbol.k(integer=True) def eval(x, *indices): (j, ), *_ = indices return LAMBDA[k:n](KroneckerDelta(x[k], j)) @ LAMBDA[k:n](k) index.eval = eval return index k = Symbol.k(integer=True) index = Function.index(nargs=(n, ), shape=(), integer=True, eval=lambda x, *indices: LAMBDA[k:n] (KroneckerDelta(x[k], indices[0][0])) @ LAMBDA[k:n] (k)) return index