a
    j=ic^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   n
t   0 d S N)tracemallocstartstop r	   r	   q/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/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                   @   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sDJ ||v sPJ ||dksbJ ||d d ||v s~J |d |v sJ t |dksJ ||dksJ ||d dksJ ||d ||v sJ |d |v sJ t |dksJ ||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_len4   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 )NM   )r   Int64HashTablenparangeastypeint64flags	writeableZ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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_lookupg   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 )Nd   i   )r.   int8uint8r/   r0   r<   r?   all)r&   r'   r(   r6   r*   r7   Z
wrong_keysrB   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   )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 s0    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_stater6   r   n   c           	      C   sn   t ||}||}| d }|| | d }||ksFJ | }|| || d ksjJ d S NrW   )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[   r!   markparametrizer4   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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 sV0    Y  tjtdd |d W d    n1 s0    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   r>   writer(   )r.   arraynansetflagsr   Float64HashTabler<   r@   rA   r?   r/   r   intpr&   r5   Zxsmr	   r	   r
   test_lookup_nan   s
    
z%TestHashTableUnsorted.test_lookup_nanc                 C   s:   d}t |}|dd |dd t|dks6J d S )Nrj   g        r   g       r   )r   rv   r   r   )r&   r6   ry   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sHJ t }||d ||d t|dksxJ d S )Ndz=Ql          r   l         r   )structunpackpackr   rv   r   r   )r&   ZNAN1ZNAN2ry   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            rr   rp   )r.   rs   uint64ru   r   UInt64HashTabler<   r@   rA   r?   r/   r   rw   rx   r	   r	   r
   test_lookup_overflow   s
    
z*TestHashTableUnsorted.test_lookup_overflownvalsr   
   z&htable, uniques, dtype, safely_resizesobjectFTfloat64r1   int32r   c           
      C   s   t jtd|d}|j|d | }| }||d | |dd | }|j}	|rf|||dd n>tjt	dd  |||dd W d    n1 s0    Y  |  |j|	ksJ d S )NrL   rr   rp   r   rF   zexternal reference.*r   )
r.   rs   r4   ru   Z
get_labelsZto_arrayshaper!   r"   
ValueError)
r&   r5   ZhtableZuniquesr(   Zsafely_resizesr   r8   tmpZ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)r.   Ziinfouint32max)r&   r   r   r	   r	   r
   test_hashtable_large_sizehint  s    z3TestHashTableUnsorted.test_hashtable_large_sizehintN)rc   rd   re   ro   rz   r{   r   r   r!   rf   rg   r   PyObjectHashTableZObjectVectorrl   rv   ZFloat64Vectorr-   ZInt64VectorInt32HashTableZInt32Vectorr   ZUInt64Vectorr   r   r	   r	   r	   r
   rh      s8   #rh   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 Nrt   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s0J t }||d ||dksVJ 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s6J t }||d ||dks\J tjtd d}|| W d    n1 s0    Y  t	|j
t	|ksJ d S )Nrt   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  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 s0    Y  t	|j
t	|ksJ d S )Nr   rt   r   r   r   r   r   r	   r	   r
   test_nan_complex_imagM  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 )Nrt   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sNJ tjtd d}|| W d    n1 s|0    Y  t|j	t|ksJ d S )Nr   r   rt   )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)	rc   rd   re   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sHJ t| |sXJ d S )Nrt   )r   r   Zobject_hashZ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   rF   r   r   rF   rr   )r   r   rF   r   r   rF   r   r   )r   r-   r.   rs   r1   r2   r3   Zget_labels_groupbyrw   r@   rA   )r5   r*   r8   arrrN   Zexpected_arrZexpected_uniquer	   r	   r
   !test_get_labels_groupby_for_Int64t  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   rl   r<   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   rl   r   rQ   )r*   rR   rS   r	   r	   r
   *test_tracemalloc_for_empty_StringHashTable  s    r   r6   r   r\   c                 C   s~   t | t jjt j}t| }| d }|	| | d }||ksTJ t }|	| || d kszJ d S r]   )
r.   r/   r0   r   r   r   r   rl   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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sJ d S )Nrt   r   r   r   )r   r   r   r    r%   r	   r	   r
   r+     s    z/TestHashTableWithNans.test_get_set_contains_lenc                 C   sR   d}| }t j|t j|d}|| t|dks6J |t j|d ksNJ d S )Nr   rr   r   )r.   fullrt   r<   r   r    )r&   r'   r(   r6   r*   r7   r	   r	   r
   r=     s    
z(TestHashTableWithNans.test_map_locationsc                 C   sJ   d}| }t j|t j|d}||}t t |rBt|dksFJ d S )Ni  rr   r   )r.   r   rt   rN   rI   isnanr   )r&   r'   r(   r6   r*   r7   rN   r	   r	   r
   rO     s
    
z!TestHashTableWithNans.test_uniqueN)rc   rd   re   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 )rt   r   .0r9   r	   r	   r
   
<listcomp>  r   z6test_unique_for_nan_objects_floats.<locals>.<listcomp>2   rr   r   r   r   r.   rs   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 )rt         ?)r   r   r   r	   r	   r
   r     r   z7test_unique_for_nan_objects_complex.<locals>.<listcomp>r   rr   r   r   r   r	   r	   r
   #test_unique_for_nan_objects_complex  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   rt   r   r   r	   r	   r
   r     r   z5test_unique_for_nan_objects_tuple.<locals>.<listcomp>r   rr   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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.   rs   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   rr   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   rr   )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   rr   )	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 )N5   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.   rs   r0   r2   r3   r   r   r@   rA   )r&   r(   r5   r   r7   r	   r	   r
   test_mode_stable0  s    z"TestHelpFunctions.test_mode_stableN)
rc   rd   re   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sJJ d S )NTr   rr   F)pdZNAr.   rt   ZNaTrs   r   r   r   r   r   )Z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   r>   rr   )r   r   r   )	r.   rs   rw   r2   r3   r   unique_label_indicesr@   rA   )r5   r7   rB   rC   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)Zreturn_indexF)Zcheck_dtyperF   r   )r.   randomrandintr0   rw   r   r   rN   r@   rA   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rft t |sjJ |d dkszJ d S )Nrr   Tr   Fr   r>   )r.   rs   rt   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 )Nrr   )FTT)r.   rs   rt   r   r   r@   rA   )r&   r(   r   rB   rC   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 )Nrr   )TTTr.   rs   rt   r   r   r   r@   rA   r&   r(   r   r   rB   rC   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 )Nrr   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s0J t t|dsFJ d S )Nr   rr   TF)r.   rs   rt   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   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   rt   )r   r   TFrr   )r   r   r.   rs   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)r   r   g      @y      @           )FTTTrr   )listr4   r   r.   rs   r   r@   rA   r   r	   r	   r
   +test_float_complex_int_are_equal_as_objects  s
    
r   )E
contextlibr   r}   r   numpyr.   r!   Zpandas._libsr   r   Zpandasr   Zpandas._testingZ_testingr@   Zpandas.core.algorithmsr   r   r   rf   rg   r   r   ZComplex128HashTableZ
complex128r-   r1   r   r   rv   r   ZComplex64HashTableZ	complex64r   r   ZUInt32HashTabler   ZFloat32HashTablefloat32ZInt16HashTableint16ZUInt16HashTableZuint16ZInt8HashTablerG   ZUInt8HashTablerH   ZIntpHashTablerw   r   rh   r   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   <module>   s   














 x=





	 	?	#	