U
    ½mœd'2 ã                   @   s<  d dl 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	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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'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l0m1Z1 d dl2m3Z3 e e"e%gZ4�dd!d"„Z5d#d$„ Z6d%d&„ Z7d'd(„ Z8d)d*„ Z9ej: ;d+d,d g¡d-d.„ ƒZ<d/d0„ Z=d1d2„ Z>d3d4„ Z?d5d6„ Z@d7d8„ ZAd9d:„ ZBd;d<„ ZCd=d>„ ZDd?d@„ ZEdAdB„ ZFdCdD„ ZGej: ;dEe Hd dFd dGg¡d dFdGgfe Hd dFd dGg¡dfdHdIdHdJgdHdIdJgfdHdIdHdJgdfg¡dKdL„ ƒZIej: ;dEe Hd dGd dGg¡d dFdGgfe HdHdMdHdMg¡dHdIdMgfg¡dNdO„ ƒZJej: ;dEe Hd dFdGdGg¡dfdHdIdJdJgdfd dFdGdGgd dFdGgfdHdIdJdJgdHdIdJgfg¡dPdQ„ ƒZKej: ;dRdSdTdUg¡dVdW„ ƒZLdXdY„ ZMej: ;dZd[e Hd dFdGdGg¡d dGd gfd[e HdHdIdJdJg¡dHdHdIgfd\e Hd dGd dGg¡dfd]e HdHdIdJdJg¡dHdJdIgfd^e Hd dFdGdGg¡d dFgfd^e HdHdIdJdJg¡dHdIgfd_e Hd dFdGdGg¡d dFdGd`gfd_e HdHdIdJdJg¡dHdIdJdMgfdae HdHdIdJdbg¡dHdIdJgfdae HdHdIdJdMg¡dHdIdJgfdae Hd dFdGd`g¡d dFdGgfg¡ej: ;dcdddeg¡dfdg„ ƒƒZNej: ;dhdidjdddkœfdldjdedkœfdmddg dnœfdodddpdqœfdrdcdsifdti fg¡dudv„ ƒZOdwdx„ ZPej: ;dye4¡dzd{„ ƒZQej: ;dye4¡d|d}„ ƒZRej: ;dye4¡d~d„ ƒZSd€d�„ ZTd‚dƒ„ ZUd„d…„ ZVd†d‡„ ZWdˆd‰„ ZXdŠd‹„ ZYej: ;dŒd d dFgd dpdFgd gd gfd d dFgd d�dpgd gd gfd d dFgdpdŽdFgd gd gfd d dFgd�dpdŽgd gd gfd dFd gd dpdFgdpgd gfd dFd gd d�dpgdpgd gfd dFd gdpdŽdFgdpgd gfd dFd gd�dpdŽgdpgd gfd dFdFgd dpdFgd�gd gfd dFdFgd d�dpgd gd gfd dFdFgdpdŽdFgd gd gfd dFdFgd�dpdŽgd gd gfdFd d gd dpdFgdFdFdpgd dFdFgfdFd d gd d�dpgdFdFdpgd dFdFgfdFd d gdpdŽdFgdFdFdpgd dFdFgfdFd d gd�dpdŽgdFdFdpgd dFdFgfdFd dFgd dpdFgdFdFd gd dpdpgfdFd dFgd d�dpgdFdFd gd dpdpgfdFd dFgdpdŽdFgdFdFd gd dpdpgfdFd dFgd�dpdŽgdFdFd gd dpdpgfg¡d�d‘„ ƒZZej: ;dŒdFd gdpdpgdFgd gfd dFgdpdpgdFgd gfd d dFgd�dpdpgdpgd gfd dFd gd�dpdpgdpgd gfd dFdFgd�dpdpgd gd gfdFd d gd�dpdpgdFgd gfdFd dFgd�dpdpgdFgd gfdFdFd gd�dpdpgdFgd gfg¡d’d“„ ƒZ[d”d•„ Z\ej: ;d–d d�dpdŽdFg¡d—d˜„ ƒZ]ej: ;d™d d d d d dFgd d d d dFdFgd d d dFdFdFgd d dFdFdFdFgd dFdFdFdFdFgg¡dšd›„ ƒZ^ej: ;dœd dFgd dpdFgd�fd dFdFgd dpgd�fd d d gd dpdFgdžfdFdFdFgd dpdFgdžfdŸdŸd gd¡d¢d£gd¤fg¡d¥d¦„ ƒZ_d§d¨„ Z`d©dª„ Zad«d¬„ Zbd­d®„ Zcd¯d°„ Zdd±d²„ Zed³d´„ Zf�dd·d¸„Zgej: ;d¹eaeeedebf¡ej: ;dºe!eff¡d»d¼„ ƒƒZhd½d¾„ Ziej: ;d¿dÀ¡ej: ;dÁdÂ¡ej: ;dÃejdFƒ¡dÄdÅ„ ƒƒƒZkdÆdÇ„ ZldÈdÉ„ ZmdÊdË„ Znej: ;dÌdFd dFgd�dpdpgfdFd dFgd�dpdpggfdFd dFggd�dpdpgfg¡dÍdÎ„ ƒZodÏdÐ„ ZpdÑdÒ„ ZqdÓdÔ„ ZrdÕdÖ„ Zsd×dØ„ ZtdÙdÚ„ ZudÛdÜ„ ZvdÝdÞ„ Zwdßdà„ Zxej: ;dád,d g¡dâdã„ ƒZydädå„ Zzdædç„ Z{dèdé„ Z|ej: ;dêd dFdGd`gdFd�fd dFdGd`gdGdpfd dFdGd`gd`dŽfg¡dëdì„ ƒZ}ej: ;díe HdîdîdFdFg¡dFdFfe HdîdFdîdFg¡dFdpfe HdîdFdîdFg¡dGdFfe Hd¡d¡dïdïg¡dFdFfe Hd¡dïd¡dïg¡dFdpfe Hd¡dïd¡dïg¡dGdFfg¡dðdñ„ ƒZ~ej: ;dòe Hd dFdFdGg¡dŽd dFdGd`gfe Hd dFdFdFg¡dpd dFdGd`gfe HdFdFdFdFg¡dpd dFdGd`gfe HdHdbdbdHg¡dŽdHdIdMdbgfg¡ej: ;dód,d g¡dôdõ„ ƒƒZdöd÷„ Z€ej: ;dêd dFdGd`gdFd�fd dFdGd`gdGdpfd dFdGd`gd`dFfg¡dødù„ ƒZ�ej: ;dúd dFdGd`gdûfd dFdGd`gdµfg¡düdý„ ƒZ‚ej: ;dþd dÿdFdGgd¡�d dïg�dd¢d¢gd¢�dd¢g�ddp�d ggd�dfd dFdGd`gd¡�d dïg�dd¢d¢gd¢�dd¢g�ddp�d ggd�dfdJdJdHdIgd¡�d dïg�dd¢d¢gd¢�dd¢g�ddp�d ggdHdIdJdJg�dfdJdJdHdIgd¡�d dïg�dd¢d¢gd¢�dd¢g�ddp�d ggdHdJdIg�dfd d dFdGgd¡�d dïg�dd¢d¢gd¢�dd¢g�ddp�d ggd dFdGd`g�dfd d dFdGgd¡�d dïg�dd¢d¢gd¢�dd¢g�ddp�d ggd dFd`g�dfd dFgdpd¡d¡gd¢�dd¡ggd�dfg¡�d	�d
