Ë
    ÷Q(hëH  ã            
       ó^  — d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dl m!Z!m"Z" eeeeeeegZ#d	„ Z$d
„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d2d„Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1ejd                  jg                  d e«       «      d„ «       Z4d„ Z5d„ Z6d„ Z7d3d„Z8d„ Z9d„ Z:ejd                  jg                  dd gd!z  g d"¢fd#gd!z  g d"¢fg d"¢d gd!z  fg d"¢d#gd!z  fd gd!z  d gd!z  fg«      d$„ «       Z;d%„ Z<d&„ Z=d'„ Z>d(„ Z?ejd                  jg                  d) e@ eAd*«      «       e@ eAd*«      «      f ej„                  d+«       ej„                  d+«      fg«      d,„ «       ZCd-„ ZDd.„ ZEejd                  jg                  d/g d0¢«      d1„ «       ZFy)4é    N)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equal)Úconfig_context)Úadjusted_mutual_info_scoreÚadjusted_rand_scoreÚcompleteness_scoreÚcontingency_matrixÚentropyÚexpected_mutual_informationÚfowlkes_mallows_scoreÚ"homogeneity_completeness_v_measureÚhomogeneity_scoreÚmutual_info_scoreÚnormalized_mutual_info_scoreÚpair_confusion_matrixÚ
rand_scoreÚv_measure_score)Ú_generalized_averageÚcheck_clusterings)Úassert_all_finite)Ú)yield_namespace_device_dtype_combinations)Ú_array_api_for_testsÚassert_almost_equalc                  ó¤  — t         D ]£  } d}t        j                  t        |¬«      5   | ddgg d¢«       d d d «       d}t        j                  t        |¬«      5   | ddgddggg d¢«       d d d «       d}t        j                  t        |¬«      5   | g d¢ddgddgg«       d d d «       Œ¥ y # 1 sw Y   ŒzxY w# 1 sw Y   ŒOxY w# 1 sw Y   ŒÈxY w)	NzDFound input variables with inconsistent numbers of samples: \[2, 3\]©Úmatchr   é   )r   r   r   z$labels_true must be 1D: shape is \(2z$labels_pred must be 1D: shape is \(2©r   r   r   )Úscore_funcsÚpytestÚraisesÚ
ValueError)Ú
score_funcÚexpecteds     úk/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_supervised.pyÚ"test_error_messages_on_wrong_inputr'   (   sÓ   € Ü!ò 4ˆ
àWð 	ô �]‰]œ:¨XÔ6ñ 	*Ù˜˜1�všyÔ)÷	*ð ;ˆÜ�]‰]œ:¨XÔ6ñ 	4Ù˜˜A˜  A Ð'ªÔ3÷	4ð ;ˆÜ�]‰]œ:¨XÔ6ñ 	4Ù’y A q 6¨A¨q¨6Ð"2Ô3÷	4ð 	4ñ4÷	*ð 	*ú÷	4ð 	4ú÷	4ð 	4ús#   §B.ÁB:ÂCÂ.B7	Â:C	ÃC	c                  ó$  — d\  } }g d¢}|D �cg c]  }t        | ||«      ‘Œ }}|d   |d   cxk  r|d   cxk  r	|d   k  sJ ‚ J ‚d\  }}|D �cg c]  }t        |||«      ‘Œ }}|d   |d   cxk(  r|d   cxk(  r	|d   k(  sJ ‚ J ‚y c c}w c c}w )N)r   é   ©ÚminÚ	geometricÚ
arithmeticÚmaxr   r   r)   é   )é   r0   )r   )ÚaÚbÚmethodsÚmethodÚmeansÚcÚds          r&   Útest_generalized_averager8   9   s»   € Ø�D€A€qÚ7€GØ>EÖF°FÔ! ! Q¨Õ/ÐF€EÐFØ�‰8�u˜Q‘xÔ7 5¨¡8Ô7¨u°Q©xÒ7Ð7Ñ7Ð7Ð7Ø�D€A€qØ>EÖF°FÔ! ! Q¨Õ/ÐF€EÐFØ�‰8�u˜Q‘xÔ7 5¨¡8Ô7¨u°Q©xÒ7Ð7Ñ7Ð7Ñ7ùò	 Gùò Gs   ŽBÁBc                  ón  — t         D ]ÿ  }  | g g «      t        j                  d«      k(  sJ ‚ | dgdg«      t        j                  d«      k(  sJ ‚ | g d¢g d¢«      t        j                  d«      k(  sJ ‚ | g d¢g d¢«      t        j                  d«      k(  sJ ‚ | g d¢g d¢«      t        j                  d«      k(  sJ ‚ | g d	¢g d
¢«      t        j                  d«      k(  sJ ‚ | g d¢g d¢«      t        j                  d«      k(  rŒÿJ ‚ t        t        g}h d£}|D �]  } |D �]  } | g g |¬«      t        j                  d«      k(  sJ ‚ | dgdg|¬«      t        j                  d«      k(  sJ ‚ | g d¢g d¢|¬«      t        j                  d«      k(  sJ ‚ | g d¢g d¢|¬«      t        j                  d«      k(  sJ ‚ | g d¢g d¢|¬«      t        j                  d«      k(  sJ ‚ | g d	¢g d
¢|¬«      t        j                  d«      k(  sJ ‚ | g d¢g d¢|¬«      t        j                  d«      k(  r�ŒJ ‚ �Œ y )Nç      ð?r   r   )r   r   r   r   )é*   é   r;   )ç        r:   r=   )ç      E@ç      @r>   )r=   r:   ç       @)r>   r?   r@   )r   r   r)   )r;   r<   r)   >   r.   r+   r,   r-   ©Úaverage_method)r    r!   Úapproxr   r   )r$   Úscore_funcs_with_changing_meansr5   Úmeans       r&   Útest_perfect_matchesrF   C   s@  € Ü!ò Gˆ
Ù˜"˜bÓ!¤V§]¡]°3Ó%7Ò7Ð7Ð7Ù˜1˜# ˜sÓ#¤v§}¡}°SÓ'9Ò9Ð9Ð9Ùš)¢YÓ/´6·=±=ÀÓ3EÒEÐEÐEÙš)¢[Ó1´V·]±]À3Ó5GÒGÐGÐGÙš/Ò+<Ó=ÄÇÁÈsÓASÒSÐSÐSÙš/Ò+;Ó<ÄÇÁÈcÓ@RÒRÐRÐRÙš)¢ZÓ0´F·M±MÀ#Ó4FÓFÐFÐFðGô 	%Ü"ð'Ð#ò 6€EØ5ó $ˆ
Øó 	$ˆDÙ˜b "°TÔ:¼f¿m¹mÈCÓ>PÒPÐPÐPÙ˜q˜c A 3°tÔ<ÄÇÁÈcÓ@RÒRÐRÐRÙÚš9°Tôä—‘˜sÓ#ò$ð $ð $ñ Úš;°tôä—‘˜sÓ#ò$ð $ð $ñ ÚÒ!2À4ôä—‘˜sÓ#ò$ð $ð $ñ ÚÒ!1À$ôä—‘˜sÓ#ò$ð $ð $ñ Úš:°dôä—‘˜sÓ#ô$ð $ð $ò	$ñ$ó    c                  óz   — t        g d¢g d¢«      \  } }}t        | dd«       t        |dd«       t        |dd«       y )N©r   r   r   r   r   r   )r   r   r   r   r)   r)   r:   r)   g®Gázæ?gìQ¸…ëé?©r   r   ©Úhr6   Úvs      r&   Ú*test_homogeneous_but_not_complete_labelingrN   f   ó:   € ä0Ò1CÒEWÓX�G€A€qˆ!Ü˜˜4 Ô#Ü˜˜4 Ô#Ü˜˜4 Õ#rG   c                  óz   — t        g d¢g d¢«      \  } }}t        | dd«       t        |dd«       t        |dd«       y )N©r   r   r   r   r)   r)   )r   r   r   r   r   r   g�Âõ(\�â?r)   r:   g\�Âõ(\ç?rJ   rK   s      r&   Ú*test_complete_but_not_homogeneous_labelingrR   n   rO   rG   c                  óz   — t        g d¢g d¢«      \  } }}t        | dd«       t        |dd«       t        |dd«       y )NrI   ©r   r   r   r   r)   r)   çq=
×£på?r)   çáz®GáÚ?ç¤p=
×£à?rJ   rK   s      r&   Ú.test_not_complete_and_not_homogeneous_labelingrX   v   rO   rG   c                  óð   — d} d}d}d| z   |z  |z  | |z  |z   z  }t        g d¢g d¢| ¬«      \  }}}t        ||d«       t        ||d«       t        ||d«       t        g d¢g d¢| ¬«      }t        ||d«       y )	Ngš™™™™™É?rU   rV   r   rI   rT   )Úbetar)   )r   r   r   )Ú	beta_testÚh_testÚc_testÚv_testrL   r6   rM   s          r&   Útest_beta_parameterr_   ~   s�   € ð €IØ€FØ€FØ�)‰m˜vÑ%¨Ñ.°)¸fÑ2DÀvÑ2MÑN€Fä0ÚÒ.°Yô�G€A€qˆ!ô ˜˜6 1Ô%Ü˜˜6 1Ô%Ü˜˜6 1Ô%äÒ*Ò,>ÀYÔO€AÜ˜˜6 1Õ%rG   c                  óØ  — t        g d¢g d¢«      \  } }}t        | dd«       t        |dd«       t        |dd«       t        g d¢g d¢«      \  } }}t        | dd«       t        |dd«       t        |dd«       t        g d¢g d¢«      }t        g d¢g d¢«      }t        |d	d«       t        |d	d«       t        g d¢g d¢«      }t        g d¢g d¢«      }t        |d
d«       t        |d
d«       y )N)r   r   r   r)   r)   r)   rT   rU   r)   rV   rW   rI   )r   é   r   ra   r)   r)   g¸…ëQ¸Î?g…ëQ¸å?)r   r   r   r   )rL   r6   rM   Úari_1Úari_2Úri_1Úri_2s          r&   Útest_non_consecutive_labelsrf   ’   sÚ   € ä0Ò1CÒEWÓX�G€A€qˆ!Ü˜˜4 Ô#Ü˜˜4 Ô#Ü˜˜4 Ô#ä0Ò1CÒEWÓX�G€A€qˆ!Ü˜˜4 Ô#Ü˜˜4 Ô#Ü˜˜4 Ô#äÒ 2Ò4FÓG€EÜÒ 2Ò4FÓG€EÜ˜˜t QÔ'Ü˜˜t QÔ'äÒ(Ò*<Ó=€DÜÒ(Ò*<Ó=€DÜ˜˜d AÔ&Ü˜˜d AÕ&rG   c                 ó&  — t         j                  j                  |«      j                  }t        j                  t        |«      |f«      }t        |«      D ]9  \  }}t        |«      D ]&  }	 |d||¬«      }
 |d||¬«      } | |
