
    sh?                         S r SSKrSSKrSSKJr  SSKJr  SrSrSr	Sr
SrS	r " S
 S\5      r " S S\5      r " S S\5      rg)z2
Testing C implementation of the numba typed-list
    N)TestCase)
_helperlibc                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 r\S 5       r\S 5       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S rS rS rS rSr g) List   zIA wrapper around the C-API to provide a minimal list object for
testing.
c                 H    Xl         X l        U R                  X#5      U l        g)z
Parameters
----------
tc : TestCase instance
item_size : int
    byte size for the items
allocated : int
    number of items to allocate for
N)tc	item_sizelist_newlp)selfr   r   	allocateds       m/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_listimpl.py__init__List.__init__   s     "--	5    c                 N    U R                   R                  U R                  5        g N)r   numba_list_freer   r   s    r   __del__List.__del__(   s    (r   c                 "    U R                  5       $ r   )list_lengthr   s    r   __len__List.__len__+   s    !!r   c                 $    U R                  X5      $ r   )list_setitemr   iitems      r   __setitem__List.__setitem__.   s      ))r   c                 $    U R                  U5      $ r   )list_getitemr   r%   s     r   __getitem__List.__getitem__1   s      ##r   c                     [        U 5      $ r   )ListIterr   s    r   __iter__List.__iter__4   s    ~r   c                 &    U R                  U5        g r   )list_delitemr+   s     r   __delitem__List.__delitem__7   s    !r   c                 r    US:  d  [        U 5      S:X  a  [        S5        U$ US:X  a  [        U 5      S-
  nU$ )Nr   r   list index out of range   )len
