U
    ½mœd&A  ã                   @   sD  d dl Zd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ ej dd	d
g¡ej deddƒ¡dd„ ƒƒZej dejdg¡dd„ ƒZej dejdg¡dd„ ƒZej dejdg¡dd„ ƒZej dejdg¡dd„ ƒZej dejdg¡dd„ ƒZej dejdg¡dd„ ƒZej dejdg¡dd„ ƒZej dejdg¡d d!„ ƒZd"d#„ Zej d$dd g¡ej ddejg¡ej d%¡d&d'„ ƒƒƒZej ddejg¡ej dd	d
g¡d(d)„ ƒƒZej ddejg¡d*d+„ ƒZej d$dd g¡ej ddejg¡d,d-„ ƒƒZ ej d.d/ejd0fg¡d1d2„ ƒZ!dS )3é    N)Úconfig_context)Ú
KNNImputer)Únan_euclidean_distances)Úpairwise_distances)ÚKNeighborsRegressor)Úassert_allcloseÚweightsÚuniformÚdistanceÚn_neighborsé   é   c                 C   sL   d}d}t j ||¡}t j|d< t|| d�}| |¡}|j||fksHt‚d S )Né
   é   )r   r   )r   r   )ÚnpÚrandomZrandÚnanr   Úfit_transformÚshapeÚAssertionError)r   r   Zn_rowsZn_colsÚXÚimputerÚ	X_imputed© r   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/impute/tests/test_knn.pyÚtest_knn_imputer_shape   s    