„ ƒZƒ�d�d„ Z„dS (  é    N)Ú
csr_matrix)Ústats)Údatasets)Úsvm)Úsoftmax)Úmake_multilabel_classification)Ú_sparse_random_matrix)Úcheck_arrayÚcheck_consistent_length)Úcheck_random_state)Úassert_allclose©Úassert_almost_equal)Úassert_array_equal)Úassert_array_almost_equal)Úaccuracy_score©Úauc)Úaverage_precision_score)Úcoverage_error)Ú	det_curve)Ú%label_ranking_average_precision_score)Úprecision_recall_curve)Úlabel_ranking_loss)Úroc_auc_score)Ú	roc_curve)Ú_ndcg_sample_scoresÚ_dcg_sample_scores)Ú
ndcg_scoreÚ	dcg_score)Útop_k_accuracy_score)ÚUndefinedMetricWarning)Útrain_test_split)ÚLogisticRegression)Úlabel_binarizeFc                 C   s  | dkrt  ¡ } | j}| j}|r:||dk  ||dk   }}|j\}}t |¡}tdƒ}| |¡ || ||  }}t	|d ƒ}tj
 d¡}tj|| |d| ¡f }tjdddd�}	|	 |d|… |d|… ¡ ||d… ¡}
|rò|
dd…d	f }
|	 ||d… ¡}||d… }|||
fS )
z¼Make some classification predictions on a toy dataset using a SVC

    If binary is True restrict to a binary classification problem instead of a
    multiclass classification problem
    Né   é%   r   éÈ   ZlinearT)ZkernelZprobabilityÚrandom_stateé   )r   Z	load_irisÚdataÚtargetÚshapeÚnpÚaranger   ÚshuffleÚintÚrandomÚRandomStateZc_Zrandnr   ZSVCÚfitÚpredict_probaZpredict)ZdatasetÚbinaryÚXÚyÚ	n_samplesÚ
n_featuresÚpÚrngZhalfÚclfÚy_scoreÚy_predÚy_true© r@   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/metrics/tests/test_ranking.pyÚmake_prediction4   s*    


*rB   c                 C   sd   t  | ¡d }|| |k }|| |k }| dd¡| dd¡ }t  |dk¡}|tt|ƒt|ƒ ƒ S )zKAlternative implementation to check for correctness of
    `roc_auc_score`.r)   éÿÿÿÿr   )r-   ÚuniqueÚreshapeÚsumÚfloatÚlen)r?   r=   Ú	pos_labelÚposÚnegZdiff_matrixZ	n_correctr@   r@   rA   Ú_aucd   s    rL   c           	      C   sª   t  | ¡d }t  | |k¡}t  |¡ddd… }|| }| | } d}tt|ƒƒD ]P}| | |krPd}td|d ƒD ]}| | |krr|d7 }qr||d  }||7 }qP|| S )a>  Alternative implementation to check for correctness of
    `average_precision_score`.

    Note that this implementation fails on some edge cases.
    For example, for constant predictions e.g. [0.5, 0.5, 0.5],
    y_true = [1, 0, 0] returns an average precision of 0.33...
    but y_true = [0, 0, 1] returns 1.0.
    r)   NrC   r   ç      ð?)r-   rD   rF   ZargsortÚrangerH   )	r?   r=   rI   Zn_posÚorderÚscoreÚiÚprecÚjr@   r@   rA   Ú_average_precisions   s    	

rT   c                 C   sd   t | |ƒ\}}}tt|ƒƒ}tt|ƒƒ}d}tdt|ƒƒD ]$}||| || ||d    7 }q:|S )ao  A second alternative implementation of average precision that closely
    follows the Wikipedia article's definition (see References). This should
    give identical results as `average_precision_score` for all inputs.

    References
    ----------
    .. [1] `Wikipedia entry for the Average precision
       <https://en.wikipedia.org/wiki/Average_precision>`_
    r   r)   )r   ÚlistÚreversedrN   rH   )r?   r=   Ú	precisionZrecallÚ	thresholdZaverage_precisionrQ   r@   r@   rA   Ú_average_precision_slow‘   s    
"rY   c                 C   s^   dd„ }|| ||ƒ\}}t ||ƒ}d}|}d||  ||  }	|| }
dd||	 |
|	    S )zcAlternative implementation to check for correctness of `roc_auc_score`
    with `max_fpr` set.
    c                 S   sˆ   t | |ƒ\}}}|||k }t ||¡}|||k }t ||k¡}|d }	||	 || g}
