Ë
    íì�iwL  ã            
       ó¾  — 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 d dlmZmZmZmZ d dlmZ d dlm Z m!Z! d dl"m#Z#m$Z$ eeeeeeegZ%ejL                  jO                  d	e%«      d
„ «       Z(d„ Z)ejL                  jO                  d	e%«      d„ «       Z*ejL                  jO                  d	eeg«      ejL                  jO                  dg d¢«      d„ «       «       Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0d;d„Z1d„ Z2d„ Z3d„ Z4d„ Z5d„ Z6d„ Z7ejL                  jO                  d e!«       e ¬«      d„ «       Z8d„ Z9d „ Z:d!„ Z;d<d"„Z<d#„ Z=d$„ Z>ejL                  jO                  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,„ ZAd-„ ZBd.„ ZCejL                  jO                  d/ eD eEd0«      «       eD eEd0«      «      f ejŒ                  d1«       ejŒ                  d1«      fg«      d2„ «       ZGd3„ ZHd4„ ZIejL                  jO                  dg d5¢«      d6„ «       ZJejL                  jO                  d7d8d9g«      d:„ «       ZKy)=é    N)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equal)Úconfig_context)Úadjusted_mutual_info_scoreÚadjusted_rand_scoreÚcompleteness_scoreÚcontingency_matrixÚ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)Ú_entropyÚ_generalized_averageÚcheck_clusteringsÚentropy)Úassert_all_finite)Ú_get_namespace_device_dtype_idsÚ)yield_namespace_device_dtype_combinations)Ú_array_api_for_testsÚassert_almost_equalÚ
score_funcc                 óŽ  — 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   ŒxxY w# 1 sw Y   ŒMxY w# 1 sw Y   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   )ÚpytestÚraisesÚ
ValueError)r   Úexpecteds     ú’/var/www/ITT-ServiceAPI-Services/ITT-Document-Scan/mrzscanner/mrzenv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_supervised.pyÚ"test_error_messages_on_wrong_inputr(   /   s¿   € àV€HÜ	�‰”z¨Ô	2ñ &Ù�A�q�6š9Ô%÷&ð 7€HÜ	�‰”z¨Ô	2ñ 0Ù�Q˜�F˜Q ˜FÐ#¢YÔ/÷0ð 7€HÜ	�‰”z¨Ô	2ñ 0Ù’9  1˜v¨¨1 vÐ.Ô/÷0ð 0÷&ð &ú÷0ð 0ú÷0ð 0ús#   žB#ÁB/ÂB;Â#B,Â/B8Â;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*   é   )é   r1   )r   )ÚaÚbÚmethodsÚmethodÚmeansÚcÚds          r'   Útest_generalized_averager9   >   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                 óþ  —  | 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(  sJ ‚y )Nç      ð?r   r!   ©r   r   r   r"   ©é*   é   r>   ©ç        r;   rA   ©ç      E@ç      @rC   ©rA   r;   ç       @©rC   rD   rF   ©r   r!   r*   ©r>   r?   r*   ©r#   Úapprox)r   s    r'   Útest_perfect_matchesrL   H   sÚ   € á�b˜"Ó¤§¡¨sÓ!3Ò3Ð3Ð3Ù�q�c˜A˜3Ó¤6§=¡=°Ó#5Ò5Ð5Ð5Ù’i¢Ó+¬v¯}©}¸SÓ/AÒAÐAÐAÙ’i¢Ó-´·±¸sÓ1CÒCÐCÐCÙ’oÒ'8Ó9¼V¿]¹]È3Ó=OÒOÐOÐOÙ’oÒ'7Ó8¼F¿M¹MÈ#Ó<NÒNÐNÐNÙ’i¢Ó,´·±¸cÓ0BÒBÐBÑBó    Úaverage_methodr+   c                 ó¶  —  | 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(  sJ ‚ | ddgddg|¬«      t        j                  d«      k(  sJ ‚ | g d¢g d¢|¬«      t        j                  d«      k(  sJ ‚y )N©rN   r;   r   r!   r<   r"   r=   r@   rB   rE   rG   rH   rI   )r   r!   r*   r0   rJ   )r   rN   s     r'   Ú(test_perfect_matches_with_changing_meansrQ   S   s…  € ñ �b˜"¨^Ô<ÄÇÁÈcÓ@RÒRÐRÐRÙ�q�c˜A˜3¨~Ô>Ä&Ç-Á-ÐPSÓBTÒTÐTÐTÙÚ’9¨^ôä	�‰�sÓ	òð ð ñ Ú’;¨~ôä	�‰�sÓ	òð ð ñ ÚÒ*¸>ôä	�‰�sÓ	òð ð ñ ÚÒ)¸.ôä	�‰�sÓ	òð ð ñ Ú’:¨nôä	�‰�sÓ	òð ð ñ �q˜!�f˜q !˜f°^ÔDÌÏÉØóIò ð ð ñ Ú’l°>ôä	�‰�sÓ	òð ñ rM   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   ©Úhr7   Úvs      r'   Ú*test_homogeneous_but_not_complete_labelingrX   v   ó:   € ä0Ò1CÒEWÓX�G€A€qˆ!Ü˜˜4 Ô#Ü˜˜4 Ô#Ü˜˜4 Õ#rM   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\�Âõ(\ç?rT   rU   s      r'   Ú*test_complete_but_not_homogeneous_labelingr\   ~   rY   rM   c                  óz   — t        g d¢g d¢«      \  } }}t        | dd«       t        |dd«       t        |dd«       y )NrS   ©r   r!   r   r!   r*   r*   çq=
×£på?r*   çáz®GáÚ?ç¤p=
×£à?rT   rU   s      r'   Ú.test_not_complete_and_not_homogeneous_labelingrb   †   rY   rM   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š™™™™™É?r_   r`   r!   rS   r^   )Úbetar*   )r   r   r   )Ú	beta_testÚh_testÚc_testÚv_testrV   r7   rW   s          r'   Útest_beta_parameterri   Ž   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Õ%rM   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*   r^   r_   r*   r`   ra   rS   )r   é   r   rk   r*   r*   g¸…ëQ¸Î?g…ëQ¸å?)r   r   r   r   )rV   r7   rW   Úari_1Úari_2Úri_1Úri_2s          r'   Útest_non_consecutive_labelsrp   ¢   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Õ&rM   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ñ	:ð:ð
 €MrM   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   ru   Úabsr/   r   )Ún_clusters_ranger}   r   r‚   Úmax_abs_scoress        r'   Útest_adjustment_for_chancer”   Å   sP   € â&ÐØ€IØ€Fä%Ü˜YÐ(8¸&ó€Fô —V‘V˜F“^×'Ñ'¨QÐ'Ó/€NÜ˜nÒ.FÈÕJrM   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*   r0   r0   r0   r0   r0   ©r!   r!   r!   r!   r*   r!   r*   r*   r*   r*   r0   r!   r0   r0   r0   r*   r*   gS‘
cAÚ?é   T©Úsparse)ÚcontingencygpUjö@Ã?gçãÚP1ÎÑ?)r!   r!   r*   r*   )r*   r*   r0   r0   r;   én   gR¸…ëQØ?r*   )ru   Úarrayr   r   r
   Úsumr   r   r#   rK   ÚlistÚflatten)	r†   r‡   ÚmiÚCr}   Ú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Õ%rM   c                  óP   — t        t        j                  dgg«      d«      dk  sJ ‚y )Nip r!   )r   ru   r�   © rM   r'   Ú"test_expected_mutual_info_overflowrª   ò   s&   € ô '¤r§x¡x°%°°	Ó':¸EÓBÀaÒGÐGÑGrM   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]<  r0   i“  rk   iU  r˜   iP  r   i˜Í  iá	  iD9  i  iÇ  éÌ   i.  é'   i<  é   )ru   r�   r   r   r   )ÚxÚys     r'   Ú3test_int_overflow_mutual_info_fowlkes_mallows_scorer±   ø   s!  € ä
�‰Ø	
ˆˆ|ÑØˆ#�Ñ
ñ	àˆ#�Ñ
ñ	ð ˆ#�Ñ
ñ	ð ˆ#�Ñ
ñ		ó	€Aô 	�‰Ø	
ˆˆe‰Øˆ#�‰*ñ	àˆ#�‰+ñ	ð ˆ#�‰)ñ	ð ˆ#�‰*ñ		ð
 ˆ#�‰)ñ	ð ˆ#�‰)ñ	ð ˆ#�‰(ñ	ð ˆ#�‰)ñ	ð ˆ#�‰(ñ		ó	€Aô Ô'¨¨1Ó-Ô.ÜÔ+¨A¨qÓ1Õ2rM   c                  ó~   — t        j                  t        d¬«      5  t        g d¢«       d d d «       y # 1 sw Y   y xY w)NzFunction entropy is deprecatedr   ©r   r   rC   )r#   ÚwarnsÚFutureWarningr   r©   rM   r'   Útest_public_entropy_deprecationr¶     s.   € Ü	�‰”mÐ+KÔ	Lñ Ü’Ô÷÷ ñ ús   œ3³<c                  ó‚   — t        t        g d¢«      dd«       t        t        g «      d«       t        g d¢«      dk(  sJ ‚y )Nr³   ç,^ÑR^ä?r˜   r!   ©r!   r!   r!   r!   r   )r   r   r©   rM   r'   Útest_entropyrº     s4   € Üœ¢Ó.°	¸1Ô=Üœ › aÔ(Ü’LÓ! QÒ&Ð&Ñ&rM   z#array_namespace, device, dtype_name)Úidsc                 ó¤  — 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   Úasarrayru   Úint32r   r   r#   rK   )Ú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ñ )Ü˜Ó%¬¯©°yÀdÔ)KÒKÐKÐKÜÐ*Ó+¨qÒ0Ð0Ð0Ü˜
Ó# qÒ(Ð(Ñ(÷)÷ )ñ )ú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)ru   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¡Õ*rM   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š   )ru   r�   r
   Útoarrayr   r#   r$   r%   )r†   r‡   r¢   ÚC_sparses       r'   Útest_contingency_matrix_sparserÔ   8  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                  óH  — 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        ||«      dk(  sJ ‚t        ||«      t        j                  d«      k(  sJ ‚dD ];  }t        |||¬«      dk(  sJ ‚t        |||¬«      t        j                  d«      k(  rŒ;J ‚ Œ÷ y )Nr!   rk   r½   rA   r+   rP   )ru   ÚlogspaceÚastypeÚintÚonesrÎ   r   r#   rK   r   r   )rƒ   r†   r‡   r5   s       r'   Útest_exactly_zero_info_scorerÚ   B  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Ó=ÀÒDÐDÐDÜ+¨H°hÓ?Ä6Ç=Á=ÐQTÓCUÒUÐUÐUØ?ò 	$ˆFä*¨8°XÈfÔUØòððô 0Ø˜(°6ôä—‘˜sÓ#ó$ð $ð $ñ	$ñ$rM   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!   rk   r   rŠ   rF   r.   rP   )ru   rÖ   r×   rØ   rv   rw   rx   r   r   r   r   r   )r€   rƒ   Úrandom_stater†   r‡   Úavgs         r'   Ú%test_v_measure_and_mutual_informationrÞ   T  sÏ   € ä�[‰[˜˜A˜qÓ!×(Ñ(¬Ó-ò 
ˆÜ—y‘y×,Ñ,¨TÓ2ˆà× Ñ   B¨Ó*Ø× Ñ   B¨Ó*ð ˆô 	Ü˜H hÓ/ØÜ ¨(Ó3ñ4ä˜Ó!¤H¨XÓ$6Ñ6ñ8ð ô	
ð ˆÜÜ˜H hÓ/Ü(¨°8ÈCÔPõ	
ñ
rM   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 )
NrS   r[   g      @g      R@)r!   r!   r!   r   r   r   r;   )r   r   r   r   r   r   )r   r!   r*   r0   rk   r˜   rA   )r   r   ru   Úsqrt)ÚscoreÚperfect_scoreÚworst_scores      r'   Útest_fowlkes_mallows_scorerä   j  s\   € ä!Ò"4Ò6HÓI€EÜ˜˜s¤R§W¡W¨ZÓ%8Ñ8Ô9ô *Ò*<Ò>PÓQ€MÜ˜ sÔ+ô (Ò(:Ò<NÓO€KÜ˜ SÕ)rM   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!   r0   r*   )ru   r�   rà   r   r   )r†   r‡   r&   Úscore_originalÚscore_symmetricÚscore_permutedÚ
score_boths          r'   Ú%test_fowlkes_mallows_score_propertiesrê   x  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Õ-rM   zlabels_true, labels_predr2   é   )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ï   �  s   € ô ˜[¨+Ó6¸!Ò;Ð;Ñ;rM   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   )	ru   rv   rw   ÚrandÚlinspacer#   r´   Ú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Ÿ   r|   ru   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ÈÕQrM   c                  ó¦   — d} t        j                  | f«      }|}t        j                  ddgd| | dz
  z  gg«      }t        t	        ||«      |«       y )Nr�   r   r!   )ru   ry   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ÈÕQrM   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¾   )	ru   Úhstackr|   ry   Úint64rz   rØ   r   r   )	Únrû   rƒ   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¸#Õ>rM   c                  óŒ   — g d¢} g d¢}d}d}d}d|z
  |z
  |z
  }||z   }||z   |z   |z   }||z  }t        t        | |«      |«       y )NrS   r^   rk   é   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¸(ÕCrM   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)
ru   rv   rw   rx   Ú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)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*   rP   )r   )rN   Ú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Š<Ð‰<Ð‰<rM   rš   TFc                 óˆ   — t        j                  t        d¬«      5  t        ddgddg| ¬«       ddd«       y# 1 sw Y   yxY w)zJCheck deprecation warning for 'sparse' parameter of fowlkes_mallows_score.z,The 'sparse' parameter was deprecated in 1.7r   r   r!   r™   N)r#   r´   rµ   r   r™   s    r'   Ú&test_fowlkes_mallows_sparse_deprecatedr'    sA   € ô 
�‰ÜÐKô
ñ =ô 	˜q !˜f q¨! f°VÕ<÷=÷ =ñ =ús	   œ8¸A)rŠ   r>   )é$   )Lr  Únumpyru   r#   Únumpy.testingr   r   r   Úsklearn.baser   Úsklearn.metrics.clusterr   r   r	   r
   r   r   r   r   r   r   r   r   r   Ú#sklearn.metrics.cluster._supervisedr   r   r   r   Úsklearn.utilsr   Úsklearn.utils._array_apir   r   Úsklearn.utils._testingr   r   Úscore_funcsÚmarkÚparametrizer(   r9   rL   rQ   rX   r\   rb   ri   rp   rˆ   r”   r§   rª   r±   r¶   rº   rÉ   rÐ   rÔ   rÚ   rÞ   rä   rê   rï   rø   rþ   r   r  rŸ   r|   ry   r  r  r  r%  r'  r©   rM   r'   ú<module>r4     sà  ðÛ ã Û ß XÑ Xå '÷÷ ÷ õ ÷ó õ ,÷÷ Mð ØØØØØØ ð€ð ‡�×Ñ˜ {Ó3ñ0ó 4ð0ò8ð ‡�×Ñ˜ {Ó3ñCó 4ðCð ‡�×ÑØà$Ø"ðóð ‡�×ÑÐ)Ò+TÓUñó Vóðò6$ò$ò$ò&ò('ó.	òKò&ò>Hò3ò6ò
'ð ‡�×ÑØ)Ù-Ó/Ø'ð ó ñ
)óð
)ò+ò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ðð( ‡�×Ñ˜ D¨% =Ó1ñ=ó 2ñ=rM   