U
    e^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 5 t   X d S N)tracemallocstartstop r	   r	   a/var/www/html/assets/scripts/venv/lib/python3.8/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   sp  d}|d}t |dkst||ks(t||d t |dksDt||ksPt||dksbt||d d ||ks~t|d |kstt |dkst||dkst||d dkst||d ||kst|d |kstt |dkst||dkst||d dks*t|d |ks<ttjtt|d d	 ||d  W 5 Q R X d S )
N   7   r   *      )         match)lenAssertionError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^tq^d S )NM   )r   Int64HashTablenparangeastypeint64flags	writeableZmap_keys_to_valuesranger!   r   )	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s8tq8d S )N   )	r/   r0   r1   r3   r4   map_locationsr5   r!   r   )r'   r(   r)   r6   r7   r+   r8   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   )
r/   r0   r1   r3   r4   r=   lookuptmassert_numpy_array_equalr2   )	r'   r(   r)   r6   r7   r+   r8   resultexpectedr	   r	   r
   test_lookupg   s    


zTestHashTable.test_lookupc                 C   sn   |t jt jfkrd}nd}| }t || |}|| t ||}||}t |dksjtd S )Nd   i   )	r/   int8uint8r0   r1   r=   r@   allr   )r'   r(   r)   r7   r+   r8   Z
wrong_keysrC   r	   r	   r
   test_lookup_wrongq   s    

zTestHashTable.test_lookup_wrongc           	      C   sb   |t jt jfkrd}nd}| }t || |}t |d}||j_||}t	
|| d S )NX     r   )r/   rH   rI   r0   r1   repeatr3   r4   uniquerA   rB   )	r'   r(   r)   r6   r7   r+   rD   r8   rO   r	   r	   r
   test_unique}   s    
zTestHashTable.test_uniquec              	   C   sz   |t jt jfkrd}nd}t ||}t @ | }|| t }| }||ks\t	~t dkslt	W 5 Q R X d S )N   i0u  r   )
r/   rH   rI   r0   r1   r   r=   r   sizeofr   )r'   r(   r)   r7   r8   r+   usedmy_sizer	   r	   r
   test_tracemalloc_works   s    
z$TestHashTable.test_tracemalloc_worksc              	   C   sF   t  6 | }t }| }||ks(t~t dks8tW 5 Q R X d S Nr   )r   r   rR   r   )r'   r(   r)   r+   rS   rT   r	   r	   r
   test_tracemalloc_for_empty   s    z(TestHashTable.test_tracemalloc_for_emptyc                 C   sL   |d}|  }|d dks t|d dks0td|ks<td|ksHtd S )NrM   r   r   Z
n_occupied	n_bucketsupper_bound)	get_stater   )r'   r(   r)   r+   stater	   r	   r
   test_get_state   s    zTestHashTable.test_get_stater7   r   n   c           	      C   sn   t ||}||}| d }|| | d }||ksFt| }|| || d ksjtd S NrX   )r/   r0   r1   rZ   r=   r   )	r'   r(   r)   r7   r8   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>   rE   rK   rP   rU   rW   r\   r"   markparametrizer5   rc   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   st   t  }|dd |ddks&ttjtdd |dd W 5 Q R X tjtdd |d W 5 Q R X d S )Nkeyr   z'key' has incorrect typer         z'val' has incorrect type)r   StringHashTabler    r!   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=   rA   rB   r@   r0   r   intpr'   r6   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s6td S )Nrk   g        r   g       r   )r   rw   r    r   r   )r'   r7   rz   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<t||ksHtt }||d ||d t|dksxtd S )Ndz=Ql          r   l         r   )structunpackpackr   r   rw   r    r   )r'   ZNAN1ZNAN2rz   r	   r	   r
   test_add_different_nans   s    z-TestHashTableUnsorted.test_add_different_nansc                 C   sZ   t jdddgt jd}|j|d t }|| t|	|t j
t|t jd d S )Nr   r   l            rs   rq   )r/   rt   uint64rv   r   UInt64HashTabler=   rA   rB   r@   r0   r   rx   ry   r	   r	   r
   test_lookup_overflow   s
    
z*TestHashTableUnsorted.test_lookup_overflownvalsr   
   z&htable, uniques, dtype, safely_resizesobjectFTfloat64r2   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 5 Q R X |  |j|	kst
