o
    \iK                  
   @   s  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	 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m Z  d dl!m"Z"m#Z# eeeeeeegZ$ej%&d	e$d
d Z'dd Z(ej%&d	e$dd Z)ej%&d	eegej%&dg ddd Z*dd Z+dd Z,dd Z-dd Z.dd Z/d]d d!Z0d"d# Z1d$d% Z2d&d' Z3d(d) Z4d*d+ Z5ej%j&d,e  ed-d.d/ Z6d0d1 Z7d2d3 Z8d4d5 Z9d^d7d8Z:d9d: Z;d;d< Z<ej%&d=d>gd? g d@fdAgd? g d@fg d@d>gd? fg d@dAgd? fd>gd? d>gd? fgdBdC Z=dDdE Z>dFdG Z?dHdI Z@dJdK ZAej%&dLeBeCdMeBeCdMfeDdNeDdNfgdOdP ZEdQdR ZFdSdT ZGej%&dg dUdVdW ZHej%&dXdYdZgd[d\ ZIdS )_    N)assert_allcloseassert_array_almost_equalassert_array_equal)config_context)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)_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_almost_equal
score_funcc                 C   s   d}t jt|d | ddgg d W d    n1 sw   Y  d}t jt|d | ddgddggg d W d    n1 sCw   Y  d}t jt|d | g dddgddgg W d    d S 1 sjw   Y  d S )	NzDFound input variables with inconsistent numbers of samples: \[2, 3\]matchr      )r   r   r   z$labels_true must be 1D: shape is \(2z$labels_pred must be 1D: shape is \(2r   r   r   )pytestraises
ValueError)r   expected r$   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/metrics/cluster/tests/test_supervised.py"test_error_messages_on_wrong_input+   s   "r&   c                     s   d\ g d}  fdd| D }|d |d   kr*|d   kr*|d ks-J  J d	\fd
d| D }|d |d   krS|d   krS|d ksVJ  J d S )N)r      min	geometric
arithmeticmaxc                       g | ]}t  |qS r$   r   .0method)abr$   r%   
<listcomp>=       z,test_generalized_average.<locals>.<listcomp>r   r   r'      )   r7   c                    r-   r$   r.   r/   )cdr$   r%   r4   @   r5   r$   )methodsmeansr$   )r2   r3   r8   r9   r%   test_generalized_average:   s   6:r<   c                 C   s   | g g t dksJ | dgdgt dksJ | g dg dt dks*J | g dg dt dks:J | g dg dt dksJJ | g d	g d
t dksZJ | g dg dt dksjJ d S )N      ?r   r   r   r   r   r   *      r@           r=   rC         E@      @rE   rC   r=          @rE   rF   rH   r   r   r'   r@   rA   r'   r    approx)r   r$   r$   r%   test_perfect_matchesD   s       $rN   average_methodr(   c                 C   s<  | g g |dt dksJ | dgdg|dt dksJ | g dg d|dt dks0J | g dg d|dt dksBJ | g dg d	|dt dksTJ | g d
g d|dt dksfJ | g dg d|dt dksxJ | ddgddg|dt dksJ | g dg d|dt dksJ d S )NrO   r=   r   r   r>   r   r?   rB   rD   rG   rI   rJ   rK   )r   r   r'   r6   rL   )r   rO   r$   r$   r%   (test_perfect_matches_with_changing_meansO   sF   	 
rQ   c                  C   @   t g dg d\} }}t| dd t|dd t|dd d S )Nr   r   r   r   r   r   )r   r   r   r   r'   r'   r=   r'   gGz?gQ?r   r   hr8   vr$   r$   r%   *test_homogeneous_but_not_complete_labelingr      rX   c                  C   rR   )Nr   r   r   r   r'   r'   )r   r   r   r   r   r   g(\?r'   r=   g\(\?rT   rU   r$   r$   r%   *test_complete_but_not_homogeneous_labelingz   rY   r[   c                  C   rR   )NrS   r   r   r   r   r'   r'   q=
ףp?r'   zG?p=
ף?rT   rU   r$   r$   r%   .test_not_complete_and_not_homogeneous_labeling   rY   r`   c                  C   s   d} d}d}d|  | | | | |  }t g dg d| d\}}}t||d t||d t||d tg dg d| d}t||d d S )	Ng?r]   r^   r   rS   r\   )betar'   )r   r   r   )	beta_testh_testc_testv_testrV   r8   rW   r$   r$   r%   test_beta_parameter   s   rf   c                  C   s   t g dg d\} }}t| dd t|dd t|dd t g dg d\} }}t| dd t|dd t|dd tg dg d}tg dg d}t|d	d t|d	d tg dg d}tg dg d}t|d
d t|d
d d S )N)r   r   r   r'   r'   r'   r\   r]   r'   r^   r_   rS   )r      r   rg   r'   r'   gQ?gQ?)r   r   r   r   )rV   r8   rW   ari_1ari_2ri_1ri_2r$   r$   r%   test_non_consecutive_labels   s    rl   
   r@   c                 C   sr   t j|j}t t||f}t|D ]"\}}t|D ]}	|d||d}
|d||d}| |
||||	f< qq|S )Nr   )lowhighsize)nprandomRandomStaterandintzeroslen	enumeraterange)r   	n_samplesk_rangen_runsseedrandom_labelsscoresikjlabels_alabels_br$   r$   r%   uniform_labelings_scores   s   r   c                  C   sD   g d} d}d}t t|| |}t|jdd}t|g dd d S )N)r'   rm   2   Z   d   rm   r   )axis){Gz?Q?r   r   r'   )r   r   rq   absr,   r   )n_clusters_rangery   r{   r~   max_abs_scoresr$   r$   r%   test_adjustment_for_chance   s   r   c            	      C   s   t g d} t g d}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g d
g d}|t	dkskJ t t
| d g }t t
|d g }t||}t|dd d S )Nr   r   r   r   r   r   r'   r'   r'   r'   r'   r'   r6   r6   r6   r6   r6   r   r   r   r   r'   r   r'   r'   r'   r'   r6   r   r6   r6   r6   r'   r'   gS
cA?   Tsparse)contingencygpUj@?gP1?)r   r   r'   r'   )r'   r'   r6   r6   r=   n   gRQ?r'   )rq   arrayr   r   r	   sumr   r   r    rM   listflatten)	r   r   miCry   emiamia110b110r$   r$   r%   test_adjusted_mutual_info_score   s*   




r   c                   C   s    t tdggddksJ d S )Nip r   )r   rq   r   r$   r$   r$   r%   "test_expected_mutual_info_overflow   s    r   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]<  r6   i  rg   iU  r   iP  r   i  i	  iD9  i  i     i.  '   i<     )rq   r   r   r   r   )xyr$   r$   r%   3test_int_overflow_mutual_info_fowlkes_mallows_score   sD   	r   c                   C   s:   t tg ddd t tg d tg ddksJ d S )Nr   r   rE   ,^R^?r   r   r   r   r   r   r   )r   r
   r$   r$   r$   r%   test_entropy  s   r   z#array_namespace, device, dtype_name)idsc                 C   s   t | |}|jtjg d|d|d}|jg |j|d}|jg d|d}tdd& t|tjdd	d
ks8J t|dks@J t|dksHJ W d    d S 1 sSw   Y  d S )Nr   dtype)device)r   r   r   T)array_api_dispatchr   gh㈵>)r   r   r   )r   asarrayrq   int32r   r
   r    rM   )array_namespacer   
dtype_namexpfloat_labelsempty_int32_labels
int_labelsr$   r$   r%   test_entropy_array_api  s   
"r   c                  C   sx   t g d} t g d}t| |}t j| |t ddt ddfdd }t|| t| |dd}t||d  d S )	Nr   r   r   r   )binsr   g?)eps)rq   r   r	   histogram2daranger   )r   r   r   C2r$   r$   r%   test_contingency_matrix$  s   
(
r   c                  C   s   t g d} t g d}t| |}t| |dd }t|| tjtdd t| |ddd W d    d S 1 s<w   Y  d S )	Nr   r   Tr   z!Cannot set 'eps' when sparse=Truer   g|=)r   r   )rq   r   r	   toarrayr   r    r!   r"   )r   r   r   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s'J t	||tdks3J t
||dks<J t||tdksHJ dD ]}t
|||ddksWJ t|||dtdkseJ qJq
d S )Nr   rg   r   rC   r(   rP   )rq   logspaceastypeintonesr   r   r    rM   r   r   )r   r   r   r1   r$   r$   r%   test_exactly_zero_info_score8  s"   
r   $   c                 C   s   t dddtD ]<}t j| }|dd||dd|}}tt||dt	|| t
|t
|  d d}tt||t|||d q
d S )Nr   rg   r   rm   rH   r+   rP   )rq   r   r   r   rr   rs   rt   r   r   r   r
   r   )r|   r   random_stater   r   avgr$   r$   r%   %test_v_measure_and_mutual_informationJ  s(   r   c                  C   sb   t g dg d} t| dtd  t g dg d}t|d t g dg d}t|d	 d S )
NrS   rZ   g      @g      R@)r   r   r   r   r   r   r=   )r   r   r   r   r   r   )r   r   r'   r6   rg   r   rC   )r   r   rq   sqrt)scoreperfect_scoreworst_scorer$   r$   r%   test_fowlkes_mallows_score`  s   
r   c                  C   s   t g d} t g d}dt d }t| |}t|| t|| }t|| t| d d |}t|| t|| d d }t|| d S )N)r   r   r   r   r   r'   )r   r   r'   r'   r   r   r=   g      (@r   r6   r'   )rq   r   r   r   r   )r   r   r#   score_originalscore_symmetricscore_permuted
score_bothr$   r$   r%   %test_fowlkes_mallows_score_propertiesn  s   




