U
    ½mœdúâ  ã                -   @   sH  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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 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&lm4Z4 d d'lm5Z5 d d(lm6Z6 d d)lm7Z7 d d*lm8Z8 d d+lm9Z9 d d,lm:Z: d d-lm;Z; d d.lm<Z< d d/lm=Z= d d0lm>Z> d d1lm?Z? d d2lm@Z@ d d3lmAZA d d4lmBZB d d5lmCZC d d6lmDZD d d7lmEZE d d8lmFZF d d9lmGZG d d:lmHZH d d;lImJZJ e4e6e8e>e<e7e+eeAd<d=�ee9d d>�e:e;ee9d?d>�ee'd?d>�e(e)d@œZKe e"ee"dAdB�ee dCdD�e%dEdF„ e=ee=dAdG�e.eEeeEdCdD�e0e@eBe,ee-dHdI�ee-dJdI�e5ee-dKdJdL�ee,dKdM�ee-dKdHdL�ee@dKdM�eeBdKdM�ee0dKdM�ee-dNdJdL�ee,dNdM�ee-dNdHdL�ee@dNdM�eeBdNdM�ee0dNdM�ee-dOdJdL�ee,dOdM�ee-dOdHdL�ee@dOdM�eeBdOdM�ee0dOdM�ee-dPdJdL�ee,dPdM�ee-dPdHdL�ee@dPdM�eeBdPdM�ee0dPdM�e$dQœ+ZLdRdS„ ZMeDeMe*dTœZNe&e2e3ee3dCdD�e/e#eCeeCdKdM�eeCdPdM�eeCdNdM�eeCdOdUdV�eeCdKdUdV�eeCdOdWdV�eeCdKdWdV�eeCdJdX�e!ee!dKdM�ee!dPdM�ee!dNdM�e1eFeGeHdYœZOePƒ ZQeQ ReO¡ eQ ReL¡ eQ ReK¡ eQ ReN¡ dZd[d\d]d^d_d`dadbdcdddehZSdfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxhZTeS UeT¡ZVdqdrdsdtdudphZWdjdldihZXdvdwdxdfdqdrdsdtdudpdldmdndohZYdydzdvdwdxdqdrdsdtdudpd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒd�dadŽh ZZd�d�d‘hZ[d’d“djdkdhdgdidldmdodnd`dbdedddchZ\d�d”d•d‘d–d{d|d}d~dd€d‡dˆd‰dŠd‹dŒd�d‚dƒd„d…d†d�dZd[d\d]d^d_hZ]d—d˜d™dšd›dœd�dždŸh	Z^d�d”d•d‘d–d†dŒdpd_dsd‚dˆdd�d‚dƒd„d…d d—d™d˜d¡d�dŽd¢hZ_d£d¤d›dšdydzdvdwdxdqdrdtdud{d|d}d~d€d�d‡d‰dŠd‹d¥d¦d§d¨d©dždŸdœhZ`d˜d¡dªd«hZad§d¦d¨d©hZbd¬d­„ Zcd®d¯„ Zdeje fd°ege_ƒ¡d±d²„ ƒZheje fd°ege`ƒ¡d³d´„ ƒZieje fd°egejeQƒeV ƒ¡dµd¶„ ƒZked·d¸„ ƒZleje fd°egejeQƒeV ƒ¡d¹dº„ ƒZmeje fd°egejeLƒeV ƒ¡d»d¼„ ƒZneje fd°eO¡d½d¾„ ƒZod d¿ge	jpe	jpgfd d¿ge	jqe	jqgfd d¿ge	jqe	jpgfd d¿ge	jpd¿gfd d¿ge	jqd¿gfgZreje fdÀeeO s¡ eK s¡ ƒ¡eje fdÁer¡dÂdÃ„ ƒƒZteje fdÀeL s¡ ¡eje fdÁere	jqd¿dHgd¿dHdÄgfe	jpd¿dHgd¿dHdÄgfg ¡dÅdÆ„ ƒƒZueje fdÀeL s¡ ¡dÇdÈ„ ƒZvedÉdÊ„ ƒZwedËdÌ„ ƒZxeje fd°egejeQƒeV ejeOƒ ƒ¡dÍdÎ„ ƒZyeje fd°ege^e]B ƒ¡dÏdÐ„ ƒZzeje fd°ege^ƒ¡dÑdÒ„ ƒZ{eje fd°ege^ƒ¡dÓdÔ„ ƒZ|edÕdÖ„ ƒZ}eje fd°ege]ƒ¡d×dØ„ ƒZ~eje fd°ege[ƒ¡dÙdÚ„ ƒZeje fd°ege[ƒ¡dÛdÜ„ ƒZ€eje fd°ege[ �e]¡ƒ¡dÝdÞ„ ƒZ‚edßdà„ ƒZƒdádâ„ Z„eje fd°egeWƒ¡dãdä„ ƒZ…eje fd°egeWeXB ƒ¡dådæ„ ƒZ†eje fd°egeWƒ¡dçdè„ ƒZ‡dédê„ Zˆeje fd°egeWƒ¡dëdì„ ƒZ‰edídî„ ƒZŠeje fd°egejeQƒ �ejeKƒ¡ea ƒ¡dïdð„ ƒZ‹eje fd°egejeQƒejeKƒ ea eS ƒ¡dñdò„ ƒZŒeje fd°egejeQƒejeKƒ ea eV ƒ¡dódô„ ƒZ�eje fd°ege]e\B e^B ea ƒ¡dõdö„ ƒZŽed÷dø„ ƒZ�eje fd°ege]d�h ƒ¡dùdú„ ƒZ�eje fd°ege\e^B ƒ¡dûdü„ ƒZ‘eje fd°egejeOƒeV ƒ¡dýdþ„ ƒZ’eje fdÿeL¡�d �d„ ƒZ“eje f�de!dAfe#dAfe,dCfee-d¿dI�dCfe0dCfe?dAfe@dCfeBdCfeDdAfg	¡eje f�de”e•g¡�d�d„ ƒƒZ–dS (  é    )Úpartial)Ú	signature)Úproduct)Úchain)ÚpermutationsN)Úmake_multilabel_classification)ÚLabelBinarizer)Útype_of_target)Ú_num_samples)Úcheck_random_state)Úshuffle)Úassert_allclose)Úassert_almost_equal)Úassert_array_equal)Úassert_array_less)Úignore_warnings)Úaccuracy_score)Úaverage_precision_score)Úbalanced_accuracy_score)Úbrier_score_loss)Úcohen_kappa_score)Úconfusion_matrix)Úcoverage_error)Úd2_tweedie_score)Úd2_pinball_score)Úd2_absolute_error_score)Ú	det_curve)Úexplained_variance_score)Úf1_score)Úfbeta_score)Úhamming_loss)Ú
