ó
‡ˆ\c           @   s  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l Z d d l	 m
 Z
 d d l	 m Z d d l	 m Z d d l	 m Z d d	 l	 m Z d d
 l m Z d d l m Z d d l m Z d d l m Z d d l m Z d Z e d e ƒ Z d „  Z d „  Z d „  Z e j j d e e  g ƒ d „  ƒ Z! e j j d e  e g ƒ e j j d d d g ƒ d „  ƒ ƒ Z" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' d  „  Z( d! „  Z) d" „  Z* d# „  Z+ e j j d$ d% d& d' g ƒ d( „  ƒ Z, d) „  Z- d* „  Z. d S(+   s'   
Tests for DBSCAN clustering algorithm
iÿÿÿÿN(   t   distance(   t   sparse(   t   assert_equal(   t   assert_array_equal(   t   assert_raises(   t	   assert_in(   t   assert_not_in(   t   NearestNeighbors(   t   DBSCAN(   t   dbscan(   t   generate_clustered_data(   t   pairwise_distancesi   t
   n_clustersc          C   sð   d }  d } t  j t  j t ƒ ƒ } | t j | ƒ :} t | d d d |  d | ƒ\ } } t t | ƒ ƒ d | k r| d n d	 } t	 | t
 ƒ t d d d |  d | ƒ } | j | ƒ j } t t | ƒ ƒ t d | k ƒ } t	 | t
 ƒ d  S(
   Ng333333Ã?i
   t   metrict   precomputedt   epst   min_samplesiÿÿÿÿi   i    (   R    t
   squareformt   pdistt   Xt   npt   maxR	   t   lent   setR   R   R   t   fitt   labels_t   int(   R   R   t   Dt   core_samplest   labelst   n_clusters_1t   dbt   n_clusters_2(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_similarity   s    ("c          C   sÅ   d }  d } d } t  t d | d |  d | ƒ\ } } t t | ƒ ƒ t d | k ƒ } t | t ƒ t d | d |  d | ƒ } | j t ƒ j	 } t t | ƒ ƒ t d | k ƒ } t | t ƒ d  S(   Ngš™™™™™é?i
   t	   euclideanR   R   R   iÿÿÿÿ(
   R	   R   R   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R    (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_feature5   s    ""c          C   sc   t  t j t ƒ d d d d ƒ\ }  } t  t d d d d ƒ\ } } t | |  ƒ t | | ƒ d  S(   NR   gš™™™™™é?R   i
   (   R	   R   t
   lil_matrixR   R   (   t   core_sparset   labels_sparset
   core_denset   labels_dense(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_sparseL   s
    t   include_selfc   	      C   sß   t  t ƒ } t d d ƒ j t ƒ } |  r0 t n d  } | j d | d d ƒ } | j | j d | j d d k  sy t ‚ t	 | d d	 d
 d d d ƒ\ } } t	 | d d	 d
 d d d ƒ\ } } t
 | | ƒ t
 | | ƒ d  S(   Nt   radiusgÍÌÌÌÌÌì?R   t   modeR    i    i   R   gš™™™™™é?R   i
   R   R   (   R   R   R   R   t   Nonet   radius_neighbors_grapht   nnzt   shapet   AssertionErrorR	   R   (	   R*   R   t   nnt   X_t   D_sparseR%   R&   R'   R(   (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_sparse_precomputedT   s    +	t
   use_sparseR   R   t	   minkowskic         C   sˆ   t  j j d ƒ j d d ƒ } |  r3 t j | ƒ n | } | j ƒ  } t | d | ƒ|  rw t | j	 ƒ  | j	 ƒ  ƒ n t | | ƒ d  S(   Ni    i
   R   (
   R   t   randomt   RandomStatet   randR   t
   csr_matrixt   copyR	   R   t   toarray(   R6   R   R   t   X_copy(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_input_not_modifiedf   s    c          C   s¹   t  j j d ƒ }  |  j d d ƒ } d | | d k  <x~ | t j | ƒ g D]g } t d d ƒ j | ƒ } t | j	 t  j
 d | j d f ƒ ƒ t | j d ƒ t | j j d	 ƒ qJ Wd  S(
   Ni    i(   i
   gš™™™™™é?R   i   i   iÿÿÿÿ(   i    (   R   R8   R9   R:   R   R;   R   R   R   t   components_t   emptyR0   R   R   t   core_sample_indices_(   t   rngR   R3   R   (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_no_core_samplesu   s    &c       
   C   sÔ   d }  d } t  j } t t d | d |  d | d d ƒ\ } } t t | ƒ ƒ t d | k ƒ } t | t ƒ t	 d | d |  d | d d ƒ } | j
 t ƒ j } t t | ƒ ƒ t d | k ƒ } t | t ƒ d  S(	   Ngš™™™™™é?i
   R   R   R   t	   algorithmt	   ball_treeiÿÿÿÿ(   R    R"   R	   R   R   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R    (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_callable   s    	"	"c    
      C   s  d }  d } d } t  d d d i | d 6d |  d	 | d
 d ƒ j t ƒ } | j | j } } t  d d d |  d	 | d
 d d | ƒ j t ƒ } | j | j } } t | | ƒ t | | ƒ t  d d d |  d	 | d
 d ƒ j t ƒ } | j | j } }	 t | | ƒ t | |	 ƒ d  S(   Ngš™™™™™é?i
   i   R   R7   t   metric_paramst   pR   R   RE   RF   t	   manhattan(   R   R   R   RB   R   R   (
   R   R   RI   R   t   core_sample_1t   labels_1t   core_sample_2t   labels_2t   core_sample_3t   labels_3(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_metric_params›   s     c       	   C   s÷  d }  d } t  t ƒ } t | d d d |  d | ƒ\ } } t t | ƒ ƒ t d | k ƒ } t | t ƒ t d d	 d |  d | d
 d ƒ } | j	 t ƒ j
 } t t | ƒ ƒ t d | k ƒ } t | t ƒ t d d	 d |  d | d
 d ƒ } | j	 t ƒ j
 } t t | ƒ ƒ t d | k ƒ } t | t ƒ t d d d |  d | d
 d ƒ } | j	 t ƒ j
 } t t | ƒ ƒ t d | k ƒ }	 t |	 t ƒ t d d d |  d | d
 d ƒ } | j	 t ƒ j
 } t t | ƒ ƒ t d | k ƒ }
 t |
 t ƒ d  S(   Ngš™™™™™é?i
   R   R   R   R   iÿÿÿÿRI   g       @RE   RF   t   kd_treeg      ð?t	   leaf_sizei   (   R   R   R	   R   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R    t   n_clusters_3t   n_clusters_4t   n_clusters_5(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_balltree·   s0    "!"!"!"	"c          C   s,   d d g d d g g }  t  ƒ  j |  ƒ d  S(   Ng      ð?g       @g      @g      @(   R   R   (   R   (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_input_validationÞ   s    c           C   sr   t  t t t d d ƒt  t t t d d ƒt  t t t d d ƒt  t t t d d ƒt  t t t d d ƒd  S(	   NR   g      ð¿RE   t   blahR   RS   iÿÿÿÿRI   (   R   t
   ValueErrorR	   R   (    (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_badargsä   s    c          C   s;   t  ƒ  }  t j |  ƒ } t t t j | ƒ ƒ |  j ƒ d  S(   N(   R   t   picklet   dumpsR   t   typet   loadst	   __class__(   t   objt   s(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_pickle÷   s    	c          C   sµ   t  d g d g g d d d d ƒ\ }  } t d |  ƒ t  d g d g d g g d d d d ƒ\ }  } t d |  ƒ t  d g d g d g g d d d d ƒ\ }  } t d |  ƒ d  S(   Ni    i   R   i   R   g®Gáz®ï?(   R	   R   R   (   t   coret   _(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_boundariesý   s    *00c       
   C   s+  t  t t d g d g g d d g ƒt  t t d g d g g d d d d g ƒt g  t d g d g g d d  d d ƒd ƒ t g  t d g d g g d d	 d	 g d d ƒd ƒ t d g t d g d g g d d d	 g d d ƒd ƒ t d d g t d g d g g d d d g d d ƒd ƒ t d d g t d g d g g d
 d d d	 d g d d ƒd ƒ t g  t d g d g g d d	 d g d
 d d d ƒd ƒ t d d g t d g d g g d d d g d
 d d d ƒd ƒ t d d g t d g d g g d d d g d
 d d d ƒd ƒ t g  t d g d g g d d d g d
 d d d ƒd ƒ t j j d ƒ }  |  j d d	 t	 j
 d ƒ } t t	 d | ƒ\ } } t t | ƒ t t	 ƒ ƒ t j t	 | d d ƒ} t | ƒ \ } } t j | j
 d d t ƒ} t | | <t j t	 j
 d d t ƒ} t | | <t t j | | ƒ | ƒ t t	 ƒ }	 t |	 d | d d ƒ\ }
 } t | |
 ƒ t | | ƒ t ƒ  j t	 d | ƒ} | j } | j } t | | ƒ t | | ƒ t ƒ  } | j t	 d | ƒ} | j } t | | ƒ t | | ƒ t | | j ƒ d  S(   Ni    i   t   sample_weighti   i   i   R   i   i   R   g      ø?gš™™™™™@gš™™™™™¹?iÿÿÿÿi*   t   axist   dtypeR   R   (   R   RZ   R	   R   R-   R   R8   R9   t   randintR   R0   R   R   t   repeatt   zerost   boolt   TrueR   R   R   RB   R   t   fit_predict(   RC   Rg   t   core1t   label1t
   X_repeatedt   core_repeatedt   label_repeatedt   core_repeated_maskt	   core_maskR   t   core3t   label3t   estt   core4t   label4t   label5t   core5(    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_weighted_dbscan  s^    %+!'*-''--'

				RE   t   bruteRR   RF   c      	   C   s˜  d g d g d g d g d g d g d g g } t  | ƒ } t | d |  d	 d
 d d
 ƒ\ } } t | t j | ƒ ƒ t | d d
 d
 d
 d d d g ƒ t | d |  d	 d
 d d ƒ\ } } t | d
 d d g ƒ t | d d d d d d d g ƒ t | d |  d	 d
 d d ƒ\ } } t | d g ƒ t | d d d d d d d g ƒ t | d |  d	 d
 d d ƒ\ } } t | g  ƒ t | t j | d ƒ ƒ d  S(   Ni    i   i   i   i   i   i
   RE   R   i   R   iÿÿÿÿg      ð¿(   R   R	   R   R   t   aranget   full(   RE   R   t	   n_samplesR   R   (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   test_dbscan_core_samples_toyH  s$    0"""c          C   s–   t  j d ƒ }  t d d d d ƒ j |  ƒ j } t t t | ƒ ƒ d ƒ t  j d ƒ }  t d d d d ƒ j |  ƒ j } t t t | ƒ ƒ d ƒ d  S(   Ni
   R   g      à?R   R   i   (   i
   i
   (	   R   t   eyeR   R   R   R   R   R   Rl   (   R   R   (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt;   test_dbscan_precomputed_metric_with_degenerate_input_arraysj  s    !!c          C   s  t  j d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g d d d d d d d g g ƒ }  t j |  ƒ } t d d d d d d	 ƒ j | ƒ j } t | d
 d
 d d d d d g ƒ d  S(   Ng        gš™™™™™¹?g333333Ó?R   gš™™™™™É?R   R   R   i   iÿÿÿÿi    i   (   R   t   arrayR   R;   R   R   R   R   (   t   art   matrixR   (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt5   test_dbscan_precomputed_metric_with_initial_rows_zerov  s    !(/   t   __doc__R\   t   numpyR   t   scipy.spatialR    t   scipyR   t   pytestt   sklearn.utils.testingR   R   R   R   R   t   sklearn.neighborsR   t   sklearn.cluster.dbscan_R   R	   t   sklearn.cluster.tests.commonR
   t   sklearn.metrics.pairwiseR   R   R   R!   R#   R)   t   markt   parametrizet   FalseRn   R5   R?   RD   RG   RQ   RW   RX   R[   Rc   Rf   R~   Rƒ   R…   R‰   (    (    (    s@   lib/python2.7/site-packages/sklearn/cluster/tests/test_dbscan.pyt   <module>   sF   			$'				'					@'"	