U
    _»{jK1  ã                   @   sZ  d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej  dej!ej"f¡dd„ ƒZ#ej  deee	ef¡dd„ ƒZ$ej  deee	ef¡dd„ ƒZ%ej  dee	ef¡dd„ ƒZ&d d!„ Z'd"d#„ Z(d$d%„ Z)d&d'„ Z*d(d)„ Z+dS )*é    N)Úassert_allclose)Ú
csc_matrixÚ
csr_matrixÚ
dok_matrixÚissparseÚ
lil_matrix)Údatasets)Úpairwise_distances)Úcalinski_harabasz_scoreÚdavies_bouldin_scoreÚsilhouette_samplesÚsilhouette_score)Ú_silhouette_reduce)Úassert_array_equalc                  C   s&  t  ¡ } | j}t|ƒ}t|ƒ}t|ƒ}t|ƒ}| j}|||||fD ]Þ}t|dd�}t	||dd�}	|	dkslt
‚t	||dd�}
t |	|
¡ ||kr”|	}nt |
|¡ t	||dt|jd d ƒdd�}	t	||dt|jd d ƒdd�}
|	dksìt
‚|
dksøt
‚t |
|	¡ ||k�r|	}qBt |
|¡ qBd S )NZ	euclidean©ÚmetricÚprecomputedr   é   )r   Zsample_sizeZrandom_state)r   Ú	load_irisÚdatar   r   r   r   Útargetr	   r   ÚAssertionErrorÚpytestÚapproxÚintÚshape)ÚdatasetZX_denseZX_csrZX_cscZX_dokZX_lilÚyÚXÚDZscore_precomputedZscore_euclideanZscore_dense_without_samplingZscore_dense_with_sampling© r    ún/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pyÚtest_silhouette   sH        ÿ    ÿ
r"   c                  C   sn   dgdgdgdgdgdgg} t  ddddddg¡}t| |ƒ}t  |¡rJt‚t| |ƒ}t|ddddddgƒ d S )	Nç        ç      ð?g       @ç      @r   é   r   ç      à?)ÚnpÚarrayr   Úisnanr   r   r   )r   ÚlabelsZ
silhouetteÚssr    r    r!   Útest_cluster_size_1>   s    


