U
    cN                     @   sf   d dl Z d dlZd dlZd dlmZ d dlZd dlmZm	Z	m
Z
mZmZ d dlmZ G dd dZdS )    N)CategoricalDtype)Categorical	DataFrameIndexSeriesisnac                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
dddddfi dfddidfdedddddgidfgdd Zej	
dddgdd  Zd!d" Zej	
d#dddgedddgfddejgedddgfddejgedddgfddejgedddgfgd$d% Zej	
d#dddgedddgfddejgedddgfddejgedddgfddejgedddgfgd&d' Zej	
d(dd)d*gejdd)gdd)d*gfdddgejddgdddgfgd+d, Zej	
d-ejd.fd/ejd0fejd0fgd1d2 Zd3S )4TestCategoricalMissingc                 C   s8   t dddg}tddt jg}| }t|| d S )NFTab)nparrayr   nanr   tmassert_numpy_array_equal)selfexpcatres r   P/tmp/pip-unpacked-wheel-g7fro6k3/pandas/tests/arrays/categorical/test_missing.py	test_isna   s    z TestCategoricalMissing.test_isnac                 C   sX   t td}tjddd}d|d d d< t||dd}t| tt	||dk d S )N
   r         T)Zfastpath)
listranger   randomrandintr   reprr   r   r   )r   
categorieslabelsr   r   r   r   test_na_flags_int_categories   s    z3TestCategoricalMissing.test_na_flags_int_categoriesc                 C   s   t ddtjdg}t|jtddg t|jtj	ddddgtj
d tj|d< t|jtddg t|jtj	ddddgtj
d t ddtjdg}t|jtddg t|jtj	ddddgtj
d d S )Nr	   r
   r      r   dtype)r   r   r   r   assert_index_equalr    r   r   _codesr   int8)r   cr   r   r   test_nan_handling'   s    "
"z(TestCategoricalMissing.test_nan_handlingc                 C   sD   t ddtjg}|tddg}t|jtjdddgdd d S )Nr	   r
   r)   r   r   r(   r$   )	r   r   r   Z
_set_dtyper   r   r   codesr   )r   r)   resultr   r   r   test_set_dtype_nans7   s    z*TestCategoricalMissing.test_set_dtype_nansc                 C   sB   t dddg}tj|d< t dtjdgdddgd}t|| d S )Nr#         )r    )r   r   r   r   assert_categorical_equal)r   r   r   r   r   r   test_set_item_nan<   s    
z(TestCategoricalMissing.test_set_item_nanzfillna_kwargs, msgr#   Zffill)valuemethodz)Cannot specify both 'value' and 'method'.z(Must specify a fill 'value' or 'method'.r3   badz%Invalid fill method. Expecting .* badr2   r.   r/      r	   3Cannot setitem on a Categorical with a new categoryc              	   C   sZ   t dddd d g}t|dkr,d|kr,t}nt}tj||d |jf | W 5 Q R X d S )Nr#   r.   r/   r2   match)r   len	TypeError
ValueErrorpytestraisesfillna)r   Zfillna_kwargsmsgr   errr   r   r   test_fillna_raisesC   s    z)TestCategoricalMissing.test_fillna_raisesnamedTFc              	   C   s   |rt dd}ndd }ttj|dd|ddd gtd}||dd}t|dd|dd|ddg}t|| ttj|dd|ddd gtd}d}t	j
t|d	 ||dd W 5 Q R X d S )
NPointzx yc                  W   s   | S )Nr   )argsr   r   r   <lambda>e       zFTestCategoricalMissing.test_fillna_iterable_category.<locals>.<lambda>r   r#   r$   r6   r7   )collections
namedtupler   r   r   objectr>   r   r0   r<   r=   r:   )r   rB   rC   r   r,   expectedr?   r   r   r   test_fillna_iterable_category_   s    $ $z4TestCategoricalMissing.test_fillna_iterable_categoryc                 C   s   t dddd d g}|d}||}t|| t|d sBttdddddg}||}t dddddg|jd}t|| t|d std S )NABCr   r$   )	r   r>   r   r0   r   AssertionErrorr   r   r%   )r   r   otherr,   rJ   r   r   r   test_fillna_arrays   s    


z(TestCategoricalMissing.test_fillna_arrayzvalues, expectedc              	   C   sx   t ddb t|}| }t|| t| }t|}t|| t| }t|}t	|| W 5 Q R X d S Nzmode.use_inf_as_naT)
pdoption_contextr   r   r   r   r   assert_series_equalr   assert_frame_equalr   valuesrJ   r   r,   r   r   r   test_use_inf_as_na   s    z)TestCategoricalMissing.test_use_inf_as_nac              	   C   sx   t |}tddZ t|}t|| tt|}t|}t|| tt|}t|}t	|| W 5 Q R X d S rR   )
r   rS   rT   r   r   r   r   rU   r   rV   rW   r   r   r   "test_use_inf_as_na_outside_context   s    z9TestCategoricalMissing.test_use_inf_as_na_outside_contextza1, a2, categoriesr
   r)   c                 C   st   t |}t||dt||dk}t|t|k}t|| t||dt||dk}t|t|k}t|| d S Nr$   )r   r   r   rU   )r   Za1Za2r    Zcat_typer,   rJ   r   r   r   %test_compare_categorical_with_missing   s    	z<TestCategoricalMissing.test_compare_categorical_with_missingzna_value, dtypezdatetime64[ns])Nfloat64r]   c                 C   s&   t ||g}t|jtg |d d S r[   )r   r   r&   r    r   )r   Zna_valuer%   r,   r   r   r   ,test_categorical_only_missing_values_no_cast   s    zCTestCategoricalMissing.test_categorical_only_missing_values_no_castN)__name__
__module____qualname__r   r"   r*   r-   r1   r<   markZparametrizer   rA   rK   rQ   r   r   r   infrS   ZNArY   rZ   r\   ZNaTr^   r   r   r   r   r      sn   


	
	

	r   )rG   Znumpyr   r<   Zpandas.core.dtypes.dtypesr   ZpandasrS   r   r   r   r   r   Zpandas._testingZ_testingr   r   r   r   r   r   <module>   s   