o
    ‡Å€g§M  ã                   @   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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ÚStringDtype)Úrecode_for_categoriesc                   @   s  e Zd Zd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/d0„ Zd1d2„ Zd3d4„ Zej 	d5d6gd6ejgd6d6d6gg¡d7d8„ ƒZd9d:„ Zd;S )<ÚTestCategoricalAPIc                 C   sP   t tdƒdd}d}tjt|d | ¡  W d   ƒ d S 1 s!w   Y  d S )NÚacbF©Úorderedz5Categorical.to_list is deprecated and will be removed©Úmatch)r   ÚlistÚtmÚassert_produces_warningÚFutureWarningÚto_list)ÚselfÚcat1Úmsg© r   ú\/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/arrays/categorical/test_api.pyÚtest_to_list_deprecated   s
   
"ÿz*TestCategoricalAPI.test_to_list_deprecatedc                 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 )	Nr   Fr   ©ÚaÚbÚcÚbca©Ú
categoriesr   )r   r   r   T)r   r   r   Úassert_index_equalr!   r   r   )r   r   Úcat2Úcat3Úcat4r   r   r   Útest_ordered_api   s   


z#TestCategoricalAPI.test_ordered_apic                 C   sÎ   t g d¢dd}| ¡ }|jrJ ‚| ¡ }|jsJ ‚| d¡js"J ‚| d¡jr*J ‚tr.dnd}tjt|d d|_W d   ƒ n1 sEw   Y  tjt|d d|_W d   ƒ d S 1 s`w   Y  d S )N©r   r   r   r   Tr   Fz8property 'ordered' of 'Categorical' object has no setterúcan't set attributer   )	r   Úas_unorderedr   Ú
as_orderedÚset_orderedr   ÚpytestÚraisesÚAttributeError)r   Úcatr#   r   r   r   r   Útest_set_ordered.   s"   

ÿýÿ"ÿz#TestCategoricalAPI.test_set_orderedc                 C   s¸   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 ||¡ d S )	Nr'   ©é   é   é   )r2   r3   r4   r2   ©Údtyper   c                 S   s   |   ¡ S )N)Úupper)Úxr   r   r   Ú<lambda>T   s    z;TestCategoricalAPI.test_rename_categories.<locals>.<lambda>)ÚAÚBÚCr:   )r   Úrename_categoriesr   Úassert_numpy_array_equalÚ	__array__ÚnpÚarrayÚint64r"   r!   r   Úobject_Úassert_categorical_equal)r   r/   ÚresÚexp_catÚresultÚexpectedr   r   r   Útest_rename_categoriesC   s   ÿz)TestCategoricalAPI.test_rename_categoriesÚnew_categories©r2   r3   r4   é   r2   r3   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   rJ   r/   r   r   r   r   Ú*test_rename_categories_wrong_length_raisesX   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   r2   ©Úindex)r   r=   r   r   rD   )r   r   rG   rH   r   r   r   Útest_rename_categories_seriesb   s   z0TestCategoricalAPI.test_rename_categories_seriesc              	   C   sè   t g d¢ƒ}| dddddœ¡}tg d¢ƒ}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   ÚdrL   r4   r3   r2   ©rL   r4   r3   r2   )r   r   )r2   r   r4   rT   é   é   )r   r   r   rT   ÚeÚfrK   )rY   Úg)r   r=   r   r   r"   r!   )r   r/   rE   rH   r   r   r   Útest_rename_categories_dicti   s    z.TestCategoricalAPI.test_rename_categories_dictc                 C   sX   t g d¢dd}| ¡ }t g d¢g d¢dd}| g d¢¡}t ||¡ t ||¡ d S )Nr'   Tr   ©r   r   r   r    )r   ÚcopyÚreorder_categoriesr   rD   ©r   r/   ÚoldÚnewrE   r   r   r   Útest_reorder_categories„   s   ÿz*TestCategoricalAPI.test_reorder_categoriesr   ©r   r   rT   rS   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-   rM   r^   rN   r   r   r   Útest_reorder_categories_raises‘   s
   	"ÿz1TestCategoricalAPI.test_reorder_categories_raisesc                 C   s  t g d¢dd}| ¡ }t g d¢g d¢dd}| d¡}t ||¡ t ||¡ | dg¡}t ||¡ t ||¡ 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   rS   r    rT   ÚabcÚabcderX   )
