
    riD                       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       Ztetj                  er       etj                  eo       etj                  en       etj                  eq       h drZvh dsZwevj                  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                  j                  d ee            d        Zej                  j                  d ee            d        Zd Zej                  j                  d e eet      eyz
              d        Zd Zej                  j                  d e eet      eyz
              d        Zi eodeiZej                  j                  dej+                               d        Zej                  j                  deoj+                               d        Zej                  j                  d e eeo      eyz
              d        Zej                  j                  der      d        Zd dgej4                  ej4                  gfd dgej6                  ej6                  gfd dgej6                  ej4                  gfd dgej4                  dgfd dgej6                  dgfgZej                  j                  d eerj+                         enj+                                     ej                  j                  de      d               Zej                  j                  deoj+                               ej                  j                  deej6                  dd>gg dfej4                  dd>gg dfgz         d               Zej                  j                  deoj+                               d        Zd Zd Zej                  jE                  d      ej                  j                  d e eet      eyz
   eer      z
              d               Zej                  jE                  d      ej                  j                  d eeez              d               Zej                  j                  d ee            d        Zej                  j                  d ee            d        Zej                  jE                  d      ej                  j                  def      d               Zej                  j                  d ee            d        Zej                  j                  d ee~            d        Zej                  j                  d ee~            d        Zej                  j                  d ee~jW                  e                  d        Zd Zd Zej                  j                  d eez            d        Zej                  j                  d eeze{z              d        Zej                  j                  d eez            d        Zd Zej                  j                  d eez            d        ZddZej                  j                  d e eet      jW                   een            ez
              d        Zej                  jl                  ej                  j                  d e eet      jW                   een            ez
              d               Zej                  j                  d e eet       een      z
  ez
  evz
              d        Zej                  j                  d e eet       een      z
  ez
  eyz
              d        Zej                  j                  d eeez  ez
              d        Zej                  j                  d eeez
              d        Zd Zej                  j                  d eed3hz
              d        Zej                  j                  d eeez              d        Zej                  j                  d e eer      eyz
              d        Zej                  j                  deo      d        Zej                  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                  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                  j                  d e]       e\ƫ      ej                  j                  d e̫             dȄ               Zej                  j                  dddg      ej                  j                  d eet            d̄               Zd̈́ Zej                  j                  d eet            d΄        Zy)    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 |j                  d      t        | i |j                  d      d d t        j                  f   z  S )Nfloat   axis)r   astypesumnpnewaxis)argskwargss     _/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/sklearn/metrics/tests/test_common.py<lambda>rt      sM    $)&)009
D
+F
+
/
/Q
/
72::
F	G     (unnormalized_multilabel_confusion_matrix/unnormalized_multilabel_confusion_matrix_sample)
samplewiser   r9   unnormalized_zero_one_lossr   r1   r3   r   f2_score   )beta
f0.5_score      ?matthews_corrcoef_scoreweighted_f0.5_scoreweightedaverager|   weighted_f1_scorer   weighted_f2_scoreweighted_precision_scoreweighted_recall_scoreweighted_jaccard_scoremicro_f0.5_scoremicromicro_f1_scoremicro_f2_scoremicro_precision_scoremicro_recall_scoremicro_jaccard_scoremacro_f0.5_scoremacromacro_f1_scoremacro_f2_scoremacro_precision_scoresamples)	macro_recall_scoremacro_jaccard_scoresamples_f0.5_scoresamples_f1_scoresamples_f2_scoresamples_precision_scoresamples_recall_scoresamples_jaccard_scorer   c            
         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)r0   lenro   arraypadrm   float64nan)rq   rr   	precisionrecall
