U
    iâËd  ã                   @   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eƒ Zde_dd„ Zdd„ ZG dd„ deƒZG dd„ deƒZedkr¬e ¡  dS )z!
Testing object mode specifics.

é    N)Úcompile_isolatedÚFlags)Újit)Úutils)ÚTestCasec                 C   s   | d }|d S )Né   y              @© )ÚnÚtmpr   r   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_object_mode.pyÚcomplex_constant   s    r   c                 C   s   | d S )Nl         4LEh›*r-P´3OF r   ©r	   r   r   r   Úlong_constant   s    r   c                 C   s   | d d …= d S ©Nr   ©Úxr   r   r   Údelitem_usecase   s    r   Tc                 C   sB   d}t | ƒD ]0}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   | S r   r   r   r   r   r   Úarray_of_object*   s    r   c                   @   sD   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S )ÚTestObjectModec                 C   s0   t }t|dtd�}|j}|  |dƒ|dƒ¡ d S ©Nr   ©Úflagsé   )r   r   ÚforceobjÚentry_pointÚassertPreciseEqual©ÚselfÚpyfuncÚcresÚcfuncr   r   r   Útest_complex_constant0   s    z$TestObjectMode.test_complex_constantc                 C   s0   t }t|dtd�}|j}|  |dƒ|dƒ¡ d S r   )r   r   r    r!   r"   r#   r   r   r   Útest_long_constant6   s    z!TestObjectMode.test_long_constantc                    sh   t ‰tˆdtd�}|j‰ |  ˆddƒˆ ddƒ¡ ‡fdd„}‡ fdd„}tt |¡ƒ tt |¡ƒ dS )	zm
        Test bug that decref the iterator early.
        If the bug occurs, a segfault should occur
        r   r   é   c                      s   ˆ ddƒ d S ©Nr*   r   r   )r%   r   r   Ú	bm_pyfuncF   s    z0TestObjectMode.test_loop_nest.<locals>.bm_pyfuncc                      s   ˆ ddƒ d S r+   r   r   )r'   r   r   Úbm_cfuncI   s    z/TestObjectMode.test_loop_nest.<locals>.bm_cfuncN)r   r   r    r!   ÚassertEqualÚprintr   Z	benchmark)r$   r&   r,   r-   r   )r'   r%   r   Útest_loop_nest<   s    zTestObjectMode.test_loop_nestc                 C   s.   t tƒ}t tƒ gd ¡}|  ||ƒ|¡ d S )Né
   )r   r   ÚnpÚarrayÚobjectZassertIs)r$   r'   Zobjarrr   r   r   Útest_array_of_objectO   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 5 Q R X |  d	t|jƒ¡ dS )
z6
        Test handling of the `in` comparison
        T©r    c                 S   s   | |kS r   r   )r   r   r   r   r   ÚfooX   s    z2TestObjectMode.test_sequence_contains.<locals>.fooé   r   é   Nzis not iterable)r   Ú
assertTrueÚassertFalseÚassertRaisesÚ	TypeErrorZassertInÚstrÚ	exception)r$   r7   Zraisesr   r   r   Útest_sequence_containsT   s    
z%TestObjectMode.test_sequence_containsc              	   C   sX   t }t|dtd�}|j}dddg}||ƒ |  |g ¡ |  t¡� |dƒ W 5 Q R X d S )Nr   r   é   r   r*   é*   )r   r   r    r!   r"   r<   r=   )r$   r%   r&   r'   Úlr   r   r   Útest_deliteme   s    
zTestObjectMode.test_delitemc                    sT   dd„ ‰ t dd�‡ fdd„ƒ}d}||ƒ}| |¡}|  |t|ƒ¡ |  ||¡ d S )Nc                  W   s   | S r   r   r   r   r   r   Úconsumerq   s    z8TestObjectMode.test_starargs_non_tuple.<locals>.consumerTr6   c                    s   ˆ | Ž S r   r   r   ©rE   r   r   r7   t   s    z3TestObjectMode.test_starargs_non_tuple.<locals>.fooZijo)r   Zpy_funcr.   Útuple)r$   r7   ÚargÚgotÚexpectr   rF   r   Útest_starargs_non_tuplep   s    
z&TestObjectMode.test_starargs_non_tupleN)
Ú__name__Ú
__module__Ú__qualname__r(   r)   r0   r5   r@   rD   rK   r   r   r   r   r   .   s   r   c                   @   s0   e Zd Z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   )r:   Z
signaturesr;   Znopython_signatures)r$   Zdispr   r   r   Ú_ensure_objmode„   s    z,TestObjectModeInvalidRewrite._ensure_objmodec                    s>   dd„ ‰ ‡ fdd„}t |ƒ}|  |dƒ|dƒ¡ |  |¡ dS )zo
        Test code based on user submitted issue at
        https://github.com/numba/numba/issues/2159
        c                 S   s   | S r   r   r   r   r   r   Útest0Ž   s    zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test0c                    s   | dkrt ƒ ‚ˆ | ƒS r   )Ú
ValueErrorr   ©rQ   r   r   Útest1‘   s    zQTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallback.<locals>.test1r1   N)r   r.   rP   )r$   rT   Úcompiledr   rS   r   Ú%test_static_raise_in_objmode_fallback‰   s
    zBTestObjectModeInvalidRewrite.test_static_raise_in_objmode_fallbackc                    sV   dd„ ‰ ‡ fdd„}t |ƒ}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   s   | S r   r   r   r   r   r   rQ   ¢   s    zSTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.test0c                    s&   t  | ¡} d|d< ˆ |  ¡ | ¡  ƒS )Nr8   r   )r2   ZasarrayÚsum)Za1Za2rS   r   r   Útest¥   s    
zRTestObjectModeInvalidRewrite.test_static_setitem_in_objmode_fallback.<locals>.testrA   r   N)r   r2   r3   r.   rP   )r$   rX   rU   Úargsr   rS   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])
r2   ÚfuncTr6   N)r2   Úexecr   )r$   Z	func_textZloc_varsZcustom_globalsr[   Zjittedr   r   r   Útest_dynamic_func_objmode±   s    z6TestObjectModeInvalidRewrite.test_dynamic_func_objmodeN)rL   rM   rN   Ú__doc__rP   rV   rZ   r]   r   r   r   r   rO      s
   rO   Ú__main__)r^   Únumpyr2   ZunittestZnumba.core.compilerr   r   Znumbar   Z
numba.corer   Znumba.tests.supportr   r   r   r   r    Zforce_pyobjectr   r   r   rO   rL   Úmainr   r   r   r   Ú<module>   s"   
Q@