U
    ½mœdÙ
 ã                   @   s  d dl Z d dl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„ Zej dddg¡dd„ ƒZdd„ Zej dddg¡dd„ ƒZej dejejejg¡ej dejejejg¡dd„ ƒƒZej dejejejg¡dd„ ƒZdd„ Zdd„ Zdd „ Zd!d"„ Zejjd#d$d%d&gd'd(d&gge  d)d%d&gd*d(d&gg¡ej d+d,d-gd.d/d-gge!d0�ej d+d%d-gd.ej"d-gge!d0�ej d+d%d-gd.e#d1ƒd-gge!d0�ej dd%d-gd.d(d-gge!d0�ej dd%dgd.ej"dgge!d0�ej dd%dgd.e#d1ƒdgge!d0�gd2d3d4d5d6d7d8d9gd:�d;d<„ ƒZ$ej dddg¡ej d=d>d?g¡ej d@ddAg¡dBdC„ ƒƒƒZ%ej d=d>d?g¡ej dDd(d&gd%d&gd(d&ggd d%d%gd d d gd d%d%ggfdEd.gdFd.gdGd+gdFd.ggd d d d d gd d d d d%gd d%d d d ggfg¡dHdI„ ƒƒZ&dJdK„ Z'ej d@dLdAdg¡ej dMdLdAdg¡dNdO„ ƒƒZ(ej dPdQdRg¡ej d#d%d(ge  dSdTg¡g¡dUdV„ ƒƒZ)ej dPdQdRg¡dWdX„ ƒZ*ejjdYd'd&gd$d&ggd'd$gd&ggej+fe  d%d(gdZd(gg¡d%dZgd(ggej,fej d,d-gd/d-gge!d0�d,d/gd-ggej+fe  d,d-gd/d-gg¡d,d/gd-ggej-fe  d%d(gej"d(gg¡d%ej"gd(ggej.fej d,ej"gdej"gge!d0�d,dgej"ggej+fej d,e#d1ƒgde#d1ƒgge!d0�d,dge#d1ƒggej+fgd2d3d4d[d\d]d^gd:�d_d`„ ƒZ/ej dddg¡ejjdaej d.d+gge!d0�j0ej d.dbgge!d0�j0d.d+dcggej+fej d%d(ggddd0�j0ej d%deggddd0�j0d%d(dZggej1fej d.d+gge!d0�j0ej d.dbgge!d0�j0e  d.d+dcg¡gej+fej dd.gge!d0�j0ej dd+gge!d0�j0dd.dfgge!fej d.d+gge!d0�j0ej d.ej"gge!d0�j0d.d+dfgge!fej d.dgge!d0�j0ej d.ej"gge!d0�j0d.ddfgge!fej d.ej"gge!d0�j0ej d.dgge!d0�j0d.ej"dfgge!fgd4d3dgdhdidjdkgd:�dldm„ ƒƒZ2dndo„ Z3dpdq„ Z4drds„ Z5ejjdtdAdudvgfdLdudwdvgfdcd(d+gdxdygfgdAdzd{gd:�d|d}„ ƒZ6d~d„ Z7ejjd#d'd(d&gd$d%d&gge  d)d(d&gd€d%d&gg¡ej d.d/d-gd+d,d-gge!d0�gd2d3d4gd:�d�d‚„ ƒZ8ejjdaej d.d+gge!d0�j0ej d.dbgge!d0�j0d.d+dcggej+fej d%d(ggddd0�j0ej d%deggddd0�j0d%d(dZggej1fej d.d+gge!d0�j0ej d.dbgge!d0�j0e  d.d+dcg¡gej+fgd4d3dƒgd:�d„d…„ ƒZ9d†d‡„ Z:dˆd‰„ Z;ej dŠe#e<g¡d‹dŒ„ ƒZ=d�dŽ„ Z>d�d�„ Z?d‘d’„ Z@d“d”„ ZAd•d–„ ZBd—d˜„ ZCej d™ej"de#d1ƒg¡dšd›„ ƒZDej d@d'dZgd'dZdœd.gg¡d�dž„ ƒZEejjdŸd?d>gd d¡gd:�ejjd@dAd.d(d+ggdAd{gd:�d¢d£„ ƒƒZFej d¤eeg¡d¥d¦„ ƒZGej d§d¨d(id©dªid©d«id(d¬d­œded®d­œg¡ej d¯d°d.d+dcdbggg¡d±d²„ ƒƒZHej d@dLdAd+gg¡d³d´„ ƒZIej d@d.gdbgg¡dµd¶„ ƒZJej d§d¨dZid©d¬id©d·id©d¸id©d¹idZdºd­œded¬d­œg¡d»d¼„ ƒZKej d@dAd+gg¡d½d¾„ ƒZLej d@d.gdbgg¡d¿dÀ„ ƒZMdÁdÂ„ ZNej d§dZd%d­œd©deig¡dÃdÄ„ ƒZOdÅdÆ„ ZPdÇdÈ„ ZQdÉdÊ„ ZRdËdÌ„ ZSdÍdÎ„ ZTej d§dÏd%dÐœg¡dÑdÒ„ ƒZUej d§d(dZdÐœg¡dÓdÔ„ ƒZVdÕdÖ„ ZWej d×dØdÙdÚdÛdÜdÝdÞg¡ej dßdàdádâg¡dãdä„ ƒƒZXdådæ„ ZYej d™ej"dg¡dçdè„ ƒZZdédê„ Z[ej dddg¡ej dëdìdíg¡dîdï„ ƒƒZ\ej dddg¡dðdñ„ ƒZ]ej dddg¡dòdó„ ƒZ^ej dddg¡dôdõ„ ƒZ_död÷„ Z`ej døej"dùg¡dúdû„ ƒZaej dëdìdíg¡ej døej"dùg¡düdý„ ƒƒZbejjdaej d.ej"gge!d0�j0ej d.d+gge!d0�j0ej d.ej"dbge!d0�gej+fej d.ej"gge!d0�j0ej d.d+gge!d0�j0ej d.ej"dbge!d0�gej+fej dþej"ggejd0�j0ej dSggejd0�j0e  dþdTej"g¡gejfgdÿ�d �dgd:��d�d„ ƒZcej �de  �dej"dSgg¡j0e  �dej"�dgg¡j0e  dTgg¡fe  �ddTdSgg¡j0e  �ddþ�dgg¡j0e  ej"gg¡fej dcej"d+gge!d0�j0e  �dej"�dgg¡j0ej dbgge!d0�fej dcd.d+gge!d0�j0e  dþ�d�dgg¡j0ej ej"gge!d0�fg¡�d�d„ ƒZd�d	�d
„ Ze�d�d„ Zfej �d�dd/ggej �dd/gg�dd0�ej �dd/gg�dd0�g¡ej �dd,d/ggej d,d/gg�dd0�ej d,d/gg�dd0�g¡�d�d„ ƒƒZg�d�d„ Zh�d�d„ Zi�d�d„ Zjej �dd?d>g¡�d�d„ ƒZkej �dej d.g�dgge!d0�d gej"gej"ggejl�dgdgdgge!d0�fej ej"g�dgd.gge!d0�d gej"gej"ggejl�dgej"gej"gge!d0�fg¡�d�d „ ƒZm�d!�d"„ Zn�d#�d$„ Zo�d%�d&„ Zp�d'�d(„ Zq�d)�d*„ ZrdS (+  é    N©Úsparse)ÚNotFittedError)Úassert_array_equal)Úassert_allclose)Ú_convert_container)Úis_scalar_nan)ÚOneHotEncoder)ÚOrdinalEncoderc                  C   s®   t  dddgdddgg¡} tƒ }tdd�}| | ¡}| | ¡}|jdksLt‚|jdksZt‚t |¡sht‚t |¡rvt‚t| 	¡ dd	dd	d	gd	dd	dd	ggƒ t| 	¡ |ƒ d S )
Né   é   é   r   F©Úsparse_output©r   é   ç        ç      ð?)
ÚnpÚarrayr	   Úfit_transformÚshapeÚAssertionErrorr   Úissparser   Útoarray)ÚXZ
enc_sparseZ	enc_denseÚX_trans_sparseZX_trans_dense© r   úb/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/preprocessing/tests/test_encoders.pyÚ!test_one_hot_encoder_sparse_dense   s    


 ÿr   Úhandle_unknownÚignoreÚinfrequent_if_existc                 C   sÀ   t  dddgdddgdddgg¡}t  dddgg¡}tdd�}| |¡ tjtdd	�� | |¡ W 5 Q R X t| d�}| |¡ | ¡ }t	| |¡ 
