code: def _get_force_constants_disps(force_constants,
                                 supercell,
                                 dataset,
                                 symmetry,
                                 atom_list=None):
      
  
      symprec = symmetry.get_symmetry_tolerance()
      disp_atom_list = np.unique([x['number'] for x in dataset['first_atoms']])
      for disp_atom_number in disp_atom_list:
          disps = []
          sets_of_forces = []
  
          for x in dataset['first_atoms']:
              if x['number'] != disp_atom_number:
                  continue
              disps.append(x['displacement'])
              sets_of_forces.append(x['forces'])
  
          site_symmetry = symmetry.get_site_symmetry(disp_atom_number)
  
          solve_force_constants(force_constants,
                                disp_atom_number,
                                disps,
                                sets_of_forces,
                                supercell,
                                site_symmetry,
                                symprec,
                                atom_list=atom_list)
  
      return disp_atom_list
docs: Calculate force constants Phi = -F / d
  
      Force constants are obtained by one of the following algorithm.
  
      Parameters
      ----------
      force_constants: ndarray
          Force constants
          shape=(len(atom_list),n_satom,3,3)
          dtype=double
      supercell: Supercell
          Supercell
      dataset: dict
          Distplacement dataset. Forces are also stored.
      symmetry: Symmetry
          Symmetry information of supercell
      atom_list: list
          List of atom indices corresponding to the first index of force
          constants. None assigns all atoms in supercell.