a
    oÝEb­D  ã                   @   sB  d dl mZ 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 d dlmZ edd„ ƒZdd„ Zej d	ejejfejejfejejfejejfejejfejejfej ej!fej"ej#fej$ej%fej&ej'fej(ej)fej*ej+fej,ej-fej.ej/fg¡G d
d„ dƒƒZ0G dd„ dƒZ1dd„ Z2dd„ Z3dd„ Z4dd„ Z5dd„ Z6ej d	ejejfej$ej%fejejfejejfg¡G dd„ dƒƒZ7dd„ Z8dd„ Z9dd„ Z:ej d ejejejejejejej!ej#ej%ej'ej)ej+ej-ej/g¡G d!d"„ d"ƒƒZ;d#d$„ Z<d%d&„ Z=ej d ejej%ejejg¡G d'd(„ d(ƒƒZ>d)d*„ Z?d+d,„ Z@dS )-é    )ÚcontextmanagerN)Ú	hashtable)Úisinc                   c   s*   t  ¡  zd V  W t  ¡  n
t  ¡  0 d S ©N)ÚtracemallocÚstartÚstop© r	   r	   ú`/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/tests/libs/test_hashtable.pyÚactivated_tracemalloc   s    r   c                  C   s4   t  ¡ } |  t  dt ¡ ¡f¡} ttdd„ | jƒƒS )NTc                 S   s   | j S r   )Úsize)Úxr	   r	   r
   Ú<lambda>   ó    z,get_allocated_khash_memory.<locals>.<lambda>)	r   Ztake_snapshotZfilter_tracesZDomainFilterÚhtZget_hashtable_trace_domainÚsumÚmapZtraces)Zsnapshotr	   r	   r
   Úget_allocated_khash_memory   s
    ÿr   ztable_type, dtypec                   @   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S )ÚTestHashTablec                 C   s†  d}|dƒ}t |ƒdksJ ‚||vs(J ‚| |d¡ t |ƒdksDJ ‚||v sPJ ‚| |¡dksbJ ‚| |d d¡ ||v s~J ‚|d |v sŽJ ‚t |ƒdksžJ ‚| |¡dks°J ‚| |d ¡dksÆJ ‚| |d¡ ||v sÞJ ‚|d |v sîJ ‚t |ƒdksþJ ‚| |¡dk�sJ ‚| |d ¡dk�s*J ‚|d |v�s<J ‚tjtt|d ƒd	�� | |d ¡ W d   ƒ n1 �sx0    Y  d S )
Né   é7   r   é*   é   é)   é   é   ©Úmatch)ÚlenÚset_itemÚget_itemÚpytestÚraisesÚKeyErrorÚstr©ÚselfÚ
table_typeÚdtypeÚindexÚtabler	   r	   r
   Útest_get_set_contains_len3   s.    z'TestHashTable.test_get_set_contains_lenc           	      C   s‚   |t jkr~d}|ƒ }t |¡ |¡}t |¡ tj¡| }||j_||j_| ||¡ t	|ƒD ]}| 
|| ¡|| ks^J ‚q^d S )NéM   )r   ÚPyObjectHashTableÚnpÚarangeÚastypeÚint64ÚflagsÚ	writeabler   Úranger    )	r&   r'   r(   ÚwritableÚNr*   ÚkeysÚvalsÚir	   r	   r
   Útest_mapP   s    
zTestHashTable.test_mapc                 C   sX   d}|ƒ }t  |¡|  |¡}||j_| |¡ t|ƒD ]}| || ¡|ks8J ‚q8d S )Né   )r.   r/   r0   r2   r3   Úmap_locationsr4   r    )r&   r'   r(   r5   r6   r*   r7   r9   r	   r	   r
   Útest_map_locations]   s    
z TestHashTable.test_map_locationsc           	      C   sd   d}|ƒ }t  |¡|  |¡}||j_| |¡ | |¡}t  |¡}t | t j	¡| t j	¡¡ d S )Né   )
r.   r/   r0   r2   r3   r<   ÚlookupÚtmÚassert_numpy_array_equalr1   )	r&   r'   r(   r5   r6   r*   r7   ÚresultÚexpectedr	   r	   r
   Útest_lookupf   s    


zTestHashTable.test_lookupc                 C   sn   |t jt jfv rd}nd}|ƒ }t  |¡|  |¡}| |¡ t  |¡ |¡}| |¡}t  |dk¡sjJ ‚d S )Néd   i   éÿÿÿÿ)r.   Úint8Úuint8r/   r0   r<   r?   Úall)r&   r'   r(   r6   r*   r7   Z
wrong_keysrB   r	   r	   r
   Útest_lookup_wrongp   s    

zTestHashTable.test_lookup_wrongc           	      C   sb   |t jt jfv rd}nd}|ƒ }t  |¡|  |¡}t  |d¡}||j_| |¡}t	 
||¡ d S )NéX   éè  r   )r.   rG   rH   r/   r0   Úrepeatr2   r3   Úuniquer@   rA   )	r&   r'   r(   r5   r6   r*   rC   r7   rN   r	   r	   r
   Útest_unique|   s    
zTestHashTable.test_uniquec                 C   sŽ   |t jt jfv rd}nd}t  |¡ |¡}tƒ �J |ƒ }| |¡ tƒ }| ¡ }||ks\J ‚~tƒ dkslJ ‚W d   ƒ n1 s€0    Y  d S )Né   i0u  r   )	r.   rG   rH   r/   r0   r   r<   r   Úsizeof)r&   r'   r(   r6   r7   r*   ÚusedÚmy_sizer	   r	   r
   Útest_tracemalloc_worksˆ   s    
z$TestHashTable.test_tracemalloc_worksc                 C   sZ   t ƒ �@ |ƒ }tƒ }| ¡ }||ks(J ‚~tƒ dks8J ‚W d   ƒ n1 sL0    Y  d S ©Nr   )r   r   rQ   )r&   r'   r(   r*   rR   rS   r	   r	   r
   Útest_tracemalloc_for_empty—   s    z(TestHashTable.test_tracemalloc_for_emptyc                 C   sL   |dƒ}|  ¡ }|d dks J ‚|d dks0J ‚d|v s<J ‚d|v sHJ ‚d S )NrL   r   r   Z
n_occupiedÚ	n_bucketsÚupper_bound)Ú	get_state)r&   r'   r(   r*   Ústater	   r	   r
   Útest_get_state    s    zTestHashTable.test_get_statec           	      C   s~   t ddƒD ]n}t |¡ |¡}||ƒ}| ¡ d }| |¡ | ¡ d }||ksTJ ‚|ƒ }| |¡ || ¡ d ks
J ‚q
d S ©Nr   én   rW   )r4   r.   r/   r0   rY   r<   )	r&   r'   r(   r6   r7   Úpreallocated_tableÚn_buckets_startÚn_buckets_endÚclean_tabler	   r	   r
   Útest_no_reallocation¨   s    

z"TestHashTable.test_no_reallocationN)Ú__name__Ú
__module__Ú__qualname__r+   r:   r=   rD   rJ   rO   rT   rV   r[   rb   r	   r	   r	   r
   r      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S )ÚTestPyObjectHashTableWithNansc                 C   sF   t dƒ}t dƒ}||usJ ‚t ¡ }| |d¡ | |¡dksBJ ‚d S ©NÚnanr   ©Úfloatr   r-   r   r    ©r&   Únan1Únan2r*   r	   r	   r
   Útest_nan_float¸   s    z,TestPyObjectHashTableWithNans.test_nan_floatc                 C   sZ   t tdƒtdƒƒ}t tdƒtdƒƒ}||us0J ‚t ¡ }| |d¡ | |¡dksVJ ‚d S rg   )Úcomplexrj   r   r-   r   r    rk   r	   r	   r
   Útest_nan_complex_bothÀ   s    z3TestPyObjectHashTableWithNans.test_nan_complex_bothc                 C   s®   t tdƒdƒ}t tdƒdƒ}t tdƒdƒ}||us6J ‚t ¡ }| |d¡ | |¡dks\J ‚tjtd d��}| |¡ W d   ƒ n1 sŠ0    Y  t	|j
ƒt	|ƒksªJ ‚d S )Nrh   r   r   r   r   ©ro   rj   r   r-   r   r    r!   r"   r#   r$   Úvalue©r&   rl   rm   Úotherr*   Úerrorr	   r	   r
   Útest_nan_complex_realÈ   s    (z3TestPyObjectHashTableWithNans.test_nan_complex_realc                 C   s®   t dtdƒƒ}t dtdƒƒ}t dtdƒƒ}||us6J ‚t ¡ }| |d¡ | |¡dks\J ‚tjtd d��}| |¡ W d   ƒ n1 sŠ0    Y  t	|j
ƒt	|ƒksªJ ‚d S )Nr   rh   r   r   r   rq   rs   r	   r	   r
   Útest_nan_complex_imagÔ   s    (z3TestPyObjectHashTableWithNans.test_nan_complex_imagc                 C   sR   t dƒf}t dƒf}|d |d us(J ‚t ¡ }| |d¡ | |¡dksNJ ‚d S )Nrh   r   r   ri   rk   r	   r	   r
   Útest_nan_in_tupleà   s    

z/TestPyObjectHashTableWithNans.test_nan_in_tuplec                 C   s    ddt dƒfff}ddt dƒfff}d}t ¡ }| |d¡ | |¡dksNJ ‚tjtd d��}| |¡ W d   ƒ n1 s|0    Y  t|j	ƒt|ƒksœJ ‚d S )Nr   r   rh   )r   r   r   r   )
rj   r   r-   r   r    r!   r"   r#   r$   rr   rs   r	   r	   r
   Útest_nan_in_nested_tupleè   s    (z6TestPyObjectHashTableWithNans.test_nan_in_nested_tupleN)	rc   rd   re   rn   rp   rv   rw   rx   ry   r	   r	   r	   r
   rf   ·   s   rf   c                  C   s\   t dƒt dƒt dƒff} t dƒt dƒt dƒff}t | ¡t |¡ksHJ ‚t | |¡sXJ ‚d S )Nrh   )rj   r   Zobject_hashZobjects_are_equal)ÚaÚbr	   r	   r
   Útest_hash_equal_tuple_with_nansô   s    r|   c                 C   sv   t  ¡ }tjg d¢tjd�}| |j_| |¡\}}tjg d¢tjd�}tjddgtjd�}t	 
||¡ t	 
||¡ d S )N)r   r   rF   r   r   rF   ©r(   )r   r   rF   r   r   rF   r   r   )r   ÚInt64HashTabler.   Úarrayr1   r2   r3   Zget_labels_groupbyÚintpr@   rA   )r5   r*   r8   ÚarrrN   Zexpected_arrZexpected_uniquer	   r	   r
   Ú!test_get_labels_groupby_for_Int64û   s    r‚   c                  C   s†   d} t  | ¡ t jj¡ t j¡}tƒ �L t ¡ }| 	|¡ t
ƒ }| ¡ }||ksTJ ‚~t
ƒ dksdJ ‚W d   ƒ n1 sx0    Y  d S )NrL   r   )r.   r/   r0   ÚcompatÚunicodeÚobject_r   r   ÚStringHashTabler<   r   rQ   )r6   r7   r*   rR   rS   r	   r	   r
   Ú*test_tracemalloc_works_for_StringHashTable  s    
r‡   c                  C   s\   t ƒ �B t ¡ } tƒ }|  ¡ }||ks*J ‚~ tƒ dks:J ‚W d   ƒ n1 sN0    Y  d S rU   )r   r   r†   r   rQ   )r*   rR   rS   r	   r	   r
   Ú*test_tracemalloc_for_empty_StringHashTable  s    rˆ   c                  C   sŽ   t ddƒD ]~} t | ¡ tjj¡ tj¡}t | ¡}| 	¡ d }| 
|¡ | 	¡ d }||ksbJ ‚t ¡ }| 
|¡ || 	¡ d ks
J ‚q
d S r\   )r4   r.   r/   r0   rƒ   r„   r…   r   r†   rY   r<   )r6   r7   r^   r_   r`   ra   r	   r	   r
   Ú$test_no_reallocation_StringHashTable  s    