¡ t  d
d
d
d
dd
d
gg¡ƒ t||ƒ d S )Nr   r   r   r   é   Úerror©r    úFound unknown categories©Úmatchr   r   )r   r   r	   ÚfitÚpytestÚraisesÚ
ValueErrorÚ	transformÚcopyr   r   r   ©r    r   ÚX2ÚohZ	X2_passedr   r   r   Ú#test_one_hot_encoder_handle_unknown(   s    "



þr2   c               	   C   sL   t  dgdgg¡} tddgd�}d}tjt|d�� | | ¡ W 5 Q R X d S )NÚaÚb©Ú
categorieszqThis OneHotEncoder instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.r'   )r   r   r	   r*   r+   r   r-   )r   ÚencÚmsgr   r   r   Útest_one_hot_encoder_not_fitted@   s    ÿr9   c              	   C   s„   t  ddddg¡ d¡}t  ddg¡ d¡}t| d�}| |¡ | ¡ }t| |¡ ¡ t  ddddgdd	ddgg¡ƒ t||ƒ d S )
NZ11111111Z22Z333Z4444)éÿÿÿÿr   Z55555r%   r   r   )	r   r   Úreshaper	   r)   r.   r   r-   r   r/   r   r   r   Ú+test_one_hot_encoder_handle_unknown_stringsL   s    

þr<   Úoutput_dtypeÚinput_dtypec                 C   s¢   t jddgg| d�j}t jddgddgg|d�}td|d�}t| |¡ ¡ |ƒ t| |¡ |¡ ¡ |ƒ td|dd�}t| |¡|ƒ t| |¡ |¡|ƒ d S )Nr   r   ©ÚdtypeÚauto)r6   r@   F)r6   r@   r   )	r   ÚasarrayÚTr	   r   r   r   r)   r-   )r>   r=   r   Ú
X_expectedr1   r   r   r   Útest_one_hot_encoder_dtype_   s    rE   c                 C   s²   t  d¡}| ddgddgdœ¡}tjddddgddddgg| d�}t| d�}t| |¡ ¡ |ƒ t| 	|¡ 
|¡ ¡ |ƒ t| d	d
�}t| |¡|ƒ t| 	|¡ 
|¡|ƒ d S )NÚpandasr3   r4   r   r   ©ÚAÚBr   r?   F)r@   r   )r*   ÚimportorskipÚ	DataFramer   r   r	   r   r   r   r)   r-   )r=   ÚpdÚX_dfrD   r1   r   r   r   Ú!test_one_hot_encoder_dtype_pandasn   s    
"
rN   c                  C   sÜ   t ƒ } dddddgdddddgdd	d
ddgdddddgg}|  |¡ |  ¡ }tdddddddddddddddg|ƒ |  ddd d!d"g¡}td#d$d%d&d'd(d)d*d+d,d-d.d/d0d1g|ƒ tjtd2d3�� |  ddg¡ W 5 Q R X d S )4NÚMaler   Úgirlr   r   ÚFemaleé)   é
   é3   Úboyé   é[   é   é   Z	x0_FemaleZx0_MaleZx1_1Zx1_41Zx1_51Zx1_91Zx2_boyZx2_girlZx3_1Zx3_2Zx3_12Zx3_21Zx4_3Zx4_10Zx4_30ÚoneÚtwoÚthreeÚfourÚfiveZ
one_FemaleZone_MaleZtwo_1Ztwo_41Ztwo_51Ztwo_91Z	three_boyZ
three_girlZfour_1Zfour_2Zfour_12Zfour_21Zfive_3Zfive_10Zfive_30z!input_features should have lengthr'   )r	   r)   Úget_feature_names_outr   r*   r+   r,   )r7   r   Úfeature_namesZfeature_names2r   r   r   Ú"test_one_hot_encoder_feature_names~   sb    ü
ñîñîra   c                  C   s\   t ƒ } tjddggtd�j}|  |¡ |  ¡ }tddg|ƒ | jdgd�}tdd	g|ƒ d S )
Nu   câ�¤t1Zdat2r?   u	   x0_câ�¤t1Zx0_dat2u   nðŸ‘�me)Zinput_featuresu   nðŸ‘�me_câ�¤t1u   nðŸ‘�me_dat2)r	   r   r   ÚobjectrC   r)   r_   r   )r7   r   r`   r   r   r   Ú*test_one_hot_encoder_feature_names_unicodeº   s    
rc   c                  C   s˜   t  ddgg¡j} tƒ }|jddddggd� | ¡ d ddddggksLt‚| | ¡ ¡ j	dksdt‚|jdddddggd� | | ¡ ¡ j	d	ks”t‚d S )
Nr   r   r   r   r5   r6   )r   r#   r#   r   )
r   r   rC   r	   Ú
set_paramsÚ
get_paramsr   r   r   r   )r   r1   r   r   r   Útest_one_hot_encoder_set_paramsÄ   s    rf   c                 C   sN   t dd�}| | ¡}t ddd�}| | ¡}t| ¡ |ƒ t |¡sFt‚| ¡ S )NrA   r5   F©r6   r   )r	   r   r   r   r   Zisspmatrix_csrr   )r   r7   ZXtr1ZXtr2r   r   r   Úcheck_categorical_onehotÐ   s    


rh   r   Údefr   é7   Úabcr   rS   r   r4   rH   Úcatr3   rI   r?   ÚnanÚmixedÚnumericrb   z	mixed-nanzmixed-float-nanz
mixed-Nonezmixed-None-nanzmixed-None-float-nan)Zidsc                 C   s¨   t t | ¡d d …dgf ƒ}t|ddgddggƒ t t | ¡d d …ddgf ƒ}t|ddddgddddggƒ tdd� | ¡}t| ¡ dddddgdddddggƒ d S )Nr   r   rA   r5   )rh   r   r   r   r	   r   r   )r   ÚXtrr   r   r   Útest_one_hot_encoderÝ   s    rq   Úsparse_FTÚdropÚfirstc              	   C   sÌ  dddgdddgdddgg}t ||d�}| |¡}tj|td�}t| |¡|ƒ ddgddgddgg}t |d	|d
�}| |¡}t |¡}t| |¡|ƒ |d k�r€dddgdddgdddgg}t || ddgddgdddggd�}| |¡}tj|td�}d |d< t| |¡|ƒ ddgddgddgg}t |ddgddgg| d�}| |¡}tj|td�}d |d< d |d d …df< t| |¡|ƒ t dddgdddgg¡}t d¡}t	j
t|d�� | |¡ W 5 Q R X d S )Nrk   r   rj   ri   r   r   ©r   rs   r?   rA   )r   r6   rs   é6   é8   )r   r    r6   )r   r   )r   r6   r    ©r   r   r   ú)Shape of the passed X data is not correctr'   )r	   r   r   r   rb   r   Úinverse_transformÚreÚescaper*   r+   r,   )r    rr   rs   r   r7   ÚX_trÚexpr8   r   r   r   Útest_one_hot_encoder_inverseÿ   sH    



ý
ý

r   z
X, X_transrZ   r[   r\   c              	   C   sJ   t |d� | ¡}d}|r"t|dƒ}tjt|d�� | |¡ W 5 Q R X dS )z×Check that `inverse_transform` raise an error with unknown samples, no
    dropped feature, and `handle_unknow="error`.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/14934
    r   zqSamples \[(\d )*\d\] can not be inverted when drop=None and handle_unknown='error' because they contain all zerosr   r'   N)r	   r)   r   r*   r+   r,   rz   )r   ÚX_transrr   r7   r8   r   r   r   Ú?test_one_hot_encoder_inverse_transform_raise_error_with_unknown1  s    ÿ
