code: def _get_leaf_prediction_path(self, leaf):
      prediction_path = [leaf]
      left_parent = np.array(list(self.children_left.keys()))
      left_child = np.array(list(self.children_left.values()))
  
      right_parent = np.array(list(self.children_right.keys()))
      right_child = np.array(list(self.children_right.values()))
  
      def walk(node_id):
          if node_id != self.__class__.ROOT_NODE:
              try:
                  parent_node = left_parent[
                      np.where(left_child == node_id)[0][0]
                  ]
                  prediction_path.append(parent_node)
                  walk(parent_node)
              except IndexError:
                  pass
  
              try:
                  parent_node = right_parent[
                      np.where(right_child == node_id)[0][0]
                  ]
                  prediction_path.append(parent_node)
                  walk(parent_node)
              except IndexError:
                  pass
  
      walk(leaf)
      return prediction_path
  
imports: import json
  import math
  from collections import defaultdict
  from typing import List, Mapping
  import numpy
  from dtreeviz.models.shadow_decision_tree import VisualisationNotYetSupportedError
  from dtreeviz.models.shadow_decision_tree import ShadowDecTree
  from dtreeviz import utils
  import xgboost
  from xgboost.core import Booster
label_desc: Use image node_id 15 for calling the ShadowXGBDTree obj's underlying member method code with example usage: obj._get_leaf_prediction_path(leaf) and returns: prediction_path