o
    5³ckX  ã                   @   s†   d dl Z d dlZd dlZd dlmZ d dl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G dd„ dƒZG d	d
„ d
ƒZdS )é    N)ÚPY311)ÚCategoricalÚCategoricalIndexÚ	DataFrameÚIndexÚSeries)Úrecode_for_categoriesc                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zej dg d¢d	d
gg¡dd„ ƒZ	dd„ Z
dd„ Zdd„ Zej ddgg d¢g d¢g¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zej d g d!¢dd"gdd"gfg d!¢dd"gd"dgfg d#¢dd"gdd"gfg d#¢dd"gd"dgfg d$¢dd"gdd"gfg d$¢dd"gd"dgfg d%¢dd"gdd"gfg d%¢dd"gdd"gfg d$¢dd"gdgfg d$¢dd"gd"gfg d%¢dd"gdgfg d%¢dd"gdgfg d$¢dd"gd&d'gfg¡ej d(d)d*g¡d+d,„ ƒƒZd-d.„ Zd/d0„ Zd1d2„ Zej d3d4gd4ejgd4d4d4gg¡d5d6„ ƒZd7d8„ Zd9S ):ÚTestCategoricalAPIc                 C   sÐ   t tdƒdd}t |jtg d¢ƒ¡ |jrJ ‚t tdƒtdƒdd}t |jtg d¢ƒ¡ |jr3J ‚t tdƒdd}t |jtg d¢ƒ¡ |jsKJ ‚t tdƒtdƒdd}t |jtg d¢ƒ¡ |jsfJ ‚d S )	NÚacbF©Úordered©ÚaÚbÚcÚbca©Ú
categoriesr   )r   r   r   T)r   ÚlistÚtmÚassert_index_equalr   r   r   )ÚselfÚcat1Úcat2Úcat3Úcat4© r   ú^/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/arrays/categorical/test_api.pyÚtest_ordered_api   s   


z#TestCategoricalAPI.test_ordered_apic                 C   sæ  d}t g d¢dd}| ¡ }|jrJ ‚| ¡ }|jsJ ‚tjt|d |jdd W d   ƒ n1 s4w   Y  |jr>J ‚tjt|d |jdd W d   ƒ n1 sVw   Y  |js`J ‚| d¡jshJ ‚| d¡jrpJ ‚tjt|d |jddd W d   ƒ n1 s‰w   Y  |js“J ‚tjt|d |jddd W d   ƒ n1 s¬w   Y  |jr¶J ‚trºdnd	}t	j
t|d d|_W d   ƒ n1 sÑw   Y  t	j
t|d d|_W d   ƒ d S 1 sìw   Y  d S )
Nz¿The `inplace` parameter in pandas.Categorical.set_ordered is deprecated and will be removed in a future version. setting ordered-ness on categories will always return a new Categorical object©r   r   r   r   Tr   ©Úmatch©ÚinplaceFz8property 'ordered' of 'Categorical' object has no setterúcan't set attribute)r   Úas_unorderedr   Ú
as_orderedr   Úassert_produces_warningÚFutureWarningÚset_orderedr   ÚpytestÚraisesÚAttributeError)r   ÚmsgÚcatr   r   r   r   Útest_set_ordered&   sF   ÿ

