class_docstr: DataLoaderDH
  DataLoader based on (D)ata (H)andler
  It is designed to load multiple data from data handler
  - If you just want to load data from single datahandler, you can write them in single data handler
  
  TODO: What make this module not that easy to use.
  
  - For online scenario
  
      - The underlayer data handler should be configured. But data loader doesn't provide such interface & hook.
class_docstr_tok: ["DataLoaderDH","DataLoader","based","on","(","D",")","ata","(","H",")","andler","It","is","designed","to","load","multiple","data","from","data","handler","-","If","you","just","want","to","load","data","from","single","datahandler",",","you","can","write","them","in","single","data","handler","TODO",":","What","make","this","module","not","that","easy","to","use",".","-","For","online","scenario","-","The","underlayer","data","handler","should","be","configured",".","But","data","loader","does","n't","provide","such","interface","&","hook","."]
docstr: Parameters
  ----------
  handler_config : dict
      handler_config will be used to describe the handlers
  
      .. code-block::
  
          <handler_config> := {
              "group_name1": <handler>
              "group_name2": <handler>
          }
          or
          <handler_config> := <handler>
          <handler> := DataHandler Instance | DataHandler Config
  
  fetch_kwargs : dict
      fetch_kwargs will be used to describe the different arguments of fetch method, such as col_set, squeeze, data_key, etc.
  
  is_group: bool
      is_group will be used to describe whether the key of handler_config is group
docstr_tok: ["Parameters","--","--","--","--","--","handler_config",":","dict","handler_config","will","be","used","to","describe","the","handlers","..","code-block",":",":","<","handler_config",">",":","=","{","``","group_name1","''",":","<","handler",">","``","group_name2","''",":","<","handler",">","}","or","<","handler_config",">",":","=","<","handler",">","<","handler",">",":","=","DataHandler","Instance","|","DataHandler","Config","fetch_kwargs",":","dict","fetch_kwargs","will","be","used","to","describe","the","different","arguments","of","fetch","method",",","such","as","col_set",",","squeeze",",","data_key",",","etc",".","is_group",":","bool","is_group","will","be","used","to","describe","whether","the","key","of","handler_config","is","group"]
code: def __init__(
      self,
      handler_config: dict,
      fetch_kwargs: dict = {},
      is_group=False,
  ):
      """
      Parameters
      ----------
      handler_config : dict
          handler_config will be used to describe the handlers
  
          .. code-block::
  
              <handler_config> := {
                  "group_name1": <handler>
                  "group_name2": <handler>
              }
              or
              <handler_config> := <handler>
              <handler> := DataHandler Instance | DataHandler Config
  
      fetch_kwargs : dict
          fetch_kwargs will be used to describe the different arguments of fetch method, such as col_set, squeeze, data_key, etc.
  
      is_group: bool
          is_group will be used to describe whether the key of handler_config is group
  
      """
      from qlib.data.dataset.handler import (
          DataHandler,
      )  # pylint: disable=C0415
  
      if is_group:
          self.handlers = {
              grp: init_instance_by_config(
                  config, accept_types=DataHandler
              )
              for grp, config in handler_config.items()
          }
      else:
          self.handlers = init_instance_by_config(
              handler_config, accept_types=DataHandler
          )
  
      self.is_group = is_group
      self.fetch_kwargs = {"col_set": DataHandler.CS_RAW}
      self.fetch_kwargs.update(fetch_kwargs)
  
imports: import abc
  import pickle
  from pathlib import Path
  import warnings
  import pandas
  from typing import Tuple, Union, List
  from qlib.data import D
  from qlib.utils import load_dataset, init_instance_by_config, time_to_slc_point
  from qlib.log import get_module_logger
  from qlib.utils.serial import Serializable
label_desc: Use image node_id 1 to create a new DataLoaderDH object from inherited base classes: DataLoader with example: obj = DataLoaderDH(handler_config, fetch_kwargs, is_group)