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)
  
          mean = np.zeros_like(sites.vs30)
          stddevs = [np.zeros_like(sites.vs30) for _ in stddev_types]
  
          idx_rock = sites.vs30 >= self.ROCK_VS30
          idx_soil = sites.vs30 < self.ROCK_VS30
  
          if idx_rock.any():
              C = self.COEFFS_ROCK[imt]
              self._compute_mean(C, self.CONSTS['A1_rock'],
                                 self.CONSTS['A2_rock'], self.CONSTS['A3_rock'],
                                 self.CONSTS['A4_rock'], self.CONSTS['A5_rock'],
                                 self.CONSTS['A6_rock'], rup.mag, rup.hypo_depth,
                                 dists.rrup, mean, idx_rock)
              self._compute_std(C, rup.mag, stddevs, idx_rock)
  
              if imt == SA(period=4.0, damping=5.0):
                  mean = mean / 0.399
  
          if idx_soil.any():
              C = self.COEFFS_SOIL[imt]
              self._compute_mean(C, self.CONSTS['A1_soil'],
                                 self.CONSTS['A2_soil'], self.CONSTS['A3_soil'],
                                 self.CONSTS['A4_soil'], self.CONSTS['A5_soil'],
                                 self.CONSTS['A6_soil'], rup.mag, rup.hypo_depth,
                                 dists.rrup, mean, idx_soil)
              self._compute_std(C, rup.mag, stddevs, idx_soil)
  
          return mean, stddevs
docs: See :meth:`superclass method
          <.base.GroundShakingIntensityModel.get_mean_and_stddevs>`
          for spec of input and result values.