a
    �ù»j·
 ã                   @   s  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d„ Z4dd„ Z5dd„ Z6ej7 8dg d¢¡ej7 8de2¡dd„ ƒƒZ9ej7 8dg d¢¡dd„ ƒZ:ej7 8dg d¢¡d d!„ ƒZ;ej7 8dg d¢¡ej7 8d"e1¡d#d$„ ƒƒZ<d%d&„ Z=d'd(„ Z>ej7 8d"e1¡d)d*„ ƒZ?ej7 8d"e1¡d+d,„ ƒZ@ej7 8dd-d.g¡ej7 8d/deAeBg¡d0d1„ ƒƒZCej7 8dd-d.g¡ej7 8d2d3d4g¡d5d6„ ƒƒZDej7 8dd7d8g¡ej7 8d/eBe Ed9¡e Ed:¡g¡d;d<„ ƒƒZFej7 8d"e1¡d=d>„ ƒZGej7 8d?dejHd@dAd g¡dBdC„ ƒZIej7 8d/eAdDg¡dEdF„ ƒZJej7 8dGdHdIejHfg¡dJdK„ ƒZKdLdM„ ZLej7 8dNe2ejMg ¡dOdP„ ƒZNej7 8d?dejHd@dAd g¡dQdR„ ƒZOej7 8d/eAdDg¡dSdT„ ƒZPej7 8dUdVgdWggdVgejHggg¡dXdY„ ƒZQdZd[„ ZRd\d]„ ZSd^d_„ ZTd`da„ ZUdbdc„ ZVej7 8ddg de¢¡dfdg„ ƒZWej7 8dhdeƒ eƒ eƒ e ƒ g¡didj„ ƒZXdkdl„ ZYdmdn„ ZZdodp„ Z[ej7 8dg d¢¡dqdr„ ƒZ\dsdt„ Z]dudv„ Z^dwdx„ Z_ej7 8dydzd{g¡d|d}„ ƒZ`d~d„ Zad€d�„ Zbd‚dƒ„ Zcej7j8d„d d…e dd gdz d…gdz g¡fdde deje gdz ejegdz g¡feje ejee deje gdz ejegdz g¡fg d†¢g d‡¢e dg d†¢g d‡¢g¡fdˆeje d‰gd…dŠejege ddˆeje d‰gd…dŠejegg¡fgg d‹¢dŒ�d�dŽ„ ƒZfej7 8d�d�ejeeje d‘fdˆd{gg d’¢d“fg d”¢d…dŠgd“fg¡d•d–„ ƒZgej7j8d—ddgeje ejegfd˜d‰gd˜gd™ d‰gd™ gfgdšd›gdŒ�dœd�„ ƒZhej7 8dždŸd g¡d¡d¢„ ƒZiej7 8d£ddVejjjkdVd¤�g¡ej7 8d¥ddVejjjkdVd¤�g¡d¦d§„ ƒƒZlej7 8d¨e dd©dVgdVdWgg¡e dd©dVgdVd©gg¡dªd«d¬œd­fejdd®d¯gd°d®ggeBd±�ejdd®d¯gd°d®ggeBd±�i d²fg¡d³d´„ ƒZmdµd¶„ Znej7 8d·enƒ ¡ej7 8d¸dªdze dg d¹¢¡fdºdze dg d¹¢¡fg¡d»d¼„ ƒƒZoej7 8d½e1e2 e0 e3 e/ ¡d¾d¿„ ƒZpej7 8dÀg dÁ¢¡ej7 8dÂejdd fgeqee1e2 e0 e3 e/ ejHgƒƒ ¡dÃdÄ„ ƒƒZrdÅdÆ„ Zsej7 8dÇejdd®d¯gd¯d®ggeAd±�d®ejdg dÈ¢g dÉ¢geAd±�fe dejHdIgdIejHgg¡ejHe dg dÊ¢g dË¢g¡fejdejHd¯gd¯ejHggeAd±�ejHejdg dÈ¢g dÉ¢geAd±�fejddd¯gd¯dggeAd±�dejdg dÈ¢g dÉ¢geAd±�fg¡dÌdÍ„ ƒZtej7 8dÎeeg¡ej7 8dÏdÐejHdÑfdÒg¡dÓdÔ„ ƒƒZudÕdÖ„ Zvej7 8de2¡d×dØ„ ƒZwej7 8dÎeeg¡dÙdÚ„ ƒZxej7 8d½e1e2 e0 e3 e/ ¡dÛdÜ„ ƒZyej7 8dÝdÞdßg¡dàdá„ ƒZzej7 8dâdãg dä¢fdåg dæ¢fg¡dçdè„ ƒZ{ej7 8déd©ejHg¡dêdë„ ƒZ|ej7 8déd©ejHg¡dìdí„ ƒZ}ej7 8dîdïg dð¢eAdïdWfdñg dò¢eAdïdVfd®dódôgeAd®dWfdóg dõ¢eAdödWfd‰g d÷¢e~d‰dWfdVg dø¢e~d‰dVfd‰g dù¢e~d‰dWfdVg dú¢e~d‰dWfg¡dûdü„ ƒZej7 8dýg d¢¡dþdÿ„ ƒZ€�d �d„ Z��d�d„ Z‚ej7 8�ddŸd g¡�d�d„ ƒZƒ�d�d„ Z„�d	�d
„ Z…�d�d„ Z†ej7 8�dej‡ejˆg¡�d�d„ ƒZ‰ej7 8�d�d�dg¡ej7 8�ddŸd g¡�d�d„ ƒƒZŠej7 8�d�d�dg¡ej7 8dg d¢¡ej7 8�ddŸd g¡�d�d„ ƒƒƒZ‹ej7 8d"e1¡�d�d„ ƒZŒ�d�d„ Z�ej7 8dg d¢¡�d�d„ ƒZŽej7 8dg d¢¡ej7 8�de dg �d¢g �d¢g¡e dejHdWdzd™gejH�d �d!�d"gg¡e ddVdWdzejHgd{�d �d!ejHgg¡g¡�d#�d$„ ƒƒZ�d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                 C   s   t | |ƒ | j|jksJ ‚d S ©N)r   Údtype©ÚxÚy© r&   úFE:\soccer\ml_env\Lib\site-packages\sklearn/impute/tests/test_impute.pyÚ"_assert_array_equal_and_same_dtype(   s    
r(   c                 C   s   t | |ƒ | j|jksJ ‚d S 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
 |	¡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ÚcopyÚstatistics_Úformatr   ÚissparseÚtoarray)
ÚXÚX_truer-   Ú
statisticsr,   Zsparse_containerr.   Z	assert_aeÚimputerÚX_transr&   r&   r'   Ú_check_statistics2   s$    þ
r<   r-   )ÚmeanÚmedianÚmost_frequentÚconstantÚcsr_containerc                 C   s‚   t j dd¡}t j|d d d…< t| d�}| ||ƒ¡}|jdksDJ ‚| |¡}|jdks\J ‚t| d�}| |¡}|jdks~J ‚d S )Né
   é   ©r-   )rB   rC   )Úinitial_strategy)ÚnpÚrandomÚrandnÚnanr   Úfit_transformÚshaper   )r-   rA   r7   r:   Ú	X_imputedZiterative_imputerr&   r&   r'   Útest_imputation_shapeY   s    



