o
    tBhb                    @   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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 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&l4m5Z5 d d'l6m7Z7 d d(l8m9Z: dd*d+Z;d,d- Z<d.d/ Z=ej>?d0g d1d2d3 Z@d4d5 ZAd6d7 ZBed8d9 ZCed:d; ZDed<d= ZEd>d? ZFd@dA ZGdBdC ZHedDdE ZIdFdG ZJdHdI ZKdJdK ZLdLdM ZMdNdO ZNdPdQ ZOej>?dRg dSdTdU ZPdVdW ZQdXdY ZRdZd[ ZSd\d] ZTd^d_ ZUd`da ZVdbdc ZWddde ZXej>?dfdgdhgdidj ZYdkdl ZZej>?dmg dndodp Z[dqdr Z\dsdt Z]dudv Z^ej>j?dwg dxfdydzgd{fgd|d}gd~dd Z_ej>j?ddd dgg dfg dd~dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjedd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrej>?dddgdd Zsedd Ztedd Zueej>?d0g d1dd Zvej>?ddgej>?dmg dej>?d0d dgdd Zwej>?dmg ddd Zxej>?d0d dgdd Zydd Zzdd Z{ej>?d0d dgddÄ Z|ej>?d0g d1ddń Z}ej>?d0g d1ddǄ Z~ej>?d0g d1ddɄ Zdd˄ Zdd̈́ Zddτ Zddф Zddӄ ZddՄ Zddׄ Zddل Zddۄ Zdd݄ Zdd߄ Zdd Zdd Zdd Zej>?dg dg dfg dg dfg dg dfgdd ZdS )    )partial)product)chain)permutationsN)linalg)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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u rt  } | j}| j}|r||dk  ||dk  }}|j\}}t|}td}|| || || }}t	|d }tj
d}tj|||d| f }tjdddd}	|	|d| |d| ||d }
|ry|
ddd	f }
|	||d }||d }|||
fS )
zMake some classification predictions on a toy dataset using a SVC

    If binary is True restrict to a binary classification problem instead of a
    multiclass classification problem
    N   %   r      linearT)kernelprobabilityrandom_state   )r   	load_irisdatatargetshapenparanger   shuffleintrandomRandomStatec_randnr   SVCfitpredict_probapredict)datasetbinaryXy	n_samples
n_featuresprnghalfclfprobas_predy_predy_true rS   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_classification.pymake_prediction7   s*   


*
rU   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sIJ |D ]<}|dkret	|| t
sZJ || || ksdJ qK||  ||  kssJ || D ]}t|| | || |  qwqKt|d d t
ksJ t|d d t
ksJ t|d d tksJ t|d d tksJ d S ) NFrF   rG   g7Mo?gUUUUUU?ghQ?   )	precisionrecallf1-scoresupportUUUUUU?gc1Ƹ?g433333?   g)k??$I$I?   gCFQ?gc?gƢ?K   rZ   rX   rY   r[   g?gD~WG?g]3p?)setosa
versicolor	virginica	macro avgaccuracyweighted avgT)labelstarget_namesoutput_dictrg   rc   rX   rf   r[   )r   r6   rU   r   r:   r;   lenrj   keys
isinstancefloatr   typer=   )irisrR   rQ   _expected_reportreportkeymetricrS   rS   rT   ,test_classification_report_dictionary_outputg   sb   "	rw   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s!J |  | ks+J |D ]<}|dkrGt| | ts<J | | || ksFJ q-| |  ||  ksUJ || D ]}t|| | | | |  qYq-d S )NT)rR   rQ   rk           r   rb   )rg   rf   rh   rg   )r   r:   nanrn   dictrm   ro   r   )rt   rs   ru   rv   rS   rS   rT   2test_classification_report_output_dict_empty_input   s0   r{   zero_division)warnr   r5   c                 C   s   g dg d}}t jdd:}t||| dd | dkr5t|dks$J |D ]}d}|t|jv s3J q&n|r9J W d    d S W d    d S 1 sLw   Y  d S )	Nabc)r   r   dTrecord)r|   rk   r}   r5   z7Use `zero_division` parameter to control this behavior.)warningscatch_warningsr   rl   strmessage)r|   rR   rQ   r   itemmsgrS   rS   rT   0test_classification_report_zero_division_warning   s   
"r   c                  C      t g dg dg} t g dg dg}t| |dksJ t| | dks(J t||dks1J t|t |dks=J t| t | dksIJ t| t | jdksVJ t|t | jdkscJ d S )Nr   r5   r5   r5   r   r5   r   r   r5         ?r5   r   )r:   arrayr   logical_notzerosr9   y1y2rS   rS   rT   .test_multilabel_accuracy_score_subset_accuracy      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 ]N\}}|t| |fi |}	t|	dd |t| |fi |}
t|
dd |t| |fi |}t|d
d t|t	| |fddi|d|	 |
 d|	 |
  d q<d S )NTrG   averageg\(\?g333333?r.   g)\(?g(\?皙?gRQ?   r   rG   beta      )
rU   r$   r   r   r   r%   r&   r   r   r   )rR   rQ   rr   rL   rfskwargs	my_assertpsrsfsrS   rS   rT   %test_precision_recall_f1_score_binary   s*   
r   c                   C   s  dt ddgddgksJ dtddgddgksJ dtddgddgks'J dtddgddgddks6J dt ddgddgksCJ dtddgddgksPJ dtddgddgks]J dtddgddgtddksnJ tddgddgtddttddgddgddksJ d S )	N      ?r5   r   r   rx   infg     j@)r%   r&   r   r   ro   pytestapproxrS   rS   rS   rT   +test_precision_recall_f_binary_single_class  s   "r   c               
   C   s  g d} g d}t | tdd}t |tdd}| |f||fg}t|D ]L\}\} }t| |g dd d}tg d| t| |g ddd}ttg d| d	D ]}|d
kr^|dkr^qStt| |g d|dt| |d |d qSq&dD ]C}t	t
 t||td|d W d    n1 sw   Y  t	t
 t||tdd|d W d    n1 sw   Y  qutg dg dg} tg dg dg}t| |d
ddgd\}}	}
}tt||	|
gtg d d S )N)r5      r   r.   )r5   r5   r   r.   r   classes)r   r5   r.   r   r   ri   r   )rx   r   r   r   rx   macro)microweightedsamplesr   r   )Nr   r   r      r   r   r   r5   r   r   r5   r5   r5   r   r5   r   ri   )      ?r5   竪?)r
   r:   r;   	enumerater&   r   meanr   r   raises
