
    >[g(                    J   d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZ d dlmZ d dlmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d Z4d Z5d Z6ejn                  jq                  dg d      ejn                  jq                  de2      d               Z9ejn                  jq                  dg d      d        Z:ejn                  jq                  dg d      d        Z;ejn                  jq                  dg d      ejn                  jq                  de1      d               Z<d Z=d Z>ejn                  jq                  de1      d         Z?ejn                  jq                  de1      d!        Z@ejn                  jq                  dd"d#g      ejn                  jq                  d$deAeBg      d%               ZCejn                  jq                  dd"d#g      ejn                  jq                  d&d'd(g      d)               ZDejn                  jq                  dd*d+g      ejn                  jq                  d$eB ej                  d,       ej                  d-      g      d.               ZFejn                  jq                  de1      d/        ZGejn                  jq                  d0dej                  d1d2d g      d3        ZIejn                  jq                  d$eAd4g      d5        ZJejn                  jq                  d6d7d8ej                  fg      d9        ZKd: ZLejn                  jq                  d;e2ej                  gz         d<        ZNejn                  jq                  d0dej                  d1d2d g      d=        ZOejn                  jq                  d$eAd4g      d>        ZPejn                  jq                  d?d@gdAggd@gej                  ggg      dB        ZQdC ZRdD ZSdE ZTdF ZUdG ZVejn                  jq                  dHg dI      dJ        ZWejn                  jq                  dKd e        e        e        e        g      dL        ZXdM ZYdN ZZdO Z[ejn                  jq                  dg d      dP        Z\dQ Z]dR Z^dS Z_ejn                  jq                  dTdUdVg      dW        Z`dX ZadY ZbdZ Zcejn                  jq                  d[d d\ ej                  d gdUz  d\gdUz  g      fdd ej                  ej                   gdUz  ej                  gdUz  g      fej                   ej                   ej                  ej                   gdUz  ej                  gdUz  g      fg d]g d^ ej                  g d]g d^g      fd_ej                   d`gd\daej                  g ej                  d_ej                   d`gd\daej                  gg      fgg dbc      dd        Zfejn                  jq                  dedfej                  ej                   dgfd_dVgg dhdifg djd\dagdifg      dk        Zgejn                  jq                  dlddgej                   ej                  gfdmd`gdmgdnz  d`gdnz  gfgdodpgc      dq        Zhejn                  jq                  drdsdtg      du        Ziejn                  jq                  dvdd@ej                  j                  d@w      g      ejn                  jq                  dxdd@ej                  j                  d@w      g      dy               Zlejn                  jq                  dz ej                  d{d@gd@dAgg       ej                  d{d@gd@d{gg      d|d}d~df ej                  ddgddggeB       ej                  ddgddggeB      i dfg      d        Zmd Znejn                  jq                  d en             ejn                  jq                  dd|dU ej                  g d      fddU ej                  g d      fg      d               Zoejn                  jq                  de1e2z   e0z   e3z   e/z         d        Zpejn                  jq                  dg d      ejn                  jq                  dej                  d fg eq ee1e2z   e0z   e3z   e/z   ej                  g            z         d               Zrd Zsejn                  jq                  d ej                  ddgddggeA      d ej                  g dg dgeA      f ej                  ej                  d8gd8ej                  gg      ej                   ej                  g dg dg      f ej                  ej                  dgdej                  ggeA      ej                   ej                  g dg dgeA      f ej                  ddgddggeA      d ej                  g dg dgeA      fg      d        Ztejn                  jq                  deeg      ejn                  jq                  ddej                  dfdg      d               Zud Zvejn                  jq                  de2      d        Zwejn                  jq                  deeg      d        Zxejn                  jq                  de1e2z   e0z   e3z   e/z         d        Zyejn                  jq                  dddg      d        Zzejn                  jq                  ddg dfdg dfg      d        Z{ejn                  jq                  dd{ej                  g      d        Z|ejn                  jq                  dd{ej                  g      d        Z}ejn                  jq                  ddg deAddAfdg deAdd@fdddgeAddAfdg deAddAfd`g de~d`dAfd@g de~d`d@fd`g de~d`dAfd@g de~d`dAfg      d        Zejn                  jq                  dg d      d        Zd Zd Zejn                  jq                  ddsdtg      dÄ        ZdĄ Zdń ZdƄ Zejn                  jq                  dej                  ej                  g      dȄ        Zejn                  jq                  dddg      ejn                  jq                  ddsdtg      d̄               Zejn                  jq                  dddg      ejn                  jq                  dg d      ejn                  jq                  ddsdtg      d̈́                      Zejn                  jq                  de1      d΄        Zdτ Zejn                  jq                  dg d      dЄ        Zejn                  jq                  dg d      ejn                  jq                  d ej                  g dҢg dӢg       ej                  ej                  dAdUdngej                  dddgg       ej                  d@dAdUej                  gdVddej                  gg      g      dׄ               Zy)    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    t        | |       | j                  |j                  k(  sJ y N)r   dtypexys     [/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/impute/tests/test_impute.py"_assert_array_equal_and_same_dtyper)   (   s"    q!77agg    c                 R    t        | |       | j                  |j                  k(  sJ y r#   )r   r$   r%   s     r(   _assert_allclose_and_same_dtyper,   -   s"    Aq77aggr*   c                    d|d|d}t         }| j                  j                  dk(  s|j                  j                  dk(  rt        }t	        ||      }|j                  |       j                  | j                               }	 ||j                  ||j                  d              ||	||j                  d             t	        ||      }|j                   ||              |j                   || j                                     }	t        j                  |	      r|	j                         }	 ||j                  ||j                  d              ||	||j                  d             y	)
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-	 >HMGkk!n&&qvvx0Gg!!:w~~e7LMgvw~~e'<= >HMGKK #$ 0 :;Gw//#g!!:w~~d7KLgvw~~d';<r*   r1   )meanmedianmost_frequentconstantcsr_containerc                 x   t         j                  j                  dd      }t         j                  |d d d<   t	        |       }|j                   ||            }|j                  dk(  sJ |j                  |      }|j                  dk(  sJ t        |       }|j                  |      }|j                  dk(  sJ y )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                    t        j                  d      }t         j                  |d d df<   t        |       j	                  |      }t        j                  t        d      5  |j                  |       d d d        y # 1 sw Y   y xY w)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                    t        j                  d      }t        j                  }t        j                  g dt
              }|j                  ||d|gd|ddgg|      }t        | 	      j                  |      }t        |j                  |       t        j                  t        d
      5  |j                  |       d d d        y # 1 sw Y   y xY w)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   ,CCcsc_containerc                    t        j                  d      }d|d<    ||      }t        | d      }t        j                  t
        d      5  |j                  |       d d d        |j                  |j                                t        j                  t
        d      5  |j                  |       d d d        y # 1 sw Y   ^xY w# 1 sw Y   y xY w)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   B:C:CCc                     t        | d      r| j                  n
