
    0PhD                        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                         Zej                            dej        dg          d             Zej                            dej        dg          d             Zej                            dej        dg          d             Zej                            dej        dg          d             Zej                            dej        dg          d             Zej                            dej        dg          d             Zej                            dej        dg          d             Zej                            dej        dg          d             Zd Zej                            ddd g          ej                            ddej        g          ej                            d          d                                     Zej                            ddej        g          ej                            ddd	g          d                         Zej                            ddej        g          ej                            ddd	g          d                         Zej                            ddej        g          d             Z ej                            ddd g          ej                            ddej        g          d                         Z!ej                            d d!ej        d"fg          d#             Z"dS )$    N)config_context)
KNNImputer)nan_euclidean_distancespairwise_distances)KNeighborsRegressor)assert_allcloseweightsuniformdistancen_neighbors      c                     d}d}t           j                            ||          }t           j        |d<   t	          ||           }|                    |          }|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_imputeds          ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/impute/tests/test_knn.pytest_knn_imputer_shaper      sq    
 FF
	vv&&AfAdG['BBBG%%a((I?vv.......    nac                    t          j        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          5  t          |                               |           d d d            n# 1 swxY w Y   t          j        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        dddd| gg dg d| ddddg| d	dd	d
gg dg          }t          |                               |          }t          j        t
          d          5  |                    |           d d d            n# 1 swxY w Y   t          ddd          }t          j        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
          |          5  |                    |           d d d            n# 1 swxY w Y   t          j        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   msgs        r   +test_knn_imputer_default_with_invalid_inputr5      sP   
 	VQ1b!OOOOAq"Aq!OO	
		 		A 
z)J	K	K	K - -"%%%))!,,,- - - - - - - - - - - - - - - 	VQ1b!OOOOAq"Aq!OO	
		 		A H1aOOOOAq"Aq!OO	
	 	E +++//66G	z)J	K	K	K  !               q)LLLG
VQ1a VQ261%VQ1a VQ1b!		
	 	A !C	z	-	-	-  A               	FVQK	
	 	AAAs6   $BB	B	6EEE0HHHc                    t          j        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                              |          }|                    |          }t          j        |                                          rJ |j        dk    sJ t          j        d	d
          	                    dd          }|                    |          }t          |d d g df         |           d S )Nr         ?r   r#      r   r*   r   )r8   r%   r      r   r   r#   r8   r%   )r   r,   r   r1   r2   isnananyr   arangereshaper   )r    r   knnX_transformX_tests        r   (test_knn_imputer_removes_all_na_featuresrC   \   s   
2q!S!2q!Q2q!R 2r1a 		
	 	A BA
6
6
6
:
:1
=
=C--""Kx$$((*****&&&&Yq"%%a++F--''KF111ooo-.<<<<<r   c           
         t          j        g dg dg dg dg          }t          j        d| dddgg ddddd| gdd| ddgg          }t          j        g d	g dg d
g dg          }t          ddd          }t          | dd          }t          |                    |          |           t          |                    |          |                    |                     d S )N)r   r   r   r   r7   )r   r   r   r   r   )r#   r#   r#   r#   r   )r   r   r   r   r   r   r7   r#   r   )r         @r   r   r7   )r#   r#   r#   r#         ?)r   r   rE   r   r   r   r   r
   r+   r   r,   r   r   r   )r    X_zeroX_nanr   imputer_zeroimputer_nans         r   *test_knn_imputer_zero_nan_imputes_the_samerL   q   s@    XOOOOOO		
 F HAq#OO1a2q!		
 E OO		
 I QAyQQQLBAyQQQKL..v66	BBB""6**K,E,Ee,L,L    r   c                    t          j        g dddd| gddd| g| dddgd| ddgg d	g d