ValueErrorr   r$   )rR   rQ   
y_true_bin
y_pred_binr7   iactualr   rL   r   r   rr   rS   rS   rT   $test_precision_recall_f_extra_labels  sD   
$r   c            	      C   s   g d} g d}t | tdd}t |tdd}| |f||fg}t|D ]K\}\} }tt| |ddgd}tt| |d d}tdd	g|d d
 td|dd
 td|dd
 td|dd
 dD ]}||d
||d
kspJ qbq&d S )N)r5   r5   r.   r   )r5   r   r   r   r   r   r5   r   ri   r   r   r   r   r   UUUUUU?r   r   )r   r   r   )r
   r:   r;   r   r   r&   r   r   )	rR   rQ   r   r   r7   r   	recall_13
recall_allr   rS   rS   rT   &test_precision_recall_f_ignored_labelsH  s    r   c                  C   sd   t d} | d}| jdddd}d}tjt|d t|| W d    d S 1 s+w   Y  d S )Ni  
   r   r   sizez"multiclass format is not supportedmatch)r   randrandintr   r   r   r   )rM   rQ   rR   err_msgrS   rS   rT   3test_average_precision_score_score_non_binary_class_  s   
"r   c                  C   s&   g d} g d}t | |dksJ d S )N)r   r   r   r   r5   r5   r5   r5   r5   r5   r5   )r   皙?r   皙?r   333333?r   r^   r^   r5   r5   r5   r   rR   y_scorerS   rS   rT   -test_average_precision_score_duplicate_valuesl  s   r   c                  C   s&   g d} g d}t | |dksJ d S )Nr   )r   r   r   r   r   r   rS   rS   rT   (test_average_precision_score_tied_valuesw  s   r   c                  C   s   t dd\} }}tt t| |dd W d    n1 sw   Y  tt t| |ddd W d    n1 s<w   Y  tt tg dg d	d
d W d    d S 1 s]w   Y  d S )NTr   gr   r.   rG   	pos_labelr   r   r5   r.   r5   r.   r   megar   )rU   r   r   r   r$   )rR   rQ   rr   rS   rS   rT   +test_precision_recall_fscore_support_errors  s   "r   c                  C   sP   d} t jt| d tg dg dddd W d    d S 1 s!w   Y  d S )NzNote that pos_label \(set to 2\) is ignored when average != 'binary' \(got 'macro'\). You may use labels=\[pos_label\] to specify a single positive class.r   )r5   r.   r5   r5   r.   r.   r.   r   r   )r   warnsUserWarningr$   r   rS   rS   rT   (test_precision_recall_f_unused_pos_label  s   "r   c                  C   D   t dd\} }}dd }|| | |dd | D dd |D  d S )NTr   c                 S   s   t | |}t|ddgddgg | \}}}}|| ||  }t|| ||  ||  ||  }|dkr9dn|| }	t| |}
t|
|	dd t|
ddd d S )	N   r         r   r.   decimal=
ףp=?)r   r   flattenr:   sqrtr#   r   )rR   rQ   cmtpfpfntnnumdentrue_mccmccrS   rS   rT   test  s   
&
z*test_confusion_matrix_binary.<locals>.testc                 S      g | ]}t |qS rS   r   .0rI   rS   rS   rT   
<listcomp>      z0test_confusion_matrix_binary.<locals>.<listcomp>rU   rR   rQ   rr   r   rS   rS   rT   test_confusion_matrix_binary  s   
"r  c                  C   r   )NTr   c                 S   s4   t | |}t|ddgddggddgddggg d S )Nr   r   r   r   r)   r   )rR   rQ   r   rS   rS   rT   r     s   
*z5test_multilabel_confusion_matrix_binary.<locals>.testc                 S   r   rS   r   r   rS   rS   rT   r     r   z;test_multilabel_confusion_matrix_binary.<locals>.<listcomp>r  r  rS   rS   rT   'test_multilabel_confusion_matrix_binary  s   
"r  c                  C   sR   t dd\} }}d	dd}|| | |tdd | D tdd |D dd d S )
NFr   c                 S   s   t | |}t|ddgddggddgddggd	d
gddggg |r%g dng d}t | ||d}t|ddgddggd	d
gddggddgddggg |rPg dng d}t | ||d}t|ddgddggd	d
gddggddgddggddgddggg d S )N/   r   r      &   r      r      r   r.      )021r   r.   r5   r   )r  r  r  3)r   r.   r5   r   ra   r   r  )rR   rQ   string_typer   ri   rS   rS   rT   r     s&   
..z9test_multilabel_confusion_matrix_multiclass.<locals>.testc                 s   s    | ]}t |V  qd S )Nr   r   rS   rS   rT   	<genexpr>  s    z>test_multilabel_confusion_matrix_multiclass.<locals>.<genexpr>T)r  )F)rU   listr  rS   rS   rT   +test_multilabel_confusion_matrix_multiclass  s   

.r  c                  C   s  ddl m} m} tg dg dg dg}tg dg dg dg}||}||}| |}| |}tg d	}d
dgd
d
ggd
dgd
d
ggddgd
dggg}	|||g}
|||g}|
D ]}|D ]}t||}t||	 qbq^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_matrixr   r   r5   r   r5   r5   r   r   r   r   )r.   r5   r   r5   r.   T
samplewiser   )ri   r  )sample_weightr  r   r   )scipy.sparser  r  r:   r   r)   r   )r  r  rR   rQ   
y_true_csr
y_pred_csr
y_true_csc
y_pred_cscr  real_cmtruespreds
y_true_tmp
y_pred_tmpr   rS   rS   rT   +test_multilabel_confusion_matrix_multilabel  s4   .


4&48r&  c                  C   s  t g dg dg dg} t g dg dg dg}tjtdd t| |d	d
gd W d    n1 s7w   Y  tjtdd t| |g dg dg dgd W d    n1 s^w   Y  d}tjt|d t| |dgd W d    n1 sw   Y  d}tjt|d t| |dgd W d    n1 sw   Y  tjtdd tg dg ddd W d    n1 sw   Y  d}tjt|d tg dg dgg dg dg W d    d S 1 sw   Y  d S )Nr   r  r  r   r   r   zinconsistent numbers of samplesr   r5   r.   r  zshould be a 1d arrayr5   r.   r   )r.   r   r   )r   r   r   z%All labels must be in \[0, n labels\)r   r   r   zSamplewise metricsr   r   Tr  z'multiclass-multioutput is not supported)r.   r5   r   r5   r   r.   )r:   r   r   r   r   r)   )rR   rQ   r   rS   rS   rT   'test_multilabel_confusion_matrix_errors  s2   $"r*  z%normalize, cm_dtype, expected_results))truer   TUU?)predr   r,  )allr   geq?)Nr   r.   c                 C   sL   g dd }t ttg d }t||| d}t|| |jj|ks$J d S )Nr   r   	normalize)r  r   r   r   r   dtypekind)r0  cm_dtypeexpected_resultsy_testrQ   r   rS   rS   rT   test_confusion_matrix_normalize0  s
   

