
    riwL              
          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 d dlmZmZ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jL                  jO                  d	e%      d
        Z(d Z)ejL                  jO                  d	e%      d        Z*ejL                  jO                  d	eeg      ejL                  jO                  dg d      d               Z+d Z,d Z-d Z.d Z/d Z0d;dZ1d Z2d Z3d Z4d Z5d Z6d Z7ejL                  jO                  d e!       e       d        Z8d Z9d  Z:d! Z;d<d"Z<d# Z=d$ Z>ejL                  jO                  d%d&gd'z  g d(fd)gd'z  g d(fg d(d&gd'z  fg d(d)gd'z  fd&gd'z  d&gd'z  fg      d*        Z?d+ Z@d, ZAd- ZBd. ZCejL                  jO                  d/ eD eEd0             eD eEd0            f ej                  d1       ej                  d1      fg      d2        ZGd3 ZHd4 ZIejL                  jO                  dg d5      d6        ZJejL                  jO                  d7d8d9g      d:        ZKy)=    N)assert_allcloseassert_array_almost_equalassert_array_equal)config_context)adjusted_mutual_info_scoreadjusted_rand_scorecompleteness_scorecontingency_matrix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)_entropy_generalized_averagecheck_clusteringsentropy)assert_all_finite)_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_almost_equal
