ó
\K]c           @` s   d  d l  m Z m Z m Z d  d l Z d  d l m Z m Z m	 Z	 d  d l
 m Z m Z m Z d e e j f d     YZ e d k r e j   n  d S(   i    (   t   print_functiont   absolute_importt   divisionN(   t   configt   cudat   jit(   t   unittestt   SerialMixint   skip_on_cudasimt   TestExceptionc           B` sJ   e  Z d    Z d   Z d   Z d   Z e d  e j d     Z	 RS(   c         C` sŤ   d   } t  j |  } t  j d t  |  } t j sY | d t j d d g   n  |  j t  $ } | d t j d d g   Wd  QX|  j	 d t
 | j   d  S(	   Nc         S` s+   t  j j } | d k r' |  j | n  d  S(   Ni   (   R   t	   threadIdxt   xt   shape(   t   aryR   (    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   foo
   s    t   debugi   i   i    s   tuple index out of range(   i   i   (   i   i   (   R   R   t   TrueR   t   ENABLE_CUDASIMt   npt   arrayt   assertRaisest
   IndexErrort   assertInt   strt	   exception(   t   selfR   t
   unsafe_foot   safe_foot   cm(    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   test_exception	   s    		 #c         C` sQ   t  j d t  d    } | d t  |  j t   | d t  Wd  QXd  S(   NR   c         S` s   |  r t   n  d  S(   N(   t
   ValueError(   t   do_raise(    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyR      s    i   (   i   i   (   i   i   (   R   R   R   t   FalseR   R   (   R   R   (    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   test_user_raise   s    c   	      C` sç   t  j d |  d    } t  j d    } d } d t j |  d } d t j |  d } | d | f | |  d t j |  d } d t j |  d } | d | f | |  t j j | |  t j j | |  d S(	   sź   Testing issue #2655.

        Exception raising code can cause the compiler to miss location
        of unifying branch target and resulting in unexpected warp
        divergence.
        R   c         S` sŞ   t  j j } t  j j } | d k rZ x3 t |  D]" } | | c |  | | | 7<q1 Wn  t  j   | d k  rŚ x3 t |  D]" } |  | c |  | | | 7<q} Wn  d  S(   Ni   i   (   R   R
   R   t   blockDimt   ranget   syncthreads(   R   t   yt   tidt   ntidt   i(    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   problematic/   s    #
c         S` sĐ   t  j j } t  j j } | d k rm xF t |  D]5 } | | d k r1 | | c |  | | | 7<q1 q1 Wn  t  j   | d k  rĚ xF t |  D]5 } | | d k r |  | c |  | | | 7<q q Wn  d  S(   Ni   i    i   (   R   R
   R   R"   R#   R$   (   R   R%   R&   R'   R(   (    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   oracle=   s    &
i    g      đ?g{ŽGáz?i   N(   R   R   R   t   aranget   testingt   assert_almost_equal(	   R   t   with_debug_modeR)   R*   t   nt   got_xt   got_yt   expect_xt   expect_y(    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   case_raise_causing_warp_diverge(   s    c         C` s   |  j  d t  d S(   s#   Test case for issue #2655.
        R.   N(   R4   R    (   R   (    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   test_raise_causing_warp_divergeY   s    s&   failing case doesn't happen in CUDASIMc         C` s   |  j  d t  d S(   sa   Test case for issue #2655.

        This test that the issue still exists in debug mode.
        R.   N(   R4   R   (   R   (    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt'   test_raise_causing_warp_diverge_failing^   s    (
   t   __name__t
   __module__R   R!   R4   R5   R   R   t   expectedFailureR6   (    (    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyR	      s   		
	1		t   __main__(   t
   __future__R    R   R   t   numpyR   t   numbaR   R   R   t   numba.cuda.testingR   R   R   t   TestCaseR	   R7   t   main(    (    (    sE   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_exception.pyt   <module>   s   `