code: def _analysis_block_stats(regions, samples):
      
      prev = None
      between_sizes = []
      region_sizes = []
      for region in regions:
          if prev and prev.chrom == region.chrom:
              between_sizes.append(region.start - prev.end)
          region_sizes.append(region.end - region.start)
          prev = region
      def descriptive_stats(xs):
          if len(xs) < 2:
              return xs
          parts = ["min: %s" % min(xs),
                   "5%%: %s" % numpy.percentile(xs, 5),
                   "25%%: %s" % numpy.percentile(xs, 25),
                   "median: %s" % numpy.percentile(xs, 50),
                   "75%%: %s" % numpy.percentile(xs, 75),
                   "95%%: %s" % numpy.percentile(xs, 95),
                   "99%%: %s" % numpy.percentile(xs, 99),
                   "max: %s" % max(xs)]
          return "\n".join(["  " + x for x in parts])
      logger.info("Identified %s parallel analysis blocks\n" % len(region_sizes) +
                  "Block sizes:\n%s\n" % descriptive_stats(region_sizes) +
                  "Between block sizes:\n%s\n" % descriptive_stats(between_sizes))
      if len(region_sizes) == 0:
          raise ValueError("No callable regions found in: %s" %
                           (", ".join([dd.get_sample_name(x) for x in samples])))
docs: Provide statistics on sizes and number of analysis blocks.