code: def set_modulations(self,
                          dimension,
                          phonon_modes,
                          delta_q=None,
                          derivative_order=None,
                          nac_q_direction=None):
          
          if self._dynamical_matrix is None:
              msg = ("Dynamical matrix has not yet built.")
              raise RuntimeError(msg)
  
          self._modulation = Modulation(self._dynamical_matrix,
                                        dimension,
                                        phonon_modes,
                                        delta_q=delta_q,
                                        derivative_order=derivative_order,
                                        nac_q_direction=nac_q_direction,
                                        factor=self._factor)
          self._modulation.run()
docs: Generate atomic displacements of phonon modes.
  
          The design of this feature is not very satisfactory, and thus API.
          Therefore it should be reconsidered someday in the fugure.
  
          Parameters
          ----------
          dimension : array_like
             Supercell dimension with respect to the primitive cell.
             dtype='intc', shape=(3, ), (3, 3), (9, )
          phonon_modes : list of phonon mode settings
             Each element of the outer list gives one phonon mode information:
  
                 [q-point, band index (int), amplitude (float), phase (float)]
  
             In each list of the phonon mode information, the first element is
             a list that represents q-point in reduced coordinates. The second,
             third, and fourth elements show the band index starting with 0,
             amplitude, and phase factor, respectively.