U
    ½mœd0à  ã                   @   sÌ  d dl Z d dlZd dlZd dlmZ d dlm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 d dl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  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„ Z+dd„ Z,dd„ Z-e j. /ddddd g¡d!d"„ ƒZ0e j. /ddddg¡d#d$„ ƒZ1e j. /ddddg¡d%d&„ ƒZ2e j. /ddddd g¡d'd(„ ƒZ3d)d*„ Z4d+d,„ Z5d-d.„ Z6d/d0„ Z7e j. /dddg¡e j. /d1de8e9g¡d2d3„ ƒƒZ:e j. /dddg¡e j. /d4d5d6g¡d7d8„ ƒƒZ;e j. /dd dg¡e j. /d1e9e <d9¡e <d:¡g¡d;d<„ ƒƒZ=d=d>„ Z>e j. /d?dej?d@dAd g¡dBdC„ ƒZ@e j. /d1e8dDg¡dEdF„ ƒZAe j. /dGdHdIej?fg¡dJdK„ ƒZBdLdM„ ZCe j. /dNejDejEg¡dOdP„ ƒZFe j. /d?dej?d@dAd g¡dQdR„ ƒZGe j. /d1e8dDg¡dSdT„ ƒZHe j. /dUdVgdWggdVgej?ggg¡dXdY„ ƒZIdZd[„ ZJd\d]„ ZKd^d_„ ZLd`da„ ZMdbdc„ ZNe j. /dddedfdgdhdig¡djdk„ ƒZOe j. /dldeƒ eƒ eƒ eƒ g¡dmdn„ ƒZPdodp„ ZQdqdr„ ZRdsdt„ ZSe j. /ddddg¡dudv„ ƒZTdwdx„ ZUdydz„ ZVd{d|„ ZWe j. /d}d~dg¡d€d�„ ƒZXd‚dƒ„ ZYd„d…„ ZZd†d‡„ Z[e j.j/dˆd d‰e \d gd~ d‰gd~ g¡fdde \ej] gd~ ej]gd~ g¡fej] ej]e \ej] gd~ ej]gd~ g¡fdŠdd‹gd‰dŒd�ge \dŠdd‹gd‰dŒd�gg¡fdŠej] d‹gd‰dŒej]ge \dŠej] d‹gd‰dŒej]gg¡fgdŽd�d�d‘d’gd“�d”d•„ ƒZ^e j. /d–d—ej]ej] d˜fdŠdgd‰dŒd gd™fg¡dšd›„ ƒZ_e j.j/dœddgej] ej]gfd�d‹gd�gdž d‹gdž gfgdŸd gd“�d¡d¢„ ƒZ`e j. /d£d¤d¥g¡d¦d§„ ƒZae j. /d¨ddVejbjcdVd©�g¡e j. /dªddVejbjcdVd©�g¡d«d¬„ ƒƒZde j. /d­e \d®dVgdVdWgg¡e \d®dVgdVd®gg¡d¯d°d±œd²fej\d³d´gdµd³gge9d¶�ej\d³d´gdµd³gge9d¶�i d·fg¡d¸d¹„ ƒZee j. /dºej?ejfej\fd ejgej\fd®ejgej\fej?ejfejhfd®ejgejhfej?ejfejDfd®ejgejDfej?ejfejifd®ejgejifej?ejfejjfd®ejgejjfej?ejfejkfd®ejgejkfg¡e j. /d»d¯d~e \d dVdWg¡fd¼d~e \d dVdWg¡fg¡d½d¾„ ƒƒZle j. /d¿ejhejDejiejjejkg¡dÀdÁ„ ƒZme j. /dÂd¤d¥d°g¡e j. /dÃej?ej\fd ej\fej?ejhfej?ejDfej?ejifej?ejjfg¡dÄdÅ„ ƒƒZndÆdÇ„ Zoe j. /dÈej\d³d´gd´d³gge8d¶�d³ej\d´d´d¤d¥gd´d´d¥d¤gge8d¶�fe \ej?dIgdIej?gg¡ej?e \dIdId¤d¥gdIdId¥d¤gg¡fej\ej?d´gd´ej?gge8d¶�ej?ej\d´d´d¤d¥gd´d´d¥d¤gge8d¶�fej\dd´gd´dgge8d¶�dej\d´d´d¤d¥gd´d´d¥d¤gge8d¶�fg¡dÉdÊ„ ƒZpe j. /dËeeg¡e j. /dÌdÍej?dÎfdÏg¡dÐdÑ„ ƒƒZqdÒdÓ„ ZrdÔdÕ„ Zse j. /dËeeg¡dÖd×„ ƒZte j. /d¿ejhejDejiejjejkg¡dØdÙ„ ƒZue j. /dÚdÛdÜg¡dÝdÞ„ ƒZve j. /dßdgd~dždWd dVgfdhdVd dWdžd~gfg¡dàdá„ ƒZwe j. /dâd®ej?g¡dãdä„ ƒZxe j. /dâd®ej?g¡dådæ„ ƒZye j. /dçdèd³d´dµge8dèdWfdédédédêge8dèdVfd³dëdìge8d³dWfdëdëdëdêge8dídWfd‹dVdWd~gezd‹dWfdVdVdVdWgezd‹dVfd‹dîdîdVgezd‹dWfdVdVdVdîgezd‹dWfg¡dïdð„ ƒZ{e j. /dñdddd g¡dòdó„ ƒZ|e j. /dôd¤d¥g¡dõdö„ ƒZ}d÷dø„ Z~dùdú„ Zdûdü„ Z€e j. /dýej�ejfg¡dþdÿ„ ƒZ‚e j. /�d �d�dg¡e j. /dôd¤d¥g¡�d�d„ ƒƒZƒe j. /�d �d�dg¡e j. /ddddg¡e j. /dôd¤d¥g¡�d�d„ ƒƒƒZ„dS (  é    N©Úsparse)Úkstest)Ú_convert_container)Úassert_allclose)Úassert_allclose_dense_sparse)Úassert_array_equal)Úassert_array_almost_equal)Úenable_iterative_imputer)Úload_diabetes)ÚMissingIndicator)ÚSimpleImputerÚIterativeImputerÚ
