
    0Ph(                       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j7        8                    dg d          ej7        8                    de2          d                         Z9ej7        8                    dg d          d             Z:ej7        8                    dg d          d             Z;ej7        8                    dg d          ej7        8                    de1          d                         Z<d Z=d Z>ej7        8                    de1          d              Z?ej7        8                    de1          d!             Z@ej7        8                    dd"d#g          ej7        8                    d$deAeBg          d%                         ZCej7        8                    dd"d#g          ej7        8                    d&d'd(g          d)                         ZDej7        8                    dd*d+g          ej7        8                    d$eB ejE        d,           ejE        d-          g          d.                         ZFej7        8                    de1          d/             ZGej7        8                    d0dejH        d1d2d g          d3             ZIej7        8                    d$eAd4g          d5             ZJej7        8                    d6d7d8ejH        fg          d9             ZKd: ZLej7        8                    d;e2ejM        gz             d<             ZNej7        8                    d0dejH        d1d2d g          d=             ZOej7        8                    d$eAd4g          d>             ZPej7        8                    d?d@gdAggd@gejH        ggg          dB             ZQdC ZRdD ZSdE ZTdF ZUdG ZVej7        8                    dHg dI          dJ             ZWej7        8                    dKd e             e             e             e             g          dL             ZXdM ZYdN ZZdO Z[ej7        8                    dg d          dP             Z\dQ Z]dR Z^dS Z_ej7        8                    dTdUdVg          dW             Z`dX ZadY ZbdZ Zcej7        8                    d[d d\ ejd        d gdUz  d\gdUz  g          fdd ejd        eje         gdUz  eje        gdUz  g          feje         eje         ejd        eje         gdUz  eje        gdUz  g          fg d]g d^ ejd        g d]g d^g          fd_eje         d`gd\daeje        g ejd        d_eje         d`gd\daeje        gg          fgg dbc          dd             Zfej7        8                    dedfeje        eje         dgfd_dVgg dhdifg djd\dagdifg          dk             Zgej7        8                    dlddgeje         eje        gfdmd`gdmgdnz  d`gdnz  gfgdodpgc          dq             Zhej7        8                    drdsdtg          du             Ziej7        8                    dvdd@ejj        k                    d@w          g          ej7        8                    dxdd@ejj        k                    d@w          g          dy                         Zlej7        8                    dz ejd        d{d@gd@dAgg           ejd        d{d@gd@d{gg          d|d}d~df ejd        ddgddggeB           ejd        ddgddggeB          i dfg          d             Zmd Znej7        8                    d en                      ej7        8                    dd|dU ejd        g d          fddU ejd        g d          fg          d                         Zoej7        8                    de1e2z   e0z   e3z   e/z             d             Zpej7        8                    dg d          ej7        8                    dejd        d fg eq ee1e2z   e0z   e3z   e/z   ejH        g                    z             d                         Zrd Zsej7        8                    d ejd        ddgddggeA          d ejd        g dg dgeA          f ejd        ejH        d8gd8ejH        gg          ejH         ejd        g dg dg          f ejd        ejH        dgdejH        ggeA          ejH         ejd        g dg dgeA          f ejd        ddgddggeA          d ejd        g dg dgeA          fg          d             Ztej7        8                    deeg          ej7        8                    ddejH        dfdg          d                         Zud Zvej7        8                    de2          d             Zwej7        8                    deeg          d             Zxej7        8                    de1e2z   e0z   e3z   e/z             d             Zyej7        8                    dddg          d             Zzej7        8                    ddg dfdg dfg          d             Z{ej7        8                    dd{ejH        g          d             Z|ej7        8                    dd{ejH        g          d             Z}ej7        8                    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j7        8                    dg d          d             Zd Zd Zej7        8                    ddsdtg          dÄ             ZdĄ Zdń ZdƄ Zej7        8                    dej        ej        g          dȄ             Zej7        8                    dddg          ej7        8                    ddsdtg          d̄                         Zej7        8                    dddg          ej7        8                    dg d          ej7        8                    ddsdtg          d̈́                                     Zej7        8                    de1          d΄             Zdτ Zej7        8                    dg d          dЄ             Zej7        8                    dg d          ej7        8                    d ejd        g dҢg dӢg           ejd        ejH        dAdUdngejH        dddgg           ejd        d@dAdUejH        gdVddejH        gg          g          dׄ                         ZdS )    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                 J    t          | |           | j        |j        k    sJ d S N)r   dtypexys     `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/impute/tests/test_impute.py"_assert_array_equal_and_same_dtyper)   (   s-    q!7ag    c                 J    t          | |           | j        |j        k    sJ d S r#   )r   r$   r%   s     r(   _assert_allclose_and_same_dtyper,   -   s-    Aq7agr*   c                 4   d|d|d}t           }| j        j        dk    s|j        j        dk    rt          }t	          ||          }|                    |                               |                                           }	 ||j        ||	                    d                      ||	||	                    d                     t	          ||          }|                     ||                      |                     ||                                                     }	t          j        |	          r|	                                }	 ||j        ||	                    d                      ||	||	                    d                     d	S )
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w|sfl/366-	 >HMMMGkk!nn&&qvvxx00GIg!:w~~e7L7LMMMMIgvw~~e'<'<==== >HMMMGKK  ##$$$ 0 0 : :;;Gw $//##Ig!:w~~d7K7KLLLLIgvw~~d';';<<<<<<r*   r1   )meanmedianmost_frequentconstantcsr_containerc                    t           j                            dd          }t           j        |d d d<   t	          |           }|                     ||                    }|j        dk    sJ |                    |          }|j        dk    sJ t          |           }|                    |          }|j        dk    sJ d S )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VAcccFX...G%%mmA&6&677I?g%%%%%%a((I?g%%%%((CCC!//22I?g%%%%%%r*   rC   rD   rE   c                 ,   t          j        d          }t           j        |d d df<   t          |                               |          }t          j        t          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )N      r   rK   Skippingmatch)	rM   onesrP   r   r4   pytestwarnsUserWarningr5   )r1   r;   r@   s      r(    test_imputation_deletion_warningrb   k   s    
AfAaaadGX...22155G	k	4	4	4  !                 s   &B		BBc                    t          j        d          }t          j        }t          j        g dt
                    }|                    ||d|gd|ddgg|          }t          | 	                              |          }t          |j
        |           t          j        t          d
          5  |                    |           d d d            d S # 1 swxY w Y   d S )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VNH111@@@M
