o
    dJ                     @   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   0   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   Z/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/indexing/test_categorical.pydf   
   r    c                   C   r   )
Nr   r   r   r   r   caber   r   r   r   r   r   r   r   df2!   r!   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'g d(g d)g d*g d+gd,d- ejD d.d- ejD ejg d/ed0ed1d2ed2d3ed3d4ge d5d1d1e d5d6d1e d5d7d1ge!d1d8e!d6d8e!d7d9gd:d- ej"D e#j$%g d;je#j&d<d7d=je#j'd>d7d?jd@dA Z(dBdC Z)dDS )ETestCategoricalIndexc                 C   s2  t td}|jd }ttddd|}|j|ksJ tdg dit|d}t	|| |
 }d	|jd< ttd
dd|}|j|ksJJ tdg dit|d}t	|| tjtdd |jd  W d    n1 ssw   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   locr   astyper   r   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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%   r0   )r/   r   Zaabbcadr   r&   r   )r)   r)   r*   r+   r,   r)   g      $@r   )r/   Cr*   r+   r,   )r   r>   )	r1   r5   r   r   r   r3   r4   r   nan)r:   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   >   t jtdd |jd  W d    d S 1 sw   Y  d S )Nz^1$r-   r'   r6   r7   r8   r1   )r:   r    r   r   r   $test_loc_getitem_scalar_non_categoryh   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   rG   )ZbinsD   r   rH   r0   r   r      r)   r   	      )r   r   r   arrayr   r3   Zassert_numpy_array_equalZ	__array__r   r   r2   pdcutrF   r   ilocassert_series_equalr4   r1   )r:   catreverseexpr    r<   r;   r   r   r   test_slicingl   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siJ |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
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sJ |jd }||ksJ |jdg }||d dk }t|| ||d dk }t|| |jd }||ksLJ |jd }t	||
 t
|d tsaJ |jtdd }t|| t|d jsyJ |jddg }t|| t|d jsJ |jd d df }t	||	 t|jsJ |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brZ   rZ   rZ   rZ   r%   r[   rZ   
categorieshijklmn)r'   r*   r+   r,   r(   r      catsvaluesr   r[   rZ   rb   rc   r+   r,   ri   rM   rj   r9   )r   r   r   r*   r   )r*   r   )rb   ri   r'   )r   r   r   r   rT   r3   r4   r   r   rU   
isinstancestrr1   columnsZiatatslice)r:   ri   idxrj   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%   r[   r[   r[   rZ   rZ   rZ   r\   r]   r_   )r'   r*   r*   r*   r+   r,   r(   rh   r   r*   r,   r[   rb   rc   categoryr   ri   rj   r`   )r%   r[   r[   )r`   ra   rb   rM   r   r'   )r   r   r   rT   r3   r4   Zdtypesr   rU   r1   rm   )r:   ri   rp   rj   r    r;   r<   r   r   r   test_slicing_doc_examples   s<   z.TestCategoricalIndex.test_slicing_doc_examplesc                 C   s0   |j ddg }|jg d }tj||dd d S )NrZ   r%   )r,   r   r'   r(   TZcheck_index_type)r1   rT   r3   r4   )r:   r    r;   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g d  W d    d S 1 sw   Y  d S )N['e'] not in indexr-   r%   r[   er6   r7   r8   reescaper1   r:   r#   r   r   r   )test_loc_getitem_listlike_unused_category*  s   "z>TestCategoricalIndex.test_loc_getitem_listlike_unused_categoryc                 C   rA   )Nz^'e'$r-   rx   rB   r|   r   r   r   &test_loc_getitem_label_unused_category0  s   "z;TestCategoricalIndex.test_loc_getitem_label_unused_categoryc                 C   sH   t jttdd |jddg  W d    d S 1 sw   Y  d S )Nz['d'] not in indexr-   r%   r/   ry   r|   r   r   r   test_loc_getitem_non_category5  s   "z2TestCategoricalIndex.test_loc_getitem_non_categoryc                 C   sZ   |  }d|jd< |jg d }ttdtddd}tdg d	i|d
}t|| d S )Nr)   rx   rw   Zaaabber"   r   )r^   r   r   )r   r'   r(   r*   r+   r)   r   )r5   r1   r   r   r   r3   r4   )r:   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 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    d S 1 szw   Y  d S )Nr\   r'   r*   r+   r,   r(   r   r   r   r   r%   r[   r]   r'   r*   r,   r(   Trt   r%   r%   r[   )r'   r'   r*   )r,   r,   r(   ['x'] not in indexr-   x)r   r   r1   r^   r3   r4   r6   r7   r8   rz   r{   )r:   r   r    resr   rX   r   r   r   test_loc_listlike_dtypesC  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    d S 1 spw   Y  d S )N)r%   r[   r%   r   r   r   r   r%   r[   r'   r+   r*   )r,   r   r(   r   Trt   r'   r+   r'   r+   r*   )r,   r   r,   r   r(   r%   r%   r%   r%   r[   r   r-   r   )
r   r   r1   r3   r4   r6   r7   r8   rz   r{   r:   r   r    r   rX   r   r   r   8test_loc_listlike_dtypes_duplicated_categories_and_codesZ  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    d S 1 s|w   Y  d S )Nr%   r[   r%   rZ   abcder]   rD   r(   r   rg   rP   r   r   r%   r[   r   )r(   rg   r   r   Trt   r   )r(   rg   r(   rg   r   r   r   r-   r   )r   r   r   r1   r3   r4   r6   r7   r8   rz   r{   r   r   r   r   (test_loc_listlike_dtypes_unused_categoryq  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.w   Y  tjttd
d	 |jddg  W d    d S 1 sPw   Y  d S )Nr   r   r]   rD   r   r   r   rx   r-   rv   r%   )	r   r   r   r6   r7   r8   r1   rz   r{   )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   rm   r   rM   XZABr   r   r>   r]   r   rm   r   ZXY)r   YZr   )r   r   randomrandnr   r5   r   r   rm   r   r1   r3   rU   r4   )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   r]   r   ZXXr   r   ZAABZXXY)r   r   r   r   r   r5   r   r   rm   r1   r3   r4   )r:   r    r   r   r   r   r   r   r   $test_ix_categorical_index_non_unique  s,    

