U
    _»{jŠ-  ã                   @   sü  d Z ddlZddl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 dd
lmZmZ ddl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¡ej' 0d2¡d3d4„ ƒƒƒƒZ1d5d6„ Z2ej' (dd¡d7d8„ ƒZ3d9d:„ Z4d;d<„ Z5dS )=z'Testing for Spectral Clustering methodsé    N)Úsparse©ÚLinAlgError)ÚSpectralClusteringÚspectral_clustering)Ú
cluster_qrÚ
discretize)Ú
make_blobs)Úimg_to_graph)Úadjusted_rand_score)Úkernel_metricsÚ
rbf_kernel)ÚNearestNeighbors)Úcheck_random_state)Úassert_array_equal)Ú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   ÚSZmatÚmodelÚlabelsZ
model_copy© r/   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/cluster/tests/test_spectral.pyÚtest_spectral_clustering&   s8    ùÿûú r1   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.   r/   r/   r0   Útest_spectral_clustering_sparseI   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   r3   r4   r   )r   r   )Ún_neighborsZconnectivity)ÚmodeZprecomputed_nearest_neighbors)r   r"   r#   r<   )r	   r   r&   Zkneighbors_graphr   r'   Úappendr   )r8   r9   r<   ÚresultsZadditional_neighborsÚnnÚgraphr.   r/   r/   r0   Ú,test_precomputed_nearest_neighbors_filtering`   s,       ÿ
üúÿ
rB   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 )Nr2   r   r   r   r3   r4   r   Znearest_neighbors)r"   r#   r   znot fully connected©Úmatch)r"   r5   r   r   é   Zadditive_chi2c                 S   s   dS )Nr   r/   )Úxr9   r/   r/   r0   Ú<lambda>–   ó    z!test_affinities.<locals>.<lambda>c                 [   s   |i kst ‚t | |¡ ¡ S ©N)r(   r$   ÚminimumÚsum)rF   r9   Úkwargsr/   r/   r0   Ú	histogramš   s    z"test_affinities.<locals>.histogram)r	   r   ÚpytestZwarnsÚUserWarningr&   r   r'   r(   r   Zrandr   Úshape)r8   r9   Úspr.   Zkernels_availableÚkernrM   r/   r/   r0   Útest_affinitiesz   s6       ÿ
rS   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   rE   )r$   ÚrandomÚRandomStateÚrandnr   ÚastypeZfloat64rP   r(   Úarray_equalÚuniqueÚarangeZfloat32)r   r   Ún_componentsÚdataZlabels_float64Zlabels_float32r/   r/   r0   Útest_cluster_qr¤   s    r`   c                  C   sP   t jjdd�} d\}}|  ||¡}|  |¡}t  t|ƒ| t|| ƒ¡sLt‚d S )NrT   rU   )éd   rE   )r$   rW   rX   rY   Zpermutationr[   r   r(   )r   r   r^   r_   Úpermr/   r/   r0   Ú&test_cluster_qr_permutation_invariance¶   s    


þrc   r   é2   ra   é–   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 )NrT   rU   r   r   r   r   )rP   gš™™™™™¹?)r   gš™™™™™é?)r$   rW   rX   ÚrangeÚrandintr%   Úfloatr   r7   Úonesr]   ZtoarrayrY   r   r   r(   )r   r   Zn_classZy_trueZy_indicatorZy_true_noisyZy_predr/   r/   r0   Útest_discretizeÂ   s    
þ ÿrj   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.*zCignore:np.find_common_type 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)é(   rk   ))é   é   )r2   é   )rT   é   r   r   r   )Úmaskr   )r"   r   r   Zamg)r$   ÚindicesÚcopyrZ   rh   r
   Úexpr_   Zstdr   Úlenr\   r(   Ú
amg_loadedr   rN   ÚraisesÚ
ValueError)rF   r9   Zcenter1Zcenter2Zradius1Zradius2Zcircle1Zcircle2Zcirclesrp   ZimgrA   Zlabels_arpackZ
labels_amgr/   r/   r0   Ú0test_spectral_clustering_with_arpack_amg_solversØ   s6    ((
   ÿ   ÿrx   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 )Nr2   r   r   r   r3   r4   r   )r"   r   )r"   r^   r   )r^   r   )r	   r   r&   r'   r   r$   r[   r(   )r8   r9   rQ   r.   Zlabels_same_ncompZlabels_diff_ncompr/   r/   r0   Útest_n_components  s       ÿ
ÿ
ÿry   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 )Nr2   r   r   r   r3   r4   r   é*   )r"   r   Úverbosez Computing label assignment usingr   zInitialization completezIteration [0-9]+, inertia)r	   r   r&   Z
readouterrÚreÚsearchÚoutr(   )r   Úcapsysr8   r9   Zcapturedr/   r/   r0   Ú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       @z<np\.matrix is not supported. Please convert to a numpy arrayrC   N)r$   ÚmatrixrN   rv   Ú	TypeErrorr   )r8   Úmsgr/   r/   r0   Ú)test_spectral_clustering_np_matrix_raises4  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 rI   r   )ÚargsrL   r/   r/   r0   Únew_svdD  s    z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdZsvd)r   é   zSVD did not convergerC   N)Úsetattrr$   Zlinalgri   rN   rv   r   r   )r   Zmonkeypatchr†   Zvectorsr/   r/   r0   Ú*test_spectral_clustering_not_infinite_loop>  s
    
r‰   )6Ú__doc__r)   r|   Únumpyr$   rN   Zscipyr   Zscipy.linalgr   Zsklearn.clusterr   r   Zsklearn.cluster._spectralr   r   Zsklearn.datasetsr	   Zsklearn.feature_extractionr
   Zsklearn.metricsr   Zsklearn.metrics.pairwiser   r   Zsklearn.neighborsr   Zsklearn.utilsr   Zsklearn.utils._testingr   Zpyamgr   ru   ÚImportErrorr%   r   r8   Ú_ÚmarkZparametrizer1   r:   rB   rS   r`   rc   rj   Úfilterwarningsrx   ry   r€   r„   r‰   r/   r/   r/   r0   Ú<module>   st   
 ú

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