a
    �ù»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	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 ddlmZmZ zddl m!Z! dZ"W n e#yâ   dZ"Y n0 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e¡ej( )dd¡ej( )dd¡dd„ ƒƒƒZ*ej( )de¡ej( )dd¡d d!„ ƒƒZ+d"d#„ Z,d$d%„ Z-d&d'„ Z.d(d)„ Z/ej( )de¡ej( )d*g d+¢¡d,d-„ ƒƒZ0d.d/„ Z1d0d1„ Z2ej( )dd¡d2d3„ ƒZ3d4d5„ Z4d6d7„ Z5dS )8z'Testing for Spectral Clustering methodsé    N©Ú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)ÚCOO_CONTAINERSÚCSR_CONTAINERS)Úsmoothed_aggregation_solverTFé   éÿÿÿÿé
   é<   é   gš™™™™™Ù?)Ú	n_samplesZ
n_featuresÚcentersÚcluster_stdÚshuffleÚrandom_stateÚcsr_containerÚeigen_solver)ÚarpackZlobpcgÚassign_labels)Úkmeansr   r   c              
   C   sÐ   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡}|||ƒfD ]Š}tddd| |d� |¡}|j}|d dkrvd| }t|g d	¢ƒdksŒJ ‚t t |¡¡}|j	|j	ks¬J ‚|j
|j
ks¼J ‚t|j|jƒ q@d S )
N)ç      ð?r"   r"   çš™™™™™É?ç        r$   r$   )r#   r#   r#   r"   r"   r"   r"   )r$   r$   r$   r"   r"   r"   r"   r   r   Úprecomputed)r   Ú
n_clustersÚaffinityr   r    r   )r   r   r   r   r   r   r   )ÚnpÚarrayr   ÚfitÚlabels_r
   ÚpickleÚloadsÚdumpsr&   r   r   )r   r    r   ÚSZmatÚmodelÚlabelsZ
model_copy© r2   úIE:\soccer\ml_env\Lib\site-packages\sklearn/cluster/tests/test_spectral.pyÚtest_spectral_clustering'   s8    ùÿûúr4   Úcoo_containerc                 C   sr   t ddddgddggdd�\}}t|dd�}t |d d¡}||ƒ}tdd	d
| d� |¡j}t||ƒdksnJ ‚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   r*   r+   r
   )r    r5   ÚXÚyr/   r1   r2   r2   r3   Útest_spectral_clustering_sparseK   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   r7   r8   r   )r   r   )Ún_neighborsZconnectivity)ÚmodeZprecomputed_nearest_neighbors)r   r&   r'   r?   )r   r   r*   Zkneighbors_graphr   r+   Úappendr   )r;   r<   r?   ÚresultsZadditional_neighborsÚnnÚgraphr1   r2   r2   r3   Ú,test_precomputed_nearest_neighbors_filteringc   s&    ÿ
üúÿ
rE   c                  C   sv  t ddddgddggdd�\} }tdddd	�}tjtd
d�� | | ¡ W d   ƒ n1 s\0    Y  t||jƒdkszJ ‚tdddd�}| | ¡j}t||ƒdks¦J ‚tdƒ 	dd¡d } t
ƒ }|D ]<}|dkrÄtd|dd	�}| | ¡j}| jd f|jksÄJ ‚qÄtddd„ dd	�}| | ¡j}| jd f|jk�s8J ‚dd„ }td|dd	�}| | ¡j}| jd f|jk�srJ ‚d S )Nr6   r   r   r   r7   r8   r   Znearest_neighbors)r&   r'   r   znot fully connected©Úmatch)r&   r9   r   r   é   Zadditive_chi2c                 S   s   dS )Nr   r2   )Úxr<   r2   r2   r3   Ú<lambda>™   ó    z!test_affinities.<locals>.<lambda>c                 [   s   |i ksJ ‚t  | |¡ ¡ S ©N)r(   ÚminimumÚsum)rI   r<   Úkwargsr2   r2   r3   Ú	histogram�   s    z"test_affinities.<locals>.histogram)r   r   ÚpytestZwarnsÚUserWarningr*   r
   r+   r   Zrandr   Úshape)r;   r<   Úspr1   Zkernels_availableÚkernrP   r2   r2   r3   Útest_affinities}   s0    ÿ