^Q?2&	
  	 	 	A X...22155G w0-@@@ 
T
 
 
   	!                 s   2CCCcsc_containerc                    t          j        d          }d|d<    ||          }t          | d          }t          j        t
          d          5  |                    |           d d d            n# 1 swxY w Y   |                    |                                           t          j        t
          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )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	A  A               KK			z)@	A	A	A  !                 s$   A33A7:A7 C##C'*C'c                     t          | d          r| j        nt          |           }|dk    rt          j        nt          j        | g|R i |S Nsizer   )hasattrr~   lenrM   rP   rD   arrargskwargslengths       r(   safe_medianr      sP     f--;SXX3s88Fq[[266bi&Ed&E&E&Ef&E&EEr*   c                     t          | d          r| j        nt          |           }|dk    rt          j        nt          j        | g|R i |S r}   )r   r~   r   rM   rP   rC   r   s       r(   	safe_meanr      sP     f--;SXX3s88Fq[[266bgc&CD&C&C&CF&C&CCr*   c           
      t   t           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 ]\  }}	}
t          j        |          }t          j        |          }t          j        |d                   }t          |d                   D ]}||z
  dz   dk    ||z
  dz   z  ||z
  dz   z  }t          |d         ||z  z   ||z   ||z   z  z
  d          }|d         |z
  |z
  }|d |         }t          j	        |	|          }||
                    t          |                    d |                  } |
|||          ||<   t          j        |||f          |d d |f<   d|	k    r:t          j        |t          j	        ||         ||z             f          |d d |f<   n7t          j        ||t          j	        ||         |          f          |d d |f<   t           j                            |                              |d d |f                    t           j                            |                              |d d |f                    |dk    r*t          j        |                              d
           }n)t          j        |                              d
           }|d d |f         }t#          |||||	|            d S )Nr   rI   rk   rl   rJ   rC   c                 H    t          t          j        | |f                    S r#   )r   rM   hstackzvps      r(   <lambda>z-test_imputation_mean_median.<locals>.<lambda>   s    29aV3D3D)E)E r*   rD   c                 H    t          t          j        | |f                    S r#   )r   rM   r   r   s      r(   r   z-test_imputation_mean_median.<locals>.<lambda>   s    ;ry!Q7H7H+I+I r*   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      sw    )


"
"C
C
C3Yc	"EHU1XEYq%(Q,''F14a4L=F14a4L 
EEF	26IIJE
 :? 0
 0
5%~HUOO%(58,, uQx 	; 	;AC!aAGaK8AGaKHH #E!HsSy$8AGC;P$PRS T Ta8+.??Iixi A	-/@AAAss6{{33JYJ?@A!/1a!8!8OA iAq	**AaaadG'''!y	/!"46G(6RSST   qqq!t  "y29_Q%79JKKL   qqq!t
 I!!!$$,,Qqqq!tW555I!!!$$,,VAAAqD\:::: xHV,,00a0888LLHV,,00a0888L<(vx2E}	
 	
 	
 	
]0
 0
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                                          }t          j        g dg d	g dg d
g dg dg dg dg                                          }g d}t	          ||d|t           j        |            d S )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     	26NBFO26N26NRVBFO		
	 	 ikk  xIIIIIIMMKKKKNNLL		
  ikk  =<<	X'8"&-    r*   rC   rD   r$   c                     t          j        g dg dg dg|          }d}t          j        t          |          5  t          |           }|                    |           d d d            d S # 1 swxY w Y   d S )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     s     	---mmm<EJJJA
AC	z	-	-	- ! !222a   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   &A00A47A4typelist	dataframec                 0   g dg dg dg}|dk    r)t          j        d          }|                    |          }d}t          j        t          |          5  t          |           }|                    |           d d d            d S # 1 swxY w Y   d S )	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     s     
]]]3A{ **LLOO
AC	z	-	-	- ! !222a   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   &BB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          | 
          }|                    |                              |           d d d            d S # 1 swxY w Y   d S )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   
 	VRVS#&VS"&#&VS#rv&VS#s#		
 	 	 	A 4G	z	1	1	1 $ $222A  ###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   9C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|            d S )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  s     	NNNNNNMM		
	 	A XIIIIIIII		
 F a261a2CRWWWWWr*   markerNAN c           	      D   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          }|                    |                              |          }t          ||           d S )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 XOOOOOOOO		
   F 6OLLLGkk!nn&&q))Gw'''''r*   categoryc                 <   t          j        d          }t          j        d          }|                    ||           }t          j        g dg dg dg dgt                    }t          d	          }|	                    |          }t          ||           d S )
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  s     
	X	&	&B
FGGA	Qe	$	$BX	///???OOOL  F
 _555G##B''Gw'''''r*   zX_data, missing_value)rk   r         ?c                 R   t          j        d| t                    }||d<   d}d|dt          |          d}t	          j        t          t          j        |                    5  t          |d	|
          }|
                    |           d d d            d S # 1 swxY w Y   d S )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XJXXD4D4DXXXG	z7););	<	<	< ! !(:*
 
 
 	a   	! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   '(B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          }|                    |           }t	          ||           d S )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QQAX|||\\\<<<NO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          }|                    |          }t          ||           d S )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     	VS!RV$"&#rv&2626"#q"&!		
	 	A X			---~~~?P?P?PQ F 	!Av&&F  G ##A&&G &1111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          }|                    |          }t          ||           d S )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 X,,,,,,,,,&&&		
   F  	  G ##A&&Gw'''''r*   c                 >   t          j        d          }t          j        d          }|                    ||           }t          j        g dg dg dg dgt                    }t          dd	
          }|	                    |          }t          ||           d S )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GGA	Qe	$	$BX888888888,,,		
   F ZTJJJG##B''Gw'''''r*   r;   rk   rJ   c                 *   t                                          |           }|j        dk    sJ t                      }|                    dgdgg           |j        dk    sJ |                    dgt          j        gg           |j        dk    sJ d S )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!rvh   ?ar*   c                  P   t          ddd          } | j        d         }t          dt          |          fdt	          j        d          fg          }d	g d
