a
    Pfl                     @   s   d dl Z d dlZd dlZd dlZd dlm  mZ d dl	m
Z
 d dlZd dlmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ zd dlZW n ey   dZY n0 G dd dZdS )    N)is_integer_dtype)

ArrowDtypeCategoricalCategoricalDtypeCategoricalIndex	DataFrameIndex
RangeIndexSeriesSparseDtypeget_dummies)SparseArrayc                
   @   sL  e Zd Zejdd Zejddejedgddd Z	ejd	d
gddd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zejd3d4e d5d6giie d7d8gifd4e d9d5giie d:d8gife d9d6gid5d;e d7d8gife d9d6gid5d<e d=d8gifgd>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)ejdPd8dQgdRdS Z*ejd
d8dQgdTdU Z+dVdW Z,dXdY Z-ejdZd[gd\d] Z.d^d_ Z/d`da Z0e12dbdcdd Z3e12dbdedf Z4dS )gTestGetDummiesc                 C   s   t g dg dg ddS )Nabr   r   r   c         )ABC)r   )self r   ^/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/reshape/test_get_dummies.pydf"   s    zTestGetDummies.dfuint8i8N)paramsc                 C   s   t |jS N)npdtypeparamr   requestr   r   r   r$   &   s    zTestGetDummies.dtypeZdensesparsec                 C   s
   |j dkS )Nr(   )r%   r&   r   r   r   r(   *   s    zTestGetDummies.sparsec                 C   s   |d u rt jS |S r"   )r#   r   )r   r$   r   r   r   effective_dtype0   s    zTestGetDummies.effective_dtypec                 C   sB   d}t jt|d t|dd W d    n1 s40    Y  d S )Nz1dtype=object is not a valid dtype for get_dummiesmatchobjectr$   )pytestraises
ValueErrorr   )r   r   msgr   r   r   'test_get_dummies_raises_on_dtype_object5   s    z6TestGetDummies.test_get_dummies_raises_on_dtype_objectc                 C   s   t d}t|}t|t d}tg dg dg dd| |d}|rp|jdkrb|jtd	d
}n|jtdd
}t|||d}t	|| t|||d}t	|| t d|_
t|||d}t	|| d S )NabcABCr   r   r   r   r   r   r   r   r   r   r   r   r-   r   F
fill_value        r(   r$   )listr
   r   r)   kindapplyr   r   tmassert_frame_equalindex)r   r(   r$   s_lists_seriess_series_indexexpectedresultr   r   r   test_get_dummies_basic:   s$    

z%TestGetDummies.test_get_dummies_basicc                 C   s  t d}t|}tg dg dg dd}tg dg dg dd| |t dd	}|rt|rjd
}n|tkrxd}nd}|jt|d}t|||d}	t	
|	| t|||d}	t	
|	| t||j||d}	|rd| |j d| d}
n| |j}
t|
didd}|	j }	dd |	jD |	_t	|	| t|dg||d}	|rPdnd}dd|di}d||
d
 ||
< t|dd }|	j }	dd |	jD |	_|	 }	t	|	| d S )Nr3   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r8   r5   r6   r7   )r$   columnsr   Fr;   r9   r<   )rI   r(   r$   zSparse[z, ]   countnamec                 S   s   g | ]}t |qS r   str.0ir   r   r   
<listcomp>v       z?TestGetDummies.test_get_dummies_basic_types.<locals>.<listcomp>r   stringr,   int64r   r   c                 S   s   g | ]}t |qS r   rO   rQ   r   r   r   rT      rU   )r=   r
   r   r)   r   boolr?   r   r   r@   rA   rI   rN   ZdtypesZvalue_countsrB   Zassert_series_equalget
sort_index)r   r(   r$   using_infer_stringrC   rD   Zs_dfrF   r:   rG   Z
dtype_namekeyZexpected_countsr   r   r   test_get_dummies_basic_typesR   sL    

z+TestGetDummies.test_get_dummies_basic_typesc                 C   s   t jg}t|}t|dgd}t||d}t||d}t||d}|jsLJ |jsVJ |js`J |j dgkstJ |j dgksJ |j dgksJ d S )Nr   rB   r(   r   )r#   nanr
   r   emptyrB   tolist)r   r(   Zjust_na_listZjust_na_seriesZjust_na_series_indexZres_listZ
res_seriesZres_series_indexr   r   r   test_get_dummies_just_na   s    


z'TestGetDummies.test_get_dummies_just_nac           
      C   sN  ddt jg}t|||d}tg dg dd| |d}|rf|jdkrX|jtdd	}n|jtd
