code: def cli_main():
      parser = ArgumentParser()
      parser.add_argument(
          "--dataset",
          default="librimix",
          type=str,
          choices=["wsj0mix", "librimix"],
      )
      parser.add_argument(
          "--root-dir",
          type=Path,
          help="The path to the directory where the directory ``Libri2Mix`` or ``Libri3Mix`` is stored.",
      )
      parser.add_argument(
          "--librimix-tr-split",
          default="train-360",
          choices=["train-360", "train-100"],
          help="The training partition of librimix dataset. (default: ``train-360``)",
      )
      parser.add_argument(
          "--librimix-task",
          default="sep_clean",
          type=str,
          choices=["sep_clean", "sep_noisy", "enh_single", "enh_both"],
          help="The task to perform (separation or enhancement, noisy or clean). (default: ``sep_clean``)",
      )
      parser.add_argument(
          "--num-speakers",
          default=2,
          type=int,
          help="The number of speakers in the mixture. (default: 2)",
      )
      parser.add_argument(
          "--sample-rate",
          default=8000,
          type=int,
          help="Sample rate of audio files in the given dataset. (default: 8000)",
      )
      parser.add_argument(
          "--exp-dir",
          default=Path("./exp"),
          type=Path,
          help="The directory to save checkpoints and logs.",
      )
      parser.add_argument(
          "--gpu-device",
          default=-1,
          type=int,
          help="The gpu device for model inference. (default: -1)",
      )
  
      args = parser.parse_args()
  
      model = _get_model(num_sources=2)
      state_dict = torch.load(args.exp_dir / "best_model.pth")
      model.load_state_dict(state_dict)
  
      if args.gpu_device != -1:
          device = torch.device("cuda:" + str(args.gpu_device))
      else:
          device = torch.device("cpu")
  
      model = model.to(device)
  
      _, _, eval_loader = _get_dataloader(
          args.dataset,
          args.root_dir,
          args.num_speakers,
          args.sample_rate,
          1,  # batch size is set to 1 to avoid masking
          0,  # set num_workers to 0
          args.librimix_task,
          args.librimix_tr_split,
      )
  
      _eval(model, eval_loader, device)
  
imports: from argparse import ArgumentParser
  from pathlib import Path
  import mir_eval
  import torch
  from lightning_train import _get_dataloader, _get_model, sisdri_metric
label_desc: Use image node_id 2 for calling a global function with example usage: cli_main() without return types