a
    GGbJ                     @   s~   d dl Z d dlZd dlZd dlmZ d dlZd dl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 G dd dZdS )    N)is_categorical_dtype)CategoricalCategoricalIndex	DataFrameIndexIntervalSeries	Timedelta	Timestamp)CategoricalDtypec                
   @   s  e Z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#d$ Zd%d& Zd'd( Zejd)g d*g d+g d,g d-gd.d/ ejD d0d/ ejD ejg d1ed2e d3d4e d4d5e d5d6ge!d7d3d3e!d7d8d3e!d7d9d3ge"d3d:e"d8d:e"d9d;gd<d/ ej#D e$j%&g d=je$j'd>d9d?je$j(d@d9dAjdBdC Z)dDdE Z*dFS )GTestCategoricalIndexc                 C   sh   t dtjdddittdttdddd	| _t dtjdddittdttd
ddd	| _d S )NA   int64dtypeaabbcacabB)r   nameindexcabe)r   nparanger   listCDTdfdf2)selfmethod r!   Elib/python3.9/site-packages/pandas/tests/indexing/test_categorical.pysetup_method   s    z!TestCategoricalIndex.setup_methodc                 C   s6  t td}| jjd }ttddd|}|j|ks<J tdg dit|d}t	
|| | j }d	|jd< ttd
dd|}|j|ksJ tdg dit|d}t	
|| tjtdd |jd  W d    n1 s0    Y  | }| }|jt|_d|jd< d|jd< t	
|| d S )Nr   aZaaar   r   r   )r         r      r   )r(   r(            r(   z^'d'$matchd
   )r   r   r   locr   astyper   r   r   tmassert_frame_equalcopypytestraisesKeyErrorr   object)r   r   resultZbidxexpectedr   Zbidx2r   r!   r!   r"   test_loc_scalar'   s0    

(

z$TestCategoricalIndex.test_loc_scalarc              	   C   s   | j }d|jd< | }d|jd< ttddd}tdg d	it|d
}t|| | }d|jd< tddddddtj	gtj	tj	tj	tj	tj	tj	dgdt|d
}t|| d S )Nr(   r$   r/   )r.   r   Zaabbcadr   r%   r   )r(   r(   r)   r*   r+   r(   g      $@r   )r.   Cr)   r*   r+   )r   r<   )
r   r0   r4   r   r   r   r2   r3   r   nan)r   r   Zdf3Zbidx3Z	expected3Zdf4r!   r!   r"   ,test_loc_setitem_with_expansion_non_categoryG   s(    


zATestCategoricalIndex.test_loc_setitem_with_expansion_non_categoryc                 C   s>   t jtdd | jjd  W d    n1 s00    Y  d S )Nz^1$r,   r&   )r5   r6   r7   r   r0   r   r!   r!   r"   $test_loc_getitem_scalar_non_categoryd   s    z9TestCategoricalIndex.test_loc_getitem_scalar_non_categoryc                 C   s<  t tg d}|d d d }tjg dtjd}t| | tdt	dd 
di}tj|jg d	d
|d< t dtddgddgdd}|jd }t|| tdt	dd
dit	dd
dd}tj|jg d	d
|d< |jdd }t|| t dtddgddgdd}|jd }t|| d S )Nr&   r)   r*   r+   )r+   r*   r)   r&   r   valued   r&   r   )r      2   K   rD   )ZbinsD   r   rE   r/   r   r      r(   r   	      )r   r   r   arrayr   r2   Zassert_numpy_array_equalZ	__array__r   r   r1   pdZcutrC   r   ilocassert_series_equalr3   r0   )r   catreverseexpr   r:   r9   r!   r!   r"   test_slicingh   s&    

z!TestCategoricalIndex.test_slicingc                 C   s  t g dg dd}tg d}g d}t||d|d}t dd	gg dd}td
dg}ddg}t||d|d}t||dd}	tddgddgdd
d}
d}|jddd d f }t|| t|d jsJ |jdd d f }t	||
 t
