o
    ?Hh(                    @   s
  d dl Z d dl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 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. d dl/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZE d dlFmGZG d(ddZHdd ZIdd ZJe
jKLddd de	jMgdd ZNe
jKLd d gd!fd dgdfg d"dfgd#d$ ZOd%d& ZPd'd( ZQe
jKRd)d*d+ ZSe
jKRd)d,d- ZTe
jKRd)d.d/ ZUd0d1 ZVe
jKLd2g d3e	Wg d4g d5g d6g d7gfg d8g d9fgd:d; ZXe
jKLd2g d<e	Wg d7g d7g d=g d=g d>gfg d?g d@fgdAdB ZYdCdD ZZdEdF Z[dGdH Z\dIdJ Z]e
jKLdKeDe
jKLdLeEdMdN Z^dOdP Z_e
jKLdQg dRdSdT Z`dUdV ZadWdX Zbe
jKLdYe	Wg dZe	Wg dZd[d\fe	Wg d]e	Wg d]d[d^fe	Wg d]e	Wg dZd[d_fe	Wg d]e	Wg d`d[dafe	Wg dZe	Wg d]d[dbfgdcdd Zce
jKLdee	Wg dfe	Wg dgd[dhfgdidj Zddkdl Zedmdn Zfe
jKLdd de	jMge
jKLdod gd gfge
jKLdpe"ee#ddqe,e-gdrds Zge
jKLdod gd gfge
jKLdpe"ee#ddqe,e-gdtdu Zhdvdw Zidxdy Zjdzd{ Zkd|d} Zle
jKLd~ddgdd Zmdd Zne
jKLdg ddd Zodd Zpdd Zqdd Zre
jKjLdg dfddgdfgddgddd Zse
jKjLddd dgg d"fg dddd Ztdd Zue
jKLdg ddd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Ze
jKRd)dd Zdd Zdd Zdd Zdd Zdd Zdd ZddĄ Ze
jKLdddgddɄ Ze
jKRd)dd˄ Ze
jKRd)dd̈́ Ze
jKRd)e
jKLdddde	jMe	jMfgdd҄ Ze
jKLddge
jKLdg dԢe
jKLdd de	jMgddք Ze
jKLdg dԢdd؄ Ze
jKLdd de	jMgddڄ Zdd܄ Zddބ Ze
jKLdd de	jMgdd Ze
jKLddd de	jMgdd Ze
jKLddd de	jMgdd Ze
jKLddd de	jMgdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Ze
jKLde	je	je	jgdd Ze
jKLde	je	je	jgdd  Ze
jKLdog dg dfg ddd gd dgdd ggfg d"g dg dg dgfgdd Zdd Zdd	 Zd
d Ze
jKLdg dg dfg dg dfg dg dfgdd Ze
jKLdpe&e"ee#ddqe+e,e-ege
jKLdg ddd Ze
jKLde	Wd dge	Wdd gdfe	Wd dge	Wd dgdfe	Wd dge	Wd d gdfe	Wd d ge	Wd d gdfgdd Ze
jKLde(e"e	jMde(e#de	jMde(e,e	jMde(e-e	jMdgd d! Zd"d# Zd$d% Zd&d' ZdS ()      N)partial)chainpermutationsproduct)linalg)hamming)	bernoulli)datasetssvm)make_multilabel_classification)UndefinedMetricWarning)accuracy_scoreaverage_precision_scorebalanced_accuracy_scorebrier_score_lossclass_likelihood_ratiosclassification_reportcohen_kappa_scoreconfusion_matrixf1_scorefbeta_scorehamming_loss
hinge_lossjaccard_scorelog_lossmake_scorermatthews_corrcoefmultilabel_confusion_matrixprecision_recall_fscore_supportprecision_scorerecall_scorezero_one_loss)_check_targetsd2_log_loss_score)cross_val_score)LabelBinarizerlabel_binarize)DecisionTreeClassifier)MockDataFrame)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)_nanaverage)CSC_CONTAINERSCSR_CONTAINERS)check_random_stateFc                 C   s  | du rt  } | j}| j}|r||dk  ||dk  }}|j\}}t|}td}|| || || }}t	|d }tj
d}tj|||d| f }tjdddd}	|	|d| |d| ||d }
|ry|
ddd	f }
|	||d }||d }|||
fS )
zMake some classification predictions on a toy dataset using a SVC

    If binary is True restrict to a binary classification problem instead of a
    multiclass classification problem
    N   %   r      linearT)kernelprobabilityrandom_state   )r	   	load_irisdatatargetshapenparanger1   shuffleintrandomRandomStatec_randnr
   SVCfitpredict_probapredict)datasetbinaryXy	n_samples
n_featuresprnghalfclfy_pred_probay_predy_true rW   i/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_classification.pymake_prediction:   s*   


*
rY   c               
   C   sl  t  } t| dd\}}}ddddddd	d
ddddddddddddddddddd}t||tt| j| jdd}| | ksIJ |D ]<}|dkret	|| t
sZJ || || ksdJ qK||  ||  kssJ || D ]}t|| | || |  qwqKt	|d d t
sJ t	|d d t
sJ t	|d d tsJ t	|d d tsJ d S ) NFrJ   rK   g7Mo?gUUUUUU?ghQ?   )	precisionrecallf1-scoresupportUUUUUU?gc1Ƹ?g433333?   g)k??$I$I?   gCFQ?gc?gƢ?K   r^   r\   r]   r_   g?gD~WG?g]3p?)setosa
versicolor	virginica	macro avgaccuracyweighted avgT)labelstarget_namesoutput_dictrk   rg   r\   rj   r_   )r	   r:   rY   r   r>   r?   lenrn   keys
isinstancefloatr*   rA   )irisrV   rU   _expected_reportreportkeymetricrW   rW   rX   ,test_classification_report_dictionary_outputj   sb   "	rz   c                  C   s   t g g dd} dtjtjtjddtjtjtjddd}t| ts$J |  | ks.J |D ]<}|dkrJt| | ts?J | | || ksIJ q0| |  ||  ksXJ || D ]}t|| | | | |  q\q0d S )NT)rV   rU   ro           r   rf   )rk   rj   rl   rk   )r   r>   nanrr   dictrq   rs   r*   )rw   rv   rx   ry   rW   rW   rX   2test_classification_report_output_dict_empty_input   s0   r~   zero_divisionwarnr9   c                 C   s   g dg d}}t jdd:}t||| dd | dkr5t|dks$J |D ]}d}|t|jv s3J q&n|r9J W d    d S W d    d S 1 sLw   Y  d S )	Nabc)r   r   dTrecord)r   ro   r   r9   z7Use `zero_division` parameter to control this behavior.)warningscatch_warningsr   rp   strmessage)r   rV   rU   r   itemmsgrW   rW   rX   0test_classification_report_zero_division_warning   s   
"r   zlabels, show_micro_avgTr   r9   r2   c                 C   s^   ddgddg}}t ||| dd}|r!d|v sJ d|vsJ dS d|v s'J d|vs-J dS )a3  Check the behaviour of passing `labels` as a superset or subset of the labels.
    WHen a superset, we expect to show the "accuracy" in the report while it should be
    the micro-averaging if this is a subset.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27927
    r   r9   T)rm   ro   z	micro avgrk   Nr   )rm   show_micro_avgrV   rU   rw   rW   rW   rX   1test_classification_report_labels_subset_superset   s   r   c                  C      t g dg dg} t g dg dg}t| |dksJ t| | dks(J t||dks1J t|t |dks=J t| t | dksIJ t| t | jdksVJ t|t | jdkscJ d S )Nr   r9   r9   r9   r   r9   r   r   r9         ?r9   r   )r>   arrayr   logical_notzerosr=   y1y2rW   rW   rX   .test_multilabel_accuracy_score_subset_accuracy      r   c               	   C   s8  t dd\} }}t| |d d\}}}}t|ddgd t|ddgd t|d	d
gd t|ddg i ddifD ]a}t S td t| |fi |}t|dd t| |fi |}	t|	dd t	| |fi |}
t|
d
d t
t| |fddi|d| |	 d| |	  d W d    n1 sw   Y  q8d S )NTrK   averageg\(\?g333333?r2   g)\(?g(\?皙?gRQ?   r   rK   errorbeta      )rY   r   r+   r,   r   r   simplefilterr   r    r   r*   r   )rV   rU   ru   rP   rfskwargspsrsfsrW   rW   rX   %test_precision_recall_f1_score_binary   s.   

