o
    i}&                     @   s   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d	 Zd
d Zdd Zdd Zdd Zdd Zdd Zejdedd Zejdddgdd Zdd Zejd eefeefgd!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                  C   s   t g d} t g d}dt d dt d   }}dt d dt d  dt d  }|| | }tt| |d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yZH_xZH_yZH_xyZI_xy r   j/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/feature_selection/tests/test_mutual_info.pytest_compute_mi_dd   s    *r   c                 C   s   t d}d}d}d}t |d || | g|| | |d gg}t |t | dt t j|  }td}|j||ddj| dd	}|d d df |d d df }	}
d
D ]}t	|	|
dd|d}t
||dd q[d S )N   r   
         ?r     sizeFcopy         r   r   n_neighbors皙?Zrtol)r   zerosr   r   ZlinalgZdetr   multivariate_normalastyper   r   )global_dtypemeanZsigma_1Zsigma_2ZcorrcovI_theoryrngZr   r   r$   
I_computedr   r   r   test_compute_mi_cc   s&   
*"
r1   c           
   	   C   s   d}t d}dD ]g}|j|d|k}t|| }|dk}|jddt|d||< |jddt| d|| < dd| td	d|   |td	|   td	  td }d
D ]}t||dd|d}	t|	|dd q\qd S )Nr   r   )g333333?r   gffffff?r   r   r   g      r   r   TFr#   r%   r&   )r   uniformr   emptysumr   r   r   )
r*   	n_samplesr.   pr   r   maskr-   r$   r0   r   r   r   test_compute_mi_cd?   s(   4
r9   c                 C   s   d}t jj|ddk}t || }|dk}t jjddt |d||< t jjddt | d|| < t||dd	d
}t |df}t |df}t||dd	d
}t|| d S )Nd   r   r   r   r2   r   r   TFr   r   )r   randomr3   r4   r5   r   Zhstackr   )r*   r6   r   r   r8   mi_1mi_2r   r   r   test_compute_mi_cd_unique_labelf   s    r>   c                 C   sh   t jg dg dg dg dg dg| d}t g d}t||dd}tt | t 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)r*   Xr   mir   r   r   !test_mutual_info_classif_discretez   s   " rJ   c           	      C   s   t g dg dg dg dg}||j}t d}td}|j||ddj| d	d
}|d d dd f }|d d df }t||dd}t	t 
| t 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   r(   r)   r   r	   rG   rC   float64)	r*   rO   r,   r+   r.   r/   rH   r   rI   r   r   r   test_mutual_info_regression   s   "
rQ   c                 C   s  t d}|ddj| dd}|d d df  |d d df 7  < d|d d df  |d d df  dkt}|d d df dk|d d df< t||dgddd	}tt| g d
 dD ]*}t||dg|dd	}|d |d ksuJ |d |d ksJ |d |d ksJ q_d S )Nr   r   r    Fr   r   r   r   )rF   r$   rM   rA   )r!   r"   	   )r   Zrandr)   intr   r	   r   rG   )r*   r.   rH   r   rI   r$   Zmi_nnr   r   r   test_mutual_info_classif_mixed   s   $. rT   csr_containerc              	   C   s  t jg dg dg dg dg dg| d}t jg d| d}||}ttfD ]}tt |||dd W d    n1 s@w   Y  tt |||dd W d    n1 s\w   Y  tt |||g d	d W d    n1 szw   Y  tt |||g d
d W d    n1 sw   Y  tt |||ddgd W d    n1 sw   Y  |||ddd}|||ddd}|||ddd}|||ddd}	|||g d	dd}
|||ddgdd}t|| t||	 t|
| t 	||rJ q'd S )Nr?   r@   rA   rB   rD   FrE   Zmanual)TFT)TFTFr   rK   autor   rF   rM   Tr   )
r   r   r   r   pytestZraises
ValueError
IndexErrorr   Zallclose)r*   rU   rH   r   ZX_csrZmutual_infor<   r=   Zmi_3Zmi_4Zmi_5Zmi_6r   r   r   test_mutual_info_options   s@   "


r[   
correlatedTFc                 C   s   t j|}d}|jd|d}| r|t j}n|jdd|d}t|dddf |dg|d}t|dddf |d	g|d}|t	
|ksGJ 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
    r:   r   r   r   r   NFrW   T)r   r;   RandomStaterandintr)   rP   normalr   r   rX   Zapprox)r\   global_random_seedr.   ndcZ
mi_classifZmi_regressionr   r   r   3test_mutual_information_symmetry_classif_regression   s   	rd   c                 C   sb   t j| }|jddd}|jt jdd}|jddd}t||| d}t||| d}t|| dS )zqCheck that results agree when X is integer dtype and float dtype.

    Non-regression test for Issue #26696.
    r:   )r:   r   r   Tr   rL   N)r   r;   r]   r^   r)   rP   r   r   )r`   r.   rH   ZX_floatr   expectedresultr   r   r   'test_mutual_info_regression_X_int_dtype   s   rg   z mutual_info_func, data_generatorc                 C   s<   || d\}}|||| dd}|||| dd}t || dS )z:Check that results are consistent with different `n_jobs`.rL   r   )rM   Zn_jobsr   N)r   )r`   Zmutual_info_funcZdata_generatorrH   r   Z
single_jobZ	multi_jobr   r   r   test_mutual_info_n_jobs  s   	rh   )numpyr   rX   Zsklearn.datasetsr   r   Zsklearn.feature_selectionr   r   Z&sklearn.feature_selection._mutual_infor   Zsklearn.utilsr   Zsklearn.utils._testingr   r	   Zsklearn.utils.fixesr
   r   r1   r9   r>   rJ   rQ   rT   markZparametrizer[   rd   rg   rh   r   r   r   r   <module>   s6    #'
!