hinge_loss)Újaccard_score)Ú%label_ranking_average_precision_score)Úlabel_ranking_loss)Úlog_loss)Ú	max_error)Úmatthews_corrcoef)Úmean_absolute_error)Úmean_absolute_percentage_error)Úmean_squared_error)Úmean_tweedie_deviance)Úmean_poisson_deviance)Úmean_gamma_deviance)Úmedian_absolute_error)Úmultilabel_confusion_matrix)Úmean_pinball_loss)Úprecision_recall_curve)Úprecision_score)Úr2_score)Úrecall_score)Úroc_auc_score)Ú	roc_curve)Úzero_one_loss)Ú
ndcg_score)Ú	dcg_score)Útop_k_accuracy_score)Ú_average_binary_scoreZvariance_weighted)Zmultioutput)Úpowergffffffö?)r&   r(   r*   r0   r.   r)   r   r3   Úmean_normal_deviancer,   r-   Úmean_compound_poisson_deviancer   r   r   T)ÚadjustedF©Ú	normalizec                  O   s0   t | |Ž d¡t | |Žjdd�d d …tjf  S )NÚfloaté   ©Úaxis)r   ÚastypeÚsumÚnpZnewaxis)ÚargsÚkwargs© rK   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/metrics/tests/test_common.pyÚ<lambda>ƒ   s    ÿrM   )Z
samplewiseé   )Úbetag      à?Úweighted)ÚaveragerO   ©rQ   ÚmicroÚmacroÚsamples)+r   r   Ú adjusted_balanced_accuracy_scoreÚunnormalized_accuracy_scoreÚunnormalized_confusion_matrixÚnormalized_confusion_matrixÚ(unnormalized_multilabel_confusion_matrixÚ/unnormalized_multilabel_confusion_matrix_sampler    r7   Úunnormalized_zero_one_lossr"   r2   r4   r   Úf2_scoreú
f0.5_scoreÚmatthews_corrcoef_scoreúweighted_f0.5_scoreÚweighted_f1_scoreÚweighted_f2_scoreÚweighted_precision_scoreÚweighted_recall_scoreÚweighted_jaccard_scoreúmicro_f0.5_scoreÚmicro_f1_scoreÚmicro_f2_scoreÚmicro_precision_scoreÚmicro_recall_scoreÚmicro_jaccard_scoreúmacro_f0.5_scoreÚmacro_f1_scoreÚmacro_f2_scoreÚmacro_precision_scoreÚmacro_recall_scoreÚmacro_jaccard_scoreúsamples_f0.5_scoreÚsamples_f1_scoreÚsamples_f2_scoreÚsamples_precision_scoreÚsamples_recall_scoreÚsamples_jaccard_scorer   c               
   O   sN   t | |Ž\}}}t|ƒt|ƒ }t ||tj| tj¡d|fdtjgd�g¡S )a'  
    The dimensions of precision-recall pairs and the threshold array as
    returned by the precision_recall_curve do not match. See
    func:`sklearn.metrics.precision_recall_curve`

    This prevents implicit conversion of return value triple to an higher
    dimensional np.array of dtype('float64') (it will be of dtype('object)
    instead). This again is needed for assert_array_equal to work correctly.

    As a workaround we pad the threshold array with NaN values to match
    the dimension of precision and recall arrays respectively.
    r   Zconstant)Z	pad_widthÚmodeZconstant_values)r1   ÚlenrH   ÚarrayÚpadrF   Zfloat64Únan)rI   rJ   Ú	precisionZrecallZ
