
    xKg?                         d Z ddlZddlZddlmZ ddlmZ dZdZdZ	dZ
dZd	Z G d
 de      Z G d de      Z G d de      Zy)z2
Testing C implementation of the numba typed-list
    N)TestCase)
_helperlibc                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zed
        Ze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 Zd Zd Zd Zd Zy)ListzQA wrapper around the C-API to provide a minimal list object for
    testing.
    c                 N    || _         || _        | j                  ||      | _        y)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       ]/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_listimpl.py__init__zList.__init__   s$     "--	95    c                 N    | j                   j                  | j                         y N)r   numba_list_freer   r   s    r   __del__zList.__del__(   s    (r   c                 "    | j                         S r   )list_lengthr   s    r   __len__zList.__len__+   s    !!r   c                 &    | j                  ||      S r   )list_setitemr   iitems      r   __setitem__zList.__setitem__.   s      D))r   c                 $    | j                  |      S r   )list_getitemr   r!   s     r   __getitem__zList.__getitem__1   s      ##r   c                     t        |       S r   )ListIterr   s    r   __iter__zList.__iter__4   s    ~r   c                 &    | j                  |       y r   )list_delitemr&   s     r   __delitem__zList.__delitem__7   s    !r   c                 l    |dk  st        |       dk(  rt        d       |S |dk(  rt        |       dz
  }|S )Nr   r   list index out of range   )len
IndexErrorr&   s     r   handle_indexzList.handle_index:   s@     r6SY!^01  "WD	AAr   c                 "    | j                         S r   )list_allocatedr   s    r   r   zList.allocatedC   s    ""$$r   c                 "    | j                         S r   )list_is_mutabler   s    r   
is_mutablezList.is_mutableG   s    ##%%r   c                 $    | j                  d      S )Nr0   list_set_is_mutabler   s    r   set_mutablezList.set_mutableK       ''**r   c                 $    | j                  d      S Nr   r:   r   s    r   set_immutablezList.set_immutableN   r=   r   c                 &    | j                  |       y r   )list_append)r   r"   s     r   appendzList.appendQ   s    r   c                 $    | j                  |      S r   )list_popr&   s     r   popzList.popT   s    }}Qr   c                     t        j                         }| j                  j                  t        j                  |      ||      }| j                  j                  |t               |S r   )ctypesc_void_pr   numba_list_newbyrefassertEqualLIST_OK)r   r   r   r   statuss        r   r   zList.list_newY   sM    __''LLi
 	FG,	r   c                 L    | j                   j                  | j                        S r   )r   numba_list_lengthr   r   s    r   r   zList.list_lengtha   s    ww((11r   c                 L    | j                   j                  | j                        S r   )r   numba_list_allocatedr   r   s    r   r5   zList.list_allocatedd   s    ww++DGG44r   c                 L    | j                   j                  | j                        S r   )r   numba_list_is_mutabler   r   s    r   r7   zList.list_is_mutableg   s    ww,,TWW55r   c                 N    | j                   j                  | j                  |      S r   )r   numba_list_set_is_mutabler   )r   r8   s     r   r;   zList.list_set_is_mutablej   s    ww00*EEr   c                     | j                   j                  | j                  ||      }|t        k(  rt	        d      |t
        k(  rt        d      | j                   j                  |t               y )Nr/   list is immutable)	r   numba_list_setitemr   LIST_ERR_INDEXr2   LIST_ERR_IMMUTABLE
