Ë
    ÷Q(hí/  ã                   óÜ  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZ ej4                  j7                  d
dgez   ez   ez   ez   «      ej4                  j7                  dddg«      d„ «       «       Zd„ Zd„ Zd„ Zd„ Z d„ Z!ej4                  j7                  dejD                  ejF                  f«      d„ «       Z$ej4                  j7                  d
eez   ez   ez   «      d„ «       Z%ej4                  j7                  d
eez   ez   ez   «      d„ «       Z&ej4                  j7                  d
eez   ez   «      d„ «       Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,y)é    N)Úassert_allclose)Úissparse)Údatasets)Úpairwise_distances)Úcalinski_harabasz_scoreÚdavies_bouldin_scoreÚsilhouette_samplesÚsilhouette_score)Ú_silhouette_reduce)Úassert_array_equal)ÚCSC_CONTAINERSÚCSR_CONTAINERSÚDOK_CONTAINERSÚLIL_CONTAINERSÚsparse_containerÚsample_sizeÚhalfc                 ó^  — t        j                  «       }|j                  |j                  }}| � | |«      }|dk(  rt	        |j
                  d   dz  «      n|}t        |d¬«      }t        ||d|d¬«      }t        ||d|d¬«      }|dkD  sJ ‚|dkD  sJ ‚|t        j                  |«      k(  sJ ‚y )Nr   r   é   Ú	euclidean©ÚmetricÚprecomputed)r   r   Úrandom_state)
r   Ú	load_irisÚdataÚtargetÚintÚshaper   r
   ÚpytestÚapprox)r   r   ÚdatasetÚXÚyÚDÚscore_precomputedÚscore_euclideans           úm/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pyÚtest_silhouetter)      sÀ   € ô × Ñ Ó"€GØ�<‰<˜Ÿ™€q€AØÐ#Ù˜QÓˆØ)4¸Ò)>”#�a—g‘g˜a‘j 1‘nÔ%ÀK€Kä˜1 [Ô1€Aä(Ø	ˆ1�]°È!ôÐô 'Ø	ˆ1�[¨kÈô€Oð ˜qÒ Ð Ð Ø˜QÒÐÐØ¤§¡¨oÓ >Ò>Ð>Ñ>ó    c                  óÈ   — dgdgdgdgdgdgg} t        j                  g d¢«      }t        | |«      }t        j                  |«      rJ ‚t	        | |«      }t        |g d¢«       y )Nç        ç      ð?g       @ç      @)r   é   r/   r/   r   r   )r   ç      à?r0   r   r/   r/   )ÚnpÚarrayr
   Úisnanr	   r   )r#   ÚlabelsÚ
silhouetteÚsss       r(   Útest_cluster_size_1r7   4   sh   € ð ˆ��˜�u˜s˜e c U¨S¨EÐ2€AÜ�X‰XÒ(Ó)€Fô " ! VÓ,€JÜ�x‰x˜
Ô#Ð#Ð#Ü	˜A˜vÓ	&€BÜ�rÒ1Õ2r*   c                  ó  — g d¢} t        j                  d«      }| |t        j                  dd«      <   ||j                  z  }g d¢}g d¢}ddd	d
dddddddddœ}d}g d¢}dddddddddddddœ}d}|||f|||ffD ]†  \  }	}
}|D �cg c]  }|
|   ‘Œ	 }
}t	        j
                  |
t        |t        j                  |	«      d ¬!«      d"¬#«       t	        j
                  |t        |t        j                  |	«      d ¬!«      d"¬#«       Œˆ y c c}w )$N)BçR¸…ëQ@ç      @ç      @gR¸…ëQ@r:   g¤p=
