o
    ¢Äió-  ã                   @   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#yq   dZ"Y nw 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 ]E}t|dd| |d |¡}|j}|d dkr;d| }t|g d	¢ƒdksFJ ‚t t |¡¡}|j	|j	ksVJ ‚|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   Úprecomputed)r   Ú
n_clustersÚaffinityr   r    r   r   )r   r   r   r   r   r   r   )ÚnpÚarrayr   ÚfitÚlabels_r
   ÚpickleÚloadsÚdumpsr&   r   r   )	r   r    r   Úglobal_random_seedÚSZmatÚmodelÚlabelsZ
model_copy© r3   ú]/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/cluster/tests/test_spectral.pyÚtest_spectral_clustering'   s:   ùÿûúïr5   Úcoo_containerc                 C   sr   t d|ddgddggdd\}}t|dd}t |d d¡}||ƒ}t|d	d
| d |¡j}t||ƒdks7J ‚d S )Né   r   r   ç{®Gáz„?©r   r   r   r   )Úgammag-Cëâ6?r   r   r%   )r   r&   r'   r    )r   r   r(   Úmaximumr   r*   r+   r
   )r    r6   r/   ÚXÚyr0   r2   r3   r3   r4   Útest_spectral_clustering_sparseM   s&   
üüø
r>   c           	      C   sŒ   t d| g d¢g d¢gdd\}}d}g }dD ]$}t|| d |¡}|j|d	d
}t| dd|d |¡j}| |¡ qt|d |d ƒ d S )Néú   )r   r   r   )r   r   r   r8   r9   r   )r   r   )Ún_neighborsZdistance)ÚmodeZprecomputed_nearest_neighbors)r   r&   r'   r@   r   r   )r   r   r*   Zkneighbors_graphr   r+   Úappendr   )	r/   r<   r=   r@   ÚresultsZadditional_neighborsÚnnÚgraphr2   r3   r3   r4   Ú,test_precomputed_nearest_neighbors_filteringh   s,   
üüø
rF   c                 C   sr  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.w   Y  t||jƒdks=J ‚tdd| d}| |¡j}t||ƒdksSJ ‚tdƒ 	dd¡d }t
ƒ }|D ]}|dkr€td|dd	}| |¡j}|jd f|jks€J ‚qbtddd„ dd	}| |¡j}|jd f|jks›J ‚dd„ }td|dd	}| |¡j}|jd f|jks·J ‚d S )Nr7   r   r   r   r8   r9   r   Znearest_neighbors)r&   r'   r   znot fully connected©Úmatch)r&   r:   r   r   é   Zadditive_chi2c                 S   s   dS )Nr   r3   )Úxr=   r3   r3   r4   Ú<lambda>¡   s    z!test_affinities.<locals>.<lambda>c                 [   s   |i ksJ ‚t  | |¡ ¡ S ©N)r(   ÚminimumÚsum)rJ   r=   Úkwargsr3   r3   r4   Ú	histogram¥   s   z"test_affinities.<locals>.histogram)r   r   ÚpytestZwarnsÚUserWarningr*   r
   r+   r   Zrandr   Úshape)r/   r<   r=   Úspr2   Zkernels_availableÚkernrP   r3   r3   r4   Útest_affinities…   s4   
ÿÿ€rV   c                 C   s‚   t jj| d}d\}}| ||¡}t| t j¡ƒ}|j|fks!J ‚t  t  	|¡t  
|¡¡s/J ‚t| t j¡ƒ}t  ||¡s?J ‚d S )N©Úseed)r   rI   )r(   ÚrandomÚRandomStateÚrandnr   ÚastypeZfloat64rS   Úarray_equalÚuniqueÚarangeZfloat32)r/   r   r   Ún_componentsÚdataZlabels_float64Zlabels_float32r3   r3   r4   Útest_cluster_qr¯   s   rb   c                 C   sP   t jj| d}d\}}| ||¡}| |¡}t  t|ƒ| t|| ƒ¡s&J ‚d S )NrW   )éd   rI   )r(   rY   rZ   r[   Zpermutationr]   r   )r/   r   r   r`   ra   Úpermr3   r3   r4   Ú&test_cluster_qr_permutation_invarianceÁ   s   


þre   r   )é2   rc   é–   iô  c           	      C   s¢   t jj|d}tddƒD ]B}| d|d | ¡}t  |t¡}|t  | ¡t  | ¡|ff| |d fd}| 	¡ d| 
| |d ¡  }t||d}t||ƒd	ksNJ ‚qd S )
NrW   r   r   r   r   )rS   gš™™™™™¹?)r   gš™™™™™é?)r(   rY   rZ   ÚrangeÚrandintr)   ÚfloatÚonesr_   Ztoarrayr[   r   r
   )	r   r6   r/   r   Zn_classZy_trueZy_indicatorZy_true_noisyZy_predr3   r3   r4   Útest_discretizeÍ   s   
þÿórl   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	}t
t  |¡ƒdksjJ ‚trt	|dd
| d	}t||ƒdks}J ‚d S t t¡ t	|dd
dd	 W d   ƒ d S 1 s˜w   Y  d S )N)é(   rm   ))é   é   )r7   é   )é   é   r   r   r   )Úmaskr   )r&   r   r   Zamg)r(   ÚindicesÚcopyr\   rj   r	   Úexpra   Zstdr   Úlenr^   Ú
amg_loadedr
   rQ   ÚraisesÚ
ValueError)r/   rJ   r=   Zcenter1Zcenter2Zradius1Zradius2Zcircle1Zcircle2Zcirclesrs   ZimgrE   Zlabels_arpackZ
labels_amgr3   r3   r4   Ú0test_spectral_clustering_with_arpack_amg_solversâ   s,   ((
ÿÿ"ÿr{   c                 C   s€   t d| ddgddggdd\}}td| d}| |¡j}tdd| d |¡j}t||ƒ td| d	 |¡j}t ||¡r>J ‚d S )
Nr7   r   r   r8   r9   r   )r&   r   )r&   r`   r   )r`   r   )r   r   r*   r+   r   r(   r]   )r/   r<   r=   rT   r2   Zlabels_same_ncompZlabels_diff_ncompr3   r3   r4   Ú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¡s'J ‚| dkr=t d|j¡s4J ‚t d|j¡s?J ‚d S d S )Nr7   r   r   r   r8   r9   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capturedr3   r3   r4   Útest_verbose&  s   
ÿþrƒ   c                  C   sV   t  ddgddgg¡} d}tjt|d t| ƒ W d  ƒ dS 1 s$w   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 arrayrG   N)r(   ÚmatrixrQ   ry   Ú	TypeErrorr   )r<   Úmsgr3   r3   r4   Ú)test_spectral_clustering_np_matrix_raises8  s
   
"ÿr‡   c                 C   s^   dd„ }|  tjd|¡ t d¡}tjtdd t|ƒ W d  ƒ dS 1 s(w   Y  dS )zkCheck that discretize raises LinAlgError when svd never converges.

    Non-regression test for #21380
    c                  _   s   t ƒ ‚rL   r   )ÚargsrO   r3   r3   r4   Únew_svdH  s   z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdZsvd)r   é   zSVD did not convergerG   N)Úsetattrr(   Zlinalgrk   rQ   ry   r   r   )r‚   Zmonkeypatchr‰   Zvectorsr3   r3   r4   Ú*test_spectral_clustering_not_infinite_loopB  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parametrizer5   r>   rF   rV   rb   re   rl   r{   r|   rƒ   r‡   rŒ   r3   r3   r3   r4   Ú<module>   sf    ÿ 
ú
#*$ 