thresholdspad_threshholdss         rs   (precision_recall_curve_padded_thresholdsr      sz     %;D$KF$K!Ivz)ns:6O88FF!!"**-o.!#			
 ru   )r5   r0   r   r   r!   r"   unnormalized_log_lossr   r   r4   weighted_roc_aucsamples_roc_aucmicro_roc_aucovr_roc_aucovr)r   multi_classweighted_ovr_roc_aucovo_roc_aucovoweighted_ovo_roc_aucpartial_roc_auc)max_fprr    weighted_average_precision_score)samples_average_precision_scoremicro_average_precision_scorer    r/   r   r8   r   r   >   r   r/   r   r   r   r!   r   r   r   r    rw   r   >   r   rz   r   r5   r3   r   r   r4   r   r1   r   r   r0   r}   >   r   rz   r3   r   r1   r}   >   r4   r   r   >   r   rz   r   r5   r3   r   r   r1   r   r0   r   r   r   r   r}   >$   r   rz   r"   r   r5   r3   r   r   r   r   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   rg   rf   rv   rw   r}   r   r   r   >   r9   r   r8   >   r"   r   r/   r   r4   r   r   r   r   r   r   r   r!   r   r   r   r   r   r    >   r   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   rc   rv   r   r   r   r   >   r2   r   r(   r*   r%   r-   r+   r   r6   r   r7   r&   >   r   r$   r   r   r9   r   r   r   r   r   r(   r*   r   r   r%   r   r^   r-   r   r   r   r+   r   r6   ry   r7   rc   r   >   rz   r2   r   r5   r   r3   r   r1   r   r   r   r   r   r'   r   r)   r0   r   r   r   r   r   rg   rf   r&   r`   ra   rv   r}   r   r   >   r$   r   r   >   r   r'   r)   r`   c                     t        t        | j                         |j                                     dz   }| |z  } ||z  }| |fS )zMake targets strictly positiverj   )absminy1y2offsets      rs   _require_positive_targetsr   P  s?    RVVXrvvx()A-F&LB&LBr6Mru   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   rm   ro   r   r   s      rs   _require_log1p_targetsr   X  sc    RVVXrvvx()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 y N)SYMMETRIC_METRICSNOT_SYMMETRIC_METRICSset!CONTINUOUS_CLASSIFICATION_METRICS"METRIC_UNDEFINED_BINARY_MULTICLASSALL_METRICS ru   rs   test_symmetry_consistencyr   b  sX     	
	 
