
    J/Ph?                         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dS )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dS )ListzQA wrapper around the C-API to provide a minimal list object for
    testing.
    c                 X    || _         || _        |                     ||          | _        dS )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       Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_listimpl.py__init__zList.__init__   s+     "--	955    c                 D    | j                             | j                   d S N)r   numba_list_freer   r   s    r   __del__zList.__del__(   s     (((((r   c                 *    |                                  S r   )list_lengthr   s    r   __len__zList.__len__+   s    !!!r   c                 .    |                      ||          S r   )list_setitemr   iitems      r   __setitem__zList.__setitem__.   s      D)))r   c                 ,    |                      |          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                 0    |                      |           d S r   )list_delitemr&   s     r   __delitem__zList.__delitem__7   s    !r   c                     |dk     st          |           dk    rt          d           n|dk    rt          |           dz
  }|S )Nr   r   list index out of range   )len
IndexErrorr&   s     r   handle_indexzList.handle_index:   sJ     r66SYY!^^01111"WWD		AAr   c                 *    |                                  S r   )list_allocatedr   s    r   r   zList.allocatedC   s    ""$$$r   c                 *    |                                  S r   )list_is_mutabler   s    r   
is_mutablezList.is_mutableG   s    ##%%%r   c                 ,    |                      d          S )Nr0   list_set_is_mutabler   s    r   set_mutablezList.set_mutableK       ''***r   c                 ,    |                      d          S Nr   r:   r   s    r   set_immutablezList.set_immutableN   r=   r   c                 0    |                      |           d S r   )list_append)r   r"   s     r   appendzList.appendQ   s    r   r   c                 ,    |                      |          S r   )list_popr&   s     r   popzList.popT   s    }}Qr   c                     t          j                    }| j                            t          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   sV    _''Li
 
 	FG,,,	r   c                 @    | j                             | j                  S r   )r   numba_list_lengthr   r   s    r   r   zList.list_lengtha   s    w((111r   c                 @    | j                             | j                  S r   )r   numba_list_allocatedr   r   s    r   r5   zList.list_allocatedd   s    w++DG444r   c                 @    | j                             | j                  S r   )r   numba_list_is_mutabler   r   s    r   r7   zList.list_is_mutableg   s    w,,TW555r   c                 B    | j                             | j        |          S r   )r   numba_list_set_is_mutabler   )r   r8   s     r   r;   zList.list_set_is_mutablej   s    w00*EEEr   c                     | j                             | j        ||          }|t          k    rt	          d          |t
          k    rt          d          | j                             |t                     d S )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   sp    ++DGQ==^##6777)))0111G00000r   c                 "   |                      |          }t          j        | j                  }| j                            | j        ||          }|t          k    rt          d          | 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   s}    a   5dnEE++DGQHH^##6777G000"&&r   c                     | j                             | j        |          }|t          k    rt	          d          | j                             |t                     d S )NrX   )r   numba_list_appendr   r[   r\   rL   rM   )r   r"   rN   s      r   rB   zList.list_append   sT    **47D99'''0111FG,,,,,r   c                     |                      |          }|                     |          }|                     |           |S r   )r3   r%   r,   r    s      r   rE   zList.list_pop   sA    a    ##!r   c                    t          |t                    rm| j                            | j        |j        |j        |j                  }|t          k    rt          d          | j        
                    |t                     d S |                     |          }| j                            | j        |          }|t          k    rt          d          |t          k    rt          d          | j        
                    |t                     d S )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 	1W44TW56W56V56V= =F +++ !4555G00000 !!!$$AW//;;F'' !:;;;--- !4555G00000r   c                 F    | j                             || j                   d S r   )r   numba_list_iterr   )r   itptrs     r   	list_iterzList.list_iter   s"    tw/////r   c                 x   t          j        d          }| j                            |t          j        |                    }|t
          k    rt          d          |t          k    rt          | j        	                    |d           t           j
        | j        z                      |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<##
 
 %%%^,,,...G&&vq111MDN2@@J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 6 6 ) ) )" " "* * *$ $ $       % % X% & & X&+ + ++ + +         
  2 2 25 5 56 6 6F F F1 1 1' ' '- - -  1 1 1(0 0 0    r   r   c                   (    e Zd ZdZd Zd Zd ZeZdS )r)   z An iterator for the `List`.
    c                    || _         | j         j                                        }t          j        |z  d          | _        t          j        | j        t          j                  | _        | j         	                    | j                   d S r?   )
