
    Q3j                    v!   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d d
lFmGZG d dlHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY d dlZm[Z[ d dl\m]Z] d dl^m_Z_m`Z`maZambZbmcZcmdZd d dl^meZf d dlgmhZhmiZimjZjmkZkmlZlmmZmmnZn d dlompZpmqZqmrZr d dlsmtZt d dlumvZvmwZw i de0de1de6de7de4de9de2de&d ee>d      deBd eCd! ee8d "      d#e5d$e3d% ee8d&"      d'e8d( ee#d&"      e" ee"d)*       ee"d+*      ed,Zxi d-ed.ed/ eed01      d2 eed34      d5ed6d7 d8e:d9 ee:d0:      d;e)d<eEd= eeEd34      d>e+d?e=d@e?dAe'dB ee(dCD      dE ee(dFD      i dGe/dH ee(dIdFJ      dK ee'dIL      dM ee(dIdCJ      dN ee=dIL      dO ee?dIL      dP ee+dIL      dQ ee(dRdFJ      dS ee'dRL      dT ee(dRdCJ      dU ee=dRL      dV ee?dRL      dW ee+dRL      dX ee(dYdFJ      dZ ee'dYL      d[ ee(dYdCJ      d\ ee=dYL       ee?dYL       ee+dYL       ee(d]dFJ       ee'd]L       ee(d]dCJ       ee=d]L       ee?d]L       ee+d]L      ed^	Zyd_ ZzeeAeze%d`Z{i daedbe-dce.dd ee.d34      dee*dfedge@dh ee@dIL      di ee@d]L      dj ee@dRL      dk ee@dYdlm      dn ee@dIdlm      do ee@dYdpm      dq ee@dIdpm      dr ee@dFs      dtedu eedIL       eed]L       eedRL      e,e;e$eDe e!dvZ| e}       Z~e~j                  e|       e~j                  ey       e~j                  ex       e~j                  e{       h dwZh dxZej                  e      Zh dyZh dzZh d{Zh d|Zh d}Zh d~Zh dZh dZh dZh dZh dZh dZh dZdd hZg dZd Zd Zd Zej,                  j/                  d ee            d        Zej,                  j/                  d ee            d        Zd Zej,                  j/                  d e ee~      ez
              d        Zd Zej,                  j/                  d e ee~      ez
              d        Zi eydeiZej,                  j/                  dejC                               d        Zej,                  j/                  deyjC                               d        Zej,                  j/                  d e eey      ez
              d        Zej,                  j/                  de|      d        Zd dgejL                  ejL                  gfd dgejN                  ejN                  gfd dgejN                  ejL                  gfd dgejL                  dgfd dgejN                  dgfgZej,                  j/                  d ee|jC                         exjC                                     ej,                  j/                  de      d               Zej,                  j/                  deyjC                               ej,                  j/                  deejN                  ddCgg dfejL                  ddCgg dfgz         d               Zej,                  j/                  deyjC                               d        Zd Zd Zej,                  j]                  d      ej,                  j/                  d e ee~      ez
   ee|      z
              d               Zej,                  j]                  d      ej,                  j/                  d eeez              d               Zej,                  j/                  d ee            d        Zej,                  j/                  d ee            d        Zej,                  j]                  d      ej,                  j/                  dep      d               Zej,                  j/                  d ee            d        Zej,                  j/                  d ee            d        Zej,                  j/                  d ee            d        Zej,                  j/                  d eejo                  e                  d        Zd Zd Zej,                  j/                  d ee            d        Zej,                  j/                  d eeez              d        Zej,                  j/                  d ee            d        Zd Zej,                  j/                  d ee            d        ZddZej,                  j/                  d e ee~      jo                   eex            ez
              d        Zej,                  j                  ej,                  j/                  d e ee~      jo                   eex            ez
              d               Zej,                  j/                  d e ee~       eex      z
  ez
  ez
              d        Zej,                  j/                  d e ee~       eex      z
  ez
  ez
              d        Zej,                  j/                  d eeez  ez
              d        Zej,                  j/                  d eeez
              d        Zd Zej,                  j/                  d eed8hz
              d        Zej,                  j/                  d eeez              d        Zej,                  j/                  d e ee|      ez
              d        Zej,                  j/                  d ej                  dgdz  dgdCz  z   eͬ       ej                  dgdz  dgdCz  z          ej                  dgdz  dgdCz  z         g      ej,                  j/                  dey      dÄ               Zej,                  j/                  ded0fed0fe'd3f ee(dD      d3fe+d3fe<d0fe=d3fe?d3feAd0fg	      ej,                  j/                  deeg      dƄ               ZdǄ ZdȄ ZdɄ Zdʄ Zd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ Zi eeeegeeeegeeegeeegeeege%ege'eeege(eeege+eeege:eeege=eeege<ege?eeegeEeeege)eeegeeeege.eeegi e eeege!eeege8eg ee8dѬ"      eg ee8dҬ"      ege>eegeLege&eege1eege4eege6eege7eege9eegeeege"eeg ee"d)*      eeg ee"d+*      eegi e#egeQege5egeIege3ege0ege2eegeJegeRegeSegeKegeMegePegeOegeNegeWegeXegeBeegeCeegeYegeVegeAegeTegeUegiZefdӄZej,                  j/                  d ed             ej,                  j/                  d eܫ             dք               Zdׄ Zej,                  j/                  d ec       D  cg c]  }  ej                  | ddC d| dC   i c}       ej,                  j/                  d ee            dڄ               Zej,                  j/                  d e ee       eeyj                               ez
  z              endۄ               Zej,                  j/                  d ed             ej,                  j/                  d e ee       ee|j                                ee{j                               z  ez
  z              d܄               Zej,                  j/                  dddg      ej,                  j/                  d ee~            d               Zd Zej,                  j/                  d ee~            d        Zyc c} w )    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                      t        | i |j                  d      t        | i |j                  d      d d t        j                  f   z  S )Nfloat   axis)r   astypesumnpnewaxis)argskwargss     N/DATA/.local/lib/python3.12/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            
         t        | i |\  }}}t        |      t        |      z
  }t        j                  ||t        j                  |j                  t        j                        d|fdt        j                  g      g      S )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      sz     %;D$KF$K!Ivz^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                     t        t        | j                         |j                                     dz   }| |z  } ||z  }| |fS )zMake targets strictly positiverv   )absminy1y2offsets      r   _require_positive_targetsr     s?    RVVXrvvx()A-F&LB&LBr6Mr   c                    t        t        | j                         |j                                     dz
  }| j                  t        j                        } |j                  t        j                        }| |z  } ||z  }| |fS )z$Make targets strictly larger than -1gGz?)r   r   ry   r{   r   r   s      r   _require_log1p_targetsr     sc    RVVXrvvx()D0F	2::	B	2::	B&LB&LBr6Mr   c                      t         t        z  t        t              z  t        z  t        t
              k(  sJ t         t        z  t               k(  sJ y 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                    t        d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}n| t        v rt        ||      \  }}|j                  ddd      }|j                  ddd      }t        |    }| t        v r/| t        v r t         |||       |||      d| z         y J d       t         |||       |||      d| z         y )	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))266B	%	%/?%%a%:J%%a%:JF&&&&z:.z:.-4 =<<566"66")D0	
r   c                 F   t        d      }t        |    }d}t        d      D ]m  }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }} |||      } |||      }t        j                  ||      rkd} n |rt        |  d      y )	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--6vvFNFF(({{7G,$  D6!7899 r   c                  0   d} d}t        |        t        j                  t        | d      5  t        |       d d d        t	        |       t        j                  t
        |  d      5  t	        |        d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)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   B +B B	Bc                 x   t        d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}n| t        v rt        ||      \  }}t        ||d      \  }}t               5  t        |    }t         |||       |||      d| z         d d d        y # 1 sw Y   y xY w)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))266B	%	%/?%,VV!%L"NN		T"66">>26=	
 
		s   >)B00B9c                  d   t        d      } | j                  ddd      }| j                  ddd      }| j                  |j                        }||j	                  dd      z  }t        |||d      \  }}}t        D ]*  }t        |   }t         |||       |||      d	|z  
       , t        D ]*  }t        |   }t         |||       |||      d	|z  
       , t        D ]I  }t        |   }t         |||       |||      d	|z  
       t         |||       |||      d	|z  
       K y )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    sZ   %a(L !!!QX!6F!!!QX!6F"""5G w{{D{11G6=a73NNO $T"66">>26=	
 $ .T"67#>?36=	
 . $T"67#>?36=	

 	66">>26=	
 $r   c                 <   t        d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}n| t        v rt        ||      \  }}t        |      }t        |      }t        j                  |      t        j                  |      }}t        |j                  d       t        |j                  d       t        j                  |d      }t        j                  |d      }	t        j                  |d      }
t        j                  |d      }t               5  t        |    } |||      }t         |||      |d| z  	       t         |||      |d
| z  	       t         |||	      |d| z  	       t         |||      |d| z  	       t         |||      |d| z  	       t         |||	      |d| z  	       t         |||      |d| z  	       t         |||	      |d| z  	       t         |||      |d| z  	       t        j                   t"              5   |||       d d d        t        j                   t"              5   ||
|       d d d        t        j                   t"              5   |||       d d d        t        j                   t"              5   ||
|       d d d        t        j                   t"              5   |||       d d d        t        j                   t"              5   ||
|	       d d d        | t$        t&        z  t(        z  vrqd| v rBt        j*                  t,              5  t/        j0                   ||
|            sJ 	 d d d        n+t        j                   t"              5   ||
|       d d d        d d d        y # 1 sw Y   qxY w# 1 sw Y   SxY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   jxY w# 1 sw Y   y xY w)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))*2r2B	%	%'B/B2hG2hG88B<"5Euzz1%uzz1%

5'*I

5'*IZZw'FZZw'F		T"R.7G$BTI	
 	5% IDP	
 	9i(MPTT	
 	5'"V	
 	7E"V	
 	5)$2 		
 	9e$2 		
 	7I&V	
 	9g&V	
 ]]:&5&! ']]:&65! ']]:&7F# ']]:&67# ']]:&9f% ']]:&69% '
 "??BUU
 D  \\"89::fVV&<=== :9 ]]:.66* /K 
	Z '&&&&&&&&&&& :9 /.K 
	s   1DP5
N.?!P 
N;*!P
O!P6
O !P!
O"+!P
O.;PO:1"P
PP.N8	3P;O	 PO	PO	P"O+	'P.O7	3P:P	?PP	PPr   r   c                     d}t        j                  t        t        j                  |            5   | t        j                  g       t        j                  g              d d d        y # 1 sw Y   y xY w)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   0A**A3c                    t        d      }d}|j                  dd|f      }|j                  dd|f      }|j                  |dz
  f      }t        j                  t
        d      5   | |||       d d d        |j                  |f      }t        j                  |d<   t        j                  t
        d	      5   | |||       d d d        t        j                  |d<   t        j                  t
        d
      5   | |||       d d d        t        j                  g d      }t        j                  t
        d      5   | |d d |d d |       d d d        |j                  |dz  f      j                  |df      }t        j                  t
        d      5   | |||       d d d        y # 1 sw Y   DxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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r2]3 
T !..YL.AMvvM!	z)P	Qr2]3 
R vvM!	z)K	Lr2]3 
M HH56M	z)E	Fr"1vr"1v]; 
G !..Y]4D.EMM	AM 
z)T	Ur2]3 
V	U' 
T	S
 
R	Q 
M	L 
G	F 
V	Us<   )F7>G GG"G(7GGGG%(G1c                 @   t        d      }|j                  ddd      }|j                  ddd      }t        j                  ddg      |   }t        j                  ddg      |   }d}ddg}t	               5  t
        |    } |||      }	|}
| t        v rt        |
|      }
 |
||      }t        |	|dj                  |       	        |
|j                  d
      |j                  d
            }t        |	|dj                  |       	       | t        v rwt        |
|      }
 |
||      }t        |	|dj                  |       	        |
|j                  d
      |j                  d
            }t        |	|dj                  |       	       d d d        y # 1 sw Y   y xY w)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		'-$Rn 
)) }EJ%ff5AHHN	
 )s);V]]3=OPHOOPTU	
 && J?J)&&9# FMMdS #-V]]3-?sAS"T##FMMdSE 
		s   8DFFc                    t        d      }|j                  ddd      }|j                  ddd      }t        j                  ddg      |   }d}t	               5  t
        |    }| t        vr||}| t        v rt        ||      } |||      } |||      }	t        ||	dj                  |       	        ||j                  d
      |      }
t        ||
dj                  |       	       net        j                  t              5   |||       d d d        t        j                  t              5   ||j                  d
      |       d d d        d d d        y # 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   y xY w)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  -  sZ    &a(L			a		/B			a		/BXXvv&'+FM		248..J--$Z=I
"(R.)&"5# ELLTR #-V]]3-?"D##LSS z*vr" +z*v}}S)2. +9 
	4 +***9 
	s=   B'E.
E!E.,E"E.E	E."E+	'E..E7rv   zy_true, y_scorec                     | t         k(  r|g}|g}t        j                  t        d      5   | ||       d d d        y # 1 sw Y   y xY w)Nzcontains (NaN|infinity)r   )r   r  r  r   )r   r   r  s      r   test_continuous_inf_nan_inputrV  b  s@     )	z)C	Dvw 
E	D	Ds	   
>A)rv   r   r7  c                 v   t        j                  |      j                         s+d}t        j                  |      j	                         rd}n-d}n*d}t        j                  |      j	                         rd}nd}d| d| }t        j                  t        |      5   | ||       ddd       y# 1 sw Y   yxY w)	z{check 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vw 
2	1	1s   
B//B8c                     g dg d}}d}t        j                  t        |      5   | ||       ddd       y# 1 sw Y   yxY w)zocheck 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    s;     &GFT  
z	1vw 
2	1	1s	   
9Ac                     t         |    }| t        v rddg}n| t        v rddg}nddg}t        |d      D ]  \  }} ||g|g        y )Nrv   r   gffffffr   repeat)r   r   r   r   )r   r   valuesijs        r   check_single_samplerl    s`    
 F ))Q	%	%Qq)1sQC *r   c                     t         |    }t        ddgd      D ]<  \  }}}} |t        j                  ||gg      t        j                  ||gg             > y )Nr   rv      rg  )r   r   r{   r   )r   r   rj  rk  kls         r   check_single_sample_multioutputrq    sQ    Fq!fQ/