/
0	1 -	- 
[	    55#%???ru   namec                    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)
r[   randintMETRICS_REQUIRE_POSITIVE_Yr   METRICS_WITH_LOG1P_Yr   r   METRIC_UNDEFINED_BINARYMULTILABELS_METRICSrQ   )r   random_statey_truey_pred
y_true_bin
y_pred_binmetrics          rs   test_symmetric_metricr   n  s    &a(L!!!QU!3F!!!QU!3F))266B	%	%/?%%a%:J%%a%:JF&&&&z:.z:.-4 =<<566"66")D0	
ru   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)	r[   r   ranger   r   r   ro   allclose
ValueError)	r   r   r   always_symmetric_r   r   nominalswappeds	            rs   test_not_symmetric_metricr     s     &a(LF
 1X %%a%7%%a%7--6vvFNFF(({{7G,$ D6!7899 ru   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   r3   z is not symmetricmatchr   )r   pytestraisesAssertionErrorr   r   )symnot_syms     rs   test_symmetry_testsr     s    
CG #	~y8I-J	K 'g&' g&	zC50F)G	H '!#&' '' '
' 's   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   )
r[   r   r   r   r   r   rK   rU   r   rQ   )r   r   r   r   y_true_shuffley_pred_shuffler   s          rs   test_sample_order_invariancer    s     &a(L!!!QU!3F!!!QU!3F))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   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    si   %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=	

ru   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   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B	%	%'B/B2hG2hG88B<"5Euzz1%uzz1%

5'*I

5'*IZZw'FZZw'F		 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&<===> > ]]:. +66*+Kf+ f+Z	" 	"	" 	"	$ 	$	$ 	$	& 	&	& 	&> >+ +Kf+ f+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escapero   r   )r   msgs     rs   0test_classification_metrics_raise_on_empty_inputr#    sL    
UC	z3	8 +rxx|RXXb\*+ + +s   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   rj   'Found input variables with inconsistentr   sample_weight%Input sample_weight contains infinity Input sample_weight contains NaNy      ?       @y      @      @y      @      @Complex data not supported   )Sample weights must be 1D array or scalar)r[   r   random_sampler   r   r   ro   infr   r   r  )r   r   	n_samplesr   r   r'  s         rs   .test_classification_with_invalid_sample_weightr1    s    &a(LI			a)		6B			a)		6B ..Y]4D.EM	z)R	S 4r2]34 !..YL.AMvvM!	z)P	Q 4r2]34 vvM!	z)K	L 4r2]34 HH56M	z)E	F <r"1vr"1v];< !..Y]4D.EMM	AM 
z)T	U 4r2]34 4'4 4
4 44 4< <4 4s<   )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)r[   r   ro   r   rU   CLASSIFICATION_METRICSMETRICS_WITH_POS_LABELr   rS   formatrm   METRICS_WITH_LABELS)r   r   r   r   y1_stry2_strpos_label_str
labels_strr   measure_with_number
metric_strmeasure_with_strmeasure_with_strobjs                rs   7test_classification_invariance_string_vs_numbers_labelsrG    s   
 &a(L			a		/B			a		/BXXvv&'+FXXvv&'+FM&!J		 &'-$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   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    ss    &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rj   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      rs   test_continuous_inf_nan_inputrK    sH     )	z)C	D  vw     s	   
>A)rj   r{   r,  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)ro   isfiniteallr  anyr   r   r   )r   r   r	  
input_nameunexpected_valuer   s         rs   !test_classification_inf_nan_inputrS  )  s      ;;v""$
88F!$>
88G  "$>zl*-=,>?G	z	1  vw     s   
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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  sD     &GFT  
z	1  vw     s	   
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 )Nrj   r{   gffffffr   repeat)r   r   r   r   )r   r   valuesijs        rs   check_single_samplerb  X  se    
 F ))Q	%	%Qq) 1sQCru   c                     t         |    }t        ddgd      D ]<  \  }}}} |t        j                  ||gg      t        j                  ||gg             > y )Nr   rj      r]  )r   r   ro   r   )r   r   r`  ra  kls         rs   check_single_sample_multioutputrg  j  sV    Fq!fQ/ 7
1arxx!Q!288aVH#567ru   ignorec                     t        |        y r   )rb  r   s    rs   test_single_samplerk  q  s     ru   c                     t        |        y 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        y # 1 sw Y   y xY w)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    sm    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   r,  rj   z'%s is not dimension shuffling invariantr   )r[   r  r   r   permutationr  rQ   )r   r   r   r   r   errorr   perms           rs   =test_multioutput_regression_invariance_to_dimension_shufflingrv    s     &a(L!!!QW!5F!!!QW!5FF66"E1X 
''Q86!T'?F1d7O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 
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 )Nrd  2   rj   r   T
n_features	n_classesr   r0  allow_unlabeledtmpzO%s failed representation invariance between dense and sparse indicator formats.r   z\%s failed representation invariance  between dense array and list of list indicator formats.zW%s failed representation invariance  between dense and list of array indicator formats.)r	   ro   vstackr  r   r   
isinstancer   
__module____name__rQ   rR   )rw  r|  r0  r   r   r   y1_sparse_indicatory2_sparse_indicatory1_list_array_indicatory2_list_array_indicatorrU  y1_list_list_indicatory2_list_list_indicatorr   r   r  s                   rs   )test_multilabel_representation_invariancer    s    II*EAr +EAr 
B!y)*	+B	B!y)*	+B'+'+"2h"2h/FG!d1gGG/FG!d1gG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)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# ]]:& 	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   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\!BF!!!Yi\!BF!!v||!4G$G??7VD >$VTUC!!	B *tf%ru   c                 >   d}d}t        d      }|j                  d||f      }|j                  d||f      }|j                  ||f      }t        |    }| t        v r|n|} |||d      }	 |||d      }
t        d|	z  dd	
       t        |	|
|z  d|  
       y )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\!BF!!!Yi\!BF""I(>"?G$G??7VD >$VTUC!!	B *tf%ru   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 )Nrd  d   r   rj   T)r{  r|  r   r}  r0  r   rd   Fr  r  r   r  )r[   r	   r  r  r   r   rT   rQ   )r   r|  r0  r   r   r   r   r	  r  r  r  r  s               rs   /test_normalize_option_multilabel_classificationr  <  s    
 II%a(L /IAv /IAv """5G qcIoF
qcIoF$G??7VD >$VTUC!!	B *tf%ru   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   )rl   r  r   )weightsr   unknowngarbage)r  rQ   r   ravelro   meanrn   intr   r   r   r   )r   r   r   y_true_binarizey_pred_binarizeis_multilabelr0  r|  label_measurer`  micro_measuremacro_measurer  weighted_measuresample_measures                  rs   _check_averagingr  n  s    +00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	" 2vvy12	z	" 2vvy12 2S	
@2 22 2s#   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)rY   
startswithr   METRICS_WITH_AVERAGINGr  /CONTINOUS_CLASSIFICATION_METRICS_WITH_AVERAGINGr   )r   r   r  r   r  r	  r  r   s           rs   check_averagingr    sm    "6*55lCMF%%FFO_m	
 