ÿ
ÿ
ÿ
ÿ
ÿýÿ"ÿz#TestCategoricalAPI.test_set_orderedc                 C   s6  t g d¢ƒ}| g d¢¡}t | ¡ tjg d¢tjd¡ t |j	t
g d¢ƒ¡ tjg d¢tjd}t | ¡ |¡ t
g d¢ƒ}t |j	|¡ | dd„ ¡}t g d¢ƒ}t ||¡ t t¡ |jg d¢d	d
}W d   ƒ n1 ssw   Y  |d u s~J ‚t | ¡ tjg d¢tjd¡ t |j	t
g d¢ƒ¡ d S )Nr   ©é   é   é   )r1   r2   r3   r1   ©Údtyper   c                 S   s   |   ¡ S )N)Úupper)Úxr   r   r   Ú<lambda>]   s    z;TestCategoricalAPI.test_rename_categories.<locals>.<lambda>)ÚAÚBÚCr9   Tr"   )r   Úrename_categoriesr   Úassert_numpy_array_equalÚ	__array__ÚnpÚarrayÚint64r   r   r   Úobject_Úassert_categorical_equalr'   r(   )r   r.   ÚresÚexp_catÚresultÚexpectedr   r   r   Útest_rename_categoriesL   s*   ÿþÿz)TestCategoricalAPI.test_rename_categoriesÚnew_categories©r1   r2   r3   é   r1   r2   c                 C   sN   t g d¢ƒ}d}tjt|d | |¡ W d   ƒ d S 1 s w   Y  d S )Nr   zKnew categories need to have the same number of items as the old categories!r    )r   r*   r+   Ú
ValueErrorr<   ©r   rI   r.   r-   r   r   r   Ú*test_rename_categories_wrong_length_raisesl   s   ÿ"ÿz=TestCategoricalAPI.test_rename_categories_wrong_length_raisesc                 C   sB   t ddgƒ}| tddgddgd¡}t ddgƒ}t ||¡ d S )Nr   r   r   r1   ©Úindex)r   r<   r   r   rC   )r   r   rF   rG   r   r   r   Útest_rename_categories_seriesv   s   z0TestCategoricalAPI.test_rename_categories_seriesc              	   C   sD  t g d¢ƒ}| dddddœ¡}tg d¢ƒ}t |j|¡ t t¡ |jdddddœdd}W d   ƒ n1 s9w   Y  |d u sDJ ‚t |j|¡ t g d¢ƒ}| ddd	œ¡}tg d
¢ƒ}t |j|¡ t g d¢ƒ}| dddddddœ¡}tg d¢ƒ}t |j|¡ t g d¢ƒ}| dddœ¡}tg d¢ƒ}t |j|¡ d S )N©r   r   r   ÚdrK   r3   r2   r1   ©rK   r3   r2   r1   Tr"   )r   r   )r1   r   r3   rS   é   é   )r   r   r   rS   ÚeÚfrJ   )rX   Úg)r   r<   r   r   r   r   r'   r(   )r   r.   rD   rG   r   r   r   Útest_rename_categories_dict}   s*   þz.TestCategoricalAPI.test_rename_categories_dictc                 C   s¬   t g d¢dd}| ¡ }t g d¢g d¢dd}| g d¢¡}t ||¡ t ||¡ t t¡ |jg d¢dd}W d   ƒ n1 sCw   Y  |d u sNJ ‚t ||¡ d S )Nr   Tr   ©r   r   r   r   r"   )r   ÚcopyÚreorder_categoriesr   rC   r'   r(   ©r   r.   ÚoldÚnewrD   r   r   r   Útest_reorder_categories    s   ÿþz*TestCategoricalAPI.test_reorder_categoriesr   ©r   r   rS   rR   c                 C   sR   t g d¢dd}d}tjt|d | |¡ W d   ƒ d S 1 s"w   Y  d S )Nr   Tr   z=items in new_categories are not the same as in old categoriesr    )r   r*   r+   rL   r]   rM   r   r   r   Útest_reorder_categories_raises¶   s
   	"ÿz1TestCategoricalAPI.test_reorder_categories_raisesc                 C   sd  t g d¢dd}| ¡ }t g d¢g d¢dd}| d¡}t ||¡ t ||¡ | dg¡}t ||¡ t ||¡ t t¡ |jddd}W d   ƒ n1 sQw   Y  t ||¡ |d u sbJ ‚t tdƒdd}t tdƒtd	ƒdd}| tdd
gƒ¡}t ||¡ | t	 
dd
g¡¡}t ||¡ | tdd
gƒ¡}t ||¡ | dd
g¡}t ||¡ d S )Nr   Tr   rR   r   rS   r"   ÚabcÚabcderW   )r   r\   Úadd_categoriesr   rC   r'   r(   r   r   r?   r@   r   )r   r.   r_   r`   rD   rG   r   r   r   Útest_add_categoriesÄ   s4   ÿ
þz&TestCategoricalAPI.test_add_categoriesc                 C   sZ   t g d¢dd}t d¡}tjt|d | dg¡ W d   ƒ d S 1 s&w   Y  d S )NrR   Tr   z5new categories must not include old categories: {'d'}r    rS   )r   ÚreÚescaper*   r+   rL   rf   )r   r.   r-   r   r   r   Ú#test_add_categories_existing_raisesé   s
   
