
    -i"                        S 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  SSKJrJr  SSKJrJr  SS	KJr  S
 rS rS rS r\R2                  R5                  S\5      S 5       rS rS rS rS rS r S r!S r"S r#S r$S r%S r&g)z+
Tests for the birch clustering algorithm.
    N)AgglomerativeClusteringBirch)generate_clustered_data)
make_blobs)ConvergenceWarning)pairwise_distances_argminv_measure_score)assert_allcloseassert_array_equal)CSR_CONTAINERSc                    [        SU S9u  p#UR                  USS9n[        5       nUR                  U5        [	        UR
                  R                   Vs/ s H  oUR                  PM     sn5      n[	        UR                  5        VVs/ s H!  owR                    H  oUR                  PM     M#     snn5      nXR                  S   :X  d   eXbR                  S   :X  d   eg s  snf s  snnf )N
   	n_samplesrandom_stateFcopyr   )
r   astyper   fitsumroot_subclusters_
n_samples__get_leavesshape)	global_random_seedglobal_dtypeXybrcscn_samples_rootleafn_samples_leavess	            S/var/www/html/venv/lib/python3.13/site-packages/sklearn/cluster/tests/test_birch.pytest_n_samples_leaves_rootsr&      s    1CDDA	E*A
'CGGAJ#))2H2HI2HB--2HIJN#&??#4Q#44?P?P?P#4Q wwqz)))WWQZ''' JQs   C"	(C'
c                    [        SU S9u  p#UR                  USS9n[        SS9nUR                  U5        [        S S9nUR	                  US S 5        UR	                  USS  5        [        UR                  UR                  5        UR                  SS9  UR	                  S 5        [        UR                  UR                  5        g )Nd   r   Fr      
n_clusters2   )
r   r   r   r   partial_fitr
   subcluster_centers_
set_paramsr   subcluster_labels_)r   r   r   r   r    brc_partials         r%   test_partial_fitr2      s    2DEDA	E*A
1
CGGAJ4(KAcrF#AbcF#K33S5L5LM a(D!{55s7M7MN    c                    [         R                  R                  U 5      n[        SSSS9nUR	                  USS9n[         R
                  " S5      nUR                  U5        X4S S 24   n[        SSS	9nUR                  U5        UR                  R                  U:X  d   e[        UR                  UR                  U5      5        UR                  nUR                  [        XW5         n[!        [#        XR                  5      S5        g )
Nr)   r   )r+   
n_featuresn_samples_per_clusterFr         g      ?r+   	threshold)nprandomRandomStater   r   arangeshuffler   r   r.   dtyper   labels_predictr0   r   r
   r	   )	r   r   rngr   shuffle_indices	X_shuffler    	centroidsnearest_centroids	            r%   test_birch_predictrH   1   s    
))

 2