×£@çR¸…ëQ@gR¸…ëQ@g×£p=
W @çR¸…ëQ@g\�Âõ(\@ç      @ç®Gáz®@ç®Gáz®@ç®Gáz®@ç®Gáz®@ç      @r9   ç      @g®Gáz®@rB   g\�Âõ(\@g      @rB   rB   rC   g\�Âõ(\@ç®Gáz®@g      @rA   g      @gR¸…ëQ@ç      @g      @gR¸…ëQ@g      @çR¸…ëQ@r?   g      @g\�Âõ(\@rD   rE   rE   r@   rE   g      @gR¸…ëQ@rF   g      @r>   g®Gáz®@rG   r=   r?   g\�Âõ(\@g      @r.   rG   r?   rC   r9   r<   rE   g®Gáz®@r;   r@   )é   rH   rH   éÿÿÿÿ)ÚBELÚBRAÚCHIÚCUBÚEGYÚFRAÚINDÚISRÚUSAÚUSSÚYUGÚZAI)r/   r/   r   r   r/   r/   r   r/   r/   r   r   r/   g…ëQ¸…Û?gö(\�ÂõØ?gffffffÖ?g333333Ó?g)\�Âõ(Ì?çš™™™™™É?gR¸…ëQÈ?gš™™™™™Ù?gÃõ(\�ÂÕ?g…ëQ¸Õ?g¤p=
×£Ð?g{®Gáz¤¿)rR   rJ   rO   rQ   rK   rN   rU   rM   rS   rL   rT   rP   gìQ¸…ëÑ?)r/   r   é   rW   r/   r/   r   r/   r/   rW   rW   r   g®GázÞ?g)\�Âõ(Ü?gáz®GáÚ?g®Gáz®×?g{®Gáz”?g      Ð?gÃõ(\�ÂÅ?g¸…ëQ¸Þ?g×£p=
×Ó?)rR   rO   rJ   rQ   rN   rU   rK   rP   rM   rS   rT   rL   r   r   g{®Gáz„?)Úabs)	r1   ÚzerosÚtril_indicesÚTr    r!   r	   r2   r
   )Úlowerr%   ÚnamesÚlabels1Ú	expected1Úscore1Úlabels2Ú	expected2Úscore2r4   ÚexpectedÚscoreÚnames                r(   Útest_silhouette_paper_examplerg   K   sR  € òC€EôH 	�‰�Ó€AØ!&€A„b‡o�o�b˜"ÓÑØˆ�‰�H€Aò€Eò  3€GàØØØØØØØØØØØñ€Ið €Fò 3€GàØØØØØØØØØØØñ€Ið €Fð 
�)˜VÐ$Ø	�)˜VÐ$ð$ò 
Ñˆ�˜%ð 05Ö5 t�H˜T“NÐ5ˆÐ5ä�‰ØÜ˜q¤"§(¡(¨6Ó"2¸=ÔIØõ	
ô
 	�‰ØÔ# A¤r§x¡x°Ó'7ÀÔNÐTXö	
ñ
ùò 6s   ÂDc                  ó@  — t        j                  «       } | j                  }t        j                  |j
                  d   «      }dt        t        j                  |«      «      z  }t        j                  t        |¬«      5  t        ||«       d d d «       t        j                  |j
                  d   «      }dt        t        j                  |«      «      z  }t        j                  t        |¬«      5  t        ||«       d d d «       y # 1 sw Y   Œ}xY w# 1 sw Y   y xY w)Nr   zJNumber of labels is %d\. Valid values are 2 to n_samples - 1 \(inclusive\)©Úmatch)r   r   r   r1   Úaranger   ÚlenÚuniquer    ÚraisesÚ
ValueErrorr
   rY   )r"   r#   r$   Úerr_msgs       r(   Útest_correct_labelsizerq   Ù   sê   € ä× Ñ Ó"€GØ�‰€Aô 	�	‰	�!—'‘'˜!‘*Ó€Að	*Ü,/´·	±	¸!³Ó,=ñ	>ð ô 