KNNImputer)ÚDummyRegressor)ÚBayesianRidgeÚARDRegressionÚRidgeCV)ÚPipeline)Ú
make_union)ÚGridSearchCV)Útree)Ú_sparse_random_matrix)ÚConvergenceWarning)Ú_most_frequentc                 C   s   t | |ƒ | j|jkst‚d S ©N)r   ÚdtypeÚAssertionError©ÚxÚy© r!   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/impute/tests/test_impute.pyÚ"_assert_array_equal_and_same_dtype!   s    
r#   c                 C   s   t | |ƒ | j|jkst‚d S r   )r   r   r   r   r!   r!   r"   Ú_assert_allclose_and_same_dtype&   s    
r$   c           	      C   sæ   d||f }t }| jjdks(|jjdkr,t}t||d�}| | ¡ |  ¡ ¡}||j|| 	d¡d� |||| 	d¡d� t||d�}| t
 | ¡¡ | t
 |  ¡ ¡¡}t
 |¡r¸| ¡ }||j|| 	d¡d� |||| 	d¡d� dS )zâUtility 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 = %s, missing_values = %s, sparse = {0}Úf©Úmissing_valuesÚstrategyF)Úerr_msgTN)r   r   Úkindr	   r   ÚfitÚ	transformÚcopyZstatistics_Úformatr   Ú
csc_matrixÚissparseÚtoarray)	ÚXÚX_truer(   Ú
statisticsr'   r)   Z	assert_aeÚimputerÚX_transr!   r!   r"   Ú_check_statistics+   s$    	þ
r7   r(   ÚmeanÚmedianÚmost_frequentÚconstantc                 C   s„   t j dd¡}t j|d d d…< t| d�}| t |¡¡}|jdksFt	‚| |¡}|jdks^t	‚t
| d�}| |¡}|jdks€t	‚d S )Né
   é   ©r(   )r<   r=   )Úinitial_strategy)ÚnpÚrandomÚrandnÚnanr   Úfit_transformr   Ú
csr_matrixÚshaper   r   )r(   r2   r5   Ú	X_imputedZiterative_imputerr!   r!   r"   Útest_imputation_shapeP   s    



rH   c              	   C   st   t  d¡}t j|d d …df< t| dd�}tjtdd�� | |¡ W 5 Q R X tjtdd�� | 	|¡ W 5 Q R X d S )N©é   é   r   é   ©r(   ÚverboseúThe 'verbose' parameter©ÚmatchZSkipping)
r@   ÚonesrC   r   ÚpytestÚwarnsÚFutureWarningr+   ÚUserWarningr,   ©r(   r2   r5   r!   r!   r"   Ú test_imputation_deletion_warninga   s    
rX   c              	   C   s¬   t  d¡}tj}tjddddgtd�}|j||d|gd|d	d
gg|d�}t| dd�}t jt	dd�� | 
|¡ W 5 Q R X t|j|ƒ t jtdd�� | |¡ W 5 Q R X d S )NÚpandasÚaÚbÚcÚd©r   rL   é   r=   r<   ©ÚcolumnsrM   rO   rP   z6Skipping features without any observed values: \['b'\])rS   Úimportorskipr@   rC   ÚarrayÚobjectÚ	DataFramer   rT   rU   r+   r   Zfeature_names_in_rV   r,   )r(   Úpdr'   Úfeature_namesr2   r5   r!   r!   r"   Ú.test_imputation_deletion_warning_feature_nameso   s$    


þû ÿrh   c              	   C   s‚   t  d¡}d|d< t |¡}t| dd�}tjtdd�� | |¡ W 5 Q R X | | 	¡ ¡ tjtdd�� | 
|¡ W 5 Q R X d S )NrI   r   )r(   r'   zProvide a dense arrayrP   )r@   rR   r   r/   r   rS   ÚraisesÚ
ValueErrorr+   r1   r,   rW   r!   r!   r"   Útest_imputation_error_sparse_0Ž   s    

rk   c                 O   s8   t | dƒr| jnt| ƒ}|dkr&tjS tj| f|ž|ŽS ©NÚsizer   )Úhasattrrm   Úlenr@   rC   r9   ©ZarrÚargsÚkwargsÚlengthr!   r!   r"   Úsafe_medianž   s    rt   c                 O   s8   t | dƒr| jnt| ƒ}|dkr&tjS tj| f|ž|ŽS rl   )rn   rm   ro   r@   rC   r8   rp   r!   r!   r"   Ú	safe_mean¤   s    ru   c               
   C   sv  t j d¡} d}d}|| || f}t  |d ¡}t  d|d d ¡}|dd d…  |dd d…< dt jdd„ fd	t jd
d„ fg}|D �]ê\}}}	t  |¡}
t  |¡}t  |d ¡}t|d ƒD �]Z}|| d dk|| d  || d  }t|d ||  || ||   dƒ}|d | | }|d |… }t  	||¡}||  
t|ƒ¡d |…  }|	|||ƒ||< t  |||f¡|
d d …|f< d|k�r¶t  |t  	|| || ¡f¡|d d …|f< n(t  ||t  	|| |¡f¡|d d …|f< t j |¡ |
d d …|f ¡ t j |¡ |d d …|f ¡ q¾|d	k�r<t  |¡jdd� }nt  |¡jdd� }|d d …|f }t|
||||ƒ q„d S )Nr   r<   rL   r_   r=   r8   c                 S   s   t t | |f¡ƒS r   )ru   r@   Úhstack©ÚzÚvÚpr!   r!   r"   Ú<lambda>¸   ó    z-test_imputation_mean_median.<locals>.<lambda>r9   c                 S   s   t t | |f¡ƒS r   )rt   r@   rv   rw   r!   r!   r"   r{   ¹   r|   )Zaxis)r@   rA   ÚRandomStateÚzerosÚarangerC   ÚemptyÚrangeÚmaxÚrepeatZpermutationro   rv   ÚshuffleÚisnanÚanyÚallr7   )ÚrngÚdimÚdecrF   r~   ÚvaluesÚtestsr(   Ztest_missing_valuesZtrue_value_funr2   r3   Ztrue_statisticsÚjZnb_zerosZnb_missing_valuesZ	nb_valuesrx   rz   ry   Zcols_to_keepr!   r!   r"   Útest_imputation_mean_medianª   sJ    þ

(&
ÿÿ 
rŽ   c                  C   sÚ   t  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  dddgdddgdddgdddgddd	gddd
gdddgdddgg¡ ¡ }ddddd	d
ddg}t| |d|t jƒ d S )Nr   rK   éûÿÿÿr_   éüÿÿÿéÿÿÿÿr=   g      Àg      @g      @g      Àç      à?r9   )r@   rc   rC   Z	transposer7   )r2   ZX_imputed_medianZstatistics_medianr!   r!   r"   Ú$test_imputation_median_special_casesí   s0    