d	}t	|| t|d||d}tt jg ddg ddg di| |d}|j
ddt jgdd}|j|_|r|jdkr|jtdd	}n|jtd
d	}t	|| tt jgd||d}ttddgdt jg| |d}	t|j|	j d S )Nr   r   r<   r5   r6   )r   r   r-   Fr9   r;   Tdummy_nar(   r$   r7   r   Zaxisr   r^   rI   r$   )r#   r`   r   r   r)   r>   r?   r   r@   rA   reindexrI   r
   Zassert_numpy_array_equalvalues)
r   r(   r$   sresexpres_naexp_nares_just_naexp_just_nar   r   r   test_get_dummies_include_na   s6    

z*TestGetDummies.test_get_dummies_include_nac                 C   sf   d}t d}|||g}t|d|d}tdg dd| g di}|rV|jtd	d
}t|| d S )NezLATIN SMALL LETTER E WITH ACUTEletterprefixr(   Zletter_e)TFFZletter_)FTTFr9   )unicodedatalookupr   r   r?   r   r@   rA   )r   r(   rr   eacuterj   rk   rl   r   r   r   test_get_dummies_unicode   s    

z'TestGetDummies.test_get_dummies_unicodec                 C   s   |ddg }t ||d}tg dg dg dg ddtd	}|rttg dd
d	tg dd
d	tg dd
d	tg dd
d	d}t|| d S )Nr   r   r_   r   r   r   r6   r   r   r   r7   A_aA_bB_bB_cr-   rX   )r   r   rX   r   r@   rA   r   r   r(   rG   rF   r   r   r   test_dataframe_dummies_all_obj   s    	z-TestGetDummies.test_dataframe_dummies_all_objc                 C   sx   |ddg }| ddd}t|}tg dg dg dg d	d
td}|sh|ddg  d|ddg< t|| d S )Nr   r   r,   rV   r   r   rz   r6   r{   r7   r|   r-   r   r   boolean)astyper   r   rX   r@   rA   )r   r   r[   rG   rF   r   r   r   #test_dataframe_dummies_string_dtype   s    	z2TestGetDummies.test_dataframe_dummies_string_dtypec              	   C   s   t |||d}|r8t}|jdkr,t|d}qBt|d}n
tj}|}tg d|g d|d|g d|d|g d	|d|g d
|dd}|g d }t|| d S )Nr<   r   Fr   r   rz   r-   r6   r{   r7   r   r}   r~   r   r   )	r   r   r>   r   r#   arrayr   r@   rA   r   r   r(   r$   rG   ZarrtyprF   r   r   r   "test_dataframe_dummies_mix_default   s$    
	z1TestGetDummies.test_dataframe_dummies_mix_defaultc                    s   ddg}t |||d}tg dg dg dg dg dd	}|d
g |d
g< g d}|d
g|  }|rltnt ||  fdd||< t|| d S )Nfrom_Afrom_Brt   r   TFTFTFTTFFFTr   from_A_afrom_A_bfrom_B_bfrom_B_cr   r   r   r   r   c                    s    | S r"   r   )xr   r   r   <lambda>  rU   zCTestGetDummies.test_dataframe_dummies_prefix_list.<locals>.<lambda>)r   r   r   r
   r?   r@   rA   )r   r   r(   prefixesrG   rF   colsr   r   r   "test_dataframe_dummies_prefix_list  s     	z1TestGetDummies.test_dataframe_dummies_prefix_listc              
   C   s   t |d|d}g d}tg dg dg dgdg| d}|dtji}|rtjtg d	dd
