U
    3ds                    @   s(  d dl mZ d dlmZ d dlmZ d dlmZ d dlZd dlZd dlZ	d dl
mZ d dlm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 d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d dl"m$Z$ d dl"m%Z% d dl"m&Z& d dl"m'Z' d dl"m(Z( d dl"m)Z) d dl"m*Z* d dl"m+Z+ d dl"m,Z, d dl"m-Z- d dl"m.Z. d d l"m/Z/ d d!l"m0Z0 d d"l"m1Z1 d d#l"m2Z2 d d$l"m3Z3 d d%l"m4Z4 d d&l"m5Z5 d d'l"m6Z6 d d(l7m8Z8 d d)l9m:Z: d d*l;m<Z= dd,d-Z>d.d/ Z?d0d1 Z@ejABd2d3d d4gd5d6 ZCd7d8 ZDd9d: ZEed;d< ZFed=d> ZGed?d@ ZHdAdB ZIdCdD ZJdEdF ZKedGdH ZLdIdJ ZMdKdL ZNdMdN ZOdOdP ZPdQdR ZQdSdT ZRejABdUdVdWdXdYgdZd[ ZSd\d] ZTd^d_ ZUejABd`e	Vd d d d d d ge	Vd d d d d d gdadbfe	Vd4d4d4d d d ge	Vd4d4d4d d d gdadcfe	Vd4d4d4d d d ge	Vd d d d d d gdaddfe	Vd4d4d4d d d ge	Vd d d d4d4d4gdadefe	Vd d d d d d ge	Vd4d4d4d d d gdadffgdgdh ZWejABdie	Vd d4d d4d ge	Vd4d4d d djgdadkfgdldm ZXdndo ZYdpdq ZZdrds Z[dtdu Z\dvdw Z]dxdy Z^dzd{ Z_ejABd|d}d~gdd Z`dd ZaejABddddddgdd Zbdd Zcdd Zddd ZeejAjBdg dfddgdfgddgddd ZfejAjBddd d4gd d4djgfdddgddd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqedd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd ZxddÄ ZyejABdddgddȄ Zzeddʄ Z{edd̄ Z|eejABd2d3d d4gdd΄ Z}ejABdd4gejABdddddgejABd2d d4gddф Z~ejABdddddgddӄ ZejABd2d d4gddՄ Zddׄ Zddل ZejABd2d d4gddۄ ZejABd2d3d d4gdd݄ ZejABd2d3d d4gdd߄ ZejABd2d3d d4gdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d ZejAB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 ZdS (	      )partial)product)chain)permutationsN)linalg)	bernoulli)datasets)svm)make_multilabel_classification)label_binarizeLabelBinarizer)check_random_state)assert_almost_equal)assert_array_equal)assert_array_almost_equal)assert_allclose)assert_no_warnings)ignore_warnings)MockDataFrame)accuracy_score)average_precision_score)balanced_accuracy_score)class_likelihood_ratios)classification_report)cohen_kappa_score)confusion_matrix)f1_score)fbeta_score)hamming_loss)
hinge_loss)jaccard_score)log_loss)matthews_corrcoef)precision_recall_fscore_support)precision_score)recall_score)zero_one_loss)brier_score_loss)multilabel_confusion_matrix)_check_targets)UndefinedMetricWarning)hammingFc                 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)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   M/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/metrics/tests/test_classification.pymake_prediction9   s*    


*rJ   c               
   C   s|  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ks*t	t|d d tksDt	t|d d tks^t	t|d d tksxt	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   typer:   )irisrG   rF   _expected_reportreportkeymetricrH   rH   rI   ,test_classification_report_dictionary_outputi   s`    "	rk   c                  C   s   t g g dd} dtjtjtjdddddddd}t| tsBt|  | ksVt|D ]x}|dkrt| | tsxt| | || kstqZ| |  ||  kst|| D ]}t|| | | | |  qqZd S )NT)rG   rF   r^           r   rW   )rZ   rY   r[   rZ   )	r   r7   nanrb   dictra   r`   rc   r   )rh   rg   ri   rj   rH   rH   rI   2test_classification_report_output_dict_empty_input   s,    ro   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)rp   r^   rq   r2   z7Use `zero_division` parameter to control this behavior.)warningscatch_warningsr   r_   ra   strmessage)rp   rG   rF   rw   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   rf   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   rl   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   rl   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   rf   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_labelsJ  s    r   c               	   C   sN   t d} | d}| jdddd}d}tjt|d t|| W 5 Q R X d S )Ni  
   r   r   sizez"multiclass format is not supportedmatch)r   randrandintr   r   r   r   )rE   rF   rG   err_msgrH   rH   rI   3test_average_precision_score_score_non_binary_classa  s    