1arxx!Q!288aVH#56 0r   ignorec                     t        |        y r   )rl  r   s    r   test_single_sampleru    s     r   c                     t        |        y r   )rq  rt  s    r   test_single_sample_multioutputrw    s     $D)r   c                     t        j                  g dg dg dg      }t        j                  ddgddgddgg      }t        |    }t        j                  t
              5   |||       d d d        y # 1 sw Y   y xY w)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{    sd    XX|\<@AFXX1v1v1v./FF	z	"vv 
#	"	"s   
A22A;c           	      6   t        d      }|j                  ddd      }|j                  ddd      }t        |    } |||      }t        d      D ]F  }|j	                  |j
                  d         }t         ||d d |f   |d d |f         |d| z         H y )	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66"E1X''Q86!T'?F1d7O4=F	
 r   z1ignore::sklearn.exceptions.UndefinedMetricWarningcoo_containerc                    d}d}t        d|d|d      \  }}t        d|d|d      \  }}t        j                  |dg|z  gg      }t        j                  |dg|z  gg      } | |      } | |      }t        |      }t        |      }	|D 
cg c]  }
t        |
       }}
|	D 
cg c]  }
t        |
       }}
t        D ]z  }t
        |   }t        |t              rd|_        ||_	         |||      }t         |||      |d|z  	       t         |||      |d
