U
    _»{juˆ ã                   @   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/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZD �ddd„ZEdd„ ZFdd„ ZGe
jH Iddd de	jJg¡dd„ ƒZKdd „ ZLd!d"„ ZMe@d#d$„ ƒZNe@d%d&„ ƒZOe@d'd(„ ƒZPd)d*„ ZQe
jH Id+d d dd,ge	 Rd-d.d/gd0d1d1gd/d2d/gd.d1d3gg¡fd d d d dddddddgd d/d/d0d3d4d4d5d5ddgfg¡d6d7„ ƒZSe
jH Id+d,d,ddd ge	 Rd.d1d3gd.d1d3gd0d3d1gd0d3d1gd2d3d1gg¡fd ddgd3d3d4gfg¡d8d9„ ƒZTd:d;„ ZUd<d=„ ZVd>d?„ ZWd@dA„ ZXdBdC„ ZYdDdE„ ZZe
jH IdFdGdHdIdJg¡dKdL„ ƒZ[dMdN„ Z\e
jH IdOe	 Rd d d d d d g¡e	 Rd d d d d d g¡dPœdQfe	 Rdddd d d g¡e	 Rdddd d d g¡dPœdRfe	 Rdddd d d g¡e	 Rd d d d d d g¡dPœdSfe	 Rdddd d d g¡e	 Rd d d dddg¡dPœdTfe	 Rd d d d d d g¡e	 Rdddd d d g¡dPœdUfg¡dVdW„ ƒZ]e
jH IdXe	 Rd dd dd g¡e	 Rddd d d,g¡dPœdYfg¡dZd[„ ƒZ^d\d]„ Z_d^d_„ Z`d`da„ Zae
jH Idd de	jJg¡e
jH Idbd gd gfg g fg¡e
jH Idce"ee#ddd�e,e-g¡dedf„ ƒƒƒZbe
jH Idbd gd gfg g fg¡e
jH Idce"ee#ddd�e,e-g¡dgdh„ ƒƒZcdidj„ Zddkdl„ Zedmdn„ Zfdodp„ Zge
jH Idqdrdsg¡dtdu„ ƒZhdvdw„ Zie
jH Idxdydzd{d|dg¡d}d~„ ƒZjdd€„ Zkd�d‚„ Zldƒd„„ Zme
jHjId…g d†fd‡dˆgd‰fgdŠd‹gdŒ�d�dŽ„ ƒZne
jHjId�dd dgd dd,gfd�d‘d’gdŒ�d“d”„ ƒZod•d–„ Zpe
jH Id—d˜d™dšg¡d›dœ„ ƒZqd�dž„ ZrdŸd „ Zsd¡d¢„ Ztd£d¤„ Zud¥d¦„ Zvd§d¨„ Zwd©dª„ Zxd«d¬„ Zyd­d®„ Zze@d¯d°„ ƒZ{d±d²„ Z|d³d´„ Z}dµd¶„ Z~d·d¸„ Zd¹dº„ Z€d»d¼„ Z�d½d¾„ Z‚e
jH Id¿dÀdÁg¡dÂdÃ„ ƒZƒe@dÄdÅ„ ƒZ„e@dÆdÇ„ ƒZ…e@e
jH IdÈdÉdÀdÊe	jJe	jJfg¡dËdÌ„ ƒƒZ†e
jH IdÍdg¡e
jH Idxd{dzd|dyg¡e
jH Idd de	jJg¡dÎdÏ„ ƒƒƒZ‡e
jH Idxd{dzd|dyg¡dÐdÑ„ ƒZˆe
jH Idd de	jJg¡dÒdÓ„ ƒZ‰dÔdÕ„ ZŠdÖd×„ Z‹e
jH Idd de	jJg¡dØdÙ„ ƒZŒe
jH Iddd de	jJg¡dÚdÛ„ ƒZ�e
jH Iddd de	jJg¡dÜdÝ„ ƒZŽe
jH Iddd de	jJg¡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ñ„ Z˜dòdó„ Z™dôdõ„ Zšdöd÷„ Z›dødù„ Zœdúdû„ Z�düdý„ Zždþdÿ„ ZŸe
jH I�d �d�d�d�dg�d�d�d�dgf�d�d�d�dg�d�d�d�dgf�d�d�d�dg�d�d�d�dgfg¡�d�d„ ƒZ e
jH Idce&e"ee#d3dd�e+e,e-eg¡e
jH I�d�d�d�d	�d
g¡�d�d„ ƒƒZ¡e
jH I�de(e"e	jJ�d�e(e#d,e	jJ�d�e(e,e	jJ�d�e(e-e	jJ�d�g¡�d�d„ ƒZ¢dS (  é    N)Úpartial)ÚchainÚpermutationsÚproduct)Úlinalg)Úhamming)Ú	bernoulli)ÚdatasetsÚsvm)Úmake_multilabel_classification)ÚUndefinedMetricWarning)Úaccuracy_scoreÚaverage_precision_scoreÚbalanced_accuracy_scoreÚbrier_score_lossÚclass_likelihood_ratiosÚclassification_reportÚcohen_kappa_scoreÚconfusion_matrixÚf1_scoreÚfbeta_scoreÚhamming_lossÚ
hinge_lossÚjaccard_scoreÚlog_lossÚmake_scorerÚmatthews_corrcoefÚmultilabel_confusion_matrixÚprecision_recall_fscore_supportÚprecision_scoreÚrecall_scoreÚzero_one_loss)Ú_check_targets)Úcross_val_score)ÚLabelBinarizerÚlabel_binarize)ÚDecisionTreeClassifier)Ú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 )
z¼Make 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© rK   úh/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/metrics/tests/test_classification.pyÚmake_prediction:   s*    