r‰   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestHashTableWithNansc                 C   s’   t dƒ}|ƒ }||vsJ ‚| |d¡ t|ƒdks6J ‚||v sBJ ‚| |¡dksTJ ‚| |d¡ t|ƒdkspJ ‚||v s|J ‚| |¡dksŽJ ‚d S )Nrh   r   r   r   )rj   r   r   r    r%   r	   r	   r
   r+   6  s    z/TestHashTableWithNans.test_get_set_contains_lenc                 C   sn   d}|ƒ }t j|t j|d�}t  |¡|  t j¡}| ||¡ t|ƒdksNJ ‚| t j¡d| d ksjJ ‚d S )NiL  r}   r   r   )	r.   Úfullrh   r/   r0   r1   r   r   r    )r&   r'   r(   r6   r*   r7   r8   r	   r	   r
   r:   E  s    zTestHashTableWithNans.test_mapc                 C   sR   d}|ƒ }t j|t j|d�}| |¡ t|ƒdks6J ‚| t j¡|d ksNJ ‚d S )Né
   r}   r   )r.   r‹   rh   r<   r   r    )r&   r'   r(   r6   r*   r7   r	   r	   r
   r=   N  s    
z(TestHashTableWithNans.test_map_locationsc                 C   sJ   d}|ƒ }t j|t j|d�}| |¡}t  t  |¡¡rBt|ƒdksFJ ‚d S )Niü  r}   r   )r.   r‹   rh   rN   rI   Úisnanr   )r&   r'   r(   r6   r*   r7   rN   r	   r	   r
   rO   V  s
    
