
    -i-                       S SK r S SKJr  S SKJr  S SKJrJrJr  S SK	r
S SKrS SKJr  S SKJr  S SKJ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JrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>  S S	K?J@r@  S S
KAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrL  S SKMJNrN  S SKOJPrP  S SKQJRrRJSrSJTrTJUrU  S SKVJWrWJXrXJYrYJZrZJ[r[J\r\  S SK]J^r^J_r_J`r`  S SKaJbrb  S SKcJdrdJere  0 S\)_S\*_S\/_S\0_S\-_S\2_S\+_S\_S\" \7SS9_S\;_S\<_S\" \1S S 9_S!\._S"\,_S#\" \1S$S 9_S%\" \S$S 9_S&\_S'\0Erf0 S(\_S)\_S*\" \S+S,9_S-\" \S.S/9_S0\_S1S2 _S3\3_S4\" \3S+S59_S6\"_S7\>_S8\" \>S.S/9_S9\$_S:\6_S;\8_S<\ _S=\" \!S>S?9_S@\" \!SAS?9_0 SB\(_SC\" \!SDSASE9_SF\" \ SDSG9_SH\" \!SDS>SE9_SI\" \6SDSG9_SJ\" \8SDSG9_SK\" \$SDSG9_SL\" \!SMSASE9_SN\" \ SMSG9_SO\" \!SMS>SE9_SP\" \6SMSG9_SQ\" \8SMSG9_SR\" \$SMSG9_SS\" \!STSASE9_SU\" \ STSG9_SV\" \!STS>SE9_SW\" \6STSG9_E\" \8STSG9\" \$STSG9\" \!SXSASE9\" \ SXSG9\" \!SXS>SE9\" \6SXSG9\" \8SXSG9\" \$SXSG9\SY.	ErgSZ rh\:\h\S[.ri0 S\\_S]\&_S^\'_S_\" \'S.S/9_S`\#_Sa\_Sb\9_Sc\" \9SDSG9_Sd\" \9SXSG9_Se\" \9SMSG9_Sf\" \9STSgSh9_Si\" \9SDSgSh9_Sj\" \9STSkSh9_Sl\" \9SDSkSh9_Sm\" \9SASn9_So\_Sp\" \SDSG9_\" \SXSG9\" \SMSG9\%\4\\=Sq.Erj\k" 5       rl\lR                  \j5        \lR                  \g5        \lR                  \f5        \lR                  \i5        1 Srkrn1 Sskro\nR                  \o5      rq1 Stkrr1 Sukrs1 Svkrt1 Swkru1 Sxkrv1 Sykrw1 Szkrx1 S{kry1 S|krz1 S}kr{1 S~kr|1 Skr}SS1r~S rS rS r\GR                  GR                  S\" \z5      5      S 5       r\GR                  GR                  S\" \{5      5      S 5       rS r\GR                  GR                  S\" \" \l5      \q-
  5      5      S 5       rS r\GR                  GR                  S\" \" \l5      \q-
  5      5      S 5       r\GR                  GR                  S\" \" \g5      \q-
  5      5      S 5       r\GR                  GR                  S\j5      S 5       rS S/\
GR                  \
GR                  /4S S/\
GR                  \
GR                  /4S S/\
GR                  \
GR                  /4S S/\
GR                  S/4S S/\
GR                  S/4/r\GR                  GR                  S\" \jGR#                  5       \fGR#                  5       5      5      \GR                  GR                  S\5      S 5       5       r\GR                  GR                  S\gGR#                  5       5      \GR                  GR                  S\\
GR                  SS>// SQ4\
GR                  SS>// SQ4/-   5      S 5       5       r\GR                  GR                  S\gGR#                  5       5      S 5       rS rS r\GR                  GR/                  S5      \GR                  GR                  S\" \" \l5      \q-
  \" \j5      -
  5      5      S 5       5       r\GR                  GR/                  S5      \GR                  GR                  S\" \y\x-  5      5      S 5       5       r\GR                  GR                  S\" \y5      5      S 5       r\GR                  GR                  S\" \y5      5      S 5       r\GR                  GR/                  S5      \GR                  GR                  S\^5      S 5       5       r\GR                  GR                  S\" \x5      5      S 5       r\GR                  GR                  S\" \v5      5      S 5       r\GR                  GR                  S\" \v5      5      S 5       r\GR                  GR                  S\" \vGRA                  \x5      5      5      S 5       rS rS r\GR                  GR                  S\" \r5      5      S 5       r\GR                  GR                  S\" \r\s-  5      5      S 5       r\GR                  GR                  S\" \r5      5      S 5       rS r\GR                  GR                  S\" \r5      5      S 5       rS r\GR                  GR                  S\" \" \l5      GRA                  \" \f5      5      \|-
  5      5      S 5       r\GR                  GR                  S\" \" \l5      GRA                  \" \f5      5      \|-
  5      5      S 5       r\GR                  GR                  S\" \" \l5      \" \f5      -
  \|-
  \n-
  5      5      S 5       r\GR                  GR                  S\" \" \l5      \" \f5      -
  \|-
  \q-
  5      5      S 5       r\GR                  GR                  S\" \x\w-  \|-
  5      5      S 5       r\GR                  GR                  S\" \y\|-
  5      5      S 5       rS r\GR                  GR                  S\" \xS31-
  5      5      S 5       r\GR                  GR                  S\" \w\y-  5      5      S 5       r\GR                  GR                  S\" \" \j5      \q-
  5      5      S 5       r\GR                  GR                  S\g5      S 5       r\GR                  GR                  S\S+4\S+4\ S.4\" \!SS?9S.4\$S.4\5S+4\6S.4\8S.4\:S+4/	5      \GR                  GR                  S\\/5      S 5       5       rS rS rS rS rS rS rS r0 \\\\/_\ \\\/_\!\\/_\$\\\/_\3\\\/_\6\\\/_\8\\\/_\>\\\/_\"\\\/_\1\/_\" \1SS 9\/_\" \1SS 9\/_\7\\/_\E\/_\\\/_\*\\/_\-\\/_0 \/\\/_\0\\/_\\/_\H\/_\.\/_\B\/_\,\/_\)\/_\+\\/_\C\/_\I\/_\D\/_\F\/_\G\/_\J\/_\K\/_\;\\/_E\<\\/\L\/0Er\4S jr\GR                  GR                  S\U" 5       \TS9\GR                  GR                  S\" 5       5      S 5       5       r\GR                  GR                  SSS/5      \GR                  GR                  S\" \l5      5      S 5       5       rS r\GR                  GR                  S\" \l5      5      S 5       rg)    N)partial)	signature)chainpermutationsproduct)config_context)make_multilabel_classification)UndefinedMetricWarning),accuracy_scoreaverage_precision_scorebalanced_accuracy_scorebrier_score_losscohen_kappa_scoreconfusion_matrixcoverage_errord2_absolute_error_scored2_pinball_scored2_tweedie_score	dcg_score	det_curveexplained_variance_scoref1_scorefbeta_scorehamming_loss
