<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_mesh_dict(self):
 """Returns calculated mesh sampling phonons Returns ------- dict keys: qpoints, weights, frequencies, eigenvectors, and group_velocities Each value for the corresponding key is explained as below. qpoints: ndarray q-points in reduced coordinates of reciprocal lattice dtype='double' shape=(ir-grid points, 3) weights: ndarray Geometric q-point weights. Its sum is the number of grid points. dtype='intc' shape=(ir-grid points,) frequencies: ndarray Phonon frequencies at ir-grid points. Imaginary frequenies are represented by negative real numbers. dtype='double' shape=(ir-grid points, bands) eigenvectors: ndarray Phonon eigenvectors at ir-grid points. See the data structure at np.linalg.eigh. dtype='complex' shape=(ir-grid points, bands, bands) group_velocities: ndarray Phonon group velocities at ir-grid points. dtype='double' shape=(ir-grid points, bands, 3) """

        if self._mesh is None:
            msg = ("run_mesh has to be done.")
            raise RuntimeError(msg)

        retdict = {'qpoints': self._mesh.qpoints,
                   'weights': self._mesh.weights,
                   'frequencies': self._mesh.frequencies,
                   'eigenvectors': self._mesh.eigenvectors,
                   'group_velocities': self._mesh.group_velocities}

        return retdict