øÿøÿr“   r   c              	   C   s\   t jdddgdddgddd	gg|d
�}d}tjt|d�� t| d�}| |¡ W 5 Q R X d S )NrZ   r[   rJ   r_   Úeé   ÚgÚhé	   r^   ú6non-numeric data:
could not convert string to float: 'rP   r>   )r@   rc   rS   ri   rj   r   rD   )r(   r   r2   Úmsgr5   r!   r!   r"   Ú.test_imputation_mean_median_error_invalid_type  s
    &
r›   ÚtypeÚlistÚ	dataframec              	   C   sn   dddgdddgddd	gg}|d
kr8t  d¡}| |¡}d}t jt|d�� t| d�}| |¡ W 5 Q R X d S )NrZ   r[   rJ   r_   r”   r•   r–   r—   r˜   rž   rY   r™   rP   r>   )rS   rb   re   ri   rj   r   rD   )r(   rœ   r2   rf   rš   r5   r!   r!   r"   Ú:test_imputation_mean_median_error_invalid_type_list_pandas  s    


rŸ   ÚUÚSc              	   C   s€   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�}d}tjt|d	��  t| d
�}| |¡ |¡ W 5 Q R X d S )NrZ   r%   r\   r]   r[   r—   r^   z#SimpleImputer does not support datarP   r>   )	r@   rc   rC   rS   ri   rj   r   r+   r,   )r(   r   r2   r)   r5   r!   r!   r"   Ú/test_imputation_const_mostf_error_invalid_types$  s    üù

r¢   c               	   C   sz   t  ddddgddddgddddgddddgg¡} t  dddgdddgdddgdddgg¡}t| |dt jdddgdƒ d S )	Nr‘   r   rK   r=   rJ   rL   é   r:   )r@   rc   r7   rC   )r2   r3   r!   r!   r"   Útest_imputation_most_frequent9  s    



üÿ	üÿr¤   ÚmarkerZNANÚ c                 C   sŽ   t j| | ddg| d| dg| dd| g| dddggtd�}t jdddgdddgdddgdddggtd�}t| dd	�}| |¡ |¡}t||ƒ d S )
NrZ   r%   r\   r]   r[   r—   r^   r:   r&   )r@   rc   rd   r   r+   r,   r   ©r¥   r2   r3   r5   r6   r!   r!   r"   Ú%test_imputation_most_frequent_objectsT  s&    



üù
üù
r¨   Úcategoryc                 C   sr   t  d¡}t d¡}|j|| d�}tjdddgdddgdddgd	ddggtd�}td
d�}| 	|¡}t
||ƒ d S )NrY   ú,Cat1,Cat2,Cat3,Cat4
,i,x,
a,,y,
a,j,,
b,j,x,r^   rZ   Úir   r�   r    r[   r:   r>   ©rS   rb   ÚioÚStringIOZread_csvr@   rc   rd   r   rD   r   ©r   rf   r%   Údfr3   r5   r6   r!   r!   r"   Ú$test_imputation_most_frequent_pandasq  s    

"þ

r±   zX_data, missing_value)rL   r   ç      ð?c              	   C   sN   t jd| td�}||d< tjtdd�� t|ddd�}| |¡ W 5 Q R X d S )	NrI   r^   ©r   r   zimputing numericalrP   r;   r   ©r'   r(   Ú
fill_value)r@   ÚfullÚfloatrS   ri   rj   r   rD   )ZX_dataÚmissing_valuer2   r5   r!   r!   r"   Ú+test_imputation_constant_error_invalid_type…  s      ÿr¹   c               	   C   sŠ   t  ddddgddddgddddgdd	d
dgg¡} t  d
ddd
gdd
dd
gddd
d
gdd	d
d
gg¡}tddd
d�}| | ¡}t||ƒ d S )Nr‘   r=   rJ   r_   rK   r•   r£   é   r˜   r   r;   r´   )r@   rc   r   rD   r   )r2   r3   r5   r6   r!   r!   r"   Ú test_imputation_constant_integer’  s
    22
r»   Úarray_constructorc              	   C   s¦   t  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  ddddgddddgddddgddddgg¡}| |ƒ}| |ƒ}tddd	�}| |¡}t||ƒ d S )
Ngš™™™™™ñ?r   ç333333ó?çÍÌÌÌÌÌô?gffffffö?ç      ø?r‘   r;   )r(   rµ   )r@   rc   rC   r   rD   r   )r¼   r2   r3   r5   r6   r!   r!   r"   Útest_imputation_constant_floatž  s    üÿ	*ÿ
rÀ   c                 C   s’   t j| dd| gd| d| gdd| | gddd	| ggtd
�}t jddddgddddgddddgddd	dggtd
�}t| ddd�}| |¡}t||ƒ d S )NrZ   r[   r\   r]   r”   r%   r–   r—   r«   r^   Úmissingr;   r´   )r@   rc   rd   r   rD   r   r§   r!   r!   r"   Útest_imputation_constant_object¸  s.    



üù




üù
  ÿ
rÂ   c                 C   sz   t  d¡}t d¡}|j|| d�}tjddddgddddgdd	ddgd
d	ddggtd�}tdd�}| 	|¡}t
||ƒ d S )NrY   rª   r^   r¸   r«   r   rZ   r    r�   r[   r;   r>   r¬   r¯   r!   r!   r"   Útest_imputation_constant_pandas×  s    





üù


rÃ   r2   rL   r=   c                 C   sf   t ƒ  | ¡}|jdkst‚t ƒ }| dgdgg¡ |jdks@t‚| dgtjgg¡ |jdksbt‚d S )Nr   rL   r=   )r   r+   Ún_iter_r   r@   rC   ©r2   r5   r!   r!   r"   Ú"test_iterative_imputer_one_featureð  s    rÆ   c                  C   st   t dddd�} | jd }tdt|d�fdtjdd�fgƒ}d	d
ddgi}t dddd� ¡ }t||ƒ}| | |¡ d S )Néd   çš™™™™™¹?)Údensityr   r5   ©r'   r   ©Úrandom_stateZimputer__strategyr8   r9   r:   rL   )	r   Údatar   r   r   ZDecisionTreeRegressorr1   r   r+   )r2   r'   ZpipelineÚ
parametersÚYÚgsr!   r!   r"   Ú$test_imputation_pipeline_grid_searchü  s    
þÿ
rÑ   c                  C   sv  t ddddd�} |  ¡  ¡ }tdddd�}| |¡ |¡}d|d	< t ||k¡rTt‚|  ¡ }t|j	d ddd�}| |¡ |¡}d|j	d< t |j	|j	k¡r t‚|  ¡  ¡ }tddd
d�}| |¡ |¡}d|d	< t
||ƒ |  ¡  ¡ }t|j	d dd
d�}| |¡ |¡}d|j	d< t
|j	|j	ƒ |  ¡ }t|j	d dd
d�}| |¡ |¡}d|j	d< t |j	|j	k¡�rrt‚d S )NrK   g      è?r   ©rÉ   rÌ   r8   T)r'   r(   r-   r‘   r³   F)r   r-   r1   r   r+   r,   r@   r‡   r   rÍ   r	   Ztocsc)ZX_origr2   r5   ÚXtr!   r!   r"   Útest_imputation_copy  s4    



