
    shFN                        S r SSKrSSKrSSKJr  SSKJrJrJrJ	r	  SSK
Jr  SSKJr  SSKJrJrJrJr  Sr\(       a  S	OS
r " S S\5      r " S S\5      r " S S\5      r " S S\	R4                  5      r " S S\5      rg)z2
Testing C implementation of the numba dictionary
    N)TestCase)
_helperlibjittypedtypes)	IS_32BITS)UniTupleModel)register_modeltypeof_implunboxoverload      c                   ~    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rSrg)Dict   zOA wrapper around the C-API to provide a minimal dictionary object for
testing.
c                 T    Xl         X l        X0l        U R                  X#5      U l        g)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       m/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_dictimpl.py__init__Dict.__init__   s%     ''9    c                 N    U R                   R                  U R                  5        g N)r   numba_dict_freer   r   s    r   __del__Dict.__del__(   s    (r   c                 "    U R                  5       $ r    )dict_lengthr"   s    r   __len__Dict.__len__+   s    !!r   c                 F   [        UR                  5       5      n[        UR                  5       5      nU R                  R                  [	        U5      U R
                  5        U R                  R                  [	        U5      U R                  5        U R                  X45        g r    )bytesencoder   assertEquallenr   r   dict_insert)r   kvbkbvs        r   __setitem__Dict.__setitem__.   sh    188:188:CGT\\2CGT\\2 r   c                     [        UR                  5       5      nU R                  R                  [	        U5      U R
                  5        U R                  U5      u  p4U[        :X  a  [        eUR                  5       $ r    )
r*   r+   r   r,   r-   r   dict_lookup
DKIX_EMPTYKeyErrordecode)r   r/   r1   ixolds        r   __getitem__Dict.__getitem__5   sY    188:CGT\\2""2&N::<r   c                     [        UR                  5       5      nU R                  R                  [	        U5      U R
                  5        U R                  U5      (       d  [        U5      eg r    )r*   r+   r   r,   r-   r   dict_delitemr8   )r   r/   r1   s      r   __delitem__Dict.__delitem__>   sN    188:CGT\\2  $$1+ %r   c                 ,     X   $ ! [          a     g f = fr    )r8   )r   r/   s     r   getDict.getD   s     	7N 		s    
c                     [        U 5      $ r    )DictIterr"   s    r   items
Dict.itemsJ   s    ~r   c                 f    U R                  5       u  pUR                  5       UR                  5       4$ r    )dict_popitemr9   )r   r/   r0   s      r   popitemDict.popitemM   s)      "xxz188:%%r   c                     [         R                  " 5       nU R                  R                  [         R                  " U5      SX5      nU R                  R                  US5        U$ Nr   )ctypesc_void_pr   numba_dict_new_sizedbyrefr,   )r   key_sizeval_sizer   statuss        r   r   Dict.dict_new_minsizeU   sM    __--LLa
 	FA&	r   c                 L    U R                   R                  U R                  5      $ r    )r   numba_dict_lengthr   r"   s    r   r&   Dict.dict_length]   s    ww((11r   c                     [        U5      nU R                  R                  U R                  XU5      nU R                  R	                  US5        g rN   )hashr   numba_dict_insert_ezr   assertGreaterEqual)r   	key_bytes	val_byteshashvalrU   s        r   r.   Dict.dict_insert`   s@    y/--GGY
 	""61-r   c                     [        U5      n[        R                  " U R                  5      nU R                  R                  U R                  XU5      nU R                  R                  U[        5        XCR                  4$ r    )
r[   rO   create_string_bufferr   r   numba_dict_lookupr   r]   r7   value)r   r^   r`   oldval_bytesr:   s        r   r6   Dict.dict_lookupg   sc    y/224<<@WW&&GGY
 	""2z2%%%%r   c                     U R                  U5      u  p#U[        :X  a  g[        U5      nU R                  R	                  U R
                  XB5      nU R                  R                  US5        g)NFr   T)r6   r7   r[   r   numba_dict_delitemr   r,   )r   r^   r:   oldvalr`   rU   s         r   r?   Dict.dict_delitemp   sY    %%i0
y/++DGGWAFA&r   c                 b   [         R                  " U R                  5      n[         R                  " U R                  5      nU R                  R                  U R                  X5      nUS:w  a,  US:X  a  [        S5      eU R                  R                  S5        UR                  UR                  4$ )Nr   popitem(): dictionary is emptyUnknown)
rO   rc   r   r   r   numba_dict_popitemr   r8   _failre   )r   r^   r_   rU   s       r   rJ   Dict.dict_popitemy   s    //=	//=	++DGGYJQ;|?@@i(	//r   c                 N    U R                   R                  XR                  5        g r    )r   numba_dict_iterr   )r   itptrs     r   	dict_iterDict.dict_iter   s    ww/r   c                    [         R                  " S5      n[         R                  " S5      nU R                  R                  U[         R                  " U5      [         R                  " U5      5      nUS:X  a  [        S5      eUS:X  a  g U R                  R                  US5        U R                  R                  UR                  [        -  SSS9  U R                  R                  UR                  [        -  SSS9  [         R                  U R                  -  R                  UR                  5      n[         R                  U R                  -  R                  UR                  5      nUR                  UR                  4$ )Nr   zdictionary mutatedzkey not aligned)msgzval not aligned)rO   rP   r   numba_dict_iter_nextrR   
ValueErrorr]   r,   re   ALIGNc_charr   from_addressr   )r   ru   r1   r2   rU   keyvals          r   dict_iter_nextDict.dict_iter_next   s   __Q__Q--6<<#V\\"%5
 R<122r\GG&&vq1
 GG5 0!9JKGG5 0!9JK==4<</==bhhGC==4<</==bhhGC99cii''r   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r#   r'   r3   r<   r@   rC   rG   rK   r   r&   r.   r6   r?   rJ   rv   r   __static_attributes__ r   r   r   r      s\    :)"! &2.&	00(r   r   c                   .    \ rS rSrSrS rS rS r\rSr	g)rF      zA iterator for the `Dict.items()`.