r   z1ignore::sklearn.exceptions.UndefinedMetricWarningc                   C   s  dt ddgddgksJ dtddgddgksJ dtddgddgks'J dtddgddgddks6J dt ddgddgksCJ dtddgddgksPJ dtddgddgks]J dtddgddgtddksnJ tddgddgtddttddgddgddksJ d S )	N      ?r9   r   r   r{   infg     j@)r   r    r   r   rs   pytestapproxrW   rW   rW   rX   +test_precision_recall_f_binary_single_class   s   "r   c               
   C   s  g d} g d}t | tdd}t |tdd}| |f||fg}t|D ]L\}\} }t| |g dd d}tg d| t| |g ddd}ttg d| d	D ]}|d
kr^|dkr^qStt| |g d|dt| |d |d qSq&dD ]C}t	t
 t||td|d W d    n1 sw   Y  t	t
 t||tdd|d W d    n1 sw   Y  qutg dg dg} tg dg dg}t| |d
ddgd\}}	}
}tt||	|
gtg d d S )N)r9      r   r2   )r9   r9   r   r2   r   classes)r   r9   r2   r   r   rm   r   )r{   r   r   r   r{   macro)microweightedsamplesr   r   )Nr   r   r      r   r   r   r9   r   r   r9   r9   r9   r   r9   r   rm   )      ?r9   竪?)r&   r>   r?   	enumerater    r+   meanr*   r   raises
ValueErrorr   r   )rV   rU   
y_true_bin
y_pred_binr;   iactualr   rP   r   r   ru   rW   rW   rX   $test_precision_recall_f_extra_labels3  sD   
$r   c            	      C   s   g d} g d}t | tdd}t |tdd}| |f||fg}t|D ]K\}\} }tt| |ddgd}tt| |d d}tdd	g|d d
 td|dd
 td|dd
 td|dd
 dD ]}||d
||d
kspJ qbq&d S )N)r9   r9   r2   r   )r9   r   r   r   r   r   r9   r   rm   r   r   r   r   r   UUUUUU?r   r   )r   r   r   )r&   r>   r?   r   r   r    r+   r*   )	rV   rU   r   r   r;   r   	recall_13
recall_allr   rW   rW   rX   &test_precision_recall_f_ignored_labelsa  s    r   c               	   C   s   t g dg dg dg dg dg dg} t g dg dg dg d	g d
g dg}d}tjt|d t| |dd W d   dS 1 sJw   Y  dS )z:Test multiclass-multiouptut for `average_precision_score`.)r2   r2   r9   r9   r2   r   r   r9   r2   r9   )r2   r   r9   ffffff?皙?皙?皙?333333?r   r   r   r   r   r   r   )r   r   r   )r   r   r   z.multiclass-multioutput format is not supportedmatchr2   	pos_labelN)r>   r   r   r   r   r   )rV   y_scoreerr_msgrW   rW   rX   -test_average_precision_score_non_binary_classx  s,   

"r   zy_true, y_scorer   r   r9   r2   r   r   r   r   )r   r   r   r   r9   r9   r9   r9   r9   r9   r9   )r   r   r   r   r   333333?r   rb   rb   r9   r9   c                 C   s   t | |dks	J dS )a(  
    Duplicate values with precision-recall require a different
    processing than when computing the AUC of a ROC, because the
    precision-recall curve is a decreasing curve
    The following situation corresponds to a perfect
    test statistic, the average_precision_score should be 1.
    r9   Nr   rV   r   rW   rW   rX   -test_average_precision_score_duplicate_values  s   r   )r2   r2   r9   r9   r   )r   r   r   )r   r   r   r   )r   r   r   c                 C   s   t | |dks	J d S )Nr   r   r   rW   rW   rX   (test_average_precision_score_tied_values  s   r   c                  C   sP   d} t jt| d tg dg dddd W d    d S 1 s!w   Y  d S )NzNote that pos_label \(set to 2\) is ignored when average != 'binary' \(got 'macro'\). You may use labels=\[pos_label\] to specify a single positive class.r   r   r9   r2   r2   r2   r   r   r   )r   warnsUserWarningr   r   rW   rW   rX   (test_precision_recall_f_unused_pos_label  s   "r   c                  C   D   t dd\} }}dd }|| | |dd | D dd |D  d S )NTr   c                 S   s   t | |}t|ddgddgg | \}}}}|| ||  }t|| ||  ||  ||  }|dkr9dn|| }	t| |}
t|
|	dd t|
ddd d S )	N   r         r   r2   decimal=
ףp=?)r   r,   flattenr>   sqrtr   r+   )rV   rU   cmtpfpfntnnumdentrue_mccmccrW   rW   rX   test  s   
&
z*test_confusion_matrix_binary.<locals>.testc                 S      g | ]}t |qS rW   r   .0rM   rW   rW   rX   
<listcomp>      z0test_confusion_matrix_binary.<locals>.<listcomp>rY   rV   rU   ru   r  rW   rW   rX   test_confusion_matrix_binary  s   
"r  c                  C   r   )NTr   c                 S   s4   t | |}t|ddgddggddgddggg d S )Nr   r   r   r   r   r,   )rV   rU   r   rW   rW   rX   r    s   
*z5test_multilabel_confusion_matrix_binary.<locals>.testc                 S   r  rW   r  r  rW   rW   rX   r
     r  z;test_multilabel_confusion_matrix_binary.<locals>.<listcomp>r  r  rW   rW   rX   'test_multilabel_confusion_matrix_binary  s   
"r  c                  C   sJ   t dd\} }}d	dd}|| | |dd | D dd |D dd d S )
NFr   c                 S   s   t | |}t|ddgddggddgddggd	d
gddggg |r%g dng d}t | ||d}t|ddgddggd	d
gddggddgddggg |rPg dng d}t | ||d}t|ddgddggd	d
gddggddgddggddgddggg d S )N/   r   r      &   r      r      r   r2      )021r   r2   r9   r   )r  r  r  3)r   r2   r9   r   re   r   r  )rV   rU   string_typer   rm   rW   rW   rX   r    s&   
..z9test_multilabel_confusion_matrix_multiclass.<locals>.testc                 S   r  rW   r  r  rW   rW   rX   r
  #  r  z?test_multilabel_confusion_matrix_multiclass.<locals>.<listcomp>T)r  )Fr  r  rW   rW   rX   +test_multilabel_confusion_matrix_multiclass  s   

&r  csc_containercsr_containerc                 C   s  t g dg dg dg}t g dg dg dg}||}||}| |}| |}t g d}dd	gddggdd	gddggd	d
gdd	ggg}	|||g}
|||g}|
D ]}|D ]}t||}t||	 qZqVt||dd}t|dd	gddggddgd	dggd	dgd
d	ggg t||d
d	gd}t|d	d
gdd	ggdd	gddggg t||d
d	gdd}t|d	d	gddggddgd	d	ggd	dgdd	ggg t|||dd}t|d
d	gd
d
ggddgd	dggd	dgdd	ggg d S )Nr   r   r9   r   r9   r9   r   r   r   r   )r2   r9   r   r9   r   r2   T
samplewiser   )rm   r#  )sample_weightr#  r   r   )r>   r   r   r,   )r  r  rV   rU   
y_true_csr
y_pred_csr
y_true_csc
y_pred_cscr$  real_cmtruespreds
y_true_tmp
y_pred_tmpr   rW   rW   rX   +test_multilabel_confusion_matrix_multilabel&  s2   .


4&48r.  c                  C   s  t g dg dg dg} t g dg dg dg}tjtdd t| |d	d
gd W d    n1 s7w   Y  tjtdd t| |g dg dg dgd W d    n1 s^w   Y  d}tjt|d t| |dgd W d    n1 sw   Y  d}tjt|d t| |dgd W d    n1 sw   Y  tjtdd tg dg ddd W d    n1 sw   Y  d}tjt|d tg dg dgg dg dg W d    d S 1 sw   Y  d S )Nr   r   r!  r   r   r   inconsistent numbers of samplesr   r9   r2   r$  zshould be a 1d arrayr9   r2   r   )r2   r   r   )r   r   r   z%All labels must be in \[0, n labels\)r   r   r   zSamplewise metricsr   r   Tr"  z'multiclass-multioutput is not supported)r2   r9   r   r9   r   r2   )r>   r   r   r   r   r   )rV   rU   r   rW   rW   rX   'test_multilabel_confusion_matrix_errorsP  s2   $"r3  z%normalize, cm_dtype, expected_results))truer   TUU?)predr   r5  )allr   geq?)Nr   r2   c                 C   sL   g dd }t ttg d }t||| d}t|| |jj|ks$J d S )Nr   r   	normalize)listr   r   r   r)   dtypekind)r9  cm_dtypeexpected_resultsy_testrU   r   rW   rW   rX   test_confusion_matrix_normalizen  s
   

