U
    _»{j¾0 ã                   @   sê  d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZ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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"d/�ej!d*d$d,gd-ej#d,gge"d/�ej!d*d$d,gd-e$d0ƒd,gge"d/�ej!dd$d,gd-d'd,gge"d/�ej!dd$dgd-ej#dgge"d/�ej!dd$dgd-e$d0ƒdgge"d/�gd1d2d3d4d5d6d7d8gd9�d:d;„ ƒZ%ej d	d
dg¡ej d<d=d>g¡ej d?dd@g¡dAdB„ ƒƒƒZ&ej d<d=d>g¡ej dCd'd%gd$d%gd'd%ggd d$d$gd d d gd d$d$ggfdDd-gdEd-gdFd*gdEd-ggd d d d d gd d d d d$gd d$d d d ggfg¡dGdH„ ƒƒZ'dIdJ„ Z(ej d?dKd@dg¡ej dLdKd@dg¡dMdN„ ƒƒZ)ej dOdPdQg¡ej d"d$d'ge !dRdSg¡g¡dTdU„ ƒƒZ*ej dOdPdQg¡dVdW„ ƒZ+ejjdXd&d%gd#d%ggd&d#gd%ggej,fe !d$d'gdYd'gg¡d$dYgd'ggej-fej!d+d,gd.d,gge"d/�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"d/�d+dgej#ggej,fej!d+e$d0ƒgde$d0ƒgge"d/�d+dge$d0ƒggej,fgd1d2d3dZd[d\d]gd9�d^d_„ ƒZ/ej d	d
dg¡ejjd`ej!d-d*gge"d/�j0ej!d-dagge"d/�j0d-d*dbggej,fej!d$d'ggdcd/�j0ej!d$ddggdcd/�j0d$d'dYggej1fej!d-d*gge"d/�j0ej!d-dagge"d/�j0e !d-d*dbg¡gej,fej!dd-gge"d/�j0ej!dd*gge"d/�j0dd-degge"fej!d-d*gge"d/�j0ej!d-ej#gge"d/�j0d-d*degge"fej!d-dgge"d/�j0ej!d-ej#gge"d/�j0d-ddegge"fej!d-ej#gge"d/�j0ej!d-dgge"d/�j0d-ej#degge"fgd3d2dfdgdhdidjgd9�dkdl„ ƒƒZ2dmdn„ Z3dodp„ Z4dqdr„ Z5ejjdsd@dtdugfdKdtdvdugfdbd'd*gdwdxgfgd@dydzgd9�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"d/�gd1d2d3gd9�d€d�„ ƒZ8ejjd`ej!d-d*gge"d/�j0ej!d-dagge"d/�j0d-d*dbggej,fej!d$d'ggdcd/�j0ej!d$ddggdcd/�j0d$d'dYggej1fej!d-d*gge"d/�j0ej!d-dagge"d/�j0e !d-d*dbg¡gej,fgd3d2d‚gd9�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$d0ƒg¡d™dš„ ƒZDej d?d&dYgd&dYd›d-gg¡dœd�„ ƒZEejjdžd>d=gdŸd gd9�ejjd?d@d-d'd*ggd@dzgd9�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¬œddd­d¬œg¡ej d®d¯d-d*dbdaggg¡d°d±„ ƒƒZHej d?dKd@d*gg¡d²d³„ ƒZIej d?d-gdagg¡d´dµ„ ƒZJej d¦d§dYid¨d«id¨d¶id¨d·id¨d¸idYd¹d¬œddd«d¬œg¡dºd»„ ƒZKej d?d@d*gg¡d¼d½„ ƒZLej d?d-gdagg¡d¾d¿„ ƒZMdÀdÁ„ ZNej d¦dYd$d¬œd¨ddi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'dYdÏœ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`d÷dø„ Zaej dùej#dúg¡dûdü„ ƒZbej dêdëdìg¡ej dùej#dúg¡dýdþ„ ƒƒZcejjd`ej!d-ej#gge"d/�j0ej!d-d*gge"d/�j0ej!d-ej#dage"d/�gej,fej!d-ej#gge"d/�j0ej!d-d*gge"d/�j0ej!d-ej#dage"d/�gej,fej!dÿej#ggejd/�j0ej!dRggejd/�j0e !dÿdSej#g¡gejfg�d �d�dgd9��d�d„ ƒZdej �de !�dej#dRgg¡j0e !�dej#�dgg¡j0e !dSgg¡fe !�ddSdRgg¡j0e !�ddÿ�dgg¡j0e !ej#gg¡fej!dbej#d*gge"d/�j0e !�dej#�dgg¡j0ej!dagge"d/�fej!dbd-d*gge"d/�j0e !dÿ�d�dgg¡j0ej!ej#gge"d/�fg¡�d�d	„ ƒZe�d
�d„ Zf�d�d„ Zgej �d�dd.ggej!�dd.gg�dd/�ej!�dd.gg�dd/�g¡ej �dd+d.ggej!d+d.gg�dd/�ej!d+d.gg�dd/�g¡�d�d„ ƒƒZh�d�d„ Zi�d�d„ Zj�d�d„ Zkej �dd>d=g¡�d�d„ ƒZlej �dej!d-g�dgge"d/�d gej#gej#ggejm�dgdgdgge"d/�fej!ej#g�dgd-gge"d/�d gej#gej#ggejm�dgej#gej#gge"d/�fg¡�d �d!„ ƒZn�d"�d#„ Zo�d$�d%„ Zp�d&�d'„ Zq�d(�d)„ Zr�d*�d+„ Zsej d¦d§dYid¨d«id¨d¶id¨d·id¨d¸idYd¹d¬œddd«d¬œg¡�d,�d-„ ƒZt�d.�d/„ Zu�d0�d1„ Zv�d2�d3„ Zw�d4�d5„ Zxej d¦d§d«id¨d'ig¡�d6�d7„ ƒZyej d¦d§d$id¨�d8ig¡�d9�d:„ ƒZz�d;�d<„ Z{�d=�d>„ Z|dS (?  é    N©Úsparse)ÚNotFittedError)ÚOneHotEncoderÚOrdinalEncoder)Úis_scalar_nan)Ú_convert_containerÚassert_allcloseÚassert_array_equalc                  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   úh/var/www/html/bwave/python/venv/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    
rd   c               	   C   s¦   dd„ } t | d�}tjddggtd�j}| |¡ | ¡ }tddg|ƒ |jd	gd
�}tddg|ƒ dd„ }t |d� |¡}d}tj	t
|d�� | ¡  W 5 Q R X dS )z=Check the behaviour of `feature_name_combiner` as a callable.c                 S   s   | d t |ƒ S )NÚ_)Úrepr©ÚfeatureÚcategoryr   r   r   Úname_combinerÇ   s    zHtest_one_hot_encoder_custom_feature_name_combiner.<locals>.name_combiner)Zfeature_name_combinerÚNoneNr?   z	x0_'None'Zx0_Noner3   rb   za_'None'Za_Nonec                 S   s   dS )Nr   r   rg   r   r   r   Úwrong_combinerÒ   s    zItest_one_hot_encoder_custom_feature_name_combiner.<locals>.wrong_combinerzMWhen `feature_name_combiner` is a callable, it should return a Python string.r'   )r   r   r   rc   rC   r)   r_   r
   r*   r+   Ú	TypeError)rj   r7   r   r`   rl   Úerr_msgr   r   r   Ú1test_one_hot_encoder_custom_feature_name_combinerÄ   s    

ÿro   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    rr   c                 C   sX   t dd�}| | ¡}t ddd�}| | ¡}t| ¡ |ƒ t |¡rL|jdksPt‚| ¡ S )NrA   r5   F©r6   r   Zcsr)r   r   r	   r   r   r   Úformatr   )r   r7   ZXtr1ZXtr2r   r   r   Úcheck_categorical_onehotê   s    


ru   r   Údefr   é7   Úabcr   rS   r   r4   rH   Úcatr3   rI   r?   ÚnanÚmixedÚnumericrc   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   )ru   r   r   r	   r   r   r   )r   ÚXtrr   r   r   Útest_one_hot_encoder÷   s    r~   Ú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 )Nrx   r   rw   rv   r   r   ©r   r€   r?   rA   )r   r6   r€   é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   rc   r
   Úinverse_transformÚreÚescaper*   r+   r,   )r    r   r€   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,   r‡   )r   ÚX_transr   r7   r8   r   r   r   Ú?test_one_hot_encoder_inverse_transform_raise_error_with_unknownK  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©r€   r   )r   r   rc   r   r   r
   r‡   )r   ÚoherŠ   r   r   r   Ú&test_one_hot_encoder_inverse_if_binaryk  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�   ©r€   )r   r   rc   r   r)   r-   r_   rp   r
   r‡   r	   )r€   r“   r   r‘   rŠ   r`   r   r   r   Útest_one_hot_encoder_drop_resetr  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_1D�  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_pandas‹  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   rc   rC   r   r
   r)   r-   r   r   r¡   r¤   r   r¥   r@   Úobject_r*   r+   r,   rz   )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   rc   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   ru   r	   )rL   rM   r}   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
   )r€   Zexpected_namesr   r‘   r`   r   r   r   Ú'test_one_hot_encoder_feature_names_dropC  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_binaryU  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_encoderm  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_categories~  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 )
Nrx   r   rw   rv   r   r?   r   r†   r'   )r   r   r   r   rc   r
   r‡   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   rc   r)   r-   r
   r‡   )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
   r‡   rc   )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   rz   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   rz   Ú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   rc   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ó   drc   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 )rc   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   Z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 )Nrv   rV   r   r„   r”   rx   r   rw   r3   r   r   c                 S   s   g | ]\}}|| ‘qS r   r   )râ   ry   rh   r   r   r   rå   :  s    z4test_one_hot_encoder_drop_manual.<locals>.<listcomp>r?   r:   )r:   r:   )r   r   r   r
   r€   r   r£   r¡   r¿   r‡   r   r   rc   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'   rx   r   rw   rv   r   r   é;   )r   r*   r+   r,   r)   )r€   r7   rn   r   r   r   Útest_invalid_drop_lengthQ  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   r‚   r«   r   r3   r   r4   r�   r   )r   r)   r
   r¡   r¿   r£   rÙ   r   r    r   Zndarrayr@   rc   )ró   r€   Zohe_baseZohe_testr   Zdrop_catZdrop_idxZcat_listr   r   r   Útest_categoriesY  s     


  ÿrô   ÚEncoderc                 C   s   d| ƒ   ¡ d kst‚d S )NÚcategoricalZX_types)Z	_get_tagsr   )rõ   r   r   r   Ú"test_encoders_has_categorical_tagsm  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å   �  s     z2test_ohe_infrequent_two_levels.<locals>.<listcomp>Úinfrequent_sklearnr#   r·   Úx0_infrequent_sklearnN©r   r   rC   r   r)   r
   Úinfrequent_categories_r-   r	   r‡   r_   )
rø   r6   ÚX_trainr‘   ÚX_testrÀ   r�   Úexpected_invÚX_invr`   r   r   r   Útest_ohe_infrequent_two_levelsr  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ù   r€   r   r   r   rÿ   N)r   r   rC   r   r)   r¡   r¿   r   r-   r	   r_   r
   r‡   )r€   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)   ©r€   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-   rp   r*   ÚwarnsÚUserWarning)r€   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   r�   r�   r”   N)	r   r   rc   rC   r   r)   r-   r	   rp   )rø   r  r‘   r  rÀ   r�   Zdropsr€   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å   ^  s     z<test_ohe_infrequent_two_levels_user_cats.<locals>.<listcomp>rÿ   r#   N©r   r   rc   rC   r   r)   r
   r  r-   r	   r‡   ©r  r‘   r  rÀ   r�   r  r  r   r   r   Ú(test_ohe_infrequent_two_levels_user_catsH  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_catsc  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ù   r€   r   N)r   Úc_r   r)   r-   r	   )r   r‘   r  r�   r   r   r   Útest_ohe_infrequent_mixed‡  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-   r‡   r   rc   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-   r‡   r   r   rc   )	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_errors5  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   rc   rC   r   r)   r-   r	   r+  r   r   r   Ú5test_ohe_infrequent_user_cats_unknown_training_errorsC  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_deprecatedT  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?   Frs   r   r   r5   N)	r   r   r   r)   r   r-   r	   r   r
   )