rM   ©r=   r>   r?   c                 C   sh   t  d¡}t j|d d …df< t| d� |¡}tjtdd�� | |¡ W d   ƒ n1 sZ0    Y  d S )N©é   é   r   rD   ZSkipping©Úmatch)	rF   ÚonesrI   r   r0   ÚpytestÚwarnsÚUserWarningr1   )r-   r7   r:   r&   r&   r'   Ú test_imputation_deletion_warningk   s
    
rX   c                 C   sœ   t  d¡}tj}tjg d¢td�}|j||d|gd|ddgg|d�}t| d	� |¡}t	|j
|ƒ t jtd
d�� | |¡ W d   ƒ n1 sŽ0    Y  d S )NÚpandas©ÚaÚbÚcÚd©r"   é   é   rC   rB   ©ÚcolumnsrD   z6Skipping features without any observed values: \['b'\]rR   )rU   ÚimportorskiprF   rI   ÚarrayÚobjectÚ	DataFramer   r0   r   Zfeature_names_in_rV   rW   r1   )r-   Úpdr,   Úfeature_namesr7   r:   r&   r&   r'   Ú.test_imputation_deletion_warning_feature_namesu   s    


þûÿrj   Úcsc_containerc                 C   s¨   t  d¡}d|d< ||ƒ}t| dd�}tjtdd�� | |¡ W d   ƒ n1 sT0    Y  | | ¡ ¡ tjtdd�� | |¡ W d   ƒ n1 sš0    Y  d S )NrO   r   )r-   r,   zProvide a dense arrayrR   )	rF   rT   r   rU   ÚraisesÚ
ValueErrorr0   r6   r1   )r-   rk   r7   r:   r&   r&   r'   Útest_imputation_error_sparse_0�   s    
(rn   c                 O   s>   t | dƒr| jnt| ƒ}|dkr&tjS tj| g|¢R i |¤ŽS ©NÚsizer   )Úhasattrrp   ÚlenrF   rI   r>   ©ZarrÚargsÚkwargsÚlengthr&   r&   r'   Úsafe_median    s    rw   c                 O   s>   t | dƒr| jnt| ƒ}|dkr&tjS tj| g|¢R i |¤ŽS ro   )rq   rp   rr   rF   rI   r=   rs   r&   r&   r'   Ú	safe_mean¦   s    rx   c              
   C   sx  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   rB   r`   ra   rC   r=   c                 S   s   t t | |f¡ƒS r!   )rx   rF   Úhstack©ÚzÚvÚpr&   r&   r'   Ú<lambda>»   ó    z-test_imputation_mean_median.<locals>.<lambda>r>   c                 S   s   t t | |f¡ƒS r!   )rw   rF   ry   rz   r&   r&   r'   r~   ¼   r   ©Zaxis)rF   rG   ÚRandomStateÚzerosÚarangerI   ÚemptyÚrangeÚmaxÚrepeatZpermutationrr   ry   ÚshuffleÚisnanÚanyÚallr<   )rk   ÚrngÚdimÚdecrK   r‚   ÚvaluesZtestsr-   Ztest_missing_valuesZtrue_value_funr7   r8   Ztrue_statisticsÚjZnb_zerosZnb_missing_valuesZ	nb_valuesr{   r}   r|   Zcols_to_keepr&   r&   r'   Útest_imputation_mean_median¬   sN    þ

(&
ÿÿ 
ÿ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  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   rQ   éûÿÿÿra   éüÿÿÿéÿÿÿÿrC   ©r   r   r   )rQ   rQ   rQ   )r’   r   ç      À)r   rQ   ç      @)ra   rQ   ç      @)r“   r’   ç      À)r”   rC   ç      à?)r   rQ   r   r–   r—   r˜   r™   rš   r>   )rF   re   rI   Z	transposer<   )rk   r7   ZX_imputed_medianZstatistics_medianr&   r&   r'   Ú$test_imputation_median_special_casesò   s4    





øÿøÿÿr›   r=   r>   r"   c                 C   sj   t jg d¢g d¢g d¢g|d�}d}tjt|d��$ t| d�}| |¡ W d   ƒ n1 s\0    Y  d S )N©r[   r\   rP   ©ra   Úeé   ©ÚgÚhé	   r_   ú4non-numeric data:
could not convert string to float:rR   rD   )rF   re   rU   rl   rm   r   rJ   )r-   r"   r7   Úmsgr:   r&   r&   r'   Ú.test_imputation_mean_median_error_invalid_type  s
     
r¦   ÚtypeÚlistÚ	dataframec                 C   s|   g d¢g d¢g d¢g}|dkr2t  d¡}| |¡}d}t jt|d��$ t| d�}| |¡ W d   ƒ n1 sn0    Y  d S )	Nrœ   r�   r    r©   rY   r¤   rR   rD   )rU   rd   rg   rl   rm   r   rJ   )r-   r§   r7   rh   r¥   r:   r&   r&   r'   Ú:test_imputation_mean_median_error_invalid_type_list_pandas  s    


rª   r@   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 d   ƒ n1 s†0    Y  d S )Nr[   r*   r]   r^   r\   r¢   r_   z#SimpleImputer does not support datarR   rD   )	rF   re   rI   rU   rl   rm   r   r0   r1   )r-   r"   r7   r.   r:   r&   r&   r'   Ú/test_imputation_const_mostf_error_invalid_types,  s    üù

r­   c                 C   sd   t  g d¢g d¢g d¢g d¢g¡}t  g d¢g d¢g d¢g d¢g¡}t||d	t jd
ddgd| ƒ d S )N)r”   r”   r   rQ   )r”   rC   r”   rP   )r”   r`   rP   r”   )r”   rC   rP   é   )rC   r   rQ   )rC   rP   rP   )r`   rP   rP   )rC   rP   r®   r?   rC   rP   r”   )rF   re   r<   rI   )rk   r7   r8   r&   r&   r'   Útest_imputation_most_frequentA  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g d¢g d	¢g d
¢g d¢gtd�}t| dd�}| |¡ |¡}t||ƒ d S )Nr[   r*   r]   r^   r\   r¢   r_   )r]   r[   r*   )r]   r^   r^   )r\   r^   r^   )r]   r^   r¢   r?   r+   )rF   re   rf   r   r0   r1   r   ©r°   r7   r8   r:   r;   r&   r&   r'   Ú%test_imputation_most_frequent_objects]  s&    



üù
üù
r³   Úcategoryc                 C   sj   t  d¡}t d¡}|j|| d�}tjg d¢g d¢g d¢g d¢gtd�}tdd	�}| 	|¡}t
||ƒ d S )
NrY   ú,Cat1,Cat2,Cat3,Cat4
,i,x,
a,,y,
a,j,,
b,j,x,r_   )r[   Úir$   )r[   r�   r%   )r[   r�   r$   )r\   r�   r$   r?   rD   ©rU   rd   ÚioÚStringIOZread_csvrF   re   rf   r   rJ   r   ©r"   rh   r*   Údfr8   r:   r;   r&   r&   r'   Ú$test_imputation_most_frequent_pandasz  s    

þ

r¼   zX_data, missing_value)r`   r   ç      ð?c                 C   s‚   t jd| td�}||d< d}d|›dt|ƒ›d�}tjtt |¡d��( t	|d	|d
�}| 
|¡ W d   ƒ n1 st0    Y  d S )NrO   r_   ©r   r   r$   úfill_value=ú
 (of type ú) cannot be castrR   r@   ©r,   r-   Ú
