
    J/PhFN                        d 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mZ ddlmZmZmZmZ dZerd	nd
Z G d de          Z G d de          Z G d de          Z G d de	j                  Z G d de          ZdS )z2
Testing C implementation of the numba dictionary
    N)TestCase)
_helperlibjittypedtypes)	IS_32BITS)UniTupleModel)register_modeltypeof_implunboxoverload      c                   x    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )DictzWA wrapper around the C-API to provide a minimal dictionary object for
    testing.
    c                 f    || _         || _        || _        |                     ||          | _        dS )z
        Parameters
        ----------
        tc : TestCase instance
        keysize : int
            byte size for the key
        valsize : int
            byte size for the value
        N)tckeysizevalsizedict_new_minsizedp)selfr   r   r   s       Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_dictimpl.py__init__zDict.__init__   s4     ''99    c                 D    | j                             | j                   d S N)r   numba_dict_freer   r   s    r   __del__zDict.__del__(   s     (((((r   c                 *    |                                  S r   )dict_lengthr    s    r   __len__zDict.__len__+   s    !!!r   c                 j   t          |                                          }t          |                                          }| j                            t	          |          | j                   | j                            t	          |          | j                   |                     ||           d S r   )bytesencoder   assertEquallenr   r   dict_insert)r   kvbkbvs        r   __setitem__zDict.__setitem__.   s    188::188::CGGT\222CGGT\222R     r   c                    t          |                                          }| j                            t	          |          | j                   |                     |          \  }}|t          k    rt          |	                                S r   )
r&   r'   r   r(   r)   r   dict_lookup
DKIX_EMPTYKeyErrordecode)r   r+   r-   ixolds        r   __getitem__zDict.__getitem__5   sl    188::CGGT\222""2&&CN::<<r   c                     t          |                                          }| j                            t	          |          | j                   |                     |          st          |          d S r   )r&   r'   r   r(   r)   r   dict_delitemr3   )r   r+   r-   s      r   __delitem__zDict.__delitem__>   sc    188::CGGT\222  $$ 	1++	 	r   c                 6    	 | |         S # t           $ r Y d S w xY wr   )r3   )r   r+   s     r   getzDict.getD   s2    	7N 	 	 	FF	s   
 
c                      t          |           S r   )DictIterr    s    r   itemsz
Dict.itemsJ   s    ~~r   c                     |                                  \  }}|                                |                                fS r   )dict_popitemr4   )r   r+   r,   s      r   popitemzDict.popitemM   s2      ""1xxzz188::%%r   c                     t          j                    }| j                            t          j        |          d||          }| j                            |d           |S Nr   )ctypesc_void_pr   numba_dict_new_sizedbyrefr(   )r   key_sizeval_sizer   statuss        r   r   zDict.dict_new_minsizeU   sX    _--La8
 
 	FA&&&	r   c                 @    | j                             | j                  S r   )r   numba_dict_lengthr   r    s    r   r#   zDict.dict_length]   s    w((111r   c                     t          |          }| j                            | j        |||          }| j                            |d           d S rD   )hashr   numba_dict_insert_ezr   assertGreaterEqual)r   	key_bytes	val_byteshashvalrK   s        r   r*   zDict.dict_insert`   sO    y//--GY
 
 	""61-----r   c                     t          |          }t          j        | j                  }| j                            | j        |||          }| j                            |t                     ||j	        fS r   )
rO   rE   create_string_bufferr   r   numba_dict_lookupr   rQ   r2   value)r   rR   rT   oldval_bytesr5   s        r   r1   zDict.dict_lookupg   si    y//24<@@W&&GY
 
 	""2z222<%%%r   c                     |                      |          \  }}|t          k    rdS t          |          }| j                            | j        ||          }| j                            |d           dS )NFr   T)r1   r2   rO   r   numba_dict_delitemr   r(   )r   rR   r5   oldvalrT   rK   s         r   r9   zDict.dict_delitemp   sl    %%i00
F5y//++DGWbAAFA&&&tr   c                 .   t          j        | j                  }t          j        | j                  }| j                            | j        ||          }|dk    r/|dk    rt          d          | j                            d           |j	        |j	        fS )Nr   popitem(): dictionary is emptyUnknown)
rE   rV   r   r   r   numba_dict_popitemr   r3   _failrX   )r   rR   rS   rK   s       r   rA   zDict.dict_popitemy   s    /==	/==	++DGY	JJQ;;||?@@@i(((	//r   c                 F    | j                             || j                   d S r   )r   numba_dict_iterr   )r   itptrs     r   	dict_iterzDict.dict_iter   s"    tw/////r   c                    t          j        d          }t          j        d          }| j                            |t          j        |          t          j        |                    }|dk    rt          d          |dk    rd S | j                            |d           | j                            |j        t          z  dd           | j                            |j        t          z  dd           t           j
        | j        z                      |j                  }t           j
        | j        z                      |j                  }|j        |j        fS )Nr   zdictionary mutatedzkey not aligned)msgzval not aligned)rE   rF   r   numba_dict_iter_nextrH   
