
    /iiD                       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
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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d d	lCmDZD d d
lEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZT d dlUmVZV d dlWmXZX d dlYmZZZm[Z[m\Z\m]Z] d dl^m_Z_m`Z`maZambZbmcZcmdZd d dlemfZfmgZgmhZh d dlimjZj d dlkmlZlmmZm i de-de.de3de4de1de6de/de#d ee;d          de?de@d ee5d            d!e2d"e0d# ee5d$           d% ee d$           d&ed'eiZni d(ed)ed* eed+,          d- eed./          d0ed1d2 d3e7d4 ee7d+5          d6e&d7eBd8 eeBd./          d9e(d:e:d;e<d<e$d= ee%d>?          d@ ee%dA?          i dBe,dC ee%dDdAE          dF ee$dDG          dH ee%dDd>E          dI ee:dDG          dJ ee<dDG          dK ee(dDG          dL ee%dMdAE          dN ee$dMG          dO ee%dMd>E          dP ee:dMG          dQ ee<dMG          dR ee(dMG          dS ee%dTdAE          dU ee$dTG          dV ee%dTd>E          dW ee:dTG           ee<dTG           ee(dTG           ee%dXdAE           ee$dXG           ee%dXd>E           ee:dXG           ee<dXG           ee(dXG          edY	ZodZ Zpe>epe"d[Zqi d\ed]e*d^e+d_ ee+d./          d`e'daedbe=dc ee=dDG          dd ee=dXG          de ee=dMG          df ee=dTdgh          di ee=dDdgh          dj ee=dTdkh          dl ee=dDdkh          dm ee=dAn          doedp eedDG           eedXG           eedMG          e)e8e!eAeedqZr es            Ztetu                    er           etu                    eo           etu                    en           etu                    eq           h drZvh dsZwevx                    ew          Zyh dtZzh duZ{h dvZ|h dwZ}h dxZ~h dyZh dzZh d{Zh d|Zh d}Zh d~Zh dZddhZd Zd Zd Zej                            d ee                    d             Zej                            d ee                    d             Zd Zej                            d e eet          eyz
                      d             Zd Zej                            d e eet          eyz
                      d             Zi eodeiZej                            de                                          d             Zej                            deo                                          d             Zej                            d e eeo          eyz
                      d             Zej                            der          d             Zd dgej        ej        gfd dgej        ej        gfd dgej        ej        gfd dgej        dgfd dgej        dgfgZej                            d eer                                en                                                    ej                            de          d                         Zej                            deo                                          ej                            deej        dd>gg dfej        dd>gg dfgz             d                         Zej                            deo                                          d             Zd Zd Zej                            d          ej                            d e eet          eyz
   eer          z
                      d                         Zej                            d          ej                            d eeez                      d                         Zej                            d ee                    d             Zej                            d ee                    d             Zej                            d          ej                            def          d                         Zej                            d ee                    d             Zej                            d ee~                    d             Zej                            d ee~                    d             Zej                            d ee~                    e                              d             Zd Zd Zej                            d eez                    d             Zej                            d eeze{z                      d             Zej                            d eez                    d             Zd Zej                            d eez                    d             ZddZej                            d e eet                               een                    ez
                      d             Zej        j        ej                            d e eet                               een                    ez
                      d                         Zej                            d e eet           een          z
  ez
  evz
                      d             Zej                            d e eet           een          z
  ez
  eyz
                      d             Zej                            d eeez  ez
                      d             Zej                            d eeez
                      d             Zd Zej                            d eed3hz
                      d             Zej                            d eeez                      d             Zej                            d e eer          eyz
                      d             Zej                            deo          d             Zej                            ded+fed+fe$d.f ee%d?          d.fe(d.fe9d+fe:d.fe<d.fe>d+fg	          ej                            deeg          d                         Zd Zd Zd Zd Zd Zd Zd Zi eeeegeeegeeegeeege"ege$eeege%eeege(eeege7eeege:eeege9ege<eeegeBeeege&eeege5eg ee5d¬           eg ee5dì           egi e;eegeIege#eege.eege1eege3eege4eege6eege egeNege2egeFege0ege-ege/eegeGegeOegeHegeJegeMegeLegeKegeRegeSege?eege@eegeTegeQege>egePegiZefdĄZej                            d e]            e\Ʀ          ej                            d e̦                      dȄ                         Zej                            dddg          ej                            d eet                    d̄                         Zd̈́ Zej                            d eet                    d΄             ZdS )    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                      t          | i |                    d          t          | i |                    d          d d t          j        f         z  S )Nfloat   axis)r   astypesumnpnewaxis)argskwargss     g/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/sklearn/metrics/tests/test_common.py<lambda>rt      s[    $)&))0099
D
+F
+
+
/
/Q
/
7
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            
         t          | i |\  }}}t          |          t          |          z
  }t          j        ||t          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)r0   lenro   arraypadrm   float64nan)rq   rr   	precisionrecall