||	 || g}t |t ||
|¡¡}||fS )Nr)   )r   r-   ÚappendÚargmaxZinterp)r?   Ú	y_predictÚmax_fprÚfprÚtprÚ_Únew_fprÚnew_tprZidx_outZidx_inZx_interpZy_interpr@   r@   rA   Ú_partial_roc©   s    z,_partial_roc_auc_score.<locals>._partial_rocr   ç      à?r)   r   )r?   r\   r]   rc   ra   rb   Zpartial_aucZfpr1Zfpr2Zmin_areaZmax_arear@   r@   rA   Ú_partial_roc_auc_score¤   s    
re   ÚdropTc           	      C   sz   t dd�\}}}t||ƒ}t||| d�\}}}t||ƒ}t||dd� t|t||ƒƒ |j|jksft‚|j|jksvt‚d S )NT©r5   ©Zdrop_intermediater%   ©Údecimal)	rB   rL   r   r   r   r   r   r,   ÚAssertionError)	rf   r?   r`   r=   Zexpected_aucr^   r_   Ú
thresholdsÚroc_aucr@   r@   rA   Útest_roc_curveÀ   s    

rn   c                  C   sŒ   t j d¡} t  dgd dgd  ¡}| jddd�}t||dd�\}}}|d dksXt‚|d	 dksht‚|j|jksxt‚|j|jksˆt‚d S )
Nr   é2   r)   é   éd   ©ÚsizeTrh   rC   )r-   r1   r2   ÚarrayÚrandintr   rk   r,   )r;   r?   r>   r^   r_   Zthrr@   r@   rA   Útest_roc_curve_end_pointsÎ   s    rv   c            
      C   sŽ   t dd�\} }}t| |ƒ\}}}g }|D ]2}t ||k| @ ¡}t | ¡}	| d| |	 ¡ q(t||dd� |j|jkszt‚|j|jksŠt‚d S )NTrg   rM   r%   ri   )rB   r   r-   rF   rZ   r   r,   rk   )
r?   r`   r=   r^   r_   rl   Ztpr_correctÚtÚtpr:   r@   r@   rA   Útest_roc_returns_consistencyÛ   s    
ry   c               	   C   s4   t dd�\} }}t t¡� t| |ƒ W 5 Q R X d S )NFrg   )rB   ÚpytestÚraisesÚ
ValueErrorr   )r?   r`   r=   r@   r@   rA   Útest_roc_curve_multiî   s    r}   c                  C   s`   t dd�\} }}t| |d ƒ\}}}t||ƒ}t|ddd� |j|jksLt‚|j|jks\t‚d S )NTrg   rd   çÍÌÌÌÌÌì?r%   ri   )rB   r   r   r   r,   rk   )r?   r`   r=   r^   r_   rl   rm   r@   r@   rA   Útest_roc_curve_confidenceö   s    
r   c                  C   s  t dd�\} }}t | j¡}t| |ƒ\}}}t||ƒ}t|ddd� |j|jksTt‚|j|jksdt‚t | j¡}t| |ƒ\}}}t||ƒ}t|ddd� |j|jks¨t‚|j|jks¸t‚t| |ƒ\}}}t||ƒ}t|ddd� |j|jksðt‚|j|jk�st‚d S )NTrg   rd   r%   ri   gö(\�Âõè?)	rB   r-   Úonesr,   r   r   r   rk   Úzeros)r?   Úpredr=   Ztrivial_predr^   r_   rl   rm   r@   r@   rA   Útest_roc_curve_hard  s$    


rƒ   c               
   C   s  ddddddddddg
} ddddddddddg
}d}t jt|d�� t| |ƒ\}}}W 5 Q R X t|t t|ƒtj¡ƒ |j	|j	ks†t
‚|j	|j	ks–t
‚d}t jt|d��  tdd„ | D ƒ|ƒ\}}}W 5 Q R X t|t t|ƒtj¡ƒ |j	|j	ksöt
‚|j	|j	k�st
‚d S )Nr)   r   úINo negative samples in y_true, false positive value should be meaningless©ÚmatchúHNo positive samples in y_true, true positive value should be meaninglessc                 S   s   g | ]}d | ‘qS )r)   r@   )Ú.0Úxr@   r@   rA   Ú
<listcomp>1  s     z,test_roc_curve_one_label.<locals>.<listcomp>)rz   Úwarnsr!   r   r   r-   ÚfullrH   Únanr,   rk   )r?   r>   Úexpected_messager^   r_   rl   r@   r@   rA   Útest_roc_curve_one_label  s     ÿÿ$r�   c               	   C   sØ  ddg} ddg}t | |ƒ\}}}t| |ƒ}t|dddgƒ t|dddgƒ t|dƒ ddg} ddg}t | |ƒ\}}}t| |ƒ}t|dddgƒ t|dddgƒ t|dƒ ddg} ddg}t | |ƒ\}}}t| |ƒ}t|ddgƒ t|ddgƒ t|dƒ ddg} ddg}t | |ƒ\}}}t| |ƒ}t|dddgƒ t|dddgƒ t|dƒ ddg} ddg}t | |ƒ\}}}t| |ƒ}t|ddgƒ t|ddgƒ t|dƒ ddg} ddg}d}tjt|d	�� t | |ƒ\}}}W 5 Q R X t t¡� t| |ƒ W 5 Q R X t|dddgƒ t|t	j
t	j
t	j
gƒ ddg} ddg}d
}tjt|d	�� t | |ƒ\}}}W 5 Q R X t t¡� t| |ƒ W 5 Q R X t|t	j
t	j
t	j
gƒ t|dddgƒ t	 ddgddgg¡} t	 ddgddgg¡}t t¡� t| |dd� W 5 Q R X t t¡� t| |dd� W 5 Q R X tt| |dd�dƒ tt| |dd�dƒ t	 ddgddgg¡} t	 ddgddgg¡}t t¡� t| |dd� W 5 Q R X t t¡� t| |dd� W 5 Q R X tt| |dd�dƒ tt| |dd�dƒ t	 ddgddgg¡} t	 ddgddgg¡}tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ t	 ddgddgg¡} t	 ddgddgg¡}tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ d S )Nr   r)   rM   ç        rd   ç      Ð?ç      è?r‡   r…   r„   Úmacro©ÚaverageÚweightedÚsamplesÚmicro)r   r   r   r   rz   r‹   r!   r{   r|   r-   r�   rt   )r?   r=   r_   r^   r`   rm   rŽ   r@   r@   rA   Útest_roc_curve_toydata8  s¦    









ÿÿr™   c                  C   s°   ddddddg} ddddddg}t | |d	d
�\}}}t|ddddgƒ 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g}t | |d	d
�\}}}t|ddddddgƒ d S )Nr   r)   r�   çš™™™™™É?rd   ç333333ã?çffffffæ?rM   Trh   ç       @çš™™™™™¹?çš™™™™™é?r~   )r   r   )r?   r=   r_   r^   rl   r@   r@   rA   Ú test_roc_curve_drop_intermediate   s    r    c                  C   st   dddddg} dddddg}t  dd	¡}t| ||d
�\}}}t  |¡dk  ¡ dksVt‚t  |¡dk  ¡ dkspt‚d S )Nr   r)   rž   rœ   ç333333Ó?çš™™™™™Ù?rd   rš   é   ©Úsample_weight)r-   Úrepeatr   ÚdiffrF   rk   )r?   r=   r¥   r^   r_   r`   r@   r@   rA   Ú!test_roc_curve_fpr_tpr_increasing®  s    r¨   c                  C   s¬   ddg} ddg}t t| |ƒdƒ ddg} ddg}t t| |ƒdƒ dddg} dddg}t t| |ƒdƒ ddg} ddg}t t| |ƒdƒ dddg} dddg}t t| |ƒdƒ d S ©Nr   r)   rd   )r   r   )r‰   r7   r@   r@   rA   Útest_aucº  s    



rª   c               	   C   s¤   t  t¡� tdddgddgƒ W 5 Q R X t  t¡� tdgdgƒ W 5 Q R X dddd	g} d
dddg}d t | ¡¡}t jtt |¡d�� t| |ƒ W 5 Q R X d S )Nr�   rd   rM   rž   rš   r%   r)   rp   é   r£   é   é   é   z+x is neither increasing nor decreasing : {}r…   )	rz   r{   r|   r   Úformatr-   rt   ÚreÚescape)r‰   r7   Úerror_messager@   r@   rA   Útest_auc_errorsÍ  s    r³   zy_true, labelsr)   r%   ÚaÚbÚcc              	   C   s^  t  dddgdddgdddgdd	dgg¡}td
dd
gdddgƒ}tdd
dgdddgƒ}|| d }td
d
dgdddgƒ}tddd
gdddgƒ}|| d }td
dgdd	gƒ}	tdd
gddgƒ}
|	|
 d }|| | d }tt| ||dd�|ƒ |||g}dddg}t j||d�}tt| ||ddd�|ƒ d}tjt|d�� t| ||dd d� W 5 Q R X d S )Nrž   rŸ   r¡   r¢   çffffffÖ?rd   ç333333Ã?r   rš   r)   r%   rp   Úovo©ÚlabelsÚmulti_classr’   )Úweightsr–   ©r»   r¼   r•   z6average=None is not implemented for multi_class='ovo'.r…   )r-   rt   r   r   r•   rz   r{   ÚNotImplementedError)r?   r»   Úy_scoresÚscore_01Úscore_10Zaverage_score_01Zscore_02Zscore_20Zaverage_score_02Zscore_12Zscore_21Zaverage_score_12Zovo_unweighted_scoreZpair_scoresZ
prevalenceZovo_weighted_scorer²   r@   r@   rA   Ú#test_multiclass_ovo_roc_auc_toydataÞ  sB    "ÿþ

    ÿürÃ   Údc                 C   sœ   t  dddgdddgdddgdddgg¡}tdd	dd	gddddgƒ}td	dd	dgddddgƒ}|| d
 }tt| ||dd�|ƒ tt| ||ddd�|ƒ d S )Nrš   r�   rŸ   r›   r¢   gš™™™™™á?gÍÌÌÌÌÌÜ?r)   r   r%   r¹   rº   r–   r¾   ©r-   rt   r   r   )r?   r»   rÀ   rÁ   rÂ   Z	ovo_scorer@   r@   rA   Ú*test_multiclass_ovo_roc_auc_toydata_binary  s(    "ÿ ÿ    ÿürÆ   c                 C   sü   t  dddgdddgdddgdddgg¡}tdd	d	d	g|d d …d	f ƒ}td	dd	d	g|d d …df ƒ}td	d	ddg|d d …d
f ƒ}tt| |d|d d�|||gƒ || | d }tt| |d|d�|ƒ |d |d  |d  }tt| |d|dd�|ƒ d S )NrM   r�   rž   rd   r¢   rŸ   r¡   r)   r   r%   Úovr)r¼   r»   r•   g      @)r¼   r»   r‘   r–   rÅ   )r?   r»   rÀ   Zout_0Zout_1Zout_2Zresult_unweightedZresult_weightedr@   r@   rA   Ú#test_multiclass_ovr_roc_auc_toydata=  s4    "ÿþþ    ÿürÈ   zmulti_class, average)rÇ   r“   )rÇ   r˜   )r¹   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t||| |d
�dƒ ddddgddddgddddgddddgg}t||| |d
�dk s˜t‚dt  d¡ }t||| |d
�t d¡ksÄt‚d S )Nrp   r)   r%   r   r�   rM   r’   gš™™™™™©?r¸   ©r¼   r•   r‘   )r«   r«   rd   )r-   rt   r   r   rk   r€   rz   Úapprox)r¼   r•   r?   Z	y_perfectZy_imperfectZy_chancer@   r@   rA   Ú0test_perfect_imperfect_chance_multiclass_roc_auch  s8    	



üþ



üÿÿ   ÿþrË   c           	         sŽ   | ‰ t jjdddgdˆ d�}t ‡ fdd„|D ƒ¡}t|dd	d
gd�}t| ¡ | ¡ ƒ\}}}t||ƒ}t	||ddd�}|t
 |¡ksŠt‚d S )Nr�   rM   rd   éè  )rs   r(   c                    s"   g | ]}t jjd |ˆ d� ¡ ‘qS )r)   )Únr:   r(   )r   ZmultinomialÚrvsr[   )rˆ   Zy_pred_i©Úseedr@   rA   rŠ   š  s   ÿz3test_micro_averaged_ovr_roc_auc.<locals>.<listcomp>r   r)   r%   )ÚclassesrÇ   r˜   rÉ   )r   Z	dirichletrÎ   r-   Úasarrayr$   r   Zravelr   r   rz   rÊ   rk   )	Zglobal_random_seedr>   r?   Zy_onehotr^   r_   r`   Zroc_auc_by_handZroc_auc_autor@   rÏ   rA   Útest_micro_averaged_ovr_roc_auc’  s    