g          }t          j        g dg dg dg dg dg d	g d
g          }t          |           }t          |                    |          |           t          j        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          j        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          |           }t          |                    |          |           t          j        ddg| dgddgddgddgddgddgg          }t          j        ddgddgd| gg          }d}t          j        ddgddgd|gg          }t          |           }t          |                    |                              |          |           d S )Nr   r   r   r   r   r   r#   r8   r%   r   r'   )r$   r$   r$   r$   )            )r   r   r   r$   )r#   r   r#   r$   )r8   r8   r%   r%   )r   r#   r   r'   r)   r   r$   )   rS   rS   rS   )   rT   rT   rT   g      5@	      rO   g333333@)r   r,   r   r   r   r1   r2   )r    r   r   r   X_impute_valueX1X_2_1
X1_imputeds           r   test_knn_imputer_verifyr[      s    	LL1bM1bMAqMAqMLL	

	 
	A LLLLLLLLLLLL	

 
I +++GG))!,,i888 	1bM1bM1bM1bM1bM1bM		
	 	A #N1n%1n%1n%1n%1n%1n%		
 I +++GG))!,,i888 	1a&2q'Aq6Aq6Aq6Aq6B8LMMA	Aq6Aq6Ar7+	,	,B#EAq6Aq6Au:677J+++GGKKNN,,R00*=====r   c           
         t          j        ddg| dgddgd| gddg| dgdd	gg          }t          j        ddgddgddgddgddgddgdd	gg          }t          d
|           }t          |                    |          |           d S )Nr   r   r8   r#   r%   r'   r$      r&   r   r   r*   rG   )r    r   r   r   s       r    test_knn_imputer_one_n_neighborsr_      s    
1a&2q'Aq6Ar7QFRGb"XNOOA1a&1a&1a&1a&1a&1a&2r(STTIQr:::GG))!,,i88888r   c           
         t          j        ddg| dgddgd| gddg| dgdd	gg          }t          j        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z
  }t          ||           }t	          |                    |          |           |j        d         }t          ||           }t	          |                    |          |           d S )Nr   r   r8   r#   r%   r'   r$   r]   r&   g      @g      @r   r^   )r   r,   r   r   r   r   )r    r   r   r   r   imputer_plus1s         r   *test_knn_imputer_all_samples_are_neighborsrb      s    
1a&2q'Aq6Ar7QFRGb"XNOOA
Q$QFQI1vay2r(K I '!*q.K[DDDGG))!,,i888'!*K;rJJJMM//22I>>>>>r   c           
         t          j        ddg| dgddgddgddgdd	gd
dgg          }t          j        ddgddgddgddgddgdd	gd
dgg          }t          d|           }t          |                    |          |           d }t          ||           }t          |                    |          |           d }t          ||           }t          |                    |          |           d S )Nr   r   r8   r#   r%   r   r'   rU   r$   rV   r   r
   r	   r*   c                     d S N dists    r   	no_weightz2test_knn_imputer_weight_uniform.<locals>.no_weight  s    tr   c                 *    t          j        |           S rf   )r   	ones_likerh   s    r   uniform_weightz7test_knn_imputer_weight_uniform.<locals>.uniform_weight  s    |D!!!r   rG   )r    r   X_imputed_uniformr   rj   rm   s         r   test_knn_imputer_weight_uniformro      s;   
1a&2q'Aq6Aq6Aq6Aq6B8LMMA 
Q!Q!Q!Q!Q!Q"bB  2>>>GG))!,,.?@@@   2>>>GG))!,,.?@@@" " " CCCGG))!,,.?@@@@@r   c                 
   t          j        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d f         ||df                    |                    |dddd f                   d         }g d}t          |ddd d f         ||           }d|d d |f                                         z  }t          j        ||df         |          }t          j        ddg|dgddgddgddgdd	gd
dgg          }	t          j        ddg|dgddgddgddgdd	gd
dgg          }
t          d|           }t          |
                    |          |	           t          |
                    |          |
           t          j        | ddgg dg dg dg          }t          j        d          }t          j        d          }t          j        ddgd|z  d|z  g          }t          j        |ddgg dg dg dg          }t          dd|           }t          |
                    |          |           t          j        g dd| d| gddd| gg dg dg dg dg          }t          ||           }|dg df         }|dg d f         }d|z  }d|z  }|dg d f         }d|z  }t           j                            |g ddf                                                   }t           j                            |g d df                                                   }t           j                            ||          }t           j                            ||          }t           j                            ||          }t          j        g dd|d|gddd|gg dg dg dg dg          }t          d|           }t          |
                    |          |           t          j        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)f         z  }d(|ddd)f         z  }d(|d*         z  }d(|dddf         z  }t          j        |dd)d)f         |          }t          j        |dd)d)f         |          } t          j        |d+         |          }!t          j        |dddf         |          }"t          j        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,          }#t          |#
                    |          |           d S )-Nr   r   r8   r#   r%   r   r'   rU   r$   rV   r   	euclideanr   )metricr	   )r   r   r#   r8   r%   r   r   )r   r   r#   r8   r%   r)   r	   rd   )r   r   r   )r#   r   r#   )r8   r%   r%   g      @g     3@)r   r	   r*   rN   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r#   r8   r%   r   r#   r#   r#   r#   r8   r8   r8   r8   r%   r%   r%   r%   r   r   r   r   nan_euclideanFrr   squaredr*   r7   r!   )r   r;   )r;   r   )r*   r	   )r   r,   r   r1   predictr   ravelaverager   r   r   sqrtmamasked_invalidcopyr   )$r    r   nn