rÔ   c                  C   s²   t j d¡} d}d}t||d| d� ¡ }|dk}t j||< tdd�}| |¡}t||j	 
|¡ƒ tdd� |¡}t  | 
|¡|j	 
|¡k¡r�t‚d|_t| 
|¡|j	 
|¡ƒ d S )Nr   rÇ   r<   rÈ   rÒ   )Úmax_iterrK   )r@   rA   r}   r   r1   rC   r   rD   r   Úinitial_imputer_r,   r+   r‡   r   rÄ   )rˆ   Únr]   r2   Zmissing_flagr5   rG   r!   r!   r"   Ú!test_iterative_imputer_zero_iters:  s    


 rØ   c                  C   sp   t j d¡} d}d}t||d| d� ¡ }tdddd�}| |¡ | |¡ tdddd�}| |¡ | |¡ d S )	Nr   rÇ   rJ   rÈ   rÒ   rL   )r'   rÕ   rN   r=   )r@   rA   r}   r   r1   r   r+   r,   )rˆ   r×   r]   r2   r5   r!   r!   r"   Útest_iterative_imputer_verboseR  s    


rÙ   c                  C   sB   d} d}t  | |f¡}tddd�}| |¡}t||j |¡ƒ d S )NrÇ   rJ   r   rL   )r'   rÕ   )r@   r~   r   rD   r   rÖ   r,   )r×   r]   r2   r5   rG   r!   r!   r"   Ú"test_iterative_imputer_all_missing`  s    
rÚ   Úimputation_orderrA   ÚromanÚ	ascendingÚ
descendingÚarabicc           
      C   sR  t j d¡}d}d}d}t||d|d� ¡ }d|d d …df< td|dd	d
