o
    Ü?Hh„D  ã                   @   sj  d dl Zd dl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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¡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/d0ejd1fg¡d2d3„ ƒZ"dS )4é    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s$J ‚d S )Né
   é   )r   r   )r   r   )ÚnpÚrandomÚrandÚnanr   Úfit_transformÚshape)r   r   Ún_rowsÚn_colsÚXÚimputerÚ	X_imputed© r   ú]/home/air/sanwanet/gpt-api/venv/lib/python3.10/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g d¢g d¢| ddddg| d	dd	d
gg d¢g¡}tjtdd t| d |¡ W d   ƒ n1 s;w   Y  t  t jddd| gg d¢g d¢| ddddg| d	dd	d
gg d¢g¡}t  dddd| gg d¢g d¢| ddddg| d	dd	d
gg d¢g¡}t| d |¡}tjtdd | |¡ W d   ƒ n1 s w   Y  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 d   ƒ n1 sçw   Y  t  ddgt j	dgg¡}d S )Nr   r   )r   r   r   r   é   )r    r   r    r    é   r   r   é   é   é   r!   )r   r   r   r"   r$   zInput X contains (infinity|NaN))Úmatch©Úmissing_valuesr	   ©r'   r   r   r    zInput X contains NaN)
r   ÚarrayÚinfÚpytestÚraisesÚ
ValueErrorr   ÚfitÚ	transformr   )r   r   ÚX_fitr   Úmsgr   r   r   Ú+test_knn_imputer_default_with_invalid_input   sf   úÿ
ÿúÿúÿ
ÿüÿÿþÿr2   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  |¡ ¡ r8J ‚|jdks?J ‚t  d	d
¡ 	dd¡}| |¡}t
|d d …g d¢f |ƒ d S )Nr   ç      ð?r   r    é   r   ©r'   r   )r4   r"   r   é   ©r   r   r    r4   r"   )r   r)   r   r.   r/   ÚisnanÚanyr   ÚarangeÚreshaper   )r   r   ÚknnÚX_transformÚX_testr   r   r   Ú(test_knn_imputer_removes_all_na_features\   s   üÿ

r?   c              
   C   s¾   t  g d¢g d¢g d¢g d¢g¡}t  d| dddgg d¢dddd| gdd| ddgg¡}t  g d	¢g d¢g d
¢g d¢g¡}tdddd}t| ddd}t| |¡|ƒ t| |¡| |¡ƒ d S )N)r   r   r   r   r3   )r   r   r   r   r   )r    r    r    r    r   )r   r   r   r   r   r   r3   r    r   )r   ç      @r   r   r3   )r    r    r    r    ç      ø?)r   r   r@   r   r   r   r   r	   r(   ©r   r)   r   r   r   )r   ÚX_zeroÚX_nanr   Úimputer_zeroÚimputer_nanr   r   r   Ú*test_knn_imputer_zero_nan_imputes_the_sameq   s6   üÿ	üÿ	üÿ	ÿrG   c                 C   sè  t  g d¢ddd| gddd| g| dddgd| ddgg d	¢g d
¢g¡}t  g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢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g d¢g d¢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g d¢g d¢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 )N©r   r   r   r   r   r   r    r4   r"   r   r$   )r!   r!   r!   r!   )é   é   é   é   )r   r   r   r!   )r    r   r    r!   )r4   r4   r"   r"   )r   r    r   r$   r&   r   r!   )é   rM   rM   rM   )é   rN   rN   rN   g      5@é	   é   rI   g333333@)r   r)   r   r   r   r.   r/   )r   r   r   r   ÚX_impute_valueÚX1ÚX_2_1Ú
X1_imputedr   r   r   Útest_knn_imputer_verify™   sj   



ùÿùÿ






øÿ





øÿ
4
rU   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   r4   r    r"   r$   r!   é   r#   r   ©r   r'   rB   )r   r   r   r   r   r   r   Ú test_knn_imputer_one_n_neighborsã   s   44rX   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   r4   r    r"   r$   r!   rV   r#   g      @g      @r   rW   )r   r)   r   r   r   r   )r   r   r   r   r   Úimputer_plus1r   r   r   Ú*test_knn_imputer_all_samples_are_neighborsî   s   4,ÿ
rZ   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   r4   r    r"   r   r$   rO   r!   rP   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 r\   )r   Ú	ones_liker]   r   r   r   Úuniform_weight  s   
z7test_knn_imputer_weight_uniform.<locals>.uniform_weightrB   )r   r   ÚX_imputed_uniformr   r_   ra   r   r   r   Útest_knn_imputer_weight_uniform   s   4,ÿrc   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d}g d¢}| ||dd …f ||df ¡ | |dd…dd …f ¡d }g d¢}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g d¢g d¢g d¢g¡}t  d¡}t  d¡}t jddgd| d| gd}t  |ddgg d¢g d¢g d¢g¡}tdd| d}t	| 
|¡|ƒ t  g d¢d| d| gddd| gg d¢g d¢g d¢g d¢g¡}t|| d}|dg d¢f }|dg d ¢f }d| }d| }|dg d ¢f }d| }t j |g d¢df ¡ ¡ }t j |g d ¢df ¡ ¡ }t jj||d}t jj||d}t jj||d}t  g d¢d|d|gddd|gg d¢g d¢g d¢g d¢g¡}td| d}t	| 
|¡|ƒ t  ddd| gddd| gdd| dgg d!¢g d"¢g d#¢g d$¢| 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g d!¢g d"¢g d#¢g d$¢|"dddgg¡}t| dd,}#t	|# 
|¡|ƒ d S )-Nr   r   r4   r    r"   r   r$   rO   r!   rP   r   Ú	euclideanr
   )Úmetricr   )r   r   r    r4   r"   r   r   )r   r   r    r4   r"   r&   ©r   r[   )r   r   r   )r    r   r    )r4   r"   r"   g      @g     €3@)r   r   r'   rH   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r    r4   r"   r   ©r    r    r    r    ©r4   r4   r4   r4   ©r"   r"   r"   r"   ©r   r   r   r   Únan_euclideanF©re   Úsquaredr'   r3   r   )r   r7   )r7   r   )r'   r   )r   r)   r   r.   Úpredictr   ÚravelÚaverager   r   r   ÚsqrtÚmaÚmasked_invalidÚcopyr   )$r   r   ÚnnÚ
