U
    9%eR                    @   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- d dl.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z= d dl>m?Z? dddZ@dd ZAdd ZBe
jCDddd de	jEgdd ZFdd ZGdd  ZHe;d!d" ZIe;d#d$ ZJe;d%d& ZKd'd( ZLe
jCDd)d d dd*ge	Md+d,d-gd.d/d/gd-d0d-gd,d/d1ggfd d d d dddddddgd d-d-d.d1d2d2d3d3ddgfgd4d5 ZNe
jCDd)d*d*ddd ge	Md,d/d1gd,d/d1gd.d1d/gd.d1d/gd0d1d/ggfd ddgd1d1d2gfgd6d7 ZOd8d9 ZPd:d; ZQd<d= ZRd>d? ZSd@dA ZTdBdC ZUe
jCDdDdEdFdGdHgdIdJ ZVdKdL ZWe
jCDdMe	Md d d d d d ge	Md d d d d d gdNdOfe	Mdddd d d ge	Mdddd d d gdNdPfe	Mdddd d d ge	Md d d d d d gdNdQfe	Mdddd d d ge	Md d d dddgdNdRfe	Md d d d d d ge	Mdddd d d gdNdSfgdTdU ZXe
jCDdVe	Md dd dd ge	Mddd d d*gdNdWfgdXdY ZYdZd[ ZZd\d] Z[d^d_ Z\e
jCDdd de	jEge
jCDd`d gd gfg g fge
jCDdae"ee#ddbe+e,gdcdd Z]e
jCDd`d gd gfg g fge
jCDdae"ee#ddbe+e,gdedf Z^dgdh Z_didj Z`dkdl Zadmdn Zbe
jCDdodpdqgdrds Zcdtdu Zde
jCDdvdwdxdydzdgd{d| Zed}d~ Zfdd Zgdd Zhe
jCjDdg dfddgdfgddgddd Zie
jCjDddd dgd dd*gfdddgddd Zjdd Zke
jCDddddgdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zue;dd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}e
jCDdddgdd Z~e;ddÄ Ze;ddń Ze;e
jCDdddde	jEe	jEfgddʄ Ze
jCDddge
jCDdvdydxdzdwge
jCDdd de	jEgdd̈́ Ze
jCDdvdydxdzdwgddτ Ze
jCDdd de	jEgddф Zddӄ ZddՄ Ze
jCDdd de	jEgddׄ Ze
jCDddd de	jEgddل Ze
jCDddd de	jEgddۄ Ze
jCDddd de	jEgdd݄ Zdd߄ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Ze
jCDddd dd gdddd gfdd dd gdddd gfdddd gdd dd gfgdd Ze
jCDdae&e"ee#d1dbe*e+e,ege
jCDdddddg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matthews_corrcoefmultilabel_confusion_matrixprecision_recall_fscore_supportprecision_scorerecall_scorezero_one_loss)_check_targets)LabelBinarizerlabel_binarize)MockDataFrame)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalassert_no_warningsignore_warnings)_nanaverage)check_random_stateFc                 C   s  | dk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 }
|r|
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aranger,   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probas_predy_predy_true rH   h/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/metrics/tests/test_classification.pymake_prediction7   s*    


*rJ   c               
   C   st  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st	|D ]x}|dkrt
