o
    i
                     @   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rIe  dS 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   l/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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                        fdd}|S )Nc                     s   t di  t} | ddS )N   
   r   )r   r   )cfuncoptionsr   r   runner!   s   
z(TestThreadSafety.run_jit.<locals>.runnerr   selfr   r   r   r   r   run_jit       zTestThreadSafety.run_jitc                    s   t | jj| _td| j, fdd  fddtdD }|D ]}|  q!|D ]}|  q*W d    d S 1 s<w   Y  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      |  | jddg d S NTnopythonr2   r   r   r   r   r   test_concurrent_jit6      z$TestThreadSafety.test_concurrent_jitc                 C      |  | jdddg d S NTr6   cacher7   r8   r   r   r   test_concurrent_jit_cache9      z*TestThreadSafety.test_concurrent_jit_cachec                    r   )Nc                     s8   t dgfi  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<   r   zTestThreadSafety.run_vectorizec                 C   r3   r4   r2   rC   r8   r   r   r   test_concurrent_vectorizeC   r:   z*TestThreadSafety.test_concurrent_vectorizec                 C   r;   r<   rD   r8   r   r   r   test_concurrent_vectorize_cacheF   r@   z0TestThreadSafety.test_concurrent_vectorize_cachec                    r   )Nc                     s>   dg} t | dfi  t}tjdtj }}|||S )Nz(f4, f4, f4[:])z	(),()->()r   )r   r   r	   r!   rA   rB   )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   r3   r4   r2   rH   r8   r   r   r   test_concurrent_guvectorizeQ   r:   z,TestThreadSafety.test_concurrent_guvectorizec                 C   r;   r<   rI   r8   r   r   r   !test_concurrent_guvectorize_cacheT   r@   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 )NTr=   r5   )r2   r   rC   rH   r8   r   r   r   test_concurrent_mix_useW   s   



z(TestThreadSafety.test_concurrent_mix_useN)r.   
__module____qualname__r   r2   r9   r?   rC   rE   rF   rH   rJ   rK   rL   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