o
    iN                    @   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 dFd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 dZe	Wg d]d[d^fe	Wg dZe	Wg d_d[d`fe	Wg d]e	Wg dZd[dafgdbdc Zce
jKLdde	Wg dee	Wg dfd[dgfgdhdi Zddjdk Zee
jKLdld!dgdmdn Zfdodp Zge
jKLdqdrdsidtdsidudsdvdwdxdvdsdsdvdwdydvgdzd{ Zhe
jKLd|dwdwdvdwfe	jidsdve	jifdydsdvdyfe	jMe	jMdve	jMfe	jMe	jMfgd}d~ Zje
jKLd|dwdwdvdwfe	jidsdvdsfe	jiddvdfe	jMe	jMdve	jMfe	jMe	jMfgdd Zkdd Zldd Zme
jKLdd de	jMge
jKLdd gd gfge
jKLde"ee#dde,e-gdd Zne
jKLdd gd gfge
jKLde"ee#dde,e-gdd Zodd Zpdd Zqdd Zrdd Zse
jKLdddgdd Ztdd Zue
jKLdg ddd Zvdd Zwdd Zxdd Zye
jKjLdg dfddgdfgddgddd Zze
jKjLddd dgg d"fg dddd Z{dd Z|e
jKLdg ddd Z}dd Z~dd Zdd Zdd ZddÄ Zddń ZddǄ ZddɄ Zdd˄ Ze
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 Zd d Zdd Zdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Ze
jKLde	je	je	jgdd Ze
jKLde	je	je	jgdd Ze
jKLdg 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" Z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/d0 Ze
jKLde&e"ee#dde+e,e-ege
jKLd1g d2d3d4 Ze
jKLd5e	Wd dge	Wdd gdsfe	Wd dge	Wd dgdwfe	Wd dge	Wd d gdsfe	Wd d ge	Wd d gdwfgd6d7 Ze
jKLd8e(e"e	jMd9e(e#d:e	jMd;e(e,e	jMd9e(e-e	jMd9gd<d= Zd>d? Zd@dA ZdBdC ZdDdE ZdS (G      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)ZkernelZprobabilityrandom_state   )r	   	load_irisdatatargetshapenparanger1   shuffleintrandomRandomStateZc_Zrandnr
   ZSVCfitZpredict_probaZpredict)datasetbinaryXy	n_samples
n_featuresprngZhalfZclfZy_pred_probay_predy_true rM   x/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/metrics/tests/test_classification.pymake_prediction:   s*   


*
rO   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rC   rD   g7Mo?gUUUUUU?ghQ?   )	precisionrecallf1-scoresupportUUUUUU?gc1Ƹ?g433333?   g)k??$I$I?   gCFQ?gc?gƢ?K   rT   rR   rS   rU   g?gD~WG?g]3p?)setosaZ
versicolorZ	virginica	macro avgaccuracyweighted avgT)labelstarget_namesoutput_dictr_   r]   rR   r^   rU   )r	   r8   rO   r   r<   r=   lenrb   keys
isinstancefloatr*   r?   )irisrL   rK   _expected_reportreportkeymetricrM   rM   rN   ,test_classification_report_dictionary_outputj   sb   "	rn   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)rL   rK   rc           r   r\   )r_   r^   r`   r_   )r   r<   nanrf   dictre   rg   r*   )rk   rj   rl   rm   rM   rM   rN   2test_classification_report_output_dict_empty_input   s0   rr   zero_divisionwarnr7   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)rv   rw   dTrecord)rs   rc   rt   r7   z7Use `zero_division` parameter to control this behavior.)warningscatch_warningsr   rd   strmessage)rs   rL   rK   r{   itemmsgrM   rM   rN   0test_classification_report_zero_division_warning   s   
"r   zlabels, show_micro_avgTr   r7   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   r7   T)ra   rc   z	micro avgr_   Nr   )ra   Zshow_micro_avgrL   rK   rk   rM   rM   rN   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   r7   r7   r7   r   r7   r   r   r7         ?r7   r   )r<   arrayr   logical_notzerosr;   y1y2rM   rM   rN   .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rD   averageg\(\?g333333?r2   g)\(?g(\?皙?gRQ?   r   rD   errorbeta      )rO   r   r+   r,   r|   r}   simplefilterr   r    r   r*   r   )rL   rK   ri   rI   rfskwargspsrsfsrM   rM   rN   %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      ?r7   r   r   ro   infg     j@)r   r    r   r   rg   pytestapproxrM   rM   rM   rN   +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)r7      r   r2   )r7   r7   r   r2   r   classes)r   r7   r2   r   r   ra   r   )ro   r   r   r   ro   macro)microweightedsamplesr   r   )Nr   r   r      r   r   r   r7   r   r   r7   r7   r7   r   r7   r   ra   )      ?r7   竪?)r&   r<   r=   	enumerater    r+   meanr*   r   raises
ValueErrorr   r   )rL   rK   
y_true_bin
y_pred_binr9   iactualr   rI   r   r   ri   rM   rM   rN   $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)r7   r7   r2   r   )r7   r   r   r   r   r   r7   r   ra   r   r   r   r   r   UUUUUU?r   r   )r   r   r   )r&   r<   r=   r   r   r    r+   r*   )	rL   rK   r   r   r9   r   Z	recall_13Z
recall_allr   rM   rM   rN   &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   r7   r7   r2   r   r   r7   r2   r7   )r2   r   r7   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   )rL   y_scoreerr_msgrM   rM   rN   -test_average_precision_score_non_binary_classx  s,   