fill_value)rF   ÚfullÚfloatr§   rU   rl   rm   ÚreÚescaper   rJ   )ZX_dataÚmissing_valuer7   rÃ   r.   r:   r&   r&   r'   Ú+test_imputation_constant_error_invalid_typeŽ  s    ÿrÉ   c                  C   sl   t  g d¢g d¢g d¢g d¢g¡} t  g d¢g d¢g d¢g d¢g¡}td	d
ddd�}| | ¡}t||ƒ d S )N©r”   rC   rP   r”   ©ra   r”   rQ   r”   ©rŸ   r®   r”   r”   ©é   r£   r   r”   )r   rC   rP   r   )ra   r   rQ   r   )rŸ   r®   r   r   )rÎ   r£   r   r   r”   r@   r   T©r,   r-   rÃ   Úkeep_empty_features)rF   re   r   rJ   r   )r7   r8   r:   r;   r&   r&   r'   Ú test_imputation_constant_integerŸ  s    ""ÿ
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  g d¢g d¢g d	¢g d
¢g¡}| |ƒ}| |ƒ}td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”   r@   r”   T©r-   rÃ   rÐ   )rF   re   rI   r   rJ   r   )rÒ   r7   r8   r:   r;   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g d¢g d¢g d¢g d¢gtd
�}t| dddd�}| |¡}t||ƒ d S )Nr[   r\   r]   r^   rž   r*   r¡   r¢   r¶   r_   )Úmissingr[   r\   rÚ   )r]   rÚ   r^   rÚ   )rž   r*   rÚ   rÚ   )r¡   r¢   r¶   rÚ   r@   rÚ   TrÏ   )rF   re   rf   r   rJ   r   r²   r&   r&   r'   Útest_imputation_constant_objectÍ  s0    



üù
üù
ü
rÛ   c                 C   sl   t  d¡}t d¡}|j|| d�}tjg d¢g d¢g d¢g d¢gtd�}tdd	d
�}| 	|¡}t
||ƒ d S )NrY   rµ   r_   )rÈ   r¶   r$   rÈ   )r[   rÈ   r%   rÈ   )r[   r�   rÈ   rÈ   )r\   r�   r$   rÈ   r@   T©r-   rÐ   r·   rº   r&   r&   r'   Útest_imputation_constant_pandasñ  s    

üù

rÝ   r7   r`   rC   c                 C   sf   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sbJ ‚d S )Nr   r`   rC   )r   r0   Ún_iter_rF   rI   ©r7   r:   r&   r&   r'   Ú"test_iterative_imputer_one_feature
  s    rà   c                  C   sr   t dddd�} | jd }tdt|d�fdtjdd�fgƒ}d	g d
¢i}t dddd� ¡ }t||ƒ}| | |¡ d S )Néd   çš™™™™™¹?)Údensityr   r:   ©r,   r   ©Úrandom_stateZimputer__strategyrN   r`   )	r   Údatar   r   r   ZDecisionTreeRegressorr6   r   r0   )r7   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¡rTJ ‚|  ¡ }t|jd ddd�}| |¡ |¡}d|jd< t |j|jk¡r J ‚|  ¡  ¡ }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¡�rrJ ‚d S )NrQ   g      è?r   ©rã   ræ   r=   T)r,   r-   r2   r”   r¾   F)r   r2   r6   r   r0   r1   rF   r‹   rç   r   Ztocsc)ZX_origr7   r:   Ú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�J ‚d|_t| 
|¡|j	 
|¡ƒ d S )Nr   rá   rB   râ   rì   )Úmax_iterrQ   )rF   rG   r�   r   r6   rI   r   rJ   r   Úinitial_imputer_r1   r0   r‹   rÞ   )rŒ   Únr^   r7   Zmissing_flagr:   rL   r&   r&   r'   Ú!test_iterative_imputer_zero_itersT  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á   rP   râ   rì   r`   )r,   rï   ÚverboserC   )rF   rG   r�   r   r6   r   r0   r1   )rŒ   rñ   r^   r7   r:   r&   r&   r'   Útest_iterative_imputer_verbosel  s    


