
    -i-              	          S r SSKrSSKrSSKrSSKrSSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJr  SSKJrJr   SSK J!r!  Sr"\RH                  " SS/SS/SS//5      S-   r%\" SS\%SSSS9u  r&r'\RP                  RS                  S\5      \RP                  RS                  SS5      \RP                  RS                  SS5      S 5       5       5       r*\RP                  RS                  S\5      \RP                  RS                  SS5      S 5       5       r+S  r,S! r-S" r.S# r/\RP                  RS                  S\5      \RP                  RS                  S$/ S%Q5      S& 5       5       r0S' r1S( r2\RP                  RS                  SS5      S) 5       r3S* r4S+ r5g! \# a    Sr" GNVf = f),z'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           
         [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nXB" U5      4 H  n[        USSU US9R                  U5      nUR                  nUS   S:X  a  SU-
  n[        U/ S	Q5      S:X  d   e[        R                  " [        R                  " U5      5      nUR                  UR                  :X  d   eUR                  UR                  :X  d   e[        UR                  UR                  5        M     g )
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Smatmodellabels
model_copys	            V/var/www/html/venv/lib/python3.13/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clusteringr:   '   s     	///////	

	A =#$"+"%'
 #c( 	 !9>ZF"6+@AQFFF\\&,,u"56
$$(8(8888&&%*<*<<<<:--u}}=# %    coo_containerc                     [        SUSS/SS//SS9u  p4[        USS9n[        R                  " US-
  S5      nU" U5      n[	        US	S
U S9R                  U5      R                  n[        XF5      S:X  d   eg )N   r   r   {Gz?r   r   r   r   )gammag-C6?r   r   r)   )r   r*   r+   r#   )r	   r   r,   maximumr   r.   r/   r   )r#   r<   r3   Xyr4   r7   s          r9   test_spectral_clustering_sparserE   M   s     'Q"b"	DA 	1AA


1t8QAaA 	+"'		
 
Q	  q)Q...r;   c                 *   [        SU / SQ/ SQ/SS9u  pSn/ nS Hc  n[        X5-   S9R                  U5      nUR                  US	S
9n[	        U SSUS9R                  U5      R
                  nUR                  U5        Me     [        US   US   5        g )N   )r   r   r   )r   r   r   r?   r@   r   )r   r   )n_neighborsdistance)modeprecomputed_nearest_neighbors)r   r*   r+   rH   r   r   )r	   r   r.   kneighbors_graphr   r/   appendr   )	r3   rC   rD   rH   resultsadditional_neighborsnngraphr7   s	            r9   ,test_precomputed_nearest_neighbors_filteringrR   h   s    'L)	DA KG '+*LMQQRST##AJ#7/8'	 SZW 	 	v !( wqz71:.r;   c                    [        SSSS/SS//SS9u  p[        SSSS	9n[        R                  " [        S