r   c                  C   sJ   dddddddddddg} dddddddddddg}t | |dksFtd S )Nr   r2   皙?皙?r   333333?rS   r   ra   rG   y_scorerH   rH   rI   -test_average_precision_score_duplicate_valuesn  s    r   c                  C   s*   dddg} dddg}t | |dks&td S )Nr   r2   r   r   r   r   r   rH   rH   rI   (test_average_precision_score_tied_valuesy  s    

r   c               	   C   s   t dd\} }}tt t| |dd W 5 Q R X tt t| |ddd W 5 Q R X tt  tdd	dgd	ddgd
d W 5 Q R X d S )NTr   gr   r,   r?   	pos_labelr   r   r2   Zmegar   )rJ   r   r   r   r#   )rG   rF   rf   rH   rH   rI   +test_precision_recall_fscore_support_errors  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   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   rz   .0rA   rH   rH   rI   
<listcomp>  s     z0test_confusion_matrix_binary.<locals>.<listcomp>rJ   rG   rF   rf   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_errors  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_normalize2  s
    

r  c               	   C   sT   ddddddddg} ddddddddg}t jtdd t| |dd W 5 Q R X d S )Nr   r2   znormalize must be one ofr   Tr   )r   r   r   r   )r  rF   rH   rH   rI   ,test_confusion_matrix_normalize_wrong_optionC  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   rx   ry   simplefilterRuntimeWarning)r  rF   Zcm_trueZcm_predrH   rH   rI   ,test_confusion_matrix_normalize_single_classJ  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_warnings]  s    1r  zparams, err_msgr,   zeclass_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   r   g?g_B{	%?g-q=)Zrtolr      rl   r   r   gUUUUUU@gqq?)r7   r   r   r   r   rm   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+?r/   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   rl   )r"   ra   rH   rH   rH   rI   test_matthews_corrcoef_nan  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   r   r   r2   r   )r7   r;   r<   r   r   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     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r-  r.  r)  rH   rI   r     s
     
   Dtest_matthews_corrcoef_against_jurman.<locals>.<listcomp>.<listcomp>r
  r7   r(  r   r,  r)  rI   r     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'  r/  r1  rH   rI   r   
  s
     
   r2  r3  r4  r,  r5  rI   r     s   r   )r7   r;   r<   r   r   r   r_   r
  r(  r   r"   r   )	rE   rG   rF   r   Zcov_ytypZcov_ytytZcov_ypypZ
mcc_jurmanZmcc_oursrH   r,  rI   %test_matthews_corrcoef_against_jurman  s0    
r6  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   rr   rs   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 )rr   rs   rH   r7  rH   rH   rI   r     s     r   rr   rs   r   rl   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      ,,r<  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   rr   r   c                    s   g | ]}t  | qS rH   )chrr7  Zord_arH   rI   r   ;  s     z5test_matthews_corrcoef_multiclass.<locals>.<listcomp>rU   r   r   r2   r,   g      ii  r   rl   r   r   )r7   r;   r<   ordr   r   r"   r   )	rE   	n_classesrG   Z
y_pred_badZ
y_pred_minrF   r9  r:  r   rH   r>  rI   !test_matthews_corrcoef_multiclass7  sD    



  rA  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_negrB  Zpos_rateZactivityZmcc_numeratorZmcc_denominatorrH   rH   rI   mcc_safet  s    
z1test_matthews_corrcoef_overflow.<locals>.mcc_safec                    s8     | }|d  | d   }|dk}|dk}||fS )N皙?r   )Zrandom_sample)rB  Zx_trueZx_predrG   rF   rE   rH   rI   	random_ys  s
    