i}t          ddd                                          }t          ||          }|                    | |           d S )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555AVAYN^DDDET/Q???@	
 H &'J'J'JKJc1d333;;==A	h
	+	+BFF1aLLLLLr*   c                  N   t          dddd          } |                                                                 }t          ddd          }|                    |                              |          }d|d	<   t          j        ||k              rJ |                                 }t          |j        d         dd          }|                    |                              |          }d|j        d<   t          j        |j        |j        k              rJ |                                                                 }t          ddd
          }|                    |                              |          }d|d	<   t          ||           |                                 
                                }t          |j        d         dd
          }|                    |                              |          }d|j        d<   t          |j        |j                   |                                 }t          |j        d         dd
          }|                    |                              |          }d|j        d<   t          j        |j        |j        k              rJ d S )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#  )  sA   "1aAFFFF 	A1vDIIIG	Q	!	!!	$	$BBtHva2g 	A16!9vDQQQG	Q	!	!!	$	$BBGAJvaf'((((( 	A1vEJJJG	Q	!	!!	$	$BBtHa$$$ 	A16!9vERRRG	Q	!	!!	$	$BBGAJafbg... 	A16!9vERRRG	Q	!	!!	$	$BBGAJvaf'(((((((r*   c                     t           j                            d          } d}d}t          ||d|                                           }|dk    }t           j        ||<   t          d          }|                    |          }t          ||j	        
                    |                     t          d                              |          }t          j        |
                    |          |j	        
                    |          k              rJ d|_        t          |
                    |          |j	        
                    |                     d S )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  s2   
)


"
"CA
AaDsCCCKKMMA6LfAlO***G%%a((IIw7AA!DDEEE ***..q11Gvg''**g.F.P.PQR.S.SSTTTTTGOG%%a(('*B*L*LQ*O*OPPPPPr*   c                     t           j                            d          } d}d}t          ||d|                                           }t          ddd          }|                    |           |                    |           t          ddd          }|                    |           |                    |           d S )	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CCKKMMAa!QGGGGKKNNNaa!QGGGGKKNNNar*   c                      d} d}t          j        | |f          }t          dd          }|                    |          }t	          ||j                            |                     d S )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  sk    A	A
!QAa!<<<G%%a((IIw7AA!DDEEEEEr*   imputation_order)rN   roman	ascending
descendingarabicc                    t           j                            d          }d}d}d}t          ||d|                                          }d|d d df<   t          d|dd	d
ddd| |
  
        }|                    |           d |j        D             }t          |          |j	        z  |j
        k    sJ | dk    r:t          j        |d |dz
           t          j        d|          k              sJ d S | dk    r>t          j        |d |dz
           t          j        |dz
  dd          k              sJ d S | dk    r$|d |dz
           }||dz
  d          }	||	k    sJ d S d| v rt          |          ||dz
  z  k    sJ d S d S )Nr   r  rI   rJ   r  r  rk   rZ   FT)
r0   r%  n_nearest_featuressample_posteriorskip_complete	min_value	max_valuer+  r/  r  c                     g | ]	}|j         
S  feat_idx).0r   s     r(   
<listcomp>z;test_iterative_imputer_imputation_order.<locals>.<listcomp>  s    DDD!1:DDDr*   r0  r3  r   rN   ending)rM   rN   r   r   r:   r   rQ   imputation_sequence_r   r  n_features_with_missing_r   r   )
r/  r   r'  ri   r%  r;   r@   ordered_idxordered_idx_round_1ordered_idx_round_2s
             r(   'test_iterative_imputer_imputation_orderrF    s    )


"
"CA
AHaDsCCCKKMMAAaaadG)  G !DDw'CDDDK{w.'2RRRRR7""vk'AE'*bi1oo=>>>>>>>	X	%	%vk'AE'*biAq".E.EEFFFFFFF	X	%	%)'AE'2)!a%''2"&9999999	%	%	%;8q1u#55555 
&	%55r*   	estimatorc                 0   t           j                            d          }d}d}t          ||d|                                          }t          dd| |          }|                    |           g }|j        D ]l}| t          |           nt          t                                }t          |j        |          sJ |                    t          |j                             mt          t          |                    t          |          k    sJ d S )Nr   r  rI   r  r  rk   )r0   r%  rG  r  )rM   rN   r   r   r:   r   rQ   rA  r   r   
isinstancerG  appendidr   set)	rG  r   r'  ri   r;   r@   hashestripletexpected_types	            r(   !test_iterative_imputer_estimatorsrP    s    )


"
"CA
AaDsCCCKKMMA1	  G ! F/ - -(4DOOO$}:O:O 	 '+];;;;;b*++,,,, s6{{s6{{******r*   c                     t           j                            d          } d}d}t          ||d|                                           }t          dddd|           }|                    |          }t          t          j        ||dk                       d           t          t          j	        ||dk                       d           t          ||dk             ||dk                        d S )	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_cliprV    s    
)


"
"CA
AaDsCCCKKMMA1sQT  G 
		q	!	!BBF2a1f:&&,,,BF2a1f:&&,,,BqAvJ!q&	*****r*   c                     t           j                            d          } d}d}t          ||d|                                           }d|d d df<   t          dddd	dd
