code: def _set_index_map(self, atom_mapping):
          
  
          lattice = self._phonon.supercell.get_cell()
          natom = len(self._ideal_positions)
          index_map_inv = np.zeros((self._N, natom), dtype='intc')
          for i, shift in enumerate(self._trans_s):
              for j, p in enumerate(self._ideal_positions - shift):  # minus r_i
                  diff = self._ideal_positions - p
                  diff -= np.rint(diff)
                  dist = np.sqrt((np.dot(diff, lattice) ** 2).sum(axis=1))
                  # k is index in _ideal_positions.
                  k = np.where(dist < self._symprec)[0][0]
                  index_map_inv[i, j] = k
          self._index_map_inv = index_map_inv
  
          self._atom_mapping = np.zeros(len(atom_mapping), dtype='int')
          for i, idx in enumerate(atom_mapping):
              if idx is None:
                  self._atom_mapping[i] = -1
              else:
                  self._atom_mapping[i] = idx
docs: T(r_i) in Eq.(3) is given as permutation of atom indices.
  
          _index_set : ndarray
              For each translation (shift), atomic indices of the positions
              (_ideal_positions - shift) are searched and stored. The indices
              are used to select eigenvectors, by which T(r_i)|KJ> is
              represented.
              shape=(num_trans, num_sites), dtype='intc'