parentr   numba_list_iter_sizeofrH   c_char_pit_state_bufcastrI   itrp   )r   r   itsizes      r   r   zListIter.__init__   sk    6688#_v5q99+d/AAdg&&&&&r   c                     | S r   r   r   s    r   r*   zListIter.__iter__   s    r   c                 @    | j                             | j                  S r   )r   r{   r   r   s    r   __next__zListIter.__next__   s    {))$'222r   N)r|   r}   r~   r   r   r*   r   nextr   r   r   r)   r)      sL         ' ' '  3 3 3 DDDr   r)   c                   t    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S )TestListImplc                    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          | _        dS )zEBind to the c_helper library and provide the ctypes wrapper.
        r   c                 \    t          j        |g|R  } |t          j        |                    S r   )rH   	CFUNCTYPEr   	c_helpers)namerestypeargtypesprotos       r   wrapz TestListImpl.setUp.<locals>.wrap   s2    $W8x888E5-d34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   s    	5 	5 	5 	5
  $tL 
  
 #dL^F##V%5v7GH
 
  $tH 
  
 "&LH"
 "
 %)DLH%
 %
! &*TLH&
 &
" *.!V\"*
 *
& #'$LV%v7#
 #
 "&LV_%"
 "
 #'$LV%v7#
 #
 #'$LV%&#
 #
 (,tLV%v'79IJ(
 (
$ '+dO'
 '
#
  $t 
  
 %)DLv//%
 %
!!!r   c                 Z    |                                  }|                     |d           d S r?   )r   rL   )r   rets     r   test_simple_c_testzTestListImpl.test_simple_c_test4  s/    ""$$a     r   c                 n    t          | dd          }|                     t          |          d           d S N   r   )r   rL   r1   r   ls     r   test_lengthzTestListImpl.test_length9  s5    q!Q#####r   c                     t          d          D ]Q}t          | d|          }|                     t          |          d           |                     |j        |           Rd S )N   r   r   )ranger   rL   r1   r   )r   r!   r   s      r   test_allocationzTestListImpl.test_allocation=  si    r 	- 	-AT1a  ASVVQ'''Q[!,,,,	- 	-r   c                     t          | dd          }|                    d           |                     t          |          d           |d         }|                     |d           d S )Nr   r0      abcdefghr   r   rC   rL   r1   r   r   rs      r   test_append_get_stringz#TestListImpl.test_append_get_stringC  sf    q!	Q###aDK(((((r   c                 ,   t          | dd          }|                    t          j        dd                     |                     t          |          d           t          j        d|d                   d         }|                     |d           d S )Nr   r0   qr   )r   rC   structpackrL   r1   unpackr   s      r   test_append_get_intz TestListImpl.test_append_get_intJ  s    q!	S!$$%%%Q###M#qt$$Q'Ar   c                 D   t          | dd          }|                    d           |                     t          |          d           |                    d           |                     t          |          d           |d         }|                     |d           d S )Nr   r0   r   s   hijklmno   r   r   s      r   test_append_get_string_reallocz+TestListImpl.test_append_get_string_reallocQ  s    q!	Q###	Q###aDK(((((r   c                    t          | dd          }|                     t                    5  |d          d d d            n# 1 swxY w Y   |                     t                    5  d|d<   d d d            d S # 1 swxY w Y   d S )Nr   r   r   )r   assertRaisesr2   r   s     r   !test_set_item_getitem_index_errorz.TestListImpl.test_set_item_getitem_index_errorZ  s   q!z** 	 	aDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	z** 	 	AaD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   	AAA&A99A= A=c                     t          | dd          }g d}|D ]}|                    |           g }|D ]}|                    |           |                     ||           d S )Nr0   r      a   b   c   d   e   f   g   h)r   rC   rL   )r   r   valuesr!   receivedjs         r   	test_iterzTestListImpl.test_itera  s    q!AAA 	 	AHHQKKKK 	 	AOOA*****r   c                    t          | dd          }g d}|D ]}|                    |           |                     t          |          d           |                                }|                     d|           |                     t          |          d           d |D             }|                     ||d d                    |                    d          }|                     d	|           |                     t          |          d
           |                    d          }|                     d|           |                     t          |          d           g d}d |D             }|                     ||           d S )Nr0   r   r   r   r      c                     g | ]}|S r   r   .0r   s     r   