z2test_matthews_corrcoef_overflow.<locals>.random_ysrl   r   r  )r7   r;   r<   repeatr   r"   )rB  rE  rH  ZarrrG   rF   rH   rG  rI   test_matthews_corrcoef_overflowo  s    rJ  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   rf   rD   r   r   r   r   r   r   rH   rH   rI   )test_precision_recall_f1_score_multiclass  sT       rM  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      
  


rO  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   rf   rD   r   r   rP   rH   rH   rI   .test_precision_recall_f1_score_binary_averaged  s    ((
rP  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   rl   )r7   Zseterrr   r   r$   r%   r   )Zold_error_settingsrG   rF   rH   rH   rI   test_zero_precision_recall  s    rR  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   rf   r   Zextra_labelrH   rH   rI   .test_confusion_matrix_multiclass_subset_labels  s    rT  zlabels, err_msgz,'labels' should contains at least one label.r   r   z.At least one label specified must be in y_truez
empty listzunknown labels)idsc              	   C   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   rf   rH   rH   rI   test_confusion_matrix_error  s    	rV  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_input  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    rY  r   r   rD  l    l    )r7   Zonesr_   r   r  Zint64ra   Zbool_Zint32Zuint64ZastypeZfloat32Zfloat64objectfullZuint32)rA   Zweightr   r  rH   rH   rI   test_confusion_matrix_dtype'  s$    

ra  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   re   rG   rF   rf   rg   rh   rH   rH   rI   %test_classification_report_multiclassB  s    re  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   rg   rh   rH   rH   rI   .test_classification_report_multiclass_balanced\  s    .
rf  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   rd  rH   rH   rI   :test_classification_report_multiclass_with_label_detectionn  s
    
rg  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]   digitsrc  rd  rH   rH   rI   1test_classification_report_multiclass_with_digits  s    ri  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
rr   rs   rt   r]   rJ   r7   r   r   ra   )rG   rF   rf   rg   rh   rH   rH   rI   7test_classification_report_multiclass_with_string_label  s    
ro  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
rn  rG   rF   rf   r\   rg   rh   rH   rH   rI   8test_classification_report_multiclass_with_unicode_label  s    
rq  c                  C   sN   t dd\} }}tdddg}||  } || }d}t| |}||ksJtd S )NFr   rj  Zgreengreengreengreengreenrl  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
rn  rp  rH   rH   rI   <test_classification_report_multiclass_with_long_string_label  s    
rr  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   rb  )r   r   r   r   )rG   rF   r]   r}   rH   rH   rI   =test_classification_report_labels_target_names_unequal_length  s    
rv  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,   rs  rt  ru  zaNumber of classes, 2, does not match size of target_names, 3. Try specifying the labels parameterr   rm  )r   r   r   r   )rG   rF   r]   r   rH   rH   rI   @test_classification_report_no_labels_target_names_unequal_length  s    
rw  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   r@  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   )r@  rB   rf   rG   rF   rg   rh   rH   rH   rI   %test_multilabel_classification_report  s"       
   

