o
    tBh$                    @   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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l.m/Z/ ee e#gZ0d(dd Z1d!d" Z2d#d$ Z3d%d& Z4d'd( Z5ej67d)d*dgd+d, Z8d-d. Z9d/d0 Z:d1d2 Z;d3d4 Z<d5d6 Z=d7d8 Z>d9d: Z?d;d< Z@d=d> ZAd?d@ ZBdAdB ZCej67dCeDg dDg dEfeDg dDdfg dFg dGfg dFdfgdHdI ZEej67dCeDg dJg dEfeDg dKg dLfgdMdN ZFej67dCeDg dOdfg dPdfg dOg dEfg dPg dGfgdQdR ZGej67dSdTeDg dOg dUfdTeDg dPg dVfdWeDg dJdfdXeDg dPg dYfdZeDg dOd d[gfdZeDg dPd\d]gfd^eDg dOg d_fd^eDg dPg d`fdaeDg dbg dGfdaeDg d`g dGfdaeDg d_g dEfgej67dcdddegdfdg ZHej67dhdidjdddkfdidldedkfdmddg dnfdodddpdqfdrdcdsifdti fgdudv ZIdwdx ZJej67dye0dzd{ ZKej67dye0d|d} ZLej67dye0d~d ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSej67dg dg dd gd gfg dg dd gd gfg dg dd gd gfg dg dd gd gfg dg ddpgd gfg dg ddpgd gfg dg ddpgd gfg dg ddpgd gfg dg ddgd gfg dg dd gd gfg dg dd gd gfg dg dd gd gfg dg dg dg dfg dg dg dg dfg dg dg dg dfg dg dg dg dfg dg dg dg dfg dg dg dg dfg dg dg dg dfg dg dg dg dfgdd ZTej67dd[d gdpdpgd[gd gfd d[gdpdpgd[gd gfg dg ddpgd gfg dg ddpgd gfg dg dd gd gfg dg dd[gd gfg dg dd[gd gfg dg dd[gd gfgdd ZUdd ZVej67dg ddd ZWej67dg dg dg dg dg dgdd ZXej67dd d[gg ddfg dd dpgdfg dg ddfg dg ddfg dg ddfgdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_ddĄ Z`	 d)ddȄZaej67de[e_e^e\fej67dee`fdd̄ Zbdd΄ Zcej67ddСej67ddҡej67dedd[ddՄ Zeddׄ Zfddل Zgddۄ Zhdd݄ Zidd߄ Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpej67dd*dgdd Zqdd Zrdd Zsdd Ztej67dg d_d[dfg d_ddpfg d_ddfgdd Zuej67deDg dd[d[feDg dd[dpfeDg ddd[feDg dd[d[feDg d d[dpfeDg d dd[fgdd Zvej67deDg ddg d_feDg ddpg d_feDg ddpg d_feDg ddg dfgej67d	d*dgd
d Zwdd Zxej67dg d_d[dfg d_ddpfg d_dd[fgdd Zyej67dg d_dfg d_dfgdd Zzej67dg dg dg dg dg dgddfg d_g dg dg dg dgddfg dg dg dg dg dgg dPdfg dg dg dg dg dgg dYdfg dg dg dg dg dgg d_d fg dg dg dg dg dgg d!d"fd d[gg d#g d$gdd%fgd&d' Z{dS (*      N)
csr_matrix)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)LogisticRegressionFc                 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y_scorey_predy_true rH   y/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_ranking.pymake_prediction2   s*   


*
rJ   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)rG   rE   	pos_labelposnegdiff_matrix	n_correctrH   rH   rI   _aucb   s   rV   c           	      C   s   t | d }t | |k}t |ddd }|| }| | } d}tt|D ](}| | |krPd}td|d D ]}| | |krE|d7 }q9||d  }||7 }q(|| 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*   NrK   r         ?)r/   rL   rN   argsortrangerP   )	rG   rE   rQ   n_posorderscoreiprecjrH   rH   rI   _average_precisionq   s"   	r`   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reversedrY   rP   )rG   rE   	precisionrecall	thresholdaverage_precisionr]   rH   rH   rI   _average_precision_slow   s   
"rg   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argmaxinterp)rG   	y_predictmax_fprfprtpr_new_fprnew_tpridx_outidx_inx_interpy_interprH   rH   rI   _partial_roc   s   z,_partial_roc_auc_score.<locals>._partial_rocr         ?r*   r   )rG   rk   rl   rv   rp   rq   partial_aucfpr1fpr2min_areamax_arearH   rH   rI   _partial_roc_auc_score   s   
r}   dropTc           	      C   sz   t dd\}}}t||}t||| d\}}}t||}t||dd t|t|| |j|jks3J |j|jks;J d S )NTr<   drop_intermediater#   decimal)rJ   rV   r   r   r   r   r   r.   )	r~   rG   ro   rE   expected_aucrm   rn   
thresholdsroc_aucrH   rH   rI   test_roc_curve   s   

