o
    i^X                     @   st  d dl mZ d dl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j0fgG d
d dZ1G dd dZ2G dd dZ3dd Z4dd Z5dd Z6dd Z7ejde8dddd Z9e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Z:dd  Z;d!d" Z<d#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j0gG d&d' d'Z>d(d) Z?d*d+ Z@d,d- ZAejd%ejej&ejej gG d.d/ d/ZBd0d1 ZCd2d3 ZDdS )4    )contextmanagerN)	hashtable)isinc                   c   s*    t   z
d V  W t   d S t   w N)tracemallocstartstop r	   r	   [/var/www/edux/Edux_v2/venv/lib/python3.10/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>   s    z,get_allocated_khash_memory.<locals>.<lambda>)	r   take_snapshotfilter_tracesDomainFilterhtget_hashtable_trace_domainsummaptraces)snapshotr	   r	   r
   get_allocated_khash_memory   s
   r   ztable_type, dtypec                   @   sp   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ejdedddd ZdS )TestHashTablec                 C   s  d}|d}t |dksJ ||vsJ ||d t |dks"J ||v s(J ||dks1J ||d d ||v s?J |d |v sGJ t |dksOJ ||dksXJ ||d dkscJ ||d ||v soJ |d |v swJ t |dksJ ||dksJ ||d dksJ |d |vsJ tjtt|d d	 ||d  W d    d S 1 sw   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_len4   s0   "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 d S )NM   )r   Int64HashTablenparangeastypeint64flags	writeablemap_keys_to_valuesranger%   )	r+   r,   r-   writableNr/   keysvalsir	   r	   r
   test_map_keys_to_valuesQ   s   
z%TestHashTable.test_map_keys_to_valuesc                 C   sX   d}| }t || |}||j_|| t|D ]}||| |ks)J qd S )N   )r3   r4   r5   r7   r8   map_locationsr:   r%   )r+   r,   r-   r;   r<   r/   r=   r?   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   )
r3   r4   r5   r7   r8   rB   lookuptmassert_numpy_array_equalr6   )	r+   r,   r-   r;   r<   r/   r=   resultexpectedr	   r	   r
   test_lookupg   s   


 zTestHashTable.test_lookupc                 C   sn   |t jt jfv rd}nd}| }t || |}|| t ||}||}t |dks5J d S )Nd   i   )r3   int8uint8r4   r5   rB   rE   all)r+   r,   r-   r<   r/   r=   
wrong_keysrH   r	   r	   r
   test_lookup_wrongq   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 )NX     r   )r3   rM   rN   r4   r5   repeatr7   r8   uniquerF   rG   )	r+   r,   r-   r;   r<   r/   rI   r=   rU   r	   r	   r
   test_unique}   s   
zTestHashTable.test_uniquec                 C   s   |t jt jfv rd}nd}t ||}t & | }|| t }| }||ks.J ~t dks6J W d    d S 1 sAw   Y  d S )N   i0u  r   )	r3   rM   rN   r4   r5   r   rB   r   sizeof)r+   r,   r-   r<   r=   r/   usedmy_sizer	   r	   r
   test_tracemalloc_works   s   
"z$TestHashTable.test_tracemalloc_worksc                 C   s\   t  ! | }t }| }||ksJ ~t dksJ W d    d S 1 s'w   Y  d S Nr   )r   r   rX   )r+   r,   r-   r/   rY   rZ   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sJ d|v sJ d|v s$J d S )NrS   r   r   
n_occupied	n_bucketsupper_bound)	get_state)r+   r,   r-   r/   stater	   r	   r
   test_get_state   s   zTestHashTable.test_get_stater<   r   n   c           	      C   sn   t ||}||}| d }|| | d }||ks#J | }|| || d ks5J d S Nr_   )r3   r4   r5   ra   rB   )	r+   r,   r-   r<   r=   preallocated_tablen_buckets_startn_buckets_endclean_tabler	   r	   r
   test_no_reallocation   s   