Only the `.items()` is needed.  `.keys` and `.values` can be trivially
implemented on the `.items` iterator.
c                 F   Xl         U R                   R                  R                  5       n[        R                  U-  " S5      U l        [        R                  " U R
                  [        R                  5      U l        U R                   R                  U R                  5        g rN   )
parentr   numba_dict_iter_sizeofrO   c_char_pit_state_bufcastrP   itrv   )r   r   itsizes      r   r   DictIter.__init__   se    668#__v5q9++d//Adgg&r   c                     U $ r    r   r"   s    r   __iter__DictIter.__iter__   s    r   c                     U R                   R                  U R                  5      nUc  [        eUu  p#UR	                  5       UR	                  5       4$ r    )r   r   r   StopIterationr9   )r   outr/   r0   s       r   __next__DictIter.__next__   sC    kk((1;DA88:qxxz))r   )r   r   r   N)
r   r   r   r   r   r   r   r   nextr   r   r   r   rF   rF      s    
'* Dr   rF   c                       \ rS rSrSrS rSrg)Parametrized   z[supporting type for TestDictImpl.test_parametrized_types
needs to be global to be cacheablec                 6    [        S U 5       5      (       d   eg )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fr    )
isinstancestr).0r0   s     r   	<genexpr>(Parametrized.__init__.<locals>.<genexpr>   s     3s!:a%%ss   )all)r   tups     r   r   Parametrized.__init__   s    3s33333r   r   N)r   r   r   r   r   r   r   r   r   r   r   r      s    *4r   r   c                   B   ^  \ rS rSrSrU 4S jr\S 5       rS rSr	U =r
$ )ParametrizedType   zQthis is essentially UniTuple(unicode_type, n)
BUT type name is the same for all nc                 v   > [         [        U ]  S5        [        R                  U l        [        U5      U l        g )Nr   )superr   r   r   unicode_typedtyper-   n)r   re   	__class__s     r   r   ParametrizedType.__init__   s,    ./AB''
Ur   c                     U R                   $ r    r   r"   s    r   r   ParametrizedType.key   s    vvr   c                     U R                   $ r    r   r"   s    r   r'   ParametrizedType.__len__   s    vvr   )r   r   )r   r   r   r   r   r   propertyr   r'   r   __classcell__)r   s   @r   r   r      s+    +
   r   r   c                   l    \ rS rSrS rS rS rS rS rS r	SS jr
