
    >[gD                     >   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                  j                  ddd	g      ej                  j                  d
 edd            d               Zej                  j                  dej$                  dg      d        Zej                  j                  dej$                  dg      d        Zej                  j                  dej$                  dg      d        Zej                  j                  dej$                  dg      d        Zej                  j                  dej$                  dg      d        Zej                  j                  dej$                  dg      d        Zej                  j                  dej$                  dg      d        Zej                  j                  dej$                  dg      d        Zd Zej                  j                  ddd g      ej                  j                  ddej$                  g      ej                  j9                  d      d                      Zej                  j                  ddej$                  g      ej                  j                  ddd	g      d               Zej                  j                  ddej$                  g      ej                  j                  ddd	g      d               Zej                  j                  ddej$                  g      d        Z ej                  j                  ddd g      ej                  j                  ddej$                  g      d               Z!ej                  j                  d d!ej$                  d"fg      d#        Z"y)$    N)config_context)
KNNImputer)nan_euclidean_distancespairwise_distances)KNeighborsRegressor)assert_allcloseweightsuniformdistancen_neighbors      c                     d}d}t         j                  j                  ||      }t         j                  |d<   t	        ||       }|j                  |      }|j                  ||fk(  sJ y )N
      )r   r   )r   r	   )nprandomrandnanr   fit_transformshape)r	   r   n_rowsn_colsXimputer	X_imputeds          X/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/impute/tests/test_knn.pytest_knn_imputer_shaper      sb    
 FF
		vv&AffAdG['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        |       j                  |       d d d        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        |       j                  |      }t        j                  t
        d      5  |j                  |       d d d        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  |j                  |       d d d        t        j                  ddgt         j                  dgg      }y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   LxY w)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                    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      j                  |      }|j	                  |      }t        j
                  |      j                         rJ |j                  dk(  sJ t        j                  d	d
      j                  dd      }|j	                  |      }t        |d d g df   |       y )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
:
:1
=C--"Kxx$((***&&&YYq"%%a+F--'KF1o-.<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        |j	                  |      |       t        |j	                  |      |j	                  |             y )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                 |   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        |j	                  |      |       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        |j	                  |      |       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        |j                  |      j                  |      |       y )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           
          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        |j	                  |      |       y )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           
         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                  |      |       |j                  d   }t        ||       }t	        |j                  |      |       y )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;rJMM//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        |j	                  |      |       d }t        ||       }t        |j	                  |      |       d }t        ||       }t        |j	                  |      |       y )Nr   r   r8   r#   r%   r   r'   rU   r$   rV   r   r
   r	   r*   c                      y N dists    r   	no_weightz2test_knn_imputer_weight_uniform.<locals>.no_weight  s    r   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MA 
Q!Q!Q!Q!Q!Q"bB 2>GG))!,.?@ 2>GG))!,.?@" 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}|j                  ||dd f   ||df          |j	                  |dddd f         d   }g d}t        |ddd d f   ||       }d|d d |f   j                         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        |j                  |      |	       t        |j                  |      |
       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        |j                  |      |       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                  j                  |g ddf         j                         }t         j                  j                  |g d df         j                         }t         j                  j                  ||      }t         j                  j                  ||      }t         j                  j                  ||      }t        j                  g dd|d|gddd|gg dg dg dg dg      }t        d|       }t        |j                  |      |       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        |#j                  |      |       y )-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     sp   
1a&2q'Aq6Aq6Aq6Aq6B8LMA 
K	DB#JFF1Z^a
A./

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 #1R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   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	        |j                  |      |       y )NFc                 ,   t         j                  j                  | t        j                  |             } t         j                  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]    EEKKK,EEKKK,yy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    -/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                    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        |	j                  |      |       d d d        y # 1 sw Y   y xY w)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     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   (D44D=c                 d   t        j                  | dg| dgd| gg      }t        j                  ddgddgddgg      }t        | d|      }t        |j	                  |      |       t        j                  d| gg      }t        j                  ddgg      }t        |j                  |      |       y )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                 B   t        j                  ddg| dgg      }t        j                  d| gg      }t        j                  ddgg      }t        d| |      }|j                  |       t	        |j                  |      |       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| |      }	|	j                  |       t	        |	j                  |      |       y )	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R[2r1+>?GxxIy AB!BHDHHXDNN7+-=>r   c                 Z   t        j                  | dg| dgg      }t        | d      }t        j                  dgdgg      }t        |j	                  |      |       t        j                  ddgd| gg      }t        j                  dgdgg      }t        |j                  |      |       y )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           	         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        |	j                  |      |       t        | dd      }
t        |
j                  |      |       d d d        y # 1 sw Y   y xY w)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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                 n    t        |       }|j                         j                  j                  |k(  sJ y )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   ro   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   