'Return a tensor with free indices substituted according to ``index_tuples``
Parameters
index_types : list of tuples ``(old_index, new_index)``
Examples
>>> from sympy.tensor.tensor import TensorIndexType, tensor_indices, tensorhead
>>> Lorentz = TensorIndexType(\'Lorentz\', dummy_fmt=\'L\')
>>> i, j, k, l = tensor_indices(\'i,j,k,l\', Lorentz)
>>> A, B = tensorhead(\'A,B\', [Lorentz]*2, [[1]*2])
>>> t = A(i, k)*B(-k, -j) + A(i, -j)
>>> t.fun_eval((i, k),(-j, l))
A(k, L_0)*B(l, -L_0) + A(k, l)'

def fun_eval(self, *index_tuples):

    args = self.args
    args1 = []
    for x in args:
        y = x.fun_eval(*index_tuples)
        args1.append(y)
    return TensAdd(*args1)