ddd| |d�
}| |¡ dd„ |jD ƒ}t|ƒ|j	 |j
ksŠt‚| dkrºt  |d |d … t  d|¡k¡s¸t‚n”| dkrðt  |d |d … t  |d dd¡k¡sît‚n^| dk�r*|d |d … }||d d … }	||	k�sNt‚n$d| k�rNt|ƒ||d  k�sNt‚d S )Nr   rÇ   r<   r=   rÈ   rÒ   rL   rK   FT)
r'   rÕ   Ún_nearest_featuresÚsample_posteriorÚskip_completeÚ	min_valueÚ	max_valuerN   rÛ   rÌ   c                 S   s   g | ]
}|j ‘qS r!   ©Zfeat_idx)Ú.0r«   r!   r!   r"   Ú
<listcomp>�  s     z;test_iterative_imputer_imputation_order.<locals>.<listcomp>rÜ   rß   r‘   rA   Úending)r@   rA   r}   r   r1   r   rD   Úimputation_sequence_ro   rÄ   Zn_features_with_missing_r   r‡   r   )
rÛ   rˆ   r×   r]   rÕ   r2   r5   Zordered_idxZordered_idx_round_1Zordered_idx_round_2r!   r!   r"   Ú'test_iterative_imputer_imputation_orderi  s>    ö
(.

rê   Ú	estimatorc           	      C   s¨   t j d¡}d}d}t||d|d� ¡ }tdd| |d�}| |¡ g }|jD ]>}| d k	r`t| ƒntt	ƒ ƒ}t
|j|ƒszt‚| t|jƒ¡ qLtt|ƒƒt|ƒks¤t‚d S )Nr   rÇ   r<   rÈ   rÒ   rL   )r'   rÕ   rë   rÌ   )r@   rA   r}   r   r1   r   rD   ré   rœ   r   Ú
isinstancerë   r   ÚappendÚidro   Úset)	rë   rˆ   r×   r]   r2   r5   ÚhashesÚtripletÚexpected_typer!   r!   r"   Ú!test_iterative_imputer_estimators‘  s$       ÿ

ÿró   c                  C   s’   t j d¡} d}d}t||d| d� ¡ }tdddd| d�}| |¡}tt  ||dk ¡dƒ tt  	||dk ¡dƒ t||dk ||dk ƒ d S )	Nr   rÇ   r<   rÈ   rÒ   rL   çš™™™™™É?)r'   rÕ   rã   rä   rÌ   ©
r@   rA   r}   r   r1   r   rD   r   Úminr‚   ©rˆ   r×   r]   r2   r5   rÓ   r!   r!   r"   Útest_iterative_imputer_clip­  s        ÿ
rø   c                  C   sª   t j d¡} d}d}t||d| d� ¡ }d|d d …df< tdddd	dd
dd| d�	}| |¡}tt  ||dk ¡dƒ tt  	||dk ¡d
ƒ t||dk ||dk ƒ d S )Nr   rÇ   r<   rÈ   rÒ   rL   r=   rK   Trô   rA   )	r'   rÕ   rà   rá   rã   rä   rN   rÛ   rÌ   rõ   r÷   r!   r!   r"   Ú%test_iterative_imputer_clip_truncnorm½  s(    ÷
rù   c                     sè   t j d¡} | jdd�‰ t jˆ d d< tddd| d�‰ˆ ˆ ¡ t  ‡ ‡fdd	„td
ƒD ƒ¡}t	|dkƒsnt
‚t	|dkƒs~t
‚| ¡ | ¡  }}t|| | dƒ\}}|dkr¶|d7 }t|| | dƒ\}}|dk sä|dksät
dƒ‚d S )Né*   )rK   rK   )rm   r   r’   T)rã   rä   rá   rÌ   c                    s   g | ]}ˆ  ˆ ¡d  d  ‘qS )r   )r,   )ræ   Ú_rÅ   r!   r"   rç   ç  s     zEtest_iterative_imputer_truncated_normal_posterior.<locals>.<listcomp>rÇ   Znormgê-�™—q=rô   rÈ   z&The posterior does appear to be normal)r@   rA   r}   ÚnormalrC   r   rD   rc   r�   r‡   r   r8   Zstdr   )rˆ   ZimputationsÚmuÚsigmaZks_statisticZp_valuer!   rÅ   r"   Ú1test_iterative_imputer_truncated_normal_posteriorÕ  s&       ÿ
rÿ   c                 C   s®   t j d¡}d}d}|jdd||fd�}|jdd||fd�}d|d d …df< d|d< tdd| |d� |¡}td| d	� |¡}t| |¡d d …df | |¡d d …df ƒ d S )
Nr   rÇ   r<   rJ   )ÚlowÚhighrm   rL   r³   )r'   rÕ   r?   rÌ   r&   )	r@   rA   r}   Úrandintr   r+   r   r   r,   )r(   rˆ   r×   r]   ÚX_trainÚX_testr5   Zinitial_imputerr!   r!   r"   Ú+test_iterative_imputer_missing_at_transformö  s(       ÿþ ÿr  c                  C   sò   t j d¡} t j d¡}d}d}t||d| d� ¡ }tddd| d�}| |¡ | |¡}| |¡}t  |¡t	 
t  |¡¡ks€t‚tddd	d d
| d�}tddd	d d
|d�}	| |¡ |	 |¡ | |¡}
| |¡}|	 |¡}t|
|ƒ t|
|ƒ d S )Nr   rL   rÇ   r<   rÈ   rÒ   T)r'   rÕ   rá   rÌ   FrÝ   )r'   rÕ   rá   rà   rÛ   rÌ   )r@   rA   r}   r   r1   r   r+   r,   r8   rS   Zapproxr   r   )Zrng1Zrng2r×   r]   r2   r5   Z
X_fitted_1Z
X_fitted_2Úimputer1Úimputer2ZX_fitted_1aZX_fitted_1br!   r!   r"   Ú.test_iterative_imputer_transform_stochasticity  sL       ÿ


ú	ú





r  c                  C   s„   t j d¡} |  dd¡}t j|d d …df< td| d�}td| d�}| |¡ |¡}| |¡}t	|d d …dd …f |ƒ t	||ƒ d S )Nr   rÇ   r<   )rÕ   rÌ   rL   )
r@   rA   r}   ÚrandrC   r   r+   r,   rD   r   )rˆ   r2   Úm1Úm2Zpred1Zpred2r!   r!   r"   Ú!test_iterative_imputer_no_missing?  s    
r  c            	      C   s€   t j d¡} d}|  |d¡}|  d|¡}t  ||¡}|  ||¡dk }| ¡ }t j||< tdd| d�}| |¡}t	||dd� d S )	Nr   é2   rL   r’   rK   ©rÕ   rN   rÌ   g{®Gáz”?©Úatol)
r@   rA   r}   r	  Údotr-   rC   r   rD   r   )	rˆ   r]   ÚAÚBr2   Únan_maskÚ	X_missingr5   ÚX_filledr!   r!   r"   Útest_iterative_imputer_rank_oneM  s    

r  ÚrankrJ   rK   c                 C   s¸   t j d¡}d}d}| || ¡}| | |¡}t  ||¡}| ||¡dk }| ¡ }t j||< |d }|d |… }	||d … }
||d … }tddd|d� |	¡}| 	|¡}t
|
|d	d
� d S )Nr   éF   r’   r=   rK   rÞ   rL   )rÕ   rÛ   rN   rÌ   rÈ   r  )r@   rA   r}   r	  r  r-   rC   r   r+   r,   r   )r  rˆ   r×   r]   r  r  r  r  r  r  ÚX_test_filledr  r5   Ú
X_test_estr!   r!   r"   Ú)test_iterative_imputer_transform_recovery\  s.    
   ÿþ
r  c               	   C   s  t j d¡} d}d}|  ||¡}|  ||¡}t  |j¡}t|ƒD ]R}t|ƒD ]D}|d d …|| | f  |d d …|f |d d …|f  d 7  < qLq@|  ||¡dk }| ¡ }	t j	|	|< |d }|	d |… }
||d … }|	|d … }t
dd| d� |
¡}| |¡}t||dd	d
� d S )Nr   rÇ   r<   r=   g      Ð?rL   r  gü©ñÒMbP?ç{®Gáz„?)Úrtolr  )r@   rA   r}   rB   r~   rF   r�   r	  r-   rC   r   r+   r,   r   )rˆ   r×   r]   r  r  r  r«   r�   r  r  r  r  r  r5   r  r!   r!   r"   Ú&test_iterative_imputer_additive_matrixu  s&    D

r  c                  C   sè   t j d¡} d}d}|  |d¡}|  d|¡}t  ||¡}|  ||¡dk }| ¡ }t j||< tdddd| d	�}| |¡}	t	|j
ƒ||j ksŽt‚t|jdd| d
�}| |¡}
t|	|
dd� tdddd| d	�}| |¡ |j|jksät‚d S )Nr   r  rK   rL   r’   rÇ   r  F)rÕ   Ztolrá   rN   rÌ   )rÕ   rá   rN   rÌ   gH¯¼šò×z>r  )r@   rA   r}   r	  r  r-   rC   r   rD   ro   ré   rÄ   r   r   r+   rÕ   )rˆ   r×   r]   r  r  r2   r  r  r5   ZX_filled_100ZX_filled_earlyr!   r!   r"   Ú%test_iterative_imputer_early_stopping�  sF    
    ÿ
   ÿ
    ÿ
r   c            
   	   C   sÂ   t dd�\} }| j\}}d| d d …df< tj d¡}d}t|ƒD ]0}|jt |¡t|| ƒdd�}tj	| ||f< q@t
d	dd
�}t ¡ � t dt¡ | | |¡}	W 5 Q R X t t |	¡¡r¾t‚d S )NT)Z
return_X_yrL   rJ   r   g333333Ã?F)rm   ÚreplacerK   )rà   rá   Úerror)r   rF   r@   rA   r}   r�   Úchoicer   ÚintrC   r   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningrD   r†   r…   r   )
r2   r    Z	n_samplesÚ
n_featuresrˆ   Zmissing_rateZfeatZ
sample_idxr5   ZX_fillr!   r!   r"   Ú$test_iterative_imputer_catch_warning­  s"    
 
 ÿ
r*  z$min_value, max_value, correct_outputrÇ   r�   r<   éÈ   i,  ZscalarszNone-defaultÚinfÚlistszlists-with-inf)Zidsc                 C   s®   t j d¡ dd¡}t| |d�}| |¡ t|jt jƒrFt|j	t jƒsJt
‚|jjd |jd krv|j	jd |jd kszt
‚t|dd d …f |jƒ t|dd d …f |j	ƒ d S )Nr   r<   rJ   ©rã   rä   rL   )r@   rA   r}   rB   r   r+   rì   Z
_min_valueÚndarrayZ
_max_valuer   rF   r   )rã   rä   Zcorrect_outputr2   r5   r!   r!   r"   Ú)test_iterative_imputer_min_max_array_likeÆ  s    
 ÿÿr0  zmin_value, max_value, err_msg)rÇ   r   úmin_value >= max_value.r1  z_value' should be of shapec              	   C   s@   t j d¡}t| |d�}tjt|d�� | |¡ W 5 Q R X d S )N©r<   rJ   r.  rP   )r@   rA   r   rS   ri   rj   r+   )rã   rä   r)   r2   r5   r!   r!   r"   Ú*test_iterative_imputer_catch_min_max_errorç  s    r3  zmin_max_1, min_max_2iöÿÿÿr_   zNone-vs-infzScalar-vs-vectorc              	   C   sâ   t  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  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d	�}t|d |d dd	�}| |¡ |¡}| |¡ |¡}t|d d …df |d d …df ƒ d S )
Nr=   rL   r<   r£   rJ   r_   rK   r   )rã   rä   rÌ   )r@   rc   rC   r   r+   r,   r   )Z	min_max_1Z	min_max_2r  r  r  r  ZX_test_imputed1ZX_test_imputed2r!   r!   r"   Ú4test_iterative_imputer_min_max_array_like_imputationø  s.    üÿ*ÿ  ÿ  ÿr4  râ   TFc              	   C   sÜ   t j d¡}t  ddddgddddgddddgdd	ddgg¡}t  t jdd	dgt jd	ddgt jdddgg¡}td
| |d�}| |¡ |¡}| r¸t|d d …df t  	|d d …df ¡ƒ n t|d d …df dddgdd� d S )Nr   rK   r=   rL   r<   r£   rJ   rº   r_   r8   )r?   râ   rÌ   é   é   g-Cëâ6?)r  )
r@   rA   r}   rc   rC   r   r+   r,   r   r8   )râ   rˆ   r  r  r5   r  r!   r!   r"   Ú'test_iterative_imputer_skip_non_missing  s    2.  ÿ*r7  Ú
rs_imputer)ÚseedÚrs_estimatorc                 C   sH   G dd„ dƒ}||d�}t | d�}t d¡}| |¡ |j|ksDt‚d S )Nc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zCtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimatorc                 S   s
   || _ d S r   rË   )ÚselfrÌ   r!   r!   r"   Ú__init__,  s    zLtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.__init__c                 _   s   | S r   r!   )r;  rq   Zkgardsr!   r!   r"   r+   /  s    zGtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.fitc                 S   s   t  |jd ¡S )Nr   )r@   r~   rF   )r;  r2   r!   r!   r"   Úpredict2  s    zKtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.predictN)Ú__name__Ú
__module__Ú__qualname__r<  r+   r=  r!   r!   r!   r"   ÚZeroEstimator+  s   rA  rË   r2  )r   r@   r~   r+   rÌ   r   )r8  r:  rA  rë   r5   r  r!   r!   r"   Ú,test_iterative_imputer_dont_set_random_state(  s    




rB  zX_fit, X_trans, params, msg_errr‘   úmissing-onlyÚauto)Úfeaturesr   zBhave missing values in transform but have no missing values in fitrZ   r[   r\   r^   z1MissingIndicator does not support data with dtypec              	   C   sD   t dd�}|jf |Ž tjt|d�� | | ¡ |¡ W 5 Q R X d S )Nr‘   rÊ   rP   )r   Ú
set_paramsrS   ri   rj   r+   r,   )ÚX_fitr6   ÚparamsZmsg_errÚ	indicatorr!   r!   r"   Útest_missing_indicator_error<  s    
rJ  zmissing_values, dtype, arr_typez,param_features, n_features, features_indicesr‡   c                 C   sÚ  t  | | dgdd| gg¡}t  | | dgdddgg¡}t  dddgdddgg¡}t  dddgdddgg¡}	||ƒ |¡}||ƒ |¡}| |¡}|	 |¡}	t| |dd�}
|
 |¡}|
 |¡}|jd |ksÌt‚|jd |ksÞt‚t|
j	|ƒ t
||d d …|f ƒ t
||	d d …|f ƒ |jtk�s&t‚|jtk�s6t‚t|t jƒ�sHt‚t|t jƒ�sZt‚|
jd	d
� |
 |¡}|
 |¡}|jtk�sŠt‚|jtk�sšt‚|jdk�sªt‚|jdk�sºt‚t
| ¡ |ƒ t
| ¡ |ƒ d S )NrL   r_   r=   r6  r<   r   F)r'   rE  r   Tr   Úcsc)r@   rc   Úastyper   rD   r,   rF   r   r   Z	features_r   r   Úboolrì   r/  rF  r.   r1   )r'   Úarr_typer   Zparam_featuresr)  Zfeatures_indicesrG  r6   ZX_fit_expectedZX_trans_expectedrI  Ú
X_fit_maskÚX_trans_maskZX_fit_mask_sparseZX_trans_mask_sparser!   r!   r"   Útest_missing_indicator_newT  sB    

  ÿ



rQ  rN  c              	   C   s¨   d}t  ||dgd|dgg¡}t  ||dgdddgg¡}| |ƒ}| |ƒ}t|d�}tjtdd	�� | |¡ W 5 Q R X | |¡ tjtdd	�� | |¡ W 5 Q R X d S )
Nr   rL   r_   r=   r6  r<   rÊ   z"Sparse input with missing_values=0rP   )r@   rc   r   rS   ri   rj   rD   r,   )rN  r'   rG  r6   ZX_fit_sparseZX_trans_sparserI  r!   r!   r"   Ú5test_missing_indicator_raise_on_sparse_with_missing_0–  s    

rR  Úparam_sparsezmissing_values, arr_typec                 C   sL  t  ||dgd|dgg¡}t  ||dgdddgg¡}| |ƒ t j¡}| |ƒ t j¡}t||d�}| |¡}| |¡}|dkrš|jdksŠt‚|jdks˜t‚n®|d	krÌ|d
krÌt	|t j
ƒsºt‚t	|t j
ƒsÊt‚n||dkröt	|t j
ƒsät‚t	|t j
ƒsôt‚nRt |¡�r$|jdk�st‚|jdk�sHt‚n$t	|t j
ƒ�s6t‚t	|t j
ƒ�sHt‚d S )NrL   r_   r=   r6  r<   )r'   r   TrK  rD  r   F)r@   rc   rL  Úfloat64r   rD   r,   r.   r   rì   r/  r   r0   )rN  r'   rS  rG  r6   rI  rO  rP  r!   r!   r"   Ú#test_missing_indicator_sparse_paramµ  s*    

rU  c                  C   sX   t jdddgdddggtd�} tddd�}| | ¡}t|t  dddgdddgg¡ƒ d S )	NrZ   r[   r\   r^   r‡   )r'   rE  TF)r@   rc   rd   r   rD   r   )r2   rI  r6   r!   r!   r"   Útest_missing_indicator_stringÞ  s    
rV  zX, missing_values, X_trans_expc                 C   s0   t t|dd�t|d�ƒ}| | ¡}t||ƒ d S )Nr:   r&   rÊ   )r   r   r   rD   r   )r2   r'   ZX_trans_expZtransr6   r!   r!   r"   Ú#test_missing_indicator_with_imputerå  s    
þ
rW  Ú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              	   C   sR   t j d¡}| dd¡}||d< | |d�}tjt|d�� | |¡ W 5 Q R X d S )Nrú   r<   r³   rÊ   rP   )r@   rA   r}   rB   rS   ri   rj   rD   )rX  Zimputer_missing_valuesr¸   r)   rˆ   r2   r5   r!   r!   r"   Ú(test_inconsistent_dtype_X_missing_values  s    
rZ  c                  C   sB   t  ddgddgg¡} tddd�}| | ¡}|jd dks>t‚d S )NrL   rC  r‘   ©rE  r'   r   )r@   rc   r   rD   rF   r   ©r2   ÚmirÓ   r!   r!   r"   Ú!test_missing_indicator_no_missing  s    
r^  c                  C   sP   t  dddgdddgdddgg¡} tddd�}| | ¡}| ¡ | ¡ ksLt‚d S )Nr   rL   r=   r‡   r[  )r   rE   r   rD   ZgetnnzÚsumr   r\  r!   r!   r"   Ú/test_missing_indicator_sparse_no_explicit_zeros)  s    "
r`  c                 C   s8   t  ddgddgg¡}| ƒ }| |¡ |jd ks4t‚d S )NrL   )r@   rc   r+   Z
indicator_r   )rX  r2   r5   r!   r!   r"   Útest_imputer_without_indicator4  s    
ra  c                 C   s¸   | t jddgdt jdgddt jgdddggƒ}t  ddd	dd
d
gdddd
dd
gddd	d
d
dgdddd
d
d
gg¡}tt jdd�}| |¡}t |¡s–t‚|j|jks¦t‚t	| 
¡ |ƒ d S )NrL   rK   r=   r•   rJ   r˜   ç      @r²   g      @g        ç       @g      @g      "@T)r'   Úadd_indicator)r@   rC   rc   r   rD   r   r0   r   rF   r   r1   )rN  ZX_sparser3   r5   r6   r!   r!   r"   Ú2test_simple_imputation_add_indicator_sparse_matrix=  s    .üÿ	
re  zstrategy, expected)r:   r[   )r;   r¸   c                 C   sN   ddgdt jgg}t jddgd|ggtd�}t| d�}| |¡}t||ƒ d S )NrZ   r[   r\   r^   r>   )r@   rC   rc   rd   r   rD   r   )r(   Úexpectedr2   r3   r5   r6   r!   r!   r"   Ú"test_simple_imputation_string_listZ  s
    

rg  zorder, idx_orderc              	   C   sª   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 t¡�6 td| dd� 	|¡}dd„ |j
D ƒ}||ksœt‚W 5 Q R X d S )Nrú   rÇ   rK   r  rL   é   r   é   r=   r<   r_   )rÕ   rÛ   rÌ   c                 S   s   g | ]
}|j ‘qS r!   rå   )ræ   r   r!   r!   r"   rç   y  s     z)test_imputation_order.<locals>.<listcomp>)r@   rA   r}   r	  rC   rS   rT   r   r   r+   ré   r   )ÚorderZ	idx_orderrˆ   r2   ZtrsÚidxr!   r!   r"   Útest_imputation_orderh  s    ÿrl  r¸   c              	   C   sD  t  d| ddgddddgdd| dgddd	| gg¡}t  ddd
dgd
d| dgd| ddgddd
| gg¡}t  d| ddg| d| | gd
| d| g| d| dgg¡}t  ddddg| d
| dgd
dddg| d| d
gg¡}t| ddd�}| |¡}| |¡}| |¡}| |¡}	t||ƒ t|	|ƒ ||fD ]$}
| |
¡}| |¡}t||
ƒ �qd S )Nr˜   rJ   r‘   r_   rK   r•   r£   rº   r   r=   rL   r8   T)r'   r(   rd  )r@   rc   r   rD   Úinverse_transformr,   r   )r¸   ÚX_1ZX_2ZX_3ZX_4r5   Ú	X_1_transZX_1_inv_transZ	X_2_transZX_2_inv_transr2   r6   ZX_inv_transr!   r!   r"   Ú(test_simple_imputation_inverse_transform}  sV    



