U
    _»{jÑE  ã                   @   sb  d dl Z d dlZd dlZd dlmZmZ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 d dlmZmZ d dlmZ d dlmZ e
eeeee	egZdd„ Zd	d
„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&dPdd„Z'dd„ Z(dd„ Z)dd „ Z*d!d"„ Z+d#d$„ Z,d%d&„ Z-d'd(„ Z.d)d*„ Z/dQd,d-„Z0d.d/„ Z1d0d1„ Z2ej3 4d2d3gd4 d5d5d d d5d5gfd5gd4 d5d5d d d5d5gfd5d5d d d5d5gd3gd4 fd5d5d d d5d5gd5gd4 fd3gd4 d3gd4 fg¡d6d7„ ƒZ5d8d9„ Z6d:d;„ Z7d<d=„ Z8d>d?„ Z9ej3 4d@e:e;dAƒƒe:e;dAƒƒfe <dB¡e <dB¡fg¡dCdD„ ƒZ=dEdF„ Z>dGdH„ Z?ej3 4dIdJdKdLdMg¡dNdO„ ƒZ@dS )Ré    N)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equal)Úadjusted_mutual_info_scoreÚadjusted_rand_scoreÚcompleteness_scoreÚcontingency_matrixÚentropyÚexpected_mutual_informationÚfowlkes_mallows_scoreÚ"homogeneity_completeness_v_measureÚhomogeneity_scoreÚmutual_info_scoreÚnormalized_mutual_info_scoreÚpair_confusion_matrixÚ
rand_scoreÚv_measure_score)Ú_generalized_averageÚcheck_clusterings)Úassert_all_finite)Úassert_almost_equalc               
   C   s´   t D ]ª} d}tjt|d�� | ddgdddgƒ W 5 Q R X d}tjt|d��" | ddgddggdddgƒ W 5 Q R X d}tjt|d��" | dddgddgddggƒ W 5 Q R X qd S )NzDFound input variables with inconsistent numbers of samples: \[2, 3\]©Úmatchr   é   z$labels_true must be 1D: shape is \(2z$labels_pred must be 1D: shape is \(2)Úscore_funcsÚpytestÚraisesÚ
ValueError)Ú
score_funcÚexpected© r    úl/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/metrics/cluster/tests/test_supervised.pyÚ"test_error_messages_on_wrong_input&   s    ÿ&r"   c                     s°   d\‰ ‰ddddg} ‡ ‡fdd„| D ƒ}|d |d	   krV|d
   krV|d ks\n t ‚d\‰‰‡‡fdd„| D ƒ}|d |d	   kr¦|d
   kr¦|d ks¬n t ‚d S )N)r   é   ÚminÚ	geometricÚ
arithmeticÚmaxc                    s   g | ]}t ˆ ˆ|ƒ‘qS r    ©r   ©Ú.0Úmethod)ÚaÚbr    r!   Ú
<listcomp>:   s     z,test_generalized_average.<locals>.<listcomp>r   r   r#   é   )é   r0   c                    s   g | ]}t ˆ ˆ|ƒ‘qS r    r(   r)   )ÚcÚdr    r!   r.   =   s     )ÚAssertionError)ÚmethodsÚmeansr    )r,   r-   r1   r2   r!   Útest_generalized_average7   s    4r6   c                  C   s8  t D ]ì} | g g ƒt d¡ks t‚| dgdgƒt d¡ks<t‚| dddgdddgƒt d¡ks`t‚| dddgdddgƒt d¡ks„t‚| dddgdddgƒt d¡ks¨t‚| ddd	gddd	gƒt d¡ksÌt‚| ddd
gddd
gƒt d¡kst‚qttg}ddddh}|D �]&} |D �]}| g g |d�t d¡k�s8t‚| dgdg|d�t d¡k�sZt‚| dddgdddg|d�t d¡k�s„t‚| dddgdddg|d�t d¡k�s®t‚| dddgdddg|d�t d¡k�sØt‚| ddd	gddd	g|d�t d¡k�st‚| ddd
gddd
g|d�t d¡k�st‚�q�q
d S )Nç      ð?r   r   é*   é   ç        ç      E@g      @ç       @r#   r$   r%   r&   r'   ©Úaverage_method)r   r   Úapproxr3   r   r   )r   Zscore_funcs_with_changing_meansr5   Zmeanr    r    r!   Útest_perfect_matchesA   sf    $$$$&þ

