code: def fetch_result(self):
      # 1. Get experiment information
      exp_info_path = os.path.join(self.ex_dir, QLibTuner.EXP_INFO_NAME)
      with open(exp_info_path) as fp:
          exp_info = json.load(fp)
      estimator_ex_id = exp_info["id"]
  
      # 2. Return model result if needed
      if self.optim_config.report_type == "model":
          if self.optim_config.report_factor == "model_score":
              # if estimator experiment is multi-label training, user need to process the scores by himself
              # Default method is return the average score
              return np.mean(exp_info["performance"]["model_score"])
          elif self.optim_config.report_factor == "model_pearsonr":
              # pearsonr is a correlation coefficient, 1 is the best
              return np.abs(
                  exp_info["performance"]["model_pearsonr"] - 1
              )
  
      # 3. Get backtest results
      exp_result_dir = os.path.join(
          self.ex_dir, QLibTuner.EXP_RESULT_DIR.format(estimator_ex_id)
      )
      exp_result_path = os.path.join(
          exp_result_dir, QLibTuner.EXP_RESULT_NAME
      )
      with open(exp_result_path, "rb") as fp:
          analysis_df = pickle.load(fp)
  
      # 4. Get the backtest factor which user want to optimize, if user want to maximize the factor, then reverse the result
      res = analysis_df.loc[self.optim_config.report_type].loc[
          self.optim_config.report_factor
      ]
      # res = res.values[0] if self.optim_config.optim_type == 'min' else -res.values[0]
      if self.optim_config == "min":
          return res.values[0]
      elif self.optim_config == "max":
          return -res.values[0]
      else:
          # self.optim_config == 'correlation'
          return np.abs(res.values[0] - 1)
  
imports: import os
  import yaml
  import json
  import copy
  import pickle
  import logging
  import importlib
  import subprocess
  import pandas
  import numpy
  from abc import abstractmethod
  from ...log import get_module_logger, TimeInspector
  from hyperopt import fmin, tpe
  from hyperopt import STATUS_OK, STATUS_FAIL
label_desc: Use image node_id 2 for calling the QLibTuner obj's underlying member method code with example usage: obj.fetch_result() and returns: res, np, unknown, np, np