
    Mpj                    <    S SK r 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
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/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErE  S S
KFJGrG  S SKHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrY  S SKZJ[r[  S SK\J]r]  S SK^J_r_J`r`JaraJbrbJcrcJdrd  S SK^Jerf  S SKgJhrhJiriJjrjJkrkJlrlJmrmJnrn  S SKoJprpJqrqJrrr  S SKsJtrt  S SKuJvrvJwrw  0 S\0_S\1_S\6_S\7_S\4_S\9_S\2_S\&_S\" \>SS9_S\B_S \C_S!\" \8S S"9_S#\5_S$\3_S%\" \8S&S"9_S'\8_S(\" \#S&S"9_\"\" \"S)S*9\" \"S+S*9\S,.Erx0 S-\_S.\_S/\" \S0S19_S2\" \S3S49_S5\_S6S7 _S8\:_S9\" \:S0S:9_S;\)_S<\E_S=\" \ES3S49_S>\+_S?\=_S@\?_SA\'_SB\" \(SCSD9_SE\" \(SFSD9_0 SG\/_SH\" \(SISFSJ9_SK\" \'SISL9_SM\" \(SISCSJ9_SN\" \=SISL9_SO\" \?SISL9_SP\" \+SISL9_SQ\" \(SRSFSJ9_SS\" \'SRSL9_ST\" \(SRSCSJ9_SU\" \=SRSL9_SV\" \?SRSL9_SW\" \+SRSL9_SX\" \(SYSFSJ9_SZ\" \'SYSL9_S[\" \(SYSCSJ9_S\\" \=SYSL9_E\" \?SYSL9\" \+SYSL9\" \(S]SFSJ9\" \'S]SL9\" \(S]SCSJ9\" \=S]SL9\" \?S]SL9\" \+S]SL9\S^.	EryS_ rz\\A\z\%S`.r{0 Sa\_Sb\-_Sc\._Sd\" \.S3S49_Se\*_Sf\_Sg\@_Sh\" \@SISL9_Si\" \@S]SL9_Sj\" \@SRSL9_Sk\" \@SYSlSm9_Sn\" \@SISlSm9_So\" \@SYSpSm9_Sq\" \@SISpSm9_Sr\" \@SFSs9_St\_Su\" \SISL9_\" \S]SL9\" \SRSL9\,\;\$\D\ \!Sv.Er|\}" 5       r~\~R                  \|5        \~R                  \y5        \~R                  \x5        \~R                  \{5        1 Swkr1 Sxkr\GR                  \5      r1 Sykr1 Szkr1 S{kr1 S|kr1 S}kr1 S~kr1 Skr1 Skr1 Skr1 Skr1 Skr1 Skr1 SkrSS 1r/ SQrS rS rS r\GR,                  GR/                  S\" \5      5      S 5       r\GR,                  GR/                  S\" \5      5      S 5       rS r\GR,                  GR/                  S\" \" \~5      \-
  5      5      S 5       rS r\GR,                  GR/                  S\" \" \~5      \-
  5      5      S 5       r0 \yES\0Er\GR,                  GR/                  S\GRC                  5       5      S 5       r\GR,                  GR/                  S\yGRC                  5       5      S 5       r\GR,                  GR/                  S\" \" \y5      \-
  5      5      S 5       r\GR,                  GR/                  S\|5      S 5       rS S/\GRL                  \GRL                  /4S S/\GRN                  \GRN                  /4S S/\GRN                  \GRL                  /4S S/\GRL                  S/4S S/\GRN                  S/4/r\GR,                  GR/                  S\" \|GRC                  5       \xGRC                  5       5      5      \GR,                  GR/                  S\5      S 5       5       r\GR,                  GR/                  S\yGRC                  5       5      \GR,                  GR/                  S\\GRN                  SSC// SQ4\GRL                  SSC// SQ4/-   5      S 5       5       r\GR,                  GR/                  S\yGRC                  5       5      S 5       rS rS r\GR,                  GR]                  S5      \GR,                  GR/                  S\" \" \~5      \-
  \" \|5      -
  5      5      S 5       5       r\GR,                  GR]                  S5      \GR,                  GR/                  S\" \\-  5      5      S 5       5       r\GR,                  GR/                  S\" \5      5      S 5       r\GR,                  GR/                  S\" \5      5      S 5       r\GR,                  GR]                  S5      \GR,                  GR/                  S\p5      S 5       5       r\GR,                  GR/                  S\" \5      5      S 5       r\GR,                  GR/                  S\" \5      5      S 5       r\GR,                  GR/                  S\" \5      5      S 5       r\GR,                  GR/                  S\" \GRo                  \5      5      5      S 5       rS rS r\GR,                  GR/                  S\" \5      5      S 5       r\GR,                  GR/                  S\" \\-  5      5      S 5       r\GR,                  GR/                  S\" \5      5      S 5       rS r\GR,                  GR/                  S\" \5      5      S 5       rSS jr\GR,                  GR/                  S\" \" \~5      GRo                  \" \x5      5      \-
  5      5      S 5       r\GR,                  GR                  \GR,                  GR/                  S\" \" \~5      GRo                  \" \x5      5      \-
  5      5      S 5       5       r\GR,                  GR/                  S\" \" \~5      \" \x5      -
  \-
  \-
  5      5      S 5       r\GR,                  GR/                  S\" \" \~5      \" \x5      -
  \-
  \-
  5      5      S 5       r\GR,                  GR/                  S\" \\-  \-
  5      5      S 5       r\GR,                  GR/                  S\" \\-
  5      5      S 5       rS r\GR,                  GR/                  S\" \S81-
  5      5      S 5       r\GR,                  GR/                  S\" \\-  5      5      S 5       r\GR,                  GR/                  S\" \" \|5      \-
  5      5      S 5       r\GR,                  GR/                  S\GR                  " S/S-  S/SC-  -   \S9\GR                  " S/S-  S/SC-  -   5      \GR                  " S/S-  S/SC-  -   5      /5      \GR,                  GR/                  S\y5      S 5       5       r\GR,                  GR/                  S\S04\S04\'S34\" \(SSD9S34\+S34\<S04\=S34\?S34\AS04/	5      \GR,                  GR/                  S\\/5      S 5       5       rS rS rS rS rS rS rS rS rS rS r0 \\\\/_\\\\/_\\\/_\\\/_\\\/_\%\/_\'\\\/_\(\\\/_\+\\\/_\:\\\/_\=\\\/_\<\/_\?\\\/_\E\\\/_\)\\\/_\\\\/_\.\\\/_0 \ \\\/_\!\\\/_\8\/_\" \8SS"9\/_\" \8SS"9\/_\>\\/_\L\/_\&\\/_\1\\/_\4\\/_\6\\/_\7\\/_\9\\/_\\\/_\"\\/_\" \"S)S*9\\/_\" \"S+S*9\\/_E0 \#\/_\Q\/_\5\/_\I\/_\3\/_\0\/_\2\\/_\J\/_\R\/_\S\/_\K\/_\M\/_\P\/_\O\/_\N\/_\W\/_\X\/_E\B\\/\C\\/\Y\/\V\/\A\/\T\/\U\/0Er\4S jr\GR,                  GR/                  S\d" 5       5      \GR,                  GR/                  S\" 5       5      S 5       5       rS r\GR,                  GR/                  S\c" 5        V s/ s H  n \GR                  " U SSC SU SC   06PM     sn 5      \GR,                  GR/                  S\" \5      5      S 5       5       r\GR,                  GR/                  S\" \" \5      \" \yGR                  5       5      \-
  -  5      5      \nS 5       5       r\GR,                  GR/                  S\d" 5       5      \GR,                  GR/                  S\" \" \5      \" \|GR                  5       5      \" \{GR                  5       5      -  \-
  -  5      5      S 5       5       r\GR,                  GR/                  SSS/5      \GR,                  GR/                  S\" \~5      5      S 5       5       rS r\GR,                  GR/                  S\" \~5      5      S 5       rgs  sn f )    N)partial)	signature)chainpermutationsproduct)Tuple)config_context)make_multilabel_classification)UndefinedMetricWarning)0accuracy_scoreaverage_precision_scorebalanced_accuracy_scorebrier_score_lossclassification_reportcohen_kappa_scoreconfusion_matrixconfusion_matrix_at_thresholdscoverage_errord2_absolute_error_scored2_brier_scored2_log_loss_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laplacian_kernellinear_kernelmanhattan_distancespaired_cosine_distancespaired_euclidean_distancespaired_manhattan_distancespairwise_distancespairwise_distances_argminpairwise_kernelspolynomial_kernel
