U
    OvfŽ  ć                -   @   s¼
  d dl mZ d dlmZ d dlmZmZmZ d dlZ	d dl
Z
d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d d	l>m?Z? d d
l@mAZAmBZBmCZCmDZDmEZE d dlFmGZG d dlHmIZImJZJ e'e(e-e+e/e)eee4ddee.d de,e*ee.ddeeddeedZKeeeeddeeddedd e0ee0dde e9ee9dde"e3e5eeeddeedde&eedddeeddeedddee3ddee5ddee"ddeedddeeddeedddee3ddee5ddee"ddeed ddeed deed ddee3d dee5d dee"d deed!ddeed!deed!ddee3d!dee5d!dee"d!ded"+ZLd#d$ ZMe7eMed%ZNee$e%ee%dde!ee6ee6ddee6d!dee6ddee6d d&d'ee6dd&d'ee6d d(d'ee6dd(d'ee6dd)eeeddeed!deedde#e1ee8d*ZOeP ZQeQ ReO” eQ ReL” eQ ReK” eQ ReN” d+d,d-d.d/d0d1d2d3d4d5d6hZSd7d8d9d:d;d<d=d>d?d@dAdBdCdDdEhZTeS UeT”ZVd>d?d@dAdBd=hZWd;dFd:hZXdCdDdEd7d>d?d@dAdBd=dFdGdHdIhZYdJdKdCdDdEd>d?d@dAdBd=dLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d2d_h ZZd`dadbhZ[dcddd;d<d9d8d:dFdGdIdHd1d3d6d5d4hZ\d`dedfdbdgdLdMdNdOdPdQdXdYdZd[d\d]dRdSdTdUdVdWd^d+d,d-d.d/d0hZ]dhdidjdkdldmdndodph	Z^d`dedfdbdgdWd]d=d0d@dSdYdPdRdSdTdUdVdqdhdjdidrdnd_dshZ_dtdudldkdJdKdCdDdEd>d?dAdBdLdMdNdOdQd^dXdZd[d\dvdwdxdydzdodpdmhZ`didrd{d|hZadxdwdydzhZbd}d~ Zcdd Zde
je fdege_”dd Zhe
je fdege`”dd Zie
je fdegejeQeV ”dd ZkeEd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dgdddgfe	jpddgdddgfg ”dd Zue
je fdeL s” ”dd ZveEdd ZweEd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|eEd¦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eEd°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eEd¾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eEdČ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 fdÓedfedfedfeedddfe"dfe2dfe3dfe5dfe7dfg	”e
je fdŌeeg”dÕdÖ ZdS )×é    )Śpartial)Ś	signature)ŚchainŚpermutationsŚproductN)Śmake_multilabel_classification))Śaccuracy_scoreŚaverage_precision_scoreŚbalanced_accuracy_scoreŚbrier_score_lossŚcohen_kappa_scoreŚconfusion_matrixŚcoverage_errorŚd2_absolute_error_scoreŚd2_pinball_scoreŚd2_tweedie_scoreŚ	dcg_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Śmatthews_corrcoefŚ	max_errorŚmean_absolute_errorŚmean_absolute_percentage_errorŚmean_gamma_devianceŚmean_pinball_lossŚmean_poisson_devianceŚmean_squared_errorŚmean_tweedie_devianceŚmedian_absolute_errorŚmultilabel_confusion_matrixŚ
ndcg_scoreŚprecision_recall_curveŚprecision_scoreŚr2_scoreŚrecall_scoreŚroc_auc_scoreŚ	roc_curveŚtop_k_accuracy_scoreŚzero_one_loss)Ś_average_binary_score)ŚLabelBinarizer)Śshuffle)Śassert_allcloseŚassert_almost_equalŚassert_array_equalŚassert_array_lessŚignore_warnings)Śtype_of_target)Ś_num_samplesŚcheck_random_stateZvariance_weighted)Zmultioutput)Śpowergffffffö?)r   r   r$   r"   r&   r    r   r+   Ś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   śE/tmp/pip-unpacked-wheel-qu3nn_q2/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   r0   Śunnormalized_zero_one_lossr   r*   r,   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)r)   ŚlenrH   ŚarrayŚpadrF   Zfloat64Śnan)rI   rJ   Z	precisionZrecallZ
thresholdsZpad_threshholdsrK   rK   rL   Ś(precision_recall_curve_padded_thresholds®   s    
üż’r}   )r.   r)   r   Zovr)rQ   Zmulti_classZovo)Zmax_fpr)r   r   r   Śunnormalized_log_lossr   r   r-   Ś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   r(   r   r/   rr   rs   rt   ru   rv   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   rX   rY   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rZ   r   r   r/   r0   r   r~   rW   r   r\   r   r&   r$   r+   r   r    r"   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_METRICSr4   r   )r   Śrandom_stateŚy_trueŚy_predZ
y_true_binZ
y_pred_binŚmetricrK   rK   rL   Śtest_symmetric_metric+  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   r6   Ś
ValueError)r   r¤   r„   r¦   r§   rK   rK   rL   Śtest_not_symmetric_metricJ  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   r3   r8   r   r4   )r   r¤   r„   r¦   Śy_true_shuffleŚy_pred_shuffler§   rK   rK   rL   Śtest_sample_order_invariance\  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Śshaper3   r£   r   r4   Ś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_multioutputr  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   r6   ŚndimŚreshaper8   r   r4   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   r8   ŚCLASSIFICATION_METRICSŚMETRICS_WITH_POS_LABELr   r6   Ś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   r8   r   r¢   rĒ   r   r6   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_labelsN  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³   r4   )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__r4   r5   )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_sequencesQ  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   r7   r4   ©r   rł   rś   r¤   r„   r¦   r¶   ŚmetricsŚpredŚmeasure_normalizedŚmeasure_not_normalizedrK   rK   rL   Ś+test_normalize_option_binary_classificationb  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   r7   r4   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   r7   r4   )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³   r4   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)r9   Ś
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š   r2   Z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_zeroes:  s    


r.  c                  C   s>   t  d”} t  d”}| }|}ddd}t|| |||dd d S )Nr+  rT   c                 S   s   t t| ||S r   )r1   r*   )r„   r¶   rQ   rK   rK   rL   rM   K  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_zeroesE  s    


śr/  c                 C   s<   t  d”}t  d”}t  d”}|}|}t| ||||| d S r*  )rH   Śonesr%  r-  rK   rK   rL   Ś"test_averaging_multilabel_all_onesX  s    


r1  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   r4   r0  r©   rŖ   r   r«   Śtolistrį   Ścopyr"  rČ   r:   Zhstack)r   r§   r   r   Śrngr3  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_invariancec  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    r@  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   r2  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,    	    ’
    ’
rA  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   r6   )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     žrD  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ń   r5   ©r   r¤   rś   rł   r„   r¶   r§   rC  rō   Śy_score_permŚy_true_permŚcurrent_scorerK   rK   rL   Ś-test_multilabel_label_permutations_invariance<  s    

rJ  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   rE  rN   r   rC   rę   g    .A)r;   r    r²   r³   rG   r   r   rń   r    rH   r×   r   r5   rF  rK   rK   rL   Ś?test_thresholded_multilabel_multioutput_permutations_invarianceQ  s     

rK  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taker5   )r   rś   rł   r¤   r¶   r?  r„   r§   rC  rō   Zinverse_permrG  rH  rI  rK   rK   rL   Ś.test_thresholded_metric_permutation_invariancer  s    

rL  Ś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   r4  r5  rz   r  r    r   r©   rŖ   Ś	TypeErrorrĘ   )rM  r8  r   r   r   rK   rK   rL   Ś"test_metrics_consistent_type_error  s    rP  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 )NrN  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   r4  r5  rz   r    r   r   Ś
parametersŚdefaultr©   rŖ   r«   )
r§   Zy_pred_thresholdrQ  r8  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    ’’rT  )Ś	functoolsr   Śinspectr   Ś	itertoolsr   r   r   ZnumpyrH   r©   Zscipy.sparseŚsparser  Zsklearn.datasetsr   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%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Zsklearn.metrics._baser1   Zsklearn.preprocessingr2   Zsklearn.utilsr3   Zsklearn.utils._testingr4   r5   r6   r7   r8   Zsklearn.utils.multiclassr9   Zsklearn.utils.validationr:   r;   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)  r.  r/  r1  r:  r<  r=  r@  rA  rD  rJ  rK  rL  rP  Śstrr  rT  rK   rK   rK   rL   Ś<module>   s  ¬+$



ń

 ’


















Ė9 ż



  ’  ’
 ’ ’
į"



ōļ’śżņą%żšā#÷ä"į%üü

 ’

* ’
v ’
5
+ū	 ’	žüž


żü’ž

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




a’’ž

’žż’ž	
’žż’ž	

’’ž

 ’
 
’
 ’

÷ž