t        |       }|dk(  rt        j                  S t        j
                  | g|i |S Nsizer   )hasattrr~   lenrM   rP   rD   arrargskwargslengths       r(   safe_medianr      sB     f-SXX3s8Fq[266Ebii&Ed&Ef&EEr*   c                     t        | d      r| j                  n
t        |       }|dk(  rt        j                  S t        j
                  | g|i |S r}   )r   r~   r   rM   rP   rC   r   s       r(   	safe_meanr      sB     f-SXX3s8Fq[266Cbggc&CD&CF&CCr*   c           
         t         j                  j                  d      }d}d}||z  ||z   f}t        j                  |d         }t        j                  d|d   dz         }|dd d    |dd d<   dt         j
                  d fdt         j
                  d	 fg}|D ]W  \  }}	}
t        j                  |      }t        j                  |      }t        j                  |d         }t        |d         D ]  }||z
  dz   dkD  ||z
  dz   z  ||z
  dz   z  }t        |d   ||z  z   ||z   ||z   z  z
  d      }|d   |z
  |z
  }|d | }t        j                  |	|      }||j                  t        |            d |    } |
|||      ||<   t        j                  |||f      |d d |f<   d|	k(  r9t        j                  |t        j                  ||   ||z         f      |d d |f<   n6t        j                  ||t        j                  ||   |      f      |d d |f<   t         j                  j                  |      j                  |d d |f          t         j                  j                  |      j                  |d d |f           |dk(  r't        j                  |      j                  d
       }n&t        j                  |      j!                  d
       }|d d |f   }t#        |||||	|        Z y )Nr   rI   rk   rl   rJ   rC   c                 B    t        t        j                  | |f            S r#   )r   rM   hstackzvps      r(   <lambda>z-test_imputation_mean_median.<locals>.<lambda>   s    299aV3D)Er*   rD   c                 B    t        t        j                  | |f            S r#   )r   rM   r   r   s      r(   r   z-test_imputation_mean_median.<locals>.<lambda>   s    ;ryy!Q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3Yc	"EHHU1XEYYq%(Q,'F14a4L=F14a4L 
EF	266IJE
 :?5%~HHUO%((58, uQxAC!aAGaK8AGaKHH #E!HsSy$8AGC;P$PRS Ta8+.??Iix A		-/@AAss6{3JY?@A!/1a!8OA iiAq	*AadG''!yy		/!"46G(6RST q!t  "yy299_Q%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<(vx2E}	
] :?r*   c                 \   t        j                  dt         j                  t         j                  gdt         j                  t         j                  gddt         j                  gddt         j                  gddt         j                  gddt         j                  gddt         j                  gddt         j                  gg      j                         }t        j                  g dg d	g dg d
g dg dg dg dg      j                         }g d}t	        ||d|t         j                  |        y )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                     t        j                  g dg dg dg|      }d}t        j                  t        |      5  t        |       }|j                  |       d d d        y # 1 sw Y   y xY w)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                    g dg dg dg}|dk(  r&t        j                  d      }|j                  |      }d}t        j                  t        |      5  t        |       }|j                  |       d d d        y # 1 sw Y   y xY w)	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   A;;BrF   rE   USc           	         t        j                  t         j                  t         j                  ddgt         j                  dt         j                  dgt         j                  ddt         j                  gt         j                  dddgg|      }d}t        j                  t
        |	      5  t        | 
      }|j                  |      j                  |       d d d        y # 1 sw Y   y xY w)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           	          t        j                  g dg dg dg dg      }t        j                  g dg dg dg dg      }t        ||d	t         j                  d
ddgd|        y )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  se     			
	A XX		
F a2661a2CRWr*   markerNAN c           	      "   t        j                  | | ddg| d| dg| dd| g| dddggt              }t        j                  g dg d	g d
g dgt              }t        | d      }|j	                  |      j                  |      }t        ||       y )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     	VS#&S&#&S#v&S#s#		
 	A XX		
 F 6OLGkk!n&&q)Gw'r*   categoryc                    t        j                  d      }t        j                  d      }|j	                  ||       }t        j                  g dg dg dg dgt              }t        d	      }|j                  |      }t        ||       y )
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  sx     
		X	&B
