
    PiwL              
          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j&        '                    d	e%          d
             Z(d Z)ej&        '                    d	e%          d             Z*ej&        '                    d	eeg          ej&        '                    dg d          d                         Z+d Z,d Z-d Z.d Z/d Z0d>dZ1d Z2d Z3d Z4d Z5d Z6d Z7ej&        '                    d e!            e           d              Z8d! Z9d" Z:d# Z;d?d%Z<d& Z=d' Z>ej&        '                    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/ ZAd0 ZBd1 ZCej&        '                    d2 eD eEd3                     eD eEd3                    f ejF        d4           ejF        d4          fg          d5             ZGd6 ZHd7 ZIej&        '                    dg d8          d9             ZJej&        '                    d:d;d<g          d=             ZKdS )@    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            n# 1 swxY w Y   d}t          j        t          |          5   | ddgddggg d           d d d            n# 1 swxY w Y   d}t          j        t          |          5   | g dddgddgg           d d d            d S # 1 swxY w 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   expecteds     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/metrics/cluster/tests/test_supervised.py"test_error_messages_on_wrong_inputr(   /   s   VH	z	2	2	2 & &
Aq6999%%%& & & & & & & & & & & & & & & 7H	z	2	2	2 0 0
QFQF#YYY///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7H	z	2	2	2 0 0
9991v1v.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s1   ;??#BBB,CCCc                  &   d\  g d} fd| D             }|d         |d         cxk    r|d         cxk    r|d         k    sn J d\  fd	| D             }|d         |d         cxk    r|d         cxk    r|d         k    sn J d S )
N)r!      min	geometric
arithmeticmaxc                 2    g | ]}t          |          S  r   ).0methodabs     r'   
<listcomp>z,test_generalized_average.<locals>.<listcomp>A   &    FFFF!!Q//FFF    r   r!   r*      )   r;   c                 2    g | ]}t          |          S r1   r2   )r3   r4   cds     r'   r7   z,test_generalized_average.<locals>.<listcomp>D   r8   r9   r1   )methodsmeansr5   r6   r=   r>   s     @@@@r'   test_generalized_averagerA   >   s    DAq777GFFFFFgFFFE8uQx7777587777uQx777777DAqFFFFFgFFFE8uQx7777587777uQx77777777r9   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 S )N      ?r   r!   r   r   r   r"   *      rF           rC   rI         E@      @rK   rI   rC          @rK   rL   rN   r   r!   r*   rF   rG   r*   r#   approx)r   s    r'   test_perfect_matchesrT   H   sK   :b"s!3!33333:qcA36=#5#55555:iii++v}S/A/AAAAA:iii--s1C1CCCCC:ooo'8'8'899V]3=O=OOOOO:ooo'7'7'788FM#<N<NNNNN:iii,,c0B0BBBBBBBr9   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 d S )NrU   rC   r   r!   rD   r"   rE   rH   rJ   rM   rO   rP   rQ   )r   r!   r*   r:   rR   )r   rU   s     r'   (test_perfect_matches_with_changing_meansrX   S   sX    :b"^<<<c@R@RRRRR:qcA3~>>>&-PSBTBTTTTT:		999^  	s		    :		;;;~  	s		    :***>  	s		    :))).  	s		    :		:::n  	s		    :q!fq!f^DDDI I     :lll>  	s		     r9   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*   rC   r*   gGz?gQ?r   r   hr=   vs      r'   *test_homogeneous_but_not_complete_labelingr_   v   a    01C1C1CEWEWEWXXGAq!4###4###4#####r9   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!   g(\?r*   rC   g\(\?r[   r\   s      r'   *test_complete_but_not_homogeneous_labelingrc   ~   r`   r9   c                      t          g dg d          \  } }}t          | dd           t          |dd           t          |dd           d S )NrZ   r   r!   r   r!   r*   r*   q=
ףp?r*   zG?p=
ף?r[   r\   s      r'   .test_not_complete_and_not_homogeneous_labelingri      r`   r9   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           d S )	Ng?rf   rg   r!   rZ   re   )betar*   )r   r   r   )	beta_testh_testc_testv_testr]   r=   r^   s          r'   test_beta_parameterrp      s     IFF)mv%.)f2Dv2MNF0...Y  GAq! 61%%%61%%%61%%%***,>,>,>YOOOA61%%%%%r9   c                  Z   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*   re   rf   r*   rg   rh   rZ   )r      r   rr   r*   r*   gQ?gQ?)r   r   r   r   )r]   r=   r^   ari_1ari_2ri_1ri_2s          r'   test_non_consecutive_labelsrw      sv   01C1C1CEWEWEWXXGAq!4###4###4###01C1C1CEWEWEWXXGAq!4###4###4### 2 2 24F4F4FGGE 2 2 24F4F4FGGEtQ'''tQ'''(((*<*<*<==D(((*<*<*<==DdA&&&dA&&&&&r9   
   rF   c                 <   t           j                            |          j        }t          j        t          |          |f          }t          |          D ]D\  }}t          |          D ]/}	 |d||          }
 |d||          } | |
|          |||	f<   0E|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    I))$//7MXs7||V,--F'"" : :1v 	: 	:A$}CCCH$}CCCH%:h99F1a4LL	: Mr9   c                      g d} d}d}t          t          || |          }t          j        |                              d          }t          |g dd           d S )N)r*   rx   2   Z   d   rx   r!   )axis){Gz?Q?r   r   r*   )r   r   r}   absr/   r   )n_clusters_ranger   r   r   max_abs_scoress        r'   test_adjustment_for_chancer      sn    &IF%Y(8& F VF^^''Q'//Nn.F.F.FJJJJJr9   c                     t          j        g d          } t          j        g d          }t          | |          }t          |dd           t	          | |d          }t          | ||          }t          |dd           t	          | |          }t          | ||          }t          |dd           |                                }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                                          }t          j        t          |          dz  g                                          }t          ||          }t          |dd           d S )N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*   gS
cA?   Tsparse)contingencygpUj@?gP1?)r!   r!   r*   r*   )r*   r*   r:   r:   rC   n   gRQ?r*   )r}   arrayr   r   r
   sumr   r   r#   rS   listflatten)	r   r   miCr   emiamia110b110s	            r'   test_adjusted_mutual_info_scorer      s   xKKKLLHxKKKLLH	8X	.	.BGQ'''8Xd;;;A	8X1	=	=	=BGQ'''8X..A	8X1	=	=	=BGQ'''I