ValueErrorrL   rM   )r   r!   r"   rN   s       r   r   zList.list_setitemm   s[    ++DGGQ=^#677))011GG0r   c                 0   | j                  |      }t        j                  | j                        }| j                  j                  | j                  ||      }|t        k(  rt        d      | j                  j                  |t               |j                  S )Nr/   )r3   rH   create_string_bufferr   r   numba_list_getitemr   rZ   r2   rL   rM   raw)r   r!   item_out_bufferrN   s       r   r%   zList.list_getitemv   sv    a  55dnnE++DGGQH^#677GG0"&&&r   c                     | j                   j                  | j                  |      }|t        k(  rt	        d      | j                   j                  |t               y )NrX   )r   numba_list_appendr   r[   r\   rL   rM   )r   r"   rN   s      r   rB   zList.list_append   sE    **477D9''011FG,r   c                 l    | j                  |      }| j                  |      }| j                  |       |S r   )r3   r%   r,   r    s      r   rE   zList.list_pop   s5    a   #!r   c                    t        |t              r{| j                  j                  | j                  |j
                  |j                  |j                        }|t        k(  rt        d      | j                  j                  |t               y | j                  |      }| j                  j                  | j                  |      }|t        k(  rt        d      |t        k(  rt        d      | j                  j                  |t               y )NrX   r/   )
isinstanceslicer   numba_list_delete_slicer   startstopstepr[   r\   rL   rM   r3   numba_list_delitemrZ   r2   )r   r!   rN   s      r   r,   zList.list_delitem   s    aWW44TWW56WW56VV56VV=F ++ !455GG0 !!!$AWW//;F' !:;;-- !455GG0r   c                 P    | j                   j                  || j                         y r   )r   numba_list_iterr   )r   itptrs     r   	list_iterzList.list_iter   s    tww/r   c                    t        j                  d      }| j                  j                  |t        j                  |            }|t
        k(  rt        d      |t        k(  rt        | j                  j                  |d       t         j                  | j                  z  j                  |j                        }|j                  S )Nr   zlist mutated)rH   rI   r   numba_list_iter_nextrK   LIST_ERR_MUTATEDr\   LIST_ERR_ITER_EXHAUSTEDStopIterationassertGreaterEqualc_charr   from_addressvalue)r   ro   birN   r"   s        r   list_iter_nextzList.list_iter_next   s    __Q--6<<#
 %%^,,..GG&&vq1MMDNN2@@JD::r   N)r   )__name__
__module____qualname____doc__r   r   r   r#   r'   r*   r-   r3   propertyr   r8   r<   r@   rC   rF   r   r   r5   r7   r;   r   r%   rB   rE   r,   rp   r{    r   r   r   r      s    6 )"*$ % % & &++ 
256F1'-1(0r   r   c                   &    e Zd ZdZd Zd Zd ZeZy)r)   z An iterator for the `List`.
    c                 D   || _         | j                   j                  j                         }t        j                  |z  d      | _        t        j                  | j
                  t        j                        | _        | j                   j                  | j                         y r?   )
