
    /Ц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 SK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\R@                  RC                  S 5      r"\"RG                  SSS9r$\"RG                  SSS9r%S r&\RN                  RQ                  S\ V s/ s H  o \$\%4PM	     sn 5      S 5       r)\RN                  RQ                  S\ V s/ s H  o \$\%4PM	     sn 5      S 5       r*\RN                  RQ                  S\5      S 5       r+\RN                  RQ                  S\" \\5      5      S 5       r,\RN                  RQ                  S\" \\5      5      S 5       r-\RN                  RQ                  S\R]                  5       5      S 5       r/\RN                  RQ                  S\0" \40 \D6Rc                  5       5      S 5       r2\RN                  RQ                  S\" \\5      5      S  5       r3S! r4\
\4/\\4/0r5\54S" jr6\RN                  RQ                  S#\" 5       \S$9\RN                  RQ                  S%\6" 5       5      S& 5       5       r7g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)_get_namespace_device_dtype_ids)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     h/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sklearn/metrics/cluster/tests/test_common.py"test_symmetric_non_symmetric_unionr%   b   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.   h   -      ,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_symmetryr1   p   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      r3   r3   )r   r   r   r3   r3   )r   r   r   r3      g        )r   r   r3   r3   r4   )r   r   r3   r3   r3   )r   r3   r3   r3   r3   g      ?)r   r   r   r   r   r   )r   r3   r4   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?   x   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   r3   r3   r   r3   r3   r   r3   r   r3   r3   r   r3   
      rB   r   )r7   r8   r!   r   UNSUPERVISED_METRICSrandomrandint)r+   y_labely_predr   score_1Xs         r$   test_permute_labelsrL      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   r3   r3   r3   r3   )r   r3   r4   r   r5   r6      rD   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 strsr3   zincluding negative intszstrictly positive ints)r7   r8   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	rB   )   rB   r   )r!   ziprE   r7   rF   rG   astypefloat)r+   y_truerI   rV   r   rJ   
y_true_gen
y_pred_gen
y_true_fmtfmt_name
y_pred_fmt_rK   s                r$   test_format_invariancerc      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   r3   )r3   r   )r3   r3   r"   )r   ijs      r$   test_single_samplerg      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   r3   rB   )r4   rB   r   zcontains (NaN|infinity))match)	r!   r7   infnanrF   rG   r(   raises
ValueError)r+   metric_funcinvalidsrK   argss        r$   test_inf_nan_inputrq      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   rB   )   rB   r   r   )rt   N)
r7   rF   RandomStaterG   r!   rE   
isinstancer[   float64float32)rr   rngrK   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 )NrA   rB   rC   r   )a_npb_np)r7   r8   rF   rG   r   )r   array_namespacedevice
dtype_namerI   rK   s         r$   #check_array_api_unsupervised_metricr      sD    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, dtype_name)idszmetric, check_funcc                     U" XX#5        g r   r"   )r   r   r   r   
check_funcs        r$   test_array_api_compliancer     s     v;r#   )8	functoolsr   	itertoolsr   numpyr7   r(   sklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   !sklearn.metrics.tests.test_commonr   sklearn.utils._array_apir   r   sklearn.utils._testingr   r!   rE   r   r    NORMALIZED_METRICSrF   ru   ry   rG   r,   r-   r%   markparametrizer.   r1   r?   rL   rc   valuesrg   dictr   rq   r|   r   array_api_metric_checkersr   r   )rr   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< T<[ J Ns   I1
6I6
