U
    ½mœd(,  ã                   @   sn  d Z ddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZ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dgddgddgg¡d Zeddedddd�\ZZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z d d!„ Z!d"d#„ Z"d$d%„ Z#d&d'„ Z$d(d)„ Z%d*d+„ Z&d,d-„ Z'ej( )d.ee *d/¡ƒe *d/¡g¡d0d1„ ƒZ+d2d3„ Z,d4d5„ Z-d6d7„ Z.dS )8z!
Testing for Clustering methods

é    N)Ú
csr_matrix)ÚConvergenceWarningÚNotFittedError)Úassert_array_equalÚassert_allclose)ÚAffinityPropagation)Ú#_equal_similarities_and_preferences)Úaffinity_propagation)Ú
make_blobs)Úeuclidean_distancesé   é   éÿÿÿÿé
   é<   é   gš™™™™™Ù?T)Ú	n_samplesZ
n_featuresÚcentersÚcluster_stdÚshuffleÚrandom_statec                 C   sP   t tj|dd�dd� }t |¡d }t||| d�\}}t|ƒ}t|ksLt‚dS )z.Test consistency of the affinity propagations.F©ÚcopyT©Zsquaredr   ©Ú
preferencer   N)	r   ÚXÚastypeÚnpÚmedianr	   ÚlenÚ
n_clustersÚAssertionError)Úglobal_random_seedÚglobal_dtypeÚSr   Úcluster_centers_indicesÚlabelsÚn_clusters_© r)   úh/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/cluster/tests/test_affinity_propagation.pyÚtest_affinity_propagation%   s      ÿ
r+   c                  C   sŒ   t tdd� } t | ¡d }t|ddd�}| | ¡j}t|ddd�}| t¡j}t||ƒ |j}t	|ƒ}t 
|¡j|ks|t‚t|ksˆt‚d	S )
z^Check equality of precomputed affinity matrix to internally computed affinity
    matrix.
    Tr   r   Úprecomputedé   ©r   Úaffinityr   é%   ©r   Úverboser   N)r   r   r   r   r   ÚfitÚlabels_r   Zcluster_centers_indices_r    ÚuniqueÚsizer"   r!   )r%   r   ÚafZlabels_precomputedr'   r&   r(   r)   r)   r*   Ú%test_affinity_propagation_precomputed2   s      ÿ
r8   c                  C   sâ   t tdd� } |  ¡ }t | ¡d }t |  ¡ |¡r8t‚t| |ddd� t	| |ƒ t |  ¡ |¡rft‚t	|  ¡ t 
| jd ¡ƒ t| |ddd� t	|  ¡ |ƒ | ¡ } t|ddd�}| t¡j}t| |ddd�\}}t||ƒ d	S )
z.Check behaviour of not copying the input data.Tr   r   r   )r   r   r   Fr1   éJ   N)r   r   r   r   r   ZallcloseZdiagonalr"   r	   r   ÚzerosÚshaper   r3   r4   r   )r%   Z
S_originalr   r7   r'   Ú_Zlabels_no_copyr)   r)   r*   Ú!test_affinity_propagation_no_copyI   s(    
   ÿ