*rM   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s’t	‚|D ]x}|dkrÊt
|| tƒs´t	‚|| || ksÈt	‚q–||  ¡ ||  ¡ ksæt	‚|| D ]}t|| | || | ƒ qîq–t
|d d tƒ�s(t	‚t
|d d tƒ�s@t	‚t
|d d tƒ�sXt	‚t
|d d tƒ�spt	‚d S ) NF©rA   rB   g§7½éMoê?gUUUUUUé?gh£¾³Qßé?é   )Ú	precisionÚrecallúf1-scoreÚsupportçUUUUUUÕ?gÆcŒ1Æ¸?g433333Ã?é   g³¦¬)kÊÚ?çÍÌÌÌÌÌì?ç“$I’$Iâ?é   gCÜFÁQà?g�¼cÕà?g¿��Æ¢ã?éK   ©rR   rP   rQ   rS   gá?gDÖ~WGÞ?g]žè3«pà?)ÚsetosaZ
versicolorZ	virginicaú	macro avgÚaccuracyúweighted avgT)ÚlabelsÚtarget_namesÚoutput_dictr]   r[   rP   r\   rS   )r	   r6   rM   r   r:   r;   Úlenr`   ÚkeysÚAssertionErrorÚ
isinstanceÚfloatr)   r=   )ÚirisrJ   rI   Ú_Úexpected_reportÚreportÚkeyÚmetricrK   rK   rL   Ú,test_classification_report_dictionary_outputj   s`    üüüüüæ"û	rm   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r”t| | tƒs~t‚| | || ksØt‚q`| |  ¡ ||  ¡ ks°t‚|| D ]}t|| | | | | ƒ q¸q`d S )NT)rJ   rI   ra   ç        r   rZ   )r]   r\   r^   r]   )	r   r:   Únanre   Údictrd   rc   rf   r)   )rj   ri   rk   rl   rK   rK   rL   Ú2test_classification_report_output_dict_empty_input«   s,    üüørq   Úzero_divisionÚwarnr5   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)rr   ra   rs   r5   z7Use `zero_division` parameter to control this behavior.)ÚwarningsÚcatch_warningsr   rb   rd   ÚstrÚmessage)rr   rJ   rI   ry   ÚitemÚmsgrK   rK   rL   Ú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s‚t‚t| t  | ¡ƒdksšt‚t| t  | j¡ƒdks´t‚t|t  | j¡ƒdksÎt‚d S ©Nr   r5   ç      à?)r:   Úarrayr   rd   Úlogical_notÚzerosr9   ©Úy1Úy2rK   rK   rL   Ú.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©rB   ©Úaverageg\�Âõ(\ç?g333333ë?r0   g)\�Âõ(ì?gÃõ(\�Âå?çš™™™™™é?gR¸…ëQè?é   rŒ   rB   Úbetaé   é   )
rM   r   r*   r+   r,   r   r    r   r)   r   )rJ   rI   rh   rG   ÚrÚfÚsÚkwargsZ	my_assertÚpsÚrsÚfsrK   rK   rL   Ú%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s†t‚dtddgddgƒks t‚dtddgddgƒksºt‚dtddgddgtdƒd�ksÜt‚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ç      ð?r5   r   ©r�   rn   éÿÿÿÿÚinfg     jø@)r   rd   r    r   r   rf   ÚpytestÚapproxrK   rK   rK   rL   Ú+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rÜqÆtt| |dddddg|d�t| |d |d�ƒ qÆqTd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 )Nr5   é   r0   r�   ©Úclassesr   r‘   ©r_   rŒ   rn   rš   r‚   Úmacro)ÚmicroÚweightedÚsamplesr¨   )Nr¥   r¦   r¨   é   rœ   ©rŒ   r_   ç      è?ç«ªªªªªê?)r%   r:   r;   Ú	enumerater    r*   Úmeanr)   rž   ÚraisesÚ
ValueErrorrƒ   r   )rJ   rI   Ú
y_true_binÚ
y_pred_binr7   ÚiÚactualrŒ   rG   r’   r“   rh   rK   rK   rL   Ú$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sÌt‚qÌqTd S )Nr5   r0   r¡   r�   r¢   ©r_   r‚   rš   r‹   r«   r¥   çUUUUUUå?r§   r¦   )r¥   r§   r¦   )	r%   r:   r;   r­   r   r    r*   r)   rd   )	rJ   rI   r±   r²   r7   r³   Z	recall_13Z
recall_allrŒ   rK   rK   rL   Ú&test_precision_recall_f_ignored_labelsJ  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`.r0   r5   r   çffffffæ?çš™™™™™É?çš™™™™™¹?çš™™™™™Ù?ç333333Ó?r�   r‚   z.multiclass-multioutput format is not supported©Úmatch©Ú	pos_labelN)r:   rƒ   rž   r¯   r°   r   )rJ   Úy_scoreÚerr_msgrK   rK   rL   Ú-test_average_precision_score_non_binary_classa  s*    úÿ
úÿ
rÄ   zy_true, y_scorer0   r¹   rº   r»   r¼   r½   r�   r‚   ç333333ã?rV   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.
    r5   N©r   rd   ©rJ   rÂ   rK   rK   rL   Ú-test_average_precision_score_duplicate_values|  s    rÈ   c                 C   s   t | |ƒdkst‚d S )Nrš   rÆ   rÇ   rK   rK   rL   Ú(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 )NzšNote 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¾   r5   r0   r¥   ©rÁ   rŒ   )rž   ÚwarnsÚUserWarningr   ©r   rK   rK   rL   Ú(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   r0   ©Údecimalç=
×£p=â?)r   r+   Úflattenr:   Úsqrtr   r*   )rJ   rI   ÚcmÚtpÚfpÚfnÚtnÚnumZdenZtrue_mccZmccrK   rK   rL   ÚtestÏ  s    
&
z*test_confusion_matrix_binary.<locals>.testc                 S   s   g | ]}t |ƒ‘qS rK   ©r|   ©Ú.0rD   rK   rK   rL   Ú
<listcomp>Ý  s     z0test_confusion_matrix_binary.<locals>.<listcomp>©rM   ©rJ   rI   rh   rÝ   rK   rK   rL   Ú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+   )rJ   rI   r×   rK   rK   rL   rÝ   ä  s    
z5test_multilabel_confusion_matrix_binary.<locals>.testc                 S   s   g | ]}t |ƒ‘qS rK   rÞ   rß   rK   rK   rL   rá   é  s     z;test_multilabel_confusion_matrix_binary.<locals>.<listcomp>râ   rã   rK   rK   rL   Ú'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ƒ |r¨d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Ž   r0   é   Ú0Ú2Ú1r   r5   r¶   Ú3rY   rå   )rJ   rI   Ústring_typer×   r_   rK   rK   rL   rÝ   ð  s*    
 ,ÿ ,ÿüþz9test_multilabel_confusion_matrix_multiclass.<locals>.testc                 S   s   g | ]}t |ƒ‘qS rK   rÞ   rß   rK   rK   rL   rá     s     z?test_multilabel_confusion_matrix_multiclass.<locals>.<listcomp>T)rñ   )Frâ   rã   rK   rK   rL   Ú+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||	ƒ qÒqÊ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ƒ 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_matrixr5   r0   r¡   T©Ú
samplewiser¶   )r_   rö   )Úsample_weightrö   r©   )Zscipy.sparseró   rô   r:   rƒ   r   r+   )ró   rô   rJ   rI   Z
y_true_csrZ
y_pred_csrZ
y_true_cscZ
y_pred_cscr÷   Zreal_cmZtruesÚpredsZ
y_true_tmpZ
y_pred_tmpr×   rK   rK   rL   Ú+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 )Nr5   r   zinconsistent numbers of samplesr¾   r0   ©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)r:   rƒ   rž   r¯   r°   r   )rJ   rI   rÃ   rK   rK   rL   Ú'test_multilabel_confusion_matrix_errors8  s*    ""  ÿ$rû   z%normalize, cm_dtype, expected_results)Útruer“   çµùTUUÕ?)Úpredr“   rý   )Úallr“   g��eÇq¼?)Nr³   r0   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   r5   r0   r©   ©Ú	normalize)Úlistr   r   r   r(   ÚdtypeÚkindrd   )r  Zcm_dtypeZexpected_resultsÚy_testrI   r×   rK   rK   rL   Útest_confusion_matrix_normalizeV  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s�t‚t ¡ �  t dt¡ t || dd� W 5 Q R X d S )	Nr   r5   rü   r   ç       @Úerrorrþ   rš   )	r   Úsumrž   rŸ   rd   rz   r{   ÚsimplefilterÚRuntimeWarning)r  rI   Zcm_trueZcm_predrK   rK   rL   Ú,test_confusion_matrix_normalize_single_classg  s    

r  zparams, warn_msg©rJ   rI   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_msgrK   rK   rL   Útest_likelihood_ratios_warningsz  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Ã   rK   rK   rL   Ú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 )Nr5   r¡   r   rÑ   r0   é
   rÐ   g«ªªªªªö?g_B{	í%ä?gê-�™—q=)Zrtolrš   é   rn   r�   rú   gUUUUUU@gÇqÇqÜ?)r:   rƒ   r   r(   r+   ro   r…   )rJ   rI   ÚposÚnegr÷   rK   rK   rL   Ú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s°t‚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   é(   r5   é<   rX   r  é2   gƒÀÊ¡EÖ?r¡   rÒ   r0   r‘   r¶   rš   é.   é,   é4   é    é   gÉå?¤é?g+‡ÙÎí?r3   ©Úweightsg®Ø_vOî?Z	quadraticgœ¢#¹ü‡î?)r:   rƒ   r   r)   rd   Úappend)r‡   rˆ   ÚkapparK   rK   rL   Ú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   r5   rn   )r   rd   rK   rK   rK   rL   Útest_matthews_corrcoef_naný  s    r$  zy_true, y_predrl   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  ©rr   N)rz   r{   r
  r:   Úisnanrd   )rl   rJ   rI   rr   ÚresultrK   rK   rL   Ú!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.
    rs   r%  rn   N)rž   rË   r   rd   )rl   rJ   rI   r'  rK   rK   rL   Ú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   r0   rX   ©Úsize©r   r5   r  )r:   r>   r?   Úrandintr)   r   Zcorrcoef)rH   rJ   rI   rK   rK   rL   Ú-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   r0   rX   r*  rú   c              	      sX   g | ]P}t ˆƒD ]B}t ˆƒD ]4}ˆ ||f ˆ ||f  ˆ ||f ˆ ||f   ‘qqqS rK   ©Úrange)rà   ÚkÚmÚl©ÚCÚNrK   rL   rá   D  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 rK   r/  ©rà   r“   Úg©r5  r6  r1  rK   rL   rá   N  s
     
   úDtest_matthews_corrcoef_against_jurman.<locals>.<listcomp>.<listcomp>©r	  r:   r0  ©rà   r4  ©r1  rL   rá   L  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 rK   r/  r7  r9  rK   rL   rá   U  s
     
   r:  r;  r<  r4  r=  rL   rá   S  s   þÿr  )r:   r>   r?   r-  Zrandr   rb   r	  r0  rÖ   r   r)   )	rH   rJ   rI   r÷   Zcov_ytypZcov_ytytZcov_ypypZ
mcc_jurmanZmcc_oursrK   r4  rL   Ú%test_matthews_corrcoef_against_jurman8  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   rt   ru   rK   ©rà   r³   rK   rK   rL   rá   a  s     z*test_matthews_corrcoef.<locals>.<listcomp>r0   rX   r*  rš   c                 S   s   g | ]}|d krdnd ‘qS )rt   ru   rK   r?  rK   rK   rL   rá   g  s     rœ   rt   ru   r¢   rn   r5   r  rú   )r:   r>   r?   r-  r)   r   r%   Úwhererb   rž   r¯   rd   )rH   rJ   Z
y_true_invZy_true_inv2Úy_1Úy_2ÚmaskrK   rK   rL   Útest_matthews_corrcoef_  s      ,,rD  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   rt   r‘   c                    s   g | ]}t ˆ | ƒ‘qS rK   )Úchrr?  ©Zord_arK   rL   rá   †  s     z5test_matthews_corrcoef_multiclass.<locals>.<listcomp>rX   r*  rš   r5   r0   g      à¿iôÿÿÿi€  r¡   rn   rú   rœ   )r:   r>   r?   Úordr-  r)   r   rÖ   )	rH   Ú	n_classesrJ   Z
y_pred_badZ
y_pred_minrI   rA  rB  r÷   rK   rF  rL   Ú!test_matthews_corrcoef_multiclass‚  sD    



 ÿ ÿrI  Ún_pointséd   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 )	NišÈ3c                 S   sx   t | |ƒ}|d }|d }|d }t| ƒ}|| | }|| | }|| ||  }	|| d|  d|  }
|	t |
¡ S )N©r5   r5   )r5   r   r,  r5   )r   rb   r:   rÖ   )rJ   rI   Zconf_matrixZtrue_posZ	false_posZ	false_negrJ  Zpos_rateZactivityZmcc_numeratorZmcc_denominatorrK   rK   rL   Úmcc_safe¿  s    
z1test_matthews_corrcoef_overflow.<locals>.mcc_safec                    s8   ˆ   | ¡}|dˆ   | ¡d   }|dk}|dk}||fS )Nrº   r‚   )Zrandom_sample)rJ  Zx_trueZx_predrJ   rI   ©rH   rK   rL   Ú	random_ysË  s
    
z2test_matthews_corrcoef_overflow.<locals>.random_ysrn   rš   r  )r:   r>   r?   Úrepeatr)   r   )rJ  rM  rO  ZarrrJ   rI   rK   rN  rL   Útest_matthews_corrcoef_overflowº  s    rQ  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¸Õ?gáz®GáÚ?r0   gHáz®Gé?g
×£p=
·?rV   gìQ¸…ëé?g333333Ã?rÔ   rO   rU   rX   r5   r¦   rÊ   gö(\�Âõà?r¥   rÅ   gR¸…ëQà?r§   g®GázÞ?r¨   r‚   ©rŒ   r�   r   r¤   g=
×£p=Ú?r»   )rM   r   r*   r+   r   r    r   rž   r¯   r°   r   )
rJ   rI   rh   rG   r’   r“   r”   r–   r—   r˜   rK   rK   rL   Ú)test_precision_recall_f1_score_multiclassÜ  sT       ÿrT  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r‚t|ddddgƒ d S )Nr5   r   r¡   r0   )r_   Úwarn_forrŒ   )r:   rƒ   r   r+   )rŒ   rJ   rI   rG   r’   r“   r”   rK   rK   rL   Ú;test_precision_refcall_f1_score_multilabel_unordered_labels  s      
  ÿ


rV  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sŽt‚|t  |¡ks t‚|t  |¡ks²t‚t| |dd�\}}}}t  | ¡}	|t j||	d�ksèt‚|t j||	d�ksþt‚|t j||	d�k�st‚d S )Nr   r5   r‹   r¥   r§   r  )r:   rƒ   r   r®   rd   ZbincountrŒ   )
rJ   rI   r–   r—   r˜   rh   rG   r’   r“   rS   rK   rK   rL   Ú.test_precision_recall_f1_score_binary_averaged%  s    ((
rW  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   r5   r0   r¥   r‹   rn   )r:   Zseterrrƒ   r)   r   r    r   )Zold_error_settingsrJ   rI   rK   rK   rL   Útest_zero_precision_recall6  s    rY  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   r5   r¶   rè   r‘   r¡   r0   rì   rO   )rM   r   r+   r:   Úmax)rJ   rI   rh   r×   Zextra_labelrK   rK   rL   Ú.test_confusion_matrix_multiclass_subset_labelsG  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   s<   t dd�\}}}tjt|d�� t||| d� W 5 Q R X d S )NFrŠ   r¾   r¶   )rM   rž   r¯   r°   r   )r_   rÃ   rJ   rI   rh   rK   rK   rL   Útest_confusion_matrix_errorZ  s    	r\  r_   ÚNonerB   Ú
multiclassc                 C   s>   | rt | ƒnd}tj||ftd�}tg g | d�}t||ƒ d S )Nr   ©r  r¶   )rb   r:   r…   r=   r   r+   )r_   Zexpected_n_classesÚexpectedr×   rK   rK   rL   Ú*test_confusion_matrix_on_zero_length_inputh  s    ra  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s€t‚q€t jt| ƒdt jd�}t| | |d�}|d dksât‚|d	 d
ksòt‚t jt| ƒdt jd�}t| | |d�}|d dk�s(t‚|d	 dk�s:t‚d S )Nr   r5   F)Úcopyrú   l   ÿÿ r_  ©r   r   rL  l   þÿ l   ÿÿÿÿ éþÿÿÿ)r:   Zonesrb   r   r  Úint64rd   Zbool_Zint32Zuint64ZastypeZfloat32Úfloat64ÚobjectÚfullZuint32)rD   Úweightr×   r  rK   rK   rL   Útest_confusion_matrix_dtyper  s$    

rj  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.
    Úpandasr5   r   r_  re  N)rž   Zimportorskipr:   rƒ   ÚSeriesr   r+   )r  ÚpdZ	y_ndarrayrJ   Zy_predictedÚoutputZexpected_outputrK   rK   rL   Ú%test_confusion_matrix_pandas_nullable�  s    
 

rp  c                  C   sL   t  ¡ } t| dd�\}}}d}t||t t| jƒ¡| jd�}||ksHt‚d S )NFrN   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	   r6   rM   r   r:   r;   rb   r`   rd   ©rg   rJ   rI   rh   ri   rj   rK   rK   rL   Ú%test_classification_report_multiclassŸ  s    ürt  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   r5   r0   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   rd   )rJ   rI   ri   rj   rK   rK   rL   Ú.test_classification_report_multiclass_balanced¹  s    .
ru  c                  C   s8   t  ¡ } t| dd�\}}}d}t||ƒ}||ks4t‚d S )NFrN   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	   r6   rM   r   rd   rs  rK   rK   rL   Ú:test_classification_report_multiclass_with_label_detectionË  s
    