dd| 	  	        }|                    |          }t          t          j        ||dk                       d           t          t          j	        ||dk                       d
           t          ||dk             ||dk                        d S )Nr   r  rI   r  r  rk   rJ   rZ   TrR  rN   )	r0   r%  r5  r6  r8  r9  r+  r/  r  rS  rU  s         r(   %test_iterative_imputer_clip_truncnormrX    s   
)


"
"CA
AaDsCCCKKMMAAaaadG!
 
 
G 
		q	!	!BBF2a1f:&&,,,BF2a1f:&&,,,BqAvJ!q&	*****r*   c                     t           j                            d          } |                     d          t           j        d         d<   t          ddd|                                          t          j        fdt          d	          D                       }t          |dk              sJ t          |dk              sJ |
                                |                                }}t          ||z
  |z  d
          \  }}|dk    r|dz  }t          ||z
  |z  d
          \  }}|dk     s|dk    sJ d            d S d S )N*   )rZ   rZ   )r~   r   r   T)r8  r9  r6  r  c                 R    g | ]#}                               d          d          $S r   )r5   )r>  _r;   r@   s     r(   r?  zEtest_iterative_imputer_truncated_normal_posterior.<locals>.<listcomp>  s1    KKK1G--a003A6KKKr*   r  normg-q=rR  r  z&The posterior does appear to be normal)rM   rN   r   normalrP   r   rQ   rp   r   r   rC   stdr   )r   imputationsmusigmaks_statisticp_valuer;   r@   s         @@r(   1test_iterative_imputer_truncated_normal_posteriorrf    sf    )


#
#C


