Ë
    ÷Q(h  ã                   ó’  — d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZ ej                  j                  dddg«      ej                  j                  d	d
dg«      d„ «       «       Zej                  j                  de«      d„ «       Zej                  j                  dddg«      d„ «       Zd„ Zej                  j                  dedgz   «      d„ «       Zej                  j                  dedgz   «      d„ «       Zej                  j                  dedgz   «      d„ «       Zej                  j                  dd«      d„ «       Zd„ Zy)é    N)ÚBisectingKMeans)Úv_measure_score)Úassert_allcloseÚassert_array_equal)ÚCSR_CONTAINERSÚbisecting_strategyÚbiggest_inertiaÚlargest_clusterÚinitz	k-means++Úrandomc                 ón  — 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g	«      }t        dd| |¬«      }|j                  |«       ddgddgddgg}g d	¢}t	        t        |«      t        |j                  j                  «       «      «       t	        t        ||j                  «      d
«       y)znTries to perform bisect k-means for three clusters to check
    if splitting data is performed correctly.
    é   é
   é   r   é   é   é	   )Ú
n_clustersÚrandom_stater   r   )	r   r   r   r   r   r   r   r   r   g      ð?N)
ÚnpÚarrayr   Úfitr   ÚsortedÚcluster_centers_Útolistr   Úlabels_)r   r   ÚXÚbisect_meansÚexpected_centersÚexpected_labelss         úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_bisect_k_means.pyÚtest_three_clustersr"   
   sÓ   € ô 	�‰Ø
ˆQˆ�"�a�˜1˜a˜& 2 q '¨A¨q¨6°B¸°7¸RÀ¸GÀbÈ!ÀWÈrÐSUÈhÐWó	€Aô #ØØØ-Øô	€Lð ×Ñ�QÔà˜A˜  Q ¨"¨a¨Ð1ÐÚ1€OäÜÐÓ ¤&¨×)FÑ)F×)MÑ)MÓ)OÓ"Pôô ”O O°\×5IÑ5IÓJÈCÕPó    Úcsr_containerc                 ó0  — t         j                  j                  d«      }|j                  dd«      }d||dk  <    | |«      }t	        dd¬«      }|j                  |«       |j                  }|j                  |«       |j                  }t        ||d¬«       y	)
zvTest Bisecting K-Means with sparse data.

    Checks if labels and centers are the same between dense and sparse.
    r   é   r   çš™™™™™é?r   ©r   r   g:Œ0âŽyE>)ÚatolN)r   r   ÚRandomStateÚrandr   r   r   r   )r$   Úrngr   ÚX_csrr   Úsparse_centersÚnormal_centerss          r!   Útest_sparser0   $   sŠ   € ô �)‰)×
Ñ
 Ó
"€Cà�‰��Q‹€AØ€A€aˆ#�g�JÙ˜!Ó€Eä"¨a¸aÔ@€Là×Ñ�UÔØ!×2Ñ2€Nà×Ñ�QÔØ!×2Ñ2€Nô �N N¸Ö>r#   r   é   é   c                 ó  — t         j                  j                  d«      }|j                  dd«      }t	        | d¬«      }|j                  |«       t        t        j                  |j                  «      t        j                  | «      «       y)z:Test if resulting labels are in range [0, n_clusters - 1].r   r   r   r(   N)
r   r   r*   r+   r   r   r   Úuniquer   Úarange)r   r,   r   r   s       r!   Útest_n_clustersr6   =   sc   € ô �)‰)×
Ñ
 Ó
"€CØ�‰��Q‹€Aä"¨jÀqÔI€LØ×Ñ�QÔä”r—y‘y ×!5Ñ!5Ó6¼¿	¹	À*Ó8MÕNr#   c                  óV  — t        j                  ddgddgddgg«      } t        dd¬«      j                  | «      }t	        |j
                  dk(  «      sJ ‚t	        |j                  | «      dk(  «      sJ ‚t        |j                  | j                  d¬«      j                  dd«      «       y	)
zTest single cluster.r   r   r   r   r   r(   )ÚaxiséÿÿÿÿN)r   r   r   r   Úallr   Úpredictr   r   ÚmeanÚreshape)r   r   s     r!   Útest_one_clusterr>   J   sœ   € ô 	�‰�1�a�&˜2˜q˜' B¨ 7Ð+Ó,€Aä"¨a¸aÔ@×DÑDÀQÓG€Lô ˆ|×#Ñ# qÑ(Ô)Ð)Ð)Üˆ|×#Ñ# AÓ&¨!Ñ+Ô,Ð,Ð,ä�L×1Ñ1°1·6±6¸q°6³>×3IÑ3IÈ!ÈRÓ3PÕQr#   c                 ó  — t         j                  j                  d«      }|j                  dd«      }| �d||dk  <    | |«      }t	        dd¬«      }|j                  |«       t        |j                  |j                  |«      «       y)zFCheck if labels from fit(X) method are same as from fit(X).predict(X).r   r   r   Nr'   r   r(   )	r   r   r*   r+   r   r   r   r   r;   )r$   r,   r   r   s       r!   Útest_fit_predictr@   X   sy   € ô �)‰)×
Ñ
 Ó
