
    KiD                       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
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/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrB  S S	KCJDrD  S S
KEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrT  S SKUJVrV  S SKWJXrX  S SKYJZrZJ[r[J\r\J]r]  S SK^J_r_J`r`JaraJbrbJcrcJdrd  S SKeJfrfJgrgJhrh  S SKiJjrj  S SKkJlrlJmrm  0 S\-_S\._S\3_S\4_S\1_S\6_S\/_S\#_S\" \;SS9_S\?_S\@_S\" \5S S 9_S!\2_S"\0_S#\" \5S$S 9_S%\" \ S$S 9_S&\_S'\0Ern0 S(\_S)\_S*\" \S+S,9_S-\" \S.S/9_S0\_S1S2 _S3\7_S4\" \7S+S59_S6\&_S7\B_S8\" \BS.S/9_S9\(_S:\:_S;\<_S<\$_S=\" \%S>S?9_S@\" \%SAS?9_0 SB\,_SC\" \%SDSASE9_SF\" \$SDSG9_SH\" \%SDS>SE9_SI\" \:SDSG9_SJ\" \<SDSG9_SK\" \(SDSG9_SL\" \%SMSASE9_SN\" \$SMSG9_SO\" \%SMS>SE9_SP\" \:SMSG9_SQ\" \<SMSG9_SR\" \(SMSG9_SS\" \%STSASE9_SU\" \$STSG9_SV\" \%STS>SE9_SW\" \:STSG9_E\" \<STSG9\" \(STSG9\" \%SXSASE9\" \$SXSG9\" \%SXS>SE9\" \:SXSG9\" \<SXSG9\" \(SXSG9\SY.	EroSZ rp\>\p\"S[.rq0 S\\_S]\*_S^\+_S_\" \+S.S/9_S`\'_Sa\_Sb\=_Sc\" \=SDSG9_Sd\" \=SXSG9_Se\" \=SMSG9_Sf\" \=STSgSh9_Si\" \=SDSgSh9_Sj\" \=STSkSh9_Sl\" \=SDSkSh9_Sm\" \=SASn9_So\_Sp\" \SDSG9_\" \SXSG9\" \SMSG9\)\8\!\A\\Sq.Err\s" 5       rt\tR                  \r5        \tR                  \o5        \tR                  \n5        \tR                  \q5        1 Srkrv1 Sskrw\vR                  \w5      ry1 Stkrz1 Sukr{1 Svkr|1 Swkr}1 Sxkr~1 Sykr1 Szkr1 S{kr1 S|kr1 S}kr1 S~kr1 SkrSS1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\" \" \t5      \y-
  5      5      S 5       rS r\GR                  GR                  S\" \" \t5      \y-
  5      5      S 5       r0 \oES\0Er\GR                  GR                  S\GR+                  5       5      S 5       r\GR                  GR                  S\oGR+                  5       5      S 5       r\GR                  GR                  S\" \" \o5      \y-
  5      5      S 5       r\GR                  GR                  S\r5      S 5       rS S/\GR4                  \GR4                  /4S S/\GR6                  \GR6                  /4S S/\GR6                  \GR4                  /4S S/\GR4                  S/4S S/\GR6                  S/4/r\GR                  GR                  S\" \rGR+                  5       \nGR+                  5       5      5      \GR                  GR                  S\5      S 5       5       r\GR                  GR                  S\oGR+                  5       5      \GR                  GR                  S\\GR6                  SS>// SQ4\GR4                  SS>// SQ4/-   5      S 5       5       r\GR                  GR                  S\oGR+                  5       5      S 5       rS rS r\GR                  GRE                  S5      \GR                  GR                  S\" \" \t5      \y-
  \" \r5      -
  5      5      S 5       5       r\GR                  GRE                  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RE                  S5      \GR                  GR                  S\f5      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RW                  \5      5      5      S 5       rS rS r\GR                  GR                  S\" \z5      5      S 5       r\GR                  GR                  S\" \z\{-  5      5      S 5       r\GR                  GR                  S\" \z5      5      S 5       rS r\GR                  GR                  S\" \z5      5      S 5       rSS jr\GR                  GR                  S\" \" \t5      GRW                  \" \n5      5      \-
  5      5      S 5       r\GR                  GRl                  \GR                  GR                  S\" \" \t5      GRW                  \" \n5      5      \-
  5      5      S 5       5       r\GR                  GR                  S\" \" \t5      \" \n5      -
  \-
  \v-
  5      5      S 5       r\GR                  GR                  S\" \" \t5      \" \n5      -
  \-
  \y-
  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\" \S31-
  5      5      S 5       r\GR                  GR                  S\" \\-  5      5      S 5       r\GR                  GR                  S\" \" \r5      \y-
  5      5      S 5       r\GR                  GR                  S\o5      S 5       r\GR                  GR                  S\S+4\S+4\$S.4\" \%SS?9S.4\(S.4\9S+4\:S.4\<S.4\>S+4/	5      \GR                  GR                  S\\/5      S 5       5       rS rS rS rS rS rS rS r0 \\\\/_\\\/_\\\/_\\\/_\"\/_\$\\\/_\%\\\/_\(\\\/_\7\\\/_\:\\\/_\9\/_\<\\\/_\B\\\/_\&\\\/_\5\/_\" \5SS 9\/_\" \5SS 9\/_0 \;\\/_\I\/_\#\\/_\.\\/_\1\\/_\3\\/_\4\\/_\6\\/_\ \/_\N\/_\2\/_\F\/_\0\/_\-\/_\/\\/_\G\/_\O\/_E\H\/\J\/\M\/\L\/\K\/\R\/\S\/\?\\/\@\\/\T\/\Q\/\>\/\P\/0Er\4S jr\GR                  GR                  S\]" 5       \\S9\GR                  GR                  S\" 5       5      S 5       5       r\GR                  GR                  SSS/5      \GR                  GR                  S\" \t5      5      S 5       5       rS r\GR                  GR                  S\" \t5      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classification_reportcohen_kappa_scoreconfusion_matrix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pairwise_distancespairwise_kernels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   r2   variance_weighted)multioutputr6   r7   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     c/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/sklearn/metrics/tests/test_common.py<lambda>rt      sH    $)&)009
