class_docstr: !
  @brief Class implements CLIQUE grid based clustering algorithm.
  @details CLIQUE automatically finds subspaces with high-density clusters. It produces identical results
            irrespective of the order in which the input records are presented and it does not presume any canonical
            distribution for input data @cite article::clique::1.
  
  Here is an example where data in two-dimensional space is clustered using CLIQUE algorithm:
  @code
      from pyclustering.cluster.clique import clique, clique_visualizer
      from pyclustering.utils import read_sample
      from pyclustering.samples.definitions import FCPS_SAMPLES
  
      # read two-dimensional input data 'Target'
      data = read_sample(FCPS_SAMPLES.SAMPLE_TARGET)
  
      # create CLIQUE algorithm for processing
      intervals = 10  # defines amount of cells in grid in each dimension
      threshold = 0   # lets consider each point as non-outlier
      clique_instance = clique(data, intervals, threshold)
  
      # start clustering process and obtain results
      clique_instance.process()
      clusters = clique_instance.get_clusters()  # allocated clusters
      noise = clique_instance.get_noise()     # points that are considered as outliers (in this example should be empty)
      cells = clique_instance.get_cells()     # CLIQUE blocks that forms grid
  
      print("Amount of clusters:", len(clusters))
  
      # visualize clustering results
      clique_visualizer.show_grid(cells, data)    # show grid that has been formed by the algorithm
      clique_visualizer.show_clusters(data, clusters, noise)  # show clustering results
  @endcode
  
  In this example 6 clusters are allocated including four small cluster where each such small cluster consists of
  three points. There are visualized clustering results - grid that has been formed by CLIQUE algorithm with
  density and clusters itself:
  @image html clique_clustering_target.png "Fig. 1. CLIQUE clustering results (grid and clusters itself)."
  
  Sometimes such small clusters should be considered as outliers taking into account fact that two clusters in the
  central are relatively huge. To treat them as a noise threshold value should be increased:
  @code
      intervals = 10
      threshold = 3   # block that contains 3 or less points is considered as a outlier as well as its points
      clique_instance = clique(data, intervals, threshold)
  @endcode
  
  Two clusters are allocated, but in this case some points in cluster-"circle" are also considered as outliers,
  because CLIQUE operates with blocks, not with points:
  @image html clique_clustering_with_noise.png "Fig. 2. Noise allocation by CLIQUE."
class_docstr_tok: ["!","@","brief","Class","implements","CLIQUE","grid","based","clustering","algorithm",".","@","details","CLIQUE","automatically","finds","subspaces","with","high-density","clusters",".","It","produces","identical","results","irrespective","of","the","order","in","which","the","input","records","are","presented","and","it","does","not","presume","any","canonical","distribution","for","input","data","@","cite","article",":",":clique",":",":1",".","Here","is","an","example","where","data","in","two-dimensional","space","is","clustered","using","CLIQUE","algorithm",":","@","code","from","pyclustering.cluster.clique","import","clique",",","clique_visualizer","from","pyclustering.utils","import","read_sample","from","pyclustering.samples.definitions","import","FCPS_SAMPLES","#","read","two-dimensional","input","data","'Target'","data","=","read_sample","(","FCPS_SAMPLES.SAMPLE_TARGET",")","#","create","CLIQUE","algorithm","for","processing","intervals","=","10","#","defines","amount","of","cells","in","grid","in","each","dimension","threshold","=","0","#","lets","consider","each","point","as","non-outlier","clique_instance","=","clique","(","data",",","intervals",",","threshold",")","#","start","clustering","process","and","obtain","results","clique_instance.process","(",")","clusters","=","clique_instance.get_clusters","(",")","#","allocated","clusters","noise","=","clique_instance.get_noise","(",")","#","points","that","are","considered","as","outliers","(","in","this","example","should","be","empty",")","cells","=","clique_instance.get_cells","(",")","#","CLIQUE","blocks","that","forms","grid","print","(","``","Amount","of","clusters",":","''",",","len","(","clusters",")",")","#","visualize","clustering","results","clique_visualizer.show_grid","(","cells",",","data",")","#","show","grid","that","has","been","formed","by","the","algorithm","clique_visualizer.show_clusters","(","data",",","clusters",",","noise",")","#","show","clustering","results","@","endcode","In","this","example","6","clusters","are","allocated","including","four","small","cluster","where","each","such","small","cluster","consists","of","three","points",".","There","are","visualized","clustering","results","-","grid","that","has","been","formed","by","CLIQUE","algorithm","with","density","and","clusters","itself",":","@","image","html","clique_clustering_target.png","``","Fig",".","1",".","CLIQUE","clustering","results","(","grid","and","clusters","itself",")",".","''","Sometimes","such","small","clusters","should","be","considered","as","outliers","taking","into","account","fact","that","two","clusters","in","the","central","are","relatively","huge",".","To","treat","them","as","a","noise","threshold","value","should","be","increased",":","@","code","intervals","=","10","threshold","=","3","#","block","that","contains","3","or","less","points","is","considered","as","a","outlier","as","well","as","its","points","clique_instance","=","clique","(","data",",","intervals",",","threshold",")","@","endcode","Two","clusters","are","allocated",",","but","in","this","case","some","points","in","cluster-","''","circle","''","are","also","considered","as","outliers",",","because","CLIQUE","operates","with","blocks",",","not","with","points",":","@","image","html","clique_clustering_with_noise.png","``","Fig",".","2",".","Noise","allocation","by","CLIQUE",".","''"]
docstr: !
  @brief Returns allocated noise.
  
  @remark Allocated noise is returned only after data processing (method process()). Otherwise empty list is returned.
  
  @return (list) List of indexes that are marked as a noise.
  
  @see process()
  @see get_clusters()
docstr_tok: ["!","@","brief","Returns","allocated","noise",".","@","remark","Allocated","noise","is","returned","only","after","data","processing","(","method","process","(",")",")",".","Otherwise","empty","list","is","returned",".","@","return","(","list",")","List","of","indexes","that","are","marked","as","a","noise",".","@","see","process","(",")","@","see","get_clusters","(",")"]
code: def get_noise(self):
      """!
      @brief Returns allocated noise.
  
      @remark Allocated noise is returned only after data processing (method process()). Otherwise empty list is returned.
  
      @return (list) List of indexes that are marked as a noise.
  
      @see process()
      @see get_clusters()
  
      """
      return self.__noise
  
imports: import itertools
  from pyclustering.cluster import cluster_visualizer
  from pyclustering.cluster.encoder import type_encoding
  from pyclustering.core.wrapper import ccore_library
  import pyclustering.core.clique_wrapper
  import matplotlib
  import matplotlib.gridspec
  import matplotlib.pyplot
  import matplotlib.patches
label_desc: Use image node_id 4 for calling the clique obj's underlying member method code with example usage: obj.get_noise() and returns: self