B
     \
                 @   s   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	m
Z
mZ ddlmZmZ dd	 Zd
d Zdd ZG dd dejZedkre  dS )zJ
Test threadsafety for compiler.
These tests will cause segfault if fail.
    N)config)unittest_support)jit	vectorizeguvectorize   )temp_directoryoverride_configc             C   s
   t | S )N)npZones)nv r   <lib/python3.7/site-packages/numba/tests/test_threadsafety.pyfoo   s    r   c             C   s   | | S )Nr   )abr   r   r   	ufunc_foo   s    r   c             C   s   | | |d< d S )Nr   r   )r   r   outr   r   r   
gufunc_foo   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d Z
dd Zdd Zdd ZdS )TestThreadSafetyc                s    fdd}|S )Nc                 s   t f  t} | ddS )N   
   )r   r   )cfunc)optionsr   r   runner!   s    z(TestThreadSafety.run_jit.<locals>.runnerr   )selfr   r   r   )r   r   run_jit    s    zTestThreadSafety.run_jitc          	      sx   t | jj| _td| jT fdd  fddtdD }x|D ]}|  qDW x|D ]}|  qZW W d Q R X d S )NZ	CACHE_DIRc                 s&   x t dD ]} t }|  q
W d S )Nr   )rangerandomZchoice)_fn)fnlistr   r   chooser*   s    
z-TestThreadSafety.run_compile.<locals>.chooserc                s   g | ]}t j d qS ))target)	threadingZThread).0i)r"   r   r   
<listcomp>/   s   z0TestThreadSafety.run_compile.<locals>.<listcomp>r   )r   	__class____name__Z
_cache_dirr	   r   startjoin)r   r!   ZthsZthr   )r"   r!   r   run_compile'   s    


zTestThreadSafety.run_compilec             C   s   |  | jddg d S )NT)nopython)r,   r   )r   r   r   r   test_concurrent_jit6   s    z$TestThreadSafety.test_concurrent_jitc             C   s   |  | jdddg d S )NT)r-   cache)r,   r   )r   r   r   r   test_concurrent_jit_cache9   s    z*TestThreadSafety.test_concurrent_jit_cachec                s    fdd}|S )Nc                 s4   t dgf t} tjdtj }}| ||S )Nz(f4, f4)r   )r   r   r
   r   astypefloat32)r   r   r   )r   r   r   r   =   s    z.TestThreadSafety.run_vectorize.<locals>.runnerr   )r   r   r   r   )r   r   run_vectorize<   s    zTestThreadSafety.run_vectorizec             C   s   |  | jddg d S )NT)r-   )r,   r3   )r   r   r   r   test_concurrent_vectorizeC   s    z*TestThreadSafety.test_concurrent_vectorizec             C   s   |  | jdddg d S )NT)r-   r/   )r,   r3   )r   r   r   r   test_concurrent_vectorize_cacheF   s    z0TestThreadSafety.test_concurrent_vectorize_cachec                s    fdd}|S )Nc                 s:   dg} t | df t}tjdtj }}|||S )Nz(f4, f4, f4[:])z	(),()->()r   )r   r   r
   r   r1   r2   )Zsigr   r   r   )r   r   r   r   J   s    z0TestThreadSafety.run_guvectorize.<locals>.runnerr   )r   r   r   r   )r   r   run_guvectorizeI   s    z TestThreadSafety.run_guvectorizec             C   s   |  | jddg d S )NT)r-   )r,   r6   )r   r   r   r   test_concurrent_guvectorizeQ   s    z,TestThreadSafety.test_concurrent_guvectorizec             C   s   |  | jdddg d S )NT)r-   r/   )r,   r6   )r   r   r   r   !test_concurrent_guvectorize_cacheT   s    z2TestThreadSafety.test_concurrent_guvectorize_cachec          
   C   sP   |  | jddd| jdd| jddd| jdd| jddd| jddg d S )NT)r-   r/   )r-   )r,   r   r3   r6   )r   r   r   r   test_concurrent_mix_useW   s    

z(TestThreadSafety.test_concurrent_mix_useN)r)   
__module____qualname__r   r,   r.   r0   r3   r4   r5   r6   r7   r8   r9   r   r   r   r   r      s   r   __main__)__doc__r$   r   Znumpyr
   Znumbar   r   Zunittestr   r   r   Zsupportr   r	   r   r   r   ZTestCaser   r)   mainr   r   r   r   <module>   s   B