code: def stats(args):
      
      from jcvi.utils.table import tabulate
  
      p = OptionParser(stats.__doc__)
      p.add_option("--warn", default=False, action="store_true",
                   help="Warnings on small component spans [default: %default]")
      opts, args = p.parse_args(args)
  
      if len(args) != 1:
          sys.exit(p.print_help())
  
      agpfile, = args
  
      agp = AGP(agpfile)
      gap_lengths = []
      component_lengths = []
      for a in agp:
          span = a.object_span
          if a.is_gap:
              label = a.gap_type
              gap_lengths.append((span, label))
          else:
              label = "{0}:{1}-{2}".format(a.component_id, a.component_beg, \
                     a.component_end)
              component_lengths.append((span, label))
              if opts.warn and span < 50:
                  logging.error("component span too small ({0}):\n{1}".\
                      format(span, a))
  
      table = dict()
      for label, lengths in zip(("Gaps", "Components"),
              (gap_lengths, component_lengths)):
  
          if not lengths:
              table[(label, "Min")] = table[(label, "Max")] \
                                    = table[(label, "Sum")] = "n.a."
              continue
  
          table[(label, "Min")] = "{0} ({1})".format(*min(lengths))
          table[(label, "Max")] = "{0} ({1})".format(*max(lengths))
          table[(label, "Sum")] = sum(x[0] for x in lengths)
  
      print(tabulate(table), file=sys.stderr)
docs: %prog stats agpfile
  
      Print out a report for length of gaps and components.