d S )NrM   rs   rq   r   rG   zexternal reference.*r   )r/   rt   r5   rv   Z
get_labelsZto_arrayshaper"   r#   
ValueErrorr   )
r'   r6   ZhtableZuniquesr)   Zsafely_resizesr   r9   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)rd   re   rf   rp   r{   r|   r   r   r"   rg   rh   r   PyObjectHashTableZObjectVectorrm   rw   ZFloat64Vectorr.   ZInt64VectorInt32HashTableZInt32Vectorr   ZUInt64Vectorr   r   r	   r	   r	   r
   ri      s8   #ri   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}||k	stt }||d ||dksBtd S Nru   r   floatr   r   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}||k	s0tt }||d ||dksVtd S r   )complexr   r   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}||k	s6tt }||d ||dks\ttjt	d d}|| W 5 Q R X t
|jt
|kstd S )Nru   r   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}||k	s6tt }||d ||dks\ttjt	d d}|| W 5 Q R X t
|jt
|kstd S )Nr   ru   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 k	s(tt }||d ||dksNtd S )Nru   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sNttjtd d}|| W 5 Q R X t	|j
t	|kstd S )Nr   r   ru   )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)	rd   re   rf   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sHtt| |sXtd S )Nru   )r   r   Zobject_hashr   Zobjects_are_equal)abr	   r	   r
   test_hash_equal_tuple_with_nansm  s    r   c                 C   s   t  }tjddddddgtjd}| |j_||\}}tjddddddgtjd}tjddgtjd}t	
|| t	
|| d S )Nr   r   rG   rs   r   )r   r.   r/   rt   r2   r3   r4   Zget_labels_groupbyrx   rA   rB   )r6   r+   r9   arrrO   Zexpected_arrZexpected_uniquer	   r	   r
   !test_get_labels_groupby_for_Int64t  s    r   c               	   C   sr   d} t | t jjt j}t B t }|	| t
 }| }||ksTt~t
 dksdtW 5 Q R X d S )NrM   r   )r/   r0   r1   compatunicodeobject_r   r   rm   r=   r   rR   r   )r7   r8   r+   rS   rT   r	   r	   r
   *test_tracemalloc_works_for_StringHashTable  s    
r   c               	   C   sH   t  8 t } t }|  }||ks*t~ t dks:tW 5 Q R X d S rV   )r   r   rm   r   rR   r   )r+   rS   rT   r	   r	   r
   *test_tracemalloc_for_empty_StringHashTable  s    r   r7   r   r]   c                 C   s~   t | t jjt j}t| }| d }|	| | d }||ksTt
t }|	| || d kszt
d S r^   )r/   r0   r1   r   r   r   r   rm   rZ   r=   r   )r7   r8   r_   r`   ra   rb   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}| }||kst||d t|dks6t||ksBt||dksTt||d t|dkspt||ks|t||dkstd S )Nru   r   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s6t|t j|d ksNtd S )Nr   rs   r   )r/   fullru   r=   r   r   r!   )r'   r(   r)   r7   r+   r8   r	   r	   r
   r>     s    
z(TestHashTableWithNans.test_map_locationsc                 C   sJ   d}| }t j|t j|d}||}t t |rBt|dksFtd S )Ni  rs   r   )r/   r   ru   rO   rJ   isnanr   r   )r'   r(   r)   r7   r+   r8   rO   r	   r	   r
   rP     s
    
z!TestHashTableWithNans.test_uniqueN)rd   re   rf   r,   r>   rP   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@td S )Nc                 S   s   g | ]}t d qS )ru   r   .0r:   r	   r	   r
   
<listcomp>  s     z6test_unique_for_nan_objects_floats.<locals>.<listcomp>2   rs   r   	r   r   r/   rt   r5   r   rO   r   r   r+   r8   rO   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@td S )Nc                 S   s   g | ]}t td dqS )ru         ?)r   r   r   r	   r	   r
   r     s     z7test_unique_for_nan_objects_complex.<locals>.<listcomp>r   rs   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sFtd S )Nr   c                 S   s   g | ]}d t dd ffqS )r   ru   r   r   r	   r	   r
   r     s     z5test_unique_for_nan_objects_tuple.<locals>.<listcomp>r   rs   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`td S )N+   r   F)r/   r0   r1   rN   r3   r4   r   value_countrA   rB   sortrJ   r   )r'   r)   r6   r7   rD   valuesr8   countsr	   r	   r
   test_value_count  s    z"TestHelpFunctions.test_value_countc              	   C   sX   t dddddddg|}||j_t|d\}}t|| t 	|dksTt
