
    >[g"                        d 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 ddlmZmZ ddlmZmZ dd	lmZ d
 Zd Zd Zd Zej2                  j5                  de      d        Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&y)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                    t        d|       \  }}|j                  |d      }t               }|j                  |       t	        |j
                  j                  D cg c]  }|j                   c}      }t	        |j                         D cg c]  }|j                  D ]  }|j                   ! c}}      }||j                  d   k(  sJ ||j                  d   k(  sJ y c c}w c c}}w )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	            [/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_birch.pytest_n_samples_leaves_rootsr&      s    1CDDAq	E*A
'CGGAJ#))2H2HI2HB"--2HIJN#&??#4Q#44t?P?P?P#4Q qwwqz)))QWWQZ''' JQs   C#$C(
c                    t        d|       \  }}|j                  |d      }t        d      }|j                  |       t        d       }|j	                  |d d        |j	                  |dd         t        |j                  |j                         |j                  d       |j	                  d        t        |j                  |j                         y )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EDAq	E*A
1
CGGAJ4(KAcrF#AbcF#K33S5L5LM a(D!{55s7M7MN    c                 (   t         j                  j                  |       }t        ddd      }|j	                  |d      }t        j
                  d      }|j                  |       ||d d f   }t        dd	      }|j                  |       |j                  j                  |k(  sJ t        |j                  |j                  |             |j                  }|j                  t        ||         }t!        t#        ||j                        d       y )
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--!)Y7 O$4ckkBCHr3   c                 |   t        dd|       \  }}|j                  |d      }t        d      }|j                  |       t	        |j
                        dkD  sJ t	        t        j                  |j                              dk(  sJ t        d      }t        |      }|j                  |       t        |j                  |j                         t        |j                  |j                         t        d      }t        j                  t              5  |j                  |       d d d        y # 1 sw Y   y xY w)	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QDAq	E*ABDHHQKt''(2---ryy&'2--- 
!B	/BBDHHQKt..0G0GHt||T\\2 7#D	(	) 
*	)	)s   D22D;csr_containerc                    t        dd|       \  }}|j                  |d      }t        d      }|j                  |        ||      }t        d      }|j                  |       |j                  j
                  |k(  sJ t        |j                  |j                         t        |j                  |j                         y )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QDAq	E*A
2
CGGAJ

C"%JNN3 ))//<???s{{J$6$67C++Z-K-KLr3   c                      t        d      \  } }t        d      }|j                  | |       d}t        j                  t
        |      5  |j                  | d d dgf   |       d d d        y # 1 sw Y   y xY w)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   sa     $DAq
1
COOAq
?C	z	-!aS&	1% 
.	-	-s   A//A8c                     | j                   }|t        |      k\  sJ |D ]%  }|j                  st        |j                  |       ' y )N)r   rL   child_check_branching_factor)nodebranching_factorsubclustersclusters       r%   rc   rc      s@    ##Ks;////>>"7>>3CD r3   c                     t        |       \  }}|j                  |d      }d}t        d |d      }|j                  |       t	        |j
                  |       t        d|d      }|j                  |       t	        |j
                  |       y )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6DAq	E*A 42Bd
SCGGAJ399&67
1/?4
PCGGAJ399&67r3   c                     | j                   j                  }|r4|j                  }|D ]  }||j                  k\  rJ  |j                  }|r3yy)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                     t        dd|       \  }}|j                  |d      }t        dd       }|j                  |       t	        |d       t        dd       }|j                  |       t	        |d       y )	NP   r8   rJ   Fr   g      ?)r:   r+   g      @)r   r   r   r   rr   )r   r   r   r   r    s        r%   test_thresholdru      si    A<NODAq	E*A
#$
/CGGAJC
#$
/CGGAJCr3   c                      t        d      \  } }t        j                  d      }t        |      j	                  |        y )Nr   ri      r*   )r   r;   int64r   r   )r   _r+   s      r%   test_birch_n_clusters_long_intrz      s2     1%DAq!J	Z $$Q'r3   c                     t        ddd      \  } }t        d      }|j                  |        |j                  j                  d   }|j                         }t        t        |      D cg c]  }d| 	 c}|       yc c}w )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      sv    qqADAq
1
CGGAJ((..q1J))+IU:->?->%s->?K?s   *A?c                     t        dd|       \  }}t        dd      }|j                  |      }|j                  |j                  t        j
                              }t        ||d       y )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      sZ    q?QRDAq
1
,CQDQXXbjj12DD$T*r3   c                     t        ddd      d   j                  | d      }t        d      }|j                  |      j                  j
                  | k(  sJ y )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                     t        j                  ddgddgddgddgd	d
gddgddgddgddgddgddgddgddgd	d
gddgd	d
gddgddgddgddgddggt         j                        } t        ddd      j	                  |        y)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                      t        ddd      \  } }t        dd      }t        j                  t        d      5  |j                  |        d d d        y # 1 sw Y   y xY w)	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      sG    qqADAq
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   