r-   c               B      s¼  dddddddddd	d
ddddddddddddddddddddddddddddd dddddd!d"dd#dd$dd	dd%d&d'ddddddd(ddgB} t  d)¡}| |t  d*d+¡< ||j7 }d,d-d.d/d0d1d2d3d4d5d6d7g}d8d8d9d9d8d8d9d8d8d9d9d8g}d:d;d<d=d>d?d@dAdBdCdDdEdFœ}dG}d8d9dHdHd8d8d9d8d8dHdHd9g}dIdJdKdLdMdGdNdOdPdJdQdQdRœ}dC}|||f|||ffD ]^\}	‰ }
‡ fdSdT„|D ƒ‰ tjˆ t|t  |	¡dUdV�dWdX� tj|
t|t  |	¡dUdV�dWdX� �qXd S )YNgR¸…ëQ@g      @g      @gR¸…ëQ@g¤p=
×£@gR¸…ëQ@gR¸…ëQ@g×£p=
W @gR¸…ëQ@g\�Âõ(\@g      @g®Gáz®@g®Gáz®@g®Gáz®@g®Gáz®@g      @g      @g®Gáz®@g\�Âõ(\@g      @g\�Âõ(\@g®Gáz®@g      @g      @gR¸…ëQ@g      @g      @gR¸…ëQ@g      @gR¸…ëQ@g      @g\�Âõ(\@g      @gR¸…ëQ@g      @g®Gáz®@g\�Âõ(\@g      @r%   g®Gáz®@)é   r.   r.   éÿÿÿÿÚBELÚBRAÚCHIÚCUBÚEGYÚFRAÚINDÚISRÚUSAÚUSSÚYUGÚZAIr&   r   g…ëQ¸…Û?gö(\�ÂõØ?gffffffÖ?g333333Ó?g)\�Âõ(Ì?çš™™™™™É?gR¸…ëQÈ?gš™™™™™Ù?gÃõ(\�ÂÕ?g…ëQ¸Õ?g¤p=
×£Ð?g{®Gáz¤¿)r8   r0   r5   r7   r1   r4   r;   r3   r9   r2   r:   r6   gìQ¸…ëÑ?é   g®GázÞ?g)\�Âõ(Ü?gáz®GáÚ?g®Gáz®×?g{®Gáz”?g      Ð?gÃõ(\�ÂÅ?g¸…ëQ¸Þ?g×£p=
×Ó?)r8   r5   r0   r7   r4   r;   r1   r6   r3   r9   r:   r2   c                    s   g | ]}ˆ | ‘qS r    r    )Ú.0Úname©Úexpectedr    r!   Ú
<listcomp>×   s     z1test_silhouette_paper_example.<locals>.<listcomp>r   r   g{®Gáz„?)Úabs)	r(   ÚzerosZtril_indicesÚTr   r   r   r)   r   )Úlowerr   ÚnamesZlabels1Z	expected1Zscore1Zlabels2Z	expected2Zscore2r+   Zscorer    r@   r!   Útest_silhouette_paper_exampleU   sþ    ¾D

ôôôþý  ÿrH   c               	   C   sž   t  ¡ } | j}t |jd ¡}dtt |¡ƒ }tj	t
|d�� t||ƒ W 5 Q R X t |jd ¡}dtt |¡ƒ }tj	t
|d�� t||ƒ W 5 Q R X d S )Nr   zJNumber of labels is %d\. Valid values are 2 to n_samples - 1 \(inclusive\)©Úmatch)r   r   r   r(   Úaranger   ÚlenÚuniquer   ÚraisesÚ
ValueErrorr   rD   )r   r   r   Úerr_msgr    r    r!   Útest_correct_labelsizeã   s     ÿÿÿÿrQ   c                  C   sV   t  ¡ } | j}| j}t||d d ƒt||ƒks4t‚tt||d d ƒt||ƒƒ d S )Nr   é
   )r   r   r   r   r   r   r   r   )r   r   r+   r    r    r!   Útest_non_encoded_labelsû   s      ÿrS   c                  C   s8   t  ¡ } | j}| j}tt|ƒt|ƒƒt||ƒks4t‚d S )N)r   r   r   r   r   Úlistr   )r   r   r   r    r    r!   Útest_non_numpy_labels  s    rU   Údtypec              	   C   s    t tjddddddgg| d�jƒ}dddd	d	d	g}t |j¡jd
 |d d< t||dd� t |j¡jd |d d< tj	t
