
    >[gz.                     b   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>                  jA                  de      d        Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d  Z)ej>                  jA                  d!eej.                  gz         d"        Z*d# Z+ej>                  jA                  de      d$        Z,ej>                  jA                  de      d%        Z-d& Z.y)'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        j                  |d      d       }t        j                  |      dz  }t        |||       \  }}t        |      }t        |k(  sJ y)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          j/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_affinity_propagation.pytest_affinity_propagationr-   #   sc    	QXXlX?	NNA1"J&:	j/A'#V -.K$$$    c                     t        t        d       } t        j                  |       dz  }t	        |dd      }|j                  |       j                  }t	        |dd      }|j                  t              j                  }t        ||       |j                  }t        |      }t        j                  |      j                  |k(  sJ t        |k(  sJ y	)
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	RBVVAYFv12 99-.K99V!![000$$$r.   c                     t        t        d       } | j                         }t        j                  |       dz  }t        j
                  | j                         |      rJ t        | |dd       t        | |       t        j
                  | j                         |      rJ t        | j                         t        j                  | j                  d                t        | |dd       t        | j                         |       |j                         } t        |dd      }|j                  t              j                  }t        | |dd      \  }}t        ||       y	)
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 z1MAz"{{1::<444AJJL"((1771:"67 zANAJJL*- 	A	
Dq	QBVVAYF,	ju2A~ v~.r.   c                      t        t        d       } d}t        j                  t        |      5  t        | ddddf          ddd       y# 1 sw Y   yxY w)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                     d}t        j                  t        |      5  t        d      j	                   | d             d d d        y # 1 sw Y   y xY w)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                     t        d|       }t        j                  |d      }|j                  |      }|j	                  |      }t        ||       y )N	euclideanr3   r   Fr   )r   r    r!   fit_predictpredictr   )r&   r'   r<   X_r*   labels2s         r,   !test_affinity_propagation_predictr]   r   sF    	k@R	SB	
,U	+B^^BFjjnGvw'r.   c                     t        d      } t        j                  t              5  | j	                  t
               d d d        t        j                  t
        t
        j                        }t        dd      } | j                  |       t        j                  t        d      5  | j	                  t
               d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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   C%CCCc                    t        j                  ddgddgddgg|       }t        ddd      }t        j                  t
              5  |j                  |       d d d        t        t        j                  d      |j                         t        t        j                  g d	      |j                         y # 1 sw Y   ^xY w)
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   B77C c                    t        j                  ddgddgg|       }t        |d       }t        j                  t
        d      5  t        |d	      \  }}d d d        t        ddg       t        ddg       t        j                  t
        d      5  t        |d
	      \  }}d d d        t        dg|       t        ddg|       t        j                         5  t        j                  dt
               t        |dd
gd      \  }}d d d        t        dg|       t        ddg|       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   =xY w)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      s0   
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$   D1D=.E	1D:=E	Ec                    t        j                  ddgddgddgg|       }t        j                  t              5  t        ddd      j                  |      }d d d        t        j                  ddgd	d	gd
d
gg      }t        j                  t              5  j                  |      }d d d        t        t        j                  g d             y # 1 sw Y   |xY w# 1 sw Y   7xY w)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C(c                 <   t        j                  g dg dg dg|       }t        ddd      }d	}t        j                  t
        |
      5  |j                  |       d d d        t        t        j                  g d      |j                         y # 1 sw Y   5xY w)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   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 y )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21bhh1v6FGGG21bhh1v6FGGG 	1a&1a&!6A	Q	--A 31bhh1v6FGGG /q"((Aq62B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                  |       |j                  }t        ddd	      }|j                  |       |j                  }t	        j
                  ||z
  dz        dkD  sJ y
)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!!	LBFF1I""H 
a!"	MBFF1I##I77Hy(Q./!333r.   	containerc                 ^    | t        j                  d            }t         j                  j                  d      }|j	                  dd      j                  |d      }d|j	                  d      z  j                  t              }t        d	      }|j                  ||       ||_	        t        j                         5  t        j                  d
t               t        |j                  |      t        j                  |j                   d   t                     ddd       y# 1 sw Y   yxY w)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FF1aL!B		 	 	"g'9:2::a="((1771:S*IJ 
#	"	"s   >AD##D,c                     t        j                  g dg dg dg dg|       }t        ddd      j                  |      }t        j                  g d	      }t	        |j
                  |       y )
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                     t        dd      }|j                  t               |j                   | d            }t	        |d       y )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                     t        dd      }t        j                  j                  d      } | |j	                  ddd            }|j                  |      }t        |d       y )	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                      t        j                  d      } t        ddd      j                  |       }t        j                  |j
                  dk(        sJ y)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  sF     	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      sb  
    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.   