tg ddddtg ddddtg ddddtg ddddgdd}t	|| d S )Nbadrt   )bad_abad_br   bad_cr   TFTFr   FTTFr   TFFTr   rI   r   rM   r   r   zSparse[bool])rN   r$   r   r   r   r   r   r   rf   )
r   r   r   r#   rW   pdconcatr
   r@   rA   )r   r   r(   rG   Zbad_columnsrF   r   r   r   !test_dataframe_dummies_prefix_str  s*    z0TestGetDummies.test_dataframe_dummies_prefix_strc                 C   s   t |dgdg|d}tg dg dg dg dd}|j}||d	d   t||d	d  < |d
g |d
g< |rddg}|| tdd||< t|| d S )Nr   r   )ru   rI   r(   r   r   rz   r6   )r   r   r   r   r   r   r   r   rX   F)r   r   rI   r   rX   r   r@   rA   r   r   r(   rG   rF   r   r   r   r   test_dataframe_dummies_subset4  s    "z,TestGetDummies.test_dataframe_dummies_subsetc                 C   s   t |d|d}tg dg dg dg dg dd}|d	g |d	g< |g d }|rvg d
}|| tdd||< t|| t |ddg|d}|jdddd}t|| t |ddd|d}t|| d S )Nz..
prefix_sepr(   r   r   r   r   r   )r   A..aA..bB..bB..cr   )r   r   r   r   rX   F__ZB__bZB__c)r   r   r   r   )r   r   r   r   r@   rA   renamer   r   r   r   !test_dataframe_dummies_prefix_sepF  s(    	z0TestGetDummies.test_dataframe_dummies_prefix_sepc                 C   sL   t d}tjt|d  t|dg|d W d    n1 s>0    Y  d S )NzPLength of 'prefix' (1) did not match the length of the columns being encoded (2)r*   ztoo fewrt   reescaper.   r/   r0   r   r   r   r(   r1   r   r   r   (test_dataframe_dummies_prefix_bad_length`  s
    z7TestGetDummies.test_dataframe_dummies_prefix_bad_lengthc                 C   sL   t d}tjt|d  t|dg|d W d    n1 s>0    Y  d S )NzTLength of 'prefix_sep' (1) did not match the length of the columns being encoded (2)r*   r   r   r   r   r   r   r   ,test_dataframe_dummies_prefix_sep_bad_lengthh  s
    z;TestGetDummies.test_dataframe_dummies_prefix_sep_bad_lengthc                 C   s   ddd}t g dg dg dd}t|||d}t g dg d	g d
g dg dd}g d}|| t||< |r|| tdd||< t|| d S )Nr   r   r   r   r   r   )r   r   r   rt   rz   r6   r{   r7   r   r   rX   F)r   r   r   rX   r   r@   rA   )r   r(   r   r   rG   rF   rI   r   r   r   "test_dataframe_dummies_prefix_dictp  s     

z1TestGetDummies.test_dataframe_dummies_prefix_dictc                 C   s  t jt jt jg|jdd d f< t|d||djdd}|r`t}|jdkrTt|d}qjt|d}n
t j}|}t	dd	dt jg|g d
|d|g d|d|g d|d|g d|d|g d|d|g d|ddjdd}t
|| t|d||d}|g d }t
|| d S )Nr   Trd   r   rf   r   Fr   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~   A_nanr   r   B_nanr   )r#   r`   locr   rZ   r   r>   r   r   r   r@   rA   r   r   r   r   test_dataframe_dummies_with_na  s6    

z-TestGetDummies.test_dataframe_dummies_with_nac                 C   s   t g d|d< t|||djdd}|rPt}|jdkrDt|d}qZt|d}n
tj}|}tg d	|g d
|d|g d|d|g d|d|g d|d|g d|d|g d|ddjdd}t	
|| d S )Nr   yr   catr<   r   rf   r   Fr   r   rz   r-   r6   r{   r7   r5   r   r   r   )r   r}   r~   r   r   Zcat_xcat_y)r   r   rZ   r   r>   r   r#   r   r   r@   rA   r   r   r   r   'test_dataframe_dummies_with_categorical  s,    

