class_docstr: This class is a wrapper for iterating over datasets for multiple or similar tasks, typically useful for
  multi-task training.
  `task_name` and `sampler_config` are two mandatory keys that allows us to use task-specific data samplers.
  For specifying batch sizes, we use `train_batch_size0`, and `val_batch_size0` as keys for
  training and validation sets. Note that the batch sizes are scaled automatically depending on the number of GPUs.
  
  Args:
      opts: Command-line arguments
      data_samplers: dictionary containing different samplers
  
  Example::
  # Example yaml config for combining different samplers is given below.
  # Please note that configuration for each sampler should start with `-` in `chain_sampler`.
  
  sampler:
      name: "chain_sampler"
      chain_sampler_mode: "sequential"
      chain_sampler:
        - task_name: "segmentation"
          train_batch_size0: 10
          sampler_config:
            name: "variable_batch_sampler"
            use_shards: false
            num_repeats: 4
            truncated_repeat_aug_sampler: false
            vbs:
              crop_size_width: 512
              crop_size_height: 512
              max_n_scales: 25
              min_crop_size_width: 256
              max_crop_size_width: 768
              min_crop_size_height: 256
              max_crop_size_height: 768
              check_scale: 16
        - task_name: "classification"
          train_batch_size0: 20
          sampler_config:
            name: "batch_sampler"
            bs:
              crop_size_width: 512
              crop_size_height: 512
docstr: Add arguments for chain sampler.
docstr_tok: ["Add","arguments","for","chain","sampler","."]
code: def add_arguments(
      cls, parser: argparse.ArgumentParser
  ) -> argparse.ArgumentParser:
      """Add arguments for chain sampler."""
      if cls != ChainSampler:
          # Don't re-register arguments in subclasses that don't override `add_arguments()`.
          return parser
  
      group = parser.add_argument_group(cls.__name__)
      group.add_argument(
          "--sampler.chain-sampler", type=json.loads, action="append"
      )
      group.add_argument(
          "--sampler.chain-sampler-mode",
          type=str,
          default="sequential",
          choices=cls._SUPPORTED_SAMPLING_MODES,
          help="Chain sampler mode. Defaults to sequential.",
      )
      return parser
  
imports: from __future__ import annotations
  import argparse
  import copy
  import itertools
  import json
  from typing import Iterator, List, Mapping, Optional, Tuple
  from torch.utils.data.sampler import Sampler
  from data.sampler import SAMPLER_REGISTRY, build_sampler
  from options.utils import flatten_yaml_as_dict
  from utils import logger
label_desc: Use image node_id 2 for calling the ChainSampler obj's underlying member method code with example usage: obj.add_arguments(cls, parser) and returns: parser, parser