`L i"dZddlZddlZddlmZmZddlmZddl m Z ddl m Z ddl mZmZddlmZmZdd lmZd Zd Zd Zd Zej2j5dedZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&y)z+ Tests for the birch clustering algorithm. N)AgglomerativeClusteringBirch)generate_clustered_data) make_blobs)ConvergenceWarning)pairwise_distances_argminv_measure_score)assert_allcloseassert_array_equal)CSR_CONTAINERSctd|\}}|j|d}t}|j|t |j j Dcgc]}|jc}}t |jDcgc]}|j D]}|j!c}}}||jdk(sJ||jdk(sJycc}wcc}}w)N  n_samples random_stateFcopyr) rastyperfitsumroot_ subclusters_ n_samples_ _get_leavesshape) global_random_seed global_dtypeXybrcscn_samples_rootleafn_samples_leavess f/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_birch.pytest_n_samples_leaves_rootsr&s 1C DDAq E*A 'CGGAJ#))2H2HIB"--IJN#&??#4Q4t?P?PQQQ qwwqz )) ) QWWQZ '' ' JQs C#$C( ctd|\}}|j|d}td}|j|td}|j |dd|j |ddt |j |j |jd|j dt|j|jy)NdrFr n_clusters2) rrrr partial_fitr subcluster_centers_ set_paramsr subcluster_labels_)rrrrr brc_partials r%test_partial_fitr2s 2D EDAq E*A 1 CGGAJ4(KAcrF#AbcF#K33S5L5LMa(D!{55s7M7MNc(tjj|}tddd}|j |d}tj d}|j |||ddf}tdd }|j||jj|k(sJt|j|j||j}|jt||}t!t#||jdy) Nr)r)r+ n_featuresn_samples_per_clusterFrg?r+ threshold)nprandom RandomStaterrarangeshufflerrr.dtyper labels_predictr0rr r ) rrrngrshuffle_indices X_shuffler centroidsnearest_centroids r%test_birch_predictrH1s ))   2 3C1RTUA E*AiimOKK /1$%I 1 ,CGGI  " " ( (L 88 8s{{CKK $:;''I--!)Y7O$4ckkBCHr3c|tdd|\}}|j|d}td}|j|t |j dkDsJt t j|jdk(sJtd}t|}|j|t|j|jt|j|jtd}tjt5|j|dddy#1swYyxYw) Nr(rrcentersrFrr*g@)r:)rrrrlenr.r;uniquerArr r0pytestwarnsr)rrrrbrc1gcbrc2brc4s r%test_n_clustersrTIs R>P QDAq E*A B DHHQK t'' (2 -- - ryy& '2 -- - !B /B B DHHQKt..0G0GHt||T\\2 7 #D ( )  s D22D; csr_containerctdd|\}}|j|d}td}|j|||}td}|j||jj |k(sJt |j|jt|j|jy)Nr(rrJFrr*) rrrrr.r@r rAr )rrrUrrr csr brc_sparses r% test_sparse_XrY`s R>P QDAq E*A 2 CGGAJ  C"%JNN3  ) ) / /< ?? ?s{{J$6$67C++Z-K-KLr3ctd\}}td}|j||d}tjt |5|j|dddgf|dddy#1swYyxYw)Nr()rr)r*z3X has 1 features, but Birch is expecting 2 featuresmatchr)rrr-rNraises ValueError)rrr msgs r%)test_partial_fit_second_call_error_checksr`ssj  $DAq 1 COOAq ?C z -& !aS& 1%&&&s A//A8c|j}|t|k\sJ|D]%}|jst|j|'y)N)rrLchild_check_branching_factor)nodebranching_factor subclustersclusters r%rcrcsG##K s;/ // /E >> "7>>3C DEr3c t|\}}|j|d}d}td|d}|j|t |j |td|d}|j|t |j |y)NrFr g{Gz?)r+rer:r))rrrrrcr)rrrrrer s r%test_branching_factorrks} #5 6DAq E*A 42Bd SCGGAJ399&67 1/?4 PCGGAJ399&67r3c|jj}|r4|j}|D]}||jk\rJ|j}|r3yy)z&Use the leaf linked list for traversalN) dummy_leaf_ next_leaf_rradius)birch_instancer: current_leafrfr!s r%check_thresholdrrsR!--88L "//  *B ) )) *#.. r3ctdd|\}}|j|d}tdd}|j|t |dtdd}|j|t |dy) NPr8rJFrg?)r:r+g@)rrrrrr)rrrrr s r%test_thresholdrusi A?%s ?K?s* A?ctdd|\}}tdd}|j|}|j|jtj }t ||dy)Nrtr8r|g?r9gư>)atol)rr fit_transformrr;float32r )rrryr Y_64Y_32s r%"test_transform_match_across_dtypesrsZ q?Q RDAq 1 ,C   Q D   QXXbjj1 2DD$T*r3ctddddj|d}td}|j|jj |k(sJy)Nrtr8rr|Frr*)rrrrr.r@)rrr s r%test_subcluster_dtypersYRAA>qAHH5 I A 1 C 771: ) ) / /< ?? ?r3ctjddgddgddgddgd d gddgd d gddgd dgddgddgddgddgd d gddgd d gddgddgddgddgddggtj}tdddj |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@̙Hg\sGg%g44Tg}Thg\Fgzo g/IwgY+ctEgBlCg} gr'g_g uXgaeR^g AX7g.^g|SAgk g^# g@cgi8K)r@rwgh㈵>N)rer:r+)r;arrayrrr)rs r%test_both_subclusters_updatedrs   $  $  $  #  $  $  #  $  #  $  $  $ z "  $  $  $  $  $  $  #  $+ .jj1 A8 1>BB1Er3ctddd\}}tdd}tjtd5|j |dddy#1swYyxYw) Nrtr8rr|T)r+rz`copy` was deprecatedr[)rrrNrO FutureWarningr)rryr s r%test_birch_copy_deprecatedrsO qq ADAq 14 (C m+B C  s AA)'__doc__numpyr;rNsklearn.clusterrrsklearn.cluster.tests.commonrsklearn.datasetsrsklearn.exceptionsrsklearn.metricsrr sklearn.utils._testingr r sklearn.utils.fixesr r&r2rHrTmark parametrizerYr`rcrkrrrurzrrrrrr3r%rs :@'1FF. (O$I0..9M:M$ &E 8/ (L+@!FJr3