B
     \                 @   s   d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZ ddlmZmZ e Zed e Zed	 e 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d Zdd Zdd ZG d d! d!eZ e!d"kre"  dS )#    )print_functionN)compile_isolatedFlags)	PYVERSION)typeserrors   )TestCaseCompilationCacheZenable_pyobjectZforce_pyobjectc             C   s   t |  }}|| S )N)str)abc r   8lib/python3.7/site-packages/numba/tests/test_dataflow.pyassignments   s    r   c             C   s   t |  } }}|| | S )N)r   )r   r   r   dr   r   r   assignments2   s    r   c             C   s   | |kr| n|d }|S )N   r   )r   r   r   r   r   r   var_propagate1!   s    r   c             C   s    d| |kr| n|d d  }|S )Nr      g       @r   )r   r   r   r   r   r   var_propagate2&   s    r   c             C   s   d| |kr| p| }|S )Nr   r   )r   r   r   r   r   r   var_propagate3+   s    r   c             C   s(   d| d o|d  p"| d o"|d }|S )Nr   r   r   )r   r   r   r   r   r   var_propagate40   s    $r   c             C   s   d|   k odk S   S )Nr      r   )r   r   r   r   chained_compare6   s    r   c             C   s.   d}d}|| kr&xt dD ]}|}qW || S )N   r   r   )range)xir   r   r   r   stack_effect_error;   s    r    c             C   s,   x"t | D ]}d} ||kr
P q
W |} || fS )Nr   )r   )nr   r   r   r   r   	for_breakD   s    r"   c             C   sB   ||  } }|||  }}}|||| f\} }}}| | | | | S )Nr   )r   r   r   r   er   r   r   var_swappingN   s    
r$   c              C   s   dd } | S )Nc               S   s   d S )Nr   r   r   r   r   fV   s    zunsupported_op_code.<locals>.fr   )r%   r   r   r   unsupported_op_codeT   s    r&   c               @   s   e Zd Zdd Zdd ZefddZefddZd	d
 Zdd Z	dd Z
dd Zdd ZefddZdd ZefddZdd ZefddZdd Zefdd Zd!d" Zefd#d$Zd%S )&TestDataFlowc             C   s*   t  | _t | _| j  td d S )Nerror)r
   cachewarningscatch_warningsw_cm	__enter__simplefilter)selfr   r   r   setUp\   s    

zTestDataFlow.setUpc             C   s   | j d d d  d S )N)r,   __exit__)r/   r   r   r   tearDownc   s    zTestDataFlow.tearDownc             C   sB   t }t|tjf|d}|j}x dD ]}| |||| q"W d S )N)flags)r   r   )r   r   r   int32entry_pointassertPreciseEqual)r/   r3   pyfunccrcfuncr   r   r   r   test_assignmentsf   s
    
zTestDataFlow.test_assignmentsc             C   sR   t }t|tjf|d}|j}x dD ]}| |||| q"W |tkrN|d d S )N)r3   )r4   r   r   r   )r   r   r   r5   r6   r7   force_pyobj_flags)r/   r3   r8   r9   r:   r   r   r   r   test_assignments2m   s    
zTestDataFlow.test_assignments2c             C   s8   | j j|tjtjftd}|j}| || ||  d S )N)r3   )r)   compiler   r5   no_pyobj_flagsr6   r7   )r/   r8   argsr9   r:   r   r   r   run_propagate_funcz   s    zTestDataFlow.run_propagate_funcc             C   s   |  td |  td d S )N)r   r   )r   r   )rA   r   )r/   r   r   r   test_var_propagate1   s    z TestDataFlow.test_var_propagate1c             C   s   |  td |  td d S )N)r   r   )r   r   )rA   r   )r/   r   r   r   test_var_propagate2   s    z TestDataFlow.test_var_propagate2c             C   sL   |  td |  td |  td |  td |  td |  td d S )N)r   r   )r   r   )r   r   )r4   r   )r   r   )r   r4   )rA   r   )r/   r   r   r   test_var_propagate3   s    z TestDataFlow.test_var_propagate3c             C   sp   |  td |  td |  td |  td |  td |  td |  td |  td |  td	 d S )
N)r   r   )r   r   )r   r4   )r   r   )r   r   )r   r4   )r4   r   )r4   r   )r4   r4   )rA   r   )r/   r   r   r   test_var_propagate4   s    z TestDataFlow.test_var_propagate4c             C   sB   t }t|tjf|d}|j}x dD ]}| |||| q"W d S )N)r3   )r   r   r   r      )r   r   r   r5   r6   r7   )r/   r3   r8   r9   r:   r   r   r   r   test_chained_compare   s
    
z!TestDataFlow.test_chained_comparec             C   s   |  t d S )N)rG   r?   )r/   r   r   r   test_chained_compare_npm   s    z%TestDataFlow.test_chained_compare_npmc             C   sB   t }t|tjf|d}|j}x dD ]}| |||| q"W d S )N)r3   )r   r   r   r   )r    r   r   r5   r6   r7   )r/   r3   r8   r9   r:   r   r   r   r   test_stack_effect_error   s
    
z$TestDataFlow.test_stack_effect_errorc             C   s   |  t d S )N)rI   r?   )r/   r   r   r   test_stack_effect_error_npm   s    z(TestDataFlow.test_stack_effect_error_npmc             C   sH   t }t|tjfd |d}|j}ttddd}| || ||  d S )Nr   )r3   r   
   r   )r$   r   r   r5   r6   tupler   r7   )r/   r3   r8   r9   r:   r@   r   r   r   test_var_swapping   s
    zTestDataFlow.test_var_swappingc             C   s   |  t d S )N)rM   r?   )r/   r   r   r   test_var_swapping_npm   s    z"TestDataFlow.test_var_swapping_npmc             C   sN   t }t|tjtjf|d}|j}x(dD ] \}}| |||||| q&W d S )N)r3   ))rF   r   )rF      )r"   r   r   Zintpr6   r7   )r/   r3   r8   r9   r:   r!   r   r   r   r   test_for_break   s
    zTestDataFlow.test_for_breakc             C   s   |  t d S )N)rP   r?   )r/   r   r   r   test_for_break_npm   s    zTestDataFlow.test_for_break_npmc          	   C   sD   t }| tj}t|d|d}W d Q R X d}| |t|j d S )Nr   )r3   Zmake_function)r&   ZassertRaisesr   ZUnsupportedErrorr   ZassertInr   Z	exception)r/   r3   r8   Zraisesr9   msgr   r   r   test_unsupported_op_code   s
    z%TestDataFlow.test_unsupported_op_codeN)__name__
__module____qualname__r0   r2   r<   r;   r=   rA   rB   rC   rD   rE   rG   rH   rI   rJ   rM   rN   rP   rQ   rS   r   r   r   r   r'   Z   s$   	r'   __main__)#Z
__future__r   r*   Znumba.unittest_supportZunittest_supportZunittestZnumba.compilerr   r   Znumba.utilsr   Znumbar   r   Zsupportr	   r
   Zenable_pyobj_flagssetr<   r?   r   r   r   r   r   r   r   r    r"   r$   r&   r'   rT   mainr   r   r   r   <module>   s2   

	
s