ValueErrorrQ   r(   rX   ALIGNc_charr   from_addressr   )r   re   r-   r.   rK   keyvals          r   dict_iter_nextzDict.dict_iter_next   s)   _Q_Q--6<##V\"%5%5
 
 R<<1222r\\FG&&vq111
 G5 0!9JKKKG5 0!9JKKK=4</==bhGGC=4</==bhGGC9ci''r   N)__name__
__module____qualname____doc__r   r!   r$   r/   r7   r:   r<   r?   rB   r   r#   r*   r1   r9   rA   rf   rr    r   r   r   r      s        : : :) ) )" " "! ! !           & & &  2 2 2. . .& & &  	0 	0 	00 0 0( ( ( ( (r   r   c                   (    e Zd ZdZd Zd Zd ZeZdS )r>   zA iterator for the `Dict.items()`.

    Only the `.items()` is needed.  `.keys` and `.values` can be trivially
    implemented on the `.items` iterator.
    c                    || _         | j         j                                        }t          j        |z  d          | _        t          j        | j        t          j                  | _        | j         	                    | j                   d S rD   )
parentr   numba_dict_iter_sizeofrE   c_char_pit_state_bufcastrF   itrf   )r   rz   itsizes      r   r   zDictIter.__init__   sk    6688#_v5q99+d/AAdg&&&&&r   c                     | S r   rw   r    s    r   __iter__zDictIter.__iter__   s    r   c                     | j                             | j                  }|t          |\  }}|                                |                                fS r   )rz   rr   r   StopIterationr4   )r   outr+   r,   s       r   __next__zDictIter.__next__   sH    k((11;DAq88::qxxzz))r   N)rs   rt   ru   rv   r   r   r   nextrw   r   r   r>   r>      sL         
' ' '  * * * DDDr   r>   c                       e Zd ZdZd ZdS )Parametrizedz_supporting type for TestDictImpl.test_parametrized_types
    needs to be global to be cacheablec                 <    t          d |D                       sJ d S )Nc              3   @   K   | ]}t          |t                    V  d S r   )
isinstancestr).0r,   s     r   	<genexpr>z(Parametrized.__init__.<locals>.<genexpr>   s,      33!:a%%333333r   )all)r   tups     r   r   zParametrized.__init__   s+    33s3333333333r   N)rs   rt   ru   rv   r   rw   r   r   r   r      s-        * *4 4 4 4 4r   r   c                   >     e Zd ZdZ fdZed             Zd Z xZS )ParametrizedTypezUthis is essentially UniTuple(unicode_type, n)
    BUT type name is the same for all nc                     t          t          |                               d           t          j        | _        t          |          | _        d S )Nr   )superr   r   r   unicode_typedtyper)   n)r   rX   	__class__s     r   r   zParametrizedType.__init__   s>    %%../ABBB'
Ur   c                     | j         S r   r   r    s    r   rp   zParametrizedType.key   s	    vr   c                     | j         S r   r   r    s    r   r$   zParametrizedType.__len__   s	    vr   )	rs   rt   ru   rv   r   propertyrp   r$   __classcell__)r   s   @r   r   r      sl        + +    
   X      r   r   c                   d    e Zd Zd Zd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd Zd Zd Zd ZdS )TestDictImplc           	          t           j        }t           j        }t           j        }dd} |dt           j                  | _         |dt           j        t          j        |          t           j        t           j        t           j        g          | _         |dd|g          | _         |dt           j        |g          | _         |dt           j        |t           j	        |t           j	        g          | _
         |d	t           j        |t           j	        |t           j	        g          | _         |d