%a
3
3CWa(((
$Xx
8
8CWa(((
$\\\<<<
@
@C&-$$$$$$8T(^^c)*++3355D8T(^^c)*++3355D
$T4
0
0CT1%%%%%r9   c                  Z    t          t          j        dgg          d          dk    sJ d S )Nip r!   )r   r}   r   r1   r9   r'   "test_expected_mutual_info_overflowr      s3     'rx%	':':EBBaGGGGGGr9   c                     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	          | |                     d S )Nr!   iy  r*   i]<  r:   i  rr   iU  r   iP  r   i  i	  iD9  i  i     i.  '   i<     )r}   r   r   r   r   )xys     r'   3test_int_overflow_mutual_info_fowlkes_mallows_scorer      s?   
	
|#
	#
	 #
	 #
			 	A 		
e#*	#+	 #)	 #*		
 #)	 #)	 #(	 #)	 #(			 	A '1--...+Aq1122222r9   c                      t          j        t          d          5  t          g d           d d d            d S # 1 swxY w Y   d S )NzFunction entropy is deprecatedr   r   r   rK   )r#   warnsFutureWarningr   r1   r9   r'   test_public_entropy_deprecationr     s    	m+K	L	L	L                   s   ;??c                      t          t          g d          dd           t          t          g           d           t          g d          dk    sJ d S )Nr   ,^R^?r   r!   r!   r!   r!   r!   r   )r   r   r1   r9   r'   test_entropyr     sY    ..	1===a(((LLL!!Q&&&&&&r9   z#array_namespace, device, dtype_name)idsc                    t          | |          }|                    t          j        g d|          |          }|                    g |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            d S # 1 swxY w Y   d S )Nr   dtype)device)r   r   r   T)array_api_dispatchr   gh㈵>)r   r!   r   )r   asarrayr}   int32r   r   r#   rS   )array_namespacer   
dtype_namexpfloat_labelsempty_int32_labels
int_labelss          r'   test_entropy_array_apir     sB    
ov	6	6B::bjZHHHQW:XXLBbhvFFLLL88J	4	0	0	0 ) )%%yd)K)K)KKKKK*++q0000
##q((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   AC&&C*-C*c            	      r   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              d S )	Nr   r   r!   r   )binsr   g?)eps)r}   r   r
   histogram2daranger   )r   r   r   C2s       r'   test_contingency_matrixr   .  s    xKKKLLHxKKKLLH8X..A	(")Aq//29QPQ??1S	T	T	TUV	WBa$$$8X3777Aac*****r9   c                  t   t          j        g d          } t          j        g d          }t          | |          }t          | |d                                          }t	          ||           t          j        t          d          5  t          | |dd           d d d            d S # 1 swxY w Y   d S )	Nr   r   Tr   z!Cannot set 'eps' when sparse=Truer   g|=)r   r   )r}   r   r
   toarrayr   r#   r$   r%   )r   r   r   C_sparses       r'   test_contingency_matrix_sparser   8  s   xKKKLLHxKKKLLH8X..A!(HTBBBJJLLHa***	z)L	M	M	M G G8X5FFFFG G G G G G G G G G G G G G G G G Gs   B--B14B1c                     t          j        ddd                              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 ]D}t          |||          dk    sJ t          |||          t          j        d          k    sJ Ed S )Nr!   rr   r   rI   r+   rW   )r}   logspaceastypeintonesr   r   r#   rS   r   r   )r   r   r   r4   s       r'   test_exactly_zero_info_scorer   B  sh   [Aq!!((-- $ $ gas333RYq5L5L5L(+Hh??6=QTCUCUUUUUx22fmC6H6HHHHH)(H==DDDD+Hh??6=QTCUCUUUUU? 	$ 	$F*8XfUUU    0(6  s##$ $ $ $ $	$$ $r9   $   c           	         t          j        ddd                              t                    D ]}t           j                            |           }|                    dd|          |                    dd|          }}t          t          ||          dt          ||          z  t          |          t          |          z   z  d           d}t          t          ||          t          |||                     d S )Nr!   rr   r   rx   rN   r.   rW   )r}   r   r   r   r~   r   r   r   r   r   r   r   )r   r   random_stater   r   avgs         r'   %test_v_measure_and_mutual_informationr   T  s   [Aq!!((-- 
 