�‰”z¨Ô	1ñ Ü˜˜AÔ÷ô 	�‰�—‘˜‘Ó€Að	*Ü,/´·	±	¸!³Ó,=ñ	>ð ô 
�‰”z¨Ô	1ñ Ü˜˜AÔ÷ð ÷ð ú÷ð ús   Á?DÃ2DÄDÄDc                  óê   — t        j                  «       } | j                  }| j                  }t	        ||dz  dz   «      t	        ||«      k(  sJ ‚t        t        ||dz  dz   «      t        ||«      «       y )Nr   é
   )r   r   r   r   r
   r   r	   )r"   r#   r4   s      r(   Útest_non_encoded_labelsrt   ñ   sk   € Ü× Ñ Ó"€GØ�‰€AØ�^‰^€FÜ˜A˜v¨™z¨B™Ó/Ô3CÀAÀvÓ3NÒNÐNÐNÜÜ˜1˜f q™j¨2™oÓ.Ô0BÀ1ÀfÓ0Mõr*   c                  ó¶   — t        j                  «       } | j                  }| j                  }t	        t        |«      t        |«      «      t	        ||«      k(  sJ ‚y )N)r   r   r   r   r
   Úlist)r"   r#   r$   s      r(   Útest_non_numpy_labelsrw   û   sG   € Ü× Ñ Ó"€GØ�‰€AØ�‰€AÜœD ›G¤T¨!£WÓ-Ô1AÀ!ÀQÓ1GÒGÐGÑGr*   Údtypec                 óÆ  — t        t        j                  g d¢g| ¬«      j                  «      }g d¢}t        j                  |j
                  «      j                  dz  |d   d<   t        ||d¬«       t        j                  |j
                  «      j                  dz  |d   d<   t        j                  t        d	¬
«      5  t        ||d¬«       d d d «       y # 1 sw Y   y xY w)N)rV   çš™™™™™¹?g¸…ëQ¸¾?gq=
×£põ?gÃõ(\�Âñ?çš™™™™™ù?©rx   )r   r   r   r/   r/   r/   rs   r   r   r   iè  úcontains non-zerori   )r   r1   r2   r[   Úfinforx   Úepsr	   r    rn   ro   )rx   Údistsr4   s      r(   Útest_silhouette_nonzero_diagr�     s»   € ô Ü
�‰Ò3Ð4¸EÔB×DÑDó€Eò  €Fô —(‘(˜5Ÿ;™;Ó'×+Ñ+¨bÑ0€Eˆ!�HˆQ�KÜ�u˜f¨]Õ;ô —(‘(˜5Ÿ;™;Ó'×+Ñ+¨dÑ2€Eˆ!�HˆQ�KÜ	�‰”zÐ)<Ô	=ñ @Ü˜5 &°Õ?÷@÷ @ñ @ús   Â?CÃC c                 ó   — t        j                  g d¢gt         j                  ¬«      j                  }g d¢}t	        |«      } | |«      }t        |«      sJ ‚t        ||d¬«      }t        ||d¬«      }t        ||«       y)úBCheck that silhouette_samples works for sparse matrices correctly.©rV   rz   rz   rV   rz   r{   rV   rz   r|   ©r   r   r   r   r/   r/   r/   r/   r   r   N©r1   r2   Úfloat32r[   r   r   r	   r   ©r   r#   r$   Úpdist_denseÚpdist_sparseÚoutput_with_sparse_inputÚoutput_with_dense_inputs          r(   Ú*test_silhouette_samples_precomputed_sparser�     ss   € ô 	�‰Ò:Ð;Ä2Ç:Á:ÔN×PÑP€AÚ €AÜ$ QÓ'€KÙ# KÓ0€LÜ�LÔ!Ð!Ð!Ü1°,ÀÈ-ÔXÐÜ0°¸aÈÔVÐÜÐ,Ð.EÕFr*   c                 óø   — t        j                  g d¢gt         j                  ¬«      j                  }g d¢}t	        |«      } | |«      }t        |«      sJ ‚t        ||«      }t        ||«      }t        ||«       y)rƒ   r„   r|   r…   Nr†   rˆ   s          r(   Ú(test_silhouette_samples_euclidean_sparser�   '  so   € ô 	�‰Ò:Ð;Ä2Ç:Á:ÔN×PÑP€AÚ €AÜ$ QÓ'€KÙ# KÓ0€LÜ�LÔ!Ð!Ð!Ü1°,ÀÓBÐÜ0°¸aÓ@ÐÜÐ,Ð.EÕFr*   c                 ó>  — t        j                  g d¢gt         j                  ¬«      j                  }t	        |«      } | |«      }g d¢}t        j
                  |«      }t        j                  t        d¬«      5  t        |d||¬«       ddd«       y# 1 sw Y   yxY w)	z?Check for non-CSR input to private method `_silhouette_reduce`.r„   r|   r…   z=Expected CSR matrix. Please pass sparse matrix in CSR format.ri   r   )Ústartr4   Úlabel_freqsN)
r1   r2   r‡   r[   r   Úbincountr    rn   Ú	TypeErrorr   )r   r#   r‰   rŠ   r$   r’   s         r(   Útest_silhouette_reducer•   7  sƒ   € ô
 	�‰Ò:Ð;Ä2Ç:Á:ÔN×PÑP€AÜ$ QÓ'€KÙ# KÓ0€LÚ €AÜ—+‘+˜a“.€KÜ	�‰ÜØMô
ñ Uô 	˜<¨q¸ÈÕT÷	U÷ Uñ Uús   Á:BÂBc                 óü   — t         j                  j                  d¬«      }t        j                  t
        d¬«      5   | |j                  dd«      t        j                  d«      «       ddd«       y# 1 sw Y   yxY w)z+Assert message when there is only one labelr   ©ÚseedúNumber of labels isri   rs   r   N)r1   ÚrandomÚRandomStater    rn   ro   ÚrandrY   ©ÚfuncÚrngs     r(   Úassert_raises_on_only_one_labelr    H  sY   € ä
