
    xKg
                         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 Zd Zd Z G d	 d
ej$                        Zedk(  r ej*                          yy)zJ
Test threadsafety for compiler.
These tests will cause segfault if fail.
    N)jit	vectorizeguvectorize)temp_directoryoverride_config)configc                 ,    t        j                  |       S N)npones)nvs     a/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_threadsafety.pyfoor      s    771:    c                     | |z   S r
    )abs     r   	ufunc_foor      s    q5Lr   c                     | |z   |d<   y )Nr   r   )r   r   outs      r   
gufunc_foor      s    UCFr   c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestThreadSafetyc                     fd}|S )Nc                  @     t        di t              }  | dd      S )N   
   r   )r   r   )cfuncoptionss    r   runnerz(TestThreadSafety.run_jit.<locals>.runner!   s!    "CN'N3'EB<r   r   selfr!   r"   s    ` r   run_jitzTestThreadSafety.run_jit    s    	  r   c                 n   t        | j                  j                        | _        t	        d| j                        5  fd}t        d      D cg c]  }t        j                  |       }}|D ]  }|j                           |D ]  }|j                           	 d d d        y c c}w # 1 sw Y   y xY w)N	CACHE_DIRc                  ^    t        d      D ]  } t        j                        } |          y )Nr   )rangerandomchoice)_fnfnlists     r   chooserz-TestThreadSafety.run_compile.<locals>.chooser*   s$    rAv.BD #r   r   )target)
r   	__class____name__
_cache_dirr   r)   	threadingThreadstartjoin)r$   r.   r/   ithsths    `    r   run_compilezTestThreadSafety.run_compile'   s    ()@)@A[$//: "!H&$q ##73$  &
 	  ;:& ;:s   B+B&,0B+&B++B4c                 H    | j                  | j                  d      g       y NTnopythonr;   r%   r$   s    r   test_concurrent_jitz$TestThreadSafety.test_concurrent_jit6   s    $,,,567r   c                 J    | j                  | j                  dd      g       y NTr?   cacher@   rA   s    r   test_concurrent_jit_cachez*TestThreadSafety.test_concurrent_jit_cache9   s     $,,D,ABCr   c                     fd}|S )Nc                       t        dgfi t              } t        j                  j                  d      j	                  t        j
                        x}} | ||      S )Nz(f4, f4)r   )r   r   r   r*   astypefloat32)r    r   r   r!   s      r   r"   z.TestThreadSafety.run_vectorize.<locals>.runner=   sO    6Izl6g6yAEII$$R(//

;;AA;r   r   r#   s    ` r   run_vectorizezTestThreadSafety.run_vectorize<   s    	 r   c                 H    | j                  | j                  d      g       y r=   r;   rL   rA   s    r   test_concurrent_vectorizez*TestThreadSafety.test_concurrent_vectorizeC   s!    $,,d,;<=r   c                 J    | j                  | j                  dd      g       y rD   rN   rA   s    r   test_concurrent_vectorize_cachez0TestThreadSafety.test_concurrent_vectorize_cacheF   s#    $,,d$,GHIr   c                     fd}|S )Nc                      dg}  t        | dfi t              }t        j                  j                  d      j	                  t        j
                        x}} |||      S )Nz(f4, f4, f4[:])z	(),()->()r   )r   r   r   r*   rJ   rK   )sigr    r   r   r!   s       r   r"   z0TestThreadSafety.run_guvectorize.<locals>.runnerJ   sW    $%C<K[<G<ZHEII$$R(//

;;AA;r   r   r#   s    ` r   run_guvectorizez TestThreadSafety.run_guvectorizeI   s    	
 r   c                 H    | j                  | j                  d      g       y r=   r;   rU   rA   s    r   test_concurrent_guvectorizez,TestThreadSafety.test_concurrent_guvectorizeQ   s!    $...=>?r   c                 J    | j                  | j                  dd      g       y rD   rW   rA   s    r   !test_concurrent_guvectorize_cachez2TestThreadSafety.test_concurrent_guvectorize_cacheT   s#    $..D.IJKr   c           
          | j                  | j                  dd      | j                  d      | j                  dd      | j                  d      | j                  dd      | j                  d      g       y )NTrE   r>   )r;   r%   rL   rU   rA   s    r   test_concurrent_mix_usez(TestThreadSafety.test_concurrent_mix_useW   s{    $,,D,A,,,5,,d$,G,,d,;..D.I...=? 	@r   N)r2   
__module____qualname__r%   r;   rB   rG   rL   rO   rQ   rU   rX   rZ   r\   r   r   r   r   r      s>    8D>J@L@r   r   __main__)__doc__r4   r*   numpyr   numbar   r   r   numba.tests.supportr   r   
numba.corer   unittestr   r   r   TestCaser   r2   mainr   r   r   <module>rh      sb       - - ?  
?@x(( ?@D zHMMO r   