"r   zy_true, y_scorer   r   r7   r2   r   r   r   r   )r   r   r   r   r7   r7   r7   r7   r7   r7   r7   )r   r   r   r   r   333333?r   rX   rX   r7   r7   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.
    r7   Nr   rL   r   rM   rM   rN   -test_average_precision_score_duplicate_values  s   r   )r2   r2   r7   r7   r   )r   r   r   )r   r   r   r   )r   r   r   c                 C   s   t | |dks	J d S )Nr   r   r   rM   rM   rN   (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   r7   r2   r2   r2   r   r   r   )r   warnsUserWarningr   r   rM   rM   rN   (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+   )rL   rK   cmtpfpfntnnumZdenZtrue_mccZmccrM   rM   rN   test  s   
&
z*test_confusion_matrix_binary.<locals>.testc                 S      g | ]}t |qS rM   r~   .0rF   rM   rM   rN   
<listcomp>      z0test_confusion_matrix_binary.<locals>.<listcomp>rO   rL   rK   ri   r   rM   rM   rN   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,   )rL   rK   r   rM   rM   rN   r     s   
*z5test_multilabel_confusion_matrix_binary.<locals>.testc                 S   r   rM   r   r   rM   rM   rN   r      r   z;test_multilabel_confusion_matrix_binary.<locals>.<listcomp>r   r   rM   rM   rN   '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   r7   r   )r  r  r  3)r   r2   r7   r   r[   r   r   )rL   rK   string_typer   ra   rM   rM   rN   r     s&   
..z9test_multilabel_confusion_matrix_multiclass.<locals>.testc                 S   r   rM   r   r   rM   rM   rN   r   #  r   z?test_multilabel_confusion_matrix_multiclass.<locals>.<listcomp>T)r
  )Fr   r   rM   rM   rN   +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   r7   r   r7   r7   r   r   r   r   )r2   r7   r   r7   r   r2   T
samplewiser   )ra   r  )sample_weightr  r   r   )r<   r   r   r,   )r  r  rL   rK   Z
y_true_csrZ
y_pred_csrZ
y_true_cscZ
y_pred_cscr  Zreal_cmZtruespredsZ
y_true_tmpZ
y_pred_tmpr   rM   rM   rN   +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   r7   r2   r  zshould be a 1d arrayr7   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   r7   r   r7   r   r2   )r<   r   r   r   r   r   )rL   rK   r   rM   rM   rN   'test_multilabel_confusion_matrix_errorsP  s2   $"r  z%normalize, cm_dtype, expected_results))truer   TUU?)predr   r  )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)r  Zcm_dtypeZexpected_resultsy_testrK   r   rM   rM   rN   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   r7   r7   r7   r7   )r   r   r   r   r   r   r   r   r  r         @r   r  r   )r   sumr   r   r|   r}   r   RuntimeWarning)r#  rK   Zcm_trueZcm_predrM   rM   rN   ,test_confusion_matrix_normalize_single_class  s   

"r(  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#  rK   rM   rM   rN   "test_confusion_matrix_single_label  s
   "r*  zparams, warn_msg)r7   r7   r7   r   r   r   rL   rK   z?`positive_likelihood_ratio` is ill-defined and set to `np.nan`.)r   r   r   r   r   r   zdNo samples were predicted for the positive class and `positive_likelihood_ratio` is set to `np.nan`.r   r   r   r7   r7   r7   z?`negative_likelihood_ratio` is ill-defined and set to `np.nan`.z9No samples of the positive class are present in `y_true`.c                 C   B   t jt|d tdi |  W d    d S 1 sw   Y  d S Nr   rM   )r   r   r   r   )paramsZwarn_msgrM   rM   rN   test_likelihood_ratios_warnings  s   ,"r0  zparams, err_msg)r   r7   r   r7   r   r7   r7   r   r   r2   zeclass_likelihood_ratios only supports binary classification problems, got targets of type: multiclassc                 C   r-  r.  )r   r   r   r   )r/  r   rM   rM   rN   test_likelihood_ratios_errors  s   "r2  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 )Nr7   r   r   r   r2   
   r   g?g_B{	%?g-q=)Zrtolr      ro   r   r  gUUUUUU@gqq?)r<   r   r   r)   r,   rp   r   )rL   rK   posnegr  rM   rM   rN   test_likelihood_ratios  s   $