rô   c                  C   sB   d} d}t  | |f¡}tddd�}| |¡}t||j |¡ƒ d S )Nrá   rP   r   r`   )r,   rï   )rF   r‚   r   rJ   r   rð   r1   )rñ   r^   r7   r:   rL   r&   r&   r'   Ú"test_iterative_imputer_all_missingz  s    
rõ   Úimputation_order)rG   Ú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ŠJ ‚| dkrºt  |d |d … t  d|¡k¡s¸J ‚n”| dkrðt  |d |d … t  |d dd¡k¡sîJ ‚n^| dk�r*|d |d … }||d d … }	||	k�sNJ ‚n$d| v �rNt|ƒ||d  k�sNJ ‚d S )Nr   rá   rB   rC   râ   rì   r`   rQ   FT)
r,   rï   Ún_nearest_featuresÚsample_posteriorÚskip_completeÚ	min_valueÚ	max_valueró   rö   ræ   c                 S   s   g | ]
}|j ‘qS r&   ©Zfeat_idx)Ú.0r¶   r&   r&   r'   Ú
<listcomp>›  r   z;test_iterative_imputer_imputation_order.<locals>.<listcomp>r÷   rú   r”   rG   Úending)rF   rG   r�   r   r6   r   rJ   Úimputation_sequence_rr   rÞ   Zn_features_with_missing_r‹   rƒ   )
rö   rŒ   rñ   r^   rï   r7   r:   Zordered_idxZordered_idx_round_1Zordered_idx_round_2r&   r&   r'   Ú'test_iterative_imputer_imputation_orderƒ  s>    ö
(.

r  Ú	estimatorc           	      C   s¨   t j d¡}d}d}t||d|d� ¡ }tdd| |d�}| |¡ g }|jD ]>}| d ur`t| ƒntt	ƒ ƒ}t
|j|ƒszJ ‚| t|jƒ¡ qLtt|ƒƒt|ƒks¤J ‚d S )Nr   rá   rB   râ   rì   r`   )r,   rï   r  ræ   )rF   rG   r�   r   r6   r   rJ   r  r§   r   Ú
isinstancer  ÚappendÚidrr   Úset)	r  rŒ   rñ   r^   r7   r:   Ú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á   rB   râ   rì   r`   çš™™™™™É?)r,   rï   rþ   rÿ   ræ   ©
rF   rG   r�   r   r6   r   rJ   r   Úminr†   ©rŒ   rñ   r^   r7   r:   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á   rB   râ   rì   r`   rC   rQ   Tr  rG   )	r,   rï   rû   rü   rþ   rÿ   ró   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ƒsnJ ‚t	|dkƒs~J ‚| 
¡ | ¡  }}t|| | dƒ\}}|dkr¶|d7 }t|| | dƒ\}}|dk sä|dksäJ dƒ‚d S )Né*   )rQ   rQ   )rp   r   rš   T)rþ   rÿ   rü   ræ   c                    s   g | ]}ˆ  ˆ ¡d  d  ‘qS ©r   )r1   )r  Ú_rß   r&   r'   r    r   zEtest_iterative_imputer_truncated_normal_posterior.<locals>.<listcomp>rá   Znormgê-�™—q=r  râ   z&The posterior does appear to be normal)rF   rG   r�   ÚnormalrI   r   rJ   re   r…   r‹   r=   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á   rB   rP   )ÚlowÚhighrp   r`   r¾   )r,   rï   rE   ræ   r+   )	rF   rG   r�   Úrandintr   r0   r   r   r1   )r-   rŒ   rñ   r^   ÚX_trainÚX_testr:   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€J ‚tddd	d d
| d�}tddd	d d
|d�}	| |¡ |	 |¡ | |¡}
| |¡}|	 |¡}t|
|ƒ t|
|ƒ d S )Nr   r`   rá   rB   râ   rì   T)r,   rï   rü   ræ   Frø   )r,   rï   rü   rû   rö   ræ   )rF   rG   r�   r   r6   r   r0   r1   r=   rU   Úapproxr   )Zrng1Zrng2rñ   r^   r7   r:   Z
X_fitted_1Z
X_fitted_2Úimputer1Úimputer2ZX_fitted_1aZX_fitted_1br&   r&   r'   Ú.test_iterative_imputer_transform_stochasticity'  sF    ÿ


ú	ú





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á   rB   )rï   ræ   r`   )
rF   rG   r�   ÚrandrI   r   r0   r1   rJ   r   )rŒ   r7   Úm1Úm2Zpred1Zpred2r&   r&   r'   Ú!test_iterative_imputer_no_missingY  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   r`   rš   rQ   ©rï   ró   ræ   g{®Gáz”?©Úatol)
rF   rG   r�   r&  Údotr2   rI   r   rJ   r   )	rŒ   r^   ÚAÚBr7   Únan_maskÚ	X_missingr:   ÚX_filledr&   r&   r'   Útest_iterative_imputer_rank_oneg  s    