|z  	       t         |||	      |d|z  	       | y c c}
w c c}
w )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*EAr +EAr 
B!y)*	+B	B!y)*	+B'+'+"2h"2h/FG/F!d1g/FG/FG/F!d1g/FG#T" fg& %F"FOR. 	&(;<6 		
 	)+AB% 		
 	*,CD% 		
= $ HGs   D=%Ec           	          dgdgddggg dg gdgt        j                  g ddggd      g}t        |    }|D ]-  }t        j                  t
              5   |||       d d d        / y # 1 sw Y   :xY w)Nrv   r   r   )r   r   )r   rv   r   objectdtyperz  )r   multilabel_sequencesr   seqs       r   +test_raise_value_error_multilabel_sequencesr  8  s|     qcAq6		
"q!fX. F#]]:&3 '& $&&s   
A((A1	c                 N   d}d}t        d      }|j                  d||f      }|j                  d||f      }|j                  |j                        }t        |    }| t
        v r|n|} |||d      }	 |||d      }
t        d|	z  dd	
       t        |	|
|z  d|  
       y )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!!!Yi\!BF!!!Yi\!BF"""5G$G??7VD >$VTUC!!	B *tf%r   c                    d}d}t        d      }|j                  d||f      }|j                  d||f      }|j                  ||      }t        j                  |       }||j                  d      j                  dd      z  }t        |    }| t        v r|n|}	 |||	d	      }
 |||	d
	      }t        d|
z  dd       t        |
||z  d|         y )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!!!Yi\!BF!!!Yi\!BF	95G667(DTXX2X&..r155G$G??7VD >$VTUC!!	B *tf%r   c                 j   d}d}t        d      }t        d|dd|      \  }}t        d|dd|      \  }}|j                  |j                        }|dg|z  z  }|dg|z  z  }t        |    }| t
        v r|n|}	 |||	d      }
 |||	d	      }t        d
|
z  dd       t        |
||z  d|         y )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 /IAv /IAv """5G qcIoF
qcIoF$G??7VD >$VTUC!!	B *tf%r   c                    |j                   \  }} | ||d       }t        |t        |      D 	cg c]  }	 | |d d |	f   |d d |	f          c}	        | ||d      }
t        |
 | |j                         |j                                       | ||d      }t        |t	        j
                  |             t	        j                  |dt              }t	        j                  |      dk7  r- | ||d      }t        |t	        j                  ||             n | ||d      }t        |d       |rN | ||d      }t        |t	        j
                  t        |      D 	cg c]  }	 | ||	   ||	          c}	             t        j                  t              5   | ||d	       d d d        t        j                  t              5   | ||d
       d d d        y c c}	w c c}	w # 1 sw Y   AxY w# 1 sw Y   y xY w)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Iy 6648M 9%	