S	 rS
 rS rS rS rS rS rSrg)TestDictImpl   c           	         [         R                  n[         R                  n[         R                  nSS jnU" S[         R                  5      U l        U" S[         R                  [         R
                  " U5      [         R                  [         R                  [         R                  /5      U l        U" SSU/5      U l        U" S[         R                  U/5      U l        U" S[         R                  U[         R                  U[         R                  /5      U l
        U" S[         R                  U[         R                  U[         R                  /5      U l        U" S	[         R                  UU[         R                  /5      U l        U" S
[         R                  U[         R                  [         R                  /5      U l        U" S[         R                  5      U l        U" SSUU/5      U l        U" S[         R                  U[         R
                  " [         R                  5      [         R
                  " [         R                  5      /5      U l        g)zEBind to the c_helper library and provide the ctypes wrapper.
        c                 b    [         R                  " U/UQ76 nU" [        R                  U    5      $ r    )rO   	CFUNCTYPEr   	c_helpers)namerestypeargtypesprotos       r   wrap TestDictImpl.setUp.<locals>.wrap   s-    $$W8x8E--d344r   	test_dictdict_new_sized	dict_freeNr&   dict_insert_ezr6   r?   rJ   dict_iter_sizeofrv   r   )r   )rO   rP   	c_ssize_tc_intnumba_test_dictPOINTERrQ   r!   rX   r   r\   rd   ri   rp   c_size_tr   rt   r|   )r   dict_titer_thash_tr   s        r   setUpTestDictImpl.setUp   s    !!	5
  $LL 
 %)LLv&      		%
!  $H 
 "&H"
 %)LL		%
!  "&		"
 #'LL  #
 #'LL#
 '+OO'
#  $ 
 %)LLv/v/%
!r   c                 H    U R                  5       nU R                  US5        g rN   )r   r,   )r   rets     r   test_simple_c_testTestDictImpl.test_simple_c_test[  s     ""$a r   c                    [        U SS5      nU R                  [        U5      S5        U R                  UR	                  S5      5        SUS'   U R                  [        U5      S5        U R                  UR	                  S5      5        U R                  US   S5        SUS'   U R                  [        U5      S5        U R                  US   S5        SUS	'   U R                  [        U5      S
5        U R                  US   S5        U R                  US	   S5        SUS'   U R                  [        U5      S5        U R                  US   S5        U R                  US	   S5        U R                  US   S5        g )Nr   r   r   abcdbeefcafe   cafe0000cafe0001abce   cafe0002abcf   )r   r,   r-   assertIsNonerC   assertIsNotNoner   ds     r   test_insertion_small!TestDictImpl.test_insertion_small`  sX   q!Q#!%%-( &	Q#QUU6]+6J/ &	Q#6J/ &	Q#6J/6J/ &	Q#6J/6J/6J/r   c                    [        U SS5      nS nS n[        U5       H1  nU" U5      X#" U5      '   U R                  [        U5      US-   5        M3     [        U5       H#  nU R                  X#" U5         U" U5      5        M%     g )Nr   c                 $    SR                  U 5      $ )Nz	key_{:04}formatr0   s    r   make_key3TestDictImpl.check_insertion_many.<locals>.make_key      %%a((r   c                 $    SR                  U 5      $ )Nz	val_{:04}r   r   s    r   make_val3TestDictImpl.check_insertion_many.<locals>.make_val  r   r   r   )r   ranger,   r-   )r   nmaxr   r   r   is         r   check_insertion_many!TestDictImpl.check_insertion_many~  s    q!	)	) tA%a[AhqkNSVQU+ 
 tAQx{^Xa[9 r   c                 l   U R                  SS9  U R                  SS9  U R                  SS9  U R                  SS9  U R                  SS9  U R                  SS9  U R                  SS9  U R                  S	S9  U R                  S
S9  U R                  SS9  U R                  SS9  U R                  SS9  g )N   )r   r   	          !   i     i  i  i   i  )r   r"   s    r   test_insertion_many TestDictImpl.test_insertion_many  s     	!!q!)!!q!)!!q!)!!r!*!!r!*!!r!*!!t!,!!t!,!!t!,!!t!,!!t!,!!t!,r   c                    [        U SS5      nU R                  [        U5      S5        U R                  UR	                  S5      5        SUS'   SUS'   SUS	'   U R                  [        U5      S
5        U R                  US   S5        U R                  US   S5        U R                  US	   S5        U R                  [        U5      S
5        US	 U R                  UR	                  S5      5        U R                  US   S5        U R                  US	   S5        U R                  [        U5      S5        U R                  [        5         US	 S S S 5        US		 U R                  UR	                  S5      5        U R                  US   S5        U R                  UR	                  S	5      5        U R                  [        U5      S5        US	 U R                  UR	                  S5      5        U R                  UR	                  S5      5        U R                  UR	                  S	5      5        U R                  [        U5      S5        g ! , (       d  f       GN= f)Nr   r   r   r   r   r   r   r   r   r   r   r   )r   r,   r-   r   rC   assertRaisesr8   r   s     r   test_deletion_small 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   
I
Ic                    [         R                  " U5        [        U SS5      n0 nS nS n[        U5       H  n	U" U	5      XW" U	5      '   M     [        U5       H+  n	U" U	5      n
U" U	5      nXU
'   U R	                  XZ   U5        M-     U R	                  [        U5      U5        [         R                  " [        U5      U5      nUR                  5       n[        USS9 H&  u  pXZ	 X	 U R	                  [        U5      X-
  5        M(     U R	                  [        U5      X-
  5        U H#  n
U R                  UR                  U
5      5        M%     U H  n
U R	                  XZ   X   5        M     [        U5       H  n	U" X-   5      n
U" X-   5      nXU
'   XU
'   M!     U R	                  [        U5      [        U5      5        U H  n
U R	                  XZ   X   5        M     g )Nr   c                 $    SR                  U 5      $ Nzk_{:06x}r   r   s    r   r   4TestDictImpl.check_delete_randomly.<locals>.make_key      $$Q''r   c                 $    SR                  U 5      $ Nzv_{:06x}r   r   s    r   r   4TestDictImpl.check_delete_randomly.<locals>.make_val  r  r   r   )start)randomseedr   r   r,   r-   samplelistcopy	enumerater   rC   )r   r   ndropnrefillr  r   keysr   r   r   r/   r0   droplistremains                 r   check_delete_randomly"TestDictImpl.check_delete_randomly  s   Dq!	(	( tA%a[AhqkN  tAAAGQT1%	  	Q& ==dU3ha0DA	SVTX. 1 	Q. AaeeAh'  AQT69-  wA"A"A1IaD	   	Vc!f- AQT69- r   c                     U R                  SSSS9  U R                  SSSS9  U R                  SSS	S9  U R                  SS
SS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  g )Nr   r   r   r  r     
   r  d   2      c   r  i  r   i   r   r"   s    r   test_delete_randomly!TestDictImpl.test_delete_randomly  s    ""A">"""b"A""2s"C""2s"C""3"D""C"C""C"Fr   c                 &    U R                  SSSS9  g )Ni   i   r  r#  r*  r"   s    r   test_delete_randomly_large'TestDictImpl.test_delete_randomly_large  s    
 	""UE"Jr   c                    Sn[        U SS5      nS nS n[        U5       H  nU" U5      X#" U5      '   M     U R                  [        U5      U5        UR	                  5       u  pgU R                  [        U5      US-
  5        U R                  Xc" [        U5      5      5        U R                  Xt" [        U5      5      5        [        U5      (       a  [        U5      nUR	                  5       u  pgU R                  [        U5      US-
  5        U R                  Xc" [        U5      5      5        U R                  Xt" [        U5      5      5        [        U5      (       a  M  U R                  [        U5      S5        U R                  [        5       n	UR	                  5         S S S 5        U R                  S[        W	R                  5      5        g ! , (       d  f       N4= f)Nr%  r   c                 $    SR                  U 5      $ r  r   r   s    r   r   +TestDictImpl.test_popitem.<locals>.make_key  r  r   c                 $    SR                  U 5      $ r  r   r   s    r   r   +TestDictImpl.test_popitem.<locals>.make_val  r  r   r   r   rn   )
r   r   r,   r-   rK   r	  r8   assertInr   	exception)
r   r   r   r   r   r   r/   r0   r   raisess
             r   test_popitemTestDictImpl.test_popitem  s{   q!	(	( tA%a[AhqkN  	Q&yy{Q*HSV,-HSV,-!ffAA99;DASVQU+QQ 01QQ 01 !ff 	Q#x(FIIK ),  !	
 )(s   G
Gc                 $  ^ [        U SS5      nSmS nU4S jn[        T5       H  nU" U5      X" U5      '   M     [        UR                  5       5       H8  u  nu  pVU R	                  U" U5      U5        U R	                  U" U5      U5        M:     g )Nr   i  c                 $    SR                  U 5      $ Nz{:04}r   r   s    r   r   .TestDictImpl.test_iter_items.<locals>.make_key<  s    >>!$$r   c                 ,   > SR                  U T-   5      $ r<  r   )r0   r   s    r   r   .TestDictImpl.test_iter_items.<locals>.make_val?  s    >>!d(++r   r   r   r  rG   r,   )r   r   r   r   r   r/   r0   r   s          @r   test_iter_itemsTestDictImpl.test_iter_items7  s    q!	%	, tA%a[AhqkN  #1779-IAvXa[!,Xa[!, .r   c                 ,  ^^^ [        U TT5      nU4S jnUU4S jn[        T5       H  nU" U5      XE" U5      '   M     [        UR                  5       5       H8  u  nu  pU R	                  U" U5      U5        U R	                  U" U5      U	5        M:     g )Nc                 .   > SR                  U T5      S T $ )N{:0{}}r   )r0   rS   s    r   r   +TestDictImpl.check_sizing.<locals>.make_keyN  s    ??1h/	::r   c                 :   > SR                  TU -
  S-
  T5      S T $ )NrE  r   r   )r0   r   rT   s    r   r   +TestDictImpl.check_sizing.<locals>.make_valQ  s#    ??4!8a<:9HEEr   r@  )
r   rS   rT   r   r   r   r   r   r/   r0   s
    ```      r   check_sizingTestDictImpl.check_sizingJ  s    x*	;	F tA%a[AhqkN  #1779-IAvXa[!,Xa[!, .r   c                 P    [        SS5       H  nU R                  XSU-  S9  M     g )Nr   r   r   )rS   rT   r   )r   rI  )r   r   s     r   test_sizingTestDictImpl.test_sizing\  s)    q!Aq1a4@ r   c                   ^ [        [        5      " [        5        [        R                  " [
        5      S 5       n[        [        5      S 5       nS m[        T5      S 5       n[        SSS9U4S j5       n[        S5      [        S	5      peU" XV5        UR                  5       " 5         UR                  5         UR                  R                  5         [        S
5       H  nU R                  U" XV5      5        M     g)z*https://github.com/numba/numba/issues/6401c                     [        U 5      $ r    )r   )r   cs     r   typeof_unit:TestDictImpl.test_parameterized_types.<locals>.typeof_unitf  s    #C((r   c                 v    UR                  [        R                  " U R                  [	        U 5      5      U5      $ r    )r   r   UniTupler   r-   )typobjcontexts      r   unbox_parametrizedATestDictImpl.test_parameterized_types.<locals>.unbox_parametrizedj  s&    ==		3s8!DcJJr   c                      er    r   r   s    r   dict_vs_cache_vs_parametrizedLTestDictImpl.test_parameterized_types.<locals>.dict_vs_cache_vs_parametrizedn  s    1r   c                    ^ U mU4S jnU$ )Nc                 j   > [         R                  R                  [        R                  T5      nXS'   g )Ndata)r   r   emptyr   r   )r0   r   rU  s     r   %objmode_vs_cache_vs_parametrized_impl~TestDictImpl.test_parameterized_types.<locals>.ol_dict_vs_cache_vs_parametrized.<locals>.objmode_vs_cache_vs_parametrized_implu  s&    JJ$$U%7%7=&	r   r   )r0   ra  rU  s     @r    ol_dict_vs_cache_vs_parametrizedOTestDictImpl.test_parameterized_types.<locals>.ol_dict_vs_cache_vs_parametrizedq  s    C
 98r   T)nopythoncachec                 &   > T" U 5        T" U5        g r    r   )xyr[  s     r   set_parametrized_dataDTestDictImpl.test_parameterized_types.<locals>.set_parametrized_data|  s     *!,)!,r   )ab)rl  r'  N)r
   r   r	   r   registerr   r   r   r   _make_finalizer_reset_overloads	targetctxinitr   r   )	r   rQ  rX  rc  rj  rh  ri  iir[  s	           @r   test_parameterized_types%TestDictImpl.test_parameterized_typesa  s     	'(7			l	+	) 
,	) 
	 	K 
!	K	 
/	0	9 
1	9 
d$	'	- 
(	- J'f)=1a# 	--/1..0'',,.)B3A9: r   )ri   r!   r\   rt   r|   r   rX   rd   rQ   rp   r   N)r   )r   r   r   r   r   r   r   r   r  r
  r   r+  r.  r8  rA  rI  rL  rt  r   r   r   r   r   r      sP    F
P!
0<:&-&'$R5.nGK 
D-&-$A
/;r   r   )r   rO   r  numba.tests.supportr   numbar   r   r   r   numba.core.configr   numba.core.datamodel.modelsr	   numba.extendingr
   r   r   r   r7   r~   objectr   rF   tupler   Typer   r   r   r   r   <module>r~     s~      ( / / ' 5 H H 
 AG(6 G(Tv 645 4uzz "~;8 ~;r   