üÿ	



üÿ	



üÿ	



üÿ	  ÿ







rp  c              	   C   sz   t  d| ddgddddgdd| dgddd	| gg¡}t| d
d�}| |¡}tjtd|j› d�d�� | |¡ W 5 Q R X d S )Nr˜   rJ   r‘   r_   rK   r•   r£   rº   r   r8   r&   zGot 'add_indicator=ú'rP   )	r@   rc   r   rD   rS   ri   rj   rd  rm  )r¸   rn  r5   ro  r!   r!   r"   Ú3test_simple_imputation_inverse_transform_exceptions·  s    



üÿ	
 ÿrr  z)expected,array,dtype,extra_value,n_repeatÚextra_valueZmost_frequent_valueÚvaluerã   Zmin_valuevaluerx   ri  c                 C   s"   | t tj||d�||ƒkst‚d S )Nr^   )r   r@   rc   r   )rf  rc   r   rs  Zn_repeatr!   r!   r"   Útest_most_frequentÊ  s
      ÿru  r?   c                 C   sp   t  dt jdgdt jt jgg¡}t| dd�}| |¡}t|dd…df dƒ | |¡}t|dd…df dƒ dS )z Check the behaviour of the iterative imputer with different initial strategy
    and keeping empty features (i.e. features containing only missing values).
    rL   r=   rJ   T)r?   Úkeep_empty_featuresNr   )r@   rc   rC   r   rD   r   r,   )r?   r2   r5   rG   r!   r!   r"   Ú*test_iterative_imputer_keep_empty_featureså  s      ÿ