X_rows_idxÚknn_imputed_valueÚX_neighbors_idxr^   r   Úmanual_imputed_valueÚX_imputed_distance1ÚX_imputed_distance2r   Údist_0_1Údist_0_2Úimputed_valuer   Úr1c1_nbor_distsÚr1c3_nbor_distsÚr1c1_nbor_wtÚr1c3_nbor_wtÚr2c3_nbor_distsÚr2c3_nbor_wtÚcol1_donor_valuesÚcol3_donor_valuesÚr1c1_impÚr1c3_impÚr2c3_impÚr0c3_wÚr1c3_wÚr2c2_wÚr7c0_wÚr0c3Úr1c3Úr2c2Úr7c0Ú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g d¢g d¢t jdd	d
gg¡}d}d}t  ddd|gg d¢g d¢|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   rr   r)   r8   ÚnansumÚabs)ÚxÚyr'   rm   r^   r   r   r   Úcustom_callable²  s   z9test_knn_imputer_callable_metric.<locals>.custom_callabler4   r    )r   rO   r   rO   )r4   r!   r   rO   rO   rP   g      $@g      "@g      @r   )r   re   )r   r   r)   r   r   r   )r™   r   ÚX_0_3ÚX_3_0r   r   r   r   r   Ú test_knn_imputer_callable_metric°  s   ."ÿrœ   Úworking_memoryzignore:adhere to working_memoryc           
      C   sL  t  d| d| gddd| gdd| dgg d¢g d¢g d¢g d¢| dddgg¡}t  |dd	…df ¡}t  |dd
…d
f ¡}t  |dd
…d
f ¡}t  |g d¢df ¡}t  |dd
…df ¡}t  d|d|gddd|gdd|dgg d¢g d¢g d¢g d¢|dddgg¡}t|d t| d}	t|	 |¡|ƒ W d   ƒ d S 1 sŸw   Y  d S )Nr   r   r   rg   rh   ri   rj   r$   r   r   r7   ©r   r&   )r   r)   Úmeanr   r   r   r   )
r   r   r   Úr0c1rŽ   r   r   r‘   r   Úimputer_compr   r   r   Ú$test_knn_imputer_with_simple_exampleÄ  s>   



øÿ



øÿ
"þr¢   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 )NrP   r   r    r   r(   r4   ©r   r)   r   r   r   r/   )r   r   rR   rT   r<   ÚX2Ú
X2_imputedr   r   r   Ú+test_knn_imputer_not_enough_valid_distancesï  s   r¦   c           
      C   sê   t  ddg| dgg¡}t  d| gg¡}t  ddgg¡}td| |d}| |¡ t| |¡|ƒ t  | ddgd| dgdd| gg¡}t  | d| gd| | g| | dgg¡}t  g d¢g d¢g d¢g¡}td| |d}	|	 |¡ t|	 |¡|ƒ d S )	Nr   r   r   )r   r'   r   r    )r    r   r   )r   r    r   )r   r   r   )r   r)   r   r.   r   r/   )
r   r   ÚX1_trainÚX1_testÚX1_test_expectedÚknn1ÚX2_trainÚX2_testÚX2_test_expectedÚknn2r   r   r   Útest_knn_imputer_nan_distanceþ  s   
""
r¯   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   r5   r    rA   r£   )r   rR   r<   ÚX1_expectedr¤   ÚX2_expectedr   r   r   Ú'test_knn_imputer_drops_all_nan_features  s   r²   c              	   C   s€  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' t| ddd}	t|	 |¡|ƒ t| ddd}
t|
 |¡|ƒ W d   ƒ d S 1 s¹w   Y  d S )Nr    r   r4   r"   r   r!   rk   Frl   r   r   rf   rž   r
   r(   )r   r)   r   rp   r   r   r   r   )r   r   r   r^   ÚX_01ÚX_11ÚX_20ÚX_50Ú
X_expectedÚknn_3Úknn_4r   r   r   Ú7test_knn_imputer_distance_weighted_not_enough_neighbors  s   .ÿ****."ûrº   zna, allow_nan)r   FTc                 C   s"   t | d}| ¡ jj|ksJ ‚d S )Nr&   )r   Ú__sklearn_tags__Ú
input_tagsÚ	allow_nan)r   r½   r<   r   r   r   Útest_knn_tags7  s   
r¾   )#Únumpyr   r+   Úsklearnr   Úsklearn.imputer   Úsklearn.metrics.pairwiser   r   Úsklearn.neighborsr   Úsklearn.utils._testingr   ÚmarkÚparametrizeÚranger   r   r2   r?   rG   rU   rX   rZ   rc   r“   rœ   Úfilterwarningsr¢   r¦   r¯   r²   rº   r¾   r   r   r   r   Ú<module>   sZ    
A

'
I




 
&