r4  ÚrankrP   rQ   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š   rC   rQ   rù   r`   )rï   rö   ró   ræ   râ   r,  )rF   rG   r�   r&  r.  r2   rI   r   r0   r1   r   )r5  rŒ   rñ   r^   r/  r0  r3  r1  r2  r  ÚX_test_filledr   r:   Ú
X_test_estr&   r&   r'   Ú)test_iterative_imputer_transform_recoveryv  s(    
ÿþ
r9  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á   rB   rC   g      Ð?r`   r+  gü©ñÒMbP?ç{®Gáz„?)Úrtolr-  )rF   rG   r�   rH   r‚   rK   r…   r&  r2   rI   r   r0   r1   r   )rŒ   rñ   r^   r/  r0  r3  r¶   r�   r1  r2  r  r7  r   r:   r8  r&   r&   r'   Ú&test_iterative_imputer_additive_matrix�  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ŽJ ‚t|jdd| d
�}| |¡}
t|	|
dd� tdddd| d	�}| |¡ |j|jksäJ ‚d S )Nr   r*  rQ   r`   rš   rá   r:  F)rï   Ztolrü   ró   ræ   )rï   rü   ró   ræ   gH¯¼šò×z>r,  )rF   rG   r�   r&  r.  r2   rI   r   rJ   rr   r  rÞ   r   r0   rï   )rŒ   rñ   r^   r/  r0  r7   r1  r2  r:   ZX_filled_100ZX_filled_earlyr&   r&   r'   Ú%test_iterative_imputer_early_stopping©  s0    

ÿ

ÿ

ÿ
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 d   ƒ n1 s´0    Y  t t |	¡¡rÒJ ‚d S )NT)Z
return_X_yr`   rP   r   g333333Ã?F)rp   ÚreplacerQ   )rû   rü   Úerror)r   rK   rF   rG   r�   r…   Úchoicerƒ   ÚintrI   r   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningrJ   rŠ   r‰   )
r7   r%   Z	n_samplesÚ
n_featuresrŒ   Zmissing_rateZfeatZ
sample_idxr:   ZX_fillr&   r&   r'   Ú$test_iterative_imputer_catch_warningÇ  s    
ÿ
*rG  z$min_value, max_value, correct_outputrá   )r’   rQ   rB   )rá   éÈ   i,  r’   rB   rH  )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ƒsJJ ‚|jj
d |j
d krv|j	j
d |j
d kszJ ‚t|dd d …f |jƒ t|dd d …f |j	ƒ d S )Nr   rB   rP   ©rþ   rÿ   r`   )rF   rG   r�   rH   r   r0   r  Z
_min_valueÚndarrayZ
_max_valuerK   r   )rþ   rÿ   Zcorrect_outputr7   r:   r&   r&   r'   Ú)test_iterative_imputer_min_max_array_likeà  s    
ÿÿrM  zmin_value, max_value, err_msg)rá   r   úmin_value >= max_value.rN  )rá   rH  r   z_value' should be of shape)r’   rQ   rQ   c                 C   sT   t j d¡}t| |d�}tjt|d�� | |¡ W d   ƒ n1 sF0    Y  d S )N©rB   rP   rK  rR   )rF   rG   r   rU   rl   rm   r0   )rþ   rÿ   r.   r7   r:   r&   r&   r'   Ú*test_iterative_imputer_catch_min_max_error  s    rP  zmin_max_1, min_max_2iöÿÿÿra   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 )
NrC   r`   rB   r®   rP   ra   rQ   r   )rþ   rÿ   ræ   )rF   re   rI   r   r0   r1   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&    üÿ*ÿÿÿrQ  rý   TFc                 C   sÊ   t j d¡}t  g d¢g d¢g d¢g d¢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 g d¢dd� d S )Nr   )rQ   rC   rC   r`   )rB   r`   rC   r®   )rP   r`   r`   r`   )rÎ   ra   rC   rC   rC   ra   rQ   r`   rB   r=   )rE   rý   ræ   )é   r®   é   g-Cëâ6?)r;  )
rF   rG   r�   re   rI   r   r0   r1   r   r=   )rý   rŒ   r  r   r:   r8  r&   r&   r'   Ú'test_iterative_imputer_skip_non_missing0  s    ".ÿ*rT  Ú
rs_imputer)ÚseedÚrs_estimatorc                 C   sH   G dd„ dƒ}||d�}t | d�}t d¡}| |¡ |j|ksDJ ‚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__G  s    zLtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.__init__c                 _   s   | S r!   r&   )rX  rt   Zkgardsr&   r&   r'   r0   J  s    zGtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.fitc                 S   s   t  |jd ¡S )Nr   )rF   r‚   rK   )rX  r7   r&   r&   r'   ÚpredictM  s    zKtest_iterative_imputer_dont_set_random_state.<locals>.ZeroEstimator.predictN)Ú__name__Ú
__module__Ú__qualname__rY  r0   rZ  r&   r&   r&   r'   ÚZeroEstimatorF  s   r^  rå   rO  )r   rF   r‚   r0   ræ   )rU  rW  r^  r  r:   r  r&   r&   r'   Ú,test_iterative_imputer_dont_set_random_stateC  s    




r_  zX_fit, X_trans, params, msg_errr”   úmissing-onlyÚauto)Úfeaturesr   zBhave missing values in transform but have no missing values in fitr[   r\   r]   r_   z1MissingIndicator does not support data with dtypec                 C   s\   t dd�}|jf i |¤Ž tjt|d��  | | ¡ |¡ W d   ƒ n1 sN0    Y  d S )Nr”   rä   rR   )r   Ú
set_paramsrU   rl   rm   r0   r1   )ÚX_fitr;   ÚparamsZmsg_errÚ	indicatorr&   r&   r'   Útest_missing_indicator_errorW  s    
rg  c                  C   sN   dt jft jt jfdt jfg} t jgt t t t t	 }dd„ t
|| ƒD ƒS )Nr   r”   c                 S   s0   g | ](\}\}}|d kr"|t jus|||f‘qS r  )rF   re   )r  Úarr_typer,   r"   r&   r&   r'   r  y  s   
üz5_generate_missing_indicator_cases.<locals>.<listcomp>)rF   Zint32rI   Úfloat64re   r   r   r   r    r   r   )Zmissing_values_dtypesZ	arr_typesr&   r&   r'   Ú!_generate_missing_indicator_caseso  s$    ÿþýüûÿÿþrj  zarr_type, missing_values, dtypez,param_features, n_features, features_indices©r   r`   rC   r‹   c                 C   sÐ  t  | | dgdd| gg¡}t  | | dgg d¢g¡}t  g d¢g d¢g¡}t  g d¢g d¢g¡}	||ƒ |¡}||ƒ |¡}| |¡}|	 |¡}	t| |d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ƒ�sPJ ‚|
jd
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 )Nr`   ra   rC   ©ra   rS  rB   )r`   r`   r   )r   r   r`   r•   F)r,   rb  r   Tr   Úcsc)rF   re   Úastyper   rJ   r1   rK   r   Z	features_r   r"   Úboolr  rL  rc  r4   r6   )r,   rh  r"   Zparam_featuresrF  Zfeatures_indicesrd  r;   ZX_fit_expectedZX_trans_expectedrf  Ú
X_fit_maskÚX_trans_maskZX_fit_mask_sparseZX_trans_mask_sparser&   r&   r'   Útest_missing_indicator_new‚  s>    


ÿ



