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)npones)nv r   Q/home/ubuntu/.local/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 )N	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__
_cache_dirr   r"   startjoin)r   r'   thsthr   )r(   r'   r   run_compile'   s   


"zTestThreadSafety.run_compilec                 C      |  | jddg d S NTnopythonr6   r   r   r   r   r   test_concurrent_jit6      z$TestThreadSafety.test_concurrent_jitc                 C      |  | jdddg d S NTr:   cacher;   r<   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   r7   r8   r6   rG   r<   r   r   r   test_concurrent_vectorizeC   r>   z*TestThreadSafety.test_concurrent_vectorizec                 C   r?   r@   rH   r<   r   r   r   test_concurrent_vectorize_cacheF   rD   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#   rE   rF   )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   r7   r8   r6   rL   r<   r   r   r   test_concurrent_guvectorizeQ   r>   z,TestThreadSafety.test_concurrent_guvectorizec                 C   r?   r@   rM   r<   r   r   r   !test_concurrent_guvectorize_cacheT   rD   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 )NTrA   r9   )r6   r   rG   rL   r<   r   r   r   test_concurrent_mix_useW   s   



z(TestThreadSafety.test_concurrent_mix_useN)r0   
__module____qualname__r   r6   r=   rC   rG   rI   rJ   rL   rN   rO   rP   r   r   r   r   r      s    r   __main__)__doc__r*   r#   numpyr	   numbar   r   r   numba.tests.supportr   r   
numba.corer   unittestr   r   r   TestCaser   r0   mainr   r   r   r   <module>   s    B