r@  c                  C   s   g d} g d}t | |dd}| tdksJ t  tdt t | |dd}W d    n1 s6w   Y  | tdksFJ t  tdt t || dd W d    d S 1 scw   Y  d S )	N)r   r   r   r   r9   r9   r9   r9   )r   r   r   r   r   r   r   r   r4  r8         @r   r6  r   )r   sumr   r   r   r   r   RuntimeWarning)r?  rU   cm_truecm_predrW   rW   rX   ,test_confusion_matrix_normalize_single_class  s   

"rF  c                  C   sN   g d} g d}t jtdd t||  W d   dS 1 s w   Y  dS )z8Test `confusion_matrix` warns when only one label found.r   r   r   r   zA single label was found inr   N)r   r   r   r   )r?  rU   rW   rW   rX   "test_confusion_matrix_single_label  s
   "rH  zparams, warn_msg)r   r   r   r   r   r   rV   rU   z2samples of only one class were seen during testing)r9   r9   r9   r   r   r   z:positive_likelihood_ratio ill-defined and being set to nanz+no samples predicted for the positive classr   r   r   r9   r9   r9   z:negative_likelihood_ratio ill-defined and being set to nanz@no samples of the positive class were present in the testing setc                 C   B   t jt|d tdi |  W d    d S 1 sw   Y  d S Nr   rW   )r   r   r   r   )paramswarn_msgrW   rW   rX   test_likelihood_ratios_warnings  s   1"rO  zparams, err_msg)r   r9   r   r9   r   r9   r9   r   r   r2   zeclass_likelihood_ratios only supports binary classification problems, got targets of type: multiclassc                 C   rK  rL  )r   r   r   r   )rM  r   rW   rW   rX   test_likelihood_ratios_errors  s   "rQ  c                  C   s   t dgd dgd  } t dgd dgd  dgd  }t| |\}}t|d t|d	 t| | \}}t|t jd  t|t dd
d t dgd dgd  }t| ||d\}}t|d t|d d S )Nr9   r   r   r   r2   
   r   g?g_B{	%?g-q=)rtolr      r{   r   r0  gUUUUUU@gqq?)r>   r   r   r)   r,   r|   r   )rV   rU   posnegr$  rW   rW   rX   test_likelihood_ratios  s   $


rW  c                  C   s  t dgd dgd  } t dgd dgd  dgd  dgd  }t| |}t|dd	d
 |t|| ks9J t | dgd } t |dgd }t| |ddgd|ksXJ tt| | d t dgd dgd  dgd  } t dgd dgd  dgd  }tt| |ddd
 t dgd dgd  dgd  } t dgd dgd  dgd  }tt| |ddd
 tt| |ddddd
 tt| |ddddd
 d S )Nr   (   r9   <   rd   rR  2   gʡE?r   r   r2   r   r   r   .   ,   4          g??g+?r5   weightsg_vO?	quadraticg#?)r>   r   r   r*   append)r   r   kapparW   rW   rX   test_cohen_kappa  s&   .
$$$$
re  zy_true, y_predry   r   c                 C   sl   t   t d | |||d}W d   n1 sw   Y  t|r.t|s,J dS ||ks4J dS )zmCheck the behaviour of `zero_division` when setting to 0, 1 or np.nan.
    No warnings should be raised.
    r   r   N)r   r   r   r>   isnan)ry   rV   rU   r   resultrW   rW   rX   !test_zero_division_nan_no_warning  s   


ri  c                 C   sH   t t | ||dd}W d   n1 sw   Y  |dks"J dS )ztCheck the behaviour of `zero_division` when setting to "warn".
    A `UndefinedMetricWarning` should be raised.
    r   rf  Nr{   )r   r   r   )ry   rV   rU   rh  rW   rW   rX   test_zero_division_nan_warning7  s   rj  c                  C   sN   t jd} | jdddd}| jdddd}tt||t ||d d d S )Nr   r2   rd   sizer   r9   rR  )r>   rB   rC   randintr*   r   corrcoef)rQ   rV   rU   rW   rW   rX   -test_matthews_corrcoef_against_numpy_corrcoefJ  s   rp  c            	         s   t jd} | jdddd}| jdddd}| d}t|||d t t fddtD }t fddtD }t  fd	dtD }|t 	||  }t
|||d}t||d
 d S )Nr   r2   rd   rk  r0  c              	      sX   g | ](}t D ]!}t D ]} ||f  ||f   ||f  ||f   qqqS rW   range)r	  kmlCNrW   rX   r
  `  s    .
z9test_matthews_corrcoef_against_jurman.<locals>.<listcomp>c                    s@   g | ] d d  f   t  fddtD  qS )Nc                    s.   g | ]}t D ]}|kr ||f qqS rW   rq  r	  r   grw  rx  rs  rW   rX   r
  j     . Dtest_matthews_corrcoef_against_jurman.<locals>.<listcomp>.<listcomp>rB  r>   rr  r	  rv  rs  rX   r
  h      c                    s@   g | ]  d d f   t  fddtD  qS )Nc                    s.   g | ]}t D ]}|kr ||f qqS rW   rq  ry  r{  rW   rX   r
  q  r|  r}  r~  r  rv  r  rX   r
  o  r  rR  )r>   rB   rC   rn  randr   rp   rB  rr  r   r   r*   )	rQ   rV   rU   r$  cov_ytypcov_ytytcov_ypyp
mcc_jurmanmcc_oursrW   rv  rX   %test_matthews_corrcoef_against_jurmanT  s0   
r  c                  C   s,  t jd} dd | jddddD }tt||d dd |D }tt||d	 t|d
dgd}t |d
d}tt||d	 ttg dg dd tt|d
gt| d g d}g d}tt||d dgd dgd  }t	
t tt|||dd W d    d S 1 sw   Y  d S )Nr   c                 S   s   g | ]
}|d kr
dndqS )r   r   r   rW   r	  r   rW   rW   rX   r
  }      z*test_matthews_corrcoef.<locals>.<listcomp>r2   rd   rk  r   c                 S   s   g | ]
}|d kr
dnd qS )r   r   rW   r  rW   rW   rX   r
    r  r   r   r   r   rG  r{   )r9   r   r9   r9   r   r9   r9   r9   r   r9   r9   r9   r9   r9   r9   r9   r   r9   r9   r9   )r9   r9   r9   r   r   r9   r9   r9   r9   r   r9   r9   r9   r   r9   r9   r9   r   r9   r9   r9   rR  r0  )r>   rB   rC   rn  r*   r   r&   whererp   r   r   AssertionError)rQ   rV   
y_true_invy_true_inv2y_1y_2maskrW   rW   rX   test_matthews_corrcoef{  s"   "r  c            	         sL  t jd} td d} fdd| jd|ddD }tt||d g d	}g d
}tt||d g d	}g d}tt||dt d  g d}g d}tt||d g d}g d}tt||d g d}g d}tt||d g d}g d}g d}tt|||dd g d}g d}g d}tt|||dd d S )Nr   r   r   c                    s   g | ]}t  | qS rW   )chrr  ord_arW   rX   r
    s    z5test_matthews_corrcoef_multiclass.<locals>.<listcomp>rd   rk  r   )r   r   r9   r9   r2   r2   )r2   r2   r   r   r9   r9   g      )r9   r9   r   r   r   r   ii  r   )r   r   r   r{   	r   r9   r2   r   r9   r2   r   r9   r2   )	r9   r9   r9   r2   r2   r2   r   r   r   )r   r   r9   r9   r2   rP  r9   r9   r9   r9   r   r0  r   r   r9   r9   r   r   )r>   rB   rC   ordrn  r*   r   r   )	rQ   	n_classesrV   
y_pred_bad
y_pred_minrU   r  r  r$  rW   r  rX   !test_matthews_corrcoef_multiclass  s@   r  n_pointsd   i'  c                    s   t jd dd } fdd}t ddg| }tt||d t g d| }tt||d || \}}tt||d tt||||| d S )	Ni3c                 S   sx   t | |}|d }|d }|d }t| }|| | }|| | }|| ||  }	|| d|  d|  }
|	t|
 S )Nr9   r9   )r9   r   rm  r9   )r   rp   r>   r   )rV   rU   conf_matrixtrue_pos	false_pos	false_negr  pos_rateactivitymcc_numeratormcc_denominatorrW   rW   rX   mcc_safe  s   
z1test_matthews_corrcoef_overflow.<locals>.mcc_safec                    s8     | }|d  | d   }|dk}|dk}||fS )Nr   r   )random_sample)r  x_truex_predrV   rU   rQ   rW   rX   	random_ys  s
   
z2test_matthews_corrcoef_overflow.<locals>.random_ysr{   r   )r{   r   rA  )r>   rB   rC   repeatr*   r   )r  r  r  arrrV   rU   rW   r  rX   test_matthews_corrcoef_overflow  s   r  c            
      C   s  t dd\} }}t| |d d\}}}}t|g dd t|g dd t|g dd t|g d t| |d	d
d}t|dd t| |d
d}t|dd t| |d
d}	t|	dd t| |dd}t|dd t| |dd}t|dd t| |dd}	t|	dd t| |dd}t|dd t| |dd}t|dd t| |dd}	t|	dd tt	 t| |dd W d    n1 sw   Y  tt	 t| |dd W d    n1 sw   Y  tt	 t| |dd W d    n1 sw   Y  tt	 t
| |ddd W d    n	1 sw   Y  t| |g dd d\}}}}t|g dd t|g dd t|g dd t|g d d S )NFr   r   )(\?Q?gzG?r2   )HzG?g
ףp=
?rb   )Q?333333?r   )r[   ra   rd   r9   r   r   g(\?r   r   gRQ?r   gGz?r   r   r   r   r  r   )r  g=
ףp=?r  )r  rb   r   )r  r   r  )r[   rd   ra   )rY   r   r+   r,   r   r    r   r   r   r   r   )
rV   rU   ru   rP   r   r   r   r   r   r   rW   rW   rX   )test_precision_recall_f1_score_multiclass  sV   r  r   )r   r   r   r   Nc                 C   sz   t g dg}t g dg}t||g dg | d\}}}}t|d t|d t|d | d u r;t|g d d S d S )Nr  r   r   r9   r9   )r   r   r9   r2   )rm   warn_forr   r   r   r9   r9   r   )r>   r   r   r,   )r   rV   rU   rP   r   r   r   rW   rW   rX   ;test_precision_refcall_f1_score_multilabel_unordered_labels2  s   


r  c            
      C   s   t g d} t g d}t| |d d\}}}}t| |dd\}}}}|t |ks-J |t |ks6J |t |ks?J t| |dd\}}}}t | }	|t j||	dksZJ |t j||	dkseJ |t j||	dkspJ d S )N)r   r9   r   r   r9   r9   r   r9   r   r   r9   r   r9   r   r9   )r9   r9   r   r9   r   r9   r9   r9   r9   r   r9   r   r9   r   r9   r   r   r   r`  )r>   r   r   r   bincountr   )