r7  raise_warningc                 C   b   t ddg}t ddg}d}tjt|d t||| d W d   dS 1 s*w   Y  dS )zaTest that class_likelihood_ratios raises a `FutureWarning` when `raise_warning`
    param is set.r7   r   zI`raise_warning` was deprecated in version 1.7 and will be removed in 1.9.r   )r8  N)r<   r   r   r   FutureWarningr   )r8  rL   rK   r   rM   rM   rN   0test_likelihood_ratios_raise_warning_deprecation  s   "r;  c                  C   s   t g d} t g d}t| |dd\}}|tdks J t g d} t g d}t| |dd\}}|tdks@J dS )zTest that class_likelihood_ratios returns the worst scores `1.0` for both LR+ and
    LR- when `replace_undefined_by=1` is set.r  r   r7   replace_undefined_byr   r   N)r<   r   r   r   r   )rL   rK   positive_likelihood_ratiori   negative_likelihood_ratiorM   rM   rN   1test_likelihood_ratios_replace_undefined_by_worst  s   

r@  r=  LR+ro   LR-g      )rA  rB  r   rp   r%  c                 C   r9  )zTest that class_likelihood_ratios raises a `ValueError` if the input dict for
    `replace_undefined_by` is in the wrong format or contains impossible values.r7   r   zGThe dictionary passed as `replace_undefined_by` needs to be in the formr   r<  N)r<   r   r   r   r   r   )r=  rL   rK   r   rM   rM   rN   6test_likelihood_ratios_wrong_dict_replace_undefined_by  s   "rC  zreplace_undefined_by, expectedc                 C   s`   t g d}t g d}t||| d\}}t |r%t |s#J dS |t|ks.J dS )zTest that the `replace_undefined_by` param returns the right value for the
    positive_likelihood_ratio as defined by the user.r  r   r<  Nr<   r   r   isnanr   r   )r=  expectedrL   rK   r>  ri   rM   rM   rN   0test_likelihood_ratios_replace_undefined_by_0_fp7     

rG  r   c                 C   s`   t g d}t g d}t||| d\}}t |r%t |s#J dS |t|ks.J dS )zTest that the `replace_undefined_by` param returns the right value for the
    negative_likelihood_ratio as defined by the user.r   r   r<  NrD  )r=  rF  rL   rK   ri   r?  rM   rM   rN   0test_likelihood_ratios_replace_undefined_by_0_tnS  rH  rI  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   (   r7   <   rZ   r3  2   gʡE?r   r   r2   r   r   r   .   ,   4          g??g+?r5   weightsg_vO?Z	quadraticg#?)r<   r   r   r*   append)r   r   kapparM   rM   rN   test_cohen_kappao  s&   .
$$$$
rV  c                  C   st   ddg} t dgd dgd  }t dgd }tjtdd t||| d	 W d
   d
S 1 s3w   Y  d
S )zLTest that correct error is raised when users pass labels that are not in y1.r7   r2   rv   r   rw   r3  z6At least one label in `labels` must be present in `y1`r   r   N)r<   r   r   r   r   r   )ra   r   r   rM   rM   rN   (test_cohen_kappa_score_error_wrong_label  s   "rW  zy_true, y_predrm   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   rs   N)r|   r}   r   r<   rE  )rm   rL   rK   rs   resultrM   rM   rN   !test_zero_division_nan_no_warning  s   


rZ  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.
    rt   rX  Nro   )r   r   r   )rm   rL   rK   rY  rM   rM   rN   test_zero_division_nan_warning  s   r[  c                 C   sN   t j| }|jdddd}|jdddd}tt||t ||d d d S )Nr   r2   rZ   sizer   r7   r3  )r<   r@   rA   randintr*   r   Zcorrcoef)global_random_seedrJ   rL   rK   rM   rM   rN   -test_matthews_corrcoef_against_numpy_corrcoef  s   ra  c           
         s   t j| }|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   rZ   r\  r  c              	      sX   g | ](}t D ]!}t D ]} ||f  ||f   ||f  ||f   qqqS rM   range)r   kmlCNrM   rN   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 rM   rb  r   r   grh  ri  rd  rM   rN   r        . Dtest_matthews_corrcoef_against_jurman.<locals>.<listcomp>.<listcomp>r&  r<   rc  r   rg  rd  rN   r         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 rM   rb  rj  rl  rM   rN   r     rm  rn  ro  rp  rg  rq  rN   r     rr  r3  )r<   r@   rA   r_  Zrandr   rd   r&  rc  r   r   r*   )
r`  rJ   rL   rK   r  Zcov_ytypZcov_ytytZcov_ypypZ
mcc_jurmanZmcc_oursrM   rg  rN   %test_matthews_corrcoef_against_jurman  s0   
rs  c                 C   s,  t j| }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 )Nc                 S   s   g | ]
}|d kr
dndqS )r   rv   rw   rM   r   r   rM   rM   rN   r         z*test_matthews_corrcoef.<locals>.<listcomp>r   r2   rZ   r\  r   c                 S   s   g | ]
}|d kr
dnd qS )rv   rw   rM   rt  rM   rM   rN   r     ru  r   rv   rw   r   r)  ro   )r7   r   r7   r7   r   r7   r7   r7   r   r7   r7   r7   r7   r7   r7   r7   r   r7   r7   r7   )r7   r7   r7   r   r   r7   r7   r7   r7   r   r7   r7   r7   r   r7   r7   r7   r   r7   r7   r7   r3  r  )r<   r@   rA   r_  r*   r   r&   whererd   r   r   AssertionError)r`  rJ   rL   Z
y_true_invZy_true_inv2y_1y_2maskrM   rM   rN   test_matthews_corrcoef  s"   "r{  c           
         sL  t j| }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 )Nrv   r   c                    s   g | ]}t  | qS rM   )chrrt  Zord_arM   rN   r     s    z5test_matthews_corrcoef_multiclass.<locals>.<listcomp>r   rZ   r\  r   )r   r   r7   r7   r2   r2   )r2   r2   r   r   r7   r7   g      )r7   r7   r   r   r   r   ii  r   )r   r   r   ro   	r   r7   r2   r   r7   r2   r   r7   r2   )	r7   r7   r7   r2   r2   r2   r   r   r   )r   r   r7   r7   r2   r1  r7   r7   r7   r7   r   r  r   r   r7   r7   r   r   )r<   r@   rA   ordr_  r*   r   r   )
r`  rJ   	n_classesrL   Z
y_pred_badZ
y_pred_minrK   rx  ry  r  rM   r}  rN   !test_matthews_corrcoef_multiclass  s@   r  n_pointsd   i'  c                    s   t j| 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 )Nc                 S   sx   t | |}|d }|d }|d }t| }|| | }|| | }|| ||  }	|| d|  d|  }
|	t|
 S )Nr7   r7   )r7   r   r^  r7   )r   rd   r<   r   )rL   rK   Zconf_matrixZtrue_posZ	false_posZ	false_negr  Zpos_rateZactivityZmcc_numeratorZmcc_denominatorrM   rM   rN   mcc_safeV  s   
