class_docstr: Check how good the error approximations are. Of course, we use an
  approximation for P so this itself is an approximation.
class_docstr_tok: ["Check","how","good","the","error","approximations","are",".","Of","course",",","we","use","an","approximation","for","P","so","this","itself","is","an","approximation","."]
code: def __call__(
      self, iteration: int, error: float, embedding: TSNEEmbedding
  ):
      exact_error = kl_divergence.kl_divergence_exact(
          self.P.toarray(), embedding
      )
      bh_error = kl_divergence.kl_divergence_approx_bh(
          self.P.indices, self.P.indptr, self.P.data, embedding
      )
      fft_error = kl_divergence.kl_divergence_approx_fft(
          self.P.indices, self.P.indptr, self.P.data, embedding
      )
  
      self.exact_errors.append(exact_error)
      self.bh_errors.append(bh_error)
      self.fft_errors.append(fft_error)
  
file_path: openTSNE/openTSNE/callbacks.py
imports: import logging
  from functools import partial
  import numpy
  from scipy.sparse import csr_matrix
  from openTSNE import kl_divergence
  from openTSNE.tsne import TSNEEmbedding
label_desc: Use image node_id 2 for calling the ErrorApproximations obj's underlying member method code with example usage: obj.__call__(iteration, error, embedding) without return types