FGA	Qe	$BXX	/?OLF
 _5G##B'Gw'r*   zX_data, missing_value)rk   r         ?c                 2   t        j                  d| t              }||d<   d}d|dt        |      d}t	        j
                  t        t        j                  |            5  t        |d	|
      }|j                  |       d d d        y # 1 sw Y   y xY w)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AdGJJ>D4D3GGWXG	z7);	<(:*
 	a 	 
=	<	<s   $ BBc                      t        j                  g dg dg dg dg      } t        j                  g dg dg dg dg      }t        d	d
dd      }|j                  |       }t	        ||       y )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           	         t        j                  t         j                  ddt         j                  gdt         j                  dt         j                  gddt         j                  t         j                  gdddt         j                  gg      }t        j                  g dg dg d	g d
g      } | |      } | |      }t        ddd      }|j	                  |      }t        ||       y )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           	         t        j                  | dd| gd| d| gdd| | gddd	| ggt        
      }t        j                  g dg dg dg dgt        
      }t        | ddd      }|j	                  |      }t        ||       y )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&#vv&#sF#		
 	A XX,,,&		
 F  	G ##A&Gw'r*   c                     t        j                  d      }t        j                  d      }|j	                  ||       }t        j                  g dg dg dg dgt              }t        dd	
      }|j                  |      }t        ||       y )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	Qe	$BXX888,		
 F ZTJG##B'Gw'r*   r;   rk   rJ   c                     t               j                  |       }|j                  dk(  sJ t               }|j                  dgdgg       |j                  dk(  sJ |j                  dgt        j                  gg       |j                  dk(  sJ y )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                     t        ddd      } | j                  d   }t        dt        |      fdt	        j
                  d      fg      }d	g d
i}t        ddd      j                         }t        ||      }|j                  | |       y )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FF1aLr*   c                     t        dddd      } | j                         j                         }t        ddd      }|j	                  |      j                  |      }d|d	<   t        j                  ||k(        rJ | j                         }t        |j                  d   dd      }|j	                  |      j                  |      }d|j                  d<   t        j                  |j                  |j                  k(        rJ | j                         j                         }t        ddd
      }|j	                  |      j                  |      }d|d	<   t        ||       | j                         j                         }t        |j                  d   dd
      }|j	                  |      j                  |      }d|j                  d<   t        |j                  |j                         | j                         }t        |j                  d   dd
      }|j	                  |      j                  |      }d|j                  d<   t        j                  |j                  |j                  k(        rJ y )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vva2g 	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                  h   t         j                  j                  d      } d}d}t        ||d|       j	                         }|dk(  }t         j
                  ||<   t        d      }|j                  |      }t        ||j                  j                  |             t        d      j                  |      }t        j                  |j                  |      |j                  j                  |      k(        rJ d|_        t        |j                  |      |j                  j                  |             y )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aDsCKKMA6LffAlO*G%%a(IIw77AA!DE *..q1Gvvg''*g.F.F.P.PQR.SSTTTGOG%%a('*B*B*L*LQ*OPr*   c                  D   t         j                  j                  d      } d}d}t        ||d|       j	                         }t        ddd      }|j                  |       |j                  |       t        ddd      }|j                  |       |j                  |       y )	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aDsCKKMAa!QGGKKNaa!QGGKKNar*   c                      d} d}t        j                  | |f      }t        dd      }|j                  |      }t	        ||j
                  j                  |             y )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  sU    A	A
!QAa!<G%%a(IIw77AA!DEr*   imputation_order)rN   roman	ascending
descendingarabicc                    t         j                  j                  d      }d}d}d}t        ||d|      j	                         }d|d d df<   t        d|dd	d
ddd| |
      }|j                  |       |j                  D cg c]  }|j                   }}t        |      |j                  z  |j                  k(  sJ | dk(  r5t        j                  |d |dz
   t        j                  d|      k(        sJ y | dk(  r9t        j                  |d |dz
   t        j                  |dz
  dd      k(        sJ y | dk(  r|d |dz
   }	||dz
  d  }
|	|
k7  sJ y d| v rt        |      ||dz
  z  k(  sJ y y c c}w )Nr   r  rI   rJ   r  r  rk   rZ   FT)
r0   r%  n_nearest_featuressample_posteriorskip_complete	min_value	max_valuer+  r/  r  r0  r3  r   rN   ending)rM   rN   r   r   r:   r   rQ   imputation_sequence_feat_idxr   r  n_features_with_missing_r   r   )r/  r   r'  ri   r%  r;   r@   r   ordered_idxordered_idx_round_1ordered_idx_round_2s              r(   'test_iterative_imputer_imputation_orderrA    s    ))


