class_docstr: !
  @brief Data generator provides services to generate data with clusters with normal distribution.
docstr: !
  @brief Constructs data generator for generating data-sets.
  
  @param[in] amount_clusters (uint): Amount of clusters that should be generated.
  @param[in] dimension (uint): Dimension of each generated point.
  @param[in] cluster_sizes (uint|array_like): Size of each cluster. In case of 'array_like' input clusters with
              corresponding sizes are generated.
  @param[in] cluster_centers (array_like): Optional parameter that defines cluster centers (means).
  @param[in] cluster_width (uint|array_like): Optional parameter that defines cluster width (standard deviation).
              In case of 'array_like' input each cluster has own standard deviation.
docstr_tok: ["!","@","brief","Constructs","data","generator","for","generating","data-sets",".","@","param","[","in","]","amount_clusters","(","uint",")",":","Amount","of","clusters","that","should","be","generated",".","@","param","[","in","]","dimension","(","uint",")",":","Dimension","of","each","generated","point",".","@","param","[","in","]","cluster_sizes","(","uint|array_like",")",":","Size","of","each","cluster",".","In","case","of","'array_like","'","input","clusters","with","corresponding","sizes","are","generated",".","@","param","[","in","]","cluster_centers","(","array_like",")",":","Optional","parameter","that","defines","cluster","centers","(","means",")",".","@","param","[","in","]","cluster_width","(","uint|array_like",")",":","Optional","parameter","that","defines","cluster","width","(","standard","deviation",")",".","In","case","of","'array_like","'","input","each","cluster","has","own","standard","deviation","."]
code: def __init__(
      self,
      amount_clusters,
      dimension,
      cluster_sizes,
      cluster_centers=None,
      cluster_width=1.0,
  ):
      """!
      @brief Constructs data generator for generating data-sets.
  
      @param[in] amount_clusters (uint): Amount of clusters that should be generated.
      @param[in] dimension (uint): Dimension of each generated point.
      @param[in] cluster_sizes (uint|array_like): Size of each cluster. In case of 'array_like' input clusters with
                  corresponding sizes are generated.
      @param[in] cluster_centers (array_like): Optional parameter that defines cluster centers (means).
      @param[in] cluster_width (uint|array_like): Optional parameter that defines cluster width (standard deviation).
                  In case of 'array_like' input each cluster has own standard deviation.
  
      """
  
      self.__amount_clusters = amount_clusters
      self.__dimension = dimension
  
      self.__cluster_sizes = cluster_sizes
      if not isinstance(self.__cluster_sizes, collections.abc.Iterable):
          self.__cluster_sizes = [
              self.__cluster_sizes
          ] * amount_clusters
  
      self.__cluster_width = cluster_width
      if not isinstance(self.__cluster_width, collections.abc.Iterable):
          self.__cluster_width = [
              self.__cluster_width
          ] * amount_clusters
  
      self.__cluster_centers = cluster_centers
      if self.__cluster_centers is None:
          self.__cluster_centers = self.__generate_cluster_centers(
              self.__cluster_width
          )
  
imports: import collections.abc
  import random
label_desc: Use image node_id 1 to create a new data_generator object  with example: obj = data_generator(amount_clusters, dimension, cluster_sizes, cluster_centers, cluster_width)