þÿ
rÓ   zmsg, y_true, labelsz!Parameter 'labels' must be uniquezKNumber of classes in y_true not equal to the number of columns in 'y_score'z"Parameter 'labels' must be orderedzMNumber of given labels, 2, not equal to the number of columns in 'y_score', 3zMNumber of given labels, 4, not equal to the number of columns in 'y_score', 3rp   z2'y_true' contains labels not in parameter 'labels'Úer¼   r¹   rÇ   c              	   C   sX   t  dddgdddgdddgdd	dgg¡}tjt| d
�� t||||d� W 5 Q R X d S )Nrž   rŸ   r¡   r¢   r·   rd   r¸   r   rš   r…   rº   )r-   rt   rz   r{   r|   r   )Úmsgr?   r»   r¼   rÀ   r@   r@   rA   Ú*test_roc_auc_score_multiclass_labels_error¦  s
    ?"ÿrÖ   zmsg, kwargszLaverage must be one of \('macro', 'weighted', None\) for multiclass problemsr—   )r•   r¼   zUaverage must be one of \('micro', 'macro', 'weighted', None\) for multiclass problemszksample_weight is not supported for multiclass one-vs-one ROC AUC, 'sample_weight' must be None in this case)r¼   r¥   z|Partial AUC computation not available in multiclass setting, 'max_fpr' must be set to `None`, received `max_fpr=0.5` insteadrd   )r¼   r]   zbmulti_class='ovp' is not supported for multiclass ROC AUC, multi_class must be in \('ovo', 'ovr'\)Zovpz'multi_class must be in \('ovo', 'ovr'\)c              	   C   sX   t dƒ}| dd¡}t|ƒ}|jdddd�}tjt| d�� t||f|Ž W 5 Q R X d S )Né”  é   rp   r   rr   r…   )r   Úrandr   ru   rz   r{   r|   r   )rÕ   Úkwargsr;   r=   Zy_probr?   r@   r@   rA   Ú#test_roc_auc_score_multiclass_errorí  s    .rÛ   c               
   C   st  t dƒ} |  d¡}tjddd�}d}tjt|d�� t||ƒ W 5 Q R X tjddd�}tjt|d�� t||ƒ W 5 Q R X tj	dddd�}tjt|d�� t||ƒ W 5 Q R X t
jdd	��° t dƒ} |  d¡}tjddd�}tjt|d�� t||ƒ W 5 Q R X tjddd�}tjt|d�� t||ƒ W 5 Q R X tj	dddd�}tjt|d�� t||ƒ W 5 Q R X W 5 Q R X d S )
Nr×   é
   r0   ©ZdtypezROC AUC score is not definedr…   rC   T)Úrecord)r   rÙ   r-   r�   rz   r{   r|   r   r€   rŒ   ÚwarningsÚcatch_warnings)r;   r>   r?   Úerr_msgr@   r@   rA   Útest_auc_score_non_binary_class#  s0    

