code: def multioutput_decision(
      base_values, shap_values, row_index, **kwargs
  ) -> Union[DecisionPlotResult, None]:
      """Decision plot for multioutput models.
  
      Plots all outputs for a single observation. By default, the plotted base value will be the mean of base_values
      unless new_base_value is specified. Supports both SHAP values and SHAP interaction values.
  
      Parameters
      ----------
      base_values : list of float
          This is the reference value that the feature contributions start from. Use explainer.expected_value.
  
      shap_values : list of numpy.ndarray
          A multioutput list of SHAP matrices or SHAP cubes from explainer.shap_values() or
          explainer.shap_interaction_values(), respectively.
  
      row_index : int
          The integer index of the row to plot.
  
      **kwargs : Any
          Arguments to be passed on to decision_plot().
  
      Returns
      -------
      DecisionPlotResult or None
          Returns a DecisionPlotResult object if `return_objects=True`. Returns `None` otherwise (the default).
      """
  
      if not (
          isinstance(base_values, list)
          and isinstance(shap_values, list)
      ):
          raise ValueError(
              "The base_values and shap_values args expect lists."
          )
  
      # convert arguments to arrays for simpler handling
      base_values = np.array(base_values)
      if not (
          (base_values.ndim == 1)
          or (np.issubdtype(base_values.dtype, np.number))
      ):
          raise ValueError(
              "The base_values arg should be a list of scalars."
          )
      shap_values = np.array(shap_values)
      if shap_values.ndim not in [3, 4]:
          raise ValueError(
              "The shap_values arg should be a list of two or three dimensional SHAP arrays."
          )
      if shap_values.shape[0] != base_values.shape[0]:
          raise ValueError(
              "The base_values output length is different than shap_values."
          )
  
      # shift shap base values to mean of base values
      base_values_mean = base_values.mean()
      for i in range(shap_values.shape[0]):
          shap_values[i] = __change_shap_base_value(
              base_values[i], base_values_mean, shap_values[i]
          )
  
      # select the feature row corresponding to row_index
      if (kwargs is not None) and ("features" in kwargs):
          features = kwargs["features"]
          if isinstance(features, np.ndarray) and (features.ndim == 2):
              kwargs["features"] = features[[row_index]]
          elif isinstance(features, pd.DataFrame):
              kwargs["features"] = features.iloc[row_index]
  
      return decision(
          base_values_mean, shap_values[:, row_index, :], **kwargs
      )
  
file_path: shap/shap/plots/_decision.py
imports: from typing import Union
  import matplotlib.cm
  import matplotlib.pyplot
  import numpy
  import pandas
  from ..utils import hclust_ordering
  from ..utils._legacy import LogitLink, convert_to_link
  from .None import colors
  from ._labels import labels
label_desc: Use image node_id 4 for calling a global function with example usage: multioutput_decision(base_values, shap_values, row_index) and returns: decision