code: def _build_explanation(
      self,
      X: Union[List[np.ndarray], np.ndarray],
      forward_kwargs: Optional[dict],
      baselines: List[np.ndarray],
      target: Optional[np.ndarray],
      attributions: Union[List[np.ndarray], List[tf.Tensor]],
      deltas: np.ndarray,
  ) -> Explanation:
      if forward_kwargs is None:
          forward_kwargs = {}
      data = copy.deepcopy(DEFAULT_DATA_INTGRAD)
      predictions = self.model(X, **forward_kwargs).numpy()
      if isinstance(attributions[0], tf.Tensor):
          attributions = [attr.numpy() for attr in attributions]  # type: ignore[union-attr]
      data.update(
          X=X,
          forward_kwargs=forward_kwargs,
          baselines=baselines,
          target=target,
          attributions=attributions,
          deltas=deltas,
          predictions=predictions,
      )
  
      return Explanation(meta=copy.deepcopy(self.meta), data=data)
  
imports: import copy
  import logging
  import string
  import warnings
  from enum import Enum
  from typing import Callable, List, Optional, Tuple, Union, cast
  import numpy
  import tensorflow
  from alibi.api.defaults import DEFAULT_DATA_INTGRAD, DEFAULT_META_INTGRAD
  from alibi.api.interfaces import Explainer, Explanation
  from alibi.utils.approximation_methods import approximation_parameters
label_desc: Use image node_id 3 for calling the IntegratedGradients obj's underlying member method code with example usage: obj._build_explanation(X, forward_kwargs, baselines, target, attributions, deltas) and returns: Explanation