|| tst	|| || kst	q||  ||  kst	|| D ]}t|| | || |  qqt
|d d ts(t	t
|d d ts@t	t
|d d tsXt	t
|d d tspt	d S ) NFr>   r?   g7Mo?gUUUUUU?ghQ?   )	precisionrecallf1-scoresupportUUUUUU?gc1Ƹ?g433333?   g)k??$I$I?   gCFQ?gc?gƢ?K   rO   rM   rN   rP   g?gD~WG?g]3p?)setosaZ
versicolorZ	virginica	macro avgaccuracyweighted avgT)labelstarget_namesoutput_dictrZ   rX   rM   rY   rP   )r	   r3   rJ   r   r7   r8   lenr]   keysAssertionError
isinstancefloatr&   r:   )irisrG   rF   _expected_reportreportkeymetricrH   rH   rI   ,test_classification_report_dictionary_outputg   s`    "	rj   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sHt|  | ks\t|D ]x}|dkrt| | ts~t| | || kstq`| |  ||  kst|| D ]}t|| | | | |  qq`d S )NT)rG   rF   r^           r   rW   )rZ   rY   r[   rZ   )	r   r7   nanrb   dictra   r`   rc   r&   )rg   rf   rh   ri   rH   rH   rI   2test_classification_report_output_dict_empty_input   s,    rn   zero_divisionwarnr2   c              	   C   s   dddgdddg }}t jddX}t||| dd | dkrnt|d	ksLt|D ]}d
}|t|jksPtqPn|rvtW 5 Q R X d S )NabcdTrecord)ro   r^   rp   r2   z7Use `zero_division` parameter to control this behavior.)warningscatch_warningsr   r_   ra   strmessage)ro   rG   rF   rv   itemmsgrH   rH   rI   0test_classification_report_zero_division_warning   s       r}   c                  C   s   t dddgdddgg} t dddgdddgg}t| |dksFtt| | dksXtt||dksjtt|t |dkstt| t | dkstt| t | jdkstt|t | jdkstd S Nr   r2         ?)r7   arrayr   ra   logical_notzerosr6   y1y2rH   rH   rI   .test_multilabel_accuracy_score_subset_accuracy   s    r   c                  C   s  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 tfdditffD ]\}}|t| |f|}	t|	dd |t| |f|}
t|
dd |t| |f|}t|d
d t|t	| |fddi|d|	 |
 d|	 |
  d qxd S )NTr?   averageg\(\?g333333?r-   g)\(?g(\?皙?gRQ?   r   r?   beta      )
rJ   r   r'   r(   r)   r   r   r   r&   r   )rG   rF   re   rD   rfskwargsZ	my_assertpsrsfsrH   rH   rI   %test_precision_recall_f1_score_binary   s(    
r   c                   C   s  dt ddgddgkstdtddgddgks4tdtddgddgksNtdtddgddgddksltdt ddgddgkstdtddgddgkstdtddgddgkstdtddgddgtddksttddgddgtddttddgddgddkstd S )	N      ?r2   r   r   rk   infg     j@)r   ra   r   r   r   rc   pytestapproxrH   rH   rH   rI   +test_precision_recall_f_binary_single_class  s    "r   c                  C   s  ddddg} ddddg}t | tdd}t |tdd}| |f||fg}t|D ]\}\} }t| |dddddgd d}td	d
d
dd	g| t| |dddddgdd}ttd	d
d
dd	g| dD ]B}|dkr|dkrqtt| |dddddg|dt| |d |d qqTdD ]`}t	t
 t||td|d W 5 Q R X t	t
 t||tdd|d W 5 Q R X qtdddgdddgg} tdddgdddgg}t| |dddgd\}}	}
}tt||	|
gtdddg d S )Nr2      r-   r   classesr   r   r\   r   rk   r   r   macro)microweightedsamplesr   )Nr   r   r      r   r   r\         ?竪?)r#   r7   r8   	enumerater   r'   meanr&   r   raises
ValueErrorr   r   )rG   rF   
y_true_bin
y_pred_binr4   iactualr   rD   r   r   re   rH   rH   rI   $test_precision_recall_f_extra_labels  sH       
    r   c            	      C   s   ddddg} ddddg}t | tdd}t |tdd}| |f||fg}t|D ]\}\} }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stqqTd S )Nr2   r-   r   r   r   r\   r   r   r   r   r   UUUUUU?r   r   )r   r   r   )	r#   r7   r8   r   r   r   r'   r&   ra   )	rG   rF   r   r   r4   r   Z	recall_13Z
recall_allr   rH   rH   rI   &test_precision_recall_f_ignored_labelsG  s    r   c               
   C   s   t dddgdddgdddgdddgdddgdddgg} t dddgdddgdd	dgddd
gdddgdddgg}d}tjt|d t| |dd W 5 Q R X dS )z:Test multiclass-multiouptut for `average_precision_score`.r-   r2   r   ffffff?皙?皙?皙?333333?r   r   z.multiclass-multioutput format is not supportedmatch	pos_labelN)r7   r   r   r   r   r   )rG   y_scoreerr_msgrH   rH   rI   -test_average_precision_score_non_binary_class^  s*    

r   zy_true, y_scorer-   r   r   r   r   r   r   r   333333?rS   c                 C   s   t | |dkst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.
    r2   Nr   ra   rG   r   rH   rH   rI   -test_average_precision_score_duplicate_valuesy  s    r   c                 C   s   t | |dkstd S )Nr   r   r   rH   rH   rI   (test_average_precision_score_tied_values  s    r   c               	   C   s>   d} t jt| d" tdddgdddgddd W 5 Q R X 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   r2   r-   r   r   r   )r   warnsUserWarningr   r|   rH   rH   rI   (test_precision_recall_f_unused_pos_label  s       r   c                  C   sD   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rrdn|| }	t| |}
t|
|	dd t|
ddd d S )	N   r         r   r-   decimal=
ףp=?)r   r(   flattenr7   sqrtr   r'   )rG   rF   cmtpfpfntnnumZdenZtrue_mccZmccrH   rH   rI   test  s    
&
z*test_confusion_matrix_binary.<locals>.testc                 S   s   g | ]}t |qS rH   ry   .0rA   rH   rH   rI   
<listcomp>  s     z0test_confusion_matrix_binary.<locals>.<listcomp>rJ   rG   rF   re   r   rH   rH   rI   test_confusion_matrix_binary  s    
r   c                  C   sD   t dd\} }}dd }|| | |dd | D dd |D  d S )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(   )rG   rF   r   rH   rH   rI   r     s    
z5test_multilabel_confusion_matrix_binary.<locals>.testc                 S   s   g | ]}t |qS rH   r   r   rH   rH   rI   r     s     z;test_multilabel_confusion_matrix_binary.<locals>.<listcomp>r   r   rH   rH   rI   '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 |rLdddgndddg}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 |rddddgn
ddddg}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   r-      021r   r2   r   3rV   r   )rG   rF   string_typer   r\   rH   rH   rI   r     s*    
 , ,z9test_multilabel_confusion_matrix_multiclass.<locals>.testc                 S   s   g | ]}t |qS rH   r   r   rH   rH   rI   r   	  s     z?test_multilabel_confusion_matrix_multiclass.<locals>.<listcomp>T)r   )Fr   r   rH   rH   rI   +test_multilabel_confusion_matrix_multiclass  s    

r   c                  C   s  ddl m} m} tdddgdddgdddgg}tdddgdddgdddgg}||}||}| |}| |}tdddg}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||	 qqt||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   )
csc_matrix
csr_matrixr2   r-   r   T
samplewiser   )r\   r   )sample_weightr   r   )Zscipy.sparser   r   r7   r   r   r(   )r   r   rG   rF   Z
y_true_csrZ
y_pred_csrZ
y_true_cscZ
y_pred_cscr   Zreal_cmZtruespredsZ
y_true_tmpZ
y_pred_tmpr   rH   rH   rI   +test_multilabel_confusion_matrix_multilabel  s8    "".


4&4   r   c               	   C   s  t dddgdddgdddgg} t dddgdddgdddgg}tjtdd t| |ddgd W 5 Q R X tjtdd, t| |dddgddd	gdd	d
ggd W 5 Q R X d}tjt|d t| |dgd W 5 Q R X d}tjt|d t| |dgd W 5 Q R X tjtdd  tdddgdddgdd W 5 Q R X d}tjt|d0 tdddgdddggdddgdddgg W 5 Q R X d S )Nr2   r   zinconsistent numbers of samplesr   r-   r   zshould be a 1d arrayr   r   r   z%All labels must be in \[0, n labels\)r   r   zSamplewise metricsTr   z'multiclass-multioutput is not supported)r7   r   r   r   r   r   )rG   rF   r   rH   rH   rI   'test_multilabel_confusion_matrix_errors5  s*    ""  $r   z%normalize, cm_dtype, expected_results)truer   TUU?)predr   r   )allr   geq?)Nr   r-   c                 C   sP   dddgd }t ttdddg }t||| d}t|| |jj|ksLtd S )Nr   r2   r-   r   	normalize)listr   r   r   r%   dtypekindra   )r   Zcm_dtypeZexpected_resultsy_testrF   r   rH   rH   rI   test_confusion_matrix_normalizeS  s
    

r  c               	   C   s   ddddddddg} ddddddddg}t | |dd}| tdksLtt   tdt t | |dd}W 5 Q R X | tdkstt   tdt t || dd W 5 Q R X d S )	Nr   r2   r   r          @errorr   r   )	r   sumr   r   ra   rw   rx   simplefilterRuntimeWarning)r  rF   Zcm_trueZcm_predrH   rH   rI   ,test_confusion_matrix_normalize_single_classd  s    

r	  zparams, warn_msgrG   rF   z2samples of only one class were seen during testingz:positive_likelihood_ratio ill-defined and being set to nanz+no samples predicted for the positive classz:negative_likelihood_ratio ill-defined and being set to nanz@no samples of the positive class were present in the testing setc              	   C   s(   t jt|d tf |  W 5 Q R X d S Nr   )r   r   r   r   )paramsZwarn_msgrH   rH   rI   test_likelihood_ratios_warningsw  s    1r  zparams, err_msgzeclass_likelihood_ratios only supports binary classification problems, got targets of type: multiclassc              	   C   s(   t jt|d tf |  W 5 Q R X d S r  )r   r   r   r   )r  r   rH   rH   rI   test_likelihood_ratios_errors  s    r  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 )Nr2   r   r   r   r-   
   r   g?g_B{	%?g-q=)Zrtolr      rk   r   r   gUUUUUU@gqq?)r7   r   r   r%   r(   rl   r   )rG   rF   posnegr   rH   rH   rI   test_likelihood_ratios  s    $


r  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srtt | dgd } t |dgd }t| |ddgd|kst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   (   r2   <   rU   r  2   gʡE?r   r   r-   r   r   r   .   ,   4          g??g+?r0   weightsg_vO?Z	quadraticg#?)r7   r   r   r&   ra   append)r   r   kapparH   rH   rI   test_cohen_kappa  s*    .
$$$$  r   c                   C   s4   t dgdgdkstt ddgddgdks0td S )Nr   r2   rk   )r   ra   rH   rH   rH   rI   test_matthews_corrcoef_nan  s    r!  zy_true, y_predri   r   c              	   C   sV   t   t d | |||d}W 5 Q R X t|rFt|sRtn||ksRtdS )zmCheck the behaviour of `zero_division` when setting to 0, 1 or np.nan.
    No warnings should be raised.
    r  ro   N)rw   rx   r  r7   isnanra   )ri   rG   rF   ro   resultrH   rH   rI   !test_zero_division_nan_no_warning  s    


r%  c              	   C   s4   t t | ||dd}W 5 Q R X |dks0tdS )ztCheck the behaviour of `zero_division` when setting to "warn".
    A `UndefinedMetricWarning` should be raised.
    rp   r"  rk   N)r   r   r   ra   )ri   rG   rF   r$  rH   rH   rI   test_zero_division_nan_warning  s    r&  c                  C   sN   t jd} | jdddd}| jdddd}tt||t ||d d d S )Nr   r-   rU   sizer   r2   r  )r7   r;   r<   randintr&   r   Zcorrcoef)rE   rG   rF   rH   rH   rI   -test_matthews_corrcoef_against_numpy_corrcoef+  s      r+  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   r-   rU   r'  r   c              	      sX   g | ]P}t D ]B}t D ]4} ||f  ||f   ||f  ||f   qqqS rH   range)r   kmlCNrH   rI   r   A  s   
 
 z9test_matthews_corrcoef_against_jurman.<locals>.<listcomp>c                    s@   g | ]8 d d  f   t  fddtD  qS )Nc                    s.   g | ]&}t D ]}|kr ||f qqS rH   r,  r   r   gr2  r3  r.  rH   rI   r   K  s
     
   Dtest_matthews_corrcoef_against_jurman.<locals>.<listcomp>.<listcomp>r  r7   r-  r   r1  r.  rI   r   I  s   c                    s@   g | ]8  d d f   t  fddtD  qS )Nc                    s.   g | ]&}t D ]}|kr ||f qqS rH   r,  r4  r6  rH   rI   r   R  s
     
   r7  r8  r9  r1  r:  rI   r   P  s   r  )r7   r;   r<   r*  Zrandr   r_   r  r-  r   r   r&   )	rE   rG   rF   r   Zcov_ytypZcov_ytytZcov_ypypZ
mcc_jurmanZmcc_oursrH   r1  rI   %test_matthews_corrcoef_against_jurman5  s0    
r;  c                  C   sf  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ddddgddddgd tt|d
gt| d ddddddddddddddddddddg}ddddddddddddddddddddg}tt||d dgd dgd  }t	
t tt|||dd W 5 Q R X d S )Nr   c                 S   s   g | ]}|d krdndqS )r   rq   rr   rH   r   r   rH   rH   rI   r   ^  s     z*test_matthews_corrcoef.<locals>.<listcomp>r-   rU   r'  r   c                 S   s   g | ]}|d krdnd qS )rq   rr   rH   r<  rH   rH   rI   r   d  s     r   rq   rr   r   rk   r2   r  r   )r7   r;   r<   r*  r&   r   r#   wherer_   r   r   ra   )rE   rG   Z
y_true_invZy_true_inv2y_1y_2maskrH   rH   rI   test_matthews_corrcoef\  s      ,,rA  c            	   	      s  t jd} td d} fdd| jd|ddD }tt||d ddd	d	d
d
g}d
d
ddd	d	g}tt||d ddd	d	d
d
g}d	d	ddddg}tt||dt d  dd	d
g}dddg}tt||d dddg}dd	d
g}tt||d dd	d
dd	d
dd	d
g	}d	d	d	d
d
d
dddg	}tt||d ddd	d	d
g}d	d	ddd
g}d	d	d	d	dg}tt|||dd ddd	d
g}ddd	d
g}d	d	ddg}tt|||dd d S )Nr   rq   r   c                    s   g | ]}t  | qS rH   )chrr<  Zord_arH   rI   r     s     z5test_matthews_corrcoef_multiclass.<locals>.<listcomp>rU   r'  r   r2   r-   g      ii  r   rk   r   r   )r7   r;   r<   ordr*  r&   r   r   )	rE   	n_classesrG   Z
y_pred_badZ
y_pred_minrF   r>  r?  r   rH   rC  rI   !test_matthews_corrcoef_multiclass  sD    



  rF  n_pointsd   i'  c                    s   t jd dd } fdd}t ddg| }tt||d t dddg| }tt||d || \}}tt||d tt||||| d S )	Ni3c                 S   sx   t | |}|d }|d }|d }t| }|| | }|| | }|| ||  }	|| d|  d|  }
|	t|
 S )Nr2   r2   )r2   r   r)  r2   )r   r_   r7   r   )rG   rF   Zconf_matrixZtrue_posZ	false_posZ	false_negrG  Zpos_rateZactivityZmcc_numeratorZmcc_denominatorrH   rH   rI   mcc_safe  s    
z1test_matthews_corrcoef_overflow.<locals>.mcc_safec                    s8     | }|d  | d   }|dk}|dk}||fS )Nr   r   )Zrandom_sample)rG  Zx_trueZx_predrG   rF   rE   rH   rI   	random_ys  s
    
z2test_matthews_corrcoef_overflow.<locals>.random_ysrk   r   r  )r7   r;   r<   repeatr&   r   )rG  rJ  rL  ZarrrG   rF   rH   rK  rI   test_matthews_corrcoef_overflow  s    rN  c            
   	   C   sR  t dd\} }}t| |d d\}}}}t|dddgd t|dd	d
gd t|dddgd t|dddg 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 5 Q R X tt	 t| |dd W 5 Q R X tt	 t| |dd W 5 Q R X tt	 t
| |ddd W 5 Q R X t| |dddgd d\}}}}t|dddgd t|dd
d gd t|dddgd t|dddg d S )!NFr   r   (\?gQ?gzG?r-   gHzG?g
ףp=
?rS   gQ?g333333?r   rL   rR   rU   r2   r   r   g(\?r   r   gRQ?r   gGz?r   r   r   r   r   r   g=
ףp=?r   )rJ   r   r'   r(   r   r   r   r   r   r   r   )
rG   rF   re   rD   r   r   r   r   r   r   rH   rH   rI   )test_precision_recall_f1_score_multiclass  sT       rQ  r   r   r   r   r   c                 C   s   t ddddgg}t ddddgg}t||ddddgg | d\}}}}t|d t|d t|d | d krt|ddddg d S )Nr2   r   r   r-   )r\   warn_forr   )r7   r   r   r(   )r   rG   rF   rD   r   r   r   rH   rH   rI   ;test_precision_refcall_f1_score_multilabel_unordered_labels  s      
  


rS  c            
      C   s  t dddddddddddddddg} t dddddddddddddddg}t| |d d\}}}}t| |dd\}}}}|t |kst|t |kst|t |kstt| |dd\}}}}t | }	|t j||	dkst|t j||	dkst|t j||	dkstd S )Nr   r2   r   r   r   r  )r7   r   r   r   ra   Zbincountr   )
rG   rF   r   r   r   re   rD   r   r   rP   rH   rH   rI   .test_precision_recall_f1_score_binary_averaged"  s    ((
rT  c               	   C   s   t jdd} zrt ddddddg}t ddddddg}tt||dddd tt||dddd tt||dddd W 5 t jf |  X d S )	Nraise)r   r   r2   r-   r   r   rk   )r7   Zseterrr   r&   r   r   r   )Zold_error_settingsrG   rF   rH   rH   rI   test_zero_precision_recall3  s    rV  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   r2   r   r   r   r   r-   r   rL   )rJ   r   r(   r7   max)rG   rF   re   r   Zextra_labelrH   rH   rI   .test_confusion_matrix_multiclass_subset_labelsD  s    rX  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   s<   t dd\}}}tjt|d t||| d W 5 Q R X d S )NFr   r   r   )rJ   r   r   r   r   )r\   r   rG   rF   re   rH   rH   rI   test_confusion_matrix_errorW  s    	rY  r\   Noner?   
multiclassc                 C   s>   | rt | nd}tj||ftd}tg g | d}t|| d S )Nr   r   r   )r_   r7   r   r:   r   r(   )r\   Zexpected_n_classesexpectedr   rH   rH   rI   *test_confusion_matrix_on_zero_length_inpute  s    r^  c                  C   s>  dddg} t t| }t| | }|jt jks2tt jt jt j	fD ],}t| | |j
|ddd}|jt jksBtqBt jt jd tfD ],}t| | |j
|ddd}|jt jkstqt jt| dt jd}t| | |d}|d dkst|d	 d
kstt jt| dt jd}t| | |d}|d dks(t|d	 dks:td S )Nr   r2   F)copyr   l    r\  r   r   rI  l    l    )r7   Zonesr_   r   r   int64ra   Zbool_Zint32Zuint64ZastypeZfloat32float64objectfullZuint32)rA   weightr   r   rH   rH   rI   test_confusion_matrix_dtypeo  s$    

rg  r   ZInt64ZFloat64booleanc                 C   sv   t d}tdddddddddg	}|j|| d}|jdddddddddg	dd}t||}t||}t|| dS )zkChecks that confusion_matrix works with pandas nullable dtypes.

    Non-regression test for gh-25635.
    pandasr2   r   r\  rb  N)r   Zimportorskipr7   r   Seriesr   r(   )r   pdZ	y_ndarrayrG   Zy_predictedoutputZexpected_outputrH   rH   rI   %test_confusion_matrix_pandas_nullable  s    
 

rm  c                  C   sL   t  } t| dd\}}}d}t||tt| j| jd}||ksHtd S )NFrK   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
r\   r]   	r	   r3   rJ   r   r7   r8   r_   r]   ra   rd   rG   rF   re   rf   rg   rH   rH   rI   %test_classification_report_multiclass  s    rq  c               
   C   sL   dddddddddg	dddddddddg	 } }d}t | |}||ksHtd S )Nr   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   ra   )rG   rF   rf   rg   rH   rH   rI   .test_classification_report_multiclass_balanced  s    .
rr  c                  C   s8   t  } t| dd\}}}d}t||}||ks4td S )NFrK   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	   r3   rJ   r   ra   rp  rH   rH   rI   :test_classification_report_multiclass_with_label_detection  s
    
rs  c                  C   sN   t  } t| dd\}}}d}t||tt| j| jdd}||ksJtd S )NFrK   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   )r\   r]   digitsro  rp  rH   rH   rI   1test_classification_report_multiclass_with_digits  s    ru  c                  C   sz   t dd\} }}tdddg|  } tdddg| }d}t| |}||ksRtd}t| |dd	d
gd}||ksvt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
rq   rr   rs   r]   rJ   r7   r   r   ra   )rG   rF   re   rf   rg   rH   rH   rI   7test_classification_report_multiclass_with_string_label  s    
r{  c                  C   sN   t dd\} }}tdddg}||  } || }d}t| |}||ksJt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
rz  rG   rF   re   r\   rf   rg   rH   rH   rI   8test_classification_report_multiclass_with_unicode_label  s    
r}  c                  C   sN   t dd\} }}tdddg}||  } || }d}t| |}||ksJtd S )NFr   rv  Zgreengreengreengreengreenrx  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
rz  r|  rH   rH   rI   <test_classification_report_multiclass_with_long_string_label0  s    
r~  c               	   C   s\   dddddg} dddddg}dddg}d}t jt|d t| |ddg|d W 5 Q R X d S )	Nr   r-   class 0class 1class 2z6labels size, 2, does not match size of target_names, 3r   rn  )r   r   r   r   )rG   rF   r]   r|   rH   rH   rI   =test_classification_report_labels_target_names_unequal_lengthG  s    
r  c               	   C   sV   dddddg} dddddg}dddg}d}t jt|d t| ||d W 5 Q R X d S )	Nr   r-   r  r  r  zaNumber of classes, 2, does not match size of target_names, 3. Try specifying the labels parameterr   ry  )r   r   r   r   )rG   rF   r]   r   rH   rH   rI   @test_classification_report_no_labels_target_names_unequal_lengthQ  s    
r  c                  C   sN   d} d}t d|| dd\}}t d|| dd\}}d}t||}||ksJtd S )Nr   r  r2   r   )rC   rB   rE  r1   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   ra   )rE  rB   re   rG   rF   rf   rg   rH   rH   rI   %test_multilabel_classification_report_  s"       
   

r  c                  C   s   t dddgdddgg} t dddgdddgg}t| |dksFtt| | dksXtt||dksjtt|t |dkstt| t | dkstt| t | jdkstt|t | jdkstd S r~   )r7   r   r    ra   r   r   r6   r   rH   rH   rI   $test_multilabel_zero_one_loss_subset~  s    r  c                  C   sV  t dddgdddgg} t dddgdddgg}t ddg}t| |dksTtt| | dksftt||dksxtt|d| dkstt| d|  dkstt| t | jdkstt|t | jdkstt| ||ddkstt| d| |dd	ks
tt| t | |ddks(tt| d |d t| d |d ksRtd S )
Nr   r2   r   UUUUUU?r   r   r   gUUUUUU?gUUUUUU?)r7   r   r   ra   r   r6   
zeros_like
sp_hamming)r   r   wrH   rH   rI   test_multilabel_hamming_loss  s    r  c               	   C   sj  t dddddg} t dddddg}d}tjt|d t| |ddd W 5 Q R X t dddgdddgg} t dddgdddgg}d}tjt|d t| |dd	d W 5 Q R X t dddddg} t dddddg}d
}tjt|d t| |dd W 5 Q R X d}tjt|d t| |dd W 5 Q R X d}tjt|d t| |ddd W 5 Q R X d S )Nr   r2   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]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   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   )r7   r   r   r   r   r   r   r   )rG   rF   r   Zmsg1msg2msg3r|   rH   rH   rI   test_jaccard_score_validation  s0    r  c              	   C   s$  t dddgdddgg}t dddgdddgg}t||dddksJtt||dddks`tt||dddksvtt|t |dddkstt|t |dddkstt|t |jdddkstt|t |jdddkstt dddgdddgg}t dddgdddg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 dddg t dddgdddgg}t dddgdddgg}tt||ddd tt||ddd d}t	j
t|d t||dgdd W 5 Q R X d}t	j
t|d t||dgdd W 5 Q R X d}t	jt|d6 tt ddggt ddggdddkstW 5 Q R X d}t	jt|dB tt ddgddggt ddgddggdddkstW 5 Q R X t| r td S )Nr   r2   r   r   r   r   r   r   r   g?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.)r7   r   r   ra   r   r   r6   r&   r(   r   r   r   r   r   r   )recwarnr   r   rG   rF   r  r  r|   rH   rH   rI   test_multilabel_jaccard_score  sn       $	r  c              	   C   sb  ddddddddg}ddddddddg}dddg}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 ]2}t|	|
D ]"\}}t|||d|||d qqt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sFt
W 5 Q R X t| r^t
d S )Nantcatbirdr   r2   r-   )r   r   r   Nr   r   r   )r"   r=   Z	transformr   r   zipr&   r7   r   r*   ra   r   )r  rG   rF   r\   Zlbr   r   Zmulti_jaccard_scoreZbin_jaccard_scoreZmulti_labels_listZbin_labels_listr   Zm_labelZb_labelrH   rH   rI   test_multiclass_jaccard_score  s:    



	$

