o
    &ѹg+                     @   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| |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   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   SmatmodellabelsZ
model_copy r3   g/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clustering'   s:   r5   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s7J d S )N   r   r   r   {Gz?r   r   r   r   )gammag-C6?r   r%   )r   r&   r'   r    )r   r   r(   maximumr   r*   r+   r
   )r    r6   Xyr/   r2   r3   r3   r4   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 ]$}t|| d	| }|j| d
d}tddd|d|j}|| qt|d |d  d S )N   r   r   r   r8   r9   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graphr2   r3   r3   r4   ,test_precomputed_nearest_neighbors_filteringc   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d}|| j}t||dksSJ td	ddd } t
 }|D ]}|dkrtd|dd	}|| j}| jd f|jksJ qbtddd dd	}|| j}| jd f|jksJ dd }td|dd	}|| j}| jd f|jksJ 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(   Z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=   spr2   Zkernels_availablekernrO   r3   r3   r4   test_affinities}   s4   
rU   c                  C   s   t jjd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float64rR   array_equaluniquearangeZfloat32)r   r   n_componentsdataZlabels_float64Zlabels_float32r3   r3   r4   test_cluster_qr   s   rb   c                  C   sP   t jjdd} d\}}| ||}| |}t t|| t|| s&J d S )NrV   rW   )d   rI   )r(   rY   rZ   r[   Zpermutationr]   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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 )NrV   rW   r   r   r   r   )rR   g?)r   g?)r(   rY   rZ   rangerandintr)   floatonesr_   Ztoarrayr[   r   r
   )r   r6   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d	}t
t |dksjJ trt	|dd
dd	}t||dks}J d S tt t	|dd
dd	 W d    d S 1 sw   Y  d S )N)(   rm   ))      )r7      )rV      r   r   r   )maskr   )r&   r   r   Zamg)r(   indicescopyr\   rj   r	   expra   Zstdr   lenr^   
amg_loadedr
   rP   raises
ValueError)rJ   r=   Zcenter1Zcenter2Zradius1Zradius2Zcircle1Zcircle2Zcirclesrr   imgrE   Zlabels_arpackZ
labels_amgr3   r3   r4   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 )Nr7   r   r   r   r8   r9   r   )r&   r   )r&   r`   r   )r`   r   )r   r   r*   r+   r   r(   r]   )r<   r=   rS   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(   ZmatrixrP   rx   	TypeErrorr   )r<   msgr3   r3   r4   )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   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   )argsrN   r3   r3   r4   new_svd7  s   z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdZsvd)r      zSVD did not convergerG   N)setattrr(   Zlinalgrk   rP   rx   r   r   )r   Zmonkeypatchr   Zvectorsr3   r3   r4   *test_spectral_clustering_not_infinite_loop1  s   

"r   )6__doc__r,   r   Znumpyr(   rP   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   rw   ImportErrorr)   r   r<   _markZparametrizer5   r>   rF   rU   rb   re   rl   r{   r|   r   r   r   r3   r3   r3   r4   <module>   sf     

!*$