rr  rh  c                 C   sÎ   d}t  ||dgd|dgg¡}t  ||dgg d¢g¡}| |ƒ}| |ƒ}t|d�}tjtdd�� | |¡ W d   ƒ n1 s~0    Y  | |¡ tjtdd�� | |¡ W d   ƒ n1 sÀ0    Y  d S )	Nr   r`   ra   rC   rl  rä   z"Sparse input with missing_values=0rR   )rF   re   r   rU   rl   rm   rJ   r1   )rh  r,   rd  r;   ZX_fit_sparseZX_trans_sparserf  r&   r&   r'   Ú5test_missing_indicator_raise_on_sparse_with_missing_0µ  s    
(
rs  Úparam_sparse)TFra  zarr_type, missing_valuesc                 C   sJ  t  ||dgd|dgg¡}t  ||dgg d¢g¡}| |ƒ t j¡}| |ƒ t j¡}t||d�}| |¡}| |¡}|du r˜|jdksˆJ ‚|jdks–J ‚n®|dkrÊ|d	krÊt|t j	ƒs¸J ‚t|t j	ƒsÈJ ‚n||d
u rôt|t j	ƒsâJ ‚t|t j	ƒsòJ ‚nRt
 |¡�r"|jdk�sJ ‚|jdk�sFJ ‚n$t|t j	ƒ�s4J ‚t|t j	ƒ�sFJ ‚d S )Nr`   ra   rC   rl  )r,   r   Trm  ra  r   F)rF   re   rn  ri  r   rJ   r1   r4   r  rL  r   r5   )rh  r,   rt  rd  r;   rf  rp  rq  r&   r&   r'   Ú#test_missing_indicator_sparse_paramÎ  s*    

ru  c                  C   sP   t jg d¢g d¢gtd�} tddd�}| | ¡}t|t  g d¢g d¢g¡ƒ d S )	N©r[   r\   r]   )r\   r]   r[   r_   r[   r‹   )r,   rb  )TFF)FFT)rF   re   rf   r   rJ   r   )r7   rf  r;   r&   r&   r'   Útest_missing_indicator_stringú  s    
rw  zX, missing_values, X_trans_exp)r\   r\   TF)r\   r\   FT)r½   r½   TF)r½   r½   FTc                 C   s0   t t|dd�t|d�ƒ}| | ¡}t||ƒ d S )Nr?   r+   rä   )r   r   r   rJ   r   )r7   r,   ZX_trans_expZtransr;   r&   r&   r'   Ú#test_missing_indicator_with_imputer  s    
þ
rx  Ú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   sf   t j d¡}| dd¡}||d< | |d�}tjt|d�� | |¡ W d   ƒ n1 sX0    Y  d S )Nr  rB   r¾   rä   rR   )rF   rG   r�   rH   rU   rl   rm   rJ   )ry  Zimputer_missing_valuesrÈ   r.   rŒ   r7   r:   r&   r&   r'   Ú(test_inconsistent_dtype_X_missing_values#  s    
r{  c                  C   sB   t  ddgddgg¡} tddd�}| | ¡}|jd dks>J ‚d S )Nr`   r`  r”   ©rb  r,   r   )rF   re   r   rJ   rK   )r7   Úmirí   r&   r&   r'   Ú!test_missing_indicator_no_missing:  s    
r~  c                 C   sH   | g d¢g d¢g d¢gƒ}t ddd�}| |¡}| ¡ | ¡ ksDJ ‚d S )Nrk  )r`   rC   r   )rC   r   r`   r‹   r`   r|  )r   rJ   ZgetnnzÚsum)rA   r7   r}  rí   r&   r&   r'   Ú/test_missing_indicator_sparse_no_explicit_zerosE  s    
r€  c                 C   s8   t  ddgddgg¡}| ƒ }| |¡ |jd u s4J ‚d S )Nr`   )rF   re   r0   Z
indicator_)ry  r7   r:   r&   r&   r'   Útest_imputer_without_indicatorQ  s    
r�  c                 C   s–   | t jddgdt jdgddt jgg d¢gƒ}t  g d¢g d¢g d	¢g d
¢g¡}tt jdd�}| |¡}t |¡stJ ‚|j|jks„J ‚t| 	¡ |ƒ d S )Nr`   rQ   rC   rŸ   rP   )r`   rC   r£   )ç      @r½   ç      @r½   ç        r„  )ç       @r…  r½   r„  r½   r„  )g      @r‚  rƒ  r„  r„  r½   )r½   r…  g      "@r„  r„  r„  T)r,   Úadd_indicator)
rF   rI   re   r   rJ   r   r5   rK   r   r6   )rh  ZX_sparser8   r:   r;   r&   r&   r'   Ú2test_simple_imputation_add_indicator_sparse_matrixZ  s    ,üÿ	
r‡  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 )Nr[   r\   r]   r_   rD   )rF   rI   re   rf   r   rJ   r   )r-   Úexpectedr7   r8   r:   r;   r&   r&   r'   Ú"test_simple_imputation_string_listq  s
    

r‰  zorder, idx_orderrø   )rP   ra   rC   r   r`   rù   )r`   r   rC   ra   rP   c                 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¡�@ td| dd� 	|¡}dd„ |j
D ƒ}||ksœJ ‚W d   ƒ n1 s°0    Y  d S )Nr  rá   rQ   r*  r`   é   r   é   rC   rB   ra   )rï   rö   ræ   c                 S   s   g | ]
}|j ‘qS r&   r   )r  r$   r&   r&   r'   r  �  r   z)test_imputation_order.<locals>.<listcomp>)rF   rG   r�   r&  rI   rU   rV   r	   r   r0   r  )ÚorderZ	idx_orderrŒ   r7   ZtrsÚidxr&   r&   r'   Útest_imputation_order  s    ÿrŽ  rÈ   c              	   C   s4  t  d| ddgg d¢dd| dgddd| gg¡}t  g d	¢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  g d¢| d
| dgg d¢| d| d
gg¡}t| ddd�}| |¡}| |¡}| |¡}| |¡}	t||ƒ t|	|ƒ ||fD ]$}
| |
¡}| |¡}t||
ƒ �q
d S )Nr£   rP   r”   ©ra   r”   rQ   ra   rŸ   r®   rÎ   r   )rQ   ra   rC   r`   rC   r`   ra   rQ   )r`   r`   r`   rP   )rC   rP   rP   ra   r=   T)r,   r-   r†  )rF   re   r   rJ   Úinverse_transformr1   r   )rÈ   ÚX_1ZX_2ZX_3ZX_4r:   Ú	X_1_transZX_1_inv_transZ	X_2_transZX_2_inv_transr7   r;   ZX_inv_transr&   r&   r'   Ú(test_simple_imputation_inverse_transform”  sR    