"ÿz6TestCategoricalAPI.test_add_categories_existing_raisesc           	      C   sþ  t g d¢dd}tg d¢ƒ}tjg d¢tjd}t t¡ |jg d¢dd}W d   ƒ n1 s1w   Y  t 	|j
|¡ t | ¡ |¡ |d u sKJ ‚| g d¢¡}t 	|j
|¡ t | ¡ |¡ tg d¢ƒ}t 	|j
|¡ t | ¡ |¡ t g d¢dd}| dg¡}t |jtjg d	¢tjd¡ | g d
¢¡}t |jtjg d¢tjd¡ t 	|j
tg d
¢ƒ¡ | g d¢¡}tg d¢ƒ}t 	|j
|¡ t g d¢g d¢dd}t |jtjg d¢tjd¡ t 	|j
tg d¢ƒ¡ tjg d¢tjd}t t |¡|¡ | g d¢¡}t |jtjg d¢tjd¡ t 	|j
tg d¢ƒ¡ tjg d¢tjd}t t |¡|¡ | ¡ dks=J ‚| ¡ dksFJ ‚|jg d¢dd}|jrUJ ‚t t |¡t |¡¡ | d¡ g d¢¡}|jrqJ ‚t t |¡t |¡¡ d S )Nr   Tr   r[   r4   r"   r   r   )r   éÿÿÿÿrk   r   rb   )r   r1   rk   r   rR   )r1   r2   r3   rK   r1   rJ   r   )r   r1   r2   r3   r   rT   )r3   r2   r1   r   r3   rK   r1   F)r   r   r?   r@   rB   r   r'   r(   Úset_categoriesr   r   r=   r>   ÚcodesÚint8Ú_codesrA   ÚasarrayÚminÚmaxr   r)   )	r   r.   Úexp_categoriesÚ
exp_valuesrD   Úexp_categories_backr   ÚexpÚc2r   r   r   Útest_set_categoriesð   sT   þz&TestCategoricalAPI.test_set_categoriesc                 C   sH   t g d¢dd}t t¡ | ¡  W d   ƒ d S 1 sw   Y  d S )Nr   Tr   )r   r   r'   r(   Úto_dense)r   r.   r   r   r   Útest_to_dense_deprecated9  s   
"ÿz+TestCategoricalAPI.test_to_dense_deprecatedz"values, categories, new_categories©r   r   r   r   )r   r   r   r   )r   r   r   rS   rW   r   TFc                 C   s4   t ||ƒ}t |||ƒ}|j||d}t ||¡ d S )Nr   )r   rl   r   rC   )r   Úvaluesr   rI   r   r   rG   rF   r   r   r   Útest_set_categories_many?  s   
z+TestCategoricalAPI.test_set_categories_manyc                 C   s:   t ddgƒ}|jdgdd}t dtjgƒ}t ||¡ d S )Nr9   r:   T)Úrename)r   rl   r?   Únanr   rC   )r   r.   rF   rG   r   r   r   Útest_set_categories_rename_less_  s   z2TestCategoricalAPI.test_set_categories_rename_lessc                 C   sŒ   t g d¢g d¢d}| g d¢¡ t g d¢tdƒd}t ||¡ t g d¢g d¢d}|jg d¢dd t g d¢tdƒd}t ||¡ d S )	Nr   rR   ©r   )r   r   rS   rW   )r   r   rS   ÚacdeT)Úfastpath)r   Ú_set_categoriesr   r   rC   )r   r.   rG   r   r   r   Útest_set_categories_privatef  s   z.TestCategoricalAPI.test_set_categories_privatec                 C   sÎ   t g d¢dd}| ¡ }t ddtjdgddgdd}| d¡}t ||¡ t ||¡ | dg¡}t ||¡ t ||¡ t t¡ |jddd}W d   ƒ n1 sTw   Y  t ||¡ |d u seJ ‚d S )	Nr   Tr   r   r   r   r   r"   )	r   r\   r?   r   Úremove_categoriesr   rC   r'   r(   r^   r   r   r   Útest_remove_categoriesr  s   
þz)TestCategoricalAPI.test_remove_categoriesÚremovalsr   c                 C   sT   t g d¢ƒ}t d¡}tjt|d | |¡ W d   ƒ d S 1 s#w   Y  d S )Nr{   z-removals must all be in old categories: {'c'}r    )r   rh   ri   r*   r+   rL   r†   )r   rˆ   r.   Úmessager   r   r   Útest_remove_categories_raisesˆ  s
   