% ?1a4(/!Q$*?@%	
 667;Mvo3357L7L7NO
 667;MM277=#9: ff_1C8G	vvg!!&&*E("**]G*TU!&&*E(!, 	BGG #9-- ?1-q/AB-	
 
z	"vvy1 
#	z	"vvy1 
#	"S	
@ 
#	"	"	"s#   G
GG$G0$G-0G9c                     t        |      j                  d      }t        |    }| t        v rt	        ||||||       y | t
        v rt	        ||||||       y t        d      )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    sm    "6*55lCMF%%FFO_m	
 
A	AFG_g}	
 MNNr   c                 6   d\  }}t        d      }|j                  d||f      }|j                  d||f      }|j                  ||f      }t               j	                  |      }|j                  |      }|j                  |      }	t        | ||||	|       y )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     Iy%a(L!!!Yi\!BF!!!Yi\!BF""I(>"?G				f	%Bll6*Oll6*OD&/6?GTr   c                     d\  }}t        d|d|d      \  }}|d d }|dd  }t        d      j                  d|f      }|}|}	t        | ||||	|       y )	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    s{    
 !Iy)DAq sVFrsVF #**Y*@GOOD&/6?GTr   c                     t        j                  d      }t        j                  d      }t        j                  d      }|}|}t        | |||||       y Nr   r7  )r{   zerosr  r   r   r   r  r  r  s         r   $test_averaging_multilabel_all_zeroesr  #  sH    XXgFXXgFhhwGOOD&/6?GTr   c                      t        j                  d      } t        j                  d      }| }|}dd}t        || |||d       y )Nr  c                 &    t        t        | ||      S r   )r<   r3   )r   r  r   s      r   r   z=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                     t        j                  d      }t        j                  d      }t        j                  d      }|}|}t        | |||||       y r  )r{   onesr  r  s         r   "test_averaging_multilabel_all_onesr  A  sH    WWWFWWWFgggGOOD&/6?GTr   c                    t         j                  j                  d      }||j                  ddt	        |            }| dk(  rt        |d      n|} |||d       }t        | |||t        j                  t	        |                  d	| z  
        ||||      }t        j                  t              5  t        ||       t        d|d|d|       # 1 sw Y   nxY w ||||j                               }t        ||d|d|d| 
        |t        j                  ||d      t        j                  ||d      d       }	t        ||	d| z  
       |dd d   }