thresholdsZpad_threshholdsrK   rK   rL   Ú(precision_recall_curve_padded_thresholds²   s    
üýÿr~   )r6   r1   r   Zovr)rQ   Zmulti_classZovo)Zmax_fpr)r   r$   r%   Úunnormalized_log_lossr!   r   r5   Úweighted_roc_aucÚsamples_roc_aucÚmicro_roc_aucZovr_roc_aucZweighted_ovr_roc_aucÚovo_roc_aucÚweighted_ovo_roc_aucÚpartial_roc_aucr   Ú weighted_average_precision_scoreÚsamples_average_precision_scoreÚmicro_average_precision_scorer#   r8   r9   r:   rr   rs   rt   ru   rv   rw   r   r[   r$   r#   r9   r8   r   r‚   r�   r…   r5   r€   r   r†   rˆ   r‡   r"   r2   r4   r   r]   r^   r6   r1   r   rX   rY   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rZ   r   r   r:   r7   r%   r   rW   r    r\   r(   r.   r*   r3   r   r)   r0   r   r   r_   r&   r=   r   rV   r!   r-   r,   r>   r   rƒ   r„   c                 C   s2   t t|  ¡ | ¡ ƒƒd }| |7 } ||7 }| |fS )zMake targets strictly positiverC   )ÚabsÚmin)Úy1Úy2ÚoffsetrK   rK   rL   Ú_require_positive_targets  s    rŽ   c                   C   s6   t tB ttƒB tB ttƒks t‚t t@ tƒ ks2t‚d S ©N)ÚSYMMETRIC_METRICSÚNOT_SYMMETRIC_METRICSÚsetÚTHRESHOLDED_METRICSÚ"METRIC_UNDEFINED_BINARY_MULTICLASSÚALL_METRICSÚAssertionErrorrK   rK   rK   rL   Útest_symmetry_consistency'  s    ÿþýûr—   Únamec                 C   sÆ   t dƒ}|jdddd�}|jdddd�}| tkr>t||ƒ\}}|jdddd�}|jdddd�}t|  }| tkr¤| tkr–t|||ƒ|||ƒd|  d� qÂdsÂtd	ƒ‚nt|||ƒ|||ƒd|  d� d S )
Nr   rN   ©é   ©Úsize©rš   é   z%s is not symmetric©Úerr_msgFz This case is currently unhandled)	r   ÚrandintÚMETRICS_REQUIRE_POSITIVE_YrŽ   r•   ÚMETRIC_UNDEFINED_BINARYÚMULTILABELS_METRICSr   r–   )r˜   Úrandom_stateÚy_trueÚy_predZ
y_true_binZ
y_pred_binÚmetricrK   rK   rL   Útest_symmetric_metric4  s*    ýýr©   c              	   C   s‚   t dƒ}|jdddd�}|jdddd�}| tkr>t||ƒ\}}t|  }t t¡�( t|||ƒ|||ƒƒ t	d|  ƒ‚W 5 Q R X d S )Nr   rN   r™   r›   z%s seems to be symmetric)
r   r¡   r¢   rŽ   r•   ÚpytestÚraisesr–   r   Ú
ValueError)r˜   r¥   r¦   r§   r¨   rK   rK   rL   Útest_not_symmetric_metricS  s    r­   c              	   C   sŒ   t dƒ}|jdddd�}|jdddd�}| tkr>t||ƒ\}}t||dd�\}}tƒ �, t|  }t|||ƒ|||ƒd|  d� W 5 Q R X d S )Nr   rN   r™   r›   ©r¥   ú %s is not sample order invariantrŸ   )r   r¡   r¢   rŽ   r   r   r•   r   )r˜   r¥   r¦   r§   Úy_true_shuffleÚy_pred_shuffler¨   rK   rK   rL   Útest_sample_order_invariancee  s    ýr²   c            	      C   sþ   t dƒ} | jdddd�}| jdddd�}| j|jd�}t|||dd�\}}}tD ]*}t| }t|||ƒ|||ƒd| d� qPtD ]*}t| }t|||ƒ|||ƒd| d� q€t	D ]H}t| }t|||ƒ|||ƒd| d� t|||ƒ|||ƒd| d� q°d S )Nr   rN   r�   r›   r®   r¯   rŸ   )
r   r¡   ÚnormalÚshaper   r¤   r•   r   ÚTHRESHOLDED_MULTILABEL_METRICSÚMULTIOUTPUT_METRICS)	r¥   r¦   r§   Úy_scorer°   r±   Zy_score_shuffler˜   r¨   rK   rK   rL   Ú7test_sample_order_invariance_multilabel_and_multioutput{  sH       ÿýýýýr¸   c              
   C   s   t dƒ}|jdddd�}|jdddd�}| tkr>t||ƒ\}}t|ƒ}t|ƒ}t |¡t |¡ }}t|jdƒ t|jdƒ t 	|d¡}t 	|d¡}	t 	|d¡}