|«      |||	f<   Œ( Œ; |S )Nr   )ÚlowÚhighÚsize)ÚnpÚrandomÚRandomStateÚrandintÚzerosÚlenÚ	enumerateÚrange)r$   Ú	n_samplesÚk_rangeÚn_runsÚseedÚrandom_labelsÚscoresÚiÚkÚjÚlabels_aÚlabels_bs               r&   Úuniform_labelings_scoresr~   ©   s•   € ä—I‘I×)Ñ)¨$Ó/×7Ñ7€MÜ�X‰X”s˜7“| VÐ,Ó-€FÜ˜'Ó"ò :‰ˆˆ1Ü�v“ò 	:ˆAÙ$¨°¸ÔCˆHÙ$¨°¸ÔCˆHÙ% h°Ó9ˆF�1�a�4ŠLñ	:ð:ð
 €MrG   c                  ó    — g d¢} d}d}t        t        || |«      }t        j                  |«      j	                  d¬«      }t        |g d¢d«       y )N)r)   é
   é2   éZ   éd   r€   r   )Úaxis)ç{®Gáz”?ç¸…ëQ¸ž?r†   r…   r)   )r~   r   rk   Úabsr.   r   )Ún_clusters_rangers   ru   rx   Úmax_abs_scoress        r&   Útest_adjustment_for_chancerŠ   µ   sP   € â&ÐØ€IØ€Fä%Ü˜YÐ(8¸&ó€Fô —V‘V˜F“^×'Ñ'¨QÐ'Ó/€NÜ˜nÒ.FÈÕJrG   c                  óü  — t        j                  g d¢«      } t        j                  g d¢«      }t        | |«      }t        |dd«       t	        | |d¬«      }t        | ||¬«      }t        |dd«       t	        | |«      }t        | ||¬«      }t        |dd«       |j                  «       }t        ||«      }t        |dd«       t        | |«      }t        |d	d«       t        g d
¢g d¢«      }|t        j                  d«      k(  sJ ‚t        j                  t        | «      dz  g«      j                  «       }t        j                  t        |«      dz  g«      j                  «       }t        ||«      }t        |dd«       y )N©r   r   r   r   r   r   r)   r)   r)   r)   r)   r)   r/   r/   r/   r/   r/   ©r   r   r   r   r)   r   r)   r)   r)   r)   r/   r   r/   r/   r/   r)   r)   gS‘
cAÚ?é   T©Úsparse)ÚcontingencygpUjö@Ã?gçãÚP1ÎÑ?)r   r   r)   r)   )r)   r)   r/   r/   r:   én   gR¸…ëQØ?r)   )rk   Úarrayr   r   r
   Úsumr   r   r!   rC   ÚlistÚflatten)	r|   r}   ÚmiÚCrs   ÚemiÚamiÚa110Úb110s	            r&   Útest_adjusted_mutual_info_scorer�   Ã   sB  € ä�x‰xÒKÓL€HÜ�x‰xÒKÓL€Hä	˜8 XÓ	.€BÜ˜˜G QÔ'ä˜8 X°dÔ;€AÜ	˜8 X¸1Ô	=€BÜ˜˜G QÔ'ä˜8 XÓ.€AÜ	˜8 X¸1Ô	=€BÜ˜˜G QÔ'à—‘“€IÜ