t        j                  |      }d|d d d<   |dd d   }|dd d   } ||||
      } ||||      }t        ||d|d|d| 
       | t        vr/| dv rdgnddg}|D ]  }t        | |||||z        d| z  
       ! dj!                  t#        |      t#        |      t#        |      dz        }t        j                  t        |      5   |||t        j$                  ||g             d d d        y # 1 sw Y   y xY w)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 b"D9r2RWW3r7%;<S
 B-@N 
~	&(.9 ).$@
 	
 
'	& !R}7K7K7MN
 .	6 #
		"m!,
		"m!,
 @4G )A.77=1 !114a4I14a4I"9,@ #2r9MN
 !"7	? 11 AAQC3x 	 &Gr2]W-DEIDP &	##)6l2.]0Ka0O$
  
z	7r2RYY}/M%NO 
8	7	7s   9!CC#!I--I6c                     d}t        d      }|j                  |f      }|j                  |f      }t        j                  t	        |            }t
        |    }t        | ||||       y )Nr  r   r   )rd   r9  r{   aranger   r   r  )r   r;  r   r   r   r2  r   s          r   (test_regression_sample_weight_invariancer    si     I%a(L''i\':F''i\':FIIc&k*MF"4Or   c                    d}t        d      }|j                  |f      }|j                  |f      }t        |    }|j                  |dz
  f      }t        j                  t
        d      5   ||||       d d d        |j                  |f      }t        j                  |d<   t        j                  t
        d      5   ||||       d d d        t        j                  |d<   t        j                  t
        d	      5   ||||       d d d        t        j                  g d
      }t        j                  t
        d      5   ||d d |d d |       d d d        |j                  |dz  f      j                  |df      }t        j                  t
        d      5   ||||       d d d        y # 1 sw Y   DxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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vv]; 
T !..YL.AMvvM!	z)P	Qvv]; 
R vvM!	z)K	Lvv]; 
M HH56M	z)E	Fvbqz6"1:]C 
G !..Y]4D.EMM	AM 
z)T	Uvv]; 
V	U' 
T	S
 
R	Q 
M	L 
G	F 
V	Us<   .F<G	GG!'G-<G	GG!G*-G6c                    d}t        d      }|j                  dd|f      }|j                  dd|f      }|j                  |f      }t        |    }| t        t
        j                         z  v rt        | |||       y t        | |||       y )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&tVVWE&tVVVDr   c                 l   d}t        d      }|j                  dd|f      }|j                  dd|f      }|j                  |df      }t        |    }| t        v rJt        j                  |       }||j                  d      j                  dd      z  }t        | |||       y t        | |||       y )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dhhBh/77A>>&tVV\J&tVVVDr   c                    t        d      }t        ddddd      \  }}t        ddddd      \  }}t        j                  ||g      }t        j                  ||g      }|j	                  |j
                        }||j                  dd	      z  }t        |    }| t        v rt        | |||       y t        | |||       y )
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EAr +bRWEAr YYBx FYYBx F"""5G w{{D{11GF00&tVVWE&tVVVDr   c                     t        d      }|j                  ddd      }|j                  ddd      }t        |    }t        | |||       y )Nr   r   r}  r   )rd   r  r   r  )r   r   r   r   r   s        r   )test_multioutput_sample_weight_invariancer  @  sT    
 &a(L!!!QW!5F!!!QW!5FF"4@r   c                     t        j                  g dg dg      } t        j                  g dg dg      }t        j                  g d      }t        j                  g d      }t        j                  g d      }t        j                  |d      \  }}t        D ]Y  }||g| |gfD ]L  \  }}	|t        vr|	j
                  d	kD  rt        |   }
 |
||	|d 
      } |
||	d       }t        |||          N [ y )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~& 12 12
NFF ..6;;? &F!&&NL6648E|U>-BC
 'r   c                 "   t        d      }d\  }}|j                  dd||f      }|j                  dd||f      }t        |    } |||      }t        t	        |      |      D ])  }|d d |f   }	|d d |f   }
 ||
|	      }t        ||       + y )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 Iy!!!Qi-C!DF""1ay).D"EGF67#EU9-y9q$w'QWo{L9E=1 :r   c                    t        d      }d\  }}|j                  dd||f      }|j                  |j                        }||j	                  dd      z  }d||j	                  d      dk(  df<   d||j	                  d      dk(  df<   t
        |    } |||      }t        t        |      |      D ]Q  }|d d |f   }	|d d |f   }
 ||
|	      }|t        k(  rt        j                  |      sJ |d	kD  rDJ t        ||       S y )
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 Iy!!!Qi-C!DF"""5G w{{D{11G %&F6::a=Aq !$%F6::a=Aq !F67#EU9-y9q$w'QWo{L933;;}--- 3&&&  }5 :r   c                    d\  }}t        d      }|j                  ||      }t        j                  |       }||j	                  d      j                  dd      z  }|j                  d||      }t        |    } |||      }t        t        |      |      D ]r  }	t        j                  |t              }
t        j                  |      |
t        |	      <   |d d |
f   }t        j                  |	|      } |||      }t        ||       t y )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    
 "Iy%a(L	95G667(DTXX2X&..r155G!!!YY!?FF67#EU9-y9xx	5#%99Y#7T$Z q,/ggdF+{L9E=1 :r   r   r?  r7  r>  r  metric_namec                     t         j                  j                  d      }d}|j                  dd|      }d}t	        j
                  t        |      5  t        |   | |       d d d        y # 1 sw Y   y xY w)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                    t         j                  j                  d      }t        j                  dgdz  dgdz  z   |      }|j	                  dd|j
                        }|st        j                  ddg|      |   }d	}t        j                  d
      }t        |       j                  d   j                  }|dk(  r|n|}	t        j                  t        |	      5   | ||       d d d        y # 1 sw Y   y xY w)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r2 
