
    -iD                     >   S SK rS SKrS SKJr  S SKJr  S SKJrJ	r	  S SK
Jr  S SKJr  \R                  R                  SSS	/5      \R                  R                  S
\" SS5      5      S 5       5       r\R                  R                  S\R$                  S/5      S 5       r\R                  R                  S\R$                  S/5      S 5       r\R                  R                  S\R$                  S/5      S 5       r\R                  R                  S\R$                  S/5      S 5       r\R                  R                  S\R$                  S/5      S 5       r\R                  R                  S\R$                  S/5      S 5       r\R                  R                  S\R$                  S/5      S 5       r\R                  R                  S\R$                  S/5      S 5       rS r\R                  R                  SSS /5      \R                  R                  SS\R$                  /5      \R                  R9                  S5      S 5       5       5       r\R                  R                  SS\R$                  /5      \R                  R                  SSS	/5      S 5       5       r\R                  R                  SS\R$                  /5      \R                  R                  SSS	/5      S 5       5       r\R                  R                  SS\R$                  /5      S 5       r \R                  R                  SSS /5      \R                  R                  SS\R$                  /5      S 5       5       r!\R                  R                  S S!\R$                  S"4/5      S# 5       r"g)$    N)config_context)
KNNImputer)nan_euclidean_distancespairwise_distances)KNeighborsRegressor)assert_allcloseweightsuniformdistancen_neighbors      c                     SnSn[         R                  R                  X#5      n[         R                  US'   [	        XS9nUR                  U5      nUR                  X#4:X  d   eg )N
      )r   r   )r   r	   )nprandomrandnanr   fit_transformshape)r	   r   n_rowsn_colsXimputer	X_imputeds          P/var/www/html/venv/lib/python3.13/site-packages/sklearn/impute/tests/test_knn.pytest_knn_imputer_shaper      s\    
 FF
		v&AffAdG[BG%%a(I??v....    nac                    [         R                  " [         R                  SSSU // SQ/ SQU SSSS/U S	SS	S
// SQ/5      n[        R                  " [
        SS9   [        U S9R                  U5        S S S 5        [         R                  " [         R                  SSSU // SQ/ SQU SSSS/U S	SS	S
// SQ/5      n[         R                  " SSSSU // SQ/ SQU SSSS/U S	SS	S
// SQ/5      n[        U S9R                  U5      n[        R                  " [
        SS9   UR                  U5        S S S 5        [        SSSS9n[         R                  " [         R                  SSSS/[         R                  SS[         R                  S/[         R                  SSSS/[         R                  SSSS//5      nSn[        R                  " [
        US9   UR                  U5        S S S 5        [         R                  " SS/[         R                  S//5      ng ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N\= f)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      s   
 	VVQ1b!Aq"Aq!	
		A 
z)J	K"%))!, 
L 	VVQ1b!Aq"Aq!	
		A HH1aAq"Aq!	
	E +//6G	z)J	K! 
L q)LG
VVQ1a VVQ2661%VVQ1a VVQ1b!		
	A !C	z	-A 
. 	FVVQK	
	AW 
L	K4 
L	K 
.	-s$   HH&H7
H#&
H47
Ic                    [         R                  " SSU SSS/SSU SSS/SSU SSU /SSX SS//5      n[        U SS9R                  U5      nUR	                  U5      n[         R
                  " U5      R                  5       (       a   eUR                  S:X  d   e[         R                  " S	S
5      R                  SS5      nUR	                  U5      n[        US S 2/ SQ4   U5        g )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 21a 		
	A BA
6
:
:1
=C--"Kxx$((****&&&YYq"%%a+F--'KF1o-.<r   c           
         [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " SU SSS// SQSSSSU /SSU SS//5      n[         R                  " / S	Q/ SQ/ S
Q/ SQ/5      n[        SSSS9n[        U SSS9n[        UR	                  U5      U5        [        UR	                  U5      UR	                  U5      5        g )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     XX		
F HHAq#1a2q!		
E 		
I QAyQLBAyQKL..v6	B""6*K,E,Ee,Lr   c                 x   [         R                  " / SQSSSU /SSSU /U SSS/SU SS// S	Q/ S
Q/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/5      n[        U S9n[        UR	                  U5      U5        [         R                  " SSSU /SSSU /SSSU /SSSU /SSSU /SSSU // SQ/ SQ/5      nSn[         R                  " SSSU/SSSU/SSSU/SSSU/SSSU/SSSU// SQ/ SQ/5      n[        U S9n[        UR	                  U5      U5        [         R                  " SS/U S/SS/SS/SS/SS/SS//5      n[         R                  " SS/SS/SU //5      nSn[         R                  " SS/SS/SU//5      n[        U S9n[        UR                  U5      R                  U5      U5        g )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&    	1bM1bMAqMAqM	

	A 	

I +GG))!,i8 	1bM1bM1bM1bM1bM1bM		
	A #N1n%1n%1n%1n%1n%1n%		
I +GG))!,i8 	1a&2q'Aq6Aq6Aq6Aq6B8LMA	Aq6Aq6Ar7+	,B#EAq6Aq6Au:67J+GGKKN,,R0*=r   c           
          [         R                  " SS/U S/SS/SU /SS/U S/SS	//5      n[         R                  " SS/SS/SS/SS/SS/SS/SS	//5      n[        S
U S9n[        UR	                  U5      U5        g )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OA1a&1a&1a&1a&1a&1a&2r(STIQr:GG))!,i8r   c           
         [         R                  " SS/U S/SS/SU /SS/U S/SS	//5      n[         R                  " SS/S
S/SS/SS/SS/S
S/SS	//5      nUR                  S   S-
  n[        X0S9n[	        UR                  U5      U5        UR                  S   n[        X0S9n[	        UR                  U5      U5        g )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OA
Q$QFQI1vay2r(KI ''!*q.K[DGG))!,i8''!*K;JMM//2I>r   c           
         [         R                  " SS/U S/SS/SS/SS/SS	/S
S//5      n[         R                  " SS/SS/SS/SS/SS/SS	/S
S//5      n[        SU S9n[        UR	                  U5      U5        S n[        X@S9n[        UR	                  U5      U5        S n[        XPS9n[        UR	                  U5      U5        g )Nr   r   r8   r#   r%   r   r'   rU   r$   rV   r   r
   r	   r*   c                     g N dists    r   	no_weight2test_knn_imputer_weight_uniform.<locals>.no_weight  s    r   c                 .    [         R                  " U 5      $ rf   )r   	ones_likerh   s    r   uniform_weight7test_knn_imputer_weight_uniform.<locals>.uniform_weight  s    ||D!!r   rG   )r    r   X_imputed_uniformr   rj   rn   s         r   test_knn_imputer_weight_uniformrq      s    
1a&2q'Aq6Aq6Aq6Aq6B8LMA 
Q!Q!Q!Q!Q!Q"bB 2>GG))!,.?@ >GG))!,.?@" CGG))!,.?@r   c                 p	   [         R                  " SS/U S/SS/SS/SS/SS	/S
S//5      n[        SSS9n/ SQnUR                  XSS 24   XS4   5        UR	                  USS2SS 24   5      S   n/ SQn[        USS2S S 24   XS9nSUS S 2U4   R                  5       -  n[         R                  " XS4   US9n[         R                  " SS/US/SS/SS/SS/SS	/S
S//5      n	[         R                  " SS/US/SS/SS/SS/SS	/S
S//5      n
[        SU S9n[        UR                  U5      U	5        [        UR                  U5      U
5        [         R                  " U SS// SQ/ SQ/ SQ/5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS/SU-  SU-  /S9n[         R                  " USS// SQ/ SQ/ SQ/5      n[        SSU S9n[        UR                  U5      U5        [         R                  " / SQSU SU /SSSU // SQ/ SQ/ SQ/ SQ/5      n[        XS9nUS/ SQ4   nUS/ S Q4   nSU-  nSU-  nUS/ S Q4   nSU-  n[         R                  R                  U/ SQS4   5      R                  5       n[         R                  R                  U/ S QS4   5      R                  5       n[         R                  R                  UUS9n[         R                  R                  UUS9n[         R                  R                  UUS9n[         R                  " / SQSUSU/SSSU// SQ/ SQ/ SQ/ SQ/5      n[        SU S9n[        UR                  U5      U5        [         R                  " SSSU /SSSU /SSU S// S!Q/ S"Q/ S#Q/ S$QU SSS//5      n[        US%S&U S'9nS(USSS)24   -  nS(USSS)24   -  nS(US*   -  nS(USSS24   -  n[         R                  " USS)2S)4   US9n[         R                  " USS)2S)4   US9n [         R                  " US+   US9n![         R                  " USS2S4   US9n"[         R                  " SSSU/SSSU /SSU!S// S!Q/ S"Q/ S#Q/ S$QU"SSS//5      n[        U SS,9n#[        U#R                  U5      U5        g )-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rt   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     sf   
1a&2q'Aq6Aq6Aq6Aq6B8LMA 
K	DB#JFF1^aA./

1QqS!"W:.q1 &O"1QqS!V9aCD$q/)*0022G::a(:&;WM((
Q&*QFQFQFQFRQSHU
 ((
Q#Q'!Q!Q!Q!Q"bR B?GG))!,.ABG))!,.AB 	AJ		
	A ww>?Hww>?HJJ1vHa(l/KLMAq!		
I Q
2NGG))!,i8 	ArN1bM	

	A #18D1o-.O1o-.O&L&L1o-.O&L ,,Q/A-BCHHJ,,Q/A-BCHHJ uu}}.}EHuu}}.}EHuu}}.}EH!X&1h	

I B?GG))!,i8
1bM1bM2qMAqM		
	A 	/5D
 41R4= F41R4= F4*++F41Q3<F ::a"bk62D::a"bk62D::a*+V<D::a!Qi0D1dO1dO4O1aO		
I !JGOO11!4i@r   c            	      P   [         R                  S4S jn [         R                  " SSS[         R                  // SQ/ SQ[         R                  SSS	//5      nS
nSn[         R                  " SSSU// SQ/ SQUSSS	//5      n[        SU S9n[	        UR                  U5      U5        g )NFc                 &   [         R                  R                  U [         R                  " U 5      S9n [         R                  R                  U[         R                  " U5      S9n[         R                  " [         R
                  " X-
  5      5      nU$ )N)mask)r   r   r,   r<   nansumabs)xyr*   r|   ri   s        r   custom_callable9test_knn_imputer_callable_metric.<locals>.custom_callable  s[    EEKKK,EEKKK,yy'r   r8   r#   )r   rU   r   rU   )r8   r$   r   rU   rU   rV   g      $@g      "@g      @r   )r   rt   )r   r   r,   r   r   r   )r   r   X_0_3X_3_0r   r   s         r    test_knn_imputer_callable_metricr     s    -/VVU  	1aBFF#\<"&&!RQUAVWXAEE
Q5	<q"d7KLI Q?GG))!,i8r   working_memoryzignore:adhere to working_memoryc                    [         R                  " SU SU /SSSU /SSU S// SQ/ SQ/ SQ/ SQU SSS//5      n[         R                  " USS	2S4   5      n[         R                  " USS
2S
4   5      n[         R                  " USS
2S
4   5      n[         R                  " U/ SQS4   5      n[         R                  " USS
2S4   5      n[         R                  " SUSU/SSSU/SSUS// SQ/ SQ/ SQ/ SQUSSS//5      n[        US9   [	        U S9n	[        U	R                  U5      U5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   rv   rw   rx   ry   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     sR    	ArN1bM2qMAqM		
	A 771QqS!V9D771QrT2X;D771QrT2X;D771_a'()D771QrT1W:Da1dO4O1aO		
I 
~	6!42215yA 
7	6	6s   %D55
Ec                 f   [         R                  " U S/U S/SU //5      n[         R                  " SS/SS/SS//5      n[        U SUS9n[        UR	                  U5      U5        [         R                  " SU //5      n[         R                  " SS//5      n[        UR                  U5      U5        g )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4J
BAw
GCC%%b):6	Ar7)	BAq6(#JCMM"%z2r   c                 :   [         R                  " SS/U S//5      n[         R                  " SU //5      n[         R                  " SS//5      n[        SXS9nUR                  U5        [	        UR                  U5      U5        [         R                  " U SS/SU S/SSU //5      n[         R                  " U SU /SX /X S//5      n[         R                  " / SQ/ SQ/ SQ/5      n[        SXS9n	U	R                  U5        [	        U	R                  U5      U5        g )	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     s     xx!Q"a)*HhhBy!Gxx!Q)!BHDHHXDNN7+-=>xx"aaQZ!Q<=HhhQa[21+>?GxxIy AB!BHDHHXDNN7+-=>r   c                 \   [         R                  " U S/U S//5      n[        U SS9n[         R                  " S/S//5      n[        UR	                  U5      U5        [         R                  " SS/SU //5      n[         R                  " S/S//5      n[        UR                  U5      U5        g )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
6C((QC!:&KC%%b);7	Aq6Ar7#	$B((QC#<(KCMM"%{3r   c           	         [         R                  " SU /SU /U S/SS/SS/U S//5      n[        USSU S	9n[         R                  " USS2S
4   S
USSS24   -  S9n[         R                  " USS2S
4   S
US
SS24   -  S9n[         R                  " USS2S4   S
USSS24   -  S9n[         R                  " USS2S4   S
USSS24   -  S9n[         R                  " SU/SU/US/SS/SS/US//5      n[	        US9   [        U SSS9n	[        U	R                  U5      U5        [        U SSS9n
[        U
R                  U5      U5        S S S 5        g ! , (       d  f       g = f)Nr#   r   r8   r%   r   r$   rz   Fr{   r   r   ru   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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WJ	~	6"!ZP++A.
;"!ZP++A.
; 
7	6	6s   >AE
E"zna, allow_nan)r!   FTc                 j    [        U S9nUR                  5       R                  R                  U:X  d   eg )Nr)   )r   __sklearn_tags__
input_tags	allow_nan)r    r   r@   s      r   test_knn_tagsr   7  s/    
B
'C!,,66)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   rq   r   r   filterwarningsr   r   r   r   r   r   rg   r   r   <module>r      s     " % P 1 2 Y
$;<a4
/ 5 =
/ |,> ->B |,= -=( |,$ -$N |,F> -F>R |,9 -9 |,? -?" |,A -A4 |,QA -QAh9( )D!95BFF|, =>#B ? - 6
#BL BFF|,Y
$;<
3 = -
3 BFF|,Y
$;<? = -?& BFF|,4 -4 )D!95BFF|,< - 6<, ;*GHD IDr   