z6TestGetDummies.test_dataframe_dummies_with_categoricalzget_dummies_kwargs,expecteddata   är   u   ä_aTr   u   x_ä)r   ru   )r   r   u   xäac                 C   s   t f i |}t|| d S r"   )r   r@   rA   )r   Zget_dummies_kwargsrF   rG   r   r   r   test_dataframe_dummies_unicode  s    z-TestGetDummies.test_dataframe_dummies_unicodec                 C   s   t d}t|}t|t d}tg dg ddtd}t|d|d}|rX|jtd	d
}t|| t|d|d}t|| t d|_	t|d|d}t|| d S )Nr3   r4   r6   r7   )r   r   r-   T
drop_firstr(   Fr9   )
r=   r
   r   rX   r   r?   r   r@   rA   rB   r   r(   rC   rD   rE   rF   rG   r   r   r   !test_get_dummies_basic_drop_first  s    
z0TestGetDummies.test_get_dummies_basic_drop_firstc                 C   s   t d}t|}t|t d}ttdd}t|d|d}t|| t|d|d}t|| tt dd}t|d|d}t|| d S )NZaaar4   r   r^   Tr   )r=   r
   r   r	   r   r@   rA   r   r   r   r   +test_get_dummies_basic_drop_first_one_level  s    z:TestGetDummies.test_get_dummies_basic_drop_first_one_levelc           	      C   s   ddt jg}t|d|d}tdg ditd}|r@|jtdd}t|| t|dd|d	}tdg dt jg d
itdj	dt jgdd}|r|jtdd}t|| tt jgdd|d	}tt
dd}t|| d S )Nr   r   Tr   r6   r-   Fr9   re   r   r(   r7   r   rf   r^   )r#   r`   r   r   rX   r?   r   r@   rA   rh   r	   )	r   r(   Zs_NArk   rl   rm   rn   ro   rp   r   r   r   $test_get_dummies_basic_drop_first_NA  s$    
z3TestGetDummies.test_get_dummies_basic_drop_first_NAc                 C   sV   |ddg }t |d|d}tg dg ddtd}|rF|jtd	d
}t|| d S )Nr   r   Tr   r6   r7   )r~   r   r-   Fr9   )r   r   rX   r?   r   r@   rA   r   r   r   r   !test_dataframe_dummies_drop_first  s    z0TestGetDummies.test_dataframe_dummies_drop_firstc                 C   s   t g d|d< t|d|d}tg dg dg dg dd	}g d
}|| t||< |g d	 }|r|D ]}t|| ||< qnt|| d S )Nr   r   Tr   r   r6   r7   r   )r   r~   r   r   )r~   r   r   )r   r   r   r   rX   r   r@   rA   )r   r   r(   r$   rG   rF   r   colr   r   r   2test_dataframe_dummies_drop_first_with_categorical%  s    zATestGetDummies.test_dataframe_dummies_drop_first_with_categoricalc                 C   s   t jt jt jg|jdd d f< t|dd|djdd}tdddt jgg dg dg d	g dd
}g d}|| t||< |jdd}|r|D ]}t|| ||< qt	
|| t|dd|d}|g d }t	
|| d S )Nr   Tr   r   rf   r   r   r   r   )r   r~   r   r   r   )r~   r   r   r   F)r   r~   r   )r#   r`   r   r   rZ   r   r   rX   r   r@   rA   )r   r   r(   rG   rF   r   r   r   r   r   )test_dataframe_dummies_drop_first_with_na3  s0    	z8TestGetDummies.test_dataframe_dummies_drop_first_with_nac                 C   s   t g d}t|}tddgddgddggddgtd}t|| t tg d}t|}tddgddgddggtddgtd}t|| d S )	Nr   r   r   r   r   r   rg   r   r   r   )r
   r   r   rX   r@   rA   r   )r   r   rG   rF   r   r   r   test_get_dummies_int_intN  s    $ z'TestGetDummies.test_get_dummies_int_intc                 C   s   t g dtg dg dg dd}g d}t g dg dg dg|d}||d	d   |||d	d  < t|d