@	@FG_g}	
 MNNru   c                 6   d\  }}t        d      }|j                  d||f      }|j                  d||f      }|j                  ||f      }t               j	                  |      }|j                  |      }|j                  |      }	t        | ||||	|       y )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\!BF!!!Yi\!BF""I(>"?G				f	%Bll6*Oll6*OD&/6?GTru   c                     d\  }}t        d|d|d      \  }}|d d }|dd  }t        d      j                  d|f      }|}|}	t        | ||||	|       y )	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VFrsVF #**Y*@GOOD&/6?GTru   c                     t        j                  d      }t        j                  d      }t        j                  d      }|}|}t        | |||||       y Nr   r,  )ro   zerosr  r   r   r   r	  r  r  s         rs   $test_averaging_multilabel_all_zeroesr    sH    XXgFXXgFhhwGOOD&/6?GTru   c                      t        j                  d      } t        j                  d      }| }|}dd}t        || |||d       y )Nr  c                 &    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    sK    XXgFXXgFOOM ru   c                     t        j                  d      }t        j                  d      }t        j                  d      }|}|}t        | |||||       y r  )ro   onesr  r  s         rs   "test_averaging_multilabel_all_onesr    sH    WWWFWWWFgggGOOD&/6?GTru   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| 
       | j                  d      s0| dk(  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   rj   
   r   r8   )re  r&  )r  zAFor %s sample_weight=None is not equivalent to sample_weight=onesr   z>Unweighted and weighted scores are unexpectedly almost equal (z) and (z) for zFWeighted scores for array and list sample_weight input are not equal (z != rk   z.Weighting %s is not equal to repeating samplesr{   zUZeroing weights does not give the same result as removing the corresponding samples (unnormalizedr-   rZ  z/%s sample_weight is not invariant under scalingzJFound input variables with inconsistent numbers of samples: \[{}, {}, {}\]r   )ro   randomRandomStater   r   r   rQ   r  r   r   r   r   tolistr^  copyr  r=  rZ   hstack)r   r   r   r   r'  rngunweighted_scoreweighted_scoreweighted_score_listrepeat_weighted_scoresample_weight_subsetsample_weight_zeroed	y1_subset	y2_subsetweighted_score_subsetweighted_score_zeroedscaling_valuesscalingerror_messages                      rs   check_sample_weight_invariancer    s   
))


"CArB8 &*-C%CWVq!F 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	? ??>*
 !%(? ?!aX% 	Gr2]W-DEIDP		##)6l2.]0Ka0O$
  