t 	|d¡}t
ƒ ��â t|  }|||ƒ}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¡� |||ƒ W 5 Q R X t t¡� ||
|ƒ W 5 Q R X t t¡� |||ƒ W 5 Q R X t t¡� ||
|ƒ W 5 Q R X t t¡� |||ƒ W 5 Q R X t t¡� ||
|	ƒ W 5 Q R X | ttB tB k�r’t t¡� ||
|ƒ W 5 Q R X W 5 Q R X d S )Nr   rN   r™   r›   rC   )éÿÿÿÿrC   )rC   r¹   z,%s is not representation invariant with listrŸ   z3%s is not representation invariant with np-array-1dz7%s is not representation invariant with np-array-columnz@%s is not representation invariant with mix np-array-1d and listzK%s is not representation invariant with mix np-array-1d and np-array-columnzD%s is not representation invariant with mix list and np-array-column)r   r¡   r¢   rŽ   ÚlistrH   rz   r   ÚndimÚreshaper   r•   r   rª   r«   r¬   r¶   rµ   r¤   )r˜   r¥   r‹   rŒ   Zy1_listZy2_listZy1_1dZy2_1dZ	y1_columnZ	y2_columnZy1_rowZy2_rowr¨   ÚmeasurerK   rK   rL   Ú&test_format_invariance_with_1d_vectors¦  s¶    

ýýýÿýÿýüý
üý
ýý	ýý

ÿr¾   c              	   C   s>  t dƒ}|jdddd�}|jdddd�}t ddg¡| }t ddg¡| }d}ddg}tƒ �Ö t|  }|||ƒ}	|}
| tkrŠt|
|d�}
|
||ƒ}t|	|d 	| ¡d	� |
| 
d
¡| 
d
¡ƒ}t|	|d 	| ¡d	� | tk�r0t|
|d�}
|
||ƒ}t|	|d 	| ¡d	� |
| 
d
¡| 
d
¡ƒ}t|	|d 	| ¡d	� W 5 Q R X d S )Nr   rN   r™   r›   ÚeggsÚspam©Ú	pos_labelú+{0} failed string vs number invariance testrŸ   ÚOú2{0} failed string object vs number invariance test)Úlabelsz,{0} failed string vs number  invariance test)r   r¡   rH   rz   r   ÚCLASSIFICATION_METRICSÚMETRICS_WITH_POS_LABELr   r   ÚformatrF   ÚMETRICS_WITH_LABELS)r˜   r¥   r‹   rŒ   Úy1_strZy2_strÚpos_label_strZ
labels_strr¨   Úmeasure_with_numberÚ
metric_strÚmeasure_with_strÚmeasure_with_strobjrK   rK   rL   Ú7test_classification_invariance_string_vs_numbers_labels  sN    

ýý

ýýrÑ   c              
   C   s  t dƒ}|jdddd�}|jdddd�}t ddg¡| }d}tƒ �Â t|  }| tkr¼|}| tkrnt||d�}|||ƒ}|||ƒ}	t	||	d 
| ¡d	� || d
¡|ƒ}
t	||
d 
| ¡d	� nFt t¡� |||ƒ W 5 Q R X t t¡� || d
¡|ƒ W 5 Q R X W 5 Q R X d S )Nr   rN   r™   r›   r¿   rÀ   rÁ   rÃ   rŸ   rÄ   rÅ   )r   r¡   rH   rz   r   r“   r£   rÈ   r   r   rÉ   rF   rª   r«   r¬   )r˜   r¥   r‹   rŒ   rË   rÌ   r¨   rÎ   rÍ   rÏ   rÐ   rK   rK   rL   Ú4test_thresholded_invariance_string_vs_numbers_labelsW  s<    

ýÿý	rÒ   rC   r¨   zy_true, y_scorec              	   C   s<   | t kr|g}|g}tjtdd�� | ||ƒ W 5 Q R X d S )Nzcontains (NaN|infinity)©Úmatch)r   rª   r«   r¬   )r¨   r¦   r·   rK   rK   rL   Ú)test_regression_thresholded_inf_nan_input‹  s
    rÕ   é   c              	   C   s€   t  |¡ ¡ s,d}t  |¡ ¡ r&d}qHd}nd}t  |¡ ¡ rDd}nd}d|› d|› �}tjt|d�� | ||ƒ W 5 Q R X dS )	z{check that classification metrics raise a message mentioning the
    occurrence of non-finite values in the target vectors.r¦   ÚNaNzinfinity or a value too larger§   zInput z
 contains rÓ   N)rH   ÚisfiniteÚallÚisnanÚanyrª   r«   r¬   )r¨   r¦   r·   Z
