docs: def impute_svd(df, rank=10, convergence_threshold=0.00001, max_iters=200):
          """
          Imputes the missing values by using SVD decomposition
          Based on the following publication: 'Missing value estimation methods for DNA microarrays' by Troyanskaya et. al.
  
          :param df:The input dataframe that contains missing values
          :param rank: Rank value of the truncated SVD
          :param convergence_threshold: The threshold to stop the iterations
          :param max_iters: Max number of iterations
          :return: the imputed dataframe
          """
          imputed_matrix = IterativeSVD(rank,convergence_threshold, max_iters).complete(df.values)
          imputed_df = pd.DataFrame(imputed_matrix, df.index, df.columns)
          return imputed_df