U
    ½mœdð,  ã                   @   sð  d Z ddlZddlZddlmZ ddlmZ 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mZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ zddlm Z  dZ!W n e"k
rà   dZ!Y nX e #ddgddgddgg¡d Z$edde$dddd�\Z%Z&ej' (dd¡ej' (dd¡dd„ ƒƒZ)ej' (dd¡dd„ ƒZ*d d!„ Z+d"d#„ Z,d$d%„ Z-d&d'„ Z.ej' (d(d)d*d+d,g¡d-d.„ ƒZ/ej' 0d/¡ej' 0d0¡ej' 0d1¡d2d3„ ƒƒƒZ1d4d5„ Z2ej' (dd¡d6d7„ ƒZ3d8d9„ Z4d:d;„ Z5dS )<z'Testing for Spectral Clustering methodsé    N)Úsparse©ÚLinAlgError)Úcheck_random_state)Úassert_array_equal)ÚSpectralClusteringÚspectral_clustering)Ú
discretizeÚ
cluster_qr)Úimg_to_graph)Úadjusted_rand_score)Úkernel_metricsÚ
rbf_kernel)ÚNearestNeighbors)Ú
make_blobs)Úsmoothed_aggregation_solverTFé   éÿÿÿÿé
   é<   é   gš™™™™™Ù?)Ú	n_samplesZ
n_featuresÚcentersÚcluster_stdÚshuffleÚrandom_stateÚeigen_solver)ÚarpackZlobpcgÚassign_labels)Úkmeansr	   r
   c                 C   s$  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg¡}|t |¡fD ]–}tddd| |d� |¡}|j}|d dkr¾d| }t|dddddddgƒdksÞt‚t	 
t	 |¡¡}|j|jksþt‚|j|jk�st‚t|j|jƒ qˆd S )	Ng      ð?gš™™™™™É?ç        r   r   Úprecomputed)r   Ú
n_clustersÚaffinityr   r   r   )ÚnpÚarrayr   Z
csr_matrixr   ÚfitÚlabels_r   ÚAssertionErrorÚpickleÚloadsÚdumpsr"   r   r   )r   r   ÚSÚmatÚmodelÚlabelsZ
model_copy© r0   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/cluster/tests/test_spectral.pyÚtest_spectral_clustering)   s8    ùÿûú r2   c                 C   st   t ddddgddggdd�\}}t|dd�}t |d d¡}t |¡}tdd	d
| d� |¡j}t	||ƒdkspt
‚d S )Né   r   r   r   ç{®Gáz„?©r   r   r   r   )Úgammag-Cëâ6?r   r!   )r   r"   r#   r   )r   r   r$   Úmaximumr   Ú
coo_matrixr   r&   r'   r   r(   )r   ÚXÚyr,   r/   r0   r0   r1   Útest_spectral_clustering_sparseL   s&       ÿ

