
    Mpj%              
          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 SKJr  S SKJr  \\	\\\\\\\S.	r\\" \S	S
9\
\S.r/ SQrSS/r/ SQr\R>                  RA                  S 5      r!\!RE                  SSS9r#\!RE                  SSS9r$S r%\RL                  RO                  S\ V s/ s H  o \#\$4PM	     sn 5      S 5       r(\RL                  RO                  S\ V s/ s H  o \#\$4PM	     sn 5      S 5       r)\RL                  RO                  S\5      S 5       r*\RL                  RO                  S\" \\5      5      S 5       r+\RL                  RO                  S\" \\5      5      S 5       r,\RL                  RO                  S\R[                  5       5      S 5       r.\RL                  RO                  S\/" \40 \D6Ra                  5       5      S 5       r1\RL                  RO                  S\" \\5      5      S  5       r2S! r3\
\3/\\3/0r4\44S" jr5\RL                  RO                  S#\" 5       5      \RL                  RO                  S$\5" 5       5      S% 5       5       r6g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)check_array_api_metric))yield_namespace_device_dtype_combinations)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     e/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/metrics/cluster/tests/test_common.py"test_symmetric_non_symmetric_unionr$   a   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-   g   -      ,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_symmetryr0   o   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      r2   r2   )r   r   r   r2   r2   )r   r   r   r2      g        )r   r   r2   r2   r3   )r   r   r2   r2   r2   )r   r2   r2   r2   r2   g      ?)r   r   r   r   r   r   )r   r2   r3   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>   w   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   r2   r2   r   r2   r2   r   r2   r   r2   r2   r   r2   
      rA   r   )r6   r7   r    r   UNSUPERVISED_METRICSrandomrandint)r*   y_labely_predr   score_1Xs         r#   test_permute_labelsrK      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   r2   r2   r2   r2   )r   r2   r3   r   r4   r5      rC   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 strsr2   zincluding negative intszstrictly positive ints)r6   r7   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	rA   )   rA   r   )r    ziprD   r6   rE   rF   astypefloat)r*   y_truerH   rU   r   rI   
y_true_gen
y_pred_gen
y_true_fmtfmt_name
y_pred_fmt_rJ   s                r#   test_format_invariancerb      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   r2   )r2   r   )r2   r2   r!   )r   ijs      r#   test_single_samplerf      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   r2   rA   )r3   rA   r   zcontains (NaN|infinity))match)	r    r6   infnanrE   rF   r'   raises
ValueError)r*   metric_funcinvalidsrJ   argss        r#   test_inf_nan_inputrp      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   rA   )   rA   r   r   )rs   N)
r6   rE   RandomStaterF   r    rD   
isinstancerZ   float64float32)rq   rngrJ   labels_truelabels_predr   r=   s          r#   test_returned_value_consistencyr{      s     ))


"CBX&A++a+/K++a+/K!!#D){0%d+q&eU####%"**bjj!9:::::r"   c           	          [         R                  " / SQ5      n[         R                  R                  SSS9n[	        U UUUUUS9  g )Nr@   rA   rB   r   )a_npb_np)r6   r7   rE   rF   r   )r   array_namespacedevice_name
dtype_namerH   rJ   s         r#   #check_array_api_unsupervised_metricr      sF     XX+,F
		"7+Ar"   c              #   Z   #    U R                  5        H  u  pU H  nX4v   M
     M     g 7fr   )items)metric_checkersr   checkerscheckers       r#   !yield_metric_checker_combinationsr     s-     +113G/!   4s   )+z(array_namespace, device_name, dtype_namezmetric, check_funcc                     U" XX#5        g r   r!   )r   r   r   r   
check_funcs        r#   test_array_api_compliancer     s     v@r"   )7	functoolsr   	itertoolsr   numpyr6   r'   sklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   !sklearn.metrics.tests.test_commonr   sklearn.utils._array_apir   sklearn.utils._testingr   r    rD   r   r   NORMALIZED_METRICSrE   rt   rx   rF   r+   r,   r$   markparametrizer-   r0   r>   rK   rb   valuesrf   dictr   rp   r{   r   array_api_metric_checkersr   r   )rq   s   0r#   <module>r      s           E 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;," + +	  7P " .-/ -/P/RSA T	
A] J Ns   ?I0
4I5
