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yH_xH_yH_xyI_xy r   /var/www/www-root/data/www/176.119.141.140/sports-predictor/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皙?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_computedr   r   r   test_compute_mi_cc   s&   
*"
r;   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   )
r1   	n_samplesr8   pr   r   maskr7   r(   r:   r   r   r   test_compute_mi_cd?   s(   4
rC   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   r<   r   r   TFr   r   )r   randomr=   r>   r?   r   hstackr   )r1   r@   r   r   rB   mi_1mi_2r   r   r   test_compute_mi_cd_unique_labelf   s    rI   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)r1   Xr   mir   r   r   !test_mutual_info_classif_discretez   s   " rU   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/   r0   r   r	   rR   rN   float64)	r1   rZ   r6   r2   r8   r9   rS   r   rT   r   r   r   test_mutual_info_regression   s   "
r\   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   )rQ   r(   rX   rL   )r%   r&   	   )r   randr0   intr   r	   r   rR   )r1   r8   rS   r   rT   r(   mi_nnr   r   r   test_mutual_info_classif_mixed   s   $. ra   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 )NrJ   rK   rL   rM   rO   FrP   manual)TFT)TFTFr   rV   autor   rQ   rX   Tr   )
r   r   r   r   pytestraises
ValueError
IndexErrorr   allclose)r1   rb   rS   r   X_csrmutual_inforG   rH   mi_3mi_4mi_5mi_6r   r   r   test_mutual_info_options   s@   "


rq   
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
    rD   r   r   r   r   NFre   T)r   rE   RandomStaterandintr0   r[   normalr   r   rf   approx)rr   global_random_seedr8   ndc
mi_classifmi_regressionr   r   r   3test_mutual_information_symmetry_classif_regression   s   	r}   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.
    rD   )rD   r   r   Tr!   rW   N)r   rE   rs   rt   r0   r[   r   r   )rw   r8   rS   X_floatr   expectedresultr   r   r   'test_mutual_info_regression_X_int_dtype   s   r   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`.rW   r   )rX   n_jobsr   N)r   )rw   mutual_info_funcdata_generatorrS   r   
single_job	multi_jobr   r   r   test_mutual_info_n_jobs  s   	r   )numpyr   rf   sklearn.datasetsr   r   sklearn.feature_selectionr   r   &sklearn.feature_selection._mutual_infor   sklearn.utilsr   sklearn.utils._testingr   r	   sklearn.utils.fixesr
   r   r;   rC   rI   rU   r\   ra   markparametrizerq   r}   r   r   r   r   r   r   <module>   s6    #'
!
