
    ri-%              
          d dl mZ d dlmZ d dlZd dl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 d dlmZ d dlmZmZ d dlmZ ee	eeeeeeed	Ze eed	
      e
edZg dZddgZg dZej@                  jC                  d       Z"e"jG                  dd      Z$e"jG                  dd      Z%d Z&ejN                  jQ                  deD  cg c]  } | e$e%f	 c}       d        Z)ejN                  jQ                  deD  cg c]  } | e$e%f	 c}       d        Z*ejN                  jQ                  de      d        Z+ejN                  jQ                  d eee            d        Z,ejN                  jQ                  d eee            d        Z-ejN                  jQ                  dej]                               d        Z/ejN                  jQ                  d e0efi ejc                               d        Z2ejN                  jQ                  d eee            d         Z3d! Z4e
e4gee4giZ5e5fd"Z6ejN                  jQ                  d# e       e$      ejN                  jQ                  d% e6             d&               Z7yc c} w c c} w )'    )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                  T    t        t        t        z         t        t              k(  sJ y N)sortedSYMMETRIC_METRICSNON_SYMMETRIC_METRICSSUPERVISED_METRICS     g/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_common.py"test_symmetric_non_symmetric_unionr%   b   s+    #&;;<A   r#   zmetric_name, y1, y2c                 f    t         |    } |||      t        j                   |||            k(  sJ y r   r!   pytestapproxmetric_namey1y2r   s       r$   test_symmetryr.   h   1      ,F"b>V]]6"b>::::r#   c                 f    t         |    } |||      t        j                   |||            k7  sJ y r   r'   r*   s       r$   test_non_symmetryr1   p   r/   r#   r+   c                 |   g d}g d}t         |    } |g dg d      dkD  sJ  |g dg d      dkD  sJ  |g dg d      dk  sJ  |g dg d      dk  sJ  |||      t        j                  d      k(  sJ g d	}g d
}t        j                   |||       |||      g      }|dk  j                         rJ y )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                    t        j                  g d      }t        j                  g d      }| t        v rXt        |    } |||      }t        | |d|z
  |             t        | |d|z
  d|z
               t        | ||d|z
               y t        |    }t         j
                  j                  dd      } |||      }t        | ||d|z
               y )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/F#1v:!67r#   c                    g d}g d}d }| t         v rKt         |    } |||      } ||      } ||      }t        ||      D ]  \  \  }}	\  }
}| |||
      k(  rJ  y t        |    }t        j                  j                  dd      } |||      }| ||j                  t              |      k(  sJ  ||      }|D ]  \  }}	| |||      k(  rJ  y )N)r   r   r   r   r3   r3   r3   r3   )r   r3   r4   r   r5   r6      rD   c              3     K   t        j                  |       } | df | j                         df | j                         D cg c]  }t        |      dz    c}df t        j                  | j                         D cg c]  }t        |      dz    c}t              df | dz
  df | dz   d	f y c c}w c c}w w)
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_formatsz0test_format_invariance.<locals>.generate_formats   s     HHQK  hhj.((&'hhj1s1v}1>AAHHQXXZ8c!ftm8G
 	
 !e...!e--- 28s   ACB:(CB?.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_invariancerb      s    &F%F
. ((#K0(%f-
%f-
7::z7R 	=3"ZOZfZ<<<<	= &k2IIbw/F#&%&9999%f-
$. 	4 JfQ
3333	4r#   r   c                 .    dD ]  \  }} | |g|g        y )N))r   r   )r   r3   )r3   r   )r3   r3   r"   )r   ijs      r$   test_single_samplerf      s%     1 1sQCr#   zmetric_name, metric_funcc                 r   | t         v rlddgt        j                  t        j                  gfddgt        j                  t        j                  gfddgt        j                  t        j                  gfg}nt        j                  j                  dd      }|t        j                  t        j                  gf|t        j                  t        j                  gf|t        j                  t        j                  gfg}t        j                  t        d      5  |D ]  } ||  	 	 d d d        y # 1 sw Y   y xY w)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_inputrp      s     ((Vbffbff%&Vbffbff%&Vbffbff%&
 IIbw/()A/?+@1rvvrvvFVBWX	z)C	D  	D	  s   D--D6namec                    t         j                  j                  d      }|j                  dd      }|j                  ddd      }|j                  ddd      }| t        v rt        |    } |||      }nt
        |    } |||      }t        |t              sJ t        |t         j                  t         j                  f      rJ y)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   )rs   N)
r7   rF   RandomStaterG   r!   rE   
isinstancerZ   float64float32)rq   rngrK   labels_truelabels_predr   r>   s          r$   test_returned_value_consistencyr{      s     ))


"CBX&A++a+/K++a+/K!!#D){K0%d+q+&eU###%"**bjj!9::::r#   c                     t        j                  g d      }t         j                  j                  dd      }t	        | |||||       y )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              #   V   K   | j                         D ]  \  }}|D ]  }||f 
  y wr   )items)metric_checkersr   checkerscheckers       r$   !yield_metric_checker_combinationsr   
  s<     +113 " 	"G'/!	""s   ')z#array_namespace, device, dtype_name)idszmetric, check_funcc                      || |||       y 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   rt   rx   rG   r,   r-   r%   markparametrizer.   r1   r?   rL   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ItT2rNI;;
 7LMtT2rN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   
I8
=I=
