o
    _~#ge                     @   s  d dl mZ d dlmZ d dl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ed f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    )	Generator)contextmanagerN)	hashtable)isinreturn)NNNc                   c   s*    t   z
d V  W t   d S t   w N)tracemallocstartstop r   r   /var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/pandas/tests/libs/test_hashtable.pyactivated_tracemalloc   s
   r   c                  C   s4   t  } | t dt f} tdd | jD S )NTc                 s   s    | ]}|j V  qd S r   )size).0xr   r   r   	<genexpr>   s    z-get_allocated_khash_memory.<locals>.<genexpr>)r   take_snapshotfilter_tracesDomainFilterhtget_hashtable_trace_domainsumtraces)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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 ||d d ||v sJ |d |v sJ t |dksJ ||dksJ ||d dk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_len6   s<   "z'TestHashTable.test_get_set_contains_lenc                 C   s  |t jkr
td d}|ddd}t|dksJ ||vs J ||d t|dks.J ||v s4J ||dks=J tjtd	d
 |	  W d    n1 sSw   Y  ||d d |
d tj|v slJ ||v srJ |d |v szJ t|dksJ ||dksJ ||d dksJ |	 dksJ |
d ||v sJ |d |v sJ t|dksJ ||d dksJ |	 dksJ |d |vsJ tjtt|d d
 ||d  W d    d S 1 sw   Y  d S )NMask not supported for objectr   r   T	uses_maskr   r   r   NAr#   r       r"   r!   )r   PyObjectHashTabler(   skipr%   r&   r'   r)   r*   get_naset_napdr6   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>J q/d S d S )NM   )r   Int64HashTablenparangeastypeint64flags	writeablemap_keys_to_valuesranger'   )	r-   r.   r/   writableNr1   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s)J qd S )N   )r@   rA   rB   rD   rE   map_locationsrG   r'   r-   r.   r/   rH   rI   r1   rJ   rL   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
g d t|d D ]}||| |ks=J q0tjttt||d  d |||d   W d    n1 sbw   Y  | dksoJ d S )	Nr3   r7   Tr4   )FFTr   r#   r!   )r   r8   r(   r9   r@   rA   rB   rD   rE   rO   arrayrG   r'   r)   r*   reescaper+   r:   rP   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 )Nr7   )
r@   rA   rB   rD   rE   rO   lookuptmassert_numpy_array_equalrC   )	r-   r.   r/   rH   rI   r1   rJ   resultexpectedr   r   r   test_lookup   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   )r@   int8uint8rA   rB   rO   rV   all)r-   r.   r/   rI   r1   rJ   
wrong_keysrY   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g d}||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 )
Nr3   r7   Tr4   )FTFr   Fr]   r/   )r   r8   r(   r9   r@   rA   rB   rR   rD   rE   rO   rV   rW   rX   rC   )
r-   r.   r/   rH   rI   r1   rJ   maskrY   rZ   r   r   r   test_lookup_mask   s   



&zTestHashTable.test_lookup_maskc           	      C   sb   |t jt jfv rd}nd}| }t || |}t |d}||j_||}t	
|| d S )NX     r   )r@   r^   r_   rA   rB   repeatrD   rE   uniquerW   rX   )	r-   r.   r/   rH   rI   r1   rZ   rJ   ri   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   )	r@   r^   r_   rA   rB   r   rO   r   sizeof)r-   r.   r/   rI   rJ   r1   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   rl   )r-   r.   r/   r1   rm   rn   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 )Nrg   r   r   
n_occupied	n_bucketsupper_bound)	get_state)r-   r.   r/   r1   stater   r   r   test_get_state   s   zTestHashTable.test_get_staterI   r   n   c           	      C   sn   t ||}||}| d }|| | d }||ks#J | }|| || d ks5J d S Nrs   )r@   rA   rB   ru   rO   )	r-   r.   r/   rI   rJ   preallocated_tablen_buckets_startn_buckets_endclean_tabler   r   r   test_no_reallocation   s   

z"TestHashTable.test_no_reallocationN)__name__
__module____qualname__r2   r=   rM   rQ   rU   r[   rb   re   rj   ro   rq   rw   r(   markparametrizerG   r~   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!   r7   writerc   )r@   rR   nansetflagsr   Float64HashTablerO   rW   rX   rV   rA   r%   intpr-   rH   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 )Nr   g        r   g       r   )r   r   r&   r%   )r-   rI   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            rc   r   )r@   rR   uint64r   r   UInt64HashTablerO   rW   rX   rV   rA   r%   r   r   r   r   r   test_lookup_overflow7  s
   