r�   c                  C   sJ   t jddgddgddggtd�} tddd	�}| | ¡}t| |¡| ƒ d S )
NrO   r   rQ   r   r   r?   Ú	if_binaryF©rs   r   )r   r   rb   r	   r   r   rz   )r   Úoher}   r   r   r   Ú&test_one_hot_encoder_inverse_if_binaryQ  s     
r…   r‚   Ú
reset_dropc                 C   s†   t jddgddgddggtd�}t| dd�}| |¡ | |¡}| ¡ }|j|d	� t| 	|¡|ƒ t
| |¡|ƒ t| ¡ |ƒ d S )
NrO   r   rQ   r   r   r?   Frƒ   ©rs   )r   r   rb   r	   r)   r-   r_   rd   r   rz   r   )rs   r†   r   r„   r}   r`   r   r   r   Útest_one_hot_encoder_drop_resetX  s     

rˆ   Úmethodr)   r   ç      @ç      @c              	   C   s6   t ƒ }d}tjt|d�� t||ƒ| ƒ W 5 Q R X d S )Nú'Expected 2D array, got 1D array insteadr'   )r	   r*   r+   r,   Úgetattr)r   r‰   r1   r8   r   r   r   Útest_X_is_not_1Dg  s    rŽ   c              	   C   sR   t  d¡}| ddddg¡}tƒ }d}t jt|d�� t|| ƒ|ƒ W 5 Q R X d S )NrF   é   r   r#   rŒ   r'   )r*   rJ   ÚSeriesr	   r+   r,   r�   )r‰   rL   r   r1   r8   r   r   r   Útest_X_is_not_1D_pandasq  s    
r‘   zX, cat_exp, cat_dtyper   Ústringzmissing-floatzmissing-np.nan-objectzmissing-float-nan-objectc                 C   sº   | | d d d… fD ]¢}t dd�}| |¡ t|jtƒs:t‚t|j|ƒD ]l\}}| ¡ }t|d ƒr�t|d ƒsrt‚|d d… |d d… ks t‚n| ¡ |ks t‚t	 
|j|¡sFt‚qFqd S )Nr:   rA   r5   )r	   r)   Ú
isinstanceÚcategories_Úlistr   ÚzipÚtolistr   r   Ú
issubdtyper@   )r   Zcat_expÚ	cat_dtypeÚXir7   Úresr~   Zres_listr   r   r   Útest_one_hot_encoder_categories|  s    #

rœ   zX, X2, cats, cat_dtypeÚdÚcÚint64r#   Úzzobject-stringzobject-string-nonezobject-string-nanzobject-None-and-nanzobject-nan-and-Nonec              	   C   sú   t |d�}t dddgdddgg¡}t| | ¡ ¡ |ƒ t|jd ƒt|d ƒksVt‚|j	d  
¡ t|d ƒkstt‚|j	d j|ksˆt‚t |d�}tjtdd�� | |¡ W 5 Q R X t ||d�}t dddgdddgg¡}t| |¡ |¡ ¡ |ƒ d S )Nr5   r   r   r   r&   r'   ©r6   r    )r	   r   r   r   r   r   r•   r6   r   r”   r—   r@   r*   r+   r,   r)   r-   )r   r0   Úcatsr™   r    r7   r~   r   r   r   Ú)test_one_hot_encoder_specified_categories®  s    :

r£   c               	   C   sD  t jddggtd�j} tdddggd�}t  dddgdddgg¡}t| | ¡ | ¡ ¡ |ƒ t| 	| ¡ ¡ |ƒ |j
d  ¡ dddgksŒt‚t  |j
d jt j¡s¦t‚t  d	d
gg¡j} td
d	dggd�}d}tjt|d�� | 	| ¡ W 5 Q R X t  d	d
t jgg¡j} td	t jd
ggd�}tjt|d�� | 	| ¡ W 5 Q R X d S )Nr3   r4   r?   rž   r5   r   r   r   r   r   r   z%Unsorted categories are not supportedr'   )r   r   rb   rC   r	   r   r)   r-   r   r   r”   r—   r   r˜   r@   Úobject_r*   r+   r,   rm   )r   r7   r~   r8   r   r   r   Ú(test_one_hot_encoder_unsorted_categoriesû  s     r¥   c               	   C   sà   t jddgddggtd�j} tdddgdddggd�}t  d	d
d
d	d
d
gd
d	d
d
d
d	gg¡}t| | ¡ ¡ |ƒ |jd  	¡ dddgksŒt
‚t  |jd jt j¡s¦t
‚|jd  	¡ dddgksÂt
‚t  |jd jt j¡sÜt
‚d S )Nr3   r4   r   r   r?   rž   r   r5   r   r   )r   r   rb   rC   r	   r   r   r   r”   r—   r   r˜   r@   r¤   ©r   r7   r~   r   r   r   Ú7test_one_hot_encoder_specified_categories_mixed_columns  s    &r§   c                  C   sL   t  d¡} |  ddgddgdœ¡}t|ƒ}t|ddddgddddggƒ d S )NrF   r3   r4   r   r   rG   r   )r*   rJ   rK   rh   r   )rL   rM   rp   r   r   r   Útest_one_hot_encoder_pandas   s    
r¨   zdrop, expected_namesÚx0_cZx2_bZx1_2Úx0_bZx2_aÚbinaryZmanualc                 C   s>   dddgdddgg}t | d�}| |¡ | ¡ }t||ƒ d S )Nrž   r   r3   r4   r‡   )r	   r)   r_   r   )rs   Zexpected_namesr   r„   r`   r   r   r   Ú'test_one_hot_encoder_feature_names_drop)  s
    


r¬   c                  C   sè   ddgddgddgg} t  ddddgddddgddddgg¡}t  d dg¡}td	d
d�}| | ¡}t|j|ƒ t||ƒ ddgddgddgg} t  ddgddgddgg¡}t  dd g¡}td	d
d�}| | ¡}t|j|ƒ t||ƒ d S )NrS   Úyesé   ÚnorY   r   r   r   r‚   Frƒ   Útruer3   Úfalse)r   r   r	   r   r   Ú	drop_idx_r   )r   ÚexpectedZexpected_drop_idxr„   Úresultr   r   r   Ú*test_one_hot_encoder_drop_equals_if_binary;  s      ÿ


rµ   r®   c                 C   sX   t ƒ }tjdddgdddggdd�}t| | ¡| d¡ƒ t dd�}t| | ¡|ƒ d S )Nr   r   rŸ   r?   Úfloat64)r
   r   r   r   r   Zastyper¦   r   r   r   Útest_ordinal_encoderS  s
    

r·   zobject-string-catc              	   C   s®   t |d�}t dgdgg¡}t| | ¡|ƒ t|jd ƒt|d ƒksJt‚|jd  	¡ t|d ƒksht‚|jd j
|ks|t‚t |d�}tjtdd�� | |¡ W 5 Q R X d S )Nr5   r   r   r   r&   r'   )r
   r   r   r   r   r•   r6   r   r”   r—   r@   r*   r+   r,   r)   )r   r0   r¢   r™   r7   r~   r   r   r   Ú)test_ordinal_encoder_specified_categoriesd  s    

