
    Pi|&                        d dl Zd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d Zd	 Zd
 Zd Zd Zd Zd Zej                            de          d             Zej                            dddg          d             Zd Zej                            deefeefg          d             ZdS )    N)make_classificationmake_regression)mutual_info_classifmutual_info_regression)_compute_mi)check_random_state)assert_allcloseassert_array_equal)CSR_CONTAINERSc                     t          j        g d          } t          j        g d          }dt          j        d          z  dt          j        d          z  z
  x}}dt          j        d          z  dt          j        d          z  z
  dt          j        d          z  z
  }||z   |z
  }t          t	          | |dd	          |           d S )
N)r      r   r   r   )r   r   r   r   r   g333333g333333?g?gɿg?T
x_discrete
y_discrete)nparraylogr	   r   )xyH_xH_yH_xyI_xys         /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/feature_selection/tests/test_mutual_info.pytest_compute_mi_ddr      s     	!!A
!!A26%==(ERVE]]+BBBC#BF5MM!EBF5MM$99EBF5MM<QQD9tDK1$GGGNNNNN    c                 L   t          j        d          }d}d}d}t          j        |dz  ||z  |z  g||z  |z  |dz  gg          }t          j        |          t          j        |          z   dt          j        t           j                            |                    z  z
  }t          d          }|                    ||d                              | d	          }|d d df         |d d df         }
}	d
D ](}t          |	|
dd|          }t          ||d           )d S )N   r   
         ?r     sizeFcopy         r   r   n_neighbors皙?rtol)r   zerosr   r   linalgdetr   multivariate_normalastyper   r	   )global_dtypemeansigma_1sigma_2corrcovI_theoryrngZr   r   r+   
I_computeds                r   test_compute_mi_ccr>      sP   
 8A;;D GGD
(aZ'12G^g%wz2	
 C vg03	c@R@R9S9S3SSH
Q

Cc55<<\PU<VVAQQQT7AaaadGqA ! 9 9 qUu+
 
 

 	
H488888	9 9r   c           	      ~   d}t          d          }dD ]'}|                    |          |k    }t          j        ||           }|dk    }|                    ddt          j        |                    ||<   |                    ddt          j        |                     || <   dd|z
  t          j        d	d|z
  z            z  |t          j        d	|z            z  z   t          j        d	          z   z  t          j        d          z
  }d
D ](}t          ||dd|          }	t          |	|d           ))d S )Nr!   r   )g333333?r    gffffff?r"   r   r   g      r    r&   TFr*   r,   r-   )r   uniformr   emptysumr   r   r	   )
r4   	n_samplesr;   pr   r   maskr:   r+   r=   s
             r   test_compute_mi_cdrG   ?   sU     I
Q

C = =KKYK''!+HY--Av++b!"&,,+77$;;q!"&$--;884%UbfSAE]+++a"&q//.AABF3KKO
F1II
 % 	= 	=K$1%[  J Jt<<<<<		== =r   c                 ,   d}t           j                            |          dk    }t          j        ||           }|dk    }t           j                            ddt          j        |                    ||<   t           j                            ddt          j        |                     || <   t          ||dd	
          }t          j        |df          }t          j        |df          }t          ||dd	
          }t          ||           d S )Nd   r"   r    r   r@   r   r   TFr   r   )r   randomrA   rB   rC   r   hstackr	   )r4   rD   r   r   rF   mi_1mi_2s          r   test_compute_mi_cd_unique_labelrN   f   s    I
	y))C/A
L))A6DiABF4LL99AdGy  ABFD5MM ::AteHq!???D
	1a&A
	1b'Aq!???DD$r   c                    t          j        g dg dg dg dg dg|           }t          j        g d          }t          ||d          }t          t          j        |           t          j        g d                     d S )	Nr   r   r   r   r   r   r   r   r   dtyper   r   r   r   r   Tdiscrete_features)r   r   r   )r   r   r   r
   argsort)r4   Xr   mis       r   !test_mutual_info_classif_discreter[   z   s    
	IIIyyy)))YYY?|	 	 	A 	!!A 
QT	:	:	:Brz2#(;(;<<<<<r   c                    t          j        g dg dg dg dg          }|                    |j                  }t          j        d          }t          d          }|                    ||d                              | d	
          }|d d dd f         }|d d df         }t          ||d          }t          t          j
        |           t          j        g d                     |j        t           j        k    sJ d S )N)r   r    r   r   )r   r   r,   g        )r   r,   r   r,   )r   r,   r,   r      r   r!   r"   Fr$   r   random_state)r   r   r   )r   r   dotTr/   r   r2   r3   r   r
   rX   rT   float64)	r4   ra   r9   r5   r;   r<   rY   r   rZ   s	            r   test_mutual_info_regressionrc      s    	..."2"2"24D4D4DFVFVFVWXXA
%%**C8A;;D
Q

