class_docstr: !
  @brief Observer of K-Means algorithm that is used to collect information about clustering process on each iteration of the algorithm.
  
  @see kmeans
docstr: !
  @brief This method is called by K-Means algorithm to notify about changes.
  
  @param[in] clusters (array_like): Allocated clusters by K-Means algorithm.
  @param[in] centers (array_like): Allocated centers by K-Means algorithm.
docstr_tok: ["!","@","brief","This","method","is","called","by","K-Means","algorithm","to","notify","about","changes",".","@","param","[","in","]","clusters","(","array_like",")",":","Allocated","clusters","by","K-Means","algorithm",".","@","param","[","in","]","centers","(","array_like",")",":","Allocated","centers","by","K-Means","algorithm","."]
code: def notify(self, clusters, centers):
      """!
      @brief This method is called by K-Means algorithm to notify about changes.
  
      @param[in] clusters (array_like): Allocated clusters by K-Means algorithm.
      @param[in] centers (array_like): Allocated centers by K-Means algorithm.
  
      """
      self.__evolution_clusters.append(clusters)
      self.__evolution_centers.append(centers)
  
imports: import copy
  import numpy
  import matplotlib.pyplot
  import matplotlib.animation
  import pyclustering.core.kmeans_wrapper
  from pyclustering.core.wrapper import ccore_library
  from pyclustering.core.metric_wrapper import metric_wrapper
  from pyclustering.cluster.encoder import type_encoding
  from pyclustering.cluster import cluster_visualizer
  from pyclustering.utils.metric import distance_metric, type_metric
label_desc: Use image node_id 3 for calling the kmeans_observer obj's underlying member method code with example usage: obj.notify(clusters, centers) without return types