"r  c              	   C   s   t dgdgdddkstd}tjt|d$ t ddgddgdddksLtW 5 Q R X t dgdgdddd	ksrttdddddg}tdddddg}tt ||ddd
 tt ||dddd t| rtd S )Nr2   r   r?   r   rk   zOJaccard is ill-defined and being set to 0.0 due to no true or predicted samplesr   r   r   r   r  r   )	r   ra   r   r   r   r7   r   r&   r   )r  r|   rG   rF   rH   rH   rI   !test_average_binary_jaccard_score:  s    ( r  c               	   C   sx   t dddgdddgg} t dddgdddgg}d}tjt|d( t| |ddd}|tdksjtW 5 Q R X d S )	Nr2   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   rp   r   ro   rk   )r7   r   r   r   r   r   r   ra   )rG   rF   r|   scorerH   rH   rI   (test_jaccard_score_zero_division_warningQ  s    r  zzero_division, expected_scorer`  )r2   r   c              	   C   sz   t dddgdddgg}t dddgdddgg}t " tdt t||d| d}W 5 Q R X |t|ksvt	d S )Nr2   r   r  r   r  )
r7   r   rw   rx   r  r   r   r   r   ra   )ro   Zexpected_scorerG   rF   r  rH   rH   rI   *test_jaccard_score_zero_division_set_value`  s    
   r  c                  C   sf  t ddddgddddgddddgg} t ddddgddddgddddgg}t| |d d\}}}}t|ddddgd t|ddddgd t|ddddgd t|ddddgd t| |dd d	}|}t|dd