rx  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    ry  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_loss2  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_validationF  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_scoren  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 )NZantcatZ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   rl   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   rq   r   rp   rl   )r7   r   r   r   r*   r    r   ra   )rG   rF   r}   scorerH   rH   rI   (test_jaccard_score_zero_division_warning  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   rx   ry   r  r*   r    r   r   ra   )rp   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   rl   r   r   r,   r   r   r   rK  r   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_1  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   rl   r   r,   r   gQ?r  皙?r         ?r   r   r   g      ?rz  r   rQ   r  r   g&S?r  r  rH   rH   rI   +test_precision_recall_f1_score_multilabel_2V  s^    ((





 





  r  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}| dkr\dnd} t||d | d\}}}}t|| dddgd t|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|  d  t|d|  d  t|d |d ksFttt||dddt | 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rdn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sttt||dd| d	dd d S )Nr   r2   r   rl   r  r,   r   r   r   r   rp   r  r   r         ?r  r  r   rT   r   r   r   g?r  r   r   rQ   gZd;O?r  )	rp   rG   rF   rD   r   r   r   r  rP   rH   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}	t|}t|| t|| t|| |d ksvtt|	t| d S )NrU   r   r   r   rp   r  )	r7   r   r{  r   r#   r   rc   r   ra   )
r   r   rp   rG   rF   rD   r   r   r   fbetarH   rH   rI   "test_precision_recall_f1_no_labels  s0    

	


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   rL  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   )rp   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   rL  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?   Trv   always)r#   r*   r   r   r7   r   rx   ry   r  rz   popr{   ra   )r   r}  r   r}   rw   rH   rH   rI   test_prf_warningsX  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?   Trv   r  )	r#   r   r7   r   rx   ry   r  r_   ra   )rp   r   r   rw   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  Trv   r  rq   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   rx   ry   r  rz   r  r{   ra   r_   rp   rw   rH   rH   rI   test_recall_warnings  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 )
NTrv   r  r2   r   r   r  rq   zPrecision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.)rx   ry   r  r$   r7   r   rz   r  r{   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 )NTrv   r  r,   r   r2   r   r   r  rq   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.)rx   ry   r  r   r   r   r7   r   r_   ra   rz   r  r{   )rp   rw   r  rH   rH   rI   test_fscore_warningsK  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}   rj   rH   rH   rI   'test_prf_average_binary_data_non_binarys  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-indicatorrX  r?   Z
continuouszmulticlass-multioutputzcontinuous-multioutputr   r2   r,   r   rl   r  r   r   r  g?g      @)rI  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   rZ  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   rX  )r)   ra   r  rH   rH   rI   Atest__check_targets_multiclass_with_both_y_true_and_y_pred_binary  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ӿ333333?r   r,   )r7   r   r   ra   rG   pred_decisionrH   rH   rI   test_hinge_loss_binary  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_multiclass	  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_shape1	  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_labelsM	  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_trueg	  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 )Nrj  rk  rl  Z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   st  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 t |dk}t| |ddd}t|t| t |dd tddgddgdddks>t	tddgddgddt j
ks`t	tddgddgddt j
kst	tdddgdddgdddgdddggdddkst	tdddgdddgdddgdddggddt j
kst	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| |}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| |ddd$gd#}t|d%dd d S )&Nnoyesr   r   rS   g{Gz?gGz?r   r  gMbP?g+?r2   r   r,   rF  ffffff?r   r  Tr   g躕ʀ?Fg.L`@r   r   )r  epsr  r   hamspamL7?zly_true contains only one label \(2\). Please provide the true labels explicitly through the labels argument.r   zBFound input variables with inconsistent numbers of samples: [3, 2]r   r   gPv0?)r7   r   r!   r   r   Zlogpmfr   Zasarrayr  ra   r   r   r   r   log)	rG   rF   lossZ	loss_truer   Z	error_strZtrue_log_lossZcalculated_log_lossZy_score2rH   rH   rI   test_log_loss	  s`    &
*


 ""68



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   rY  autor  N)r7   r   r\  r!   isfinitera   )Zglobal_dtyperG   rF   r  rH   rH   rI   test_log_loss_eps_auto	  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   rY  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 ]2\}}|| || }}t||}	t	|	ddd qzd S )Nr  r  rF  r  r   r   r   r   r   )Series	DataFramer  r   r   )
r7   r   r   Zpandasr  r  r!  ImportErrorr!   r   )
Zy_trZy_prtypesr  r  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,   rl   r   r   rF  zMOnly binary classification is supported. The type of the target is multiclassr   r   g{Gz?r  Zfoobar)r   )
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_predrr   rs   rt   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_scoreB
  s    	   r  )NF)	functoolsr   	itertoolsr   r   r   rx   r  Znumpyr7   Zscipyr   Zscipy.statsr   r   Zsklearnr   r	   Zsklearn.datasetsr
   Zsklearn.preprocessingr   r   Zsklearn.utils.validationr   Zsklearn.utils._testingr   r   r   r   r   r   Zsklearn.utils._mockingr   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.exceptionsr*   Zscipy.spatial.distancer+   r|  rJ   rk   ro   markZparametrizer~   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&  r6  r<  rA  rJ  rM  rO  rP  rR  rT  rV  r[  ra  re  rf  rg  ri  ro  rq  rr  rv  rw  rx  ry  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  0B
"

-

#)	




-


'#8
!:


  
#

(M%

B
@L

!c
@
&
'
'b
 N	#&&&