r6  c                  C   sR   g d} g d}t jtdd t| |dd W d    d S 1 s"w   Y  d S )Nr   r   r   r   r5   r5   r5   r5   r   r   r   r   r   r   r   r   znormalize must be one ofr   Tr/  )r   r   r   r   )r5  rQ   rS   rS   rT   ,test_confusion_matrix_normalize_wrong_optionA  s
   "r9  c                  C   s   g d} g d}t | |dd}| tdksJ t  tdt t | |dd}W d    n1 s6w   Y  | tdksFJ t  tdt t || dd W d    d S 1 scw   Y  d S )	Nr7  r8  r+  r/         @errorr-  r   )r   sumr   r   r   r   simplefilterRuntimeWarning)r5  rQ   cm_truecm_predrS   rS   rT   ,test_confusion_matrix_normalize_single_classH  s   

"rA  c                  C   s  t dgd dgd  } t dgd dgd  dgd  dgd  }t| |}t|dd	d
 |t|| ks9J t | dgd } t |dgd }t| |ddgd|ksXJ tt| | d t dgd dgd  dgd  } t dgd dgd  dgd  }tt| |ddd
 t dgd dgd  dgd  } t dgd dgd  dgd  }tt| |ddd
 tt| |ddddd
 tt| |ddddd
 d S )Nr   (   r5   <   r`   r   2   gʡE?r   r   r.   r   r   r   .   ,   4          g??g+?r1   weightsg_vO?	quadraticg#?)r:   r   r   r   append)r   r   kapparS   rS   rT   test_cohen_kappa[  s&   .
$$$$
rO  c                   C   s4   t dgdgdksJ t ddgddgdksJ d S )Nr   r5   rx   r"   rS   rS   rS   rT   test_matthews_corrcoef_nanz  s   rP  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.   r`   r   r   r5   r   )r:   r>   r?   r   r   r#   corrcoef)rM   rR   rQ   rS   rS   rT   -test_matthews_corrcoef_against_numpy_corrcoef  s   rS  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.   r`   r   r'  c              	      sX   g | ](}t D ]!}t D ]} ||f  ||f   ||f  ||f   qqqS rS   range)r   kmlCNrS   rT   r     s    .
z9test_matthews_corrcoef_against_jurman.<locals>.<listcomp>c                    s@   g | ] d d  f   t  fddtD  qS )Nc                    s.   g | ]}t D ]}|kr ||f qqS rS   rT  r   r   grZ  r[  rV  rS   rT   r        . Dtest_matthews_corrcoef_against_jurman.<locals>.<listcomp>.<listcomp>r<  r:   rU  r   rY  rV  rT   r         c                    s@   g | ]  d d f   t  fddtD  qS )Nc                    s.   g | ]}t D ]}|kr ||f qqS rS   rT  r\  r^  rS   rT   r     r_  r`  ra  rb  rY  rc  rT   r     rd  r   )r:   r>   r?   r   r   r   rl   r<  rU  r   r#   r   )	rM   rR   rQ   r  cov_ytypcov_ytytcov_ypyp
mcc_jurmanmcc_oursrS   rY  rT   %test_matthews_corrcoef_against_jurman  s0   
rj  c                  C   s,  t jd} dd | jddddD }tt||d dd |D }tt||d	 t|d
dgd}t |d
d}tt||d	 ttg dg dd tt|d
gt| d g d}g d}tt||d dgd dgd  }t	
t tt|||dd W d    d S 1 sw   Y  d S )Nr   c                 S   s   g | ]
}|d kr
dndqS )r   r   r   rS   r   r   rS   rS   rT   r         z*test_matthews_corrcoef.<locals>.<listcomp>r.   r`   r   r   c                 S   s   g | ]
}|d kr
dnd qS )r   r   rS   rk  rS   rS   rT   r     rl  r   r   r   r   r   r   r   r   rx   )r5   r   r5   r5   r   r5   r5   r5   r   r5   r5   r5   r5   r5   r5   r5   r   r5   r5   r5   )r5   r5   r5   r   r   r5   r5   r5   r5   r   r5   r5   r5   r   r5   r5   r5   r   r5   r5   r5   r   r'  )r:   r>   r?   r   r   r#   r
   whererl   r   r   AssertionError)rM   rR   