rw  rv  c                 C   s”   t  dt jdgdt jt jgg¡}t| d�}dD ]`}t||ƒ|ƒ}| rl|j|jksTt‚t|dd…df dƒ q.|j|jd |jd d fks.t‚q.dS )z>Check the behaviour of `keep_empty_features` for `KNNImputer`.rL   r=   rJ   )rv  ©rD   r,   Nr   )r@   rc   rC   r   ÚgetattrrF   r   r   )rv  r2   r5   ÚmethodrG   r!   r!   r"   Ú$test_knn_imputer_keep_empty_features÷  s     
r{  c                  C   s’  t  d¡} |  d| jdd dgdd�i¡}t| jddd	�}t| |¡tj	dgdgdggt
d�ƒ |  d| jddd
gdd�i¡}tddd�}t| |¡tj	dgdgd
ggt
d�ƒ |  d| jdd dgdd�i¡}t| jddd	�}t| |¡tj	dgdgdggdd�ƒ ttjddd	�}t| |¡tj	dgdgdggdd�ƒ |  d| jdd ddgdd�i¡}t| jdd�}t| |¡tj	dgdgdgdggdd�ƒ |  d| jdd dgdd�i¡}t| jdd�}t| |¡tj	dgdgdggdd�ƒ |  d| jdd dgdd�i¡}t| jddd	�}t| |¡tj	dgdgdggdd�ƒ |  d| jdd ddgdd�i¡}t| jdd�}t| |¡tj	dgdgdgdggdd�ƒ d S )NrY   ÚfeatureÚabcÚdeÚstringr^   r;   Únar´   ZfghÚok)rµ   r(   rL   rJ   ZInt64r‘   rT  r=   r9   r&   r8   r¿   r²   rb  g       Àrc  )rS   rb   re   ZSeriesr   ZNAr#   rD   r@   rc   rd   r$   rC   )rf   r°   r5   r!   r!   r"   Útest_simple_impute_pd_na  s`    
 ÿ ÿ ÿ ÿ  ÿ ÿ ÿ þr‚  c                  C   sj   t  d¡} tj}| j||d|gd|ddggdddd	gd
