code: def __init__(
      self,
      max_depth=3,
      valid_features=None,
      use_missing=False,
      zero_as_missing=False,
      random_seed=None,
      global_random_seed=None,
      hist_sub=True,
      tree_mode=ALL_FEAT,
  ):
      super().__init__(
          max_depth,
          use_missing=use_missing,
          zero_as_missing=zero_as_missing,
          valid_features=valid_features,
      )
      self._tree_node_num = 0
      self.hist_builder = None
      self.splitter = None
      self._valid_features = valid_features
      self._random_seed = random_seed
      self._global_random_seed = global_random_seed
      self._pk = None
      self._evaluator = None
      self._gh_pack = True
      self._pack_info = None
      self._hist_sub = hist_sub
  
      # feature control
      self._tree_mode = tree_mode
      assert self._tree_mode in [
          ALL_FEAT,
          GUEST_FEAT_ONLY,
      ], "tree mode {} not supported".format(self._tree_mode)
  
imports: from fate.ml.ensemble.learner.decision_tree.tree_core.decision_tree import DecisionTree, Node, _update_sample_pos_on_local_nodes, FeatureImportance
  from fate.ml.ensemble.learner.decision_tree.tree_core.hist import SBTHistogramBuilder, DistributedHistogram
  from fate.ml.ensemble.learner.decision_tree.tree_core.splitter import SBTSplitter
  from fate.ml.ensemble.learner.decision_tree.tree_core.decision_tree import ALL_FEAT, GUEST_FEAT_ONLY
  from fate.arch import Context
  from fate.arch.dataframe import DataFrame
  from typing import List
  import functools
  import logging
label_desc: Use image node_id 1 to create a new HeteroDecisionTreeHost object from inherited base classes: DecisionTree with example: obj = HeteroDecisionTreeHost(max_depth, valid_features, use_missing, zero_as_missing, random_seed, global_random_seed, hist_sub, tree_mode)