'Returns tensor with ordered free indices replaced by ``indices``
Parameters
indices
Examples
>>> from sympy import Symbol
>>> from sympy.tensor.tensor import TensorIndexType, tensor_indices, tensorhead
>>> D = Symbol(\'D\')
>>> Lorentz = TensorIndexType(\'Lorentz\', dim=D, dummy_fmt=\'L\')
>>> i0,i1,i2,i3,i4 = tensor_indices(\'i0:5\', Lorentz)
>>> p, q = tensorhead(\'p,q\', [Lorentz], [[1]])
>>> g = Lorentz.metric
>>> t = p(i0)*p(i1) + g(i0,i1)*q(i2)*q(-i2)
>>> t(i0,i2)
metric(i0, i2)*q(L_0)*q(-L_0) + p(i0)*p(i2)
>>> t(i0,i1) - t(i1,i0)
0'

def __call__(self, *indices):

    free_args = self.free_args
    indices = list(indices)
    if ([x.tensor_index_type for x in indices] != [x.tensor_index_type for x in free_args]):
        raise ValueError('incompatible    types')
    if (indices == free_args):
        return self
    index_tuples = list(zip(free_args, indices))
    a = [x.func(*x.fun_eval(*index_tuples).args) for x in self.args]
    res = TensAdd(*a)
    return res
