code: def get_thresholds(self) -> np.ndarray:
      if self.thresholds is not None:
          return self.thresholds
  
      node_thresholds = [-1] * self.nnodes()
      for i in range(self.nnodes()):
          node = self.tree_nodes[i]
          if "InternalNode" in node.toString():
              if "CategoricalSplit" in node.split().toString():
                  # node_thresholds[i] = (list(node.split().leftCategories()), list(node.split().rightCategories()))
                  node_thresholds[i] = list(
                      node.split().leftCategories()
                  )
              elif "ContinuousSplit" in node.split().toString():
                  node_thresholds[i] = node.split().threshold()
  
      self.thresholds = np.array(node_thresholds, dtype=object)
      return self.thresholds
  
imports: from abc import ABC
  from collections import defaultdict
  from typing import List, Mapping
  import numpy
  import pyspark
  from dtreeviz.models.shadow_decision_tree import ShadowDecTree
  from dtreeviz.utils import criterion_remapping
  from pyspark.ml.classification import DecisionTreeClassificationModel
  from pyspark.ml.regression import DecisionTreeRegressionModel
label_desc: Use image node_id 8 for calling the ShadowSparkTree obj's underlying member method code with example usage: obj.get_thresholds() and returns: self, self