D
+F
+
/
/Q
/
72::
F	G    (unnormalized_multilabel_confusion_matrix/unnormalized_multilabel_confusion_matrix_sample)
samplewiser   r9   unnormalized_zero_one_lossr   r1   r3   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)r0   lenro   arraypadrm   float64nan)rq   rr   	precisionrecall
thresholdspad_threshholdss         rs   (precision_recall_curve_padded_thresholdsr      sx     %;D$KF$K!Iz)ns:6O88FF!!"**-o.!#			
 ru   )r5   r0   r   r   r!   r"   unnormalized_log_lossr   r   r4   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   r8   r   r   >   r   r/   r   r   r   r!   r   r   r   r    rw   r   >   r   rz   r   r5   r3   r   r   r4   r   r1   r   r   r0   r}   >   r   rz   r3   r   r1   r}   >   r4   r   r   >   r   rz   r   r5   r3   r   r   r1   r   r0   r   r   r   r   r}   >$   r   rz   r"   r   r5   r3   r   r   r   r   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   rg   rf   rv   rw   r}   r   r   r   >   r9   r   r8   >   r"   r   r/   r   r4   r   r   r   r   r   r   r   r!   r   r   r   r   r   r    >   r   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   rc   rv   r   r   r   r   >   r2   r   r(   r*   r%   r-   r+   r   r6   r   r7   r&   >   r   r$   r   r   r9   r   r   r   r   r   r(   r*   r   r   r%   r   r^   r-   r   r   r   r+   r   r6   ry   r7   rc   r   >   rz   r2   r   r5   r   r3   r   r1   r   r   r   r   r   r'   r   r)   r0   r   r   r   r   r   rg   rf   r&   r`   ra   rv   r}   r   r   >   r$   r   r   >   r   r'   r)   r`   c                     [        [        U R                  5       UR                  5       5      5      S-   nX-  n X-  nX4$ )zMake targets strictly positiverj   )absminy1y2offsets      rs   _require_positive_targetsr   P  s9    RVVXrvvx()A-FLBLB6Mru   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   rm   ro   r   r   s      rs   _require_log1p_targetsr   X  s]    RVVXrvvx()D0F	2::	B	2::	BLBLB6Mru   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 ru   rs   test_symmetry_consistencyr   b  sX     	
	 
