code: def fit(self, df_features):
      fetch_df = fetch_df_by_index(
          df_features,
          slice(self.fit_start_time, self.fit_end_time),
          level="datetime",
      )
      del df_features
      df_values = fetch_df.values
      names = {
          "price": slice(0, 10),
          "volume": slice(10, 12),
      }
      self.feature_med = {}
      self.feature_std = {}
      self.feature_vmax = {}
      self.feature_vmin = {}
      for name, name_val in names.items():
          part_values = df_values[:, name_val].astype(np.float32)
          if name == "volume":
              part_values = np.log1p(part_values)
          self.feature_med[name] = np.nanmedian(part_values)
          part_values = part_values - self.feature_med[name]
          self.feature_std[name] = (
              np.nanmedian(np.absolute(part_values)) * 1.4826 + EPS
          )
          part_values = part_values / self.feature_std[name]
          self.feature_vmax[name] = np.nanmax(part_values)
          self.feature_vmin[name] = np.nanmin(part_values)
  
file_path: qlib/examples/highfreq/highfreq_processor.py
imports: import numpy
  import pandas
  from qlib.constant import EPS
  from qlib.data.dataset.processor import Processor
  from qlib.data.dataset.utils import fetch_df_by_index
label_desc: Use image node_id 2 for calling the HighFreqNorm obj's underlying member method code with example usage: obj.fit(df_features) without return types