r>   Zcategory_dtyper1  r   r6   r‘   r  r�   rÀ   Úoer   r   r   Útest_encoders_string_categories]  s      ÿ
"

r3  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?   ÚSFrs   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_categoricals|  s    ÿr6  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   rc   rC   r   r)   r_   r
   )rï   r   r‘   Únamesr   r   r   Ú)test_ohe_missing_values_get_feature_names‘  s    r9  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   Údogry   r   r   r#   r?   )Úcol1Úcol2r;  r<  r&  r   )	r*   rJ   rK   r   r   rz   Úfloatru   r	   )rL   ÚdfÚexpected_df_transr}   r   r   r   Ú%test_ohe_missing_value_support_pandasš  s     

þûüÿ	r@  Ú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   rB  r;  r«   r3   r4   ri   r?   r   r   Fr7  r:   )r*   rJ   ÚNAr   rz   rK   r�   r   r   r   r	   Úlenr¡   r   r
   Úisnan)rA  r    rL   Úpd_missing_valuer>  r?  r‘   Údf_transr   r   r   Ú1test_ohe_missing_value_support_pandas_categorical±  s*    
 ÿÿ




ûÿ


rH  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   r�   F©r€   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-   r‡   r
   rc   ©r    r   r‘   r�   rD   r  Úwarn_msgr  r   r   r   Ú/test_ohe_drop_first_handle_unknown_ignore_warnsÑ  s.      ÿ
