docs: def compose(scripts, name='main', description=None, prog=None,
              version=None):
      """
      Collects together different scripts and builds a single
      script dispatching to the subparsers depending on
      the first argument, i.e. the name of the subparser to invoke.
  
      :param scripts: a list of script instances
      :param name: the name of the composed parser
      :param description: description of the composed parser
      :param prog: name of the script printed in the usage message
      :param version: version of the script printed with --version
      """
      assert len(scripts) >= 1, scripts
      parentparser = argparse.ArgumentParser(
          description=description, add_help=False)
      parentparser.add_argument(
          '--version', '-v', action='version', version=version)
      subparsers = parentparser.add_subparsers(
          help='available subcommands; use %s help <subcmd>' % prog,
          prog=prog)
  
      def gethelp(cmd=None):
          if cmd is None:
              print(parentparser.format_help())
              return
          subp = subparsers._name_parser_map.get(cmd)
          if subp is None:
              print('No help for unknown command %r' % cmd)
          else:
              print(subp.format_help())
      help_script = Script(gethelp, 'help', help=False)
      progname = '%s ' % prog if prog else ''
      help_script.arg('cmd', progname + 'subcommand')
      for s in list(scripts) + [help_script]:
          subp = subparsers.add_parser(s.name, description=s.description)
          for args, kw in s.all_arguments:
              subp.add_argument(*args, **kw)
          subp.set_defaults(_func=s.func)
  
      def main(**kw):
          try:
              func = kw.pop('_func')
          except KeyError:
              parentparser.print_usage()
          else:
              return func(**kw)
      main.__name__ = name
      return Script(main, name, parentparser)