score_funcc                    d}t        j                  t        |      5   | ddgg d       d d d        d}t        j                  t        |      5   | ddgddggg d       d d d        d}t        j                  t        |      5   | g dddgddgg       d d d        y # 1 sw Y   xxY w# 1 sw Y   MxY w# 1 sw Y   y xY w)	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   expecteds     k/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_supervised.py"test_error_messages_on_wrong_inputr(   /   s    VH	z	2 &Aq69%& 7H	z	2 0QFQF#Y/0 7H	z	2 091v1v./0 0& &0 00 0s#   B#B/B;#B,/B8;Cc                  $   d\  } }g d}|D cg c]  }t        | ||       }}|d   |d   cxk  r|d   cxk  r	|d   k  sJ  J d\  }}|D cg c]  }t        |||       }}|d   |d   cxk(  r|d   cxk(  r	|d   k(  sJ  J y c c}w c c}w )N)r!      min	geometric
arithmeticmaxr   r!   r*      )   r1   )r   )abmethodsmethodmeanscds          r'   test_generalized_averager9   >   s    DAq7G>EFF!!Q/FEF8uQx7587uQx77777DAq>EFF!!Q/FEF8uQx7587uQx77777	 G Gs   BBc                     | g g       t        j                  d      k(  sJ  | dgdg      t        j                  d      k(  sJ  | g dg d      t        j                  d      k(  sJ  | g dg d      t        j                  d      k(  sJ  | g dg d      t        j                  d      k(  sJ  | g d	g d
      t        j                  d      k(  sJ  | g dg d      t        j                  d      k(  sJ y )N      ?r   r!   r   r   r   r"   *      r>           r;   rA         E@      @rC   rA   r;          @rC   rD   rF   r   r!   r*   r>   r?   r*   r#   approx)r   s    r'   test_perfect_matchesrL   H   s    b"s!3333qcA36==#5555i+v}}S/AAAAi-s1CCCCo'89V]]3=OOOOo'78FMM#<NNNNi,c0BBBB    average_methodr+   c                     | g g |      t        j                  d      k(  sJ  | dgdg|      t        j                  d      k(  sJ  | g dg d|      t        j                  d      k(  sJ  | g dg d|      t        j                  d      k(  sJ  | g dg d	|      t        j                  d      k(  sJ  | g d
g d|      t        j                  d      k(  sJ  | g dg d|      t        j                  d      k(  sJ  | ddgddg|      t        j                  d      k(  sJ  | g dg d|      t        j                  d      k(  sJ y )NrN   r;   r   r!   r<   r"   r=   r@   rB   rE   rG   rH   rI   )r   r!   r*   r0   rJ   )r   rN   s     r'   (test_perfect_matches_with_changing_meansrQ   S   s    b"^<c@RRRRqcA3~>&--PSBTTTT9^	s	   ;~	s	   *>	s	   ).	s	   :n	s	   q!fq!f^DI    l>	s	  rM   c                  z    t        g dg d      \  } }}t        | dd       t        |dd       t        |dd       y )Nr   r   r   r!   r!   r!   )r   r   r   r!   r*   r*   r;   r*   gGz?gQ?r   r   hr7   vs      r'   *test_homogeneous_but_not_complete_labelingrX   v   :    01CEWXGAq!4#4#4#rM   c                  z    t        g dg d      \  } }}t        | dd       t        |dd       t        |dd       y )Nr   r   r!   r!   r*   r*   )r   r   r!   r!   r!   r!   g(\?r*   r;   g\(\?rT   rU   s      r'   *test_complete_but_not_homogeneous_labelingr\   ~   rY   rM   c                  z    t        g dg d      \  } }}t        | dd       t        |dd       t        |dd       y )NrS   r   r!   r   r!   r*   r*   q=
ףp?r*   zG?p=
ף?rT   rU   s      r'   .test_not_complete_and_not_homogeneous_labelingrb      rY   rM   c                      d} d}d}d| z   |z  |z  | |z  |z   z  }t        g dg d|       \  }}}t        ||d       t        ||d       t        ||d       t        g dg d|       }t        ||d       y )	Ng?r_   r`   r!   rS   r^   )betar*   )r   r   r   )	beta_testh_testc_testv_testrV   r7   rW   s          r'   test_beta_parameterri      s     IFF)mv%.)f2Dv2MNF0.YGAq! 61%61%61%*,>YOA61%rM   c                     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       y )N)r   r   r   r*   r*   r*   r^   r_   r*   r`   ra   rS   )r      r   rk   r*   r*   gQ?gQ?)r   r   r   r   )rV   r7   rW   ari_1ari_2ri_1ri_2s          r'   test_non_consecutive_labelsrp      s    01CEWXGAq!4#4#4#01CEWXGAq!4#4#4# 24FGE 24FGEtQ'tQ'(*<=D(*<=DdA&dA&rM   c                 &   t         j                  j                  |      j                  }t        j                  t        |      |f      }t        |      D ]9  \  }}t        |      D ]&  }	 |d||      }
 |d||      } | |
|      |||	f<   ( ; |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_bs               r'   uniform_labelings_scoresr      s    II))$/77MXXs7|V,-F'" :1v 	:A$CH$CH%h9F1a4L	::
 MrM   c                      g d} d}d}t        t        || |      }t        j                  |      j	                  d      }t        |g dd       y )N)r*   
   2   Z   d   r   r!   )axis){Gz?Q?r   r   r*   )r   r   ru   absr/   r   )n_clusters_ranger}   r   r   max_abs_scoress        r'   test_adjustment_for_chancer      sP    &IF%Y(8&F VVF^''Q'/Nn.FJrM   c                     t        j                  g d      } t        j                  g d      }t        | |      }t        |dd       t	        | |d      }t        | ||      }t        |dd       t	        | |      }t        | ||      }t        |dd       |j                         }t        ||      }t        |dd       t        | |      }t        |d	d       t        g d
g d      }|t        j                  d      k(  sJ t        j                  t        |       dz  g      j                         }t        j                  t        |      dz  g      j                         }t        ||      }t        |dd       y )Nr!   r!   r!   r!   r!   r!   r*   r*   r*   r*   r*   r*   r0   r0   r0   r0   r0   r!   r!   r!   r!   r*   r!   r*   r*   r*   r*   r0   r!   r0   r0   r0   r*   r*   gS
cA?   Tsparse)contingencygpUj@?gP1?)r!   r!   r*   r*   )r*   r*   r0   r0   r;   n   gRQ?r*   )ru   arrayr   r   r
   sumr   r   r#   rK   listflatten)	r   r   miCr}   emiamia110b110s	            r'   test_adjusted_mutual_info_scorer      sB   xxKLHxxKLH	8X	.BGQ'8Xd;A	8X1	=BGQ'8X.A	8X1	=BGQ'I
%a
3CWa(
$Xx
8CWa(
$\<
@C&--$$$$88T(^c)*+335D88T(^c)*+335D
$T4
0CT1%rM   c                  P    t        t        j                  dgg      d      dk  sJ y )Nip r!   )r   ru   r    rM   r'   "test_expected_mutual_info_overflowr      s&     'rxx%	':EBaGGGrM   c                  r   t        j                  dgdz  dgdz  z   dgdz  z   dgdz  z   d	gd
z  z         } t        j                  dgdz  dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z   dgdz  z         }t        t        | |             t        t	        | |             y )Nr!   iy  r*   i]<  r0   i  rk   iU  r   iP  r   i  i	  iD9  i  i     i.  '   i<     )ru   r   r   r   r   )xys     r'   3test_int_overflow_mutual_info_fowlkes_mallows_scorer      s!   
	
|#
	#
	 #
	 #
			A 		
e#*	#+	 #)	 #*		
 #)	 #)	 #(	 #)	 #(			A '1-.+Aq12rM   c                  ~    t        j                  t        d      5  t        g d       d d d        y # 1 sw Y   y xY w)NzFunction entropy is deprecatedr   r   r   rC   )r#   warnsFutureWarningr   r   rM   r'   test_public_entropy_deprecationr     s.    	m+K	L   s   3<c                      t        t        g d      dd       t        t        g       d       t        g d      dk(  sJ y )Nr   ,^R^?r   r!   r!   r!   r!   r!   r   )r   r   r   rM   r'   test_entropyr     s4    .	1=a(L!Q&&&rM   z#array_namespace, device, dtype_name)idsc                    t        | |      }|j                  t        j                  g d|      |      }|j                  g |j                  |      }|j                  g d|      }t	        d      5  t        |      t        j                  dd	
      k(  sJ t        |      dk(  sJ t        |      dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   dtype)device)r   r   r   T)array_api_dispatchr   gh㈵>)r   r!   r   )r   asarrayru   int32r   r   r#   rK   )array_namespacer   
dtype_namexpfloat_labelsempty_int32_labels
int_labelss          r'   test_entropy_array_apir     s     
ov	6B::bjjZHQW:XLBbhhvFL8J	4	0 )%yd)KKKK*+q000
#q((() ) )s   6ACCc            	      T   t        j                  g d      } t        j                  g d      }t        | |      }t        j                  | |t        j                  dd      t        j                  dd      f      d   }t        ||       t        | |d      }t        ||dz          y )	Nr   r   r!   r   )binsr   g?)eps)ru   r   r
   histogram2daranger   )r   r   r   C2s       r'   test_contingency_matrixr   .  s    xxKLHxxKLH8X.A	("))Aq/299QPQ?1S	TUV	WBa$8X37Aac*rM   c                  F   t        j                  g d      } t        j                  g d      }t        | |      }t        | |d      j                         }t	        ||       t        j                  t        d      5  t        | |dd       d d d        y # 1 sw Y   y xY w)	Nr   r   Tr   z!Cannot set 'eps' when sparse=Truer   g|=)r   r   )ru   r   r
   toarrayr   r#   r$   r%   )r   r   r   C_sparses       r'   test_contingency_matrix_sparser   8  s    xxKLHxxKLH8X.A!(HTBJJLHa*	z)L	M G8X5FG G Gs   >BB c                  H   t        j                  ddd      j                  t              D ]  } t        j                  | t              t        j
                  | t              }}t        ||      t        j                  d      k(  sJ t        ||      t        j                  d      k(  sJ t        ||      dk(  sJ t        ||      t        j                  d      k(  sJ dD ];  }t        |||      dk(  sJ t        |||      t        j                  d      k(  r;J   y )Nr!   rk   r   rA   r+   rP   )ru   logspaceastypeintonesr   r   r#   rK   r   r   )r   r   r   r5   s       r'   test_exactly_zero_info_scorer   B  s   [[Aq!((- $ ggas3RYYq5L(+Hh?6==QTCUUUUx2fmmC6HHHH)(H=DDD+Hh?6==QTCUUUU? 	$F*8XfU 0(6s#$ $ $	$$rM   c           	         t        j                  ddd      j                  t              D ]  }t         j                  j                  |       }|j                  dd|      |j                  dd|      }}t        t        ||      dt        ||      z  t        |      t        |      z   z  d       d}t        t        ||      t        |||              y )Nr!   rk   r   r   rF   r.   rP   )ru   r   r   r   rv   rw   rx   r   r   r   r   r   )r   r   random_stater   r   avgs         r'   %test_v_measure_and_mutual_informationr   T  s    [[Aq!((- 
yy,,T2  B*  B*  	Hh/(34!HX$668 	
 Hh/(8CP	

rM   c                      t        g dg d      } t        | dt        j                  d      z         t        g dg d      }t        |d       t        g dg d      }t        |d	       y )
NrS   r[   g      @g      R@)r!   r!   r!   r   r   r   r;   )r   r   r   r   r   r   )r   r!   r*   r0   rk   r   rA   )r   r   ru   sqrt)scoreperfect_scoreworst_scores      r'   test_fowlkes_mallows_scorer   j  s\    !"46HIEsRWWZ%889 **<>PQMs+ ((:<NOKS)rM   c                  h   t        j                  g d      } t        j                  g d      }dt        j                  d      z  }t        | |      }t	        ||       t        ||       }t	        ||       t        | dz   dz  |      }t	        ||       t        || dz   dz        }t	        ||       y )N)r   r   r   r!   r!   r*   )r!   r!   r*   r*   r   r   r;   g      (@r!   r0   r*   )ru   r   r   r   r   )r   r   r&   score_originalscore_symmetricscore_permuted
score_boths          r'   %test_fowlkes_mallows_score_propertiesr   x  s    xx*+Hxx*+HRWW677H +8X>N1 ,Hh?O2 +HqLA+=xHN1 'x(Q,!1CDJ
H-rM   zlabels_true, labels_predr2      )r!   r!   r   r   r!   r!   r!   c                 &    t        | |      dk(  sJ y )Nr   )r   )labels_truelabels_preds     r'   .test_mutual_info_score_positive_constant_labelr     s     [+6!;;;rM   c                     t         j                  j                  d      } | j                  d      }t        j                  ddd      dz  }d}t        j                  t        |      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr>   i  g{Gz?r!   gư>zuClustering metrics expects discrete values but received continuous values for label, and continuous values for targetr   )	ru   rv   rw   randlinspacer#   r   UserWarningr   )rngnoise
wavelengthmsgs       r'   test_check_clustering_errorr     ss    
))


#CHHSMET1c*T1J	  
k	- -*e,- - -s   (A>>Bc                      d} t        t        |             }|}t        j                  | | dz
  z  dgddgg      }t	        t        ||      |       y )Nr   r!   r   )r   r|   ru   r   r   r   Nclustering1clustering2r&   s       r'   *test_pair_confusion_matrix_fully_dispersedr     sO    AuQx.KKxx!q1u+q)Aq623H,[+FQrM   c                      d} t        j                  | f      }|}t        j                  ddgd| | dz
  z  gg      }t        t	        ||      |       y )Nr   r   r!   )ru   ry   r   r   r   r   s       r'   )test_pair_confusion_matrix_single_clusterr     sQ    A((A4.KKxx!Q!Q!a%[!123H,[+FQrM   c                  R   d} | dz  }t        j                  t        |       D cg c]  }|dz   g| z   c}      }t        j                  t        |       D cg c]  }|dz   g| dz   z   c}      d | }t        j                  dt         j                        }t        t        |            D ]X  }t        t        |            D ]?  }||k7  s	t        ||   ||   k(        }t        ||   ||   k(        }|||fxx   dz  cc<   A Z t        t        ||      |       y c c}w c c}w )Nr   r*   r!   )r*   r*   )shaper   )	ru   hstackr|   ry   int64rz   r   r   r   )	nr   r   r   r   r&   r   same_cluster_1same_cluster_2s	            r'   test_pair_confusion_matrixr    s   
A	1A))%(;Qa!eWq[;<K))aA1a!eWA.AB2AFKxxfBHH5H3{#$ >s;'( 	>AAv!$[^{1~%E!F!$[^{1~%E!F78A=8		>> ,[+FQ <As   DD$zclustering1, clustering2r   )r   c                 0    t        t        | |      d       y )Nr;   r   r   )r   r   s     r'   test_rand_score_edge_casesr    s     J{K8#>rM   c                      g d} g d}d}d}d}d|z
  |z
  |z
  }||z   }||z   |z   |z   }||z  }t        t        | |      |       y )NrS   r^   rk      r*      r
  )	r   r   D11D10D01D00expected_numeratorexpected_denominatorr&   s	            r'   test_rand_scorer    sg    $K$K
C
C
C
#+
c
!Cs9s?S0!$88HJ{K8(CrM   c                  l   t         j                  j                  d      } | j                  dddt         j                        }| j                  dddt         j                        }t        j                         5  t        j                  dt               t        ||       ddd       y# 1 sw Y   yxY w)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)
ru   rv   rw   rx   int8warningscatch_warningssimplefilterRuntimeWarningr   )r   y_truey_preds      r'   !test_adjusted_rand_score_overflowr    s     ))


"C[[Awbgg[6F[[Awbgg[6F		 	 	" ,g~6FF+, , ,s   :'B**B3)r,   r.   r-   r/   c                     dgdz  }dg|dd z   }ddg|dd z   }t        |||       }|dk(  sJ t        |||       }d|cxk  rdk  sJ  J y)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   )rN   labels1labels2labels3nmis        r'   )test_normalized_mutual_info_score_boundedr%    su     cCiGcGABKG!fwqr{"G 'w
WC!8O8 'w
WC<a<<<rM   r   TFc                     t        j                  t        d      5  t        ddgddg|        ddd       y# 1 sw Y   yxY w)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   r   r   r   s    r'   &test_fowlkes_mallows_sparse_deprecatedr'    sA     
K
 = 	q!fq!fV<= = =s	   8A)r   r>   )$   )Lr  numpyru   r#   numpy.testingr   r   r   sklearn.baser   sklearn.metrics.clusterr   r   r	   r
   r   r   r   r   r   r   r   r   r   #sklearn.metrics.cluster._supervisedr   r   r   r   sklearn.utilsr   sklearn.utils._array_apir   r   sklearn.utils._testingr   r   score_funcsmarkparametrizer(   r9   rL   rQ   rX   r\   rb   ri   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r|   ry   r  r  r  r%  r'  r   rM   r'   <module>r4     s      X X '     , M   {30 408 {3C 4C $" )+TU V6$$$&('.	K&>H36
' )-/'  
)
)+G$$
,*.. 
&'
q$%	cUQY'	aS1W%
SEAI	<	<-RRR" 
5:U3Z()HBHHV,<hbhhv>N+OP?	?D , )+TU V( D%=1= 2=rM   