ddgd t| |dd\}}}}t|d t|d t|d |d ks ttt| |ddd	t | t| |dd\}}}}t|d t|d t|d |d ks~ttt| |ddd	d| | d| |   t| |dd\}}}}t|d t|d t|d |d ksttt| |ddd	t j||d t| |dd\}}}}t|d t|d t|d |d ksLttt| |ddd	d d S )Nr2   r   r   rk   r   r   r-   r   r   r   rO  r   g      ?g?r   r   r   r   r  r   	r7   r   r   r'   r   r&   ra   r   r   rG   rF   rD   r   r   r   f2rP   rH   rH   rI   +test_precision_recall_f1_score_multilabel_1m  sV    ((


 








r  c                  C   sh  t ddddgddddgddddgg} t ddddgddddgddddgg}t| |d d\}}}}t|ddddgd t|ddddgd t|ddddgd t|ddddgd t| |dd d	}|}t|dd
ddgd t| |dd\}}}}t|d t|d t|d |d ks ttt| |ddd	d| | d| |   t| |dd\}}}}t|d t|d t|d |d ksttt| |ddd	t | t| |dd\}}}}t|d t|d t|d |d ksttt| |ddd	t j||d t| |dd\}}}}t|d t|d t|d |d ksLttt| |ddd	dd d S )Nr2   r   r   rk   r   r-   r   gQ?r  皙?r         ?r   r   r   g      ?r  r   rQ   r  r   g&S?r  r  rH   rH   rI   +test_precision_recall_f1_score_multilabel_2  s^    ((





 





  r  z%zero_division, zero_division_expected)rp   r   rI  c                 C   s  t ddddgddddgddddgg}t ddddgddddgddddgg}t||d | d\}}}}t||dddgd t|ddd|gd t |sdnt j}t||dd|gd t|ddddgd t||dd | d	}	|}