y,,T22  B**  B**  	Hh//(334!!HX$6$668 	
 	
 	
 Hh//(8CPPP	
 	
 	
 	

 
r9   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	           d S )
NrZ   rb   g      @g      R@)r!   r!   r!   r   r   r   rC   )r   r   r   r   r   r   )r   r!   r*   r:   rr   r   rI   )r   r   r}   sqrt)scoreperfect_scoreworst_scores      r'   test_fowlkes_mallows_scorer   j  s    !"4"4"46H6H6HIIEsRWZ%8%88999 **<*<*<>P>P>PQQMs+++ ((:(:(:<N<N<NOOKS)))))r9   c                     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	          ||           d S )N)r   r   r   r!   r!   r*   )r!   r!   r*   r*   r   r   rC   g      (@r!   r:   r*   )r}   r   r   r   r   )r   r   r&   score_originalscore_symmetricscore_permuted
score_boths          r'   %test_fowlkes_mallows_score_propertiesr   x  s    x***++Hx***++HRW6777H +8X>>N111 ,Hh??O222 +HqLA+=xHHN111 'x(Q,!1CDDJ
H-----r9   zlabels_true, labels_predr5      )r!   r!   r   r   r!   r!   r!   c                 2    t          | |          dk    sJ d S )Nr   )r   )labels_truelabels_preds     r'   .test_mutual_info_score_positive_constant_labelr     s%     [+66!;;;;;;r9   c                  ,   t           j                            d          } |                     d          }t          j        ddd          dz  }d}t          j        t          |          5  t          ||           d d d            d S # 1 swxY w Y   d S )NrF   i  g{Gz?r!   gư>zuClustering metrics expects discrete values but received continuous values for label, and continuous values for targetr   )	r}   r~   r   randlinspacer#   r   UserWarningr   )rngnoise
wavelengthmsgs       r'   test_check_clustering_errorr     s    
)