|d tsJ |jd d df }t	||	 t|js2J |jd }||ksJJ |jd
dd d f }t|| t|d jsJ |jd
d d f }t	||
 t
|d tsJ |jd d df }t	||	 t|jsJ |jd }||ksJ |jd
|jd f }||ksJ |jd }||ks2J |jd }||ksJJ |jdg }||d dk }t|| ||d dk }t|| |jd }||ksJ |jd }t	||
 t
|d tsJ |jtdd }t|| t|d js J |jddg }t|| t|d js.J |jd d df }t	||	 t|js\J |jd d tddf }t|| t|d jsJ |jd d ddgf }t|| t|d jsJ d S )N)r$   cbrV   rV   rV   rV   r$   rW   rV   
categorieshijklmn)r&   r)   r*   r+   r'   r      catsvaluesr   rW   rV   r^   r_   r*   r+   re   rJ   rf   r8   )r   r   r   r)   r   )r)   r   )r^   re   r&   )r   r   r   r   rP   r2   r3   r   r   rQ   
isinstancestrr0   columnsZiatatslice)r   re   idxrf   r   Zcats2Zidx2Zvalues2Zexp_dfZexp_colZexp_rowZexp_valZres_dfZres_rowZres_colZres_valZ	exp_fancyZ	res_fancyr!   r!   r"   test_slicing_and_getting_ops   s    	





z1TestCategoricalIndex.test_slicing_and_getting_opsc                 C   sL  t g dg dd}tg d}g d}t||d|d}|jdd	d d f }tt d
d
gg ddddgdddgd}t|| |jdd	d d f j}tddgddg}t|| |j	dddf }tt g dg ddg ddd}t|| |j	dd|j
dd f }tdt g dg ddig dd}t|| d S )N)r$   rW   rW   rW   rV   rV   rV   rX   rY   r[   )r&   r)   r)   r)   r*   r+   r'   rd   r   r)   r+   rW   r^   r_   categoryr   re   rf   r\   )r$   rW   rW   )r\   r]   r^   rJ   r   r&   )r   r   r   rP   r2   r3   Zdtypesr   rQ   r0   ri   )r   re   rl   rf   r   r9   r:   r!   r!   r"   test_slicing_doc_examples   s<    z.TestCategoricalIndex.test_slicing_doc_examplesc                 C   s4   | j jddg }| j jg d }tj||dd d S )NrV   r$   )r+   r   r&   r'   TZcheck_index_type)r   r0   rP   r2   r3   )r   r9   r:   r!   r!   r"    test_loc_getitem_listlike_labels"  s    z5TestCategoricalIndex.test_loc_getitem_listlike_labelsc                 C   sH   t jttdd  | jjg d  W d    n1 s:0    Y  d S )N['e'] not in indexr,   r$   rW   er5   r6   r7   reescaper   r0   r?   r!   r!   r"   )test_loc_getitem_listlike_unused_category(  s    z>TestCategoricalIndex.test_loc_getitem_listlike_unused_categoryc                 C   s>   t jtdd | jjd  W d    n1 s00    Y  d S )Nz^'e'$r,   rt   )r5   r6   r7   r   r0   r?   r!   r!   r"   &test_loc_getitem_label_unused_category.  s    z;TestCategoricalIndex.test_loc_getitem_label_unused_categoryc                 C   sH   t jttdd  | jjddg  W d    n1 s:0    Y  d S )Nz['d'] not in indexr,   r$   r.   ru   r?   r!   r!   r"   test_loc_getitem_non_category3  s    z2TestCategoricalIndex.test_loc_getitem_non_categoryc                 C   s\   | j  }d|jd< |jg d }ttdtddd}tdg d	i|d
}t|| d S )Nr(   rt   rs   Zaaabber   r   )rZ   r   r   )r   r&   r'   r)   r*   r(   r   )r   r4   r0   r   r   r   r2   r3   )r   r   r9   	exp_indexr:   r!   r!   r"   0test_loc_setitem_expansion_label_unused_category8  s    