üÿ	


üÿ	



üÿ	

üÿ	ÿ







r“  c              	   C   sŠ   t  d| ddgg d¢dd| dgddd| gg¡}t| d	d
�}| |¡}tjtd|j› d�d�� | |¡ W d   ƒ n1 s|0    Y  d S )Nr£   rP   r”   r�  rŸ   r®   rÎ   r   r=   r+   zGot 'add_indicator=ú'rR   )	rF   re   r   rJ   rU   rl   rm   r†  r�  )rÈ   r‘  r:   r’  r&   r&   r'   Ú3test_simple_imputation_inverse_transform_exceptionsÎ  s    


üÿ	
ÿr•  z)expected,array,dtype,extra_value,n_repeatÚextra_valuerv  Úmost_frequent_value)r—  r—  Úvaluerþ   Zmin_valuevalue)rþ   rþ   r˜  r{   ©r`   rC   rP   )r`   r`   rC   )r‹  r‹  r`   )r`   r`   r‹  c                 C   s"   | t tj||d�||ƒksJ ‚d S )Nr_   )r   rF   re   )rˆ  re   r"   r–  Zn_repeatr&   r&   r'   Útest_most_frequentá  s    ÿrš  rE   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).
    r`   rC   rP   T)rE   rÐ   Nr   )rF   re   rI   r   rJ   r   r1   )rE   r7   r:   rL   r&   r&   r'   Ú*test_iterative_imputer_keep_empty_featuresü  s     ÿ

r›  c                  C   sT   t  g d¢g d¢g d¢g d¢g¡} d}td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”   r@   r   T)r,   rE   rÃ   rï   rÐ   N)rF   re   r   rJ   r   rð   r3   )r7   rÃ   r:   r&   r&   r'   Ú*test_iterative_imputer_constant_fill_value  s    "û
rœ  c               	   C   sÎ  t  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d� | ¡}t j| ddd�}|j|jksœJ ‚t  |t  	|¡ ¡t
 d¡ks¾J ‚t  |t  	|¡ ¡t
 d¡ksàJ ‚t  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d…f }|j|jk�s‚J ‚t  |t  	|¡ ¡t
 d¡k�s¦J ‚t  |t  	|¡ ¡t
 d¡k�sÊJ ‚dS )z³Check 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
    r`   rC   ra   rQ   rŸ   r®   rÎ   rB   rR  rS  F)rþ   rÿ   rÐ   r€   g      @NrP   )rF   re   rI   rI  r   rJ   ÚdeleterK   r  r‰   rU   r"  r†   )r7   rþ   rÿ   rL   ZX_without_missing_columnr&   r&   r'   Ú1test_iterative_imputer_min_max_value_remove_empty   sP    üÿýü""üÿýü$rž  rÐ   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sTJ ‚t|dd…df dƒ q.|j|jd |jd d fks.J ‚q.dS )z>Check the behaviour of `keep_empty_features` for `KNNImputer`.r`   rC   rP   )rÐ   ©rJ   r1   Nr   )rF   re   rI   r   ÚgetattrrK   r   )rÐ   r7   r:   ÚmethodrL   r&   r&   r'   Ú$test_knn_imputer_keep_empty_featuresW  s     
r¢  c                  C   s€  t  d¡} |  d| jg d¢dd�i¡}t| jddd�}t| |¡tj	d	gdgd
ggt
d�ƒ |  d| jg d¢dd�i¡}tddd�}t| |¡tj	d	gd
gdggt
d�ƒ |  d| jg d¢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g d¢dd�i¡}t| jdd�}t| |¡tj	dgdgdgdggdd�ƒ |  d| jg d¢dd�i¡}t| jdd�}t| |¡tj	dgdgdggdd�ƒ |  d| jg d¢dd�i¡}t| jddd�}t| |¡tj	dgdgdggdd�ƒ |  d| jg d ¢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)ÚabcNÚdeÚstringr_   r@   ÚnarÂ   r¤  r¥  )r¤  r¥  ÚfghÚok)rÃ   r-   r¨  )r`   NrP   ZInt64r”   r`   rP   ri  )r`   NrC   rP   r>   r+   rC   )r`   NrC   r=   r×   )r½   Nr‚  g       Àr½   r‚  )r½   Nr…  r‚  r…  )rU   rd   rg   ZSeriesr   ZNAr(   rJ   rF   re   rf   r)   rI   )rh   r»   r:   r&   r&   r'   Útest_simple_impute_pd_nag  sR    
 ÿ ÿ ÿ ÿ$ÿ ÿ ÿþrª  c                  C   sd   t  d¡} tj}| j||d|gd|ddggg d¢d�}t|d� |¡}| ¡ }g d	¢}t||ƒ d
S )zDCheck that missing indicator return the feature names with a prefix.rY   r`   ra   rC   rB   rZ   rb   rä   )Zmissingindicator_aZmissingindicator_bZmissingindicator_dN)	rU   rd   rF   rI   rg   r   r0   Zget_feature_names_outr   )rh   r,   r7   rf  ri   Zexpected_namesr&   r&   r'   Ú(test_missing_indicator_feature_names_out£  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sHJ ‚t|ddggƒ dS )zkCheck transform uses object dtype when fitted on an object dtype.

    Non-regression test for #19572.
    r[   r\   r]   r?   rD   N)r   r0   r1   rF   rI   r"   rf   r   )r7   Zimp_frequentr;   r&   r&   r'   Ú test_imputer_lists_fit_transform¶  s
    r¬  Ú
dtype_testc                 C   sn   t jddt jgt jddgg d¢gt jd�}tƒ  |¡}t jt jt jt jgg| d�}| |¡}|j| ksjJ ‚dS )zACheck transform preserves numeric dtype independent of fit dtype.rÔ   g333333@rÕ   )gÍÌÌÌÌÌ@rC   r`   r_   N)rF   ÚasarrayrI   ri  r   r0   r1   r"   )r­  r7   Úimpr   r;   r&   r&   r'   Ú.test_imputer_transform_preserves_numeric_dtypeÃ  s     ÿ
r°  Ú
array_typere   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 ]¨}| d¡r–|s–d	}tjt|d
�� t	||ƒ|ƒ}W d  ƒ q¤1 sŠ0    Y  nt	||ƒ|ƒ}|j
|j
ks´J ‚| dkrÐ|dd…df  ¡ 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.
    rC   rP   rŸ   rB   r@   rØ   rŸ  r0   z7`strategy="constant"`, empty features are not dropped. rR   Nr   r   )rF   re   rI   r   r   Ú
