U
    }±ËhQ  ã                   @   s
  d dl 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mZ ej dddg¡ej dd	d
g¡dd„ ƒƒZdd„ Zej dddg¡dd„ ƒZdd„ Zej dddg¡dd„ ƒZej dddg¡dd„ ƒZej dddg¡dd„ ƒZej dd ¡d!d"„ ƒZd#d$„ ZdS )%é    N)ÚBisectingKMeans)Úv_measure_score)Úassert_allcloseÚassert_array_equalÚbisecting_strategyÚbiggest_inertiaZlargest_clusterÚinitz	k-means++Úrandomc                 C   s´   t  ddgddgddgddgddgddgddgddgddgg	¡}tdd| |d}| |¡ ddgddgddgg}dddddddddg	}tt|ƒt|j ¡ ƒƒ tt||j	ƒd	ƒ d
S )znTries to perform bisect k-means for three clusters to check
    if splitting data is performed correctly.
    é   é
   é   r   é   é   é	   )Ú
n_clustersÚrandom_stater   r   g      ð?N)
ÚnpÚarrayr   Úfitr   ÚsortedÚcluster_centers_Útolistr   Úlabels_)r   r   ÚXÚbisect_meansZexpected_centersZexpected_labels© r   úM/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/cluster/tests/test_bisect_k_means.pyÚtest_three_clusters
   s"    8ÿü
 ÿr   c                  C   sl   t j d¡} |  dd¡}d||dk < t |¡}tddd}| |¡ |j}| |¡ |j}t	||dd d	S )
zvTest Bisecting K-Means with sparse data.

    Checks if labels and centers are the same between dense and sparse.
    r   é   r   çš™™™™™é?r   ©r   r   g:Œ0âŽyE>)ZatolN)
r   r	   ÚRandomStateÚrandÚspÚ
csr_matrixr   r   r   r   )Úrngr   ZX_csrr   Zsparse_centersZnormal_centersr   r   r   Útest_sparse$   s    


r&   r   é   é   c                 C   sJ   t j d¡}| dd¡}t| dd}| |¡ tt  |j¡t  	| ¡ƒ dS )z:Test if resulting labels are in range [0, n_clusters - 1].r   r   r   r    N)
r   r	   r!   r"   r   r   r   Úuniquer   Úarange)r   r%   r   r   r   r   r   Útest_n_clusters<   s
    
r+   c                  C   sv   t  ddgddgddgg¡} tddd | ¡}t|jdkƒs@t‚t| | ¡dkƒsVt‚t|j	| j
dd dd¡ƒ d	S )
zTest single cluster.r
   r   r   r   r   r    )ZaxiséÿÿÿÿN)r   r   r   r   Úallr   ÚAssertionErrorÚpredictr   r   ZmeanZreshape)r   r   r   r   r   Útest_one_clusterI   s
    r0   Ú	is_sparseTFc                 C   s^   t j d¡}| dd¡}| r2d||dk < t |¡}tddd}| |¡ t|j	| 
|¡ƒ dS )zFCheck if labels from fit(X) method are same as from fit(X).predict(X).r   r   r   r   r   r    N)r   r	   r!   r"   r#   r$   r   r   r   r   r/   )r1   r%   r   r   r   r   r   Útest_fit_predictW   s    

r2   c                 C   sf   t j d¡}| dd¡j|dd}| r<d||dk < t |¡}tddd}| |¡ |j	j
|ksbt‚d	S )
z9Check that centers dtype is the same as input data dtype.r   r   r   F)Úcopyr   r   r    N)r   r	   r!   r"   Úastyper#   r$   r   r   r   Zdtyper.   )r1   Zglobal_dtyper%   r   Úkmr   r   r   Útest_dtype_preservedh   s    

r6   c                 C   s~   t j d¡}| dd¡}| r2d||dk < t |¡}tddd |¡}tddd | t j	¡¡}t
|j|jƒ t|j|jƒ dS )z@Check that the results are the same between float32 and float64.r   r   r   r   r   r    N)r   r	   r!   r"   r#   r$   r   r   r4   Zfloat32r   r   r   r   )r1   r%   r   Zkm64Zkm32r   r   r   Ú test_float32_float64_equivalencex   s    
r7   Ú	algorithm)ZlloydZelkanc                 C   sh   t j d¡}| dd¡}td| d |¡}d| dd¡ }| |¡}t  t  |¡t  	d¡¡ 
¡ sdt‚d S )Nr   i¸  r   )r   r8   é2   éd   )r   r	   r!   r"   r   r   r/   Úisinr)   r*   r-   r.   )r8   r%   ZX_trainZbkmZX_testÚlabelsr   r   r   Ú!test_no_crash_on_empty_bisections‰   s    
r=   c                  C   s$   t jjdd} tddd | ¡ d S )N)é€   r
   )Úsizer   r   )r   r   )r   r	   Únormalr   r   )r   r   r   r   Útest_one_feature˜   s    rA   )Znumpyr   ZpytestZscipy.sparseÚsparser#   Zsklearn.clusterr   Zsklearn.metricsr   Zsklearn.utils._testingr   r   ÚmarkZparametrizer   r&   r+   r0   r2   r6   r7   r=   rA   r   r   r   r   Ú<module>   s*   