t|	|d
d|gd t||d| d\}}}}t |rdn|}dt |  }t|d| |  t|d| |  dt |shdnd }t|| |d ksttt||dd| d	t	|	d d t||d| d\}}}}t|d t|d t|d |d ksttt||dd| d	d| | d| |   t||d| d\}}}}t||dkr@dnd t|d t |s`dnd}t|d|  |d ksttt||dd| d	t	|	|
d t||dd\}}}}t|d t|d t|d |d kstddt jdi}tt||dd| d	|
| dd d S )Nr   r2   r  r   rk   r-   r   r   r   r   ro   r  r   r         ?g?r   r  r   rT   r   r   r   g@r   r   rQ   gZd;O?gZd;O?)r7   r   r   r'   r#  rl   r   r&   ra   r+   get)ro   Zzero_division_expectedrG   rF   rD   r   r   r   Z
expected_fr  rP   Zvalue_to_sumZvalues_to_averageZexpected_resultrH   rH   rI   7test_precision_recall_f1_score_with_an_empty_prediction  s    ((      

   


       
    



    
r  r   c                 C   s   t d}t |}tt|||| |d\}}}}tt||| ||d}	|d ksPtt |r~||||	fD ]}
t |
sftqfd S t|}t	|| t	|| t	|| t	|	t| d S )NrU   r   r   r   ro   r  )
r7   r   r  r)   r   r   ra   r#  rc   r&   )r   r   ro   rG   rF   rD   r   r   r   fbetari   rH   rH   rI   "test_precision_recall_f1_no_labelsT  s8    





r  c           	   	   C   s   t d}t |}t}tt |||| dd\}}}}W 5 Q R X t|d t|d t|d |d kspttt t	||| dd}W 5 Q R X t|d d S )Nr  r   rP  r   )
r7   r   r  r   r   r   r   r&   ra   r   )	r   rG   rF   funcrD   r   r   r   r  rH   rH   rI   1test_precision_recall_f1_no_labels_check_warnings{  s    

"


r  c                 C   s   t d}t |}tt||d d| d\}}}}tt||dd | d}t | } t|| | | gd t|| | | gd t|| | | gd t|dddgd t|| | | gd d S )Nr  r   r  r  r-   r   )r7   r   r  r)   r   r   rc  r'   )ro   rG   rF   rD   r   r   r   r  rH   rH   rI   /test_precision_recall_f1_no_labels_average_none  s0    


     
r  c               	   C   s   t d} t | }tt t| |d dd\}}}}W 5 Q R X t|dddgd t|dddgd t|dddgd t|dddgd tt t| |dd d}W 5 Q R X t|dddgd d S )Nr  r2   rP  r   r-   r  )	r7   r   r  r   r   r   r   r'   r   )rG   rF   rD   r   r   r   r  rH   rH   rI   4test_precision_recall_f1_no_labels_average_none_warn  s     


   r  c               
   C   s  t t } }dD ]t}d}tj||d  | dddgdddg|d W 5 Q R X d}tj||d  | dddgdddg|d W 5 Q R X qd	}tj||d8 | tddgddggtddgddggd
d W 5 Q R X d}tj||d8 | tddgddggtddgddggd
d W 5 Q R X d}tj||d8 | tddgddggtddgddggdd W 5 Q R X d}tj||d8 | tddgddggtddgddggdd W 5 Q R X d}tj||d | ddgddgdd W 5 Q R X d}tj||d | ddgddgdd W 5 Q R X tjdd^}td t ddgddgdd d}t	|
 j|ksvtd}t	|
 j|kstW 5 Q R X d S )NNr   r   zPrecision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.r   r   r2   r-   r   zRecall and F-score are ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.zPrecision and F-score are ill-defined and being set to 0.0 in samples with no predicted labels. Use `zero_division` parameter to control this behavior.r   zRecall and F-score are ill-defined and being set to 0.0 in samples with no true labels. Use `zero_division` parameter to control this behavior.zPrecision and F-score are ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.r   zRecall and F-score are ill-defined and being set to 0.0 due to no true samples. Use `zero_division` parameter to control this behavior.r   r?   Tru   always)r   r   r   r   r7   r   rw   rx   r  ry   poprz   ra   )r   r  r   r|   rv   rH   rH   rI   test_prf_warnings  sV    
$&<<<<  
r  c              	   C   s  t }dD ]@}t|dddgdddg|| d t|dddgdddg|| 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 tjd
d:}td t ddgddgd	| d t|dkstW 5 Q R X d S )Nr  r   r2   r-   r  r   r   r   r?   Tru   r  )	r   r)   r7   r   rw   rx   r  r_   ra   )ro   r   r   rv   rH   rH   rI   )test_prf_no_warnings_if_zero_division_set.  s            		        
   r  c              	   C   s   t ttddgddggtddgddggd| d 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rt| j	d	kst
nt|dkst
tddgddg | dkrt| j	d	kst
W 5 Q R X d S )
Nr2   r   r   r  Tru   r  rp   zzRecall is ill-defined and being set to 0.0 due to no true samples. Use `zero_division` parameter to control this behavior.)r)   r   r7   r   rw   rx   r  ry   r  rz   ra   r_   ro   rv   rH   rH   rI   test_recall_warningsn  s6    
r  c              	   C   s   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rlt| jd	ks|t	nt
|dks|t	tddgddg | dkrt| jd	kst	W 5 Q R X tttddgddggtddgddggd| d d S )
NTru   r  r2   r   r   r  rp   zPrecision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.)rw   rx   r  r   r7   r   ry   r  rz   ra   r_   r)   r  rH   rH   rI   test_precision_warnings  s6    
r  c              	   C   s.  t jdd}t d tttddfD ]}|tddgddggtddgddggd| d	 t|dksrt	|tddgddggtddgddggd| d	 t|dkst	|tddgddggtddgddggd| d	 | d
krt
| jdkst	q*t|dks*t	q*W 5 Q R X d S )NTru   r  r-   r   r2   r   r   r  rp   zF-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.)rw   rx   r  r   r   r   r7   r   r_   ra   ry   r  rz   )ro   rv   r  rH   rH   rI   test_fscore_warnings  s:    


r  c            
      C   s   ddddg} ddddg}d}t dddgdddgdddgg}t dddgdddgdddgg}d}| ||f|||ffD ]H\}}}tttttddfD ](}	tjt	|d |	|| W 5 Q R X qqxd S )	Nr2   r-   r   r  r   r  r   r   )
r7   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_indrG   rF   r|   ri   rH   rH   rI   'test_prf_average_binary_data_non_binary  s$    ""
r  c               *   C   s~  d} d}d}d}d}d}| t dddgdddgdddggf| t ddgddgddggf|d	d
dgf|dddgf|dddg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
}| | 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k
r   ||
|f }Y nX |d krtt t|	| W 5 Q R X ||
krjd||
}tjt|d t|	| W 5 Q R X n>|||| fkr>d|}tjt|d t|	| W 5 Q R X nt|	|\}}}||kst	|
dr|jdkst	|jdkst	n t|t |	 t|t | tt t|	d d | W 5 Q R X qddg}	ddg}d}tjt|d t|	| W 5 Q R X d S )Nzmultilabel-indicatorr[  r?   Z
continuouszmulticlass-multioutputzcontinuous-multioutputr   r2   r-   r   rk   r  r   r   r  g?g      @)rM  z@Classification metrics can't handle a mix of {0} and {1} targetsr   z{0} is not supportedZ
multilabelZcsrr   )r2   r-   )r   r-   r   )r-   )r   r-   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.)r7   r   r   KeyErrorr   r   r   r!   formatra   
startswithr(   Zsqueeze)ZINDZMCZBINZCNTZMMCZMCNZEXAMPLESZEXPECTEDZtype1r   Ztype2r   r]  r   Zmerged_typeZy1outZy2outr|   rH   rH   rI   test__check_targets	  s    $                     

 
 r  c                  C   s*   ddg} ddg}t | |d dks&td S )Nr   r2   r   r[  )r!   ra   r
  rH   rH   rI   Atest__check_targets_multiclass_with_both_y_true_and_y_pred_binaryf	  s    r  c                  C   sp   t ddddg} t ddddg}t| |dks6tt dd	d	dg} t ddddg}t| |dksltd S )
Nr   r2   g      !r   r  g333333ӿr   r   r-   )r7   r   r   ra   rG   pred_decisionrH   rH   rI   test_hinge_loss_binarym	  s    r  c                  C   s6  t ddddgddddgddd	dgdd	ddgd
dddgddd	dgg} t ddddd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s2td S )N
ףp=
?(\ſ(\GzgHzGgGz׿Q޿333333RQؿzGHzGHzGѿQ?r   r2   r-   r   r   r   outr7   r   clipr   r   ra   )r  rG   dummy_lossesdummy_hinge_lossrH   rH   rI   test_hinge_loss_multiclassw	  s,    








r  c               	   C   sp   t ddddg} t ddddgdd	d
dgddddgddddgg}d}tjt|d t| | W 5 Q R X d S )Nr   r2   r-   gRQ?g rh?g(\gffffffr  r  r  r  r  r  r  r  zDPlease include all labels in y_true or pass labels as third argumentr   )r7   r   r   r   r   r   )rG   r  error_messagerH   rH   rI   :test_hinge_loss_multiclass_missing_labels_with_labels_none	  s    



	r  c               
   C   s   t dddddddg} t dddddddg}d}tjtt|d t| |d W 5 Q R X t ddgddgddgddgddgddgddgg}dddg}d}tjtt|d t| ||d W 5 Q R X d S )	Nr-   r2   r   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  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))rG   r  r\   )r7   r   r   r   r   reescaper   )rG   r  r  r\   rH   rH   rI   <test_hinge_loss_multiclass_no_consistent_pred_decision_shape	  s    4
r  c               
   C   s&  t ddddgddddgddddgddddgddddgg} t d	d
dd
dg}t d	d
d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  g}t j|d	d |d t |}t|| |d|ks"td S )Nr  r  r  r  皙r  r  r  r   r2   r-   r   r   r  r   r  r  rG   r\   r  r  rH   rH   rI   .test_hinge_loss_multiclass_with_missing_labels	  s*    




		
r  c               	   C   s  t dddgdddgdddgdd	d
gdddgg} t dddddg}t dd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  g}t j|dd |d t |}tt|| |d| d S )Nr  r  r  g333333ÿr  r  r  r  g(\gzGڿr   r-   r2   r   r   r  r   )r7   r   r  r   r&   r   r  rH   rH   rI   @test_hinge_loss_multiclass_missing_labels_only_two_unq_in_y_true	  s0    		
 r  c               
   C   s*  ddddddg} ddddgd	d
ddgddd
dgd	d
ddgddddgddd
dg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s&td S )Nrv  rw  rx  whiter  r  r  r  r  r  r  r  r  r  r  r  r2   r   r-   r   r   r   r  r  )rG   r  r  r  rH   rH   rI   +test_hinge_loss_multiclass_invariance_lists	  s(    







r  c            
   
   C   sJ  ddddddg} 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|| dddg} dddgdddgdddgg}t| |dd}t|d | d9 } |d9 }t| |dd}t|ddd d}t |dk}t	t
 t| |ddd}W 5 Q R X tj	t|d  t|t| t |dd W 5 Q R X t	t
& tddgddgdddks~tW 5 Q R X t	t
( tddgddgddt jkstW 5 Q R X t	t
( tddgddgddt jkstW 5 Q R X t	t
< tdddgdddgdddgdddggdddks:tW 5 Q R X t	t
> tdddgdddgdddgdddggddt jkstW 5 Q R X dddg} ddgddgddgg}tt t| | W 5 Q R X dd d dg} ddgddgddgddgg}tj	t|d t| |}W 5 Q R X t|d!d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 5 Q R X ddgddgddgg}d#}t|t| |f t t |d d df  }t| |ddgd$}t|| dddg} dddgdddgdddgg}	tj	t|d t| |	ddd%gd$}W 5 Q R X t|d&dd d S )'Nnoyesr   r   rS   g{Gz?gGz?r   r  gMbP?g+?r2   r   r-   r   r   r   r   Tr   g躕ʀ?Fg.L`@r   r   y_pred values do not sum to one)r   epsr   r  r   hamspamL7?zly_true contains only one label \(2\). Please provide the true labels explicitly through the labels argument.zBFound input variables with inconsistent numbers of samples: [3, 2]r   r   gPv0?)r7   r   r   r   r   Zlogpmfr&   Zasarrayr   r   FutureWarningr   r  ra   r   r   r   log)
rG   rF   lossZ	loss_trueZuser_warning_msgr   Z	error_strZtrue_log_lossZcalculated_log_lossZy_score2rH   rH   rI   test_log_loss
  sv    &