<listcomp>z)TestListImpl.test_pop.<locals>.<listcomp>u      >>>!A>>>r   r   r      r   r      r   r   r   r   r   c                     g | ]}|S r   r   r   s     r   r   z)TestListImpl.test_pop.<locals>.<listcomp>  r   r   r   rC   rL   r1   rF   r   r   r   r!   r   expecteds         r   test_popzTestListImpl.test_popk  s~   q!AAA 	 	AHHQKKKKQ###5577x(((Q###!>q>>>6#2#;///5588x(((Q###5588x(((Q###111!>q>>>8,,,,,r   c                     t          | dd          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S r   )r   r   r2   rF   r   s     r   test_pop_index_errorz!TestListImpl.test_pop_index_error  s    q!z** 	 	EEGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                    t          | dd          }g d}|D ]}|                    |           |                     t          |          d           |                                }|                     d|           |                     t          |          d           d |D             }|                     ||d d                    |                    d          }|                     d	|           |                     t          |          d
           |                    d          }|                     d|           |                     t          |          d           g d}d |D             }|                     ||           d S )N   r   )   aaaa   bbbb   cccc   dddd   eeee   ffff   ggggs   hhhhhr   s   hhhhr   c                     g | ]}|S r   r   r   s     r   r   z.TestListImpl.test_pop_byte.<locals>.<listcomp>  r   r   r   r   r   r   r   r   )r   r   r   r   r   c                     g | ]}|S r   r   r   s     r   r   z.TestListImpl.test_pop_byte.<locals>.<listcomp>  r   r   r   r   s         r   test_pop_bytezTestListImpl.test_pop_byte  s   q!7 7 7 	 	AHHQKKKKQ###5577(+++Q###!>q>>>6#2#;///5588(+++Q###5588(+++Q###@@@!>q>>>8,,,,,r   c                    t          | dd          }g d}|D ]}|                    |           |                     t          |          d           |d= |                     t          |          d           |                     t	          |          |dd                     |d= |                     t          |          d           |                     t	          |          |dd                    |d= |                     t          |          d	           |                     t	          |          g d
           d S )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  s6   q!AAA 	 	AHHQKKKKQ### aDQ###a&*---bEQ###a&2,///aDQ###a"@"@"@AAAAAr   c                 $   t          | dd          }g d}|D ]}|                    |           |                     t          |          d           |ddd= |                     t          |          d           |                     t	          |          |ddd                    |ddd= |                     t          |          d           |                     t	          |          g d           |ddd= |                     t          |          d           |                     t	          |          d	d
g           |ddd= |                     t          |          d           |                     t	          |          g            d S )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A 	 	AHHQKKKKQ### a!eHQ###a&1Q-000 a!eHQ###a"4"4"4555 a!eHQ###a4,/// a!eHQ###a"%%%%%r   c                 L   t          | d          }fd}t                    D ] }|                     ||                     !|                     t	          |                     t                    D ]'}|                     ||          ||                     (d S )Nr   c                 v    d                     | z
  dz
                                d          }|d          S )Nz{:0{}}r0   zlatin-1)formatencode)vtmpr   nmaxs     r   	make_itemz,TestListImpl.check_sizing.<locals>.make_item  s:    //$(Q,	::AA)LLCz	z?"r   )r   r   rC   rL   r1   )r   r   r   r   r   r!   s    ``   r   check_sizingzTestListImpl.check_sizing  s    y!$$	# 	# 	# 	# 	# 	# t 	# 	#AHHYYq\\""""Q&&&t 	1 	1AQqT99Q<<0000	1 	1r   c                 `    t          dd          D ]}|                     |d|z             d S )Nr0   r   r   )r   r   )r   r   r&   s     r   test_sizingzTestListImpl.test_sizing  sC    q" 	6 	6A15555	6 	6r   c                    t          | dd          }t          j        dd          }|                    |           |                     |j                   |                     t          |          d           t          j        d|d                   d         }|                     |d           |	                                 | 
                    |j                   |                     t                    5 }|                    |           d d d            n# 1 swxY w Y   |                     dt          |j                             |                     t                    5 }||d<   d d d            n# 1 swxY w Y   |                     dt          |j                             |                     t                    5 }|                                 d d d            n# 1 swxY w Y   |                     dt          |j                             |                     t                    5 }|d= d d d            n# 1 swxY w Y   |                     dt          |j                             |                     t                    5 }|ddd= d d d            n# 1 swxY w Y   |                     dt          |j                             |                                 |                     |j                   |                     t          |          d           t          j        d|d                   d         }|                     |d           d S )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  s   q!k#q!!	%%%Q###M#qt$$Q'A 	
&&&z** 	fHHSMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)3v/?+@+@AAAz** 	fAaD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)3v/?+@+@AAAz** 	fEEGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)3v/?+@+@AAAz** 	f!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)3v/?+@+@AAAz** 	f!Aa%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)3v/?+@+@AAA	 	%%%Q###M#qt$$Q'AsZ   8DD!D'E99E= E=G''G+.G+4IIIJ$$J(+J(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      s       k
 k
 k
Z! ! !
$ $ $- - -) ) )  ) ) )  + + +- - -2  
- - -4B B B(& & &81 1 1 6 6 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     s      ( ( ( ( ( (           \ \ \ \ \6 \ \ \~    v   &I I I I I8 I I I I Ir   