def METHOD_NAME():
    parser = argparse.ArgumentParser(prog="groups")
    subparsers = parser.add_subparsers(
        title="supported subcommands", description="", dest="subcommand"
    )
    subparsers.required = True
    # barrier
    barrier_parser = subparsers.add_parser(
        "barrier",
        usage="groups barrier [--leave] name",
        formatter_class=flux.util.help_formatter(),
    )
    barrier_parser.add_argument("--leave", action="store_true")
    barrier_parser.add_argument("name")
    barrier_parser.set_defaults(func=barrier)
    # watch
    watch_parser = subparsers.add_parser(
        "watch",
        usage="groups watch name",
        formatter_class=flux.util.help_formatter(),
    )
    watch_parser.add_argument("name")
    watch_parser.set_defaults(func=watch)
    # waitfor
    waitfor_parser = subparsers.add_parser(
        "waitfor",
        usage="groups waitfor [--count=N] name",
        formatter_class=flux.util.help_formatter(),
    )
    waitfor_parser.add_argument("--count", type=int, default=0)
    waitfor_parser.add_argument("name")
    waitfor_parser.set_defaults(func=waitfor)
    # get
    get_parser = subparsers.add_parser(
        "get",
        usage="groups get [--rank N] name",
        formatter_class=flux.util.help_formatter(),
    )
    get_parser.add_argument("--rank", type=int, default=0)
    get_parser.add_argument("name")
    get_parser.set_defaults(func=get)
    # join
    join_parser = subparsers.add_parser(
        "join",
        usage="groups join [--dubjoin] [--leave] [--dubleave] name",
        formatter_class=flux.util.help_formatter(),
    )
    join_parser.add_argument("--dubjoin", action="store_true")
    join_parser.add_argument("--leave", action="store_true")
    join_parser.add_argument("--dubleave", action="store_true")
    join_parser.add_argument("name")
    join_parser.set_defaults(func=join)
    args = parser.parse_args()
    args.func(args)