z"TestHashTable.test_no_reallocationN)__name__
__module____qualname__r0   r@   rC   rJ   rQ   rV   r[   r]   rc   r&   markparametrizer:   rj   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ej	
dddgej	
dejejddfejejddfejejddfejejddfejejddfejejddfgdd Zej	
dejejejejejejgdd ZdS )TestHashTableUnsortedc                 C   s   t  }|dd |ddksJ tjtdd |dd W d    n1 s+w   Y  tjtdd |d W d    d S 1 sHw   Y  d S )Nkeyr   z'key' has incorrect typer!         z'val' has incorrect type)r   StringHashTabler$   r%   r&   r'   	TypeError)r+   tblr	   r	   r
   (test_string_hashtable_set_item_signature   s   "z>TestHashTableUnsorted.test_string_hashtable_set_item_signaturec              	   C   s^   t ddt jddddg}|j|d t }|| t|	|t j
t|t jd d S )	NgX9v@gQ	@ir   r   rD   writer-   )r3   arraynansetflagsr   Float64HashTablerB   rF   rG   rE   r4   r#   intpr+   r;   xsmr	   r	   r
   test_lookup_nan   s
   
&z%TestHashTableUnsorted.test_lookup_nanc                 C   s:   d}t |}|dd |dd t|dksJ d S )Nrr   g        r   g       r   )r   r~   r$   r#   )r+   r<   r   r	   r	   r
   test_add_signed_zeros   s
   
z+TestHashTableUnsorted.test_add_signed_zerosc                 C   s|   t dt ddd }t dt ddd }||ksJ ||ks$J t }||d ||d t|dks<J d S )Ndz=Ql          r   l         r   )structunpackpackr   r~   r$   r#   )r+   NAN1NAN2r   r	   r	   r
   test_add_different_nans   s   z-TestHashTableUnsorted.test_add_different_nansc                 C   sX   t jg dt jd}|j|d t }|| t|	|t j
t|t jd d S )N)r   r   l            rz   rx   )r3   r{   uint64r}   r   UInt64HashTablerB   rF   rG   rE   r4   r#   r   r   r	   r	   r
   test_lookup_overflow   s
   
&z*TestHashTableUnsorted.test_lookup_overflownvalsr   
   z&htable, uniques, dtype, safely_resizesobjectFTfloat64r6   int32r   c           
      C   s   t jtd|d}|j|d | }| }||d | |dd | }|j}	|r3|||dd ntjt	dd |||dd W d    n1 sMw   Y  |  |j|	ks]J d S )NrS   rz   rx   r   rL   zexternal reference.*r!   )
r3   r{   r:   r}   
get_labelsto_arrayshaper&   r'   
ValueError)
r+   r;   htableuniquesr-   safely_resizesr   r>   tmpoldshaper	   r	   r
   test_vector_resize   s   z(TestHashTableUnsorted.test_vector_resizer   c                 C   s    t t jjd }||d d S )Nr   )	size_hint)r3   iinfouint32max)r+   r   r   r	   r	   r
   test_hashtable_large_sizehint  s   z3TestHashTableUnsorted.test_hashtable_large_sizehintN)rk   rl   rm   rw   r   r   r   r   r&   rn   ro   r   PyObjectHashTableObjectVectorrt   r~   Float64Vectorr2   Int64VectorInt32HashTableInt32Vectorr   UInt64Vectorr   r   r	   r	   r	   r
   rp      s:    #rp   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s!J d S Nr|   r   floatr   r   r$   r%   r+   nan1nan2r/   r	   r	   r
   test_nan_float1  s   z,TestPyObjectHashTableWithNans.test_nan_floatc                 C   sZ   t tdtd}t tdtd}||usJ t }||d ||dks+J d S r   )complexr   r   r   r$   r%   r   r	   r	   r
   test_nan_complex_both9  s   z3TestPyObjectHashTableWithNans.test_nan_complex_bothc                 C   s   t tdd}t tdd}t tdd}||usJ t }||d ||dks.J tjtd d}|| W d    n1 sEw   Y  t	|j
t	|ksUJ d S )Nr|   r   r   r   r!   r   r   r   r   r$   r%   r&   r'   r(   r)   valuer+   r   r   otherr/   errorr	   r	   r
   test_nan_complex_realA     z3TestPyObjectHashTableWithNans.test_nan_complex_realc                 C   s   t dtd}t dtd}t dtd}||usJ t }||d ||dks.J tjtd d}|| W d    n1 sEw   Y  t	|j