z1test_matthews_corrcoef_overflow.<locals>.mcc_safec                    s8     | }|d  | d   }|dk}|dk}||fS )Nr   r   )Zrandom_sample)r  Zx_trueZx_predrL   rK   rJ   rM   rN   	random_ysb  s
   
z2test_matthews_corrcoef_overflow.<locals>.random_ysro   r   )ro   r   r%  )r<   r@   rA   repeatr*   r   )r  r`  r  r  ZarrrL   rK   rM   r  rN   test_matthews_corrcoef_overflowQ  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=
?rX   )Q?333333?r   )rQ   rW   rZ   r7   r   r   g(\?r   r   gRQ?r   gGz?r   r   r   r   r  r   )r  g=
ףp=?r  )r  rX   r   )r  r   r  )rQ   rZ   rW   )rO   r   r+   r,   r   r    r   r   r   r   r   )
rL   rK   ri   rI   r   r   r   r   r   r   rM   rM   rN   )test_precision_recall_f1_score_multiclasss  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   r7   r7   )r   r   r7   r2   )ra   warn_forr   r   r   r7   r7   r   )r<   r   r   r,   )r   rL   rK   rI   r   r   r   rM   rM   rN   ;test_precision_refcall_f1_score_multilabel_unordered_labels  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   r7   r   r   r7   r7   r   r7   r   r   r7   r   r7   r   r7   )r7   r7   r   r7   r   r7   r7   r7   r7   r   r7   r   r7   r   r7   r   r   r   rR  )r<   r   r   r   Zbincountr   )
rL   rK   r   r   r   ri   rI   r   r   rU   rM   rM   rN   .test_precision_recall_f1_score_binary_averaged  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)r  )r   r7   r2   r   r7   r2   )r2   r   r7   r7   r2   r   r   r   ro   r2   rM   )r<   Zseterrr   r*   r   r    r   )Zold_error_settingsrL   rK   rM   rM   rN   test_zero_precision_recall  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   r7   r   r   r   r   r2   r  rQ   )rO   r   r,   r<   max)rL   rK   ri   r   Zextra_labelrM   rM   rN   .test_confusion_matrix_multiclass_subset_labels  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)Z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   )rO   r   r   r   r   )ra   r   rL   rK   ri   rM   rM   rN   test_confusion_matrix_error  s   	"r  ra   )NonerD   
multiclassc                 C   s>   | rt | nd}tj||ftd}tg g | d}t|| d S )Nr   r!  r   )rd   r<   r   r?   r   r,   )ra   Zexpected_n_classesrF  r   rM   rM   rN   *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)copyr  l    r  r   r   r  l    l    )r<   Zonesrd   r   r!  int64Zbool_Zint32Zuint64Zastypefloat32float64objectfullZuint32)rF   weightr   r!  rM   rM   rN   test_confusion_matrix_dtype	  s$   
r  r!  )ZInt64Z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)	r7   r   r   r7   r   r7   r7   r   r7   r  )	r   r   r7   r7   r   r7   r7   r7   r7   r  N)r   Zimportorskipr<   r   Seriesr   r,   )r!  pdZ	y_ndarrayrL   Zy_predictedoutputZexpected_outputrM   rM   rN   %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 )NFrP   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
ra   rb   r	   r8   rO   r   r<   r=   rd   rb   rh   rL   rK   ri   rj   rk   rM   rM   rN   %test_classification_report_multiclass6  s   r  c                  C   s0   g dg d} }d}t | |}||ksJ d S )N)	r   r   r   r7   r7   r7   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   )rL   rK   rj   rk   rM   rM   rN   .test_classification_report_multiclass_balancedP  s   
r  c                  C   s8   t  } t| dd\}}}d}t||}||ksJ d S )NFrP   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	   r8   rO   r   r  rM   rM   rN   :test_classification_report_multiclass_with_label_detectionb  s
   
r  c                  C   sN   t  } t| dd\}}}d}t||tt| j| jdd}||ks%J d S )NFrP   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   )ra   rb   digitsr  r  rM   rM   rN   1test_classification_report_multiclass_with_digitsv  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
ru   rb   rO   r<   r   r   )rL   rK   ri   rj   rk   rM   rM   rN   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  rL   rK   ri   ra   rj   rk   rM   rM   rN   8test_classification_report_multiclass_with_unicode_label  s   
r  c                  C   r  )NFr   )r  Z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  rM   rM   rN   <test_classification_report_multiclass_with_long_string_label  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   )rL   rK   rb   r   rM   rM   rN   =test_classification_report_labels_target_names_unequal_length  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   )rL   rK   rb   r   rM   rM   rN   @test_classification_report_no_labels_target_names_unequal_length  s   "r  c                  C   sN   d} d}t d|| dd\}}t d|| dd\}}d}t||}||ks%J d S )Nr   rL  r7   r   )rH   rG   r  r6   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  rG   ri   rL   rK   rj   rk   rM   rM   rN   %test_multilabel_classification_report  s   


r  c                  C   r   )Nr   r   r   r   r   r7   )r<   r   r!   r   r   r;   r   rM   rM   rN   $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   r7   r   UUUUUU?r   r   r   r  gUUUUUU?gUUUUUU?)r<   r   r   r   r;   
zeros_like
sp_hamming)r   r   wrM   rM   rN   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   r7   r   r7   r7   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]r   rD   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   r7   r7   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   )rL   rK   r   Zmsg1msg2msg3r   rM   rM   rN   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   r7   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   rL   rK   r  r  r   rM   rM   rN   test_multilabel_jaccard_scoreb  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   r7   r2   )r   r   r   Nr   r   r   )r%   rB   Z	transformr   r   zipr*   r<   r   r-   r   )r  rL   rK   ra   Zlbr   r   Zmulti_jaccard_scoreZbin_jaccard_scoreZmulti_labels_listZbin_labels_listr   Zm_labelZb_labelrM   rM   rN   test_multiclass_jaccard_score  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 )Nr7   r   rD   r   ro   zOJaccard is ill-defined and being set to 0.0 due to no true or predicted samplesr   r   r   )r7   r   r7   r7   r   )r7   r   r7   r7   r7   r   r  r   )r   r   r   r   r<   r   r*   r   )r  r   rL   rK   rM   rM   rN   !test_average_binary_jaccard_score  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   rt   r   rs   ro   )r<   r   r   r   r   r   r   )rL   rK   r   scorerM   rM   rN   (test_jaccard_score_zero_division_warning  s   "r  zzero_division, expected_scorer  )r7   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   )rs   expected_scorerL   rK   r  rM   rM   rN   *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r7   r   r   r   r   r7   r   r   r  )r7   r   r7   r   r   )ro   r   r   ro   r2   )ro   r   r   ro   )ro   r   r7   ro   )r7   r7   r7   r7   r   r   )r   r  r7   r   r   g      ?r   g?r   r   r   r   rR  r   r<   r   r   r+   r   r*   r   r   rL   rK   rI   r   r   r   f2rU   rM   rM   rN   +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   r7   r  r   )ro   r   ro   ro   r2   )ro   r   ro   ro   )ro   gQ?ro   ro   r7   r2   r7   r   r  )r   皙?r   r   r         ?r   r   r   g      ?r  r   r   rV   rR  r   g&S?r  r  rM   rM   rN   +test_precision_recall_f1_score_multilabel_2J  sX   











r  z%zero_division, zero_division_expected)rt   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  r)  r  r  r   ro   r2   r   r   r   r7   r  r   r   rs   r  r   r         ?g?rR  r   rY   r   r   r   r   g@r   r   rV   gZd;O?)r<   r   r   r+   r   rE  r*   r.   )rs   Zzero_division_expectedrL   rK   rI   r   r   r   Z
expected_fr  rU   Zvalue_to_sumZvalues_to_averageZexpected_resultrM   rM   rN   7test_precision_recall_f1_score_with_an_empty_prediction  s   












r  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rZ   r   r   r   r   rs   r  )r<   r   r  r|   r}   r   r   r   rE  rg   r*   )r   r   rs   rL   rK   rI   r   r   r   fbetarm   rM   rM   rN   "test_precision_recall_f1_no_labels  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   rL   rK   funcrI   r   r   r   r  rM   rM   rN   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  r  r2   r  )
r<   r   r  r|   r}   r   r   r   r  r+   )rs   rL   rK   rI   r   r   r   r  rM   rM   rN   /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  r7   r  r  r2   r  )	r<   r   r  r   r   r   r   r+   r   )rL   rK   rI   r   r   r   r  rM   rM   rN   4test_precision_recall_f1_no_labels_average_none_warnN  s   


r  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   r7   r7   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.r7   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   rD   Trz   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{   rM   rM   rN   test_prf_warningsj  sp   
4444
$r  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   r  r   r  r  r7   r   r   r   r   rD   Trz   r  )r|   r}   r   r   r<   r   rd   )rs   r   r{   rM   rM   rN   )test_prf_no_warnings_if_zero_division_set  s^   

4
"r  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   r7   r   r   r  Trz   r  rt   r  )
r|   r}   r   r    r<   r   r~   r   r   rd   rs   r{   rM   rM   rN   test_recall_warnings	  s6   



"r  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 )NTrz   r  r7   r   r   r  rt   r  r   )
r|   r}   r   r   r<   r   r~   r   r   rd   r  rM   rM   rN   test_precision_warnings8	  s2   


"r  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 )NTrz   r  r2   r   r7   r   r   r  rt   r  )r|   r}   r   r   r   r   r<   r   rd   r~   r   r   )rs   r{   r  rM   rM   rN   test_fscore_warnings`	  s8   
"r  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)r7   r2   r   r   )r7   r2   r   r7   r  r   r   r   r  r  r2   r   r   )
r<   r   r   r    r   r   r   r   r   r   )
Z	y_true_mcZ	y_pred_mcZmsg_mcZ
y_true_indZ
y_pred_indZmsg_indrL   rK   r   rm   rM   rM   rN   'test_prf_average_binary_data_non_binary	  s,   
r  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  rD   Z
continuouszmulticlass-multioutputzcontinuous-multioutputr   r   r   r   r7   )r2   r   r7   )ro   r  r   r2   r   ro   r  r   r   r%  g?g      @)r  z@Classification metrics can't handle a mix of {0} and {1} targetsr   z{0} is not supportedZ
multilabelZcsrr   )r7   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,   Zsqueeze)ZINDZMCZBINZCNTZMMCZMCNZEXAMPLESZEXPECTEDZtype1r   Ztype2r   rF  r   Zmerged_typeZy1outZy2outr   rM   rM   rN   test__check_targets	  s   


	



