ó
\K]c           @   sÍ   d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 m
 Z
 m Z d d l m Z m Z d „  Z d	 „  Z d
 „  Z d e j f d „  ƒ  YZ e d k rÉ e j ƒ  n  d S(   sJ   
Test threadsafety for compiler.
These tests will cause segfault if fail.
iÿÿÿÿN(   t   config(   t   unittest_support(   t   jitt	   vectorizet   guvectorizei   (   t   temp_directoryt   override_configc         C   s   t  j |  ƒ S(   N(   t   npt   ones(   t   nt   v(    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   foo   s    c         C   s   |  | S(   N(    (   t   at   b(    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt	   ufunc_foo   s    c         C   s   |  | | d <d  S(   Ni    (    (   R   R   t   out(    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt
   gufunc_foo   s    t   TestThreadSafetyc           B   sk   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   c            s   ‡  f d †  } | S(   Nc             s   t  ˆ    t ƒ }  |  d d ƒ S(   Ni   i
   (   R   R   (   t   cfunc(   t   options(    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   runner!   s    (    (   t   selfR   R   (    (   R   s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   run_jit    s    c      	      s¢   t  |  j j ƒ |  _ t d |  j ƒ u ‡  f d †  } g  t d ƒ D] } t j d | ƒ ^ qD } x | D] } | j ƒ  qi Wx | D] } | j	 ƒ  q„ WWd  QXd  S(   Nt	   CACHE_DIRc             s1   x* t  d ƒ D] }  t j ˆ  ƒ } | ƒ  q Wd  S(   Ni
   (   t   ranget   randomt   choice(   t   _t   fn(   t   fnlist(    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   chooser*   s    i   t   target(
   R   t	   __class__t   __name__t
   _cache_dirR   R   t	   threadingt   Threadt   startt   join(   R   R   R   t   it   thst   th(    (   R   s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   run_compile'   s    (c         C   s    |  j  |  j d t ƒ g ƒ d  S(   Nt   nopython(   R*   R   t   True(   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   test_concurrent_jit6   s    c         C   s&   |  j  |  j d t d t ƒ g ƒ d  S(   NR+   t   cache(   R*   R   R,   (   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   test_concurrent_jit_cache9   s    c            s   ‡  f d †  } | S(   Nc             sG   t  d g ˆ   t ƒ }  t j j d ƒ j t j ƒ } } |  | | ƒ S(   Ns   (f4, f4)i
   (   R   R   R   R   t   astypet   float32(   R   R   R   (   R   (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyR   =   s    "(    (   R   R   R   (    (   R   s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   run_vectorize<   s    c         C   s    |  j  |  j d t ƒ g ƒ d  S(   NR+   (   R*   R2   R,   (   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   test_concurrent_vectorizeC   s    c         C   s&   |  j  |  j d t d t ƒ g ƒ d  S(   NR+   R.   (   R*   R2   R,   (   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   test_concurrent_vectorize_cacheF   s    c            s   ‡  f d †  } | S(   Nc             sP   d g }  t  |  d ˆ   t ƒ } t j j d ƒ j t j ƒ } } | | | ƒ S(   Ns   (f4, f4, f4[:])s	   (),()->()i
   (   R   R   R   R   R0   R1   (   t   sigR   R   R   (   R   (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyR   J   s    	"(    (   R   R   R   (    (   R   s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   run_guvectorizeI   s    c         C   s    |  j  |  j d t ƒ g ƒ d  S(   NR+   (   R*   R6   R,   (   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   test_concurrent_guvectorizeQ   s    c         C   s&   |  j  |  j d t d t ƒ g ƒ d  S(   NR+   R.   (   R*   R6   R,   (   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt!   test_concurrent_guvectorize_cacheT   s    c      
   C   s}   |  j  |  j d t d t ƒ |  j d t ƒ |  j d t d t ƒ |  j d t ƒ |  j d t d t ƒ |  j d t ƒ g ƒ d  S(   NR+   R.   (   R*   R   R,   R2   R6   (   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   test_concurrent_mix_useW   s    (   R!   t
   __module__R   R*   R-   R/   R2   R3   R4   R6   R7   R8   R9   (    (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyR      s   										t   __main__(   t   __doc__R#   R   t   numpyR   t   numbaR    R   t   unittestR   R   R   t   supportR   R   R   R   R   t   TestCaseR   R!   t   main(    (    (    s<   lib/python2.7/site-packages/numba/tests/test_threadsafety.pyt   <module>   s   			B