r   c                  C   s   t jd} t dgd dgd  }| jddd}t||dd\}}}|d dks,J |d	 dks4J |j|jks<J |j|jksDJ d S )
Nr   2   r*      d   sizeTr   rK   )r/   r3   r4   arrayrandintr   r.   )rB   rG   rF   rm   rn   thrrH   rH   rI   test_roc_curve_end_points   s   r   c            
      C   s   t dd\} }}t| |\}}}g }|D ]}t||k| @ }t| }	|d| |	  qt||dd |j|jks=J |j|jksEJ d S )NTr   rW   r#   r   )rJ   r   r/   rN   rh   r   r.   )
rG   ro   rE   rm   rn   r   tpr_correctttprA   rH   rH   rI   test_roc_returns_consistency   s   
r   c                  C   sJ   t dd\} }}tt t| | W d    d S 1 sw   Y  d S )NFr   )rJ   pytestraises
ValueErrorr   )rG   ro   rE   rH   rH   rI   test_roc_curve_multi   s   "r   c                  C   s`   t dd\} }}t| |d \}}}t||}t|ddd |j|jks&J |j|jks.J d S )NTr   rw   ?r#   r   )rJ   r   r   r   r.   )rG   ro   rE   rm   rn   r   r   rH   rH   rI   test_roc_curve_confidence   s   
r   c                  C   s  t dd\} }}t| j}t| |\}}}t||}t|ddd |j|jks*J |j|jks2J t| j}t| |\}}}t||}t|ddd |j|jksTJ |j|jks\J t| |\}}}t||}t|ddd |j|jksxJ |j|jksJ d S )NTr   rw   r#   r   g(\?)rJ   r/   onesr.   r   r   r   zeros)rG   predrE   trivial_predrm   rn   r   r   rH   rH   rI   test_roc_curve_hard   s$   


r   c                  C   s  g d} g d}d}t jt|d t| |\}}}W d    n1 s$w   Y  t|tt|tj |j	|j	ks=J |j	|j	ksEJ d}t jt|d tdd | D |\}}}W d    n1 sfw   Y  t|tt|tj |j	|j	ksJ |j	|j	ksJ d S )N)
r*   r*   r*   r*   r*   r*   r*   r*   r*   r*   )
r   r*   r   r*   r   r*   r   r*   r   r*   INo negative samples in y_true, false positive value should be meaninglessmatchHNo positive samples in y_true, true positive value should be meaninglessc                 S   s   g | ]}d | qS )r*   rH   ).0xrH   rH   rI   
<listcomp>/  s    z,test_roc_curve_one_label.<locals>.<listcomp>)
r   warnsr    r   r   r/   fullrP   nanr.   )rG   rF   expected_messagerm   rn   r   rH   rH   rI   test_roc_curve_one_label  s$   r   c                  C   sv  ddg} ddg}t | |\}}}t| |}t|g d t|g d t|d ddg} ddg}t | |\}}}t| |}t|g d t|g d 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|g d t|g d 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 d    n1 sw   Y  tt t| | W d    n	1 sw   Y  t|g d t|t	j
t	j
t	j
g ddg} dd	g}d}tjt|d t | |\}}}W d    n	1 sCw   Y  tt t| | W d    n	1 s^w   Y  t|t	j
t	j
t	j
g t|g d t	ddgddgg} t	ddgddgg}tt t| |dd W d    n	1 sw   Y  tt t| |dd W d    n	1 sw   Y  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 d    n	1 sw   Y  tt t| |dd W d    n	1 s$w   Y  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*   r   r   r*   r   r*   r*   rW           rw         ?      ?r   r   r   rw   rW   r   macroaverageweightedsamplesmicro)r   r   r   r   r   r   r    r   r   r/   r   r   )rG   rE   rn   rm   ro   r   r   rH   rH   rI   test_roc_curve_toydata6  s   









