code: def _dump_instruments(self):
      logger.info("start dump instruments......")
      _fun = partial(self._get_date, is_begin_end=True)
      new_stock_files = sorted(
          filter(
              lambda x: fname_to_code(
                  x.name[: -len(self.file_suffix)].strip().lower()
              ).upper()
              not in self._old_instruments,
              self.csv_files,
          )
      )
      with tqdm(total=len(new_stock_files)) as p_bar:
          with ProcessPoolExecutor(max_workers=self.works) as execute:
              for file_path, (_begin_time, _end_time) in zip(
                  new_stock_files, execute.map(_fun, new_stock_files)
              ):
                  if isinstance(
                      _begin_time, pd.Timestamp
                  ) and isinstance(_end_time, pd.Timestamp):
                      symbol = fname_to_code(
                          self.get_symbol_from_file(file_path).lower()
                      ).upper()
                      _dt_map = self._old_instruments.setdefault(
                          symbol, dict()
                      )
                      _dt_map[
                          self.INSTRUMENTS_START_FIELD
                      ] = self._format_datetime(_begin_time)
                      _dt_map[
                          self.INSTRUMENTS_END_FIELD
                      ] = self._format_datetime(_end_time)
                  p_bar.update()
      _inst_df = pd.DataFrame.from_dict(
          self._old_instruments, orient="index"
      )
      _inst_df.index.names = [self.symbol_field_name]
      self.save_instruments(_inst_df.reset_index())
      logger.info("end of instruments dump.\n")
  
imports: import abc
  import shutil
  import traceback
  from pathlib import Path
  from typing import Iterable, List, Union
  from functools import partial
  from concurrent.futures import ThreadPoolExecutor, as_completed, ProcessPoolExecutor
  import fire
  import numpy
  import pandas
  from tqdm import tqdm
  from loguru import logger
  from qlib.utils import fname_to_code, code_to_fname
label_desc: Use image node_id 1 for calling the DumpDataFix obj's underlying member method code with example usage: obj._dump_instruments() without return types