r   r]   Úadd_categoriesr   rD   r   r   r@   rA   r   )r   r/   r`   ra   rE   rH   r   r   r   Útest_add_categoriesŸ   s*   ÿ
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 )NrS   Tr   z5new categories must not include old categories: {'d'}r   rT   )r   ÚreÚescaper,   r-   rM   rg   )r   r/   r   r   r   r   Ú#test_add_categories_existing_raises»   s
   
"ÿz6TestCategoricalAPI.test_add_categories_existing_raisesc                 C   sÄ   t tddgddƒ}tdgdd}| |¡}t tddgddtg d¢ddd}t ||¡ t tg d¢tƒ dƒ}td	gtƒ d}| |¡}t tg d¢tƒ dtg d
¢tƒ dd}t ||¡ d S )Nr2   r3   ÚInt64r5   rL   )r2   r3   rL   ©r!   ©r   r   r   rT   rc   )r   r   rg   r   rD   r   )r   r/   ÚserrG   rH   r   r   r   Ú,test_add_categories_losing_dtype_informationÂ   s   
ÿ
þz?TestCategoricalAPI.test_add_categories_losing_dtype_informationc           	      C   s¦  t g d¢dd}tg d¢ƒ}tjg d¢tjd}| g d¢¡}| 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sJ ‚|jg d¢dd}|jr)J ‚t 	t |¡t |¡¡ | d¡ g d¢¡}|jrEJ ‚t 	t |¡t |¡¡ d S )Nr'   Tr   r\   r5   r   r   )r   éÿÿÿÿrq   r   rc   )r   r2   rq   r   rS   )r2   r3   r4   rL   r2   rK   r    )r   r2   r3   r4   r   rU   )r4   r3   r2   r   r4   rL   r2   F)r   r   r@   rA   rC   Úset_categoriesr   r"   r!   r>   r?   ÚcodesÚint8Ú_codesrB   ÚasarrayÚminÚmaxr   r+   )	r   r/   Úexp_categoriesÚ
exp_valuesrE   Úexp_categories_backr   ÚexpÚc2r   r   r   Útest_set_categoriesÕ   sJ   z&TestCategoricalAPI.test_set_categoriesz"values, categories, new_categoriesrn   r   )r   r   r   r   )r   r   r   rT   rX   r   TFc                 C   s4   t ||ƒ}t |||ƒ}|j||d}t ||¡ d S )Nr   )r   rr   r   rD   )r   Úvaluesr!   rJ   r   r   rH   rG   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 )Nr:   r;   T)Úrename)r   rr   r@   Únanr   rD   )r   r/   rG   rH   r   r   r   Útest_set_categories_rename_less7  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   rS   rm   )r   r   rT   rX   )r   r   rT   ÚacdeT)Úfastpath)r   Ú_set_categoriesr   r   rD   )r   r/   rH   r   r   r   Útest_set_categories_private>  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 ||¡ d S )Nr'   Tr   r   r   r    r   )r   r]   r@   r‚   Úremove_categoriesr   rD   r_   r   r   r   Útest_remove_categoriesJ  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 )Nrn   z-removals must all be in old categories: {'c'}r   )r   ri   rj   r,   r-   rM   rˆ   )r   rŠ   r/   Úmessager   r   r   Útest_remove_categories_raisesW  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 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¡ d¡}tj|tj d¡ t|ƒd¡< t ||	d}| ¡ }| ¡ | ¡ ksÚJ ‚d S )N)r   r   r   rT   r   )r   r   r   rT   rX   rm   rS   r   r   r   r   )r   r2   r3   rq   r5   ÚFÚDr;   ÚABCDEFG)r   r!   )r;   rŽ   r   )r3   rq   r2   r   r2   r3   rq   Úabcdefghijklmnopqrstuvwxyzr3   i'  Úobjectéd   )r   r   r   r"   r!   Úremove_unused_categoriesr@   r‚   rA   rt   r>   rs   r   ÚtolistÚrandomÚdefault_rngÚchoiceÚastypeÚlen)
r   r   Úexp_categories_allÚexp_categories_droppedrE   Ú	exp_codesÚvalr/   ÚoutÚalphar   r   r   Útest_remove_unused_categories_  s4   $z0TestCategoricalAPI.test_remove_unused_categoriesN)Ú__name__Ú
__module__Ú__qualname__r   r&   r0   rI   r,   ÚmarkÚparametrizerO   rR   r[   rb   rd   rh   rk   rp   r~   r€   rƒ   r‡   r‰   r@   r‚   rŒ   r    r   r   r   r   r
      s^    
	ýþ
Bìþ 
r
   c                   @   s   e Zd Zdd„ ZdS )ÚTestCategoricalAPIWithFactorc                 C   s\  t g d¢dd}| ¡ }|jsJ ‚tg d¢d|jd}tg d¢g d¢d	œ|d
}t ||¡ | ¡ }| g d¢¡}| ¡ }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 )N)r   r   r   r   r   r   r   r   Tr   r   r!   )Únamer   )r4   r3   r4   )ç      Ø?ç      Ð?r¨   )ÚcountsÚfreqsrP   rS   Úabcd)r   r§   )r4   r3   r4   r   )r¨   r©   r¨   r   )r2   r3   r4   r2   r3   r4   r4   r3   r2   r2   r2   r1   )rV   r4   r4   )g]tÑEÝ?çtÑE]tÑ?r­   r2   r3   )r2   r3   r2   )r©   g      à?r©   )r!   r§   )r   Údescriber   r   r   r   Úassert_frame_equalr]   rr   r   r@   r‚   )r   ÚfactorÚdescÚ	exp_indexrH   r/   r   r   r   Útest_describe„  sL   
ÿÿÿþþÿþz*TestCategoricalAPIWithFactor.test_describeN)r¡   r¢   r£   r³   r   r   r   r   r¦   ƒ  s    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   r2   r3   r   rq   rt   r5   z6property 'codes' of 'Categorical' object has no setterr(   r   )r   r2   r3   r   r2   z#assignment destination is read-onlyr2   rL   )r   r2   r3   r   r   r3   )r   r2   r3   r   r3   )r   r@   r‚   rA   r   r>   rs   r   r,   r-   r.   rM   ru   )r   r   r|   r   rs   r   r   r   Útest_codes_immutable·  s(   ÿýÿ
ÿ
z.TestPrivateCategoricalAPI.test_codes_immutablezcodes, old, new, expectedr   r2   r   r   )r   r2   r   r2   r   )r   r2   r3   r3   )r   r2   rq   rq   )r   r2   rq   )rq   r   rq   rT   )rq   rq   rq   rq   c                 C   sL   t j|t jd}t j|t jd}t|ƒ}t|ƒ}t|||ƒ}t ||¡ d S )Nr5   )r@   Ú
asanyarrayrt   r   r	   r   r>   )r   rs   r`   ra   rH   rG   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è  r2   rq   r5   )r@   Úaranger   Úint16r	   r   r>   )r   ÚNrs   r`   rH   ra   rG   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´   )ri   Únumpyr@   r,   Úpandas.compatr   Úpandasr   r   r   r   r   r   Úpandas._testingÚ_testingr   Úpandas.core.arrays.categoricalr	   r
   r¦   r´   r   r   r   r   Ú<module>   s       q3