t	|ksUJ d S )Nr   r|   r   r   r!   r   r   r	   r	   r
   test_nan_complex_imagM  r   z3TestPyObjectHashTableWithNans.test_nan_complex_imagc                 C   sR   t df}t df}|d |d usJ t }||d ||dks'J d S )Nr|   r   r   r   r   r	   r	   r
   test_nan_in_tupleY  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s'J tjtd d}|| W d    n1 s>w   Y  t|j	t|ksNJ d S )Nr   r   r|   )r   r   r   r!   )
r   r   r   r$   r%   r&   r'   r(   r)   r   r   r	   r	   r
   test_nan_in_nested_tuplea  s   z6TestPyObjectHashTableWithNans.test_nan_in_nested_tupleN)	rk   rl   rm   r   r   r   r   r   r   r	   r	   r	   r
   r   0  s    r   c                  C   s\   t dt dt dff} t dt dt dff}t| t|ks$J t| |s,J d S )Nr|   )r   r   object_hashobjects_are_equal)abr	   r	   r
   test_hash_equal_tuple_with_nansm  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   rL   r   r   rL   rz   )r   r   rL   r   r   rL   r   r   )r   r2   r3   r{   r6   r7   r8   get_labels_groupbyr   rF   rG   )r;   r/   r>   arrrU   expected_arrexpected_uniquer	   r	   r
   !test_get_labels_groupby_for_Int64t  s   r   c                  C   s   d} t | t jjt j}t ' t }|	| t
 }| }||ks*J ~t
 dks2J W d    d S 1 s=w   Y  d S )NrS   r   )r3   r4   r5   compatunicodeobject_r   r   rt   rB   r   rX   )r<   r=   r/   rY   rZ   r	   r	   r
   *test_tracemalloc_works_for_StringHashTable  s   
"r   c                  C   s^   t  " t } t }|  }||ksJ ~ t dksJ W d    d S 1 s(w   Y  d S r\   )r   r   rt   r   rX   )r/   rY   rZ   r	   r	   r
   *test_tracemalloc_for_empty_StringHashTable  s   "r   r<   r   rd   c                 C   s~   t | t jjt j}t| }| d }|	| | d }||ks*J t }|	| || d ks=J d S re   )
r3   r4   r5   r   r   r   r   rt   ra   rB   )r<   r=   rf   rg   rh   ri   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S )TestHashTableWithNansc                 C   s   t d}| }||vsJ ||d t|dksJ ||v s!J ||dks*J ||d t|dks8J ||v s>J ||dksGJ d S )Nr|   r   r   r   )r   r$   r#   r%   r*   r	   r	   r
   r0     s   z/TestHashTableWithNans.test_get_set_contains_lenc                 C   sR   d}| }t j|t j|d}|| t|dksJ |t j|d ks'J d S )Nr   rz   r   )r3   fullr|   rB   r#   r%   )r+   r,   r-   r<   r/   r=   r	   r	   r
   rC     s   
z(TestHashTableWithNans.test_map_locationsc                 C   sJ   d}| }t j|t j|d}||}t t |r!t|dks#J d S )Ni  rz   r   )r3   r   r|   rU   rO   isnanr#   )r+   r,   r-   r<   r/   r=   rU   r	   r	   r
   rV     s
   
$z!TestHashTableWithNans.test_uniqueN)rk   rl   rm   r0   rC   rV   r	   r	   r	   r
   r     s    
r   c                  C   D   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 )r|   r   .0r?   r	   r	   r
   
<listcomp>  s    z6test_unique_for_nan_objects_floats.<locals>.<listcomp>2   rz   r   r   r   r3   r{   r:   r   rU   r#   r/   r=   rU   r	   r	   r
   "test_unique_for_nan_objects_floats     
r   c                  C   r   )Nc                 S   s   g | ]	}t td dqS )r|         ?)r   r   r   r	   r	   r
   r     s    z7test_unique_for_nan_objects_complex.<locals>.<listcomp>r   rz   r   r   r   r	   r	   r
   #test_unique_for_nan_objects_complex  r   r   c                  C   sJ   t  } tjdgdd tdD  tjd}| |}t|dks#J d S )Nr   c                 S   s   g | ]
}d t dd ffqS )r   r|   r   r   r	   r	   r
   r     s    z5test_unique_for_nan_objects_tuple.<locals>.<listcomp>r   rz   r   r   r   r	   r	   r
   !test_unique_for_nan_objects_tuple  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s0J d S )N+   r   F)r3   r4   r5   rT   r7   r8   r   value_countrF   rG   sortrO   )r+   r-   r;   r<   rI   valuesr=   countsr	   r	   r
   test_value_count  s   z"TestHelpFunctions.test_value_countc                 C   sN   t g d|}||j_t|d\}}t|| t 	|dks%J d S )Nr   r   r      rD   rL   rA   Fr   )
