code: def _mask_node(self, ctx: Context, nodes: List[Node]):
      new_nodes = []
      for n in nodes:
          new_nodes.append(
              Node(
                  nid=n.nid,
                  is_leaf=n.is_leaf,
                  l=n.l,
                  r=n.r,
                  is_left_node=n.is_left_node,
                  split_id=n.split_id,
                  sitename=n.sitename,
                  sibling_nodeid=n.sibling_nodeid,
                  parent_nodeid=n.parent_nodeid,
                  sample_num=n.sample_num,
              )
          )
      return new_nodes
  
imports: from fate.ml.ensemble.learner.decision_tree.tree_core.decision_tree import DecisionTree, Node, _update_sample_pos_on_local_nodes, _merge_sample_pos
  from fate.ml.ensemble.learner.decision_tree.tree_core.hist import SBTHistogramBuilder
  from fate.ml.ensemble.learner.decision_tree.tree_core.splitter import SBTSplitter
  from fate.ml.ensemble.learner.decision_tree.tree_core.loss import get_task_info
  from fate.ml.ensemble.learner.decision_tree.tree_core.decision_tree import ALL_FEAT, GUEST_FEAT_ONLY
  from fate.ml.utils.predict_tools import BINARY, MULTI, REGRESSION
  from fate.arch import Context
  from fate.arch.dataframe import DataFrame
  from typing import List
  import functools
  import logging
  import pandas
  import torch
  import math
label_desc: Use image node_id 8 for calling the HeteroDecisionTreeGuest obj's underlying member method code with example usage: obj._mask_node(ctx, nodes) and returns: new_nodes