dd�� t||dd� W 5 Q R X d S )Nr<   çš™™™™™¹?g¸…ëQ¸¾?gq=
×£põ?gÃõ(\�Âñ?çš™™™™™ù?©rV   r   r&   rR   r   r   r   iè  úcontains non-zerorI   )r	   r(   r)   rE   ZfinforV   Úepsr   r   rN   rO   )rV   Údistsr+   r    r    r!   Útest_silhouette_nonzero_diag  s    ÿr]   Ú	to_sparsec              	   C   s~   t jddddddddggt jd�j}ddddddddg}t|ƒ}| |ƒ}t|ƒsTt‚t||dd�}t||dd�}t||ƒ d	S )
úBCheck that silhouette_samples works for sparse matrices correctly.r<   rW   rX   rY   r   r&   r   r   N©	r(   r)   Úfloat32rE   r	   r   r   r   r   ©r^   r   r   Úpdist_denseÚpdist_sparseZoutput_with_sparse_inputZoutput_with_dense_inputr    r    r!   Ú*test_silhouette_samples_precomputed_sparse!  s    $re   c              	   C   sv   t jddddddddggt jd�j}ddddddddg}t|ƒ}| |ƒ}t|ƒsTt‚t||ƒ}t||ƒ}t||ƒ dS )r_   r<   rW   rX   rY   r   r&   Nr`   rb   r    r    r!   Ú(test_silhouette_samples_euclidean_sparse.  s    $

rf   Úto_non_csr_sparsec              	   C   s€   t jddddddddggt jd�j}t|ƒ}| |ƒ}ddddddddg}t  |¡}tjtdd�� t	|d||d	� W 5 Q R X d
S )z?Check for non-CSR input to private method `_silhouette_reduce`.r<   rW   rX   rY   r   r&   z=Expected CSR matrix. Please pass sparse matrix in CSR format.rI   )Ústartr+   Úlabel_freqsN)
r(   r)   ra   rE   r	   Zbincountr   rN   Ú	TypeErrorr   )rg   r   rc   rd   r   ri   r    r    r!   Útest_silhouette_reduce;  s    $
þrk   c              	   C   sD   t jjdd�}tjtdd�� | | dd¡t  d¡ƒ W 5 Q R X dS )z+Assert message when there is only one labelr   ©ÚseedúNumber of labels isrI   rR   r   N)r(   ÚrandomÚRandomStater   rN   rO   ÚrandrD   ©ÚfuncÚrngr    r    r!   Úassert_raises_on_only_one_labelJ  s    ru   c              	   C   sD   t jjdd�}tjtdd�� | | dd¡t  d¡ƒ W 5 Q R X dS )z7Assert message when all point are in different clustersr   rl   rn   rI   rR   r   N)r(   ro   rp   r   rN   rO   rq   rK   rr   r    r    r!   Ú(assert_raises_on_all_points_same_clusterQ  s    rv   c                  C   sø   t tƒ ttƒ dtt d¡dgd dgd  ƒks8t‚dtddgddggd dgd dgd  ƒksjt‚ddgddggd d	d	gd
d
ggd  dd
gdd	ggd  d	dgd
dggd  } dgd dgd  dgd  d	gd  }t t| |ƒd¡ d S )Nr$   ©rR   r   r   é   r&   r#   r/   rR   r=   é   r   g      [@)ru   r
   rv   r(   Úonesr   r   r   ©r   r+   r    r    r!   Útest_calinski_harabasz_scoreX  s    (2ÿþýÿ(r|   c               	   C   sv  t tƒ ttƒ tt d¡dgd dgd  ƒt d¡ks>t‚tddgddggd dgd dgd  ƒt d¡ksvt‚ddgddggd ddgd	d	ggd  dd	gddggd  ddgd	dggd  } dgd dgd  d
gd  dgd  }t t| |ƒd
t d¡ d ¡ t	 
¡ � t	 dt¡ t| |ƒ W 5 Q R X ddgd
d
gddgddgg} dddd
g}t t| |ƒd¡ d S )Nrw   r   rx   r&   r#   r/   rR   r=   ry   r   r'   Úerrorg«ªªªªªÚ?)ru   r   rv   r(   rz   r   r   r   ÚsqrtÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr{   r    r    r!   Útest_davies_bouldin_scoren  s6    "ÿ
 ÿþÿþýÿ( 
rƒ   c               	   C   sˆ   t dddgdddgdddggdddgdd�} | t d¡ks>t‚tjtdd��2 t dddgdddgdddggdddgdd� W 5 Q R X d	S )
zvCheck that silhouette_score works for precomputed metrics that are integers.

    Non-regression test for #22107.
    r   r&   r   r   r   gUUUUUUÅ?rZ   rI   N)r   r   r   r   rN   rO   )Úresultr    r    r!   Ú)test_silhouette_score_integer_precomputed‘  s      ÿ  ÿr…   ),r   Únumpyr(   r   Znumpy.testingr   Zscipy.sparser   r   r   r   r   Zsklearnr   Zsklearn.metricsr	   Zsklearn.metrics.clusterr
   r   r   r   Z%sklearn.metrics.cluster._unsupervisedr   Zsklearn.utils._testingr   r"   r-   rH   rQ   rS   rU   ÚmarkZparametrizera   Zfloat64r]   re   rf   rk   ru   rv   r|   rƒ   r…   r    r    r    r!   Ú<module>   s:   * 




#