r   Únaéÿÿÿÿc                 C   sî  t  t jddd| gdddddgdddddg| ddddg| d	dd	dgddddd	gg¡}tjtd
d�� t| d� |¡ W 5 Q R X t  t jddd| gdddddgdddddg| ddddg| d	dd	dgddddd	gg¡}t  dddd| gdddddgdddddg| ddddg| d	dd	dgddddd	gg¡}t| d� |¡}tjtd
d�� | |¡ W 5 Q R X tdddd�}t  t j	ddddgt j	ddt j	dgt j	ddddgt j	ddddgg¡}d}tjt|d�� | |¡ W 5 Q R X t  ddgt j	dgg¡}d S )Nr   r   é   é   r   r   é   é   é   zInput X contains (infinity|NaN))Úmatch©Úmissing_valuesr	   ©r%   r   r   zInput X contains NaN)
r   ÚarrayÚinfÚpytestZraisesÚ
ValueErrorr   ÚfitÚ	transformr   )r   r   ZX_fitr   Úmsgr   r   r   Ú+test_knn_imputer_default_with_invalid_input   s`    úÿ
úÿúÿ
üÿþÿr.   c                 C   sÀ   t  dd| dddgdd| dddgdd| dd| gdd| | ddgg¡}t| dd� |¡}| |¡}t  |¡ ¡ rpt‚|jdks~t‚t  	d	d
¡ 
dd¡}| |¡}t|d d …d	ddddgf |ƒ d S )Nr   ç      ð?r   r   é   r   ©r%   r   )r0   r    r   é   r    )r   r'   r   r+   r,   ÚisnanÚanyr   r   ZarangeZreshaper   )r   r   ÚknnZX_transformZX_testr   r   r   Ú(test_knn_imputer_removes_all_na_features]   s    üÿ

r6   c              
   C   sô   t  dddddgdddddgdddddgdddddgg¡}t  d| dddgdddddgdddd| gdd| ddgg¡}t  dddddgdddddgdddddgdddddgg¡}tddd	d
�}t| dd	d
�}t| |¡|ƒ t| |¡| |¡ƒ d S )Nr   r   r/   r   r   r   g      @ç      ø?r	   r&   ©r   r'   r   r   r   )r   ZX_zeroZX_nanr   Zimputer_zeroZimputer_nanr   r   r   Ú*test_knn_imputer_zero_nan_imputes_the_samer   s8    üÿ	üÿ	üÿ	 ÿr9   c                 C   s   t  ddddgddd| gddd| g| dddgd| ddgd	d	d	d	gd
dddgg¡}t  ddddgdddd	gdddd	gddddgddddgd	d	d	d	gd
dddgg¡}t| d�}t| |¡|ƒ t  ddd| gddd| gddd| gddd| gddd| gd	d	d	| gddddgddddgg¡}d}t  ddd|gddd|gddd|gddd|gddd|gd	d	d	|gddddgddddgg¡}t| d�}t| |¡|ƒ t  ddg| dgddgddgddgdd	gdd
gg¡}t  ddgddgd| gg¡}d}t  ddgddgd|gg¡}t| d�}t| |¡ |¡|ƒ d S )Nr   r   r   r   r0   r    r   r"   r   é   é   é   é   r$   é   é   g      5@é	   é   g333333@)r   r'   r   r   r   r+   r,   )r   r   r   r   ZX_impute_valueÚX1ZX_2_1Ú
X1_imputedr   r   r   Útest_knn_imputer_verifyš   sj    






ùÿ






ùÿ








øÿ







øÿ
4
rD   c              
   C   sˆ   t  ddg| dgddgd| gddg| dgdd	gg¡}t  ddgddgddgddgddgddgdd	gg¡}td
| d�}t| |¡|ƒ d S )Nr   r   r0   r   r    r"   r   é   r!   r   ©r   r%   r8   )r   r   r   r   r   r   r   Ú test_knn_imputer_one_n_neighborsä   s    44rG   c              
   C   s¼   t  ddg| dgddgd| gddg| dgdd	gg¡}t  ddgd
dgddgddgddgd
dgdd	gg¡}|jd d }t|| d�}t| |¡|ƒ |jd }t|| d�}t| |¡|ƒ d S )Nr   r   r0   r   r    r"   r   rE   r!   r   g      @r   rF   )r   r'   r   r   r   r   )r   r   r   r   r   Zimputer_plus1r   r   r   Ú*test_knn_imputer_all_samples_are_neighborsð   s    44
rH   c              
   C   sÐ   t  ddg| dgddgddgddgdd	gd
dgg¡}t  ddgddgddgddgddgdd	gd
dgg¡}td| d�}t| |¡|ƒ dd„ }t|| d�}t| |¡|ƒ dd„ }t|| d�}t| |¡|ƒ d S )Nr   r   r0   r   r    r   r"   r@   r   rA   r   r	   ©r   r%   c                 S   s   d S ©Nr   ©Údistr   r   r   Ú	no_weight  s    z2test_knn_imputer_weight_uniform.<locals>.no_weightc                 S   s
   t  | ¡S rJ   )r   Z	ones_likerK   r   r   r   Úuniform_weight  s    z7test_knn_imputer_weight_uniform.<locals>.uniform_weightr8   )r   r   ZX_imputed_uniformr   rM   rN   r   r   r   Útest_knn_imputer_weight_uniform   s    4,ÿrO   c           $      C   sB  t  ddg| dgddgddgddgdd	gd
dgg¡}tddd�}ddddddg}| ||dd …f ||df ¡ | |dd…dd …f ¡d }dddddg}t|dd…d d …f || d�}d|d d …|f  ¡  }t j||df |d�}t  ddg|dgddgddgddgdd	gd
dgg¡}	t  ddg|dgddgddgddgdd	gd
dgg¡}
td| d�}t	| 
|¡|	ƒ t	| 
|¡|
ƒ t  | ddgdddgdddgdddgg¡}t  d¡}t  d¡}t jddgd| d| gd�}t  |ddgdddgdddgdddgg¡}tdd| d�}t	| 
|¡|ƒ t  ddddgd| d| gddd| gddddgddddgddddgddddgg¡}t|| d�}|ddddddgf }|ddddddgf }d| }d| }|ddddddgf }d| }t j |dddddgdf ¡ ¡ }t j |dddddgdf ¡ ¡ }t jj||d�}t jj||d�}t jj||d�}t  ddddgd|d|gddd|gddddgddddgddddgddddgg¡}td| d�}t	| 
|¡|ƒ t  ddd| gddd| gdd| dgddddgddddgddddgddddg| dddgg¡}t|dd| d�}d|ddd…f  }d|ddd…f  }d|d  }d|ddd…f  }t j|dd…df |d�}t j|dd…df |d�} t j|d |d�}!t j|dd…df |d�}"t  ddd|gddd| gdd|!dgddddgddddgddddgddddg|"dddgg¡}t| dd�}#t	|# 
|¡|ƒ d S )Nr   r   r0   r   r    r   r"   r@   r   rA   r   Z	euclideanr
   )Úmetricr   r   r$   ©r   rI   g      @g     €3@)r   r   r%   Únan_euclideanF©rP   Úsquaredr%   r/   r   )r   ©r   r   r   r0   r    )rU   r   )r%   r   )r   r'   r   r+   Zpredictr   ZravelÚaverager   r   r   ÚsqrtÚmaZmasked_invalidÚcopyr   )$r   r   ÚnnZ
X_rows_idxZknn_imputed_valueZX_neighbors_idxrL   r   Zmanual_imputed_valueZX_imputed_distance1ZX_imputed_distance2r   Zdist_0_1Zdist_0_2Zimputed_valuer   Zr1c1_nbor_distsZr1c3_nbor_distsZr1c1_nbor_wtZr1c3_nbor_wtZr2c3_nbor_distsZr2c3_nbor_wtZcol1_donor_valuesZcol3_donor_valuesZr1c1_impZr1c3_impZr2c3_impZr0c3_wZr1c3_wZr2c2_wZr7c0_wÚr0c3Úr1c3Úr2c2Úr7c0Zimputer_comp_wtr   r   r   Ú test_knn_imputer_weight_distance  sÚ    4 ,ÿ,ÿüÿ


üÿ	






ùÿ""






ùÿ







øÿ   ÿ







øÿr_   c               	   C   s    t jdfdd„} t  dddt jgddddgddddgt jdd	d
gg¡}d}d}t  ddd|gddddgddddg|dd	d
gg¡}td| d�}t| |¡|ƒ d S )NFc                 S   sD   t jj| t  | ¡d�} t jj|t  |¡d�}t  t  | | ¡¡}|S )N)Úmask)r   rX   r'   r3   ZnansumÚabs)ÚxÚyr%   rT   rL   r   r   r   Úcustom_callable´  s    z9test_knn_imputer_callable_metric.<locals>.custom_callabler0   r   r   r@   r   rA   g      $@g      "@g      @r   )r   rP   )r   r   r'   r   r   r   )rd   r   ZX_0_3ZX_3_0r   r   r   r   r   Ú test_knn_imputer_callable_metric±  s    6*ÿre   Úworking_memoryzignore:adhere to working_memoryc           
      C   s\  t  d| d| gddd| gdd| dgddddgddddgddddgddddg| dddgg¡}t  |dd…df ¡}t  |dd	…d	f ¡}t  |dd	…d	f ¡}t  |dddddgdf ¡}t  |dd	…df ¡}t  d|d|gddd|gdd|dgddddgddddgddddgddddg|dddgg¡}t|d
��  t| d�}	t|	 |¡|ƒ W 5 Q R X d S )Nr   r   r   r   r0   r    r   r"   r   ©rf   r$   )r   r'   Zmeanr   r   r   r   )
r   rf   r   Zr0c1r[   r\   r]   r^   r   Zimputer_compr   r   r   Ú$test_knn_imputer_with_simple_exampleÆ  s<    







øÿ







øÿ
rh   c                 C   sŠ   t  | dg| dgd| gg¡}t  ddgddgddgg¡}t| d|d�}t| |¡|ƒ t  d| gg¡}t  ddgg¡}t| |¡|ƒ d S )NrA   r   r   r   r&   r0   ©r   r'   r   r   r   r,   )r   r   rB   rC   r5   ÚX2Z
X2_imputedr   r   r   Ú+test_knn_imputer_not_enough_valid_distancesò  s    rk   c                 C   s€   t  | dg| dgg¡}t| dd�}t  dgdgg¡}t| |¡|ƒ t  ddgd| gg¡}t  dgdgg¡}t| |¡|ƒ d S )Nr   r   r1   r   r7   ri   )r   rB   r5   ZX1_expectedrj   ZX2_expectedr   r   r   Ú'test_knn_imputer_drops_all_nan_features  s    rl   c              	   C   sj  t  d| gd| g| dgddgddg| dgg¡}t|dd| d	�}t j|dd…d
f d
|ddd…f  d�}t j|dd…d
f d
|d
dd…f  d�}t j|dd…df d
|ddd…f  d�}t j|dd…df d
|ddd…f  d�}t  d|gd|g|dgddgddg|dgg¡}t|d��B t| ddd�}	t|	 |¡|ƒ t| ddd�}
t|
 |¡|ƒ W 5 Q R X d S )Nr   r   r0   r    r   r   rR   FrS   r   r   rQ   rg   r
   r&   )r   r'   r   rV   r   r   r   r   )r   rf   r   rL   ZX_01ZX_11ZX_20ZX_50Z
X_expectedZknn_3Zknn_4r   r   r   Ú7test_knn_imputer_distance_weighted_not_enough_neighbors  s"    .   ÿ****.rm   zna, allow_nan)r   FTc                 C   s"   t | d�}| ¡ d |kst‚d S )Nr$   Ú	allow_nan)r   Z	_get_tagsr   )r   rn   r5   r   r   r   Útest_knn_tags%  s    
ro   )"Únumpyr   r)   Zsklearnr   Zsklearn.imputer   Zsklearn.metrics.pairwiser   r   Zsklearn.neighborsr   Zsklearn.utils._testingr   ÚmarkZparametrizeÚranger   r   r.   r6   r9   rD   rG   rH   rO   r_   re   Úfilterwarningsrh   rk   rl   rm   ro   r   r   r   r   Ú<module>   sT   
A

'
I



 
'