üúÿ
r;   c                  C   sŒ   t ddddgddggdd�\} }d}g }dD ]H}t|| d	� | ¡}|j| d
d�}tddd|d� |¡j}| |¡ q,t|d |d ƒ d S )NéÈ   r   r   r   r4   r5   r   )r   r   )Ún_neighborsZconnectivity)ÚmodeZprecomputed_nearest_neighbors)r   r"   r#   r=   )r   r   r&   Zkneighbors_graphr   r'   Úappendr   )r9   r:   r=   ÚresultsZadditional_neighborsÚnnÚgraphr/   r0   r0   r1   Ú,test_precomputed_nearest_neighbors_filteringc   s,       ÿ
üúÿ
rC   c               	   C   sb  t ddddgddggdd�\} }tdddd	�}tjtd
d�� | | ¡ W 5 Q R X t||jƒdksft‚tdddd�}| | ¡j}t||ƒdks’t‚t	dƒ 
dd¡d } tƒ }|D ]<}|dkr°td|dd	�}| | ¡j}| jd f|jks°t‚q°tddd„ dd	�}| | ¡j}| jd f|jk�s$t‚dd„ }td|dd	�}| | ¡j}| jd f|jk�s^t‚d S )Nr3   r   r   r   r4   r5   r   Znearest_neighbors)r"   r#   r   znot fully connected©Úmatch)r"   r6   r   r   é   Zadditive_chi2c                 S   s   dS )Nr   r0   )Úxr:   r0   r0   r1   Ú<lambda>™   ó    z!test_affinities.<locals>.<lambda>c                 [   s   |i kst ‚t | |¡ ¡ S ©N)r(   r$   ÚminimumÚsum)rG   r:   Úkwargsr0   r0   r1   Ú	histogram�   s    z"test_affinities.<locals>.histogram)r   r   ÚpytestZwarnsÚUserWarningr&   r   r'   r(   r   Zrandr   Úshape)r9   r:   Úspr/   Zkernels_availableÚkernrN   r0   r0   r1   Útest_affinities}   s6       ÿ
rT   c                  C   s‚   t jjdd�} d\}}|  ||¡}t| t j¡ƒ}|j|fksBt‚t  	t  
|¡t  |¡¡s^t‚t| t j¡ƒ}t  	||¡s~t‚d S )Né   ©Úseed)r   rF   )r$   ÚrandomÚRandomStateÚrandnr
   ÚastypeZfloat64rQ   r(   Úarray_equalÚuniqueÚarangeZfloat32)r   r   Ún_componentsÚdataZlabels_float64Zlabels_float32r0   r0   r1   Útest_cluster_qr§   s    ra   c                  C   sP   t jjdd�} d\}}|  ||¡}|  |¡}t  t|ƒ| t|| ƒ¡sLt‚d S )NrU   rV   )éd   rF   )r$   rX   rY   rZ   Zpermutationr\   r
   r(   )r   r   r_   r`   Úpermr0   r0   r1   Ú&test_cluster_qr_permutation_invariance¹   s    


þrd   r   é2   rb   é–   iô  c                 C   s¤   t jjdd�}tddƒD ]†}| d|d | ¡}t  |t¡}tjt  	| ¡t  
| ¡|ff| |d fd�}| ¡ d| | |d ¡  }t||d	�}t||ƒd
kst‚qd S )NrU   rV   r   r   r   r   )rQ   gš™™™™™¹?)r   gš™™™™™é?)r$   rX   rY   ÚrangeÚrandintr%   Úfloatr   r8   Úonesr^   ZtoarrayrZ   r	   r   r(   )r   r   Zn_classZy_trueZy_indicatorZy_true_noisyZy_predr0   r0   r1   Útest_discretizeÅ   s    
þ ÿrk   z:ignore:scipy.rand is deprecated:DeprecationWarning:pyamg.*zBignore:`np.float` is a deprecated alias:DeprecationWarning:pyamg.*zBignore:scipy.linalg.pinv2 is deprecated:DeprecationWarning:pyamg.*c               	   C   s&  t  d¡\} }d\}}d\}}| |d  d ||d  d  |d k }| |d  d ||d  d  |d k }||B }| ¡ }	| t¡}
t|
|	d�}t  |j |j ¡  ¡|_t	|dddd	�}t
t  |¡ƒdksÔt‚trüt	|dd
dd	�}t||ƒdksút‚n&t t¡� t	|dd
dd	� W 5 Q R X d S )N)é(   rl   ))é   é   )r3   é   )rU   é   r   r   r   )Úmaskr   )r"   r   r   Zamg)r$   ÚindicesÚcopyr[   ri   r   Úexpr`   Zstdr   Úlenr]   r(   Ú
amg_loadedr   rO   ÚraisesÚ
ValueError)rG   r:   Zcenter1Zcenter2Zradius1Zradius2Zcircle1Zcircle2Zcirclesrq   ZimgrB   Zlabels_arpackZ
labels_amgr0   r0   r1   Ú0test_spectral_clustering_with_arpack_amg_solversÛ   s6    ((
   ÿ   ÿry   c                  C   s€   t ddddgddggdd�\} }tddd�}| | ¡j}tdddd	� | ¡j}t||ƒ tddd
� | ¡j}t ||¡r|t‚d S )Nr3   r   r   r   r4   r5   r   )r"   r   )r"   r_   r   )r_   r   )r   r   r&   r'   r   r$   r\   r(   )r9   r:   rR   r/   Zlabels_same_ncompZlabels_diff_ncompr0   r0   r1   Útest_n_components
  s       ÿ
ÿ
ÿrz   c                 C   s~   t ddddgddggdd�\}}tdddd	� |¡ | ¡ }t d
|j¡sNt‚| dkrzt d|j¡sht‚t d|j¡szt‚d S )Nr3   r   r   r   r4   r5   r   é*   )r"   r   Úverbosez Computing label assignment usingr   zInitialization completezIteration [0-9]+, inertia)r   r   r&   Z
readouterrÚreÚsearchÚoutr(   )r   Úcapsysr9   r:   Zcapturedr0   r0   r1   Útest_verbose!  s       ÿ
r�   c               	   C   s@   t  ddgddgg¡} d}tjt|d�� t| ƒ W 5 Q R X dS )zbCheck that spectral_clustering raises an informative error when passed
    a np.matrix. See #10993r    g       @zIspectral_clustering does not support passing in affinity as an np\.matrixrD   N)r$   ÚmatrixrO   rw   Ú	TypeErrorr   )r9   Úmsgr0   r0   r1   Ú)test_spectral_clustering_np_matrix_raises3  s    r…   c              	   C   sH   dd„ }|  tjd|¡ t d¡}tjtdd�� t|ƒ W 5 Q R X dS )zkCheck that discretize raises LinAlgError when svd never converges.

    Non-regression test for #21380
    c                  _   s
   t ƒ ‚d S rJ   r   )ÚargsrM   r0   r0   r1   Únew_svdC  s    z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdZsvd)r   é   zSVD did not convergerD   N)Úsetattrr$   Zlinalgrj   rO   rw   r   r	   )r€   Zmonkeypatchr‡   Zvectorsr0   r0   r1   Ú*test_spectral_clustering_not_infinite_loop=  s
    
rŠ   )6Ú__doc__r}   Únumpyr$   Zscipyr   Zscipy.linalgr   rO   r)   Zsklearn.utilsr   Zsklearn.utils._testingr   Zsklearn.clusterr   r   Zsklearn.cluster._spectralr	   r
   Zsklearn.feature_extractionr   Zsklearn.metricsr   Zsklearn.metrics.pairwiser   r   Zsklearn.neighborsr   Zsklearn.datasetsr   Zpyamgr   rv   ÚImportErrorr%   r   r9   Ú_ÚmarkZparametrizer2   r;   rC   rT   ra   rd   rk   Úfilterwarningsry   rz   r�   r…   rŠ   r0   r0   r0   r1   Ú<module>   sn   
 ú

!
*
ÿÿÿ$

