class_docstr: (D)ata(L)oader (W)ith (P)arser for features and names
  
  Extracting this class so that QlibDataLoader and other dataloaders(such as QdbDataLoader) can share the fields.
class_docstr_tok: ["(","D",")","ata","(","L",")","oader","(","W",")","ith","(","P",")","arser","for","features","and","names","Extracting","this","class","so","that","QlibDataLoader","and","other","dataloaders","(","such","as","QdbDataLoader",")","can","share","the","fields","."]
docstr: Parameters
  ----------
  config : Union[list, tuple, dict]
      Config will be used to describe the fields and column names
  
      .. code-block::
  
          <config> := {
              "group_name1": <fields_info1>
              "group_name2": <fields_info2>
          }
          or
          <config> := <fields_info>
  
          <fields_info> := ["expr", ...] | (["expr", ...], ["col_name", ...])
          # NOTE: list or tuple will be treated as the things when parsing
docstr_tok: ["Parameters","--","--","--","--","--","config",":","Union","[","list",",","tuple",",","dict","]","Config","will","be","used","to","describe","the","fields","and","column","names","..","code-block",":",":","<","config",">",":","=","{","``","group_name1","''",":","<","fields_info1",">","``","group_name2","''",":","<","fields_info2",">","}","or","<","config",">",":","=","<","fields_info",">","<","fields_info",">",":","=","[","``","expr","''",",","...","]","|","(","[","``","expr","''",",","...","]",",","[","``","col_name","''",",","...","]",")","#","NOTE",":","list","or","tuple","will","be","treated","as","the","things","when","parsing"]
code: def __init__(self, config: Union[list, tuple, dict]):
      """
      Parameters
      ----------
      config : Union[list, tuple, dict]
          Config will be used to describe the fields and column names
  
          .. code-block::
  
              <config> := {
                  "group_name1": <fields_info1>
                  "group_name2": <fields_info2>
              }
              or
              <config> := <fields_info>
  
              <fields_info> := ["expr", ...] | (["expr", ...], ["col_name", ...])
              # NOTE: list or tuple will be treated as the things when parsing
      """
      self.is_group = isinstance(config, dict)
  
      if self.is_group:
          self.fields = {
              grp: self._parse_fields_info(fields_info)
              for grp, fields_info in config.items()
          }
      else:
          self.fields = self._parse_fields_info(config)
  
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 DLWParser object from inherited base classes: DataLoader with example: obj = DLWParser(config)