*


$*,,@0


r  c                 C   s:   t jddg| d}| }t||dd}t |s6tdS )zCheck the behaviour of `eps="auto"` that changes depending on the input
    array dtype.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/24315
    r   r2   r\  autor  N)r7   r   r_  r   isfinitera   )Zglobal_dtyperG   rF   r  rH   rH   rI   test_log_loss_eps_autoo
  s    r  c                  C   s<   t jddgt jd} |  }t| |dd}t |s8tdS )z2Check the behaviour of `eps="auto"` for np.float16r   r2   r\  r  r  N)r7   r   Zfloat16r_  r   r  ra   )rG   rF   r  rH   rH   rI   test_log_loss_eps_auto_float16|
  s    r  c            
   
   C   s   t ddddg} 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k
rt   Y nX |D ]L\}}|| || }}tj	t
dd t||}	W 5 Q R X t|	ddd qzd S )Nr  r  r   r   r   r   r   r   r   )	DataFramerj  r  r   r  r   r   )r7   r   r$   ri  r  rj  r  ImportErrorr   r   r   r   r&   )
Zy_trZy_prtypesr  rj  ZTrueInputTypeZPredInputTyperG   rF   r  rH   rH   rI   test_log_loss_pandas_input
  s    "
r  c               	   C   s  t ddddddg} t ddddddg}t| | d	 t|  }tt| | d
 tt| || ttd|  || ttd	|  d || tt	 t| |dd   W 5 Q R X tt	 t| |d  W 5 Q R X tt	 t| |d  W 5 Q R X t ddd	dg} t ddddg}d}tjt	|d t| | W 5 Q R X 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 )Nr   r2   r   r   rS   r   r   gffffff?r-   rk   r   r   r   zMOnly binary classification is supported. The type of the target is multiclassr   r   g{Gz?r  Zfoobarr   )