r¸   c               	   C   s’   dddgdddgg} t ƒ }| | ¡}tj| td�}t| |¡|ƒ t ddddgddddgg¡}t d¡}t	j
t|d	�� | |¡ W 5 Q R X d S )
Nrk   r   rj   ri   r   r?   r   ry   r'   )r
   r   r   r   rb   r   rz   r{   r|   r*   r+   r,   )r   r7   r}   r~   r8   r   r   r   Útest_ordinal_encoder_inverse�  s    

r¹   c                  C   sÂ   t ddd�} tjddgddgdd	ggtd
�}tjddgddgddggtd
�}|  |¡ |  |¡}tjddgddgddggdd
�}t||ƒ |  |¡}tjdd gd dgddggtd
�}t||ƒ d S )NÚuse_encoded_valueéþÿÿÿ©r    Úunknown_valuer3   Úxr4   Úyrž   r    r?   ZxyZblar   r   r   rŸ   )r
   r   r   rb   r)   r-   r   rz   )r7   ÚX_fitr€   ÚX_trans_encr~   ÚX_trans_invÚinv_expr   r   r   Ú+test_ordinal_encoder_handle_unknowns_string›  s      

 

 rÄ   r@   c                 C   sÂ   t ddd�}tjddgddgdd	gg| d
�}tjddgddgddgg| d
�}| |¡ | |¡}tjddgddgddggdd
�}t||ƒ | |¡}tjdd gd dgddggtd
�}t||ƒ d S )Nrº   éüÿÿr¼   r   é   r   é   r   é	   r?   rV   é   r   rŸ   )r
   r   r   r)   r-   r   rz   rb   )r@   r7   rÀ   r€   rÁ   r~   rÂ   rÃ   r   r   r   Ú,test_ordinal_encoder_handle_unknowns_numericª  s      

 

 rÊ   c                  C   s`   t dtjd�} t dgdgdgg¡}|  |¡ |  dgdgdgg¡}t|dgdgtjggƒ d S )Nrº   r¼   r   r   r   r#   r   )r
   r   rm   r   r)   r-   r   )r7   rÀ   r€   r   r   r   Ú(test_ordinal_encoder_handle_unknowns_nanº  s
    
rË   c               	   C   sN   t dtjtd�} t dgdgdgg¡}tjtdd�� |  |¡ W 5 Q R X d S )Nrº   )r    r½   r@   r   r   r   z'dtype parameter should be a float dtyper'   )	r
   r   rm   Úintr   r*   r+   r,   r)   )r7   rÀ   r   r   r   Ú8test_ordinal_encoder_handle_unknowns_nan_non_float_dtypeÅ  s      ÿrÍ   c               	   C   s\   t jdddddggtd�j} dddg}t|d�}d}tjt|d�� | | ¡ W 5 Q R X d S )NZLowZMediumZHighr?   r5   z*Shape mismatch: if categories is an array,r'   )	r   r   rb   rC   r
   r*   r+   r,   r)   )r   r¢   r7   r8   r   r   r   Ú+test_ordinal_encoder_raise_categories_shapeÑ  s    

rÎ   c                     s„  t dd�‰tjddddgddddggdd�} tjddgd	d
ggdd�tjddgd	d
ggdd�t ddgddgg¡t ddgddgg¡tjddgd	dggdd�fD ]B‰ ˆ ˆ ¡ t‡ ‡fdd„tdƒD ƒƒsÎt‚tˆ ˆ ¡ 	¡ | ƒ q ddgd	d
gg‰ ˆ ˆ ¡ t‡fdd„tdƒD ƒƒ�st‚tˆ ˆ ¡ 	¡ | ƒ ddgd	dgg‰ ˆ ˆ ¡ t‡fdd„tdƒD ƒƒ�slt‚tˆ ˆ ¡ 	¡ | ƒ d S )NrA   r5   r   r   r¶   r?   r   r   r   r#   rŸ   r3   r4   rž   r�   ó   aó   bó   có   drb   c                    s   g | ]}ˆj | jˆ jk‘qS r   ©r”   r@   ©Ú.0Úi©r   r7   r   r   Ú
<listcomp>é  s     z'test_encoder_dtypes.<locals>.<listcomp>c                    s"   g | ]}t  ˆ j| jt j¡‘qS r   )r   r˜   r”   r@   ÚintegerrÔ   ©r7   r   r   rØ   î  s     c                    s   g | ]}ˆ j | jd k‘qS )rb   rÓ   rÔ   rÚ   r   r   rØ   ó  s     )
r	   r   r   r)   ÚallÚranger   r   r-   r   )r~   r   r×   r   Útest_encoder_dtypesÜ  s&    
"û
 
 
 rÝ   c                     s  t  d¡} tdd�‰tjddddddgddddddggdd�}| jdd	gd
dgddgdœdd�}ˆ |¡ t‡fdd„td	ƒD ƒƒsˆt	‚t
ˆ |¡ ¡ |ƒ |  dd	gddgddgdœ¡}|d j|d j|d jg‰ ˆ |¡ t‡ ‡fdd„td
ƒD ƒƒ�st	‚t
ˆ |¡ ¡ |ƒ d S )NrF   rA   r5   r   r   r¶   r?   r   r   r   r#   r   r�   )rH   rI   ÚCrŸ   c                    s   g | ]}ˆ j | jd k‘qS )rŸ   rÓ   rÔ   rÚ   r   r   rØ     s     z.test_encoder_dtypes_pandas.<locals>.<listcomp>r3   r4   rŠ   r‹   rH   rI   rÞ   c                    s    g | ]}ˆj | jˆ | k‘qS r   rÓ   rÔ   ©ZX_typer7   r   r   rØ   	  s     )r*   rJ   r	   r   r   rK   r)   rÛ   rÜ   r   r   r-   r   r@   )rL   r~   r   r   rß   r   Útest_encoder_dtypes_pandas÷  s    

þ"

"rà   c                  C   s*   t ƒ } ddgddgg}tj | j|¡ d S )NrO   r   rQ   r   )r	   r   ÚtestingZassert_no_warningsr   )r7   r   r   r   r   Útest_one_hot_encoder_warning  s    râ   Úmissing_valuec           	      C   s’  dddd| g}t |d�}ddddd	gddd
dd	gdddd| gg}| |¡ ¡ }d
dd
d
d
gdd
dd
d
gdddddgg}t||ƒ |j|ksŽt‚dd„ t|j|jƒD ƒ}| 	|¡}t
j|td�}t|d ƒ�rzt|d d… |d d… ƒ t|d ƒsöt‚t|d ƒ�st‚t|d d …d d…f |d d …d d…f ƒ t|dd d…f |dd d…f ƒ t|d ƒ�sft‚t|d ƒ�sŽt‚nt||ƒ t||ƒ d S )Nri   rV   r   rw   r‡   rk   r   rj   r3   r   r   c                 S   s   g | ]\}}|| ‘qS r   r   )rÕ   rl   Úfeaturer   r   r   rØ   !  s    z4test_one_hot_encoder_drop_manual.<locals>.<listcomp>r?   r:   )r:   r:   )r	   r   r   r   rs   r   r–   r”   r²   rz   r   r   rb   r   )	rã   Zcats_to_dropr7   r   Ztransr~   Zdropped_catsZX_inv_transZX_arrayr   r   r   Ú test_one_hot_encoder_drop_manual  s2    
ý(
ÿ
*"
rå   rR   c              	   C   sN   t | d�}d}tjt|d��( | dddgdddgdd	d
gg¡ W 5 Q R X d S )Nr‡   z-`drop` should have length equal to the numberr'   rk   r   rj   ri   r   r   é;   )r	   r*   r+   r,   r)   )rs   r7   Úerr_msgr   r   r   Útest_invalid_drop_length8  s    
rè   Údensityr   Zdensec                 C   s¸   t | d�}t | |d�}dddgdddgg}| |¡ | |¡ t|j|jƒ |dkrbt|jd	ƒ n0t||j|jƒD ]\}}}|t|ƒ |ksrt‚qrt|jt	j
ƒs¤t‚|jjtks´t‚d S )
Nr   ru   rž   r   r3   r   r4   rt   r   )r	   r)   r   r”   r²   r–   rÌ   r   r“   r   Zndarrayr@   rb   )ré   rs   Zohe_baseZohe_testr   Zdrop_catZdrop_idxZcat_listr   r   r   Útest_categories@  s     


  ÿrê   ÚEncoderc                 C   s   d| ƒ   ¡ d kst‚d S )NZcategoricalZX_types)Z	_get_tagsr   )rë   r   r   r   Ú"test_encoders_has_categorical_tagsT  s    rì   ÚkwargsÚmax_categoriesÚmin_frequencyé   g�Âõ(\�Ò?r�   )rî   rï   rV   r6   rA   c           
      C   sþ   t  dgd dgd  dgd  dgd  g¡j}tf |d	d
dœ| —Ž |¡}t|jdddggƒ dgdgdgdgdgg}t  ddgddgddgddgddgg¡}| |¡}t||ƒ dd„ dgdgd  D ƒ}| 	|¡}t||ƒ | 
¡ }	tddg|	ƒ dS )zpTest that different parameters for combine 'a', 'c', and 'd' into
    the infrequent category works as expected.r3   r   r4   r®   rž   rS   r�   r   r"   F)r6   r    r   Úer   r   c                 S   s   g | ]
}|g‘qS r   r   ©rÕ   Úcolr   r   r   rØ   w  s     z2test_ohe_infrequent_two_levels.<locals>.<listcomp>Úinfrequent_sklearnr#   rª   Úx0_infrequent_sklearnN©r   r   rC   r	   r)   r   Úinfrequent_categories_r-   r   rz   r_   )
rí   r6   ÚX_trainr„   ÚX_testr³   r€   Úexpected_invÚX_invr`   r   r   r   Útest_ohe_infrequent_two_levelsY  s(    2ýüû(



rü   c                 C   sÆ   t  dgd dgd  dgd  dgd  g¡j}td	d
d| d� |¡}|jd |jd  dksdt‚t  dgdgg¡}| |¡}t	dgdgg|ƒ | 
¡ }tdg|ƒ | |¡}tdgdgg|ƒ dS )z3Test two levels and dropping the frequent category.r3   r   r4   r®   rž   rS   r�   r   r"   Fr   ©r    r   rî   rs   r   r   rõ   rô   N)r   r   rC   r	   r)   r”   r²   r   r-   r   r_   r   rz   )rs   rø   r„   rù   r€   r`   Ú	X_inverser   r   r   Ú,test_ohe_infrequent_two_levels_drop_frequent  s"    2üû