/
0	1 -	- 
[	    55#%???ru   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)
r[   randintMETRICS_REQUIRE_POSITIVE_Yr   METRICS_WITH_LOG1P_Yr   r   METRIC_UNDEFINED_BINARYMULTILABELS_METRICSrQ   )r   random_statey_truey_pred
y_true_bin
y_pred_binmetrics          rs   test_symmetric_metricr   n  s     &a(L!!!QU!3F!!!QU!3F))26B	%	%/?%%a%:J%%a%:JF&&&&z.z.-4 =<<56"6")D0	
ru   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)	r[   r   ranger   r   r   ro   allclose
ValueError)	r   r   r   always_symmetric_r   r   nominalswappeds	            rs   test_not_symmetric_metricr     s     &a(LF
 1X%%a%7%%a%7--6vFNF(({{7,,$  D6!7899 ru   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   r3   z is not symmetricmatchr   )r   pytestraisesAssertionErrorr   r   )symnot_syms     rs   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   )
r[   r   r   r   r   r   rK   rU   r   rQ   )r   r   r   r   y_true_shuffley_pred_shuffler   s          rs   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   rj   Trl   keepdimsr   r   r   )r[   r   uniformshapern   rK   r   r   rQ   CONTINUOUS_MULTILABEL_METRICSMULTIOUTPUT_METRICS)	r   r   r   y_scorer   r   y_score_shuffler   r   s	            rs   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=	
 $ru   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   rj   )rj   )rj   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)r[   r   r   r   r   r   listro   r   rS   ndimreshaperU   r   rQ   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                 rs   &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% '
 "??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escapero   r   )r   msgs     rs   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   rj   '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)r[   r   random_sampler   r   r   ro   infr   r   r  )r   r   	n_samplesr   r   r'  s         rs   .test_classification_with_invalid_sample_weightr1    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)r[   r   ro   r   rU   CLASSIFICATION_METRICSMETRICS_WITH_POS_LABELr   rS   formatrm   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                rs   7test_classification_invariance_string_vs_numbers_labelsrG    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   r3  r4  r5  r7  r   r8  r9  )r[   r   ro   r   rU   r   r   r<  r   rS   r=  rm   r   r   r   )r   r   r   r   r?  rA  r   rD  rC  rE  rF  s              rs   Btest_continuous_classification_invariance_string_vs_numbers_labelsrI    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:rj   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      rs   test_continuous_inf_nan_inputrK    s>     )	z)C	Dv 
E	D	Ds	   	<
A
)rj   r{   r,  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)ro   isfiniteallr  anyr   r   r   )r   r   r	  
input_nameunexpected_valuer   s         rs   !test_classification_inf_nan_inputrS  )  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brU  皙?皙?333333?zJClassification metrics can't handle a mix of binary and continuous targetsr   N)r   r   r   )r   r   r	  r   s       rs   +test_classification_binary_continuous_inputr[  L  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 )Nrj   r{   gffffffr   repeat)r   r   r   r   )r   r   valuesijs        rs   check_single_samplerb  X  s^    
 F ))Q	%	%Qq)sQC *ru   c                     [         U    n[        SS/SS9 H;  u  p#pEU" [        R                  " X#//5      [        R                  " XE//5      5        M=     g )Nr   rj      r]  )r   r   ro   r   )r   r   r`  ra  kls         rs   check_single_sample_multioutputrg  j  sI    Fq!fQ/
arxx!!288aVH#56 0ru   ignorec                     [        U 5        g r   )rb  r   s    rs   test_single_samplerk  q  s     ru   c                     [        U 5        g r   )rg  rj  s    rs   test_single_sample_multioutputrm    s     $D)ru   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)rj   r   r   rj   )r   rj   rj   rj   )rj   rj   r   rj   r   rj   ro   r   r   r   r   r   )r   r   r   r   s       rs   (test_multioutput_number_of_output_differrp    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   r,  rj   z'%s is not dimension shuffling invariantr   )r[   r  r   r   permutationr  rQ   )r   r   r   r   r   errorr   perms           rs   =test_multioutput_regression_invariance_to_dimension_shufflingrv    s     &a(L!!!QW!5F!!!QW!5FF6"E1X''Q86!T'?F1d7O4=F	
 ru   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 )Nrd  2   rj   r   T
n_features	n_classesr   r0  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	   ro   vstackr  r   r   
isinstancer   
__module____name__rQ   rR   )rw  r|  r0  r   r   r   y1_sparse_indicatory2_sparse_indicatory1_list_array_indicatory2_list_array_indicatorrU  y1_list_list_indicatory2_list_list_indicatorr   r   r  s                   rs   )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)Nrj   r{   r   )r   r{   )r   rj   r   objectdtypero  )r   multilabel_sequencesr   seqs       rs   +test_raise_value_error_multilabel_sequencesr    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   Trd   F      0We failed to test correctly the normalize optionr   Failed with )r[   r   normalr  r   r   rT   rQ   r   r|  r0  r   r   r   r	  metricspredmeasure_normalizedmeasure_not_normalizeds              rs   +test_normalize_option_binary_classificationr    s     II%a(L!!!Y\!BF!!!Y\!BF!!v||!4G$G??7VD >$VUC!!	B *tf%ru   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 )Nrd  r   r   r   Trd   Fr  r  r   r  )r[   r   r  r   r   rT   rQ   r  s              rs   /test_normalize_option_multiclass_classificationr    s     II%a(L!!!Y\!BF!!!Y\!BF""(>"?G$G??7VD >$VUC!!	B *tf%ru   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 )Nrd  d   r   rj   T)r{  r|  r   r}  r0  r   rd   Fr  r  r   r  )r[   r	   r  r  r   r   rT   rQ   )r   r|  r0  r   r   r   r   r	  r  r  r  r  s               rs   /test_normalize_option_multilabel_classificationr  <  s    
 II%a(L /IA /IA """5G qcIoF
qcIoF$G??7VD >$VUC!!	B *tf%ru   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   )rl   r  r   )weightsr   unknowngarbage)r  rQ   r   ravelro   meanrn   intr   r   r   r   )r   r   r   y_true_binarizey_pred_binarizeis_multilabelr0  r|  label_measurer`  micro_measuremacro_measurer  weighted_measuresample_measures                  rs   _check_averagingr  n  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)rY   
startswithr   METRICS_WITH_AVERAGINGr  /CONTINOUS_CLASSIFICATION_METRICS_WITH_AVERAGINGr   )r   r   r  r   r  r	  r  r   s           rs   check_averagingr    sa    "6*55lCMF%%F_	
 
@	@Gg	
 MNNru   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)ry  r,  r   r   )r[   r   r  rJ   fit	transformr  )
r   r0  r|  r   r   r   r	  lbr  r  s
             rs   test_averaging_multiclassr    s     I%a(L!!!Y\!BF!!!Y\!BF""(>"?G				f	%Bll6*Oll6*OD/?Tru   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   rj   r   Frz  r   r   r   )r	   r[   r  r  )
r   r0  r|  r   yr   r   r	  r  r  s
             rs   test_averaging_multilabelr    sq    
 !I)DA sVFrsVF #**Y*@GOOD/?Tru   c                     [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUnUn[        XXBXS5        g Nr   r,  )ro   zerosr  r   r   r   r	  r  r  s         rs   $test_averaging_multilabel_all_zeroesr    sB    XXgFXXgFhhwGOOD/?Tru   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:   r1   )r   r	  r   s      rs   rt   =test_averaging_binary_multilabel_all_zeroes.<locals>.<lambda>  s    =R'>ru   T)r  )r   )ro   r  r  )r   r   r  r  binary_metrics        rs   +test_averaging_binary_multilabel_all_zeroesr    sK    XXgFXXgFOOM ru   c                     [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUnUn[        XXBXS5        g r  )ro   onesr  r  s         rs   "test_averaging_multilabel_all_onesr    sB    WWWFWWWFgggGOOD/?Tru   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 R                  S5      (       d,  U S:X  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   rj   
   r   r8   )re  r&  )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 != rk   z.Weighting %s is not equal to repeating samplesr{   zUZeroing weights does not give the same result as removing the corresponding samples (unnormalizedr-   rZ  z/%s sample_weight is not invariant under scalingzJFound input variables with inconsistent numbers of samples: \[{}, {}, {}\]r   )ro   randomRandomStater   r   r   rQ   r  r   r   r   r   tolistr^  copyr  r=  rZ   hstack)r   r   r   r   r'  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                      rs   check_sample_weight_invariancer    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	? ??>**
 !%(? ?!aX%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 )Nry  r   r   )r[   r.  ro   aranger   r   r  )r   r0  r   r   r   r'  r   s          rs   (test_regression_sample_weight_invariancer  h  se     I%a(L''i\':F''i\':FIIc&k*MF"4Oru   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)Nry  r   r   rj   r%  r   r&  r(  r)  r*  r+  r,  r{   r-  )r[   r.  r   r   r   r   ro   r/  r   r   r  )r   r0  r   r   r   r   r'  s          rs   *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 [        ;   a  [        XX55        g [        XX45        g )Nry  r   r{   r   )r[   r   r.  r   r   r  )r   r0  r   r   r   r	  r   s          rs   $test_binary_sample_weight_invariancer    s     I%a(L!!!Qi\!:F!!!Qi\!:F((yl(;GF00&tVE&tVDru   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 )Nry  r   r   r   r  rk   rj   )
r[   r   r.  r   r   ro   exprn   r  r  )	r   r0  r   r   r   r	  r   tempy_score_norms	            rs   (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Dru   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   rj   r  ry  Frz  r   Tr  )
r[   r	   ro   r  r  r  rn   r   r   r  )	r   r   r   yaybr   r   r	  r   s	            rs   (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Dru   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{   rr  r   )r[   r  r   r  )r   r   r   r   r   s        rs   )test_multioutput_sample_weight_invariancer    sP    
 &a(L!!!QW!5F!!!QW!5FF"4@ru   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)rj   rj   r   r   r   r   rj   rj   )r   rj   rj   r   )r   rj   r{   )r   r{   r,  )r,  r   rj   r{   T)return_inverserj   )r:  r   r   )ro   r   uniquer  r   r  r   rS   )y_true_multilabely_pred_multilabely_true_multiclassy_pred_multiclassr:  r   inverse_labelsr   r   r   r   score_labelsscores                rs   test_no_averaging_labelsr    s     ,!=>,!=>++XXl#F		&>A&22
NF ..6;;? &F!&NL648E|>-BC
 'ru   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   rd  r{   r   )r[   r   r   r   r   rR   r   r   r0  r|  r   r	  r   r  ru  y_score_permy_true_permcurrent_scores               rs   -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 :ru   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   rj   Tr  rd  g    .A)r[   r   r  r  rn   r   r   r   r&   ro   rN  rR   r  s               rs   >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 :ru   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  r,  r   r  rk   rj   r   r  )r[   randro   r  rn   r  r   r   r   r   r  r  r  r  takerR   )r   r0  r|  r   r	  r  r   r   r  ru  inverse_permr  r  r  s                 rs   -test_continuous_metric_permutation_invariancer  S  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 :ru   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*   r4  r,  r3  r{   r  r   r   z7Labels in y_true and y_pred should be of the same type.r   )ro   r  r  r   r  r   r   r   r   	TypeErrorr;  )r  r  r   r   r   s        rs   "test_metrics_consistent_type_errorr  l  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  r4  r,  r3  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 explicitzHpos_label=1 is not a valid label. It should be one of \['eggs', 'spam'\]r6  rj   r   )ro   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
             rs    test_metrics_pos_label_error_strr  y  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                   ^^^ [        X5      mTR                  XBS9nTR                  XRS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 " Xx4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 " XH40 UD6nU" X5        U " Xu40 UD6nU" UU	5        O+T" X5        U " XH40 UD6nT" X5        U " Xu40 UD6nT" UU	5        [        SS	9   U " Xx4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)N)devicer'  r]   TFc                 p   > U(       a  [        TR                  U 5      T5      n [        X[        T5      S9  g )N)atol)rM   asarrayrQ   rL   )metric_ametric_b	convert_a
dtype_namexps      rs   _check_metric_matches5check_array_api_metric.<locals>._check_metric_matches  s*    (H)=rBH
1KLru   c                 <   > [        X5       H  u  p4T" X4US9  M     g )Nr&  )zip)r$  r%  r&  metric_a_valmetric_b_valr)  s        rs   _check_each_metric_matches:check_array_api_metric.<locals>._check_each_metric_matches  s     *-h*A&L!,	R +Bru   rj   )array_api_dispatchr,  )F)rP   r#  getr  ro   ndarrayr  RuntimeErrorr   tupler   r   r  r   )r   array_namespacer   r'  a_npb_npmetric_kwargsa_xpb_xp	metric_npr]   numpy_as_array_worksr0  	metric_xp
metric_valmetric_xp_mixed_1metric_xp_mixed_2r)  r(  s      `             @@rs   check_array_api_metricrC    s    
o	6B::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!"3? &t C] C!"3Y?	4	0477	 i''&ytL!)$G 
1	0U |Z0 %
  %%. G& 
1	0s$   !.G G,.G1G)(G)1
G?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   rj   r   rj   r   r|   r~   r8  r9  r'          rX         @      ?r  )ro   r   r  rC  )r   r7  r   r'  	y_true_np	y_pred_npr:  r'  s           rs   ,check_array_api_binary_classification_metricrL    s     &I&IM-'		
 	 	 HH1DM		
 #	 	ru   c                    [         R                  " / SQ5      n[         R                  " / SQ5      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   rj   r{   r,  )r   rj   r   r{   r   r   r   rY  r~   g?)FT)r   r|   rb   r   paramsrE  rF  r  ro   r   (_get_metric_kwargs_for_array_api_testingrC  
r   r7  r   r'  rJ  rK  additional_paramsmetric_kwargs_combinationsr:  r'  s
             rs   0check_array_api_multiclass_classification_metricrW    s     &I&I 2!
 "J " 4			

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

 '		
 		
 4ru   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 )
Nrj   r   r  rN  rO  r   rP  rE  )rG  rX  rH  rR  rT  s
             rs   0check_array_api_multilabel_classification_metricrY  =  s     1a&1a&1a&1DI1a&1a&1a&1DI 2 "J " 4			

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

 '		
 		
 4ru   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)rH  rX  rI  g      @r  )r~   r~   r{   r{   r'  r8  r9  )rX  rH        ?r~   )r  r   funcr  rX   rW   r   skipro   r   r   r  rC  )	r   r7  r   r'  	func_namerJ  rK  r:  metric_paramss	            rs   !check_array_api_regression_metricra  e  s   (267(C(C$$I++
]8=T0TX	
 -Z@I)<IMf%00M-')-o&	
   -')+ 
*
o& 			

 	
 	
 (ru   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)rj   r,  r{   )rj   r{   r{   r  )rj   rd  rd  )rj   rj   rj   rE  rX  rH  )rX  rZ  ffffff?)r8  r9  r]   
raw_values)ro   r   rC  )r   r7  r   r'  rJ  rK  r'  s          rs   -check_array_api_regression_metric_multioutputre    s     )Y/zBI)Y/zBI HHc3Zz:M# HH_J?  ru   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 )
NrW  )皙?r~   333333?r  )rY  rZ  rg  )r~   rh  rc  dense_outputFr[  T)ro   r   r   r  rC  )r   r7  r   r'  X_npY_npr:  s          rs   check_array_api_metric_pairwiserl    s    88_o6jID88_o6jIDM6*555(-n%		

 	
 	
 )-n%	
  ru   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       rs   !yield_metric_checker_combinationsrr  _	  s-     +113G/!   4s   )+z#array_namespace, device, dtype_name)idszmetric, check_funcc                     U" XX#5        g r   r   )r   r7  r   r'  
check_funcs        rs   test_array_api_compliancerv  e	  s     v;ru   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)rG  rI  r   rI  )rI  rG  rG  rG  z can not deal with 1d inputs)r   importorskipSeriesr   to_numpyr   r^  rQ   )r  rw  df_libr   r   r   expected_metrics          rs   test_metrics_dataframe_seriesr  o	  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.)rn  r   r  r  append)	r   rQ  rV  paramr_  new_combinationsrr   value
new_kwargss	            rs   rS  rS  	  s     #%	&)4440F#[[]
$)5! ''
3   1 &6" ( &%ru   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  ri   .0vs     rs   	<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  ro   r4  r  s     rs   r  r  	  s!      ?
/4!Jq"**%%us   ')N)ro   r  r  r   r   r   r   r   r  ri   r4  r6  r   float32rO  )r   r  r   r   r   r  s         rs   test_returned_value_consistencyr  	  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  ru   r   )r  r   	functoolsr   inspectr   	itertoolsr   r   r   numpyro   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   r7   r8   r9   sklearn.metrics._baser:   sklearn.metrics.pairwiser;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   sklearn.preprocessingrJ   sklearn.utilsrK   sklearn.utils._array_apirL   rM   rN   rO   sklearn.utils._testingrP   rQ   rR   rS   rT   rU   sklearn.utils.fixesrV   rW   rX   sklearn.utils.multiclassrY   sklearn.utils.validationrZ   r[   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  CLASSIFICATION_METRICS_REPORTr_  r#  r1  rG  rI  r/  r   invalids_nan_infrK  rS  r[  rb  rg  filterwarningsrk  rm  rp  rv  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  strr  r  rC  rL  rW  rY  ra  re  rl  array_api_metric_checkersrr  rv  r  rS  r  r   ru   rs   <module>r     s    	   2 2   * ; 50 0 0 0 0 0 0 0 0 0 0 0 0b 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$*C"% !H f   4 5   ) *   % &   = !   ( &=%B%B& "
 3 / *% P! ! . D "  H  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8 
F0==>QRS,,^32lO" (>!?@U AU 

!$SSTU	U$ (>!?@U AU& (>!?@U AUbPJ 

K%%c*<&=>
'	(	P	P 

K%%c*<&=>
'	(< <@ 

K
 
!	"
'	( "	"EE 

K
 
!	"
'	( -	-EE" 

	<	<
'	(EE. 

!>>?A	AD2 
F&*T)UUV22$ 
F03FFG66B 

3014VVW2	2* (>?	4 @	4 	 $'	4 	5	1	%u-		&	% 	u	D
 f6 74LH^ F&
R%
P'
T.b:488 48 48 48$ <=%& 488'0 4881: 488;D  488"EN 488OX IJYZ 488[d 488en 488ox =>yz !.1R0S{| !-0Q/R}~ )5F 78GH )5IP )5QX )5Y` )5ah )5ip )5qx )y~ =>@ =>AB :;CD ;<EF 12GH #)5%IP 12QR !@ AST 679:9:34677801)5  )5" 45674 89} D 7P " )-/'  
 -/P/RS< T< 8(<={(;<= = >=&* !45
 6
ru   