U
    +ifJ                     @   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)d*d+d,gd-d.d/gd0d1d2gd3d4d5gfd6d7 ejD d8d7 ejD ejd*d9d2ged:e d*d;e d;d<e d<d=ge!d>d*d*e!d>d+d*e!d>d,d*ge"d*d?e"d+d?e"d,d@gfdAd7 ej#D e$j%&d*d;d<d=gje$j'dBd,dCje$j(dDd,dEjfdFdG Z)dHdI Z*dJS )K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!   Y/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/indexing/test_categorical.pysetup_method   s      z!TestCategoricalIndex.setup_methodc              	   C   s,  t td}| jjd }ttddd|}|j|ks<ttdddd	git	|d
}t
|| | j }d|jd< ttddd|}|j|ksttdddddddgit	|d
}t
|| tjtdd |jd  W 5 Q R X | }| }|jt|_d|jd< d|jd< t
|| d S )Nr   aZaaar   r   r   r         r      r            z^'d'$matchd
   )r   r   r   locr   astyper   AssertionErrorr   r   tmassert_frame_equalcopypytestraisesKeyErrorr   object)r   r   resultZbidxexpectedr   Zbidx2r   r!   r!   r"   test_loc_scalar'   s2    

 

z$TestCategoricalIndex.test_loc_scalarc              	   C   s   | j }d|jd< | }d|jd< ttddd}tdddd	d
dddg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+   g      $@r   )r.   C)r   r=   )
r   r0   r5   r   r   r   r3   r4   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 5 Q R X d S )Nz^1$r,   r&   )r6   r7   r8   r   r0   r   r!   r!   r"   $test_loc_getitem_scalar_non_categoryd   s    z9TestCategoricalIndex.test_loc_getitem_scalar_non_categoryc                 C   sP  t tddddg}|d d d }tjddddgtjd}t| | tdt	dd 
d	i}tj|jd
ddddg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d
ddddgd|d< |jdd }t|| t dtd
dgddgdd}|jd }t|| d S )Nr&   r)   r*   r+   r   valued   r   r      2   K   )ZbinsD   r/   r   r      r(   r   	      )r   r   r   arrayr   r3   Zassert_numpy_array_equalZ	__array__r   r   r1   pdcutrC   r   ilocassert_series_equalr4   r0   )r   catreverseexpr   r;   r:   r!   r!   r"   test_slicingh   s&    

z!TestCategoricalIndex.test_slicingc                 C   s  t dddddddgdddgd}tddddd	d
dg}dddddddg}t||d|d}t ddgdddg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st	|jdd d f }t
||
 t|d ts&t	|jd d df }t
||	 t|jsTt	|jd }||kslt	|jddd d f }t|| t|d jst	|jdd d f }t
||
 t|d tst	|jd d df }t
||	 t|jst	|jd }||kst	|jd|jd f }||ks<t	|jd }||ksTt	|jd }||kslt	|jdg }||d dk }t|| ||d dk }t|| |jd }||kst	|jd }t
||
 t|d tst	|jtdd }t|| t|d js"t	|jddg }t|| t|d jsPt	|jd d df }t
