class_docstr: Helper Class to wrap the different cases encountered with shap different explainers, multivariates,
  horizon etc.
  Aim to provide shap values for any type of RegressionModel. Manage the MultioutputRegressor cases.
  For darts RegressionModel only.
code: def __init__(
      self,
      model: RegressionModel,
      n: int,
      target_components: Sequence[str],
      past_covariates_components: Sequence[str],
      future_covariates_components: Sequence[str],
      background_series: Sequence[TimeSeries],
      background_past_covariates: Sequence[TimeSeries],
      background_future_covariates: Sequence[TimeSeries],
      shap_method: _ShapMethod,
      background_num_samples: Optional[int] = None,
      **kwargs,
  ):
      self.model = model
      self.target_dim = self.model.input_dim["target"]
      self.is_multioutputregressor = isinstance(
          self.model.model, MultiOutputRegressor
      )
  
      self.target_components = target_components
      self.past_covariates_components = past_covariates_components
      self.future_covariates_components = future_covariates_components
  
      self.n = n
      self.shap_method = shap_method
      self.background_series = background_series
      self.background_past_covariates = background_past_covariates
      self.background_future_covariates = background_future_covariates
  
      self.single_output = False
      if self.n == 1 and self.target_dim == 1:
          self.single_output = True
  
      self.background_X = self._create_regression_model_shap_X(
          self.background_series,
          self.background_past_covariates,
          self.background_future_covariates,
          background_num_samples,
          train=True,
      )
  
      if self.is_multioutputregressor:
          self.explainers = {}
          for i in range(self.n):
              self.explainers[i] = {}
              for j in range(self.target_dim):
                  self.explainers[i][j] = self._build_explainer_sklearn(
                      self.model.get_multioutput_estimator(
                          horizon=i, target_dim=j
                      ),
                      self.background_X,
                      self.shap_method,
                      **kwargs,
                  )
      else:
          self.explainers = self._build_explainer_sklearn(
              self.model.model,
              self.background_X,
              self.shap_method,
              **kwargs,
          )
  
imports: from enum import Enum
  from typing import Dict, NewType, Optional, Sequence, Union
  import matplotlib.pyplot
  import pandas
  import shap
  from sklearn.multioutput import MultiOutputRegressor
  from darts import TimeSeries
  from darts.explainability.explainability import _ForecastingModelExplainer
  from darts.explainability.explainability_result import ShapExplainabilityResult
  from darts.logging import get_logger, raise_if, raise_log
  from darts.models.forecasting.regression_model import RegressionModel
  from darts.utils.data.tabularization import create_lagged_prediction_data
label_desc: Use image node_id 1 to create a new _RegressionShapExplainers object  with example: obj = _RegressionShapExplainers(model, n, target_components, past_covariates_components, future_covariates_components, background_series, background_past_covariates, background_future_covariates, shap_method, background_num_samples)