class_docstr: Each node in a CFTree is called a CFNode.
  
  The CFNode can have a maximum of branching_factor
  number of CFSubclusters.
  
  Parameters
  ----------
  threshold : float
      Threshold needed for a new subcluster to enter a CFSubcluster.
  
  branching_factor : int
      Maximum number of CF subclusters in each node.
  
  is_leaf : bool
      We need to know if the CFNode is a leaf or not, in order to
      retrieve the final subclusters.
  
  n_features : int
      The number of features.
  
  Attributes
  ----------
  subclusters_ : list
      List of subclusters for a particular CFNode.
  
  prev_leaf_ : _CFNode
      Useful only if is_leaf is True.
  
  next_leaf_ : _CFNode
      next_leaf. Useful only if is_leaf is True.
      the final subclusters.
  
  init_centroids_ : ndarray of shape (branching_factor + 1, n_features)
      Manipulate ``init_centroids_`` throughout rather than centroids_ since
      the centroids are just a view of the ``init_centroids_`` .
  
  init_sq_norm_ : ndarray of shape (branching_factor + 1,)
      manipulate init_sq_norm_ throughout. similar to ``init_centroids_``.
  
  centroids_ : ndarray of shape (branching_factor + 1, n_features)
      View of ``init_centroids_``.
  
  squared_norm_ : ndarray of shape (branching_factor + 1,)
      View of ``init_sq_norm_``.
code: def append_subcluster(self, subcluster):
      n_samples = len(self.subclusters_)
      self.subclusters_.append(subcluster)
      self.init_centroids_[n_samples] = subcluster.centroid_
      self.init_sq_norm_[n_samples] = subcluster.sq_norm_
  
      # Keep centroids and squared norm as views. In this way
      # if we change init_centroids and init_sq_norm_, it is
      # sufficient,
      self.centroids_ = self.init_centroids_[: n_samples + 1, :]
      self.squared_norm_ = self.init_sq_norm_[: n_samples + 1]
  
imports: import warnings
  from math import sqrt
  from numbers import Integral, Real
  import numpy
  from scipy import sparse
  from .._config import config_context
  from ..base import BaseEstimator, ClassNamePrefixFeaturesOutMixin, ClusterMixin, TransformerMixin, _fit_context
  from ..exceptions import ConvergenceWarning
  from ..metrics import pairwise_distances_argmin
  from ..metrics.pairwise import euclidean_distances
  from ..utils._param_validation import Interval
  from ..utils.extmath import row_norms
  from ..utils.validation import check_is_fitted
  from .None import AgglomerativeClustering
label_desc: Use image node_id 2 for calling the _CFNode obj's underlying member method code with example usage: obj.append_subcluster(subcluster) without return types