U
    Õ~fh]c  ã                   @   s’  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	Z	d dl
mZ d dlZd dlmZ d dlmZ eed dœ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j0ej1fej2ej3fg¡G dd„ dƒƒZ4G dd„ dƒZ5G dd„ dƒZ6dd„ Z7dd„ Z8dd„ Z9dd„ Z:e	j de;ddƒ¡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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j1ej3g¡G d)d*„ d*ƒƒZAd+d,„ ZBd-d.„ ZCd/d0„ ZDe	j d(ej!ej)ejej#g¡G d1d2„ d2ƒƒZEd3d4„ ZFd5d6„ ZGdS )7é    )ÚcontextmanagerN)Ú	Generator)Ú	hashtable)Úisin)NNN)Úreturnc                   c   s"   t  ¡  z
d V  W 5 t  ¡  X d S ©N)ÚtracemallocÚstartÚstop© r   r   úD/tmp/pip-unpacked-wheel-a5acpmi0/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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t‚||ks(t‚| |d¡ t |ƒdksDt‚||ksPt‚| |¡dksbt‚| |d d¡ ||ks~t‚|d |ksŽt‚t |ƒdksžt‚| |¡dks°t‚| |d ¡dksÆt‚| |d¡ ||ksÞt‚|d |ksît‚t |ƒdksþt‚| |¡dkst‚| |d ¡dks*t‚|d |ks<t‚| |d d¡ ||ksZt‚|d |kslt‚t |ƒdks~t‚| |¡dks’t‚| |d ¡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_len6   s:    z'TestHashTable.test_get_set_contains_lenc              	   C   sÚ  |t jkrt d¡ d}|ddd}t|ƒdks4t‚||ks@t‚| |d¡ t|ƒdks\t‚||ksht‚| |¡dkszt‚tjt	d	d
 | 
¡  W 5 Q R X | |d d¡ | d¡ tj|ksÄt‚||ksÐt‚|d |ksàt‚t|ƒdksðt‚| |¡dkst‚| |d ¡dkst‚| 
¡ dks.t‚| d¡ ||ksFt‚|d |ksXt‚t|ƒdksjt‚| |d ¡dks‚t‚| 
¡ dks”t‚|d |ks¦t‚tjt	t|d ƒd
 | |d ¡ W 5 Q R X d S )NúMask not supported for objectr   r   T©Z	uses_maskr   r   r   ÚNAr   r   é   r   r   )r   ÚPyObjectHashTabler$   Úskipr    r!   r"   r#   r%   r&   Úget_naZset_naÚpdr1   r'   r(   r   r   r   Útest_get_set_contains_len_maskZ   s<    



z,TestHashTable.test_get_set_contains_len_maskc           	      C   s‚   |t jkr~d}|ƒ }t |¡ |¡}t |¡ tj¡| }||j_||j_| ||¡ t	|ƒD ]}| 
|| ¡|| ks^t‚q^d S )NéM   )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_values~   s    
z%TestHashTable.test_map_keys_to_valuesc                 C   sX   d}|ƒ }t  |¡|  |¡}||j_| |¡ t|ƒD ]}| || ¡|ks8t‚q8d S )Né   )	r:   r;   r<   r>   r?   Úmap_locationsr@   r#   r!   ©r)   r*   r+   rA   rB   r-   rC   rE   r   r   r   Útest_map_locations‹   s    
z TestHashTable.test_map_locationsc              	   C   sÐ   |t jkrt d¡ d}|dd}t |¡|  |¡}||j_| 	|t 
dddg¡¡ t|d ƒD ]}| || ¡|ksbt‚qbtjtt t||d  ƒ¡d | ||d  ¡ W 5 Q R X | ¡ dksÌt‚d S )	Nr/   r2   Tr0   Fr   r   r   )r   r3   r$   r4   r:   r;   r<   r>   r?   rH   Úarrayr@   r#   r!   r%   r&   ÚreÚescaper'   r5   rI   r   r   r   Útest_map_locations_mask”   s    


"z%TestHashTable.test_map_locations_maskc           	      C   sd   d}|ƒ }t  |¡|  |¡}||j_| |¡ | |¡}t  |¡}t | t j	¡| t j	¡¡ d S )Nr2   )
r:   r;   r<   r>   r?   rH   ÚlookupÚtmÚassert_numpy_array_equalr=   )	r)   r*   r+   rA   rB   r-   rC   ÚresultÚexpectedr   r   r   Útest_lookup¤   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 )Néd   i   éÿÿÿÿ)	r:   Úint8Úuint8r;   r<   rH   rO   Úallr!   )r)   r*   r+   rB   r-   rC   Z
wrong_keysrR   r   r   r   Útest_lookup_wrong®   s    