r   zlabels_true, labels_predr2      )r   r   r   r   r   r   r   c                 C   s   t | |dks	J d S )Nr   )r   )labels_truelabels_predr$   r$   r%   .test_mutual_info_score_positive_constant_label  s   r   c                  C   sj   t jd} | d}t dddd }d}tjt|d t|| W d    d S 1 s.w   Y  d S )Nr@   i  g{Gz?r   gư>zuClustering metrics expects discrete values but received continuous values for label, and continuous values for targetr   )	rq   rr   rs   randlinspacer    warnsUserWarningr   )rngnoise
wavelengthmsgr$   r$   r%   test_check_clustering_error  s   
"r   c                  C   sF   d} t t| }|}t| | d  dgddgg}tt||| d S )Nr   r   r   )r   rx   rq   r   r   r   Nclustering1clustering2r#   r$   r$   r%   *test_pair_confusion_matrix_fully_dispersed  
   r   c                  C   sF   d} t | f}|}t ddgd| | d  gg}tt||| d S )Nr   r   r   )rq   ru   r   r   r   r   r$   r$   r%   )test_pair_confusion_matrix_single_cluster  r   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 ]-}tt|D ]$}||kr`t|| || k}t|| || k}|||f  d7  < q<q4tt||| d S )	Nrm   r'   c                    s   g | ]	}|d  g  qS r   r$   r0   r   nr$   r%   r4     s    z.test_pair_confusion_matrix.<locals>.<listcomp>c                    s   g | ]}|d  g d   qS r   r$   r   r   r$   r%   r4     s    )r'   r'   )shaper   r   )	rq   hstackrx   ru   int64rv   r   r   r   )r   r   r   r#   r   r   same_cluster_1same_cluster_2r$   r   r%   test_pair_confusion_matrix  s   $r   zclustering1, clustering2r   )r   c                 C   s   t t| |d d S )Nr=   r   r   )r   r   r$   r$   r%   test_rand_score_edge_cases  s   r   c            	      C   s`   g d} g d}d}d}d}d| | | }|| }|| | | }|| }t t| || d S )NrS   r\   rg      r'      r   )	r   r   D11D10D01D00expected_numeratorexpected_denominatorr#   r$   r$   r%   test_rand_score  s   r   c                  C   sx   t jd} | jdddt jd}| jdddt jd}t  tdt t	|| W d   dS 1 s5w   Y  dS )zCheck 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)
