code: def _split_node(node, threshold, branching_factor):
      """The node has to be split if there is no place for a new subcluster
      in the node.
      1. Two empty nodes and two empty subclusters are initialized.
      2. The pair of distant subclusters are found.
      3. The properties of the empty subclusters and nodes are updated
         according to the nearest distance between the subclusters to the
         pair of distant subclusters.
      4. The two nodes are set as children to the two subclusters.
      """
      new_subcluster1 = _CFSubcluster()
      new_subcluster2 = _CFSubcluster()
      new_node1 = _CFNode(
          threshold,
          branching_factor,
          is_leaf=node.is_leaf,
          n_features=node.n_features,
      )
      new_node2 = _CFNode(
          threshold,
          branching_factor,
          is_leaf=node.is_leaf,
          n_features=node.n_features,
      )
      new_subcluster1.child_ = new_node1
      new_subcluster2.child_ = new_node2
  
      if node.is_leaf:
          if node.prev_leaf_ is not None:
              node.prev_leaf_.next_leaf_ = new_node1
          new_node1.prev_leaf_ = node.prev_leaf_
          new_node1.next_leaf_ = new_node2
          new_node2.prev_leaf_ = new_node1
          new_node2.next_leaf_ = node.next_leaf_
          if node.next_leaf_ is not None:
              node.next_leaf_.prev_leaf_ = new_node2
  
      dist = euclidean_distances(
          node.centroids_,
          Y_norm_squared=node.squared_norm_,
          squared=True,
      )
      n_clusters = dist.shape[0]
  
      farthest_idx = np.unravel_index(
          dist.argmax(), (n_clusters, n_clusters)
      )
      node1_dist, node2_dist = dist[[farthest_idx]]
  
      node1_closer = node1_dist < node2_dist
      for idx, subcluster in enumerate(node.subclusters_):
          if node1_closer[idx]:
              new_node1.append_subcluster(subcluster)
              new_subcluster1.update(subcluster)
          else:
              new_node2.append_subcluster(subcluster)
              new_subcluster2.update(subcluster)
      return new_subcluster1, new_subcluster2
  
imports: from __future__ import division
  import warnings
  import numpy
  from scipy import sparse
  from math import sqrt
  from ..metrics.pairwise import euclidean_distances
  from ..base import TransformerMixin, ClusterMixin, BaseEstimator
  from ..externals.six.moves import xrange
  from ..utils import check_array
  from ..utils.extmath import row_norms, safe_sparse_dot
  from ..utils.validation import check_is_fitted
  from ..exceptions import NotFittedError
  from .hierarchical import AgglomerativeClustering
label_desc: Use image node_id 2 for calling a global function with example usage: _split_node(node, threshold, branching_factor) and returns: new_subcluster1,  new_subcluster2