code: def get_parser():
      parser = config_argparse.ArgumentParser(
          description="Calc perplexity",
          formatter_class=argparse.ArgumentDefaultsHelpFormatter,
      )
  
      # Note(kamo): Use '_' instead of '-' as separator.
      # '-' is confusing if written in yaml.
      parser.add_argument(
          "--log_level",
          type=lambda x: x.upper(),
          default="INFO",
          choices=(
              "CRITICAL",
              "ERROR",
              "WARNING",
              "INFO",
              "DEBUG",
              "NOTSET",
          ),
          help="The verbose level of logging",
      )
  
      parser.add_argument("--output_dir", type=str, required=True)
      parser.add_argument(
          "--ngpu",
          type=int,
          default=0,
          help="The number of gpus. 0 indicates CPU mode",
      )
      parser.add_argument(
          "--seed", type=int, default=0, help="Random seed"
      )
      parser.add_argument(
          "--dtype",
          default="float32",
          choices=["float16", "float32", "float64"],
          help="Data type",
      )
      parser.add_argument(
          "--num_workers",
          type=int,
          default=1,
          help="The number of workers used for DataLoader",
      )
      parser.add_argument(
          "--batch_size",
          type=int,
          default=1,
          help="The batch size for inference",
      )
      parser.add_argument(
          "--log_base",
          type=float_or_none,
          default=None,
          help="The base of logarithm for Perplexity. "
          "If None, napier's constant is used.",
      )
  
      group = parser.add_argument_group("Input data related")
      group.add_argument(
          "--data_path_and_name_and_type",
          type=str2triple_str,
          required=True,
          action="append",
      )
      group.add_argument("--key_file", type=str_or_none)
      group.add_argument(
          "--allow_variable_data_keys", type=str2bool, default=False
      )
  
      group = parser.add_argument_group(
          "The model configuration related"
      )
      group.add_argument("--train_config", type=str)
      group.add_argument("--model_file", type=str)
  
      return parser
  
file_path: espnet/espnet2/bin/lm_calc_perplexity.py
imports: import argparse
  import logging
  import sys
  from pathlib import Path
  from typing import Optional, Sequence, Tuple, Union
  import numpy
  import torch
  from torch.nn.parallel import data_parallel
  from typeguard import check_argument_types
  from espnet2.fileio.datadir_writer import DatadirWriter
  from espnet2.tasks.lm import LMTask
  from espnet2.torch_utils.device_funcs import to_device
  from espnet2.torch_utils.forward_adaptor import ForwardAdaptor
  from espnet2.torch_utils.set_all_random_seed import set_all_random_seed
  from espnet2.utils import config_argparse
  from espnet2.utils.types import float_or_none, str2bool, str2triple_str, str_or_none
  from espnet.utils.cli_utils import get_commandline_args
label_desc: Use image node_id 2 for calling a global function with example usage: get_parser() and returns: parser