Cc55<<\PU<VVA	!!!QRR%A	!!!Q$A	11	5	5	5Brz2#(;(;<<< 8rz!!!!!!r   c                 t   t          d          }|                    dd                              | d          }|d d dfxx         |d d df         z  cc<   d|d d df         z  |d d df         z   dk                        t                    }|d d df         dk    |d d df<   t	          ||dgdd	          }t          t          j        |           g d
           dD ]S}t	          ||dg|d	          }|d         |d         k    sJ |d         |d         k    sJ |d         |d         k    sJ Td S )Nr   r!   r'   Fr$   r   r    r   )rW   r+   r_   rR   )r(   r)   	   )r   randr3   intr   r
   r   rX   )r4   r;   rY   r   rZ   r+   mi_nns          r   test_mutual_info_classif_mixedri      s    Q

Cq  E ::AaaadGGGqAwGGG
!!!Q$-!AAAqD'
!S	(0055A1gmAaaadG	QaSaVW	X	X	XBrz2#			222  
! 
!#qQC[q
 
 

 Qx"Q%Qx"Q% Qx2a5     
! 
!r   csr_containerc                    t          j        g dg dg dg dg dg|           }t          j        g d|           } ||          }t          t          fD ]}t	          j        t                    5   |||d           d d d            n# 1 swxY w Y   t	          j        t                    5   |||d           d d d            n# 1 swxY w Y   t	          j        t                    5   |||g d	           d d d            n# 1 swxY w Y   t	          j        t                    5   |||g d
           d d d            n# 1 swxY w Y   t	          j        t                    5   |||ddg           d d d            n# 1 swxY w Y    |||dd          } |||dd          } |||dd          } |||dd          }	 |||g d	d          }
 |||ddgd          }t          ||           t          ||	           t          |
|           t          j	        ||          rJ d S )NrP   rQ   rR   rS   rU   FrV   manual)TFT)TFTFr   r]   autor   rW   r_   Tr   )
r   r   r   r   pytestraises
ValueError
IndexErrorr	   allclose)r4   rj   rY   r   X_csrmutual_inforL   rM   mi_3mi_4mi_5mi_6s               r   test_mutual_info_optionsrz      s   
	IIIyyy)))YYY?|	 	 	A 	555AM!E.0CD + +]:&& 	; 	;KqE::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;]:&& 	: 	:K19999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:]:&& 	I 	IKq4G4G4GHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I]:&& 	L 	LK10J0J0JKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L]:&& 	8 	8K1A7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 {1a6JJJ{1a5qIII{5!vANNN{5!t!LLL{1a3F3F3FUVWWW{1aAq6JJJd###d###d###;tT******/+ +sZ   3BB	B	2CC	C	1DD	D	2EE	E	3FF	F	
correlatedTFc                    t           j                            |          }d}|                    d|          }| r |                    t           j                  }n|                    dd|          }t          |dddf         |dg|          }t          |dddf         |d	g|          }|t          j
        |          k    sJ dS )
zCheck that `mutual_info_classif` and `mutual_info_regression` are
    symmetric by switching the target `y` as `feature` in `X` and vice
    versa.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/23720
    rI   r   r"   r   r   NFrn   T)r   rJ   RandomStaterandintr3   rb   normalr   r   ro   approx)r{   global_random_seedr;   ndc
mi_classifmi_regressions           r   3test_mutual_information_symmetry_classif_regressionr      s     )

 2
3
3CABQA %HHRZ  JJq!!J$$$	!!!T'
A%?Q  J +	!!!T'
A$>P  M }55555555r   c                 J   t           j                            |           }|                    dd          }|                    t           j        d          }|                    dd          }t          |||           }t          |||           }t          ||           dS )zqCheck that results agree when X is integer dtype and float dtype.

    Non-regression test for Issue #26696.
    rI   )rI   r   r"   Tr$   r^   N)r   rJ   r}   r~   r3   rb   r   r	   )r   r;   rY   X_floatr   expectedresults          r   'test_mutual_info_regression_X_int_dtyper      s    
 )

 2
3
3CCi((Ahhrzh--GCc""A%gq?QRRRH#Aq7IJJJFFH%%%%%r   z mutual_info_func, data_generatorc                      ||           \  }} |||| d          } |||| d          }t          ||           dS )z:Check that results are consistent with different `n_jobs`.r^   r   )r_   n_jobsr   N)r	   )r   mutual_info_funcdata_generatorrY   r   
single_job	multi_jobs          r   test_mutual_info_n_jobsr     sf     >'9:::DAq!!!Q5GPQRRRJ  A4FqQQQIJ	*****r   )numpyr   ro   sklearn.datasetsr   r   sklearn.feature_selectionr   r   &sklearn.feature_selection._mutual_infor   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.fixesr   r   r>   rG   rN   r[   rc   ri   markparametrizerz   r   r   r    r   r   <module>r      s        A A A A A A A A Q Q Q Q Q Q Q Q > > > > > > , , , , , ,        / . . . . .
O 
O 
O 9  9  9F$= $= $=N     (	= 	= 	=" " ",! ! !0 .99+ + :9+B e}556 6 6568& & & &	1	12 + + + + +r   