2	1	1s   
C..C7c                    t        ||      \  }j                  ||      }j                  ||      }	 | ||fi |}
|j                  d      j                  |d   |      |d<   |j                  d      }t        |t        j
                        rj                  ||      |d<   	 t	        j                  |       t	        j                  |	       d}dfd	dfd	}|r | ||	fi |}t        |
t              r_t        t        |
D cg c]  }|j                   c}            dkD  r0 |||
        | ||	fi |} |||
        | ||fi |} |||
       n/ ||
        | ||	fi |} ||
        | ||fi |} ||
       t        d	      5   | ||	fi |}t        |t              r |||
d
       n ||
d
       d d d        y # t        t        t        f$ r d}Y w xY wc c}w # 1 sw Y   y xY w)NrV   r2  rf   TFc                 z    |r!t        j                  |       t        d      } t        | |t	                     y )Ncpu)xprW   )atol)rS   asarrayr{   rY   rP   )metric_ametric_b	convert_a
dtype_namer,  s      r   _check_metric_matchesz5check_array_api_metric.<locals>._check_metric_matches  s.    rzz(35IH(
1KLr   c                 D    t        | |      D ]  \  }} |||        y )Nr1  )zip)r/  r0  r1  metric_a_valmetric_b_valr3  s        r   _check_each_metric_matchesz:check_array_api_metric.<locals>._check_each_metric_matches  s&    *-h*A&L,!,	R +Br   rv   array_api_dispatchr5  )F)rX   r.  getr  r{   ndarray	TypeErrorRuntimeErrorr   tupler   r   r  r	   )r   array_namespacedevice_namer2  a_npb_npmetric_kwargsrW   a_xpb_xp	metric_nprf   numpy_as_array_worksr9  	metric_xp
metric_valmetric_xp_mixed_1metric_xp_mixed_2r3  r,  s      `              @@r   check_array_api_metricrN    s,    &o{JOJB::d6:*D::d6:*DtT3]3I)5)+/*6 *4 *
o&  ##M2K+rzz*')zz+fz'Mm$	%


4


4#M
S 477	
 y%(CIFIj))IFGH1L&y)< &tT C] C&'8)D &tT C] C&'8)D ")Y7 &tT C] C!"3Y? &tT C] C!"3Y?	4	0477	 i'&y)tL!)Y$G 
1	0U |Z0 %
  %%. G& 
1	0s$   0,G G72G<G43G4<Hc                    t        j                  g d      }t        j                  g d      }i }| j                  dk(  rddi}t        | |||f||d d| t        j                  g d|      }t        | |||f|||d| y )	Nr  r   rv   r   rv   r   r   r   rC  rD  r2          rj          @      ?r  )r{   r   r  rN  )r   rA  rB  r2  	y_true_np	y_pred_nprE  r2  s           r   ,check_array_api_binary_classification_metricrX  F  s     &I&IM-'		
 	 	 HH1DM		
 #	 	r   c                 v   t        j                  g d      }t        j                  g d      }| j                  dk(  r#t        j                  g dg dg dg dg|      }d	d
dd}t        | |      }|D ]A  }t	        | |||f||d d| t        j                  g d|      }	t	        | |||f|||	d| C y )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   paramsrQ  rR  )r{   r   r  (_get_metric_kwargs_for_array_api_testingrN  
r   rA  rB  r2  rV  rW  additional_paramsmetric_kwargs_combinationsrE  r2  s
             r   0check_array_api_multiclass_classification_metricrg  i  s     &I&I33HH&&$&	 
	 2!
 "J " 4			

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

 '		
 		
 4r   c                 4   t        j                  ddgddgddgg|      }t        j                  ddgddgddgg|      }ddd}t        | |      }|D ]A  }t        | |||f||d d| t        j                  g d	|      }	t        | |||f|||	d| C y )
Nrv   r   r  r_  r`  r   ra  rQ  )rS  rj   rT  )r{   r   rc  rN  rd  s
             r   0check_array_api_multilabel_classification_metricri    s     1a&1a&1a&1DI1a&1a&1a&1DI 2 "J " 4			

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

 '		
 		
 4r   c           	          t        j                  g d      }t        j                  g d|      }t        | |||||d        t        j                  g d|      }t        | ||||||       y )Nrv   r   rv   r   r   rc  r[  333333?r  rQ  rv   r   r7  rv   r{   r   rN  r   rA  rB  r2  rV  	y_prob_npr2  s          r   7check_array_api_binary_continuous_classification_metricrr    so     &I-Z@I HH\<M#r   c           	          t        j                  g d      }t        j                  g dg dg dg dg|      }t        | |||||d        t        j                  g d|      }t        | ||||||       y )	NrZ  r   rc  rc  rj   皙?rv  rj   rj   r^  rj   rc  rm  rj   r  rQ  rn  ro  rp  s          r   ;check_array_api_multiclass_continuous_classification_metricrx    s     &I    		
 I  HH\<M#r   c           	      
   t        j                  g dg dg dg dg|      }t        j                  g dg dg dg d	g|      }t        | |||||d 
       t        j                  g d|      }t        | ||||||
       y )Nr  rk  )r   rv   r   r   ry  r  )g333333?gHzG?gq=