rV   rU   r   r   r   ru   rP   r   r   r_   rW   rW   rX   .test_precision_recall_f1_score_binary_averagedA  s   
r  c               
   C   s   t jdd} z:t g d}t g d}tt||dddd tt||dddd tt||dddd W t jd	i |  d S t jd	i |  w )
Nraise)r7  )r   r9   r2   r   r9   r2   )r2   r   r9   r9   r2   r   r   r   r{   r2   rW   )r>   seterrr   r*   r   r    r   )old_error_settingsrV   rU   rW   rW   rX   test_zero_precision_recallR  s   &r  c                  C   s   t dd\} }}t| |ddgd}t|ddgddgg t| |d	dgd}t|d
d	gddgg t| d }t| |d	|gd}t|d
dgddgg d S )NFr   r   r9   r   r  r   r   r2   r  r[   )rY   r   r,   r>   max)rV   rU   ru   r   extra_labelrW   rW   rX   .test_confusion_matrix_multiclass_subset_labelsc  s   r  zlabels, err_msgz,'labels' should contains at least one label.r   r   z.At least one label specified must be in y_truez
empty listzunknown labels)idsc                 C   sR   t dd\}}}tjt|d t||| d W d    d S 1 s"w   Y  d S )NFr   r   r   )rY   r   r   r   r   )rm   r   rV   rU   ru   rW   rW   rX   test_confusion_matrix_errorv  s   	"r  rm   )NonerK   
multiclassc                 C   s>   | rt | nd}tj||ftd}tg g | d}t|| d S )Nr   r;  r   )rp   r>   r   rA   r   r,   )rm   expected_n_classesexpectedr   rW   rW   rX   *test_confusion_matrix_on_zero_length_input  s   r  c                  C   s8  g d} t t| }t| | }|jt jksJ t jt jt jfD ]}t| | |j	|ddd}|jt jks6J q t j
t jd tfD ]}t| | |j	|ddd}|jt jksUJ q?t jt| dt jd}t| | |d}|d dkspJ |d d	ksxJ t jt| d
t jd}t| | |d}|d d
ksJ |d dksJ d S )Nr   F)copyr0  l    r  r   r   r  l    l    )r>   onesrp   r   r;  int64bool_int32uint64astypefloat32float64objectfulluint32)rM   weightr   r;  rW   rW   rX   test_confusion_matrix_dtype  s$   
r  r;  )Int64Float64booleanc                 C   sZ   t d}tg d}|j|| d}|jg ddd}t||}t||}t|| dS )zkChecks that confusion_matrix works with pandas nullable dtypes.

    Non-regression test for gh-25635.
    pandas)	r9   r   r   r9   r   r9   r9   r   r9   r  )	r   r   r9   r9   r   r9   r9   r9   r9   r  N)r   importorskipr>   r   Seriesr   r,   )r;  pd	y_ndarrayrV   y_predictedoutputexpected_outputrW   rW   rX   %test_confusion_matrix_pandas_nullable  s   


r  c                  C   sL   t  } t| dd\}}}d}t||tt| j| jd}||ks$J d S )NFrZ   a|                precision    recall  f1-score   support

      setosa       0.83      0.79      0.81        24
  versicolor       0.33      0.10      0.15        31
   virginica       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
rm   rn   r	   r:   rY   r   r>   r?   rp   rn   rt   rV   rU   ru   rv   rw   rW   rW   rX   %test_classification_report_multiclass  s   r  c                  C   s0   g dg d} }d}t | |}||ksJ d S )N)	r   r   r   r9   r9   r9   r2   r2   r2   r  a|                precision    recall  f1-score   support

           0       0.33      0.33      0.33         3
           1       0.33      0.33      0.33         3
           2       0.33      0.33      0.33         3

    accuracy                           0.33         9
   macro avg       0.33      0.33      0.33         9
weighted avg       0.33      0.33      0.33         9
r   )rV   rU   rv   rw   rW   rW   rX   .test_classification_report_multiclass_balanced  s   
r  c                  C   s8   t  } t| dd\}}}d}t||}||ksJ d S )NFrZ   a|                precision    recall  f1-score   support

           0       0.83      0.79      0.81        24
           1       0.33      0.10      0.15        31
           2       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
)r	   r:   rY   r   r  rW   rW   rX   :test_classification_report_multiclass_with_label_detection  s
   
r  c                  C   sN   t  } t| dd\}}}d}t||tt| j| jdd}||ks%J d S )NFrZ   a|                precision    recall  f1-score   support

      setosa    0.82609   0.79167   0.80851        24
  versicolor    0.33333   0.09677   0.15000        31
   virginica    0.41860   0.90000   0.57143        20

    accuracy                        0.53333        75
   macro avg    0.52601   0.59615   0.50998        75
weighted avg    0.51375   0.53333   0.47310        75
r   )rm   rn   digitsr  r  rW   rW   rX   1test_classification_report_multiclass_with_digits  s   r  c                  C   st   t dd\} }}tg d|  } tg d| }d}t| |}||ks'J d}t| |g dd}||ks8J d S )NFr   )bluegreenreda|                precision    recall  f1-score   support

        blue       0.83      0.79      0.81        24
       green       0.33      0.10      0.15        31
         red       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
a|                precision    recall  f1-score   support

           a       0.83      0.79      0.81        24
           b       0.33      0.10      0.15        31
           c       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
