
    -iz.              	       \   S r SSKrSSKrSSKrSSKJr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Jr  SS	KJr  S
r\R.                  " SS/SS/SS//5      S-   r\" SS\SSSS9u  rrS rS rS rS r\R>                  RA                  S\5      S 5       r!S r"S r#S r$S r%S r&S r'S r(S  r)\R>                  RA                  S!\\R.                  /-   5      S" 5       r*S# r+\R>                  RA                  S\5      S$ 5       r,\R>                  RA                  S\5      S% 5       r-S& r.g)'z!
Testing for Clustering methods

    N)AffinityPropagationaffinity_propagation)#_equal_similarities_and_preferences)
make_blobs)ConvergenceWarningNotFittedError)euclidean_distances)assert_allcloseassert_array_equal)CSR_CONTAINERS      
   <      g?T)	n_samples
n_featurescenterscluster_stdshufflerandom_statec                     [        [        R                  USS9SS9* n[        R                  " U5      S-  n[        X#U S9u  pE[        U5      n[        U:X  d   eg)z.Test consistency of the affinity propagations.FcopyTsquaredr   
preferencer   N)r	   Xastypenpmedianr   len
n_clusters)global_random_seedglobal_dtypeSr   cluster_centers_indiceslabelsn_clusters_s          b/var/www/html/venv/lib/python3.13/site-packages/sklearn/cluster/tests/test_affinity_propagation.pytest_affinity_propagationr-   #   s_    	QXXlX?	NNA1"J&:	/A'# -.K$$$    c                     [        [        SS9* n [        R                  " U 5      S-  n[	        USSS9nUR                  U 5      R                  n[	        USSS9nUR                  [        5      R                  n[        XC5        UR                  n[        U5      n[        R                  " U5      R                  U:X  d   e[        U:X  d   eg	)
zVCheck equality of precomputed affinity matrix to internally computed affinity
matrix.
Tr   r   precomputed   r   affinityr   %   r   verboser   N)r	   r    r"   r#   r   fitlabels_r   cluster_centers_indices_r$   uniquesizer%   )r(   r   aflabels_precomputedr*   r)   r+   s          r,   %test_affinity_propagation_precomputedr>   0   s     
Q	--A1"J	B
B **	
Dr	RBVVAYFv2 99-.K99V!![000$$$r.   c                     [        [        SS9* n U R                  5       n[        R                  " U 5      S-  n[        R
                  " U R                  5       U5      (       a   e[        XSSS9  [        X5        [        R
                  " U R                  5       U5      (       a   e[        U R                  5       [        R                  " U R                  S   5      5        [        XSSS9  [        U R                  5       U5        UR                  5       n [        USSS9nUR                  [        5      R                  n[        XSSS9u  pV[        XF5        g	)
z.Check behaviour of not copying the input data.Tr   r   r   )r   r   r   Fr5   J   N)r	   r    r   r"   r#   allclosediagonalr   r
   zerosshaper   r7   r8   r   )r(   
S_originalr   r<   r*   _labels_no_copys          r,   !test_affinity_propagation_no_copyrH   G   s
   	Q	--AJ1"J{{1::<4444 1MA"{{1::<4444AJJL"((1771:"67 ANAJJL*- 	A	
Dq	QBVVAYF,	u2A v.r.   c                      [        [        SS9* n Sn[        R                  " [        US9   [        U SS2SS24   5        SSS5        g! , (       d  f       g= f)zHCheck the shape of the affinity matrix when using `affinity_propagation.Tr   z1The matrix of similarities must be a square arraymatchNr   )r	   r    pytestraises
ValueErrorr   )r(   err_msgs     r,   (test_affinity_propagation_affinity_shaperP   c   sD    	Q	--AAG	z	1Qq#2#vY' 
2	1	1s   A		
Acsr_containerc                     Sn[         R                  " [        US9   [        SS9R	                  U " S5      5        S S S 5        g ! , (       d  f       g = f)Nz8Sparse data was passed for X, but dense data is requiredrJ   r0   r3   )r   r   )rL   rM   	TypeErrorr   r7   )rQ   rO   s     r,   7test_affinity_propagation_precomputed_with_sparse_inputrU   k   s9    HG	y	0]377f8MN 
1	0	0s   A
Ac                     [        SU S9n[        R                  USS9nUR                  U5      nUR	                  U5      n[        XE5        g )N	euclideanr3   r   Fr   )r   r    r!   fit_predictpredictr   )r&   r'   r<   X_r*   labels2s         r,   !test_affinity_propagation_predictr]   r   sD    	k@R	SB	
,U	+B^^BFjjnGv'r.   c                     [        SS9n [        R                  " [        5         U R	                  [
        5        S S S 5        [        R                  " [
        [
        R                  5      n[        SSS9n U R                  U5        [        R                  " [        SS9   U R	                  [
        5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrW   rS   r0   9   rX   zexpecting 60 features as inputrJ   )r   rL   rM   r   rZ   r    r"   dotTr7   rN   )r<   r(   s     r,   'test_affinity_propagation_predict_errorrb   {   s     
k	2B	~	&


1 
' 	q!##A	m"	EBFF1I	z)I	J


1 
K	J 
'	& 
K	Js   B>C>
C
Cc                    [         R                  " SS/SS/SS//U S9n[        SSSS9n[        R                  " [
        5         UR                  U5        S S S 5        [        [         R                  " S5      UR                  5        [        [         R                  " / S	Q5      UR                  5        g ! , (       d  f       Ne= f)
Nr   r   dtypeR   r   max_iterr   )r   r   r   r   r   )r"   arrayr   rL   warnsr   r7   r
   emptycluster_centers_r   r8   )r'   r    r<   s      r,   -test_affinity_propagation_fit_non_convergencerp      s     	1a&1a&2r(+<@A 
ab	IB	(	)
q	 
*BHHV$b&9&9:rxx-rzz: 
*	)s   B55
Cc                    [         R                  " SS/SS//U S9n[        USS9* n[        R                  " [
        SS9   [        USS	9u  p4S S S 5        [        SS/W5        [        SS/W5        [        R                  " [
        SS9   [        US
S	9u  p4S S S 5        [        S/U5        [        SS/U5        [        R                  " 5          [        R                  " S[
        5        [        USS
/SS9u  p4S S S 5        [        S/U5        [        SS/U5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NL= f)Nr   r   re   Tr   zmutually equalrJ   r   )r   rg   errorir4   r   )r"   rl   r	   rL   rm   UserWarningr   r   warningscatch_warningssimplefilter)r'   r    r(   cluster_center_indicesr*   s        r,   3test_affinity_propagation_equal_mutual_similaritiesrx      s*   
2q'Ar7#<8A	Q	--A 
k)9	:)=aA)N& 
; 1v561vv& 
k)9	:)=aC)P& 
; s231vv& 
	 	 	"g{3)=3*2*
& 
# s231vv&1 
;	: 
;	: 
#	"s$    D
D/+E 
D,/
D= 
Ec                    [         R                  " SS/SS/SS//U S9n[        R                  " [        5         [        SSSS9R                  U5      nS S S 5        [         R                  " SS/S	S	/S
S
//5      n[        R                  " [        5         WR                  U5      nS S S 5        [        [         R                  " / SQ5      W5        g ! , (       d  f       N= f! , (       d  f       NB= f)Nr   r   rd   re   rg   K   ri   r   r      rk   )	r"   rl   rL   rm   r   r   r7   rZ   r   )r'   r    r<   
to_predictys        r,   1test_affinity_propagation_predict_non_convergencer~      s     	1a&1a&2r(+<@A 
(	) C!"MQQRST 
*
 Aq6Aq6Aq623J	(	)JJz" 
*rxx-q1 
*	) 
*	)s   CC#
C #
C1c                 :   [         R                  " / SQ/ SQ/ SQ/U S9n[        SSSS9nS	n[        R                  " [
        US
9   UR                  U5        S S S 5        [        [         R                  " / SQ5      UR                  5        g ! , (       d  f       N;= f)N)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   re   rW   r   "   )r3   rj   r   zcAffinity propagation did not converge, this model may return degenerate cluster centers and labels.rJ   )r   r   r   )	r"   rl   r   rL   rm   r   r7   r   r8   )r'   r    r<   msgs       r,   8test_affinity_propagation_non_convergence_regressiontestr      s{    
	/1CDL	A 
kAB	OB	'  
(	4
q	 
5 rxx	*BJJ7 
5	4s   B
Bc                    [         R                  " SS/SS/SS//U S9n[        USS9* n[        U[         R                  " S5      5      (       a   e[        U[         R                  " SS/5      5      (       a   e[        U[         R                  " SS/5      5      (       a   e[         R                  " SS/SS//U S9n[        USS9* n[        U[         R                  " SS/5      5      (       a   e[        U[         R                  " SS/5      5      (       d   e[        U[         R                  " S5      5      (       d   eg )Nr   r   rd   re   Tr   )r"   rl   r	   r   )r'   r    r(   s      r,   'test_equal_similarities_and_preferencesr      s   
1a&1a&2r(+<@A	Q	--A21bhhqkBBBB21bhh1v6FGGGG21bhh1v6FGGGG 	1a&1a&!6A	Q	--A 31bhh1v6FGGGG /q"((Aq62BCCCC.q"((1+>>>>r.   c                     SS/SS/SS//n [        SU SSS9u  p[        SSSS9nUR                  U5        UR                  n[        SSS	S9nUR                  U5        UR                  n[        R
                  " XE-
  S-  5      S:  d   eg
)z~Check that different random states lead to different initialisations
by looking at the center locations after two iterations.
r   r   i,        ?r   )r   r   r   r   r   )convergence_iterrj   r   L   N)r   r   r7   ro   r"   mean)r   r    labels_trueapcenters0	centers76s         r,   &test_affinity_propagation_random_stater      s     1vBx!R)GwCaNA 
a!!	LBFF1I""H 
a!"	MBFF1I##I77H(Q./!333r.   	containerc           	      Z   U " [         R                  " S5      5      n[         R                  R                  S5      nUR	                  SS5      R                  USS9nSUR	                  S5      -  R                  [        5      n[        SS	9nUR                  XE5        X&l	        [        R                  " 5          [        R                  " S
[        5        [        UR                  U5      [         R                  " UR                   S   [        S95        SSS5        g! , (       d  f       g= f)z|
Check that having sparse or dense `centers` format should not
influence the convergence.
Non-regression test for gh-13334.
)r   r   *   (   r   Fr   r{   .   )r   rr   r   re   N)r"   rC   randomRandomStaterandr!   intr   r7   ro   rt   ru   rv   r   r   rZ   rD   )r   r'   r   rngr    r}   r   s          r,   :test_affinity_propagation_convergence_warning_dense_sparser     s     )*G
))


#CR59A	
SXXb\	!!#&A	"	-BFF1L!		 	 	"g'9:2::a="((1771:S*IJ 
#	"	"s   8AD
D*c                     [         R                  " / SQ/ SQ/ SQ/ SQ/U S9n[        SSSS9R                  U5      n[         R                  " / S	Q5      n[	        UR
                  U5        g )
N)r   r   r   r   )r   r   r   r   )r   r   r   r   re   r   r0   r   r2   )r   r   r   r   )r"   rl   r   r7   r   r8   )r'   r    afpexpecteds       r,   test_correct_clustersr     s]     		|\<@	A ]QR
S
W
W	C xx%Hs{{H-r.   c                     [        SSS9nUR                  [        5        UR                  U " S5      5      n[	        US5        g )NrW   r   rX   )r   r   )r   r7   r    rZ   r   )rQ   r<   r*   s      r,   test_sparse_input_for_predictr   $  s8     
k	CBFF1IZZf-.Fvv&r.   c                     [        SSS9n[        R                  R                  S5      nU " UR	                  SSSS95      nUR                  U5      n[        US5        g )	NrW   r   rX   r   r   )   r   )r;   )r   r   r   r   r   )r   r"   r   r   randintrY   r   )rQ   r<   r   r    r*   s        r,   !test_sparse_input_for_fit_predictr   .  sU     
k	CB
))


#Cckk!QVk45A^^AFv/r.   c                      [         R                  " S5      n [        SSSS9R                  U 5      n[         R                  " UR
                  S:H  5      (       d   eg)zMake sure we do not assign multiple clusters to equal points.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/pull/20043
)   r   rW   r   r   )r3   dampingr   r   N)r"   rC   r   r7   allr8   )r    r<   s     r,   &test_affinity_propagation_equal_pointsr   9  sI     	A	k3R	P	T	TUV	WB66"**/""""r.   )/__doc__rt   numpyr"   rL   sklearn.clusterr   r   %sklearn.cluster._affinity_propagationr   sklearn.datasetsr   sklearn.exceptionsr   r   sklearn.metricsr	   sklearn.utils._testingr
   r   sklearn.utils.fixesr   r%   rl   r   r    rF   r-   r>   rH   rP   markparametrizerU   r]   rb   rp   rx   r~   r   r   r   r   r   r   r   r    r.   r,   <module>r      s`  
    E U ' A / F .

((QFRHq"g.
/"
41
%%./8( .9O :O(;'@2"8?*4* nz&ABK CK&
. .9' :' .90 :0#r.   