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","."]
code: def load(
      self, instruments=None, start_time=None, end_time=None
  ) -> pd.DataFrame:
      if instruments is not None:
          get_module_logger(self.__class__.__name__).warning(
              f"instruments[{instruments}] is ignored"
          )
  
      if self.is_group:
          df = pd.concat(
              {
                  grp: dh.fetch(
                      selector=slice(start_time, end_time),
                      level="datetime",
                      **self.fetch_kwargs,
                  )
                  for grp, dh in self.handlers.items()
              },
              axis=1,
          )
      else:
          df = self.handlers.fetch(
              selector=slice(start_time, end_time),
              level="datetime",
              **self.fetch_kwargs,
          )
      return df
  
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 2 for calling the DataLoaderDH obj's underlying member method code with example usage: obj.load(instruments, start_time, end_time) and returns: df