r   rn   rY   r>   r   r   )rV   rU   ru   rv   rw   rW   rW   rX   7test_classification_report_multiclass_with_string_label  s   
r  c                  C   L   t dd\} }}tg d}||  } || }d}t| |}||ks$J d S )NFr   )u   blue¢u   green¢u   red¢u                precision    recall  f1-score   support

       blue¢       0.83      0.79      0.81        24
      green¢       0.33      0.10      0.15        31
        red¢       0.42      0.90      0.57        20

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
r  rV   rU   ru   rm   rv   rw   rW   rW   rX   8test_classification_report_multiclass_with_unicode_label9  s   
r  c                  C   r  )NFr   )r  greengreengreengreengreenr  a                             precision    recall  f1-score   support

                     blue       0.83      0.79      0.81        24
greengreengreengreengreen       0.33      0.10      0.15        31
                      red       0.42      0.90      0.57        20

                 accuracy                           0.53        75
                macro avg       0.53      0.60      0.51        75
             weighted avg       0.51      0.53      0.47        75
r  r  rW   rW   rX   <test_classification_report_multiclass_with_long_string_labelO  s   
r  c                  C   sd   g d} g d}g d}d}t jt|d t| |ddg|d W d    d S 1 s+w   Y  d S )	Nr   r   r2   r   r   r   r2   r2   r   r   zclass 0zclass 1zclass 2z6labels size, 2, does not match size of target_names, 3r   r   r2   r  )r   r   r   r   )rV   rU   rn   r   rW   rW   rX   =test_classification_report_labels_target_names_unequal_lengthf  s   "r   c                  C   s^   g d} g d}g d}d}t jt|d t| ||d W d    d S 1 s(w   Y  d S )Nr  r  r  zaNumber of classes, 2, does not match size of target_names, 3. Try specifying the labels parameterr   r  )r   r   r   r   )rV   rU   rn   r   rW   rW   rX   @test_classification_report_no_labels_target_names_unequal_lengthp  s   "r  c                  C   sN   d} d}t d|| dd\}}t d|| dd\}}d}t||}||ks%J d S )Nr   rZ  r9   r   )rO   rN   r  r8   a                precision    recall  f1-score   support

           0       0.50      0.67      0.57        24
           1       0.51      0.74      0.61        27
           2       0.29      0.08      0.12        26
           3       0.52      0.56      0.54        27

   micro avg       0.50      0.51      0.50       104
   macro avg       0.45      0.51      0.46       104
weighted avg       0.45      0.51      0.46       104
 samples avg       0.46      0.42      0.40       104
)r   r   )r  rN   ru   rV   rU   rv   rw   rW   rW   rX   %test_multilabel_classification_report~  s   


r  c                  C   r   )Nr   r   r   r   r   r9   )r>   r   r!   r   r   r=   r   rW   rW   rX   $test_multilabel_zero_one_loss_subset  r   r  c                  C   sH  t g dg dg} t g dg dg}t ddg}t| |dks&J t| | dks/J t||dks8J t|d| dksCJ t| d|  dksNJ t| t | jdks[J t|t | jd	kshJ t| ||d
dkssJ t| d| |d
dksJ t| t | |d
dksJ t| d |d t| d |d ksJ d S )Nr   r   r   r9   r   UUUUUU?r   r   r   r0  gUUUUUU?gUUUUUU?)r>   r   r   r   r=   
zeros_like
sp_hamming)r   r   wrW   rW   rX   test_multilabel_hamming_loss  s   ,r  c                  C   s  t g d} t g d}d}tjt|d t| |ddd W d    n1 s*w   Y  t g dg dg} t g d	g d
g}d}tjt|d t| |ddd W d    n1 saw   Y  t g d} t g d}d}tjt|d t| |dd W d    n1 sw   Y  d}tjt|d t| |dd W d    n1 sw   Y  d}tjt|d t| |ddd W d    d S 1 sw   Y  d S )N)r   r9   r   r9   r9   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]r   rK   r2   r   r   r   r   r   r   Target is multilabel-indicator but average='binary'. Please choose another average setting, one of \[None, 'micro', 'macro', 'weighted', 'samples'\].r   )r   r9   r9   r   r2   r  Target is multiclass but average='binary'. Please choose another average setting, one of \[None, 'micro', 'macro', 'weighted'\].r   zJSamplewise metrics are not available outside of multilabel classification.r   zNote that pos_label \(set to 3\) is ignored when average != 'binary' \(got 'micro'\). You may use labels=\[pos_label\] to specify a single positive class.r   r   )r>   r   r   r   r   r   r   r   )rV   rU   r   msg1msg2msg3r   rW   rW   rX   test_jaccard_score_validation  s:   "r  c                 C   sb  t g dg dg}t g dg dg}t||dddks!J t||dddks,J t||dddks7J t|t |dddksEJ t|t |dddksSJ t|t |jdddksbJ t|t |jdddksqJ t g dg d	g}t g d
g dg}tt||ddd tt||ddd tt||ddd tt||dddgdd tt||dddgdd tt||d dt g d t g dg dg}t g d
g dg}tt||ddd tt||ddd d}tj	t
|d t||dgdd W d    n	1 sw   Y  d}tj	t
|d t||dgdd W d    n	1 s9w   Y  d}tjt|d  tt ddggt ddggdddks`J W d    n	1 skw   Y  d}tjt|d& tt ddgddggt ddgddggdddksJ W d    n	1 sw   Y  t| rJ d S )Nr   r   r   r   r   r   r9   r   r   r   r   r   r   r   g?r2   r   r   )r   r   r   r   r   g      ?z	Got 4 > 2r   r   r   z
Got -1 < 0r   zXJaccard is ill-defined and being set to 0.0 in labels with no true or predicted samples.zXJaccard is ill-defined and being set to 0.0 in samples with no true or predicted labels.)r>   r   r   r   r   r=   r*   r,   r   r   r   r   r   r:  )recwarnr   r   rV   rU   r  r  r   rW   rW   rX   test_multilabel_jaccard_score  sl   $
r  c                 C   sX  g d}g d}g d}t  }|| ||}||}tt||}tt||}ddgddgddgdgdgdgd g}	ddgdd	gd	dgdgdgd	gd g}
d
D ]}t|	|
D ]\}}t|||d|||d qWqPtddgddgddgg}tddgddgddgg}t	  t||dddksJ W d    n1 sw   Y  t
| rJ d S )N)antr  catr  r  r  birdr  )r  r  r  r  r  r  r  r  )r  r  r  r  r  r  r   r9   r2   )r   r   r   Nr   r   r   )r%   rG   	transformr   r   zipr*   r>   r   r-   r:  )r  rV   rU   rm   lbr   r   multi_jaccard_scorebin_jaccard_scoremulti_labels_listbin_labels_listr   m_labelb_labelrW   rW   rX   test_multiclass_jaccard_score4  s>   


$	

r  c                 C   s   t dgdgdddksJ d}tjt|d t ddgddgdddks&J W d    n1 s0w   Y  t dgdgdddd	ksCJ tg d
}tg d}tt ||ddd tt ||dddd t| rlJ d S )Nr9   r   rK   r   r{   zOJaccard is ill-defined and being set to 0.0 due to no true or predicted samplesr   r   r   )r9   r   r9   r9   r   )r9   r   r9   r9   r9   r   r	  r   )r   r   r   r   r>   r   r*   r:  )r  r   rV   rU   rW   rW   rX   !test_average_binary_jaccard_scoreY  s    r  c                  C   s   t g dg dg} t g dg dg}d}tjt|d t| |ddd}|tdks1J W d    d S 1 s<w   Y  d S )	Nr   r   r   r   zJaccard is ill-defined and being set to 0.0 in samples with no true or predicted labels. Use `zero_division` parameter to control this behavior.r   r   r   r   r   r{   )r>   r   r   r   r   r   r   )rV   rU   r   scorerW   rW   rX   (test_jaccard_score_zero_division_warningp  s   "r#  zzero_division, expected_scorer  )r9   r   c                 C   s   t g dg dg}t g dg dg}t  tdt t||d| d}W d    n1 s3w   Y  |t|ksAJ d S )Nr   r   r   r   r!  )	r>   r   r   r   r   r   r   r   r   )r   expected_scorerV   rU   r"  rW   rW   rX   *test_jaccard_score_zero_division_set_value  s   
r%  c                  C   s4  t g dg dg dg} t g dg dg dg}t| |d d\}}}}t|g dd t|g dd t|g d	d t|g d
d t| |dd d}|}t|g dd t| |dd\}}}}t|d t|d t|d |d u syJ tt| |dddt | t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddd| | d| |   t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddt j||d t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddd d S )Nr9   r   r   r   r   r9   r   r   r  )r9   r   r9   r   r   )r{   r   r   r{   r2   )r{   r   r   r{   )r{   r   r9   r{   )r9   r9   r9   r9   r   r   )r   r  r9   r   r   g      ?r   g?r   r   r   r   r`  r   r>   r   r   r+   r   r*   r   r   rV   rU   rP   r   r   r   f2r_   rW   rW   rX   +test_precision_recall_f1_score_multilabel_1  sT   