&z*TestHashTableUnsorted.test_lookup_overflownvalsr   
   z&htable, uniques, dtype, safely_resizesobjectFTfloat64rC   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 )Nrg   rc   r   r   r]   zexternal reference.*r#   )
r@   rR   rG   r   
get_labelsto_arrayshaper(   r)   
ValueError)
r-   rH   htableuniquesr/   safely_resizesr   rK   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)r@   iinfouint32max)r-   r   r   r   r   r   test_hashtable_large_sizehintn  s   z3TestHashTableUnsorted.test_hashtable_large_sizehintN)r   r   r   r   r   r   r   r   r(   r   r   r   r8   ObjectVectorr   r   Float64Vectorr?   Int64VectorInt32HashTableInt32Vectorr   UInt64Vectorr   r   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s!J d S Nr   r   floatr   r8   r&   r'   r-   nan1nan2r1   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sJ t }||d ||dks+J d S r   )complexr   r   r8   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}||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   r8   r&   r'   r(   r)   r*   r+   valuer-   r   r   otherr1   errorr   r   r   test_nan_complex_real     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_imag  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_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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   r8   r&   r'   r(   r)   r*   r+   r   r   r   r   r   test_nan_in_nested_tuple  s   z6TestPyObjectHashTableWithNans.test_nan_in_nested_tupleN)	r   r   r   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s$J t| |s,J d S )Nr   )r   r   object_hash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!   r]   r!   r   r]   rc   )r   r   r]   r   r   r]   r   r!   )r   r?   r@   rR   rC   rD   rE   get_labels_groupbyr   rW   rX   )rH   r1   rK   arrri   expected_arrexpected_uniquer   r   r   !test_get_labels_groupby_for_Int64  s   r   c                  C   s   d} t | t jt j}t ' t }|| t	 }|
 }||ks)J ~t	 dks1J W d    d S 1 s<w   Y  d S )Nrg   r   )r@   rA   rB   str_object_r   r   r   rO   r   rl   )rI   rJ   r1   rm   rn   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 rp   )r   r   r   r   rl   )r1   rm   rn   r   r   r   *test_tracemalloc_for_empty_StringHashTable  s   "r   rI   r   rx   c                 C   s|   t | t jt j}t| }| d }|| | d }||ks)J t }|| || d ks<J d S ry   )	r@   rA   rB   r   r   r   r   ru   rO   )rI   rJ   rz   r{   r|   r}   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   r2     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   rc   r   )r@   fullr   rO   r%   r'   )r-   r.   r/   rI   r1   rJ   r   r   r   rQ     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  rc   r   )r@   r   r   ri   r`   isnanr%   )r-   r.   r/   rI   r1   rJ   ri   r   r   r   rj     s
   