rbf_kernelsigmoid_kernel)LabelBinarizer)shuffle)_atol_for_type_max_precision_float_dtypeget_namespacemove_to(yield_mixed_namespace_input_permutations)yield_namespace_device_dtype_combinationsdevice)_array_api_for_testsassert_allcloseassert_almost_equalassert_array_equalassert_array_lessignore_warnings'skip_if_array_api_compat_not_configured)COO_CONTAINERSparse_version
sp_version)type_of_target)_num_samplescheck_random_stater&   r'   r,   r-   r*   r/   r(   r   r4   variance_weighted)multioutputr8   r9   mean_normal_deviance)powerr+   r)   mean_compound_poisson_deviancegffffff?r.   r   皙?)alphag?)r   d2_pinball_score_01d2_pinball_score_09r   r   r    adjusted_balanced_accuracy_scoreT)adjustedunnormalized_accuracy_scoreF	normalizer   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     ]/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/metrics/tests/test_common.py<lambda>r      sH    $)&)009
D
+F
+
/
/Q
/
72::
F	G    r0   "multilabel_confusion_matrix_sample)
samplewiser   r;   unnormalized_zero_one_lossr!   r3   r5   r   f2_score   )beta
f0.5_score      ?matthews_corrcoef_scoreweighted_f0.5_scoreweightedaverager   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 a 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)r2   lenr{   arraypadry   float64nan)r}   r~   	precisionrecall
thresholdspad_thresholdss         r   (precision_recall_curve_padded_thresholdsr      sx     %;D$KF$K!Iz^c*o5N88FF!!"**-n-!#			
 r   )r   r7   r2   r   r   r#   r$   unnormalized_log_lossr    r   r6   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"   r1   r   r:   r   r   >   r   r1   r   r   r   r#   r   r   r   r   r"   r   >   r   r   r   r7   r5   r!   r   r6   r   r3   r   r   r2   r   r   >   r   r   r5   r!   r3   r   >   r6   r   r   >   r   r   r   r7   r5   r!   r   r3   r   r2   r   r   r   r   r   r   >!   r   r   r$   r5   r!   r   r   r   r   r   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   rs   r   r   r   r   r   >   r$   r;   r   r:   >   r$   r   r1   r   r6   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   r   r   r0   rp   r   r   r   r   >   r4   r   r*   r,   rl   rm   r'   r/   r-   r   r8   r   r9   r(   >   r   r&   r   r!   r;   r   r   r   r   r   r*   r,   r   r   r'   r   rg   r.   r/   r   r   r   r-   r   r8   r   r9   rp   r   >"   r   r4   r   r7   r    r5   r   r3   r   r   r   r   r   r   rl   rm   r)   r   r+   r2   r   r   r   r   r   r0   rs   r   r(   ri   rn   r   r   r   >   r&   r   r   >   r   r   r   r0   rp   r   r   >   r   r)   r+   ri   ) r   r   r   r   r   r   r   r   rl   rm   r   r   r   r$   r&   r'   r(   ri   r)   rg   r*   r+   r,   r-   r.   r/   r0   r3   r4   r5   r8   r9   c                     [        [        U R                  5       UR                  5       5      5      S-   nX-  n X-  nX4$ )zMake targets strictly positiverv   )absminy1y2offsets      r   _require_positive_targetsr     s9    RVVXrvvx()A-FLBLB6Mr   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   ry   r{   r   r   s      r   _require_log1p_targetsr     s]    RVVXrvvx()D0F	2::	B	2::	BLBLB6Mr   c                      [         [        -  [        [        5      -  [        -  [        [
        5      :X  d   e[         [        -  [        5       :X  d   eg N)SYMMETRIC_METRICSNOT_SYMMETRIC_METRICSset!CONTINUOUS_CLASSIFICATION_METRICS"METRIC_UNDEFINED_BINARY_MULTICLASSALL_METRICS r   r   test_symmetry_consistencyr     sX     	
	 
/
0	1 -	- 
[	    55#%???r   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   r      sizer      z%s is not symmetricerr_msgz This case is currently unhandled)
rd   randintMETRICS_REQUIRE_POSITIVE_Yr   METRICS_WITH_LOG1P_Yr   r   METRIC_UNDEFINED_BINARYMULTILABELS_METRICSrY   )r   random_statey_truey_pred
y_true_bin
y_pred_binmetrics          r   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	
r   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   r   r   r   F seems to be symmetric)	rd   r   ranger   r   r   r{   allclose
ValueError)	r   r   r   always_symmetric_r   r   nominalswappeds	            r   test_not_symmetric_metricr     s     &a(LF
 1X%%a%7%%a%7--6vFNF(({{7,,$  D6!7899 r   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   r5   z is not symmetricmatchr   )r   pytestraisesAssertionErrorr   r   )symnot_syms     r   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   r   r   r   r    %s is not sample order invariantr   )
rd   r   r   r   r   r   rO   r]   r   rY   )r   r   r   r   y_true_shuffley_pred_shuffler   s          r   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   r   r   r   rv   Trx   keepdimsr  r	  r   )rd   r   uniformshaperz   rO   r   r   rY   CONTINUOUS_MULTILABEL_METRICSMULTIOUTPUT_METRICS)	r   r   r   y_scorer
  r  y_score_shuffler   r   s	            r   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=	
 $r   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   r   r   r   rv   )rv   )rv   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)rd   r   r   r   r   r   listr{   r   r[   ndimreshaper]   r   rY   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                 r   &test_format_invariance_with_1d_vectorsr)  G  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% '
 "??BUU
 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.r   r   c                     Sn[         R                  " [        [        R                  " U5      S9   U " [
        R                  " / 5      [
        R                  " / 5      5        S S S 5        g ! , (       d  f       g = f)NzIFound empty input array (e.g., `y_true` or `y_pred`) while a minimum of 1r   )r  r  r   reescaper{   r   )r   msgs     r   0test_classification_metrics_raise_on_empty_inputr.    sC    
UC	z3	8rxx|RXXb\* 
9	8	8s   2A++
A9c                    [        S5      nS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[        R                  " [
        SS9   U " X4US9  S S S 5        UR                  U4S9n[        R                  US'   [        R                  " [
        S	S9   U " X4US9  S S S 5        [        R                  US'   [        R                  " [
        S
S9   U " X4US9  S S S 5        [        R                  " / SQ5      n[        R                  " [
        SS9   U " US S US S U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       GN-= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   r   r   rv   'Found input variables with inconsistentr   sample_weight%Input sample_weight contains infinity Input sample_weight contains NaNy      ?       @y      @      @y      @      @Complex data not supported   )Sample weights must be 1D array or scalar)rd   r   random_sampler  r  r   r{   infr   r   r  )r   r   	n_samplesr   r   r2  s         r   .test_classification_with_invalid_sample_weightr<    s    &a(LI			a)		6B			a)		6B ..Y]4D.EM	z)R	Sr]3 
T !..YL.AMvvM!	z)P	Qr]3 
R vvM!	z)K	Lr]3 
M HH56M	z)E	Fr"1vr"1v]; 
G !..Y]4D.EMM	AM 
z)T	Ur]3 
V	U' 
T	S
 
