U
    ½mœd)  ã                   @   sþ   d dl Z d dl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„ 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dd„ Zdd„ Zdd„ Z dd „ Z!d!d"„ Z"dS )#é    N)Ú
csr_matrix)Údatasets)Úassert_array_equal)Úsilhouette_score)Úsilhouette_samples)Úpairwise_distances)Úcalinski_harabasz_score)Údavies_bouldin_scorec                  C   s   t  ¡ } | j}t|ƒ}t |¡}t |¡}| j}||||fD ]Þ}t|dd�}t	||dd�}|dksft
‚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|}q<t |	|¡ q<d S )NZ	euclidean©ÚmetricÚprecomputedr   é   )r   Zsample_sizeZrandom_state)r   Ú	load_irisÚdatar   ÚspZ
dok_matrixZ
lil_matrixÚtargetr   r   ÚAssertionErrorÚpytestÚapproxÚintÚshape)ÚdatasetZX_denseZX_csrZX_dokZX_lilÚyÚXÚDZscore_precomputedZscore_euclideanZscore_dense_without_samplingZscore_dense_with_sampling© r   úh/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pyÚtest_silhouette   sF    

    ÿ    ÿ
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¤¿)r3   r+   r0   r2   r,   r/   r6   r.   r4   r-   r5   r1   gìQ¸…ëÑ?é   g®GázÞ?g)\�Âõ(Ü?gáz®GáÚ?g®Gáz®×?g{®Gáz”?g      Ð?gÃõ(\�ÂÅ?g¸…ëQ¸Þ?g×£p=
×Ó?)r3   r0   r+   r2   r/   r6   r,   r1   r.   r4   r5   r-   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_exampleQ   sþ    ¾D

ôôôþý  ÿrC   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   r?   )r   r   r   Úerr_msgr   r   r   Útest_correct_labelsizeß   s     ÿÿÿÿrL   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      ÿrN   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    rP   Ú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 )Nr7   gš™™™™™¹?g¸…ëQ¸¾?gq=
×£põ?gÃõ(\�Âñ?gš™™™™™ù?)rQ   r   r!   rM   r   r   r
   iè  úcontains non-zerorD   )r   r#   r$   r@   ZfinforQ   Zepsr   r   rI   rJ   )rQ   Údistsr&   r   r   r   Útest_silhouette_nonzero_diag  s    ÿrT   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 isrD   rM   r   N)r#   ÚrandomÚRandomStater   rI   rJ   Úrandr?   ©ÚfuncÚrngr   r   r   Úassert_raises_on_only_one_label  s    r^   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   rU   rW   rD   rM   r   N)r#   rX   rY   r   rI   rJ   rZ   rF   r[   r   r   r   Ú(assert_raises_on_all_points_same_cluster$  s    r_   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   ©rM   r   r   é   r!   r   r*   rM   r8   é   r   g      [@)r^   r   r_   r#   Úonesr   r   r   ©r   r&   r   r   r   Útest_calinski_harabasz_score+  s    (2ÿþýÿ(re   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 )Nr`   r   ra   r!   r   r*   rM   r8   rb   r   r"   Úerrorg«ªªªªªÚ?)r^   r	   r_   r#   rc   r   r   r   ÚsqrtÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningrd   r   r   r   Útest_davies_bouldin_scoreA  s6    "ÿ
 ÿþÿþýÿ( 
rl   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Å?rR   rD   N)r   r   r   r   rI   rJ   )Úresultr   r   r   Ú)test_silhouette_score_integer_precomputedd  s      ÿ  ÿrn   )#rh   Únumpyr#   Zscipy.sparseÚsparser   r   r   Zsklearnr   Zsklearn.utils._testingr   Zsklearn.metrics.clusterr   r   Zsklearn.metricsr   r   r	   r   r(   rC   rL   rN   rP   ÚmarkZparametrizeZfloat32Zfloat64rT   r^   r_   re   rl   rn   r   r   r   r   Ú<module>   s2   ) 

#