r,  c                  C   s6  t g dg dg dg} t g dg dg dg}t| |d d\}}}}t|g dd t|g d	d t|g d
d t|g dd t| |dd d}|}t|g dd t| |dd\}}}}t|d t|d t|d |d u syJ tt| |dddd| | d| |   t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddt | t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddt j||d t| |dd\}}}}t|d t|d t|d |d u sJ tt| |ddddd d S )Nr&  r'  r  r   r   r   r9   r  r   )r{   r   r{   r{   r2   )r{   r   r{   r{   )r{   gQ?r{   r{   r9   r2   r9   r   r(  )r   皙?r   r   r         ?r   r   r   g      ?r  r   r   r`   r`  r   g&S?r)  r*  rW   rW   rX   +test_precision_recall_f1_score_multilabel_2  sX   











r1  z%zero_division, zero_division_expected)r   r   r  c                 C   s  t g dg dg dg}t g dg dg dg}t||d | d\}}}}t||dddgd	 t|dd
d|gd	 d}t||dd|gd	 t|g dd	 t||d	d | d}	|}
t|	|dd|gd	 t||d| d\}}}}t |rxdn|}dt |  }t|d	| |  t|d| |  d}t|| |d u sJ tt||d	d| dt|	d d t||d| d\}}}}t|d t|d
 t|d |d u sJ tt||d	d| dd| | d| |   t||d| d\}}}}t||dkrdnd t|d
 d}t|d|  |d u sJ tt||d	d| dt|	|
d t||dd\}}}}t|d t|d t|d |d u sEJ d }tt||d	d| d|d	 d S )!Nr'  r&  r  rG  r-  r!  r   r{   r2   r   r   r   r9   r.  r   r   r   r/  r   r         ?g?r`  r   rc   r   r   r   r   g@r   r   r`   gZd;O?)r>   r   r   r+   r   rg  r*   r.   )r   zero_division_expectedrV   rU   rP   r   r   r   
expected_fr+  r_   value_to_sumvalues_to_averageexpected_resultrW   rW   rX   7test_precision_recall_f1_score_with_an_empty_prediction  s   












r9  r   )r   r   r   r   c                 C   s   t d}t |}t # td t|||| |d\}}}}t||| ||d}	W d    n1 s4w   Y  |d u s?J t |rV||||	fD ]	}
t |
sSJ qJd S t	|}t
|| t
|| t
|| t
|	t	| d S )Nrd   r   r   r   r   r   r2  )r>   r   r  r   r   r   r   r   rg  rs   r*   )r   r   r   rV   rU   rP   r   r   r   fbetary   rW   rW   rX   "test_precision_recall_f1_no_labelss  s:   







r=  c           	      C   s   t d}t |}t}tt |||| dd\}}}}W d    n1 s(w   Y  t|d t|d t|d |d u sBJ tt t||| dd}W d    n1 sZw   Y  t|d d S )Nr:  r   r  r   )	r>   r   r  r   r   r   r   r*   r   )	r   rV   rU   funcrP   r   r   r   r<  rW   rW   rX   1test_precision_recall_f1_no_labels_check_warnings  s   




r?  c                 C   s   t d}t |}t # td t||d d| d\}}}}t||dd | d}W d    n1 s4w   Y  t | } t	|| | | gd t	|| | | gd t	|| | | gd t	|g dd t	|| | | gd d S )Nr:  r   r   r;  r2  r2   r   )
r>   r   r  r   r   r   r   r   r  r+   )r   rV   rU   rP   r   r   r   r<  rW   rW   rX   /test_precision_recall_f1_no_labels_average_none  s*   






r@  c                  C   s   t d} t | }tt t| |d dd\}}}}W d    n1 s&w   Y  t|g dd t|g dd t|g dd t|g dd tt t| |dd d}W d    n1 scw   Y  t|g dd d S )Nr:  r9   r  r   r2   r(  )	r>   r   r  r   r   r   r   r+   r   )rV   rU   rP   r   r   r   r<  rW   rW   rX   4test_precision_recall_f1_no_labels_average_none_warn  s   


rA  c               	   C   sr  t t} }dD ]J}d}tj||d | g dg d|d W d    n1 s(w   Y  d}tj||d | g dg d|d W d    n1 sLw   Y  qd}tj||d! | td	d
gd	d
ggtd	d
gd
d
ggdd W d    n1 sw   Y  d}tj||d! | td	d
gd
d
ggtd	d
gd	d
ggdd W d    n1 sw   Y  d}tj||d! | td	d	gd	d	ggtd
d
gd
d
ggdd W d    n1 sw   Y  d}tj||d! | td
d
gd
d
ggtd	d	gd	d	ggdd W d    n	1 sw   Y  d}tj||d | d	d	gddgdd W d    n	1 s;w   Y  d}tj||d | ddgd	d	gdd W d    n	1 s`w   Y  tjddC}td t d
d
gd
d
gdd d}t	|
 j|ksJ d}t	|
 j|ksJ d}t	|
 j|ksJ W d    d S 1 sw   Y  d S )NNr   r   zPrecision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.r   r   r9   r9   r2   r   zRecall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.zPrecision is ill-defined and being set to 0.0 in samples with no predicted labels. Use `zero_division` parameter to control this behavior.r9   r   r   zRecall is ill-defined and being set to 0.0 in samples with no true labels. Use `zero_division` parameter to control this behavior.Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.r   zRecall is ill-defined and being set to 0.0 due to no true samples. Use `zero_division` parameter to control this behavior.r   rK   Tr   alwaysF-score is ill-defined and being set to 0.0 due to no true nor predicted samples. Use `zero_division` parameter to control this behavior.)r   r   r   r   r>   r   r   r   r   r   popr   )r   r  r   r   r   rW   rW   rX   test_prf_warnings  sp   
4444
$rI  c                 C   s  t   t d dD ]}tg dg d|| d tg dg d|| d qttddgddggtddgddggd| d ttddgddggtddgddggd| d ttddgddggtddgddggd	| d ttddgddggtddgddggd	| d tddgd
d
gd| d td
d
gddgd| d W d    n1 sw   Y  t jdd"}t d tddgddgd| d t|dksJ W d    d S 1 sw   Y  d S )Nr   rB  r   rC  r!  r9   r   r   r   r   rK   Tr   rF  )r   r   r   r   r>   r   rp   )r   r   r   rW   rW   rX   )test_prf_no_warnings_if_zero_division_setW  s^   

4
"rJ  c                 C   sF  t  ' t d ttddgddggtddgddggd| d W d    n1 s.w   Y  t jdd`}t d ttddgddggtddgddggd| d | d	krit| jd
kshJ nt	|dksqJ tddgddg | d	krt| jd
ksJ W d    d S W d    d S 1 sw   Y  d S )Nr   r9   r   r   r!  Tr   rF  r   rE  )
r   r   r   r    r>   r   r   rH  r   rp   r   r   rW   rW   rX   test_recall_warnings  s6   



"rL  c                 C   s6  t jddW}t d ttddgddggtddgddggd| d | dkr6t| jd	ks5J nt	|dks>J tddgddg | dkrVt| jd	ksVJ W d    n1 s`w   Y  t  ( t d
 ttddgddggtddgddggd| d W d    d S 1 sw   Y  d S )NTr   rF  r9   r   r   r!  r   rD  r   )
r   r   r   r   r>   r   r   rH  r   rp   rK  rW   rW   rX   test_precision_warnings  s2   


"rM  c              	   C   s>  t jdd}t d tttddfD ]x}|tddgddggtddgddggd| d	 t|dks8J |tddgddggtddgddggd| d	 t|dksZJ |tddgddggtddgddggd| d	 | d
krt	|
 jdksJ qt|dksJ qW d    d S 1 sw   Y  d S )NTr   rF  r2   r   r9   r   r   r!  r   rG  )r   r   r   r   r   r   r>   r   rp   r   rH  r   )r   r   r"  rW   rW   rX   test_fscore_warnings  s8   
"rN  c            
   
   C   s   g d} g d}d}t g dg dg dg}t g dg dg dg}d}| ||f|||ffD ].\}}}tttttd	d