$z!TestHashTableWithNans.test_uniqueN)r   r   r   r2   rQ   rj   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   r   rL   r   r   r   
<listcomp>  s    z6test_unique_for_nan_objects_floats.<locals>.<listcomp>2   rc   r   r   r8   r@   rR   rG   r   ri   r%   r1   rJ   ri   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   rc   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   rc   r!   r   r   r   r   r   !test_unique_for_nan_objects_tuple+  s   
r   r/   c                   @   sL   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S )TestHelpFunctionsc           	      C   sf   d}t || |}t |d}||j_t|d\}}}t	t 
|| t |dks1J d S )N+   r   F)r@   rA   rB   rh   rD   rE   r   value_countrW   rX   sortr`   )	r-   r/   rH   rI   rZ   valuesrJ   counts_r   r   r   test_value_countH  s   z"TestHelpFunctions.test_value_countc                 C   s~   |t jkr
td t jdgd |d}t jdt jd}d|d< d|d< tj|d|d	\}}}t	|d
ks7J |d
ks=J d S )Nz%mask not implemented for object dtyper   r   rc   )r   Tr   F)rd   r!   )
r@   r   r(   r9   rR   zerosbool_r   r   r%   )r-   r/   r   rd   rJ   r   
na_counterr   r   r   test_value_count_maskQ  s   

z'TestHelpFunctions.test_value_count_maskc                 C   sP   t g d|}||j_t|d\}}}t|| t 	|dks&J d S )Nr!   r   r      r7   r]   rN   Fr   )
r@   rR   rB   rD   rE   r   r   rW   rX   r`   )r-   r/   rH   r   rJ   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 )Nr\   r   rc   F)r@   rh   rA   rB   rD   rE   r   
duplicated	ones_liker   rW   rX   )r-   r/   rH   rI   r   rY   rZ   r   r   r   test_duplicated_firstd  s   
z'TestHelpFunctions.test_duplicated_firstc                 C   s`   d}t ||}t ||}||j_||j_t||}t j|t jd}t	
|| d S )N   rc   )r@   rA   rB   rD   rE   r   ismemberr   r   rW   rX   )r-   r/   rH   rI   r   r   rY   rZ   r   r   r   test_ismember_yesm  s   z#TestHelpFunctions.test_ismember_yesc                 C   sT   d}t ||}t || |}t||}t j|t jd}t|| d S )N   rc   )	r@   rA   rB   r   r   
zeros_liker   rW   rX   )r-   r/   rI   r   r   rY   rZ   r   r   r   test_ismember_now  s   z"TestHelpFunctions.test_ismember_noc                 C   sb   |t jt jfv rd}nd}t t ||d}d|d< ||j_t	|dd }|dks/J d S )N5   ig+  r   r   r   F)
r@   r^   r_   rh   rA   rB   rD   rE   r   mode)r-   r/   rH   rI   r   rY   r   r   r   	test_mode  s   zTestHelpFunctions.test_modec                 C   s<   t g d|}||j_t|dd }t|| d S )Nr   Fr   )	r@   rR   rB   rD   rE   r   r  rW   rX   )r-   r/   rH   r   rJ   r   r   r   test_mode_stable  s   z"TestHelpFunctions.test_mode_stableN)r   r   r   r   r   r   r   r  r  r  r  r   r   r   r   r   4  s    		
r   c                  C   sR   t jtjt jd g} tjdg| d  tjd}t|dd }|j	t
| ks'J d S )NTr!   rc   Fr   )r<   r6   r@   r   NaTrR   r   r   r  r   r%   )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   r7   rc   )r   r   r   )	r@   rR   r   rD   rE   r   unique_label_indicesrW   rX   )rH   rJ   rY   rZ   r   r   r   test_unique_label_indices_intp  s
   
r  c                  C   s   t jddddt j} t| }t j| ddd }t	j
||dd d	| t jdt| d
< t| }t j| ddd dd  }t	j
||dd d S )Nr!   r   i   i   T)return_indexF)check_dtyper]   r   )r@   randomdefault_rngintegersrB   r   r   r  ri   rW   rX   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J t|d\}}}t|dkr5t t |s7J |d dks?J d S )Nrc   Tr   Fr   r7   )r@   rR   r   r   r   r%   r`   r   )r-   r/   r   rJ   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 )Nrc   )FTT)r@   rR   r   r   r   rW   rX   )r-   r/   r   rY   rZ   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 )Nrc   )TTTr@   rR   r   r   r   r   rW   rX   r-   r/   r   r   rY   rZ   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 )Nrc   r   )FFFr  r  r   r   r   r    s
   z*TestHelpFunctionsWithNans.test_ismember_noc                 C   sR   t jdt jt jt jg|d}t|dd dksJ t t|dd s'J d S )Nr   rc   Tr   F)r@   rR   r   r   r  r   )r-   r/   r   r   r   r   r    s   z#TestHelpFunctionsWithNans.test_modeN)r   r   r   r   r   r  r  r  r   r   r   r   r    s    
r  c                  C   s~   dt dfdg} dt dfg}d}tjt|d t| |}W d    n1 s(w   Y  tjddgtjd}t|| d S )	Nr   r   )r   r   z+isin with argument that is not not a Seriesr#   TFrc   )	r   rW   assert_produces_warningFutureWarningr   r@   rR   r   rX   )r   compsmsgrY   rZ   r   r   r   test_ismember_tuple_with_nans  s   r  c                  C   sR   g d} t td}ttj| tdt|}tjg dtjd}t	|| d S )N)r   r   g      @y      @           rc   )FTTT)
listrG   r   r@   rR   r   asarrayr   rW   rX   )r   r  rY   rZ   r   r   r   +test_float_complex_int_are_equal_as_objects  s
   r#  )Hcollections.abcr   
contextlibr   rS   r   r   numpyr@   r(   pandas._libsr   r   pandasr<   pandas._testing_testingrW   pandas.core.algorithmsr   r   r   r   r   r8   r   Complex128HashTable
complex128r?   rC   r   r   r   r   Complex64HashTable	complex64r   r   UInt32HashTabler   Float32HashTablefloat32Int16HashTableint16UInt16HashTableuint16Int8HashTabler^   UInt8HashTabler_   IntpHashTabler   r   r   r   r   r   r   r   rG   r   r   r   r   r   r   r  r  r  r  r  r#  r   r   r   r   <module>   s    













 Sx=





	 	J	#