zTestHashTable.test_lookup_wrongc           
      C   sØ   |t jkrt d¡ d}|dd}t |¡|  |¡}t dddg¡}||j_	| 
||¡ | ||¡}t |¡}	t | tj¡|	 tj¡¡ | t d| g¡ |¡t dg¡¡}t | tj¡tjdgtjd¡ d S )	Nr/   r2   Tr0   Fr   rV   ©r+   )r   r3   r$   r4   r:   r;   r<   rK   r>   r?   rH   rO   rP   rQ   r=   )
r)   r*   r+   rA   rB   r-   rC   ÚmaskrR   rS   r   r   r   Útest_lookup_maskº   s     



&
 ÿzTestHashTable.test_lookup_maskc           	      C   sb   |t jt jfkrd}nd}|ƒ }t  |¡|  |¡}t  |d¡}||j_| |¡}t	 
||¡ d S )NéX   éè  r   )r:   rW   rX   r;   r<   Úrepeatr>   r?   ÚuniquerP   rQ   )	r)   r*   r+   rA   rB   r-   rS   rC   ra   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:   rW   rX   r;   r<   r   rH   r   Úsizeofr!   )r)   r*   r+   rB   rC   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   rd   r!   )r)   r*   r+   r-   re   rf   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 )Nr_   r   r   Z
n_occupiedÚ	n_bucketsZupper_bound)Ú	get_stater!   )r)   r*   r+   r-   Ústater   r   r   Útest_get_stateð   s    zTestHashTable.test_get_staterB   r   én   c           	      C   sn   t  |¡ |¡}||ƒ}| ¡ d }| |¡ | ¡ d }||ksFt‚|ƒ }| |¡ || ¡ d ksjt‚d S ©Nrj   )r:   r;   r<   rk   rH   r!   )	r)   r*   r+   rB   rC   Ú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.   r7   rF   rJ   rN   rT   rZ   r]   rb   rg   ri   rm   r$   ÚmarkÚparametrizer@   rt   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)   Z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 )	NgX9´Èv¾@g…ëQ¸	@iùÿÿÿr   r   r2   ©Úwriter[   )r:   rK   ÚnanÚsetflagsr   ÚFloat64HashTablerH   rP   rQ   rO   r;   r    Úintp©r)   rA   Ú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 )Nr|   g        r   g       €r   )r   r…   r"   r    r!   )r)   rB   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<t‚||ksHt‚t ¡ }| |d¡ | |d¡ t|ƒdksxt‚d S )NÚdz=Ql         À r   l        À r   )ÚstructÚunpackÚpackr!   r   r…   r"   r    )r)   ZNAN1ZNAN2r‰   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            r[   r   )r:   rK   Úuint64r„   r   ÚUInt64HashTablerH   rP   rQ   rO   r;   r    r†   r‡   r   r   r   Útest_lookup_overflow7  s
    
z*TestHashTableUnsorted.test_lookup_overflowÚnvalsr   é
   z&htable, uniques, dtype, safely_resizesÚobjectFTÚfloat64r=   Ú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s¦t