ýÿ

ÿ

rN  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�   FrI  r«   r   rJ  r'   Nr?   rK  rL  r   r   r   Ú3test_ohe_drop_if_binary_handle_unknown_ignore_warns÷  s.      ÿ



ýÿ

ÿ

rO  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   r�   F)r€   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   rM  r�   r   r   r   Ú'test_ohe_drop_first_explicit_categories  s    ü

ÿrP  c               	   C   sž   t  d¡} | jdddgdddgdœddgd	�}td
d�}|jdd� d}t jt|d�� | |¡ W 5 Q R X | |¡ t jt|d�� | 	|¡ W 5 Q R X dS )zJRaise informative error message when pandas output and sparse_output=True.rF   r   r   r   r­   r4   )r3   r4   r3   r&  Tr   ©r-   zxPandas output does not support sparse data. Set sparse_output=False to output pandas DataFrames or disable pandas outputr'   N)
r*   rJ   rK   r   Ú
set_outputr+   r,   r   r)   r-   )rL   r>  r‘   r8   r   r   r   Ú'test_ohe_more_informative_error_message7  s    
$
ÿ
rS  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   rz   rC   r   Úint32r*   r+   r,   r)   )r   r2  r8   r   r   r   ÚBtest_ordinal_encoder_passthrough_missing_values_float_errors_dtypeK  s    
ÿrU  Ú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?   ©rV  r   r   r   N)r   r   rz   rÃ   rC   r   r)   rD  r¡   r   r	   r-   r‡   )rV  r   r2  r�   r	  r   r   r   Ú5test_ordinal_encoder_passthrough_missing_values_floatY  s    

