docs: def get_mean_and_stddevs(self, sites, rup, dists, imt, stddev_types):
          """
          See :meth:`superclass method
          <.base.GroundShakingIntensityModel.get_mean_and_stddevs>`
          for spec of input and result values.
          """
          assert all(stddev_type in self.DEFINED_FOR_STANDARD_DEVIATION_TYPES
                     for stddev_type in stddev_types)
  
          # GMPE differentiates strike-slip, reverse and normal ruptures,
          # but combines normal and strike-slip into one category. See page 180.
          is_reverse = (45 <= rup.rake <= 135)
  
          stddevs = [numpy.zeros_like(sites.vs30) for _ in stddev_types]
          means = numpy.zeros_like(sites.vs30)
  
          [rocks_i] = (sites.vs30 > self.ROCK_VS30).nonzero()
          if len(rocks_i):
              rrup = dists.rrup.take(rocks_i)
              mean_rock = self._get_mean_rock(rup.mag, rup.rake, rrup,
                                              is_reverse, imt)
              means.put(rocks_i, mean_rock)
              for stddev_arr in stddevs:
                  stddev_rock = self._get_stddev_rock(rup.mag, imt)
                  stddev_arr.put(rocks_i, stddev_rock)
  
          [soils_i] = (sites.vs30 <= self.ROCK_VS30).nonzero()
          if len(soils_i):
              rrup = dists.rrup.take(soils_i)
              mean_soil = self._get_mean_deep_soil(rup.mag, rup.rake, rrup,
                                                   is_reverse, imt)
              means.put(soils_i, mean_soil)
              for stddev_arr in stddevs:
                  stddev_soil = self._get_stddev_deep_soil(rup.mag, imt)
                  stddev_arr.put(soils_i, stddev_soil)
  
          return means, stddevs