parentr   numba_list_iter_sizeofrH   c_char_pit_state_bufcastrI   itrp   )r   r   itsizes      r   r   zListIter.__init__   sg    668#__v5q9++d//Adgg&r   c                     | S r   r   r   s    r   r*   zListIter.__iter__   s    r   c                 L    | j                   j                  | j                        S r   )r   r{   r   r   s    r   __next__zListIter.__next__   s    {{))$''22r   N)r|   r}   r~   r   r   r*   r   nextr   r   r   r)   r)      s    '3 Dr   r)   c                   r    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y)TestListImplc                 H   t         j                  }t         j                  }dd} |dt         j                        | _         |dt         j                  t        j                  |      t         j
                  t         j
                  g      | _         |dd|g      | _         |dt         j                  |g      | _         |dt         j                  |g      | _	         |dt         j                  |g      | _
         |d	d|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                  |t         j
                  g      | _         |dt         j                  |t         j
                  t         j
                  t         j
                  g      | _         |dt         j$                        | _         |dd||g      | _         |dt         j                  |t        j                  t         j                        g      | _        y)zEBind to the c_helper library and provide the ctypes wrapper.
        c                 `    t        j                  |g| } |t        j                  |          S r   )rH   	CFUNCTYPEr   	c_helpers)namerestypeargtypesprotos       r   wrapz TestListImpl.setUp.<locals>.wrap   s-    $$W8x8E--d344r   	test_listr   	list_freeNr   r5   r7   r;   r   rB   r%   r,   list_delete_slicelist_iter_sizeofrp   r{   )r   )rH   rI   c_intnumba_test_listPOINTER	c_ssize_trJ   r   rP   rR   rT   rV   r   rY   rc   r_   rl   rh   c_size_tr   rn   rr   )r   list_titer_tr   s       r   setUpz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    | j                         }| j                  |d       y r?   )r   rL   )r   rets     r   test_simple_c_testzTestListImpl.test_simple_c_test4  s     ""$a r   c                 T    t        | dd      }| j                  t        |      d       y N   r   )r   rL   r1   r   ls     r   test_lengthzTestListImpl.test_length9  s$    q!Q#r   c                     t        d      D ]F  }t        | d|      }| j                  t        |      d       | j                  |j                  |       H y )N   r   r   )ranger   rL   r1   r   )r   r!   r   s      r   test_allocationzTestListImpl.test_allocation=  sF    rAT1a ASVQ'Q[[!, r   c                     t        | dd      }|j                  d       | j                  t        |      d       |d   }| j                  |d       y )Nr   r0      abcdefghr   r   rC   rL   r1   r   r   rs      r   test_append_get_stringz#TestListImpl.test_append_get_stringC  sI    q!	Q#aDK(r   c                     t        | dd      }|j                  t        j                  dd             | j	                  t        |      d       t        j                  d|d         d   }| j	                  |d       y )Nr   r0   qr   )r   rC   structpackrL   r1   unpackr   s      r   test_append_get_intz TestListImpl.test_append_get_intJ  sd    q!	S!$%Q#MM#qt$Q'Ar   c                     t        | dd      }|j                  d       | j                  t        |      d       |j                  d       | j                  t        |      d       |d   }| j                  |d       y )Nr   r0   r   s   hijklmno   r   r   s      r   test_append_get_string_reallocz+TestListImpl.test_append_get_string_reallocQ  si    q!	Q#	Q#aDK(r   c                     t        | dd      }| j                  t              5  |d    d d d        | j                  t              5  d|d<   d d d        y # 1 sw Y   -xY w# 1 sw Y   y xY w)Nr   r   r   )r   assertRaisesr2   r   s     r   !test_set_item_getitem_index_errorz.TestListImpl.test_set_item_getitem_index_errorZ  sY    q!z*aD +z*AaD +* +***s   AA!A!A*c                     t        | dd      }g d}|D ]  }|j                  |        g }|D ]  }|j                  |        | j                  ||       y )Nr0   r      a   b   c   d   e   f   g   h)r   rC   rL   )r   r   valuesr!   receivedjs         r   	test_iterzTestListImpl.test_itera  sU    q!AAHHQK AOOA *r   c                    t        | dd      }g d}|D ]  }|j                  |        | j                  t        |      d       |j	                         }| j                  d|       | j                  t        |      d       |D cg c]  }| }}| j                  ||d d        |j	                  d      }| j                  d|       | j                  t        |      d	       |j	                  d
      }| j                  d|       | j                  t        |      d       g d}|D cg c]  }| }}| j                  ||       y c c}w c c}w )Nr0   r   r   r   r      r   r      r   r      r   r   r   r   r   r   rC   rL   r1   rF   r   r   r   r!   r   r   expecteds          r   test_popzTestListImpl.test_popk  s(   q!AAHHQK Q#557x(Q# >q!Aq>6#2;/558x(Q#558x(Q#1 >q!Aq>8, " "   	E*	Ec                     t        | dd      }| j                  t              5  |j                          d d d        y # 1 sw Y   y xY wr   )r   r   r2   rF   r   s     r   test_pop_index_errorz!TestListImpl.test_pop_index_error  s3    q!z*EEG +**s	   =Ac                    t        | dd      }g d}|D ]  }|j                  |        | j                  t        |      d       |j	                         }| j                  d|       | j                  t        |      d       |D cg c]  }| }}| j                  ||d d        |j	                  d      }| j                  d|       | j                  t        |      d	       |j	                  d
      }| j                  d|       | j                  t        |      d       g d}|D cg c]  }| }}| j                  ||       y c c}w c c}w )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_bytezTestListImpl.test_pop_byte  s*   q!7AHHQK Q#557(+Q# >q!Aq>6#2;/558(+Q#558(+Q#@ >q!Aq>8, " "r   c                    t        | dd      }g d}|D ]  }|j                  |        | j                  t        |      d       |d= | j                  t        |      d       | j                  t	        |      |dd         |d= | j                  t        |      d       | j                  t	        |      |dd        |d= | j                  t        |      d	       | j                  t	        |      g d
       y )Nr0   r   r   r   r   r   r   r   r   r   r   rC   rL   r1   listr   r   r   r!   s       r   test_delitemzTestListImpl.test_delitem  s    q!AAHHQK Q# aDQ#a&*-bEQ#a&2,/aDQ#a"@Ar   c                    t        | dd      }g d}|D ]  }|j                  |        | j                  t        |      d       |ddd= | j                  t        |      d       | j                  t	        |      |ddd          |ddd= | j                  t        |      d       | j                  t	        |      g d       |ddd= | j                  t        |      d       | j                  t	        |      d	d
g       |ddd= | j                  t        |      d       | j                  t	        |      g        y )Nr0   r   r   r   r   r      )r   r   r   r   r   r   r   s       r   test_delete_slicez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                    t        | d      }fd}t              D ]  }|j                   ||              | j                  t	        |             t              D ]  }| j                  ||    ||              y )Nr   c                 \    dj                  | z
  dz
        j                  d      }|d  S )Nz{:0{}}r0   zlatin-1)formatencode)vtmpr   nmaxs     r   	make_itemz,TestListImpl.check_sizing.<locals>.make_item  s2    //$(Q,	:AA)LCz	?"r   )r   r   rC   rL   r1   )r   r   r   r   r   r!   s    ``   r   check_sizingzTestListImpl.check_sizing  sr    y!$	# tAHHYq\"  	Q&tAQqT9Q<0 r   c                 R    t        dd      D ]  }| j                  |d|z          y )Nr0   r   r   )r   r   )r   r   r&   s     r   test_sizingzTestListImpl.test_sizing  s)    q"A15 r   c                    t        | dd      }t        j                  dd      }|j                  |       | j	                  |j
                         | j                  t        |      d       t        j                  d|d         d   }| j                  |d       |j                          | j                  |j
                         | j                  t              5 }|j                  |       d d d        | j                  dt        j                               | j                  t              5 }||d<   d d d        | j                  dt        |j                               | j                  t              5 }|j!                          d d d        | j                  dt        |j                               | j                  t              5 }|d= d d d        | j                  dt        |j                               | j                  t              5 }|ddd= d d d        | j                  dt        |j                               |j#                          | j	                  |j
                         | j                  t        |      d       t        j                  d|d         d   }| j                  |d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   MxY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   r0   r   r   rX   )r   r   r   rC   
assertTruer8   rL   r1   r   r@   assertFalser   r\   assertInstr	exceptionrF   r<   )r   r   oner   raisess        r   test_mutabilityzTestListImpl.test_mutability  s7   q!kk#q!	%Q#MM#qt$Q'A 	
&z*fHHSM +)3v/?/?+@Az*fAaD +)3v/?/?+@Az*fEEG +)3v/?/?+@Az*f! +)3v/?/?+@Az*f!Aa% +)3v/?/?+@A	 	%Q#MM#qt$Q'A3 +* +* +* +* +*s<   J7-K5KKK+7KKKK(+K4N)r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r      sZ    k
Z!
$-))+-2
-4B(&81 6
'r   r   )r   rH   r   numba.tests.supportr   numbar   rM   rZ   LIST_ERR_NO_MEMORYrs   rt   r[   objectr   r)   r   r   r   r   <module>r	     se      (      \6 \~v &I8 Ir   