rv  c                  C   sN   t  ¡ } t| dd�\}}}d}t||t t| jƒ¡| jdd�}||ksJt‚d S )NFrN   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`   Údigitsrr  rs  rK   rK   rL   Ú1test_classification_report_multiclass_with_digitsß  s    ûrx  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
rt   ru   rv   ©r`   ©rM   r:   rƒ   r   rd   )rJ   rI   rh   ri   rj   rK   rK   rL   Ú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
r}  ©rJ   rI   rh   r_   ri   rj   rK   rK   rL   Ú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Š   ry  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  rK   rK   rL   Ú<test_classification_report_multiclass_with_long_string_label3  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   r0   úclass 0úclass 1úclass 2z6labels size, 2, does not match size of target_names, 3r¾   rq  )rž   rË   rÌ   r   )rJ   rI   r`   r   rK   rK   rL   Ú=test_classification_report_labels_target_names_unequal_lengthJ  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   r0   r‚  rƒ  r„  zaNumber of classes, 2, does not match size of target_names, 3. Try specifying the labels parameterr¾   r|  )rž   r¯   r°   r   )rJ   rI   r`   rÃ   rK   rK   rL   Ú@test_classification_report_no_labels_target_names_unequal_lengthT  s    
ÿr†  c                  C   sN   d} d}t d|| dd�\}}t d|| dd�\}}d}t||ƒ}||ksJt‚d S )Nr‘   r  r5   r   )rF   rE   rH  r4   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   rd   )rH  rE   rh   rJ   rI   ri   rj   rK   rK   rL   Ú%test_multilabel_classification_reportb  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s‚t‚t| t  | ¡ƒdksšt‚t| t  | j¡ƒdks´t‚t|t  | j¡ƒdksÎt‚d S r�   )r:   rƒ   r!   rd   r„   r…   r9   r†   rK   rK   rL   Ú$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sŽt‚t| d|  ƒdks¤t‚t| t  | j¡ƒdks¾t‚t|t  | j¡ƒdksØt‚t| ||d�dksît‚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   r5   r¡   çUUUUUUÅ?r·   r‚   rú   gUUUUUUµ?gUUUUUUí?)r:   rƒ   r   rd   r…   r9   Ú
zeros_likeÚ
sp_hamming)r‡   rˆ   ÚwrK   rK   rL   Ú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   r5   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]r¾   rB   r0   ©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¨   zšNote 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Ì   )rJ   rI   rÃ   Zmsg1Úmsg2Úmsg3r   rK   rK   rL   Ú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s’t‚t|t  |¡dd�dks®t‚t|t  |j¡dd�dksÌt‚t|t  |j¡dd�dksêt‚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�s®t‚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   r5   r¨   r‹   r«   r¥   r·   r¦   rÅ   g«ªªªªªâ?r0   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   rd   r„   r…   r9   r)   r+   rž   r¯   r°   rË   r   r  )Úrecwarnr‡   rˆ   rJ   rI   r‘  r’  r   rK   rK   rL   Ú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�ƒ qÈqºt 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   r5   r0   )r¥   r§   r¦   Nrª   r§   r‹   )r$   r@   Z	transformr   r   Úzipr)   r:   rƒ   r-   rd   r  )r”  rJ   rI   r_   Zlbr±   r²   Zmulti_jaccard_scoreZbin_jaccard_scoreZmulti_labels_listZbin_labels_listrŒ   Zm_labelZb_labelrK   rK   rL   Ú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| ƒrÐt‚d S )Nr5   r   rB   r‹   rn   zOJaccard is ill-defined and being set to 0.0 due to no true or predicted samplesr¾   rÊ   rš   r«   rŽ  r‚   )	r   rd   rž   rË   r   r:   rƒ   r)   r  )r”  r   rJ   rI   rK   rK   rL   Ú!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 )	Nr5   r   z�Jaccard 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¨   rs   ©rŒ   rr   rn   )r:   rƒ   rž   rË   r   r   rŸ   rd   )rJ   rI   r   ÚscorerK   rK   rL   Ú(test_jaccard_score_zero_division_warningT  s    ÿrž  zzero_division, expected_scorerc  )r5   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 )Nr5   r   r  r¨   rœ  )
r:   rƒ   rz   r{   r
  r   r   rž   rŸ   rd   )rr   Zexpected_scorerJ   rI   r�  rK   rK   rL   Ú*test_jaccard_score_zero_division_set_valuec  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�sêt‚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 )Nr5   r   r‹   rn   r‚   rš   r0   r·   ©r�   rŒ   rR  r¥   g      Ø?g«ªªªªªÚ?r¦   r�   r‘   r§   r  r¨   ©	r:   rƒ   r   r*   r   r)   rd   r®   rŒ   ©rJ   rI   rG   r’   r“   r”   Úf2rS   rK   rK   rL   Ú+test_precision_recall_f1_score_multilabel_1p  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�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	�t j||d�ƒ t| |dd�\}}}}t|dƒ t|dƒ t|dƒ |d k�sLt‚tt| |ddd	�ddƒ d S )Nr5   r   r‹   rn   rš   r0   r‚   g…ëQ¸å?r   çš™™™™™á?r¦   ç      Ð?r�   r‘   r¥   g      À?r‰  r§   rT   r  r¨   g¥½Á&SÅ?r¡  r¢  rK   rK   rL   Ú+test_precision_recall_f1_score_multilabel_2³  s^    ((


þ


 ÿ


þ


  ÿr§  z%zero_division, zero_division_expected)rs   r   rL  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  |¡sžd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�s†t‚tt||dd| d	�t	|	d 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k�r@dndƒ t|dƒ t  |¡�s`dnd}t|d| ƒ |d k�s€t‚tt||dd| d	�t	|	|
d�ƒ t||dd�\}}}}t|dƒ t|dƒ t|dƒ |d k�sât‚ddt jdi}tt||dd| d	�| 
| d¡dƒ d S )Nr   r5   rœ  rš   rn   r0   r‚   r·   ©r�   rŒ   rr   r¥  r¥   r¡   ç      ø?gªªªªªªú?r‘   r  r¦   rW   r�   r§   r«   gªªªªªª@r¨   r‹   rT   gZd;ßOå?gZd;ßOÕ?)r:   rƒ   r   r*   r&  ro   r   r)   rd   r.   Úget)rr   Zzero_division_expectedrJ   rI   rG   r’   r“   r”   Z
expected_fr£  rS   Zvalue_to_sumZvalues_to_averageZexpected_resultrK   rK   rL   Ú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©rX   r¡   ©rŒ   r�   rr   r¨  )
r:   r…   rŠ  r,   r   r   rd   r&  rf   r)   )r�   rŒ   rr   rJ   rI   rG   r’   r“   r”   Úfbetarl   rK   rK   rL   Ú"test_precision_recall_f1_no_labelsW  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š   rS  r   )
r:   r…   rŠ  r   rž   rË   r   r)   rd   r   )	rŒ   rJ   rI   ÚfuncrG   r’   r“   r”   r®  rK   rK   rL   Ú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¨  r0   r   )r:   r…   rŠ  r,   r   r   rf  r*   )rr   rJ   rI   rG   r’   r“   r”   r®  rK   rK   rL   Ú/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¬  r5   rS  r   r0   r   )	r:   r…   rŠ  rž   rË   r   r   r*   r   )rJ   rI   rG   r’   r“   r”   r®  rK   rK   rL   Ú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�s’t‚W 5 Q R X d S )N©Nr§   r¥   z—Precision 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   r5   r0   r‹   z�Recall 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.z—Precision 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¨   z�Recall 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.z�Precision 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¦   z‡Recall 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œ   rB   Trx   Úalways)r   r   rž   rË   r:   rƒ   rz   r{   r
  r|   Úpopr}   rd   )r“   rŒ  rŒ   r   ry   rK   rK   rL   Ú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�s˜t‚W 5 Q R X d S )Nr´  r   r5   r0   rœ  r¨   r¦   rœ   rB   Trx   rµ  )	r   r,   r:   rƒ   rz   r{   r
  rb   rd   )rr   r“   rŒ   ry   rK   rK   rL   Ú)test_prf_no_warnings_if_zero_division_set1  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r¢t| ¡ j	ƒd	ks²t
‚nt|ƒdks²t
‚tddgddgƒ | dkrât| ¡ j	ƒd	ksât
‚W 5 Q R X d S )
Nr5   r   r¦   rœ  Trx   rµ  rs   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    r:   rƒ   rz   r{   r
  r|   r¶  r}   rd   rb   ©rr   ry   rK   rK   rL   Útest_recall_warningsq  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r¬t| ¡ jƒd	ks¬t	‚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 )
NTrx   rµ  r5   r   r¦   rœ  rs   z‚Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.)rz   r{   r
  r   r:   rƒ   r|   r¶  r}   rd   rb   r,   r¹  rK   rK   rL   Ú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s¶t	‚|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 )NTrx   rµ  r0   r›   r5   r   r¦   rœ  rs   z‰F-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.)rz   r{   r
  r   r   r   r:   rƒ   rb   rd   r|   r¶  r}   )rr   ry   r�  rK   rK   rL   Ú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 q–qxd S )	Nr5   r0   r¡   r�  r   r�  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_indrJ   rI   r   rl   rK   rK   rL   Ú'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�rªt 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 n”t|	|ƒ\}}}||k�sÈt	‚| 
d¡�rö|jdk�sät	‚|jdk�st	‚n t|t  |	¡ƒ t|t  |¡ƒ t t¡� t|	d d… |ƒ W 5 Q R X �q¾ddg}	ddg}d}tjt|d�� t|	|ƒ W 5 Q R X d S )Nzmultilabel-indicatorr^  rB   Z
continuouszmulticlass-multioutputzcontinuous-multioutputr   r5   r0   r¡   rn   r©  rš   r‚   r  gš™™™™™ñ?g      @)rP  z@Classification metrics can't handle a mix of {0} and {1} targetsr¾   z{0} is not supportedZ
multilabelZcsrrœ   )r5   r0   )r   r0   r¡   )r0   )r   r0   zÝYou 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"   Úformatrd   Ú
startswithr+   Zsqueeze)ZINDZMCZBINZCNTZMMCZMCNZEXAMPLESZEXPECTEDZtype1r‡   Ztype2rˆ   r`  rÃ   Zmerged_typeZy1outZy2outr   rK   rK   rL   Útest__check_targets	  s¾    $õ                     ê

 ÿÿ
 ÿrÁ  c                  C   s*   ddg} ddg}t | |ƒd dks&t‚d S )Nr   r5   rœ   r^  )r"   rd   r  rK   rK   rL   ÚAtest__check_targets_multiclass_with_both_y_true_and_y_pred_binaryi	  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œ   r5   g      !Àr‚   r©  g333333Ó¿r½   r   r0   )r:   rƒ   r   rd   ©rJ   Úpred_decisionrK   rK   rL   Útest_hinge_loss_binaryp	  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=
