
    -i                       S SK r S SKrS SKrS SKJr  S SKrS SKrS SKJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJrJrJrJr  S SKJr  S SKJrJrJ r   S SK!J"r"  S SK#J$r$J%r%  S SK&J'r'  S SK(J)r)J*r*J+r+J,r,J-r-  S SK.J/r/J0r0J1r1J2r2J3r3  S r4S r5S r6\Rn                  Rq                  S/ SQ5      \Rn                  Rq                  S\25      S 5       5       r9\Rn                  Rq                  S/ SQ5      S 5       r:\Rn                  Rq                  S/ SQ5      S 5       r;\Rn                  Rq                  S/ SQ5      \Rn                  Rq                  S\15      S 5       5       r<S r=S r>\Rn                  Rq                  S\15      S  5       r?\Rn                  Rq                  S\15      S! 5       r@\Rn                  Rq                  SS"S#/5      \Rn                  Rq                  S$S\A\B/5      S% 5       5       rC\Rn                  Rq                  SS"S#/5      \Rn                  Rq                  S&S'S(/5      S) 5       5       rD\Rn                  Rq                  SS*S+/5      \Rn                  Rq                  S$\B\R                  " S,5      \R                  " S-5      /5      S. 5       5       rF\Rn                  Rq                  S\15      S/ 5       rG\Rn                  Rq                  S0S\R                  S1S2S /5      S3 5       rI\Rn                  Rq                  S$\AS4/5      S5 5       rJ\Rn                  Rq                  S6S7S8\R                  4/5      S9 5       rKS: rL\Rn                  Rq                  S;\2\R                  /-   5      S< 5       rN\Rn                  Rq                  S0S\R                  S1S2S /5      S= 5       rO\Rn                  Rq                  S$\AS4/5      S> 5       rP\Rn                  Rq                  S?S@/SA//S@/\R                  ///5      SB 5       rQSC rRSD rSSE rTSF rUSG rV\Rn                  Rq                  SH/ SIQ5      SJ 5       rW\Rn                  Rq                  SKS\" 5       \" 5       \" 5       \ " 5       /5      SL 5       rXSM rYSN rZSO r[\Rn                  Rq                  S/ SQ5      SP 5       r\SQ r]SR r^SS r_\Rn                  Rq                  STSUSV/5      SW 5       r`SX raSY rbSZ rc\Rn                  Rq                  S[S S\\R                  " S /SU-  S\/SU-  /5      4SS\R                  " \R                  * /SU-  \R                  /SU-  /5      4\R                  * \R                  \R                  " \R                  * /SU-  \R                  /SU-  /5      4/ S]Q/ S^Q\R                  " / S]Q/ S^Q/5      4S_\R                  * S`/S\Sa\R                  /\R                  " S_\R                  * S`/S\Sa\R                  //5      4// SbQSc9Sd 5       rf\Rn                  Rq                  SeSf\R                  \R                  * Sg4S_SV// ShQSi4/ SjQS\Sa/Si4/5      Sk 5       rg\Rn                  Rq                  SlSS/\R                  * \R                  /4SmS`/Sm/Sn-  S`/Sn-  /4/SoSp/Sc9Sq 5       rh\Rn                  Rq                  SrSsSt/5      Su 5       ri\Rn                  Rq                  SvSS@\R                  R                  S@Sw9/5      \Rn                  Rq                  SxSS@\R                  R                  S@Sw9/5      Sy 5       5       rl\Rn                  Rq                  Sz\R                  " S{S@/S@SA//5      \R                  " S{S@/S@S{//5      S|S}S~.S4\R                  " SS/SS//\BS9\R                  " SS/SS//\BS90 S4/5      S 5       rmS rn\Rn                  Rq                  S\n" 5       5      \Rn                  Rq                  SS|SU\R                  " / SQ5      4SSU\R                  " / SQ5      4/5      S 5       5       ro\Rn                  Rq                  S\1\2-   \0-   \3-   \/-   5      S 5       rp\Rn                  Rq                  S/ SQ5      \Rn                  Rq                  S\R                  S 4/\q" \" \1\2-   \0-   \3-   \/-   \R                  /5      5      -   5      S 5       5       rrS rs\Rn                  Rq                  S\R                  " SS/SS//\AS9S\R                  " / SQ/ SQ/\AS94\R                  " \R                  S8/S8\R                  //5      \R                  \R                  " / SQ/ SQ/5      4\R                  " \R                  S/S\R                  //\AS9\R                  \R                  " / SQ/ SQ/\AS94\R                  " SS/SS//\AS9S\R                  " / SQ/ SQ/\AS94/5      S 5       rt\Rn                  Rq                  S\\/5      \Rn                  Rq                  SS\R                  S4S/5      S 5       5       ruS rv\Rn                  Rq                  S\25      S 5       rw\Rn                  Rq                  S\\/5      S 5       rx\Rn                  Rq                  S\1\2-   \0-   \3-   \/-   5      S 5       ry\Rn                  Rq                  SSS/5      S 5       rz\Rn                  Rq                  SS/ SQ4S/ SQ4/5      S 5       r{\Rn                  Rq                  SS{\R                  /5      S 5       r|\Rn                  Rq                  SS{\R                  /5      S 5       r}\Rn                  Rq                  SS/ SQ\ASSA4S/ SQ\ASS@4SSS/\ASSA4S/ SQ\ASSA4S`/ SQ\~S`SA4S@/ SQ\~S`S@4S`/ SQ\~S`SA4S@/ SQ\~S`SA4/5      S 5       r\Rn                  Rq                  SSSS/4S@S@SA/4SSS/4SSS@/4S/ SQ4S@S@S/4S@SS@/4/5      S 5       r\Rn                  Rq                  S/ SQ5      S 5       rS rS r\Rn                  Rq                  SSsSt/5      S 5       rS rS rS r\Rn                  Rq                  S\GR                  \GR                  /5      S 5       r\Rn                  Rq                  SSS/5      \Rn                  Rq                  SSsSt/5      S 5       5       r\Rn                  Rq                  SSS/5      \Rn                  Rq                  S/ SQ5      \Rn                  Rq                  SSsSt/5      S 5       5       5       r\Rn                  Rq                  S\15      S 5       rS r\Rn                  Rq                  S/ SQ5      S 5       r\Rn                  Rq                  S/ SQ5      \Rn                  Rq                  S\R                  " / SQ/ SQ/5      \R                  " \R                  SASUSn/\R                  SSS//5      \R                  " S@SASU\R                  /SVSS\R                  //5      /5      S 5       5       rg)    N)productsparse)kstest)tree)load_diabetes)DummyRegressor)ConvergenceWarning)enable_iterative_imputer)IterativeImputer
KNNImputerMissingIndicatorSimpleImputer)_most_frequent)ARDRegressionBayesianRidgeRidgeCV)GridSearchCV)Pipeline
make_union)_sparse_random_matrix)_convert_containerassert_allcloseassert_allclose_dense_sparseassert_array_almost_equalassert_array_equal)BSR_CONTAINERSCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSLIL_CONTAINERSc                 R    [        X5        U R                  UR                  :X  d   eg N)r   dtypexys     S/var/www/html/venv/lib/python3.13/site-packages/sklearn/impute/tests/test_impute.py"_assert_array_equal_and_same_dtyper)   (   s     q77agg    c                 R    [        X5        U R                  UR                  :X  d   eg r#   )r   r$   r%   s     r(   _assert_allclose_and_same_dtyper,   -   s     A77aggr*   c                    SU< SU< S3n[         nU R                  R                  S:X  d  UR                  R                  S:X  a  [        n[	        XBS9nUR                  U 5      R                  U R                  5       5      n	U" UR                  X6R                  S5      S9  U" XUR                  S5      S9  [	        XBS9nUR                  U" U 5      5        UR                  U" U R                  5       5      5      n	[        R                  " U	5      (       a  U	R                  5       n	U" UR                  X6R                  S5      S9  U" XUR                  S5      S9  g	)
zUtility function for testing imputation for a given strategy.

Test with dense and sparse arrays

Check that:
    - the statistics (mean, median, mode) are correct
    - the missing values are imputed correctlyzParameters: strategy = z, missing_values = z, sparse = {0}fmissing_valuesstrategyF)err_msgTN)r   r$   kindr   r   fit	transformcopystatistics_formatr   issparsetoarray)
