docstr: Add task-specific arguments to the parser.
code: def add_args(parser):
      """Add task-specific arguments to the parser."""
      parser.add_argument(
          "-s",
          "--source-lang",
          default=None,
          metavar="SRC",
          help="source language",
      )
      parser.add_argument(
          "-t",
          "--target-lang",
          default=None,
          metavar="TARGET",
          help="target language",
      )
      parser.add_argument(
          "--left-pad-source",
          default=False,
          type=bool,
          metavar="BOOL",
          help="pad the source on the left (default: False)",
      )
      parser.add_argument(
          "--max-source-positions",
          default=1024,
          type=int,
          metavar="N",
          help="max number of tokens in the source sequence",
      )
      parser.add_argument(
          "--max-target-positions",
          default=1024,
          type=int,
          metavar="N",
          help="max number of tokens in the target sequence",
      )
      parser.add_argument(
          "--word-dropout-prob-map",
          default=None,
          help="Use NoisingDataset, and this argument specifies "
          "the probability a token is dropped randomly",
      )
      parser.add_argument(
          "--word-blank-prob-map",
          default=None,
          help="Use NoisingDataset, and this argument specifies "
          "the probability a token is replaced by unk",
      )
      parser.add_argument(
          "--max-word-shuffle-distance-map",
          default=None,
          help="Use NoisingDataset, and this argument specifies "
          "the maximum distance a word could move during the shuffle",
      )
      parser.add_argument(
          "--dataset-upsampling",
          default=None,
          metavar="FILE",
          help="Upsampling for certain datasets, with upsampling rate "
          "represented in a dictionary (dataset, rate). sampling ratio = "
          "upsampling rate * number of lines of the dataset / "
          "(upsampling rate * number of lines of the dataset"
          "+ number of total lines of other datsets). At most one of "
          "dataset_upsampling / dataset_relative_ratio could be specified.",
      )
      parser.add_argument(
          "--dataset-relative-ratio",
          default=None,
          metavar="FILE",
          help="Relative ratio(one-vs-rest) for certain dataset, "
          "represented in (dataset, ratio) tuple. It would be the final sampling"
          "ratio for certain dataset. For example when r = 0.5, half of training"
          "corpus would come from this dataset. At most one of "
          "dataset_upsampling / dataset_relative_ratio could be specified.",
      )
  
imports: import os
  from collections import OrderedDict
  from typing import Dict, List, Optional, Tuple
  import numpy
  from fairseq import data, options
  from fairseq.data import ConcatDataset, LanguagePairDataset, NoisingDataset
  from fairseq.data.multi_corpus_sampled_dataset import MultiCorpusSampledDataset
  from fairseq.data.noising import UnsupervisedMTNoising
  from fairseq.tasks import LegacyFairseqTask, register_task
  from pytorch_translate import constants, utils
  from pytorch_translate.data import char_data, data, dictionary, utils, weighted_data
  from pytorch_translate.data.language_pair_upsampling_dataset import LanguagePairUpsamplingDataset
  from pytorch_translate.research.multisource import multisource_data
label_desc: Use image node_id 1 for calling the PytorchTranslateTask obj's underlying member method code with example usage: obj.add_args(parser) without return types