fD ]}	tjt	|d |	|| W d    n1 sZw   Y  qAq2d S )N)r9   r2   r   r   )r9   r2   r   r9   r  r   r   r   r   r
  r2   r   r   )
r>   r   r   r    r   r   r   r   r   r   )
	y_true_mc	y_pred_mcmsg_mc
y_true_ind
y_pred_indmsg_indrV   rU   r   ry   rW   rW   rX   'test_prf_average_binary_data_non_binary	  s,   
rU  c                  C   s  d} d}d}d}d}d}| t g dg dg d	gf| t d
dgdd
gddggf|g df|g df|g df|t dgdgdggf|t d
gdgdggf|t dgdgdggf|t d
dgddgddggf|t ddgddgddggfg
}i | | f| ||f|||f||| fd || fd ||f|||fd ||fd ||fd | |fd ||fd ||fd ||fd ||fd | |fd ||fd ||fd ||fd | |fd ||fd ||fd i}t|ddD ]\\}}	\}
}z|||
f }W n ty   ||
|f }Y nw |d u rtt t|	| W d    n	1 s(w   Y  ||
krVd||
}tjt|d t|	| W d    n	1 sPw   Y  q|||| fvrd|}tjt|d t|	| W d    n	1 s{w   Y  qt|	|\}}}||ksJ |	dr|jdksJ |jdksJ nt
|t |	 t
|t | tt t|	d d | W d    n	1 sw   Y  qddg}	d d!g}d"}tjt|d t|	| W d    d S 1 sw   Y  d S )#Nzmultilabel-indicatorr  rK   
continuouszmulticlass-multioutputzcontinuous-multioutputr   r   r   r   r9   )r2   r   r9   )r{   r3  r   r2   r   r{   r3  r   r   rA  g?g      @)r  z@Classification metrics can't handle a mix of {0} and {1} targetsr   z{0} is not supported
multilabelcsrr   )r9   r2   )r   r2   r   )r2   )r   r2   zYou appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead - the MultiLabelBinarizer transformer can convert to this format.)r>   r   r   KeyErrorr   r   r   r"   format
startswithr,   squeeze)INDMCBINCNTMMCMCNEXAMPLESEXPECTEDtype1r   type2r   r  r   merged_typey1outy2outr   rW   rW   rX   test__check_targets+	  s   


	



$rj  c                  C   s*   ddg} ddg}t | |d dksJ d S )Nr   r9   r   r  )r"   rI  rW   rW   rX   Atest__check_targets_multiclass_with_both_y_true_and_y_pred_binary	  s   rk  c                  C   s`   t g d} t g d}t| |dksJ t g d} t g d}t| |dks.J d S )N)r   r9   r9   r   )g      !r   r3  g333333ӿr   )r   r2   r2   r   )r>   r   r   rV   pred_decisionrW   rW   rX   test_hinge_loss_binary	  s   rn  c               
   C   s  t g dg dg dg dg dg dg} t g d}t d| d d  | d d  d| d d  | d d	  d| d	 d	  | d	 d
  d| d
 d  | d
 d	  d| d d
  | d d	  d| d d	  | d d
  g}t j|dd |d t |}t|| |ksJ d S )N
ףp=
?(\ſ(\gGz)HzGgGz׿Q޿rr  333333rr  RQؿrq  )rs  rw  rt  rr  gzGgHzGgHzGѿgQ?)r   r9   r2   r9   r   r2   r9   r   r2   r   r   r   outr>   r   clipr   r   )rm  rV   dummy_lossesdummy_hinge_lossrW   rW   rX   test_hinge_loss_multiclass	  s,   


r  c                  C   sr   t g d} t g dg dg dg dg}d}tjt|d t| | W d    d S 1 s2w   Y  d S )N)r   r9   r2   r2   )gRQ?g rh?g(\gffffffru  rx  zDPlease include all labels in y_true or pass labels as third argumentr   )r>   r   r   r   r   r   )rV   rm  error_messagerW   rW   rX   :test_hinge_loss_multiclass_missing_labels_with_labels_none	  s   	"r  c               
   C   s   t g d} t g d}d}tjtt|d t| |d W d    n1 s+w   Y  t ddgddgddgddgddgddgddgg}g d	}d
}tjtt|d t| ||d W d    d S 1 smw   Y  d S )N)r2   r9   r   r9   r   r9   r9   )r   r9   r2   r9   r   r2   r9   zThe shape of pred_decision cannot be 1d arraywith a multiclass target. pred_decision shape must be (n_samples, n_classes), that is (7, 3). Got: (7,)r   rl  r   r9   r2   r   zThe shape of pred_decision is not consistent with the number of classes. With a multiclass target, pred_decision shape must be (n_samples, n_classes), that is (7, 3). Got: (7, 2))rV   rm  rm   )r>   r   r   r   r   reescaper   )rV   rm  r  rm   rW   rW   rX   <test_hinge_loss_multiclass_no_consistent_pred_decision_shape	  s   4"r  c               	   C   s  t g dg dg dg dg dg} t g d}t g d}t d| d d  | d d  d| d d  | d d  d| d d  | d d	  d| d	 d  | d	 d  d| d
 d  | d
 d	  g}t j|dd |d t |}t|| |d|ksJ d S )Nro  皙rw  rt  rr  ru  )r   r9   r2   r9   r2   )r   r9   r2   r   r9   r   r2   r   r   ry  r   r{  rm  rV   rm   r}  r~  rW   rW   rX   .test_hinge_loss_multiclass_with_missing_labels	  s*   		
r  c               	   C   s  t g dg dg dg dg dg} t g d}t g d}t d| d d  | d d  d| d d	  | d d  d| d	 d	  | d	 d  d| d
 d  | d
 d	  d| d d	  | d d  g}t j|dd |d t |}tt|| |d| d S )N)rp  rq  rr  )g333333ÿrr  rt  )rv  rr  rw  )r  g(\gzGڿ)r   r2   r2   r   r2   r   r9   r   r2   r   r   ry  r   )r>   r   r|  r   r*   r   r  rW   rW   rX   @test_hinge_loss_multiclass_missing_labels_only_two_unq_in_y_true 
  s.   		
r  c               
   C   s  g d} g dg dg dg dg dg dg}t d|d d  |d d  d|d d  |d d  d|d d  |d d	  d|d	 d  |d	 d  d|d
 d	  |d
 d  d|d d  |d d	  g}t j|dd |d t |}t| ||ksJ d S )N)r  r  r  r  whiter  ro  r  ru  rx  r9   r   r2   r   r   r   ry  r{  )rV   rm  r}  r~  rW   rW   rX   +test_hinge_loss_multiclass_invariance_lists 
  s(   

r  c            	   	   C   s  g d} t ddgddgddgddgddgd	d
gg}t| |}t tt | dk|d d df  }t|| g d} g dg dg dg}t| |dd}t|d | d9 } |d9 }t| |dd}t|d g d} ddgddgddgg}tt	 t| | W d    n1 sw   Y  g d} ddgddgddgddgg}t| |}t|d ddg} ddgddgg}t ddgddgg}d}tjt	|d  t| | W d    n1 sw   Y  ddgddgddgg}d!}tjt	|d  t| | W d    n	1 sw   Y  t t 
|d d df  }t| |ddgd"}t|| g d#} g d$g dg d%g}t| |g d&d"}t|t 
d  d S )'Nnor  r  yesr  r  r   r   rb   {Gz?Gz?r   r0  gMbP?g+?r  r9   r2  r   r   r   )r   r   r   )r   r   r   Tr8  g躕ʀ?r2   Fg.L`@r   r   r   r   hamspamr  r  CT?r   r   zly_true contains only one label \(2\). Please provide the true labels explicitly through the labels argument.r   zDFound input variables with inconsistent numbers of samples: \[3, 2\]r   r   )r   r   r   r   r   r   r1  )r>   r   r   r   r   logpmfr)   r   r   r   log)	rV   rU   loss	loss_truer   	error_strtrue_log_losscalculated_log_lossy_score2rW   rW   rX   test_log_loss<
  sX   &
*





r  c                 C   s@   t jddg| d}t jddg| d}t||}t |sJ dS )zCheck the behaviour internal eps that changes depending on the input dtype.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/24315
    r   r9   r  N)r>   r   r   isfinite)r;  rV   rU   r  rW   rW   rX   test_log_loss_eps}
  s   