rÿ   c              	   C   sz   t  dgd dgd  dgd  dgd  g¡j}td	d
d| d�}d| d ›d�}tjt|d�� | |¡ W 5 Q R X dS )z_Test two levels and dropping any infrequent category removes the
    whole infrequent category.r3   r   r4   r®   rž   rS   r�   r   r"   Fr   rý   úUnable to drop category r   ú( from feature 0 because it is infrequentr'   N©r   r   rC   r	   r*   r+   r,   r)   ©rs   rø   r„   r8   r   r   r   Ú5test_ohe_infrequent_two_levels_drop_infrequent_errors—  s    2ür  rÈ   g¸…ëQ¸Î?g{®GázÄ?rÇ   c           	   	   C   s  t  dgd dgd  dgd  dgd  g¡j}tf d	d
dœ| —Ž |¡}t|jddggƒ dgdgdgdgdgg}t  dddgdddgdddgdddgdddgg¡}| |¡}t||ƒ dgdgdgdgdgg}| 	|¡}t||ƒ | 
¡ }tdddg|ƒ dS )zkTest that different parameters for combing 'a', and 'd' into
    the infrequent category works as expected.r3   r   r4   r®   rž   rS   r�   r   r"   F©r    r   rñ   r   r   rô   rª   r©   rõ   Nrö   )	rí   rø   r„   rù   r³   r€   rú   rû   r`   r   r   r   Ú test_ohe_infrequent_three_levels©  s0    2 ÿÿþ2

û

r  c              	   C   sÜ   t  dgd dgd  dgd  dgd  g¡j}td	d
d| d� |¡}t  dgdgdgg¡}tddgddgddgg| |¡ƒ |jdd� |¡ d}tj	t
|d�� | dgdgg¡}W 5 Q R X tddgddgg|ƒ dS )z5Test three levels and dropping the frequent category.r3   r   r4   r®   rž   rS   r�   r   r"   Frý   r   r   r!   r%   r&   r'   rñ   N)r   r   rC   r	   r)   r   r-   rd   r*   ÚwarnsÚUserWarning)rs   rø   r„   rù   r8   r€   r   r   r   Ú.test_ohe_infrequent_three_levels_drop_frequentÓ  s     2üû"r	  c              	   C   sz   t  dgd dgd  dgd  dgd  g¡j}td	d
d| d�}d| d ›d�}tjt|d�� | |¡ W 5 Q R X dS )z7Test three levels and dropping the infrequent category.r3   r   r4   r®   rž   rS   r�   r   r"   Frý   r   r   r  r'   Nr  r  r   r   r   Ú7test_ohe_infrequent_three_levels_drop_infrequent_errorsë  s    2ür
  c               	   C   sÞ   t  dgd dgd  dgd  dgd  g¡j} td	d
dd� | ¡}t|jddggƒ dgdgdgdgg}t  dddgdddgdddgdddgg¡}| |¡}t||ƒ dgg}d}t	j
t|d�� | |¡ W 5 Q R X dS )zmTest that different parameters for combining 'a', and 'd' into
    the infrequent category works as expected.r3   r   r4   r®   rž   rS   r�   r   r$   F)r    r   rî   r   r   Úbadz.Found unknown categories \['bad'\] in column 0r'   N)r   r   rC   r	   r)   r   r÷   r-   r   r*   r+   r,   )rø   r„   rù   r³   r€   r8   r   r   r   Ú(test_ohe_infrequent_handle_unknown_errorû  s"    2  ÿþ*

r  c                 C   sì   t jdgd dgd  gtd�j}tf ddddggd	d
dœ| —Ž |¡}dgdgdgdgdgg}t  ddgddgddgddgddgg¡}| |¡}t||ƒ dddgg}dgdgg}|D ].}|j|d� |¡ tdgdgg| |¡ƒ q¸dS )zG'a' is the only frequent category, all other categories are infrequent.r3   r   rñ   rY   r?   rž   r�   r4   Fr"   ©r6   r   r    r   r   rt   r‚   r‡   N)	r   r   rb   rC   r	   r)   r-   r   rd   )rí   rø   r„   rù   r³   r€   Zdropsrs   r   r   r   Ú5test_ohe_infrequent_two_levels_user_cats_one_frequent  s&    "ýüû(

r  c                  C   sð   t jdgd dgd  dgd  dgd  gtd	�j} tddddggd
ddd� | ¡}t|jdddggƒ dgdgdgdgdgg}t  ddgddgddgddgddgg¡}| |¡}t	||ƒ dd„ dgdgd  D ƒ}| 
|¡}t||ƒ dS )zFTest that the order of the categories provided by a user is respected.r3   r   r4   r®   rž   rS   r�   r   r?   Fr"   r   ©r6   r   r    rî   rñ   r   r   c                 S   s   g | ]
}|g‘qS r   r   rò   r   r   r   rØ   E  s     z<test_ohe_infrequent_two_levels_user_cats.<locals>.<listcomp>rô   r#   N©r   r   rb   rC   r	   r)   r   r÷   r-   r   rz   ©rø   r„   rù   r³   r€   rú   rû   r   r   r   Ú(test_ohe_infrequent_two_levels_user_cats/  s(    ( ÿüû(