rX  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   rB  r;  r«   r3   r4   ri   r?   rW  r   r   Nr   r:   ç       @r   r   )r   r   r   r…   )r*   rJ   rC  r   rz   rK   r�   r   r)   rD  r¡   r   r
   rE  r-   r	   r‡   r   )rA  rV  rL   rF  r>  r2  rG  r	  r   r   r   Ú=test_ordinal_encoder_missing_value_support_pandas_categoricalk  s$    
 ÿÿ

rZ  rY  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   rz   r
   r   r¡   r@   r   r*   r+   r,   r)   )r   r0   r¯   r¦   r2  r‹   r   r   r   Ú=test_ordinal_encoder_specified_categories_missing_passthroughŒ  s    &

r[  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  r2  r�   r   r   r   Ú/test_ordinal_encoder_handle_missing_and_unknownÀ  s    

r\  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+   rm   r)   r   r‡   )r   ZX_sparseÚencoderrn   r�   r   r   r   r   Útest_ordinal_encoder_sparseä  s    


r^  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   r2  r   r   r   Ú-test_ordinal_encoder_fit_with_unseen_categoryú  s    $
  ÿ
r_  r  ZAAÚOr4  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    

ra  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   r]  r�   r   r   r   Ú#test_ordinal_encoder_python_integer'  s    üÿ ù
rc  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   r8  r   r7   Zfeature_names_outr   r   r   Ú.test_ordinal_encoder_features_names_out_pandas;  s    

rd  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Ê   rV  r   r   r«   N)r   r   rz   rc   r   r)   r-   r	   r‡   r   rE  )r   r2  r�   r  r"  ÚX_roundtripr   r   r   Ú0test_ordinal_encoder_unknown_missing_interactionG  s     ýü