thresholdspad_threshholdss         rs   (precision_recall_curve_padded_thresholdsr      s     %;D$KF$K$K!Ivz)nns:6O8F!!"*--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                     t          t          |                                 |                                                    dz   }| |z  } ||z  }| |fS )zMake targets strictly positiverj   )absminy1y2offsets      rs   _require_positive_targetsr   P  sI    RVVXXrvvxx(())A-F&LB&LBr6Mru   c                 "   t          t          |                                 |                                                    dz
  }|                     t          j                  } |                    t          j                  }| |z  } ||z  }| |fS )z$Make targets strictly larger than -1gGz?)r   r   rm   ro   r   r   s      rs   _require_log1p_targetsr   X  so    RVVXXrvvxx(())D0F	2:		B	2:		B&LB&LBr6Mru   c                      t           t          z  t          t                    z  t          z  t          t
                    k    sJ t           t          z  t                      k    sJ d S N)SYMMETRIC_METRICSNOT_SYMMETRIC_METRICSset!CONTINUOUS_CLASSIFICATION_METRICS"METRIC_UNDEFINED_BINARY_MULTICLASSALL_METRICS ru   rs   test_symmetry_consistencyr   b  sn     	
	 
/
0
0	1 -	- 
[		     55#%%??????ru   namec                 P   t          d          }|                    ddd          }|                    ddd          }| t          v rt          ||          \  }}n| t          v rt          ||          \  }}|                    ddd          }|                    ddd          }t          |          }| t          v r>| t          v r+t           |||           |||          d| z             d S J d	            t           |||           |||          d| z             d S )
Nr   r{      sizer      z%s is not symmetricerr_msgFz 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  sz    &a((L!!!QU!33F!!!QU!33F)))266BB	%	%	%/??%%a%::J%%a%::JF&&&&&&z:..z:..-4      =<<<<F66""F66"")D0	
 	
 	
 	
 	
 	
ru   c                    t          d          }t          |          }d}t          d          D ]}|                    ddd          }|                    ddd          }| t          v rt          ||          \  }} |||          } |||          }t          j        ||          sd} n|rt          |  d          d S )	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
 1XX  %%a%77%%a%77---6vvFFNFF&((&(({7G,, 	$E	  :D888999: :ru   c                  `   d} d}t          |            t          j        t          | d          5  t          |           d d d            n# 1 swxY w Y   t	          |           t          j        t
          |  d          5  t	          |            d d d            d S # 1 swxY w Y   d S )Nr   r3   z is not symmetricmatchr   )r   pytestraisesAssertionErrorr   r   )symnot_syms     rs   test_symmetry_testsr     s=   
CG #	~-J-J-J	K	K	K ' 'g&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' g&&&	zC)G)G)G	H	H	H ' '!#&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's#   AAAB##B'*B'c                    t          d          }|                    ddd          }|                    ddd          }| t          v rt          ||          \  }}n| t          v rt          ||          \  }}t          ||d          \  }}t                      5  t          |          }t           |||           |||          d| z             d d d            d S # 1 swxY w Y   d S )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    sU    &a((L!!!QU!33F!!!QU!33F)))266BB	%	%	%/??%,VV!%L%L%L"NN			 
 
T"F66""F>>226=	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   7C  C$'C$c                     t          d          } |                     ddd          }|                     ddd          }|                     |j                  }||                    dd          z  }t          |||d          \  }}}t          D ]8}t          |         }t           |||           |||          d	|z  
           9t          D ]8}t          |         }t           |||           |||          d	|z  
           9t          D ]a}t          |         }t           |||           |||          d	|z  
           t           |||           |||          d	|z  
           bd S )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    s   %a((L !!!QX!66F!!!QX!66F"""55G w{{D{111G6=a7 7 73NNO $ 
 
T"F66""F>>226=	
 	
 	
 	
 	
 . 
 
T"F67##F>?336=	
 	
 	
 	
 	
 $ 
 
T"F67##F>?336=	
 	
 	
 	

 	F66""F>>226=	
 	
 	
 	
 	

 
ru   c                 b	   t          d          }|                    ddd          }|                    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            n# 1 swxY w Y   t          j        t"                    5   ||
|           d d d            n# 1 swxY w Y   t          j        t"                    5   |||           d d d            n# 1 swxY w Y   t          j        t"                    5   ||
|           d d d            n# 1 swxY w Y   t          j        t"                    5   |||           d d d            n# 1 swxY w Y   t          j        t"                    5   ||
|	           d d d            n# 1 swxY w Y   | t$          t&          z  t(          z  vrd| v rSt          j        t,                    5  t/          j         ||
|                    sJ 	 d d d            n# 1 swxY w Y   n=t          j        t"                    5   ||
|           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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)))*2r22BB	%	%	%'B//B2hhG2hhG8B<<"5Euz1%%%uz1%%%
5'**I
5'**IZw''FZw''F			 f+ f+T"&R..F7G$$BTI	
 	
 	
 	
 	F5%  IDP	
 	
 	
 	
 	F9i((MPTT	
 	
 	
 	
 	F5'""V	
 	
 	
 	
 	F7E""V	
 	
 	
 	
 	F5)$$2 		
 	
 	
 	
 	F9e$$2 		
 	
 	
 	
 	F7I&&V	
 	
 	
 	
 	F9g&&V	
 	
 	
 	
 ]:&& 	" 	"F5&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]:&& 	" 	"F65!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]:&& 	$ 	$F7F###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$]:&& 	$ 	$F67###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$]:&& 	& 	&F9f%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&]:&& 	& 	&F69%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
 "??BUU
 
 D   \"899 > >:ffVV&<&<======> > > > > > > > > > > > > > > ]:.. + +F66***+ + + + + + + + + + + + + + +Kf+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+ f+s3  E
R$J."R$.J2	2R$5J2	6R$K+R$+K/	/R$2K/	3R$L(R$(L,	,R$/L,	0R$M%R$%M)	)R$,M)	-R$	N"R$"N&	&R$)N&	*R$OR$O#	#R$&O#	'9R$ !QR$Q	R$Q	R$3R R$R	R$R	R$$R(+R(r   r   c                     d}t          j        t          t          j        |                    5   | t          j        g           t          j        g                      d d d            d S # 1 swxY w Y   d S )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#    s    
UC	z3	8	8	8 + +rx||RXb\\***+ + + + + + + + + + + + + + + + + +s   1A..A25A2c                 `   t          d          }d}|                    dd|f          }|                    dd|f          }|                    |dz
  f          }t          j        t
          d          5   | |||           d d d            n# 1 swxY w Y   |                    |f          }t          j        |d<   t          j        t
          d	          5   | |||           d d d            n# 1 swxY w Y   t          j        |d<   t          j        t
          d
          5   | |||           d d d            n# 1 swxY w Y   t          j	        g d          }t          j        t
          d          5   | |d d         |d d         |           d d d            n# 1 swxY w Y   |                    |dz  f          
                    |df          }t          j        t
          d          5   | |||           d d d            d S # 1 swxY w Y   d S )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)		6	6B			a)		6	6B ..Y]4D.EEM	z)R	S	S	S 4 4r2]33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 !..YL.AAMvM!	z)P	Q	Q	Q 4 4r2]33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 vM!	z)K	L	L	L 4 4r2]33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 H55566M	z)E	F	F	F < <r"1"vr"1"v];;;;< < < < < < < < < < < < < < < !..Y]4D.EEMM	A M 
