
    sg}&                     t   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j2                  j5                  de      d        Zej2                  j5                  dddg      d        Zd Zej2                  j5                  deefeefg      d        Zy)    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	      |       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         c/var/www/html/venv/lib/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	   )
r4   	n_samplesr;   pr   r   maskr:   r+   r=   s
             r   test_compute_mi_cdrG   ?   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   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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)r4   Xr   mis       r   !test_mutual_info_classif_discreter[   z   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   r2   r3   r   r
   rX   rT   float64)	r4   ra   r9   r5   r;   r<   rY   r   rZ   s	            r   test_mutual_info_regressionrc      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   )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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)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   
	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
    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
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.
    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
3CCi(Ahhrzzh-GCc"A%gq?QRH#Aq7IJFFH%r   z mutual_info_func, data_generatorc                 d     ||       \  }} |||| d      } |||| d      }t        ||       y)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     s@     '9:DAq!!Q5GPQRJ A4Fq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 Q > , /
O 9F$=N (	=",!0 .9+ :+B e}56 668& &	1	12++r   