r  c                 C   sr   t g d}t jddgddgddgddgg| d}tjtd	d
 t|| W d   dS 1 s2w   Y  dS )zGCheck that log_loss raises a warning when y_pred values don't sum to 1.r  r   r   r   r   r   r   r  z$The y_pred values do not sum to one.r   N)r>   r   r   r   r   r   )r;  rV   rU   rW   rW   rX   'test_log_loss_not_probabilities_warning
  s
   &"r  r   r   r   c                 C   s   t | |tdksJ dS )z6Check that log_loss returns 0 for perfect predictions.r   N)r   r   r   rI  rW   rW   rX   !test_log_loss_perfect_predictions
  s   r  c            
      C   s   t g d} t ddgddgddgddgg}ttfg}zddlm}m} |||f W n	 ty7   Y nw |D ]\}}|| ||}}t||}	t	|	d q:d S )	Nr  r   r   r   r   r   )	DataFramer  r  )
r>   r   r(   r  r  r  rc  ImportErrorr   r)   )
y_try_prtypesr  r  TrueInputTypePredInputTyperV   rU   r  rW   rW   rX   test_log_loss_pandas_input
  s   "

r  c                  C   s  t g d} t g d}t| | d t|  }tt| | d tt| || ttd|  || ttd|  d || tt	 t| |dd   W d    n1 sZw   Y  tt	 t| |d  W d    n1 svw   Y  tt	 t| |d  W d    n1 sw   Y  t g d} t g d}d	}tjt	|d
 t| | W d    n1 sw   Y  ttdgdgd ttdgdgd ttdgdgd ttdgdgddd ttdgdgddd d S )Nr   r9   r9   r   r9   r9   r   r   rb   r   r   gffffff?r2   r{   r   r9   )r   r9   r2   r   )r   r   r   r   zMOnly binary classification is supported. The type of the target is multiclassr   r   r   g{Gz?r   rp  foobarr   )
r>   r   r   normrp   r*   r   r   r   r   )rV   rU   
true_scorer  rW   rW   rX   test_brier_score_loss
  s8   r  c                  C   sJ   d} t jt| d tg dg d W d    d S 1 sw   Y  d S )Nz%y_pred contains classes not in y_truer   r   r   )r   r   r   r   r   rW   rW   rX   #test_balanced_accuracy_score_unseen
  s   "r  zy_true,y_pred)r   r   r   r   )r   r   r   r   )r   r   r   r   c                 C   s   t | |dt| d}t  t| |}W d    n1 sw   Y  |t|ks,J t| |dd}t| t| | d }||| d|  ksJJ d S )Nr   r   T)adjustedr   r9   )r    r>   uniquer-   r   r   r   	full_like)rV   rU   macro_recallbalancedr  chancerW   rW   rX   test_balanced_accuracy_score
  s   	r  r   r   ))FTrm  )r{   r   )zeroonec                 C   sn   t jd}d|d }}|j||dd}| tu r |j|d}n| }| |||d}t t |r5J dS )	zCheck that the metric works with different types of `pos_label`.

    We can expect `pos_label` to be a bool, an integer, a float, a string.
    No error should be raised for those types.
    *   rR  r   T)rl  replacerk  r   N)	r>   rB   rC   choicer   uniformr  anyrg  )ry   r   rQ   rN   r   rV   rU   rh  rW   rW   rX   *test_classification_metric_pos_label_types
  s   r  zy_true, y_pred, expected_scorer{   r   c                 C   s    t | |ddt|ksJ dS )zCheck the behaviour of `zero_division` for f1-score.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/26965
    r   rf  N)r   r   r   )rV   rU   r$  rW   rW   rX   2test_f1_for_small_binary_inputs_with_zero_division  s    r  scoringrf  r2   )r   r   c                 C   s<   t jdd\}}tddd||}t|||| ddd dS )	aZ  Check that we validate `np.nan` properly for classification metrics.

    With `n_jobs=2` in cross-validation, the `np.nan` used for the singleton will be
    different in the sub-process and we should not use the `is` operator but
    `math.isnan`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27563
    r   )r8   r   )	max_depthr8   r2   r  )r  n_jobserror_scoreN)r	   make_classificationr'   rG   r$   )r  rL   rM   
classifierrW   rW   rX   9test_classification_metric_division_by_zero_nan_validaton&  s   r  c                  C   s   t g d} t g d}d}tjt|d t| |d W d   n1 s(w   Y  d}tjt|d t| ||d W d   dS 1 sIw   Y  dS )	z)Check the message for future deprecation.r  r  z$y_prob was deprecated in version 1.5r   )y_probNz/`y_prob` and `y_proba` cannot be both specified)r  y_proba)r>   r   r   r   FutureWarningr   r   r   )rV   rU   rN  	error_msgrW   rW   rX   )test_brier_score_loss_deprecation_warning?  s"   "r  c               	   C   s  g d} g d}t ddgddgddgddgdd	gd
dgg}t ddgddgddgddgddgddgg}t| |d}t| |dd}t| |dd}d||  }|t|ksYJ t g d}|d d  |  |d d df< |dd   |  |d d df< t| ||d}t| ||dd}t| ||dd}d||  }|t|ksJ t ddgddgddgddgddgddgg}t| |}d|  k rdk sJ  J t||}	|	t|ksJ t ddgddgddgddgddgddgg}t| |}|dk sJ t||}	|	t|ksJ g d} t ddgddgddgddgddgddgg}t| |}|dks;J t||}	|	dksGJ g d} g d}t ddgddgddgddgg}t| |}|dkslJ t||}	|	dksxJ g d}t| ||d}
|
dksJ g d} g d}t g d g d g d!g d"g}t| |}d|  k rdk sJ  J t| ||d}d|  k rdk sJ  J t g d#g d$g d"g d%g}t| |}|dk sJ t| ||d}|dk sJ d S )&NrJ  r  r   rb   r   r   r   gffffff?g?r  r  rI  F)rV   rU   r9  r9   )r2   r9   r   r   r   r9   r   r   )rV   rU   r$  )rV   rU   r$  r9  r   r   r   r   r0  )r   r9   r9   r9   )r  r  r  r  )r2   r2   r2   r2   r0  )highr  lowneutral)gffffff?r   r   r   )r   r   r   r   )r   r   r   )r   r   r   r  r  )r>   r   r#   r   r   r   rB  )rV   y_true_stringrU   y_pred_nulld2_scorelog_likelihoodlog_likelihood_nulld2_score_truer$  d2_score_stringd2_score_with_sample_weightrW   rW   rX   test_d2_log_loss_scoreU  s   

$$








"


  
r  c                  C   s&  g d} ddgddgddgg}d}t jt|d t| | W d	   n1 s(w   Y  g d
} ddgddgddgg}g d}d}t jt|d t| ||d W d	   n1 s[w   Y  g d} g dg dg}d}t jt|d t| | W d	   n1 sw   Y  dg} ddgg}d}t jt|d t| | W d	   n1 sw   Y  g d} ddgddgddgg}d}t jt|d t| | W d	   n1 sw   Y  g d} dg}ddgddgddgg}d}t jt|d t| ||d W d	   d	S 1 sw   Y  d	S )zPTest that d2_log_loss_score raises the appropriate errors on
    invalid inputs.r   r   r   r   r   r   z#contain different number of classesr   Nr   z(number of classes in labels is differentr   )r   r   r   )r   r   r   r/  r9   zscore is not well-definedr   r   zy_true contains only one labelz.The labels array needs to contain at least two)r   r   r   r#   r   r   )rV   rU   errrm   rW   rW   rX   test_d2_log_loss_score_raises  sL   
$r  )NF)r  r   	functoolsr   	itertoolsr   r   r   numpyr>   r   scipyr   scipy.spatial.distancer   r  scipy.statsr   sklearnr	   r
   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!   sklearn.metrics._classificationr"   r#   sklearn.model_selectionr$   sklearn.preprocessingr%   r&   sklearn.treer'   sklearn.utils._mockingr(   sklearn.utils._testingr)   r*   r+   r,   r-   sklearn.utils.extmathr.   sklearn.utils.fixesr/   r0   sklearn.utils.validationr1   rY   rz   r~   markparametrizer|   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   r  r  r  r.  r3  r@  rF  rH  rO  rQ  rW  re  ri  rj  rp  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,  r1  r9  r=  r?  r@  rA  rI  rJ  rL  rM  rN  rU  rj  rk  rn  r  r  r  r  r  r  r  r  r  float16r  r  r  r  r  r  r  r  r  r  r  r  r  rW   rW   rW   rX   <module>   sV   \0A
 

"



-


#(
		




-

	
		
'#8
!:




#


(M%



B

@^%

#h
=
'
'
&b
 A
	"#			 