'Create a new ``_IndexStructure`` object from a list of ``indices``
``indices``     ``TensorIndex`` objects, the indices. Contractions are
detected upon construction.
Examples
>>> from sympy.tensor.tensor import TensorIndexType, tensor_indices, _IndexStructure
>>> Lorentz = TensorIndexType(\'Lorentz\', dummy_fmt=\'L\')
>>> m0, m1, m2, m3 = tensor_indices(\'m0,m1,m2,m3\', Lorentz)
>>> _IndexStructure.from_indices(m0, m1, -m1, m3)
_IndexStructure([(m0, 0), (m3, 3)], [(1, 2)], [Lorentz, Lorentz, Lorentz, Lorentz])
In case of many components the same indices have slightly different
indexes:
>>> _IndexStructure.from_indices(m0, m1, -m1, m3)
_IndexStructure([(m0, 0), (m3, 3)], [(1, 2)], [Lorentz, Lorentz, Lorentz, Lorentz])'

@staticmethod
def from_indices(*indices):

    (free, dum) = _IndexStructure._free_dum_from_indices(*indices)
    index_types = [i.tensor_index_type for i in indices]
    indices = _IndexStructure._replace_dummy_names(indices, free, dum)
    return _IndexStructure(free, dum, index_types, indices)
