docs: def sample_background_model(
          hdf5, branch_key, tom, seed, filter_idx, min_mag, npd, hdd,
          upper_seismogenic_depth, lower_seismogenic_depth, msr=WC1994(),
          aspect=1.5, trt=DEFAULT_TRT):
      """
      Generates a rupture set from a sample of the background model
  
      :param branch_key:
          Key to indicate the branch for selecting the background model
      :param tom:
          Temporal occurrence model as instance of :class:
          openquake.hazardlib.tom.TOM
      :param seed:
          Random seed to use in the call to tom.sample_number_of_occurrences
      :param filter_idx:
          Sites for consideration (can be None!)
      :param float min_mag:
          Minimim magnitude for consideration of background sources
      :param npd:
          Nodal plane distribution as instance of :class:
          openquake.hazardlib.pmf.PMF
      :param hdd:
          Hypocentral depth distribution as instance of :class:
          openquake.hazardlib.pmf.PMF
      :param float aspect:
          Aspect ratio
      :param float upper_seismogenic_depth:
          Upper seismogenic depth (km)
      :param float lower_seismogenic_depth:
          Lower seismogenic depth (km)
      :param msr:
          Magnitude scaling relation
      :param float integration_distance:
          Maximum distance from rupture to site for consideration
      """
      bg_magnitudes = hdf5["/".join(["Grid", branch_key, "Magnitude"])].value
      # Select magnitudes above the minimum magnitudes
      mag_idx = bg_magnitudes >= min_mag
      mags = bg_magnitudes[mag_idx]
      rates = hdf5["/".join(["Grid", branch_key, "RateArray"])][filter_idx, :]
      rates = rates[:, mag_idx]
      valid_locs = hdf5["Grid/Locations"][filter_idx, :]
      # Sample remaining rates
      sampler = tom.sample_number_of_occurrences(rates, seed)
      background_ruptures = []
      background_n_occ = []
      for i, mag in enumerate(mags):
          rate_idx = numpy.where(sampler[:, i])[0]
          rate_cnt = sampler[rate_idx, i]
          occurrence = rates[rate_idx, i]
          locations = valid_locs[rate_idx, :]
          ruptures = generate_background_ruptures(
              tom, locations, occurrence,
              mag, npd, hdd, upper_seismogenic_depth,
              lower_seismogenic_depth, msr, aspect, trt)
          background_ruptures.extend(ruptures)
          background_n_occ.extend(rate_cnt.tolist())
      return background_ruptures, background_n_occ