R	Q 
M	L 
G	F 
V	Us<   F*F&F/'G ;G
F
F,/
F= 
G
G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   r   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)rd   r   r{   r   r]   CLASSIFICATION_METRICSMETRICS_WITH_POS_LABELr   r[   formatry   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                r   7test_classification_invariance_string_vs_numbers_labelsrR    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   r   r   r   r>  r?  r@  rB  r   rC  rD  )rd   r   r{   r   r]   r   r   rG  r   r[   rH  ry   r  r  r   )r   r   r   r   rJ  rL  r   rO  rN  rP  rQ  s              r   Btest_continuous_classification_invariance_string_vs_numbers_labelsrT  -  sR    &a(L			a		/B			a		/BXXvv&'+FM		248..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:rv   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      r   test_continuous_inf_nan_inputrV  b  s>     )	z)C	Dv 
E	D	Ds	   	<
A
)rv   r   r7  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)r{   isfiniteallr  anyr  r  r   )r   r   r  
input_nameunexpected_valuer   s         r   !test_classification_inf_nan_inputr^  p  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`  rj   皙?333333?zJClassification metrics can't handle a mix of binary and continuous targetsr   N)r  r  r   )r   r   r  r   s       r   +test_classification_binary_continuous_inputre    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 )Nrv   r   gffffffr   repeat)r   r   r   r   )r   r   valuesijs        r   check_single_samplerl    s^    
 F ))Q	%	%Qq)sQC *r   c                     [         U    n[        SS/SS9 H;  u  p#pEU" [        R                  " X#//5      [        R                  " XE//5      5        M=     g )Nr   rv      rg  )r   r   r{   r   )r   r   rj  rk  kls         r   check_single_sample_multioutputrq    sI    Fq!fQ/
arxx!!288aVH#56 0r   ignorec                     [        U 5        g r   )rl  r   s    r   test_single_sampleru    s     r   c                     [        U 5        g r   )rq  rt  s    r   test_single_sample_multioutputrw    s     $D)r   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)rv   r   r   rv   )r   rv   rv   rv   rv   rv   r   rv   r   rv   r{   r   r   r  r  r   )r   r   r   r   s       r   (test_multioutput_number_of_output_differr{    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   r   r   r   r   r7  rv   z'%s is not dimension shuffling invariantr   )rd   r  r   r   permutationr  rY   )r   r   r   r   r   errorr   perms           r   =test_multioutput_regression_invariance_to_dimension_shufflingr    s     &a(L!!!QW!5F!!!QW!5FF6"E1X''Q86!T'?F1d7O4=F	
 r   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 )Nrn  2   rv   r   T
n_features	n_classesr   r;  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
   r{   vstackr  r   r   
isinstancer   
__module____name__rY   rZ   )r  r  r;  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                   r   )test_multilabel_representation_invariancer    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)Nrv   r   r   )r   r   )r   rv   r   objectdtyperz  )r   multilabel_sequencesr   seqs       r   +test_raise_value_error_multilabel_sequencesr  8  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 )Nr   r   r   r   Trq   F      0We failed to test correctly the normalize optionr   Failed with )rd   r   r  r  r   r   r\   rY   )r   r  r;  r   r   r   r  metricspredmeasure_normalizedmeasure_not_normalizeds              r   +test_normalize_option_binary_classificationr  I  s     II%a(L!!!Y\!BF!!!Y\!BF"""5G$G??7VD >$VUC!!	B *tf%r   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!5      n[        R                  " U* 5      nXwR                  SS9R                  SS5      -  n[        U    nU [        ;   a  UOUn	U" XISS	9n
U" XIS
S	9n[        SU
-  SSS9  [        U
X-  SU  3S9  g )Nrn  r   r   r   r  rw   rv   Trq   Fr  r  r   r  )rd   r   randr{   exprz   r  r   r   r\   rY   )r   r  r;  r   r   r   r  tempr  r  r  r  s               r   /test_normalize_option_multiclass_classificationr  f  s     II%a(L!!!Y\!BF!!!Y\!BF	5G667(DXX2X&..r155G$G??7VD >$VUC!!	B *tf%r   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 )Nrn  d   r   rv   T)r  r  r   r  r;  r   rq   Fr  r  r   r  )rd   r
   r  r  r   r   r\   rY   )r   r  r;  r   r   r   r   r  r  r  r  r  s               r   /test_normalize_option_multilabel_classificationr    s    
 II%a(L /IA /IA """5G qcIoF
qcIoF$G??7VD >$VUC!!	B *tf%r   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   )rx   r  r   )weightsr   unknowngarbage)r  rY   r   ravelr{   meanrz   intr   r  r  r   )r   r   r   y_true_binarizey_pred_binarizeis_multilabelr;  r  label_measurerj  micro_measuremacro_measurer  weighted_measuresample_measures                  r   _check_averagingr    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)rb   
startswithr   METRICS_WITH_AVERAGINGr  0CONTINUOUS_CLASSIFICATION_METRICS_WITH_AVERAGINGr   )r   r   r  r   r  r  r  r   s           r   check_averagingr    sa    "6*55lCMF%%F_	
 
A	AGg	
 MNNr   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  r7  r   r   )rd   r   r  rN   fit	transformr  )
r   r;  r  r   r   r   r  lbr  r  s
             r   test_averaging_multiclassr    s     I%a(L!!!Y\!BF!!!Y\!BF""(>"?G				f	%Bll6*Oll6*OD/?Tr   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   rv   r   Fr  r   r   r   )r
   rd   normalr  )
r   r;  r  r   yr   r   r  r  r  s
             r   test_averaging_multilabelr    sq    
 !I)DA sVFrsVF #**Y*@GOOD/?Tr   c                     [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUnUn[        XXBXS5        g Nr   r7  )r{   zerosr  r   r   r   r  r  r  s         r   $test_averaging_multilabel_all_zeroesr  #  sB    XXgFXXgFhhwGOOD/?Tr   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   )r<   r3   )r   r  r   s      r   r   =test_averaging_binary_multilabel_all_zeroes.<locals>.<lambda>4  s    =R'>r   T)r  )r   )r{   r  r  )r   r   r  r  binary_metrics        r   +test_averaging_binary_multilabel_all_zeroesr  .  sK    XXgFXXgFOOM r   c                     [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUnUn[        XXBXS5        g r  )r{   onesr  r  s         r   "test_averaging_multilabel_all_onesr  A  sB    WWWFWWWFgggGOOD/?Tr   c                    [         R                  R                  S5      nUc  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                  " X4S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 [        ;  a,  U S;   a  S/OSS/nU 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$                  " XD/5      S9  S S S 5        g ! , (       d  f       g = f)Nr   rv   
   r   r:   )ro  r1  )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 != rw   z.Weighting %s is not equal to repeating samplesr   zUZeroing weights does not give the same result as removing the corresponding samples (>   r7   r/   rd  z/%s sample_weight is not invariant under scalingzJFound input variables with inconsistent numbers of samples: \[{}, {}, {}\]r   )r{   randomRandomStater   r   r   rY   r  r  r  r  r   tolistrh  copyWEIGHT_SCALE_DEPENDENT_METRICSrH  rc   hstack)r   r   r   r   r2  rng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_valuesscalingerror_messages                      r   check_sample_weight_invariancer  L  s   
))


"CArB8 &*-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	? 11 AAQC3x 	 &Gr]W-DEIDP &	##)6l2.]0Ka0O$
  
z	7rRYY/M%NO 
8	7	7s   %#C
CI
Ic                     Sn[        S5      nUR                  U4S9nUR                  U4S9n[        R                  " [	        U5      5      n[
        U    n[        XX4U5        g )Nr  r   r   )rd   r9  r{   aranger   r   r  )r   r;  r   r   r   r2  r   s          r   (test_regression_sample_weight_invariancer    se     I%a(L''i\':F''i\':FIIc&k*MF"4Or   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4S9n[        R                  US'   [        R                  " [
        SS9   U" X4US9  S S S 5        [        R                  US'   [        R                  " [
        S	S9   U" X4US9  S S S 5        [        R                  " / S
Q5      n[        R                  " [
        SS9   U" US S US S U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       GN-= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  r   r   rv   r0  r   r1  r3  r4  r5  r6  r7  r   r8  )rd   r9  r   r  r  r   r{   r:  r   r   r  )r   r;  r   r   r   r   r2  s          r   *test_regression_with_invalid_sample_weightr    s    I%a(L''i\':F''i\':FF ..Y]4D.EM	z)R	Sv]; 
T !..YL.AMvvM!	z)P	Qv]; 
R vvM!	z)K	Lv]; 
M HH56M	z)E	Fvbqz6"1:]C 
G !..Y]4D.EMM	AM 
z)T	Uv]; 
V	U' 
T	S
 
R	Q 
M	L 
G	F 
V	Us<   #F/F#+F4,G G
F #
F14
G
G
G$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 [        [
        R                  5       -  ;   a  [        XX55        g [        XX45        g )Nr  r   r   r   )rd   r   r9  r   r   CURVE_METRICSkeysr  )r   r;  r   r   r   r  r   s          r   $test_binary_sample_weight_invariancer    s     I%a(L!!!Qi\!:F!!!Qi\!:F((yl(;GF1M4F4F4HHI&tVE&tVDr   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  rw   rv   )
rd   r   r9  r   r   r{   r  rz   r  r  )	r   r;  r   r   r   r  r   r  y_score_norms	            r   (test_multiclass_sample_weight_invariancer    s     I%a(L!!!Qi\!:F!!!Qi\!:F((y!n(=GF00vvwhhhBh/77A>>&tVJ&tVDr   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   rv   r  r  Fr  r   Tr  )
rd   r
   r{   r  r  r  rz   r   r   r  )	r   r   r   yaybr   r   r  r   s	            r   (test_multilabel_sample_weight_invariancer  "  s     &a(L*bRWEA +bRWEA YYx FYYx F"""5G {{D{11GF00&tVE&tVDr   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   r   r}  r   )rd   r  r   r  )r   r   r   r   r   s        r   )test_multioutput_sample_weight_invariancer  @  sP    
 &a(L!!!QW!5F!!!QW!5FF"4@r   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)rv   rv   r   r   r   r   rv   rv   )r   rv   rv   r   )r   rv   r   )r   r   r7  )r7  r   rv   r   T)return_inverserv   )rE  r   r   )r{   r   uniquer  r   r  r   r[   )y_true_multilabely_pred_multilabely_true_multiclassy_pred_multiclassrE  r   inverse_labelsr   r   r   r   score_labelsscores                r   test_no_averaging_labelsr  M  s     ,!=>,!=>++XXl#F		&>A&22
NF ..6;;? &F!&NL648E|>-BC
 'r   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   rn  r   r   )rd   r   r   r   r   rZ   r   r   r;  r  r   r  r   r  r  y_score_permy_true_permcurrent_scores               r   -test_multilabel_label_permutations_invariancer  f  s     &a(L I!!!Qi-C!DF""1ay.D"EGF6#EU9-y9q$w'QWo{9E1 :r   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  r   r   rv   Tr  rn  g    .A)rd   r   r  r  rz   r   r   r   r(   r{   rY  rZ   r  s               r   >test_continuous_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 :r   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  r7  r   r  rw   rv   r   r  )rd   r  r{   r  rz   r  r   r   r   r   r  r  r  r  takerZ   )r   r;  r  r   r  r  r   r   r  r  inverse_permr  r  r  s                 r   -test_continuous_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 :r   r   r?  r7  r>  r  metric_namec                     [         R                  R                  S5      nSnUR                  SSUS9nSn[        R
                  " [        US9   [        U   " X5        S S S 5        g ! , (       d  f       g = f)N*   r   r   r   r   z.Mix of label input types \(string and number\)r   )r{   r  r  r   r  r  r   rF  )r   r  r  r;  r   r   s         r   "test_metrics_consistent_type_errorr     s]     ))


#CI	Q		*B?G	z	1{+B3 
2	1	1s   A''
A5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[        R                  " S
5      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?  r7  r>  r   r  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 explicitzEpos_label=1 is not a valid label. It should be one of ['eggs' 'spam']rA  rv   r   )r{   r  r  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
             r    test_metrics_pos_label_error_strr)    s    $ ))


#C	6(Q,&A-[	AB	Q	(BXXvv&k:2>	" 
 ))O "&)44[AII%6!%;!AWG	z	1r 
2	1	1s   	C++
C9c                   ^^^ [        XT5      u  mnTR                  XGS9nTR                  XWS9n	U " XE40 UD6n
UR                  S5      b  TR                  US   US9US'   UR                  S5      n[        U[        R
                  5      (       a  TR                  XS9US'    [        R                  " U5        [        R                  " U	5        SnSUU4S jjmSU4S jjnU(       a  U " X40 UD6n[        U
[        5      (       a_  [        [        U
 Vs/ s H  oR                  PM     sn5      5      S:  a-  U" X5        U " XI40 UD6nU" UU
5        U " X40 UD6nU" UU
5        O,T" X5        U " XI40 UD6nT" UU
5        U " X40 UD6nT" UU
5        [        SS	9   U " X40 UD6n[        U[        5      (       a  U" XSS
9  OT" XSS
9  S S S 5        g ! [        [        [        4 a    Sn GNf = fs  snf ! , (       d  f       g = f)NrV   r2  rf   TFc                 v   > U(       a  [        TR                  U 5      [        SS9n [        X[	        T5      S9  g )Ncpu)xprW   )atol)rS   asarrayr{   rY   rP   )metric_ametric_b	convert_a
dtype_namer-  s      r   _check_metric_matches5check_array_api_metric.<locals>._check_metric_matches  s,    rzz(35IH
1KLr   c                 <   > [        X5       H  u  p4T" X4US9  M     g )Nr2  )zip)r0  r1  r2  metric_a_valmetric_b_valr4  s        r   _check_each_metric_matches:check_array_api_metric.<locals>._check_each_metric_matches  s     *-h*A&L!,	R +Br   rv   array_api_dispatchr7  )F)rX   r/  getr  r{   ndarray	TypeErrorRuntimeErrorr   tupler   r   r  r	   )r   array_namespacedevice_namer3  a_npb_npmetric_kwargsrW   a_xpb_xp	metric_nprf   numpy_as_array_worksr;  	metric_xp
metric_valmetric_xp_mixed_1metric_xp_mixed_2r4  r-  s      `              @@r   check_array_api_metricrQ    s    &oJOJB::d:*D::d:*Dt3]3I)5)+/*6 *4 *
o&  ##M2K+rzz**')zz+z'Mm$	%


4


4#M M
S 477	
 y%((CIFIj))IFGH1L&y< &t C] C&'8)D &t C] C&'8)D ")7 &t C] C!"3Y? &t C] C!"3Y?	4	0477	 i''&ytL!)$G 
1	0U |Z0 %
  %%. G& 
1	0s$   %.G G2.G7G/.G/7
Hc                 
   [         R                  " / SQ5      n[         R                  " / SQ5      n0 nU R                  S:X  a  SS0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  g )	Nr  r   rv   r   rv   r   r   r   rF  rG  r2          rj          @      ?r  )r{   r   r  rQ  )r   rD  rE  r3  	y_true_np	y_pred_nprH  r2  s           r   ,check_array_api_binary_classification_metricr[  F  s     &I&IM-'		
 	 	 HH1DM		
 #	 	r   c                 r   [         R                  " / SQ5      n[         R                  " / SQ5      nU R                  S:X  a!  [         R                  " / SQ/ SQ/ SQ/ SQ/US9nS	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   rv   r   r7  )r   rv   r   r   r   )ffffff?rc  皙?r_  )rj   皙?r_  r_  rj   rj   r^  rj   )r_  r_  rj   r`  r  r   r   r   rc  r   r`  )FT)r   r   ro   r   paramsrT  rU  )r{   r   r  (_get_metric_kwargs_for_array_api_testingrQ  
r   rD  rE  r3  rY  rZ  additional_paramsmetric_kwargs_combinationsrH  r2  s
             r   0check_array_api_multiclass_classification_metricrj  i  s     &I&I33HH&&$&	 
	 2!
 "J " 4			

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

 '		
 		
 4r   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 )
Nrv   r   r  rb  rc  r   rd  rT  )rV  rj   rW  )r{   r   rf  rQ  rg  s
             r   0check_array_api_multilabel_classification_metricrl    s     1a&1a&1a&1DI1a&1a&1a&1DI 2 "J " 4			

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

 '		
 		
 4r   c           
          [         R                  " / SQ5      n[         R                  " / SQUS9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 )Nrv   r   rv   r   r   rc  r^  333333?r  rT  rv   r   r7  rv   r{   r   rQ  r   rD  rE  r3  rY  	y_prob_npr2  s          r   7check_array_api_binary_continuous_classification_metricru    so     &I-Z@I HH\<M#r   c           
          [         R                  " / SQ5      n[         R                  " / SQ/ SQ/ SQ/ SQ/US9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  rc  rj   皙?ry  rj   rj   ra  rj   rc  rp  rj   r  rT  rq  rr  rs  s          r   ;check_array_api_multiclass_continuous_classification_metricr{    s     &I    		
 I  HH\<M#r   c           
          [         R                  " / SQ/ SQ/ SQ/ SQ/US9n[         R                  " / SQ/ SQ/ SQ/ S	Q/US9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  rn  )r   rv   r   r   ry  r  )g333333?gHzG?gq=
ףp?gQ?)gQ?gRQ?Q?gq=
ףp?)r}  gQ?gQ?g)\(?)gQ?gףp=
?gp=
ף?g(\?rT  rq  rr  )r   rD  rW   r3  rY  rt  r2  s          r   ;check_array_api_multilabel_continuous_classification_metricr~  	  s     		
 I $$$$		
 I  HH\<M#r   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)rW  rj   rX        @r  )r   r   r   r   r2  rF  rG  )rj   rW        ?r   )r  r   funcr  ra   r`   r  skipr{   r   r   r#  rQ  )	r   rD  rE  r3  	func_namerY  rZ  rH  metric_paramss	            r   !check_array_api_regression_metricr  4	  s   (267(C(C$$I++
]8=T0TX	
 -Z@I)<IMf%00M-')-o&	
   -')+ 
*
o& 			

 	
 	
 (r   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)rv   r7  r   )rv   r   r   r  )rv   rn  rn  )rv   rv   rv   rT  rj   rW  )rj   rd  r^  )rF  rG  rf   
raw_valuesrr  )r   rD  rE  r3  rY  rZ  r2  s          r   -check_array_api_regression_metric_multioutputr  ^	  s     )Y/zBI)Y/zBI HHc3Zz:M# HH_J?  r   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 )
Nrb  )ry  r   rp  r  )rc  rd  ry  )r   rp  r^  dense_outputFr  T)r{   r   r   r#  rQ  )r   rD  rE  r3  X_npY_nprH  s          r   check_array_api_metric_pairwiser  	  s    88_o6jID88_o6jIDM6*555(-n%		

 	
 	
 )-n%	
  r   g      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  Y
  s-     +113G/!   4s   )+z(array_namespace, device_name, dtype_namezmetric, check_funcc                     U" XX#5        g r   r   )r   rD  rE  r3  
check_funcs        r   test_array_api_compliancer  _
  s     v@r   c                 ^   [        U [        5      (       a  [        U[        5      (       d   eg [        U S5      (       aB  [        US5      (       d   e[        U5      S   U:X  d   e[	        U5      [	        U5      :X  d   eg [        U [
        5      (       a  [        U[
        5      (       d   eg g )Nr  r   )r  ru   hasattrrR   array_api_devicestr)out_npout_xpxp_toy2_xps       r   _check_outputr  j
  s    &%  &%((((		!	!vw''''V$Q'5000'+;E+BBBB	FC	 	 &#&&&& 
!r   z)other_ns_and_device, y_pred_ns_and_deviceidc           	      l   [        UR                  UR                  S9u  p4[        UR                  UR                  S9u  pV[        U    n/ SQ/ SQ4/ SQ/ SQ4/ SQ// SQ/4/ SQ/ SQ4/ SQ/ S	Q4S
.n/ SQn	S n
U [        ;   a  S/nO2U 0 [
        E[        E;   a  U [        ;  a  S/nOS/nOU [        ;   a  SS/n[        SS9   W H  nX   u  pU
" XU5      nUR                  XUS9n0 =nnU [        ;  a.  [        R                  " U	5      nSU0nUR                  UUS9nSU0nU
" XU5      nUR                  XUS9nU" UU40 UD6nU" X40 UD6n[        U[        5      (       a&  [!        UU5       H  u  nn[#        UUUU5        M     M  [#        UUUU5        M     SSS5        g! , (       d  f       g= f)a  Check `y_true` and `sample_weight` follows `y_pred` for mixed namespace inputs.

Compares the output for all-numpy vs mixed-type inputs.
If the output is a float, checks that both all-numpy and mixed-type inputs return
a float.
If output is an array, checks it is of the same namespace and device as `y_pred`
(`y_pred_ns_and_device`).
If the output is a tuple, checks that each element, whether float or array,
is correct, as detailed above.
)rE  r  rS  rn  ro  )r   rv   r7  rn  )r   rv   r   r   )g @rX  g      @r  )g@g?rW  rW  )binarybinary_continuouslabel_indicator_continuousregression_integerregression_continuous)rv   rv   r   r   c                 h    [        U S   [        5      (       a  [        X5      nU$ UR                  nU$ )Nr   )r  ru   rQ   int64)datar-  rW   r  s       r   
_get_dtypeCtest_mixed_array_api_namespace_input_compliance.<locals>._get_dtype
  s4    d1gu%%.r:E  HHEr   r  r  r  r  r  Tr=  )rW   r  r2  rV   N)rX   r-  rW   r   rF  r   r  r   REGRESSION_METRICSr	   r/  METRICS_WITHOUT_SAMPLE_WEIGHTr{   r   r  r   r8  r  )r  other_ns_and_devicey_pred_ns_and_device	xp_y_preddevice_y_predxp_otherdevice_otherr   data_allr2  r  
data_cases	data_caser   r   r  y1_xpmetric_kwargs_xpmetric_kwargs_npsample_weight_npsample_weight_xpr  rM  rK  r  r  s                             r   /test_mixed_array_api_namespace_input_compliancer  v
  s   *  4-A-H-H I 2,?,F,FH %F  .*,@A(4~8L7M&N+\:"68L!MH !M ,, Z
	N<NN	N55-.J67J	*	**,CD
	4	0#I(FBr\:E$$RE$JE244/"??#%88M#: $35E#F #+#3#3$\ $4 $  %45E#F rm<E%%be%LEue@/?@Ir:)9:I)U++&))Y&?NFF!&&)UC '@ iIuE5 $ 
1	0	0s   CF%%
F3c                 |   [         U    n[        R                  " / SQ5      n[        R                  " / SQ5      n0 nU [        ;   a  SUS'   [	        SS9   U" X#40 UD6nSSS5        [	        SS9   U" X#40 UD6nSSS5        [        WW[        U5      S	   U5        g! , (       d  f       ND= f! , (       d  f       N:= f)
ad  Check string inputs accepted with array API dispatch enabled.

All thresholded classification metrics that do not require label indicator format
input should work when both inputs (e.g.,`y_true` and `y_pred`) are string (numpy
namespace only) and dispatch is enabled.
Note thresholded classification metrics do not support mixed string and numeric
inputs.
r`  ra  r`  r`  )r`  ra  ra  r`  r`  rA  Tr=  NFr   )r   r{   r   rG  r	   r  rR   )r  r   r   r   r~   metric_enabledmetric_disableds          r   *test_array_api_classification_string_inputr  
  s    " %FXX*+FXX*+FF,,!{	4	09&9 
1 
5	1 :6: 
2 ./=3H3KVT 
1	0 
2	1s   
B/
B-
B*-
B;c                 N   [        XU5      u  pE[        U    n[        R                  " / SQ5      n[        R                  " / SQUS9nUR	                  XS9n	0 n
U [
        ;   a  SU
S'   [        SS9   U" Xx40 U
D6nU" Xy40 U
D6n[        U[        5      (       a!  [        X5       H  u  p[        XXI5        M     O[        XXI5        S	S	S	5        U [        ;  a  [        R                  " / S
Q5      n[        R                  " / SQ/ SQ/ SQ/ SQ/US9nUR	                  XS9n	[        SS9   U" Xx5      nU" Xy5      n[        U[        5      (       a!  [        X5       H  u  p[        XXI5        M     O[        XXI5        S	S	S	5        g	g	! , (       d  f       N= f! , (       d  f       g	= f)a-  Check string inputs and numeric inputs from mixed namespace and devices accepted.

Non-thresholded (aka continuous/ranking) classification metrics should accept
a mix of string and numeric inputs (numeric input should be able to be of
any supported namespace/device), with array API dispatch enabled.
r  ro  r  rV   r`  rA  Tr=  N)r`  ra  cdrw  rx  ra  rz  )rX   r   r{   r   r/  rG  r	   r  r   r8  r  METRIC_UNDEFINED_MULTICLASS)r  rD  rE  r3  r-  rW   r   r   rt  	y_prob_xpr~   rK  rM  r  r  s                  r   8test_array_api_classification_mixed_string_numeric_inputr  
  s   4 &oJOJB%F XX*+F-Z@I

9
4IF,,!{	4	0677	677	i''"%i";fb< #< )> 
1 55./HH$$$$	 
	 JJyJ8	t4v1Iv1I)U++&))&?NF!&"@ '@ iBB 54 6 
1	00 54s   0AF(AF
F
F$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)rV  rX  r   rX  )rX  rV  rV  rV  z can not deal with 1d inputs)r  importorskipSeriesr   to_numpyr   r  rY   )r  r  df_libr   r   r   expected_metrics          r   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.)r  r   r#  r  append)	r   re  ri  paramri  new_combinationsr~   value
new_kwargss	            r   rf  rf  P  s     #%	&)4440F#[[]
$)5! ''
3   1 &6" ( &%r   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   r   r   r   r  c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )r  ru   .0vs     r   	<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   )r  r{   r@  r  s     r   r  r    s!      ?
/4!Jq"**%%us   ')N)r{   r  r  r   r   r   r   r   r  ru   r@  rC  r   float32rZ  )r   r  r   r   r   r  s         r   test_returned_value_consistencyr  e  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  r   r   )r  r+  	functoolsr   inspectr   	itertoolsr   r   r   typingr   numpyr{   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   sklearn.metrics._baser<   sklearn.metrics.pairwiser=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   sklearn.preprocessingrN   sklearn.utilsrO   sklearn.utils._array_apirP   rQ   rR   rS   rT   rU   rW   r  sklearn.utils._testingrX   rY   rZ   r[   r\   r]   r^   sklearn.utils.fixesr_   r`   ra   sklearn.utils.multiclassrb   sklearn.utils.validationrc   rd   r  rF  r   r  r   dictr   updater   r  unionr   r  r  rG  rI  METRICS_WITH_NORMALIZE_OPTIONr  r   r  r   r   r  r  r   r   "METRICS_SUPPORTING_MIXED_NAMESPACEr   r   r   markparametrizesortedr   r   r  r   r  r  r)  CLASSIFICATION_METRICS_REPORTri  r.  r<  rR  rT  r:  r   invalids_nan_infrV  r^  re  rl  rq  filterwarningsru  rw  r{  r  r  r  r  r  intersectionr  r  r  r  r  r  r  r  r  r  thread_unsafer  r  r  r  r  r  r  r  r  r   r  r   r  r)  rQ  r[  rj  rl  ru  r{  r~  r  r  r  array_api_metric_checkersr  r  r  r  r  r  r  r  r  rf  r  )r}   s   0r   <module>r     s    	   2 2    * ; 51 1 1 1 1 1 1 1 1 1 1 1 1d 8    & 1 !    J I 3 EJ. , 4	
 * 2 %&D  8 .AB 6 "#> G$9C 2 . %g.C3&O  2!"  0<#$ ) ##33?"#33?61 62n262 '0GRV(W2 "7>U#K	2
 (2 " $2 "#>2 )'#+2 L2 ]2  !'-5"I!2$ ]%2& '2( L)2* +2, !,-2. '+C0/20 0122 7;
M324 :>526 jqI728  L92: W\:F;2< gmZH=2> W3G?2@ gh8A2B gk7CC2D W_gFE2F ',@G2H 7='BI2J W3GK2L gh8M2N gk7CO2P W_gFQ2R ",@"='B!+ysK)<YQG&	J#L)D$]IF*c2 j@ 'E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$*C"% !H f   4 5   ) *   % &   = !   * &=%B%B& "
 4 0 ," J! ! . D &! J# N! "   ! !& "H	@ (9!:;
 <
B (=!>?: @:4'  
F3{#&HHI

**
Z 
F3{#&HHI{+{+|!!2!  #@#G#G#IJ+ K+ #9#@#@#BC4 D4> 
F3-.1SST22j !BC(/ D(/X VbffbffVbffbffVbffbffVbffa[Vbffa[  	
+
2
2
46H6O6O6QR *,<=  >	
  #9#@#@#BC &&!Q#
&&!Q#  D , #9#@#@#BC  D $7 H%

K -	- /
0		1		 &
 H%(;>Q(Q!RS* T &* (;!<= > (;!<=
 >
$ OP.9H
 : QH
V (;!<= >  (E!FG H8 (E!FG H< 
F0==>QRS,,^32lO" (>!?@U AU 

!$TTUU	U$ (>!?@U AU& (>!?@U AUePP 

K%%c*<&=>
'	(	P	P 

K%%c*<&=>
'	(< <@ 

K
 
!	"
'	( "	"EE 

K
 
!	"
'	( -	-EE" 

	<	<
'	(EE. 

!>>?A	AD2 
F&*G)HHI22$ 
F03FFG66B 

3014VVW2	2* 
&A1,F;
&A1,-
&A1,- (>?
4 @
4 	 $'	4 	5	1	%u-		&	% 	u	D
 f6 74LH^ F2
j%
P8"J*Z'
T.b:j488j 488j 48j 48j& 48'j. <=/j0 4881j: 488;jD 488EjN  488"OjX 488Yjb IJcjd 488ejn 488ojx 488yjB ?CCCjL ?CCMjV ?CCWj` ?CCajj =>kjl !.1R0Smjn !-0Q/Rojp )5qjx 78yjz )5{jB )5CjJ )5KjR )5SjZ )5[jb )5cjj )5kjr )5sjz C()5+{jB C()5+CjJ )KjP =>QjR =>SjT :;UjV ;<WjX 12YjZ #)5%[jb 12cjd !@ Aejf !@ Agjh 67ijj 9:kjl 9:mjn 34ojp 67qjr 78sjt 01ujv )5  )5" 45674 89 ?@Sj Z 7P " .-/ -/P/RSA T	
A	' / =>>D 	d2Ah+47+> /Q(RSPF TPFl 
./%**,-0GG	I )U )U4 .-/ 
./2779:SASASAU=VV%&	
	5C	"5Cp 8(<={(;<= = >=&* !45
 6
]s   .#A@
