code: def _fit(self, model):
      B = self.get_option("B")
      cpus = self.get_option("cpus")
      with self.mutex:
          self.progress = 0
      dataset = model.explainer.data
      rows = dataset.shape[0]
      # Sample N rows
      N = self.get_option("N")
      if N < rows:
          sampled_rows = np.random.choice(
              np.arange(rows), N, replace=False
          )
          dataset = dataset.iloc[sampled_rows, :]
          rows = N
      buffor = []
      for i in range(rows):
          with self.mutex:
              if self.cancel_signal:
                  return
          shap = model.explainer.predict_parts(
              dataset.iloc[i], type="shap", B=B, processes=cpus
          )
          shap.result["row"] = i
          buffor.append(shap)
          # Append buffor to results if buffor size >= 10% of already appended
          if (
              len(buffor) >= 0.1 * (i + 1 - len(buffor))
          ) or i == rows - 1:
              self.add_to_data(buffor)
              buffor = []
              with self.mutex:
                  self.progress = (i + 1) / rows
              self._emit_update()
      with self.mutex:
          self.progress = 1
          self.is_done = True
          self._emit_update()
  
imports: import pandas
  import numpy
  from .._resource import Resource
label_desc: Use image node_id 2 for calling the DatasetShapleyValuesResource obj's underlying member method code with example usage: obj._fit(model) without return types