class_docstr: ConcatDataSource
  
  Wrapper DataSource for Multiple DataSources.
code: def __init__(self, data_source_list, shuffle=True, rng=None):
      super(ConcatDataSource, self).__init__(shuffle=shuffle, rng=rng)
      self._data_sources = data_source_list
  
      self._sw_points = list(
          map(
              lambda s: sum(
                  [
                      x.size
                      for x in data_source_list[
                          : data_source_list.index(s) + 1
                      ]
                  ]
              ),
              data_source_list,
          )
      )  # Switching DataSource index
  
      self._size = self._sw_points[-1]
      self._variables = data_source_list[0].variables
      self.reset()
  
imports: import atexit
  import csv
  import os
  import threading
  from collections import OrderedDict, deque
  from time import sleep
  import numpy
  from nnabla.config import nnabla_config
  from nnabla.logger import logger
  from nnabla.utils.communicator_util import current_communicator
  from six.moves import queue
  from .data_source import DataSource
  from .data_source_loader import FileReader, load
label_desc: Use image node_id 1 to create a new ConcatDataSource object from inherited base classes: DataSource with example: obj = ConcatDataSource(data_source_list, shuffle, rng)