z!TestHashTableWithNans.test_uniqueN)rc   rd   re   r+   r:   r=   rO   r	   r	   r	   r
   rŠ   ,  s   
	rŠ   c                  C   sD   t  ¡ } tjdd„ tdƒD ƒtjd�}|  |¡}t|ƒdks@J ‚d S )Nc                 S   s   g | ]}t d ƒ‘qS )rh   ©rj   ©Ú.0r9   r	   r	   r
   Ú
<listcomp>`  r   z6test_unique_for_nan_objects_floats.<locals>.<listcomp>é2   r}   r   ©r   r-   r.   r   r4   r…   rN   r   ©r*   r7   rN   r	   r	   r
   Ú"test_unique_for_nan_objects_floats^  s    
r•   c                  C   sD   t  ¡ } tjdd„ tdƒD ƒtjd�}|  |¡}t|ƒdks@J ‚d S )Nc                 S   s   g | ]}t td ƒdƒ‘qS )rh   ç      ð?)ro   rj   r�   r	   r	   r
   r‘   g  r   z7test_unique_for_nan_objects_complex.<locals>.<listcomp>r’   r}   r   r“   r”   r	   r	   r
   Ú#test_unique_for_nan_objects_complexe  s    
r—   c                  C   sJ   t  ¡ } tjdgdd„ tdƒD ƒ tjd�}|  |¡}t|ƒdksFJ ‚d S )Nr   c                 S   s   g | ]}d t dƒd ff‘qS )r–   rh   rŽ   r�   r	   r	   r
   r‘   o  r   z5test_unique_for_nan_objects_tuple.<locals>.<listcomp>r’   r}   r   r“   r”   r	   r	   r
   Ú!test_unique_for_nan_objects_tuplel  s    ÿ
r˜   r(   c                   @   sD   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S )ÚTestHelpFunctionsc                 C   sd   d}t  |¡|  |¡}t  |d¡}||j_t |d¡\}}t 	t  
|¡|¡ t  |dk¡s`J ‚d S )Né+   r   F)r.   r/   r0   rM   r2   r3   r   Úvalue_countr@   rA   ÚsortrI   )r&   r(   r5   r6   rC   Úvaluesr7   Úcountsr	   r	   r
   Útest_value_count‰  s    z"TestHelpFunctions.test_value_countc                 C   sN   t  g d¢¡ |¡}||j_t |d¡\}}t ||¡ t  	|dk¡sJJ ‚d S )N©r   r   r   é   r>   rF   r;   Fr   )
r.   r   r0   r2   r3   r   r›   r@   rA   rI   )r&   r(   r5   r�   r7   rž   r	   r	   r
   Útest_value_count_stable’  s
    z)TestHelpFunctions.test_value_count_stablec                 C   s\   d}t  t  |¡ |¡d¡}||j_t |¡}t j|t j	d�}d|d d d…< t
 ||¡ d S )NrE   r   r}   F)r.   rM   r/   r0   r2   r3   r   Ú
