docs: def split_sources(srcs):
      """
      :param srcs: sources
      :returns: a pair (split sources, split time) or just the split_sources
      """
      from openquake.hazardlib.source import splittable
      sources = []
      split_time = {}  # src.id -> time
      for src in srcs:
          t0 = time.time()
          mag_a, mag_b = src.get_min_max_mag()
          min_mag = src.min_mag
          if mag_b < min_mag:  # discard the source completely
              continue
          has_serial = hasattr(src, 'serial')
          if has_serial:
              src.serial = numpy.arange(
                  src.serial, src.serial + src.num_ruptures)
          if not splittable(src):
              sources.append(src)
              split_time[src.id] = time.time() - t0
              continue
          if min_mag:
              splits = []
              for s in src:
                  s.min_mag = min_mag
                  mag_a, mag_b = s.get_min_max_mag()
                  if mag_b < min_mag:
                      continue
                  s.num_ruptures = s.count_ruptures()
                  if s.num_ruptures:
                      splits.append(s)
          else:
              splits = list(src)
          split_time[src.id] = time.time() - t0
          sources.extend(splits)
          has_samples = hasattr(src, 'samples')
          if len(splits) > 1:
              start = 0
              for i, split in enumerate(splits):
                  split.source_id = '%s:%s' % (src.source_id, i)
                  split.src_group_id = src.src_group_id
                  split.id = src.id
                  if has_serial:
                      nr = split.num_ruptures
                      split.serial = src.serial[start:start + nr]
                      start += nr
                  if has_samples:
                      split.samples = src.samples
          elif splits:  # single source
              splits[0].id = src.id
              if has_serial:
                  splits[0].serial = src.serial
              if has_samples:
                  splits[0].samples = src.samples
      return sources, split_time