a
    Pªf§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   sN   t tdƒdd}d}tjt|d | ¡  W d   ƒ n1 s@0    Y  d S )NÚacbF©Úorderedz5Categorical.to_list is deprecated and will be removed©Úmatch)r   ÚlistÚtmZassert_produces_warningÚFutureWarningZto_list)ÚselfÚcat1Úmsg© r   úa/var/www/ai-form-bot/venv/lib/python3.9/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r0J ‚t tdƒtdƒdd}t |jtg d¢ƒ¡ |jrfJ ‚t tdƒdd}t |jtg d¢ƒ¡ |js–J ‚t tdƒtdƒdd}t |jtg d¢ƒ¡ |jsÌJ ‚d S )	Nr   Fr   ©ÚaÚbÚcZbca©Ú
categoriesr   )r   r   r   T)r   r   r   Úassert_index_equalr   r   r   )r   r   Úcat2Zcat3Zcat4r   r   r   Útest_ordered_api   s    


z#TestCategoricalAPI.test_ordered_apic                 C   sÌ   t g d¢dd}| ¡ }|jr"J ‚| ¡ }|js4J ‚| d¡jsDJ ‚| d¡jrTJ ‚tr\dnd}tjt|d d|_W d   ƒ n1 sŠ0    Y  tjt|d d|_W d   ƒ n1 s¾0    Y  d S )N©r   r   r   r   Tr   Fz8property 'ordered' of 'Categorical' object has no setterúcan't set attributer   )	r   Zas_unorderedr   Z
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"   ©é   é   é   )r+   r,   r-   r+   ©Zdtyper   c                 S   s   |   ¡ S )N)Úupper)Úxr   r   r   Ú<lambda>T   ó    z;TestCategoricalAPI.test_rename_categories.<locals>.<lambda>)ÚAÚBÚCr3   )r   Úrename_categoriesr   Úassert_numpy_array_equalÚ	__array__ÚnpÚarrayÚint64r   r   r   Úobject_Úassert_categorical_equal)r   r(   ÚresZexp_catÚresultÚexpectedr   r   r   Útest_rename_categoriesC   s    ÿz)TestCategoricalAPI.test_rename_categoriesÚnew_categories©r+   r,   r-   é   r+   r,   c                 C   sL   t g d¢ƒ}d}tjt|d | |¡ W d   ƒ n1 s>0    Y  d S )Nr"   zKnew categories need to have the same number of items as the old categories!r   )r   r%   r&   Ú
ValueErrorr6   ©r   rB   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   r+   ©Úindex)r   r6   r   r   r=   )r   r   r?   r@   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   ÚdrD   r-   r,   r+   ©rD   r-   r,   r+   )r   r   )r+   r   r-   rL   é   é   )r   r   r   rL   ÚeÚfrC   )rQ   Úg)r   r6   r   r   r   r   )r   r(   r>   r@   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   r=   ©r   r(   ÚoldÚnewr>   r   r   r   Útest_reorder_categories„   s    ÿz*TestCategoricalAPI.test_reorder_categoriesr   ©r   r   rL   rK   c                 C   sP   t g d¢dd}d}tjt|d | |¡ W d   ƒ n1 sB0    Y  d S )Nr"   Tr   z=items in new_categories are not the same as in old categoriesr   )r   r%   r&   rE   rV   rF   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   rK   r   rL   ÚabcZabcderP   )
r   rU   Úadd_categoriesr   r=   r   r   r9   r:   r   )r   r(   rX   rY   r>   r@   r   r   r   Útest_add_categoriesŸ   s*    ÿ
z&TestCategoricalAPI.test_add_categoriesc                 C   sX   t g d¢dd}t d¡}tjt|d | dg¡ W d   ƒ n1 sJ0    Y  d S )NrK   Tr   z5new categories must not include old categories: {'d'}r   rL   )r   ÚreÚescaper%   r&   rE   r^   )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 )Nr+   r,   ZInt64r.   rD   )r+   r,   rD   ©r   ©r   r   r   rL   r[   )r   r   r^   r   r=   r   )r   r(   Zserr?   r@   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s4J ‚|jg d¢dd}|jrRJ ‚t 	t |¡t |¡¡ | d¡ g d¢¡}|jrŠJ ‚t 	t |¡t |¡¡ d S )Nr"   Tr   rT   r.   r   r   )r   éÿÿÿÿrf   r   r[   )r   r+   rf   r   rK   )r+   r,   r-   rD   r+   rC   r   )r   r+   r,   r-   r   rM   )r-   r,   r+   r   r-   rD   r+   F)r   r   r9   r:   r<   Úset_categoriesr   r   r   r7   r8   ÚcodesÚint8Ú_codesr;   ZasarrayÚminÚmaxr   r$   )	r   r(   Zexp_categoriesZ
exp_valuesr>   Zexp_categories_backr   ÚexpÚc2r   r   r   Útest_set_categoriesÕ   sJ    z&TestCategoricalAPI.test_set_categoriesz"values, categories, new_categoriesrd   r   )r   r   r   r   )r   r   r   rL   rP   r   TFc                 C   s4   t ||ƒ}t |||ƒ}|j||d}t ||¡ d S )Nr   )r   rg   r   r=   )r   Úvaluesr   rB   r   r   r@   r?   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 )Nr3   r4   T)Úrename)r   rg   r9   Únanr   r=   )r   r(   r?   r@   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   rK   rc   )r   r   rL   rP   )r   r   rL   ZacdeT)Zfastpath)r   Z_set_categoriesr   r   r=   )r   r(   r@   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   rU   r9   rs   Úremove_categoriesr   r=   rW   r   r   r   Útest_remove_categoriesJ  s    
z)TestCategoricalAPI.test_remove_categoriesÚremovalsr   c                 C   sR   t g d¢ƒ}t d¡}tjt|d | |¡ W d   ƒ n1 sD0    Y  d S )Nrd   z-removals must all be in old categories: {'c'}r   )r   r`   ra   r%   r&   rE   rv   )r   rx   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sDJ ‚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   rL   r   )r   r   r   rL   rP   rc   rK   r   r   r   r   )r   r+   r,   rf   r.   ÚFÚDr4   ZABCDEFG)rp   r   )r4   r|   r{   )r,   rf   r+   r   r+   r,   rf   Úabcdefghijklmnopqrstuvwxyzr,   i'  Úobjectéd   )r   r   r   r   r   Zremove_unused_categoriesr9   rs   r:   ri   r7   rh   r   ÚtolistÚrandomZdefault_rngÚchoiceZastypeÚlen)
r   r   Zexp_categories_allZexp_categories_droppedr>   Z	exp_codesÚvalr(   ÚoutÚalphar   r   r   Útest_remove_unused_categories_  s4    $z0TestCategoricalAPI.test_remove_unused_categoriesN)Ú__name__Ú
__module__Ú__qualname__r   r!   r)   rA   r%   ÚmarkÚparametrizerG   rJ   rS   rZ   r\   r_   rb   re   ro   rq   rt   ru   rw   r9   rs   rz   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   )r-   r,   r-   )ç      Ø?ç      Ð?r   )ÚcountsZfreqsrH   rK   Úabcd)r   rŽ   )r-   r,   r-   r   )r   r   r   r   )r+   r,   r-   r+   r,   r-   r-   r,   r+   r+   r+   r*   )rN   r-   r-   )g]tÑEÝ?çtÑE]tÑ?r“   r+   r,   )r+   r,   r+   )r   g      à?r   )r   rŽ   )r   Zdescriber   r   r   r   Zassert_frame_equalrU   rg   r   r9   rs   )r   ÚfactorÚdescZ	exp_indexr@   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 sx0    Y  |j}tj	tdd	 d|d< W d   ƒ n1 s´0    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   r+   r,   r   rf   ri   r.   z6property 'codes' of 'Categorical' object has no setterr#   r   )r   r+   r,   r   r+   z#assignment destination is read-onlyr+   rD   )r   r+   r,   r   r   r,   )r   r+   r,   r   r,   )r   r9   rs   r:   r   r7   rh   r   r%   r&   r'   rE   rj   )r   r   rm   r   rh   r   r   r   Útest_codes_immutable·  s$    ÿý2&
z.TestPrivateCategoricalAPI.test_codes_immutablezcodes, old, new, expectedr   r+   r   r   )r   r+   r   r+   r   )r   r+   r,   r,   )r   r+   rf   rf   )r   r+   rf   )rf   r   rf   rL   )rf   rf   rf   rf   c                 C   sL   t j|t jd}t j|t jd}t|ƒ}t|ƒ}t|||ƒ}t ||¡ d S )Nr.   )r9   Z
asanyarrayri   r   r	   r   r7   )r   rh   rX   rY   r@   r?   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è  r+   rf   r.   )r9   Zaranger   Zint16r	   r   r7   )r   ÚNrh   rX   r@   rY   r?   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—   )r`   Únumpyr9   r%   Zpandas.compatr   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.arrays.categoricalr	   r
   r   r—   r   r   r   r   Ú<module>   s      q3