o
    tBh}8                     @   s  d Z ddlZddlZddlmZ ddlm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 z
ddl m!Z! dZ"W n e#yu   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dej()dddd Z*dd  Z+d!d" Z,ej()d#e&d$die-d%fe&d$die-d&fe&d$d'ie.d(fe&d)die-d*fe&d)die-d+fe&d)d'ie.d,fe&d-die-d.fe&d-die-d/fe&d0die-d1fe&d0die-d2fe&dd3d4e-d5fe&d6die-d7fe&d6die-d8fgd9d: Z/ej()ddd;d< Z0d=d> Z1d?d@ Z2dAdB Z3dCdD Z4ej()dEg dFdGdH Z5ej(6dIej(6dJej(6dKdLdM Z7dNdO Z8ej()dddPdQ Z9dRdS Z:dTdU Z;dS )Vz'Testing for Spectral Clustering methods    N)sparseLinAlgError)check_random_state)assert_array_equal)SpectralClusteringspectral_clustering)
discretize
cluster_qr)img_to_graph)pairwise_distances)adjusted_rand_score)kernel_metrics
rbf_kernel)NearestNeighbors)
make_blobs)smoothed_aggregation_solverTF   
   <      g?)	n_samples
n_featurescenterscluster_stdshufflerandom_state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}|t|fD ]E}tddd| |d|}|j}|d dkr<d| }t|g d	dksGJ t	t
|}|j|jksWJ |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   
csr_matrixr   fitlabels_r   pickleloadsdumpsr'   r   r   )r   r!   Smatmodellabels
model_copy r6   z/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clustering*   s:   r8   c                  C      t g dg dg dg} td| ddd\}}t|}t || }t|}tt	 t
|dd	d
d W d    d S 1 sAw   Y  d S )Nr%   r%   r%         $@r<   r<         4@r>   r>   d   r#   *   r   r   r   r   r   r   	<unknown>)r'   r   r   r)   r*   r   r   maxr   
coo_matrixpytestraises
ValueErrorr   r   Xtrue_labelsDr1   r6   r6   r7   test_spectral_unknown_modeM      

"rM   c                  C   r9   )Nr:   r;   r=   r?   r#   r@   rA   r   r   rB   )r'   r   r!   rC   rI   r6   r6   r7   #test_spectral_unknown_assign_labels`   rN   rO   z input, params, err_type, err_msgr'   zn_clusters == -1, must be >= 1zn_clusters == 0, must be >= 1g      ?z0n_clusters must be an instance of int, not floatn_initzn_init == -1, must be >= 1zn_init == 0, must be >= 1z,n_init must be an instance of int, not floatgammazgamma == -1, must be >= 1zgamma == 0, must be >= 1n_neighborszn_neighbors == -1, must be >= 1zn_neighbors == 0, must be >= 1r   )	eigen_tolr   zeigen_tol == -1, must be >= 0degreezdegree == -1, must be >= 1zdegree == 0, must be >= 1c                 C   sL   t di |}tj||d ||  W d   dS 1 sw   Y  dS )z8Check the parameters validation in `SpectralClustering`.matchNr6   )r   rF   rG   r,   )inputparamserr_typeerr_msgestr6   r6   r7   test_spectral_params_validations   s   #"r\   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s8J d S )N   r   r   r   {Gz?r   r   r   r   )rQ   g-C6?r   r&   )r   r'   r(   r!   )
r   r   r)   maximumr   rE   r   r,   r-   r   )r!   rJ   yr1   r4   r6   r6   r7   test_spectral_clustering_sparse   s    


rb   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   )rR   connectivity)modeprecomputed_nearest_neighbors)r   r'   r(   rR   )r   r   r,   kneighbors_graphr   r-   appendr   )rJ   ra   rR   resultsadditional_neighborsnngraphr4   r6   r6   r7   ,test_precomputed_nearest_neighbors_filtering   s&   

rm   c                  C   s  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 tddd}tt ||  W d    d S 1 sw   Y  d S )Nr]   r   r   r   r^   r_   r   nearest_neighbors)r'   r(   r   znot fully connectedrU   )r'   rQ   r   r      additive_chi2c                 S   s   dS )Nr   r6   )xra   r6   r6   r7   <lambda>   s    z!test_affinities.<locals>.<lambda>c                 [   s   |i ksJ t | | S N)r)   minimumsum)rq   ra   kwargsr6   r6   r7   	histogram   s   z"test_affinities.<locals>.histogramrB   )r'   r(   )r   r   rF   warnsUserWarningr,   r   r-   r   randr   shaperG   rH   )rJ   ra   spr4   kernels_availablekernrw   r6   r6   r7   test_affinities   s<   
"r   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   ro   )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   r   c                  C   sP   t jjdd} d\}}| ||}| |}t t|| t|| s&J d S )Nr   r   )r?   ro   )r)   r   r   r   permutationr   r
   )r   r   r   r   permr6   r6   r7   &test_cluster_qr_permutation_invariance  s   


r   r   )2   r?      i  c                 C   s   t jjdd}tddD ]C}|d|d | }t |t}tjt 	| t 
| |ff| |d fd}| d|| |d   }t||d	}t||d
ksOJ qd S )Nr   r   r   r   r   r   )r{   g?)r   g?)r)   r   r   rangerandintr*   floatr   rE   onesr   toarrayr   r	   r   )r   r   n_classy_truey_indicatory_true_noisyy_predr6   r6   r7   test_discretize  s   
r   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.*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]      )r      r   r   r   )maskr   )r'   r   r   amg)r)   indicescopyr   r   r   expr   stdr   lenr   
amg_loadedr   rF   rG   rH   )rq   ra   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'   r   r   )r   r   )r   r   r,   r-   r   r)   r   )rJ   ra   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'   r   verbosez Computing label assignment usingr"   zInitialization completezIteration [0-9]+, inertia)r   r   r,   
readouterrresearchout)r!   capsysrJ   ra   capturedr6   r6   r7   test_verboseu  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       @zIspectral_clustering does not support passing in affinity as an np\.matrixrU   N)r)   matrixrF   rG   	TypeErrorr   )rJ   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  rs   r   )argsrv   r6   r6   r7   new_svd  s   z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdsvd)r      zSVD did not convergerU   N)setattrr)   linalgr   rF   rG   r   r	   )r   monkeypatchr   vectorsr6   r6   r7   *test_spectral_clustering_not_infinite_loop  s   

"r   )<__doc__r   numpyr)   scipyr   scipy.linalgr   rF   r.   sklearn.utilsr   sklearn.utils._testingr   sklearn.clusterr   r   sklearn.cluster._spectralr	   r
   sklearn.feature_extractionr   sklearn.metricsr   r   sklearn.metrics.pairwiser   r   sklearn.neighborsr   sklearn.datasetsr   pyamgr   r   ImportErrorr*   r   rJ   _markparametrizer8   rM   rO   rH   r   r\   rb   rm   r   r   r   r   filterwarningsr   r   r   r   r   r6   r6   r6   r7   <module>   s     

!
!
/
$

