
    _nd(,                        d 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 dd
lmZ dZ ej        ddgddgddgg          dz   Z eddeddd          \  ZZd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z'ej(        )                    d! e ej*        d"                     ej*        d"          g          d#             Z+d$ Z,d% Z-d& Z.dS )'z!
Testing for Clustering methods

    N)
csr_matrix)ConvergenceWarningNotFittedError)assert_array_equalassert_allclose)AffinityPropagation)#_equal_similarities_and_preferences)affinity_propagation)
make_blobs)euclidean_distances      
   <      g?T)	n_samples
n_featurescenterscluster_stdshufflerandom_statec                     t          t                              |d          d           }t          j        |          dz  }t          |||           \  }}t          |          }t          |k    sJ dS )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          Olib/python3.11/site-packages/sklearn/cluster/tests/test_affinity_propagation.pytest_affinity_propagationr-   %   s    	QXXlX??	N	N	NNA1"J&:	j/A' ' '#V -..K$$$$$$    c                     t          t          d           } t          j        |           dz  }t	          |dd          }|                    |           j        }t	          |dd          }|                    t                    j        }t          ||           |j        }t          |          }t          j
        |          j        |k    sJ t          |k    sJ d	S )
z^Check 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>   2   s     
Q	-	-	--A1"J	B
 
 
B *	
Dr	R	R	RBVVAYYFv1222 9-..K9V![0000$$$$$$r.   c                  2   t          t          d           } |                                 }t          j        |           dz  }t          j        |                                 |          rJ t          | |dd           t          | |           t          j        |                                 |          rJ t          |                                 t          j	        | j
        d                              t          | |dd           t          |                                 |           |                                } t          |dd          }|                    t                    j        }t          | |dd          \  }}t          ||           d	S )
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   I   si   	Q	-	-	--AJ1"J{1::<<44444 z1MMMMAz"""{1::<<44444AJJLL"(171:"6"6777 zANNNNAJJLL*--- 	A	
Dq	Q	Q	QBVVAYYF,	ju2  A~ v~.....r.   c                      t          t          d           } d}t          j        t          |          5  t          | ddddf                    ddd           dS # 1 swxY w Y   dS )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   e   s    	Q	-	-	--AAG	z	1	1	1 ( (Qqqq#2#vY'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AA"%A"c                      d} t          j        t          |           5  t          d                              t          d                     d d d            d S # 1 swxY w Y   d S )Nz6A sparse matrix was passed, but dense data is requiredrJ   r0   r3   )r   r   )rL   rM   	TypeErrorr   r7   r   )rO   s    r,   7test_affinity_propagation_precomputed_with_sparse_inputrT   m   s    FG	y	0	0	0 L L]33377
68J8JKKKL L L L L L L L L L L L L L L L L Ls   1AA #A c                     t          d|           }t                              |d          }|                    |          }|                    |          }t          ||           d S )N	euclideanr3   r   Fr   )r   r    r!   fit_predictpredictr   )r&   r'   r<   X_r*   labels2s         r,   !test_affinity_propagation_predictr\   s   s`    	k@R	S	S	SB	
,U	+	+B^^BFjjnnGvw'''''r.   c                     t          d          } t          j        t                    5  |                     t
                     d d d            n# 1 swxY w Y   t          j        t
          t
          j                  }t          dd          } | 	                    |           t          j        t          d          5  |                     t
                     d d d            d S # 1 swxY w Y   d S )NrV   rR   r0   9   rW   zexpecting 60 features as inputrJ   )r   rL   rM   r   rY   r    r"   dotTr7   rN   )r<   r(   s     r,   'test_affinity_propagation_predict_errorra   |   sE    
k	2	2	2B	~	&	&  


1               	q!#A	m"	E	E	EBFF1III	z)I	J	J	J  


1                 s#   AAAC))C-0C-c                    t          j        ddgddgddgg|           }t          ddd          }t          j        t
                    5  |                    |           d d d            n# 1 swxY w Y   t          t          j        d          |j	                   t          t          j        g d	          |j                   d S )
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_convergencero      s     	1a&1a&2r(+<@@@A 
ab	I	I	IB	(	)	)  
q			              BHV$$b&9:::rx--rz:::::s   A--A14A1c                 
   t          j        ddgddgg|           }t          |d           }t          j        t
          d          5  t          |d	          \  }}d d d            n# 1 swxY w Y   t          ddg|           t          ddg|           t          j        t
          d          5  t          |d
	          \  }}d d d            n# 1 swxY w Y   t          dg|           t          ddg|           t          j	                    5  t          j
        dt
                     t          |dd
gd          \  }}d d d            n# 1 swxY w Y   t          dg|           t          ddg|           d S )Nr   r   rd   Tr   zmutually equalrJ   r   )r   rf   errorir4   r   )r"   rk   r   rL   rl   UserWarningr
   r   warningscatch_warningssimplefilter)r'   r    r(   cluster_center_indicesr*   s        r,   3test_affinity_propagation_equal_mutual_similaritiesrw      s   
2q'Ar7#<888A	Q	-	-	--A 
k)9	:	:	: O O)=aA)N)N)N&O O O O O O O O O O O O O O O 1v56661vv&&& 
k)9	:	:	: Q Q)=aC)P)P)P&Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q s23331vv&&& 
	 	"	" 
 
g{333)=3*2*
 *
 *
&
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 s23331vv&&&&&s6   
A++A/2A/5CCC2EEEc                    t          j        ddgddgddgg|           }t          j        t                    5  t          ddd                              |          }d d d            n# 1 swxY w Y   t          j        ddgd	d	gd
d
gg          }t          j        t                    5  |                    |          }d d d            n# 1 swxY w Y   t          t          j        g d          |           d S )Nr   r   rc   rd   rf   K   rh   r   r      rj   )	r"   rk   rL   rl   r   r   r7   rY   r   )r'   r    r<   
to_predictys        r,   1test_affinity_propagation_predict_non_convergencer}      s    	1a&1a&2r(+<@@@A 
(	)	) U U C!"MMMQQRSTTU U U U U U U U U U U U U U U
 Aq6Aq6Aq6233J	(	)	) # #JJz""# # # # # # # # # # # # # # #rx--q11111s#   &A++A/2A/,CCCc                 N   t          j        g dg dg dg|           }t          ddd          }d	}t          j        t
          |
          5  |                    |           d d d            n# 1 swxY w Y   t          t          j        g d          |j                   d S )N)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   rd   rV   r   "   )r3   ri   r   zcAffinity propagation did not converge, this model may return degenerate cluster centers and labels.rJ   )r   r   r   )	r"   rk   r   rL   rl   r   r7   r   r8   )r'   r    r<   msgs       r,   8test_affinity_propagation_non_convergence_regressiontestr      s    
			///1C1C1CDL	 	 	A 
kAB	O	O	OB	'  
(	4	4	4  
q			               rx			**BJ77777s   A11A58A5c                    t          j        ddgddgddgg|           }t          |d           }t          |t          j        d                    rJ t          |t          j        ddg                    rJ t          |t          j        ddg                    rJ t          j        ddgddgg|           }t          |d           }t          |t          j        ddg                    rJ t          |t          j        ddg                    sJ t          |t          j        d                    sJ d S )Nr   r   rc   rd   Tr   )r"   rk   r   r	   )r'   r    r(   s      r,   'test_equal_similarities_and_preferencesr      sL   
1a&1a&2r(+<@@@A	Q	-	-	--A21bhqkkBBBBB21bh1v6F6FGGGGG21bh1v6F6FGGGGG 	1a&1a&!666A	Q	-	-	--A 31bh1v6F6FGGGGG /q"(Aq62B2BCCCCC.q"(1++>>>>>>>r.   c                  @   ddgddgddgg} t          d| dd          \  }}t          ddd          }|                    |           |j        }t          ddd	          }|                    |           |j        }t	          j        ||z
  dz            dk    sJ d
S )zCheck that different random states lead to different initialisations
    by looking at the center locations after two iterations.
    r   r   i,  g      ?r   )r   r   r   r   r   )convergence_iterri   r   L   N)r   r   r7   rn   r"   mean)r   r    labels_trueapcenters0	centers76s         r,   &test_affinity_propagation_random_stater      s     1vBx!R)GwCa  NA{ 
a!!	L	L	LBFF1III"H 
a!"	M	M	MBFF1III#I7Hy(Q.//!333333r.   r   )r   r   c                 n   t           j                            d          }|                    dd                              |d          }d|                    d          z                      t
                    }t          d          }|                    ||           | |_        t          j
                    5  t          j        d	t                     t          |                    |          t          j        |j        d
         t
                               ddd           dS # 1 swxY w Y   dS )z
    Check that having sparse or dense `centers` format should not
    influence the convergence.
    Non-regression test for gh-13334.
    *   (   r   Fr   rz   .   )r   rq   r   rd   N)r"   randomRandomStaterandr!   intr   r7   rn   rs   rt   ru   r   r   rY   rC   rD   )r   r'   rngr    r|   r   s         r,   :test_affinity_propagation_convergence_warning_dense_sparser     sT    )


#
#CR599A	
SXXb\\	!!#&&A	"	-	-	-BFF1aLLL!B		 	"	" K Kg'9:::2::a=="(171:S*I*I*IJJJK K K K K K K K K K K K K K K K K Ks   ;A"D**D.1D.c                     t          j        g dg dg dg dg|           }t          ddd                              |          }t          j        g d	          }t	          |j        |           d S )
N)r   r   r   r   )r   r   r   r   )r   r   r   r   rd   r   r0   r   r2   )r   r   r   r   )r"   rk   r   r7   r   r8   )r'   r    afpexpecteds       r,   test_correct_clustersr     s     		|||\\\<<<@	 	 	A ]QR
S
S
S
W
W	 C x%%Hs{H-----r.   c                      t          dd          } |                     t                     |                     t	          d                    }t          |d           d S )NrV   r   rW   )r   r   )r   r7   r    rY   r   r   )r<   r*   s     r,   test_sparse_input_for_predictr   $  sT     
k	C	C	CBFF1IIIZZ
6**++Fvv&&&&&r.   c                      t          dd          } t          j                            d          }t	          |                    ddd                    }|                     |          }t          |d           d S )	NrV   r   rW   r   r   )   r   )r;   )r   r   r   r   r   )r   r"   r   r   r   randintrX   r   )r<   r   r    r*   s       r,   !test_sparse_input_for_fit_predictr   -  sq     
k	C	C	CB
)


#
#C3;;q!&;1122A^^AFv/////r.   )/__doc__numpyr"   rL   rs   scipy.sparser   sklearn.exceptionsr   r   sklearn.utils._testingr   r   sklearn.clusterr   %sklearn.cluster._affinity_propagationr	   r
   sklearn.datasetsr   sklearn.metricsr   r%   rk   r   r    rF   r-   r>   rH   rP   rT   r\   ra   ro   rw   r}   r   r   r   markparametrizerC   r   r   r   r    r.   r,   <module>r      s|   
       # # # # # # A A A A A A A A F F F F F F F F / / / / / / U U U U U U 0 0 0 0 0 0 ' ' ' ' ' ' / / / / / /

"(QFRHq"g.
/
/"
4z  1
% 
% 
%% % %./ / /8( ( (L L L( ( (  ; ; ;' ' '@2 2 2"8 8 8? ? ?*4 4 4* ZZ0A0A%B%BHBHWDUDU$VWWK K XWK$
. 
. 
.' ' '0 0 0 0 0r.   