#
#CHHSMMET1c**T1J	  
k	-	-	- - -*e,,,- - - - - - - - - - - - - - - - - -s   +B		BBc                      d} t          t          |                     }|}t          j        | | dz
  z  dgddgg          }t	          t          ||          |           d S )Nr   r!   r   )r   r   r}   r   r   r   Nclustering1clustering2r&   s       r'   *test_pair_confusion_matrix_fully_dispersedr    sc    AuQxx..KKx!q1u+q)Aq6233H,[+FFQQQQQr9   c                      d} t          j        | f          }|}t          j        ddgd| | dz
  z  gg          }t          t	          ||          |           d S )Nr   r   r!   )r}   r   r   r   r   r  s       r'   )test_pair_confusion_matrix_single_clusterr    sa    A(A4..KKx!Q!Q!a%[!1233H,[+FFQQQQQr9   c                  ~   ddz  } t          j        fdt                    D                       }t          j        fdt                    D                       d |          }t          j        dt           j                  }t          t          |                    D ]w}t          t          |                    D ]X}||k    rPt          ||         ||         k              }t          ||         ||         k              }|||fxx         dz  cc<   Yxt          t          ||          |           d S )Nrx   r*   c                 "    g | ]}|d z   gz  S r!   r1   r3   r   ns     r'   r7   z.test_pair_confusion_matrix.<locals>.<listcomp>  s#    ;;;Qa!eWq[;;;r9   c                 (    g | ]}|d z   gd z   z  S r
  r1   r  s     r'   r7   z.test_pair_confusion_matrix.<locals>.<listcomp>  s(    AAA1a!eWA.AAAr9   )r*   r*   )shaper   r!   )	r}   hstackr   r   int64r   r   r   r   )	r  r  r  r&   r   r   same_cluster_1same_cluster_2r  s	           @r'   test_pair_confusion_matrixr    sI   
A	1A);;;;%((;;;<<K)AAAAaAAABB2A2FKxfBH555H3{##$$ > >s;''(( 	> 	>AAvv!$[^{1~%E!F!F!$[^{1~%E!F!F7888A=888		>
 ,[+FFQQQQQr9   zclustering1, clustering2r   )r   c                 B    t          t          | |          d           d S )NrC   r   r   )r  r  s     r'   test_rand_score_edge_casesr    s$     J{K88#>>>>>r9   c                      g d} g d}d}d}d}d|z
  |z
  |z
  }||z   }||z   |z   |z   }||z  }t          t          | |          |           d S )NrZ   re   rr      r*      r  )	r  r  D11D10D01D00expected_numeratorexpected_denominatorr&   s	            r'   test_rand_scorer     s    $$$K$$$K
C
C
C
#+
c
!Cs9s?S0!$88HJ{K88(CCCCCr9   c                  |   t           j                            d          } |                     dddt           j                  }|                     dddt           j                  }t          j                    5  t          j        dt                     t          ||           ddd           dS # 1 swxY w 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)
r}   r~   r   r   int8warningscatch_warningssimplefilterRuntimeWarningr   )r   y_truey_preds      r'   !test_adjusted_rand_score_overflowr*    s     )


"
"C[[Awbg[66F[[Awbg[66F		 	"	" , ,g~666FF+++, , , , , , , , , , , , , , , , , ,s   9+B11B58B5)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n 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*   rW   )r   )rU   labels1labels2labels3nmis        r'   )test_normalized_mutual_info_score_boundedr0    s     cCiGcGABBKG!fwqrr{"G 'w
W
W
WC!8888 'w
W
W
WC<<<<a<<<<<<<<r9   r   TFc                     t          j        t          d          5  t          ddgddg|            ddd           dS # 1 swxY 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   r   r   r   s    r'   &test_fowlkes_mallows_sparse_deprecatedr2    s     
K
 
 
 = = 	q!fq!fV<<<<= = = = = = = = = = = = = = = = = =s   A  AA)rx   rF   )r   )Lr$  numpyr}   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(   rA   rT   rX   r_   rc   ri   rp   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*  r0  r2  r1   r9   r'   <module>r>     s         X X X X X X X X X X ' ' ' ' ' '                                         , + + + + +        M L L L L L L L   {330 0 4308 8 8 {33C C 43C $"  )+T+T+TUU  VU 6$ $ $$ $ $$ $ $& & &(' ' '.	 	 	 	K K K& & &>H H H3 3 36  
' ' ' )--//'   
) ) 
)+ + +G G G$ $ $$
 
 
 
,* * *. . .. 
&&&'
q$$$%			cUQY'			aS1W%
SEAI	 	< <	 	<- - -R R RR R RR R R" 
d55::UU3ZZ(()HBHV,<,<hbhv>N>N+OP ? ?	 ?D D D , , , )+T+T+TUU  VU( D%=11= = 21= = =r9   