z)T	U	U	U 4 4r2]33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4sZ   9BBB C;;C?C?0EEEF22F69F6H##H'*H'c                    t          d          }|                    ddd          }|                    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	                    |           	            |
|
                    d
          |
                    d
                    }t          |	|d	                    |           	           | t          v rt          |
|          }
 |
||          }t          |	|d	                    |           	            |
|
                    d
          |
                    d
                    }t          |	|d	                    |           	           d d d            d S # 1 swxY w Y   d S )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Xvv&''+FXvv&''+FM&!J			 & &'-$fRnn 
))) }EEEJ%:ff55AHHNN	
 	
 	
 	
 )js););V]]3=O=OPPHOOPTUU	
 	
 	
 	
 &&& J???J)z&&99# FMMdSS    #-*V]]3-?-?sASAS"T"T##FMMdSS   E& & & & & & & & & & & & & & & & & &s   E G99G= G=c                    t          d          }|                    ddd          }|                    ddd          }t          j        ddg          |         }d}t	                      5  t
          |          }| t          vr|}| t          v rt          ||          } |||          } |||          }	t          ||	d
                    |           	            ||                    d
          |          }
t          ||
d
                    |           	           nt          j        t                    5   |||           d d d            n# 1 swxY w Y   t          j        t                    5   ||                    d
          |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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    s    &a((L			a		/	/B			a		/	/BXvv&''+FM			 / /248...J---$Z=III
"(&R..)z&"55# ELLTRR    #-*V]]3-?-?"D"D##LSS      z** # #vr"""# # # # # # # # # # # # # # #z** / /v}}S))2.../ / / / / / / / / / / / / / /9/ / / / / / / / / / / / / / / / / /s[   ,CF;:EF;E	F;E	F;7 F#F;#F'	'F;*F'	+F;;F?F?rj   zy_true, y_scorec                     | t           k    r|g}|g}t          j        t          d          5   | ||           d d d            d S # 1 swxY w Y   d S )Nzcontains (NaN|infinity)r   )r   r   r   r   )r   r   r	  s      rs   test_continuous_inf_nan_inputrK    s     )	z)C	D	D	D    vw                                   s   AAA)rj   r{   r,  c                    t          j        |                                          s.d}t          j        |                                          rd}n0d}n-d}t          j        |                                          rd}nd}d| d| }t          j        t          |          5   | ||           ddd           dS # 1 swxY w Y   dS )	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)ro   isfiniteallr  anyr   r   r   )r   r   r	  
input_nameunexpected_valuer   s         rs   !test_classification_inf_nan_inputrS  )  s*     ;v""$$ ?
8F!! 	?$>
8G  "" 	?$>?z??-=??G	z	1	1	1    vw                                   s   %B??CCc                     g dg d}}d}t          j        t          |          5   | ||           ddd           dS # 1 swxY w Y   dS )zocheck 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  s     &ooGFT  
z	1	1	1    vw                                   s   A  A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           d S )Nrj   r{   gffffffr   repeat)r   r   r   r   )r   r   valuesijs        rs   check_single_samplerb  X  s    
 F )))Q	%	%	%Qq)))  1sQC ru   c                     t           |          }t          ddgd          D ]=\  }}}} |t          j        ||gg          t          j        ||gg                     >d S )Nr   rj      r]  )r   r   ro   r   )r   r   r`  ra  kls         rs   check_single_sample_multioutputrg  j  ss    Fq!fQ/// 7 7
1arx!Q!!28aVH#5#566667 7ru   ignorec                 $    t          |            d S r   )rb  r   s    rs   test_single_samplerk  q  s     ru   c                 $    t          |            d S r   )rg  rj  s    rs   test_single_sample_multioutputrm    s     $D)))))ru   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            d S # 1 swxY w Y   d S )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    s    X|||\\\<<<@AAFX1v1v1v.//FF	z	"	"  vv                 s   !A;;A?A?c           	         t          d          }|                    ddd          }|                    ddd          }t          |          } |||          }t          d          D ]U}|                    |j        d                   }t           ||d d |f         |d d |f                   |d| z             Vd S )	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!55F!!!QW!55FFF66""E1XX 
 
''Q88F6!!!T'?F111d7O44=F	
 	
 	
 	
 	

 
ru   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 |D             }
d |	D             }t          D ]}t
          |         }t          |t                    rd	|_        ||_	         |||          }t           |||          |d
|z             t           ||
|          |d|z             t           |||	          |d|z             d S )Nrd  2   rj   r   T
n_features	n_classesr   r0  allow_unlabeledc                 ,    g | ]}t          |          S r   r  .0rU  s     rs   
<listcomp>z=test_multilabel_representation_invariance.<locals>.<listcomp>      GGG!d1ggGGGru   c                 ,    g | ]}t          |          S r   r  r  s     rs   r  z=test_multilabel_representation_invariance.<locals>.<listcomp>  r  ru   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_indicatory1_list_list_indicatory2_list_list_indicatorr   r   r  s                  rs   )test_multilabel_representation_invariancer    s
    II*  EAr +  EAr 
B!y)*	+	+B	B!y)*	+	+B'-++'-++"2hh"2hhGG/FGGGGG/FGGG# '
 '
T" fg&& 	# %F"FO&R.. 	F&(;<<6 		
 	
 	
 	
 	F)+ABB% 		
 		
 		
 		
 	F*,CDD% 		
 		
 		
 		
 		
='
 '
ru   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            n# 1 swxY w Y   @d S )Nrj   r{   r   )r   r{   )r   rj   r   objectdtypero  )r   multilabel_sequencesr   seqs       rs   +test_raise_value_error_multilabel_sequencesr    s     qcAq6		
"q!fX... F#  ]:&& 	 	F3	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   A..A2	5A2	c                    d}d}t          d          }|                    d||f          }|                    d||f          }|                    |j                  }t          |          }| t
          v r|n|} |||d          }	 |||d          }
t          d|	z  dd	
           t          |	|
|z  d|  
           d S )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!!!Yi\!BBF!!!Yi\!BBF!!v|!44G$G???77VD >>>$WVTUCCC!!	B    *%t%%     ru   c                    d}d}t          d          }|                    d||f          }|                    d||f          }|                    ||f          }t          |          }| t          v r|n|} |||d          }	 |||d          }
t          d|	z  dd	
           t          |	|
|z  d|  
           d S )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!!!Yi\!BBF!!!Yi\!BBF""I(>"??G$G???77VD >>>$WVTUCCC!!	B    *%t%%     ru   c                    d}d}t          d          }t          d|dd|          \  }}t          d|dd|          \  }}|                    |j                  }|dg|z  z  }|dg|z  z  }t          |          }| t
          v r|n|}	 |||	d          }
 |||	d	          }t          d
|
z  dd           t          |
||z  d|             d S )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  <  sT   
 II%a((L /  IAv /  IAv """55G qcIoF
qcIoF$G???77VD >>>$WVTUCCC!!	B    *%t%%     ru   c           	      ,    j         \  }}  ||d           }t          | fdt          |          D                          ||d          }	t          |	                                                                                         ||d          }
t          |
t	          j        |                     t	          j        dt                    }t	          j        |          dk    r3  ||d          }t          |t	          j        ||                     n  ||d          }t          |d           |rK  ||d	          }t          |t	          j         fd
t          |          D                                  t          j
        t                    5    ||d           d d d            n# 1 swxY w Y   t          j
        t                    5    ||d           d d d            d S # 1 swxY w Y   d S )Nr   c                 P    g | ]"} d d |f         d d |f                   #S r   r   r  r`  r   y_pred_binarizey_true_binarizes     rs   r  z$_check_averaging.<locals>.<listcomp>w  sO     	
 	
 	
 F?111a4(/!!!Q$*?@@	
 	
 	
ru   r   r   r   )rl   r  r   )weightsr   c                 @    g | ]} |         |                   S r   r   r  s     rs   r  z$_check_averaging.<locals>.<listcomp>  s?        F?1-q/ABB  ru   unknowngarbage)r  rQ   r   ravelro   meanrn   intr   r   r   r   )r   r   r   r  r  is_multilabelr0  r|  label_measuremicro_measuremacro_measurer  weighted_measuresample_measures   `  ``         rs   _check_averagingr  n  s    +0Iy F664888M	
 	
 	
 	
 	
 	
9%%	
 	
 	
   F667;;;Mvvo33557L7L7N7NOO  
 F667;;;MM27=#9#9::: f_1C888G	vg!!6&&*EEE("*]G*T*T*TUUUU!6&&*EEE(!,,,  

	BBBG     "9--   	
 	
 	
 
z	"	" 2 2vvy11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	z	"	" 2 2vvy11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s$   .G		GG-H		HHc                     t          |                              d          }t          |          }| t          v rt	          ||||||           d S | t
          v rt	          ||||||           d S t          d          )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    s    "6**55lCCMF%%%FFO_m	
 	
 	
 	
 	
 
@	@	@FG_g}	
 	
 	
 	
 	
 MNNNru   c                    d\  }}t          d          }|                    d||f          }|                    d||f          }|                    ||f          }t                                          |          }|                    |          }|                    |          }	t          | ||||	|           d S )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     Iy%a((L!!!Yi\!BBF!!!Yi\!BBF""I(>"??G					f	%	%Bll6**Oll6**OD&/6?GTTTTTru   c                     d\  }}t          d|d|d          \  }}|d d         }|dd          }t          d                              d|f          }|}|}	t          | ||||	|           d S )	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    s    
 !Iy)  DAq ssVFrssVF ##**Y*@@GOOD&/6?GTTTTTru   c                     t          j        d          }t          j        d          }t          j        d          }|}|}t          | |||||           d S Nr   r,  )ro   zerosr  r   r   r   r	  r  r  s         rs   $test_averaging_multilabel_all_zeroesr    sW    XgFXgFhwGOOD&/6?GTTTTTru   c                      t          j        d          } t          j        d          }| }|}dd}t          || |||d           d S )Nr  r   c                 0    t          t          | ||          S r   )r:   r1   )r   r	  r   s      rs   rt   z=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    sp    XgFXgFOO  M      ru   c                     t          j        d          }t          j        d          }t          j        d          }|}|}t          | |||||           d S r  )ro   onesr  r  s         rs   "test_averaging_multilabel_all_onesr    sW    WWFWWFggGOOD&/6?GTTTTTru   c                    t           j                            d          }|%|                    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xY w Y    ||||                                          }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| 
           |                     d          s6| dk    rdgnddg}|D ]&}t          | |||||z            d| z  
           'd                    t#          |          t#          |          t#          |          dz            }t          j	        t          |          5   |||t          j        ||g                     d d d            d S # 1 swxY w Y   d S )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    se   
)


"
"CArB88 &*-C%C%CWVq!!!!F vb"D999r2RW3r77%;%;%;<<<S
    VB-@@@N 
~	&	& 
 
(.999j )((...$$@
 
 	

 
 
 
 
 
 
 
 !&R}7K7K7M7MNNN
 >>...	6    #F
	"m!,,,
	"m!,,,  
 @4G    )A.7=11 !114a4I14a4I"F9,@   #F2r9MNNN
 !  "7"7"7	?    ??>** 
 !%(? ? ?!aX% 	 	Gr2]W-DEEEIDP    	##)6l2..]0K0Ka0O$
 $
  
z	7	7	7 P Pr2RY}/M%N%NOOOOP P P P P P P P P P P P P P P P P Ps$   )C??DD-#KK!$K!c                    d}t          d          }|                    |f          }|                    |f          }t          j        t	          |                    }t
          |          }t          | ||||           d S )Nry  r   r   )r[   r.  ro   aranger   r   r  )r   r0  r   r   r   r'  r   s          rs   (test_regression_sample_weight_invariancer  h  s     I%a((L''i\'::F''i\'::FIc&kk**MF"4OOOOOru   c                 r   d}t          d          }|                    |f          }|                    |f          }t          |          }|                    |dz
  f          }t          j        t
          d          5   ||||           d d d            n# 1 swxY w Y   |                    |f          }t          j        |d<   t          j        t
          d          5   ||||           d d d            n# 1 swxY w Y   t          j        |d<   t          j        t
          d	          5   ||||           d d d            n# 1 swxY w Y   t          j	        g d
          }t          j        t
          d          5   ||d d         |d d         |           d d d            n# 1 swxY w Y   |                    |dz  f          
                    |df          }t          j        t
          d          5   ||||           d d d            d S # 1 swxY w Y   d S )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.EEM	z)R	S	S	S < <vv];;;;< < < < < < < < < < < < < < < !..YL.AAMvM!	z)P	Q	Q	Q < <vv];;;;< < < < < < < < < < < < < < < vM!	z)K	L	L	L < <vv];;;;< < < < < < < < < < < < < < < H55566M	z)E	F	F	F D Dvbqbz6"1":]CCCCD D D D D D D D D D D D D D D !..Y]4D.EEMM	A M 
z)T	U	U	U < <vv];;;;< < < < < < < < < < < < < < < < < <sZ   BB!$B!)DDD9EEEF;;F?F?H,,H03H0c                 2   d}t          d          }|                    dd|f          }|                    dd|f          }|                    |f          }t          |          }| t          v rt          | |||           d S t          | |||           d S )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0&tVVWEEEEE&tVVVDDDDDru   c                    d}t          d          }|                    dd|f          }|                    dd|f          }|                    |df          }t          |          }| t          v rVt          j        |           }||                    d                              dd          z  }t          | |||           d S t          | |||           d S )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0vwhdhhBh//77A>>>&tVV\JJJJJ&tVVVDDDDDru   c                    t          d          }t          ddddd          \  }}t          ddddd          \  }}t          j        ||g          }t          j        ||g          }|                    |j                  }||                    dd	          z  }t          |          }| t          v rt          | |||           d S t          | |||           d S )
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  EAr +bRW  EAr YBx  FYBx  F"""55G w{{D{111GF000&tVVWEEEEE&tVVVDDDDDru   c                     t          d          }|                    ddd          }|                    ddd          }t          |          }t          | |||           d S )Nr   r{   rr  r   )r[   r  r   r  )r   r   r   r   r   s        rs   )test_multioutput_sample_weight_invariancer     si    
 &a((L!!!QW!55F!!!QW!55FF"4@@@@@ru   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 ]e}||g| |gfD ]Z\  }}	|t          vr|	j        d	k    rt          |         }
 |
||	|d 
          } |
||	d           }t          |||                    [fd S )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    sI    ,,,!=>>,,,!=>>++++Xlll##F	&>>>A~& D D 12 12
 	D 	DNFF ...6;?? &F!6&&NNNLF664888E|U>-BCCCC	DD Dru   c                 p   t          d          }d\  }}|                    dd||f          }|                    dd||f          }t          |          } |||          }t          t	          |          |          D ]6}|d d |f         }	|d d |f         }
 ||
|	          }t          ||           7d S )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 Iy!!!Qi-C!DDF""1ay).D"EEGFF67##EU9--y99 2 2qqq$w'QQQWo{L99E=11112 2ru   c                 r   t          d          }d\  }}|                    dd||f          }|                    |j                  }||                    dd          z  }d||                    d          dk    df<   d||                    d          dk    df<   t
          |          } |||          }t          t          |          |          D ]`}|d d |f         }	|d d |f         }
 ||