"  ÿþ
  ÿþ
  ÿþ
  ÿþ
  ÿþr@   c                  C   sP   t ddddddgddddddgƒ\} }}t| ddƒ t|ddƒ t|ddƒ d S )Nr   r   r#   r7   g®Gázæ?gìQ¸…ëé?©r   r   ©Úhr1   Úvr    r    r!   Ú*test_homogeneous_but_not_complete_labelingd   s    (rE   c                  C   sP   t ddddddgddddddgƒ\} }}t| ddƒ t|ddƒ t|ddƒ d S )Nr   r   r#   g�Âõ(\�â?r7   g\�Âõ(\ç?rA   rB   r    r    r!   Ú*test_complete_but_not_homogeneous_labelingl   s    (rF   c                  C   sP   t ddddddgddddddgƒ\} }}t| ddƒ t|ddƒ t|ddƒ d S )Nr   r   r#   çq=
×£på?çáz®GáÚ?ç¤p=
×£à?rA   rB   r    r    r!   Ú.test_not_complete_and_not_homogeneous_labelingt   s    (rJ   c                  C   s®   d} d}d}d|  | | | | |  }t ddddddgddddddg| d�\}}}t||dƒ t||dƒ t||dƒ tddddddgddddddg| d�}t||dƒ d S )Ngš™™™™™É?rG   rH   r   r   r#   )Úbeta)r   r   r   )Z	beta_testZh_testZc_testZv_testrC   r1   rD   r    r    r!   Útest_beta_parameter|   s      ÿ&rL   c                  C   sT  t ddddddgddddddgƒ\} }}t| ddƒ t|ddƒ t|ddƒ t ddddddgddddddgƒ\} }}t| ddƒ t|ddƒ t|ddƒ tddddddgddddddgƒ}tddddddgddddddgƒ}t|ddƒ t|ddƒ tddddddgddddddgƒ}tddddddgddddddgƒ}t|d	dƒ t|d	dƒ d S )
Nr   r#   r   rG   rH   rI   é   g¸…ëQ¸Î?g…ëQ¸å?)r   r   r   r   )rC   r1   rD   Zari_1Zari_2Zri_1Zri_2r    r    r!   Útest_non_consecutive_labels�   s     ((""""rN   é
   r8   c                 C   sr   t j |¡j}t  t|ƒ|f¡}t|ƒD ]D\}}t|ƒD ]2}	|d||d�}
|d||d�}| |
|ƒ|||	f< q8q(|S )Nr   )ÚlowÚhighÚsize)ÚnpÚrandomÚRandomStateÚrandintÚzerosÚlenÚ	enumerateÚrange)r   Ú	n_samplesZk_rangeÚn_runsÚseedZrandom_labelsÚscoresÚiÚkÚjÚlabels_aÚlabels_br    r    r!   Úuniform_labelings_scores§   s    rd   c                  C   sL   ddddg} d}d}t t|| |ƒ}t |¡jdd�}t|dd	d	dgdƒ d S )
Nr#   rO   é2   éZ   éd   r   )Zaxisg{®Gáz”?g¸…ëQ¸ž?)rd   r   rS   Úabsr'   r   )Zn_clusters_ranger[   r\   r^   Zmax_abs_scoresr    r    r!   Útest_adjustment_for_chance³   s       ÿri   c            	      C   sf  t  dddddddddddddddddg¡} t  dddddddddddddddddg¡}t| |ƒ}t|ddƒ t| |dd�}t| ||d�}t|ddƒ t| |ƒ}t| ||d�}t|ddƒ | ¡ }t||ƒ}t|d	dƒ t| |ƒ}t|d
dƒ tddddgddddgƒ}|t 	d¡k�st
‚t  t| ƒd g¡ ¡ }t  t|ƒd g¡ ¡ }t||ƒ}t|ddƒ d S )Nr   r#   r/   gS‘
cAÚ?é   T©Úsparse)ZcontingencygpUjö@Ã?gçãÚP1ÎÑ?r7   én   gR¸…ëQØ?)rS   Úarrayr   r   r   Úsumr
   r   r   r?   r3   ÚlistÚflatten)	rb   rc   ÚmiÚCr[   ZemiZamiZa110Zb110r    r    r!   Útest_adjusted_mutual_info_scoreÁ   s*    ,,




rt   c                   C   s    t t dgg¡dƒdkst‚d S )Nip r   )r
   rS   rn   r3   r    r    r    r!   Ú"test_expected_mutual_info_overflowà   s    ru   c                  C   sÂ   t  dgd dgd  dgd  dgd  d	gd
  ¡} t  dgd dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgd  dgd  ¡}tt| |ƒƒ tt| |ƒƒ d S )Nr   iy×  r#   i]<  r/   i“  rM   iU  rj   iP  r   i˜Í  iá	  iD9  i  iÇ  éÌ   i.  é'   i<  é   )rS   rn   r   r   r   )ÚxÚyr    r    r!   Ú3test_int_overflow_mutual_info_fowlkes_mallows_scoreæ   sD    ÿþýüÿÿþýüûúùø	÷ÿr{   c                  C   sD   t dddgƒ} t| ddƒ tt g ƒdƒ t ddddgƒdks@t‚d S )Nr   r;   g,^ÑR^ä?rj   r   )r	   r   r3   )Zentr    r    r!   Útest_entropy   s    r|   c                  C   s´   t  dddddddddddddddddg¡} t  dddddddddddddddddg¡}t| |ƒ}t j| |t  dd¡t  dd¡fd�d }t||ƒ t| |dd�}t||d ƒ d S )	Nr   r#   r/   rj   )Zbinsr   gš™™™™™¹?)Úeps)rS   rn   r   Zhistogram2dÚaranger   )rb   rc   rs   ZC2r    r    r!   Útest_contingency_matrix  s    ,,