"€Cà�‰��Q‹€AàÐ Øˆˆ!ˆc‰'‰
Ù˜!Óˆä"¨a¸aÔ@€LØ×Ñ�QÔä�|×+Ñ+¨\×-AÑ-AÀ!Ó-DÕEr#   c                 ó  — t         j                  j                  d«      }|j                  dd«      j	                  |d¬«      }| �d||dk  <    | |«      }t        dd¬	«      }|j                  |«       |j                  j                  |k(  sJ ‚y)
z9Check that centers dtype is the same as input data dtype.r   r   r   F)ÚcopyNr'   r   r(   )	r   r   r*   r+   Úastyper   r   r   Údtype)r$   Úglobal_dtyper,   r   Úkms        r!   Útest_dtype_preservedrG   i   s…   € ô �)‰)×
Ñ
 Ó
"€CØ�‰��Q‹×Ñ˜|°%ÐÓ8€AàÐ Øˆˆ!ˆc‰'‰
Ù˜!Óˆä	 A°AÔ	6€BØ‡F�Fˆ1„Ià×Ñ×$Ñ$¨Ò4Ð4Ñ4r#   c                 ó´  — t         j                  j                  d«      }|j                  dd«      }| �d||dk  <    | |«      }t	        dd¬«      j                  |«      }t	        dd¬«      j                  |j                  t         j                  «      «      }t        |j                  |j                  «       t        |j                  |j                  «       y)z@Check that the results are the same between float32 and float64.r   r   r   Nr'   r   r(   )r   r   r*   r+   r   r   rC   Úfloat32r   r   r   r   )r$   r,   r   Úkm64Úkm32s        r!   Ú test_float32_float64_equivalencerL   y   s§   € ô �)‰)×
Ñ
 Ó
"€CØ�‰��Q‹€AàÐ Øˆˆ!ˆc‰'‰
Ù˜!Óˆä a°aÔ8×<Ñ<¸QÓ?€DÜ a°aÔ8×<Ñ<¸Q¿X¹XÄbÇjÁjÓ=QÓR€Dä�D×)Ñ)¨4×+@Ñ+@ÔAÜ�t—|‘| T§\¡\Õ2r#   Ú	algorithm)ÚlloydÚelkanc                 ó‚  — t         j                  j                  d«      }|j                  dd«      }t	        d| ¬«      j                  |«      }d|j                  dd«      z  }|j                  |«      }t        j                  t        j                  |«      t        j                  d«      «      j                  «       sJ ‚y )Nr   i¸  r   )r   rM   é2   éd   )r   r   r*   r+   r   r   r;   Úisinr4   r5   r:   )rM   r,   ÚX_trainÚbkmÚX_testÚlabelss         r!   Ú!test_no_crash_on_empty_bisectionsrX   Š   s’   € ô �)‰)×
Ñ
 Ó
"€CØ�h‰h�t˜RÓ €GÜ
 R°9Ô
=×
AÑ
AÀ'Ó
J€Cð �#—(‘(˜3 Ó#Ñ#€FØ�[‰[˜Ó €FÜ�7‰7”2—9‘9˜VÓ$¤b§i¡i°£mÓ4×8Ñ8Ô:Ð:Ñ:r#   c                  ó|   — t         j                  j                  d¬«      } t        dd¬«      j	                  | «       y )N)é€   r   )Úsizer	   r   )r   r   )r   r   Únormalr   r   )r   s    r!   Útest_one_featurer]   ™   s1   € ô 	�	‰	×Ñ˜hÐÓ'€AÜÐ'8ÀqÔI×MÑMÈaÕPr#   )Únumpyr   ÚpytestÚsklearn.clusterr   Úsklearn.metricsr   Úsklearn.utils._testingr   r   Úsklearn.utils.fixesr   ÚmarkÚparametrizer"   r0   r6   r>   r@   rG   rL   rX   r]   © r#   r!   ú<module>rg      sp  ðÛ Û å +Ý +ß FÝ .ð ‡�×ÑÐ-Ð0AÐCTÐ/UÓVØ‡�×Ñ˜ +¨xÐ!8Ó9ñQó :ó WðQð0 ‡�×Ñ˜¨.Ó9ñ?ó :ð?ð0 ‡�×Ñ˜¨¨1 vÓ.ñ	Oó /ð	OòRð ‡�×Ñ˜¨.¸D¸6Ñ*AÓBñFó CðFð  ‡�×Ñ˜¨.¸D¸6Ñ*AÓBñ5ó Cð5ð ‡�×Ñ˜¨.¸D¸6Ñ*AÓBñ3ó Cð3ð  ‡�×Ñ˜Ð&8Ó9ñ;ó :ð;óQr#   