code: def explanation(request):
      meta = deepcopy(DEFAULT_META_PD)
      data = deepcopy(DEFAULT_DATA_PD)
      kind = request.param
  
      meta.update(
          params={
              "kind": kind,
              "percentiles": (0.0, 1.0),
              "grid_resolution": 2,
              "feature_names": ["f_0", "f_1", "f_2", "f_3"],
              "categorical_names": {2: [0, 1, 2], 3: [0, 1, 2, 3, 4]},
              "target_names": ["c_0"],
          }
      )
  
      data["data"] = {
          "feature_deciles": [
              np.array(
                  [
                      -1.189,
                      -1.147,
                      -1.104,
                      -1.06,
                      -1.019,
                      -0.977,
                      -0.934,
                      -0.892,
                      -0.849,
                      -0.807,
                      -0.764,
                  ]
              ),
              np.array(
                  [
                      -0.647,
                      -0.588,
                      -0.528,
                      -0.468,
                      -0.408,
                      -0.348,
                      -0.289,
                      -0.229,
                      -0.169,
                      -0.109,
                      -0.050,
                  ]
              ),
              None,
              None,
              [
                  np.array(
                      [
                          -1.189,
                          -1.147,
                          -1.104,
                          -1.062,
                          -1.019,
                          -0.977,
                          -0.934,
                          -0.892,
                          -0.849,
                          -0.807,
                          -0.764,
                      ]
                  ),
                  np.array(
                      [
                          -0.647,
                          -0.588,
                          -0.528,
                          -0.468,
                          -0.408,
                          -0.348,
                          -0.289,
                          -0.229,
                          -0.169,
                          -0.109,
                          -0.050,
                      ]
                  ),
              ],
              [
                  np.array(
                      [
                          -0.647,
                          -0.588,
                          -0.528,
                          -0.468,
                          -0.408,
                          -0.348,
                          -0.289,
                          -0.229,
                          -0.169,
                          -0.109,
                          -0.050,
                      ]
                  ),
                  None,
              ],
              [
                  None,
                  np.array(
                      [
                          -0.647,
                          -0.588,
                          -0.528,
                          -0.468,
                          -0.408,
                          -0.348,
                          -0.289,
                          -0.229,
                          -0.169,
                          -0.109,
                          -0.050,
                      ]
                  ),
              ],
              [None, None],
          ],
          "pd_values": [
              np.array([[0.514, 0.469]]),
              np.array([[0.213, 0.771]]),
              np.array([[0.471, 0.515]]),
              np.array([[0.478, 0.506]]),
              np.array([[[0.235, 0.792], [0.193, 0.748]]]),
              np.array([[[0.191, 0.240], [0.742, 0.794]]]),
              np.array([[[0.191, 0.742], [0.240, 0.794]]]),
              np.array([[[0.456, 0.482], [0.503, 0.528]]]),
          ],
          "ice_values": [
              np.array([[[0.247, 0.203], [0.781, 0.735]]]),
              np.array([[[0.203, 0.760], [0.223, 0.781]]]),
              np.array([[[0.160, 0.203], [0.781, 0.827]]]),
              np.array([[[0.203, 0.230], [0.753, 0.781]]]),
              np.array(
                  [
                      [
                          [[0.247, 0.803], [0.203, 0.760]],
                          [[0.223, 0.781], [0.182, 0.735]],
                      ]
                  ]
              ),
              np.array(
                  [
                      [
                          [[0.160, 0.203], [0.703, 0.760]],
                          [[0.223, 0.277], [0.781, 0.827]],
                      ]
                  ]
              ),
              np.array(
                  [
                      [
                          [[0.160, 0.703], [0.203, 0.760]],
                          [[0.223, 0.781], [0.277, 0.827]],
                      ]
                  ]
              ),
              np.array(
                  [
                      [
                          [[0.160, 0.182], [0.203, 0.230]],
                          [[0.753, 0.781], [0.803, 0.827]],
                      ]
                  ]
              ),
          ],
          "feature_values": [
              np.array([-1.189, -0.764]),
              np.array([-0.647, -0.050]),
              np.array([1.0, 2.0]),
              np.array([0.0, 4.0]),
              [np.array([-1.189, -0.764]), np.array([-0.647, -0.050])],
              [np.array([-0.647, -0.050]), np.array([1.0, 2.0])],
              [np.array([1.0, 2.0]), np.array([-0.647, -0.050])],
              [np.array([1.0, 2.0]), np.array([0.0, 4.0])],
          ],
          "feature_names": [
              "f_0",
              "f_1",
              "f_2",
              "f_3",
              ("f_0", "f_1"),
              ("f_1", "f_2"),
              ("f_2", "f_1"),
              ("f_2", "f_3"),
          ],
      }
      return Explanation(meta=meta, data=data)
  
imports: import re
  import sys
  from copy import deepcopy
  from typing import Dict, List, Optional, Tuple, Union
  from packaging import version
  import matplotlib.pyplot
  import numpy
  import pandas
  import pytest
  from pytest_lazyfixture import lazy_fixture
  from sklearn.base import BaseEstimator
  from sklearn.datasets import make_classification
  from sklearn.ensemble import GradientBoostingClassifier
  from sklearn.exceptions import NotFittedError
  from sklearn.inspection import partial_dependence
  from sklearn.model_selection import train_test_split
  from sklearn.multioutput import MultiOutputClassifier
  from sklearn.pipeline import Pipeline
  from sklearn.utils import Bunch, shuffle
  import sklearn
  from alibi.api.defaults import DEFAULT_DATA_PD, DEFAULT_META_PD
  from alibi.api.interfaces import Explanation
  from alibi.explainers import PartialDependence, TreePartialDependence, plot_pd
  from alibi.explainers.partial_dependence import _plot_one_pd_cat, _plot_one_pd_num, _plot_two_pd_cat_cat, _plot_two_pd_num_cat, _plot_two_pd_num_num, _process_pd_ice, _sample_ice
label_desc: Use image node_id 20 for calling a global function with example usage: explanation(request) and returns: Explanation