�}t|d� |¡}| ¡ }dddg}t||ƒ dS )zDCheck that missing indicator return the feature names with a prefix.rY   rL   r_   r=   r<   rZ   r[   r\   r]   r`   rÊ   Zmissingindicator_aZmissingindicator_bZmissingindicator_dN)	rS   rb   r@   rC   re   r   r+   Zget_feature_names_outr   )rf   r'   r2   rI  rg   Zexpected_namesr!   r!   r"   Ú(test_missing_indicator_feature_names_outC  s    


þ
û
rƒ  c                  C   s\   ddgddgddgg} t dd� | ¡}| tjtjgg¡}|jtksHt‚t|ddggƒ dS )zkCheck transform uses object dtype when fitted on an object dtype.

    Non-regression test for #19572.
    rZ   r[   r\   r:   r>   N)	r   r+   r,   r@   rC   r   rd   r   r   )r2   Zimp_frequentr6   r!   r!   r"   Ú test_imputer_lists_fit_transformV  s
    r„  Ú
dtype_testc                 C   sp   t jddt jgt jddgdddggt jd�}tƒ  |¡}t jt jt jt jgg| d�}| |¡}|j| kslt‚dS )	zACheck transform preserves numeric dtype independent of fit dtype.r½   g333333@r¾   gÍÌÌÌÌÌ@r=   rL   r^   N)	r@   ÚasarrayrC   rT  r   r+   r,   r   r   )r…  r2   Úimpr  r6   r!   r!   r"   Ú.test_imputer_transform_preserves_numeric_dtypec  s     ÿ
rˆ  Ú
array_typerc   r   c                 C   sž   t  t jdgt jdgt jdgg¡}t|| ƒ}d}td||d�}dD ]V}t||ƒ|ƒ}|j|jksdt‚| dkr~|d	d	…d
f jn|d	d	…d
f }t	||ƒ qBd	S )z·Check 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.
    r=   rJ   r•   r<   r;   )r(   rµ   rv  rx  r   Nr   ©
r@   rc   rC   r   r   ry  rF   r   r  r   )r‰  rv  r2   rµ   r5   rz  rG   Úconstant_featurer!   r!   r"   Ú0test_simple_imputer_constant_keep_empty_featuresp  s    "
ý(ÿrŒ  c                 C   sÀ   t  t jdgt jdgt jdgg¡}t||ƒ}t| |d�}dD ]~}t||ƒ|ƒ}|r˜|j|jksbt‚|dkr||dd…df jn|dd…df }t	|dƒ q<|j|jd |jd	 d	 fks<t‚q<dS )
zYCheck the behaviour of `keep_empty_features` with all strategies but
    'constant'.
    r=   rJ   r•   )r(   rv  rx  r   Nr   rL   rŠ  )r(   r‰  rv  r2   r5   rz  rG   r‹  r!   r!   r"   Ú'test_simple_imputer_keep_empty_features‰  s    "
(ÿr�  )…rS   r%  Únumpyr@   Zscipyr   Zscipy.statsr   r­   Zsklearn.utils._testingr   r   r   r   r	   Zsklearn.experimentalr
   Zsklearn.datasetsr   Zsklearn.imputer   r   r   r   Zsklearn.dummyr   Zsklearn.linear_modelr   r   r   Zsklearn.pipeliner   r   Zsklearn.model_selectionr   Zsklearnr   Zsklearn.random_projectionr   Zsklearn.exceptionsr   Zsklearn.impute._baser   r#   r$   r7   ÚmarkZparametrizerH   rX   rh   rk   rt   ru   rŽ   r“   rd   Ústrr›   rŸ   r   r¢   r¤   rC   r¨   r±   r¹   r»   rE   r†  rÀ   rÂ   rÃ   rÆ   rÑ   rÔ   rØ   rÙ   rÚ   rê   ró   rø   rù   rÿ   r  r  r  r  r  r  r   r*  rc   r,  r0  r3  r4  r7  rA   r}   rB  rJ  rT  Zint32r/   Z
coo_matrixZ
lil_matrixZ
bsr_matrixrQ  rR  rU  rV  rW  rZ  r^  r`  ra  re  rg  rl  rp  rr  r$  ru  rw  r{  r‚  rƒ  r„  Zfloat32rˆ  rŒ  r�  r!   r!   r!   r"   Ú<module>   s,  %



C 





"
+	 ÿ
% ÿ
!
2
$**
ýûó
ýþ
	0ý

üüùþ
óþ*þ,ûþ






úþ ýý ý ýðþ
	
þþ
ûþ

 ÿ
"þ

9
ûðþ
 
ÿ

<