input_nameZunexpected_valuer    rK   rK   rL   Ú!test_classification_inf_nan_input˜  s    rÜ   c              	   C   sB   dddgdddg }}d}t jt|d�� | ||ƒ W 5 Q R X dS )	zocheck that classification metrics raise a message of mixed type data
    with continuous/binary target vectors.ÚaÚbgš™™™™™¹?gš™™™™™É?ç333333Ó?zJClassification metrics can't handle a mix of binary and continuous targetsrÓ   N)rª   r«   r¬   )r¨   r¦   r·   r    rK   rK   rL   Ú+test_classification_binary_continuous_inputº  s
    ÿrà   c                 C   sJ   t |  }| tkrddg}nddg}t|dd�D ]\}}||g|gƒ q.d S )NrC   rN   r   ©Úrepeat)r•   r¢   r   )r˜   r¨   ÚvaluesÚiÚjrK   rK   rL   Úcheck_single_sampleÆ  s    
ræ   c                 C   sL   t |  }tddgdd�D ].\}}}}|t ||gg¡t ||gg¡ƒ qd S )Nr   rC   é   rá   )r•   r   rH   rz   )r˜   r¨   rä   rå   ÚkÚlrK   rK   rL   Úcheck_single_sample_multioutput×  s    rê   c                 C   s   t | ƒ d S r�   )ræ   ©r˜   rK   rK   rL   Útest_single_sampleÞ  s    rì   c                 C   s   t | ƒ d S r�   )rê   rë   rK   rK   rL   Útest_single_sample_multioutputì  s    rí   c              	   C   sp   t  ddddgddddgddddgg¡}t  ddgddgddgg¡}t|  }t t¡� |||ƒ W 5 Q R X d S )NrC   r   ©rH   rz   r•   rª   r«   r¬   )r˜   r¦   r§   r¨   rK   rK   rL   Ú(test_multioutput_number_of_output_differñ  s
    (rï   c                 C   sŒ   t dƒ}|jdddd�}|jdddd�}t|  }|||ƒ}tdƒD ]D}| |jd ¡}t||d d …|f |d d …|f ƒ|d|  d� qBd S )	Nr   rN   )rš   é   r›   rÖ   rC   z'%s is not dimension shuffling invariantrŸ   )r   Úuniformr•   ÚrangeZpermutationr´   r   )r˜   r¥   r¦   r§   r¨   ÚerrorÚ_ÚpermrK   rK   rL   Ú=test_multioutput_regression_invariance_to_dimension_shufflingû  s    
 ýrö   c                  C   s  d} d}t d| d|dd�\}}t d| d|dd�\}}t |dg|  gg¡}t |dg|  gg¡}t |¡}t |¡}t|ƒ}t|ƒ}dd„ |D ƒ}	d	d„ |D ƒ}
tD ]t}t| }t|t	ƒrÆd
|_
||_|||ƒ}t|||ƒ|d| d� t||	|
ƒ|d| d� t|||ƒ|d| d� q¤d S )Nrç   é2   rC   r   T©Ú
n_featuresÚ	n_classesr¥   Ú	n_samplesÚallow_unlabeledc                 S   s   g | ]}t |ƒ‘qS rK   ©rº   ©Ú.0rÝ   rK   rK   rL   Ú
<listcomp>-  s     z=test_multilabel_representation_invariance.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS rK   rý   rþ   rK   rK   rL   r   .  s     ÚtmpzO%s failed representation invariance between dense and sparse indicator formats.rŸ   z\%s failed representation invariance  between dense array and list of list indicator formats.zW%s failed representation invariance  between dense and list of array indicator formats.)r   rH   ÚvstackÚspZ
coo_matrixrº   r¤   r•   Ú
isinstancer   Ú
__module__Ú__name__r   r   )rú   rû   rô   r‹   rŒ   Zy1_sparse_indicatorZy2_sparse_indicatorZy1_list_array_indicatorZy2_list_array_indicatorZy1_list_list_indicatorZy2_list_list_indicatorr˜   r¨   r½   rK   rK   rL   Ú)test_multilabel_representation_invariance  sf    û
û
	



üý	ûý
ûýr  c              
   C   sn   dgdgddggdddgg gdgt jg ddggdd�g}t|  }|D ]$}t t¡� |||ƒ W 5 Q R X qDd S )NrC   rN   r   rK   )r   rC   Úobject©Údtyperî   )r˜   Zmultilabel_sequencesr¨   ÚseqrK   rK   rL   Ú+test_raise_value_error_multilabel_sequencesZ  s    ûr  c                 C   s¤   d}d}t dƒ}|jd||fd�}|jd||fd�}|j|jd�}t|  }| tkrV|n|}|||dd�}	|||dd�}
td|	 dd	d
� t|	|
| d| › �d
� d S )NrN   rš   r   r›   Tr@   Fç      ð¿ú0We failed to test correctly the normalize optionrŸ   úFailed with )r   r¡   r³   r´   r•   r“   r   r   ©r˜   rú   rû   r¥   r¦   r§   r·   ÚmetricsÚpredÚmeasure_normalizedÚmeasure_not_normalizedrK   rK   rL   Ú+test_normalize_option_binary_classificationk  s(    ýýr  c                 C   s¦   d}d}t dƒ}|jd||fd�}|jd||fd�}|j||fd�}t|  }| tkrX|n|}|||dd�}	|||dd�}
td|	 dd	d
� t|	|
| d| › �d
� d S )Nrç   rš   r   r›   Tr@   Fr  r  rŸ   r  )r   r¡   rñ   r•   r“   r   r   r  rK   rK   rL   Ú/test_normalize_option_multiclass_classificationˆ  s(    ýýr  c                 C   sÈ   d}d}t dƒ}td|dd|d�\}}td|dd|d�\}}|j|jd�}|dg| 7 }|dg| 7 }t|  }| tkrz|n|}	|||	dd�}
|||	d	d�}td
|
 ddd� t|
