code: def add_columns(self, C_k_new, columns_new):
          r
          added = []
          for (i, c) in enumerate(columns_new):
              if self.add_column(C_k_new[:, i], c, update_error=False):
                  added.append(c)
          # update error only once
          self._compute_error()
          # return the columns that were successfully added
          return np.array(added)
docs: r""" Attempts to adds a set of new columns of :math:`A` to the Nystroem approximation and updates the local matrices
  
          Parameters
          ----------
          C_k_new : ndarray((N,k), dtype=float)
              :math:`k` new columns of :math:`A`
          columns_new : int
              indices of new columns within :math:`A`, in the same order as the C_k_new columns
  
          Return
          ------
          cols_added : ndarray of int
              Columns that were added successfully. Columns are only added when their Schur complement exceeds 0,
              which is normally true for columns that were not yet added, but the Schur complement may become 0 even
              for new columns as a result of numerical cancellation errors.