X_rows_idxknn_imputed_valueX_neighbors_idxri   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_wts$                                       r    test_knn_imputer_weight_distancer     s   
1a&2q'Aq6Aq6Aq6Aq6B8LMMA 
K	D	D	DB###JFF1Z^a
A.///

1QqS!""W:..q1 &ooO"1QqS!!!V9aCCCD$qqq/)*00222G:a(:&;WMMM(
Q&*QFQFQFQFRQSHU 
 (
Q#Q'!Q!Q!Q!Q"bR  B???GG))!,,.ABBBG))!,,.ABBB 	AJIIIIII		
	 	A w>??Hw>??HJ1vHa(l/KLLLMAq!IIIIII		
 I Q
2NNNGG))!,,i888 	LLArN1bMLLLLLL	

	 
	A #1R888D1ooo-.O1ooo-.O&L&L1ooo-.O&L ,,Q/A-BCCHHJJ,,Q/A-BCCHHJJ u}}.}EEHu}}.}EEHu}}.}EEHLL!X&1hLLLLLL	

 
I B???GG))!,,i888
1bM1bM2qMLLLLLLLLAqM		
	 	A 	/5  D
 41R4= F41R4= F4*++F41Q3<F :a"bk6222D:a"bk6222D:a*+V<<<D:a!Qi000D1dO1dO4OLLLLLLLL1aO		
 I !JGGGOO11!44i@@@@@r   c            	      N   t           j        dfd} t          j        dddt           j        gg dg dt           j        ddd	gg          }d
}d}t          j        ddd|gg dg d|ddd	gg          }t          d|           }t	          |                    |          |           d S )NFc                 $   t           j                            | t          j        |                     } t           j                            |t          j        |                    }t          j        t          j        | |z
                      }|S )N)mask)r   r   r,   r<   nansumabs)xyr*   rz   ri   s        r   custom_callablez9test_knn_imputer_callable_metric.<locals>.custom_callable  s`    EKKK,,EKKK,,yA''r   r8   r#   )r   rU   r   rU   )r8   r$   r   rU   rU   rV   g      $@g      "@g      @r   )r   rr   )r   r   r,   r   r   r   )r   r   X_0_3X_3_0r   r   s         r    test_knn_imputer_callable_metricr     s    -/VU     	1aBF#\\\<<<"&!RQUAVWXXAEE
Q5	<<<q"d7KL I Q???GG))!,,i88888r   working_memoryzignore:adhere to working_memoryc                    t          j        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          j        |dd	df                   }t          j        |dd
d
f                   }t          j        |dd
d
f                   }t          j        |g ddf                   }t          j        |dd
df                   }t          j        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          |          5  t	          |           }	t          |	                    |          |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   rt   ru   rv   rw   r'   r   r!   r;   r   r)   )r   r,   meanr   r   r   r   )
r    r   r   r0c1r   r   r   r   r   imputer_comps
             r   $test_knn_imputer_with_simple_exampler     s    	ArN1bM2qMLLLLLLLLAqM		
	 	A 71QqS!V9D71QrT2X;D71QrT2X;D71___a'())D71QrT1W:Da1dO4OLLLLLLLL1aO		
 I 
~	6	6	6 B B!44422155yAAAB B B B B B B B B B B B B B B B B Bs   4EEEc                    t          j        | dg| dgd| gg          }t          j        ddgddgddgg          }t          | d|          }t          |                    |          |           t          j        d| gg          }t          j        ddgg          }t          |                    |          |           d S )NrV   r   r#   r   r+   r8   r   r,   r   r   r   r2   )r    r	   rX   rZ   r@   X2
X2_imputeds          r   +test_knn_imputer_not_enough_valid_distancesr     s     
B8b!Wq"g.	/	/BAr7QFQF344J
BAw
G
G
GCC%%b)):666	Ar7)		BAq6(##JCMM"%%z22222r   c                 x   t          j        ddg| dgg          }t          j        d| gg          }t          j        ddgg          }t          d| |          }|                    |           t	          |                    |          |           t          j        | ddgd| dgdd| gg          }t          j        | d| gd| | g| | dgg          }t          j        g dg dg dg          }t          d| |          }	|	                    |           t	          |	                    |          |           d S )	Nr   r   r   )r   r*   r	   r#   )r#   r   r   )r   r#   r   )r   r   r   )r   r,   r   r1   r   r2   )
r    r	   X1_trainX1_testX1_test_expectedknn1X2_trainX2_testX2_test_expectedknn2s
             r   test_knn_imputer_nan_distancer     sJ    x!Q"a)**HhBy!!Gx!Q))!BHHHDHHXDNN7++-=>>>x"aaQZ!Q<==HhQaR[2r1+>??GxIIIyyy ABB!BHHHDHHXDNN7++-=>>>>>r   c                 |   t          j        | dg| dgg          }t          | d          }t          j        dgdgg          }t          |                    |          |           t          j        ddgd| gg          }t          j        dgdgg          }t          |                    |          |           d S )Nr   r   r9   r#   rF   r   )r    rX   r@   X1_expectedr   X2_expecteds         r   'test_knn_imputer_drops_all_nan_featuresr     s    	B7RG$	%	%B
BA
6
6
6C(QC!:&&KC%%b));777	Aq6Ar7#	$	$B(QC#<((KCMM"%%{33333r   c           	      R   t          j        d| gd| g| dgddgddg| dgg          }t          |dd| 	          }t          j        |ddd
f         d
|dddf         z            }t          j        |ddd
f         d
|d
ddf         z            }t          j        |dddf         d
|dddf         z            }t          j        |dddf         d
|dddf         z            }t          j        d|gd|g|dgddgddg|dgg          }t	          |          5  t          | dd          }	t          |	                    |          |           t          | dd          }
t          |
                    |          |           d d d            d S # 1 swxY w Y   d S )Nr#   r   r8   r%   r   r$   rx   Fry   r   r   rs   r   r   r+   )r   r,   r   r}   r   r   r   r   )r    r   r   ri   X_01X_11X_20X_50
X_expectedknn_3knn_4s              r   7test_knn_imputer_distance_weighted_not_enough_neighborsr     s)    	1b'Ar7RGaVaVb!WEFFA	/5  D :a!QiT!QqS&\)9:::D:a!QiT!QqS&\)9:::D:a!QiT!QqS&\)9:::D:a!QiT!QqS&\)9:::DAt9q$i$QFQFTSTIVWWJ	~	6	6	6 < <"!ZPPP++A..
;;;"!ZPPP++A..
;;;< < < < < < < < < < < < < < < < < <s   $A+FF #F zna, allow_nan)r!   FTc                 n    t          |           }|                                j        j        |k    sJ d S )Nr)   )r   __sklearn_tags__
input_tags	allow_nan)r    r   r@   s      r   test_knn_tagsr   7  s;    
B
'
'
'C!!,6)CCCCCCr   )#numpyr   r.   sklearnr   sklearn.imputer   sklearn.metrics.pairwiser   r   sklearn.neighborsr   sklearn.utils._testingr   markparametrizeranger   r   r5   rC   rL   r[   r_   rb   ro   r   r   filterwarningsr   r   r   r   r   r   rg   r   r   <module>r      s        " " " " " " % % % % % % P P P P P P P P 1 1 1 1 1 1 2 2 2 2 2 2 Y
$;<<a44
/ 
/ 54 =<
/ |,,> > -,>B |,,= = -,=( |,,$ $ -,$N |,,F> F> -,F>R |,,9 9 -,9 |,,? ? -,?" |,,A A -,A4 |,,QA QA -,QAh9 9 9( )D!955BF|,, =>>#B #B ?> -, 65
#BL BF|,,Y
$;<<
3 
3 =< -,
3 BF|,,Y
$;<<? ? =< -,?& BF|,,4 4 -,4 )D!955BF|,,< < -, 65<, ;*GHHD D IHD D Dr   