r   c                  C   sh   g d} g d}t | |dd\}}}t|g d g d} g d}t | |dd\}}}t|g d d S )	Nr   r   r   r   r*   r*   )r   皙?rw   333333?ffffff?rW   Tr   )       @rW   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   rW   )r   rW   r   r   r   r   )r   r   )rG   rE   rn   rm   r   rH   rH   rI    test_roc_curve_drop_intermediate  s   r   c                  C   sh   g d} g d}t dd}t| ||d\}}}t |dk  dks%J t |dk  dks2J d S )Nr   r   r*   r*   r*   )r   r   333333?皙?rw   r      sample_weightr   )r/   repeatr   diffrN   )rG   rE   r   rm   rn   ro   rH   rH   rI   !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 g d} g d}t t| |d ddg} ddg}t t| |d g d} g d}t t| |d d S )Nr   r*   rw   r*   r   r   r   r   rw   r*   )r   r   )r   r>   rH   rH   rI   test_auc  s   r   c                  C   s   t t tg dddg W d    n1 sw   Y  t t tdgdg W d    n1 s5w   Y  g d} g d}dt| }t jtt|d t| | W d    d S 1 sew   Y  d S )	Nr   r   r   r   )r#   r*   r      )r            z+x is neither increasing nor decreasing : {}r   )	r   r   r   r   formatr/   r   reescape)r   r>   error_messagerH   rH   rI   test_auc_errors  s   "r   zy_true, labels)r   r*   r   r#   r   r*   r#   )abr   c)r   r   r   c                 C   sZ  t g dg dg dg dg}tg dg d}tg dg d}|| d	 }tg d
g d}tg dg d}|| d	 }tddgddg}	tddgddg}
|	|
 d	 }|| | d }tt| ||dd| |||g}g d}t j||d}tt| ||ddd| d}tjt|d t| ||dd d W d    d S 1 sw   Y  d S )Nr   r   r   r   r   r   ffffff?rw   333333?r   r   r   r*   r   r*   )r   r   r   r   r*   r   )r   r   rw   r#   r*   r*   r   )r   r   r   r   )r   r   r   r*   r   r   r   r   r   r   ovolabelsmulti_class)r   r   rw   )weightsr   r   r   r   z6average=None is not implemented for multi_class='ovo'.r   )r/   r   r   r   r   r   r   NotImplementedError)rG   r   y_scoresscore_01score_10average_score_01score_02score_20average_score_02score_12score_21average_score_12ovo_unweighted_scorepair_scores
prevalenceovo_weighted_scorer   rH   rH   rI   #test_multiclass_ovo_roc_auc_toydata  s<   

"r   )r   r#   r   r#   )r   dr   r   )r   r   r   c                 C   s   t g dg dg dg dg}tg dg d}tg dg d}|| d	 }tt| ||d
d| tt| ||d
dd| d S )N)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   )rG   r   r   r   r   	ovo_scorerH   rH   rI   *test_multiclass_ovo_roc_auc_toydata_binary  s   
r   )r   r*   r#   r#   )r   r   r   r   c                 C   s   t g dg dg dg dg}tg d|d d df }tg d|d d df }tg d	|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 )NrW   r   r   )r   rw   r   )r   r   r   )r   r   r   r*   r   r   r   r   )r   r*   r   r   r*   r   r   r*   r*   r#   ovr)r   r   r   g      @)r   r   r   rw   r   r   )rG   r   r   out_0out_1out_2result_unweightedresult_weightedrH   rH   rI   #test_multiclass_ovr_roc_auc_toydata;  s,   
r  zmsg, y_true, labelsz!Parameter 'labels' must be uniquer   r#   r   )r   r   r   zKNumber of classes in y_true not equal to the number of columns in 'y_score'z"Parameter 'labels' must be ordered)r   r   r   zMNumber of given labels, 2, not equal to the number of columns in 'y_score', 3r*   r   r   zMNumber of given labels, 4, not equal to the number of columns in 'y_score', 3)r   r*   r#   r   )r   r   r   r   z2'y_true' contains labels not in parameter 'labels')r   r   r   er   r   r  c                 C   sf   t g dg dg dg dg}tjt| d t||||d W d    d S 1 s,w   Y  d S )Nr   r   r   r   r   r   )r/   r   r   r   r   r   )msgrG   r   r   r   rH   rH   rI   *test_roc_auc_score_multiclass_labels_errorf  s   ?"r  zmsg, kwargszLaverage must be one of \('macro', 'weighted', None\) for multiclass problemsr   )r   r   r   zksample_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` insteadrw   )r   rl   zbmulti_class='ovp' is not supported for multiclass ROC AUC, multi_class must be in \('ovo', 'ovr'\)ovpz'multi_class must be in \('ovo', 'ovr'\)c                 C   sr   t d}|dd}t|}|jdddd}tjt| d t||fi | W d    d S 1 s2w   Y  d S )N     r   r   r   r   )r
   randr   r   r   r   r   r   )r  kwargsrB   rE   y_probrG   rH   rH   rI   #test_roc_auc_score_multiclass_error  s   ."r  c               	   C   s  t d} | d}tjddd}d}tjt|d t|| W d    n1 s)w   Y  tjddd}tjt|d t|| W d    n1 sLw   Y  tj	dddd}tjt|d t|| W d    n1 spw   Y  t