|| d| › �d� d S )Nrç   éd   r   rC   T)rù   rú   r¥   rü   rû   r›   r@   Fr  r  rŸ   r  )r   r   rñ   r´   r•   r“   r   r   )r˜   rú   rû   r¥   rô   r¦   r§   r·   r  r  r  r  rK   rK   rL   Ú/test_normalize_option_multilabel_classification¥  sD    û
û
ýýr  c              	      s\  ˆj \}}ˆ ||d d�}t|‡ ‡‡fdd„t|ƒD ƒƒ ˆ ||dd�}	t|	ˆ ˆ ¡ ˆ ¡ ƒƒ ˆ ||dd�}
t|
t |¡ƒ tjˆdtd�}t |¡dkr¾ˆ ||dd�}t|tj||d	�ƒ nˆ ||dd�}t|dƒ |�rˆ ||d
d�}t|t ‡ ‡‡fdd„t|ƒD ƒ¡ƒ t	 
t¡� ˆ ||dd� W 5 Q R X t	 
t¡� ˆ ||dd� W 5 Q R X d S )NrR   c                    s.   g | ]&}ˆ ˆd d …|f ˆd d …|f ƒ‘qS r�   rK   ©rÿ   rä   ©r¨   Úy_pred_binarizeÚy_true_binarizerK   rL   r   á  s   ÿz$_check_averaging.<locals>.<listcomp>rS   rT   r   )rE   r
  rP   )ÚweightsrU   c                    s   g | ]}ˆ ˆ| ˆ| ƒ‘qS rK   rK   r  r  rK   rL   r     s   ÿÚunknownÚgarbage)r´   r   rò   ZravelrH   ZmeanrG   ÚintrQ   rª   r«   r¬   )r¨   r¦   r§   r  r  Úis_multilabelrû   rú   Zlabel_measureZmicro_measureZmacro_measurer  Zweighted_measureZsample_measurerK   r  rL   Ú_check_averaging×  sF    
þþ	 ÿ
þÿþ
r"  c                 C   sZ   t |ƒ d¡}t|  }| tkr2t||||||ƒ n$| tkrNt||||||ƒ ntdƒ‚d S )NZ
multilabelz2Metric is not recorded as having an average option)r	   Ú
startswithr•   ÚMETRICS_WITH_AVERAGINGr"  Ú"THRESHOLDED_METRICS_WITH_AVERAGINGr¬   )r˜   r¦   r  r§   r  r·   r!  r¨   rK   rK   rL   Úcheck_averaging  s*         ÿ     ÿr&  c           
      C   sz   d\}}t dƒ}|jd||fd�}|jd||fd�}|j||fd�}tƒ  |¡}| |¡}| |¡}	t| ||||	|ƒ d S )N)r÷   rÖ   r   r›   )r   r¡   rñ   r   ÚfitZ	transformr&  )
r˜   rû   rú   r¥   r¦   r§   r·   Zlbr  r  rK   rK   rL   Útest_averaging_multiclass  s    

r(  c           
      C   sh   d\}}t d|d|dd�\}}|d d… }|dd … }tdƒjd|fd�}|}|}	t| ||||	|ƒ d S )	N)é(   rð   rC   rð   Frø   rš   r   r›   )r   r   r³   r&  )
r˜   rû   rú   rô   Úyr¦   r§   r·   r  r  rK   rK   rL   Útest_averaging_multilabel.  s    û
r+  c                 C   s<   t  d¡}t  d¡}t  d¡}|}|}t| |||||ƒ d S ©N©rš   rÖ   )rH   Úzerosr&  ©r˜   r¦   r§   r·   r  r  rK   rK   rL   Ú$test_averaging_multilabel_all_zeroesC  s    


r0  c                  C   s>   t  d¡} t  d¡}| }|}ddd„}t|| |||dd� d S )Nr-  rT   c                 S   s   t t| ||ƒS r�   )r;   r2   )r¦   r·   rQ   rK   rK   rL   rM   T  s
      ÿz=test_averaging_binary_multilabel_all_zeroes.<locals>.<lambda>T)r!  )rT   )rH   r.  r"  )r¦   r§   r  r  Zbinary_metricrK   rK   rL   Ú+test_averaging_binary_multilabel_all_zeroesN  s    


úr1  c                 C   s<   t  d¡}t  d¡}t  d¡}|}|}t| |||||ƒ d S r,  )rH   Úonesr&  r/  rK   rK   rL   Ú"test_averaging_multilabel_all_onesa  s    