r3   r{   r5   r7   r8   r   r   rF   rG   rO   )r+   r-   r;   r   r=   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 )NrK   r   rz   F)r3   rT   r4   r5   r7   r8   r   
duplicated	ones_likebool_rF   rG   )r+   r-   r;   r<   r   rH   rI   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   rz   )r3   r4   r5   r7   r8   r   ismemberr   r   rF   rG   )r+   r-   r;   r<   r   r   rH   rI   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   rz   )	r3   r4   r5   r   r   
zeros_liker   rF   rG   )r+   r-   r<   r   r   rH   rI   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s-J d S )N5   ig+  r   r   r   F)
r3   rM   rN   rT   r4   r5   r7   r8   r   mode)r+   r-   r;   r<   r   rH   r	   r	   r
   	test_mode%  s   zTestHelpFunctions.test_modec                 C   s8   t g d|}||j_t|d}t|| d S )Nr   F)	r3   r{   r5   r7   r8   r   r   rF   rG   )r+   r-   r;   r   r=   r	   r	   r
   test_mode_stable0  s   z"TestHelpFunctions.test_mode_stableN)
rk   rl   rm   r   r   r   r   r   r   r   r	   r	   r	   r
   r     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s%J d S )NTr   rz   F)pdNAr3   r|   NaTr{   r   r   r   r   r#   )nullsr   modesr	   r	   r
   test_modes_with_nans7  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   rD   rz   )r   r   r   )	r3   r{   r   r7   r8   r   unique_label_indicesrF   rG   )r;   r=   rH   rI   r	   r	   r
   test_unique_label_indices_intp?  s
   
r   c                  C   s   t jdddt j} t| }t j| ddd }tj	||dd d| t j
t| d	< t| }t j| ddd dd  }tj	||dd d S )
Nr   i   i   T)return_indexF)check_dtyperL   r   )r3   randomrandintr5   r   r   r   rU   rF   rG   choicer#   )r   leftrightr	   r	   r
   test_unique_label_indicesG  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r3t t |s5J |d dks=J d S )Nrz   Tr   Fr   rD   )r3   r{   r|   r   r   r#   rO   r   )r+   r-   r   r=   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 )Nrz   )FTT)r3   r{   r|   r   r   rF   rG   )r+   r-   r   rH   rI   r	   r	   r
   r   h  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 )Nrz   )TTTr3   r{   r|   r   r   r   rF   rG   r+   r-   r   r   rH   rI   r	   r	   r
   r   n  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 )Nrz   r   )FFFr  r  r	   r	   r
   r   u  s
   z*TestHelpFunctionsWithNans.test_ismember_noc                 C   sJ   t jdt jt jt jg|d}t|ddksJ t t|ds#J d S )Nr   rz   TF)r3   r{   r|   r   r   r   )r+   r-   r   r	   r	   r
   r   |  s   z#TestHelpFunctionsWithNans.test_modeN)rk   rl   rm   r   r   r   r   r   r	   r	   r	   r
   r  V  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 )Nr   r|   )r   r   TFrz   )r   r   r3   r{   r   rF   rG   r   compsrH   rI   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)r   r   g      @y      @           )FTTTrz   )listr:   r   r3   r{   r   rF   rG   r	  r	   r	   r
   +test_float_complex_int_are_equal_as_objects  s
   
r  )E
contextlibr   r   r   numpyr3   r&   pandas._libsr   r   pandasr   pandas._testing_testingrF   pandas.core.algorithmsr   r   r   rn   ro   r   r   Complex128HashTable
complex128r2   r6   r   r   r~   r   Complex64HashTable	complex64r   r   UInt32HashTabler   Float32HashTablefloat32Int16HashTableint16UInt16HashTableuint16Int8HashTablerM   UInt8HashTablerN   IntpHashTabler   r   rp   r   r   r   r   r   r:   r   r   r   r   r   r   r   r   r  r  r  r  r	   r	   r	   r
   <module>   s    














 x=





	 	?	#	