
    h$,f#                        d dl Zd dl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,                  j/                  de      d        Zej,                  j/                  dddg      d        Zd Zy)    N)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	      |       y )
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         Plib/python3.12/site-packages/sklearn/feature_selection/tests/test_mutual_info.pytest_compute_mi_ddr      s     	!A
!A266%=(ERVVE]+BBBC#BFF5M!EBFF5M$99EBFF5M<QQD9tDK1$GN    c                 $   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                  j                  |            z  z
  }t        d      }|j                  ||d      j                  | d	      }|d d df   |d d df   }
}	d
D ]   }t        |	|
dd|      }t        ||d       " y )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<      s   
 88A;D GGD
((aZ'12G^g%wz2	
C vvg03		c@R9S3SSH
Q
Cc5<<\PU<VAQT7AadGqA ! 9 qUu+

 	
H48	9r   c           	      ^   d}t        d      }dD ]  }|j                  |      |kD  }t        j                  ||       }|dk(  }|j                  ddt        j                  |            ||<   |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       "  y )Nr   r   )g333333?r   gffffff?r    r   r   g      r   r$   TFr(   r*   r+   )r   uniformr   emptysumr   r   r   )
r2   	n_samplesr9   pr   r   maskr8   r)   r;   s
             r   test_compute_mi_cdrE   >   s"     I
Q
C =KKYK'!+HHY-Av++b!"&&,+7$;;q!"&&$-;84%UbffSAE]++a"&&q/.AABFF3KO
FF1I
 % 	=K$1%[J Jt<		==r   c                    d}t         j                  j                  |      dkD  }t        j                  ||       }|dk(  }t         j                  j                  ddt        j                  |            ||<   t         j                  j                  ddt        j                  |             || <   t        ||dd	
      }t        j                  |df      }t        j                  |df      }t        ||dd	
      }t        ||       y )Nd   r    r   r   r>   r   r   TFr   r   )r   randomr?   r@   rA   r   hstackr   )r2   rB   r   r   rD   mi_1mi_2s          r   test_compute_mi_cd_unique_labelrL   e   s    I
		y)C/A
L)A6DiiABFF4L9AdGyy  ABFFD5M :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             y )	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)r2   Xr   mis       r   !test_mutual_info_classif_discreterY   y   s]    
	Iy)Y?|	A 	!A 
QT	:Brzz2#(;<r   c                    t        j                  g dg dg dg dg      }|j                  |j                        }t        j                  d      }t        d      }|j                  ||d      j                  | 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 y )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   r0   r1   r   r   rV   rR   float64)	r2   r_   r7   r3   r9   r:   rW   r   rX   s	            r   test_mutual_info_regressionra      s     	."24DFVWXA
%%*C88A;D
Q
Cc5<<\PU<VA	!QR%A	!Q$A	11	5Brzz2#(;< 88rzz!!!r   c                    t        d      }|j                  dd      j                  | 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kD  j                  t              }|d d df   dkD  |d d df<   t	        ||dgdd	      }t        t        j                  |       g d
       dD ]:  }t	        ||dg|d	      }|d   |d   kD  sJ |d   |d   kD  sJ |d   |d   k(  r:J  y )Nr   r   r%   Fr"   r   r   r   )rU   r)   r]   rP   )r&   r'   	   )r   randr1   intr   r   r   rV   )r2   r9   rW   r   rX   r)   mi_nns          r   test_mutual_info_classif_mixedrg      s$    Q
Cq  E :AadGqAwG
!Q$-!AqD'
!S	(005A1gmAadG	QaSaVW	XBrzz2#	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 ]r  }t	        j
                  t              5   |||d       d d d        t	        j
                  t              5   |||d       d d d        t	        j
                  t              5   |||g d	       d d d        t	        j
                  t              5   |||g d
       d d d        t	        j
                  t              5   |||ddg       d d d         |||dd      } |||dd      } |||dd      } |||dd      }	 |||g d	d      }
 |||ddgd      }t        ||       t        ||	       t        |
|       t        j                  ||      ssJ  y # 1 sw Y   PxY w# 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)NrN   rO   rP   rQ   rS   FrT   manual)TFT)TFTFr   r[   autor   rU   r]   Tr   )
r   r   r   r   pytestraises
ValueError
IndexErrorr   allclose)r2   rh   rW   r   X_csrmutual_inforJ   rK   mi_3mi_4mi_5mi_6s               r   test_mutual_info_optionsrx      s   
	Iy)Y?|	A 	5A!E.0CD +]]:& 	;qE:	;]]:& 	:19	:]]:& 	Iq4GH	I]]:& 	L10JK	L]]:& 	81A7	8 1a6J1a5qI5!vAN5!t!L1a3FUVW1aAq6Jd#d#d#;;tT***/+	; 	;	: 	:	I 	I	L 	L	8 	8s<   1GGG%:G2)G>G	G"	%G/	2G;	>H	
correlatedTFc                 h   t         j                  j                  |      }d}|j                  d|      }| r |j	                  t         j
                        }n|j                  dd|      }t        |dddf   |dg|      }t        |dddf   |d	g|      }|t        j                  |      k(  sJ y)
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
    rG   r   r    r   r   NFrl   T)r   rH   RandomStaterandintr1   r`   normalr   r   rm   approx)ry   global_random_seedr9   ndc
mi_classifmi_regressions           r   3test_mutual_information_symmetry_classif_regressionr      s     ))

 2
3CABQAHHRZZ JJq!!J$$	!T'
A%?QJ +	!T'
A$>PM }5555r   c                     t         j                  j                  |       }|j                  dd      }|j	                  t         j
                  d      }|j                  dd      }t        |||       }t        |||       }t        ||       y)zqCheck that results agree when X is integer dtype and float dtype.

    Non-regression test for Issue #26696.
    rG   )rG   r   r    Tr"   r\   N)r   rH   r{   r|   r1   r`   r   r   )r   r9   rW   X_floatr   expectedresults          r   'test_mutual_info_regression_X_int_dtyper      s{    
 ))

 2
3CCi(Ahhrzzh-GCc"A%gq?QRH#Aq7IJFFH%r   )numpyr   rm   sklearn.feature_selectionr   r   &sklearn.feature_selection._mutual_infor   sklearn.utilsr   sklearn.utils._testingr   r   sklearn.utils.fixesr	   r   r<   rE   rL   rY   ra   rg   markparametrizerx   r   r    r   r   <module>r      s      Q > , /
O 9F$=N (	=",!0 .9+ :+B e}56 668&r   