z	7 Pr2RYY}/M%NOP P Ps   9!CC#!I77J c                     d}t        d      }|j                  |f      }|j                  |f      }t        j                  t	        |            }t
        |    }t        | ||||       y )Nry  r   r   )r[   r.  ro   aranger   r   r  )r   r0  r   r   r   r'  r   s          rs   (test_regression_sample_weight_invariancer  h  si     I%a(L''i\':F''i\':FIIc&k*MF"4Oru   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)Nry  r   r   rj   r%  r   r&  r(  r)  r*  r+  r,  r{   r-  )r[   r.  r   r   r   r   ro   r/  r   r   r  )r   r0  r   r   r   r   r'  s          rs   *test_regression_with_invalid_sample_weightr  }  s    I%a(L''i\':F''i\':FF ..Y]4D.EM	z)R	S <vv];< !..YL.AMvvM!	z)P	Q <vv];< vvM!	z)K	L <vv];< HH56M	z)E	F Dvbqz6"1:]CD !..Y]4D.EMM	AM 
z)T	U <vv];< <'< <
< << <D D< <s<   .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        v rt        | |||       y t        | |||       y )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&tVVWE&tVVVDru   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 )Nry  r   r   r   r  rk   rj   )
r[   r   r.  r   r   ro   exprn   r  r  )	r   r0  r   r   r   r	  r   tempy_score_norms	            rs   (test_multiclass_sample_weight_invariancer    s     I%a(L!!!Qi\!:F!!!Qi\!:F((y!n(=GF00vvwhdhhBh/77A>>&tVV\J&tVVVDru   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   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 YYBx FYYBx F"""5G w{{D{11GF00&tVVWE&tVVVDru   c                     t        d      }|j                  ddd      }|j                  ddd      }t        |    }t        | |||       y )Nr   r{   rr  r   )r[   r  r   r  )r   r   r   r   r   s        rs   )test_multioutput_sample_weight_invariancer    sT    
 &a(L!!!QW!5F!!!QW!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 ]Y  }||g| |gfD ]L  \  }}	|t        vr|	j
                  d	kD  rt        |   }
 |
||	|d 
      } |
||	d       }t        |||          N [ y )N)rj   rj   r   r   r   r   rj   rj   )r   rj   rj   r   )r   rj   r{   )r   r{   r,  )r,  r   rj   r{   T)return_inverserj   )r:  r   r   )ro   r   uniquer  r   r  r   rS   )y_true_multilabely_pred_multilabely_true_multiclassy_pred_multiclassr:  r   inverse_labelsr   r   r   r   score_labelsscores                rs   test_no_averaging_labelsr    s     ,!=>,!=>++XXl#F		&>A~& D 12 12
 	DNFF ..6;;? &F!&&NL6648E|U>-BC	DDru   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   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!DF""1ay).D"EGF67#EU9-y9 2q$w'QWo{L9E=12ru   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   rj   Tr  rd  g    .A)r[   r   r  r  rn   r   r   r   r&   ro   rN  rR   r  s               rs   >test_continuous_multilabel_multioutput_permutations_invariancer
  /  s+    &a(L Iy!!!Qi-C!DF"""5G w{{D{11G %&F6::a=Aq !$%F6::a=Aq !F67#EU9-y9 6q$w'QWo{L933;;}--- 3&&&  }56ru   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  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5G667(DTXX2X&..r155G!!!YY!?FF67#EU9-y9 2xx	5#%99Y#7T$Z q,/ggdF+{L9E=12ru   metric_namec                 L   t         j                  j                  d      }t        j                  dgdz  dgdz  z   t              }|j                  dd|j                        }d	}t        j                  t        |
      5  t        |    ||       d d d        y # 1 sw Y   y xY w)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 4{+B34 4 4s   BB#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	}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  r4  r,  r3  r{   r  r   r   zy_true takes value in {'eggs', 'spam'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitzHpos_label=1 is not a valid label. It should be one of \['eggs', 'spam'\]r6  rj   r   )ro   r  r  r   r   r   r   
parametersdefaultr   r   r   )
r   y_pred_thresholdr  r  r   r   err_msg_pos_label_Noneerr_msg_pos_label_1pos_label_defaultr   s
             rs    test_metrics_pos_label_error_strr  y  s    $ ))


#C	6(Q,&A-[	AB	Q	(BXXvv&k:2>	"  	T  "&)44[AII%6!%;!AWG	z	1 r2  s   
CC$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)N)devicer'  r]   TFc                 n    |rt        j                  |             } t        | |t                     y )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  s,    (H)=rBH(
1KLru   c                 D    t        | |      D ]  \  }} |||        y )Nr%  )zip)r#  r$  r%  metric_a_valmetric_b_valr(  s        rs   _check_each_metric_matchesz:check_array_api_metric.<locals>._check_each_metric_matches  s,    *-h*A 	S&L,!,	R	Sru   rj   )array_api_dispatchr*  )F)rP   r"  getr  ro   ndarrayr  RuntimeErrorr   tupler   r   r  r   )r   array_namespacer  r&  a_npb_npmetric_kwargsa_xpb_xp	metric_npr]   numpy_as_array_worksr.  	metric_xp
metric_valmetric_xp_mixed_1metric_xp_mixed_2r(  r'  s      `             @@rs   check_array_api_metricr@    s0    
ov	6B::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Fj))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 H477	 i'&y)tL!)Y$GH HU |Z0 %
  %%. G&H Hs$   ,,G G32G8G0/G08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   rj   r   rj   r   r|   r~   r5  r6  r'          rX         @      ?r  )ro   r   r  r@  )r   r4  r  r&  	y_true_np	y_pred_npr7  r'  s           rs   ,check_array_api_binary_classification_metricrI    s     &I&IM-'		
 	 	 HH1DM		
 #	 	ru   c                    t        j                  g d      }t        j                  g d      }dddd}t        | |      }|D ]A  }t        | |||f||d d| t        j                  g d	|
      }	t        | |||f|||	d| C y )N)r   rj   r{   r,  )r   rj   r   r{   r   r   r   rY  r~   g?)FT)r   r|   rb   r   paramsrB  rC  r  ro   r   (_get_metric_kwargs_for_array_api_testingr@  
r   r4  r  r&  rG  rH  additional_paramsmetric_kwargs_combinationsr7  r'  s
             rs   0check_array_api_multiclass_classification_metricrT    s     &I&I 2!
 "J " 4 
			

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

 '		
 		

ru   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 )
Nrj   r   r  rK  rL  r   rM  rB  )rD  rX  rE  rO  rQ  s
             rs   0check_array_api_multilabel_classification_metricrV  =  s     1a&1a&1a&1DI1a&1a&1a&1DI 2 "J " 4 
			

 		
 		
 
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 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)rE  rX  rF  g      @r  )r~   r~   r{   r{   r'  r5  r6  )rX  rE        ?r~   )r  r   funcr  rX   rW   r   skipro   r   r   r  r@  )	r   r4  r  r&  	func_namerG  rH  r7  metric_paramss	            rs   !check_array_api_regression_metricr^  e  s   (267(C$$I++
]8=T0TX	
 -Z@I)<IMf%00M-')-o&	
   -')+ 
