
    -i	               
       $   S SK Jr  S SKJr  S SKrS SKrS SKJrJ	r	J
r
JrJrJrJrJrJrJrJrJr  S SKJr  \\	\\\\\\\S.	r\\" \SS9\
\S	.r/ S
QrSS/r/ SQr\R6                  R9                  S 5      r\R=                  SSS9r\R=                  SSS9r S r!\RD                  RG                  S\ V s/ s H  o \\ 4PM	     sn 5      S 5       r$\RD                  RG                  S\ V s/ s H  o \\ 4PM	     sn 5      S 5       r%\RD                  RG                  S\5      S 5       r&\RD                  RG                  S\" \\5      5      S 5       r'\RD                  RG                  S\" \\5      5      S 5       r(\RD                  RG                  S\RS                  5       5      S 5       r*\RD                  RG                  S\+" \40 \D6RY                  5       5      S 5       r-\RD                  RG                  S\" \\5      5      S 5       r.gs  sn f s  sn f )    )partial)chainN)adjusted_mutual_info_scoreadjusted_rand_scorecalinski_harabasz_scorecompleteness_scoredavies_bouldin_scorefowlkes_mallows_scorehomogeneity_scoremutual_info_scorenormalized_mutual_info_score
rand_scoresilhouette_scorev_measure_score)assert_allclose)	r   r   r   r   r   r   r   r   r
   	manhattan)metric)r   silhouette_manhattanr   r	   )r   r   r   r   r   r   r
   r   r   )r   r   r   r   r   r   r
   r         sizec                  V    [        [        [        -   5      [        [        5      :X  d   eg N)sortedSYMMETRIC_METRICSNON_SYMMETRIC_METRICSSUPERVISED_METRICS     \/var/www/html/venv/lib/python3.13/site-packages/sklearn/metrics/cluster/tests/test_common.py"test_symmetric_non_symmetric_unionr"   ]   s+    #&;;<A   r    zmetric_name, y1, y2c                 f    [         U    nU" X5      [        R                  " U" X!5      5      :X  d   eg r   r   pytestapproxmetric_namey1y2r   s       r!   test_symmetryr+   c   -      ,F">V]]6">::::r    c                 f    [         U    nU" X5      [        R                  " U" X!5      5      :w  d   eg r   r$   r'   s       r!   test_non_symmetryr.   k   r,   r    r(   c                    / SQn/ SQn[         U    nU" / SQ/ SQ5      S:  d   eU" / SQ/ SQ5      S:  d   eU" / SQ/ SQ5      S:  d   eU" / SQ/ SQ5      S:  d   eU" X5      [        R                  " S5      :X  d   e/ S	Qn/ S
Qn[        R                  " U" XE5      U" XT5      /5      nUS:  R                  5       (       a   eg )N)r   r   r      r0   r0   )r   r   r   r0   r0   )r   r   r   r0      g        )r   r   r0   r0   r1   )r   r   r0   r0   r0   )r   r0   r0   r0   r0   g      ?)r   r   r   r   r   r   )r   r0   r1   r         r   )r   r%   r&   nparrayany)r(   upper_bound_1upper_bound_2r   lower_bound_1lower_bound_2scores          r!   test_normalized_outputr<   s   s    &M&M,F/?3c999/?3c999/?3c999/?3c999-/6==3EEEE&M&MHH		-vm/STE 	     r    c                    [         R                  " / SQ5      n[         R                  " / SQ5      nU [        ;   aT  [        U    nU" X!5      n[        XC" SU-
  U5      5        [        XC" SU-
  SU-
  5      5        [        XC" USU-
  5      5        g [        U    n[         R
                  R                  SSS9nU" XR5      n[        XC" USU-
  5      5        g )N)r   r   r   r0   r0   r   r0   )r0   r   r0   r   r0   r0   r   r0   
   )   r>   r   )r4   r5   r   r   UNSUPERVISED_METRICSrandomrandint)r(   y_labely_predr   score_1Xs         r!   test_permute_labelsrG      s     hh,-GXX+,F((#K0)F
G!<=F
AK!@AG!<=%k2IIbw/#1v:!67r    c                    / SQn/ SQnS nU [         ;   aH  [         U    nU" X5      nU" U5      nU" U5      n[        Xg5       H  u  u  pu  pXT" X5      :X  a  M   e   g [        U    n[        R                  R                  SSS9nU" X5      nXT" UR                  [        5      U5      :X  d   eU" U5      nU H  u  pXT" X5      :X  a  M   e   g )N)r   r   r   r   r0   r0   r0   r0   )r   r0   r1   r   r2   r3      r?   c              3     #    [         R                  " U 5      n U S4v   U R                  5       S4v   U R                  5        Vs/ s H  n[        U5      S-   PM     snS4v   [         R                  " U R                  5        Vs/ s H  n[        U5      S-   PM     sn[        S9S4v   U S-
  S4v   U S-   S	4v   g s  snf s  snf 7f)
Nzarray of intszlist of intsz-azlist of strs)dtypezarray of strsr0   zincluding negative intszstrictly positive ints)r4   r5   toliststrobject)yxs     r!   generate_formats0test_format_invariance.<locals>.generate_formats   s     HHQK  hhj.((&'hhj1js1v}j1>AAHHQXXZ8Zc!ftmZ8G
 	
 !e...!e--- 28s   AC	B?)C	C+C	r>   )   r>   r   )r   zipr@   r4   rA   rB   astypefloat)r(   y_truerD   rQ   r   rE   
y_true_gen
y_pred_gen
y_true_fmtfmt_name
y_pred_fmt_rF   s                r!   test_format_invariancer^      s     &F%F
. ((#K0(%f-
%f-
7::7R3"ZOZfZ<<<< 8S &k2IIbw/#&%&9999%f-
$. JfQ3333 %/r    r   c                 0    S H  u  pU " U/U/5        M     g )N))r   r   )r   r0   )r0   r   )r0   r0   r   )r   ijs      r!   test_single_samplerb      s     1sQC 1r    zmetric_name, metric_funcc                 x   U [         ;   al  SS/[        R                  [        R                  /4SS/[        R                  [        R                  /4SS/[        R                  [        R                  /4/nO[        R                  R                  SSS9nU[        R                  [        R                  /4U[        R                  [        R                  /4U[        R                  [        R                  /4/n[        R                  " [        SS9   U H  nU" U6   M
     S S S 5        g ! , (       d  f       g = f)Nr   r0   r>   )r1   r>   r   zcontains (NaN|infinity))match)	r   r4   infnanrA   rB   r%   raises
ValueError)r(   metric_funcinvalidsrF   argss        r!   test_inf_nan_inputrl      s     ((Vbffbff%&Vbffbff%&Vbffbff%&
 IIbw/()A/?+@1rvvrvvFVBWX	z)C	DD  
E	D	Ds   D++
D9namec                    [         R                  R                  S5      nUR                  SSS9nUR                  SSSS9nUR                  SSSS9nU [        ;   a  [        U    nU" X45      nO[
        U    nU" X$5      n[        U[        5      (       d   e[        U[         R                  [         R                  45      (       a   eg)zEnsure that the returned values of all metrics are consistent.

It can only be a float. It should not be a numpy float64 or float32.
r   r>   )   r>   r   r   )ro   N)
r4   rA   RandomStaterB   r   r@   
isinstancerV   float64float32)rm   rngrF   labels_truelabels_predr   r;   s          r!   test_returned_value_consistencyrw      s     ))


"CBX&A++a+/K++a+/K!!#D){0%d+q&eU####%"**bjj!9:::::r    )/	functoolsr   	itertoolsr   numpyr4   r%   sklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   sklearn.utils._testingr   r   r@   r   r   NORMALIZED_METRICSrA   rp   rt   rB   r)   r*   r"   markparametrizer+   r.   r<   rG   r^   valuesrb   dictitemsrl   rw   )rm   s   0r!   <module>r      st          3 #=.,**$@&2
  )#$4[I60	    -.BC 	  	iiA[[[[[[ 7HI7Ht2rN7HI;;
 7LM7Lt2rN7LM;;
 (:;! <!$ .@BV(WX8 Y8$ .@BV(WX4 Y4B #5#<#<#>? @ %7 P;O P V V X '9;O!PQ; R;g J Ns   3H
(H