rq   rr   rs   rt   int8warningscatch_warningssimplefilterRuntimeWarningr   )r   y_truey_predr$   r$   r%   !test_adjusted_rand_score_overflow  s   
"r  )r)   r+   r*   r,   c                 C   sx   dgd }dg|dd  }ddg|dd  }t ||| d}|dks%J t ||| d}d|  kr7dk s:J  J dS )zCheck 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'   rP   )r   )rO   labels1labels2labels3nmir$   r$   r%   )test_normalized_mutual_info_score_bounded  s   
 r  r   TFc                 C   sJ   t jtdd tddgddg| d W d   dS 1 sw   Y  dS )zJCheck deprecation warning for 'sparse' parameter of fowlkes_mallows_score.z,The 'sparse' parameter was deprecated in 1.7r   r   r   r   N)r    r   FutureWarningr   r   r$   r$   r%   &test_fowlkes_mallows_sparse_deprecated  s
   "r  )rm   r@   )r   )Jr  numpyrq   r    numpy.testingr   r   r   sklearn.baser   sklearn.metrics.clusterr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   #sklearn.metrics.cluster._supervisedr   r   sklearn.utilsr   sklearn.utils._array_apir   r   sklearn.utils._testingr   r   score_funcsmarkparametrizer&   r<   rN   rQ   rX   r[   r`   rf   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   ru   r   r   r  r  r  r$   r$   r$   r%   <module>   s    @










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