r=   c               	   C   sH   t tdd� } d}tjt|d�� t| dd…dd…f ƒ W 5 Q R X dS )zHCheck the shape of the affinity matrix when using `affinity_propagation.Tr   z1The matrix of similarities must be a square array©ÚmatchNr   )r   r   ÚpytestÚraisesÚ
ValueErrorr	   )r%   Úerr_msgr)   r)   r*   Ú(test_affinity_propagation_affinity_shapee   s    rD   c               	   C   s6   d} t jt| d�� tdd� tdƒ¡ W 5 Q R X d S )Nz6A sparse matrix was passed, but dense data is requiredr>   r,   ©r/   )r   r   )r@   rA   Ú	TypeErrorr   r3   r   )rC   r)   r)   r*   Ú7test_affinity_propagation_precomputed_with_sparse_inputm   s    rG   c                 C   s<   t d| d�}tj|dd�}| |¡}| |¡}t||ƒ d S )NÚ	euclidean©r/   r   Fr   )r   r   r   Úfit_predictÚpredictr   )r#   r$   r7   ZX_r'   Zlabels2r)   r)   r*   Ú!test_affinity_propagation_predicts   s
    

rL   c               	   C   sv   t dd�} t t¡� |  t¡ W 5 Q R X t ttj¡}t ddd�} |  	|¡ tjt
dd�� |  t¡ W 5 Q R X d S )NrH   rE   r,   é9   rI   zexpecting 60 features as inputr>   )r   r@   rA   r   rK   r   r   ÚdotÚTr3   rB   )r7   r%   r)   r)   r*   Ú'test_affinity_propagation_predict_error|   s    

rP   c              	   C   s|   t jddgddgddgg| d�}tdddd�}t t¡� | |¡ W 5 Q R X tt  d¡|j	ƒ t
t  d	d	d	g¡|jƒ d S )
Nr   r   éþÿÿÿ©ZdtypeéöÿÿÿéR   ©r   Úmax_iterr   )r   r   r   )r   Úarrayr   r@   Úwarnsr   r3   r   ÚemptyÚcluster_centers_r   r4   )r$   r   r7   r)   r)   r*   Ú-test_affinity_propagation_fit_non_convergence‹   s     r[   c              	   C   s  t jddgddgg| d�}t|dd� }tjtdd�� t|dd	�\}}W 5 Q R X tddg|ƒ tddg|ƒ tjtdd�� t|d
d	�\}}W 5 Q R X tdg|ƒ tddg|ƒ t 	¡ �( t 
dt¡ t|dd
gdd�\}}W 5 Q R X tdg|ƒ tddg|ƒ d S )Nr   r   rR   Tr   zmutually equalr>   r   )r   rS   Úerroriìÿÿÿr0   r   )r   rW   r   r@   rX   ÚUserWarningr	   r   ÚwarningsÚcatch_warningsÚsimplefilter)r$   r   r%   Zcluster_center_indicesr'   r)   r)   r*   Ú3test_affinity_propagation_equal_mutual_similaritiesš   s&    
  ÿra   c              	   C   s    t jddgddgddgg| d�}t t¡� tdddd� |¡}W 5 Q R X t  ddgd	d	gd
d
gg¡}t t¡� | |¡}W 5 Q R X tt  dddg¡|ƒ d S )Nr   r   rQ   rR   rS   éK   rU   r   r   é   r   )	r   rW   r@   rX   r   r   r3   rK   r   )r$   r   r7   Z
to_predictÚyr)   r)   r*   Ú1test_affinity_propagation_predict_non_convergenceº   s     re   c              	   C   sŠ   t jddddddgddddddgddddddgg| d�}tdddd�}d}tjt|d	�� | |¡ W 5 Q R X tt  dddg¡|jƒ d S )
Nr   r   rR   rH   r   é"   )r/   rV   r   zcAffinity propagation did not converge, this model may return degenerate cluster centers and labels.r>   )	r   rW   r   r@   rX   r   r3   r   r4   )r$   r   r7   Úmsgr)   r)   r*   Ú8test_affinity_propagation_non_convergence_regressiontestË   s    , ÿÿrh   c                 C   sâ   t jddgddgddgg| d�}t|dd� }t|t  d¡ƒrBt‚t|t  ddg¡ƒrZt‚t|t  ddg¡ƒrrt‚t jddgddgg| d�}t|dd� }t|t  ddg¡ƒr²t‚t|t  ddg¡ƒsÊt‚t|t  d¡ƒsÞt‚d S )Nr   r   rQ   rR   Tr   )r   rW   r   r   r"   )r$   r   r%   r)   r)   r*   Ú'test_equal_similarities_and_preferencesÚ   s     ri   c                  C   s„   ddgddgddgg} t d| ddd�\}}tdddd�}| |¡ |j}tddd	d�}| |¡ |j}t || d ¡dks€t‚d
S )z†Check that different random states lead to different initialisations
    by looking at the center locations after two iterations.
    r   r   i,  g      à?r   )r   r   r   r   r   )Zconvergence_iterrV   r   éL   N)r
   r   r3   rZ   r   Zmeanr"   )r   r   Zlabels_trueÚapZcenters0Z	centers76r)   r)   r*   Ú&test_affinity_propagation_random_stateï   s       ÿ


rl   r   )r   r   c              	   C   s–   t j d¡}| dd¡j|dd�}d| d¡  t¡}tdd�}| ||¡ | |_t	 
¡ �2 t	 d	t¡ t| |¡t j|jd
 td�ƒ W 5 Q R X dS )zŒ
    Check that having sparse or dense `centers` format should not
    influence the convergence.
    Non-regression test for gh-13334.
    é*   é(   r   Fr   rc   é.   )r   r\   r   rR   N)r   ÚrandomÚRandomStateZrandr   Úintr   r3   rZ   r^   r_   r`   r   r   rK   r:   r;   )r   r$   Úrngr   rd   rk   r)   r)   r*   Ú:test_affinity_propagation_convergence_warning_dense_sparse  s    

rt   c                 C   sl   t jddddgddddgddddgddddgg| d�}tdddd� |¡}t  ddddg¡}t|j|ƒ d S )Nr   r   rR   r,   r.   r   )r   rW   r   r3   r   r4   )r$   r   ZafpÚexpectedr)   r)   r*   Útest_correct_clusters  s    * ÿÿrv   c                  C   s2   t ddd�} |  t¡ |  tdƒ¡}t|dƒ d S )NrH   rm   rI   )r   r   )r   r3   r   rK   r   r   )r7   r'   r)   r)   r*   Útest_sparse_input_for_predict$  s    
rw   c                  C   sD   t ddd�} tj d¡}t|jdddd�ƒ}|  |¡}t|dƒ d S )	NrH   rm   rI   r   r   )é   rx   )r6   )r   r   r   r   r   )r   r   rp   rq   r   ÚrandintrJ   r   )r7   rs   r   r'   r)   r)   r*   Ú!test_sparse_input_for_fit_predict-  s
    
rz   )/Ú__doc__Únumpyr   r@   r^   Zscipy.sparser   Zsklearn.exceptionsr   r   Zsklearn.utils._testingr   r   Zsklearn.clusterr   Z%sklearn.cluster._affinity_propagationr   r	   Zsklearn.datasetsr
   Zsklearn.metricsr   r!   rW   r   r   r<   r+   r8   r=   rD   rG   rL   rP   r[   ra   re   rh   ri   rl   ÚmarkZparametrizer:   rt   rv   rw   rz   r)   r)   r)   r*   Ú<module>   sN    ú
	  
	