zETestCategoricalIndex.test_loc_setitem_expansion_label_unused_categoryc                 C   s   t g d}tg dg dd|d}|jddg }t ddg|jd}td	d
gddgd|d}tj||dd |jg d }t g d|jd}tg dg dd|d}tj||dd tjtt	
dd |jddg  W d    n1 s0    Y  d S )NrX   r&   r)   r*   r+   r'   r   r   r   r   r$   rW   rY   r&   r)   r+   r'   Trp   r$   r$   rW   )r&   r&   r)   )r+   r+   r'   ['x'] not in indexr,   x)r   r   r0   rZ   r2   r3   r5   r6   r7   rv   rw   )r   r   r   resr{   rT   r!   r!   r"   test_loc_listlike_dtypesA  s    z-TestCategoricalIndex.test_loc_listlike_dtypesc                 C   s   t g d}tg dg dd|d}|jddg }tg dg d	dt g d
d}tj||dd |jg d
 }tg dg ddt g dd}tj||dd tjtt	dd |jddg  W d    n1 s0    Y  d S )N)r$   rW   r$   r}   r~   r   r   r$   rW   r&   r*   r)   )r+   r   r'   r   Trp   r&   r*   r&   r*   r)   )r+   r   r+   r   r'   r$   r$   r$   r$   rW   r   r,   r   )
r   r   r0   r2   r3   r5   r6   r7   rv   rw   r   r   r   r   rT   r!   r!   r"   8test_loc_listlike_dtypes_duplicated_categories_and_codesX  s    
zMTestCategoricalIndex.test_loc_listlike_dtypes_duplicated_categories_and_codesc                 C   s  t g dtdd}tg dg dd|d}|jdd	g }tg d
g ddt g dtddd}tj||dd |jg d }tg dg ddt g dtddd}tj||dd tjtt	
dd |jddg  W d    n1 s0    Y  d S )Nr$   rW   r$   rV   abcderY   rA   r'   r   rc   rM   r   r   r$   rW   r   )r'   rc   r   r   Trp   r   )r'   rc   r'   rc   r   r   r   r,   r   )r   r   r   r0   r2   r3   r5   r6   r7   rv   rw   r   r!   r!   r"   (test_loc_listlike_dtypes_unused_categoryo  s     z=TestCategoricalIndex.test_loc_listlike_dtypes_unused_categoryc                 C   s   t g dtdd}tg dg dd|d}tjtdd	 |jd  W d    n1 s\0    Y  tjttd
d	 |jddg  W d    n1 s0    Y  d S )Nr   r   rY   rA   r   r   r   rt   r,   rr   r$   )	r   r   r   r5   r6   r7   r0   rv   rw   )r   r   r   r!   r!   r"   9test_loc_getitem_listlike_unused_category_raises_keyerror  s    (zNTestCategoricalIndex.test_loc_getitem_listlike_unused_category_raises_keyerrorc                 C   s\  t tjddtdtdd}| }t|j|_t|j|_t	|j
dd d f |jdd}t|j
dd d f | t	|j
d d df |jdd}t|j
d d df | ttdg d	d
}t |j
ddgd d f |j|d}t|j
ddgd d f | ttdg dd
}t |j
d d ddgf |j|d}t|j
d d ddgf | d S )Nr*   ABCZXYZr   ri   r   rJ   XZABr   r   r<   rY   r   ri   r   ZXY)r   YZr   )r   r   randomrandnr   r4   r   r   ri   r   r0   r2   rQ   r3   )r   r   cdfexpectr{   exp_columnsr!   r!   r"   test_ix_categorical_index  s     ""z.TestCategoricalIndex.test_ix_categorical_indexc                 C   sl  t tjddtdtdd}| }t|j|_t|j|_ttdddgd}t |j	dd d f |j|d	}t
|j	dd d f | ttd
ddgd}t |j	d d df |j|d}t
|j	d d df | t |j	ddgd d f |jttdd	}t
|j	ddgd d f | t |j	d d ddgf |jttdd}t
|j	d d ddgf | d S )Nr*   ZABAZXYXr   ZAAr   r   rY   r   ZXXr   r   ZAABZXXY)r   r   r   r   r   r4   r   r   ri   r0   r2   r3   )r   r   r   r{   r   r   r!   r!   r"   $test_ix_categorical_index_non_unique  s,     

z9TestCategoricalIndex.test_ix_categorical_index_non_uniquec                 C   sr   d}t jt|d  | jjdd  W d    n1 s80    Y  | jjdd }| jjg d }t|| d S )NzRcannot do slice indexing on CategoricalIndex with these indexers \[1\] of type intr,   r&   r'   rW   rV   )r)   r*   r+   )r5   r6   	TypeErrorr   r0   rP   r2   r3   )r   msgr9   r:   r!   r!   r"   test_loc_slice  s    .z#TestCategoricalIndex.test_loc_slicec                 C   sz   t ddgddgddggtg dd}|d	 }|jd
 dks@J |jd
 dksRJ |jd dksdJ |jd dksvJ d S )Nr&   r)   r*   r+   r'   r   r   r   r   r   )r   r&   )r   r   r0   rj   )r   r   sr!   r!   r"   &test_loc_and_at_with_categorical_index  s    z;TestCategoricalIndex.test_loc_and_at_with_categorical_index
