def METHOD_NAME(prog_name: str):
    _parser = argparse.ArgumentParser(description=prog_name)
    _parser.add_argument("--version", "-V", action="store_true", help="print nvflare version")
    sub_cmd = _parser.add_subparsers(description="sub command parser", dest="sub_command")
    sub_cmd_parsers = {}
    sub_cmd_parsers.update(def_poc_parser(sub_cmd))
    sub_cmd_parsers.update(def_preflight_check_parser(sub_cmd))
    sub_cmd_parsers.update(def_provision_parser(sub_cmd))
    sub_cmd_parsers.update(def_simulator_parser(sub_cmd))
    sub_cmd_parsers.update(def_dashboard_parser(sub_cmd))
    sub_cmd_parsers.update(def_authz_preview_parser(sub_cmd))
    sub_cmd_parsers.update(def_job_cli_parser(sub_cmd))
    sub_cmd_parsers.update(def_config_parser(sub_cmd))
    args, argv = _parser.parse_known_args(None, None)
    cmd = args.__dict__.get("sub_command")
    sub_cmd_parser = sub_cmd_parsers.get(cmd)
    if argv:
        msg = f"{prog_name} {cmd}: unrecognized arguments: {''.join(argv)}\n"
        print(f"\nerror: {msg}")
        sub_cmd_parser.print_help()
        _parser.exit(2, "\n")
    return _parser, _parser.METHOD_NAME(), sub_cmd_parsers