AfAaDGsT  G !(KKKKKc

KKKLLK{a     {c!"""""  ""KOO$5$5B"K"$4#=vFFL'zz"K"$4#=vFFL' #30Xr*   c                    t           j                            d          }d}d}|                    dd||f          }|                    dd||f          }d|d d df<   d|d<   t	          dd| |                              |          }t          d| 	                              |          }t          |                    |          d d df         |                    |          d d df                    d S )
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_transformrn    s   
)


"
"CA
Akkaaq!fk55G[[QQaV[44FGAAAqDMF4L1xc  	c'll  $1xHHHLLWUUO &!!!!!Q$')B)B6)J)J111a4)P    r*   c                  Z   t           j                            d          } t           j                            d          }d}d}t          ||d|                                           }t          ddd|           }|                    |           |                    |          }|                    |          }t          j        |          t          j
        t          j        |                    k    sJ t          ddd	d d
|           }t          ddd	d d
|          }	|                    |           |	                    |           |                    |          }
|                    |          }|	                    |          }t          |
|           t          |
|           d S )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_stochasticityry  '  s   9  ##D9  ##DA
AaDtDDDLLNNA 1t$  G KKNNN""1%%J""1%%J 7:&-
0C0C"D"DDDDD
  $  H  $  H LLOOOLLOOO$$Q''K$$Q''K##A&&JK---K,,,,,r*   c                     t           j                            d          } |                     dd          }t           j        |d d df<   t          d|           }t          d|           }|                    |                              |          }|                    |          }t          |d d dd f         |           t          ||           d S )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_missingr  Y  s    
)


"
"CcAfAaaadG	2C	8	8	8B	2C	8	8	8BFF1II""EQEAaaaeHe$$$E5!!!!!r*   c                     t           j                            d          } d}|                     |d          }|                     d|          }t          j        ||          }|                     ||          dk     }|                                }t           j        ||<   t          dd|           }|                    |          }t          ||d           d S )	Nr   2   rk   r   rZ   r%  r+  r  g{Gz?atol)
rM   rN   r   r{  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GGGG$$Y//HHad++++++r*   rankrY   rZ   c                 (   t           j                            d          }d}d}|                    ||           }|                    | |          }t          j        ||          }|                    ||          dk     }|                                }t           j        ||<   |dz  }|d |         }	||d          }
||d          }t          ddd|                              |	          }|	                    |          }t          |
|d	
           d S )Nr   F   r   rJ   rZ   r2  rk   )r%  r/  r+  r  r  r  )rM   rN   r   r{  r  r6   rP   r   r4   r5   r   )r  r   r'  ri   r  r  r  r  r  rk  X_test_filledrl  r@   
X_test_ests                 r(   )test_iterative_imputer_transform_recoveryr  v  s   
)


"
"C
A
ADAqAva||Hxx1~~#HI&Ih 	
QAmGQRRLMqrr]F\13  	c'll  ""6**JM:C888888r*   c            	         t           j                            d          } d}d}|                     ||          }|                     ||          }t          j        |j                  }t          |          D ]H}t          |          D ]6}|d d ||z   |z  fxx         |d d |f         |d d |f         z   dz  z  cc<   7I|                     ||          dk     }|                                }	t           j	        |	|<   |dz  }|	d |         }
||d          }|	|d          }t          dd|                               |
          }|                    |          }t          ||dd	
           d S )Nr   r  rI   rJ   g      ?rk   r  gMbP?{Gz?)rtolr  )rM   rN   r   rO   r   rR   r   r{  r6   rP   r   r4   r5   r   )r   r'  ri   r  r  r  r   r   r  r  rk  r  rl  r@   r  s                  r(   &test_iterative_imputer_additive_matrixr    s   
)


"
"CA
A		!QA		!QAx  H1XX @ @q 	@ 	@AQQQQ!^$$$111a41QQQT7):a(??$$$$	@ xx1~~$HI&Ih 	
QAmGQRRLMqrr]FACHHHLLWUUG""6**JM:DtDDDDDDr*   c                     t           j                            d          } d}d}|                     |d          }|                     d|          }t          j        ||          }|                     ||          dk     }|                                }t           j        ||<   t          dddd| 	          }|                    |          }	t          |j
                  ||j        z  k    sJ t          |j        dd| 
          }|                    |          }
t          |	|
d           t          dddd| 	          }|                    |           |j        |j        k    sJ d S )Nr   r  rZ   rk   r   r  r  F)r%  tolr6  r+  r  )r%  r6  r+  r  gHz>r  )rM   rN   r   r{  r  r6   rP   r   rQ   r   rA  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    sr   
)


"
"C
A	AAAAA
q!Axx1~~#HI&Ih$PS  G ((33Lw+,,GO0CCCCC5!RU  G **955NL.t<<<<!eQS  G KK	?g.......r*   c                  v   t          d          \  } }| j        \  }}d| d d df<   t          j                            d          }d}t          |          D ]M}|                    t          j        |          t          ||z            d          }t          j	        | ||f<   Nt          d	d
          }t          j                    5  t          j        dt                     |                    | |          }	d d d            n# 1 swxY w Y   t          j        t          j        |	                    rJ d S )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GIz AaaadG )


"
"CLj!! % %ZZIi  s9|+C'D'De   
 

 !f*d
!dKKKG		 	"	" - -g~666&&q!,,- - - - - - - - - - - - - - - vbhv&&'''''''s   	1D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                 <   t           j                            d                              dd          }t	          | |          }|                    |           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	                   d S )Nr   rI   rY   r8  r9  rk   )rM   rN   r   rO   r   r4   rI  
_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HHHGKKNNNg("*55 *BJ; ;    $Q'171:55 #qwqz1111 N1aaa4('*<===N1aaa4('*<=====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                            d          }t          | |          }t          j        t
          |          5  |                    |           d d d            d S # 1 swxY w Y   d S )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    s     		!!AiHHHG	z	1	1	1  A                 s   A//A36A3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	          }|                    |                              |          }|                    |                              |          }t          |d d df         |d d df                    d S )
NrJ   rk   rI   r   rY   rl   rZ   r   )r8  r9  r  )rM   rp   rP   r   r4   r5   r   )	min_max_1	min_max_2rk  rl  ru  rv  X_test_imputed1X_test_imputed2s           r(   4test_iterative_imputer_min_max_array_like_imputationr    sR    hVQ1#261VQ26"		
 G X
&!RVQ	!Q!7"&!R9KL F  A,)A,Q  H  A,)A,Q  H ll7++55f==Oll7++55f==OOAAAqD)?111a4+@AAAAAr*   r7  TFc                 *   t           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| |          }|                    |                              |          }| r8t          |d d df         t          j	        |d d df                              d S t          |d d df         g dd           d S )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   rk  rl  r@   r  s         r(   'test_iterative_imputer_skip_non_missingr  0  s"   
 )


"
"Chmmm\\\<<<PQQGX1a(261a*;bfaQ=OPQQF}3  G W%%//77J B
111a4("''!!!Q$-*@*@AAAAA
111a4(+++DAAAAAAr*   
rs_imputer)seedrs_estimatorc                      G d d          } ||          }t          |           }t          j        d          }|                    |           |j        |k    sJ d S )Nc                        e Zd Zd Zd Zd ZdS )Ctest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimatorc                     || _         d S 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  r   kgardss      r(   r4   zGtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.fitJ  s    Kr*   c                 @    t          j        |j        d                   S )Nr   )rM   r   rR   )r  r;   s     r(   predictzKtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.predictM  s    8AGAJ'''r*   N)__name__
__module____qualname__r  r4   r  r;  r*   r(   ZeroEstimatorr  F  sA        	- 	- 	-	 	 		( 	( 	( 	( 	(r*   r  r  r  )r   rM   r   r4   r  )r  r  r  rG  r@   rk  s         r(   ,test_iterative_imputer_dont_set_random_stater  C  s    ( ( ( ( ( ( ( ( <888IJ777GhwGKK!\111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  |                    |                               |           d d d            d S # 1 swxY w Y   d S )Nr   r  r\   r;  )r   
set_paramsr_   ry   rz   r4   r5   )X_fitrA   paramsmsg_err	indicators        r(   test_missing_indicator_errorr  W  s    $ !333II""6"""	z	1	1	1 0 0e&&w///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   )A//A36A3c                     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   }d t          ||           D             S )Nr   r   c                 L    g | ]!\  }\  }}|d k    r|t           j        u|||f"S r\  )rM   rp   )r>  arr_typer0   r$   s       r(   r?  z5_generate_missing_indicator_cases.<locals>.<listcomp>y  sN       -H-~u !##(@(@	 
>5) )A(@(@r*   )rM   int32rP   float64rp   r   r    r   r!   r   r   )missing_values_dtypes	arr_typess     r(   !_generate_missing_indicator_casesr  o  s    ]RVRZ,@2rx.Q	

	
	 	 		
 	  18,2
 2
   r*   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          }	 ||                              |          } ||                              |          }|                    |          }|	                    |          }	t          | |d	          }