"z9TestCategoricalIndex.test_ix_categorical_index_non_uniquec                 C   sl   d}t jt|d |jdd  W d    n1 sw   Y  |jdd }|jg d }t|| d S )NzRcannot do slice indexing on CategoricalIndex with these indexers \[1\] of type intr-   r'   r(   r[   rZ   )r*   r+   r,   )r6   r7   	TypeErrorr1   rT   r3   r4   )r:   r    msgr;   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s)J |jd dks2J |jd dks;J d S )Nr'   r*   r+   r,   r(   r   r   r   r   r   )r   r'   )r   r   r1   rn   )r:   r    sr   r   r   &test_loc_and_at_with_categorical_index  s   z;TestCategoricalIndex.test_loc_and_at_with_categorical_index
idx_valuesr   )rE   g      ?g      @      @)g      g      g      c                 c   "    | ]}t jg d |dV  qdS r   r   Nr   rQ   .0r   r   r   r   	<genexpr>       zTestCategoricalIndex.<genexpr>c                 c   r   )r   r   Nr   )r   Zdtypr   r   r   r     r   )r'   r[   r   r   r'   r,   r   rO   i  r*   r+   r/   rK   c                 c   r   r   )rR   rQ   r   r   r   r   r     r   )r'   r,   r   rO   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   rM   r*   r   r   qux)r   r   r   qux2)r   r   r   )	r   r   ro   r1   r   r3   rU   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sJ |jtj dks#J t|}|jtjdf dks3J |jtj d dks?J d S )Nr   r   r+   r   r*   r   )r   r   r?   r   ranger1   r   )r:   ciZserr    r   r   r   !test_getitem_categorical_with_nan!  s   z6TestCategoricalIndex.test_getitem_categorical_with_nanN)*__name__
__module____qualname__r=   r@   rC   rY   rq   rs   ru   r}   r~   r   r   r   r   r   r   r   r   r   r   r6   markZparametrizer3   ZALL_INT_NUMPY_DTYPESZFLOAT_NUMPY_DTYPESr   rQ   r9   r   r
   r	   ZALL_INT_EA_DTYPESrR   ZIntervalIndexZfrom_breaksZ
date_rangeZtimedelta_ranger   r   r   r   r   r   r$   +   sd     y&		 
'r$   )rz   numpyr   r6   Zpandas.core.dtypes.commonr   ZpandasrR   r   r   r   r   r   r   r	   r
   Zpandas._testingZ_testingr3   Zpandas.api.typesr   r   Zfixturer    r#   r$   r   r   r   r   <module>   s    (

	
	