×?çÃõ(\�ÂÅ¿ç�Âõ(\�â¿ç®Gáz®ï¿gHáz®Gá¿g®Gáz®×¿ç¸…ëQ¸Þ¿ç333333÷¿çR¸…ëQØ¿çáz®GáÀçHáz®Gé¿çHáz®GÑ¿ç¸…ëQ¸Î?r   r5   r0   r¡   r‘   r�   ©Úout©r:   rƒ   Úclipr®   r   rd   )rÄ  rJ   Údummy_lossesÚdummy_hinge_lossrK   rK   rL   Útest_hinge_loss_multiclassz	  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   r5   r0   gR¸…ëQô?gœÄ °rh¡?gÃõ(\�Âå¿gffffffö¿rË  rÈ  rÌ  rÇ  rÍ  rÎ  rÏ  rÐ  zDPlease include all labels in y_true or pass labels as third argumentr¾   )r:   rƒ   rž   r¯   r°   r   )rJ   rÄ  Úerror_messagerK   rK   rL   Ú: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 )	Nr0   r5   r   z”The 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Ã  z²The 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))rJ   rÄ  r_   )r:   rƒ   rž   r¯   r°   ÚreÚescaper   )rJ   rÄ  rØ  r_   rK   rK   rL   Ú<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   r5   r0   r¡   r‘   rÑ  r¶   rÓ  ©rÄ  rJ   r_   rÕ  rÖ  rK   rK   rL   Ú.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ö(\�Âõè¿gáz®GáÚ¿r   r0   r5   r¡   r‘   rÑ  r¶   )r:   rƒ   rÔ  r®   r)   r   rÞ  rK   rK   rL   Ú@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 )Nry  rz  r{  ÚwhiterÆ  rÇ  rÈ  rÉ  rÝ  rÌ  rÊ  rË  rÍ  rÎ  rÏ  rÐ  r5   r   r0   r¡   r‘   r�   rÑ  rÓ  )rJ   rÄ  rÕ  rÖ  rK   rK   rL   Ú+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�s¶t‚W 5 Q R X t 	t
¡�( tddgddgdd�t j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�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�sˆt‚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»   rV   g{®Gáz„?g®Gáz®ï?r«   r¦  gü©ñÒMbP?g+‡ÙÎ÷ï?r5   r   r0   rº   r¹   rÅ   r½   Tr   gèº•Ê€æ?Fg.Lð—`’@r©   rÒ   úy_pred values do not sum to one)r  Úepsr¾   ©ræ  r¼   ÚhamÚspamçL¢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¡   g¾PÀv0ñ?)r:   rƒ   r   r®   r   Zlogpmfr)   Zasarrayrž   rË   ÚFutureWarningrÌ   rÔ  rd   r�   r¯   r°   Úlog)
rJ   rI   ÚlossZ	loss_trueZuser_warning_msgrÂ   Z	error_strZtrue_log_lossZcalculated_log_lossZy_score2rK   rK   rL   Útest_log_loss
  sv    &ÿ
*


$*,,@0ÿ
ÿ

rî  c                 C   s:   t jddg| d�}| ¡ }t||dd�}t  |¡s6t‚dS )z¸Check 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   r5   r_  Úautorç  N)r:   rƒ   rb  r   Úisfiniterd   )Zglobal_dtyperJ   rI   rí  rK   rK   rL   Útest_log_loss_eps_autor
  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   r5   r_  rï  rç  N)r:   rƒ   Zfloat16rb  r   rð  rd   )rJ   rI   rí  rK   rK   rL   Ú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   )Ú	DataFramerm  rå  r¾   rê  r©   rÒ   )r:   rƒ   r'   rl  ró  rm  r!  ÚImportErrorrž   rË   rÌ   r   r)   )
Zy_trZy_prÚtypesró  rm  ZTrueInputTypeZPredInputTyperJ   rI   rí  rK   rK   rL   Ú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   r5   r»   r�   rV   r½   rš   gffffffî?r0   rn   rÅ   r¼   rº   zMOnly binary classification is supported. The type of the target is multiclassr¾   rœ   g{®GázÄ?rÆ  ZfooÚbarrÀ   )
r:   rƒ   r   Znormrb   r)   r   rž   r¯   r°   )rJ   rI   Z
true_scorerØ  rK   rK   rL   Ú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   r5   )rž   rË   rÌ   r   rÍ   rK   rK   rL   Ú#test_balanced_accuracy_score_unseen¾
  s    rù  zy_true,y_predrt   ru   rv   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s€t‚d S )Nr¥   rª   T)Úadjustedr   r5   )	r    r:   Úuniquer-   r   rž   rŸ   rd   Z	full_like)rJ   rI   Zmacro_recallZbalancedrú  ZchancerK   rK   rL   Útest_balanced_accuracy_scoreÄ
  s    	   ÿrü  r£   )FTr,  )rn   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 )	zÀCheck 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)
r:   r>   r?   Úchoicer   Úuniformrb  Úanyr&  rd   )rl   r£   rH   rE   rÁ   rJ   rI   r'  rK   rK   rL   Ú*test_classification_metric_pos_label_typesÙ
  s    r  Úscoringr%  )r�   rr   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   )r4   r¡   )Ú	max_depthr4   r0   rX  )r  Zn_jobsZerror_scoreN)r	   Zmake_classificationr&   r@   r#   )r  rC   rD   Ú
classifierrK   rK   rL   Ú9test_classification_metric_division_by_zero_nan_validatonú
  s    r  )NF)£rÚ  rz   Ú	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"   Zsklearn.model_selectionr#   Zsklearn.preprocessingr$   r%   Zsklearn.treer&   Zsklearn.utils._mockingr'   Zsklearn.utils._testingr(   r)   r*   r+   r,   r-   Zsklearn.utils.extmathr.   Zsklearn.utils.validationr/   rM   rm   rq   ÚmarkZparametrizero   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>  rD  rI  rQ  rT  rV  rW  rY  r[  r\  ra  rj  rp  rt  ru  rv  rx  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  rK   rK   rK   rL   Ú<module>   s&  \ 0A
"

-

üÿþþôþ
ûÿþþóþ
#)üþ	
þû
þû
þû
þû
þûÞþ-
þúÿþ

üþ	
üþ		
'#8
!:

þú
  ÿ

#

(M%

B
@þ^$

 b
?
&
'
'b
 Z	#&&&ýþ
ùþ ÿüþ	