"ÿz0TestCategoricalAPI.test_remove_categories_raisesc           
      C   sü  t g d¢g d¢d}tg d¢ƒ}tg d¢ƒ}t |j|¡ | ¡ }t |j|¡ t |j|¡ t t¡ |jdd}W d   ƒ n1 sEw   Y  t |j|¡ |d u sWJ ‚t ddd	tj	gg d¢d}| ¡ }t |jtt 
g d
¢¡ƒ¡ tj
g d¢tjd}t |j|¡ t |j|¡ dtj	ddddtj	g}t |tdƒd}| ¡ }t |jtg d¢ƒ¡ tj
g d¢tjd}t |j|¡ | ¡ |ksÉJ ‚tdƒ}	tj |	d d d… d¡ d¡}tj	|tj t|ƒd¡< t ||	d}| ¡ }| ¡ | ¡ ksüJ ‚d S )N)r   r   r   rS   r   )r   r   r   rS   rW   r   rR   Tr"   r   r   r   r   )r   r1   r2   rk   r4   ÚFÚDr:   ÚABCDEFG)r|   r   )r:   rŒ   r‹   )r2   rk   r1   r   r1   r2   rk   Úabcdefghijklmnopqrstuvwxyzr2   i'  Úobjectéd   )r   r   r   r   r   Úremove_unused_categoriesr'   r(   r?   r   r@   rn   r=   rm   r   ÚtolistÚrandomÚchoiceÚastypeÚlen)
r   r   Úexp_categories_allÚexp_categories_droppedrD   Ú	exp_codesÚvalr.   ÚoutÚalphar   r   r   Útest_remove_unused_categories  s>   þz0TestCategoricalAPI.test_remove_unused_categoriesN)Ú__name__Ú
__module__Ú__qualname__r   r/   rH   r*   ÚmarkÚparametrizerN   rQ   rZ   ra   rc   rg   rj   rx   rz   r}   r€   r…   r‡   r?   r   rŠ   r   r   r   r   r   r	      s\    & 
	#ýþ
%Iìþ 
r	   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestCategoricalAPIWithFactorc                 C   sz  |  ¡ }|js	J ‚tg d¢d|jd}tg d¢g d¢dœ|d}t ||¡ | ¡ }t t¡ |j	g d¢d	d
 W d   ƒ n1 sCw   Y  |  ¡ }tt