% a¨Ó
3€CÜ˜˜W aÔ(ä
$ X¨xÓ
8€CÜ˜˜W aÔ(Ü
$¢\²<Ó
@€CØ”&—-‘- Ó$Ò$Ð$Ð$ä�8‰8”T˜(“^ cÑ)Ð*Ó+×3Ñ3Ó5€DÜ�8‰8”T˜(“^ cÑ)Ð*Ó+×3Ñ3Ó5€DÜ
$ T¨4Ó
0€CÜ˜˜T 1Õ%rG   c                  óP   — t        t        j                  dgg«      d«      dk  sJ ‚y )Nip r   )r   rk   r“   © rG   r&   Ú"test_expected_mutual_info_overflowr    â   s&   € ô '¤r§x¡x°%°°	Ó':¸EÓBÀaÒGÐGÑGrG   c                  ór  — t        j                  dgdz  dgdz  z   dgdz  z   dgdz  z   d	gd
z  z   «      } t        j                  dgdz  dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   «      }t        t        | |«      «       t        t	        | |«      «       y )Nr   iy×  r)   i]<  r/   i“  ra   iU  rŽ   iP  r   i˜Í  iá	  iD9  i  iÇ  éÌ   i.  é'   i<  é   )rk   r“   r   r   r   )ÚxÚys     r&   Ú3test_int_overflow_mutual_info_fowlkes_mallows_scorer§   è   s!  € ä
�‰Ø	
ˆˆ|ÑØˆ#�Ñ
ñ	àˆ#�Ñ
ñ	ð ˆ#�Ñ
ñ	ð ˆ#�Ñ
ñ		ó	€Aô 	�‰Ø	
ˆˆe‰Øˆ#�‰*ñ	àˆ#�‰+ñ	ð ˆ#�‰)ñ	ð ˆ#�‰*ñ		ð
 ˆ#�‰)ñ	ð ˆ#�‰)ñ	ð ˆ#�‰(ñ	ð ˆ#�‰)ñ	ð ˆ#�‰(ñ		ó	€Aô Ô'¨¨1Ó-Ô.ÜÔ+¨A¨qÓ1Õ2rG   c                  ó‚   — t        t        g d¢«      dd«       t        t        g «      d«       t        g d¢«      dk(  sJ ‚y )N©r   r   r>   ç,^ÑR^ä?rŽ   r   ©r   r   r   r   r   )r   r   rŸ   rG   r&   Útest_entropyr¬     s4   € Üœ¢Ó-¨y¸!Ô<Üœ › QÔ'Ü’<Ó  AÒ%Ð%Ñ%rG   z#array_namespace, device, dtype_namec                 ó¤  — t        | |«      }|j                  t        j                  g d¢|¬«      |¬«      }|j                  g |j                  |¬«      }|j                  g d¢|¬«      }t	        d¬«      5  t        |«      t        j                  dd	¬