idx_valuesr}   )rB   g      ?g      @      @)g      g      g      c                 c   s    | ]}t jg d |dV  qdS r}   r   Nr   rN   .0r   r!   r!   r"   	<genexpr>      zTestCategoricalIndex.<genexpr>c                 c   s    | ]}t jg d |dV  qdS )r   r   Nr   )r   Zdtypr!   r!   r"   r     r   )r&   rW   r   r   r&   r+   r   rL   i  r)   r*   r.   rH   c                 c   s    | ]}t jg d |dV  qdS r   )rO   rN   r   r!   r!   r"   r     r   )r&   r+   r   rL   z
2019-01-01)periodsZ1d)startr   c                 C   s  t ||d}tdg di|d}t|d |d }|j|d  }tdgdg|d d}t|| |j|d d	  }tdd
g|d d	 dgd}t|| |j| }tdd
g|d d	 dgd}t|| | }d|j|d < tdg di|d}t|| | }ddg|j|d d	 df< tdg di|d}t|| | }ddg|j|df< tdg di|d}t|| d S )N)orderedr   )foobarbazr   r   r&   r   rJ   r)   r   r   qux)r   r   r   qux2)r   r   r   )	r   r   rk   r0   r   r2   rQ   r3   r4   )r   r   r   Zcat_idxr   Zslr9   r:   r!   r!   r"   +test_loc_getitem_with_non_string_categories  s0    
z@TestCategoricalIndex.test_loc_getitem_with_non_string_categoriesc                 C   s   t ddtjg}ttd|d}|tj dks2J |jtj dksFJ t|}|jtjdf dksfJ |jtj d dks~J d S )Nr   r   r*   r   r)   r   )r   r   r=   r   ranger0   r   )r   ZciZserr   r!   r!   r"   !test_getitem_categorical_with_nan   s    z6TestCategoricalIndex.test_getitem_categorical_with_nanN)+__name__
__module____qualname__r#   r;   r>   r@   rU   rm   ro   rq   rx   ry   rz   r|   r   r   r   r   r   r   r   r   r5   ZmarkZparametrizer2   ZALL_INT_NUMPY_DTYPESZFLOAT_NUMPY_DTYPESr   rN   r8   r   r
   r	   ZALL_INT_EA_DTYPESrO   ZIntervalIndexZfrom_breaksZ
date_rangeZtimedelta_ranger   r   r!   r!   r!   r"   r      sd    z'		 
'r   )rv   Znumpyr   r5   Zpandas.core.dtypes.commonr   ZpandasrO   r   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr2   Zpandas.api.typesr   r   r   r!   r!   r!   r"   <module>   s   (