hinge_lossjaccard_score%label_ranking_average_precision_scorelabel_ranking_losslog_lossmatthews_corrcoef	max_errormean_absolute_errormean_absolute_percentage_errormean_gamma_deviancemean_pinball_lossmean_poisson_deviancemean_squared_errormean_squared_log_errormean_tweedie_deviancemedian_absolute_errormultilabel_confusion_matrix
ndcg_scoreprecision_recall_curveprecision_scorer2_scorerecall_scoreroc_auc_score	roc_curveroot_mean_squared_errorroot_mean_squared_log_errortop_k_accuracy_scorezero_one_loss)_average_binary_score)additive_chi2_kernelchi2_kernelcosine_distancescosine_similarityeuclidean_distanceslinear_kernelpaired_cosine_distancespaired_euclidean_distancespolynomial_kernel
rbf_kernelsigmoid_kernel)LabelBinarizer)shuffle)_atol_for_type_convert_to_numpy_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_allcloseassert_almost_equalassert_array_equalassert_array_lessignore_warnings)COO_CONTAINERSparse_version
sp_version)type_of_target)_num_samplescheck_random_stater!   r"   r'   r(   r%   r*   r#   r   r/   variance_weighted)multioutputr3   r4   mean_normal_deviance)powerr&   r$   mean_compound_poisson_deviancegffffff?r   r   r   r   r    adjusted_balanced_accuracy_scoreT)adjustedunnormalized_accuracy_scoreF	normalizeunnormalized_confusion_matrixnormalized_confusion_matrixc                      [        U 0 UD6R                  S5      [        U 0 UD6R                  SS9S S 2[        R                  4   -  $ )Nfloat   axis)r   astypesumnpnewaxis)argskwargss     T/var/www/html/venv/lib/python3.13/site-packages/sklearn/metrics/tests/test_common.py<lambda>rm      sH    $)&)009
D
+F
+
/
/Q
/
72::
F	G    (unnormalized_multilabel_confusion_matrix/unnormalized_multilabel_confusion_matrix_sample)
samplewiser   r6   unnormalized_zero_one_lossr   r.   r0   r   f2_score   )beta
f0.5_score      ?matthews_corrcoef_scoreweighted_f0.5_scoreweightedaverageru   weighted_f1_scorer|   weighted_f2_scoreweighted_precision_scoreweighted_recall_scoreweighted_jaccard_scoremicro_f0.5_scoremicromicro_f1_scoremicro_f2_scoremicro_precision_scoremicro_recall_scoremicro_jaccard_scoremacro_f0.5_scoremacromacro_f1_scoremacro_f2_scoremacro_precision_scoresamples)	macro_recall_scoremacro_jaccard_scoresamples_f0.5_scoresamples_f1_scoresamples_f2_scoresamples_precision_scoresamples_recall_scoresamples_jaccard_scorer   c                     [        U 0 UD6u  p#n[        U5      [        U5      -
  n[        R                  " UU[        R                  " UR                  [        R                  5      SU4S[        R                  /S9/5      $ )a  
The dimensions of precision-recall pairs and the threshold array as
returned by the precision_recall_curve do not match. See
func:`sklearn.metrics.precision_recall_curve`

This prevents implicit conversion of return value triple to an higher
dimensional np.array of dtype('float64') (it will be of dtype('object)
instead). This again is needed for assert_array_equal to work correctly.

As a workaround we pad the threshold array with NaN values to match
the dimension of precision and recall arrays respectively.
r   constant)	pad_widthmodeconstant_values)r-   lenrh   arraypadrf   float64nan)rj   rk   	precisionrecall
thresholdspad_threshholdss         rl   (precision_recall_curve_padded_thresholdsr      sx     %;D$KF$K!Iz)ns:6O88FF!!"**-o.!#			
 rn   )r2   r-   r   r   r   r   unnormalized_log_lossr   r   r1   weighted_roc_aucsamples_roc_aucmicro_roc_aucovr_roc_aucovr)r|   multi_classweighted_ovr_roc_aucovo_roc_aucovoweighted_ovo_roc_aucpartial_roc_auc)max_fprr    weighted_average_precision_score)samples_average_precision_scoremicro_average_precision_scorer   r,   r   r5   >   r   r,   r   r   r   r   r   r   r   r   rp   r   >   r   rs   r   r2   r0   r   r   r1   r   r.   r   r   r-   rv   >   r   rs   r0   r   r.   rv   >   r1   r   r   >   r   rs   r   r2   r0   r   r.   r   r-   r   r   r   r   rv   >"   r   rs   r   r   r2   r0   r   r   r   r   r   r.   r   r   r}   r   r   r   r   r   r   r   r   r-   r   r   r`   r_   ro   rp   rv   r   r   ry   >   r6   r   r5   >   r   r   r,   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   >   r   r6   r   r   r   r   r   r   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r\   ro   r   r   r   ry   >   r/   r   r%   r'   r"   r*   r(   r   r3   r   r4   r#   >   r   r!   r   r   r6   r   r   r   r   r   r%   r'   r   r   r"   r   rW   r*   r   r   r   r(   rx   r3   rr   r4   r\   r   >   rs   r/   r   r2   r   r0   r   r.   r   r   r}   r   r   r$   r   r&   r-   r   r   r   r   r   r`   r_   r#   rY   rZ   ro   rv   r   ry   >   r!   r   r   r*   >   r   r$   r&   rY   c                     [        [        U R                  5       UR                  5       5      5      S-   nX-  n X-  nX4$ )zMake targets strictly positiverc   )absminy1y2offsets      rl   _require_positive_targetsr   B  s9    RVVXrvvx()A-FLBLB6Mrn   c                     [        [        U R                  5       UR                  5       5      5      S-
  nU R                  [        R                  5      n UR                  [        R                  5      nX-  n X-  nX4$ )z$Make targets strictly larger than -1gGz?)r   r   rf   rh   r   r   s      rl   _require_log1p_targetsr   J  s]    RVVXrvvx()D0F	2::	B	2::	BLBLB6Mrn   c                      [         [        -  [        [        5      -  [        -  [        [
        5      :X  d   e[         [        -  [        5       :X  d   eg N)SYMMETRIC_METRICSNOT_SYMMETRIC_METRICSsetTHRESHOLDED_METRICS"METRIC_UNDEFINED_BINARY_MULTICLASSALL_METRICS rn   rl   test_symmetry_consistencyr   T  sX     	
	 
!
"	# -	- 
[	    55#%???rn   namec                    [        S5      nUR                  SSSS9nUR                  SSSS9nU [        ;   a  [        X#5      u  p#OU [        ;   a  [        X#5      u  p#UR                  SSSS9nUR                  SSSS9n[        U    nU [        ;   a,  U [        ;   a  [        U" XE5      U" XT5      SU -  S9  g  S5       e[        U" X#5      U" X25      SU -  S9  g )	Nr   rt      sizer      z%s is not symmetricerr_msgz This case is currently unhandled)
rT   randintMETRICS_REQUIRE_POSITIVE_Yr   METRICS_WITH_LOG1P_Yr   r   METRIC_UNDEFINED_BINARYMULTILABELS_METRICSrJ   )r   random_statey_truey_pred
y_true_bin
y_pred_binmetrics          rl   test_symmetric_metricr   `  s     &a(L!!!QU!3F!!!QU!3F))26B	%	%/?%%a%:J%%a%:JF&&&&z.z.-4 =<<56"6")D0	
rn   c                 N   [        S5      n[        U    nSn[        S5       Hk  nUR                  SSSS9nUR                  SSSS9nU [        ;   a  [        XV5      u  pVU" XV5      nU" Xe5      n[        R                  " Xx5      (       a  Mi  Sn  O   U(       a  [        U  S35      eg )	Nr   T   rt   r   r   F seems to be symmetric)	rT   r   ranger   r   r   rh   allclose
ValueError)	r   r   r   always_symmetric_r   r   nominalswappeds	            rl   test_not_symmetric_metricr     s     &a(LF
 1X%%a%7%%a%7--6vFNF(({{7,,$  D6!7899 rn   c                  <   Sn Sn[        U 5        [        R                  " [        U S3S9   [        U5        S S S 5        [	        U5        [        R                  " [
        U  S3S9   [	        U 5        S S S 5        g ! , (       d  f       NJ= f! , (       d  f       g = f)Nr   r0   z is not symmetricmatchr   )r   pytestraisesAssertionErrorr   r   )symnot_syms     rl   test_symmetry_testsr     s    
CG #	~y8I-J	Kg& 
L g&	zC50F)G	H!#& 
I	H 
L	K
 
I	Hs   A<'B<
B

Bc                 b   [        S5      nUR                  SSSS9nUR                  SSSS9nU [        ;   a  [        X#5      u  p#OU [        ;   a  [        X#5      u  p#[        X#SS9u  pE[        5          [        U    n[        U" X#5      U" XE5      SU -  S9  S S S 5        g ! , (       d  f       g = f)Nr   rt   r   r   r    %s is not sample order invariantr   )
rT   r   r   r   r   r   rD   rN   r   rJ   )r   r   r   r   y_true_shuffley_pred_shuffler   s          rl   test_sample_order_invariancer     s     &a(L!!!QU!3F!!!QU!3F))26B	%	%/?%,V!%L"N		T"6">26=	
 
		s   3$B  
B.c                  $   [        S5      n U R                  SSSS9nU R                  SSSS9nU R                  UR                  S9nX3R	                  SSS9-  n[        XUSS9u  pEn[         H&  n[        U   n[        U" X5      U" XE5      S	U-  S
9  M(     [         H&  n[        U   n[        U" X5      U" XF5      S	U-  S
9  M(     [         H@  n[        U   n[        U" X5      U" XF5      S	U-  S
9  [        U" X5      U" XE5      S	U-  S
9  MB     g )Nr   rt   r   r   rc   Tre   keepdimsr   r   r   )rT   r   uniformshaperg   rD   r   r   rJ   THRESHOLDED_MULTILABEL_METRICSMULTIOUTPUT_METRICS)	r   r   r   y_scorer   r   y_score_shuffler   r   s	            rl   7test_sample_order_invariance_multilabel_and_multioutputr    sD   %a(L !!!QX!6F!!!QX!6F"""5G {{D{11G6=a73NO $T"6">26=	
 $ /T"6#>36=	
 / $T"6#>36=	

 	6">26=	
 $rn   c                 b   [        S5      nUR                  SSSS9nUR                  SSSS9nU [        ;   a  [        X#5      u  p#OU [        ;   a  [        X#5      u  p#[        U5      n[        U5      n[        R                  " U5      [        R                  " U5      pv[        UR                  S5        [        UR                  S5        [        R                  " US5      n[        R                  " US5      n	[        R                  " US5      n
[        R                  " US5      n[        5          [        U    nU" X#5      n[        U" XE5      USU -  S	9  [        U" Xg5      US
U -  S	9  [        U" X5      USU -  S	9  [        U" Xe5      USU -  S	9  [        U" XG5      USU -  S	9  [        U" Xi5      USU -  S	9  [        U" X5      USU -  S	9  [        U" XI5      USU -  S	9  [        U" X5      USU -  S	9  [        R                   " ["        5         U" Xk5        S S S 5        [        R                   " ["        5         U" X5        S S S 5        [        R                   " ["        5         U" XK5        S S S 5        [        R                   " ["        5         U" X5        S S S 5        [        R                   " ["        5         U" X5        S S S 5        [        R                   " ["        5         U" X5        S S S 5        U [$        [&        -  [(        -  ;  ay  SU ;   aH  [        R*                  " [,        5         [.        R0                  " U" X5      5      (       d   e S S S 5        O+[        R                   " ["        5         U" X5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNg= f! , (       d  f       GNN= f! , (       d  f       GN5= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   rt   r   r   rc   )rc   )rc   r  z,%s is not representation invariant with listr   z3%s is not representation invariant with np-array-1dz7%s is not representation invariant with np-array-columnz@%s is not representation invariant with mix np-array-1d and listzK%s is not representation invariant with mix np-array-1d and np-array-columnzD%s is not representation invariant with mix list and np-array-columnroc_auc)rT   r   r   r   r   r   listrh   r   rL   ndimreshaperN   r   rJ   r   r   r   r  r   r   warnsr
   mathisnan)r   r   r   r   y1_listy2_listy1_1dy2_1d	y1_column	y2_columny1_rowy2_rowr   measures                 rl   &test_format_invariance_with_1d_vectorsr    s}    &a(L			a		/B			a		/B))*22B	%	%'/2hG2hG88B<"5uzz1%uzz1%

5'*I

5'*IZZw'FZZw'F		T".7$BTI	
 	5 IDP	
 	9(MPTT	
 	5"V	
 	7"V	
 	5$2 		
 	9$2 		
 	7&V	
 	9&V	
 ]]:&5! ']]:&6! ']]:&7# ']]:&6# ']]:&9% ']]:&6% '
 "@@CVV
 D  \\"89::fV&<==== :9 ]]:.6* /K 
	Z '&&&&&&&&&&& :9 /.K 
	s   0C P 	N"P ;	N$"P &	N6/"P 	O"P <	O"P '	O,0A P 0$O>#P 8	PP 
N!	P $
N3	.P 6
O	 P 
O	P 
O)	$P ,
O;	6P >
P	P 
P	P  
P.c                    [        S5      nUR                  SSSS9nUR                  SSSS9n[        R                  " SS/5      U   n[        R                  " SS/5      U   nSnSS/n[	        5          [
        U    nU" X#5      n	Un
U [        ;   a	  [        XS9n
U
" XE5      n[        U	USR                  U 5      S	9  U
" UR                  S
5      UR                  S
5      5      n[        U	USR                  U 5      S	9  U [        ;   al  [        XS9n
U
" XE5      n[        U	USR                  U 5      S	9  U
" UR                  S
5      UR                  S
5      5      n[        U	USR                  U 5      S	9  S S S 5        g ! , (       d  f       g = f)Nr   rt   r   r   eggsspam	pos_label+{0} failed string vs number invariance testr   O2{0} failed string object vs number invariance test)labelsz,{0} failed string vs number  invariance test)rT   r   rh   r   rN   CLASSIFICATION_METRICSMETRICS_WITH_POS_LABELr   rL   formatrf   METRICS_WITH_LABELS)r   r   r   r   y1_stry2_strpos_label_str
labels_strr   measure_with_number
metric_strmeasure_with_strmeasure_with_strobjs                rl   7test_classification_invariance_string_vs_numbers_labelsr-  s  s   
 &a(L			a		/B			a		/BXXvv&'+FXXvv&'+FM&!J		'-$Rn 
)) EJ%f5AHHN	
 )s);V]]3=OPHOOPTU	
 && ?J)&9# FMMdS #-V]]3-?sAS"T##FMMdSE 
		s   4D E==
Fc                    [        S5      nUR                  SSSS9nUR                  SSSS9n[        R                  " SS/5      U   nSn[	        5          [
        U    nU [        ;  ar  UnU [        ;   a	  [        XuS9nU" X#5      nU" XC5      n	[        UU	SR                  U 5      S	9  U" UR                  S
5      U5      n
[        UU
SR                  U 5      S	9  Of[        R                  " [        5         U" XC5        S S S 5        [        R                  " [        5         U" UR                  S
5      U5        S S S 5        S S S 5        g ! , (       d  f       NR= f! , (       d  f       N(= f! , (       d  f       g = f)Nr   rt   r   r   r  r  r  r  r   r  r  )rT   r   rh   r   rN   r   r   r"  r   rL   r#  rf   r   r   r   )r   r   r   r   r%  r'  r   r*  r)  r+  r,  s              rl   4test_thresholded_invariance_string_vs_numbers_labelsr/    sR    &a(L			a		/B			a		/BXXvv&'+FM		$T*..J--$ZI
"(.)&5# ELLTR #-V]]3-?"D##LSS z*v" +z*v}}S)2. +9 
	4 +***9 
	s=   B E,5	E
>"E, E9E,

E	E,
E)	%E,,
E:rc   r   zy_true, y_scorec                     U [         :X  a  U/nU/n[        R                  " [        SS9   U " X5        S S S 5        g ! , (       d  f       g = f)Nzcontains (NaN|infinity)r   )r   r   r   r   )r   r   r  s      rl   )test_regression_thresholded_inf_nan_inputr1    s>     )	z)C	Dv 
E	D	Ds	   	<
A
)rc   rt      c                    [         R                  " U5      R                  5       (       d1  Sn[         R                  " U5      R	                  5       (       a  SnO3SnO0Sn[         R                  " U5      R	                  5       (       a  SnOSnSU SU 3n[
        R                  " [        US9   U " X5        SSS5        g! , (       d  f       g= f)	zwcheck that classification metrics raise a message mentioning the
occurrence of non-finite values in the target vectors.r   NaNzinfinity or a value too larger   zInput z
 contains r   N)rh   isfiniteallr  anyr   r   r   )r   r   r  
input_nameunexpected_valuer   s         rl   !test_classification_inf_nan_inputr:    s      ;;v""$$
88F!!$>
88G  ""$>zl*-=,>?G	z	1v 
2	1	1s   ,	B>>
Cc                     / SQ/ SQp!Sn[         R                  " [        US9   U " X5        SSS5        g! , (       d  f       g= f)zkcheck that classification metrics raise a message of mixed type data
with continuous/binary target vectors.)abr<  皙?皙?333333?zJClassification metrics can't handle a mix of binary and continuous targetsr   N)r   r   r   )r   r   r  r   s       rl   +test_classification_binary_continuous_inputrB    s7     &GT  
z	1v 
2	1	1s	   	5
Ac                     [         U    nU [        ;   a  SS/nOU [        ;   a  SS/nOSS/n[        USS9 H  u  p4U" U/U/5        M     g )Nrc   rt   gffffffr   repeat)r   r   r   r   )r   r   valuesijs        rl   check_single_samplerI    s^    
 F ))Q	%	%Qq)sQC *rn   c                     [         U    n[        SS/SS9 H;  u  p#pEU" [        R                  " X#//5      [        R                  " XE//5      5        M=     g )Nr   rc      rD  )r   r   rh   r   )r   r   rG  rH  kls         rl   check_single_sample_multioutputrN  -  sI    Fq!fQ/
arxx!!288aVH#56 0rn   ignorec                     [        U 5        g r   )rI  r   s    rl   test_single_samplerR  4  s     rn   c                     [        U 5        g r   )rN  rQ  s    rl   test_single_sample_multioutputrT  D  s     $D)rn   c                 
   [         R                  " / SQ/ SQ/ SQ/5      n[         R                  " SS/SS/SS//5      n[        U    n[        R                  " [
        5         U" X5        S S S 5        g ! , (       d  f       g = f)N)rc   r   r   rc   )r   rc   rc   rc   )rc   rc   r   rc   r   rc   rh   r   r   r   r   r   )r   r   r   r   s       rl   (test_multioutput_number_of_output_differrW  J  sb    XX|\<@AFXX1v1v1v./FF	z	"v 
#	"	"s   "	A44
Bc           	      &   [        S5      nUR                  SSSS9nUR                  SSSS9n[        U    nU" X#5      n[        S5       HD  nUR	                  UR
                  S   5      n[        U" US S 2U4   US S 2U4   5      USU -  S9  MF     g )	Nr   rt   r   r   r   r2  rc   z'%s is not dimension shuffling invariantr   )rT   r   r   r   permutationr   rJ   )r   r   r   r   r   errorr   perms           rl   =test_multioutput_regression_invariance_to_dimension_shufflingr]  T  s     &a(L!!!QW!5F!!!QW!5FF6"E1X''Q86!T'?F1d7O4=F	
 rn   z1ignore::sklearn.exceptions.UndefinedMetricWarningcoo_containerc                    SnSn[        SUSUSS9u  p4[        SUSUSS9u  p5[        R                  " US/U-  //5      n[        R                  " US/U-  //5      nU " U5      nU " U5      n[        U5      n[        U5      n	U V
s/ s H  n
[        U
5      PM     nn
U	 V
s/ s H  n
[        U
5      PM     nn
[         Hr  n[
        U   n[        U[        5      (       a  SUl        Xl	        U" XE5      n[        U" Xg5      USU-  S	9  [        U" X5      US
U-  S	9  [        U" X5      USU-  S	9  Mt     g s  sn
f s  sn
f )NrK  2   rc   r   T
n_features	n_classesr   	n_samplesallow_unlabeledtmpzO%s failed representation invariance between dense and sparse indicator formats.r   z\%s failed representation invariance  between dense array and list of list indicator formats.zW%s failed representation invariance  between dense and list of array indicator formats.)r	   rh   vstackr  r   r   
isinstancer   
__module____name__rJ   rK   )r^  rc  rd  r   r   r   y1_sparse_indicatory2_sparse_indicatory1_list_array_indicatory2_list_array_indicatorr<  y1_list_list_indicatory2_list_list_indicatorr   r   r  s                   rl   )test_multilabel_representation_invariancerq  g  s    II*EA +EA 
B!y)*	+B	B!y)*	+B'+'+"2h"2h/FG/F!d1g/FG/FG/F!d1g/FG#T" fg&& %F"O. 	&<6 		
 	)B% 		
 	*D% 		
= $ HGs   D6"D;c           	          S/S/SS/// SQ/ /S/[         R                  " / SS//SS9/n[        U    nU H.  n[        R                  " [
        5         U" X35        S S S 5        M0     g ! , (       d  f       MB  = f)Nrc   rt   r   )r   rt   )r   rc   r   objectdtyperV  )r   multilabel_sequencesr   seqs       rl   +test_raise_value_error_multilabel_sequencesrx    sz     qcAq6		
"q!fX. F#]]:&3 '& $&&s   	A((
A7	c                    SnSn[        S5      nUR                  SX4S9nUR                  SX4S9nUR                  UR                  S9n[        U    nU [
        ;   a  UOUnU" XHSS9n	U" XHSS9n
[        SU	-  SS	S
9  [        U	X-  SU  3S
9  g )Nrt   r   r   r   Tr]   F      0We failed to test correctly the normalize optionr   Failed with )rT   r   normalr   r   r   rM   rJ   r   rc  rd  r   r   r   r  metricspredmeasure_normalizedmeasure_not_normalizeds              rl   +test_normalize_option_binary_classificationr    s     II%a(L!!!Y\!BF!!!Y\!BF!!v||!4G$G117vD >$VUC!!	B *tf%rn   c                    SnSn[        S5      nUR                  SX4S9nUR                  SX4S9nUR                  X!4S9n[        U    nU [        ;   a  UOUnU" XHSS9n	U" XHSS9n
[        SU	-  SS	S
9  [        U	X-  SU  3S
9  g )NrK  r   r   r   Tr]   Frz  r{  r   r|  )rT   r   r   r   r   rM   rJ   r~  s              rl   /test_normalize_option_multiclass_classificationr    s     II%a(L!!!Y\!BF!!!Y\!BF""(>"?G$G117vD >$VUC!!	B *tf%rn   c                 :   SnSn[        S5      n[        SUSSUS9u  pE[        SUSSUS9u  pFUR                  UR                  S9nUS/U-  -  nUS/U-  -  n[        U    nU [
        ;   a  UOUn	U" XYSS9n
U" XYS	S9n[        S
U
-  SSS9  [        U
X-  SU  3S9  g )NrK  d   r   rc   T)rb  rc  r   re  rd  r   r]   Frz  r{  r   r|  )rT   r	   r   r   r   r   rM   rJ   )r   rc  rd  r   r   r   r   r  r  r  r  r  s               rl   /test_normalize_option_multilabel_classificationr    s    
 II%a(L /IA /IA """5G qcIoF
qcIoF$G117vD >$VUC!!	B *tf%rn   c                    UR                   u  pgU " XS S9n[        U[        U5       V	s/ s H  n	U " US S 2U	4   US S 2U	4   5      PM     sn	5        U " XSS9n
[        X" UR                  5       UR                  5       5      5        U " XSS9n[        U[        R
                  " U5      5        [        R                  " US[        S9n[        R                  " U5      S:w  a&  U " XSS9n[        U[        R                  " XS95        OU " XSS9n[        US5        U(       aL  U " XSS9n[        U[        R
                  " [        U5       V	s/ s H  n	U " X9   XI   5      PM     sn	5      5        [        R                  " [        5         U " XS	S9  S S S 5        [        R                  " [        5         U " XS
S9  S S S 5        g s  sn	f s  sn	f ! , (       d  f       NC= f! , (       d  f       g = f)Nr~   r   r   r   )re   ru  rz   )weightsr   unknowngarbage)r   rJ   r   ravelrh   meanrg   intr|   r   r   r   )r   r   r   y_true_binarizey_pred_binarizeis_multilabelrd  rc  label_measurerG  micro_measuremacro_measurer  weighted_measuresample_measures                  rl   _check_averagingr  1  s    +00I 648M 9%	
% ?1a4(/!Q$*?@%	
 67;Mvo3357L7L7NO
 67;MM277=#9: ff_1C8G	vvg!!&*E("**]*TU!&*E(!, 	BGG #9-- ?-/AB-	
 
z	"vy1 
#	z	"vy1 
#	"S	
@ 
#	"	"	"s#   !G
GG1G
G
G+c                     [        U5      R                  S5      n[        U    nU [        ;   a  [	        XqX2XF5        g U [
        ;   a  [	        XqXRXV5        g [        S5      e)N
multilabelz2Metric is not recorded as having an average option)rR   
startswithr   METRICS_WITH_AVERAGINGr  "THRESHOLDED_METRICS_WITH_AVERAGINGr   )r   r   r  r   r  r  r  r   s           rl   check_averagingr  g  sa    "6*55lCMF%%F_	
 
3	3Gg	
 MNNrn   c                    Su  p[        S5      nUR                  SX!4S9nUR                  SX!4S9nUR                  X4S9n[        5       R	                  U5      nUR                  U5      nUR                  U5      n	[        XXX5        g )N)r`  r2  r   r   )rT   r   r   rC   fit	transformr  )
r   rd  rc  r   r   r   r  lbr  r  s
             rl   test_averaging_multiclassr  x  s     I%a(L!!!Y\!BF!!!Y\!BF""(>"?G				f	%Bll6*Oll6*OD/?Trn   c                     Su  p[        SUSUSS9u  p4US S nUSS  n[        S5      R                  SU4S9nUnUn	[        XXX5        g )	N)(   r   rc   r   Fra  r   r   r   )r	   rT   r}  r  )
r   rd  rc  r   yr   r   r  r  r  s
             rl   test_averaging_multilabelr    sq     !I)DA sVFrsVF #**Y*@GOOD/?Trn   c                     [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUnUn[        XXBXS5        g Nr   r2  )rh   zerosr  r   r   r   r  r  r  s         rl   $test_averaging_multilabel_all_zeroesr    sB    XXgFXXgFhhwGOOD/?Trn   c            	          [         R                  " S5      n [         R                  " S5      nU nUnSS jn[        UU UUUSS9  g )Nr  c                 $    [        [        XU5      $ r   )r7   r.   )r   r  r|   s      rl   rm   =test_averaging_binary_multilabel_all_zeroes.<locals>.<lambda>  s    =R'>rn   T)r  )r   )rh   r  r  )r   r   r  r  binary_metrics        rl   +test_averaging_binary_multilabel_all_zeroesr    sK    XXgFXXgFOOM rn   c                     [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUnUn[        XXBXS5        g r  )rh   onesr  r  s         rl   "test_averaging_multilabel_all_onesr    sB    WWWFWWWFgggGOOD/?Trn   c                    [         R                  R                  S5      nUR                  SS[	        U5      S9nU S:X  a
  [        USS9OUnU" X#S S9n[        UU" X#[         R                  " [	        U5      S9S9S	U -  S
9  U" X#US9n[        R                  " [        5         [        Xg5        [        SU< SU< SU < 35      e! , (       d  f       O= fU" X#UR                  5       S9n[        UUSU< SU< SU < 3S
9  U" [         R                  " X%SS9[         R                  " X5SS9S S9n	[        UU	SU -  S
9  USS S2   n
[         R                  " U5      nSUS S S2'   USS S2   nUSS S2   nU" XU
S9nU" X#US9n[        UUSU< SU< SU < 3S
9  U R                  S5      (       d  S H  n[        UU" X#UU-  S9SU -  S
9  M     SR!                  [#        U5      [#        U5      [#        U5      S-  5      n[        R                  " [        US9   U" X#[         R$                  " XU/5      S9  S S S 5        g ! , (       d  f       g = f)Nr   rc   
   r   r5   )rL  sample_weight)r   zAFor %s sample_weight=None is not equivalent to sample_weight=onesr   z>Unweighted and weighted scores are unexpectedly almost equal (z) and (z) for zFWeighted scores for array and list sample_weight input are not equal (z != rd   z.Weighting %s is not equal to repeating samplesrt   zUZeroing weights does not give the same result as removing the corresponding samples (unnormalized)rt   rA  z/%s sample_weight is not invariant under scalingzJFound input variables with inconsistent numbers of samples: \[{}, {}, {}\]r   )rh   randomRandomStater   r   r   rJ   r  r   r   r   r   tolistrE  copyr  r#  rS   hstack)r   r   r   r   rngr  unweighted_scoreweighted_scoreweighted_score_listrepeat_weighted_scoresample_weight_subsetsample_weight_zeroed	y1_subset	y2_subsetweighted_score_subsetweighted_score_zeroedscalingerror_messages                     rl   check_sample_weight_invariancer    sr   
))


"CKK2CGK4M &*-C%CWVq!F bD9rRWW3r7%;<S
 B-@N 
~	&(9 ).$@
 	
 
'	& !}7K7K7MN
 .	6 #
		"!,
		"!,
 @4G )A.77=1 !114a4I14a4I",@ #29MN
 !"7	? ??>**  Gr]W-DEIDP  	##)6l2.]0Ka0O$
  
z	7rRYY/M%NO 
8	7	7s   "#C
CH>>
Ic                     Sn[        S5      nUR                  U4S9nUR                  U4S9n[        U    n[        XX45        g )Nr`  r   r   )rT   random_sampler   r  )r   rd  r   r   r   r   s         rl   (test_regression_sample_weight_invariancer  &  sQ     I%a(L''i\':F''i\':FF"4@rn   c                    Sn[        S5      nUR                  U4S9nUR                  U4S9n[        U    nUR                  US-
  4S9n[        R                  " [
        SS9   U" X4US9  S S S 5        UR                  US-  4S9R                  US45      n[        R                  " [
        S	S9   U" X4US9  S S S 5        g ! , (       d  f       N\= f! , (       d  f       g = f)
Nr`  r   r   rc   z'Found input variables with inconsistentr   r  rt   z)Sample weights must be 1D array or scalar)rT   r  r   r   r   r   r
  )r   rd  r   r   r   r   r  s          rl   *test_regression_with_invalid_sample_weightr  7  s     I%a(L''i\':F''i\':FF ..Y]4D.EM	z)R	Sv]; 
T !..Y]4D.EMM	AM 
z)T	Uv]; 
V	U 
T	S 
V	Us   #C0C
C
C c                     Sn[        S5      nUR                  SSU4S9nUR                  SSU4S9nUR                  U4S9n[        U    nU [        ;   a  [        XX55        g [        XX45        g )Nr`  r   rt   r   )rT   r   r  r   r   r  )r   rd  r   r   r   r  r   s          rl   $test_binary_sample_weight_invariancer  Q  s     I%a(L!!!Qi\!:F!!!Qi\!:F((yl(;GF""&tVE&tVDrn   c                 P   Sn[        S5      nUR                  SSU4S9nUR                  SSU4S9nUR                  US4S9n[        U    nU [        ;   aE  [
        R                  " U* 5      nXwR                  SS9R                  SS5      -  n[        XX85        g [        XX45        g )Nr`  r   r   r   r  rd   rc   )
rT   r   r  r   r   rh   exprg   r
  r  )	r   rd  r   r   r   r  r   tempy_score_norms	            rl   (test_multiclass_sample_weight_invariancer  h  s     I%a(L!!!Qi\!:F!!!Qi\!:F((y!n(=GF""vvwhhhBh/77A>>&tVJ&tVDrn   c                 `   [        S5      n[        SSSSSS9u  p#[        SSSSSS9u  p$[        R                  " X4/5      n[        R                  " X3/5      nUR	                  UR
                  S9nXwR                  SSS	9-  n[        U    nU [        ;   a  [        XXW5        g [        XXV5        g )
Nr   rc   r  r`  Fra  r   Tr   )
rT   r	   rh   rg  r   r   rg   r   r   r  )	r   r   r   yaybr   r   r  r   s	            rl   (test_multilabel_sample_weight_invariancer    s     &a(L*bRWEA +bRWEA YYx FYYx F"""5G {{D{11GF""&tVE&tVDrn   c                     [        S5      nUR                  SSSS9nUR                  SSSS9n[        U    n[        XX#5        g )Nr   rt   rY  r   )rT   r   r   r  )r   r   r   r   r   s        rl   )test_multioutput_sample_weight_invariancer    sP    
 &a(L!!!QW!5F!!!QW!5FF"4@rn   c            	         [         R                  " / SQ/ SQ/5      n [         R                  " / SQ/ SQ/5      n[         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " USS9u  pV[         HT  nX#/X/4 HG  u  pU[        ;  a  U	R
                  S	:  a  M!  [        U   n
U
" XUS S
9nU
" XS S9n[        XU   5        MI     MV     g )N)rc   rc   r   r   r   r   rc   rc   )r   rc   rc   r   )r   rc   rt   )r   rt   r2  )r2  r   rc   rt   T)return_inverserc   )r   r|   r~   )rh   r   uniquer  r   r	  r   rL   )y_true_multilabely_pred_multilabely_true_multiclassy_pred_multiclassr   r   inverse_labelsr   r   r   r   score_labelsscores                rl   test_no_averaging_labelsr    s     ,!=>,!=>++XXl#F		&>A&22
NF ..6;;? &F!&NL648E|>-BC
 'rn   c                    [        S5      nSu  p#UR                  SSX#4S9nUR                  SSX#4S9n[        U    nU" XE5      n[        [	        U5      U5       H(  nUS S 2U4   n	US S 2U4   n
U" X5      n[        X{5        M*     g )Nr   r   rK  rt   r   )rT   r   r   r   r   rK   r   r   rd  rc  r   r  r   r  r\  y_score_permy_true_permcurrent_scores               rl   -test_multilabel_label_permutations_invariancer    s     &a(L I!!!Qi-C!DF""1ay.D"EGF6#EU9-y9q$w'QWo{9E1 :rn   c                    [        S5      nSu  p#UR                  SSX#4S9nUR                  UR                  S9nXUR	                  SSS9-  nSXDR	                  S5      S:H  S4'   SXDR	                  S5      S:H  S4'   [
        U    nU" XE5      n[        [        U5      U5       HY  nUS S 2U4   n	US S 2U4   n
U" X5      nU[        :X  a'  [        R                  " U5      (       d   eUS	:  d   eMN  [        X{5        M[     g )
Nr   r  rt   r   rc   Tr   rK  g    .A)rT   r   r   r   rg   r   r   r   r#   rh   r5  rK   r  s               rl   ?test_thresholded_multilabel_multioutput_permutations_invariancer    s    &a(L I!!!Qi-C!DF"""5G {{D{11G %&F::a=Aq !$%F::a=Aq !F6#EU9-y9q$w'QWo{933;;}---- 3&&&  5 :rn   c                    Su  p[        S5      nUR                  X5      n[        R                  " U* 5      nXUR	                  SS9R                  SS5      -  nUR                  SX!S9n[        U    nU" Xd5      n[        [        U5      U5       Hp  n	[        R                  " U[        S9n
[        R                  " U5      U
[        U	5      '   US S 2U
4   n[        R                  " X5      nU" X5      n[        X5        Mr     g )N)r  r2  r   r  rd   rc   r   rt  )rT   randrh   r  rg   r
  r   r   r   r   r  r  aranger  takerK   )r   rd  rc  r   r  r  r   r   r  r\  inverse_permr  r  r  s                 rl   .test_thresholded_metric_permutation_invariancer    s     "I%a(L	5G667(DXX2X&..r155G!!!Y!?FF6#EU9-y9xx	5#%99Y#7T$Z q,/ggd+{9E1 :rn   metric_namec                 H   [         R                  R                  S5      n[         R                  " S/S-  S/S-  -   [        S9nUR                  SSUR                  S9nS	n[        R                  " [        US
9   [        U    " X#5        S S S 5        g ! , (       d  f       g = f)N*   r  r2  r  rt   rt  r   r   z7Labels in y_true and y_pred should be of the same type.r   )rh   r  r  r   rs  r   r   r   r   	TypeErrorr!  )r  r  r   r   r   s        rl   "test_metrics_consistent_type_errorr    s}     ))


#C	6(Q,&A-V	<B	Q	(BGG	y	0{+B3 
1	0	0s   :B
B!zmetric, y_pred_thresholddtype_y_strc                    [         R                  R                  S5      n[         R                  " S/S-  S/S-  -   US9nUR	                  SSUR
                  S9nU(       d  [         R                  " SS/US9U   nS	nS
n[        U 5      R                  S   R                  nUS:X  a  UOUn	[        R                  " [        U	S9   U " XE5        S S S 5        g ! , (       d  f       g = f)Nr  r  r2  r  rt   rt  r   r   zy_true takes value in {'eggs', 'spam'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitzHpos_label=1 is not a valid label. It should be one of \['eggs', 'spam'\]r  rc   r   )rh   r  r  r   r   r   r   
parametersdefaultr   r   r   )
r   y_pred_thresholdr   r  r   r   err_msg_pos_label_Noneerr_msg_pos_label_1pos_label_defaultr   s
             rl    test_metrics_pos_label_error_strr  $  s    $ ))


#C	6(Q,&A-[	AB	Q	(BXXvv&k:2>	"  	T  "&)44[AII%6!%;!AWG	z	1r 
2	1	1s   	C
C%c                 B   [        X5      nUR                  XBS9nUR                  XRS9n	U " XE40 UD6n
UR                  S5      b  UR                  US   US9US'   UR                  S5      n[        U[        R
                  5      (       a  UR                  XS9US'    [        R                  " U5        [        R                  " U	5        SnU(       aW  U " X40 UD6n[        UU
[        U5      S9  U " XI40 UD6n[        UU
[        U5      S9  U " X40 UD6n[        UU
[        U5      S9  [        SS9   U " X40 UD6n[        [        UR                  U5      U5      U
[        U5      S9  S S S 5        g ! [        [        [        4 a    Sn Nf = f! , (       d  f       g = f)N)devicer  rV   TF)atol)array_api_dispatch)rI   asarraygetrh  rh   ndarrayr  RuntimeErrorr   rJ   rE   r   rF   )r   array_namespacer
  
dtype_namea_npb_npmetric_kwargsxpa_xpb_xp	metric_nprV   numpy_as_array_works	metric_xpmetric_xp_mixed_1metric_xp_mixed_2s                   rl   check_array_api_metricr  M  s    
o	6B::d:*D::d:*Dt3]3I)5)+/*6 *4 *
o&  ##M2K+rzz**')zz+z'Mm$	%


4


4# 477	
+	

 #4??
+	

 #4??
+	
 
4	0477	bjj3R8
+	
 
1	07 |Z0 %
  %%6 
1	0s   .E3 37F3FF
Fc           
          [         R                  " / SQ5      n[         R                  " / SQ5      n[        U UUUUUS S9  [         R                  " / SQUS9n[        U UUUUUUS9  g )Nr  )r   rc   r   rc   r  r  r          r?         @      ?rt  rh   r   r  r   r  r
  r  	y_true_np	y_pred_npr  s          rl   ,check_array_api_binary_classification_metricr)    sm     &I&I HH1DM#rn   c                    [         R                  " / SQ5      n[         R                  " / SQ5      nSSS.n[        U US9nU H@  n[        U UUU4UUS S.UD6  [         R                  " / SQUS	9n	[        U UUU4UUU	S.UD6  MB     g )
N)r   rc   rt   r2  )r   rc   r   rt   r   r   rz   r@  rw   g?r{   r   paramsr   r!  rt  rh   r   (_get_metric_kwargs_for_array_api_testingr  
r   r  r
  r  r'  r(  additional_paramsmetric_kwargs_combinationsr  r  s
             rl   0check_array_api_multiclass_classification_metricr4    s     &I&I 2 "J " 4			

 		
 		
 !5ZH			

 '		
 		
 4rn   c                 &   [         R                  " SS/SS/SS//US9n[         R                  " SS/SS/SS//US9nSSS.n[        U US9nU H@  n[        U UUU4UUS S.UD6  [         R                  " / S	QUS9n	[        U UUU4UUU	S.UD6  MB     g )
Nrc   r   rt  r+  r,  r{   r-  r   )r"  r?  r#  r/  r1  s
             rl   0check_array_api_multilabel_classification_metricr6    s     1a&1a&1a&1DI1a&1a&1a&1DI 2 "J " 4			

 		
 		
 
C			

 '		
 		
 4rn   c                    [        U [        5      (       a  U R                  R                  OU R                  nUS:X  a)  [        [        S5      :  a  [        R                  " S5        [        R                  " / SQUS9n[        R                  " / SQUS9n0 n[        U 5      R                  nSU;   a  S US'   [        U UUU4UUS.UD6  SU;   a-  [        R                  " / S	QUS9US'   [        U UUU4UUS.UD6  g g )
Nr&   z1.14.0zJmean_poisson_deviance's dependency `xlogy` is available as of scipy 1.14.0)r#  r?  r$  g      @rt  )rw   rw   rt   rt   r  r  r  )r?  r#        ?rw   )rh  r   funcrj  rQ   rP   r   skiprh   r   r   r  r  )	r   r  r
  r  	func_namer'  r(  r  metric_paramss	            rl   !check_array_api_regression_metricr>    s   (267(C(C$$I++
]8=T0TX	
 -Z@I)<IMf%00M-')-o&	
   -')+ 
*
o& 			

 	
 	
 (rn   c                 @   [         R                  " / SQ/ SQ/US9n[         R                  " / SQ/ SQ/US9n[        U UUUUUS S9  [         R                  " SS/US9n[        U UUUUUUS9  [        U UUUUU[         R                  " / S	QUS9S
9  [        U UUUUUSS
9  g )N)rc   r2  rt   )rc   rt   rt   rt  )rc   rK  rK  )rc   rc   rc   r   r?  r#  )r?  rA  ffffff?)r  r  rV   
raw_valuesr%  r&  s          rl   -check_array_api_regression_metric_multioutputrB  $  s     )Y/zBI)Y/zBI HHc3Zz:M# HH_J?  rn   c                    [         R                  " / SQ/ SQ/US9n[         R                  " / SQ/ SQ/US9n0 nS[        U 5      R                  ;   a  SUS'   [	        U UUU4UUS.UD6  S	US'   [	        U UUU4UUS.UD6  g )
Nr>  )皙?rw   333333?rt  )r@  rA  rD  )rw   rE  r@  dense_outputFr8  T)rh   r   r   r  r  )r   r  r
  r  X_npY_npr  s          rl   check_array_api_metric_pairwiserI  U  s    88_o6jID88_o6jIDM6*555(-n%		

 	
 	
 )-n%	
  rn   g      r9  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       rl   !yield_metric_checker_combinationsrO    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        rl   test_array_api_compliancerS    s     v;rn   df_lib_namepandaspolarsc                 P   [         R                  " U5      nUR                  / SQ5      nUR                  / SQ5      n[        U    n U" UR	                  5       UR	                  5       5      n[        U" X45      W5        g ! [
         a    [         R                  " U  S35         N8f = f)N)r"  r$  r   r$  )r$  r"  r"  r"  z can not deal with 1d inputs)r   importorskipSeriesr   to_numpyr   r;  rJ   )r  rT  df_libr   r   r   expected_metrics          rl   test_metrics_dataframe_seriesr]    s       -F]]-.F]]/0F%FB !2FOO4EF F6*O<  B{m#?@ABs   %A? ?#B%$B%c                     0 /nUR                  5        H[  u  p4U[        U 5      R                  ;  a  M   / nU H1  nU H(  nUR                  5       nXxU'   UR	                  U5        M*     M3     UnM]     U$ )zHelper function to enable specifying a variety of additional params and
their corresponding values, so that they can be passed to a metric function
when testing for array api compliance.)rK  r   r  r  append)	r   r.  r3  paramrF  new_combinationsrk   value
new_kwargss	            rl   r0  r0    s     #%	&)4440F#[[]
$)5! ''
3   1 &6" ( &%rn   c                 v   [         R                  R                  S5      nUR                  SSSS9nUR                  SSSS9nU [        ;   a  [        X#5      u  p#U [        ;   a"  UR                  SSSS9nUR                  SSSS9n[        U    nU" X#5      n[        U[        [         R                  [        45      (       d   e[        U[         R                  [         R                  45      (       a   e[        U[        5      (       a2  [        S U 5       5      (       d  [        S U 5       5      (       d   eggg)	zEnsure that the returned values of all metrics are consistent.

It can either be a float, a numpy array, or a tuple of floats or numpy arrays.
It should not be a numpy float64 or float32.
r   rt   r   r   r  c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )rh  rb   .0vs     rl   	<genexpr>2test_returned_value_consistency.<locals>.<genexpr>*	  s     7A:a''s   c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fr   )rh  rh   r  rf  s     rl   ri  rj  *	  s!      ?
/4!Jq"**%%us   ')N)rh   r  r  r   r   r   r   r   rh  rb   r  tupler   float32r6  )r   r  r   r   r   r  s         rl   test_returned_value_consistencyrn  	  s&    ))


"C[[AE[*F[[AE[*F))26B&&Q0Q0F6"EeeRZZ78888%"**bjj!9::::%77773 ?
/4?
 <
 <
 	
 
 <
7  rn   )r  	functoolsr   inspectr   	itertoolsr   r   r   numpyrh   r   sklearn._configr   sklearn.datasetsr	   sklearn.exceptionsr
   sklearn.metricsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   sklearn.metrics._baser7   sklearn.metrics.pairwiser8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   sklearn.preprocessingrC   sklearn.utilsrD   sklearn.utils._array_apirE   rF   rG   rH   sklearn.utils._testingrI   rJ   rK   rL   rM   rN   sklearn.utils.fixesrO   rP   rQ   sklearn.utils.multiclassrR   sklearn.utils.validationrS   rT   REGRESSION_METRICSr!  r   CURVE_METRICSr   dictr   updater   METRIC_UNDEFINED_MULTICLASSunionr   r  r  r"  r$  METRICS_WITH_NORMALIZE_OPTIONr   r   r  r   r   METRICS_WITHOUT_SAMPLE_WEIGHTr   r   r   r   r   markparametrizesortedr   r   r   r   r   r  r  r-  r/  infr   invalids_nan_infrF  r1  r:  rB  rI  rN  filterwarningsrR  rT  rW  r]  rq  rx  r  r  intersectionr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  strrs  r  r  r)  r4  r6  r>  rB  rI  array_api_metric_checkersrO  rS  r]  r0  rn  r   rn   rl   <module>r     s      2 2   * ; 5- - - - - - - - - - - -\ 8    1 !   J I 3 EF. , 4	
 * 2 %&D  8 .AB 6 "#> G$9C 2 . %g.C3&O   0<!" (#$ 6% *6n666 '0GRV(W6 "7>U#K	6 $%56 " $6 /0K6 6w#86$ L%6& ]'6( !'-5"I)6, ]-6. /60 L162 364 !,566 '+C0768 096: 7;
M;6< :>=6> jqI?6@  LA6B W\:FC6D gmZHE6F W3GG6H gh8I6J gk7CK6L W_gFM6N ',@O6P 7='BQ6R W3GS6T gh8U6V gk7CW6X W_gFY6Z ",@"='B!+ysK)<YQG&	J#L)D$]IF*k6 r@ F n ,    WX?	 
 *  (  ]  zB  w}i@  W]G<  7='uM  Gzu  7='uM   Gzu! & w}c:' ( 6) * ')+ 0 (/( &--Dg%V-R0?  D f   & '   ) *   % &   = !   ( &=%B%B& "
 & " (# L! " * D "  H  H!   ! 	@ (9!:;
 <
B (=!>?: @:4'  
F3{#&HHI

**
Z 
F3{#&HHI{+{+| 
F3-.1SST22j !45'/ 6'/V VbffbffVbffbffVbffbffVbffa[Vbffa[  e'..02D2K2K2MN *,<=  >  #9#@#@#BC &&!Q#
&&!Q#  D , #9#@#@#BC  D $7 H%

K -	- !
"		#		 &
 H%(;>Q(Q!RS* T &* (;!<= > (;!<=
 >
$ OP.9H
 : QH
V (;!<= >  (E!FG H8 (E!FG H8 
F0==>QRS,,^32lO" (>!?@U AU 
F),NNOUU$ (>!?@U AU& (>!?@U AU^PB 

K%%c*<&=>
'	(AA 

K%%c*<&=>
'	(<<& 

K
 
!	"
'	( "	"EE 

K
 
!	"
'	( -	-EE" 

	=	=
'	(EE. 

!>>?A	AD2 
F&*T)UUV22$ 
F14GGH66B 
F3*+.PPQ22* (>?	4 @	4 	 $'	4 	5	1	%u-		&	% 	u	D
 f6 74=
@:%
P%
P'
T.b:e488e 488e 88e 488e(  488")e2 4883e< 488=eF 488GeP 488QeZ =>[e\ !.1R0S]e^ !-0Q/R_e` )5aeh 78iej )5ker )5sez )5{eB )5CeJ )5KeR )SeX =>YeZ =>[e\ :;]e^ ;<_e` 12aeb #)5%cej 12kel !@ Amen 67oep 9:qer 34set 78uev 01wex )5ye@  )5" 45Ie P 7P " )-/'  
 -/P/RS< T< 8(<={(;<= = >=&* !45
 6
rn   