duplicatedÚ	ones_likeÚbool_r@   rA   )r&   r(   r5   r6   r�   rB   rC   r	   r	   r
   Útest_duplicated_firstš  s    
z'TestHelpFunctions.test_duplicated_firstc                 C   s`   d}t  |¡ |¡}t  |¡ |¡}||j_||j_t ||¡}t j|t jd�}t	 
||¡ d S )Né   r}   )r.   r/   r0   r2   r3   r   Úismemberr¤   r¥   r@   rA   )r&   r(   r5   r6   r�   r�   rB   rC   r	   r	   r
   Útest_ismember_yes£  s    z#TestHelpFunctions.test_ismember_yesc                 C   sT   d}t  |¡ |¡}t  |¡|  |¡}t ||¡}t j|t jd�}t ||¡ d S )Né   r}   )	r.   r/   r0   r   r¨   Z
zeros_liker¥   r@   rA   )r&   r(   r6   r�   r�   rB   rC   r	   r	   r
   Útest_ismember_no­  s    z"TestHelpFunctions.test_ismember_noc                 C   s^   |t jt jfv rd}nd}t  t  |¡ |¡d¡}d|d< ||j_t 	|d¡}|dksZJ ‚d S )Né5   ig+  r   r   r   F)
r.   rG   rH   rM   r/   r0   r2   r3   r   Úmode)r&   r(   r5   r6   r�   rB   r	   r	   r
   Ú	test_modeµ  s    zTestHelpFunctions.test_modec                 C   s8   t  g d¢¡ |¡}||j_t |d¡}t ||¡ d S )Nr    F)	r.   r   r0   r2   r3   r   r­   r@   rA   )r&   r(   r5   r�   r7   r	   r	   r
   Útest_mode_stableÀ  s    z"TestHelpFunctions.test_mode_stableN)
rc   rd   re   rŸ   r¢   r¦   r©   r«   r®   r¯   r	   r	   r	   r
   r™   u  s   		
r™   c                  C   sN   t jtjt jd g} tjdg| d  tjd�}t |d¡}|j	t
| ƒksJJ ‚d S )NTr   r}   F)ÚpdZNAr.   rh   ZNaTr   r…   r   r­   r   r   )Znullsr�   Úmodesr	   r	   r
   Útest_modes_with_nansÇ  s    r²   c                 C   sJ   t jg d¢t jd�}| |j_t |¡}t jg d¢t jd�}t ||¡ d S )N)r   r   r   r   r   r>   r}   )r   r   r   )	r.   r   r€   r2   r3   r   Zunique_label_indicesr@   rA   )r5   r7   rB   rC   r	   r	   r
   Útest_unique_label_indices_intpÏ  s
    
