code: def _fit(self, model, observation):
      row = observation.get_row_for_model(model)
      if row is None:
          raise Exception("Observation is not valid for given model.")
      B = self.get_option("B")
      cpus = self.get_option("cpus")
      with self.mutex:
          self.progress = 0
      for i in range(B // cpus):
          with self.mutex:
              if self.cancel_signal:
                  return
          shap = model.explainer.predict_parts(
              row, type="shap", B=cpus, processes=cpus
          )
          self.add_to_data(shap)
          with self.mutex:
              self.progress = (i + 1) * cpus / B
          self._emit_update()
      if B % cpus > 0:
          with self.mutex:
              if self.cancel_signal:
                  return
          shap = model.explainer.predict_parts(
              row, type="shap", B=B % cpus, processes=B % cpus
          )
          self.add_to_data(shap)
      with self.mutex:
          self.progress = 1
          self.is_done = True
          self._emit_update()
  
file_path: DALEX/python/dalex/dalex/arena/resources/_shapley_values_resource.py
imports: import pandas
  from .._resource import Resource
label_desc: Use image node_id 2 for calling the ShapleyValuesResource obj's underlying member method code with example usage: obj._fit(model, observation) without return types