ףp?gQ?)gQ?gRQ?Q?gq=
ףp?)rz  gQ?gQ?g)\(?)gQ?gףp=
?gp=
ף?g(\?rQ  rn  ro  )r   rA  rW   r2  rV  rq  r2  s          r   ;check_array_api_multilabel_continuous_classification_metricr{  	  s     		
 I $$$$		
 I  HH\<M#r   c                    t        | t              r| j                  j                  n| j                  }|dk(  r't        t        d      k  rt        j                  d       t        j                  g d|      }t        j                  g d|      }i }t        |       j                  }d|v rd |d<   t        | |||f||d| d|v r/t        j                  g d	|      |d<   t        | |||f||d| y y )
Nr+   z1.14.0zJmean_poisson_deviance's dependency `xlogy` is available as of scipy 1.14.0)rT  rj   rU        @r  )r   r   r   r   r2  rC  rD  )rj   rT        ?r   )r  r   funcr  ra   r`   r  skipr{   r   r   r"  rN  )	r   rA  rB  r2  	func_namerV  rW  rE  metric_paramss	            r   !check_array_api_regression_metricr  4	  s   (267(C$$I++
]8=T0TX	
 -Z@I)<IMf%00M-')-o&	
   -')+ 
*
o& 			

 	
 	
 (r   c                 h   t        j                  g dg dg|      }t        j                  g dg dg|      }t        | |||||d        t        j                  ddg|      }t        | ||||||       t        | |||||t        j                  g d	|      
       t        | |||||d
       y )N)rv   r7  r   )rv   r   r   r  )rv   rn  rn  )rv   rv   rv   rQ  rj   rT  )rj   rd  r[  )rC  rD  rf   
raw_valuesro  )r   rA  rB  r2  rV  rW  r2  s          r   -check_array_api_regression_metric_multioutputr  ^	  s     )Y/zBI)Y/zBI HHc3Zz:M# HH_J?  r   c                    t        j                  g dg dg|      }t        j                  g dg dg|      }i }dt        |       j                  v rd|d<   t	        | |||f||d| d	|d<   t	        | |||f||d| y )
Nrb  )rv  r   rm  r  )rc  rd  rv  )r   rm  r[  dense_outputFr~  T)r{   r   r   r"  rN  )r   rA  rB  r2  X_npY_nprE  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              #   V   K   | j                         D ]  \  }}|D ]  }||f 
  y wr   )items)metric_checkersr   checkerscheckers       r   !yield_metric_checker_combinationsr  Y
  s2     +113G'/!   4s   ')z(array_namespace, device_name, dtype_namezmetric, check_funcc                      || |||       y r   r   )r   rA  rB  r2  
check_funcs        r   test_array_api_compliancer  _
  s     vZ@r   c                    t        | t              rt        |t              sJ y t        | d      r;t        |d      sJ t        |      d   |k(  sJ t	        |      t	        |      k(  sJ y t        | t
              rt        |t
              sJ y y )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           	      p   t        |j                  |j                        \  }}t        |j                  |j                        \  }}t        |    }g dg dfg dg dfg dgg dgfg dg dfg dg d	fd
}g d}	d }
| t        v rdg}n,| i t
        t        v r| t        vrdg}ndg}n| t        v rddg}t        d      5  D ]  }||   \  }} |