*
o& 			

 	
 	
 (ru   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)rj   r,  r{   )rj   r{   r{   r  )rj   rd  rd  )rj   rj   rj   rB  rX  rE  )rX  rZ  ffffff?)r5  r6  r]   
raw_values)ro   r   r@  )r   r4  r  r&  rG  rH  r'  s          rs   -check_array_api_regression_metric_multioutputrb    s     )Y/zBI)Y/zBI HHc3Zz:M# HH_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| y )
NrW  )皙?r~   333333?r  )rY  rZ  rd  )r~   re  r`  dense_outputFrX  T)ro   r   r   r  r@  )r   r4  r  r&  X_npY_npr7  s          rs   check_array_api_metric_pairwiseri    s    88_o6jID88_o6jIDM6*555(-n%		

 	
 	
 )-n%	
  ru   g      rY  c              #   V   K   | j                         D ]  \  }}|D ]  }||f 
  y wr   )items)metric_checkersr   checkerscheckers       rs   !yield_metric_checker_combinationsro  _	  s<     +113 " 	"G'/!	""s   ')z#array_namespace, device, dtype_name)idszmetric, check_funcc                      || |||       y r   r   )r   r4  r  r&  
check_funcs        rs   test_array_api_compliancers  e	  s     v
;ru   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)rD  rF  r   rF  )rF  rD  rD  rD  z can not deal with 1d inputs)r   importorskipSeriesr   to_numpyr   r[  rQ   )r  rt  df_libr   r   r   expected_metrics          rs   test_metrics_dataframe_seriesr}  o	  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.)rk  r   r  r  append)	r   rN  rS  paramr_  new_combinationsrr   value
new_kwargss	            rs   rP  rP  	  s     #% 6v	&)4440 	4F 4#[[]
$)
5! ''
34	4 &6"6 &%ru   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  ri   .0vs     rs   	<genexpr>z2test_returned_value_consistency.<locals>.<genexpr>	  s     7A:a'7s   c              3   P   K   | ]  }t        |t        j                           y wr   )r  ro   r1  r  s     rs   r  z2test_returned_value_consistency.<locals>.<genexpr>	  s       ?
*+Jq"**%?
s   $&N)ro   r  r  r   r   r   r   r   r  ri   r1  r3  r   float32rO  )r   r  r   r   r   r   s         rs   test_returned_value_consistencyr  	  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  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  r@  rI  rT  rV  r^  rb  ri  array_api_metric_checkersro  rs  r}  rP  r  r   ru   rs   <module>r     s    	   2 2   * ; 50 0 0 0 0 0 0 0 0 0 0 0 0b 8    " 1 !   J I 3 EF. , 4	
 * 2 %&D  8 .AB 6 "#> G$9C 2 . %g.C3&O   0<!" (#$ 6% *6n666 '0GRV(W6 "7>U#K	6 $%56 " $6 /0K6 6w#86$ L%6& ]'6( !'-5"I)6, ]-6. /60 L162 364 !,566 '+C0768 096: 7;
M;6< :>=6> jqI?6@  LA6B W\:FC6D gmZHE6F W3GG6H gh8I6J gk7CK6L W_gFM6N ',@O6P 7='BQ6R W3GS6T gh8U6V gk7CW6X W_gFY6Z ",@"='B!+ysK)<YQG&	J#L)D$]IF*k6 r@ F"%n"%,"% "% WX?	"%
 *"% ("% ]"% zB"% w}i@"% W]G<"% 7='uM"% Gzu"% 7='uM"%  Gzu!"%& w}c:'"%( 6)"%* ')+"%0 (/( &--Dg%V-R0$*C"% !H f   4 5   ) *   % &   = !   ( &=%B%B& "
 3 / *% P! ! . D "  H  H!   ! 	@ (9!:;
 <
B (=!>?: @:4'  
F3{#&HHI

**
Z 
F3{#&HHI{+{+|!!2!  #@#G#G#IJ+ K+ #9#@#@#BC4 D4> 
F3-.1SST22j !BC(/ D(/X VbffbffVbffbffVbffbffVbffa[Vbffa[  	
+
2
2
46H6O6O6QR *,<=  >	
  #9#@#@#BC &&!Q#
&&!Q#  D , #9#@#@#BC  D $7 H%

K -	- /
0		1		 &
 H%(;>Q(Q!RS* T &* (;!<= > (;!<=
 >
$ OP.9H
 : QH
V (;!<= >  (E!FG H8 (E!FG H8 
F0==>QRS,,^32lO" (>!?@U AU 

!$SSTU	U$ (>!?@U AU& (>!?@U AUbPJ 

K%%c*<&=>
'	(	P	P 

K%%c*<&=>
'	(< <@ 

K
 
!	"
'	( "	"EE 

K
 
!	"
'	( -	-EE" 

	<	<
'	(EE. 

!>>?A	AD2 
F&*T)UUV22$ 
F03FFG66B 

3014VVW2	2* (>?	4 @	4 	 $'	4 	5	1	%u-		&	% 	u	D
 f6 74LH^ F&
R%
P'
T.b:488 48 48 48$ <=%& 488'0 4881: 488;D  488"EN 488OX IJYZ 488[d 488en 488ox =>yz !.1R0S{| !-0Q/R}~ )5F 78GH )5IP )5QX )5Y` )5ah )5ip )5qx )y~ =>@ =>AB :;CD ;<EF 12GH #)5%IP 12QR !@ AST 679:9:34677801)5  )5" 45674 89} D 7P " )-/'  
 -/P/RS< T< 8(<={(;<= = >=&* !45
 6
ru   