«      k(  sJ ‚t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nr©   ©Údtype)Údevice)r¯   r°   r«   T)Úarray_api_dispatchrª   gñhãˆµøä>)r‡   r   r   )r   Úasarrayrk   Úint32r   r   r!   rC   )Úarray_namespacer°   Ú
dtype_nameÚxpÚfloat_labelsÚempty_int32_labelsÚ
int_labelss          r&   Útest_entropy_array_apirº     s»   € ô 
˜o¨vÓ	6€BØ—:‘:œbŸj™jª¸ZÔHÐQW�:ÓX€LØŸ™ B¨b¯h©h¸v˜ÓFÐØ—‘šL°�Ó8€JÜ	¨4Ô	0ñ (Ü�|Ó$¬¯©°iÀTÔ(JÒJÐJÐJÜÐ)Ó*¨aÒ/Ð/Ð/Ü�zÓ" aÒ'Ð'Ñ'÷(÷ (ñ (ús   Á6ACÃCc            	      óT  — t        j                  g d¢«      } t        j                  g d¢«      }t        | |«      }t        j                  | |t        j                  dd«      t        j                  dd«      f¬«      d   }t        ||«       t        | |d¬«      }t        ||dz   «       y )	NrŒ   r�   r   rŽ   )Úbinsr   gš™™™™™¹?)Úeps)rk   r“   r
   Úhistogram2dÚaranger   )r|   r}   r˜   ÚC2s       r&   Útest_contingency_matrixrÁ     s„   € Ü�x‰xÒKÓL€HÜ�x‰xÒKÓL€HÜ˜8 XÓ.€AÜ	�‰˜ (´"·)±)¸A¸q³/Ä2Ç9Á9ÈQÐPQÃ?Ð1SÔ	TÐUVÑ	W€BÜ˜a Ô$Ü˜8 X°3Ô7€AÜ˜a  c¡Õ*rG   c                  óF  — t        j                  g d¢«      } t        j                  g d¢«      }t        | |«      }t        | |d¬«      j                  «       }t	        ||«       t        j                  t        d¬«      5  t        | |dd¬«       d d d «       y # 1 sw Y   y xY w)	NrŒ   r�   Tr�   z!Cannot set 'eps' when sparse=Truer   g»½×Ùß|Û=)r½   r�   )rk   r“   r
   Útoarrayr   r!   r"   r#   )r|   r}   r˜   ÚC_sparses       r&   Útest_contingency_matrix_sparserÅ      sƒ   € Ü�x‰xÒKÓL€HÜ�x‰xÒKÓL€HÜ˜8 XÓ.€AÜ! (¨H¸TÔB×JÑJÓL€HÜ˜a Ô*Ü	�‰”zÐ)LÔ	Mñ GÜ˜8 X°5ÀÕF÷G÷ Gñ Gús   Á>BÂB c                  ó˜  — t        j                  ddd«      j                  t        «      D �]  } t        j                  | t        ¬«      t        j
                  | t        ¬«      }}t        ||«      t        j                  d«      k(  sJ ‚t        ||«      t        j                  d«      k(  sJ ‚t        ||«      t        j                  d«      k(  sJ ‚t        ||«      t        j                  d«      k(  sJ ‚dD ]N  }t        |||¬«      t        j                  d«      k(  sJ ‚t        |||¬«      t        j                  d«      k(  rŒNJ ‚ �Œ y )Nr   ra   r®   r=   r*   rA   )rk   ÚlogspaceÚastypeÚintÚonesr¿   r   r!   rC   r   r   )ry   r|   r}   r4   s       r&   Útest_exactly_zero_info_scorerË   *  s'  € ä�[‰[˜˜A˜qÓ!×(Ñ(¬Ó-ó $ˆÜ Ÿg™g a¬sÔ3´R·Y±Y¸qÌÔ5L�(ˆÜ+¨H°hÓ?Ä6Ç=Á=ÐQTÓCUÒUÐUÐUÜ˜x¨Ó2´f·m±mÀCÓ6HÒHÐHÐHÜ)¨(°HÓ=ÄÇÁÈsÓASÒSÐSÐSÜ+¨H°hÓ?Ä6Ç=Á=ÐQTÓCUÒUÐUÐUØ?ò 	$ˆFÜ-Ø˜(°6ôä—‘˜sÓ#ò$ð $ð $ô 0Ø˜(°6ôä—‘˜sÓ#ó$ð $ð $ò		$ñ$rG   c           	      ó¬  — t        j                  ddd«      j                  t        «      D ]§  }t         j                  j                  | «      }|j                  dd|«      |j                  dd|«      }}t        t        ||«      dt        ||«      z  t        |«      t        |«      z   z  d«       d}t        t        ||«      t        |||¬«      «       Œ© y )Nr   ra   r   r€   r@   r-   rA   )rk   rÇ   rÈ   rÉ   rl   rm   rn   r   r   r   r   r   )rv   ry   Úrandom_stater|   r}   Úavgs         r&   Ú%test_v_measure_and_mutual_informationrÏ   ;  sÏ   € ä�[‰[˜˜A˜qÓ!×(Ñ(¬Ó-ò 