râ   Ú
curve_funcc              	   C   sN   t dƒ}|jdddd�}| d¡}d}tjt|d�� | ||ƒ W 5 Q R X d S )Nr×   r   rp   rÜ   rr   z"multiclass format is not supportedr…   )r   ru   rÙ   rz   r{   r|   )rã   r;   r?   r>   rÕ   r@   r@   rA   Ú&test_binary_clf_curve_multiclass_errorC  s    
rä   c              	   C   s   d}t jt|d��" | tjddgdd�ddgƒ W 5 Q R X t jt|d��" | tjddgtd�ddgƒ W 5 Q R X d	}t jt|d��" | tjd
dgdd�ddgƒ W 5 Q R X ddddg}| ddddg|ƒ}| ddddg|ƒ}t||ƒD ]\}}tj ||¡ qäd S )Nz‘y_true takes value in {'a', 'b'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitly.r…   r´   rµ   z<U1rÝ   r�   rM   z“y_true takes value in {b'a', b'b'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitly.ó   aó   bz<S1rš   gáz®GáÚ?r   r)   )	rz   r{   r|   r-   rt   ÚobjectÚzipÚtestingr   )rã   rÕ   r>   Z	int_curveZfloat_curveZint_curve_partZfloat_curve_partr@   r@   rA   Ú(test_binary_clf_curve_implicit_pos_labelM  s    ÿ&&ÿ&rê   c                 C   s€   dddddg}dddddg}dddddg}| |||d�}| |d d	… |d d	… |d d	… d�}t ||ƒD ]\}}t||ƒ qhd S )
Nr   r)   rž   rš   r¡   r¢   rd   r¤   rC   )rè   r   )rã   r?   r=   r¥   Zresult_1Zresult_2Zarr_1Zarr_2r@   r@   rA   Ú(test_binary_clf_curve_zero_sample_weightq  s    &rë   c            	   	   C   s4  t dd�\} }}t| |ƒ t| dd … |dd … ƒ\}}}|d dksJt‚|d | dd …  ¡ ksft‚d| t | dk¡< |  ¡ }t| |ƒ t|| ƒ ddddg}dddd	g}t||ƒ\}}}t	|t 
d
dd
ddg¡ƒ t	|t 
dd
d
d
dg¡ƒ t	|t 
dddd	g¡ƒ |j|jk�st‚|j|jd k�s0t‚d S )NTrg   r)   r   rM   rC   r%   rp   r«   rd   gÚÁQUUÕ?r�   )rB   Ú_test_precision_recall_curver   rk   Úmeanr-   ÚwhereÚcopyr   r   rt   rs   )	r?   r`   r=   r:   Úrrw   Zy_true_copyr»   Zpredict_probasr@   r@   rA   Útest_precision_recall_curve~  s"    
 

rñ   c                 C   s¬   t | |ƒ\}}}t| |ƒ}t|ddƒ t|t| |ƒƒ tt| |ƒ|dd� |j|jksZt‚|j|jd ksnt‚t | t 	|¡ƒ\}}}|j|jks”t‚|j|jd ks¨t‚d S )Ng°rh‘í|ë?rp   r%   ri   r)   )
r   rY   r   r   r   rT   rs   rk   r-   Ú
zeros_like)r?   r=   r:   rð   rl   Zprecision_recall_aucr@   r@   rA   rì   ˜  s"    
 ÿ  ÿrì   c               
   C   s¢  t jdd��� ddg} ddg}t| |ƒ\}}}t| |ƒ}t|dddgƒ t|dddgƒ t|dƒ ddg} ddg}t| |ƒ\}}}t| |ƒ}t|dddgƒ t|dddgƒ t|dƒ ddg} ddg}t| |ƒ\}}}t| |ƒ}t|ddgƒ t|ddgƒ t|dƒ ddg} ddg}t| |ƒ\}}}t| |ƒ}t|dddgƒ t|dddgƒ t|dƒ ddg} ddg}t| |ƒ\}}}t| |ƒ}t|ddgƒ t|ddgƒ t|dƒ ddg} dd	g}tjtd
d�� t| |ƒ\}}}W 5 Q R X tjtd
d�� t| |ƒ}W 5 Q R X t	|dddgƒ t	|dddgƒ t	|dƒ ddg} dd	g}t| |ƒ\}}}tt| |ƒdƒ t|dddgƒ t|dddgƒ t  
ddgddgg¡} t  
ddgddgg¡}tjtd
d�� t	t| |dd�dƒ W 5 Q R X tjtd
d�� t	t| |dd�dƒ W 5 Q R X t	t| |dd�dƒ t	t| |dd�dƒ t  
ddgddgg¡} t  
ddgddgg¡}tjtd
d�� t	t| |dd�dƒ W 5 Q R X tjtd
d�� t	t| |dd�dƒ W 5 Q R X t	t| |dd�d	ƒ t	t| |dd�dƒ t  
ddgddgg¡} t  
ddgddgg¡}tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ t  
ddgddgg¡} t  
ddgddgg¡}tjtd
d�� t	t| |dd�dƒ W 5 Q R X t	t| |dd�dƒ tjtd
d�� t	t| |dd�dƒ W 5 Q R X tjtd
d�� t	t| |dd�dƒ W 5 Q R X t  
ddgddgg¡} t  
ddgddgg¡}t	t| |dd�dƒ t	t| |dd�dƒ t	t| |dd�dƒ t	t| |dd�dƒ t  
ddgddgg¡} t  
ddgddgg¡}tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ tt| |dd�dƒ W 5 Q R X t jdd��` t  
ddgddgg¡} t  
ddgddgg¡}tjtd
d�� t	t| |dd�dƒ W 5 Q R X W 5 Q R X d S )NÚraise)Úallr   r)   rd   rM   r�   r‘   r’   z!No positive class found in y_truer…   r“   r”   r–   r—   r˜   Úignore)r-   Zerrstater   r   r   r   rz   r‹   ÚUserWarningr   rt   )r?   r=   r:   rð   r`   Zauc_prcr@   r@   rA   Ú#test_precision_recall_curve_toydata¬  sD   










 ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿr÷   c                  C   s<   t jdtd�} d| d d d…< t  d¡}t| |ƒdks8t‚d S )Nrq   rÝ   r)   r«   r‘   )r-   r�   r0   r€   r   rk   ©r?   r=   r@   r@   rA   Ú&test_average_precision_constant_valuesO  s    
rù   c               	   C   s¼   t  ddg¡} t  ddg¡}d}tjt|d�� t| |dd� W 5 Q R X t  ddgddgddgddgg¡} t  ddgddgd	d
gd
d	gg¡}d}tjt|d�� t| |dd� W 5 Q R X d S )Nr   r)   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]r…   r%   ©rI   r~   rž   rŸ   rš   znParameter pos_label is fixed to 1 for multilabel-indicator y_true. Do not set pos_label or set pos_label to 1.)r-   rt   rz   r{   r|   r   ©r?   r>   rá   r@   r@   rA   Ú-test_average_precision_score_pos_label_errors]  s    ""ÿrü   c                  C   sÄ   t dd�\} }}t| |ƒ}t| d| ƒ}t| d| ƒ}t| |d ƒ}||ksPt‚||ks\t‚||ksht‚t| |ƒ}t| d| ƒ}t| d| ƒ}	t| |d ƒ}
||ks¨t‚||	ks´t‚||
ksÀt‚d S )NTrg   rq   g�íµ ÷Æ°>rÜ   )rB   r   rk   r   )r?   r`   r=   rm   Zroc_auc_scaled_upZroc_auc_scaled_downZroc_auc_shiftedZpr_aucZpr_auc_scaled_upZpr_auc_scaled_downZpr_auc_shiftedr@   r@   rA   Útest_score_scale_invariancep  s    

rý   z(y_true,y_score,expected_fpr,expected_fnrr‘   r’   r�   c                 C   s(   t | |ƒ\}}}t||ƒ t||ƒ d S ©N©r   r   ©r?   r=   Zexpected_fprZexpected_fnrr^   Úfnrr`   r@   r@   rA   Útest_det_curve_toydata‰  s    
r  c                 C   s(   t | |ƒ\}}}t||ƒ t||ƒ d S rþ   rÿ   r   r@   r@   rA   Útest_det_curve_tie_handlingª  s    
r  c                
   C   s>   t tdddgdddgƒtddddddgddddddgƒƒ d S r©   )r   r   r@   r@   r@   rA   Útest_det_curve_sanity_check¾  s     þr  r=   c                 C   sN   t ddddddgt d| ¡d�\}}}t|dgƒ t|dgƒ t|| gƒ d S )Nr   r)   r¬   rø   )r   r-   rŒ   r   )r=   r^   r  rX   r@   r@   rA   Útest_det_curve_constant_scoresÆ  s     
ÿr  r?   c                 C   s.   t | | d�\}}}t|dgƒ t|dgƒ d S )Nrø   r   rÿ   )r?   r^   r  r`   r@   r@   rA   Útest_det_curve_perfect_scoresÑ  s    r  zy_true, y_pred, err_msgzinconsistent numbers of samplesz Only one class present in y_trueÚcancerú
not cancerrš   r¡   rŸ   zpos_label is not specifiedc              	   C   s(   t jt|d�� t| |ƒ W 5 Q R X d S )Nr…   )rz   r{   r|   r   rû   r@   r@   rA   Útest_det_curve_bad_inputâ  s    r	  c            	      C   sº   dgd dgd  } t  ddddd	dd
dddg
¡}d| }t| |dd�\}}}t| |dd�\}}}|d t d¡ksxt‚|d t d¡ksŽt‚t||d d d… ƒ t||d d d… ƒ d S )Nr  rp   r  r­   rž   r¢   r›   rš   r¡   rd   rœ   r~   r)   rú   r   rC   )r-   rt   r   rz   rÊ   rk   r   )	r?   Zy_pred_pos_not_cancerZy_pred_pos_cancerZfpr_pos_cancerZfnr_pos_cancerZth_pos_cancerZfpr_pos_not_cancerZfnr_pos_not_cancerZth_pos_not_cancerr@   r@   rA   Útest_det_curve_pos_labelö  s"    ýýr
  c                 C   sP  t | ddggddggƒdƒ t | ddggddggƒdƒ t | ddggddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | ddggddggƒdƒ t | ddggddggƒdƒ t | ddggddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒdƒ t | dddggdddggƒd	ƒ t | ddddggddddggƒdƒ d S )