‚d S )Nr_   r[   r   r   rV   zexternal reference.*r   )r:   rK   r@   r„   Z
get_labelsZto_arrayÚshaper$   r%   Ú
ValueErrorr!   )
r)   rA   ZhtableZuniquesr+   Zsafely_resizesr”   rD   Ú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_sizehintn  s    z3TestHashTableUnsorted.test_hashtable_large_sizehintN)ru   rv   rw   r€   rŠ   r‹   r   r“   r$   rx   ry   r   r3   ZObjectVectorr~   r…   ZFloat64Vectorr9   ZInt64VectorÚInt32HashTableZInt32Vectorr’   ZUInt64Vectorrœ   r    r   r   r   r   rz     s8   úþ#úþrz   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 ©Nrƒ   r   ©Úfloatr!   r   r3   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ƒƒ}||k	s0t‚t ¡ }| |d¡ | |¡dksVt‚d S r£   )Úcomplexr¥   r!   r   r3   r"   r#   r¦   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ƒ}||k	s6t‚t ¡ }| |d¡ | |¡dks\t‚tjt	d d}| |¡ W 5 Q R X t
|jƒt
|ƒks–t‚d S )Nrƒ   r   r   r   r   ©rª   r¥   r!   r   r3   r"   r#   r$   r%   r&   r'   Úvalue©r)   r§   r¨   Ú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ƒƒ}||k	s6t‚t ¡ }| |d¡ | |¡dks\t‚tjt	d d}| |¡ W 5 Q R X t
|jƒt
|ƒks–t‚d S )Nr   rƒ   r   r   r   r¬   r®   r   r   r   Útest_nan_complex_imagœ  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 )Nrƒ   r   r   r¤   r¦   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sNt‚tjtd d}| |¡ W 5 Q R X t	|j
ƒt	|ƒksˆt‚d S )Nr   r   rƒ   )r   r   r   r   )r¥   r   r3   r"   r#   r!   r$   r%   r&   r'   r­   r®   r   r   r   Útest_nan_in_nested_tuple°  s    z6TestPyObjectHashTableWithNans.test_nan_in_nested_tupleN)	ru   rv   rw   r©   r«   r±   r²   r³   r´   r   r   r   r   r¢     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 )Nrƒ   )r¥   r   Zobject_hashr!   Zobjects_are_equal)ÚaÚbr   r   r   Útest_hash_equal_tuple_with_nans¼  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   rV   r[   r   )r   r9   r:   rK   r=   r>   r?   Zget_labels_groupbyr†   rP   rQ   )rA   r-   rD   Úarrra   Zexpected_arrZexpected_uniquer   r   r   Ú!test_get_labels_groupby_for_Int64Ã  s    r¹   c               	   C   sp   d} t  | ¡ t j¡ t j¡}tƒ B t ¡ }| |¡ t	ƒ }| 
¡ }||ksRt‚~t	ƒ dksbt‚W 5 Q R X d S )Nr_   r   )r:   r;   r<   Ústr_Úobject_r   r   r~   rH   r   rd   r!   )rB   rC   r-   re   rf   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 rh   )r   r   r~   r   rd   r!   )r-   re   rf   r   r   r   Ú*test_tracemalloc_for_empty_StringHashTableÛ  s    r½   rB   r   rn   c                 C   s|   t  | ¡ t j¡ t j¡}t | ¡}| ¡ d }| |¡ | ¡ d }||ksRt	‚t ¡ }| |¡ || ¡ d ksxt	‚d S ro   )
r:   r;   r<   rº   r»   r   r~   rk   rH   r!   )rB   rC   rp   rq   rr   rs   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sŽt‚d S )Nrƒ   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•   r[   r   )r:   Úfullrƒ   rH   r    r!   r#   )r)   r*   r+   rB   r-   rC   r   r   r   rJ     s    
z(TestHashTableWithNans.test_map_locationsc                 C   sJ   d}|ƒ }t j|t j|d}| |¡}t  t  |¡¡rBt|ƒdksFt‚d S )Niü  r[   r   )r:   rÀ   rƒ   ra   rY   Úisnanr    r!   )r)   r*   r+   rB   r-   rC   ra   r   r   r   rb     s
    
