Ë
    ÷Q(h™"  ã                   ó  — 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/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_birch.pyÚtest_n_samples_leaves_rootsr&      sÇ   € ä Ð1CÔD�D€A€qØ	�‰� EˆÓ*€AÜ
‹'€CØ‡G�GˆA„JÜ°#·)±)×2HÑ2HÖI¨B˜"Ÿ-›-ÒIÓJ€NÜØ#&§?¡?Ó#4×Q˜4¸t×?PÑ?PÒQ¸ˆ�‹ÐQˆÓQóÐð ˜qŸw™w q™zÒ)Ð)Ð)Ø˜QŸW™W Q™ZÒ'Ð'Ñ'ùò 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 )Néd   r   Fr   é   ©Ú
n_clustersé2   )
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ÔE�D€A€qØ	�‰� EˆÓ*€AÜ
˜1Ô
€CØ‡G�GˆA„JÜ 4Ô(€KØ×Ñ˜A˜c˜r˜FÔ#Ø×Ñ˜A˜b˜c˜FÔ#Ü�K×3Ñ3°S×5LÑ5LÔMð ×Ñ aÐÔ(Ø×Ñ˜DÔ!Ü�{×5Ñ5°s×7MÑ7MÕ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Ó
3€CÜ¨1¸ÐRTÔU€AØ	�‰� EˆÓ*€Aô —i‘i “m€OØ‡K�K�Ô Ø�/¢1Ð$Ñ%€IÜ
˜1¨Ô
,€CØ‡G�GˆIÔð ×"Ñ"×(Ñ(¨LÒ8Ð8Ð8ä�s—{‘{ C§K¡K°	Ó$:Ô;Ø×'Ñ'€IØ×-Ñ-Ü! )¨YÓ7ñÐô ”OÐ$4°c·k±kÓBÀCÕ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ÔQ�D€A€qØ	�‰� EˆÓ*€AÜ˜BÔ€DØ‡H�HˆQ„KÜˆt×'Ñ'Ó(¨2Ò-Ð-Ð-ÜŒr�y‰y˜Ÿ™Ó&Ó'¨2Ò-Ð-Ð-ô 
!¨BÔ	/€BÜ˜BÔ€DØ‡H�HˆQ„KÜ�t×.Ñ.°×0GÑ0GÔ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ÔQ�D€A€qØ	�‰� EˆÓ*€AÜ
˜2Ô
€CØ‡G�GˆA„Já
˜Ó
€CÜ "Ô%€JØ‡N�N�3Ôð ×)Ñ)×/Ñ/°<Ò?Ð?Ð?ä�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   sj   € ô  Ô$�D€A€qÜ
˜1Ô
€CØ‡O�O�A�qÔà
?€CÜ	�‰”z¨Ô	-ñ &Ø�‰˜š!˜a˜S˜&™	 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      sG   € Ø×#Ñ#€KØœs ;Ó/Ò/Ð/Ð/Øò EˆØ�>‹>Ü" 7§>¡>Ð3CÕDñEr3   c                 ó   — t        | ¬«      \  }}|j                  |d¬«      }d}t        d |d¬«      }|j                  |«       t	        |j
                  |«       t        d|d¬«      }|j                  |«       t	        |j
                  |«       y )N©r   Fr   é	   g{®Gáz„?)r+   re   r:   r)   )r   r   r   r   rc   r   )r   r   r   r   re   r    s         r%   Útest_branching_factorrk   ‡   s}   € äÐ#5Ô6�D€A€qØ	�‰� EˆÓ*€AØÐô ˜4Ð2BÈdÔ
S€CØ‡G�GˆA„JÜ˜3Ÿ9™9Ð&6Ô7Ü
˜1Ð/?È4Ô
P€CØ‡G�GˆA„JÜ˜3Ÿ9™9Ð&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   –   sR   € à!×-Ñ-×8Ñ8€LÙ
Ø"×/Ñ/ˆØò 	*ˆBØ §	¡	Ó)Ð)Ð)ð	*à#×.Ñ.ˆô	 r3   c                 óô   — t        dd| ¬«      \  }}|j                  |d¬«      }t        dd ¬«      }|j                  |«       t	        |d«       t        dd ¬«      }|j                  |«       t	        |d«       y )	NéP   r8   rJ   Fr   g      à?)r:   r+   g      @)r   r   r   r   rr   )r   r   r   r   r    s        r%   Útest_thresholdru       si   € ä ¨AÐ<NÔO�D€A€qØ	�‰� EˆÓ*€AÜ
˜#¨$Ô
/€CØ‡G�GˆA„JÜ�C˜Ôä
˜#¨$Ô
/€CØ‡G�GˆA„JÜ�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Ô%�D€A€qÜ—‘˜!“€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‚   µ   sp   € ä ¨q¸qÔA�D€A€qÜ
˜1Ô
€CØ‡G�GˆA„JØ×(Ñ(×.Ñ.¨qÑ1€Jà×)Ñ)Ó+€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ÔR�D€A€qÜ
˜1¨Ô
,€CØ×Ñ˜QÓ€DØ×Ñ˜QŸX™X¤b§j¡jÓ1Ó2€Dä�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   € Ü˜R¨A¸AÔ>¸qÑA×HÑHØ˜5ð 	Ió 	€Aô ˜1Ô
€CØ�7‰7�1‹:×)Ñ)×/Ñ/°<Ò?Ð?Ñ?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)z‘Check 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ð%žý’þÀgóº44Tûú¿g}ThÅÜúÀg•ã\F€õ¿gzoÀ±Àg/ÊÇI¼wõ¿gY+ctEÀgBlúý¬Cõ¿gé˜óŒ}é
Àg´®Ñr 'þ¿g_î“£ ñÀg—uXø¿gšaþeR^Àg‹µ	AX7õ¿g²Ú.^Àg|ùS™A÷¿gkŸŽÇÀg^ñÔ#Îô¿g@€±cÈÆÀgãižÈ8Kû¿)r@   rw   gñhãˆµøä>N)re   r:   r+   )r;   Úarrayr†   r   r   )r   s    r%   Útest_both_subclusters_updatedrŽ   Ñ   sá   € ô
 	�‰à˜Ð$Ø˜Ð$Ø˜Ð$Ø˜
Ð#Ø˜Ð$Ø˜Ð$Ø˜
Ð#Ø˜Ð$Ø˜
Ð#Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø�zÐ"Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜Ð$Ø˜
Ð#Ø˜Ð$ð+	
ô. �j‰jô1	€Aô8 
˜1¨¸Ô>×BÑBÀ1Õ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‘   ö   sO   € Ü ¨q¸qÔA�D€A€qÜ
˜1 4Ô
(€CÜ	�‰”mÐ+BÔ	Cñ Ø�‰�Œ
÷÷ ñ ús   º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   