o
    ?Hh+                     @   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_samples
n_featurescenterscluster_stdshufflerandom_statecsr_containereigen_solver)arpack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labels
model_copy r6   c/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clustering'   s:   r8   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"   r9   Xyr1   r4   r6   r6   r7   test_spectral_clustering_sparseK   s    

rA   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   r;   r<   r   )r   r   )n_neighborsconnectivity)modeprecomputed_nearest_neighbors)r   r(   r)   rC   )r   r   r,   kneighbors_graphr   r-   appendr   )r?   r@   rC   resultsadditional_neighborsnngraphr4   r6   r6   r7   ,test_precomputed_nearest_neighbors_filteringc   s&   

rM   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 )Nr:   r   r   r   r;   r<   r   nearest_neighbors)r(   r)   r   znot fully connectedmatch)r(   r=   r   r      additive_chi2c                 S   s   dS )Nr   r6   )xr@   r6   r6   r7   <lambda>   s    z!test_affinities.<locals>.<lambda>c                 [   s   |i ksJ t | | S N)r*   minimumsum)rS   r@   kwargsr6   r6   r7   	histogram   s   z"test_affinities.<locals>.histogram)r   r   pytestwarnsUserWarningr,   r
   r-   r   randr   shape)r?   r@   spr4   kernels_availablekernrY   r6   r6   r7   test_affinities}   s4   
rb   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   rQ   )r*   randomRandomStaterandnr   astypefloat64r^   array_equaluniquearangefloat32)r   r   n_componentsdatalabels_float64labels_float32r6   r6   r7   test_cluster_qr   s   rs   c                  C   sP   t jjdd} d\}}| ||}| |}t t|| t|| s&J d S )Nrc   rd   )d   rQ   )r*   rf   rg   rh   permutationrk   r   )r   r   ro   rp   permr6   r6   r7   &test_cluster_qr_permutation_invariance   s   


rw   r   )2   rt      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 )Nrc   rd   r   r   r   r   )r^   g?)r   g?)r*   rf   rg   rangerandintr+   floatonesrm   toarrayrh   r   r
   )r   r9   r   n_classy_truey_indicatory_true_noisyy_predr6   r6   r7   test_discretize   s   
r   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)(   r   ))      )r:      )rc      r   r   r   )maskr    )r(   r   r   amg)r*   indicescopyri   r|   r	   exprp   stdr   lenrl   
amg_loadedr
   rZ   raises
ValueError)rS   r@   center1center2radius1radius2circle1circle2circlesr   imgrL   labels_arpack
labels_amgr6   r6   r7   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 )Nr:   r   r   r   r;   r<   r   )r(   r   )r(   ro   r   )ro   r   )r   r   r,   r-   r   r*   rk   )r?   r@   r_   r4   labels_same_ncomplabels_diff_ncompr6   r6   r7   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 )Nr:   r   r   r   r;   r<   r   *   )r(   r   verbosez Computing label assignment usingr#   zInitialization completezIteration [0-9]+, inertia)r   r   r,   
readouterrresearchout)r"   capsysr?   r@   capturedr6   r6   r7   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 arrayrO   N)r*   matrixrZ   r   	TypeErrorr   )r?   msgr6   r6   r7   )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  rU   r   )argsrX   r6   r6   r7   new_svd7  s   z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdsvd)r      zSVD did not convergerO   N)setattrr*   linalgr}   rZ   r   r   r   )r   monkeypatchr   vectorsr6   r6   r7   *test_spectral_clustering_not_infinite_loop1  s   

"r   )6__doc__r.   r   numpyr*   rZ   scipy.linalgr   sklearn.clusterr   r   sklearn.cluster._spectralr   r   sklearn.datasetsr   sklearn.feature_extractionr	   sklearn.metricsr
   sklearn.metrics.pairwiser   r   sklearn.neighborsr   sklearn.utilsr   sklearn.utils._testingr   sklearn.utils.fixesr   r   pyamgr   r   ImportErrorr+   r   r?   _markparametrizer8   rA   rM   rb   rs   rw   r   r   r   r   r   r   r6   r6   r6   r7   <module>   sf     

!*$

