U
    iâËdã
  ã                   @   s’   d Z 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
mZ ddlmZ ddlZdd„ Zdd	„ Zd
d„ ZG dd„ dejƒZedkrŽe ¡  dS )zJ
Test threadsafety for compiler.
These tests will cause segfault if fail.
é    N)ÚjitÚ	vectorizeÚguvectorize)Útemp_directoryÚoverride_config)Úconfigc                 C   s
   t  | ¡S ©N)ÚnpZones)ÚnÚv© r   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_threadsafety.pyÚfoo   s    r   c                 C   s   | | S r   r   )Ú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              	      sp   t | jjƒ| _td| jƒ�L ‡fdd„‰ ‡ fdd„tdƒD ƒ}|D ]}| ¡  qB|D ]}| ¡  qTW 5 Q R X d S )NZ	CACHE_DIRc                     s"   t dƒD ]} t ˆ ¡}|ƒ  qd S )Nr   )ÚrangeÚrandomÚchoice)Ú_Úfn)Úfnlistr   r   Úchooser*   s    
z-TestThreadSafety.run_compile.<locals>.chooserc                    s   g | ]}t jˆ d �‘qS ))Útarget)Ú	threadingÚ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thsÚthr   )r$   r#   r   Úrun_compile'   s    
ÿ
zTestThreadSafety.run_compilec                 C   s   |   | jdd�g¡ d S ©NT©Únopython©r0   r   ©r   r   r   r   Útest_concurrent_jit6   s    z$TestThreadSafety.test_concurrent_jitc                 C   s   |   | jddd�g¡ d S ©NT©r3   Úcacher4   r5   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   Úrun_vectorize<   s    zTestThreadSafety.run_vectorizec                 C   s   |   | jdd�g¡ d S r1   ©r0   r=   r5   r   r   r   Útest_concurrent_vectorizeC   s    z*TestThreadSafety.test_concurrent_vectorizec                 C   s   |   | jddd�g¡ d S r7   r>   r5   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   r;   r<   )Úsigr   r   r   r   r   r   r   J   s    z0TestThreadSafety.run_guvectorize.<locals>.runnerr   r   r   r   r   Úrun_guvectorizeI   s    z TestThreadSafety.run_guvectorizec                 C   s   |   | jdd�g¡ d S r1   ©r0   rB   r5   r   r   r   Útest_concurrent_guvectorizeQ   s    z,TestThreadSafety.test_concurrent_guvectorizec                 C   s   |   | jddd�g¡ d S r7   rC   r5   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 )NTr8   r2   )r0   r   r=   rB   r5   r   r   r   Útest_concurrent_mix_useW   s    


ûz(TestThreadSafety.test_concurrent_mix_useN)r,   Ú
__module__Ú__qualname__r   r0   r6   r:   r=   r?   r@   rB   rD   rE   rF   r   r   r   r   r      s   r   Ú__main__)Ú__doc__r&   r   Únumpyr	   Znumbar   r   r   Znumba.tests.supportr   r   Z
numba.corer   Zunittestr   r   r   ZTestCaser   r,   Úmainr   r   r   r   Ú<module>   s   B