�)‰)×
Ñ
 QÐ
Ó
'€CÜ	�‰”zÐ)>Ô	?ñ ,ÙˆS�X‰X�b˜!‹_œbŸh™h r›lÔ+÷,÷ ,ñ ,úó   ¼-A2Á2A;c                 óü   — t         j                  j                  d¬«      }t        j                  t
        d¬«      5   | |j                  dd«      t        j                  d«      «       ddd«       y# 1 sw Y   yxY w)z7Assert message when all point are in different clustersr   r—   r™   ri   rs   r   N)r1   rš   r›   r    rn   ro   rœ   rk   r�   s     r(   Ú(assert_raises_on_all_points_same_clusterr£   O  sY   € ä
�)‰)×
Ñ
 QÐ
Ó
'€CÜ	�‰”zÐ)>Ô	?ñ -ÙˆS�X‰X�b˜!‹_œbŸi™i¨›mÔ,÷-÷ -ñ -úr¡   c                  ó¼  — t        t        «       t        t        «       dt        t        j                  d«      dgdz  dgdz  z   «      k(  sJ ‚dt        ddgddggdz  dgdz  dgdz  z   «      k(  sJ ‚ddgddggdz  d	d	gd
d
ggdz  z   dd
gdd	ggdz  z   d	dgd
dggdz  z   } dgdz  dgdz  z   dgdz  z   d	gdz  z   }t        j                  t        | |«      d«       y )Nr-   ©rs   r   r   é   r/   r,   rI   rs   rW   é   r   g      [@)r    r   r£   r1   Úonesr    r!   ©r#   r4   s     r(   Útest_calinski_harabasz_scorerª   V  s3  € Ü#Ô$;Ô<ä,Ô-DÔEð Ô)¬"¯'©'°'Ó*:¸Q¸CÀ!¹GÀqÀcÈAÁgÑ<MÓNÒNÐNÐNð Ô)¨B°¨8°a¸°VÐ*<¸rÑ*AÀAÀ3ÈÁ8ÈqÈcÐTVÉhÑCVÓWÒWÐWÐWð ˆQˆ�!�Q�Ð˜1ÑØˆqˆ6�A�q�6Ð
˜QÑ
ñ	àˆqˆ6�A�q�6Ð
˜QÑ
ñ	ð ˆqˆ6�A�q�6Ð
˜QÑ
ñ	ð ð ˆS�2‰X˜˜˜b™Ñ  A 3¨¡8Ñ+¨q¨c°B©hÑ6€FÜ
‡M�MÔ)¨!¨VÓ4Ð6SÕTr*   c                  ó<  — t        t        «       t        t        «       t        t        j                  d«      dgdz  dgdz  z   «      t        j                  d«      k(  sJ ‚t        ddgddggdz  dgdz  dgdz  z   «      t        j                  d«      k(  sJ ‚ddgddggdz  ddgd	d	ggdz  z   dd	gddggdz  z   ddgd	dggdz  z   } dgdz  dgdz  z   d
gdz  z   dgdz  z   }t        j                  t        | |«      d
t        j                  d«      z  dz  «       t        j                  «       5  t        j                  dt        «       t        | |«       d d d «       ddgd
d
gddgddgg} g d¢}t        j                  t        | |«      d«       y # 1 sw Y   Œ<xY w)Nr¥   r   r¦   r/   r,   rI   rs   rW   r§   r   r0   Úerror)r   r   r/   r   g«ªªªªªÚ?)r    r   r£   r1   r¨   r    r!   ÚsqrtÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr©   s     r(   Útest_davies_bouldin_scorer²   l  sß  € Ü#Ô$8Ô9Ü,Ô-AÔBô  ¤§¡¨Ó 0°1°#¸±'¸Q¸CÀ!¹GÑ2CÓDÌÏÉØóIò ð ð ô
  Ø