r3  c              	   C   s  t j d¡}|jddt|ƒd�}| dkr4t|dd�n|}|||d d�}t||||t jt|ƒd�d�d	|  d
� ||||d�}t 	t
¡�" t||ƒ td||| f ƒ‚W 5 Q R X |||| ¡ d�}t||d||| f d
� |t j||dd�t j||dd�d d�}	t||	d|  d
� |dd d… }
t  |¡}d|d d d…< |dd d… }|dd d… }||||
d�}||||d�}t||d||| f d
� |  d¡�s¾dD ]&}t|||||| d�d|  d
� �q–d t|ƒt|ƒt|ƒd ¡}tj	t|d�� |||t  ||g¡d� W 5 Q R X d S )Nr   rC   é
   r›   r:   )rè   )Úsample_weight)r´   zAFor %s sample_weight=None is not equivalent to sample_weight=onesrŸ   zQUnweighted and weighted scores are unexpectedly almost equal (%s) and (%s) for %szVWeighted scores for array and list sample_weight input are not equal (%s != %s) for %srD   z.Weighting %s is not equal to repeating samplesrN   zeZeroing weights does not give the same result as removing the corresponding samples (%s != %s) for %sZunnormalized)rN   rß   z/%s sample_weight is not invariant under scalingzJFound input variables with inconsistent numbers of samples: \[{}, {}, {}\]rÓ   )rH   ÚrandomÚRandomStater¡   ry   r   r   r2  rª   r«   r–   r¬   Útolistrâ   Úcopyr#  rÉ   r
   Zhstack)r˜   r¨   r‹   rŒ   Úrngr5  Zunweighted_scoreZweighted_scoreZweighted_score_listZrepeat_weighted_scoreZsample_weight_subsetZsample_weight_zeroedZ	y1_subsetZ	y2_subsetZweighted_score_subsetZweighted_score_zeroedZscalingÚerror_messagerK   rK   rL   Úcheck_sample_weight_invariancel  sŒ    ÿý
þÿüýýý
  ÿüý
ý
	  
þÿr<  c                 C   sB   d}t dƒ}|j|fd�}|j|fd�}t|  }t| |||ƒ d S )Nr÷   r   r›   )r   Úrandom_sampler•   r<  )r˜   rû   r¥   r¦   r§   r¨   rK   rK   rL   Ú(test_regression_sample_weight_invarianceÎ  s    r>  c                 C   sp   d}t dƒ}|jdd|fd�}|jdd|fd�}|j|fd�}t|  }| tkr^t| |||ƒ nt| |||ƒ d S )Nr÷   r   rN   r›   )r   r¡   r=  r•   r“   r<  )r˜   rû   r¥   r¦   r§   r·   r¨   rK   rK   rL   Ú$test_binary_sample_weight_invarianceß  s    r?  c           	      C   s–   d}t dƒ}|jdd|fd�}|jdd|fd�}|j|dfd�}t|  }| tkr„t | ¡}||jdd� dd¡ }t	| |||ƒ nt	| |||ƒ d S )Nr÷   r   rð   r›   r¹   rD   rC   )
r   r¡   r=  r•   r“   rH   ÚexprG   r¼   r<  )	r˜   rû   r¥   r¦   r§   r·   r¨   ÚtempZy_score_normrK   rK   rL   Ú(test_multiclass_sample_weight_invarianceö  s    rB  c           	      C   s”   t dƒ}tdddddd�\}}tdddddd�\}}t ||g¡}t ||g¡}|jdd|jd�}t|  }| tkr‚t| |||ƒ nt| |||ƒ d S )	Nr   rC   r4  r÷   Frø   rç   r›   )	r   r   rH   r  r¡   r´   r•   r“   r<  )	r˜   r¥   rô   ZyaZybr¦   r§   r·   r¨   rK   rK   rL   Ú(test_multilabel_sample_weight_invariance  s,    	    ÿ
    ÿ
rC  c                  C   sð   t  ddddgddddgg¡} t  ddddgddddgg¡}t  dddg¡}t  dddg¡}t  ddddg¡}t j|dd�\}}tD ]f}||g| |gfD ]P\}}	|tkr´|	jdkr´q˜t| }
|
||	|d d�}|
||	d d�}t||| ƒ q˜q„d S )	NrC   r   rN   rÖ   T)Zreturn_inverse)rÆ   rQ   rR   )rH   rz   Úuniquer$  r¤   r»   r•   r   )Zy_true_multilabelZy_pred_multilabelZy_true_multiclassZy_pred_multiclassrÆ   rô   Zinverse_labelsr˜   r¦   r§   r¨   Zscore_labelsÚscorerK   rK   rL   Útest_no_averaging_labels+  s     þrF  c                 C   s–   t dƒ}d\}}|jdd||fd�}|jdd||fd�}t|  }|||ƒ}tt|ƒ|ƒD ]8}|d d …|f }	|d d …|f }
||
|	ƒ}t||ƒ qXd S )Nr   ©rš   rç   rN   r›   )r   r¡   r•   r   rò   r   ©r˜   r¥   rû   rú   r¦   r·   r¨   rE  rõ   Úy_score_permÚy_true_permÚcurrent_scorerK   rK   rL   Ú-test_multilabel_label_permutations_invarianceE  s    