r  c               	   C   sö   t jdgd dgd  dgd  dgd  gtd	�j} tddddggd
ddd� | ¡}t|jddggƒ dgdgdgdgdgg}t  dddgdddgdddgdddgdddgg¡}| |¡}t	||ƒ dgdgdgdgdgg}| 
|¡}t||ƒ dS )z¦Test that the order of the categories provided by a user is respected.
    In this case 'c' is encoded as the first category and 'b' is encoded
    as the second one.r3   r   r4   r®   rž   rS   r�   r   r?   Fr"   r  rñ   r   r   rô   Nr  r  r   r   r   Ú*test_ohe_infrequent_three_levels_user_catsJ  s2    ( ÿüû2

û
r  c                  C   s†   t jdddddddddg	dddddddddg	f } tdddd�}| | ¡ ddgddgg}| |¡}t|ddddgddddggƒ dS )	zaTest infrequent categories where feature 0 has infrequent categories,
    and feature 1 does not.r   r   r   r   r‚   F)rî   rs   r   N)r   Úc_r	   r)   r-   r   )r   r„   rù   r€   r   r   r   Útest_ohe_infrequent_mixedn  s    2

r  c            	      C   s´  t jdddddddddg	dddddddddg	dddddddddg	f } tdddd	�}| | ¡ ¡ }t|jd ddgƒ t|jd ddgƒ t|jd d
ƒ | ¡ }tddddddddg|ƒ ddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgddddddddgg	}t||ƒ dddgdddgg}| 	|¡}ddddddddgddddddddgg}t|| ¡ ƒ | 
|¡}t jddd
gddd
ggtd�}t||ƒ tdddd	� | ¡}tjtdd�� | 	|¡ W 5 Q R X dddgdddgg}| 	|¡}ddddddddgddddddddgg}t|| ¡ ƒ | 
|¡}t jdddgdddggtd�}t||ƒ d
S )z?Test infrequent categories with feature matrix with 3 features.r   r   r   r   r   rS   rA   r"   ©r6   rî   r    NZx0_0Zx0_3rõ   Zx1_0Zx1_5Zx1_infrequent_sklearnZx2_0Zx2_1r#   rô   r?   r$   r&   r'   )r   r  r	   r   r   r   r÷   r_   r   r-   rz   r   rb   r)   r*   r+   r,   )	r   r„   r€   r`   r³   rù   ÚX_test_transrû   rú   r   r   r   Ú'test_ohe_infrequent_multiple_categories€  sˆ    þÿ  ÿø
õ÷

(
 ÿ
  ÿþ
(
þr  c            	      C   s(  t  d¡} | jdddddddddg	dddd	d	d
dddg	dœddgd�}tdddd�}| |¡ ¡ }t|jd ddgƒ t|j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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ddddddgddddddgg	}t||ƒ | jddgdd
gdœddgd�}ddddddgddddddgg}| 	|¡}t|| ¡ ƒ | 
|¡}tjddgddggtd�}t||ƒ | jddgd
dgdœddgd�}| 	|¡ ¡ }ddddddgddddddgg}t||ƒ | 
|¡}tjddgddggtd�}t||ƒ dS )zHTest infrequent categories with a pandas dataframe with multiple dtypes.rF   r3   Úfrž   r4   r   r   r   rS   rV   )ÚstrrÌ   r  rÌ   ©ÚcolumnsrA   r"   r  r   é   rô   r?   N)r*   rJ   rK   r	   r   r   r   r÷   r   r-   rz   r   r   rb   )	rL   r   r„   r€   r³   rù   r  rû   rú   r   r   r   Ú.test_ohe_infrequent_multiple_categories_dtypesÛ  s\    
þû  ÿ	÷
  

þ
  

 ÿr  rX   )rï   rî   c                 C   sp   t  dgd dgd  dgd  dgd  g¡j}tf d	d
dœ| —Ž}| |¡ | dgg¡}t|dggƒ dS )ú,All user provided categories are infrequent.r3   r   r4   r®   rž   rS   r�   r   r"   Fr  r   N)r   r   rC   r	   r)   r-   r   ©rí   rø   r„   r€   r   r   r   Ú$test_ohe_infrequent_one_level_errors  s    2 ÿÿ
r!  c                 C   sf   t jdgd gtd�j}tf ddddggdd	d
œ| —Ž |¡}| dgdgg¡}t|dgdggƒ dS )r  rñ   r   r?   rž   r�   r3   r4   Fr"   r  r   N)r   r   rb   rC   r	   r)   r-   r   r   r   r   r   Ú5test_ohe_infrequent_user_cats_unknown_training_errors*  s    ýüûr"  c               	   C   sH   ddgddgddgg} d}t jt|d�� tdd	� | ¡ W 5 Q R X d S )
NrO   r   rQ   r   r   z'`sparse` was renamed to `sparse_output`r'   Fr   )r*   r  ÚFutureWarningr	   r)   )r   r8   r   r   r   Ú&test_one_hot_encoder_sparse_deprecated;  s    r$  zinput_dtype, category_dtypeZOOZOUZUOZUUÚSOZSUZSSÚ
array_typer•   r   Z	dataframec           
      C   sÒ   t jdgdgg| d�}t jddg|d�g}t|dd� |¡}tdgdgdgdgg|| d�}| |¡}t  ddgddgddgddgg¡}t||ƒ t|d� |¡}	|	 |¡}t  dgdgdgdgg¡}t||ƒ d	S )
a"  Check that encoding work with object, unicode, and byte string dtypes.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/15616
    https://github.com/scikit-learn/scikit-learn/issues/15726
    https://github.com/scikit-learn/scikit-learn/issues/19677
    r4   r3   r?   Frg   r   r   r5   N)	r   r   r	   r)   r   r-   r   r
   r   )
r>   Zcategory_dtyper&  r   r6   r„   rù   r€   r³   Úoer   r   r   Útest_encoders_string_categoriesD  s      ÿ
"

r(  c               	   C   sh   t jdgdggdd�} t jddgdd�g}t|dd�}t d¡}tjt|d	�� | | ¡ W 5 Q R X d
S )z¦Check that this mixture of predefined categories and X raises an error.

    Categories defined as bytes can not easily be compared to data that is
    a string.
    r4   r3   ÚUr?   ÚSFrg   zjIn column 0, the predefined categories have type 'bytes' which is incompatible with values of type 'str_'.r'   N)	r   r   r	   r{   r|   r*   r+   r,   r)   )r   r6   r„   r8   r   r   r   Ú$test_mixed_string_bytes_categoricalsc  s    ÿr+  c                 C   sP   t jdd| d| ggtd�j}tddd� |¡}| ¡ }t|ddd	| › �gƒ d S )
Nr3   r4   r?   Fr!   ©r   r    Zx0_arª   Zx0_)r   r   rb   rC   r	   r)   r_   r   )rã   r   r„   Únamesr   r   r   Ú)test_ohe_missing_values_get_feature_namesx  s    r.  c                  C   sž   t  d¡} | jddd dgtjdddtjgtd�dœd	d
gd�}t dddddddgdddddddgdddddddgdddddddgg¡}t|ƒ}t||ƒ d S )NrF   Údogrl   r   r   r#   r?   )Úcol1Úcol2r0  r1  r  r   )	r*   rJ   rK   r   r   rm   Úfloatrh   r   )rL   ÚdfÚexpected_df_transrp   r   r   r   Ú%test_ohe_missing_value_support_pandas�  s     

þûüÿ	r5  Úpd_nan_typeúpd.NAznp.nanc              
   C   sè   t  d¡}| dkr|jntj}| d|jdd|ddgdd�i¡}t d	d	d
