
    0Phz.                     l   d Z ddlZddlZddlZddlmZ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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ej                             de          d             Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d  Z)ej                             d!eej        gz             d"             Z*d# Z+ej                             de          d$             Z,ej                             de          d%             Z-d& Z.dS )'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                     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          o/var/www/html/test/jupyter/venv/lib/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>   0   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   G   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   c   s    	Q	-	-	--AAG	z	1	1	1 ( (Qqqq#2#vY'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AA"%A"csr_containerc                     d}t          j        t          |          5  t          d                               | d                     d d d            d S # 1 swxY w Y   d S )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   s    HG	y	0	0	0 O O]33377f8M8MNNNO O O O O O O O O O O O O O O O O Os   -A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]   r   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 )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   {   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_convergencerp      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   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#<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   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 
(	)	) 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   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    
			///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   rd   re   Tr   )r"   rl   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,        ?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!!	L	L	LBFF1III"H 
a!"	M	M	MBFF1III#I7Hy(Q.//!333333r.   	containerc                     | t          j        d                    }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   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     sm    i))**G
)


#
#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"EEE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   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
S
S
W
W	 C x%%Hs{H-----r.   c                     t          dd          }|                    t                     |                     | d                    }t	          |d           d S )NrW   r   rX   )r   r   )r   r7   r    rZ   r   )rQ   r<   r*   s      r,   test_sparse_input_for_predictr   $  sV     
k	C	C	CBFF1IIIZZf--..Fvv&&&&&r.   c                     t          dd          }t          j                            d          } | |                    ddd                    }|                    |          }t          |d           d S )	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   .  ss     
k	C	C	CB
)


#
#Cckk!QVk4455A^^AFv/////r.   c                      t          j        d          } t          ddd                              |           }t          j        |j        dk              sJ dS )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  sX     	A	k3R	P	P	P	T	TUV	W	WB6"*/"""""""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 E E E E E E E U U U U U U ' ' ' ' ' ' A A A A A A A A / / / / / / F F F F F F F F . . . . . .

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