|||      }|j                  |||      }i x}}| t        vr0t        j                  |	      }d|i}|j                  ||      }d|i} |
|||      }|j                  |||      } |||fi |} |||fi |}t        |t              r#t!        ||      D ]  \  }}t#        ||||        t#        ||||        	 ddd       y# 1 sw Y   yxY w)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.
    )rB  r  rP  rk  rl  )r   rv   r7  rn  )r   rv   r   r   )g @rU  g      @r}  )g@g?rT  rT  )binarybinary_continuouslabel_indicator_continuousregression_integerregression_continuous)rv   rv   r   r   c                 `    t        | d   t              rt        ||      }|S |j                  }|S )Nr   )r  ru   rQ   int64)datar,  rW   r  s       r   
_get_dtypezCtest_mixed_array_api_namespace_input_compliance.<locals>._get_dtype
  s3    d1gu%.r6: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   r6  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  rJ  rH  r  r  s                             r   /test_mixed_array_api_namespace_input_compliancer  v
  s   *  4-A-H-H I} 2,?,F,FHl %F  .*,@A(4~8L7M&N+\:"68L!MH !M ,, Z
	N<NN	N55-.J67J	*	**,CD
	4	0#Ii(FBr8\:E$$RE$JE244/"??#%88M#: $35E#F #+#3#3$\ $4 $  %45E#F r9m<E%%be%LEue@/?@Ir2:)9:I)U+&))Y&?NFF!&&)UC '@ iIuE5 $ 
1	0	0s   CF,,F5c                 p   t         |    }t        j                  g d      }t        j                  g d      }i }| t        v rd|d<   t	        d      5   |||fi |}ddd       t	        d      5   |||fi |}ddd       t        t        |      d	   |       y# 1 sw Y   CxY w# 1 sw Y   0xY w)
a|  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 2B, B),B5c                 Z   t        |||      \  }}t        |    }t        j                  g d      }t        j                  g d|      }|j	                  ||      }	i }
| t
        v rd|
d<   t        d      5   |||fi |
} |||	fi |
}t        |t              r#t        ||      D ]  \  }}t        ||||	        nt        ||||	       d	d	d	       | t        vrt        j                  g d
      }t        j                  g dg dg dg dg|      }|j	                  ||      }	t        d      5   |||      } |||	      }t        |t              r#t        ||      D ]  \  }}t        ||||	        nt        ||||	       d	d	d	       y	y	# 1 sw Y   xY w# 1 sw Y   y	xY w)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  rl  r  rV   r`  rA  Tr:  N)r`  ra  cdrt  ru  r^  rw  )rX   r   r{   r   r.  rG  r	   r  r   r6  r  METRIC_UNDEFINED_MULTICLASS)r  rA  rB  r2  r,  rW   r   r   rq  	y_prob_xpr~   rH  rJ  r  r  s                  r   8test_array_api_classification_mixed_string_numeric_inputr  
  s   4 &o{JOJB%F XX*+F-Z@I

9V
4IF,,!{	4	06977	6977	i'"%i";ffb)< #< )YI> 
1 55./HH$$$$	 
	 JJyJ8	t4vy1Ivy1I)U+&))Y&?NFF!&&"i@ '@ iB	B 54 6 
1	00 54s   8AF7AF!F!F*df_lib_namepandaspolarsc                 L   t        j                  |      }|j                  g d      }|j                  g d      }t        |    }	  ||j	                         |j	                               }t         |||             y # t
        $ r t        j                  |  d       Y 7w xY w)N)rS  rU  r   rU  )rU  rS  rS  rS  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 F66*O<  B{m#?@ABs   %A? ?!B#"B#c                     i g}|j                         D ]U  \  }}|t        |       j                  vrg }|D ]/  }|D ](  }|j                         }|||<   |j	                  |       * 1 |}W |S )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   rb  rf  paramri  new_combinationsr~   value
new_kwargss	            r   rc  rc  P  s     #%v	&)4440F#[[]
$)
5! ''
3   1 &6" ( &%r   c                 Z   t         j                  j                  d      }|j                  ddd      }|j                  ddd      }| t        v rt        ||      \  }}| t        v r(|j                  ddd      }|j                  ddd      }t        |    } |||      }t        |t        t         j                  t        f      sJ t        |t         j                  t         j                  f      rJ t        |t              r(t        d |D              st        d |D              sJ yyy)	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   <   K   | ]  }t        |t                y wr   )r  ru   .0vs     r   	<genexpr>z2test_returned_value_consistency.<locals>.<genexpr>  s     7A:a's   c              3   P   K   | ]  }t        |t        j                           y wr   )r  r{   r=  r  s     r   r  z2test_returned_value_consistency.<locals>.<genexpr>  s      ?
/4!Jq"**%us   $&N)r{   r  r  r   r   r   r   r   r  ru   r=  r@  r   float32rZ  )r   r  r   r   r   r  s         r   test_returned_value_consistencyr  e  s    ))


"C[[AE[*F[[AE[*F))266B&&Q0Q0F66"EeeRZZ7888%"**bjj!9:::%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(  rN  rX  rg  ri  rr  rx  r{  r  r  r  array_api_metric_checkersr  r  r  r  r  r  r  r  r  rc  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    AB6