ˆÜ—y‘y×,Ñ,¨TÓ2ˆà× Ñ   B¨Ó*Ø× Ñ   B¨Ó*ð ˆô 	Ü˜H hÓ/ØÜ ¨(Ó3ñ4ä�xÓ ¤7¨8Ó#4Ñ4ñ6ð ô	
ð ˆÜÜ˜H hÓ/Ü(¨°8ÈCÔPõ	
ñ
rG   c                  óØ   — t        g d¢g d¢«      } t        | dt        j                  d«      z  «       t        g d¢g d¢«      }t        |d«       t        g d¢g d¢«      }t        |d	«       y )
NrI   rQ   g      @g      R@)r   r   r   r   r   r   r:   )r   r   r   r   r   r   )r   r   r)   r/   ra   rŽ   r=   )r   r   rk   Úsqrt)ÚscoreÚperfect_scoreÚworst_scores      r&   Útest_fowlkes_mallows_scorerÕ   Q  s\   € ä!Ò"4Ò6HÓI€EÜ˜˜s¤R§W¡W¨ZÓ%8Ñ8Ô9ô *Ò*<Ò>PÓQ€MÜ˜ sÔ+ô (Ò(:Ò<NÓO€KÜ˜ SÕ)rG   c                  óh  — t        j                  g d¢«      } t        j                  g d¢«      }dt        j                  d«      z  }t        | |«      }t	        ||«       t        || «      }t	        ||«       t        | dz   dz  |«      }t	        ||«       t        || dz   dz  «      }t	        ||«       y )N)r   r   r   r   r   r)   )r   r   r)   r)   r   r   r:   g      (@r   r/   r)   )rk   r“   rÑ   r   r   )r|   r}   r%   Úscore_originalÚscore_symmetricÚscore_permutedÚ
score_boths          r&   Ú%test_fowlkes_mallows_score_propertiesrÛ   _  s¦   € ä�x‰xÒ*Ó+€HÜ�x‰xÒ*Ó+€HØ”R—W‘WÐ6Ó7Ñ7€Hô +¨8°XÓ>€NÜ˜¨Ô1ô ,¨H°hÓ?€OÜ˜¨Ô2ô +¨H°q©L¸AÑ+=¸xÓH€NÜ˜¨Ô1ô ' x°(¸Q±,À!Ñ1CÓD€JÜ˜
 HÕ-rG   zlabels_true, labels_predr1   é   )r   r   r   r   r   r   r   c                 ó&   — t        | |«      dk(  sJ ‚y )Nr   )r   )Úlabels_trueÚlabels_preds     r&   Ú.test_mutual_info_score_positive_constant_labelrà   v  s   € ô ˜[¨+Ó6¸!Ò;Ð;Ñ;rG   c                  ó  — t         j                  j                  d«      } | j                  d«      }t        j                  ddd«      dz  }d}t        j                  t        |¬«      5  t        ||«       d d d «       y # 1 sw Y   y xY w)Nr;   iô  g{®Gáz„?r   g�íµ ÷Æ°>zuClustering metrics expects discrete values but received continuous values for label, and continuous values for targetr   )	rk   rl   rm   ÚrandÚlinspacer!   ÚwarnsÚUserWarningr   )ÚrngÚnoiseÚ