jdd	 t d} | d}tjddd}tjt|d t|| W d    n1 sw   Y  tjddd}tjt|d t|| W d    n1 sw   Y  tj	dddd}tjt|d t|| W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )
Nr  
   r2   dtypezROC AUC score is not definedr   rK   T)record)r
   r  r/   r   r   r   r   r   r   r   warningscatch_warnings)rB   rF   rG   err_msgrH   rH   rI   test_auc_score_non_binary_class  sB   

$r  
curve_funcc                 C   sd   t d}|jdddd}|d}d}tjt|d | || W d    d S 1 s+w   Y  d S )Nr  r   r   r  r   z"multiclass format is not supportedr   )r
   r   r  r   r   r   )r  rB   rG   rF   r  rH   rH   rI   &test_binary_clf_curve_multiclass_error  s   
"r  c                 C   s0  d}t jt|d | tjddgddddg W d    n1 s"w   Y  t jt|d | tjddgtdddg W d    n1 sGw   Y  d	}t jt|d | tjd
dgddddg W d    n1 snw   Y  g d}| g d|}| g d|}t||D ]\}}tj|| qd S )Nzy_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   rW   zy_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<S1)r   rW   r   gzG?)r   r*   r*   r   )r   rW   rW   r   )	r   r   r   r/   r   objectziptestingr   )r  r  rF   	int_curvefloat_curveint_curve_partfloat_curve_partrH   rH   rI   (test_binary_clf_curve_implicit_pos_label  s&   r'  c                 C   sn   g d}g d}g d}| |||d}| |d d |d d |d d d}t ||D ]	\}}t|| q+d S )Nr   )r   r   r   r   rw   )r*   r*   r*   rw   r   r   rK   )r!  r   )r  rG   rE   r   result_1result_2arr_1arr_2rH   rH   rI   (test_binary_clf_curve_zero_sample_weight1  s   &r,  c            	      C   s  t dd\} }}t| | t| dd  |dd  \}}}|d dks%J |d | dd   ks3J d| t| dk< |  }t| | t||  g d}g d}t||\}}}t|t	g d	 t|t	g d
 t|t	g d |j
|j
ksJ |j
|j
d ksJ d S )NTr   r*   r   rW   rK   r*   r   r   r*   )r*   r#   r   r   )rw   gQUU?rw   rW   rW   )rW   rw   rw   rw   r   )rJ   _test_precision_recall_curver   meanr/   wherecopyr   r   r   r   )	rG   ro   rE   rA   rr   y_true_copyr   predict_probasrH   rH   rI   test_precision_recall_curve>  s"   
 

r5  c                 C   s   t | |\}}}t| |}t|dd t|t| | tt| ||dd |j|jks-J |j|jd ks7J t | t|\}}}|j|jksJJ |j|jd ksTJ d S )Ngrh|?r   r#   r   r*   )	r   rg   r   r   r   r`   r   r/   
zeros_like)rG   rE   rA   r2  r   precision_recall_aucrH   rH   rI   r.  X  s   

r.  c               	   C   s  t jddi ddg} ddg}t| |\}}}t| |}t|g d t|g d t|d ddg} ddg}t| |\}}}t| |}t|g d t|g d	 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|g d t|g d 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 d    n1 sw   Y  tjtdd t| |}W d    n	1 sw   Y  t	|g d t	|g d t	|d ddg} ddg}t| |\}}}tt| |d t|g d t|g 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 d    n	1 sw   Y  tjtdd t	t| |ddd W d    n	1 sw   Y  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 d    n	1 sw   Y  tjtdd t	t| |ddd W d    n	1 sw   Y  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 d    n	1 sw   Y  t	t| |ddd tjtdd t	t| |ddd W d    n	1 sw   Y  tjtdd t	t| |ddd W d    n	1 sw   Y  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 d    n	1 stw   Y  t jddI 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 d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nraise)allr   r*   )rw   r*   r*   r   rW   )rw   r   rW   r   rw   r   r   r   z!No positive class found in y_truer   r   )rW   rW   rW   )r*   rw   r   r   r   r   r   r   ignore)r/   errstater   r   r   r   r   r   UserWarningr   r   )rG   rE   rA   r2  ro   auc_prcrH   rH   rI   #test_precision_recall_curve_toydatal  s:  










   $r>  c                  C   s<   t jdtd} d| d d d< t d}t| |dksJ d S )Nr   r  r*   r   r   )r/   r   r2   r   r   rG   rE   rH   rH   rI   &test_average_precision_constant_values  s   