rh  Ú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   ry   r«   r?   zTencoded_missing_value \(1\) is already used to encode a known category in features: rF   ÚletterZpetr&  z	\['pet'\]z\[1\]r   rW  r'   N)r   r   rz   rc   r*   rJ   rK   r   r+   r,   r)   )ri  r   Ú	error_msgrL   r2  r   r   r   Ú0test_ordinal_encoder_encoded_missing_value_errore  s    "ÿ


rl  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Ç   rf  rm  r4   r   N)r   r   rz   r)   r   r-   r	   r‡   r   ré   r   r   rE  )r  ZX_test_trans_expectedZX_roundtrip_expectedr2  r  r"  rg  Z	n_samplesrã   Zexpected_valÚvalr   r   r   Ú9test_ordinal_encoder_unknown_missing_interaction_both_nan  s(    ýü



ro  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   rQ  z*Pandas output does not support sparse datar'   Fr   ÚdefaultN)r*   rJ   rK   r   rR  r+   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    


rt  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   rp  rQ  N)r*   rJ   rK   r   rR  r   r	   rq  r
   r_   r'  )rL   rM   Zord_defaultZ
ord_pandasrr  rs  r   r   r   Útest_ordinal_set_outputÊ  s    


ru  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acsrm  Ú2r5   N)	r   r)   rD  r¡   r   Ú	enumerater@   rc   r
   )r6   r7   Únry   r   r   r   Ú test_predefined_categories_dtypeÚ  s    
rz  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:  ry   r?   r   rW  r   r   rÇ   rÉ   ÚsnakeN)	r   r   rz   rc   r   r   r	   r)   r-   )r   r�   r7   r  r   r   r   Ú1test_ordinal_encoder_missing_unknown_encoding_maxë  s    
r|  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?   Fr�   )rú   r   r€   r¶   Zx0_dZx0_er   r   rS   r�   r·   N)r   r   rc   rC   r   r)   r
   r_   r¡   r¿   r   )r   r‘   r   r   r   Ú#test_drop_idx_infrequent_categories÷  s<    2 ÿ 
ÿ,2 ÿ 
ÿþ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ddggƒ t|jddggƒ dgdgdgdgdgg}dgdgdgdgd
gg}| |¡}t	||ƒ | 
|¡}dgdgdgdgdgg}t||ƒ dS )zGTest parameters for grouping 'a', and 'd' into the infrequent category.r3   r   r4   r»   r«   rS   rª   r   rÇ   r:   rÉ   r­   r   r   r   rÿ   N)r   r   rC   r   r)   r
   r¡   r  r-   r	   r‡   )rø   r  Úordinalr  Úexpected_transr�   r	  Úexpected_inverser   r   r   Ú,test_ordinal_encoder_infrequent_three_levels  s.    2 ÿÿþ


û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dggƒ t|jddggƒ dgdgdgdgdgg}dgdgdgdg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?   rÇ   r:   )r6   rù   r    rÊ   r­   r   r   r   rÿ   N)r   r   rc   rC   r   r)   r
   r¡   r  r-   r	   r‡   )r  r~  r  r  r�   r	  r€  r   r   r   Ú6test_ordinal_encoder_infrequent_three_levels_user_catsB  s4    ( ÿüû


ûr‚  c                  C   sÎ   t  dddddddddg	dddddddddg	f¡} tdd� | ¡}t|jd ddgƒ |jd dksht‚ddgddgg}ddgddgg}| |¡}t||ƒ | 	|¡}t j
ddgddggtd�}t||ƒ dS )	zETest when feature 0 has infrequent categories and feature 1 does not.r   r   r   r   ©rù   Nrÿ   r?   )r   Zcolumn_stackr   r)   r
   r  r   r-   r	   r‡   r   rc   )r   r~  r  r  r�   r	  r€  r   r   r   Ú%test_ordinal_encoder_infrequent_mixedf  s    2