d	gd
d	d	d	gd	d	d	d
gd	d
d	d	gd
d	d	d	gg¡}td|d�}| 	|¡}t
||ƒ t|jƒd
ks®t‚t|jd	 d d… dddgƒ t |jd	 d ¡sät‚d S )NrF   r7  r0  rž   r3   r4   Úcategoryr?   r   r   Fr,  r:   )r*   rJ   ÚNAr   rm   rK   r�   r   r	   r   r   Úlenr”   r   r   Úisnan)r6  r    rL   Úpd_missing_valuer3  r4  r„   Údf_transr   r   r   Ú1test_ohe_missing_value_support_pandas_categorical˜  s*    
 ÿÿ




ûÿ


r>  c              	   C   sÐ   ddgddgddgg}t dd| d�}| |¡}t dddgdddgdddgg¡}t||ƒ d	d
gg}t dddgg¡}d}tjt|d�� | |¡}W 5 Q R X t||ƒ | 	|¡}t
|tjddggtd�ƒ dS )zZCheck drop='first' and handle_unknown='ignore'/'infrequent_if_exist'
    during transform.r3   r   r4   r   r   rt   F©rs   r   r    rž   r   útFound unknown categories in columns \[0, 1\] during transform. These unknown categories will be encoded as all zerosr'   r?   N©r	   r   r   r   r   r*   r  r  r-   rz   r   rb   ©r    r   r„   r€   rD   rù   Úwarn_msgrû   r   r   r   Ú/test_ohe_drop_first_handle_unknown_ignore_warns¸  s.      ÿ
ýÿ

ÿ

rD  c              	   C   sØ   ddgddgddgg}t dd| d�}| |¡}t ddddgddddgddddgg¡}t||ƒ d	d
gg}t ddddgg¡}d}tjt|d�� | |¡}W 5 Q R X t||ƒ | 	|¡}t
|tjddggtd�ƒ dS )zDCheck drop='if_binary' and handle_unknown='ignore' during transform.r3   r   r4   r   r   r‚   Fr?  rž   r   r@  r'   Nr?   rA  rB  r   r   r   Ú3test_ohe_drop_if_binary_handle_unknown_ignore_warnsÞ  s.      ÿ



ýÿ

ÿ

rE  c              	   C   sŒ   ddgddgddgg}t dd| ddgddggd�}| |¡ d	dgg}t ddgg¡}d
}tjt|d�� | |¡}W 5 Q R X t||ƒ dS )znCheck drop='first' and handle_unknown='ignore'/'infrequent_if_exist'
    during fit with categories passed in.r3   r   r4   r   r   rt   F)rs   r   r    r6   rž   zqFound unknown categories in columns \[0\] during transform. These unknown categories will be encoded as all zerosr'   N)	r	   r)   r   r   r*   r  r  r-   r   )r    r   r„   rù   rD   rC  r€   r   r   r   Ú'test_ohe_drop_first_explicit_categories  s    ü

ÿrF  c               	   C   sX   t  t jdddgg¡j} tt jd�}dt j› �}tjt|d�� | 	| ¡ W 5 Q R X dS )zDTest ordinal encoder with nan passthrough fails when dtype=np.int32.rŠ   r   r?   zdThere are missing values in features \[0\]. For OrdinalEncoder to encode missing values with dtype: r'   N)
r   r   rm   rC   r
   Úint32r*   r+   r,   r)   )r   r'  r8   r   r   r   ÚBtest_ordinal_encoder_passthrough_missing_values_float_errors_dtype  s    
ÿrH  Úencoded_missing_valuer»   c                 C   s”   t jt jdddggt jd�j}t| d� |¡}t|jƒdks@t	‚t
|jd ddt jgƒ | |¡}t
|| gdgdgdggƒ | |¡}t
||ƒ dS )	z.Test ordinal encoder with nan on float dtypes.rŠ   r   r?   ©rI  r   r   r   N)r   r   rm   r¶   rC   r
   r)   r:  r”   r   r   r-   rz   )rI  r   r'  r€   rþ   r   r   r   Ú5test_ordinal_encoder_passthrough_missing_values_float,  s    

rK  c              	   C   s$  t  d¡}| dkr|jntj}| d|jdd|ddgdd�i¡}t|d	� |¡}t	|j
ƒd
ksbt‚t|j
d dd… dddgƒ t |j
d d ¡s˜t‚| |¡}t|dgdg|gdgdggƒ | |¡}|jdksØt‚t|dd…df ddgƒ t|dd…df ddgƒ t |d ¡�s t‚dS )z0Check ordinal encoder is compatible with pandas.rF   r7  r0  rž   r3   r4   r8  r?   rJ  r   r   Nr   r:   ç       @r   r   )r   r   r   rx   )r*   rJ   r9  r   rm   rK   r�   r
   r)   r:  r”   r   r   r;  r-   r   rz   r   )r6  rI  rL   r<  r3  r'  r=  rþ   r   r   r   Ú=test_ordinal_encoder_missing_value_support_pandas_categorical>  s$    
 ÿÿ

rM  rL  zobject-None-missing-valuezobject-nan-missing_valueznumeric-missing-valuec              	   C   st   t |d�}t dgtjgg¡}t| | ¡|ƒ |jd j|ksBt‚t |d�}t	j
tdd�� | |¡ W 5 Q R X dS )z.Test ordinal encoder for specified categories.r5   r   r   r&   r'   N)r
   r   r   rm   r   r   r”   r@   r   r*   r+   r,   r)   )r   r0   r¢   r™   r'  r~   r   r   r   Ú=test_ordinal_encoder_specified_categories_missing_passthrough_  s    &

rN  zX, expected_X_trans, X_testr   r   c                 C   s8   t ddd�}| | ¡}t||ƒ t| |¡dggƒ dS )z>Test the interaction between missing values and handle_unknownrº   r:   r¼   g      ð¿N)r
   r   r   r-   )r   Zexpected_X_transrù   r'  r€   r   r   r   Ú/test_ordinal_encoder_handle_missing_and_unknown“  s    

rO  c               	   C   s²   t  dddgdddgg¡} t | ¡}tƒ }d}tjt|d�� | |¡ W 5 Q R X tjt|d�� | 	|¡ W 5 Q R X | 	| ¡}t |¡}tjt|d�� | 
|¡ W 5 Q R X dS )z¥Check that we raise proper error with sparse input in OrdinalEncoder.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/19878
    r   r   r   r   z6A sparse matrix was passed, but dense data is requiredr'   N)r   r   r   Z
csr_matrixr
   r*   r+   Ú	TypeErrorr)   r   rz   )r   ZX_sparseÚencoderrç   r€   r   r   r   r   Útest_ordinal_encoder_sparse·  s    


rR  c               	   C   s€   t  ddddddg¡dd…t jf } tdddggddd	�}| | ¡ tdddggd
d�}tjtdd�� | | ¡ W 5 Q R X dS )zÂCheck OrdinalEncoder.fit works with unseen category when
    `handle_unknown="use_encoded_value"`.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/19872
    r   r   r   r   Nr:   rº   rÅ   )r6   r    r½   r$   r¡   r&   r'   )r   r   Znewaxisr
   r)   r*   r+   r,   )r   r'  r   r   r   Ú-test_ordinal_encoder_fit_with_unseen_categoryÍ  s    $
  ÿ
rS  rø   ZAAÚOr)  rù   c                 C   s4   t ddd�}| | ¡ | |¡}t|ddggƒ dS )z–Checks that `OrdinalEncoder` transforms string dtypes.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/19872
    rº   i÷ÿÿÿr¼   r   N)r
   r)   r-   r   )rø   rù   r7   r€   r   r   r   Ú1test_ordinal_encoder_handle_unknown_string_dtypesÞ  s    

rU  c                  C   sf   t  ddddg¡ dd¡} tƒ  | ¡}t|jt j| dd�jƒ | 	| ¡}t|dgd	gd
gdggƒ dS )zÁCheck that `OrdinalEncoder` accepts Python integers that are potentially
    larger than 64 bits.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20721
    l   	HéP