|
                    |          }|
                    |          }|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 |
                    d
           |
                    |          }|
                    |          }|j
        t          k    sJ |j
        t          k    sJ |j        dk    sJ |j        dk    sJ t          |                                |           t          |                                |           d S )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$   boolrI  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    s    H~~q9Aq.;QRSSEh;[[[IJJGXyyy)))455NxIII 677 HUOO""5))Ehw&&u--G#**511N'..u55 %u  I ((//J&&w//LA*,,,,a J....y*,<===Jqqq2B/B CDDDL"21116F3F"GHHHt####%%%%j"*-----lBJ/////%%%!//66#--g66"d****$,,,,#u,,,,%....%--//<<<'//1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  |                    |           d d d            n# 1 swxY w Y   |                    |           t          j        t
          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )	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H~~q9A~q;QRSSEh;[[[IJJG 8E??LXg&&N ???I	z)M	N	N	N . .---. . . . . . . . . . . . . . . E"""	z)M	N	N	N , ,N+++, , , , , , , , , , , , , , , , , ,s$   ;BB!$B!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          } | |                              t           j                  } | |                              t           j                  }t	          ||          }|                    |          }|                    |          }|du r|j        dk    sJ |j        dk    sJ d S |dk    r@|d	k    r:t          |t           j	                  sJ t          |t           j	                  sJ d S |d
u r:t          |t           j	                  sJ t          |t           j	                  sJ d S t          j        |          r|j        dk    sJ |j        dk    sJ d S t          |t           j	                  sJ t          |t           j	                  sJ d S )Nrk   rl   rJ   r  )r0   r   Tr  r  r   F)rM   rp   r  r  r   rQ   r5   r8   rI  r  r   r9   )r  r0   r  r  rA   r  r  r  s           r(   #test_missing_indicator_sparse_paramr    s   " H~~q9A~q;QRSSEh;[[[IJJGHUOO""2:..Ehw&&rz22G |TTTI((//J&&w//Lt E))))"e++++++			Na$7$7*bj11111,
3333333			*bj11111,
3333333?5!! 	8$----&%//////j"*55555lBJ7777777r*   c                      t          j        g dg dgt                    } t          dd          }|                    |           }t          |t          j        g dg dg                     d S )	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    s{    
///???36BBBA eDDDI%%a((Gw*>*>*>@T@T@T)U V VWWWWWr*   zX, missing_values, X_trans_exp)rg   rg   TF)rg   rg   FT)r   r   TF)r   r   FTc                     t          t          |d          t          |                    }|                    |           }t	          ||           d S )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NN77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                            d          }|                    dd          }||d<    | |          }t	          j        t          |          5  |                    |           d d d            d S # 1 swxY w Y   d S )NrZ  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  #  s     )


#
#C		"bAAdG!!1GHHHG	z	1	1	1 ! !a   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   "BB	B	c                      t          j        ddgddgg          } t          dd          }|                    |           }|j        d         dk    sJ d S )Nrk   r  r   r  r0   r   )rM   rp   r   rQ   rR   )r;   mir"  s      r(   !test_missing_indicator_no_missingr  :  sb     	1a&1a&!""A	>"	E	E	EB			!		B8A;!r*   c                      | g dg dg dg          }t          dd          }|                    |          }|                                |                                k    sJ d S )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  sr     	yyy)))YYY788A	5	;	;	;B			!		B99;;"&&((""""""r*   c                     t          j        ddgddgg          } |             }|                    |           |j        J d S )Nrk   )rM   rp   r4   
indicator_)r	  r;   r@   s      r(   test_imputer_without_indicatorr  Q  sP    
1a&1a&!""A!!##GKKNNN%%%%%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          }|                    |          }t          j        |          sJ |j        |j        k    sJ t          |	                                |           d S )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    
 x"&!Q!RVQ!QSTTHX************		
 F 26FFFG##H--G?7#####=FL((((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	          |           }|                    |          }t          ||           d S )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  sr     sc26]#AXSzC?36BB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                            d          }|                    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          	                    |          }d |j
        D             }||k    sJ 	 d d d            d S # 1 swxY w Y   d S )NrZ  r  rZ   r  rk      r      rJ   rI   rl   )r%  r/  r  c                     g | ]	}|j         
S r;  r<  )r>  r&   s     r(   r?  z)test_imputation_order.<locals>.<listcomp>  s    <<<aqz<<<r*   )rM   rN   r   r{  rP   r_   r`   r
   r   r4   rA  )order	idx_orderr   r;   trsidxs         r(   test_imputation_orderr,    sA    )


#
#CaAAcrc1fIAcrc1fIAcrc1fIAcrc1fI	(	)	)    EPQRRRVV
 
 =<3#;<<<i                                   s   ?C((C,/C,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          }|                    |          }|                    |          }|                    |          }|                    |          }	t          ||           t          |	|           ||fD ]<}
|                    |
          }|                    |          }t          ||
           =d S )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_transformr9    s    (q"%MM="%1m$		
 C (LL=!$q!$1m$		
 C (q!$A}m<q-0A}a0		
 C (LLA}a0LLA}a0		
 C $vT  G %%c**I--i88M!!#&&I--i88M}c***}c***3Z + +''**//88;****+ +r*   c           	      B   t          j        d| ddgg ddd| dgddd| gg          }t          | d	
          }|                    |          }t	          j        t          d|j         d          5  |                    |           d d d            d S # 1 swxY w Y   d S )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   r0  r@   r4  s       r(   3test_simple_imputation_inverse_transform_exceptionsr<    s   
(q"%MM="%1m$		
 C =6JJJG%%c**I	H0EHHH
 
 
 - - 	!!),,,- - - - - - - - - - - - - - - - - -s   1BBBz)expected,array,dtype,extra_value,n_repeatextra_valuer  most_frequent_value)r>  r>  valuer8  min_valuevalue)r8  r8  r?  r   rk   rJ   rY   )rk   rk   rJ   )r&  r&  rk   )rk   rk   r&  c                 \    | t          t          j        ||          ||          k    sJ d S )Nrj   )r   rM   rp   )r"  rp   r$   r=  n_repeats        r(   test_most_frequentrD    sG    , ~
e$$$k8       r*   rL   c                 X   t          j        dt           j        dgdt           j        t           j        gg          }t          | d          }|                    |          }t          |dddf         d           |                    |          }t          |dddf         d           dS )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_featuresrF    s     	1bfa.1bfbf"5677A)t  G %%a((IIaaadOQ'''!!!$$IIaaadOQ'''''r*   c                      t          j        g dg dg dg dg          } d}t          dd|dd	
          }|                    |            t	          |j        j        |           dS )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_valuerH    s    
.........---PQQAJ#   G !w/;ZHHHH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                              |           }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                              |           }| 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 dS )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   rT  r   r_   rp  r   )r;   r8  r9  rS   X_without_missing_columns        r(   1test_iterative_imputer_min_max_value_remove_emptyrL     s    	2626"2612626"RVR 		
	 	A &26'BF7A.I+I !   mA	   "yAA666?6<<<<<6)BH%=>>?@@FMRSDTDTTTTT6)BH%=>>?@@FMRSDTDTTTTT 	2626"1bf2626"R 		
	 	A &26'30IBF+I !   mA	   !BQBx?6<<<<<6)BH%=>>?@@FMRUDVDVVVVV6)BH%=>>?@@FMRSDTDTTTTTTTr*   r   c                    t          j        dt           j        dgdt           j        t           j        gg          }t          |           }dD ]r} t	          ||          |          }| r-|j        |j        k    sJ t          |dddf         d           J|j        |j        d         |j        d         dz
  fk    sJ sdS )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_featuresrQ  W  s     	1bfa.1bfbf"5677A-@AAAG0 C C,GGV,,Q//	 	C?ag----yA2222?qwqz171:>&BBBBBBC Cr*   c            	         t          j        d          } |                     d|                     g dd          i          }t	          | j        dd          }t          |                    |          t          j	        d	gdgd
ggt                               |                     d|                     g dd          i          }t	          dd          }t          |                    |          t          j	        d	gd
gdggt                               |                     d|                     g dd          i          }t	          | j        dd          }t          |                    |          t          j	        dgdgdggd                     t	          t          j        dd          }t          |                    |          t          j	        dgdgdggd                     |                     d|                     g dd          i          }t	          | j        d          }t          |                    |          t          j	        dgdgdgdggd                     |                     d|                     g dd          i          }t	          | j        d          }t          |                    |          t          j	        dgdgdggd                     |                     d|                     g dd          i          }t	          | j        dd          }t          |                    |          t          j	        dgdgdggd                     |                     d|                     g d d          i          }t	          | j        d          }t          |                    |          t          j	        dgd!gd!gdggd                     d S )"Nrd   feature)abcNdestringrj   rF   nar   rT  rU  )rT  rU  fghok)r   r1   rX  )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]  g  s   		X	&	&B 
y")),?,?,?x)"P"PQ	R	RB25:RVWWWG&b!!28eWtftf,EV#T#T#T  
 
y")),@,@,@)"Q"QR	S	SBtjAAAG&b!!28eWtfug,Ff#U#U#U  
 
y"))LLL)"H"HI	J	JB25:RTUUUG#b!!28aS2$,<I#N#N#N  
 26JSUVVVG#b!!28aS2$,<I#N#N#N  
 
y"))OOO7)"K"KL	M	MB258DDDG#b!!28aS1#sQC,@	#R#R#R  
 
y"))LLL)"H"HI	J	JB256BBBG#b!!28aS3%!,=Y#O#O#O  
 
y")),<,<,<I)"N"NO	P	PB25:RVWWWG#b!!28cUTFSE,B)#T#T#T  
 
y")),A,A,A)"S"ST	U	UB258DDDG#b!!
3%#u-Y???    r*   c                  "   t          j        d          } t          j        }|                     ||d|gd|ddggg d          }t          |                              |          }|                                }g d	}t          ||           d
S )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_outrd    s    		X	&	&BVN
^Q?2&	
 %$$ 	 	 	A !???CCAFFI3355MWWWN~}55555r*   c                     ddgddgddgg} t          d                              |           }|                    t          j        t          j        gg          }|j        t          k    sJ t          |ddgg           dS )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_transformrg    s     sc3Z#s,A /:::>>qAAL$$rvrv&6%788G=F""""w#s-----r*   
dtype_testc                 z   t          j        ddt           j        gt           j        ddgg dgt           j                  }t	                                          |          }t          j        t           j        t           j        t           j        gg|           }|                    |          }|j        | k    sJ dS )zACheck transform preserves numeric dtype independent of fit dtype.r   g333333@r  )g@rJ   rk   rj   N)rM   asarrayrP   r  r   r4   r5   r$   )rh  r;   imprl  rA   s        r(   .test_imputer_transform_preserves_numeric_dtyperl    s     	

sBF	bfc3/=RZ	 	 	A //

a
 
 CZ"&"&"&12*EEEFmmF##G=J&&&&&&r*   
array_typerp   r   c                 p   t          j        t           j        dgt           j        dgt           j        dgg          }t          ||           }d}t	          d||          }dD ]}|                    d          rQ|sOd	}t          j        t          |
          5   t          ||          |          }ddd           n# 1 swxY w Y   n t          ||          |          }|j
        |j
        k    sJ | dk    r|dddf                                         n|dddf         }t          ||           dS )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  rN  r4   z7`strategy="constant"`, empty features are not dropped. r\   Nr   r   )rM   rp   rP   r   r   
