code: def decisions_binary(
      df_preds,
      shap_values,
      expected_value,
      X_vald,
      y_vald,
      model_file_path,
      learner_name,
  ):
      # classes are from 0 ...
      for t in np.unique(y_vald):
          fig = plt.gcf()
          shap.decision_plot(
              expected_value,
              shap_values[df_preds[df_preds.target == t].lp[:10], :],
              X_vald.loc[df_preds[df_preds.target == t].index[:10]],
              show=False,
          )
          fig.tight_layout(pad=2.0)
          fig.savefig(
              os.path.join(
                  model_file_path,
                  f"{learner_name}_shap_class_{t}_worst_decisions.png",
              )
          )
          plt.close("all")
  
          fig = plt.gcf()
          shap.decision_plot(
              expected_value,
              shap_values[df_preds[df_preds.target == t].lp[-10:], :],
              X_vald.loc[df_preds[df_preds.target == t].index[-10:]],
              show=False,
          )
          fig.tight_layout(pad=2.0)
          fig.savefig(
              os.path.join(
                  model_file_path,
                  f"{learner_name}_shap_class_{t}_best_decisions.png",
              )
          )
          plt.close("all")
  
imports: import logging
  import os
  import matplotlib.pyplot
  import numpy
  import pandas
  import shap
  from sklearn.preprocessing import OneHotEncoder
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION
  from supervised.utils.config import LOG_LEVEL
  import warnings
label_desc: Use image node_id 9 for calling the PlotSHAP obj's underlying member method code with example usage: obj.decisions_binary(df_preds, shap_values, expected_value, X_vald, y_vald, model_file_path, learner_name) without return types