a
    h+                     @   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#y   dZ"Y n0 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 ]}tddd| |d|}|j}|d dkrvd| }t|g d	dksJ tt|}|j	|j	ksJ |j
|j
ksJ 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   SZmatmodellabelsZ
model_copy r2   _/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clustering'   s8    r4   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snJ 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    r5   Xyr/   r1   r2   r2   r3   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 ]H}t|| d	| }|j| d
d}tddd|d|j}|| q,t|d |d  d S )N   r   r   r   r7   r8   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graphr1   r2   r2   r3   ,test_precomputed_nearest_neighbors_filteringc   s&    

rE   c                  C   sv  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\0    Y  t||jdkszJ tdddd}|| j}t||dksJ td	ddd } t
 }|D ]<}|dkrtd|dd	}|| j}| jd f|jksJ qtddd dd	}|| j}| jd f|jks8J dd }td|dd	}|| j}| jd f|jksrJ d S )Nr6   r   r   r   r7   r8   r   Znearest_neighbors)r&   r'   r   znot fully connectedmatch)r&   r9   r   r      Zadditive_chi2c                 S   s   dS )Nr   r2   )xr<   r2   r2   r3   <lambda>       z!test_affinities.<locals>.<lambda>c                 [   s   |i ksJ t | | S N)r(   minimumsum)rI   r<   kwargsr2   r2   r3   	histogram   s    z"test_affinities.<locals>.histogram)r   r   pytestZwarnsUserWarningr*   r
   r+   r   Zrandr   shape)r;   r<   spr1   Zkernels_availablekernrP   r2   r2   r3   test_affinities}   s0    
(rV   c                  C   s   t jjdd} d\}}| ||}t|t j}|j|fksBJ t t 	|t 
|s^J t|t j}t ||s~J d S )N   seed)r   rH   )r(   randomRandomStaterandnr   astypeZfloat64rS   array_equaluniquearangeZfloat32)r   r   n_componentsdataZlabels_float64Zlabels_float32r2   r2   r3   test_cluster_qr   s    rc   c                  C   sP   t jjdd} d\}}| ||}| |}t t|| t|| sLJ d S )NrW   rX   )d   rH   )r(   rZ   r[   r\   Zpermutationr^   r   )r   r   ra   rb   permr2   r2   r3   &test_cluster_qr_permutation_invariance   s    


rf   r   )2   rd      i  c                 C   s   t jjdd}tddD ]}|d|d | }t |t}|t | t | |ff| |d fd}|	 d|
| |d   }t||d	}t||d
ksJ qd S )NrW   rX   r   r   r   r   )rS   g?)r   g?)r(   rZ   r[   rangerandintr)   floatonesr`   Ztoarrayr\   r   r
   )r   r5   r   Zn_classZy_trueZy_indicatorZy_true_noisyZy_predr2   r2   r3   test_discretize   s    
rm   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sJ trt	|dd
dd	}t||dksJ n<tt  t	|dd
dd	 W d    n1 s.0    Y  d S )N)(   rn   ))      )r6      )rW      r   r   r   )maskr   )r&   r   r   Zamg)r(   indicescopyr]   rk   r	   exprb   Zstdr   lenr_   
amg_loadedr
   rQ   raises
ValueError)rI   r<   Zcenter1Zcenter2Zradius1Zradius2Zcircle1Zcircle2Zcirclesrs   ZimgrD   Zlabels_arpackZ
labels_amgr2   r2   r3   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 )Nr6   r   r   r   r7   r8   r   )r&   r   )r&   ra   r   )ra   r   )r   r   r*   r+   r   r(   r^   )r;   r<   rT   r1   Zlabels_same_ncompZlabels_diff_ncompr2   r2   r3   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sNJ | dkrztd|jshJ td|jszJ d S )Nr6   r   r   r   r7   r8   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capturedr2   r2   r3   test_verbose  s    
r   c                  C   sT   t ddgddgg} d}tjt|d t|  W d   n1 sF0    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 arrayrF   N)r(   matrixrQ   ry   	TypeErrorr   )r;   msgr2   r2   r3   )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   n1 sN0    Y  dS )zkCheck that discretize raises LinAlgError when svd never converges.

    Non-regression test for #21380
    c                  _   s
   t  d S rL   r   )argsrO   r2   r2   r3   new_svd7  s    z;test_spectral_clustering_not_infinite_loop.<locals>.new_svdZsvd)r      zSVD did not convergerF   N)setattrr(   Zlinalgrl   rQ   ry   r   r   )r   Zmonkeypatchr   Zvectorsr2   r2   r3   *test_spectral_clustering_not_infinite_loop1  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parametrizer4   r=   rE   rV   rc   rf   rm   r{   r|   r   r   r   r2   r2   r2   r3   <module>   sb   
 

!*$