t           j        ||t           j        g          | _         |dt           j        |t           j	        t           j	        g          | _         |dt           j                  | _         |dd||g          | _         |dt           j        |t          j        t           j                  t          j        t           j                  g          | _        dS )zEBind to the c_helper library and provide the ctypes wrapper.
        rw   c                 \    t          j        |g|R  } |t          j        |                    S r   )rE   	CFUNCTYPEr   	c_helpers)namerestypeargtypesprotos       r   wrapz TestDictImpl.setUp.<locals>.wrap   s2    $W8x888E5-d3444r   	test_dictdict_new_sized	dict_freeNr#   dict_insert_ezr1   r9   rA   dict_iter_sizeofrf   rr   )rw   )rE   rF   	c_ssize_tc_intnumba_test_dictPOINTERrG   r   rM   r|   rP   rW   r[   ra   c_size_tr{   rd   rk   )r   dict_titer_thash_tr   s        r   setUpzTestDictImpl.setUp   s(    !	5 	5 	5 	5
  $tL 
  
 %)DLv&&   		%
 	%
!  $tH 
  
 "&H"
 "
 %)DL		%
 	%
!  "&		"
 	"
 #'$L #
 #
 #'$L#
 #
 '+dO'
 '
#  $t 
  
 %)DLv//v//%
 %
