o
    i                     @   s   d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ dd Zd	d
 Zdd Zdd Zdd ZG dd deZG dd deZedkrRe  dS dS )z!
Testing object mode specifics.

    N)jittypes)utils)	PYVERSION)TestCasec                 C   s   | d }|d S )N   y              @ )ntmpr   r   Z/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_object_mode.pycomplex_constant   s   r   c                 C   s   | d S )Nl         4LEh*r-P3OF r   r	   r   r   r   long_constant   s   r   c                 C   s   | d d = d S Nr   xr   r   r   delitem_usecase      r   c                 C   sB   d}t | D ]}t |D ]}t | | D ]}||| 7 }qqq|S Nr   )range)r   yr	   ijkr   r   r   loop_nest_3   s   r   c                 C      | S r   r   r   r   r   r   array_of_object&      r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestObjectModec                 C   ,   t }tddd|}| |d|d d S Nr   Tforceobj   )r   r   assertPreciseEqualselfpyfunccfuncr   r   r   test_complex_constant,      z$TestObjectMode.test_complex_constantc                 C   r   r    )r   r   r$   r%   r   r   r   test_long_constant1   r*   z!TestObjectMode.test_long_constantc                    s\   t tddd | dd dd fdd} fdd}t| t| d	S )
zm
        Test bug that decref the iterator early.
        If the bug occurs, a segfault should occur
        r   Tr!      c                          dd d S Nr,   r   r   )r'   r   r   	bm_pyfunc?   r   z0TestObjectMode.test_loop_nest.<locals>.bm_pyfuncc                      r-   r.   r   r   )r(   r   r   bm_cfuncB   r   z/TestObjectMode.test_loop_nest.<locals>.bm_cfuncN)r   r   assertEqualr   	benchmark)r&   r/   r0   r   )r(   r'   r   test_loop_nest6   s   
zTestObjectMode.test_loop_nestc                 C   s4   t ddt}tt gd }| ||| d S )NTr!   
   )r   r   nparrayobjectassertIs)r&   r(   objarrr   r   r   test_array_of_objectH   s   z#TestObjectMode.test_array_of_objectc                 C   s   t dddd }| |dddg | |dddg | |dddg | t}|dd W d   n1 s<w   Y  td	v rHd
}ntdv rOd}ntt| |t|j	 dS )z6
        Test handling of the `in` comparison
        Tr!   c                 S   s   | |v S r   r   )r   r   r   r   r   fooQ      z2TestObjectMode.test_sequence_contains.<locals>.foo   r      N))      zis not a container or iterable))r?   r4   )r?      )r?   r#   )r?      zis not iterable)
r   
assertTrueassertFalseassertRaises	TypeErrorr   NotImplementedErrorassertInstr	exception)r&   r;   raisesexpected_snippetr   r   r   test_sequence_containsM   s   
z%TestObjectMode.test_sequence_containsc                 C   sh   t }tddd|}g d}|| | |g  | t |d W d    d S 1 s-w   Y  d S )Nr   Tr!   )r?   r   r,   *   )r   r   r$   rE   rF   )r&   r'   r(   lr   r   r   test_delitemg   s   
"zTestObjectMode.test_delitemc                    sT   dd  t dd fdd}d}||}||}| |t| | || d S )Nc                  W   r   r   r   r   r   r   r   consumerr   r   z8TestObjectMode.test_starargs_non_tuple.<locals>.consumerTr!   c                    s    |  S r   r   r   rQ   r   r   r;   u   r<   z3TestObjectMode.test_starargs_non_tuple.<locals>.fooijo)r   py_funcr1   tuple)r&   r;   arggotexpectr   rR   r   test_starargs_non_tupleq   s   
z&TestObjectMode.test_starargs_non_tuplec                 C   s(   t dddd }| | |  d S )NTr!   c                   S   s   dd dD S )Nc                 S   s   g | ]}|qS r   r   ).0r   r   r   r   
<listcomp>       z?TestObjectMode.test_expr_undef.<locals>.foo.<locals>.<listcomp>)r=   r>   r   r   r   r   r   r;      s   z+TestObjectMode.test_expr_undef.<locals>.foo)r   r1   rT   )r&   r;   r   r   r   test_expr_undef   s   
zTestObjectMode.test_expr_undefN)__name__
__module____qualname__r)   r+   r3   r:   rM   rP   rY   r]   r   r   r   r   r   *   s    
r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestObjectModeInvalidRewritezM
    Tests to ensure that rewrite passes didn't affect objmode lowering.
    c                 C   s   |  |j | |j |S r   )rC   
signaturesrD   nopython_signatures)r&   dispr   r   r   _ensure_objmode   s   z,TestObjectModeInvalidRewrite._ensure_objmodec                    sD   dd   fdd}t dd|}| |d|d | | dS )	zo
        Test code based on user submitted issue at
        https://github.com/numba/numba/issues/2159
        c                 S   r   r   r   r   r   r   r   test0   r   zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test0c                    s   | dkrt   | S r   )
ValueErrorr   rf   r   r   test1   s   zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test1Tr!   r4   N)r   r1   re   )r&   ri   compiledr   rh   r   %test_static_raise_in_objmode_fallback   s
   zBTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallbackc                    s\   dd   fdd}t dd|}tdgtdgf}| || ||  | | d	S )
zo
        Test code based on user submitted issue at
        https://github.com/numba/numba/issues/2169
        c                 S   r   r   r   r   r   r   r   rf      r   zSTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test0c                    s&   t | } d|d<  |  |  S )Nr=   r   )r5   asarraysum)a1a2rh   r   r   test   s   
zRTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.testTr!   r?   r   N)r   r5   r6   r1   re   )r&   rp   rj   argsr   rh   r   'test_static_setitem_in_objmode_fallback   s   zDTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallbackc                 C   sD   d}|d7 }i }dt i}t||| |d }tdd|}|  dS )zG
        Test issue https://github.com/numba/numba/issues/3355
        zdef func():
z    np.array([1,2,3])
r5   funcTr!   N)r5   execr   )r&   	func_textloc_varscustom_globalsrs   jittedr   r   r   test_dynamic_func_objmode   s   
z6TestObjectModeInvalidRewrite.test_dynamic_func_objmodec                 C   s`   t dddd }|  | | |j|jd  jd }| |j | |jt	dfg d S )NTr!   c                  S   s   dD ]	} dd dD  qd S )Nr   c                 S   s   g | ]}d qS )r   r   )rZ   r   r   r   r   r[      r\   zZTestObjectModeInvalidRewrite.test_issue_9725_label_renaming.<locals>.f.<locals>.<listcomp>r   r   )_r   r   r   f   s   zFTestObjectModeInvalidRewrite.test_issue_9725_label_renaming.<locals>.fr   r   )
r   re   	overloadsrb   liftedrD   rc   r1   r   Tuple)r&   r{   r}   r   r   r   test_issue_9725_label_renaming   s   

z;TestObjectModeInvalidRewrite.test_issue_9725_label_renamingN)	r^   r_   r`   __doc__re   rk   rr   ry   r   r   r   r   r   ra      s    ra   __main__)r   numpyr5   unittestnumbar   r   
numba.corer   numba.core.utilsr   numba.tests.supportr   r   r   r   r   r   r   ra   r^   mainr   r   r   r   <module>   s"    
^M