$r  c                  C   s*   ddg} ddg}t | |d dksJ d S )Nr   r7   r   r  )r"   r+  rM   rM   rN   Atest__check_targets_multiclass_with_both_y_true_and_y_pred_binary
  s   r  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   r7   r7   r   )g      !r   r  g333333ӿr   )r   r2   r2   r   )r<   r   r   rL   pred_decisionrM   rM   rN   test_hinge_loss_binary
  s   r  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޿r  333333r  RQؿr  )r  r  r  r  gzGgHzGgHzGѿgQ?)r   r7   r2   r7   r   r2   r7   r   r2   r   r   r   outr<   r   clipr   r   )r  rL   dummy_lossesdummy_hinge_lossrM   rM   rN   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   r7   r2   r2   )gRQ?g rh?g(\gffffffr  r  zDPlease include all labels in y_true or pass labels as third argumentr   )r<   r   r   r   r   r   )rL   r  error_messagerM   rM   rN   :test_hinge_loss_multiclass_missing_labels_with_labels_none4
  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   r7   r   r7   r   r7   r7   )r   r7   r2   r7   r   r2   r7   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   r  r   r7   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))rL   r  ra   )r<   r   r   r   r   reescaper   )rL   r  r!  ra   rM   rM   rN   <test_hinge_loss_multiclass_no_consistent_pred_decision_shapeE
  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 )Nr  皙r  r  r  r  )r   r7   r2   r7   r2   )r   r7   r2   r   r7   r   r2   r   r   r  r   r  r  rL   ra   r  r  rM   rM   rN   .test_hinge_loss_multiclass_with_missing_labelsa
  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)r  r  r  )g333333ÿr  r  )r  r  r  )r'  g(\gzGڿ)r   r2   r2   r   r2   r   r7   r   r2   r   r   r  r   )r<   r   r  r   r*   r   r(  rM   rM   rN   @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  r  r&  r  r  r7   r   r2   r   r   r   r  r  )rL   r  r  r  rM   rM   rN   +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} g dg dg dg}g d}d }tjt	t