wavelengthÚmsgs       r&   Útest_check_clustering_errorrê   †  ss   € ä
�)‰)×
Ñ
 Ó
#€CØ�H‰H�S‹M€EÜ—‘˜T 1 cÓ*¨TÑ1€Jð	ð ô 
�‰”k¨Ô	-ñ -Ü˜* eÔ,÷-÷ -ñ -ús   Á(A>Á>Bc                  ó¢   — d} t        t        | «      «      }|}t        j                  | | dz
  z  dgddgg«      }t	        t        ||«      |«       y )Nrƒ   r   r   )r•   rr   rk   r“   r   r   ©ÚNÚclustering1Úclustering2r%   s       r&   Ú*test_pair_confusion_matrix_fully_dispersedrð   •  sO   € à€AÜ”u˜Q“x“.€KØ€KÜ�x‰x˜!˜q 1™u™+ qÐ)¨A¨q¨6Ð2Ó3€HÜÔ,¨[¸+ÓFÈÕQrG   c                  ó¦   — d} t        j                  | f«      }|}t        j                  ddgd| | dz
  z  gg«      }t        t	        ||«      |«       y )Nrƒ   r   r   )rk   ro   r“   r   r   rì   s       r&   Ú)test_pair_confusion_matrix_single_clusterrò   ž  sQ   € à€AÜ—(‘(˜A˜4“.€KØ€KÜ�x‰x˜!˜Q˜ ! Q¨!¨a©%¡[Ð!1Ð2Ó3€HÜÔ,¨[¸+ÓFÈÕQrG   c                  óR  — d} | dz  }t        j                  t        | «      D �cg c]  }|dz   g| z  ‘Œ c}«      }t        j                  t        | «      D �cg c]  }|dz   g| dz   z  ‘Œ c}«      d | }t        j                  dt         j                  ¬«      }t        t        |«      «      D ]X  }t        t        |«      «      D ]?  }||k7  sŒ	t        ||   ||   k(  «      }t        ||   ||   k(  «      }|||fxx   dz  cc<   ŒA ŒZ t        t        ||«      |«       y c c}w c c}w )Nr€   r)   r   )r)   r)   )Úshaper¯   )	rk   Úhstackrr   ro   Úint64rp   rÉ   r   r   )	Únrí   ry   rî   rï   r%   r{   Úsame_cluster_1Úsame_cluster_2s	            r&   Útest_pair_confusion_matrixrú   §  s  € à
€AØ	ˆ1‰€AÜ—)‘)´%¸³(Ö;¨Q˜a !™e˜W q›[Ò;Ó<€KÜ—)‘)¼¸a»ÖA°1˜a !™e˜W¨¨A©Ó.ÒAÓBÀ2ÀAÐF€Kä�x‰x˜f¬B¯H©HÔ5€HÜ”3�{Ó#Ó$ò >ˆÜ”s˜;Ó'Ó(ò 	>ˆAØ�A‹vÜ!$ [°¡^°{À1±~Ñ%EÓ!F�Ü!$ [°¡^°{À1±~Ñ%EÓ!F�Ø˜¨Ð7Ó8¸AÑ=Ô8ñ		>ð>ô Ô,¨[¸+ÓFÈÕQùò <ùÚAs   ¤DÁD$zclustering1, clustering2rƒ   )rƒ   c                 ó0   — t        t        | |«      d«       y )Nr:   ©r   r   )rî   rï   s     r&   Útest_rand_score_edge_casesrý   ¸  s   € ô ”J˜{¨KÓ8¸#Õ>rG   c                  óŒ   — g d¢} g d¢}d}d}d}d|z
  |z
  |z
  }||z   }||z   |z   |z   }||z  }t        t        | |«      |«       y )NrI   rT   ra   é   r)   é   rü   )	rî   rï   ÚD11ÚD10ÚD01ÚD00Úexpected_numeratorÚexpected_denominatorr%   s	            r&   Útest_rand_scorer  Â  sg   € â$€KÚ$€Kà
