<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_amplification_factors(self, imt, sctx, rctx, dists, stddev_types):
 """ Returns the amplification factors for the given rupture and site conditions. :param imt: Intensity measure type as an instance of the :class: `openquake.hazardlib.imt` :param sctx: SiteCollection instance :param rctx: Rupture instance :param dists: Source to site distances (km) :param stddev_types: List of required standard deviation types :returns: * mean_amp - Amplification factors applied to the median ground motion * sigma_amps - List of modification factors applied to the standard deviations of ground motion """

        dist_level_table = self.get_mean_table(imt, rctx)
        sigma_tables = self.get_sigma_tables(imt, rctx, stddev_types)
        mean_interpolator = interp1d(self.values,
                                     numpy.log10(dist_level_table),
                                     axis=1)
        sigma_interpolators = [interp1d(self.values, sigma_table, axis=1)
                               for sigma_table in sigma_tables]
        if self.element == "Rupture":
            mean_amp = 10.0 ** mean_interpolator(
                getattr(rctx, self.parameter))[0] * numpy.ones_like(dists)
            sigma_amps = []
            for sig_interpolator in sigma_interpolators:
                sigma_amps.append(sig_interpolator(
                    getattr(rctx, self.parameter))[0] * numpy.ones_like(dists))
        else:
            mean_amp = 10.0 ** mean_interpolator(
                getattr(sctx, self.parameter))[0, :]
            sigma_amps = []
            for sig_interpolator in sigma_interpolators:
                sigma_amps.append(sig_interpolator(
                    getattr(sctx, self.parameter))[0, :] *
                    numpy.ones_like(dists))
        return mean_amp, sigma_amps