code: def _converged(self, X_old, X_new, missing_mask):
      # check for convergence
      old_missing_values = X_old[missing_mask]
      new_missing_values = X_new[missing_mask]
      difference = old_missing_values - new_missing_values
      ssd = np.sum(difference**2)
      old_norm_squared = (old_missing_values**2).sum()
      # edge cases
      if old_norm_squared == 0 or (
          old_norm_squared < F32PREC and ssd > F32PREC
      ):
          return False
      else:
          return (ssd / old_norm_squared) < self.convergence_threshold
  
file_path: fancyimpute/fancyimpute/iterative_svd.py
imports: from sklearn.decomposition import TruncatedSVD
  from sklearn.utils import check_array
  import numpy
  from .solver import Solver
  from .common import masked_mae
label_desc: Use image node_id 2 for calling the IterativeSVD obj's underlying member method code with example usage: obj._converged(X_old, X_new, missing_mask) and returns: False, unknown