r„  c                  C   sV  t  d¡} |  ddddg¡}| jdddddddd	d	g	d
dddddddd
g	| jdgd dgd  dg dg |d�dœdddgd�}tdd� |¡}t|jd dd	gƒ t|jd dddgƒ t|jd ddgƒ | jdd	ddgdddd
g| jdgdg dg dg |d�dœdddgd�}dddgdddgdddgdddgg}| 	|¡}t
||ƒ dS )zHTest infrequent categories with a pandas DataFrame with multiple dtypes.rF   Úbirdry   r:  r{  r3   r$  r«   r4   r   r   r   rS   rV   r#   r?   )r%  rÙ   rö   r%  rÙ   rö   r&  rƒ  r   r   N)r*   rJ   ZCategoricalDtyperK   r�   r   r)   r
   r  r-   r	   )rL   Zcategorical_dtyper   r~  r  r  r�   r   r   r   Ú:test_ordinal_encoder_infrequent_multiple_categories_dtypes{  s:    
þý÷


þý÷$
r†  c                  C   sÄ   t jdgd dgd  dgd  dgd  t jg gtd	�j} td
dddd� | ¡}t|jdddggƒ t jdgdgdgdgdgt jggtd	�}dgdgdgdgdgdgg}| 	|¡}t
||ƒ dS )zJCheck behavior of unknown_value and encoded_missing_value with infrequent.r3   r   r4   r»   r«   rS   rª   r   r?   rÇ   r   )r    rÊ   rù   rV  rü   r   r   N)r   r   rz   rc   rC   r   r)   r
   r  r-   r	   )r  r~  r  r  r�   r   r   r   Ú.test_ordinal_encoder_infrequent_custom_mapping«  s"    0 ÿüû(
r‡  c                 C   s”   t jdgd dgd  dgd  dgd  gtd	�j}tf | d
ddœ—Ž |¡}td
dd� |¡}dgdgdgdgdgg}t| |¡| |¡ƒ dS )zMAll categories are considered frequent have same encoding as default encoder.r3   r   r4   r»   r«   rS   rª   r   r?   rÇ   r:   rÉ   rü   N©r   r   rc   rC   r   r)   r	   r-   )rø   r  Zadjusted_encoderZdefault_encoderr  r   r   r   Ú!test_ordinal_encoder_all_frequentÀ  s,    	( ÿ  ÿ
þ ÿþ ÿr‰  éd   c                 C   s�   t jdgd dgd  dgd  dgd  gtd	�j}tf | d
ddœ—Ž |¡}dgdgdgdgdgg}t| |¡dgdgdgdgdggƒ dS )zAWhen all categories are infrequent, they are all encoded as zero.r3   r   r4   r»   r«   rS   rª   r   r?   rÇ   r:   rÉ   rü   r   Nrˆ  )rø   r  r]  r  r   r   r   Ú#test_ordinal_encoder_all_infrequentÛ  s    	( ÿ  ÿ
þr‹  c                  C   s�   t jt jgd dgd  dgd  dg dg gtd�j} td	d
� | ¡}t jdddt jggtd�j}| |¡}t|dgdgdgt jggƒ dS )z5Check behavior when missing value appears frequently.r»   r:  rS   ry   r   r{  Údeerr?   r   rƒ  r   r   r   N©	r   r   rz   rc   rC   r   r)   r-   r	   ©r   r~  r  r�   r   r   r   Ú-test_ordinal_encoder_missing_appears_frequentï  s    ,þ
r�  c                  C   s¾   t jt jgdgd  dgd  dg dg dgd d	gd  gtd
�j} tdd� | ¡}t jddgdd	gt jd	gdd	gddggtd
�}| |¡}t|ddgddgt jdgddgddggƒ dS )z7Check behavior when missing value appears infrequently.r:  rS   ry   r   r{  rŒ  ÚredrÕ   Úgreenr?   r#   )rú   r   r   r   Nr�  rŽ  r   r   r   Ú/test_ordinal_encoder_missing_appears_infrequentü  s$    &þûûø

r’  )}rˆ   Únumpyr   r*   Zscipyr   Zsklearn.exceptionsr   Zsklearn.preprocessingr   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r	   r
   r   ÚmarkZparametrizer2   r9   r<   rT  Zfloat32rÃ   rE   rN   ra   rd   ro   rr   ru   r   rc   rz   r=  r~   rŒ   rŽ   r’   r•   r›   rž   r±   ræ   Zstr_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/  r3  r6  r9  r@  rH  rN  rO  rP  rS  rU  rX  rZ  r[  r\  r^  r_  ra  rc  rd  rh  rl  rB   ro  rt  ru  rz  r|  r}  r�  r‚  r„  r†  r‡  r‰  r‹  r�  r’  r   r   r   r   Ú<module>   s  


<
  øøô
/0&þþþ


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