U
    ,d                     @   s   d dl Z d dlZd dlmZmZ d dlmZmZ d dlm	Z	m
Z
 e Zde_e Zde_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 )    N)compile_isolatedFlags)typeserrors)TestCaseCompilationCacheTc                 C   s   t |  }}|| S Nstrabc r   =/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_dataflow.pyassignments   s    r   c                 C   s   t |  } }}|| | S r   r	   )r   r   r   dr   r   r   assignments2   s    r   c                 C   s   | |kr| n|d }|S N   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   var_propagate2#   s    r   c                 C   s   d| |kr| p| }|S 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   var_propagate4-   s    $r   c                 C   s   d|   k odk S   S )Nr      r   )r   r   r   r   chained_compare3   s    r   c                 C   s*   d}d}|| kr"t dD ]}|}q|| S )N   r   r   range)xir   r   r   r   stack_effect_error8   s    r#   c                 C   s*   t | D ]}d} ||kr q"q|} || fS )Nr   r   )nr!   r"   r   r   r   	for_breakA   s    r%   c                 C   sB   ||  } }|||  }}}|||| f\} }}}| | | | | S r   r   )r   r   r   r   er   r   r   var_swappingK   s    
r'   c                   C   s   zW n   Y nX d S r   r   r   r   r   r   unsupported_op_codeQ   s    r(   c                   @   s   e Z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d!S )"TestDataFlowc                 C   s   t  | _d S r   )r   cacheselfr   r   r   setUpZ   s    zTestDataFlow.setUpc                 C   s>   t }t|tjf|d}|j}dD ]}| |||| q d S )Nflagsr   r   )r   r   r   int32entry_pointassertPreciseEqualr,   r/   pyfunccrcfuncr!   r   r   r   test_assignments]   s
    zTestDataFlow.test_assignmentsc                 C   sN   t }t|tjf|d}|j}dD ]}| |||| q |tkrJ|d d S )Nr.   r0   r   )r   r   r   r2   r3   r4   force_pyobj_flagsr5   r   r   r   test_assignments2d   s    zTestDataFlow.test_assignments2c                 C   s8   | j j|tjtjftd}|j}| || ||  d S )Nr.   )r*   compiler   r2   no_pyobj_flagsr3   r4   )r,   r6   argsr7   r8   r   r   r   run_propagate_funcq   s
    zTestDataFlow.run_propagate_funcc                 C   s   |  td |  td d S Nr   r   r   r   )r?   r   r+   r   r   r   test_var_propagate1w   s    z TestDataFlow.test_var_propagate1c                 C   s   |  td |  td d S r@   )r?   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 )NrA   rB   )r   r   r1   r   )r   r   r   r1   )r?   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   r1   )r   r   )r   r   rF   )r1   r   rE   )r1   r1   )r?   r   r+   r   r   r   test_var_propagate4   s    z TestDataFlow.test_var_propagate4c                 C   s>   t }t|tjf|d}|j}dD ]}| |||| q d S )Nr.   )r   r   r   r      )r   r   r   r2   r3   r4   r5   r   r   r   test_chained_compare   s
    z!TestDataFlow.test_chained_comparec                 C   s   |  t d S r   )rJ   r=   r+   r   r   r   test_chained_compare_npm   s    z%TestDataFlow.test_chained_compare_npmc                 C   s>   t }t|tjf|d}|j}dD ]}| |||| q d S )Nr.   )r   r   r   r   )r#   r   r   r2   r3   r4   r5   r   r   r   test_stack_effect_error   s
    z$TestDataFlow.test_stack_effect_errorc                 C   s   |  t d S r   )rL   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   r.   r   
   r   )r'   r   r   r2   r3   tupler    r4   )r,   r/   r6   r7   r8   r>   r   r   r   test_var_swapping   s
    zTestDataFlow.test_var_swappingc                 C   s   |  t d S r   )rP   r=   r+   r   r   r   test_var_swapping_npm   s    z"TestDataFlow.test_var_swapping_npmc                 C   sJ   t }t|tjtjf|d}|j}dD ] \}}| |||||| q$d S )Nr.   ))rI   r   )rI      )r%   r   r   Zintpr3   r4   )r,   r/   r6   r7   r8   r$   r!   r   r   r   test_for_break   s
    zTestDataFlow.test_for_breakc                 C   s   |  t d S r   )rS   r=   r+   r   r   r   test_for_break_npm   s    zTestDataFlow.test_for_break_npmN)__name__
__module____qualname__r-   r:   r9   r;   r?   rC   rD   rG   rH   rJ   rK   rL   rM   rP   rQ   rS   rT   r   r   r   r   r)   X   s    	r)   __main__)warningsZunittestZnumba.core.compilerr   r   Z
numba.corer   r   Znumba.tests.supportr   r   Zenable_pyobj_flagsZenable_pyobjectr:   Zforce_pyobjectr=   r   r   r   r   r   r   r   r#   r%   r'   r(   r)   rU   mainr   r   r   r   <module>   s.   	
f