1& l   	H]v—i—eøl   	 :?i}Gaï l   IRÕK2e6kr:   r   r   )Zaxisr   r   N)
r   r   r;   r
   r)   r   r”   ÚsortrC   r-   )r   rQ  r€   r   r   r   Ú#test_ordinal_encoder_python_integerú  s    üÿ ù
rW  c                  C   sL   t  d¡} dddg}| jdddgg|d�}tƒ  |¡}| ¡ }t||ƒ d	S )
z-Check feature names out is same as the input.rF   r4   rž   r3   r   r   r   r  N)r*   rJ   rK   r
   r)   r_   r   )rL   r-  r   r7   Zfeature_names_outr   r   r   Ú.test_ordinal_encoder_features_names_out_pandas  s    

rX  c                  C   sÀ   t jdgdgt jggtd�} tdt jdd� | ¡}| | ¡}t|dgdgdggƒ t jd	gt jggtd�}| |¡}t|t jgdggƒ | |¡}|d d d
ks¦t	‚t  
|d d ¡s¼t	‚d
S )zECheck interactions between encode_unknown and missing value encoding.r3   r4   r?   rº   éýÿÿÿ©r    r½   rI  r   r   rž   N)r   r   rm   rb   r
   r)   r-   r   rz   r   r;  )r   r'  r€   rù   r  ÚX_roundtripr   r   r   Ú0test_ordinal_encoder_unknown_missing_interaction  s     ýü


r\  Úwith_pandasc              	   C   sŠ   t jddgddgdt jggtd�}d}| rPt d¡}|j|d	d
gd�}|d }n|d }tdd�}tjt	|d�� | 
|¡ W 5 Q R X dS )zXCheck OrdinalEncoder errors when encoded_missing_value is used by
    an known category.r3   r/  r4   rl   rž   r?   zTencoded_missing_value \(1\) is already used to encode a known category in features: rF   ÚletterZpetr  z	\['pet'\]z\[1\]r   rJ  r'   N)r   r   rm   rb   r*   rJ   rK   r
   r+   r,   r)   )r]  r   Ú	error_msgrL   r'  r   r   r   Ú0test_ordinal_encoder_encoded_missing_value_error8  s    "ÿ


r`  z4X_train, X_test_trans_expected, X_roundtrip_expectedÚ1c                 C   s¼   t dtjtjd� | ¡}t dgtjgdgg¡}| |¡}t||ƒ | |¡}|jd }t	|ƒD ]V}||df }	||df }
|	dkr’|
dks¶t
‚q`t|	ƒrªt |
¡s¶t
‚q`|
|	ks`t
‚q`dS )znCheck transform when unknown_value and encoded_missing_value is nan.

    Non-regression test for #24082.
    rº   rZ  ra  r4   r   N)r
   r   rm   r)   r   r-   r   rz   r   rÜ   r   r   r;  )rø   ZX_test_trans_expectedZX_roundtrip_expectedr'  rù   r  r[  Z	n_samplesrÖ   Zexpected_valÚvalr   r   r   Ú9test_ordinal_encoder_unknown_missing_interaction_both_nanR  s(    ýü



rc  c               	   C   s¶   t  d¡} |  ddgddgdœ¡}tƒ }|jdd� d}t jt|d	�� | |¡ W 5 Q R X td
d�jdd�}td
d�jdd�}| |¡}| |¡}t| 	¡ |ƒ t
| ¡ |jƒ dS )z*Check OneHotEncoder works with set_output.rF   r3   r4   r   r   rG   ©r-   z*Pandas output does not support sparse datar'   Fr   ÚdefaultN)r*   rJ   rK   r	   Ú
set_outputr+   r,   r   r   Úto_numpyr   r_   r  )rL   rM   r„   r(   Zohe_defaultZ
ohe_pandasÚ	X_defaultÚX_pandasr   r   r   Útest_one_hot_encoder_set_output†  s    


rj  c                  C   st   t  d¡} |  ddgddgdœ¡}tƒ jdd�}tƒ jdd�}| |¡}| |¡}t| ¡ |ƒ t| 	¡ |j
ƒ d	S )
z+Check OrdinalEncoder works with set_output.rF   r3   r4   r   r   rG   re  rd  N)r*   rJ   rK   r
   rf  r   r   rg  r   r_   r  )rL   rM   Zord_defaultZ
ord_pandasrh  ri  r   r   r   Útest_ordinal_set_output�  s    


rk  c                  C   sz   dddddgddgg} t | d�}| ddgg¡ t| ƒt|jƒksFt‚t|jƒD ]$\}}|jtksft‚t| | |ƒ qPd	S )
zjCheck that the categories_ dtype is `object` for string categories

    Regression test for gh-25171.
    ÚasZmmasZeasZrasZacsra  Ú2r5   N)	r	   r)   r:  r”   r   Ú	enumerater@   rb   r   )r6   r7   Únrl   r   r   r   Ú test_predefined_categories_dtype­  s    
rp  c                  C   s~   t jdgdgt jggtd�} tdd� | ¡}t|dgdgdggƒ tddd	� | ¡}t  d
gg¡}| |¡}t|dggƒ dS )zBCheck missing value or unknown encoding can equal the cardinality.r/  rl   r?   r   rJ  r   r   rº   r¼   ÚsnakeN)	r   r   rm   rb   r
   r   r   r)   r-   )r   r€   r7   rù   r   r   r   Ú1test_ordinal_encoder_missing_unknown_encoding_max¾  s    
rr  c                  C   s¼  t jdgd dgd  dgd  dgd  dgd  gtd�j} tdd	d
d� | ¡}t| ¡ ddddgƒ |jd |j	d  dks†t
‚t jdgd dgd  dgd  gtd�j} tdd	dd� | ¡}t| ¡ dgƒ |jd |j	d  dksòt
‚t jdgd dgd  dgd  dgd  dgd  gtd�j} tdd	dgd� | ¡}t| ¡ ddddgƒ |jd |j	d  dk�s|t
‚tdd	dd� | ¡}t| ¡ dddddgƒ |j	dk�s¸t
‚dS )zkCheck drop_idx is defined correctly with infrequent categories.

    Non-regression test for gh-25550.
    r3   r   r4   r#   rž   r�   rñ   r?   Frt   )rï   r   rs   r©   Zx0_dZx0_erõ   r   rS   r‚   rª   N)r   r   rb   rC   r	   r)   r   r_   r”   r²   r   )r   r„   r   r   r   Ú#test_drop_idx_infrequent_categoriesÊ  s<    2 ÿ 
ÿ,2 ÿ 
ÿþrs  )sr{   Únumpyr   Zscipyr   r*   Zsklearn.exceptionsr   Zsklearn.utils._testingr   r   r   Zsklearn.utilsr   Zsklearn.preprocessingr	   r
   r   ÚmarkZparametrizer2   r9   r<   rG  Zfloat32r¶   rE   rN   ra   rc   rf   rh   r   rb   rm   r2  rq   r   r�   r…   rˆ   rŽ   r‘   r¤   rÙ   Zstr_Zfloat_rœ   rC   rŸ   r£   r¥   r§   r¨   r¬   rµ   r·   r¸   r¹   rÄ   rÌ   rÊ   rË   rÍ   rÎ   rÝ   rà   râ   rå   rè   rê   rì   rü   rÿ   r  r  r	  r
  r  r  r  r  r  r  r  r!  r"  r$  r(  r+  r.  r5  r>  rD  rE  rF  rH  rK  rM  rN  rO  rR  rS  rU  rW  rX  r\  r`  rB   rc  rj  rk  rp  rr  rs  r   r   r   r   Ú<module>   sÞ  


<
  øøô
/0&þþþ


 &ý&*ý ýñùé!

ü
üü
ü
ü
üüÛ-ùÒ8	
ýù	
	ýù	

ü
üüóê


$

ûþ


ùþ


 ÿ
$[A

	 ÿ

%
$

ü	ü	üîýä"ýýýýðþ
ýþýþû
ûøþ!