y_true_invy_true_inv2y_1y_2maskrS   rS   rT   test_matthews_corrcoef  s"   "ru  c            	         sL  t jd} td d} fdd| jd|ddD }tt||d g d	}g d
}tt||d g d	}g d}tt||dt d  g d}g d}tt||d g d}g d}tt||d g d}g d}tt||d g d}g d}g d}tt|||dd g d}g d}g d}tt|||dd d S )Nr   r   r   c                    s   g | ]}t  | qS rS   )chrrk  ord_arS   rT   r     s    z5test_matthews_corrcoef_multiclass.<locals>.<listcomp>r`   r   r   )r   r   r5   r5   r.   r.   )r.   r.   r   r   r5   r5   g      )r5   r5   r   r   r   r   ii  r   )r   r   r   rx   	r   r5   r.   r   r5   r.   r   r5   r.   )	r5   r5   r5   r.   r.   r.   r   r   r   )r   r   r5   r5   r.   )r5   r5   r   r   r.   r5   r5   r5   r5   r   r'  r   )r   r   r5   r.   r5   r5   r   r   )r:   r>   r?   ordr   r   r#   r   )	rM   	n_classesrR   
y_pred_bad
y_pred_minrQ   rr  rs  r  rS   rw  rT   !test_matthews_corrcoef_multiclass  s@   r  n_pointsd   i'  c                    s   t jd dd } fdd}t ddg| }tt||d t g d| }tt||d || \}}tt||d tt||||| d S )	Ni3c                 S   sx   t | |}|d }|d }|d }t| }|| | }|| | }|| ||  }	|| d|  d|  }
|	t|
 S )Nr5   r5   )r5   r   rQ  r5   )r   rl   r:   r   )rR   rQ   conf_matrixtrue_pos	false_pos	false_negr  pos_rateactivitymcc_numeratormcc_denominatorrS   rS   rT   mcc_safe  s   
z1test_matthews_corrcoef_overflow.<locals>.mcc_safec                    s8     | }|d  | d   }|dk}|dk}||fS )N皙?r   )random_sample)r  x_truex_predrR   rQ   rM   rS   rT   	random_ys  s
   
z2test_matthews_corrcoef_overflow.<locals>.random_ysrx   r   )rx   r   r:  )r:   r>   r?   repeatr   r#   )r  r  r  arrrR   rQ   rS   r  rT   test_matthews_corrcoef_overflow  s   r  c            
      C   s  t dd\} }}t| |d d\}}}}t|g dd t|g dd t|g dd t|g d t| |d	d
d}t|dd t| |d
d}t|dd t| |d
d}	t|	dd t| |dd}t|dd t| |dd}t|dd t| |dd}	t|	dd t| |dd}t|dd t| |dd}t|dd t| |dd}	t|	dd tt	 t| |dd W d    n1 sw   Y  tt	 t| |dd W d    n1 sw   Y  tt	 t| |dd W d    n1 sw   Y  tt	 t
| |ddd W d    n	1 sw   Y  t| |g dd d\}}}}t|g dd t|g dd t|g dd t|g d d S )NFr   r   )(\?Q?gzG?r.   )HzG?g
ףp=
?r^   )Q?333333?r   )rW   r]   r`   r5   r   r   g(\?r   r   gRQ?r   gGz?r   r   r   r   r  r   )r  g=
ףp=?r  )r  r^   r   )r  r   r  )rW   r`   r]   )rU   r$   r   r   r%   r&   r   r   r   r   r   )
rR   rQ   rr   rL   r   r   r   r   r   r   rS   rS   rT   )test_precision_recall_f1_score_multiclass-  sV   r  r   )r   r   r   r   Nc                 C   sz   t g dg}t g dg}t||g dg | d\}}}}t|d t|d t|d | d u r;t|g d d S d S )Nr{  r   r   r5   r5   )r   r   r5   r.   )ri   warn_forr   r   r   r5   r5   r   )r:   r   r$   r   )r   rR   rQ   rL   r   r   r   rS   rS   rT   ;test_precision_refcall_f1_score_multilabel_unordered_labelsg  s   


r  c            
      C   s   t g d} t g d}t| |d d\}}}}t| |dd\}}}}|t |ks-J |t |ks6J |t |ks?J t| |dd\}}}}t | }	|t j||	dksZJ |t j||	dkseJ |t j||	dkspJ d S )N)r   r5   r   r   r5   r5   r   r5   r   r   r5   r   r5   r   r5   )r5   r5   r   r5   r   r5   r5   r5   r5   r   r5   r   r5   r   r5   r   r   r   rJ  )r:   r   r$   r   bincountr   )
rR   rQ   r   r   r   rr   rL   r   r   r[   rS   rS   rT   .test_precision_recall_f1_score_binary_averagedv  s   
r  c               
   C   s   t jdd} z:t g d}t g d}tt||dddd tt||dddd tt||dddd W t jd	i |  d S t jd	i |  w )
Nraise)r.  )r   r5   r.   r   r5   r.   )r.   r   r5   r5   r.   r   r   r   rx   r.   rS   )r:   seterrr   r   r%   r&   r   )old_error_settingsrR   rQ   rS   rS   rT   test_zero_precision_recall  s   &r  c                  C   s   t dd\} }}t| |ddgd}t|ddgddgg t| |d	dgd}t|d
d	gddgg t| d }t| |d	|gd}t|d
dgddgg d S )NFr   r   r5   r   r  r   r   r.   r  rW   )rU   r   r   r:   max)rR   rQ   rr   r   extra_labelrS   rS   rT   .test_confusion_matrix_multiclass_subset_labels  s   r  zlabels, err_msgz,'labels' should contains at least one label.r   r   z.At least one label specified must be in y_truez
empty listzunknown labels)idsc                 C   sR   t dd\}}}tjt|d t||| d W d    d S 1 s"w   Y  d S )NFr   r   r   )rU   r   r   r   r   )ri   r   rR   rQ   rr   rS   rS   rT   test_confusion_matrix_error  s   	"r  ri   r5   r   )NonerG   
multiclassc                 C   s>   | rt | nd}tj||ftd}tg g | d}t|| d S )Nr   r1  r   )rl   r:   r   r=   r   r   )ri   expected_n_classesexpectedr   rS   rS   rT   *test_confusion_matrix_on_zero_length_input  s   r  c                  C   s8  g d} t t| }t| | }|jt jksJ t jt jt jfD ]}t| | |j	|ddd}|jt jks6J q t j
t jd tfD ]}t| | |j	|ddd}|jt jksUJ q?t jt| dt jd}t| | |d}|d dkspJ |d d	ksxJ t jt| d
t jd}t| | |d}|d d
ksJ |d dksJ d S )Nr   F)copyr'  l    r  r   r   r  l    l    )r:   onesrl   r   r1  int64bool_int32uint64astypefloat32float64objectfulluint32)rI   weightr   r1  rS   rS   rT   test_confusion_matrix_dtype  s$   
r  c                  C   sL   t  } t| dd\}}}d}t||tt| j| jd}||ks$J d S )NFrV   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
ri   rj   r   r6   rU   r   r:   r;   rl   rj   rq   rR   rQ   rr   rs   rt   rS   rS   rT   %test_classification_report_multiclass  s   r  c                  C   s0   g dg d} }d}t | |}||ksJ d S )N)	r   r   r   r5   r5   r5   r.   r.   r.   ry  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   )rR   rQ   rs   rt   rS   rS   rT   .test_classification_report_multiclass_balanced  s   
r  c                  C   s8   t  } t| dd\}}}d}t||}||ksJ d S )NFrV   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   rU   r   r  rS   rS   rT   :test_classification_report_multiclass_with_label_detection
  s
   
r  c                  C   sN   t  } t| dd\}}}d}t||tt| j| jdd}||ks%J d S )NFrV   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   )ri   rj   digitsr  r  rS   rS   rT   1test_classification_report_multiclass_with_digits  s   r  c                  C   st   t dd\} }}tg d|  } tg d| }d}t| |}||ks'J d}t| |g dd}||ks8J d S )NFr   )bluegreenreda|                precision    recall  f1-score   support

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

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

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

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
r~   rj   rU   r:   r   r   )rR   rQ   rr   rs   rt   rS   rS   rT   7test_classification_report_multiclass_with_string_label9  s   
r  c                  C   L   t dd\} }}tg d}||  } || }d}t| |}||ks$J d S )NFr   )u   blue¢u   green¢u   red¢u                precision    recall  f1-score   support

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

    accuracy                           0.53        75
   macro avg       0.53      0.60      0.51        75
weighted avg       0.51      0.53      0.47        75
r  rR   rQ   rr   ri   rs   rt   rS   rS   rT   8test_classification_report_multiclass_with_unicode_label\  s   
r  c                  C   r  )NFr   )r  greengreengreengreengreenr  a                             precision    recall  f1-score   support

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

                 accuracy                           0.53        75
                macro avg       0.53      0.60      0.51        75
             weighted avg       0.51      0.53      0.47        75
r  r  rS   rS   rT   <test_classification_report_multiclass_with_long_string_labelr  s   
r  c                  C   sd   g d} g d}g d}d}t jt|d t| |ddg|d W d    d S 1 s+w   Y  d S )	Nr   r   r.   r   r   r   r.   r.   r   r   zclass 0zclass 1zclass 2z6labels size, 2, does not match size of target_names, 3r   r   r.   r  )r   r   r   r   )rR   rQ   rj   r   rS   rS   rT   =test_classification_report_labels_target_names_unequal_length  s   "r  c                  C   s^   g d} g d}g d}d}t jt|d t| ||d W d    d S 1 s(w   Y  d S )Nr  r  r  zaNumber of classes, 2, does not match size of target_names, 3. Try specifying the labels parameterr   r  )r   r   r   r   )rR   rQ   rj   r   rS   rS   rT   @test_classification_report_no_labels_target_names_unequal_length  s   "r  c                  C   sN   d} d}t d|| dd\}}t d|| dd\}}d}t||}||ks%J d S )Nr   rD  r5   r   )rK   rJ   r}  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   )r}  rJ   rr   rR   rQ   rs   rt   rS   rS   rT   %test_multilabel_classification_report  s   


r  c                  C   r   )Nr   r   r   r   r   r5   )r:   r   r'   r   r   r9   r   rS   rS   rT   $test_multilabel_zero_one_loss_subset  r   r  c                  C   sH  t g dg dg} t g dg dg}t ddg}t| |dks&J t| | dks/J t||dks8J t|d| dksCJ t| d|  dksNJ t| t | jdks[J t|t | jd	kshJ t| ||d
dkssJ t| d| |d
dksJ t| t | |d
dksJ t| d |d t| d |d ksJ d S )Nr   r   r   r5   r   UUUUUU?r   r   r   r'  gUUUUUU?gUUUUUU?)r:   r   r   r   r9   
zeros_like
sp_hamming)r   r   wrS   rS   rT   test_multilabel_hamming_loss  s   ,r  c                  C   s  t g d} t g d}d}tjt|d t| |ddd W d    n1 s*w   Y  t g dg dg} t g d	g d
g}d}tjt|d t| |ddd W d    n1 saw   Y  t g d} t g d}d}tjt|d t| |dd W d    n1 sw   Y  d}tjt|d t| |dd W d    n1 sw   Y  d}tjt|d t| |ddd W d    d S 1 sw   Y  d S )N)r   r5   r   r5   r5   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]r   rG   r.   r   r   r   r   r   r   Target is multilabel-indicator but average='binary'. Please choose another average setting, one of \[None, 'micro', 'macro', 'weighted', 'samples'\].r   )r   r5   r5   r   r.   rz  Target is multiclass but average='binary'. Please choose another average setting, one of \[None, 'micro', 'macro', 'weighted'\].r   zJSamplewise metrics are not available outside of multilabel classification.r   zNote that pos_label \(set to 3\) is ignored when average != 'binary' \(got 'micro'\). You may use labels=\[pos_label\] to specify a single positive class.r   r   )r:   r   r   r   r   r    r   r   )rR   rQ   r   msg1msg2msg3r   rS   rS   rT   test_jaccard_score_validation  s:   "r  c                 C   sb  t g dg dg}t g dg dg}t||dddks!J t||dddks,J t||dddks7J t|t |dddksEJ t|t |dddksSJ t|t |jdddksbJ t|t |jdddksqJ t g dg d	g}t g d
g dg}tt||ddd tt||ddd tt||ddd tt||dddgdd tt||dddgdd tt||d dt g d t g dg dg}t g d
g dg}tt||ddd tt||ddd d}tj	t
|d t||dgdd W d    n	1 sw   Y  d}tj	t
|d t||dgdd W d    n	1 s9w   Y  d}tjt|d  tt ddggt ddggdddks`J W d    n	1 skw   Y  d}tjt|d& tt ddgddggt ddgddggdddksJ W d    n	1 sw   Y  t| rJ d S )Nr   r   r   r   r   r   r5   r   r   r   r   r   r   r   g?r.   r   r   )r   r   r   r   r   g      ?z	Got 4 > 2r   r   r   z
Got -1 < 0r   zXJaccard is ill-defined and being set to 0.0 in labels with no true or predicted samples.zXJaccard is ill-defined and being set to 0.0 in samples with no true or predicted labels.)r:   r   r    r   r   r9   r   r   r   r   r   r   r,   r  )recwarnr   r   rR   rQ   r  r  r   rS   rS   rT   test_multilabel_jaccard_score
  sl   $