(
r   c                  C   s¬   t  dddddddddddddddddg¡} t  dddddddddddddddddg¡}t| |ƒ}t| |dd� ¡ }t||ƒ tjtdd�� t| |ddd	� W 5 Q R X d S )
Nr   r#   r/   Trk   z!Cannot set 'eps' when sparse=Truer   g»½×Ùß|Û=)r}   rl   )rS   rn   r   Ztoarrayr   r   r   r   )rb   rc   rs   ZC_sparser    r    r!   Útest_contingency_matrix_sparse  s    ,,

r€   c                  C   sÞ   t  ddd¡ t¡D ]Ä} t j| td�t j| td� }}t||ƒt d¡ksNt	‚t
||ƒt d¡ksft	‚t||ƒt d¡ks~t	‚t||ƒt d¡ks–t	‚dD ]<}t|||d�t d¡ksºt	‚t|||d�t d¡ksšt	‚qšqd S )Nr   rM   ©Údtyper:   )r$   r%   r&   r'   r=   )rS   ÚlogspaceÚastypeÚintZonesr~   r   r   r?   r3   r   r   )r_   rb   rc   r+   r    r    r!   Útest_exactly_zero_info_score  s*      ÿþ  ÿþr†   é$   c                 C   s’   t  ddd¡ t¡D ]x}t j | ¡}| dd|¡| dd|¡ }}tt||ƒdt	||ƒ t
|ƒt
|ƒ  dƒ d}tt||ƒt|||d�ƒ qd S )Nr   rM   r   rO   r<   r&   r=   )rS   rƒ   r„   r…   rT   rU   rV   r   r   r   r	   r   )r]   r_   Zrandom_staterb   rc   Úavgr    r    r!   Ú%test_v_measure_and_mutual_information,  s&    þÿþûþr‰   c                  C   s’   t ddddddgddddddgƒ} t| dt d¡ ƒ t ddddddgddddddgƒ}t|dƒ t ddddddgdddddd	gƒ}t|d
ƒ d S )Nr   r   r#   g      @g      R@r7   r/   rM   rj   r:   )r   r   rS   Úsqrt)ZscoreZperfect_scoreZworst_scorer    r    r!   Útest_fowlkes_mallows_scoreB  s    ""
"r‹   c                  C   sž   t  ddddddg¡} t  ddddddg¡}dt  d¡ }t| |ƒ}t||ƒ t|| ƒ}t||ƒ t| d d |ƒ}t||ƒ t|| d d ƒ}t||ƒ d S )Nr   r   r#   r7   g      (@r/   )rS   rn   rŠ   r   r   )rb   rc   r   Zscore_originalZscore_symmetricZscore_permutedZ
score_bothr    r    r!   Ú%test_fowlkes_mallows_score_propertiesP  s    