ˆbˆ�A�q�6Ð˜RÑ !  r¡¨Q¨C°"©HÑ!4óä	�‰�sÓ	òð ð ð ˆQˆ�!�Q�Ð˜1ÑØˆqˆ6�A�q�6Ð
˜QÑ
ñ	àˆqˆ6�A�q�6Ð
˜QÑ
ñ	ð ˆqˆ6�A�q�6Ð
˜QÑ
ñ	ð ð ˆS�2‰X˜˜˜b™Ñ  A 3¨¡8Ñ+¨q¨c°B©hÑ6€FÜ
‡M�MÔ& q¨&Ó1°1´r·w±w¸s³|Ñ3CÀaÑ3GÔHô 
×	 Ñ	 Ó	"ñ (Ü×Ñ˜g¤~Ô6Ü˜Q Ô'÷(ð
 ˆQˆ�!�Q�˜!˜Q˜ ! Q Ð(€AÚ€FÜ
‡M�MÔ& q¨&Ó1°=ÕA÷(ð (ús   Ä0'FÆFc                  óü   — t        g d¢g d¢g d¢gg d¢d¬«      } | t        j                  d«      k(  sJ ‚t        j                  t        d¬	«      5  t        g d
¢g d¢g d¢gg d¢d¬«       ddd«       y# 1 sw Y   yxY w)zvCheck that silhouette_score works for precomputed metrics that are integers.

    Non-regression test for #22107.
    )r   r/   r   )r/   r   r/   )r   r/   r   )r   r   r/   r   r   gUUUUUUÅ?r}   ri   )r/   r/   r   N)r
   r    r!   rn   ro   )Úresults    r(   Ú)test_silhouette_score_integer_precomputedrµ   �  sq   € ô
 Ú	’IšyÐ)ª9¸]ô€Fð ”V—]‘] 5Ó)Ò)Ð)Ð)ô 
�‰”zÐ)<Ô	=ñ 
ÜÚš	¢9Ð-ªyÀõ	
÷
÷ 
ñ 
ús   ÁA2Á2A;)-r®   Únumpyr1   r    Únumpy.testingr   Úscipy.sparser   Úsklearnr   Úsklearn.metricsr   Úsklearn.metrics.clusterr   r   r	   r
   Ú%sklearn.metrics.cluster._unsupervisedr   Úsklearn.utils._testingr   Úsklearn.utils.fixesr   r   r   r   ÚmarkÚparametrizer)   r7   rg   rq   rt   rw   r‡   Úfloat64r�   r�   r�   r•   r    r£   rª   r²   rµ   © r*   r(   ú<module>rÃ      s©  ðÛ ã Û Ý )Ý !å Ý .÷ó õ EÝ 5÷ó ð ‡�×ÑØØ	€Fˆ^Ñ˜nÑ,¨~Ñ=ÀÑNóð ‡�×Ñ˜¨¨v¨Ó7ñ?ó 8ó	ð
?ò*3ò.K
ò\ò0òHð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñ@ó <ð@ð( ‡�×ÑØØ�^Ñ# nÑ4°~ÑEóñ	Gó	ð	Gð ‡�×ÑØØ�^Ñ# nÑ4°~ÑEóñ	Gó	ð	Gð ‡�×ÑØ˜¨Ñ7¸.ÑHóñUóðUò,ò-òUò, BóF
r*   