
    [e                       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m	Z	m
Z
mZmZ d dlmZ d dlZd dlmZ dZd Zd	 Zd#dZd$dZd$dZd$dZ	 d%d&dZd$dZd'dZd(d)dZd$dZ G d d ee          Z G d! d"e          ZdS )*    )annotationsN)UserDict)	ItemsViewKeysViewMutableMapping
ValuesView)ThreadPoolExecutor)ZictBase   c                @   t          j        d          g }t          j        t          j        z   t          |           D ]\}                    ||          }d                    fdt          |          D                       }|                    |           ]|S )N*    c              3  B   K   | ]}                               V  d S N)choice).0_charsrs     5lib/python3.11/site-packages/zict/tests/utils_test.py	<genexpr>z*generate_random_strings.<locals>.<genexpr>   s-      ;;AHHUOO;;;;;;    )	randomRandomstringascii_lowercasedigitsrangerandintjoinappend)	nmin_lenmax_lenoutr   ncharssr   r   s	          @@r   generate_random_stringsr(      s    bA
C"V]2E1XX  7G,,GG;;;;;U6]];;;;;

1Jr   c                Z    t          | t                    r| S |                     d          S )Nlatin1)
isinstancebytesencode)r'   s    r   to_bytestringr.   !   s+    !U "xx!!!r   zr   expected_itemslist[tuple[str, bytes]]returnNonec                   t          |                                           }t          |          t          |          k    sJ t          |          t          |          k    sJ t          |                                           d |D             k    sJ t          |                                           d |D             k    sJ t          |           d |D             k    sJ t          |                                 t                    sJ t          |                                 t                    sJ t          |                                 t                    sJ |d         |                                 v sJ |d         d         |                                 v sJ |d         d         | v sJ |d         d         |                                 v sJ t                      t                      f|                                 vsJ t                      |                                 vsJ t                      | vsJ t                      |                                 vsJ d S )Nc                    g | ]\  }}|S  r6   r   kvs      r   
<listcomp>zcheck_items.<locals>.<listcomp>-   s    222DAqa222r   c                    g | ]\  }}|S r6   r6   r7   s      r   r:   zcheck_items.<locals>.<listcomp>.   s    444da444r   c                    g | ]\  }}|S r6   r6   r7   s      r   r:   zcheck_items.<locals>.<listcomp>/   s    +++TQq+++r   r   r   )listitemslensortedkeysvaluesr+   r   r   r   object)r/   r0   r>   s      r   check_itemsrD   (   s&   OOEu::^,,,,,,%==F>222222>>22E2222222

44e444444477++U+++++++ affhh)))))ahhjj*-----aggii+++++8qwwyy    8A;!&&((""""8A;!8A;!((**$$$$HHfhhqwwyy00008816688####88188188::%%%%%%r   c           
     8   t          j        d          }t          t          j                  }d t          t          |          dd          D             }|                                  t          |           dk    sJ t          ||          D ]
\  }}|| |<   t          |           t          |          k    sJ t          |           t          |          k    sJ t          | 
                                          t          t          ||                    k    sJ t          d          D ]}|                    |           |                    |           t          ||          D ]
\  }}|| |<   t          | t          t          ||                               |                    |           |                    |           |                     t          ||                     t          | t          t          ||                               d S )Nr   c                ,    g | ]}t          |          S r6   )r.   )r   r'   s     r   r:   z/stress_test_mapping_updates.<locals>.<listcomp>F   s     RRR1mARRRr   r   
   r      )r   r   r=   r   r   r(   r?   clearzipr@   r>   r   shufflerD   update)r/   r   rA   rB   r8   r9   r   s          r   stress_test_mapping_updatesrM   ?   s    	bA&''DRR(?D		1b(Q(QRRRFGGIIIq66Q;;;;D&!!  1!q66SYY!99t$$$$!''))s4'8'8 9 999991XX 
0 
0			$			&f%% 	 	DAqAaDDAtCf--..///			$			&	T6""###AtCf--..////
0 
0r   c                   | rJ t          |           t          |                                           cxk    rg k    sn J t          |                                           g k    sJ t          |                                           g k    sJ t	          |           dk    sJ d| vsJ d|                                 vsJ d|                                 vsJ d|                                 vsJ d S )Nr   x)rO      123rP   )r=   rA   rB   r>   r?   r/   s    r   check_empty_mappingrR   ^   s    LLL77d16688nn**********

r!!!!		??b    q66Q;;;;a<<<<affhh		))))######r   c                >   t          |           j        t          |           v sJ t          |           j        t          |           v sJ t	          | t
                    sJ t          |            d| d<   d| d<   t          |           dk    sJ | d         dk    sJ t          | ddg           d| v sJ d| v sJ d| vsJ t                      | vsJ t          j        t                    5  | d          d	d	d	           n# 1 swxY w Y   |                     d
d           t          | g d           |                     ddg           t          | g d           |                     ddi           t          | g d           |                     t          ddg                     t          | g d           | d= t          j        t                    5  | d          d	d	d	           n# 1 swxY w Y   t          j        t                    5  | d= d	d	d	           n# 1 swxY w Y   d| vsJ t          |           h dk    sJ t          |           dk    sJ d| d<   t          |           dk    sJ | d         dk    sJ d| v sJ t!          |            d	S )zSee also test_zip.check_mapping   456abc   12xyz   rU   rT   )rW   rV   defN   707   000)rW   uvw)rY   )rW   r[   )r]   r\   rW   s   654r]   s   999)rY   r^   r_      321)rY   rW   r`   r_   foos   132bars   887)rY   ra   r_   rb   rd   >   re   rc   r]   rW      s       )type__name__strreprr+   r   rR   r?   rD   rC   pytestraisesKeyErrorrL   itersetrM   rQ   s    r   check_mappingrq   j   s   77s1vv%%%%77tAww&&&&a(((((AeHAeHq66Q;;;;U8vO^4555A::::A::::>>>>881	x	 	   	%               HHVH$$$FFFGGGHHo/000FFFGGGHHeV_FFFGGGHHT?O455666		
 	
 	
	 	 	 	
%	x	 	   	%              	x	 	   eH              >>>>q661111111q66Q;;;;AeHq66Q;;;;U8{""""A::::"""""s6   -	DD	D	G//G36G3H##H'*H'Fallow_keyerrorboolc                T    t          j        d          ddg fd}t          d          5 }|                    |ddd          }|                    |ddd          }|                                 |                                 d d d            n# 1 swxY w Y    rJ d S )	NrX   r   c                                                     t          d D                       r||<   	 |         |k    sJ |= n# t          $ r rY ? w xY w|vsJ t          j        t                    5  |         }d d d            n# 1 swxY w Y   t          j        t                    5  |= d d d            n# 1 swxY w Y   t                    dv sJ | xx         dz  cc<   t          d D                       d S d S )Nc              3  "   K   | ]
}|d k     V  dS rG   Nr6   r   cs     r   r   zBcheck_different_keys_threadsafe.<locals>.worker.<locals>.<genexpr>   &      ++Q!b&++++++r   )r   r   r   )waitanyrn   rl   rm   r?   )idxkeyvaluer   rr   barriercountersr/   s       r   workerz/check_different_keys_threadsafe.<locals>.worker   s   ++(+++++ 	AcFvcFF   ! H
 a<<<<x((  cF              x((  cF              q66V####SMMMQMMM! ++(+++++ 	 	 	 	 	s5   A AA9	BBB2CC	CrO   rP   r   yrT   )	threadingBarrierr	   submitresult)r/   rr   r   exf1f2r   r   s   ``    @@r   check_different_keys_threadsafer      s    ""G1vH       ( 
A		 "YYvq#v..YYvq#v..
		
			               LLLLLs   ABB Bc                   	 t          j        d          g d		 fd}	 fd}	 fd}	 fd}t          d          5 }|                    |          |                    |          |                    |          |                    |          g}|D ]}|                                 	 d d d            n# 1 swxY w Y                        dd            d S )Nrf   )r   r   r   r   c                                                        t          d D                       r0dd<   dxx         dz  cc<   t          d D                       .d S d S )Nc              3  "   K   | ]
}|d k     V  dS rw   r6   rx   s     r   r   z;check_same_key_threadsafe.<locals>.w_set.<locals>.<genexpr>   rz   r   rP   rO   r   r   )r{   r|   r   r   r/   s   r   w_setz(check_same_key_threadsafe.<locals>.w_set   s    ++(+++++ 	AcFQKKK1KKK ++(+++++ 	 	 	 	 	r   c                                                        t          d D                       rA                    d           dxx         dz  cc<   t          d D                       ?d S d S )Nc              3  "   K   | ]
}|d k     V  dS rw   r6   rx   s     r   r   z>check_same_key_threadsafe.<locals>.w_update.<locals>.<genexpr>   rz   r   rT   )rO   r   )r{   r|   rL   r   s   r   w_updatez+check_same_key_threadsafe.<locals>.w_update   s    ++(+++++ 	HHvHQKKK1KKK ++(+++++ 	 	 	 	 	r   c                                                        t          d D                       r@	 d= dxx         dz  cc<   n# t          $ r Y nw xY wt          d D                       >d S d S )Nc              3  "   K   | ]
}|d k     V  dS rw   r6   rx   s     r   r   z;check_same_key_threadsafe.<locals>.w_del.<locals>.<genexpr>   rz   r   rO   rX   r   r{   r|   rn   r   s   r   w_delz(check_same_key_threadsafe.<locals>.w_del   s    ++(+++++ 	cFq    	 ++(+++++ 	 	 	 	 	s   A 
AAc                                                        t          d D                       rI	 d         dv sJ dxx         dz  cc<   n# t          $ r Y nw xY wt          d D                       Gd S d S )Nc              3  "   K   | ]
}|d k     V  dS rw   r6   rx   s     r   r   z;check_same_key_threadsafe.<locals>.w_get.<locals>.<genexpr>   rz   r   rO   )rP   rT   rH   r   r   r   s   r   w_getz(check_same_key_threadsafe.<locals>.w_get   s    ++(+++++ 	v!11111q    	 ++(+++++ 	 	 	 	 	s   A 
AArO   )r   r   r	   r   r   pop)
r/   r   r   r   r   r   futuresfr   r   s
   `       @@r   check_same_key_threadsafer      s   ""G||H                         
A		 "IIeIIhIIeIIe	
  	 	AHHJJJJ	               EE#ts   A,C  CCr
   c                .    |                                   d S r   )closerQ   s    r   check_closingr      s    GGIIIIIr   Thas_delc                r   t                      }|| vsJ ||                                 vsJ |df|                                 vsJ t          j        t
                    5  d| |<   ddd           n# 1 swxY w Y   t          j        t
                    5  |                     |di           ddd           n# 1 swxY w Y   t          j        t                    5  | |          ddd           n# 1 swxY w Y   |r7t          j        t                    5  | |= ddd           dS # 1 swxY w Y   dS dS )zxz does not accept any Hashable as keys.
    Test that it reacts correctly when confronted with an invalid key type.
    rP   N)rC   rA   r>   rl   rm   	TypeErrorrL   rn   )r/   r   bads      r   check_bad_key_typesr      s4    ((Ca<<<<affhh=		))))	y	!	!  #              	y	!	!    	#v                             	x	 	   	#               ]8$$ 	 	#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 sH    A22A69A6B::B>B>	C33C7:C7D**D.1D.c                   t                      }||                                 vsJ d|f|                                 vsJ t          j        t
                    5  || d<   ddd           n# 1 swxY w Y   t          j        t
                    5  |                     d|i           ddd           dS # 1 swxY w Y   dS )zz does not accept any Python object as values.
    Test that it reacts correctly when confronted with an invalid value type.
    rO   N)rC   rB   r>   rl   rm   r   rL   )r/   r   s     r   check_bad_value_typesr     s;    ((Cahhjj    :QWWYY&&&&	y	!	!  #              	y	!	!  	#s                 s$   A,,A03A0B55B9<B9c                      e Zd Zd ZdS )
SimpleDictc                V    t          j        |            t          j        |            d S r   )r
   __init__r   )selfs    r   r   zSimpleDict.__init__  s*    $$r   N)ri   
__module____qualname__r   r6   r   r   r   r     s#                 r   r   c                  2     e Zd Z fdZ fdZ fdZ xZS )SlowDictc                X    || _         t                                          |            d S r   )delaysuperr   )r   r   	__class__s     r   r   zSlowDict.__init__%  s(    
r   c                x    t          j        | j                   t                                          |          S r   )timesleepr   r   __getitem__)r   r~   r   s     r   r   zSlowDict.__getitem__)  s-    
4:ww""3'''r   c                ~    t          j        | j                   t                                          ||           d S r   )r   r   r   r   __setitem__)r   r~   r   r   s      r   r   zSlowDict.__setitem__-  s5    
4:C'''''r   )ri   r   r   r   r   r   __classcell__)r   s   @r   r   r   $  sj            ( ( ( ( (( ( ( ( ( ( ( ( (r   r   )r/   r   r0   r1   r2   r3   )r/   r   r2   r3   )F)r/   r   rr   rs   r2   r3   )r/   r
   r2   r3   )T)r/   r   r   rs   r2   r3   ) 
__future__r   r   r   r   r   collectionsr   collections.abcr   r   r   r   concurrent.futuresr	   rl   zict.commonr
   REPEAT_STRESS_TESTSr(   r.   rD   rM   rR   rq   r   r   r   r   r   r   r   r6   r   r   <module>r      s   " " " " " "                    K K K K K K K K K K K K 1 1 1 1 1 1               
 
 
" " "& & & &.0 0 0 0>	$ 	$ 	$ 	$7# 7# 7# 7#v /4         F, , , ,^       *            8      ( ( ( ( (x ( ( ( ( (r   