"CA
AHaDsCKKMAAadG)G !'.'C'CD'C!1::'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	X	%)'AE2)!a%'2"&9999	%	%;8q1u#5555 
& Es    E-	estimatorc                    t         j                  j                  d      }d}d}t        ||d|      j	                         }t        dd| |      }|j                  |       g }|j                  D ]^  }| t        |       nt        t                     }t        |j                  |      sJ |j                  t        |j                               ` t        t        |            t        |      k(  sJ y )Nr   r  rI   r  r  rk   )r0   r%  rB  r  )rM   rN   r   r   r:   r   rQ   r;  r   r   
isinstancerB  appendidr   set)	rB  r   r'  ri   r;   r@   hashestripletexpected_types	            r(   !test_iterative_imputer_estimatorsrK    s     ))


"CA
AaDsCKKMA1	G ! F//(4DO$}:O 	 '++];;;b**+, 0 s6{s6{***r*   c                     t         j                  j                  d      } d}d}t        ||d|       j	                         }t        dddd|       }|j                  |      }t        t        j                  ||dk(           d       t        t        j                  ||dk(           d       t        ||dk7     ||dk7            y )	Nr   r  rI   r  r  rk   皙?)r0   r%  r8  r9  r  
rM   rN   r   r   r:   r   rQ   r   minr   r   r'  ri   r;   r@   r"  s         r(   test_iterative_imputer_cliprQ    s    
))


"CA
AaDsCKKMA1sQTG 
		q	!BBFF2a1f:&,BFF2a1f:&,BqAvJ!q&	*r*   c                     t         j                  j                  d      } d}d}t        ||d|       j	                         }d|d d df<   t        dddd	dd
dd| 	      }|j                  |      }t        t        j                  ||dk(           d       t        t        j                  ||dk(           d
       t        ||dk7     ||dk7            y )Nr   r  rI   r  r  rk   rJ   rZ   TrM  rN   )	r0   r%  r5  r6  r8  r9  r+  r/  r  rN  rP  s         r(   %test_iterative_imputer_clip_truncnormrS    s    
))


"CA
AaDsCKKMAAadG!
G 
		q	!BBFF2a1f:&,BFF2a1f:&,BqAvJ!q&	*r*   c                  j   t         j                  j                  d      } | j                  d      }t         j                  |d   d<   t        ddd|       }|j                  |       t        j                  t        d      D cg c]  }|j                  |      d   d    c}      }t        |dk\        sJ t        |dk        sJ |j                         |j                         }}t        ||z
  |z  d	      \  }}|dk(  r|d
z  }t        ||z
  |z  d	      \  }}|dk  s|dkD  sJ d       y y c c}w )N*   )rZ   rZ   )r~   r   r   T)r8  r9  r6  r  r  normg-q=rM  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_    s>    ))


#C


AffAaDGsTG !((c
K
1G--a03A6
KLK{a   {c!"""  "KOO$5B"K"$4#=vFL'z"K"$4#=vFL' #3X0XX. Ls   D0c                    t         j                  j                  d      }d}d}|j                  dd||f      }|j                  dd||f      }d|d d df<   d|d<   t	        dd| |      j                  |      }t        d| 	      j                  |      }t        |j                  |      d d df   |j                  |      d d df          y )
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_transformrg    s    
))


"CA
Akkaaq!fk5G[[QQaV[4FGAqDMF4L1xc	c'l  $1xHLLWUO &!!Q$')B)B6)J1a4)Pr*   c                     t         j                  j                  d      } t         j                  j                  d      }d}d}t        ||d|       j	                         }t        ddd|       }|j                  |       |j                  |      }|j                  |      }t        j                  |      t        j                  t        j                  |            k7  sJ t        ddd	d d
|       }t        ddd	d d
|      }	|j                  |       |	j                  |       |j                  |      }
|j                  |      }|	j                  |      }t        |
|       t        |
|       y )Nr   rk   r  rI   r  r  T)r0   r%  r6  r  Fr1  )r0   r%  r6  r5  r/  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_stochasticityrr  '  sR   99  #D99  #DA
AaDt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                  l   t         j                  j                  d      } | j                  dd      }t         j                  |d d df<   t        d|       }t        d|       }|j                  |      j                  |      }|j                  |      }t        |d d dd f   |       t        ||       y )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_missingry  Y  s    
))


"CcAffAadG	2C	8B	2C	8BFF1I"EQEAaeHe$E5!r*   c                     t         j                  j                  d      } d}| j                  |d      }| j                  d|      }t        j                  ||      }| j                  ||      dk  }|j                         }t         j                  ||<   t        dd|       }|j                  |      }t        ||d       y )	Nr   2   rk   r   rZ   r%  r+  r  g{Gz?atol)
rM   rN   r   rt  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1~#HI&&Ih13GG$$Y/HHad+r*   rankrY   rZ   c                    t         j                  j                  d      }d}d}|j                  ||       }|j                  | |      }t        j                  ||      }|j                  ||      dk  }|j                         }t         j                  ||<   |dz  }|d | }	||d  }
||d  }t        ddd|      j                  |	      }|j                  |      }t        |
|d	
       y )Nr   F   r   rJ   rZ   r2  rk   )r%  r/  r+  r  r  r}  )rM   rN   r   rt  r  r6   rP   r   r4   r5   r   )r  r   r'  ri   r  r  r  r  r  rd  X_test_filledre  r@   
X_test_ests                 r(   )test_iterative_imputer_transform_recoveryr  v  s    
))


"C
A
ADAqAvva|Hxx1~#HI&&Ih 	
QAmGQRLMqr]F\13	c'l  ""6*JM:C8r*   c            	      x   t         j                  j                  d      } d}d}| j                  ||      }| j                  ||      }t        j                  |j
                        }t        |      D ]=  }t        |      D ]-  }|d d ||z   |z  fxx   |d d |f   |d d |f   z   dz  z  cc<   / ? | j                  ||      dk  }|j                         }	t         j                  |	|<   |dz  }|	d | }
||d  }|	|d  }t        dd|       j                  |
      }|j                  |      }t        ||dd	
       y )Nr   r  rI   rJ   g      ?rk   r|  gMbP?{Gz?)rtolr~  )rM   rN   r   rO   r   rR   r   rt  r6   rP   r   r4   r5   r   )r   r'  ri   r  r  r  r   r   r  r  rd  r  re  r@   r  s                  r(   &test_iterative_imputer_additive_matrixr    s4   
))


"CA
A		!QA		!QAxx H1XqAQQ!^$1a41QT7):a(??$   xx1~$HI&&Ih 	
QAmGQRLMqr]FACHLLWUG""6*JM:DtDr*   c                     t         j                  j                  d      } d}d}| j                  |d      }| j                  d|      }t        j                  ||      }| j                  ||      dk  }|j                         }t         j                  ||<   t        dddd| 	      }|j                  |      }	t        |j                        ||j                  z  k(  sJ t        |j                  dd| 
      }|j                  |      }
t        |	|
d       t        dddd| 	      }|j                  |       |j                  |j                  k(  sJ y )Nr   r{  rZ   rk   r   r  r  F)r%  tolr6  r+  r  )r%  r6  r+  r  gHz>r}  )rM   rN   r   rt  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    s5   
))


"C
A	AAAAA
q!Axx1~#HI&&Ih$PSG ((3Lw++,GOO0CCCC5!RUG **95NL.t<!eQSG KK	??g.....r*   c                  \   t        d      \  } }| j                  \  }}d| d d df<   t        j                  j	                  d      }d}t        |      D ]J  }|j                  t        j                  |      t        ||z        d      }t        j                  | ||f<   L t        d	d
      }t        j                         5  t        j                  dt               |j                  | |      }	d d d        t        j                   t        j"                  	            rJ y # 1 sw Y   4xY w)NT)
return_X_yrk   rY   r   g333333?F)r~   replacerZ   )r5  r6  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)DAqGGIz AadG ))


"CLj!ZZIIi s9|+C'De   

 !ff*d
	 " !dKG		 	 	"g~6&&q!, 
# vvbhhv&'''' 
#	"s   -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                 N   t         j                  j                  d      j                  dd      }t	        | |      }|j                  |       t        |j                  t         j                        r$t        |j                  t         j                        sJ |j                  j                  d   |j                  d   k(  r)|j                  j                  d   |j                  d   k(  sJ t        |dd d f   |j                         t        |dd d f   |j                         y )Nr   rI   rY   r8  r9  rk   )rM   rN   r   rO   r   r4   rD  
_min_valuendarray
_max_valuerR   r   )r8  r9  correct_outputr;   r@   s        r(   )test_iterative_imputer_min_max_array_liker    s    $ 			a &&r1-AiHGKKNg(("**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                     t         j                  j                  d      }t        | |      }t        j                  t
        |      5  |j                  |       d d d        y # 1 sw Y   y xY w)NrI   rY   r  r\   )rM   rN   r   r_   ry   rz   r4   )r8  r9  r2   r;   r@   s        r(   *test_iterative_imputer_catch_min_max_errorr    sI     			!AiHG	z	1A 
2	1	1s   A##A,zmin_max_1, min_max_2irl   zNone-vs-infzScalar-vs-vectorc           	         t        j                  t         j                  dddgdt         j                  t         j                  dgddt         j                  dgt         j                  ddt         j                  gg      }t        j                  t         j                  dt         j                  dgddt         j                  t         j                  gt         j                  dddgg      }t        | d   | d   d	      }t        |d   |d   d	      }|j	                  |      j                  |      }|j	                  |      j                  |      }t        |d d df   |d d df          y )
NrJ   rk   rI   r   rY   rl   rZ   r   )r8  r9  r  )rM   rp   rP   r   r4   r5   r   )	min_max_1	min_max_2rd  re  rn  ro  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*   r7  TFc                 
   t         j                  j                  d      }t        j                  g dg dg dg dg      }t        j                  t         j                  dddgt         j                  dd	dgt         j                  d	d
d	gg      }t        d| |      }|j                  |      j                  |      }| r.t        |d d df   t        j                  |d d df                y t        |d d df   g dd       y )Nr   )rZ   rJ   rJ   rk   )rI   rk   rJ   r   )rY   rk   rk   rk   )r   rl   rJ   rJ   rJ   rl   rZ   rk   rI   rC   )rL   r7  r  )   r      g-C6?)r  )
rM   rN   r   rp   rP   r   r4   r5   r   rC   )r7  r   rd  re  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}3G W%//7J
1a4("'''!Q$-*@A
1a4(+DAr*   
rs_imputer)seedrs_estimatorc                      G d d      } ||      }t        |       }t        j                  d      }|j                  |       |j                  |k(  sJ y )Nc                       e Zd Zd Zd Zd Zy)Ctest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimatorc                     || _         y r#   r  )selfr  s     r(   __init__zLtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.__init__G  s
     ,Dr*   c                     | S r#    )r  r   kgardss      r(   r4   zGtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.fitJ  s    Kr*   c                 F    t        j                  |j                  d         S )Nr   )rM   r   rR   )r  r;   s     r(   predictzKtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.predictM  s    88AGGAJ''r*   N)__name__
__module____qualname__r  r4   r  r  r*   r(   ZeroEstimatorr  F  s    	-		(r*   r  r  r  )r   rM   r   r4   r  )r  r  r  rB  r@   rd  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                     t        d      } |j                  di | t        j                  t        |      5  |j                  |       j                  |       d d d        y # 1 sw Y   y xY w)Nr   r  r\   r  )r   
set_paramsr_   ry   rz   r4   r5   )X_fitrA   paramsmsg_err	indicators        r(   test_missing_indicator_errorr  W  sR    $ !3II"6"	z	1e&&w/ 
2	1	1s   !A$$A-c                  z   dt         j                  ft         j                  t         j                  fdt         j                  fg} t         j                  gt
        z   t        z   t        z   t        z   t        z   }t        ||       D cg c]$  \  }\  }}|dk(  r|t         j                  us|||f& c}}}S c c}}}w )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-~u !#(@	 
>5)2
  s   )B6zarr_type, missing_values, dtypez,param_features, n_features, features_indicesr   rk   rJ   r   c                    t        j                  | | dgdd| gg      }t        j                  | | dgg dg      }t        j                  g dg dg      }t        j                  g dg dg      }	 ||      j                  |      } ||      j                  |      }|j                  |      }|	j                  |      }	t        | |d	      }
|
j	                  |      }|
j                  |      }|j                  d   |k(  sJ |j                  d   |k(  sJ t        |
j                  |       t        ||d d |f          t        ||	d d |f          |j                  t        k(  sJ |j                  t        k(  sJ t        |t         j                        sJ t        |t         j                        sJ |
j                  d
       |
j	                  |      }|
j                  |      }|j                  t        k(  sJ |j                  t        k(  sJ |j                  dk(  sJ |j                  dk(  sJ t        |j!                         |       t        |j!                         |       y )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$   boolrD  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    sN    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**,<=Jq2B/B CDL"216F3F"GHt###%%%j"**---lBJJ///%!//6#--g6""d***$$,,,##u,,,%%...%--/<'//1<@r*   r  c                    d}t        j                  ||dgd|dgg      }t        j                  ||dgg dg      } | |      } | |      }t        |      }t        j                  t
        d      5  |j                  |       d d d        |j                  |       t        j                  t
        d      5  |j                  |       d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)	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   3C9C C C)param_sparse)TFr  zarr_type, missing_valuesc                    t        j                  ||dgd|dgg      }t        j                  ||dgg dg      } | |      j                  t         j                        } | |      j                  t         j                        }t	        ||      }|j                  |      }|j                  |      }|du r#|j                  dk(  sJ |j                  dk(  sJ y |dk(  r>|d	k(  r9t        |t         j                        sJ t        |t         j                        sJ y |d
u r9t        |t         j                        sJ t        |t         j                        sJ y t        j                  |      r#|j                  dk(  sJ |j                  dk(  sJ y t        |t         j                        sJ t        |t         j                        sJ y )Nrk   rl   rJ   r  )r0   r   Tr  r  r   F)rM   rp   r  r  r   rQ   r5   r8   rD  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,

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

333??5!$$---&&%///j"**555lBJJ777r*   c                      t        j                  g dg dgt              } t        dd      }|j	                  |       }t        |t        j                  g dg dg             y )	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                     t        t        |d      t        |            }|j                  |       }t	        ||       y )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                    t         j                  j                  d      }|j                  dd      }||d<    | |      }t	        j
                  t        |      5  |j                  |       d d d        y # 1 sw Y   y xY w)NrU  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  #  sd     ))


#C		"bAAdG!1GHG	z	1a  
2	1	1s   A66A?c                      t        j                  ddgddgg      } t        dd      }|j                  |       }|j                  d   dk(  sJ y )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                      | g dg dg dg      }t        dd      }|j                  |      }|j                         |j                         k(  sJ y )Nr  )rk   rJ   r   )rJ   r   rk   r   rk   r  )r   rQ   getnnzsum)rG   r;   r	  r"  s       r(   /test_missing_indicator_sparse_no_explicit_zerosr  E  sK     	y)Y78A	5	;B			!	B99;"&&("""r*   c                     t        j                  ddgddgg      } |        }|j                  |       |j                  J y )Nrk   )rM   rp   r4   
indicator_)r  r;   r@   s      r(   test_imputer_without_indicatorr  Q  sB    
1a&1a&!"A!#GKKN%%%r*   c                     | t         j                  ddgdt         j                  dgddt         j                  gg dg      }t        j                  g dg dg d	g d
g      }t        t         j                  d      }|j	                  |      }t        j                  |      sJ |j                  |j                  k(  sJ t        |j                         |       y )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                     ddgdt         j                  gg}t        j                  ddgd|ggt              }t	        |       }|j                  |      }t        ||       y )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  s[     sc266]#AXXSzC?36BFX.G##A&Gw'r*   zorder, idx_orderr1  )rY   rl   rJ   r   rk   r2  )rk   r   rJ   rl   rY   c                    t         j                  j                  d      }|j                  dd      }t         j                  |d ddf<   t         j                  |d ddf<   t         j                  |d dd	f<   t         j                  |d d
df<   t        j                  t              5  t        d| d      j                  |      }|j                  D cg c]  }|j                   }}||k(  sJ 	 d d d        y c c}w # 1 sw Y   y xY w)NrU  r  rZ   r{  rk      r      rJ   rI   rl   )r%  r/  r  )rM   rN   r   rt  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
 $'#;#;<#;aqzz#;<i 
*	) =	 
*	)s   ',C>C9&	C>9C>>Dr   c           	      ~   t        j                  d| ddgg ddd| dgddd| gg      }t        j                  g d	d
d| dgd| ddgddd
| gg      }t        j                  d| ddg| d| | gd
| d| g| d| dgg      }t        j                  g d| d
| dgg d| d| d
gg      }t        | dd      }|j                  |      }|j	                  |      }|j                  |      }|j	                  |      }	t        ||       t        |	|       ||fD ]0  }
|j                  |
      }|j	                  |      }t        ||
       2 y )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_transformr1    s    ((q"%="%1m$		
C ((=!$q!$1m$		
C ((q!$A}m<q-0A}a0		
C ((A}a0A}a0		
C $vTG %%c*I--i8M!!#&I--i8M}c*}c*3Z''*//8;* r*   c           	      ,   t        j                  d| ddgg ddd| dgddd| gg      }t        | d	
      }|j                  |      }t	        j
                  t        d|j                   d      5  |j                  |       d d d        y # 1 sw Y   y xY w)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@   r,  s       r(   3test_simple_imputation_inverse_transform_exceptionsr4    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)r6  r6  valuer8  min_valuevalue)r8  r8  r7  r   rk   rJ   rY   )rk   rk   rJ   )r  r  rk   )rk   rk   r  c                 R    | t        t        j                  ||      ||      k(  sJ y )Nrj   )r   rM   rp   )r  rp   r$   r5  n_repeats        r(   test_most_frequentr<    s/    , ~
e$k8   r*   rL   c                 <   t        j                  dt         j                  dgdt         j                  t         j                  gg      }t        | d      }|j	                  |      }t        |dddf   d       |j                  |      }t        |dddf   d       y)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_featuresr>    s     	1bffa.1bffbff"567A)tG %%a(IIadOQ'!!!$IIadOQ'r*   c                      t        j                  g dg dg dg dg      } d}t        dd|dd	
      }|j                  |        t	        |j
                  j                  |       y)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_valuer@    s]    
...-PQAJ# G !w//;;ZHr*   c            	         t        j                  ddt         j                  t         j                  gddt         j                  dgddt         j                  t         j                  gdd	t         j                  d
gg      } t         j                   t         j                   t         j                   dg}t         j                  t         j                  t         j                  dg}t	        ||d      j                  |       }t        j                  | dd      }|j                  |j                  k(  sJ t        j                  |t        j                  |               t        j                  d      k(  sJ t        j                  |t        j                  |               t        j                  d      k(  sJ t        j                  ddt         j                  t         j                  gdddt         j                  gddt         j                  t         j                  gdd	d
t         j                  gg      } t         j                   t         j                   dt         j                   g}t         j                  t         j                  dt         j                  g}t	        ||d      j                  |       }| ddddf   }|j                  |j                  k(  sJ t        j                  |t        j                  |               t        j                  d      k(  sJ t        j                  |t        j                  |               t        j                  d      k(  sJ y)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)r8  r9  r   r   g      @NrY   )rM   rp   rP   r  r   rQ   deleterR   rO  r   r_   ri  r   )r;   r8  r9  rS   X_without_missing_columns        r(   1test_iterative_imputer_min_max_value_remove_emptyrD     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                    t        j                  dt         j                  dgdt         j                  t         j                  gg      }t        |       }dD ]u  } t	        ||      |      }| r/|j
                  |j
                  k(  sJ t        |dddf   d       F|j
                  |j
                  d   |j
                  d   dz
  fk(  ruJ  y)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_featuresrI  W  s     	1bffa.1bffbff"567A-@AG0,GGV,Q/	??agg---yA2??qwwqz1771:>&BBBB 1r*   c            	      &   t        j                  d      } | j                  d| j                  g dd      i      }t	        | j
                  dd      }t        |j                  |      t        j                  d	gdgd
ggt                     | j                  d| j                  g dd      i      }t	        dd      }t        |j                  |      t        j                  d	gd
gdggt                     | j                  d| j                  g dd      i      }t	        | j
                  dd      }t        |j                  |      t        j                  dgdgdggd             t	        t        j                  dd      }t        |j                  |      t        j                  dgdgdggd             | j                  d| j                  g dd      i      }t	        | j
                  d      }t        |j                  |      t        j                  dgdgdgdggd             | j                  d| j                  g dd      i      }t	        | j
                  d      }t        |j                  |      t        j                  dgdgdggd             | j                  d| j                  g dd      i      }t	        | j
                  dd      }t        |j                  |      t        j                  dgdgdggd             | j                  d| j                  g d d      i      }t	        | j
                  d      }t        |j                  |      t        j                  dgd!gd!gdggd             y )"Nrd   feature)abcNdestringrj   rF   nar   rL  rM  )rL  rM  fghok)r   r1   rP  )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_narU  g  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                     t        j                  d      } t        j                  }| j	                  ||d|gd|ddggg d      }t        |      j                  |      }|j                         }g d	}t        ||       y
)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_outr\    s    			X	&BVVN
^Q?2&	
 % 	 	A !?CCAFI335MWN~}5r*   c                      ddgddgddgg} t        d      j                  |       }|j                  t        j                  t        j                  gg      }|j
                  t        k(  sJ t        |ddgg       y)zkCheck 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_transformr_    ss     sc3Z#s,A /:>>qAL$$rvvrvv&6%78G==F"""w#s-r*   
dtype_testc                    t        j                  ddt         j                  gt         j                  ddgg dgt         j                        }t	               j                  |      }t        j                  t         j                  t         j                  t         j                  gg|       }|j                  |      }|j                  | k(  sJ y)zACheck transform preserves numeric dtype independent of fit dtype.r   g333333@r  )g@rJ   rk   rj   N)rM   asarrayrP   r  r   r4   r5   r$   )r`  r;   impre  rA   s        r(   .test_imputer_transform_preserves_numeric_dtyperd    s     	


sBFF	bffc3/=RZZ	A /

a
 CZZ"&&"&&"&&12*EFmmF#G==J&&&r*   
array_typerp   r   c                 F   t        j                  t         j                  dgt         j                  dgt         j                  dgg      }t        ||       }d}t	        d||      }dD ]  }|j                  d      r;|s9d	}t        j                  t        |
      5   t        ||      |      }ddd       n t        ||      |      }j                  |j                  k(  sJ | dk(  r|dddf   j                         n|dddf   }t        ||        y# 1 sw Y   XxY w)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  rF  r4   z7`strategy="constant"`, empty features are not dropped. r\   Nr   r   )rM   rp   rP   r   r   
startswithr_   r`   FutureWarningrG  rR   r:   r   )	re  r   r;   r   r@   rH  warn_msgrS   constant_features	            r(   0test_simple_imputer_constant_keep_empty_featuresrk    s    	2661+{RVVQK89A1j)AJ/G 1U#,?PHm8<4GGV4Q7	 =< 103I!''))))3x)?IadO##%YqRSt_ 	 	+Z8 1 =<s   DD 	c                    t        j                  t         j                  dgt         j                  dgt         j                  dgg      }t        ||      }t	        | |      }dD ]  } t        ||      |      }|rM|j                  |j                  k(  sJ |dk(  r|dddf   j                         n|dddf   }t        |d       d|j                  |j                  d   |j                  d	   d	z
  fk(  rJ  y)
zYCheck the behaviour of `keep_empty_features` with all strategies but
    'constant'.
    rJ   rY   r   r
  rF  r   Nr   rk   )	rM   rp   rP   r   r   rG  rR   r:   r   )r1   re  r   r;   r@   rH  rS   rj  s           r(   'test_simple_imputer_keep_empty_featuresrm    s     	2661+{RVVQK89A1j)AXCVWG0,GGV,Q/	??agg----78-C	!Q$'')STVWSW  /3??qwwqz1771:>&BBBB 1r*   c           
      V   t        j                  g dddt         j                  gt         j                  dt         j                  gg dg dt         j                  ddgg      }t        j                  g dg dg d	g dg dg d
g      }t        t         j                  t         j                        }|j                  |      }t        ||       t        t         j                  t         j                        }|j                   | |            }t        |j                         |       y )N)r   r   r   333333@r   r  )r  r  r  )g@r  r  皙?)ro  r   r   )r  r  r   )r  rp  rp  r/   )rM   rp   rP   r   rO  rQ   r   r:   )rw   r;   r<   r@   rA   s        r(   test_imputation_customrq    s    
#rvvVVS"&&!VVS#	
		A XX	
	F 266BFFCG##A&Gw' 266BFFCG##M!$45Gw(&1r*   c                     d} t        j                  g dg dgt         j                        }t        d| d      }d| d	t	        |       d
}t        j                  t        t        j                  |            5  |j                  |       ddd       t        j                  g dg dgt         j                        }|j                  |       d|j                  j                  d
}t        j                  t        t        j                  |            5  |j                  |       ddd       t        j                  d      ddg}|j                  t         j                         }|D ]<  } t        d| d      }|j#                  |      }|j                  |j                  k(  r<J  y# 1 sw Y   !xY w# 1 sw Y   xY w)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  r9  )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_castingry  (  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   <F-F:-F7:Gc                 &   t        j                  t         j                  ddgdt         j                  dgddt         j                  gg      }t        | dd      }t        | dd	      }t	        |j                  |      |j                  |             y
)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~  O  s     	2661a.1bffa.1a.ABA"2!aU# #3!aT# #11!4#11!4r*   re  )rk   rJ   rY   rl   )rZ   r   r   r   r   r   r   c                    t        j                  t         j                  t         j                  ddgt         j                  dt         j                  dgt         j                  ddt         j                  gg      }t        | dd      }|j	                  |      }|j                  |      }t        | dd	      }|j	                  |      }|j                  |      }t        ||d
d
dd
f          t        |d
d
df   d       |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ y
)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   re  rd  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  i  s6   $ hh
&&"&&!Q	"&&!RVVQ!7"&&!Q9OPG #3!aU# #>"K"KG"T!<!F!Fv!N"2!aT# #>"K"KG"T!<!F!Fv!N/1LQPQPRU1S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   rb  r  r  r  r  r  r#  r)  r,  r.  rA  rK  rQ  rS  r_  rg  rr  ry  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$  r1  r4  r  r<  r>  r@  rD  rI  rU  r\  r_  rt  r  rd  rk  rm  rq  ry  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xrxx}"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	tXRXXy1}rvvhl;<=
&&"&&("((bffWIMBFF8a<#@AB	oxrxxo0N'OP"&&"#rvvBHHrBFF7B'#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$ % BHHr1g1v&'BHHr1g2w'('6:P		
 BHHsCj3*-S9BHHsCj3*-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 $ BHHsCj3*-V<BHH-/FGvV	
 BHHrvvsmc266]34FFBHH-/FGH	
 BHHrvvsmc266]36BFFBHH-/FGvV	
 BHHtSkC;/v>BHH-/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#!*+* 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*   