|d! t| ||d" 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	t
|d! t| | W d    n	1 sw   Y  d%d&gddgddgg}d(}tjt	t
|d! t| | W d    n	1 sEw   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   rX   {Gz?Gz?r   r  gMbP?g+?r/  r7   r  r   r   r   r   r   r   r   r   r   Tr  g躕ʀ?r2   Fg.L`@r   r   r   r   ru   )rX   r   ro   )r   rX   ro   r   r   r   )rv   rx   ry   zPy_true contains values {'b'} not belonging to the passed labels ['a', 'c', 'd'].r   r   hamspamr8  r7  CT?r   r   zy_true contains only one label (2). Please provide the list of all expected class labels explicitly through the labels argument.zBFound input variables with inconsistent numbers of samples: [3, 2]r   )r   r   r   r   r   r   r  )r<   r   r   r   r   Zlogpmfr)   r   r   r   r#  r$  log)
rL   rK   lossZ	loss_truera   Z	error_strr   Ztrue_log_lossZcalculated_log_lossZy_score2rM   rM   rN   test_log_loss
  sh   &
*





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   r7   r  N)r<   r   r   isfinite)r!  rL   rK   r<  rM   rM   rN   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_prob values do not sum to one.r   N)r<   r   r   r   r   r   )r!  rL   rK   rM   rM   rN   '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   r+  rM   rM   rN   !test_log_loss_perfect_predictions  s   rA  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 )	Nr6  r   r   r   r   r   )	DataFramer  r9  )
r<   r   r(   r  rB  r  rT  ImportErrorr   r)   )
Zy_trZy_prtypesrB  r  ZTrueInputTypeZPredInputTyperL   rK   r<  rM   rM   rN   test_log_loss_pandas_input)  s   "

rE  c                  C   f   t d} tjt| d tg dg dg dg dgg dd W d    d S 1 s,w   Y  d S 	NzLabels passed were ['spam', 'eggs', 'ham']. But this function assumes labels are ordered lexicographically. Pass the ordered labels=['eggs', 'ham', 'spam'] and ensure that the columns of y_prob correspond to this ordering.r   eggsr8  r7  r   r  r   )r8  rI  r7  r   )r#  r$  r   r   r   r   Zexpected_messagerM   rM   rN   test_log_loss_warnings;  s   "rK  c                  C   sv  t g d} t g d}t| | d t|  }tt| | d tt| || ttd|  || ttd|  d || t d| |f}t d|  | f}tt| || tt||| tt| |dd| tt| |d	d| tt| |d
dd|  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   r7   r7   r   r7   r7   r   r   rX   r   r   gffffff?r2   ro   r   r7   auto)Zscale_by_halfTFr   r   g|Gz?r   r  Zfoobarr   )r<   r   r   Znormrd   r*   r   Zcolumn_stack)rL   y_probZ
true_scoreZy_prob_reshapedZy_true_reshapedrM   rM   rN   test_brier_score_loss_binaryJ  s8   rQ  c                   C   s   t tg dg dg dg dgg ddd t tg dg dg d	g d
gd t tg dg dg dg dgd t tg dg dg dg dgd d S )NrH  r  r  )rI  r7  r8  yamsr   r   r  r2  r3  r4  gt?r   )r   ro   ro   )ro   r   ro   )ro   ro   r   r   r2   )r*   r   rM   rM   rM   rN    test_brier_score_loss_multiclassq  s4   	rS  c                  C   s<  t g d} t g d}tt t| |dd   W d    n1 s'w   Y  tt t| |d  W d    n1 sCw   Y  tt t| |d  W d    n1 s_w   Y  t g d} t g dg dg dg}tt t| |dd   W d    n1 sw   Y  tt t| |d  W d    n1 sw   Y  tt t| |d  W d    n1 sw   Y  t g d	} t g d
}t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t|d t| | W d    n	1 s*w   Y  g d} g dg dg dg}g d}d}tjtt|d t| ||d W d    n	1 saw   Y  dg} ddgg}d}tjtt|d t| | W d    n	1 sw   Y  tt| |ddgdd d S )NrL  rM  r7   r   r  r2  r3  r4  )r   r7   r2   r   )r   r   r   r   zpThe type of the target inferred from y_true is multiclass but should be binary according to the shape of y_prob.r   r   r   zy_true and y_prob contain different number of classes: 3 vs 2. Please provide the true labels explicitly through the labels argument. Classes found in y_true: [0 1 2]rH  r   r  )rI  r8  r7  rR  zwThe number of classes in labels is different from that in y_prob. Classes found in labels: ['eggs' 'ham' 'spam' 'yams']r   rI  rX   r   zy_true contains only one label (eggs). Please provide the list of all expected class labels explicitly through the labels argument.r7  r0  )	r<   r   r   r   r   r   r#  r$  r*   )rL   rP  r!  ra   rM   rM   rN   $test_brier_score_loss_invalid_inputs  sj   
rT  c                  C   rF  rG  )r#  r$  r   r   r   r   rJ  rM   rM   rN   test_brier_score_loss_warnings  s   "rU  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   rM   rM   rN   #test_balanced_accuracy_score_unseen  s   "rV  zy_true,y_pred)rv   rw   rv   rw   )rv   rv   rv   rw   )rv   rw   rx   rw   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   r7   )r    r<   uniquer-   r   r   r   Z	full_like)rL   rK   Zmacro_recallZbalancedrW  ZchancerM   rM   rN   test_balanced_accuracy_score  s   	rY  r   ))FTr^  )ro   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.
    *   r3  r   T)r]  replacer\  r   N)	r<   r@   rA   choicer   uniformr  anyrE  )rm   r   rJ   rG   r   rL   rK   rY  rM   rM   rN   *test_classification_metric_pos_label_types  s   ra  zy_true, y_pred, expected_scorec                 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   rX  N)r   r   r   )rL   rK   r  rM   rM   rN   2test_f1_for_small_binary_inputs_with_zero_division/  s    rb  scoringrX  r2   )r   rs   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   )r6   r   )	max_depthr6   r2   r  )rc  Zn_jobsZerror_scoreN)r	   Zmake_classificationr'   rB   r$   )rc  rE   rF   Z
classifierrM   rM   rN   9test_classification_metric_division_by_zero_nan_validatonA  s   re  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 )&Nr,  r-  r   rX   r   r   r   gffffff?g?r0  r1  r+  F)rL   rK   r  r7   )r2   r7   r   r   r   r7   r   r   )rL   rK   r  )rL   rK   r  r  r   r   r   r   r  )r   r7   r7   r7   )r.  r/  r/  r/  )r2   r2   r2   r2   r  )highrf  lowZneutral)ffffff?r   r   r   )r   r   r   r   r5  )r   r   r   r:  r2  )r<   r   r#   r   r   r   r&  )rL   Zy_true_stringrK   y_pred_nulld2_scoreZlog_likelihoodZlog_likelihood_nullZd2_score_truer  Zd2_score_stringZd2_score_with_sample_weightrM   rM   rN   test_d2_log_loss_scoreY  s   

$$

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

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


"


  
rk  c            	      C   s   g d} g d}g d}t g dd}t| |||d}t g dd}t| |||d}d||  }t| |||d}t|| d	S )
zCheck that d2_log_loss_score works when not all labels are present in y_true

    non-regression test for https://github.com/scikit-learn/scikit-learn/issues/30713
    r2   r   r2   r   r   )rh  r   r   r   r   r   r7   )r  ra   )r   r   r   r7   N)r<   tiler   r#   r)   )	rL   ra   r  rK   Zlog_loss_obsri  Zlog_loss_nullZexpected_d2_scorerj  rM   rM   rN   %test_d2_log_loss_score_missing_labels  s   ro  c                  C   sJ   g d} t g dd}t| |g dd}t| |g dd}t|| dS )zGCheck that d2_log_loss_score doesn't depend on the order of the labels.rl  r   rm  r   r   r  N)r<   rn  r#   r)   )rL   rK   rj  Zd2_score_otherrM   rM   rN   "test_d2_log_loss_score_label_order  s
   rp  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   Nz(number of classes in labels is differentr   )r   r   r   )r   r   r   r  r7   zscore is not well-definedr   zy_true contains only one labelz.The labels array needs to contain at least two)r   r   r   r#   r   r   )rL   rK   errra   rM   rM   rN   test_d2_log_loss_score_raises  sL   
$rr  )NF)r#  r|   	functoolsr   	itertoolsr   r   r   numpyr<   r   Zscipyr   Zscipy.spatial.distancer   r  Zscipy.statsr   Zsklearnr	   r
   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.metricsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   Zsklearn.metrics._classificationr"   r#   Zsklearn.model_selectionr$   Zsklearn.preprocessingr%   r&   Zsklearn.treer'   Zsklearn.utils._mockingr(   Zsklearn.utils._testingr)   r*   r+   r,   r-   Zsklearn.utils.extmathr.   Zsklearn.utils.fixesr/   r0   Zsklearn.utils.validationr1   rO   rn   rr   markZparametrizerp   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   r   r   r  r  r  r$  r(  r*  r0  r2  r7  r;  r@  rC  r   rG  rI  rV  rW  rZ  r[  ra  rs  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r"  r%  r)  r*  r,  r=  r  r  Zfloat16r?  r@  rA  rE  rK  rQ  rS  rT  rU  rV  rY  ra  rb  re  rk  ro  rp  rr  rM   rM   rM   rN   <module>   s   \0A
 

"



-


#(
		


(









	
		
'#8
!:




#

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