rL  c                 C   sà   t dƒ}d\}}|jdd||fd�}|j|jd�}d|| d¡dkdf< d|| d¡dkdf< t|  }|||ƒ}tt|ƒ|ƒD ]\}|d d …|f }	|d d …|f }
||
|	ƒ}|tkrÐt	 
|¡sÂt‚|dksÚt‚q~t||ƒ q~d S )Nr   rG  rN   r›   rC   rç   g    €„.A)r   r¡   r³   r´   rG   r•   r   rò   r)   rH   rØ   r–   r   rH  rK   rK   rL   Ú?test_thresholded_multilabel_multioutput_permutations_invarianceZ  s     

rM  c                 C   sÊ   d\}}t dƒ}| ||¡}t | ¡}||jdd� dd¡ }|jd||d�}t|  }|||ƒ}tt	|ƒ|ƒD ]T}	tj
|td�}
t |¡|
t|	ƒ< |d d …|
f }t |	|¡}|||ƒ}t||ƒ qpd S )N)r  rÖ   r   r¹   rD   rC   r›   r	  )r   ZrandrH   r@  rG   r¼   r¡   r•   r   rò   r.  r   Zarangerº   Ztaker   )r˜   rû   rú   r¥   r·   rA  r¦   r¨   rE  rõ   Zinverse_permrI  rJ  rK  rK   rK   rL   Ú.test_thresholded_metric_permutation_invariance{  s    

rN  Úmetric_namec              	   C   sl   t j d¡}t jdgd dgd  td�}|jdd|jd�}d	}tjt	|d
�� t
|  ||ƒ W 5 Q R X d S )Né*   rÀ   rÖ   r¿   rN   r	  r   r›   z7Labels in y_true and y_pred should be of the same type.rÓ   )rH   r6  r7  rz   r  r¡   rœ   rª   r«   Ú	TypeErrorrÇ   )rO  r:  r‹   rŒ   r    rK   rK   rL   Ú"test_metrics_consistent_type_error“  s    rR  zmetric, y_pred_thresholdÚdtype_y_strc           
   	   C   s¦   t j d¡}t jdgd dgd  |d�}|jdd|jd�}|sVt jddg|d�| }d	}d
}t| ƒjd j}|dkrz|n|}	t	j
t|	d�� | ||ƒ W 5 Q R X d S )NrP  rÀ   rÖ   r¿   rN   r	  r   r›   z”y_true takes value in {'eggs', 'spam'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitzHpos_label=1 is not a valid label. It should be one of \['eggs', 'spam'\]rÂ   rC   rÓ   )rH   r6  r7  rz   r¡   rœ   r   Ú
parametersÚdefaultrª   r«   r¬   )
r¨   Zy_pred_thresholdrS  r:  r‹   rŒ   Zerr_msg_pos_label_NoneZerr_msg_pos_label_1Zpos_label_defaultr    rK   rK   rL   Ú test_metrics_pos_label_error_str   s    ÿÿrV  )—Ú	functoolsr   Úinspectr   Ú	itertoolsr   r   r   ÚnumpyrH   Zscipy.sparseÚsparser  rª   Zsklearn.datasetsr   Zsklearn.preprocessingr   Zsklearn.utils.multiclassr	   Zsklearn.utils.validationr
   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r   r   r   Zsklearn.metricsr   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   Zsklearn.metrics._baser;   ZREGRESSION_METRICSrÇ   r~   ZCURVE_METRICSr“   Údictr•   Úupdater£   ZMETRIC_UNDEFINED_MULTICLASSÚunionr”   r$  r%  rÈ   rÊ   ZMETRICS_WITH_NORMALIZE_OPTIONrµ   r¤   r¶   r�   r‘   ZMETRICS_WITHOUT_SAMPLE_WEIGHTr¢   rŽ   r—   ÚmarkZparametrizeÚsortedr©   r­   r’   r²   r¸   r¾   rÑ   rÒ   Úinfr|   Zinvalids_nan_infrã   rÕ   rÜ   rà   ræ   rê   rì   rí   rï   rö   r  r  r  r  Úintersectionr  r"  r&  r(  r+  r0  r1  r3  r<  r>  r?  rB  rC  rF  rL  rM  rN  rR  Ústrr  rV  rK   rK   rK   rL   Ú<module>   s~  %



ñ

 ÿ


















Ë9 ý



  ÿ  ÿ
 ÿ ÿ
á"



ôëÿúýòà%ýðâ#÷ä"á%üü

 ÿ

* ÿ
v ÿ
5
+û	 ÿ	þüþ


ýüÿþ



	

K


 ÿ
/
6
 
ÿ





aÿÿþ

ÿþýÿþ	
ÿþýÿþ	

ÿÿþ

 ÿ
 
ÿ
 ÿ
÷þ