U
    ,da                     @   sl   d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z
 d dlmZmZ G dd deZedkrhe   dS )    N)njitjitliteral_unroll)event)TestCaseoverride_configc                   @   s\   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d Zdd ZdS )	TestEventc                 C   s   t dd   ttj| _d S )Nc                   S   s   d S N r
   r
   r
   :/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_event.py<lambda>       z!TestEvent.setUp.<locals>.<lambda>)r   lenev_registered _TestEvent__registered_listenersselfr
   r
   r   setUp   s    zTestEvent.setUpc                 C   s   |  ttj| j d S r	   )assertEqualr   r   r   r   r   r
   r
   r   tearDown   s    zTestEvent.tearDownc              	   C   sN   t dd }td}|d W 5 Q R X | |tj | t|jd d S )Nc                 S   s   | |  S r	   r
   xr
   r
   r   foo   s    z.TestEvent.test_recording_listener.<locals>.foonumba:compile      )r   r   install_recorderassertIsInstanceZRecordingListenerassertGreaterEqualr   buffer)r   r   recr
   r
   r   test_recording_listener   s    
z!TestEvent.test_recording_listenerc                 C   sL   t dd }|d ||jd }|d d }| |t | |d d S )Nc                 S   s   | |  S r	   r
   r   r
   r
   r   r   $   s    z/TestEvent.test_compiler_lock_event.<locals>.foor   r   timerscompiler_lockr   get_metadata
signaturesr   floatassertGreaterr   r   mdZlock_durationr
   r
   r   test_compiler_lock_event#   s    
z"TestEvent.test_compiler_lock_eventc                 C   sL   t dd }|d ||jd }|d d }| |t | |d d S )Nc                 S   s   | |  S r	   r
   r   r
   r
   r   r   /   s    z+TestEvent.test_llvm_lock_event.<locals>.foor   r   r#   	llvm_lockr%   r*   r
   r
   r   test_llvm_lock_event.   s    
zTestEvent.test_llvm_lock_eventc              	   C   s   t dd }td}|d W 5 Q R X | t|jd |jD ]n\}}|j}| |d t | |d t | |d t | |d	 t | |d
 t | |d t qBd S )Nc                 S   s   | |  S r	   r
   r   r
   r
   r   r   :   s    z*TestEvent.test_run_pass_event.<locals>.fooznumba:run_passr   r   namequalnamemoduleflagsargsreturn_type)	r   r   r   r)   r   r    datar   str)r   r   Zrecorder_r   r5   r
   r
   r   test_run_pass_event9   s    
zTestEvent.test_run_pass_eventc              	      s^   | G  fdddt j}tdd  | }t d|} d W 5 Q R X | || d S )Nc                       s(   e Zd Z fddZ fddZdS )z3TestEvent.test_install_listener.<locals>.MyListenerc                    s`    |jtjj  |jd |jd   |jd }|  |jd |j	 d S Nr   
dispatcherr3   )
r   statusr   EventStatusSTARTkindassertIsr5   assertNotIn	overloadsr   r   r:   r   utr
   r   on_startP   s    
z<TestEvent.test_install_listener.<locals>.MyListener.on_startc                    sN    |jtjj  |jd |jd }|  |jd |j	 d S r9   
r   r;   r   r<   ZENDr>   r5   r?   ZassertInrA   rB   rC   r
   r   on_endY   s
    
z:TestEvent.test_install_listener.<locals>.MyListener.on_endN__name__
__module____qualname__rE   rG   r
   rC   r
   r   
MyListenerO   s   	rL   c                 S   s   | S r	   r
   r   r
   r
   r   r   a   s    z,TestEvent.test_install_listener.<locals>.foor   r   )r   Listenerr   Zinstall_listenerr?   )r   rL   listeneryieldedr
   rC   r   test_install_listenerL   s    
zTestEvent.test_install_listenerc                    sR   | G  fdddt j}tdd  | }t d|  d t d| d S )Nc                       s(   e Zd Z fddZ fddZdS )z2TestEvent.test_global_register.<locals>.MyListenerc                    sN    |jtjj  |jd |jd }|  |jd |j	 d S r9   )
r   r;   r   r<   r=   r>   r5   r?   r@   rA   rB   rC   r
   r   rE   p   s
    
z;TestEvent.test_global_register.<locals>.MyListener.on_startc                    sN    |jtjj  |jd |jd }|  |jd |j	 d S r9   rF   rB   rC   r
   r   rG   y   s
    
z9TestEvent.test_global_register.<locals>.MyListener.on_endNrH   r
   rC   r
   r   rL   o   s   	rL   c                 S   s   | S r	   r
   r   r
   r
   r   r      s    z+TestEvent.test_global_register.<locals>.foor   r   )r   rM   r   register
unregister)r   rL   rN   r
   rC   r   test_global_registerl   s    
zTestEvent.test_global_registerc              	   C   s   t dd }td}|  W 5 Q R X | t|jd |j|jd  }|j\}|j|jd  }| 	|j
d d t | 	|j
d d t d S )	Nc                  S   s$   t   d} tdD ]}| |7 } q| S )Nr   
   )objectrange)cir
   r
   r   r      s
    
z-TestEvent.test_lifted_dispatcher.<locals>.foor      r   r#   r$   r-   )r   r   r   r   r   r    rA   r'   Zliftedr   metadatar(   )r   r   r!   ZcresZldispZlifted_cresr
   r
   r   test_lifted_dispatcher   s     
z TestEvent.test_lifted_dispatcherc              	      s   t tj t fddtfdd}tdd |d W 5 Q R X dd	 }||d
}|d
}||d}|d}| |d |d  | |d |d  | | |d  | | |d  | |d |d  | |d |d  d S )Nc                    sH   d}t  D ],}|d| ikr&|d7 }q|t| d 7 }qt| |fS )Nr   1r   )r   r   )r   npsqrtsin)r   accrX   )ar
   r   bar   s    
z-TestEvent.test_timing_properties.<locals>.barc                    s    t | | fS r	   )r]   zerosr   )rb   r
   r   r      s    z-TestEvent.test_timing_properties.<locals>.fooZLLVM_PASS_TIMINGSTr   c                 S   s   |  | jd }|| S )Nr   )r&   r'   )fnpropr+   r
   r
   r   
get_timers   s    z4TestEvent.test_timing_properties.<locals>.get_timersr#   Zllvm_pass_timingsr-   r$   )tuplestringascii_lowercaser   r   Z
assertLessZget_total_time)r   r   rf   Z
foo_timersZ
bar_timersZfoo_llvm_timerZbar_llvm_timerr
   )ra   rb   r   test_timing_properties   s<    
	









z TestEvent.test_timing_propertiesN)rI   rJ   rK   r   r   r"   r,   r.   r8   rP   rS   r[   rj   r
   r
   r
   r   r      s    r   __main__)Zunittestrh   Znumpyr]   Znumbar   r   r   Z
numba.corer   r   Znumba.tests.supportr   r   r   rI   mainr
   r
   r
   r   <module>   s    N