dƒ|jdd}tg d¢g d¢dœ|d}t ||¡ tg d¢ƒ}|  ¡ }tg d¢|jdd}tg d¢g d¢dœ|d}t ||¡ ttjdddgƒ}|  ¡ }tg d¢g d¢dœtddtjgddgddd}t ||¡ d S )Nr   r   )Únamer   )r3   r2   r3   )ç      Ø?ç      Ð?r¥   )ÚcountsÚfreqsrO   rR   Tr"   Úabcd)r   r¤   )r3   r2   r3   r   )r¥   r¦   r¥   r   ©r1   r2   r3   r1   r2   r3   r3   r2   r1   r1   r1   r0   )rU   r3   r3   )g]tÑEÝ?çtÑE]tÑ?r«   r1   r2   )r1   r2   r1   )r¦   g      à?r¦   )r   r¤   )Údescriber   r   r   r   Úassert_frame_equalr\   r'   r(   rl   r   r   r?   r   )r   ÚfactorÚdescÚ	exp_indexrG   r.   r   r   r   Útest_describe¼  sN   
ÿÿþÿþþÿþz*TestCategoricalAPIWithFactor.test_describec                 C   s^   |  ¡ }t t¡ |jg d¢dd W d   ƒ n1 sw   Y  t |jtg d¢ƒ¡ d S )NrR   Tr"   )r\   r   r'   r(   rl   r   r   r   )r   r®   r.   r   r   r   Útest_set_categories_inplaceð  s
   þz8TestCategoricalAPIWithFactor.test_set_categories_inplacec                 C   sX   t g d¢ƒ}|jd }t t¡ ||_W d   ƒ n1 sw   Y  |j|u s*J ‚d S )Nrª   r1   )r   ro   r   r'   r(   )r   r.   Ú	new_codesr   r   r   Útest_codes_setter_deprecatedù  s   
þz9TestCategoricalAPIWithFactor.test_codes_setter_deprecatedN)rž   rŸ   r    r±   r²   r´   r   r   r   r   r£   »  s    4	r£   c                   @   s^  e Zd Zdd„ Zej dddgddgddgddgfddgddgddgddgfddgddgddgddgfddgddgddgddgfg d¢ddgg d	¢g d¢fg d
¢g d	¢ddgg d¢fg d¢g d	¢g d	¢g d¢fg d¢g d	¢dgg d¢fg d¢g d	¢dgg d¢fg d¢g d	¢g g d¢fddgg ddgddgfddgddgddgddgfg¡dd„ ƒZdd„ ZdS )ÚTestPrivateCategoricalAPIc                 C   s  t ddddtjgƒ}tjg d¢dd}t |j|¡ trdnd}tj	t
|d	 tjg d
¢dd|_W d   ƒ n1 s<w   Y  |j}tj	tdd	 d|d< W d   ƒ n1 sZw   Y  d|d< tjg d¢dd}t |j|¡ d|jd< tjg d¢dd}t |j|¡ d S )Nr   r   r   )r   r1   r2   r   rk   rn   r4   z6property 'codes' of 'Categorical' object has no setterr$   r    )r   r1   r2   r   r1   z#assignment destination is read-onlyr1   rK   )r   r1   r2   r   r   r2   )r   r1   r2   r   r2   )r   r?   r   r@   r   r=   rm   r   r*   r+   r,   rL   ro   )r   r   rv   r-   rm   r   r   r   Útest_codes_immutable  s(   ÿýÿ
ÿ
z.TestPrivateCategoricalAPI.test_codes_immutablezcodes, old, new, expectedr   r1   r   r   )r   r1   r   r1   r   )r   r1   r2   r2   )r   r1   rk   rk   )r   r1   rk   )rk   r   rk   rS   )rk   rk   rk   rk   c                 C   sL   t j|t jd}t j|t jd}t|ƒ}t|ƒ}t|||ƒ}t ||¡ d S )Nr4   )r?   Ú
asanyarrayrn   r   r   r   r=   )r   rm   r_   r`   rG   rF   r   r   r   Útest_recode_to_categories#  s   z3TestPrivateCategoricalAPI.test_recode_to_categoriesc                 C   sR   d}t  |¡}t|ƒ}t j|d ddt jd}t|ƒ}t|||ƒ}t ||¡ d S )Niè  r1   rk   r4   )r?   Úaranger   Úint16r   r   r=   )r   ÚNrm   r_   rG   r`   rF   r   r   r   Útest_recode_to_categories_large<  s   
z9TestPrivateCategoricalAPI.test_recode_to_categories_largeN)	rž   rŸ   r    r¶   r*   r¡   r¢   r¸   r¼   r   r   r   r   rµ     s(    ôþ
rµ   )rh   Únumpyr?   r*   Úpandas.compatr   Úpandasr   r   r   r   r   Úpandas._testingÚ_testingr   Úpandas.core.arrays.categoricalr   r	   r£   rµ   r   r   r   r   Ú<module>   s       +H