d S 	Nr   r   r      r?   rG   r<   F)r/   rt   r1   r3   r4   r   r   rA   rB   rJ   r   )r'   r)   r6   r   r8   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 )NrF   r   rs   F)r/   rN   r0   r1   r3   r4   r   
duplicated	ones_likebool_rA   rB   )r'   r)   r6   r7   r   rC   rD   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   rs   )r/   r0   r1   r3   r4   r   ismemberr   r   rA   rB   )r'   r)   r6   r7   r   r   rC   rD   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   rs   )	r/   r0   r1   r   r   Z
zeros_liker   rA   rB   )r'   r)   r7   r   r   rC   rD   r	   r	   r
   test_ismember_no  s    z"TestHelpFunctions.test_ismember_noc                 C   s^   |t jt jfkrd}nd}t t ||d}d|d< ||j_t	|d}|dksZt
d S )N5   ig+  r   r   r   F)r/   rH   rI   rN   r0   r1   r3   r4   r   moder   )r'   r)   r6   r7   r   rC   r	   r	   r
   	test_mode%  s    zTestHelpFunctions.test_modec              	   C   sB   t dddddddg|}||j_t|d}t|| d S r   )	r/   rt   r1   r3   r4   r   r   rA   rB   )r'   r)   r6   r   r8   r	   r	   r
   test_mode_stable0  s    z"TestHelpFunctions.test_mode_stableN)
rd   re   rf   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sJtd S )NTr   rs   F)pdZNAr/   ru   ZNaTrt   r   r   r   r   r   r   )Znullsr   modesr	   r	   r
   test_modes_with_nans7  s    r   c                 C   sT   t jddddddgt jd}| |j_t|}t jdddgt jd}t|| d S )Nr   r   r?   rs   r   r   )	r/   rt   rx   r3   r4   r   unique_label_indicesrA   rB   )r6   r8   rC   rD   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_dtyperG   r   )r/   randomrandintr1   rx   r   r   rO   rA   rB   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:tt|d\}}t|dkrft t |sjt|d dksztd S )Nrs   Tr   Fr   r?   )	r/   rt   ru   r   r   r   r   rJ   r   )r'   r)   r   r8   r   r	   r	   r
   r   `  s     z*TestHelpFunctionsWithNans.test_value_countc                 C   sD   t jt jt jt jg|d}t|}t dddg}t|| d S )Nrs   FT)r/   rt   ru   r   r   rA   rB   )r'   r)   r   rC   rD   r	   r	   r
   r   h  s    
z/TestHelpFunctionsWithNans.test_duplicated_firstc                 C   sb   t jt jt jt jg|d}t jt jt jg|d}t||}t jdddgt jd}t|| d S )Nrs   Tr/   rt   ru   r   r   r   rA   rB   r'   r)   r   r   rC   rD   r	   r	   r
   r   n  s
    z+TestHelpFunctionsWithNans.test_ismember_yesc                 C   s\   t jt jt jt jg|d}t jdg|d}t||}t jdddgt jd}t|| d S )Nrs   r   Fr   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s0tt t|dsFtd S )Nr   rs   TF)r/   rt   ru   r   r   r   r   )r'   r)   r   r	   r	   r
   r   |  s    z#TestHelpFunctionsWithNans.test_modeN)rd   re   rf   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   ru   )r   r   TFrs   )r   r   r/   rt   r   rA   rB   r   compsrC   rD   r	   r	   r
   test_ismember_tuple_with_nans  s
    
r   c                  C   sJ   ddddg} t td}t| |}tjddddgtjd}t|| d S )	Nr   r   g      @y      @           FTrs   )listr5   r   r/   rt   r   rA   rB   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_testingrA   Zpandas.core.algorithmsr   r   r   rg   rh   r   r   ZComplex128HashTableZ
complex128r.   r2   r   r   rw   r   ZComplex64HashTableZ	complex64r   r   ZUInt32HashTabler   ZFloat32HashTableZfloat32ZInt16HashTableZint16ZUInt16HashTableZuint16ZInt8HashTablerH   ZUInt8HashTablerI   ZIntpHashTablerx   r   ri   r   r   r   r   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   <module>   s   














 x=





	 	?	#	