€CØ
€CØ
€CØ
�#‰+˜Ñ
˜cÑ
!€Cà˜s™ÐØ ™9 s™?¨SÑ0ÐØ!Ð$8Ñ8€HÜ”J˜{¨KÓ8¸(ÕCrG   c                  ól  — t         j                  j                  d«      } | j                  dddt         j                  ¬«      }| j                  dddt         j                  ¬«      }t        j                  «       5  t        j                  dt        «       t        ||«       ddd«       y# 1 sw Y   yxY w)z·Check that large amount of data will not lead to overflow in
    `adjusted_rand_score`.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20305
    r   r)   i † r®   ÚerrorN)
rk   rl   rm   rn   Úint8ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr   )ræ   Úy_trueÚy_preds      r&   Ú!test_adjusted_rand_score_overflowr  Ò  s‡   € ô �)‰)×
Ñ
 Ó
"€CØ�[‰[˜˜A˜w¬b¯g©gˆ[Ó6€FØ�[‰[˜˜A˜w¬b¯g©gˆ[Ó6€FÜ	×	 Ñ	 Ó	"ñ ,Ü×Ñ˜g¤~Ô6Ü˜F FÔ+÷,÷ ,ñ ,ús   Á:'B*Â*B3rB   )r+   r-   r,   r.   c                 óœ   — dgdz  }dg|dd z   }ddg|dd z   }t        ||| ¬«      }|dk(  sJ ‚t        ||| ¬«      }d|cxk  rdk  sJ ‚ J ‚y)z�Check that nmi returns a score between 0 (included) and 1 (excluded
    for non-perfect match)

    Non-regression test for issue #13836
    r   iÕ  r   Nr)   rA   )r   )rB   Úlabels1Úlabels2Úlabels3Únmis        r&   Ú)test_normalized_mutual_info_score_boundedr  à  su   € ð ˆc�C‰i€GØˆc�G˜A˜B�KÑ€GØ�!ˆf�w˜q˜r�{Ñ"€Gô ' w°ÈÔ
W€CØ�!Š8€Oˆ8ô ' w°ÈÔ
W€CØ�Œ<�aŠ<Ð‰<Ð‰<rG   )r€   r;   )é$   )Gr  Únumpyrk   r!   Únumpy.testingr   r   r   Úsklearn.baser   Úsklearn.metrics.clusterr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú#sklearn.metrics.cluster._supervisedr   r   Úsklearn.utilsr   Úsklearn.utils._array_apir   Úsklearn.utils._testingr   r   r    r'   r8   rF   rN   rR   rX   r_   rf   r~   rŠ   r�   r    r§   r¬   ÚmarkÚparametrizerº   rÁ   rÅ   rË   rÏ   rÕ   rÛ   rà   rê   rð   rò   rú   r•   rr   ro   rý   r  r  r  rŸ   rG   r&   ú<module>r#     s  ðÛ ã Û ß XÑ Xå '÷÷ ÷ ÷ ÷  XÝ +Ý Nß Lð ØØØØØØ ð€ò4ò"8ò $òF$ò$ò$ò&ò('ó.	òKò&ò>Hò3ò4&ð ‡�×ÑØ)Ñ+TÓ+Vóñ(óð(ò+òGò$ó"
ò,*ò.ð. ‡�×ÑØà
ˆ�‰Ò&Ð'Ø
ˆˆq‰Ò$Ð%Ú	˜c˜U Q™YÐ'Ú	˜a˜S 1™WÐ%Ø
ˆ�‰�S�E˜A‘IÐðó	ñ<ó	ð<ò-òRòRòRð" ‡�×ÑØÙ
‰5�‹:Ó™™U 3›ZÓ(Ð)¨H¨B¯H©H°VÓ,<¸h¸b¿h¹hÀvÓ>NÐ+OÐPóñ?ó	ð?òDò ,ð ‡�×ÑÐ)Ò+TÓUñó VñrG   