rŒ   zlabels_true, labels_predr,   é   r   c                 C   s   t | |ƒdkst‚d S )Nr   )r   r3   )Zlabels_trueZlabels_predr    r    r!   Ú.test_mutual_info_score_positive_constant_labelg  s    rŽ   c               	   C   sT   t j d¡} |  d¡}t  ddd¡d }d}tjt|d�� t||ƒ W 5 Q R X d S )Nr8   iô  g{®Gáz„?r   g�íµ ÷Æ°>zuClustering metrics expects discrete values but received continuous values for label, and continuous values for targetr   )	rS   rT   rU   ZrandZlinspacer   ZwarnsÚUserWarningr   )ÚrngÚnoiseZ
wavelengthÚmsgr    r    r!   Útest_check_clustering_errorw  s    
ÿr“   c                  C   sF   d} t t| ƒƒ}|}t | | d  dgddgg¡}tt||ƒ|ƒ d S )Nrg   r   r   )rp   rZ   rS   rn   r   r   ©ÚNÚclustering1Úclustering2r   r    r    r!   Ú*test_pair_confusion_matrix_fully_dispersed†  s
    r˜   c                  C   sF   d} t  | f¡}|}t  ddgd| | d  gg¡}tt||ƒ|ƒ d S )Nrg   r   r   )rS   rW   rn   r   r   r”   r    r    r!   Ú)test_pair_confusion_matrix_single_cluster�  s
    r™   c                     sØ   d‰ ˆ d } t  ‡ fdd„tˆ ƒD ƒ¡}t  ‡ fdd„tˆ ƒD ƒ¡d | … }t jdt jd�}tt|ƒƒD ]Z}tt|ƒƒD ]H}||krxt|| || kƒ}t|| || kƒ}|||f  d7  < qxqhtt||ƒ|ƒ d S )	NrO   r#   c                    s   g | ]}|d  gˆ  ‘qS ©r   r    ©r*   r_   ©Únr    r!   r.   œ  s     z.test_pair_confusion_matrix.<locals>.<listcomp>c                    s   g | ]}|d  gˆ d   ‘qS rš   r    r›   rœ   r    r!   r.   �  s     )r#   r#   )Úshaper‚   r   )	rS   ZhstackrZ   rW   Zint64rX   r…   r   r   )r•   r–   r—   r   r_   ra   Zsame_cluster_1Zsame_cluster_2r    rœ   r!   Útest_pair_confusion_matrix˜  s    $rŸ   zclustering1, clustering2rg   )rg   c                 C   s   t t| |ƒdƒ d S )Nr7   ©r   r   )r–   r—   r    r    r!   Útest_rand_score_edge_cases©  s    r¡   c            	      C   sp   ddddddg} ddddddg}d}d}d}d| | | }|| }|| | | }|| }t t| |ƒ|ƒ d S )Nr   r   r#   rM   é   é   r    )	r–   r—   ZD11ZD10ZD01ZD00Zexpected_numeratorZexpected_denominatorr   r    r    r!   Útest_rand_score³  s    r¤   c               	   C   sb   t j d¡} | jdddt jd�}| jdddt jd�}t ¡ � t dt¡ t	||ƒ W 5 Q R X dS )z·Check that large amount of data will not lead to overflow in
    `adjusted_rand_score`.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20305
    r   r#   i † r�   ÚerrorN)
rS   rT   rU   rV   Zint8ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr   )r�   Zy_trueZy_predr    r    r!   Ú!test_adjusted_rand_score_overflowÃ  s    
rª   r>   r$   r&   r%   r'   c                 C   sv   dgd }dg|dd…  }ddg|dd…  }t ||| d�}|dksJt‚t ||| d�}d|  krldk srn t‚dS )z�Check that nmi returns a score between 0 (included) and 1 (excluded
    for non-perfect match)

    Non-regression test for issue #13836
    r   iÕ  r   Nr#   r=   )r   r3   )r>   Zlabels1Zlabels2Zlabels3Znmir    r    r!   Ú)test_normalized_mutual_info_score_boundedÑ  s    
r«   )rO   r8   )r‡   )Ar¦   ÚnumpyrS   r   Znumpy.testingr   r   r   Zsklearn.metrics.clusterr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Z#sklearn.metrics.cluster._supervisedr   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r"   r6   r@   rE   rF   rJ   rL   rN   rd   ri   rt   ru   r{   r|   r   r€   r†   r‰   r‹   rŒ   ÚmarkZparametrizerŽ   r“   r˜   r™   rŸ   rp   rZ   rW   r¡   r¤   rª   r«   r    r    r    r!   Ú<module>   st   @ù
#



ûþ

		*þ