r  c                 C   sX  g d}g d}g d}t  }|| ||}||}tt||}tt||}ddgddgddgdgdgdgd g}	ddgdd	gd	dgdgdgd	gd g}
d
D ]}t|	|
D ]\}}t|||d|||d qWqPtddgddgddgg}tddgddgddgg}t	  t||dddksJ W d    n1 sw   Y  t
| rJ d S )N)antr  catr  r  r  birdr  )r  r  r  r  r  r  r  r  )r  r  r  r  r  r  r   r5   r.   )r   r   r   Nr   r   r   )r   rC   	transformr   r    zipr   r:   r   r   r  )r  rR   rQ   ri   lbr   r   multi_jaccard_scorebin_jaccard_scoremulti_labels_listbin_labels_listr   m_labelb_labelrS   rS   rT   test_multiclass_jaccard_scoreW  s>   


$	

r  c                 C   s   t dgdgdddksJ d}tjt|d t ddgddgdddks&J W d    n1 s0w   Y  t dgdgdddd	ksCJ tg d
}tg d}tt ||ddd tt ||dddd t| rlJ d S )Nr5   r   rG   r   rx   zOJaccard is ill-defined and being set to 0.0 due to no true or predicted samplesr   r   r   )r5   r   r5   r5   r   )r5   r   r5   r5   r5   r   r  r   )r    r   r   r,   r:   r   r   r  )r  r   rR   rQ   rS   rS   rT   !test_average_binary_jaccard_score|  s    r  c                  C   s   t g dg dg} t g dg dg}d}tjt|d t| |ddd}|tdks1J W d    d S 1 s<w   Y  d S )	Nr   r   r   r   zJaccard is ill-defined and being set to 0.0 in samples with no true or predicted labels. Use `zero_division` parameter to control this behavior.r   r   r}   r   r|   rx   )r:   r   r   r   r,   r    r   )rR   rQ   r   scorerS   rS   rT   (test_jaccard_score_zero_division_warning  s   "r  zzero_division, expected_scorer  )r5   r   c                 C   s   t g dg dg}t g dg dg}t  tdt t||d| d}W d    n1 s3w   Y  |t|ksAJ d S )Nr   r  r;  r   r  )	r:   r   r   r   r=  r,   r    r   r   )r|   expected_scorerR   rQ   r  rS   rS   rT   *test_jaccard_score_zero_division_set_value  s   
r  c                  C   s4  t g dg dg dg} t g dg dg dg}t| |d d\}}}}t|g dd t|g dd t|g d	d t|g d
d t| |dd d}|}t|g dd t| |dd\}}}}t|d t|d t|d |d u syJ tt| |dddt | t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddd| | d| |   t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddt j||d t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddd d S )Nr5   r   r   r   r   r5   r   r   r  )r5   r   r5   r   r   )rx   r   r   rx   r.   )rx   r   r   rx   rx   r   r5   rx   )r5   r5   r5   r5   r   r   )r   r  r5   r   r   g      ?r   竪?r   r   r   r   rJ  r   r:   r   r$   r   r   r   r   r   rR   rQ   rL   r   r   r   f2r[   rS   rS   rT   +test_precision_recall_f1_score_multilabel_1  sT   











r  c                  C   s6  t g dg dg dg} t g dg dg dg}t| |d d\}}}}t|g dd t|g d	d t|g d
d t|g dd t| |dd d}|}t|g dd t| |dd\}}}}t|d t|d t|d |d u syJ tt| |dddd| | d| |   t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddt | t| |dd\}}}}t|d t|d t|d |d u sJ tt| |dddt j||d t| |dd\}}}}t|d t|d t|d |d u sJ tt| |ddddd d S )Nr  r  r  r   r   r   r5   r{  r   )rx   r   rx   rx   r.   )rx   r   rx   rx   )rx   gQ?rx   rx   r5   r.   r5   r   r  )r   皙?r   r   r         ?r   r   r   g      ?r  r   r   r\   rJ  r   g&S?r  r  rS   rS   rT   +test_precision_recall_f1_score_multilabel_2  sX   