XX_truer1   
statisticsr0   sparse_containerr2   	assert_aeimputerX_transs
             r(   _check_statisticsrB   2   s    	G
 #Iww||sfll//36-	 >MGkk!n&&qvvx0Gg!!:~~e7LMgw~~e'<= >MGKK #$ 0 :;Gw//#g!!:~~d7KLgw~~d';<r*   r1   )meanmedianmost_frequentconstantcsr_containerc                 r   [         R                  R                  SS5      n[         R                  US S S2'   [	        U S9nUR                  U" U5      5      nUR                  S:X  d   eUR                  U5      nUR                  S:X  d   e[        U S9nUR                  U5      nUR                  S:X  d   eg )N
      r1   )rI   rJ   )initial_strategy)nprandomrandnnanr   fit_transformshaper   )r1   rG   r;   r@   	X_imputediterative_imputers         r(   test_imputation_shaperU   Y   s     			AAVVAccFX.G%%mA&67I??g%%%%%a(I??g%%%((C!//2I??g%%%r*   rC   rD   rE   c                    [         R                  " S5      n[         R                  US S 2S4'   [        U S9R	                  U5      n[
        R                  " [        SS9   UR                  U5        S S S 5        g ! , (       d  f       g = f)N      r   rK   Skippingmatch)	rM   onesrP   r   r4   pytestwarnsUserWarningr5   )r1   r;   r@   s      r(    test_imputation_deletion_warningrb   k   s]    
AffAadGX.2215G	k	4! 
5	4	4s   A::
Bc                    [         R                  " S5      n[        R                  n[        R                  " / SQ[
        S9nUR                  X"SU/SUSS//US9n[        U S	9R                  U5      n[        UR                  U5        [         R                  " [        S
S9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Npandasabcdr$         rJ   rI   columnsrK   z6Skipping features without any observed values: \['b'\]r\   )r_   importorskiprM   rP   arrayobject	DataFramer   r4   r   feature_names_in_r`   ra   r5   )r1   pdr0   feature_namesr;   r@   s         r(   .test_imputation_deletion_warning_feature_namesrv   u   s    			X	&BVVNHH1@M
Q?2&	
  	 	A X.2215G w00-@ 
T
 	!
 
 
s   "B==
Ccsc_containerc                    [         R                  " S5      nSUS'   U" U5      n[        U SS9n[        R                  " [
        SS9   UR                  U5        S S S 5        UR                  UR                  5       5        [        R                  " [
        SS9   UR                  U5        S S S 5        g ! , (       d  f       Na= f! , (       d  f       g = f)NrX   r   )r1   r0   zProvide a dense arrayr\   )	rM   r^   r   r_   raises
ValueErrorr4   r:   r5   )r1   rw   r;   r@   s       r(   test_imputation_error_sparse_0r{      s     	AAaDaAXa@G	z)@	AA 
B KK			z)@	A! 
B	A	 
B	A 
B	As   B4C4
C
Cc                     [        U S5      (       a  U R                  O
[        U 5      nUS:X  a  [        R                  $ [        R
                  " U /UQ70 UD6$ Nsizer   )hasattrr~   lenrM   rP   rD   arrargskwargslengths       r(   safe_medianr      sE     f--SXX3s8Fq[266Ebii&Ed&Ef&EEr*   c                     [        U S5      (       a  U R                  O
[        U 5      nUS:X  a  [        R                  $ [        R
                  " U /UQ70 UD6$ r}   )r   r~   r   rM   rP   rC   r   s       r(   	safe_meanr      sE     f--SXX3s8Fq[266Cbggc&CD&CF&CCr*   c           
         [         R                  R                  S5      nSnSnX"-  X#-   4n[         R                  " US   5      n[         R                  " SUS   S-   5      nUSS S2   * USS S2'   S[         R
                  S 4S[         R
                  S	 4/nU GHS  u  pn
[         R                  " U5      n[         R                  " U5      n[         R                  " US   5      n[        US   5       GH  nX-
  S-   S:  X-
  S-   -  X-
  S-   -  n[        US   X3-  -   X-   X-   -  -
  S5      nUS   U-
  U-
  nUS U n[         R                  " U	U5      nXaR                  [        U5      5      S U    nU
" UUU5      X'   [         R                  " UUU45      US S 2U4'   SU	:X  a:  [         R                  " U[         R                  " X   UU-   5      45      US S 2U4'   O7[         R                  " UU[         R                  " X   U5      45      US S 2U4'   [         R                  R                  U5      R                  US S 2U4   5        [         R                  R                  U5      R                  US S 2U4   5        GM     US:X  a%  [         R                  " U5      R                  SS
9) nO$[         R                  " U5      R!                  SS
9) nUS S 2U4   n[#        XXX5        GMV     g )Nr   rI   rk   rl   rJ   rC   c                 B    [        [        R                  " X45      5      $ r#   )r   rM   hstackzvps      r(   <lambda>-test_imputation_mean_median.<locals>.<lambda>   s    299aV3D)Er*   rD   c                 B    [        [        R                  " X45      5      $ r#   )r   rM   r   r   s      r(   r   r      s    ;ryy!7H+Ir*   axis)rM   rN   RandomStatezerosarangerP   emptyrangemaxrepeatpermutationr   r   shuffleisnananyallrB   )rw   rngdimdecrR   r   valuestestsr1   test_missing_valuestrue_value_funr;   r<   true_statisticsjnb_zerosnb_missing_values	nb_valuesr   r   r   cols_to_keeps                         r(   test_imputation_mean_medianr      s    ))


"C
C
CY	"EHHU1XEYYq%(Q,'F14a4L=F14a4L 
EF	266IJE
 :?5~HHUO%((58, uQxA!aAGaK8AGaKHH #E!Hsy$8AG;P$PRS Ta8+.??Iix A		-/@AAs6{3JY?@A!/1a!8O iiAq	*AadG''!yy		/"46G(6RST q!t  "yy299_%79JKL q!t
 II!!!$,,Qq!tW5II!!!$,,VAqD\:5 !: xHHV,00a088LHHV,00a088L<(x2E	
] :?r*   c                 ^   [         R                  " S[         R                  [         R                  /S[         R                  [         R                  /SS[         R                  /SS[         R                  /SS[         R                  /SS[         R                  /SS[         R                  /SS[         R                  //5      R                  5       n[         R                  " / SQ/ S	Q/ SQ/ S
Q/ SQ/ SQ/ SQ/ SQ/5      R                  5       n/ SQn[	        XSU[         R                  U 5        g )Nr   rZ   rl   rJ   r   r   r   )rZ   rZ   rZ   )r   r         )r   rZ         @)rl   rZ         @)r   r         )r   rJ         ?)r   rZ   r   r   r   r   r   r   rD   )rM   rp   rP   	transposerB   )rw   r;   X_imputed_medianstatistics_medians       r(   $test_imputation_median_special_casesr      s     	266NBFFO266N266NRVVBFFO		
	 ik  xx		
 ik  =	X'8"&&-r*   rC   rD   r$   c                     [         R                  " / SQ/ SQ/ SQ/US9nSn[        R                  " [        US9   [        U S9nUR                  U5        S S S 5        g ! , (       d  f       g = f)Nrf   rg   rY   rl   e   gh	   rj   4non-numeric data:
could not convert string to float:r\   rK   )rM   rp   r_   ry   rz   r   rQ   )r1   r$   r;   msgr@   s        r(   .test_imputation_mean_median_error_invalid_typer     sR     	-m<EJA
AC	z	-2a  
.	-	-s   A
A,typelist	dataframec                    / SQ/ SQ/ SQ/nUS:X  a'  [         R                  " S5      nUR                  U5      nSn[         R                  " [        US9   [        U S9nUR                  U5        S S S 5        g ! , (       d  f       g = f)	Nr   r   r   r   rd   r   r\   rK   )r_   ro   rr   ry   rz   r   rQ   )r1   r   r;   rt   r   r@   s         r(   :test_imputation_mean_median_error_invalid_type_list_pandasr     sl     
]3A{  *LLO
AC	z	-2a  
.	-	-s   A88
BrF   rE   USc           	         [         R                  " [         R                  [         R                  SS/[         R                  S[         R                  S/[         R                  SS[         R                  /[         R                  SSS//US9nSn[        R                  " [
        US	9   [        U S
9nUR                  U5      R                  U5        S S S 5        g ! , (       d  f       g = f)Nrf   r.   rh   ri   rg   r   rj   z#SimpleImputer does not support datar\   rK   )	rM   rp   rP   r_   ry   rz   r   r4   r5   )r1   r$   r;   r2   r@   s        r(   /test_imputation_const_mostf_error_invalid_typesr   ,  s    
 	VVRVVS#&VVS"&&#&VVS#rvv&VVS#s#		
 	A 4G	z	12A  # 
2	1	1s   '*C
C(c           	          [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[        XS	[         R                  S
SS/SU 5        g )N)r   r   r   rZ   )r   rJ   r   rY   )r   rk   rY   r   )r   rJ   rY      )rJ   r   rZ   )rJ   rY   rY   )rk   rY   rY   )rJ   rY   r   rE   rJ   rY   r   )rM   rp   rB   rP   )rw   r;   r<   s      r(   test_imputation_most_frequentr   A  sc     			
	A XX		
F a2661a2CRWr*   markerNAN c           	         [         R                  " X SS/U SU S/U SSU /U SSS//[        S9n[         R                  " / SQ/ S	Q/ S
Q/ SQ/[        S9n[        U SS9nUR	                  U5      R                  U5      n[        XB5        g )Nrf   r.   rh   ri   rg   r   rj   )rh   rf   r.   )rh   ri   ri   )rg   ri   ri   )rh   ri   r   rE   r/   )rM   rp   rq   r   r4   r5   r   r   r;   r<   r@   rA   s        r(   %test_imputation_most_frequent_objectsr   ]  s     	S#&S&#&S#v&S#s#		
 	A XX		
 F 6OLGkk!n&&q)Gw'r*   categoryc                    [         R                  " S5      n[        R                  " S5      nUR	                  X S9n[
        R                  " / SQ/ SQ/ SQ/ SQ/[        S9n[        SS	9nUR                  U5      n[        Xd5        g )
Nrd   ,Cat1,Cat2,Cat3,Cat4
,i,x,
a,,y,
a,j,,
b,j,x,rj   )rf   ir&   )rf   r   r'   )rf   r   r&   )rg   r   r&   rE   rK   r_   ro   ioStringIOread_csvrM   rp   rq   r   rQ   r   r$   rt   r.   dfr<   r@   rA   s          r(   $test_imputation_most_frequent_pandasr   z  st     
		X	&B
FGA	Q	$BXX	/?OLF
 _5G##B'Gw'r*   zX_data, missing_value)rk   r         ?c                 2   [         R                  " SU [        S9nXS'   SnSU< S[        U5      < S3n[        R
                  " [        [        R                  " U5      S9   [        US	US
9nUR                  U5        S S S 5        g ! , (       d  f       g = f)NrX   rj   r   r   r&   fill_value=
 (of type ) cannot be castr\   rF   r0   r1   
fill_value)rM   fullfloatr   r_   ry   rz   reescaper   rQ   )X_datamissing_valuer;   r   r2   r@   s         r(   +test_imputation_constant_error_invalid_typer     s     	e,AdGJJ>D4D3GGWXG	z7);	<(:*
 	a 	 
=	<	<s   "B
Bc                      [         R                  " / SQ/ SQ/ SQ/ SQ/5      n [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[        S	S
SSS9nUR                  U 5      n[	        X15        g )Nr   rJ   rY   r   rl   r   rZ   r   r   r   r   r      r   r   r   )r   rJ   rY   r   )rl   r   rZ   r   )r   r   r   r   )r   r   r   r   r   rF   r   Tr0   r1   r   keep_empty_features)rM   rp   r   rQ   r   )r;   r<   r@   rA   s       r(    test_imputation_constant_integerr     s^    
...-PQAXX|\<NOFJ1RVG ##A&Gw'r*   array_constructorc           	         [         R                  " [         R                  SS[         R                  /S[         R                  S[         R                  /SS[         R                  [         R                  /SSS[         R                  //5      n[         R                  " / SQ/ SQ/ S	Q/ S
Q/5      nU " U5      nU " U5      n[        SSSS9nUR	                  U5      n[        XB5        g )N皙?r   333333??ffffff?      ?)r   r   r   r   )r  r   r  r   )r   r   r   r   )r  r  r   r   rF   r   Tr1   r   r   )rM   rp   rP   r   rQ   r   )r   r;   r<   r@   rA   s        r(   test_imputation_constant_floatr    s     	VVS!RVV$"&&#rvv&266266"#q"&&!		
	A XX	-~?PQF 	!Av&FG ##A&G 1r*   c           	          [         R                  " U SSU /SU SU /SSX /SSS	U //[        S
9n[         R                  " / SQ/ SQ/ SQ/ SQ/[        S
9n[        U SSSS9nUR	                  U5      n[        XB5        g )Nrf   rg   rh   ri   r   r.   r   r   r   rj   )missingrf   rg   r  )rh   r  ri   r  )r   r.   r  r  )r   r   r   r  rF   r  Tr   )rM   rp   rq   r   rQ   r   r   s        r(   test_imputation_constant_objectr	    s     	S#v&&#v&#v&#sF#		
 	A XX,,,&		
 F  	G ##A&Gw'r*   c                    [         R                  " S5      n[        R                  " S5      nUR	                  X S9n[
        R                  " / SQ/ SQ/ SQ/ SQ/[        S9n[        SS	S
9nUR                  U5      n[        Xd5        g )Nrd   r   rj   )r   r   r&   r   )rf   r   r'   r   )rf   r   r   r   )rg   r   r&   r   rF   Tr1   r   r   r   s          r(   test_imputation_constant_pandasr    s}     
		X	&B
FGA	Q	$BXX888,		
 F ZTJG##B'Gw'r*   r;   rk   rJ   c                 &   [        5       R                  U 5      nUR                  S:X  d   e[        5       nUR                  S/S//5        UR                  S:X  d   eUR                  S/[        R                  //5        UR                  S:X  d   eg )Nr   rk   rJ   )r   r4   n_iter_rM   rP   )r;   r@   s     r(   "test_iterative_imputer_one_featurer  
  s      $$Q'G??a GKK!qc
??aKK!rvvh ??ar*   c                     [        SSSS9n U R                  S   n[        S[        US94S[        R
                  " SS94/5      nS	/ S
Q0n[        SSSS9R                  5       n[        X#5      nUR                  X5        g )Nd   皙?)densityr   r@   r0   r   random_stateimputer__strategyrV   rk   )	r   datar   r   r   DecisionTreeRegressorr:   r   r4   )r;   r0   pipeline
parametersYgss         r(   $test_imputation_pipeline_grid_searchr    s    c35AVVAYN^DET//Q?@	
H &'JKJc1d3;;=A	h	+BFF1Lr*   c                     [        SSSSS9n U R                  5       R                  5       n[        SSSS9nUR	                  U5      R                  U5      nSUS	'   [        R                  " X:H  5      (       a   eU R                  5       n[        UR                  S   SSS9nUR	                  U5      R                  U5      nSUR                  S'   [        R                  " UR                  UR                  :H  5      (       a   eU R                  5       R                  5       n[        SSS
S9nUR	                  U5      R                  U5      nSUS	'   [        X5        U R                  5       R                  5       n[        UR                  S   SS
S9nUR	                  U5      R                  U5      nSUR                  S'   [        UR                  UR                  5        U R                  5       n[        UR                  S   SS
S9nUR	                  U5      R                  U5      nSUR                  S'   [        R                  " UR                  UR                  :H  5      (       a   eg )NrZ   g      ?r   r  r  rC   T)r0   r1   r6   r   r   F)r   r6   r:   r   r4   r5   rM   r   r  r   tocsc)X_origr;   r@   Xts       r(   test_imputation_copyr$  )  s   "1aAFF 	A1vDIG	Q	!	!!	$BBtHvvag 	A166!9vDQG	Q	!	!!	$BBGGAJvvaff'(((( 	A1vEJG	Q	!	!!	$BBtHa$ 	A166!9vERG	Q	!	!!	$BBGGAJaffbgg. 	A166!9vERG	Q	!	!!	$BBGGAJvvaff'(((((r*   c                  \   [         R                  R                  S5      n SnSn[        XSU S9R	                  5       nUS:H  n[         R
                  X4'   [        SS9nUR                  U5      n[        XeR                  R                  U5      5        [        SS9R                  U5      n[         R                  " UR                  U5      UR                  R                  U5      :H  5      (       a   eSUl        [        UR                  U5      UR                  R                  U5      5        g )Nr   r  rI   r  r   )max_iterrZ   )rM   rN   r   r   r:   rP   r   rQ   r   initial_imputer_r5   r4   r   r  )r   nri   r;   missing_flagr@   rS   s          r(   !test_iterative_imputer_zero_itersr*  T  s    
))


"CA
AaDsCKKMA6LffAO*G%%a(II77AA!DE *..q1Gvvg''*g.F.F.P.PQR.SSTTTTGOG%%a('*B*B*L*LQ*OPr*   c                  0   [         R                  R                  S5      n SnSn[        XSU S9R	                  5       n[        SSSS9nUR                  U5        UR                  U5        [        SSSS9nUR                  U5        UR                  U5        g )	Nr   r  rY   r  r   rk   )r0   r&  verboserJ   )rM   rN   r   r   r:   r   r4   r5   )r   r(  ri   r;   r@   s        r(   test_iterative_imputer_verboser-  l  s    
))


"CA	AaDsCKKMAa!QGGKKNaa!QGGKKNar*   c                      Sn Sn[         R                  " X45      n[        SSS9nUR                  U5      n[	        XCR
                  R                  U5      5        g )Nr  rY   r   rk   )r0   r&  )rM   r   r   rQ   r   r'  r5   )r(  ri   r;   r@   rS   s        r(   "test_iterative_imputer_all_missingr/  z  sQ    A	A
!Aa!<G%%a(II77AA!DEr*   imputation_order)rN   roman	ascending
descendingarabicc                     [         R                  R                  S5      nSnSnSn[        X#SUS9R	                  5       nSUS S 2S4'   [        SUSS	S
SSSU US9
nUR                  U5        UR                   Vs/ s H  owR                  PM     nn[        U5      UR                  -  UR                  :X  d   eU S:X  a<  [         R                  " US US-
   [         R                  " SU5      :H  5      (       d   eg U S:X  a@  [         R                  " US US-
   [         R                  " US-
  SS5      :H  5      (       d   eg U S:X  a  US US-
   n	XS-
  S  n
X:w  d   eg SU ;   a  [        U5      XCS-
  -  :X  d   eg g s  snf )Nr   r  rI   rJ   r  r   rk   rZ   FT)
r0   r&  n_nearest_featuressample_posteriorskip_complete	min_value	max_valuer,  r0  r  r1  r4  r   rN   ending)rM   rN   r   r   r:   r   rQ   imputation_sequence_feat_idxr   r  n_features_with_missing_r   r   )r0  r   r(  ri   r&  r;   r@   r   ordered_idxordered_idx_round_1ordered_idx_round_2s              r(   'test_iterative_imputer_imputation_orderrB    s    ))


"CA
AHaDsCKKMAAadG)G !'.'C'CD'C!::'CKD{w.'2R2RRRR7"vvk'AE*bii1o=>>>>	X	%vvk'AE*biiAq".EEFFFF	X	%)'AE2)a%'2"999	%	%;81u#5555 
& Es   9E;	estimatorc                    [         R                  R                  S5      nSnSn[        X#SUS9R	                  5       n[        SSXS9nUR                  U5        / nUR                   He  nU b  [        U 5      O[        [        5       5      n[        UR                  U5      (       d   eUR                  [        UR                  5      5        Mg     [        [        U5      5      [        U5      :X  d   eg )Nr   r  rI   r  r   rk   )r0   r&  rC  r  )rM   rN   r   r   r:   r   rQ   r<  r   r   
isinstancerC  appendidr   set)	rC  r   r(  ri   r;   r@   hashestripletexpected_types	            r(   !test_iterative_imputer_estimatorsrL    s     ))


"CA
AaDsCKKMA1	G ! F//(4DO$}:O 	 '++];;;;b**+, 0 s6{s6{***r*   c                  x   [         R                  R                  S5      n SnSn[        XSU S9R	                  5       n[        SSSSU S9nUR                  U5      n[        [         R                  " XSS:H     5      S5        [        [         R                  " XSS:H     5      S5        [        XSS:g     X3S:g     5        g )	Nr   r  rI   r  r   rk   皙?)r0   r&  r9  r:  r  
rM   rN   r   r   r:   r   rQ   r   minr   r   r(  ri   r;   r@   r#  s         r(   test_iterative_imputer_cliprR    s    
))


"CA
AaDsCKKMA1sQTG 
		q	!BBFF21f:&,BFF21f:&,BAvJq&	*r*   c                     [         R                  R                  S5      n SnSn[        XSU S9R	                  5       nSUS S 2S4'   [        SSSS	SS
SSU S9	nUR                  U5      n[        [         R                  " XSS:H     5      S5        [        [         R                  " XSS:H     5      S
5        [        XSS:g     X3S:g     5        g )Nr   r  rI   r  r   rk   rJ   rZ   TrN  rN   )	r0   r&  r6  r7  r9  r:  r,  r0  r  rO  rQ  s         r(   %test_iterative_imputer_clip_truncnormrT    s    
))


"CA
AaDsCKKMAAadG!
G 
		q	!BBFF21f:&,BFF21f:&,BAvJq&	*r*   c                  t   [         R                  R                  S5      n U R                  SS9n[         R                  US   S'   [        SSSU S9nUR                  U5        [         R                  " [        S5       Vs/ s H  o2R                  U5      S   S   PM     sn5      n[        US:  5      (       d   e[        US:*  5      (       d   eUR                  5       UR                  5       pe[        XE-
  U-  S	5      u  pxUS:X  a  US
-  n[        XE-
  U-  S	5      u  pxUS:  d  US:  d   S5       eg g s  snf )N*   )rZ   rZ   )r~   r   r   T)r9  r:  r7  r  r  normg-q=rN  r  z&The posterior does appear to be normal)rM   rN   r   normalrP   r   rQ   rp   r   r5   r   rC   stdr   )	r   r;   r@   _imputationsmusigmaks_statisticp_values	            r(   1test_iterative_imputer_truncated_normal_posteriorr`    s8    ))


#C


AffAaDGsTG !((c
K
1--a03A6
KLK{a    {c!""""  "KOO$5"K$4#=vFLz"K$4#=vFL #3X0XX. Ls   ? D5c                    [         R                  R                  S5      nSnSnUR                  SSX#4S9nUR                  SSX#4S9nSUS S 2S4'   SUS'   [	        SSXS9R                  U5      n[        SU S	9R                  U5      n[        UR                  U5      S S 2S4   UR                  U5      S S 2S4   5        g )
Nr   r  rI   rY   )lowhighr~   rk   r   )r0   r&  rL   r  r/   )	rM   rN   r   randintr   r4   r   r   r5   )r1   r   r(  ri   X_trainX_testr@   initial_imputers           r(   +test_iterative_imputer_missing_at_transformrh    s    
))


"CA
Akkaaqfk5G[[QQaV[4FGAqDMF4L1x	c'l  $1xHLLWUO &!!Q$')B)B6)J1a4)Pr*   c            	         [         R                  R                  S5      n [         R                  R                  S5      nSnSn[        X#SU S9R	                  5       n[        SSSU S9nUR                  U5        UR                  U5      nUR                  U5      n[         R                  " U5      [        R                  " [         R                  " U5      5      :w  d   e[        SSS	S S
U S9n[        SSS	S S
US9n	UR                  U5        U	R                  U5        UR                  U5      n
UR                  U5      nU	R                  U5      n[        X5        [        X5        g )Nr   rk   r  rI   r  r   T)r0   r&  r7  r  Fr2  )r0   r&  r7  r6  r0  r  )rM   rN   r   r   r:   r   r4   r5   rC   r_   approxr   )rng1rng2r(  ri   r;   r@   
X_fitted_1
X_fitted_2imputer1imputer2X_fitted_1aX_fitted_1bs               r(   .test_iterative_imputer_transform_stochasticityrs  '  sL   99  #D99  #DA
AaDtDLLNA 1t$G KKN""1%J""1%J 77:&--
0C"DDDD
  $H  $H LLOLLO$$Q'K$$Q'K##A&JK-K,r*   c                  ^   [         R                  R                  S5      n U R                  SS5      n[         R                  US S 2S4'   [        SU S9n[        SU S9nUR                  U5      R                  U5      nUR                  U5      n[        US S 2SS 24   U5        [        XE5        g )Nr   r  rI   )r&  r  rk   )
rM   rN   r   randrP   r   r4   r5   rQ   r   )r   r;   m1m2pred1pred2s         r(   !test_iterative_imputer_no_missingrz  Y  s    
))


"CcAffAadG	2C	8B	2C	8BFF1I"EQEAaeHe$E!r*   c                  r   [         R                  R                  S5      n SnU R                  US5      nU R                  SU5      n[         R                  " X#5      nU R                  X5      S:  nUR                  5       n[         R                  Xe'   [        SSU S9nUR                  U5      n[        XSS9  g )	Nr   2   rk   r   rZ   r&  r,  r  g{Gz?atol)
rM   rN   r   ru  dotr6   rP   r   rQ   r   )	r   ri   ABr;   nan_mask	X_missingr@   X_filleds	            r(   test_iterative_imputer_rank_oner  g  s    
))


"C
AAAAA
qAxx~#HI&&I13GG$$Y/HHd+r*   rankrY   rZ   c                    [         R                  R                  S5      nSnSnUR                  X 5      nUR                  X5      n[         R                  " XE5      nUR                  X#5      S:  nUR                  5       n[         R                  X'   US-  nUS U n	XbS  n
XS  n[        SSSUS9R                  U	5      nUR                  U5      n[        XS	S
9  g )Nr   F   r   rJ   rZ   r3  rk   )r&  r0  r,  r  r  r~  )rM   rN   r   ru  r  r6   rP   r   r4   r5   r   )r  r   r(  ri   r  r  r  r  r  re  X_test_filledrf  r@   
X_test_ests                 r(   )test_iterative_imputer_transform_recoveryr  v  s    
))


"C
A
AAAvva|Hxx~#HI&&I 	
QAmGRLMr]F\13	c'l  ""6*JMC8r*   c            	      f   [         R                  R                  S5      n SnSnU R                  X5      nU R                  X5      n[         R                  " UR
                  5      n[        U5       H?  n[        U5       H-  nUS S 2Xg-   U-  4==   US S 2U4   US S 2U4   -   S-  -  ss'   M/     MA     U R                  X5      S:  nUR                  5       n	[         R                  X'   US-  nU	S U n
XQS  nXS  n[        SSU S9R                  U
5      nUR                  U5      n[        XSS	S
9  g )Nr   r  rI   rJ   g      ?rk   r}  gMbP?{Gz?)rtolr  )rM   rN   r   rO   r   rR   r   ru  r6   rP   r   r4   r5   r   )r   r(  ri   r  r  r  r   r   r  r  re  r  rf  r@   r  s                  r(   &test_iterative_imputer_additive_matrixr    s$   
))


"CA
A		!A		!Axx H1XqAQ!^$1a41QT7):a(??$   xx~$HI&&I 	
QAmGRLMr]FACHLLWUG""6*JMDtDr*   c                     [         R                  R                  S5      n SnSnU R                  US5      nU R                  SU5      n[         R                  " X45      nU R                  X5      S:  nUR                  5       n[         R                  Xv'   [        SSSSU S	9nUR                  U5      n	[        UR                  5      X(R                  -  :X  d   e[        UR                  SSU S
9nUR                  U5      n
[        XSS9  [        SSSSU S	9nUR                  U5        UR                  UR                  :X  d   eg )Nr   r|  rZ   rk   r   r  r  F)r&  tolr7  r,  r  )r&  r7  r,  r  gHz>r~  )rM   rN   r   ru  r  r6   rP   r   rQ   r   r<  r  r   r4   r&  )r   r(  ri   r  r  r;   r  r  r@   X_filled_100X_filled_earlys              r(   %test_iterative_imputer_early_stoppingr    s+   
))


"C
A	AAAAA
qAxx~#HI&&I$PSG ((3Lw++,OO0CCCC5!RUG **95NLt<!eQSG KK	??g.....r*   c                  b   [        SS9u  pU R                  u  p#SU S S 2S4'   [        R                  R	                  S5      nSn[        U5       HG  nUR                  [        R                  " U5      [        X%-  5      SS9n[        R                  XU4'   MI     [        S	SS
9n[        R                  " 5          [        R                  " S[        5        UR                  X5      n	S S S 5        [        R                   " [        R"                  " W	5      5      (       a   eg ! , (       d  f       N@= f)NT)
return_X_yrk   rY   r   g333333?F)r~   replacerZ   )r6  r7  error)r   rR   rM   rN   r   r   choicer   intrP   r   warningscatch_warningssimplefilterRuntimeWarningrQ   r   r   )
r;   r'   	n_samples
n_featuresr   missing_ratefeat
sample_idxr@   X_fills
             r(   $test_iterative_imputer_catch_warningr    s     D)DAGGI AadG ))


"CLj!ZZIIi s9+C'De   

 !ffd
	 " !dKG		 	 	"g~6&&q, 
# vvbhhv&''''' 
#	"s   9-D  
D.z$min_value, max_value, correct_outputr  )r   rZ   rI   )r     i,  r   rI   r  )scalarszNone-defaultinflistszlists-with-inf)idsc                 ^   [         R                  R                  S5      R                  SS5      n[	        XS9nUR                  U5        [        UR                  [         R                  5      (       a)  [        UR                  [         R                  5      (       d   eUR                  R                  S   UR                  S   :X  a*  UR                  R                  S   UR                  S   :X  d   e[        USS S 24   UR                  5        [        USS S 24   UR                  5        g )Nr   rI   rY   r9  r:  rk   )rM   rN   r   rO   r   r4   rE  
_min_valuendarray
_max_valuerR   r   )r9  r:  correct_outputr;   r@   s        r(   )test_iterative_imputer_min_max_array_liker    s    $ 			a &&r1-AHGKKNg(("**55*BJJ; ;   $$Q'1771:5  #qwwqz1  N1a4('*<*<=N1a4('*<*<=r*   zmin_value, max_value, err_msg)r  r   min_value >= max_value.r  )r  r  r   z_value' should be of shape)r   rZ   rZ   c                     [         R                  R                  S5      n[        XS9n[        R                  " [
        US9   UR                  U5        S S S 5        g ! , (       d  f       g = f)NrI   rY   r  r\   )rM   rN   r   r_   ry   rz   r4   )r9  r:  r2   r;   r@   s        r(   *test_iterative_imputer_catch_min_max_errorr    sG     			!AHG	z	1A 
2	1	1s   A
A+zmin_max_1, min_max_2irl   zNone-vs-infzScalar-vs-vectorc           	         [         R                  " [         R                  SSS/S[         R                  [         R                  S/SS[         R                  S/[         R                  SS[         R                  //5      n[         R                  " [         R                  S[         R                  S/SS[         R                  [         R                  /[         R                  SSS//5      n[        U S   U S   SS	9n[        US   US   SS	9nUR	                  U5      R                  U5      nUR	                  U5      R                  U5      n[        US S 2S4   US S 2S4   5        g )
NrJ   rk   rI   r   rY   rl   rZ   r   )r9  r:  r  )rM   rp   rP   r   r4   r5   r   )	min_max_1	min_max_2re  rf  ro  rp  X_test_imputed1X_test_imputed2s           r(   4test_iterative_imputer_min_max_array_like_imputationr    s.    hhVVQ1#2661VVQ266"		
G XX
&&!RVVQ	!Q!7"&&!R9KLF  A,)A,QH  A,)A,QH ll7+55f=Oll7+55f=OOAqD)?1a4+@Ar*   r8  TFc                    [         R                  R                  S5      n[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " [         R                  SSS/[         R                  SS	S/[         R                  S	S
S	//5      n[        SXS9nUR                  U5      R                  U5      nU (       a/  [        US S 2S4   [         R                  " US S 2S4   5      5        g [        US S 2S4   / SQSS9  g )Nr   )rZ   rJ   rJ   rk   )rI   rk   rJ   r   )rY   rk   rk   rk   )r   rl   rJ   rJ   rJ   rl   rZ   rk   rI   rC   )rL   r8  r  )   r      g-C6?)r  )
rM   rN   r   rp   rP   r   r4   r5   r   rC   )r8  r   re  rf  r@   r  s         r(   'test_iterative_imputer_skip_non_missingr  0  s    
 ))


"Chhm\<PQGXX1a(2661a*;bffaQ=OPQF}G W%//7J
1a4("'''!Q$-*@A
1a4(+DAr*   
rs_imputer)seedrs_estimatorc                      " S S5      nU" US9n[        U S9n[        R                  " S5      nUR                  U5        UR                  U:X  d   eg )Nc                   &    \ rS rSrS rS rS rSrg)Ctest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimatoriF  c                     Xl         g r#   r  )selfr  s     r(   __init__Ltest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.__init__G  s     ,r*   c                     U $ r#    )r  r   kgardss      r(   r4   Gtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.fitJ  s    Kr*   c                 H    [         R                  " UR                  S   5      $ )Nr   )rM   r   rR   )r  r;   s     r(   predictKtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.predictM  s    88AGGAJ''r*   r  N)__name__
__module____qualname____firstlineno__r  r4   r  __static_attributes__r  r*   r(   ZeroEstimatorr  F  s    	-		(r*   r  r  r  )r   rM   r   r4   r  )r  r  r  rC  r@   re  s         r(   ,test_iterative_imputer_dont_set_random_stater  C  sP    ( ( <8IJ7GhhwGKK!!\111r*   zX_fit, X_trans, params, msg_errr   missing-onlyauto)featuresr   zBhave missing values in transform but have no missing values in fitrf   rg   rh   rj   z1MissingIndicator does not support data with dtypec                     [        SS9nUR                  " S0 UD6  [        R                  " [        US9   UR                  U 5      R                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r  r\   r  )r   
set_paramsr_   ry   rz   r4   r5   )X_fitrA   paramsmsg_err	indicators        r(   test_missing_indicator_errorr  W  sP    $ !3I"6"	z	1e&&w/ 
2	1	1s   !A
A-c                     S[         R                  4[         R                  [         R                  4S[         R                  4/n [         R                  /[
        -   [        -   [        -   [        -   [        -   n[        X5       VVVs/ s H'  u  nu  p4US:X  a  U[         R                  La  M#  X#U4PM)     snnn$ s  snnnf )Nr   r   )rM   int32rP   float64rp   r   r    r   r!   r   r   )missing_values_dtypes	arr_typesarr_typer0   r$   s        r(   !_generate_missing_indicator_casesr  o  s    ]RVVRZZ,@2rxx.Q	

	
	 	 		
 	  292
2
-H-~ !#(@	 	*5)2
  s   "B:-B:zarr_type, missing_values, dtypez,param_features, n_features, features_indicesr   rk   rJ   r   c                    [         R                  " X S/SSU //5      n[         R                  " X S// SQ/5      n[         R                  " / SQ/ SQ/5      n[         R                  " / SQ/ SQ/5      n	U" U5      R                  U5      nU" U5      R                  U5      nUR                  U5      nU	R                  U5      n	[        XSS	9n
U
R	                  U5      nU
R                  U5      nUR                  S   U:X  d   eUR                  S   U:X  d   e[        U
R                  U5        [        XS S 2U4   5        [        XS S 2U4   5        UR                  [        :X  d   eUR                  [        :X  d   e[        U[         R                  5      (       d   e[        U[         R                  5      (       d   eU
R                  S
S9  U
R	                  U5      nU
R                  U5      nUR                  [        :X  d   eUR                  [        :X  d   eUR                  S:X  d   eUR                  S:X  d   e[        UR!                  5       U5        [        UR!                  5       U5        g )Nrk   rl   rJ   rl   r  rI   )rk   rk   r   )r   r   rk   r   F)r0   r  r   Tr   csc)rM   rp   astyper   rQ   r5   rR   r   	features_r   r$   boolrE  r  r  r8   r:   )r0   r  r$   param_featuresr  features_indicesr  rA   X_fit_expectedX_trans_expectedr  
X_fit_maskX_trans_maskX_fit_mask_sparseX_trans_mask_sparses                  r(   test_missing_indicator_newr    sI    HH~q9Aq.;QRSEhh;[IJGXXy)45NxxI 67 UO""5)Ew&&u-G#**51N'..u5 %uI ((/J&&w/LA*,,,a J...y**,<=Jq2B/B CDL16F3F"GHt###%%%j"**----lBJJ////%!//6#--g6""d***$$,,,##u,,,%%...%--/<'//1<@r*   r  c                    Sn[         R                  " XS/SUS//5      n[         R                  " XS// SQ/5      nU " U5      nU " U5      n[        US9n[        R                  " [
        SS9   UR                  U5        S S S 5        UR                  U5        [        R                  " [
        SS9   UR                  U5        S S S 5        g ! , (       d  f       NS= f! , (       d  f       g = f)	Nr   rk   rl   rJ   r  r  z"Sparse input with missing_values=0r\   )rM   rp   r   r_   ry   rz   rQ   r5   )r  r0   r  rA   X_fit_sparseX_trans_sparser  s          r(   5test_missing_indicator_raise_on_sparse_with_missing_0r    s     NHH~q9A~q;QRSEhh;[IJG E?Lg&N ?I	z)M	N- 
O E"	z)M	NN+ 
O	N	 
O	N 
O	Ns   .C2C
C
C,param_sparse)TFr  zarr_type, missing_valuesc                    [         R                  " XS/SUS//5      n[         R                  " XS// SQ/5      nU " U5      R                  [         R                  5      nU " U5      R                  [         R                  5      n[	        XS9nUR                  U5      nUR                  U5      nUSL a%  UR                  S:X  d   eUR                  S:X  d   eg US:X  aI  US	:X  aC  [        U[         R                  5      (       d   e[        U[         R                  5      (       d   eg US
L aC  [        U[         R                  5      (       d   e[        U[         R                  5      (       d   eg [        R                  " U5      (       a%  UR                  S:X  d   eUR                  S:X  d   eg [        U[         R                  5      (       d   e[        U[         R                  5      (       d   eg )Nrk   rl   rJ   r  )r0   r   Tr  r  r   F)rM   rp   r  r  r   rQ   r5   r8   rE  r  r   r9   )r  r0   r  r  rA   r  r  r  s           r(   #test_missing_indicator_sparse_paramr     s   " HH~q9A~q;QRSEhh;[IJGUO""2::.Ew&&rzz2G TI((/J&&w/Lt  E)))""e+++		Na$7*bjj1111,

3333		*bjj1111,

3333??5!!$$---&&%///j"**5555lBJJ7777r*   c                      [         R                  " / SQ/ SQ/[        S9n [        SSS9nUR	                  U 5      n[        U[         R                  " / SQ/ SQ/5      5        g )	Nrf   rg   rh   )rg   rh   rf   rj   rf   r   )r0   r  )TFF)FFT)rM   rp   rq   r   rQ   r   )r;   r  rA   s      r(   test_missing_indicator_stringr    sM    
/?36BA eDI%%a(Gw*>@T)U VWr*   zX, missing_values, X_trans_exp)rg   rg   TF)rg   rg   FT)r   r   TF)r   r   FTc                 r    [        [        USS9[        US95      nUR                  U 5      n[	        XB5        g )NrE   r/   r  )r   r   r   rQ   r   )r;   r0   X_trans_exptransrA   s        r(   #test_missing_indicator_with_imputerr    s:    4 ^oN7E !!!$Gw,r*   imputer_constructorz.imputer_missing_values, missing_value, err_msgNaNzInput X contains NaN)z-1r   z(types are expected to be both numerical.c                    [         R                  R                  S5      nUR                  SS5      nX%S'   U " US9n[        R
                  " [        US9   UR                  U5        S S S 5        g ! , (       d  f       g = f)NrV  rI   r   r  r\   )rM   rN   r   rO   r_   ry   rz   rQ   )r  imputer_missing_valuesr   r2   r   r;   r@   s          r(   (test_inconsistent_dtype_X_missing_valuesr  #  sb     ))


#C		"bAdG!1GHG	z	1a  
2	1	1s   A00
A>c                      [         R                  " SS/SS//5      n [        SSS9nUR                  U 5      nUR                  S   S:X  d   eg )Nrk   r  r   r  r0   r   )rM   rp   r   rQ   rR   )r;   mir#  s      r(   !test_missing_indicator_no_missingr  :  sQ     	1a&1a&!"A	>"	EB			!	B88A;!r*   c                     U " / SQ/ SQ/ SQ/5      n[        SSS9nUR                  U5      nUR                  UR                  5       :X  d   eg )Nr  )rk   rJ   r   )rJ   r   rk   r   rk   r  )r   rQ   nnzsum)rG   r;   r  r#  s       r(   /test_missing_indicator_sparse_no_explicit_zerosr  E  sI     	y)Y78A	5	;B			!	B66RVVXr*   c                     [         R                  " SS/SS//5      nU " 5       nUR                  U5        UR                  b   eg )Nrk   )rM   rp   r4   
indicator_)r  r;   r@   s      r(   test_imputer_without_indicatorr  Q  sB    
1a&1a&!"A!#GKKN%%%r*   c                    U " [         R                  SS/S[         R                  S/SS[         R                  // SQ/5      n[         R                  " / SQ/ SQ/ S	Q/ S
Q/5      n[        [         R                  SS9nUR	                  U5      n[
        R                  " U5      (       d   eUR                  UR                  :X  d   e[        UR                  5       U5        g )Nrk   rZ   rJ   r   rY   )rk   rJ   r   )      @r         @r           r  )       @r  r   r  r   r  )g      @r  r  r  r  r   )r   r  g      "@r  r  r  T)r0   add_indicator)
rM   rP   rp   r   rQ   r   r9   rR   r   r:   )r  X_sparser<   r@   rA   s        r(   2test_simple_imputation_add_indicator_sparse_matrixr  Z  s    
 "&&!Q!RVVQ!QSTHXX****		
F 266FG##H-G??7####==FLL(((GOO%v.r*   zstrategy, expected)rE   rg   )rF   r   c                     SS/S[         R                  //n[         R                  " SS/SU//[        S9n[	        U S9nUR                  U5      n[        XS5        g )Nrf   rg   rh   rj   rK   )rM   rP   rp   rq   r   rQ   r   )r1   expectedr;   r<   r@   rA   s         r(   "test_simple_imputation_string_listr"  q  sY     sc266]#AXXSzC?36BFX.G##A&Gw'r*   zorder, idx_orderr2  )rY   rl   rJ   r   rk   r3  )rk   r   rJ   rl   rY   c                    [         R                  R                  S5      nUR                  SS5      n[         R                  US S2S4'   [         R                  US S2S4'   [         R                  US S2S	4'   [         R                  US S
2S4'   [
        R                  " [        5         [        SU SS9R                  U5      nUR                   Vs/ s H  oUR                  PM     nnXa:X  d   e S S S 5        g s  snf ! , (       d  f       g = f)NrV  r  rZ   r|  rk      r      rJ   rI   rl   )r&  r0  r  )rM   rN   r   ru  rP   r_   r`   r
   r   r4   r<  r=  )order	idx_orderr   r;   trsr&   idxs          r(   test_imputation_orderr*    s     ))


#CaAAcrc1fIAcrc1fIAcrc1fIAcrc1fI	(	)EPQRVV
 $'#;#;<#;azz#;< 
*	) =	 
*	)s   ()C>C9&	C>9C>>
Dr   c           	      z   [         R                  " SU SS// SQSSU S/SSSU //5      n[         R                  " / S	QS
SU S/SU SS/SSS
U //5      n[         R                  " SU SS/U SX /S
U SU /U SU S//5      n[         R                  " / SQU S
U S// SQU SU S
//5      n[        U SSS9nUR                  U5      nUR	                  U5      nUR                  U5      nUR	                  U5      n	[        Xq5        [        X5        X44 H0  n
UR                  U
5      nUR	                  U5      n[        X5        M2     g )Nr   rY   r   rl   r   rZ   rl   r   r   r   r   )rZ   rl   rJ   rk   rJ   rk   rl   rZ   )rk   rk   rk   rY   )rJ   rY   rY   rl   rC   T)r0   r1   r  )rM   rp   r   rQ   inverse_transformr5   r   )r   X_1X_2X_3X_4r@   	X_1_transX_1_inv_trans	X_2_transX_2_inv_transr;   rA   X_inv_transs                r(   (test_simple_imputation_inverse_transformr7    s    ((q"%="%1m$		
C ((=!$q!$1m$		
C ((q!$A}<q-0A}a0		
C ((A}a0A}a0		
C $vTG %%c*I--i8M!!#&I--i8M}*}*Z''*//8;* r*   c           	      .   [         R                  " SU SS// SQSSU S/SSSU //5      n[        U S	S
9nUR                  U5      n[        R
                  " [        SUR                   S3S9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   rY   r   r,  r   r   r   r   rC   r/   zGot 'add_indicator='r\   )	rM   rp   r   rQ   r_   ry   rz   r  r-  )r   r.  r@   r2  s       r(   3test_simple_imputation_inverse_transform_exceptionsr:    s    
((q"%="%1m$		
C =6JG%%c*I	/0E0E/FaH
 	!!),
 
 
s   +B
Bz)expected,array,dtype,extra_value,n_repeatextra_valuer  most_frequent_value)r<  r<  valuer9  min_valuevalue)r9  r9  r=  r   rk   rJ   rY   )rk   rk   rJ   )r%  r%  rk   )rk   rk   r%  c                 L    U [        [        R                  " XS9X45      :X  d   eg )Nrj   )r   rM   rp   )r!  rp   r$   r;  n_repeats        r(   test_most_frequentrB    s+    , ~
$k   r*   zexpected,array)Nrf   rk   1c                 X    U [        [        R                  " U[        S9SS5      :X  d   eg)zfCheck the tie breaking behavior of the most frequent strategy.

Non-regression test for issue #31717.
rj   Nr   )r   rM   rp   rq   )r!  rp   s     r(   test_most_frequent_tie_objectrE    s&    " ~bhhuF&CT1MMMMr*   rL   c                 8   [         R                  " S[         R                  S/S[         R                  [         R                  //5      n[        U SS9nUR	                  U5      n[        USS2S4   S5        UR                  U5      n[        USS2S4   S5        g)zCheck the behaviour of the iterative imputer with different initial strategy
and keeping empty features (i.e. features containing only missing values).
rk   rJ   rY   T)rL   r   Nr   )rM   rp   rP   r   rQ   r   r5   )rL   r;   r@   rS   s       r(   *test_iterative_imputer_keep_empty_featuresrG    s     	1bffa.1bffbff"567A)tG %%a(IIadOQ'!!!$IIadOQ'r*   c                      [         R                  " / SQ/ SQ/ SQ/ SQ/5      n Sn[        SSUSS	S
9nUR                  U 5        [	        UR
                  R                  U5        g)z<Check that we propagate properly the parameter `fill_value`.r   r   r   r   r  r   rF   r   T)r0   rL   r   r&  r   N)rM   rp   r   rQ   r   r'  r7   )r;   r   r@   s      r(   *test_iterative_imputer_constant_fill_valuerI  $  s]    
...-PQAJ# G !w//;;ZHr*   c            	         [         R                  " SS[         R                  [         R                  /SS[         R                  S/SS[         R                  [         R                  /SS	[         R                  S
//5      n [         R                  * [         R                  * [         R                  * S/n[         R                  [         R                  [         R                  S/n[	        UUSS9R                  U 5      n[         R                  " U SSS9nUR                  UR                  :X  d   e[         R                  " U[         R                  " U5         5      [        R                  " S5      :X  d   e[         R                  " U[         R                  " U5         5      [        R                  " S5      :X  d   e[         R                  " SS[         R                  [         R                  /SSS[         R                  /SS[         R                  [         R                  /SS	S
[         R                  //5      n [         R                  * [         R                  * S[         R                  * /n[         R                  [         R                  S[         R                  /n[	        UUSS9R                  U 5      nU SS2SS24   nUR                  UR                  :X  d   e[         R                  " U[         R                  " U5         5      [        R                  " S5      :X  d   e[         R                  " U[         R                  " U5         5      [        R                  " S5      :X  d   eg)zCheck that we properly apply the empty feature mask to `min_value` and
`max_value`.

Non-regression test for https://github.com/scikit-learn/scikit-learn/issues/29355
rk   rJ   rl   rZ   r   r   r   rI   r  r  F)r9  r:  r   r   g      @NrY   )rM   rp   rP   r  r   rQ   deleterR   rP  r   r_   rj  r   )r;   r9  r:  rS   X_without_missing_columns        r(   1test_iterative_imputer_min_max_value_remove_emptyrM  4  s    	266266"2661266266"RVVR 		
	A &&266'BFF7A.I+I ! mA	   "yyAA6??6<<<<<66)BHH%=>?@FMMRSDTTTT66)BHH%=>?@FMMRSDTTTT 	266266"1bff266266"R 		
	A &&266'30IBFF+I ! mA	   !BQBx??6<<<<<66)BHH%=>?@FMMRUDVVVV66)BHH%=>?@FMMRSDTTTTr*   r   c                    [         R                  " S[         R                  S/S[         R                  [         R                  //5      n[        U S9nS H}  n[	        X#5      " U5      nU (       a1  UR
                  UR
                  :X  d   e[        USS2S4   S5        ML  UR
                  UR
                  S   UR
                  S   S-
  4:X  a  M}   e   g)z>Check the behaviour of `keep_empty_features` for `KNNImputer`.rk   rJ   rY   )r   rQ   r5   Nr   )rM   rp   rP   r   getattrrR   r   )r   r;   r@   methodrS   s        r(   $test_knn_imputer_keep_empty_featuresrR  k  s     	1bffa.1bffbff"567A-@AG0G,Q/	??agg---yA2??qwwqz1771:>&BBBB 1r*   c            	         [         R                  " S5      n U R                  SU R                  / SQSS905      n[	        U R
                  SSS9n[        UR                  U5      [        R                  " S	/S/S
//[        S95        U R                  SU R                  / SQSS905      n[	        SSS9n[        UR                  U5      [        R                  " S	/S
/S//[        S95        U R                  SU R                  / SQSS905      n[	        U R
                  SSS9n[        UR                  U5      [        R                  " S/S/S//SS95        [	        [        R                  SSS9n[        UR                  U5      [        R                  " S/S/S//SS95        U R                  SU R                  / SQSS905      n[	        U R
                  SS9n[        UR                  U5      [        R                  " S/S/S/S//SS95        U R                  SU R                  / SQSS905      n[	        U R
                  SS9n[        UR                  U5      [        R                  " S/S/S//SS95        U R                  SU R                  / SQSS905      n[	        U R
                  SSS9n[        UR                  U5      [        R                  " S/S/S//SS95        U R                  SU R                  / S QSS905      n[	        U R
                  SS9n[        UR                  U5      [        R                  " S/S!/S!/S//SS95        g )"Nrd   feature)abcNdestringrj   rF   nar   rU  rV  )rU  rV  fghok)r   r1   rY  )rk   NrY   Int64r   rk   rY   r  )rk   NrJ   rY   rD   r/   rJ   )rk   NrJ   rC   r  )r   Nr  g       r   r  )r   Nr  r  r  )r_   ro   rr   Seriesr   NAr)   rQ   rM   rp   rq   r,   rP   )rt   r   r@   s      r(   test_simple_impute_pd_nar^  {  s   			X	&B 
y")),?x)"PQ	RB255:RVWG&b!288eWtftf,EV#T
 
y")),@)"QR	SBtjAG&b!288eWtfug,Ff#U
 
y"))L)"HI	JB255:RTUG#b!288aS2$,<I#N
 266JSUVG#b!288aS2$,<I#N
 
y"))O7)"KL	MB2558DG#b!288aS1#sQC,@	#R
 
y"))L)"HI	JB2556BG#b!288aS3%!,=Y#O
 
y")),<I)"NO	PB255:RVWG#b!288cUTFSE,B)#T
 
y")),A)"ST	UB2558DG#b!
3%#u-Y?r*   c                      [         R                  " S5      n [        R                  nU R	                  XSU/SUSS/// SQS9n[        US9R                  U5      nUR                  5       n/ S	Qn[        XT5        g
)zDCheck that missing indicator return the feature names with a prefix.rd   rk   rl   rJ   rI   re   rm   r  )missingindicator_amissingindicator_bmissingindicator_dN)	r_   ro   rM   rP   rr   r   r4   get_feature_names_outr   )rt   r0   r;   r  ru   expected_namess         r(   (test_missing_indicator_feature_names_outre    s    			X	&BVVN
Q?2&	
 % 	 	A !?CCAFI335MWN~5r*   c                      SS/SS/SS//n [        SS9R                  U 5      nUR                  [        R                  [        R                  //5      nUR
                  [        :X  d   e[        USS//5        g)zcCheck transform uses object dtype when fitted on an object dtype.

Non-regression test for #19572.
rf   rg   rh   rE   rK   N)r   r4   r5   rM   rP   r$   rq   r   )r;   imp_frequentrA   s      r(    test_imputer_lists_fit_transformrh    ss     sc3Z#s,A /:>>qAL$$rvvrvv&6%78G==F"""w#s-r*   
dtype_testc                    [         R                  " SS[         R                  /[         R                  SS// SQ/[         R                  S9n[	        5       R                  U5      n[         R                  " [         R                  [         R                  [         R                  //U S9nUR                  U5      nUR                  U :X  d   eg)zACheck transform preserves numeric dtype independent of fit dtype.r  g333333@r  )g@rJ   rk   rj   N)rM   asarrayrP   r  r   r4   r5   r$   )ri  r;   imprf  rA   s        r(   .test_imputer_transform_preserves_numeric_dtyperm    s     	


sBFF	bffc3/=RZZ	A /

a
 CZZ"&&"&&"&&12*EFmmF#G==J&&&r*   
array_typerp   r   c                 \   [         R                  " [         R                  S/[         R                  S/[         R                  S//5      n[        X 5      nSn[	        SUUS9nS H  nUR                  S5      (       a=  U(       d6  S	n[        R                  " [        US
9   [        XE5      " U5      nSSS5        O[        XE5      " U5      nWR                  UR                  :X  d   eU S:X  a  USS2S4   R                  5       OUSS2S4   n[        X5        M     g! , (       d  f       N`= f)zCheck the behaviour of `keep_empty_features` with `strategy='constant'.
For backward compatibility, a column full of missing values will always be
fill and never dropped.
rJ   rY   r   rI   rF   r  rO  r4   z7`strategy="constant"`, empty features are not dropped. r\   Nr   r   )rM   rp   rP   r   r   
startswithr_   r`   FutureWarningrP  rR   r:   r   )	rn  r   r;   r   r@   rQ  warn_msgrS   constant_features	            r(   0test_simple_imputer_constant_keep_empty_featuresrt    s    	2661+{RVVQK89A1)AJ/G 1U##,?PHm8<#G4Q7	 =<  03I!''))))3x)?IadO##%YqRSt_ 	 	+8 1 =<s   D
D+	c                    [         R                  " [         R                  S/[         R                  S/[         R                  S//5      n[        X15      n[	        XS9nS H  n[        XE5      " U5      nU(       aP  UR                  UR                  :X  d   eUS:X  a  USS2S4   R                  5       OUSS2S4   n[        US5        Mk  UR                  UR                  S   UR                  S	   S	-
  4:X  a  M   e   g)
zQCheck the behaviour of `keep_empty_features` with all strategies but
'constant'.
rJ   rY   r   r  rO  r   Nr   rk   )	rM   rp   rP   r   r   rP  rR   r:   r   )r1   rn  r   r;   r@   rQ  rS   rs  s           r(   'test_simple_imputer_keep_empty_featuresrv    s     	2661+{RVVQK89A1)AXWG0G,Q/	??agg----78-C	!Q$'')STVWSW  /3??qwwqz1771:>&BBBB 1r*   c           
      L   [         R                  " / SQSS[         R                  /[         R                  S[         R                  // SQ/ SQ[         R                  SS//5      n[         R                  " / SQ/ SQ/ S	Q/ SQ/ SQ/ S
Q/5      n[        [         R                  [         R                  S9nUR                  U5      n[        XB5        [        [         R                  [         R                  S9nUR                  U " U5      5      n[        UR                  5       U5        g )N)r   r   r   333333@r  r  )r  r  r  )g@r  r  皙?)rx  r  r   )r  r  r   )r  ry  ry  r/   )rM   rp   rP   r   rP  rQ   r   r:   )rw   r;   r<   r@   rA   s        r(   test_imputation_customrz    s    
#rvvVVS"&&!VVS#	
		A XX	
	F 266BFFCG##A&Gw' 266BFFCG##M!$45Gw(&1r*   c                     Sn [         R                  " / SQ/ SQ/[         R                  S9n[        SU SS9nSU < S	[	        U 5      < S
3n[
        R                  " [        [        R                  " U5      S9   UR                  U5        SSS5        [         R                  " / SQ/ SQ/[         R                  S9nUR                  U5        SUR                  R                  < S
3n[
        R                  " [        [        R                  " U5      S9   UR                  U5        SSS5        [         R                  " S5      SS/nUR                  [         R                   5      nU H;  n [        SU SS9nUR#                  U5      nUR                  UR                  :X  a  M;   e   g! , (       d  f       GN%= f! , (       d  f       N= f)zCheck that we raise a proper error message when we cannot cast the fill value
to the input data type. Otherwise, check that the casting is done properly.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/28309
r  r?  )rJ   rY   rl   rj   rF   rJ   )r1   r   r0   r   r   r   r\   Nz%The dtype of the filling value (i.e. rk   )rM   rp   int64r   r   r_   ry   rz   r   r   r4   r  r7   r$   r5   r  float32rQ   )r   X_int64r@   r2   	X_float64fill_value_list	X_float32rA   s           r(   /test_simple_imputer_constant_fill_value_castingr  <  sn    Jhh	9-RXX>G
1G J>D4D3GGWXG	z7);	<G 
= )Y/rzzBIKK	
/0C0C0I0I/L M 	  
z7);	<'" 
= zz#Q/O  ,I%
Jq
 ''	2}}	/// &# 
=	< 
=	<s   8F(F:(
F7:
Gc                    [         R                  " [         R                  SS/S[         R                  S/SS[         R                  //5      n[        U SSS9n[        U SS	S9n[	        UR                  U5      UR                  U5      5        g
)a  Check the behaviour of `keep_empty_features` with no empty features.

With no-empty features, we should get the same imputation whatever the
parameter `keep_empty_features`.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/29375
r   rk   rJ   rY   rl   rZ   FrL   r   r   TN)rM   rp   rP   r   r   rQ   )r1   r;   imputer_drop_empty_featuresimputer_keep_empty_featuress       r(   (test_iterative_imputer_no_empty_featuresr  c  s     	2661a.1bffa.1a.ABA"2!aU# #3!aT# #11!4#11!4r*   rf  )rk   rJ   rY   rl   )rZ   r   r   r   r   r   r   c                    [         R                  " [         R                  [         R                  SS/[         R                  S[         R                  S/[         R                  SS[         R                  //5      n[        U SSS9nUR	                  U5      nUR                  U5      n[        U SS	S9nUR	                  U5      nUR                  U5      n[        XGS
S
2SS
24   5        [        US
S
2S4   S5        UR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eg
)a  Check the behaviour of `keep_empty_features` in the presence of empty features.

With `keep_empty_features=True`, the empty feature will be imputed with the value
defined by the initial imputation.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/29375
r   rk   rJ   rY   rl   rZ   Fr  TN)rM   rp   rP   r   rQ   r5   r   rR   )	r1   rf  re  r  X_train_drop_empty_featuresX_test_drop_empty_featuresr  X_train_keep_empty_featuresX_test_keep_empty_featuress	            r(   *test_iterative_imputer_with_empty_featuresr  }  s3   $ hh
&&"&&!Q	"&&!RVVQ!7"&&!Q9OPG #3!aU# #>"K"KG"T!<!F!Fv!N"2!aT# #>"K"KG"T!<!F!Fv!N/QPQPRU1ST/15q9&,,Q/3M3S3STU3VVVV&,,Q/3M3S3STU3VVVVr*   )r   r   r  	itertoolsr   numpyrM   r_   scipyr   scipy.statsr   sklearnr   sklearn.datasetsr   sklearn.dummyr	   sklearn.exceptionsr
   sklearn.experimentalr   sklearn.imputer   r   r   r   sklearn.impute._baser   sklearn.linear_modelr   r   r   sklearn.model_selectionr   sklearn.pipeliner   r   sklearn.random_projectionr   sklearn.utils._testingr   r   r   r   r   sklearn.utils.fixesr   r   r   r    r!   r)   r,   rB   markparametrizerU   rb   rv   r{   r   r   r   r   rq   strr   r   r$   r   r   rP   r   r   r   r   rk  r  r	  r  r  r  r$  r*  r-  r/  rB  rL  rR  rT  r`  rh  rs  rz  r  r  r  r  r  rp   r  r  r  r  r  rN   r   r  r  r  r  r  r   r   r  r  r  r  r  r  r  r"  r*  r7  r:  r  rB  rE  rG  rI  rM  rR  r^  re  rh  r}  r  rm  rt  rv  rz  r  r  r  r  r*   r(   <module>r     s   	 	        * ( 1 : X X / F F 0 1 ;  

$=N %TU.9& : V&  %HI J %HI J2 %TU.9 : VFD .9B
 :B
J .9 :D fh%784"56! 7 9! fh%78&+!67! 8 9! j/%BC3rxx}"EF$ G D$& .9X :X6 D"&&%Q#?@( A(8 6:"67( 8(& 06C=2IJ! K! (  ,n

|.KL2 M2: D"&&%Q#?@( A(F 6:"67( 8(0 aSzQC"&&?;<  = &%)VQ0F P"6"6J $(-/=?GIV++2+ +0YB %HI J,/-d", !Q(9 )90E4/<(2 *	
CA37SEAI./0	tRXXy1}rvvhl;<=
&&"&&"((bffWIMBFF8a<#@AB	orxxo0N'OP"&&"#rvvHHrBFF7B'#sBFF);<=	

 	F  >>$ #+	"&&34
a-!=>	c3Z!=>	 TlbffWbff%&#rcUQYq4I(JK	*+  
B
B0 4-8B 9B$ a1F1FA1F1N'OP$2993H3Ha3H3P)QR2 S Q2$ % HHr1g1v&'HHr1g2w'('6:P		
 HHsCj3*-S9HHsCj3*-S9?		
"0#"0& %'H'J 2a),-q"((9:M/NO)A	)AX ^#n4~EV,	,* )>?hh]O
  	
 VVH	
	
8 @8:X $ HHsCj3*-V<HH-/FGvV	
 HHrvvsmc266]34FFHH-/FGH	
 HHrvvsmc266]36BFFHH-/FGvV	
 HHtSkC;/v>HH-/FGvV	
!2-32- .@P0QR4	./>! S! .9 : .@P0QR& S& ^#n4~EV/	/& 13PQ(( ?#lO%DE 	 " 2rvv,76+ 86+r 2rvv,7- 8-$ / 
B!C	
 
{,-vsA>	963J	YR#	
IsB"	[#r1%	
JR#!*+* 	sCj	
QF	c{	ay	~	
QH	
S!HNN G(("I 4Un .u>C ?C9x6&
. 

BJJ'?@	' A	' ':;.u>9 ? <9: ':;%HI.u>C ? J <C( .92 :2B$0N %TU V2 %TU
,-.
2661a#bffaA%678
1aBFF#aArvv%678W VWr*   