r³   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestHelpFunctionsWithNansc                 C   s~   t jt jt jt jg|d�}t |d¡\}}t|ƒdks:J ‚t |d¡\}}t|ƒdkrft  t  |¡¡sjJ ‚|d dkszJ ‚d S )Nr}   Tr   Fr   r>   )r.   r   rh   r   r›   r   rI   r�   )r&   r(   r�   r7   rž   r	   r	   r
   rŸ   á  s     z*TestHelpFunctionsWithNans.test_value_countc                 C   sB   t jt jt jt jg|d�}t |¡}t  g d¢¡}t ||¡ d S )Nr}   )FTT)r.   r   rh   r   r£   r@   rA   )r&   r(   r�   rB   rC   r	   r	   r
   r¦   é  s    
z/TestHelpFunctionsWithNans.test_duplicated_firstc                 C   s`   t jt jt jt jg|d�}t jt jt jg|d�}t ||¡}t jg d¢t jd�}t ||¡ d S )Nr}   )TTT©r.   r   rh   r   r¨   r¥   r@   rA   ©r&   r(   r�   r�   rB   rC   r	   r	   r
   r©   ï  s
    z+TestHelpFunctionsWithNans.test_ismember_yesc                 C   sZ   t jt jt jt jg|d�}t jdg|d�}t ||¡}t jg d¢t jd�}t ||¡ d S )Nr}   r   )FFFrµ   r¶   r	   r	   r
   r«   ö  s
    z*TestHelpFunctionsWithNans.test_ismember_noc                 C   sJ   t jdt jt jt jg|d�}t |d¡dks0J ‚t  t |d¡¡sFJ ‚d S )Nr   r}   TF)r.   r   rh   r   r­   r�   )r&   r(   r�   r	   r	   r
   r®   ý  s    z#TestHelpFunctionsWithNans.test_modeN)rc   rd   re   rŸ   r¦   r©   r«   r®   r	   r	   r	   r
   r´   ×  s
   
r´   c                  C   sL   dt dƒfdg} dt dƒfg}t| |ƒ}tjddgtjd�}t ||¡ d S )Nrz   rh   )r{   r   TFr}   )rj   r   r.   r   r¥   r@   rA   ©r�   ÚcompsrB   rC   r	   r	   r
   Útest_ismember_tuple_with_nans  s
    
r¹   c                  C   sB   g d¢} t tdƒƒ}t| |ƒ}tjg d¢tjd�}t ||¡ d S )N)rz   r   g      @y      @        é�   )FTTTr}   )Úlistr4   r   r.   r   r¥   r@   rA   r·   r	   r	   r
   Ú+test_float_complex_int_are_equal_as_objects  s
    
r¼   )AÚ
contextlibr   r   Únumpyr.   r!   Zpandas._libsr   r   Zpandasr°   Zpandas._testingZ_testingr@   Zpandas.core.algorithmsr   r   r   ÚmarkZparametrizer-   r…   ZComplex128HashTableZ
complex128r~   r1   ZUInt64HashTableZuint64ZFloat64HashTableZfloat64ZComplex64HashTableZ	complex64ZInt32HashTableZint32ZUInt32HashTableZuint32ZFloat32HashTableZfloat32ZInt16HashTableZint16ZUInt16HashTableZuint16ZInt8HashTablerG   ZUInt8HashTablerH   ZIntpHashTabler€   r   rf   r|   r‚   r‡   rˆ   r‰   rŠ   r•   r—   r˜   r™   r²   r³   r´   r¹   r¼   r	   r	   r	   r
   Ú<module>   s    














òþ =




üþ	)	òþ?üþ	#	