r@  c                  C   s   t ddg} t ddg}d}tjt|d t| |dd W d    n1 s)w   Y  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 d    d S 1 slw   Y  d S )Nr   r*   z>pos_label=2 is not a valid label. It should be one of \[0, 1\]r   r#   rQ   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/   r   r   r   r   r   rG   rF   r  rH   rH   rI   -test_average_precision_score_pos_label_errors  s   """rC  c                  C   s   t dd\} }}t| |}t| d| }t| d| }t| |d }||ks(J ||ks.J ||ks4J t| |}t| d| }t| d| }	t| |d }
||ksTJ ||	ksZJ ||
ks`J d S )NTr   r   gư>r  )rJ   r   r   )rG   ro   rE   r   roc_auc_scaled_uproc_auc_scaled_downroc_auc_shiftedpr_aucpr_auc_scaled_uppr_auc_scaled_downpr_auc_shiftedrH   rH   rI   test_score_scale_invariance0  s   

rK  z(y_true,y_score,expected_fpr,expected_fnrr   r   )r   r   rw   )rw   r   r*   r   rw   r   r   r   r   r   )r*   r*   rw   r   r   )r   rw   rw   c                 C   (   t | |\}}}t|| t|| d S Nr   r   rG   rE   expected_fprexpected_fnrrm   fnrro   rH   rH   rI   test_det_curve_toydataI  s   
rT  r   rw   rw   c                 C   rM  rN  rO  rP  rH   rH   rI   test_det_curve_tie_handlingj  s   
rV  c                   C   s*   t tg dg dtg dg d d S )Nr   r   r   )r   r   rw   rw   r*   r*   )r   r   rH   rH   rH   rI   test_det_curve_sanity_check~  s   rW  rE   )r   r   rw   r   r*   c                 C   sF   t g dtd| d\}}}t|dg t|dg t|| g d S )N)r   r*   r   r*   r   r*   r   r?  r*   r   )r   r/   r   r   )rE   rm   rS  re   rH   rH   rI   test_det_curve_constant_scores  s   rX  rG   )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*   c                 C   s.   t | | d\}}}t|dg t|dg d S )Nr?  r   rO  )rG   rm   rS  ro   rH   rH   rI   test_det_curve_perfect_scores  s   rY  zy_true, y_pred, err_msgzinconsistent numbers of samplesr   r   r   z Only one class present in y_truer*   r*   r*   )cancerr\  
not cancer)r   r   r   zpos_label is not specifiedc                 C   s>   t jt|d t| | W d    d S 1 sw   Y  d S )Nr   )r   r   r   r   rB  rH   rH   rI   test_det_curve_bad_input  s   "r^  c            	      C   s   dgd dgd  } t g d}d| }t| |dd\}}}t| |dd\}}}|d td	ks4J |d td
ks?J t||d d d  t||d d d  d S )Nr\  r   r]  r   )
r   r   r   r   r   r   rw   r   r   r   r*   rA  r   r   r   rK   )r/   r   r   r   approxr   )	rG   y_pred_pos_not_cancery_pred_pos_cancerfpr_pos_cancerfnr_pos_cancerth_pos_cancerfpr_pos_not_cancerfnr_pos_not_cancerth_pos_not_cancerrH   rH   rI   test_det_curve_pos_label  s"   rh  c                 C   s  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 | g dgg dgd t | g dgg dgd t | g d	gg dgd t | g d
gg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd t | g d	gg dgd t | g d
gg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd t | g d	gg dgd t | g d
gg dgd t | g dgg dgd t | g dgg dgd t | g dgg d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 | g dgg dgd t | g dgg dgd t | g d	gg dgd t | g d
gg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd t | g dgg dgd d S )Nr   r*   r   r   rw   r   rL  r   r   r   gUUUUUU?r   g?r   g?r   rw   r   r[  rw   r   r   rU  )rw   rw   rw   gUUUUUU?)r*   r*   r*   r   )rw   rw   rw   rw   r   
lrap_scorerH   rH   rI   check_lrap_toy  s^    rm  c                 C   s   t d}tddD ]A}|jd|fd}t|}td|f}| ||dks(J | ||dks1J td|f}| ||dksAJ | ||dksJJ 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*   r   rW   rw   )r
   rY   uniformr/   r6  r   r   r   )rl  r)   n_labelsrE   y_score_tiesrG   rH   rH   rI   !check_zero_or_all_relevant_labels  s   
*rq  c                 C   s  t t | g dg d W d    n1 sw   Y  t t | g dg dg dg dg W d    n1 s>w   Y  t t | g dg dg dg dg W d    n1 scw   Y  t t | ddgddggddg W d    n1 sw   Y  t t | ddgddggddgg W d    n1 sw   Y  t t | ddgddggdgdgg W d    n1 sw   Y  t t | ddggddgddgg W d    n1 sw   Y  t t | dgdggddgddgg W d    n	1 sw   Y  t t | ddgddggdgdgg W d    d S 1 s:w   Y  d S )	Nr   )r   r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r*   )r   r   r   rk  rH   rH   rI   check_lrap_error_raised"  s:   "   $rr  c              	   C   sz   t ddD ]5}td|f}t d|D ]&}t || D ]}td|f}d|d||| f< t| ||||  qqqd S )Nr#   r  r*   r   )rY   r/   r   r   r   )rl  ro  rE   
n_relevantrR   rG   rH   rH   rI   check_lrap_only_ties<  s   rt  c              	      s   t ddD ]c}|t|d|fd  }td|f}d|d< d|d< t| ||d| d d  t d|D ]0 t |  D ]'td|f}d|d  f< t| ||t fddt  D  q?q7qd S )	Nr#   r  r*   )r   r   )r   rK   r   c                 3   s(    | ]}|d  | d     V  qdS )r*   NrH   r   r2  rs  rR   rH   rI   	<genexpr>_  s
    
z>check_lrap_without_tie_and_increasing_score.<locals>.<genexpr>)rY   r/   r0   rM   r   r   rN   )rl  ro  rE   rG   rH   rv  rI   +check_lrap_without_tie_and_increasing_scoreK  s&   rx  c                    s
  t | | t| } t|}| j\}}t|f}t|D ]d}tj|| dd\}}|j}|| tj|d d	 }	|	 | | 
 d }
|
jdksQ|
j|krVd||< qd||< |
D ] t fdd|
D }||  |   7  < q\||  |
j  < q| S )	z8Simple implementation of label ranking average precisionT)return_inverser*   )	minlengthr   r   c                 3   s     | ]}|   kV  qd S rN  rH   ru  labelrankrH   rI   rw    s    z_my_lrap.<locals>.<genexpr>)r	   r   r.   r/   emptyrY   rL   r   bincountcumsumnonzerorN   r/  )rG   rE   r?   ro  r\   r]   unique_rankinv_rankn_ranks	corr_rankrelevantn_ranked_aboverH   r{  rI   _my_lrapf  s*   

r  r   r  c           	      C   s   t dd|||d\}}t|jd |jd |d}t|dr!| }t||}t||}t|| t|}|j	||fd}t||}t||}t|| d S )Nr*   F)r@   allow_unlabeledr)   	n_classesr?   r   )n_componentsr@   r)   toarrayr   )
r   r   r.   hasattrr  r   r  r   r
   rn  )	rl  r  r?   r)   ro   rG   rE   
score_lrapscore_my_lraprH   rH   rI   %check_alternative_lrap_implementation  s,   
	





r  checkfuncc                 C   s   | | d S rN  rH   )r  r  rH   rH   rI   test_label_ranking_avp  s   r  c                   C   s   t t d S rN  )rr  r   rH   rH   rH   rI   test_lrap_error_raised  s   r  r?   )r*   r#   r   r  r  )r#   r   r  r)   c                 C   s   t t|| | d S rN  )r  r   )r?   r  r)   rH   rH   rI   $test_alternative_lrap_implementation  s   r  c                  C   s   t jg dg dg dgtd} t g dg dg dg}t g d}t g d	}tt| ||d
t || t |  d S )Nr   r-  )r   r   r   r   r  )r   r   r   r   )r   r   r   r   r   r   r   r   )rw   r   rW   )rW   rW   r   r   )r/   r   boolr   r   rN   )rG   rE   samplewise_lrapsr   rH   rH   rI   &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g dgg dgd t tg dgg dgd t tg d	gg dgd t tg d
gg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg d	gg dgd t tg d
gg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg d	gg dgd t tg d
gg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg d	g dgg dg dgd t tg d	g dg d
gg dg dg dgd t tg d	g dg d
gg dg dg dgd d S )Nr   r*   r   r   r#   rZ  rL  r   r   r   r   r   r   r   r[  ri  rj  r   g      $@r   r*   r   r   r   r  r  r	  g@r   r*   r   r   r   rH   rH   rH   rI   test_coverage_error  sX    ((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g dgg dgd t tg dgg dgd t tg dgg dgd t tg d	gg dgd t tg d
gg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd d S )Nr   rw   r*   r#   rZ  rU  r   r   r   r   r   r   r   r[  r  rH   rH   rH   rI   test_coverage_tie_handling  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g dgg dgd t tg dgg dgd t tg d	gg dgd t tg d
gg dgd t tg dgg dgd t tg dgg d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g dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg dg dgg dg dgd t tg dg dg d	gg dg dg dgd t tg dg dg d	gg dg dg dgd t tttg dg dgg dg dgd d S )Nr   r*   r   r   r   rL  r   rw   r   r   rW   r   r   rZ  rj  r[  rU  r  r  r  r	  r  )r   r   r   r/   r   rH   rH   rH   rI   test_label_ranking_loss$  sL    ((&r  c                   C   s  t t tddgddggddg W d    n1 sw   Y  t t tddgddggddgg W d    n1 s@w   Y  t t tddgddggdgdgg W d    n1 sdw   Y  t t tddggddgddgg W d    n1 sw   Y  t t tdgdggddgddgg W d    n1 sw   Y  t t tddgddggdgdgg W d    d S 1 sw   Y  d S )Nr   r*   )r   r   r   r   rH   rH   rH   rI   $test_ranking_appropriate_input_shapeW  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g dgg dgd t tg dgg dgd t tg dgg dgd t tg dgg dgd t tg d	gg dgd t tg d
gg dgd d S )Nr*   r   rw   r   rU  r   r   r   r   r   )r   r   rH   rH   rH   rI   test_ranking_loss_ties_handlingg  s    r  c                  C   H   t ddd\} }| d }t|| tjdd\}}t|| d S Nr   r  )r)   r  r*   )r#   r   r  )r   _test_dcg_score_forr/   r3   r4   random_samplero   rG   rE   rH   rH   rI   test_dcg_scores  
   

r  c                 C   s   t t | jd d }t| | }t| |}||k sJ t| | dd|k s,J |j| jd fks7J |j| jd fksBJ |tt | d d d d df | j	ddks]J d S )Nr*   r#   r   kr   rK   axis)
r/   log2r0   r.   r   r9  r   r_  sortrN   )rG   rE   discountidealr\   rH   rH   rI   r  {  s   

:r  c               	   C   sL  t t dg} t | j}t| |}t| |dd}dt t dd }|t|	 | 
  gks6J |t|| d d d d df  	 gksMJ d|dd	d f< t| |}t| |dd}|t|| d d d d df  	 gksxJ |t|d d 	 | dd	d f 
  |dd  	 | dd d	f 
   gksJ d S )
Nr   Tignore_tiesr*   r#   r   rK   r   r   )r/   asarrayr0   r   r.   r   r  r   r_  rN   r/  )rG   rE   dcgdcg_ignore_ties	discountsrH   rH   rI   test_dcg_ties  s"   
 .
.""r  c               	   C   s>   t dd} t| | dddtt| | dddksJ d S )N   )r#   r   r   T)r  r  )r/   r0   rM   r   r   r_  )r   rH   rH   rI   test_ndcg_ignore_ties_with_k  s   r  c                  C   s   t ddd} | t jdjdd| jd }t| |}t| |dd	}|t	|ks-J |t	d
ks6J |d7 }t| |t	d
ksFJ d S )NF   r   r  r   皙ɿr   r   Tr  rW     )
r/   r0   rM   r3   r4   rn  r.   r   r   r_  )rG   rE   ndcgndcg_no_tiesrH   rH   rI   test_ndcg_invariant  s   
r  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s<J t||| dt	
dt t dd ksSJ t||| dt	
dt t dd ksjJ t||d| dt	
dt t dd ksJ t||| dt	
dt t dd  ksJ t||| dt	
dt t dd  ksJ dt d }dt t dd  }t||| dt	
|t d ksJ t||| dt	
t dksJ t||| dt	
|ksJ t||| dt	
dks	J d S )Nr   r   r   r   rK   )r   r*   r   r  r   r   r  r#   r*   r  )log_baser  )r   r   	   rW   )r/   eyetiler0   r3   r4   rn  r.   r   r   r_  r  r   log10r   r/  r   r   rN   )r  rG   rE   y_score_noisyexpected_dcg_scorerH   rH   rI   test_ndcg_toy_examples  s^   


"r  c                  C   r  r  )r   _test_ndcg_score_forr/   r3   r4   r  r  rH   rH   rI   test_ndcg_score  r  r  c                 C   s   t | | }t | |}||k sJ | dkjdd}||  tt|  ks,J || tt| ks<J ||  tt| ||  t| | |   ksVJ || tt| ksfJ |j	| j	d fksqJ |j	| j	d fks|J d S )Nr   r*   r  )
r   r9  r   r_  r/   r   rN   r   r   r.   )rG   rE   r  r\   all_zerorH   rH   rI   r    s   

$ 
 r  c                  C   sz  t g d} t| | dddksJ t| | dddksJ tt t| | dds,J W d    n1 s6w   Y  tt t| | ddsJJ W d    n1 sTw   Y  tt t| | ddshJ W d    n1 srw   Y  t g d}t| |dd}t| |}||ksJ t| |d	dd
ksJ tdd\} }}t dddD ]}tt| ||dt	| || qd S )Nr  r*   )rl   gMbP?gg?r   )r   r   r   g{Gz?r   rw   Tr   g-C6?r   )
r/   r   r   r   r   r   rJ   linspacer   r}   )rG   r   roc_auc_with_max_fpr_oneunconstrained_roc_aucrF   ro   rl   rH   rH   rI   test_partial_roc_auc_score  s0   

r  zy_true, k, true_scorer   r#   r   r   c                 C   sF   t g dg dg dg dg}t| ||d}|t|ks!J d S )Nr  r   r   r   r   r   r   r   r   r   r   r   r   r  r/   r   r   r   r_  )rG   r  
true_scorerE   r\   rH   rH   rI   test_top_k_accuracy_score  s   	r  zy_score, k, true_score)rK   rK   r*   r*   )rK   r*   rK   r*   )r   r   r   r   )r   r   r   r   c                 C   s   g d}|   dkr|  dkrdnd}|dkr | |ktjn|}t|| |d}t||}||  kr<t|ks?J  J d S )Nr  r   r*   rw   r  )	minmaxastyper/   int64r   r   r   r_  )rE   r  r  rG   re   rF   r\   	score_accrH   rH   rI    test_top_k_accuracy_score_binary  s    
&r  zy_true, true_score, labels)r   r*   r*   r#   )r   r*   r*   r*   r*   r*   r*   r*   )r   r
  r
  r   )r   r   r   r
  labels_as_ndarrayc                 C   sV   |rt |}t g dg dg dg dg}t| |d|d}|t|ks)J dS )z,Test when labels and y_score are multiclass.r  r  r  r  r#   r  r   N)r/   r  r   r   r   r_  )rG   r  r   r  rE   r\   rH   rH   rI   0test_top_k_accuracy_score_multiclass_with_labels1  s   
	r  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sHJ q*d S )	Nr  r  r   )r  r?   n_informativer)   )r)   c                    s    g | ]}t  |d qS )r  )r   r9   )r   r  r=   rD   r>   rH   rI   r   Z  s    z8test_top_k_accuracy_score_increasing.<locals>.<listcomp>r#   )
r   make_classificationr!   r"   r8   r!  rY   r/   r9  r   )X_trainX_testy_trainy_testscoresrH   r  rI   $test_top_k_accuracy_score_increasingN  s   

r  c                 C   sB   t g dg dg dg dg}t| ||dt|ksJ d S )N)r   r   r   r   )r*   r   r   r   )r   r   r   r   r  r  r  )rG   r  r  rE   rH   rH   rI   test_top_k_accuracy_score_tiesa  s   
 r  z	y_true, kr   c                 C   sr   t g dg dg dg dg}d}tjt|d t| ||d}W d    n1 s,w   Y  |dks7J d S )	Nr  )r   r   r   r   )r   r   r   r   )r   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   r  r*   )r/   r   r   r   r    r   )rG   r  rE   r   r\   rH   rH   rI   !test_top_k_accuracy_score_warningv  s   	r  zy_true, y_score, labels, msg)r   g=
ףp=?r*   r#   )r   r   r   )r   r   r   r   )r   rw   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\).)r   r   r   r   z"Parameter 'labels' must be unique.z#Parameter 'labels' must be ordered.)r   r   r*   r#   zSNumber of given labels \(4\) not equal to the number of classes in 'y_score' \(3\).r  z3'y_true' contains labels not in parameter 'labels'.)rw   r   r   )r   r   r   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   sD   t jt|d t| |d|d W d    d S 1 sw   Y  d S )Nr   r#   r  )r   r   r   r   )rG   rE   r   r  rH   rH   rI   test_top_k_accuracy_score_error  s   Q"r  )NF)r   r  r   )|r   r   numpyr/   r  scipy.sparser   sklearnr   r   sklearn.utils.extmathr   sklearn.datasetsr   sklearn.random_projectionr   sklearn.utils.validationr   r	   r
   sklearn.utils._testingr   r   r   r   sklearn.metricsr   r   r   r   r   r   r   r   r   r   sklearn.metrics._rankingr   r   r   r   r   sklearn.exceptionsr    sklearn.model_selectionr!   sklearn.linear_modelr"   CURVE_FUNCSrJ   rV   r`   rg   r}   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r'  r,  r5  r.  r>  r@  rC  rK  rT  rV  rW  rX  rY  r^  rh  rm  rq  rr  rt  rx  r  r  r  r  rY   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH   rH   rH   rI   <module>   s   0
h

	2


	"=				

* 
	
#
 $






;' 	73
&
	
P