U
    ¾mœd¡J  ã                   @   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 ejdd„ ƒZejdd„ ƒZG d	d
„ d
ƒZdS )é    N)Úis_categorical_dtype)ÚCategoricalÚCategoricalIndexÚ	DataFrameÚIndexÚIntervalÚSeriesÚ	TimedeltaÚ	Timestamp)ÚCategoricalDtypec                   C   s0   t dtjddd�ittdƒttdƒƒdd�d	�S )
NÚAé   Úint64©ÚdtypeÚaabbcaÚcabÚB©r   Úname©Úindex©r   ÚnpÚaranger   ÚlistÚCDT© r   r   ú_/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/indexing/test_categorical.pyÚdf   s     ÿür   c                   C   s0   t dtjddd�ittdƒttdƒƒdd�d	�S )
Nr   r   r   r   r   Úcaber   r   r   r   r   r   r   r   Údf2!   s     ÿür!   c                   @   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ej d'd(d)d*gd+d,d-gd.d/d0gd1d2d3gfd4d5„ ejD ƒd6d5„ ejD ƒejd(d7d0ged8�ed(d9ƒed9d:ƒ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d?d5„ ej"D ƒe#j$ %d(d9d:d;g¡je#j&d@d*dA�je#j'dBd*dC�jf•¡dDdE„ ƒZ(dFdG„ Z)dHS )IÚTestCategoricalIndexc              	   C   s(  t tdƒƒ}|jd }ttdƒdd� |¡}|j|ks:t‚tdddd	git|ƒd
�}t	 
||¡ | ¡ }d|jd< ttdƒdd� |¡}|j|ks–t‚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   Úlocr   Úastyper   ÚAssertionErrorr   r   ÚtmÚassert_frame_equalÚcopyÚpytestÚraisesÚKeyErrorr   Úobject)Úselfr   r   ÚresultZbidxÚexpectedZbidx2r!   r   r   r   Útest_loc_scalar,   s2    

 ÿü

z$TestCategoricalIndex.test_loc_scalarc              	   C   s¼   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/   r4   r   r   r   r2   r3   r   Únan)r9   r   Zdf3Zbidx3Z	expected3Zdf4r   r   r   Ú,test_loc_setitem_with_expansion_non_categoryL   s(    

 ÿü
þûzATestCategoricalIndex.test_loc_setitem_with_expansion_non_categoryc              	   C   s(   t jtdd�� |jd  W 5 Q R X d S )Nz^1$r+   r%   ©r5   r6   r7   r/   )r9   r   r   r   r   Ú$test_loc_getitem_scalar_non_categoryh   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   Úvalueéd   r   r   é   é2   éK   )ZbinsÚDé   r.   ©r   r   é   r'   r   é	   é   )r   r   r   Úarrayr   r2   Zassert_numpy_array_equalZ	__array__r   r   r0   ÚpdÚcutrC   r   ÚilocÚassert_series_equalr3   r/   )r9   ÚcatÚreverseÚexpr   r;   r:   r   r   r   Útest_slicingl   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ƒsôt	‚|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ƒ�s¢t	‚|jdd d …f }t 
||
¡ t|d tƒ�sÔt	‚|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�sÈt	‚|jd }t 
||
¡ t|d tƒ�sòt	‚|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ƒ�s¶t	‚|jd d …ddgf }t ||¡ t|d jƒ�sìt	‚d S )Nr#   ÚcÚb©Ú
categoriesÚhÚiÚjÚkÚlÚmÚnr%   r(   r)   r*   r&   r   é   ©ÚcatsÚvaluesr   rd   rJ   re   r8   )r   r   r   r   )r(   r   )r]   rd   )r   r   r   r   rQ   r2   r3   r   r   r1   rR   Ú
isinstanceÚstrr/   ÚcolumnsZiatÚatÚslice)r9   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   r2   r3   Zdtypesr   rR   r/   rh   )r9   rd   rk   re   r   r:   r;   r   r   r   Útest_slicing_doc_examplesþ   s>     ÿþûýþz.TestCategoricalIndex.test_slicing_doc_examplesc                 C   s4   |j ddg }|jddddg }tj||dd� d S )	NrW   r#   r*   r   r%   r&   T©Zcheck_index_type)r/   rQ   r2   r3   )r9   r   r:   r;   r   r   r   Ú test_loc_getitem_listlike_labels$  s    z5TestCategoricalIndex.test_loc_getitem_listlike_labelsc              	   C   s4   t jtt d¡d�� |jdddg  W 5 Q R X d S )Nú['e'] not in indexr+   r#   rX   Úe©r5   r6   r7   ÚreÚescaper/   ©r9   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d  W 5 Q R X d S )Nz^'e'$r+   rr   r@   rv   r   r   r   Ú&test_loc_getitem_label_unused_category0  s    z;TestCategoricalIndex.test_loc_getitem_label_unused_categoryc              	   C   s2   t jtt d¡d�� |jddg  W 5 Q R X d S )Nz['d'] not in indexr+   r#   r-   rs   rv   r   r   r   Útest_loc_getitem_non_category5  s    z2TestCategoricalIndex.test_loc_getitem_non_categoryc                 C   sd   |  ¡ }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   )r4   r/   r   r   r   r2   r3   )r9   r!   r   r:   Ú	exp_indexr;   r   r   r   Ú0test_loc_setitem_expansion_label_unused_category:  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   r/   rZ   r2   r3   r5   r6   r7   rt   ru   )r9   r   r   Úresrz   rU   r   r   r   Útest_loc_listlike_dtypesC  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   r/   r2   r3   r5   r6   r7   rt   ru   ©r9   r   r   r   rU   r   r   r   Ú8test_loc_listlike_dtypes_duplicated_categories_and_codesZ  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   r/   r2   r3   r5   r6   r7   rt   ru   r�   r   r   r   Ú(test_loc_listlike_dtypes_unused_categoryq  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   r5   r6   r7   r/   rt   ru   )r9   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   r4   r   r   rh   r   r/   r2   rR   r3   )r9   r   ÚcdfÚexpectrz   Ú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   rh   r/   r2   r3   )r9   r   rŽ   rz   r�   r�   r   r   r   Ú$test_ix_categorical_index_non_unique©  s,     
ý
ýz9TestCategoricalIndex.test_ix_categorical_index_non_uniquec              	   C   sZ   d}t jt|d�� |jdd…  W 5 Q R X |jdd… }|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*   )r5   r6   Ú	TypeErrorr/   rQ   r2   r3   )r9   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   r/   r1   ri   )r9   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   r/   r   r2   rR   r3   r4   )r9   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   Úranger1   r/   r   )r9   ÚciZserr   r   r   r   Ú!test_getitem_categorical_with_nan!  s    z6TestCategoricalIndex.test_getitem_categorical_with_nanN)*Ú__name__Ú
__module__Ú__qualname__r<   r?   rA   rV   rl   rn   rp   rw   rx   ry   r{   r€   r‚   r„   r…   r‘   r’   r•   r—   r5   Ú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"   +   sR    y&	û ñëþ
'r"   )rt   Ú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   Zfixturer   r!   r"   r   r   r   r   Ú<module>   s   (

	
	