code: def _compare(self, file_path: Path):
      symbol = file_path.name.strip(self.file_suffix)
      if symbol.lower() not in self.qlib_symbols:
          return self.NOT_IN_FEATURES
      # qlib data
      qlib_df = D.features([symbol], self.qlib_fields, freq=self.freq)
      qlib_df.rename(
          columns={_c: _c.strip("$") for _c in qlib_df.columns},
          inplace=True,
      )
      # csv data
      origin_df = pd.read_csv(file_path)
      origin_df[self.date_field_name] = pd.to_datetime(
          origin_df[self.date_field_name]
      )
      if self.symbol_field_name not in origin_df.columns:
          origin_df[self.symbol_field_name] = symbol
      origin_df.set_index(
          [self.symbol_field_name, self.date_field_name], inplace=True
      )
      origin_df.index.names = qlib_df.index.names
      origin_df = origin_df.reindex(qlib_df.index)
      try:
          compare = datacompy.Compare(
              origin_df,
              qlib_df,
              on_index=True,
              abs_tol=1e-08,  # Optional, defaults to 0
              rel_tol=1e-05,  # Optional, defaults to 0
              df1_name="Original",  # Optional, defaults to 'df1'
              df2_name="New",  # Optional, defaults to 'df2'
          )
          _r = compare.matches(ignore_extra_columns=True)
          return self.COMPARE_TRUE if _r else self.COMPARE_FALSE
      except Exception as e:
          logger.warning(f"{symbol} compare error: {e}")
          return self.COMPARE_ERROR
  
file_path: qlib/scripts/check_dump_bin.py
imports: from pathlib import Path
  from concurrent.futures import ProcessPoolExecutor
  import qlib
  from qlib.data import D
  import fire
  import datacompy
  import pandas
  from tqdm import tqdm
  from loguru import logger
label_desc: Use image node_id 2 for calling the CheckBin obj's underlying member method code with example usage: obj._compare(file_path) and returns: self, unknown, self