startswithrU   rV   ÚFutureWarningr   rK   r6   r   )	r±  rÐ   r7   rÃ   r:   r¡  Zwarn_msgrL   Úconstant_featurer&   r&   r'   Ú0test_simple_imputer_constant_keep_empty_featuresÐ  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sbJ ‚|dkr~|dd…df  ¡ n|dd…df }t|dƒ q<|j|jd |jd	 d	 fks<J ‚q<dS )
zYCheck the behaviour of `keep_empty_features` with all strategies but
    'constant'.
    rC   rP   rŸ   rÜ   rŸ  r   Nr   r`   )	rF   re   rI   r   r   r   rK   r6   r   )r-   r±  rÐ   r7   r:   r¡  rL   r´  r&   r&   r'   Ú'test_simple_imputer_keep_empty_featuresï  s    "
*ÿr¶  c              
   C   s¾   t  g d¢ddt jgt jdt jgg d¢g d¢t jddgg¡}t  g d¢g d¢g d	¢g d¢g d¢g d
¢g¡}tt jt jd�}| |¡}t||ƒ tt jt jd�}| | |ƒ¡}t| ¡ |ƒ d S )N)rÓ   rÓ   rÓ   ç333333@rÔ   rÕ   )râ   rÖ   rÖ   )gš™™™™™@r×   r×   çš™™™™™ù?)r·  rÔ   rÓ   )râ   rÕ   rÓ   )râ   r¸  r¸  r+   )rF   re   rI   r   r  rJ   r   r6   )rk   r7   r8   r:   r;   r&   r&   r'   Útest_imputation_custom  s0    

úÿúÿ

r¹  c                  C   sL  d} t jg d¢g d¢gt jd�}td| dd�}d| ›d	t| ƒ›d
�}tjtt 	|¡d�� | 
|¡ W d  ƒ n1 sx0    Y  t jg d¢g d¢gt jd�}| 
|¡ d|jj›d
�}tjtt 	|¡d�� | |¡ W d  ƒ n1 sì0    Y  t  d¡ddg}| t j¡}|D ]0} td| dd�}| |¡}|j|jk�sJ ‚�qdS )zþCheck that we raise a proper error message when we cannot cast the fill value
    to the input data type. Otherwise, check that the casting is done properly.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/28309
    r×   r™  )rC   rP   ra   r_   r@   rC   )r-   rÃ   r,   r¿   rÀ   rÁ   rR   Nz%The dtype of the filling value (i.e. r`   )rF   re   Zint64r   r§   rU   rl   rm   rÆ   rÇ   r0   ri  r3   r"   r1   rn  Úfloat32rJ   )rÃ   ZX_int64r:   r.   Z	X_float64Zfill_value_listZ	X_float32r;   r&   r&   r'   Ú/test_simple_imputer_constant_fill_value_casting(  s,    ÿ(
ÿ(ÿ
r»  c                 C   s^   t  t jddgdt jdgddt jgg¡}t| ddd�}t| d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   r`   rC   rP   ra   rQ   F©rE   rÃ   rÐ   TN)rF   re   rI   r   r   rJ   )r-   r7   Úimputer_drop_empty_featuresÚimputer_keep_empty_featuresr&   r&   r'   Ú(test_iterative_imputer_no_empty_featuresO  s    
(ÿÿþr¿  r   )r`   rC   rP   ra   )rQ   rŸ   r®   rÎ   rŸ   r®   rÎ   c           	      C   sÜ   t  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d�}| |¡}| |¡}t| d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   r`   rC   rP   ra   rQ   Fr¼  TN)rF   re   rI   r   rJ   r1   r   rK   )	r-   r   r  r½  ZX_train_drop_empty_featuresZX_test_drop_empty_featuresr¾  ZX_train_keep_empty_featuresZX_test_keep_empty_featuresr&   r&   r'   Ú*test_iterative_imputer_with_empty_featuresi  s"    ,ÿÿ

ÿ

rÀ  )�r¸   rÆ   rB  Ú	itertoolsr   ÚnumpyrF   rU   Zscipyr   Zscipy.statsr   Zsklearnr   Zsklearn.datasetsr   Zsklearn.dummyr   Zsklearn.exceptionsr	   Zsklearn.experimentalr
   Zsklearn.imputer   r   r   r   Zsklearn.impute._baser   Zsklearn.linear_modelr   r   r   Zsklearn.model_selectionr   Zsklearn.pipeliner   r   Zsklearn.random_projectionr   Zsklearn.utils._testingr   r   r   r   r   Zsklearn.utils.fixesr   r   r   r   r    r(   r)   r<   ÚmarkZparametrizerM   rX   rj   rn   rw   rx   r‘   r›   rf   Ústrr¦   rª   r"   r­   r¯   rI   r³   r¼   rÉ   rÑ   r®  rÙ   rÛ   rÝ   rà   rë   rî   rò   rô   rõ   r  r  r  r  r  r!  r%  r)  r4  r9  r<  r=  rG  re   rI  rM  rP  rQ  rT  rG   r�   r_  rg  rj  rr  rs  r¨   ru  rw  rx  r{  r~  r€  r�  r‡  r‰  rŽ  r“  r•  rA  rš  r›  rœ  rž  r¢  rª  r«  r¬  rº  ri  r°  rµ  r¶  r¹  r»  r¿  rÀ  r&   r&   r&   r'   Ú<module>   s0  	'
	

E
"





#
"
+	ÿ
%ÿ
!
2
$*"
ýûó
üþ	
	0ý

üüùþ
ÿ&þ,þ

ÿþýüúÿÿþýýýýðþ
	
þþ

þ
ÿ
þ

9
ûðþ
ÿ
7<!'&$ýþ