S9   UR                  U5        S S S 5        [        X#R                  5      S:X  d   e[        SSU S9nUR                  U5      R                  n[        X$5      S:X  d   e[        S5      R                  SS5      S-  n[        5       nU HQ  nUS:w  d  M  [        SUSS	9nUR                  U5      R                  nUR                  S   4UR                  :X  a  MQ   e   [        SS SS	9nUR                  U5      R                  nUR                  S   4UR                  :X  d   eS n[        SUSS	9nUR                  U5      R                  nUR                  S   4UR                  :X  d   eg ! , (       d  f       GNq= f)Nr>   r   r   r   r?   r@   r   nearest_neighbors)r*   r+   r   znot fully connectedmatch)r*   rA   r   r      additive_chi2c                     g)Nr    )xrD   s     r9   <lambda>!test_affinities.<locals>.<lambda>   s    r;   c                 Z    U0 :X  d   e[         R                  " X5      R                  5       $ N)r,   minimumsum)r[   rD   kwargss      r9   	histogram"test_affinities.<locals>.histogram   s&    ||zz!##%%r;   )r	   r   pytestwarnsUserWarningr.   r   r/   r   randr   shape)r3   rC   rD   spr7   kernels_availablekernrc   s           r9   test_affinitiesrm      s    11vBx.@dDA 
q3FUV	WB	k)>	?
q	 
@q**-222	q@R	SBVVAYFq)Q...2##B*R/A&(! ?"#q4aPBVVAY&&FGGAJ=FLL000 " 
q>PQ	RBVVAYFGGAJ=FLL(((&
 
q91	MBVVAYFGGAJ=FLL(((= 
@	?s   F55
Gc                    [         R                  R                  U S9nSu  p#UR                  X#5      n[	        UR                  [         R                  5      5      nUR                  U4:X  d   e[         R                  " [         R                  " U5      [         R                  " U5      5      (       d   e[	        UR                  [         R                  5      5      n[         R                  " XV5      (       d   eg )Nseed)r   rW   )r,   randomRandomStaterandnr   astypefloat64ri   array_equaluniquearangefloat32)r3   r   r   n_componentsdatalabels_float64labels_float32s          r9   test_cluster_qrr~      s    
 99((.@(AL#Ii6DBJJ 78NI<///>>"))N3RYY|5LMMMMBJJ 78N>>.9999r;   c                     [         R                  R                  U S9nSu  p#UR                  X#5      nUR	                  U5      n[         R
                  " [        U5      U   [        XE   5      5      (       d   eg )Nro   )d   rW   )r,   rq   rr   rs   permutationrv   r   )r3   r   r   rz   r{   perms         r9   &test_cluster_qr_permutation_invariancer      st    99((.@(AL$Ii6D##I.D>>44:   r;   r   )2   r      i  c                    [         R                  R                  US9n[        SS5       H  nUR	                  SUS-   U 5      n[         R
                  " U[        5      nU" [         R                  " U 5      [         R                  " U 5      U44XS-   4S9nUR                  5       SUR                  XS-   5      -  -   n[        XsS9n[        XX5      S	:  a  M   e   g )
Nro   r   r   r   r   )ri   g?)r   g?)r,   rq   rr   rangerandintr-   floatonesrx   toarrayrs   r   r   )	r   r<   r3   r   n_classy_truey_indicatory_true_noisyy_preds	            r9   test_discretizer      s     99((.@(ALB<%%a1i@&%(#WWY"))I"6!?@k*
 #**,s\5G5G{6
 0
 
 LD"62S888  r;   c                    [         R                  " S5      u  pSu  p4Su  pVXS   -
  S-  X#S   -
  S-  -   US-  :  nXS   -
  S-  X$S   -
  S-  -   US-  :  nXx-  n	U	R                  5       n
U	R                  [        5      n[        XS9n[         R                  " UR                  * UR                  R                  5       -  5      Ul        [        USSU S	9n[        [         R                  " U5      5      S:X  d   e[        (       a  [        USS
U S	9n[        X5      S:X  d   eg [        R                  " [         5         [        USS
SS	9  S S S 5        g ! , (       d  f       g = f)N)(   r   ))      )r>      )      r   r   r   )maskr!   )r*   r    r   amg)r,   indicescopyrt   r   r
   expr{   stdr   lenrw   
amg_loadedr   re   raises
ValueError)r3   r[   rD   center1center2radius1radius2circle1circle2circlesr   imgrQ   labels_arpack
labels_amgs                  r9   0test_spectral_clustering_with_arpack_amg_solversr      sN   
 ::hDA)GG1:~!#q1:~!&;;gqjHG1:~!#q1:~!&;;gqjHGG<<>D
..
C(Eejjnn&667EJ'!(ASM ryy'(A---z(aeBT

 #==BBB]]:&!%VWX '&&s   >E
E"c                 T   [        SU SS/SS//SS9u  p[        SU S9nUR                  U5      R                  n[        SSU S9R                  U5      R                  n[	        XE5        [        SU S	9R                  U5      R                  n[
        R                  " XF5      (       a   eg )
Nr>   r   r   r?   r@   r   )r*   r   )r*   rz   r   )rz   r   )r	   r   r.   r/   r   r,   rv   )r3   rC   rD   rj   r7   labels_same_ncomplabels_diff_ncomps          r9   test_n_componentsr     s     'Q"b"	DA 
q7I	JBVVAYF 	q7I	
 
Q	  v1
 	8JK	Q	 
 ~~f88888r;   c                 ~   [        SSSS/SS//SS9u  p#[        SSSS	9R                  U5        UR                  5       n[        R
                  " S
UR                  5      (       d   eU S:X  aQ  [        R
                  " SUR                  5      (       d   e[        R
                  " SUR                  5      (       d   eg g )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#   capsysrC   rD   captureds        r9   test_verboser   &  s     11vBx.@dDA !"a@DDQG  "H998(,,GGGG yy3X\\BBBByy5x||DDDD !r;   c                      [         R                  " SS/SS//5      n Sn[        R                  " [        US9   [        U 5        SSS5        g! , (       d  f       g= f)z^Check 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 arrayrU   N)r,   matrixre   r   	TypeErrorr   )rC   msgs     r9   )test_spectral_clustering_np_matrix_raisesr   8  sF     			C:Sz*+A
IC	y	,A 
-	,	,s   A
Ac                     S nUR                  [        R                  SU5        [        R                  " S5      n[        R
                  " [        SS9   [        U5        SSS5        g! , (       d  f       g= f)zcCheck that discretize raises LinAlgError when svd never converges.

Non-regression test for #21380
c                      [        5       er_   r   )argsrb   s     r9   new_svd;test_spectral_clustering_not_infinite_loop.<locals>.new_svdH  s
    mr;   svd)r      zSVD did not convergerU   N)setattrr,   linalgr   re   r   r   r   )r   monkeypatchr   vectorss       r9   *test_spectral_clustering_not_infinite_loopr   B  sQ     		5'2gggG	{*@	A7 
B	A	As   A))
A7)6__doc__r0   r   numpyr,   re   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   rC   _markparametrizer:   rE   rR   rm   r~   r   r   r   r   r   r   r   rZ   r;   r9   <module>r      s   -  	   $ C < ' 3 / ? . , 5 >1J ((QFRHq"g.
/"
41 .9)=>*PQ > R ? : >F .9*PQ/ R :/2/:')T:$	 .9&9:9 ; :9&!YH9@ *PQE RE"S	  Js   F1 1F=<F=