z!TestHashTableWithNans.test_uniqueN)ru   rv   rw   r.   rJ   rb   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 )rƒ   ©r¥   ©Ú.0rE   r   r   r   Ú
<listcomp>  s     z6test_unique_for_nan_objects_floats.<locals>.<listcomp>é2   r[   r   ©	r   r3   r:   rK   r@   r»   ra   r    r!   ©r-   rC   ra   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 )rƒ   ç      ð?)rª   r¥   rÃ   r   r   r   rÅ   &  s     z7test_unique_for_nan_objects_complex.<locals>.<listcomp>rÆ   r[   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Ê   rƒ   rÂ   rÃ   r   r   r   rÅ   .  s     z5test_unique_for_nan_objects_tuple.<locals>.<listcomp>rÆ   r[   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:   r;   r<   r`   r>   r?   r   Úvalue_countrP   rQ   ÚsortrY   r!   )r)   r+   rA   rB   rS   ÚvaluesrC   Úcountsr   r   r   Útest_value_countH  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   é   r2   rV   rG   F)r:   rK   r<   r>   r?   r   rÏ   rP   rQ   rY   r!   )r)   r+   rA   rÑ   rC   rÒ   r   r   r   Útest_value_count_stableQ  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 )NrU   r   r[   F)r:   r`   r;   r<   r>   r?   r   Ú
duplicatedÚ	ones_likeÚbool_rP   rQ   )r)   r+   rA   rB   rÑ   rR   rS   r   r   r   Útest_duplicated_firstY  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;   r<   r>   r?   r   ÚismemberrØ   rÙ   rP   rQ   )r)   r+   rA   rB   r¸   rÑ   rR   rS   r   r   r   Útest_ismember_yesb  s    z#TestHelpFunctions.test_ismember_yesc                 C   sT   d}t  |¡ |¡}t  |¡|  |¡}t ||¡}t j|t jd}t ||¡ d S )Né   r[   )	r:   r;   r<   r   rÜ   Z
zeros_likerÙ   rP   rQ   )r)   r+   rB   r¸   rÑ   rR   rS   r   r   r   Útest_ismember_nol  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 )Né5   ig+  r   r   r   F)r:   rW   rX   r`   r;   r<   r>   r?   r   Úmoder!   )r)   r+   rA   rB   rÑ   rR   r   r   r   Ú	test_modet  s    zTestHelpFunctions.test_modec              	   C   sB   t  dddddddg¡ |¡}||j_t |d¡}t ||¡ d S rÔ   )	r:   rK   r<   r>   r?   r   rá   rP   rQ   )r)   r+   rA   rÑ   rC   r   r   r   Útest_mode_stable  s    z"TestHelpFunctions.test_mode_stableN)
ru   rv   rw   rÓ   rÖ   rÚ   rÝ   rß   râ   rã   r   r   r   r   rÍ   4  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   r[   F)r6   r1   r:   rƒ   ZNaTrK   r»   r   rá   r   r    r!   )ZnullsrÑ   Úmodesr   r   r   Útest_modes_with_nans†  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   r2   r[   r   r   )	r:   rK   r†   r>   r?   r   Úunique_label_indicesrP   rQ   )rA   rC   rR   rS   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_dtyperV   r•   )r:   ÚrandomÚrandintr<   r†   r   ræ   ra   rP   rQ   Úchoicer    )rµ   ÚleftÚrightr   r   r   Útest_unique_label_indices–  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 )Nr[   Tr   Fr   r2   )	r:   rK   rƒ   r   rÏ   r    r!   rY   rÁ   )r)   r+   rÑ   rC   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 )Nr[   FT)r:   rK   rƒ   r   r×   rP   rQ   )r)   r+   rÑ   rR   rS   r   r   r   rÚ   ¶  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 )Nr[   T©r:   rK   rƒ   r   rÜ   rÙ   rP   rQ   ©r)   r+   r¸   rÑ   rR   rS   r   r   r   rÝ   ¼  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 )Nr[   r   Frï   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s0t‚t  t |d¡¡sFt‚d S )Nr   r[   TF)r:   rK   rƒ   r   rá   r!   rÁ   )r)   r+   rÑ   r   r   r   râ   Ê  s    z#TestHelpFunctionsWithNans.test_modeN)ru   rv   rw   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 )Nrµ   rƒ   )r¶   r   TFr[   )r¥   r   r:   rK   rÙ   rP   rQ   ©rÑ   ÚcompsrR   rS   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      @        é   FTr[   )Úlistr@   r   r:   rK   rÙ   rP   rQ   rñ   r   r   r   Ú+test_float_complex_int_are_equal_as_objectsÙ  s
    
rö   )HÚ
contextlibr   rL   r   r   Útypingr   Znumpyr:   r$   Zpandas._libsr   r   Zpandasr6   Zpandas._testingZ_testingrP   Zpandas.core.algorithmsr   r   r   rx   ry   r3   r»   ZComplex128HashTableZ
complex128r9   r=   r’   r‘   r…   r—   ZComplex64HashTableZ	complex64r¡   r˜   ZUInt32HashTablerž   ZFloat32HashTableZfloat32ZInt16HashTableZint16ZUInt16HashTableZuint16ZInt8HashTablerW   ZUInt8HashTablerX   ZIntpHashTabler†   r   rz   r¢   r·   r¹   r¼   r½   r@   r¾   r¿   rÉ   rË   rÌ   rÍ   rå   rç   rí   rî   ró   rö   r   r   r   r   Ú<module>   s¬   













òþ Sx=





üþ	 	òþ?üþ	#	