Nr   r)   r‘   r’   rd   gUUUUUUÕ?gªªªªªªê?gªªªªªªâ?çUUUUUUå?r   ©Ú
lrap_scorer@   r@   rA   Úcheck_lrap_toy  sj         ÿ ÿ   ÿ         ÿ       ÿ ÿ  r  c                 C   sÊ   t dƒ}tddƒD ]‚}|jd|fd�}t |¡}t d|f¡}| ||ƒdksPt‚| ||ƒdksbt‚t d|f¡}| ||ƒdks‚t‚| ||ƒdkst‚qt| dgdgdgdggdgdgdgdggƒdƒ d S )Nr   r%   r£   r)   rr   rM   rd   )	r   rN   Úuniformr-   rò   r�   rk   r€   r   )r  r(   Ún_labelsr=   Zy_score_tiesr?   r@   r@   rA   Ú!check_zero_or_all_relevant_labelsK  s    
( ÿr  c              	   C   sÜ  t  t¡� | dddgdddgƒ W 5 Q R X t  t¡�. | dddgdddgd	ddgd
ddggƒ W 5 Q R X t  t¡�. | dddgdddgd	ddgd
ddggƒ W 5 Q R X t  t¡�  | ddgddggddgƒ W 5 Q R X t  t¡�" | ddgddggddggƒ W 5 Q R X t  t¡�$ | ddgddggdgdggƒ W 5 Q R X t  t¡�" | ddggddgddggƒ W 5 Q R X t  t¡�$ | dgdggddgddggƒ W 5 Q R X t  t¡�$ | ddgddggdgdggƒ W 5 Q R X d S )Nr   r)   r‘   r¡   rš   r%   r’   r�   rœ   rŸ   )rz   r{   r|   r  r@   r@   rA   Úcheck_lrap_error_raisedb  s*     2 ÿ$&(&(r  c              	   C   sz   t ddƒD ]j}t d|f¡}t d|ƒD ]L}t || ƒD ]:}t d|f¡}d|d||| …f< t| ||ƒ|| ƒ q6q&q
d S )Nr%   rÜ   r)   r   )rN   r-   r€   r�   r   )r  r  r=   Ú
n_relevantrJ   r?   r@   r@   rA   Úcheck_lrap_only_ties|  s    r  c              	      sÖ   t ddƒD ]Æ}|t |¡ d|f¡d  }t d|f¡}d|d< d|d< t| ||ƒd| d d ƒ t d|ƒD ]`‰ t |ˆ  ƒD ]N‰t d|f¡}d|dˆˆˆ  …f< t| ||ƒt‡ ‡fdd„t ˆ ƒD ƒƒƒ q~qnq
d S )	Nr%   rÜ   r)   )r   r   )r   rC   r   c                 3   s&   | ]}|d  ˆ| d  ˆ   V  qdS )r)   Nr@   ©rˆ   rð   ©r  rJ   r@   rA   Ú	<genexpr>Ÿ  s   ÿz>check_lrap_without_tie_and_increasing_score.<locals>.<genexpr>)rN   r-   r.   rE   r�   r   rF   )r  r  r=   r?   r@   r  rA   Ú+check_lrap_without_tie_and_increasing_score‹  s     þþr  c                    s
  t | |ƒ t| ƒ} t|ƒ}| j\}}t |f¡}t|ƒD ]È}tj|| dd�\}}|j}|| ‰tjˆ|d d� 	¡ }	|	ˆ ‰| |  
¡ d }
|
jdks¢|
j|kr¬d||< q8d||< |
D ]4‰ t‡ ‡fdd„|
D ƒƒ}||  |ˆˆ   7  < q¸||  |
j  < q8| ¡ S )	z8Simple implementation of label ranking average precisionT)Zreturn_inverser)   )Z	minlengthr   r�   c                 3   s   | ]}ˆ| ˆˆ  kV  qd S rþ   r@   r  ©ÚlabelZrankr@   rA   r  Â  s     z_my_lrap.<locals>.<genexpr>)r
   r	   r,   r-   ÚemptyrN   rD   rs   ZbincountZcumsumZnonzerorF   rí   )r?   r=   r8   r  rP   rQ   Zunique_rankZinv_rankZn_ranksZ	corr_rankZrelevantZn_ranked_abover@   r  rA   Ú_my_lrap¦  s*    

r  r£   rØ   c           	      C   sš   t dd|||d�\}}t|jd |jd |d�}t|dƒrB| ¡ }t||ƒ}t||ƒ}t||ƒ t|ƒ}|j	||fd�}t||ƒ}t||ƒ}t||ƒ d S )Nr)   F)r9   Zallow_unlabeledr(   Ú	n_classesr8   r   )Zn_componentsr9   r(   Útoarrayrr   )
r   r   r,   Úhasattrr  r   r  r   r   r  )	r  r  r8   r(   r`   r?   r=   Z
score_lrapZscore_my_lrapr@   r@   rA   Ú%check_alternative_lrap_implementationÌ  s,    û
	ý