|	          }|t          k    rt          j
        |          sJ |d	k    sJ Pt          ||           ad S )
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  /  sq    &a((L Iy!!!Qi-C!DDF"""55G w{{D{111G %&F6::a==Aq !$%F6::a==Aq !FF67##EU9--y99 6 6qqq$w'QQQWo{L99333;}----- 3&&&&&  }55556 6ru   c                 x   d\  }}t          d          }|                    ||          }t          j        |           }||                    d                              dd          z  }|                    d||          }t          |          } |||          }t          t          |          |          D ]~}	t          j
        |t                    }
t          j        |          |
t          |	          <   |d d |
f         }t          j        |	|          } |||          }t          ||           d S )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>   
 "Iy%a((L	955G67(DTXX2X&&..r1555G!!!YY!??FFF67##EU9--y99 2 2x	555#%9Y#7#7T$ZZ qqq,/gdF++{L99E=11112 2ru   metric_namec                 b   t           j                            d          }t          j        dgdz  dgdz  z   t                    }|                    dd|j                  }d	}t          j        t          |
          5  t          |          ||           d d d            d S # 1 swxY w Y   d S )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	0	0 4 4{+B3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s    B$$B(+B(zmetric, y_pred_thresholddtype_y_strc                    t           j                            d          }t          j        dgdz  dgdz  z   |          }|                    dd|j                  }|st          j        ddg|          |         }d	}d
}t          |           j        d         j        }|dk    r|n|}	t          j
        t          |	          5   | ||           d d d            d S # 1 swxY w Y   d S )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  sK   $ )


#
#C	6(Q,&A-[	A	A	AB	Q	(	(B ?Xvv&k:::2>	"  	T  "&))4[AI%6!%;%;!!AWG	z	1	1	1  r2                 s   C  C$'C$c                    t          ||                              ||          }                    ||          } | ||fi |}	|                    d                               |d         |          |d<   |                    d          }
t          |
t          j                  r                    |
|          |d<   	 t	          j        |           t	          j        |           d}n# t          t          t          f$ r d}Y nw xY wdfd	dfd	}|r | ||fi |}t          |	t                    rct          t          d |	D                                 d	k    r9 |||	            | ||fi |} |||	            | ||fi |} |||	           n8 ||	            | ||fi |} ||	            | ||fi |} ||	           t          d
          5   | ||fi |}t          |t                    r |||	d           n ||	d           d d d            d S # 1 swxY w Y   d S )N)devicer'  r]   TFc                     |r#t                              |                     } t          | |t                               d S )N)atol)rM   asarrayrQ   rL   )metric_ametric_b	convert_a
dtype_namexps      rs   _check_metric_matchesz5check_array_api_metric.<locals>._check_metric_matches  sJ     	C(H)=)=rBBH(
1K1KLLLLLLru   c                 P    t          | |          D ]\  }} |||           d S )Nr0  )zip)r.  r/  r0  metric_a_valmetric_b_valr3  s        rs   _check_each_metric_matchesz:check_array_api_metric.<locals>._check_each_metric_matches  sJ    *-h*A*A 	S 	S&L,!!,	RRRRR	S 	Sru   c                     g | ]	}|j         
S r   r  )r  
metric_vals     rs   r  z*check_array_api_metric.<locals>.<listcomp>  s    FFFj)FFFru   rj   )array_api_dispatchr5  )F)rP   r-  getr  ro   ndarrayr  RuntimeErrorr   tupler   r   r   )r   array_namespacer*  r1  a_npb_npmetric_kwargsa_xpb_xp	metric_npr]   numpy_as_array_worksr9  	metric_xpmetric_xp_mixed_1metric_xp_mixed_2r3  r2  s      `            @@rs   check_array_api_metricrL    s    
ov	6	6B::d6:**D::d6:**DtT33]33I))5)+/*6 *4 *
 *
o&  ##M22K+rz** N')zz+fz'M'Mm$	%

4

4#|Z0 % % %
  %%M M M M M M M
S S S S S S  @F47777	
 y%((	@CFFIFFFGGHH1LL&&y)<<< &tT C C] C C&&'8)DDD &tT C C] C C&&'8)DDDD "!)Y777 &tT C C] C C!!"3Y??? &tT C C] C C!!"3Y???	4	0	0	0 H HF47777	 i'' 	H&&y)tLLLLL!!)Y$GGGGH H H H H H H H H H H H H H H H H Hs$   *C6 6DD.=H88H<?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| d S )	Nr  )r   rj   r   rj   r   r|   r~   rB  rC  r'          rX         @      ?r  )ro   r   r  rL  )r   rA  r*  r1  	y_true_np	y_pred_nprD  r'  s           rs   ,check_array_api_binary_classification_metricrU    s     &&I&&IM-''		
 	 	 	 	 	 H111DDDM		
 #	 	 	 	 	 	 	ru   c                    t          j        g d          }t          j        g d          }dddd}t          | |          }|D ]B}t          | |||f||d d| t          j        g d	|
          }	t          | |||f|||	d| Cd S )N)r   rj   r{   r,  )r   rj   r   r{   r   r   r   rY  r~   g?)FT)r   r|   rb   r   paramsrN  rO  r  ro   r   (_get_metric_kwargs_for_array_api_testingrL  
r   rA  r*  r1  rS  rT  additional_paramsmetric_kwargs_combinationsrD  r'  s
             rs   0check_array_api_multiclass_classification_metricr`    s    &&I&&I 2! 
 "J " " " 4 
 
			

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

 '		
 		
 		
 		
 		
 		

 
ru   c                 8   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 ]B}t          | |||f||d d| t          j        g d	|          }	t          | |||f|||	d| Cd S )
Nrj   r   r  rW  rX  r   rY  rN  )rP  rX  rQ  r[  r]  s
             rs   0check_array_api_multilabel_classification_metricrb  =  s9    1a&1a&1a&1DDDI1a&1a&1a&1DDDI 2  "J " " " 4 
 
			

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

 '		
 		
 		
 		
 		
 		

 
ru   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 r0t          j	        g d	|          |d<   t          | |||f||d| d S d S )
Nr)   z1.14.0zJmean_poisson_deviance's dependency `xlogy` is available as of scipy 1.14.0)rQ  rX  rR  g      @r  )r~   r~   r{   r{   r'  rB  rC  )rX  rQ        ?r~   )r  r   funcr  rX   rW   r   skipro   r   r   r"  rL  )	r   rA  r*  r1  	func_namerS  rT  rD  metric_paramss	            rs   !check_array_api_regression_metricrj  e  st   (267(C(CX$$I+++
]8=T=T0T0TX	
 	
 	
 ---Z@@@I)))<<<IMf%%0M-'')-o&	
      -'')+   
*
 *
 *
o& 			

 	
 	
 	
 	
 	
 	
 	
 ('ru   c                    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
           d S )N)rj   r,  r{   )rj   r{   r{   r  )rj   rd  rd  )rj   rj   rj   rN  rX  rQ  )rX  rZ  ffffff?)rB  rC  r]   
raw_values)ro   r   rL  )r   rA  r*  r1  rS  rT  r'  s          rs   -check_array_api_regression_metric_multioutputrn    s1    )))YYY/zBBBI)))YYY/zBBBI    Hc3Zz:::M#    H___J???          ru   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| d S )
NrW  )皙?r~   333333?r  )rY  rZ  rp  )r~   rq  rl  dense_outputFrd  T)ro   r   r   r"  rL  )r   rA  r*  r1  X_npY_nprD  s          rs   check_array_api_metric_pairwiseru    s    8___ooo6jIIID8___ooo6jIIIDM6**555(-n%		

 	
 	
 	
 	
 	
 )-n%	
       ru   g      re  c              #   T   K   |                                  D ]\  }}|D ]}||fV  	d S r   )items)metric_checkersr   checkerscheckers       rs   !yield_metric_checker_combinationsr{  _	  sW      +1133 " " 	" 	"G'/!!!!	"" "ru   z#array_namespace, device, dtype_name)idszmetric, check_funcc                 "     || |||           d S r   r   )r   rA  r*  r1  
check_funcs        rs   test_array_api_compliancer  e	  s      Jv
;;;;;ru   df_lib_namepandaspolarsc                    t          j        |          }|                    g d          }|                    g d          }t          |          }	  ||                                |                                          }n'# t
          $ r t          j        |  d           Y nw xY wt           |||          |           d S )N)rP  rR  r   rR  )rR  rP  rP  rP  z can not deal with 1d inputs)r   importorskipSeriesr   to_numpyr   rg  rQ   )r  r  df_libr   r   r   expected_metrics          rs   test_metrics_dataframe_seriesr  o	  s      --F]]---..F]]///00F%FB &!2!2FOO4E4EFF B B B{@@@AAAAAB FF66**O<<<<<s   0B !B&%B&c                     i g}|                                 D ]X\  }}|t          |           j        vrg }|D ]5}|D ]0}|                                }|||<   |                    |           16|}Y|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.)rw  r   r"  r  append)	r   rZ  r_  paramr_  new_combinationsrr   value
new_kwargss	            rs   r\  r\  	  s     #% 6 6v	&))4440 	4 	4F 4 4#[[]]
$)
5! ''
33334
 &6""%%ru   c                    t           j                            d          }|                    ddd          }|                    ddd          }| t          v rt          ||          \  }}| t          v r0|                    ddd          }|                    ddd          }t          |          } |||          }t          |t          t           j
        t          f          sJ t          |t           j        t           j        f          rJ t          |t                    r4t          d |D                       st          d |D                       sJ dS dS dS )	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                    V  d S r   )r  ri   r  vs     rs   	<genexpr>z2test_returned_value_consistency.<locals>.<genexpr>	  s,      77A:a''777777ru   c              3   J   K   | ]}t          |t          j                  V  d S r   )r  ro   r>  r  s     rs   r  z2test_returned_value_consistency.<locals>.<genexpr>	  s?       ?
 ?
*+Jq"*%%?
 ?
 ?
 ?
 ?
 ?
ru   N)ro   r  r  r   r   r   r   r   r  ri   r>  r@  r   float32rO  )r   r  r   r   r   r  s         rs   test_returned_value_consistencyr  	  s    )


"
"C[[AE[**F[[AE[**F)))266BB&&&Q00Q00FF66""EeeRZ788888%"*bj!9:::::% 
7777777 	
3 ?
 ?
/4?
 ?
 ?
 <
 <
 	
 	
 	

 
	
 	
 	
 	
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(  rL  rU  r`  rb  rj  rn  ru  array_api_metric_checkersr{  r  r  r\  r  r   ru   rs   <module>r     s    				             2 2 2 2 2 2 2 2 2 2      * * * * * * ; ; ; ; ; ; 5 5 5 5 5 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0b 8 7 7 7 7 7                                 " 1 0 0 0 0 0 ! ! ! ! ! !                           J I I I I I I I I I 3 3 3 3 3 3 E E E E E E E EF. , 4	
 * 2 %&D  8 .ABBB 6 "#> GG$9CCC 2 . %gg.C3&O&O&O   0<<<!" (#$ 6%  *6n666 '0GRV(W(W(W6 "77>U#K#K#K	6 $%56 " $ $6 /0K6 6ww#8 8 86$ L%6& ]'6( !''-5"I"I"I)6, ]-6. /60 L162 364 !,,,566 ''+C00076 68 096: 77;
MMM;6< :>>>=6> jqIII?6@  L L LA6B WW\:FFFC6D ggmZHHHE6F W3GGGG6H ggh888I6J ggk7CCCK6L WW_gFFFM6N '',@@@O6P 77='BBBQ6R W3GGGS6T ggh888U6V ggk7CCCW6X WW_gFFFY6 6Z "',@@@"7='BBB!'+ysKKK)<<<YQGGG&w	JJJ#GL)DDD$W]IFFF*k6 6 6 r  @ F "%n"%,"% "% WWX???	"%
 *"% ("% ]"% zBBB"% ww}i@@@"% WW]G<<<"% 77='uMMM"% GGzu  "% 77='uMMM"%  GGzu  !"%& ww}c:::'"%( 6)"%* ') ) )+"%0 (/w( ( ( &-W-Dg%V%V%V-R0$*C"% "% "% !H dff   4 5 5 5   ) * * *   % & & &   = ! ! !       ( &=%B%B& & "
   3 3 3 /   *% % % P! ! ! ! ! ! .   D   "      H      H! ! !     !     	@ 	@ 	@ (9!:!:;;
 
 <;
B (=!>!>??: : @?:4' ' '  
FF33{##&HHII 
 
 
**
 *
 *
Z 
FF33{##&HHII {+ {+ {+|!!2! !  #@#G#G#I#IJJ+ + KJ+ #9#@#@#B#BCC4 4 DC4> 
FF33-..1SSTT 2 2 2j !BCC(/ (/ DC(/X VbfbfVbfbfVbfbfVbfa[Vbfa[  	E
+
2
2
4
46H6O6O6Q6QRR  *,<==    >=	 
  #9#@#@#B#BCC &!Q#
&!Q#      DC , #9#@#@#B#BCC    DC   $7 7 7 H%%

FK -	- #/
0
0		1 	 	 	 	 &%
 H%%(;>Q(Q!R!RSS* * TS &%* (;!<!<==  >= (;!<!<==
 
 >=
$ OPP.99H
 H
 :9 QPH
V (;!<!<==  >=  (E!F!FGG  HG8 (E!F!FGG  HG8 
FF0==>QRRSS , , ,^32 32 32lO O O" (>!?!?@@U U A@U 

F!$SSTT U U	 U$ (>!?!?@@U U A@U  & (>!?!?@@U U A@UbP bP bP bPJ 

FK%%cc*<&=&=>>
'	(  	P 	P 	P 

FK%%cc*<&=&=>>
'	(  < <  <@ 

FK
# 
!
!	"
'	( "	"  E E E 

FK
# 
!
!	"
'	( -	-  E E E" 

F	<	<
'	(  E E E. 

F!>>?? A A	 AD D D2 
FF&*T)UUVV 2 2 2$ 
FF03FFGG 6 6 6B 

F330114VVWW 2 2	 2* (>??	4 	4 @?	4 	 $'	4 	5	1	%	%	%u-		&	% 	u	D
  f66  76 4LH LH L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 G!...1R0S{| G!---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/P/R/RSS< < TS < 8(<=={(;(;<<= = =< >==& & &* !4!455
 
 65
 
 
ru   