!!!r   c                 Z    |                                  }|                     |d           d S rD   )r   r(   )r   rets     r   test_simple_c_testzTestDictImpl.test_simple_c_test[  s/    ""$$a     r   c                    t          | dd          }|                     t          |          d           |                     |                    d                     d|d<   |                     t          |          d           |                     |                    d                     |                     |d         d           d|d<   |                     t          |          d           |                     |d         d           d|d	<   |                     t          |          d
           |                     |d         d           |                     |d	         d           d|d<   |                     t          |          d           |                     |d         d           |                     |d	         d           |                     |d         d           d S )Nr   r   r   abcdbeefcafe   cafe0000cafe0001abce   cafe0002abcf   )r   r(   r)   assertIsNoner<   assertIsNotNoner   ds     r   test_insertion_smallz!TestDictImpl.test_insertion_small`  s   q!Q###!%%--((( &	Q###QUU6]]+++6J/// &	Q###6J/// &	Q###6J///6J/// &	Q###6J///6J///6J/////r   c                 R   t          | dd          }d }d }t          |          D ]?} ||          | ||          <   |                     t          |          |dz              @t          |          D ]0}|                     | ||                    ||                     1d S )Nr   c                 ,    d                     |           S )Nz	key_{:04}formatr,   s    r   make_keyz3TestDictImpl.check_insertion_many.<locals>.make_key      %%a(((r   c                 ,    d                     |           S )Nz	val_{:04}r   r   s    r   make_valz3TestDictImpl.check_insertion_many.<locals>.make_val  r   r   r   )r   ranger(   r)   )r   nmaxr   r   r   is         r   check_insertion_manyz!TestDictImpl.check_insertion_many~  s    q!	) 	) 	)	) 	) 	) t 	, 	,A%Xa[[AhhqkkNSVVQU++++ t 	: 	:AQxx{{^XXa[[9999	: 	:r   c                    |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d	           |                      d
           |                      d           |                      d           |                      d           d S )N   )r   r   	          !   i     i  i  i   i  )r   r    s    r   test_insertion_manyz TestDictImpl.test_insertion_many  s    	!!q!)))!!q!)))!!q!)))!!r!***!!r!***!!r!***!!t!,,,!!t!,,,!!t!,,,!!t!,,,!!t!,,,!!t!,,,,,r   c                    t          | dd          }|                     t          |          d           |                     |                    d                     d|d<   d|d<   d|d	<   |                     t          |          d
           |                     |d         d           |                     |d         d           |                     |d	         d           |                     t          |          d
           |d= |                     |                    d                     |                     |d         d           |                     |d	         d           |                     t          |          d           |                     t                    5  |d= d d d            n# 1 swxY w Y   |d	= |                     |                    d                     |                     |d         d           |                     |                    d	                     |                     t          |          d           |d= |                     |                    d                     |                     |                    d                     |                     |                    d	                     |                     t          |          d           d S )Nr   r   r   r   r   r   r   r   r   r   r   r   )r   r(   r)   r   r<   assertRaisesr3   r   s     r   test_deletion_smallz TestDictImpl.test_deletion_small  s   q!Q###!%%--(((&	&	&	Q###6J///6J///6J///Q### fI!%%--(((6J///6J///Q### x(( 	 	&		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 fI!%%--(((6J///!%%--(((Q### fI!%%--(((!%%--(((!%%--(((Q#####s   &F66F:=F:r   c                    t          j        |           t          | dd          }i }d }d }t          |          D ]}	 ||	          | ||	          <   t          |          D ]9}	 ||	          }
 ||	          }|||
<   |                     ||
         |           :|                     t          |          |           t          j        t          |          |          }|                                }t          |d          D ]1\  }	}
||
= ||
= |                     t          |          ||	z
             2|                     t          |          ||z
             |D ]*}
| 
                    |                    |
                     +|D ]$}
|                     ||
         ||
                    %t          |          D ](}	 |||	z             }
 |||	z             }|||
<   |||
<   )|                     t          |          t          |                     |D ]$}
|                     ||
         ||
                    %d S )Nr   c                 ,    d                     |           S Nzk_{:06x}r   r   s    r   r   z4TestDictImpl.check_delete_randomly.<locals>.make_key      $$Q'''r   c                 ,    d                     |           S Nzv_{:06x}r   r   s    r   r   z4TestDictImpl.check_delete_randomly.<locals>.make_val  r   r   r   )start)randomseedr   r   r(   r)   samplelistcopy	enumerater   r<   )r   r   ndropnrefillr   r   keysr   r   r   r+   r,   droplistremains                 r   check_delete_randomlyz"TestDictImpl.check_delete_randomly  s   Dq!	( 	( 	(	( 	( 	( t 	) 	)A%Xa[[AhhqkkNN t 	& 	&AAADGQqT1%%%%Q&&& =dU33ha000 	/ 	/DAq!q	SVVTAX....Q...  	( 	(AaeeAhh''''  	. 	.AQqT6!9---- w 	 	A""A""AF1IAaDDVc!ff---  	. 	.AQqT6!9----	. 	.r   c                 V   |                      ddd           |                      ddd           |                      ddd	           |                      dd
d           |                      ddd           |                      ddd           |                      ddd           d S )Nr   r   r   r   r      
   r   d   2      c   r   i  r   i   r   r    s    r   test_delete_randomlyz!TestDictImpl.test_delete_randomly  s    ""A">>>"""b"AAA""2s"CCC""2s"CCC""3"DDD""C"CCC""C"FFFFFr   c                 6    |                      ddd           d S )Ni   i   r   r   r   r    s    r   test_delete_randomly_largez'TestDictImpl.test_delete_randomly_large  s%    
 	""UE"JJJJJr   c                    d}t          | dd          }d }d }t          |          D ]} ||          | ||          <   |                     t          |          |           |                                \  }}|                     t          |          |dz
             |                     | |t          |                               |                     | |t          |                               t          |          rt          |          }|                                \  }}|                     t          |          |dz
             |                     | |t          |                               |                     | |t          |                               t          |          |                     t          |          d           |                     t                    5 }	|                                 d d d            n# 1 swxY w Y   |                     dt          |	j	                             d S )Nr   r   c                 ,    d                     |           S r   r   r   s    r   r   z+TestDictImpl.test_popitem.<locals>.make_key  r   r   c                 ,    d                     |           S r   r   r   s    r   r   z+TestDictImpl.test_popitem.<locals>.make_val  r   r   r   r   r_   )
r   r   r(   r)   rB   r   r3   assertInr   	exception)
r   r   r   r   r   r   r+   r,   r   raisess
             r   test_popitemzTestDictImpl.test_popitem  si   q!	( 	( 	(	( 	( 	( t 	) 	)A%Xa[[AhhqkkNNQ&&&yy{{1Q***HHSVV,,---HHSVV,,---!ff 	2AA99;;DAqSVVQU+++QQ 0 0111QQ 0 0111 !ff 	2 	Q###x(( 	FIIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	, !!	
 	
 	
 	
 	
s   :HH"Hc                 `   t          | dd          }dd }fd}t                    D ]} ||          | ||          <   t          |                                          D ]F\  }\  }}|                      ||          |           |                      ||          |           Gd S )Nr   i  c                 ,    d                     |           S Nz{:04}r   r   s    r   r   z.TestDictImpl.test_iter_items.<locals>.make_key<  s    >>!$$$r   c                 4    d                     | z             S r  r   )r,   r   s    r   r   z.TestDictImpl.test_iter_items.<locals>.make_val?  s    >>!d(+++r   r   r   r   r?   r(   )r   r   r   r   r   r+   r,   r   s          @r   test_iter_itemszTestDictImpl.test_iter_items7  s    q!	% 	% 	%	, 	, 	, 	, 	, t 	) 	)A%Xa[[AhhqkkNN #17799-- 	- 	-IAv1XXa[[!,,,XXa[[!,,,,	- 	-r   c                 f   t          |           }fd}fd}t                    D ]} ||          | ||          <   t          |                                          D ]F\  }\  }}	|                      ||          |           |                      ||          |	           Gd S )Nc                 @    d                     |           d          S )N{:0{}}r   )r,   rI   s    r   r   z+TestDictImpl.check_sizing.<locals>.make_keyN  s     ??1h//		::r   c                 L    d                     | z
  dz
            d          S )Nr  r   r   )r,   r   rJ   s    r   r   z+TestDictImpl.check_sizing.<locals>.make_valQ  s(    ??4!8a<::9H9EEr   r  )
