U
    9%e
                     @   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re  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   \/var/www/html/Darija-Ai-API/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