code: def get_features(self) -> np.ndarray:
      if self.features is not None:
          return self.features
  
      self.features = [-1] * self.nnodes()
      for i, node in enumerate(self.tree_nodes):
          self.features[i] = node.get("split_feature", -1)
  
      self.features = np.array(self.features)
      return self.features
  
imports: from collections import defaultdict
  from typing import List, Mapping
  import numpy
  import pandas
  from lightgbm.basic import Booster
  from dtreeviz.models.shadow_decision_tree import ShadowDecTree, VisualisationNotYetSupportedError
  from dtreeviz import utils
label_desc: Use image node_id 8 for calling the ShadowLightGBMTree obj's underlying member method code with example usage: obj.get_features() and returns: self, self