dg|d}t|| d S )Nr   r   )      ?       @r   )r   r   r   D)r   r   A_1A_2ZB_ar   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   rg   )r   r   r   r   r@   rA   )r   r$   r   rI   rF   rG   r   r   r   test_get_dummies_int_df[  s    
"z&TestGetDummies.test_get_dummies_int_dforderedFc                 C   sx   t tdtd|d}t||d}tjg dg dg| |d}t|j|j|d}t||| |d}t	
|| d S )NZxyZxyz)
categoriesr   r-   r5   r6   rg   )r   r=   r   r#   r   r)   r   r   r   r@   rA   )r   r$   r   r   rG   r   r   rF   r   r   r   1test_dataframe_dummies_preserve_categorical_dtypem  s     
z@TestGetDummies.test_dataframe_dummies_preserve_categorical_dtypec                 C   sL   t ddgddgd}t|dg|d}|jdgd	}t|dg | d S )
Nr   r   ZABZCD)GDPNationr   rI   r(   r   r   )r   	from_dictr   rh   r@   rA   )r   r(   r   Zdf2r   r   r   *test_get_dummies_dont_sparsify_all_columns{  s    z9TestGetDummies.test_get_dummies_dont_sparsify_all_columnsc                 C   sd   g d|_ t|jdd}tg dg dg dgg ddjdd}|d	tji}t|| d S )
N)r   r   r   r   rf   r   r   r   )r   r}   r~   r~   ZA_cr   r   )	rI   r   rZ   r   r   r#   rW   r@   rA   r   r   rG   rF   r   r   r   "test_get_dummies_duplicate_columns  s    
	z1TestGetDummies.test_get_dummies_duplicate_columnsc                 C   s`   t dddgi}t|dgdd}tdd}t tddg|d	tddg|d	d
}t|| d S )Nr   r   r   Tr   rX   Fr   r-   )r   r   )r   r   r   r   r@   rA   )r   r   rG   r$   rF   r   r   r   test_get_dummies_all_sparse  s    
z*TestGetDummies.test_get_dummies_all_sparseri   bazc                 C   sd   t g dg dg dg dd}d}tjt|d t||d W d    n1 sV0    Y  d S )	N)r   r   r            )oner   r   twor   r   )r   r   r   r   r   r   )r   r   zqwt)barZfoor   Zzooz1Input must be a list-like for parameter `columns`r*   r   )r   r.   r/   	TypeErrorr   )r   ri   r   r1   r   r   r   #test_get_dummies_with_string_values  s    	z2TestGetDummies.test_get_dummies_with_string_valuesc                 C   sH   t td}t||d}tg dg dg dd|d}t|| d S )Nabcar-   r   r   r   r   r   r   r8   )r
   r=   r   r   r@   rA   )r   any_numeric_ea_and_arrow_dtypeZserrG   rF   r   r   r    test_get_dummies_ea_dtype_series  s    z/TestGetDummies.test_get_dummies_ea_dtype_seriesc                 C   sL   t dtdi}t||d}t g dg dg dd|d}t|| d S )Nr   r   r-   r   r   r   )Zx_aZx_bZx_c)r   r=   r   r@   rA   )r   r   r   rG   rF   r   r   r   #test_get_dummies_ea_dtype_dataframe  s    z2TestGetDummies.test_get_dummies_ea_dtype_dataframepyarrowc                 C   s   ddt tdgdddft tdgdddffD ]L\}}ttdg|dd	d
}t|}td	tdg|dd}t|| q0d S )N)string[pyarrow]r   )string[pyarrow_numpy]rX   r   r   r-   r   r   rX   r   rN   r   Tr   Zname_a)r   r   r   r
   r   r@   rA   )r   r$   Z	exp_dtyper   rG   rF   r   r   r   test_get_dummies_ea_dtype  s    z(TestGetDummies.test_get_dummies_ea_dtypec              	   C   s   t tdgtt ddd}t|}t dtdgddd}t|| t tdgtt	dgtt dddd}t|}t|| d S )Nr   r-   r   r   Tzbool[pyarrow]r   )
r   r
   r   parV   r   r@   rA   r   r   r   r   r   r   test_get_dummies_arrow_dtype  s     	z+TestGetDummies.test_get_dummies_arrow_dtype)5__name__
__module____qualname__r.   Zfixturer   r#   Zfloat64rX   r$   r(   r)   r2   rH   r]   rc   rq   ry   r   r   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   tdZ
skip_if_nor   r  r   r   r   r   r   !   s   


3#"






r   ) r   rv   numpyr#   r.   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  Zpandas.core.dtypes.commonr   Zpandasr   r   r   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingr@   Zpandas.core.arrays.sparser   r   r  ImportErrorr   r   r   r   r   <module>   s   0