r   rI   rJ   r   r   r   r   r   r+   r,   s
    ```      r   check_sizingzTestDictImpl.check_sizingJ  s    x**	; 	; 	; 	; 	;	F 	F 	F 	F 	F 	F t 	) 	)A%Xa[[AhhqkkNN #17799-- 	- 	-IAv1XXa[[!,,,XXa[[!,,,,	- 	-r   c                 b    t          dd          D ]}|                     ||d|z             d S )Nr   r   r   )rI   rJ   r   )r   r  )r   r   s     r   test_sizingzTestDictImpl.test_sizing\  sI    q! 	A 	AAq11a4@@@@	A 	Ar   c                     t          t                    t                     t          j        t
                    d             }t          t                    d             }d t                    d             }t          dd          fd            }t          d          t          d	          }} |||            |	                                             |
                                 |j                                         t          d
          D ]!}|                      |||                     "dS )z*https://github.com/numba/numba/issues/6401c                      t          |           S r   )r   )rq   cs     r   typeof_unitz:TestDictImpl.test_parameterized_types.<locals>.typeof_unitf  s    #C(((r   c                 x    |                     t          j        | j        t	          |                     |          S r   )r   r   UniTupler   r)   )typobjcontexts      r   unbox_parametrizedzATestDictImpl.test_parameterized_types.<locals>.unbox_parametrizedj  s*    ==	3s88!D!DcJJJr   c                     J r   rw   r   s    r   dict_vs_cache_vs_parametrizedzLTestDictImpl.test_parameterized_types.<locals>.dict_vs_cache_vs_parametrizedn  s    Hr   c                     | fd}|S )Nc                 f    t           j                            t          j                  }| |d<   d S )Ndata)r   r   emptyr   r   )r,   r   r  s     r   %objmode_vs_cache_vs_parametrized_implz~TestDictImpl.test_parameterized_types.<locals>.ol_dict_vs_cache_vs_parametrized.<locals>.objmode_vs_cache_vs_parametrized_implu  s*    J$$U%7==&			r   rw   )r,   r&  r  s     @r    ol_dict_vs_cache_vs_parametrizedzOTestDictImpl.test_parameterized_types.<locals>.ol_dict_vs_cache_vs_parametrizedq  s)    C    
 98r   T)nopythoncachec                 4     |             |           d S r   rw   )xyr!  s     r   set_parametrized_datazDTestDictImpl.test_parameterized_types.<locals>.set_parametrized_data|  s-     *)!,,,))!,,,,,r   )ab)r.  r   N)r
   r   r	   r   registerr   r   r   r   _make_finalizer_reset_overloads	targetctxinitr   r   )	r   r  r  r'  r-  r+  r,  iir!  s	           @r   test_parameterized_typesz%TestDictImpl.test_parameterized_typesa  s    	)'((777		l	+	+	) 	) 
,	+	) 
	 	 	K 	K 
!	 	K	 	 	 
/	0	0	9 	9 
1	0	9 
d$	'	'	'	- 	- 	- 	- 
(	'	- J''f)=)=1a### 	0--//111..000',,...)) 	; 	;B33Aq99::::	; 	;r   N)r   )rs   rt   ru   r   r   r   r   r   r   r   r   r  r  r  r  r  r6  rw   r   r   r   r      s        F
 F
 F
P! ! !
0 0 0<: : :&- - -&'$ '$ '$R5. 5. 5. 5.nG G GK K K 
  
  
D- - -&- - -$A A A
/; /; /; /; /;r   r   )rv   rE   r   numba.tests.supportr   numbar   r   r   r   numba.core.configr   numba.core.datamodel.modelsr	   numba.extendingr
   r   r   r   r2   rm   objectr   r>   tupler   Typer   r   rw   r   r   <module>r?     s      ( ( ( ( ( ( / / / / / / / / / / / / ' ' ' ' ' ' 5 5 5 5 5 5 H H H H H H H H H H H H 
 AG( G( G( G( G(6 G( G( G(T    v   64 4 4 4 45 4 4 4    uz   "~; ~; ~; ~; ~;8 ~; ~; ~; ~; ~;r   