r  c           	      C   sz  t g dg dg dg}t g dg dg dg}| dkr"dnd} t||d | d\}}}}t|| dddgd	 t|dd
d| gd	 t|g dd	 t|g dd	 t||d	d | d}|}t|g dd	 t||d| d\}}}}t|d	|  d  t|d|  d  t|d |d u sJ tt||d	ddt | t||d| d\}}}}t|d t|d
 t|d |d u sJ tt||d	d| dd| | d| |   t||d| d\}}}}t|| dkrdnd t|d
 t|d |d u sJ tt||d	d| dt j||d t||dd\}}}}t|d t|d t|d |d u s.J tt||d	d| dd d	 d S )!Nr  r  r  rm  r  r   rx   r  r.   r   r   r  r   r   r|   )r   r	  r5   r   r   r         ?r  r  r   r   r_   r   r   r   r   g?rJ  r   r   r\   gZd;O?r  )	r|   rR   rQ   rL   r   r   r   r  r[   rS   rS   rT   7test_precision_recall_f1_score_with_an_empty_prediction3  sz   











r  r   )r   r   r   r   c           
      C   s   t d}t |}tt|||| |d\}}}}tt||| ||d}	t|}t|| t|| t|| |d u s;J t|	t| d S )Nr`   r   r   r   r|   r  )r:   r   r  r   r$   r   ro   r   )
r   r   r|   rR   rQ   rL   r   r   r   fbetarS   rS   rT   "test_precision_recall_f1_no_labels  s0   

	


r  c           	      C   s   t d}t |}t}tt |||| dd\}}}}W d    n1 s(w   Y  t|d t|d t|d |d u sBJ tt t||| dd}W d    n1 sZw   Y  t|d d S )Nr  r   r  r   )	r:   r   r  r$   r   r   r,   r   r   )	r   rR   rQ   funcrL   r   r   r   r  rS   rS   rT   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|g dd t|| | | gd d S )Nr  r   r  r  r.   r  )r:   r   r  r   r$   r   ro   r   )r|   rR   rQ   rL   r   r   r   r  rS   rS   rT   /test_precision_recall_f1_no_labels_average_none  s&   


r  c                  C   s   t d} t | }tt t| |d dd\}}}}W d    n1 s&w   Y  t|g dd t|g dd t|g dd t|g dd tt t| |dd d}W d    n1 scw   Y  t|g dd d S )Nr  r5   r  r  r.   r  )	r:   r   r  r   r   r,   r$   r   r   )rR   rQ   rL   r   r   r   r  rS   rS   rT   4test_precision_recall_f1_no_labels_average_none_warn  s   


r  c               	   C   sV  t t} }dD ]J}d}tj||d | g dg d|d W d    n1 s(w   Y  d}tj||d | g dg d|d W d    n1 sLw   Y  qd}tj||d! | td	d
gd	d
ggtd	d
gd
d
ggdd W d    n1 sw   Y  d}tj||d! | td	d
gd
d
ggtd	d
gd	d
ggdd W d    n1 sw   Y  d}tj||d! | td	d	gd	d	ggtd
d
gd
d
ggdd W d    n1 sw   Y  d}tj||d! | td
d
gd
d
ggtd	d	gd	d	ggdd W d    n	1 sw   Y  d}tj||d | d	d	gddgdd W d    n	1 s;w   Y  d}tj||d | ddgd	d	gdd W d    n	1 s`w   Y  tjdd5}td t d
d
gd
d
gdd d}t	|
 j|ksJ d}t	|
 j|ksJ W d    d S 1 sw   Y  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   r5   r5   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.r5   r   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   rG   Tr   always)r$   r,   r   r   r:   r   r   r   r=  r   popr   )r   r  r   r   r   rS   rS   rT   test_prf_warnings  sj   
