class_docstr: The steps to using a handler
  1. initialized data handler  (call by `init`).
  2. use the data.
  
  
  The data handler try to maintain a handler with 2 level.
  `datetime` & `instruments`.
  
  Any order of the index level can be supported (The order will be implied in the data).
  The order  <`datetime`, `instruments`> will be used when the dataframe index name is missed.
  
  Example of the data:
  The multi-index of the columns is optional.
  
  .. code-block:: text
  
                              feature                                                            label
                              $close     $volume  Ref($close, 1)  Mean($close, 3)  $high-$low  LABEL0
      datetime   instrument
      2010-01-04 SH600000    81.807068  17145150.0       83.737389        83.016739    2.741058  0.0032
                 SH600004    13.313329  11800983.0       13.313329        13.317701    0.183632  0.0042
                 SH600005    37.796539  12231662.0       38.258602        37.919757    0.970325  0.0289
  
  
  Tips for improving the performance of datahandler
  - Fetching data with `col_set=CS_RAW` will return the raw data and may avoid pandas from copying the data when calling `loc`
docstr: configuration of data.
  # what data to be loaded from data source
  
  This method will be used when loading pickled handler from dataset.
  The data will be initialized with different time range.
code: def config(self, **kwargs):
      """
      configuration of data.
      # what data to be loaded from data source
  
      This method will be used when loading pickled handler from dataset.
      The data will be initialized with different time range.
  
      """
      attr_list = {"instruments", "start_time", "end_time"}
      for k, v in kwargs.items():
          if k in attr_list:
              setattr(self, k, v)
  
      for attr in attr_list:
          if attr in kwargs:
              kwargs.pop(attr)
  
      super().config(**kwargs)
  
imports: import warnings
  from typing import Callable, Union, Tuple, List, Iterator, Optional
  import pandas
  from qlib.typehint import Literal
  from ...log import get_module_logger, TimeInspector
  from ...utils import init_instance_by_config
  from ...utils.serial import Serializable
  from .utils import fetch_df_by_index, fetch_df_by_col
  from ...utils import lazy_sort_index
  from .loader import DataLoader
  from .None import processor
  from .None import loader
label_desc: Use image node_id 2 for calling the DataHandler obj's underlying member method code with example usage: obj.config() without return types