r   ÚcheckÚfuncc                 C   s   | |ƒ d S rþ   r@   )r!  r"  r@   r@   rA   Útest_label_ranking_avpì  s    r#  c                   C   s   t tƒ d S rþ   )r  r   r@   r@   r@   rA   Útest_lrap_error_raisedú  s    r$  r8   )r)   r%   r®   rØ   r  )r%   r£   rÜ   r(   c                 C   s   t t|| |ƒ d S rþ   )r   r   )r8   r  r(   r@   r@   rA   Ú$test_alternative_lrap_implementationþ  s       ÿr%  c                  C   s    t jddddgddddgddddggtd�} t  ddddgddddgddddgg¡}t  dd	d
g¡}t  d
d
dg¡}tt| ||d�t  || ¡t  |¡ ƒ d S )Nr)   r   rÝ   r¡   r¢   rš   rž   rd   r’   rM   r�   r¤   )r-   rt   Úboolr   r   rF   )r?   r=   Zsamplewise_lrapsr¥   r@   r@   rA   Ú&test_lrap_sample_weighting_zero_labels  s    , ÿ  ÿür'  c                   C   s$  t tddggddggƒdƒ t tddggddggƒdƒ t tddggddggƒdƒ t tddggddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddgdddggdd	d
gdddggƒdƒ t tdddgdddgdddggddd
gdddgdddggƒdƒ t tdddgdddgdddggddd
gdddgdddggƒdƒ d S )Nr   r)   r‘   r’   r%   rd   rp   rž   ç      $@éýÿÿÿr�   rÜ   g«ªªªªª@©r   r   r@   r@   r@   rA   Útest_coverage_error  s\                            (þ ÿü ÿür+  c                   C   st  t tddggddggƒdƒ t tddggddggƒdƒ t tddggddggƒdƒ t tddggddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ d S )Nr   rd   r)   r%   r‘   rp   r*  r@   r@   r@   rA   Útest_coverage_tie_handlingT  s           r,  zy_true, y_scorec              	   C   s(   t jtdd�� t| |ƒ W 5 Q R X d S )Nz'Expected 2D array, got 1D array insteadr…   )rz   r{   r|   r   rø   r@   r@   rA   Útest_coverage_1d_error_messaged  s    r-  c                	   C   sÖ  t tddggddggƒdƒ t tddggddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tddggddggƒdƒ t tddggddggƒdƒ t tddggddggƒdƒ t tddggddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddgdddggddd	gddd
ggƒdƒ t tdddgdddgdddggddd	gddd
gdddggƒdƒ t tdddgdddgdddggddd	gd
dd
gdddggƒdƒ t ttt dddgdddgg¡ƒddd	gd
dd
ggƒdƒ d S )Nr   r)   r‘   r’   rd   rM   rž   r(  r)  rp   rÜ   r%   )r   r   r   r-   rt   r@   r@   r@   rA   Útest_label_ranking_losss  sR              (þ ÿü ÿü ÿür.  c                	   C   s4  t  t¡�  tddgddggddgƒ W 5 Q R X t  t¡�" tddgddggddggƒ W 5 Q R X t  t¡�$ tddgddggdgdggƒ W 5 Q R X t  t¡�" tddggddgddggƒ W 5 Q R X t  t¡�$ tdgdggddgddggƒ W 5 Q R X t  t¡�$ tddgddggdgdggƒ W 5 Q R X d S )Nr   r)   )rz   r{   r|   r   r@   r@   r@   rA   Ú$test_ranking_appropriate_input_shape¦  s    $&(&(r/  c                   C   sü   t tddggddggƒdƒ t tddggddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ t tdddggdddggƒdƒ d S )Nr)   r   rd   r‘   )r   r   r@   r@   r@   rA   Útest_ranking_loss_ties_handling¶  s         r0  c                  C   sH   t ddd�\} }| d }t||ƒ tj d¡ d¡\}}t||ƒ d S ©Nr   rÜ   )r(   r  r)   )r%   rq   rÜ   )r   Ú_test_dcg_score_forr-   r1   r2   Úrandom_sample©r`   r?   r=   r@   r@   rA   Útest_dcg_scoreÂ  s
    

r5  c                 C   s¾   t  t  | jd ¡d ¡}t| | ƒ}t| |ƒ}||k ¡ s>t‚t| | dd�|k ¡ sXt‚|j| jd fksnt‚|j| jd fks„t‚|t t  	| ¡d d …d d d…f | j
dd�¡ksºt‚d S )Nr)   r%   r£   ©Úkr   rC   ©Zaxis)r-   Úlog2r.   r,   r   rô   rk   rz   rÊ   ÚsortrF   )r?   r=   ZdiscountÚidealrP   r@   r@   rA   r2  Ê  s    

r2  c               	   C   sN  t  t  d¡g¡} t  | j¡}t| |ƒ}t| |dd�}dt  t  dd¡¡ }|t | 	¡ |  
¡  g¡kslt‚|t || d d …d d d…f   	¡ g¡ksšt‚d|dd	d …f< t| |ƒ}t| |dd�}|t || d d …d d d…f   	¡ g¡ksðt‚|t |d d…  	¡ | dd	d …f  
¡  |dd …  	¡ | dd d	…f  
¡   g¡k�sJt‚d S )
Nr£   T©Úignore_tiesr)   r%   r­   rC   r   rp   )r-   rÒ   r.   r�   r,   r   r9  rz   rÊ   rF   rí   rk   )r?   r=   ZdcgZdcg_ignore_tiesZ	discountsr@   r@   rA   Útest_dcg_tiesÕ  s"    
 .
.""ÿÿÿr>  c               	   C   s>   t  d¡ d¡} t| | ddd�t t| | ddd�¡ks:t‚d S )Né   )r%   r¬   rp   T)r7  r=  )r-   r.   rE   r   rz   rÊ   rk   )r´   r@   r@   rA   Útest_ndcg_ignore_ties_with_ké  s    ÿr@  c               	   C   sf   t  dddddgg¡} t  dddd	d
gg¡}d}tjt|d�� t| |ƒt d¡ksXt‚W 5 Q R X d S )Ng{®Gázì¿gö(\�Âõà¿g®GázÞ¿gö(\�ÂõØ?gìQ¸…ëá?gìQ¸…ë±?g×£p=
×Ó?r’   g…ëQ¸Õ?gHáz®GÑ?z�ndcg_score should not be used on negative y_true values. ndcg_score will raise a ValueError on negative y_true values starting from version 1.4.r…   g�€&Â†Àx@)r-   rt   rz   r‹   ÚFutureWarningr   rÊ   rk   )r?   r=   rŽ   r@   r@   rA   Útest_ndcg_negative_ndarray_warnñ  s    ÿrB  c                  C   s�   t  d¡ dd¡} | t j d¡jdd| jd� }t| |ƒ}t| |dd	�}|t 	|¡ksZt
‚|t 	d
¡kslt
‚|d7 }t| |ƒt 	d
¡ksŒt
‚d S )NéF   r­   rÜ   r   çš™™™™™É¿rš   rr   Tr<  rM   rÌ   )r-   r.   rE   r1   r2   r  r,   r   rz   rÊ   rk   )r?   r=   ZndcgZndcg_no_tiesr@   r@   rA   Útest_ndcg_invariantü  s    
rE  r=  c              
   C   s"  dt  d¡d d…  }t  t  ddd¡d¡}|t j d¡jdd	|jd
� }t||| d�t	 
dt  t  dd¡¡ ¡ksxt‚t||| d�t	 
dt  t  dd¡¡ ¡ks¦t‚t||| d�t	 
dt  t  dd¡¡ ¡ksÔt‚t||d| d�t	 
dt  t  dd¡¡ ¡k�st‚t||| d�t	 
dt  t  dd¡¡  ¡ ¡k�s:t‚t||| d�t	 
dt  t  dd¡¡  ¡ ¡k�snt‚dt  d¡ }dt  t  dd¡¡  ¡ }t||| d�t	 
|t  d¡ ¡k�s¾t‚t||| d�t	 
t  d¡¡k�sât‚t||| d�t	 
|¡k�s t‚t||| d�t	 
d¡k�st‚d S )Nrp   r­   r£   r¬   rC   )r£   r)   r   rD  rš   rr   r<  r%   r)   rÜ   )Zlog_baser=  )r£   r­   é	   rM   )r-   ÚeyeZtiler.   r1   r2   r  r,   r   rz   rÊ   r9  rk   r   Úlog10r   rí   r   r€   rF   )r=  r?   r=   Zy_score_noisyZexpected_dcg_scorer@   r@   rA   Útest_ndcg_toy_examples  s|      ÿ  ÿþ  ÿþ  ÿþ   ÿþ
ÿÿ  ÿþ
  ÿþ
ÿrI  c                  C   sH   t ddd�\} }| d }t||ƒ tj d¡ d¡\}}t||ƒ d S r1  )r   Ú_test_ndcg_score_forr-   r1   r2   r3  r4  r@   r@   rA   Útest_ndcg_score.  s
    

rK  c                 C   sü   t | | ƒ}t | |ƒ}||k ¡ s$t‚| dkjdd�}||  t t |  ¡ ¡¡ksXt‚|| t t | ¡ ¡¡ksxt‚||  t t	| |ƒ|  t	| | ƒ|   ¡ks¬t‚|| t t | ¡ ¡¡ksÌt‚|j
| j
d fksât‚|j
| j
d fksøt‚d S )Nr   r)   r8  )r   rô   rk   rz   rÊ   r-   r€   rF   r�   r   r,   )r?   r=   r;  rP   Zall_zeror@   r@   rA   rJ  6  s    

$ ÿÿ
 rJ  c               	   C   sJ  t  ddddg¡} t| | dd�dks(t‚t| | dd�dks>t‚t t¡� t| | dd�s\t‚W 5 Q R X t t¡� t| | dd�s„t‚W 5 Q R X t t¡� t| | dd�s¬t‚W 5 Q R X t  ddddg¡}t| |dd�}t| |ƒ}||ksìt‚t| |d	d�d
k�st‚tdd�\} }}t  ddd¡D ]"}t	t| ||d�t
| ||ƒƒ �q"d S )Nr   r)   )r]   gü©ñÒMbP?gš™™™™™¹¿gš™™™™™ñ?rž   g{®Gáz„?r¡   rd   Trg   g-Cëâ6?r£   )r-   rt   r   rk   rz   r{   r|   rB   Zlinspacer   re   )r?   rÀ   Zroc_auc_with_max_fpr_oneZunconstrained_roc_aucr>   r`   r]   r@   r@   rA   Útest_partial_roc_auc_scoreF  s(    

þrL  zy_true, k, true_scorec              	   C   sV   t  ddddgddddgddddgddddgg¡}t| ||d�}|t |¡ksRt‚d S )Nr¢   r¡   rš   rž   r6  ©r-   rt   r    rz   rÊ   rk   )r?   r7  Ú
true_scorer=   rP   r@   r@   rA   Útest_top_k_accuracy_score`  s    	



üÿrO  zy_score, k, true_scorerC   rœ   c                 C   s„   ddddg}|   ¡ dkr(|  ¡ dkr(dnd}|dkrD| |k tj¡n|}t|| |d�}t||ƒ}||  krzt |¡ks€n t	‚d S )Nr   r)   rd   r6  )
ÚminÚmaxZastyper-   Zint64r    r   rz   rÊ   rk   )r=   r7  rN  r?   rX   r>   rP   Z	score_accr@   r@   rA   Ú test_top_k_accuracy_score_binaryu  s     
rR  zy_true, true_score, labelsÚlabels_as_ndarrayc              	   C   sf   |rt  |¡}t  ddddgddddgddddgddddgg¡}t| |d|d�}|t |¡ksbt‚dS )z,Test when labels and y_score are multiclass.r¢   r¡   rš   rž   r%   ©r7  r»   N)r-   rÒ   rt   r    rz   rÊ   rk   )r?   rN  r»   rS  r=   rP   r@   r@   rA   Ú0test_top_k_accuracy_score_multiclass_with_labelsŒ  s    




üÿ	rU  c                     s–   t jddddd�\‰ ‰tˆ ˆdd�\} }}}tdd�‰ˆ | |¡ t| |f||fƒD ]<\‰ ‰‡ ‡‡fdd„tddƒD ƒ}t t 	|¡dk¡sTt
‚qTd S )	NrÜ   rÌ   r   )r  r8   Zn_informativer(   )r(   c                    s    g | ]}t ˆˆ ˆ ¡|d �‘qS )r6  )r    r4   )rˆ   r7  ©r6   r<   r7   r@   rA   rŠ   µ  s    z8test_top_k_accuracy_score_increasing.<locals>.<listcomp>r%   )r   Zmake_classificationr"   r#   r3   rè   rN   r-   rô   r§   rk   )ZX_trainZX_testZy_trainZy_testZscoresr@   rV  rA   Ú$test_top_k_accuracy_score_increasing©  s       ÿ

ÿrW  c              	   C   sR   t  ddddgddddgddddgddddgg¡}t| ||d�t |¡ksNt‚d S )Nr£   r­   r   r)   rp   r6  rM  )r?   r7  rN  r=   r@   r@   rA   Útest_top_k_accuracy_score_ties¼  s    




üÿrX  z	y_true, kr«   c              	   C   sn   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| ||d�}W 5 Q R X |dksjt‚d S )	Nr¢   r¡   rš   rž   zu'k' \(\d+\) greater than or equal to 'n_classes' \(\d+\) will result in a perfect score and is therefore meaningless.r…   r6  r)   )r-   rt   rz   r‹   r!   r    rk   )r?   r7  r=   rŽ   rP   r@   r@   rA   Ú!test_top_k_accuracy_score_warningÑ  s    



üÿ	ÿrY  zy_true, y_score, labels, msgg=
×£p=â?rž   r¢   z9y type must be 'binary' or 'multiclass', got 'continuous'zZNumber of classes in 'y_true' \(4\) not equal to the number of classes in 'y_score' \(3\).z"Parameter 'labels' must be unique.z#Parameter 'labels' must be ordered.zSNumber of given labels \(4\) not equal to the number of classes in 'y_score' \(3\).z3'y_true' contains labels not in parameter 'labels'.z}`y_true` is binary while y_score is 2d with 3 classes. If `y_true` does not contain all the labels, `labels` must be providedc              	   C   s.   t jt|d�� t| |d|d� W 5 Q R X d S )Nr…   r%   rT  )rz   r{   r|   r    )r?   r=   r»   rÕ   r@   r@   rA   Útest_top_k_accuracy_score_errorê  s    QrZ  c                  C   sR   t dddgdddggƒ} t dddgdddgg¡}t| |ƒ}|t d¡ksNt‚d S )Nr)   r   rd   r~   r›   r  )r   r-   rt   r   rz   rÊ   rk   )r?   r=   Úresultr@   r@   rA   ÚOtest_label_ranking_avg_precision_score_should_allow_csr_matrix_for_y_true_input?  s    
r\  )NF)r£   rØ   r   )…r°   rz   Únumpyr-   rß   Zscipy.sparser   Zscipyr   Zsklearnr   r   Zsklearn.utils.extmathr   Zsklearn.datasetsr   Zsklearn.random_projectionr   Zsklearn.utils.validationr	   r
   r   Zsklearn.utils._testingr   r   r   r   Zsklearn.metricsr   r   r   r   r   r   r   r   r   r   Zsklearn.metrics._rankingr   r   r   r   r    Zsklearn.exceptionsr!   Zsklearn.model_selectionr"   Zsklearn.linear_modelr#   Zsklearn.preprocessingr$   ZCURVE_FUNCSrB   rL   rT   rY   re   ÚmarkZparametrizern   rv   ry   r}   r   rƒ   r�   r™   r    r¨   rª   r³   rt   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$  rN   r%  r'  r+  r,  r-  r.  r/  r0  r5  r2  r>  r@  rB  rE  rI  rK  rJ  rL  rO  rR  rU  rW  rX  rY  rZ  r\  r@   r@   r@   rA   Ú<module>   s  ý0
hüþ	
2þþ
üþ	
"ýþ
"ýüýüü
ü
üýýýÌþ=	û	û	û	ú
ûÛþ*
 
	
#
 $""""""""ìþ
øþ


ûþ

ýûþ
;'    ÿ
 üþ	7ýþ
3
&ýþ
úþ
üþ	ýþ
þþ




ü÷



ü÷



ü
÷



ü÷



ü
÷



ü÷ü»þP