4444
$r  c                 C   s  t }dD ]}t|g dg d|| d t|g dg d|| d qt|tddgddggtddgddggd| d t|tddgddggtddgddggd| d t|tddgddggtddgddggd| d t|tddgddggtddgddggd| d t|ddgd	d	gd
| d t|d	d	gddgd
| d tjdd"}td t ddgddgd
| d t|dksJ W d    d S 1 sw   Y  d S )Nr  r   r  r  r5   r   r   r   r   rG   Tr   r  )r$   r   r:   r   r   r   r=  rl   )r|   r   r   r   rS   rS   rT   )test_prf_no_warnings_if_zero_division_setW  sb   		
"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rQt| j	d	ksPJ nt
|dksYJ tddgddg | dkrqt| j	d	ksyJ W d    d S W d    d S 1 sw   Y  d S )
Nr5   r   r   r  Tr   r  r}   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   r   r   r=  r   r  r   rl   r|   r   rS   rS   rT   test_recall_warnings  s:   

"r  c                 C   s  t jddW}t d ttddgddggtddgddggd| d | dkr6t| jd	ks5J nt	|dks>J tddgddg | dkrVt| jd	ksVJ W d    n1 s`w   Y  t
ttddgddggtddgddggd| d d S )
NTr   r  r5   r   r   r  r}   zPrecision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.)r   r   r=  r%   r:   r   r   r  r   rl   r   r  rS   rS   rT   test_precision_warnings  s6   


r  c              	   C   s>  t jdd}t d tttddfD ]x}|tddgddggtddgddggd| d	 t|dks8J |tddgddggtddgddggd| d	 t|dksZJ |tddgddggtddgddggd| d	 | d
krt	|
 jdksJ qt|dksJ qW d    d S 1 sw   Y  d S )NTr   r  r.   r   r5   r   r   r  r}   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.)r   r   r=  r   r   r   r:   r   rl   r   r  r   )r|   r   r  rS   rS   rT   test_fscore_warnings  s<   

"r   c            
   
   C   s   g d} g d}d}t g dg dg dg}t g dg dg dg}d}| ||f|||ffD ].\}}}tttttd	d
fD ]}	tjt	|d |	|| W d    n1 sZw   Y  qAq2d S )N)r5   r.   r   r   )r5   r.   r   r5   r  r   r   r   r  r  r.   r   r   )
r:   r   r%   r&   r   r   r   r   r   r   )
	y_true_mc	y_pred_mcmsg_mc
y_true_ind
y_pred_indmsg_indrR   rQ   r   rv   rS   rS   rT   'test_prf_average_binary_data_non_binary  s,   
r'  c                  C   s  d} d}d}d}d}d}| t g dg dg d	gf| t d
dgdd
gddggf|g df|g df|g df|t dgdgdggf|t d
gdgdggf|t dgdgdggf|t d
dgddgddggf|t ddgddgddggfg
}i | | f| ||f|||f||| fd || fd ||f|||fd ||fd ||fd | |fd ||fd ||fd ||fd ||fd | |fd ||fd ||fd ||fd | |fd ||fd ||fd i}t|ddD ]\\}}	\}
}z|||
f }W n ty   ||
|f }Y nw |d u rtt t|	| W d    n	1 s(w   Y  ||
krVd||
}tjt|d t|	| W d    n	1 sPw   Y  q|||| fvrd|}tjt|d t|	| W d    n	1 s{w   Y  qt|	|\}}}||ksJ |	dr|jdksJ |jdksJ nt
|t |	 t
|t | tt t|	d d | W d    n	1 sw   Y  qddg}	d d!g}d"}tjt|d t|	| W d    d S 1 sw   Y  d S )#Nzmultilabel-indicatorr  rG   
continuouszmulticlass-multioutputzcontinuous-multioutputr   r   r   r   r5   )r.   r   r5   )rx   r  r   r.   r   rx   r  r   r   r:  g?g      @)r  z@Classification metrics can't handle a mix of {0} and {1} targetsr   z{0} is not supported
multilabelcsrr   )r5   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.)r:   r   r   KeyErrorr   r   r   r+   format
startswithr   squeeze)INDMCBINCNTMMCMCNEXAMPLESEXPECTEDtype1r   type2r   r  r   merged_typey1outy2outr   rS   rS   rT   test__check_targets.  s   


	