IndexErrorr+   s     r   handle_indexList.handle_index:   s@     r6SY!^01  "WD	AAr   c                 "    U R                  5       $ r   )list_allocatedr   s    r   r   List.allocatedC   s    ""$$r   c                 "    U R                  5       $ r   )list_is_mutabler   s    r   
is_mutableList.is_mutableG   s    ##%%r   c                 $    U R                  S5      $ )Nr8   list_set_is_mutabler   s    r   set_mutableList.set_mutableK       ''**r   c                 $    U R                  S5      $ Nr   rE   r   s    r   set_immutableList.set_immutableN   rI   r   c                 &    U R                  U5        g r   )list_append)r   r&   s     r   appendList.appendQ   s    r   c                 $    U R                  U5      $ r   )list_popr+   s     r   popList.popT   s    }}Qr   c                     [         R                  " 5       nU R                  R                  [         R                  " U5      X5      nU R                  R                  U[        5        U$ r   )ctypesc_void_pr   numba_list_newbyrefassertEqualLIST_OK)r   r   r   r   statuss        r   r   List.list_newY   sK    __''LLi
 	FG,	r   c                 L    U R                   R                  U R                  5      $ r   )r   numba_list_lengthr   r   s    r   r   List.list_lengtha   s    ww((11r   c                 L    U R                   R                  U R                  5      $ r   )r   numba_list_allocatedr   r   s    r   r>   List.list_allocatedd   s    ww++DGG44r   c                 L    U R                   R                  U R                  5      $ r   )r   numba_list_is_mutabler   r   s    r   rA   List.list_is_mutableg   s    ww,,TWW55r   c                 N    U R                   R                  U R                  U5      $ r   )r   numba_list_set_is_mutabler   )r   rB   s     r   rF   List.list_set_is_mutablej   s    ww00*EEr   c                     U R                   R                  U R                  X5      nU[        :X  a  [	        S5      eU[
        :X  a  [        S5      eU R                   R                  U[        5        g )Nr7   list is immutable)	r   numba_list_setitemr   LIST_ERR_INDEXr:   LIST_ERR_IMMUTABLE
ValueErrorr[   r\   )r   r%   r&   r]   s       r   r#   List.list_setitemm   sY    ++DGGQ=^#677))011GG0r   c                 2   U R                  U5      n[        R                  " U R                  5      nU R                  R                  U R                  X5      nU[        :X  a  [        S5      eU R                  R                  U[        5        UR                  $ )Nr7   )r;   rW   create_string_bufferr   r   numba_list_getitemr   rn   r:   r[   r\   raw)r   r%   item_out_bufferr]   s       r   r*   List.list_getitemv   st    a  55dnnE++DGGQH^#677GG0"&&&r   c                     U R                   R                  U R                  U5      nU[        :X  a  [	        S5      eU R                   R                  U[        5        g )Nrl   )r   numba_list_appendr   ro   rp   r[   r\   )r   r&   r]   s      r   rO   List.list_append   sE    **477D9''011FG,r   c                 l    U R                  U5      nU R                  U5      nU R                  U5        U$ r   )r;   r*   r3   r$   s      r   rS   List.list_pop   s5    a   #!r   c                 (   [        U[        5      (       a|  U R                  R                  U R                  UR
                  UR                  UR                  5      nU[        :X  a  [        S5      eU R                  R                  U[        5        g U R                  U5      nU R                  R                  U R                  U5      nU[        :X  a  [        S5      eU[        :X  a  [        S5      eU R                  R                  U[        5        g )Nrl   r7   )
isinstanceslicer   numba_list_delete_slicer   startstopstepro   rp   r[   r\   r;   numba_list_delitemrn   r:   )r   r%   r]   s      r   r3   List.list_delitem   s    aWW44TWW56WW56VV56VV=F ++ !455GG0 !!!$AWW//;F' !:;;-- !455GG0r   c                 N    U R                   R                  XR                  5        g r   )r   numba_list_iterr   )r   itptrs     r   	list_iterList.list_iter   s    ww/r   c                    [         R                  " S5      nU R                  R                  U[         R                  " U5      5      nU[
        :X  a  [        S5      eU[        :X  a  [        eU R                  R                  US5        [         R                  U R                  -  R                  UR                  5      nUR                  $ )Nr   zlist mutated)rW   rX   r   numba_list_iter_nextrZ   LIST_ERR_MUTATEDrp   LIST_ERR_ITER_EXHAUSTEDStopIterationassertGreaterEqualc_charr   from_addressvalue)r   r   bir]   r&   s        r   list_iter_nextList.list_iter_next   s    __Q--6<<#
 %%^,,..GG&&vq1MMDNN2@@JD::r   )r   r   r   N)r   )!__name__
__module____qualname____firstlineno____doc__r   r   r    r'   r,   r0   r4   r;   propertyr   rB   rG   rL   rP   rT   r   r   r>   rA   rF   r#   r*   rO   rS   r3   r   r   __static_attributes__ r   r   r   r      s    6 )"*$ % % & &++ 
256F1'-1(0r   r   c                   .    \ rS rSrSrS rS rS r\rSr	g)r/      z An iterator for the `List`.
    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 rK   )
parentr   numba_list_iter_sizeofrW   c_char_pit_state_bufcastrX   itr   )r   r   itsizes      r   r   ListIter.__init__   se    668#__v5q9++d//Adgg&r   c                     U $ r   r   r   s    r   r0   ListIter.__iter__   s    r   c                 L    U R                   R                  U R                  5      $ r   )r   r   r   r   s    r   __next__ListIter.__next__   s    {{))$''22r   )r   r   r   N)
r   r   r   r   r   r   r0   r   nextr   r   r   r   r/   r/      s    '3 Dr   r/   c                   z    \ 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)TestListImpl   c                 N   [         R                  n[         R                  nSS jnU" S[         R                  5      U l        U" S[         R                  [         R                  " U5      [         R
                  [         R
                  /5      U l        U" SSU/5      U l        U" S[         R                  U/5      U l        U" S[         R                  U/5      U l	        U" S[         R                  U/5      U l
        U" S	SU[         R                  /5      U l        U" S
[         R                  U[         R
                  [         R                  /5      U l        U" S[         R                  U[         R                  /5      U l        U" S[         R                  U[         R
                  [         R                  /5      U l        U" S[         R                  U[         R
                  /5      U l        U" S[         R                  U[         R
                  [         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      /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   )rW   	CFUNCTYPEr   	c_helpers)namerestypeargtypesprotos       r   wrap TestListImpl.setUp.<locals>.wrap   s-    $$W8x8E--d344r   	test_listr   	list_freeNr   r>   rA   rF   r#   rO   r*   r3   list_delete_slicelist_iter_sizeofr   r   )r   )rW   rX   c_intnumba_test_listPOINTER	c_ssize_trY   r   r`   rc   rf   ri   r   rm   ry   rt   r   r   c_size_tr   r   r   )r   list_titer_tr   s       r   setUpTestListImpl.setUp   sH    	5
  $LL 
 #LL^^F#V%5%5v7G7GH
  $H 
 "&LLH"
 %)LLH%
! &*LLH&
" *.!V\\"*
& #'LLV%%v7#
 "&LLV__%"
 #'LLV%%v7#
 #'LLV%%&#
 (,LLV%%v'7'79I9IJ(
$ '+OO'
#
  $ 
 %)LLv/%
!r   c                 H    U R                  5       nU R                  US5        g rK   )r   r[   )r   rets     r   test_simple_c_testTestListImpl.test_simple_c_test4  s     ""$a r   c                 T    [        U SS5      nU R                  [        U5      S5        g N   r   )r   r[   r9   r   ls     r   test_lengthTestListImpl.test_length9  s$    q!Q#r   c                     [        S5       HG  n[        U SU5      nU R                  [        U5      S5        U R                  UR                  U5        MI     g )N   r   r   )ranger   r[   r9   r   )r   r%   r   s      r   test_allocationTestListImpl.test_allocation=  sF    rAT1a ASVQ'Q[[!, r   c                     [        U SS5      nUR                  S5        U R                  [        U5      S5        US   nU R                  US5        g )Nr   r8      abcdefghr   r   rP   r[   r9   r   r   rs      r   test_append_get_string#TestListImpl.test_append_get_stringC  sI    q!	Q#aDK(r   c                     [        U SS5      nUR                  [        R                  " SS5      5        U R	                  [        U5      S5        [        R                  " SUS   5      S   nU R	                  US5        g )Nr   r8   qr   )r   rP   structpackr[   r9   unpackr   s      r   test_append_get_int TestListImpl.test_append_get_intJ  sd    q!	S!$%Q#MM#qt$Q'Ar   c                     [        U SS5      nUR                  S5        U R                  [        U5      S5        UR                  S5        U R                  [        U5      S5        US   nU R                  US5        g )Nr   r8   r   s   hijklmno   r   r   s      r   test_append_get_string_realloc+TestListImpl.test_append_get_string_reallocQ  si    q!	Q#	Q#aDK(r   c                     [        U SS5      nU R                  [        5         US     S S S 5        U R                  [        5         SUS'   S S S 5        g ! , (       d  f       N2= f! , (       d  f       g = f)Nr   r   r   )r   assertRaisesr:   r   s     r   !test_set_item_getitem_index_error.TestListImpl.test_set_item_getitem_index_errorZ  sY    q!z*aD +z*AaD +* +***s   AA&
A#&
A4c                     [        U SS5      n/ SQnU H  nUR                  U5        M     / nU H  nUR                  U5        M     U R                  X$5        g )Nr8   r      a   b   c   d   e   f   g   h)r   rP   r[   )r   r   valuesr%   receivedjs         r   	test_iterTestListImpl.test_itera  sS    q!AAHHQK AOOA *r   c                    [        U SS5      n/ SQnU H  nUR                  U5        M     U R                  [        U5      S5        UR	                  5       nU R                  SU5        U R                  [        U5      S5        U Vs/ s H  oUPM     nnU R                  XBS S 5        UR	                  S5      nU R                  SU5        U R                  [        U5      S	5        UR	                  S
5      nU R                  SU5        U R                  [        U5      S5        / SQnU Vs/ s H  oUPM     nnU R                  XF5        g s  snf s  snf )Nr8   r   r   r   r      r   r      r   r      r   r   r   r   r   r   rP   r[   r9   rT   r   r   r   r%   r   r   expecteds          r   test_popTestListImpl.test_popk  s$   q!AAHHQK Q#557x(Q# >q!Aq>#2;/558x(Q#558x(Q#1 >q!Aq>, " "   E-Ec                     [        U SS5      nU R                  [        5         UR                  5         S S S 5        g ! , (       d  f       g = fr   )r   r   r:   rT   r   s     r   test_pop_index_error!TestListImpl.test_pop_index_error  s3    q!z*EEG +**s	   =
Ac                    [        U SS5      n/ SQnU H  nUR                  U5        M     U R                  [        U5      S5        UR	                  5       nU R                  SU5        U R                  [        U5      S5        U Vs/ s H  oUPM     nnU R                  XBS S 5        UR	                  S5      nU R                  SU5        U R                  [        U5      S	5        UR	                  S
5      nU R                  SU5        U R                  [        U5      S5        / SQnU Vs/ s H  oUPM     nnU R                  XF5        g s  snf s  snf )N   r   )   aaaa   bbbb   cccc   dddd   eeee   ffff   ggggs   hhhhhr   s   hhhhr   r   r  r  r   r  r  )r  r  r  r  r  r  r  s          r   test_pop_byteTestListImpl.test_pop_byte  s&   q!7AHHQK Q#557(+Q# >q!Aq>#2;/558(+Q#558(+Q#@ >q!Aq>, " "r	  c                    [        U SS5      n/ SQnU H  nUR                  U5        M     U R                  [        U5      S5        US	 U R                  [        U5      S5        U R                  [	        U5      USS  5        US	 U R                  [        U5      S5        U R                  [	        U5      USS 5        US	 U R                  [        U5      S	5        U R                  [	        U5      / S
Q5        g )Nr8   r   r   r   r   r   r  r   r  r  r   rP   r[   r9   listr   r   r   r%   s       r   test_delitemTestListImpl.test_delitem  s    q!AAHHQK Q# aDQ#a&*-bEQ#a&2,/aDQ#a"@Ar   c                    [        U SS5      n/ SQnU H  nUR                  U5        M     U R                  [        U5      S5        USSS2	 U R                  [        U5      S5        U R                  [	        U5      USSS2   5        USSS2	 U R                  [        U5      S5        U R                  [	        U5      / SQ5        USSS2	 U R                  [        U5      S5        U R                  [	        U5      S	S
/5        USSS2	 U R                  [        U5      S5        U R                  [	        U5      / 5        g )Nr8   r   r   r   r   r     )r   r   r   r   r   r  r  s       r   test_delete_sliceTestListImpl.test_delete_slice  s)   q!AAHHQK Q# a!eHQ#a&1Q-0 a!eHQ#a"45 a!eHQ#a4,/ a!eHQ#a"%r   c                   ^^ [        U TS5      nUU4S jn[        T5       H  nUR                  U" U5      5        M     U R                  [	        U5      T5        [        T5       H  nU R                  X5   U" U5      5        M     g )Nr   c                 \   > SR                  TU -
  S-
  T5      R                  S5      nUS T $ )Nz{:0{}}r8   zlatin-1)formatencode)vtmpr   nmaxs     r   	make_item,TestListImpl.check_sizing.<locals>.make_item  s2    //$(Q,	:AA)LCz	?"r   )r   r   rP   r[   r9   )r   r   r(  r   r)  r%   s    ``   r   check_sizingTestListImpl.check_sizing  sp    y!$	# tAHHYq\"  	Q&tAQT9Q<0 r   c                 P    [        SS5       H  nU R                  USU-  S9  M     g )Nr8   r   r   )r   r(  )r   r+  r+   s     r   test_sizingTestListImpl.test_sizing  s)    q"A15 r   c                 $   [        U SS5      n[        R                  " SS5      nUR                  U5        U R	                  UR
                  5        U R                  [        U5      S5        [        R                  " SUS   5      S   nU R                  US5        UR                  5         U R                  UR
                  5        U R                  [        5       nUR                  U5        S S S 5        U R                  S[        WR                  5      5        U R                  [        5       nX!S'   S S S 5        U R                  S[        UR                  5      5        U R                  [        5       nUR!                  5         S S S 5        U R                  S[        UR                  5      5        U R                  [        5       nUS	 S S S 5        U R                  S[        UR                  5      5        U R                  [        5       nUSSS2	 S S S 5        U R                  S[        UR                  5      5        UR#                  5         U R	                  UR
                  5        U R                  [        U5      S5        [        R                  " SUS   5      S   nU R                  US5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN]= f! , (       d  f       GN)= f! , (       d  f       N= f)Nr   r8   r   r   rl   )r   r   r   rP   
assertTruerB   r[   r9   r   rL   assertFalser   rp   assertInstr	exceptionrT   rG   )r   r   oner   raisess        r   test_mutabilityTestListImpl.test_mutability  s5   q!kk#q!	%Q#MM#qt$Q'A 	
&z*fHHSM +)3v/?/?+@Az*faD +)3v/?/?+@Az*fEEG +)3v/?/?+@Az*f! +)3v/?/?+@Az*f!Aa% +)3v/?/?+@A	 	%Q#MM#qt$Q'A3 +* +* +* +* +*s<   J9/K6K	K/L9
K
K
K,/
K>
L)rc   ry   r   r   r   rt   rf   r   r   r   r`   rY   ri   rm   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r+  r.  r8  r   r   r   r   r   r      sZ    k
Z!
$-))+-2
-4B(&81 6
'r   r   )r   rW   r   numba.tests.supportr   numbar   r\   rn   LIST_ERR_NO_MEMORYr   r   ro   objectr   r/   r   r   r   r   <module>r>     se      (      \6 \~v &I8 Ir   