r7   r   r   Znormr_   r&   r   r   r   r   )rG   rF   Z
true_scorer  rH   rH   rI   test_brier_score_loss
  s0    r  c               	   C   s8   d} t jt| d tdddgdddg W 5 Q R X d S )Nz%y_pred contains classes not in y_truer   r   r2   )r   r   r   r   r   rH   rH   rI   #test_balanced_accuracy_score_unseen
  s    r  zy_true,y_predrq   rr   rs   c              	   C   s   t | |dt| d}t  t| |}W 5 Q R X |t|ksDtt| |dd}t| t| | d }||| d|  kstd S )Nr   r   T)adjustedr   r2   )	r   r7   uniquer*   r   r   r   ra   Z	full_like)rG   rF   Zmacro_recallZbalancedr  ZchancerH   rH   rI   test_balanced_accuracy_score
  s    	   r  r   )FTr)  )rk   r   )zeroonec                 C   sn   t jd}d|d  }}|j||dd}| tkr@|j|d}n| }| |||d}t t |rjt	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.
    *   r  r   T)r(  replacer'  r   N)
r7   r;   r<   choicer   uniformr_  anyr#  ra   )ri   r   rE   rB   r   rG   rF   r$  rH   rH   rI   *test_classification_metric_pos_label_types
  s    r  )NF)r  rw   	functoolsr   	itertoolsr   r   r   numpyr7   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    Zsklearn.metrics._classificationr!   Zsklearn.preprocessingr"   r#   Zsklearn.utils._mockingr$   Zsklearn.utils._testingr%   r&   r'   r(   r)   r*   Zsklearn.utils.extmathr+   Zsklearn.utils.validationr,   rJ   rj   rn   markZparametrizerl   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;  rA  rF  rN  rQ  rS  rT  rV  rX  rY  r^  rg  rm  rq  rr  rs  ru  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  rH   rH   rH   rI   <module>   s  X 0A
"

-



#)	




-


	
		
'#8
!:


  

#

(M%

B
@^$

 b
?
&
'
'b
 Z	#
 