$r<  c                  C   s*   ddg} ddg}t | |d dksJ d S )Nr   r5   r   r  r*   )rR   rQ   rS   rS   rT   Atest__check_targets_multiclass_with_both_y_true_and_y_pred_binary  s   r=  c                  C   s`   t g d} t g d}t| |dksJ t g d} t g d}t| |dks.J d S )N)r   r5   r5   r   )g      !r   r  g333333ӿ333333?)r   r.   r.   r   )r:   r   r   rR   pred_decisionrS   rS   rT   test_hinge_loss_binary  s   rA  c               
   C   s  t g dg dg dg dg dg dg} t g d}t d| d d  | d d  d| d d  | d d	  d| d	 d	  | d	 d
  d| d
 d  | d
 d	  d| d d
  | d d	  d| d d	  | d d
  g}t j|dd |d t |}t|| |ksJ d S )N
ףp=
?(\ſ(\gGz)HzGgGz׿Q޿rE  333333rE  RQؿrD  )rF  rJ  rG  rE  gzGgHzGgHzGѿgQ?)r   r5   r.   r5   r   r.   r5   r   r.   r   r   r   outr:   r   clipr   r   )r@  rR   dummy_lossesdummy_hinge_lossrS   rS   rT   test_hinge_loss_multiclass  s,   


rR  c                  C   sr   t g d} t g dg dg dg dg}d}tjt|d t| | W d    d S 1 s2w   Y  d S )N)r   r5   r.   r.   )gRQ?g rh?g(\gffffffrH  rK  zDPlease include all labels in y_true or pass labels as third argumentr   )r:   r   r   r   r   r   )rR   r@  error_messagerS   rS   rT   :test_hinge_loss_multiclass_missing_labels_with_labels_none  s   	"rT  c               
   C   s   t g d} t g d}d}tjtt|d t| |d W d    n1 s+w   Y  t ddgddgddgddgddgddgddgg}g d	}d
}tjtt|d t| ||d W d    d S 1 smw   Y  d S )N)r.   r5   r   r5   r   r5   r5   )r   r5   r.   r5   r   r.   r5   zThe shape of pred_decision cannot be 1d arraywith a multiclass target. pred_decision shape must be (n_samples, n_classes), that is (7, 3). Got: (7,)r   r?  r   r5   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))rR   r@  ri   )r:   r   r   r   r   reescaper   )rR   r@  rS  ri   rS   rS   rT   <test_hinge_loss_multiclass_no_consistent_pred_decision_shape  s   4"rW  c               	   C   s  t g dg dg dg dg dg} t g d}t g d}t d| d d  | d d  d| d d  | d d  d| d d  | d d	  d| d	 d  | d	 d  d| d
 d  | d
 d	  g}t j|dd |d t |}t|| |d|ksJ d S )NrB  皙rJ  rG  rE  rH  )r   r5   r.   r5   r.   )r   r5   r.   r   r5   r   r.   r   r   rL  r   rN  r@  rR   ri   rP  rQ  rS   rS   rT   .test_hinge_loss_multiclass_with_missing_labels  s*   		
r[  c               	   C   s  t g dg dg dg dg dg} t g d}t g d}t d| d d  | d d  d| d d	  | d d  d| d	 d	  | d	 d  d| d
 d  | d
 d	  d| d d	  | d d  g}t j|dd |d t |}tt|| |d| d S )N)rC  rD  rE  )g333333ÿrE  rG  )rI  rE  rJ  )rY  g(\gzGڿ)r   r.   r.   r   r.   r   r5   r   r.   r   r   rL  r   )r:   r   rO  r   r   r   rZ  rS   rS   rT   @test_hinge_loss_multiclass_missing_labels_only_two_unq_in_y_true	  s.   		
r\  c               
   C   s  g d} g dg dg dg dg dg dg}t d|d d  |d d  d|d d  |d d  d|d d  |d d	  d|d	 d  |d	 d  d|d
 d	  |d
 d  d|d d  |d d	  g}t j|dd |d t |}t| ||ksJ d S )N)r  r  r  r  whiter  rB  rX  rH  rK  r5   r   r.   r   r   r   rL  rN  )rR   r@  rP  rQ  rS   rS   rT   +test_hinge_loss_multiclass_invariance_lists#	  s(   

r^  c               	   C   s  g d} t ddgddgddgddgddgd	d
gg}t| |}t|d g d} g dg dg d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 g d} ddgddgddgg}tt t| | W d    n1 sw   Y  g d} ddgddgddgddgg}t| |}t|ddd ddg} ddgddgg}t ddgddgg}d}tjt|d  t| | W d    n1 sw   Y  ddgddgdd!gg}d"}t|t| |f t 	t 
|d d d#f  }t| |d#dgd$}t|| g d%} g d&g d'g d(g}t| |g d)d$}t|d*dd d S )+N)nor_  r_  yesr`  r`  r   r   r^   g{Gz?gGz?r   r
  gMbP?g+?gRF?r)  )r  ffffff?r   )r   r  r  )r   r   r>  Tr/  g躕ʀ?r.   Fg.L`@r   r   )r0  epsr  ra  r   r   hamspamre  rd  L7?zly_true contains only one label \(2\). Please provide the true labels explicitly through the labels argument.r   r>  zBFound input variables with inconsistent numbers of samples: [3, 2]r5   r   r   )r  ra  r>  )r   r   r>  )r>  r^   r   r(  gPv0?)r:   r   r!   r   asarrayrO  r   r   r   r   log)rR   rQ   lossr   	error_strtrue_log_losscalculated_log_lossy_score2rS   rS   rT   test_log_loss?	  sX   &




rn  c            
      C   s   t g d} t ddgddgddgddgg}ttfg}zdd	lm}m} |||f W n	 ty7   Y nw |D ]\}}|| ||}}t||}	t	|	d
dd q:d S )Nrc  r  ra  r   r   r   r   r   )Series	DataFramerf  r   r   )
r:   r   r   pandasro  rp  rM  ImportErrorr!   r   )
y_try_prtypesro  rp  TrueInputTypePredInputTyperR   rQ   ri  rS   rS   rT   test_log_loss_pandas_input	  s   "

rx  c                  C   s  t g d} t g d}t| | d t|  }tt| | d tt| || ttd|  || ttd|  d || tt	 t| |dd   W d    n1 sZw   Y  tt	 t| |d  W d    n1 svw   Y  tt	 t| |d  W d    n1 sw   Y  t g d} t g d}d	}tjt	|d
 t| | W d    n1 sw   Y  ttdgdgd ttdgdgd ttdgdgd ttdgdgddd ttdgdgddd d S )N)r   r5   r5   r   r5   r5   )r   r   r^   r>  r   gffffff?r.   rx   r   r5   )r   r5   r.   r   )r   r   r   r  zMOnly binary classification is supported. The type of the target is multiclassr   r   r   g{Gz?r   rC  foobar)r   )
r:   r   r   normrl   r   r(   r   r   r   )rR   rQ   
true_scorerS  rS   rS   rT   test_brier_score_loss	  s8   r}  c                  C   sJ   d} t jt| d tg dg d W d    d S 1 sw   Y  d S )Nz%y_pred contains classes not in y_truer   r  r   )r   r   r   r   r   rS   rS   rT   #test_balanced_accuracy_score_unseen	  s   "r~  zy_true,y_pred)r   r   r   r   )r   r   r   r   )r   r   r   r   c                 C   s   t | |dt| d}t  t| |}W d    n1 sw   Y  |t|ks,J t| |dd}t| t| | d }||| d|  ksJJ d S )Nr   r   T)adjustedr   r5   )r&   r:   uniquer   r   r   r   	full_like)rR   rQ   macro_recallbalancedr  chancerS   rS   rT   test_balanced_accuracy_score	  s   	r  )NF)	functoolsr   	itertoolsr   r   r   r   rU  numpyr:   scipyr   r   sklearnr   r   sklearn.datasetsr	   sklearn.preprocessingr
   r   sklearn.utils.validationr   sklearn.utils._testingr   r   r   r   r   r   sklearn.utils._mockingr   sklearn.metricsr   r   r   r   r   r   r   r   r   r   r    r!   r#   r$   r%   r&   r'   r(   r)   sklearn.metrics._classificationr+   sklearn.exceptionsr,   scipy.spatial.distancer-   r  rU   rw   r{   markparametrizer   r   r   r   r   r   r   r   r   r   r   r  r  r  r&  r*  r6  r9  rA  rO  rP  rS  rj  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r'  r<  r=  rA  rR  rT  rW  r[  r\  r^  rn  rx  r}  r~  r  rS   rS   rS   rT   <module>   sP   
0B
"

-

#)
	
'#8
!:



#

(M%

B
@L

!c
@
&
'
'b
 D#