o
    ¢Äi  ã                   @   s  d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZ ej dddg¡ej d	d
dg¡dd„ ƒƒZej de¡dd„ ƒZej dddg¡dd„ ƒZdd„ Zej dedg ¡dd„ ƒZej dedg ¡dd„ ƒZej de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)ÚCSR_CONTAINERSÚ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}g d	¢}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	   )	r   r   r   r   r   r   r   r   r   g      ð?N)
ÚnpÚarrayr   Úfitr   ÚsortedÚcluster_centers_Útolistr   Úlabels_)r   r	   ÚXÚbisect_meansZexpected_centersZexpected_labels© r   úc/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/cluster/tests/test_bisect_k_means.pyÚtest_three_clusters
   s    8ÿü
ÿr   Úcsr_containerc                 C   sj   t j d¡}| dd¡}d||dk < | |ƒ}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Úrandr   r   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 J ‚t| | ¡dkƒs+J ‚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   Úpredictr   r   ÚmeanZreshape)r   r   r   r   r   Útest_one_clusterJ   s
    r0   c                 C   s`   t j d¡}| dd¡}| durd||dk < | |ƒ}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   Nr!   r   r"   )	r   r
   r#   r$   r   r   r   r   r.   )r   r%   r   r   r   r   r   Útest_fit_predictX   s   
r1   c                 C   sh   t j d¡}| dd¡j|dd}| durd||dk < | |ƒ}tddd	}| |¡ |jj|ks2J ‚dS )
z9Check that centers dtype is the same as input data dtype.r   r   r   F)ÚcopyNr!   r   r"   )	r   r
   r#   r$   Úastyper   r   r   Zdtype)r   Zglobal_dtyper%   r   Úkmr   r   r   Útest_dtype_preservedi   s   
r5   c                 C   s€   t j d¡}| dd¡}| durd||dk < | |ƒ}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   Nr!   r   r"   )r   r
   r#   r$   r   r   r3   Zfloat32r   r   r   r   )r   r%   r   Zkm64Zkm32r   r   r   Ú test_float32_float64_equivalencey   s   r6   Ú	algorithm)ZlloydZelkanc                 C   sh   t j d¡}| dd¡}td| d |¡}d| dd¡ }| |¡}t  t  |¡t  	d¡¡ 
¡ s2J ‚d S )Nr   i¸  r   )r   r7   é2   éd   )r   r
   r#   r$   r   r   r.   Úisinr)   r*   r-   )r7   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   r@   )Únumpyr   ZpytestZsklearn.clusterr   Zsklearn.metricsr   Zsklearn.utils._testingr   r   Zsklearn.utils.fixesr   ÚmarkZparametrizer   r&   r+   r0   r1   r5   r6   r<   r@   r   r   r   r   Ú<module>   s.    