(rV   c                  C   s‚   t jjdd�} d\}}|  ||¡}t| t j¡ƒ}|j|fksBJ ‚t  t  	|¡t  
|¡¡s^J ‚t| t j¡ƒ}t  ||¡s~J ‚d S )Né   ©Úseed)r   rH   )r(   ÚrandomÚRandomStateÚrandnr   ÚastypeZfloat64rS   Úarray_equalÚuniqueÚarangeZfloat32)r   r   Ún_componentsÚdataZlabels_float64Zlabels_float32r2   r2   r3   Útest_cluster_qr§   s    rc   c                  C   sP   t jjdd�} d\}}|  ||¡}|  |¡}t  t|ƒ| t|| ƒ¡sLJ ‚d S )NrW   rX   )éd   rH   )r(   rZ   r[   r\   Zpermutationr^   r   )r   r   ra   rb   Úpermr2   r2   r3   Ú&test_cluster_qr_permutation_invariance¹   s    


þrf   r   )é2   rd   é–   iô  c                 C   s¢   t jjdd�}tddƒD ]„}| d|d | ¡}t  |t¡}|t  | ¡t  | ¡|ff| |d fd�}| 	¡ d| 
| |d ¡  }t||d	�}t||ƒd
ksJ ‚qd S )NrW   rX   r   r   r   r   )rS   gš™™™™™¹?)r   gš™™™™™é?)r(   rZ   r[   ÚrangeÚrandintr)   ÚfloatÚonesr`   Ztoarrayr\   r   r
   )r   r5   r   Zn_classZy_trueZy_indicatorZy_true_noisyZy_predr2   r2   r3   Útest_discretizeÅ   s    
þÿrm   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ÔJ ‚trüt	|dd
dd	�}t||ƒdksúJ ‚n<t t¡�  t	|dd
dd	� W d   ƒ n1 �s.0    Y  d S )N)é(   rn   ))é   é   )r6   é   )rW   é   r   r   r   )Úmaskr   )r&   r   r   Zamg)r(   ÚindicesÚcopyr]   rk   r	   Úexprb   Zstdr   Úlenr_   Ú
amg_loadedr
   rQ   ÚraisesÚ
ValueError)rI   r<   Zcenter1Zcenter2Zradius1Zradius2Zcircle1Zcircle2Zcirclesrs   ZimgrD   Zlabels_arpackZ
labels_amgr2   r2   r3   Ú0test_spectral_clustering_with_arpack_amg_solversÚ   s*    ((
ÿÿr{   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|J ‚d S )Nr6   r   r   r   r7   r8   r   )r&   r   )r&   ra   r   )ra   r   )r   r   r*   r+   r   r(   r^   )r;   r<   rT   r1   Zlabels_same_ncompZlabels_diff_ncompr2   r2   r3   Útest_n_componentsþ   s    ÿ
ÿ
ÿr|   c                 C   s~   t ddddgddggdd�\}}tdddd	� |¡ | ¡ }t d
|j¡sNJ ‚| dkrzt d|j¡shJ ‚t d|j¡szJ ‚d S )Nr6   r   r   r   r7   r8   r   é*   )r&   r   Úverbosez Computing label assignment usingr!   zInitialization completezIteration [0-9]+, inertia)r   r   r*   Z
readouterrÚreÚsearchÚout)r    Úcapsysr;   r<   Zcapturedr2   r2   r3   Útest_verbose  s    ÿ
rƒ   c                  C   sT   t  ddgddgg¡} d}tjt|d�� t| ƒ W d  ƒ n1 sF0    Y  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 arrayrF   N)r(   ÚmatrixrQ   ry   Ú	TypeErrorr   )r;   Úmsgr2   r2   r3   Ú)test_spectral_clustering_np_matrix_raises'  s    r‡   c                 C   s\   dd„ }|  tjd|¡ t d¡}tjtdd�� t|ƒ W d  ƒ n1 sN0    Y  dS )zkCheck that discretize raises LinAlgError when svd never converges.

    Non-regression test for #21380
    c                  _   s
   t ƒ ‚d S rL   r   )ÚargsrO   r2   r2   r3   Únew_svd7  s    z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdZsvd)r   é   zSVD did not convergerF   N)Úsetattrr(   Zlinalgrl   rQ   ry   r   r   )r‚   Zmonkeypatchr‰   Zvectorsr2   r2   r3   Ú*test_spectral_clustering_not_infinite_loop1  s
    
rŒ   )6Ú__doc__r,   r   Únumpyr(   rQ   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sklearn.utils.fixesr   r   Zpyamgr   rx   ÚImportErrorr)   r   r;   Ú_ÚmarkZparametrizer4   r=   rE   rV   rc   rf   rm   r{   r|   rƒ   r‡   rŒ   r2   r2   r2   r3   Ú<module>   sb   
 ú

!*$

