U
    ,‰d  ã                   @   sd   d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 G dd„ de
ƒZedkr`e ¡  dS )	z<
Tests issues or edge cases for producing invalid NRT refct
é    N)Únjit)Úrtsys)ÚTestCasec                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestNrtRefCtc                 C   s   t  ¡  d S )N)ÚgcZcollect)Úself© r   ú>/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_nrt_refct.pyÚsetUp   s    zTestNrtRefCt.setUpc                 C   sT   t dd„ ƒ}d}t ¡ }||ƒ t ¡ }|  |j|j |¡ |  |j|j |¡ dS )z"
        Test issue #1291
        c                 S   s   t | ƒD ]}t d¡}qdS ©Né   r   )ÚrangeÚnpÚzeros)ÚnÚiÚtempr   r   r	   Úfoo   s    z(TestNrtRefCt.test_no_return.<locals>.fooé
   N©r   r   Úget_allocation_statsÚassertEqualÚallocÚfree)r   r   r   Ú
init_statsÚ	cur_statsr   r   r	   Útest_no_return   s    
zTestNrtRefCt.test_no_returnc                 C   sP   t dd„ ƒ}t ¡ }|dƒ t ¡ }|  |j|j d¡ |  |j|j d¡ dS )z"
        Test issue #1297
        c                 S   s>   t  | df¡}t| ƒD ]}|| }qt| ƒD ]}|| }q,dS r   )r   r   r   )r   Úxr   Úyr   r   r	   Úg-   s    

z6TestNrtRefCt.test_escaping_var_init_in_loop.<locals>.gr   é   Nr   )r   r   r   r   r   r   r	   Útest_escaping_var_init_in_loop(   s    
z+TestNrtRefCt.test_escaping_var_init_in_loopc                 C   sR   t dd„ ƒ}tj d¡}t ¡ }||dƒ t ¡ }|  |j|j |j|j ¡ dS )z"
        Test issue #1573
        c                 S   s0   t  | ¡}t|jd ƒD ]}q|r,t  | ¡ |S )Nr   )r   Z
zeros_liker   Úshape)Zarr1Ztest1Ztmp_arrr   r   r   r	   Ú%if_with_allocation_and_initializationD   s    

z`TestNrtRefCt.test_invalid_computation_of_lifetime.<locals>.if_with_allocation_and_initialization)é   r$   FN)r   r   Úrandomr   r   r   r   r   )r   r#   Úarrr   r   r   r   r	   Ú$test_invalid_computation_of_lifetime@   s    


ÿz1TestNrtRefCt.test_invalid_computation_of_lifetimec                 C   sN   t dd„ ƒ}t d¡}t ¡ }||ƒ t ¡ }|  |j|j |j|j ¡ dS )z"
        Test issue #1734
        c                 S   s2   d}dD ]$}| | }|| dkr||| 7 }q|S )Nr   )r   r    r    r   )r&   Úresr   Útr   r   r	   Úf\   s    z5TestNrtRefCt.test_del_at_beginning_of_loop.<locals>.f)r   r   N)r   r   Zonesr   r   r   r   r   )r   r*   r&   r   r   r   r   r	   Útest_del_at_beginning_of_loopX   s    


ÿz*TestNrtRefCt.test_del_at_beginning_of_loopN)Ú__name__Ú
__module__Ú__qualname__r
   r   r!   r'   r+   r   r   r   r	   r      s
   r   Ú__main__)Ú__doc__r   Znumpyr   ZunittestZnumbar   Znumba.core.runtimer   Znumba.tests.supportr   r   r,   Úmainr   r   r   r	   Ú<module>   s   a