code: def get_split_samples(self, id):
      samples = np.array(self.get_node_samples()[id])
      node_X_data = self.X_train[samples, self.get_node_feature(id)]
      split = self.get_node_split(id)
  
      if self.is_categorical_split(id):
          indices = np.sum(
              [
                  node_X_data == split_value
                  for split_value in self.get_node_split(id)
              ],
              axis=0,
          )
          left = np.nonzero(indices == 1)[0]
          right = np.nonzero(indices == 0)[0]
      else:
          left = np.nonzero(node_X_data <= split)[0]
          right = np.nonzero(node_X_data > split)[0]
      return left, right
  
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 14 for calling the ShadowLightGBMTree obj's underlying member method code with example usage: obj.get_split_samples(id) and returns: left,  right