3C1RTUA	E*A iimOKK 1$%I
1
,CGGI ""((L888s{{CKK	$:;''I--!)7 O$4kkBCHr3   c                 h   [        SSU S9u  p#UR                  USS9n[        SS9nUR                  U5        [	        UR
                  5      S:  d   e[	        [        R                  " UR                  5      5      S:X  d   e[        SS9n[        US9nUR                  U5        [        UR                  UR                  5        [        UR                  UR                  5        [        SS9n[        R                  " [        5         UR                  U5        S S S 5        g ! , (       d  f       g = f)	Nr(   r   r   centersr   Fr   r*   g     @)r:   )r   r   r   r   lenr.   r;   uniquerA   r   r   r0   pytestwarnsr   )r   r   r   r   brc1gcbrc2brc4s           r%   test_n_clustersrT   I   s    R>PQDA	E*ABDHHQKt''(2---ryy&'2--- 
!B	/BBDHHQKt..0G0GHt||T\\2 7#D	(	) 
*	)	)s   D##
D1csr_containerc                 n   [        SSU S9u  p4UR                  USS9n[        SS9nUR                  U5        U" U5      n[        SS9nUR                  U5        UR                  R
                  U:X  d   e[        UR                  UR                  5        [        UR                  UR                  5        g )Nr(   r   rJ   Fr   r*   )	r   r   r   r   r.   r@   r   rA   r
   )r   r   rU   r   r   r    csr
brc_sparses           r%   test_sparse_XrY   `   s     R>PQDA	E*A
2
CGGAJ

C"%JNN3 ))//<???s{{J$6$67C++Z-K-KLr3   c                      [        SS9u  p[        SS9nUR                  X5        Sn[        R                  " [
        US9   UR                  U S S 2S/4   U5        S S S 5        g ! , (       d  f       g = f)Nr(   )r   r)   r*   z3X has 1 features, but Birch is expecting 2 featuresmatchr   )r   r   r-   rN   raises
ValueError)r   r   r    msgs       r%   )test_partial_fit_second_call_error_checksr`   s   s]     $DA
1
COOA
?C	z	-!aS&	1% 
.	-	-s   A%%
A3c                     U R                   nU[        U5      :  d   eU H,  nUR                  (       d  M  [        UR                  U5        M.     g )N)r   rL   child_check_branching_factor)nodebranching_factorsubclustersclusters       r%   rc   rc      sB    ##Ks;////>>>"7>>3CD r3   c                    [        U S9u  p#UR                  USS9nSn[        S USS9nUR                  U5        [	        UR
                  U5        [        SUSS9nUR                  U5        [	        UR
                  U5        g )Nr   Fr   	   g{Gz?)r+   re   r:   r)   )r   r   r   r   rc   r   )r   r   r   r   re   r    s         r%   test_branching_factorrk      s{    #56DA	E*A 42Bd
SCGGAJ399&67
1/?4
PCGGAJ399&67r3   c                     U R                   R                  nU(       a<  UR                  nU H  nXR                  :  a  M   e   UR                  nU(       a  M;  gg)z&Use the leaf linked list for traversalN)dummy_leaf_
next_leaf_r   radius)birch_instancer:   current_leafrf   r!   s        r%   check_thresholdrr      sM    !--88L
"//B		))) #..	 ,r3   c                     [        SSU S9u  p#UR                  USS9n[        SS S9nUR                  U5        [	        US5        [        SS S9nUR                  U5        [	        US5        g )	NP   r8   rJ   Fr   g      ?)r:   r+   g      @)r   r   r   r   rr   )r   r   r   r   r    s        r%   test_thresholdru      sg    A<NODA	E*A
#$
/CGGAJC
#$
/CGGAJCr3   c                  v    [        SS9u  p[        R                  " S5      n[        US9R	                  U 5        g )Nr   ri      r*   )r   r;   int64r   r   )r   _r+   s      r%   test_birch_n_clusters_long_intrz      s0     1%DA!J	Z $$Q'r3   c                      [        SSSS9u  p[        SS9nUR                  U 5        UR                  R                  S   nUR                  5       n[        [        U5       Vs/ s H  nSU 3PM
     snU5        gs  snf )z*Check `get_feature_names_out` for `Birch`.rt   r8   r   r   r5   r   r*   birchN)r   r   r   r.   r   get_feature_names_outr   range)r   ry   r    r+   	names_outis         r%   test_feature_names_outr      st    qqADA
1
CGGAJ((..q1J))+IU:->?->%s->?K?s   #A;c                     [        SSU S9u  p[        SSS9nUR                  U5      nUR                  UR                  [        R
                  5      5      n[        XESS9  g )Nrt   r8   r|   g?r9   gư>)atol)r   r   fit_transformr   r;   float32r
   )r   r   ry   r    Y_64Y_32s         r%   "test_transform_match_across_dtypesr      sV    q?QRDA
1
,CQDQXXbjj12DDT*r3   c                     [        SSSS9S   R                  U SS9n[        SS9nUR                  U5      R                  R
                  U :X  d   eg )Nrt   r8   r   r|   Fr   r*   )r   r   r   r   r.   r@   )r   r   r    s      r%   test_subcluster_dtyper      sY    RAA>qAHH5 	I 	A 1
C771:))//<???r3   c                      [         R                  " SS/SS/SS/SS/S	S
/SS/SS/SS/SS/SS/SS/SS/SS/S	S
/SS/S	S
/SS/SS/SS/SS/SS//[         R                  S9n [        SSSS9R	                  U 5        g)zCheck that both subclusters are updated when a node a split, even when there are
duplicated data points. Non-regression test for #23269.
g@̙Hg\sGg%g44Tg}Thg\Fgzog/IwgY+ctEgBlCg}
gr'g_ guXgaeR^g	AX7g.^g|SAgkg^#g@cgi8K)r@   rw   gh㈵>N)re   r:   r+   )r;   arrayr   r   r   )r   s    r%   test_both_subclusters_updatedr      s    
 	$$$
#$$
#$
#$$$z"$$$$$$
#$+	
. jj1	A8 
1>BB1Er3   c                      [        SSSS9u  p[        SSS9n[        R                  " [        SS9   UR                  U 5        S S S 5        g ! , (       d  f       g = f)	Nrt   r8   r   r|   T)r+   r   z`copy` was deprecatedr[   )r   r   rN   rO   FutureWarningr   )r   ry   r    s      r%   test_birch_copy_deprecatedr      sE    qqADA
14
(C	m+B	C
 
D	C	Cs   A
A)'__doc__numpyr;   rN   sklearn.clusterr   r   sklearn.cluster.tests.commonr   sklearn.datasetsr   sklearn.exceptionsr   sklearn.metricsr   r	   sklearn.utils._testingr
   r   sklearn.utils.fixesr   r&   r2   rH   rT   markparametrizerY   r`   rc   rk   rr   ru   rz   r   r   r   r   r    r3   r%   <module>r      s      : @ ' 1 F F .(O$I0. .9M :M$	&E8/
(L+@!FJr3   