||	 t|js~t	|jd d tddf }t|| t|d jst	|jd d ddgf }t|| t|d jst	d S )Nr$   cb
categorieshijklmnr&   r)   r*   r+   r'   r      catsvaluesr   rd   rJ   re   r9   )r   r   r   r   )r)   r   )r]   rd   )r   r   r   r   rQ   r3   r4   r   r   r2   rR   
isinstancestrr0   columnsZiatatslice)r   rd   idxre   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   sz  t dddddddgdddgd}tddddd	d
dg}dddddddg}t||d|d}|jddd d f }tt ddgdddg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 dddgdddgddddgdd}t|| |j	dd|j
dd f }tdt dddgdddgdidddgd}t|| d S )Nr$   rX   rW   rY   r[   r\   r]   r^   r_   r`   ra   r&   r)   r*   r+   r'   rc   r   categoryr   rd   re   rJ   r   )r   r   r   rQ   r3   r4   Zdtypesr   rR   r0   rh   )r   rd   rk   re   r   r:   r;   r!   r!   r"   test_slicing_doc_examples   s>     z.TestCategoricalIndex.test_slicing_doc_examplesc                 C   s8   | j jddg }| j jddddg }tj||dd d S )	NrW   r$   r+   r   r&   r'   TZcheck_index_type)r   r0   rQ   r3   r4   )r   r:   r;   r!   r!   r"    test_loc_getitem_listlike_labels"  s    z5TestCategoricalIndex.test_loc_getitem_listlike_labelsc              	   C   s6   t jttdd | jjdddg  W 5 Q R X d S )N['e'] not in indexr,   r$   rX   er6   r7   r8   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 5 Q R X d S )Nz^'e'$r,   rr   )r6   r7   r8   r   r0   r@   r!   r!   r"   &test_loc_getitem_label_unused_category.  s    z;TestCategoricalIndex.test_loc_getitem_label_unused_categoryc              	   C   s4   t jttdd | jjddg  W 5 Q R X d S )Nz['d'] not in indexr,   r$   r.   rs   r@   r!   r!   r"   test_loc_getitem_non_category3  s    z2TestCategoricalIndex.test_loc_getitem_non_categoryc                 C   sf   | j  }d|jd< |jdddg }ttdtddd}td	d
dddddgi|d}t|| d S )Nr(   rr   r$   rX   Zaaabber   r   )rZ   r   r   r   r&   r'   r)   r*   r   )r   r5   r0   r   r   r   r3   r4   )r   r   r:   	exp_indexr;   r!   r!   r"   0test_loc_setitem_expansion_label_unused_category8  s    

zETestCategoricalIndex.test_loc_setitem_expansion_label_unused_categoryc              	   C   s   t dddg}tdddgddd	g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dddg }t dddg|jd}tdddgdddgd
|d}tj||dd tjtt	
dd |jddg  W 5 Q R X d S )Nr$   rX   rW   r&   r)   r*   r+   r'   r   r   r   r   rY   Tro   ['x'] not in indexr,   x)r   r   r0   rZ   r3   r4   r6   r7   r8   rt   ru   )r   r   r   resry   rU   r!   r!   r"   test_loc_listlike_dtypesA  s    z-TestCategoricalIndex.test_loc_listlike_dtypesc              	   C   s   t dddg}tdddgdddgd	|d
}|jddg }tdddgdddgd	t dddgd
}tj||dd |jdddg }tdddddgdddddgd	t dddddgd
}tj||dd tjtt	dd |jddg  W 5 Q R X d S )Nr$   rX   r&   r)   r*   r+   r'   r   r{   r   Tro   r|   r,   r}   )
r   r   r0   r3   r4   r6   r7   r8   rt   ru   r   r   r   r~   rU   r!   r!   r"   8test_loc_listlike_dtypes_duplicated_categories_and_codesX  s      zMTestCategoricalIndex.test_loc_listlike_dtypes_duplicated_categories_and_codesc              	   C   s  t ddddgtdd}tdddd	gd
dddgd|d}|jddg }tdddgd
ddgdt dddgtddd}tj||dd |jdddg }tdddddgd
dd
ddgdt dddddgtddd}tj||dd tjtt	
dd |jddg  W 5 Q R X d S )Nr$   rX   rW   abcderY   r&   r)   r*   r+   r'   r   rb   rM   r{   r   Tro   r|   r,   r}   )r   r   r   r0   r3   r4   r6   r7   r8   rt   ru   r   r!   r!   r"   (test_loc_listlike_dtypes_unused_categoryo  s     "z=TestCategoricalIndex.test_loc_listlike_dtypes_unused_categoryc              	   C   s   t ddddgtdd}tdddd	gd
dddgd|d}tjtdd |jd  W 5 Q R X tjttdd |jddg  W 5 Q R X d S )Nr$   rX   rW   r   rY   r&   r)   r*   r+   r'   r   rb   rM   r{   r   rr   r,   rq   )	r   r   r   r6   r7   r8   r0   rt   ru   )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dd	d
gd}t |j
dd	gd d f |j|d}t|j
dd	gd d f | ttddddg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   rh   r   rJ   XZABr   r=   rY   rh   r   ZXYYZ)r   r   randomrandnr   r5   r   r   rh   r   r0   r3   rR   r4   )r   r   cdfexpectry   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   r5   r   r   rh   r0   r3   r4   )r   r   r   ry   r   r   r!   r!   r"   $test_ix_categorical_index_non_unique  s,     

z9TestCategoricalIndex.test_ix_categorical_index_non_uniquec              	   C   s`   d}t jt|d | jjdd  W 5 Q R X | jjdd }| jjddd	g }t|| d S )
NzRcannot do slice indexing on CategoricalIndex with these indexers \[1\] of type intr,   r&   r'   rX   rW   r)   r*   r+   )r6   r7   	TypeErrorr   r0   rQ   r3   r4   )r   msgr:   r;   r!   r!   r"   test_loc_slice  s    z#TestCategoricalIndex.test_loc_slicec                 C   s|   t ddgddgddggtddd	gd
}|d }|jd dksBt|jd dksTt|jd dksft|jd dksxtd S )Nr&   r)   r*   r+   r'   r   r   r   r=   r   r   )r   r&   )r   r   r0   r2   ri   )r   r   sr!   r!   r"   &test_loc_and_at_with_categorical_index  s     z;TestCategoricalIndex.test_loc_and_at_with_categorical_index
idx_valuesr&   r)   r*   rB         ?      @      @g      g      g      c                 c   s"   | ]}t jd ddg|dV  qdS r&   r)   r*   r   Nr   rN   .0r   r!   r!   r"   	<genexpr>  s     zTestCategoricalIndex.<genexpr>c                 c   s"   | ]}t jd ddg|dV  qdS )r   r   r   r   Nr   )r   Zdtypr!   r!   r"   r     s     rX   r   r+   r   rL   i  r.   rH   c                 c   s"   | ]}t jd ddg|dV  qdS r   )rO   rN   r   r!   r!   r"   r     s     z
2019-01-01)periodsZ1d)startr   c                 C   s  t ||d}tddddg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dddgi|d}t|| | }ddg|j|d d
 df< tddddgi|d}t|| | }ddg|j|df< tddddgi|d}t|| d S )N)orderedr   ZfoobarZbazr   r   r&   rJ   r)   r   ZquxZqux2)	r   r   rj   r0   r   r3   rR   r4   r5   )r   r   r   Zcat_idxr   slr:   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s2t|jtj dksFtt|}|jtjdf dksft|jtj d dks~td S )Nr   r   r*   r   r)   r   )r   r   r>   r   ranger2   r0   r   )r   ciZserr   r!   r!   r"   !test_getitem_categorical_with_nan   s    z6TestCategoricalIndex.test_getitem_categorical_with_nanN)+__name__
__module____qualname__r#   r<   r?   rA   rV   rl   rn   rp   rv   rw   rx   rz   r   r   r   r   r   r   r   r   r6   markZparametrizer3   ZALL_INT_NUMPY_DTYPESZFLOAT_NUMPY_DTYPESr   rN   r9   r   r
   r	   ZALL_INT_EA_DTYPESrO   ZIntervalIndexZfrom_breaksZ
date_rangeZtimedelta_ranger   r   r!   r!   r!   r"   r      sT    z'	 
'r   )rt   numpyr   r6   Zpandas.core.dtypes.commonr   ZpandasrO   r   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr3   Zpandas.api.typesr   r   r   r!   r!   r!   r"   <module>   s   (
