code: def _get_gh(self, ctx: Context):
      grad_and_hess: DataFrame = ctx.guest.get("en_gh")
      if len(grad_and_hess.columns) == 1:
          gh_pack = True
      elif len(grad_and_hess.columns) == 2:
          gh_pack = False
      else:
          raise ValueError(
              "error columns, got {}".format(len(grad_and_hess.columns))
          )
      return grad_and_hess, gh_pack
  
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 5 for calling the HeteroDecisionTreeHost obj's underlying member method code with example usage: obj._get_gh(ctx) and returns: grad_and_hess,  gh_pack