startswithr_   r`   FutureWarningrO  rR   r:   r   )	rm  r   r;   r   r@   rP  warn_msgrS   constant_features	            r(   0test_simple_imputer_constant_keep_empty_featuresrs    s    	261+{RVQK899A1j))AJ/  G 1 9 9U## 	4,? 	4PHm8<<< 8 84GGV44Q77	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 10033I!')))))3x)?)?IaaadO##%%%YqqqRSt_ 	 	+Z88889 9s   B>>C	C	c                    t          j        t           j        dgt           j        dgt           j        dgg          }t          ||          }t	          | |          }dD ]} t          ||          |          }|rS|j        |j        k    sJ |dk    r|dddf                                         n|dddf         }t          |d           p|j        |j        d         |j        d	         d	z
  fk    sJ dS )
zYCheck the behaviour of `keep_empty_features` with all strategies but
    'constant'.
    rJ   rY   r   r
  rN  r   Nr   rk   )	rM   rp   rP   r   r   rO  rR   r:   r   )r1   rm  r   r;   r@   rP  rS   rr  s           r(   'test_simple_imputer_keep_empty_featuresru    s#    	261+{RVQK899A1j))AXCVWWWG0 	C 	C,GGV,,Q//	 	C?ag-----78-C-C	!!!Q$'')))STSTSTVWSW  /3333?qwqz171:>&BBBBBB	C 	Cr*   c           
      R   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                  }|                    |          }t          ||           t          t           j        t           j                  }|                     | |                    }t          |                                |           d S )N)r   r   r   333333@r   r  )r  r  r  )g@r  r  皙?)rw  r   r   )r  r  r   )r  rx  rx  r/   )rM   rp   rP   r   rT  rQ   r   r:   )rw   r;   r<   r@   rA   s        r(   test_imputation_customry    s%   
OO#rvVS"&!OOOOVS#	
		 		A XOOOOOOOOOOOO	
	 	F 26BFCCCG##A&&Gw''' 26BFCCCG##MM!$4$455Gw((&1111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  |
                    |           ddd           n# 1 swxY w Y   t          j        g dg dgt           j                  }|
                    |           d|j        j        d
}t          j        t          t          j	        |                    5  |                    |           ddd           n# 1 swxY w Y   t          j        d          ddg}|                    t           j                  }|D ];} t          d| d          }|                    |          }|j        |j        k    sJ <dS )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  rA  )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  (  s^    Jh			999-RX>>>G
1  G YJXXD4D4DXXXG	z7););	<	<	<  G               )))YYY/rzBBBIKK		0C0I 	 	 	  
z7););	<	<	< # #'"""# # # # # # # # # # # # # # # z#Q/O  ,,I% 0 0
Jq
 
 
 ''	22}	/////0 0s$   >B  B$'B$#EE	E	c                 6   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	          |                    |          |                    |                     d
S )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     	261a.1bfa.1a.ABBA"2!aU# # # #3!aT# # # #11!44#11!44    r*   rl  )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          }|                    |          }|                    |          }t          | dd	          }|                    |          }|                    |          }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 d
S )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   rl  rk  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  sd   $ h
&"&!Q	"&!RVQ!7"&!Q9OP G #3!aU# # # #>"K"KG"T"T!<!F!Fv!N!N"2!aT# # # #>"K"KG"T"T!<!F!Fv!N!N/1LQQQPQPRPRU1STTT/15q999&,Q/3M3STU3VVVVV&,Q/3M3STU3VVVV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   rj  r  r  r  r  r  r#  r)  r,  r.  rF  rP  rV  rX  rf  rn  ry  r  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,  r9  r<  r  rD  rF  rH  rL  rQ  r]  rd  rg  r|  r  rl  rs  ru  ry  r  r  r  r;  r*   r(   <module>r     s   				 				                               * * * * * * ( ( ( ( ( ( 1 1 1 1 1 1 : 9 9 9 9 9 X X X X X X X X X X X X / / / / / / F F F F F F F F F F 0 0 0 0 0 0 1 1 1 1 1 1 1 1 ; ; ; ; ; ;                            
  
$= $= $=N %T%T%TUU.99& & :9 VU&  %H%H%HII  JI %H%H%HII  JI2 %T%T%TUU.99  :9 VUF F FD D D .99B
 B
 :9B
J .99  :9D fh%7884"566! ! 76 98! fh%788&+!677! ! 87 98! j/%BCC3xrx}}"EFF$ $ GF DC$& .99X X :9X6 D"&%Q#?@@( ( A@(8 6:"677( ( 87(& 06C=2IJJ! ! KJ! ( ( (  ,n
|.KLL2 2 ML2: D"&%Q#?@@( ( A@(F 6:"677( ( 87(0 aSzQC"&?;<<    =<   &%) %) %)VQ Q Q0  F F F PPP "6 "6 "6J $((--//==??GGIIV + + +2+ + + + + +0Y Y YB %H%H%HII  JI,/- /- /-d" " ", , , !Q((9 9 )(90E E E4/ / /<( ( (2 *	
CA37SEAI.//0	tXRXy1}rvhl;<<=
&"&("(bfWIMBF8a<#@AAB	oooxrxooo0N'O'OP"&"#rvBHrBF7B'#sBF);<==	

 	FEE   > > >$ #+	"&34
a---!=>	c3Z!=>	    TlbfWbf%&#rcUQYq4I(JK	*+   
B B 
B0 4-88B B 98B$ a1F1FA1F1N1N'OPP$293H3Ha3H3P3P)QRR2 2 SR QP2$ % BHr1g1v&''BHr1g2w'(('6::P		
 BHsCj3*-S999BHsCj3*-S999?		
 "0 0# "0  & %'H'H'J'J  2a))),,-q("(999:M:M/NO )A )A	  )AX ^#n4~EV , ,	 ,* )>)>)>??h]O
d  	
 VH	
 	
	 	
 8 8  @?8:X X X $ BHsCj3*-V<<<BH---/F/F/FGvVVV	
 BHrvsmc26]344FBH---/F/F/FGHH	
 BHrvsmc26]36BBBFBH---/F/F/FGvVVV	
 BHtSkC;/v>>>BH---/F/F/FGvVVV	
! 2- -3 2- .@P0QRR4	./> ! !  SR!   .99# # :9# .@P0QRR& & SR& ^#n4~EV / /	 /& 13PQ ( ( ( ???#lOOO%DE    	  " 2rv,776+ 6+ 876+r 2rv,77- - 87-$ / 
B!CCC	
 
{,-vsA>	99963J	YYYR#	
IIIsB"	[[[#r1%	
JJJR#! * + * GGG ( ( ("I I I 4U 4U 4Un .u>>C C ?>C9 9 9x6 6 6&
. 
. 
. 
BJ'?@@	' 	' A@	' ':;;.u>>9 9 ?> <;9: ':;;%H%H%HII.u>>C C ?> JI <;C( .992 2 :92B$0 $0 $0N %T%T%TUU  VU2 %T%T%TUU,,,-..261a#bfaA%67881aBF#aArv%6788 W W  VUW W Wr*   