U
    ‘Ç-eŠ-  ã                   @   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   ÚSÚmatÚmodelÚlabelsZ
model_copy© r0   úd/var/www/html/Darija-Ai-Train/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_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   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_filtering`   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_affinitiesz   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.*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)é(   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       @z<np\.matrix is not supported. Please convert to a numpy arrayrD   N)r$   ÚmatrixrO   rw   Ú	TypeErrorr   )r9   Úmsgr0   r0   r1   Ú)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 rJ   r   )ÚargsrM   r0   r0   r1   Únew_svdD  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)   r}   Únumpyr$   rO   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   rv   ÚImportErrorr%   r   r9   Ú_ÚmarkZparametrizer2   r;   rC   rT   ra   rd   rk   Úfilterwarningsry   rz   r   r…   rŠ   r0   r0   r0   r1   Ú<module>   st   
 ú

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