code: def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
          
          assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES
                     for stddev_type in stddev_types)
  
          F, HW = self._get_fault_type_hanging_wall(rup.rake)
          S = self._get_site_class(sites.vs30)
  
          # compute pga on rock (used then to compute site amplification factor)
          C = self.COEFFS[PGA()]
          pga_rock = np.exp(
              self._compute_mean_on_rock(C, rup.mag, dists.rrup, F, HW)
          )
  
          # compute mean for the given imt (do not repeat the calculation if
          # imt is PGA, just add the site amplification term)
          if imt == PGA():
              mean = np.log(pga_rock) + S * self._compute_f5(C, pga_rock)
          else:
              C = self.COEFFS[imt]
              mean = (
                  self._compute_mean_on_rock(C, rup.mag, dists.rrup, F, HW) +
                  S * self._compute_f5(C, pga_rock)
              )
  
          C_STD = self.COEFFS_STD[imt]
          stddevs = self._get_stddevs(
              C_STD, rup.mag, stddev_types, sites.vs30.size
          )
  
          return mean, stddevs
docs: See :meth:`superclass method
          <.base.GroundShakingIntensityModel.get_mean_and_stddevs>`
          for spec of input and result values.