
    -i}&                     t   S SK rS SKrS SKJrJr  S SKJrJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJr  S rS	 rS
 rS rS rS rS r\R2                  R5                  S\5      S 5       r\R2                  R5                  SSS/5      S 5       rS r\R2                  R5                  S\\4\\4/5      S 5       rg)    N)make_classificationmake_regression)mutual_info_classifmutual_info_regression)_compute_mi)check_random_state)assert_allcloseassert_array_equal)CSR_CONTAINERSc            	         [         R                  " / SQ5      n [         R                  " / SQ5      nS[         R                  " S5      -  S[         R                  " S5      -  -
  =p#S[         R                  " S5      -  S[         R                  " S5      -  -
  S[         R                  " S5      -  -
  nX#-   U-
  n[        [	        XSSS	9U5        g )
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.13/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$GN    c           	         [         R                  " S5      nSnSnSn[         R                  " US-  XB-  U-  /XB-  U-  US-  //5      n[         R                  " U5      [         R                  " U5      -   S[         R                  " [         R                  R                  U5      5      -  -
  n[        S5      nUR                  XSS9R                  U SS	9nUS S 2S4   US S 2S4   pS
 H  n[        XSSUS9n[        XSS9  M     g )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%wz2	
C vvg03		c@R9S3SSH
Q
C5<<\PU<VAQT7AadGq ! Uu+

 	
48	 !r   c           
      L   Sn[        S5      nS GH  nUR                  US9U:  n[        R                  " X5      nUS:H  nUR                  SS[        R                  " U5      S9XV'   UR                  SS[        R                  " U) 5      S9XV) '   SSU-
  [        R
                  " S	SU-
  -  5      -  U[        R
                  " S	U-  5      -  -   [        R
                  " S	5      -   -  [        R
                  " S5      -
  nS
 H  n[        XESSUS9n	[        XSS9  M     GM     g )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%UbffSAE]++a"&&q/.AABFF3KO
FF1I
 %K$%[J Jt<	 % r   c                    Sn[         R                  R                  US9S:  n[         R                  " X5      nUS:H  n[         R                  R                  SS[         R                  " U5      S9X4'   [         R                  R                  SS[         R                  " U) 5      S9X4) '   [        X#SS	S
9n[         R                  " US45      n[         R                  " US45      n[        X#SS	S
9n[        XV5        g )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
)A6DiiABFF4L9AGyy  ABFFD5M :AeHq?D
		1a&A
		1b'Aq?DDr   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/U S9n[         R                  " / SQ5      n[        XSS9n[        [         R                  " U* 5      [         R                  " / SQ5      5        g )	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 
QT	:Brzz2#(;<r   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/5      nUR                  UR                  5      n[         R                  " S5      n[        S5      nUR                  X2SS9R                  U S	S
9nUS S 2SS 24   nUS S 2S4   n[        XgSS9n[        [         R                  " U* 5      [         R                  " / SQ5      5        UR                  [         R                  :X  d   eg )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5<<\PU<VA	!QR%A	!Q$A	1	5Brzz2#(;< 88rzz!!!r   c           	         [        S5      nUR                  SS5      R                  U SS9nUS S 2S4==   US S 2S4   -  ss'   SUS S 2S4   -  US S 2S4   -   S:  R                  [        5      nUS S 2S4   S:  US S 2S4'   [	        X#S/SSS	9n[        [        R                  " U* 5      / S
Q5        S H:  n[	        X#S/USS	9nUS   US   :  d   eUS   US   :  d   eUS   US   :X  a  M:   e   g )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	QaSaVW	XBrzz2#	2 #QC[q

 Qx"Q%Qx"Q% Qx2a5    !r   csr_containerc                    [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/U S9n[         R                  " / SQU S9nU" U5      n[        [        4 GHN  n[        R
                  " [        5         U" XCSS9  S S S 5        [        R
                  " [        5         U" X#SS9  S S S 5        [        R
                  " [        5         U" XC/ S	QS9  S S S 5        [        R
                  " [        5         U" X#/ S
QS9  S S S 5        [        R
                  " [        5         U" X#SS/S9  S S S 5        U" X#SSS9nU" X#SSS9nU" XCSSS9nU" XCSSS9n	U" X#/ S	QSS9n
U" X#SS/SS9n[        Xg5        [        X5        [        X5        [         R                  " Xh5      (       d  GMO   e   g ! , (       d  f       GN5= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)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]]:&E: ']]:&9 ']]:&4GH ']]:&0JK ']]:&A7 ' 16J15qI5vAN5t!L13FUVW1Aq6J###;;t****/ E&&&&&&&&&&s<   .F$F6
G.
G
G+$
F3	6
G	
G	
G(	+
G9	
correlatedTFc                 ^   [         R                  R                  U5      nSnUR                  SUS9nU (       a   UR	                  [         R
                  5      nOUR                  SSUS9n[        USS2S4   US/US9n[        USS2S4   US	/US9nU[        R                  " U5      :X  d   eg)
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                     [         R                  R                  U 5      nUR                  SSS9nUR	                  [         R
                  SS9nUR                  SSS9n[        X4U S9n[        X$U S9n[        Xe5        g)ziCheck 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      su    
 ))

 2
3CCi(Ahhrzzh-GCc"A%g?QRH#A7IJFF%r   z mutual_info_func, data_generatorc                 J    U" U S9u  p4U" X4U SS9nU" X4U SS9n[        XV5        g)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     s8     '9:DA!!5GPQRJ 4Fq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   