
\K]c           @` s  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l 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 Z d  d l m 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 m Z d
 d l m Z d  d l m Z m  Z  e j! d  d d f k Z" e j# j$ d  oFe" Z% e j& d d k Z' d Z( e' pke% Z) e j* e) e(  Z+ e d    Z, e d d d  f f  d    Z- e d d  d    Z. e d    Z/ e d    Z0 e d d f  d    Z1 e d d f  d    Z2 e d    Z3 e) rMe d  e4  d!    Z5 n  d" e j6 f d#     YZ7 d$ e7 f d%     YZ8 d& f  d'     YZ9 d( d)  Z: e+ d* e7 f d+     Y Z; e< d, k re j=   n  d S(-   i    (   t   print_functiont   divisiont   absolute_importN(   t   contextmanager(   t   deepcopy(   t   unittest_support(   t   njitt   stencilt   types(   t   compile_extrat   Flags(   t   registry(   t   ParallelOptionsi   (   t   tag(   t   LoweringErrort   TypingErrori   i   t   win32i    s   parfors not supportedc         C` s$   d |  d |  d |  d |  d S(	   Ng      ?i    i   i(   i    i   (   i   i    (   i    i(   ii    (    (   t   a(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   stencil1_kernel$   s    t   neighborhoodic         C` s:   |  d } x% t  d d  D] } | |  | 7} q Wd | S(   Niii   g333333?(   t   range(   R   t   cumt   i(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   stencil2_kernel)   s    
t   cvalg      ?c         C` s   d |  d S(   Ng      ?ii   (   ii   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   stencil3_kernel1   s    c         C` sD   d |  d |  d |  d |  d | d	 | d
 | d | d S(   Ng      ?i    i   i(   i    i   (   i   i    (   i    i(   ii    (   i    i   (   i   i    (   i    i(   ii    (    (   R   t   b(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   stencil_multiple_input_kernel6   s    c         C` sD   | |  d |  d |  d |  d | d | d	 | d
 | d S(   Ni    i   i(   i    i   (   i   i    (   i    i(   ii    (   i    i   (   i   i    (   i    i(   ii    (    (   R   R   t   w(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt!   stencil_multiple_input_kernel_var<   s    t   standard_indexingR   c         C` s    |  d | d |  d | d S(   Nii    i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt!   stencil_with_standard_indexing_1dB   s    c         C` s@   |  d | d |  d | d |  d | d	 |  d
 | d S(   Ni    i   i(   i    i   (   i    i   (   i   i    (   i   i    (   i    i(   i    i(   ii    (   ii    (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt!   stencil_with_standard_indexing_2dG   s    c         C` s   |  d S(   Ni   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   addone_njitM   s    t   parallelc         C` s   |  d S(   Ni   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   addone_pjitT   s    t   TestStencilBasec           B` sD   e  Z e Z d    Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         G` s6   t    |  _ |  j j d  t t |   j |   d  S(   Nt   nrt(   R
   t   cflagst   sett   superR$   t   __init__(   t   selft   args(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)   ]   s    c         C` s(   t  t j j t j j | | d  | i   S(   N(   R	   R   t
   cpu_targett   typing_contextt   target_contextt   None(   R*   t   funct   sigt   flags(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   _compile_thisd   s    c         K` sQ   t    } | j d  | s" t n | } | j d t |   |  j | | |  S(   NR%   t   auto_parallel(   R
   R'   t   TrueR   R3   (   R*   R0   R1   t   kwsR2   t   options(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   compile_paralleli   s
    	c         C` s   |  j  | | d |  j S(   NR2   (   R3   R&   (   R*   R0   R1   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   compile_njitp   s    c         O` sV   t  g  | D] } t j |  ^ q
  } |  j | |  } |  j | |  } | | f S(   N(   t   tuplet   numbat   typeofR8   R9   (   R*   t   pyfuncR+   t   kwargst   xR1   t   cpfunct   cfunc(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   compile_alls   s    (c   
      G` s   |  j  | |  \ } } | |   } | |   } | j |   } | j |   }	 t j j | | d d t j j | | d d t j j |	 | d d |  j d | j j    d  S(   Nt   decimali   s   @do_scheduling(   RB   t   entry_pointt   npt   testingt   assert_almost_equalt   assertInt   libraryt   get_llvm_str(
   R*   t   no_stencil_funcR=   R+   RA   R@   t   expectedt	   py_outputt   njit_outputt   parfor_output(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   check{   s    (
   t   __name__t
   __module__t   Falset   _numba_parallel_test_R)   R3   R8   R9   RB   RP   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR$   Y   s   					t   TestStencilc           B` s.  e  Z d    Z e e d  d     Z e e d  d     Z e e d  d     Z e e d  d     Z e e d  d     Z	 e e d  d     Z
 e e d  d     Z e e d  d	     Z e e d  d
     Z e e d  d     Z e d    Z RS(   c         O` s   t  t |   j | |   d  S(   N(   R(   RU   R)   (   R*   R+   R>   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)      s    t	   importantc         C` sK   d   } d   } d   } d } |  j  | | |  |  j  | | |  d S(   sH   Tests whether the optional out argument to stencil calls works.
        c         S` sZ   t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } t | d | } | S(   Ni   t   out(   RE   t   aranget   reshapet   zerosR   (   t   nt   At   B(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_with_out   s    ""c         S` s2   t  j |  d  j |  |  f  } t |  } | S(   Ni   (   RE   RX   RY   R   (   R[   R\   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_without_out   s    "c         S` s   t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } x t d |  d  D]| } xs t d |  d  D]^ } d | | | d f | | d | f | | | d f | | d | f | | | f <qr WqX W| S(   Ni   i   g      ?(   RE   RX   RY   RZ   R   (   R[   R\   R]   R   t   j(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_impl_seq   s    ""]id   N(   RP   (   R*   R^   R_   Ra   R[   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil1   s    				c   	      C` s  d   } d   } d } |  j  | | |  d   } d   } d } d } |  j | t j t j f  } | | |  } | j | |  } t j j | | d d |  j d	 | j	 j
    d
   } d } |  j | t j t j t j f  } | j | | |  } t j j | | d d |  j d	 | j	 j
    d   } d } |  j | t j t j t j f  } | j | | |  } t j j | | d d |  j d	 | j	 j
    d S(   s`   Tests whether the optional neighborhood argument to the stencil
        decorate works.
        c         S` s   t  j |   } t |  } | S(   N(   RE   RX   R   (   R[   R\   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_seq   s    c         S` se   t  j |   } t  j |   } x@ t d t |   D]) } d t | | d | d ! | | <q4 W| S(   Ni   g333333?i   (   RE   RX   RZ   R   t   lent   sum(   R[   R\   R]   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa      s
    'id   c         S` sD   t  j |   } d   } t j | d | | f f | |  } | S(   Nc         S` sD   |  | } x. t  | d | d  D] } | |  | 7} q$ Wd | S(   Ni   g333333?(   R   (   R   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR      s    R   (   RE   RX   R;   R   (   R[   R   R\   R   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc      s    	(c         S` sm   t  j |   } t  j |   } xH t | t |  |  D]- } d t | | | | | d ! | | <q8 W| S(   Ng333333?i   (   RE   RX   RZ   R   Rd   Re   (   R[   R   R\   R]   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa      s
     +i   RC   i   s   @do_schedulingc         S` sN   t  j |   } d   } t j | d | | f f d | f | |  } | S(   Nc         S` sL   |  | d } x2 t  | d | d  D] } | |  | d 7} q( Wd | S(   Ni   g333333?(   R   (   R   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR      s    R   t   index_offsets(   RE   RX   R;   R   (   R[   R   t   offsetR\   R   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc      s
    	i   c         S` sN   t  j |   } d   } t j | d | | f f d | f | |  } | S(   Nc         S` s!   d t  j |  | d | d ! S(   Ng333333?i   i   (   RE   Re   (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR      s    R   Rf   (   RE   RX   R;   R   (   R[   R   Rg   R\   R   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc      s
    	N(   RP   R8   R   t   intpRD   RE   RF   RG   RH   RI   RJ   (	   R*   Rc   Ra   R[   R   R@   RL   RO   Rg   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil2   s6    							c         C` s   d   } t  |  } t  | d t } d } | |  } | |  } | |  } |  j | d d k ot | d	 d k  |  j | d
 d k o | d d k  |  j | d d k o | d d k  d S(   s   Tests whether a non-zero optional cval argument to the stencil
        decorator works.  Also tests integer result type.
        c         S` s2   t  j |  d  j |  |  f  } t |  } | S(   Ni   (   RE   RX   RY   R   (   R[   R\   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc     s    "R"   i   i    g      ?i   N(   i    i    (   i   i   (   i    i    (   i   i   (   i    i    (   i   i   (   R   R5   t
   assertTrue(   R*   Rc   t	   test_njitt   test_parR[   t   seq_rest   njit_rest   par_res(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil3  s    	''c         C` s/   d   } d   } d } |  j  | | |  d S(   s1   Tests standard indexing with a 1d array.
        c         S` s.   t  j |   } d d g } t | |  } | S(   Ng      @g      @(   RE   RX   R   (   R[   R\   R]   t   C(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc   $  s    c         S` sr   t  j |   } d d g } t  j |   } xA t d |   D]0 } | | d | d | | | d | | <q: W| S(   Ng      @g      @i   i    (   RE   RX   RZ   R   (   R[   R\   R]   Rq   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa   *  s    .id   N(   RP   (   R*   Rc   Ra   R[   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt!   test_stencil_standard_indexing_1d  s    			c         C` s/   d   } d   } d } |  j  | | |  d S(   sL   Tests standard indexing with a 2d array and multiple stencil calls.
        c         S` sS   t  j |  d  j |  |  f  } t  j d  } t | |  } t | |  } | S(   Ni   i   (   i   i   (   RE   RX   RY   t   onesR    (   R[   R\   R]   Rq   t   D(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc   ;  s
    "c         S` s  t  j |  d  j |  |  f  } t  j d  } t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } x t d |  d  D] } x t d |  d  D]z } | | | d f | d | | d | f | d | | | d f | d	 | | d | f | d
 | | | f <q Wq Wx t d |  d  D] } x t d |  d  D]z } | | | d f | d | | d | f | d | | | d f | d | | d | f | d | | | f <qSWq9W| S(   Ni   i   i   i    i(   i   i   (   i    i   (   i   i    (   i    i(   ii    (   i    i   (   i   i    (   i    i(   ii    (   RE   RX   RY   Rs   RZ   R   (   R[   R\   R]   Rq   Rt   R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa   B  s    """||i   N(   RP   (   R*   Rc   Ra   R[   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt!   test_stencil_standard_indexing_2d6  s    		c         C` sK   d   } d   } d } |  j  | | |  d   } |  j  | | |  d S(   s=   Tests whether multiple inputs of the same size work.
        c         S` sW   t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } t | |  } | S(   Ni   (   RE   RX   RY   R   (   R[   R\   R]   Rq   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc   Z  s    ""c         S` sF  t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } x t d |  d  D] } x t d |  d  D] } d | | | d f | | d | f | | | d f | | d | f | | | d f | | d | f | | | d f | | d | f | | | f <q Wqz W| S(   Ni   i   g      ?(   RE   RX   RY   RZ   R   (   R[   R\   R]   Rq   R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa   `  s    """i   c         S` s`   t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } d } t | | |  } | S(   Ni   g      ?(   RE   RX   RY   R   (   R[   R\   R]   R   Rq   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRc   q  s
    ""N(   RP   (   R*   Rc   Ra   R[   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil_multiple_inputsU  s    			c         C` sK   d   } d   } d   } d } |  j  | | |  |  j  | | |  d S(   s&   Tests 2D numba.stencil calls.
        c         S` sd   t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } t j d    | d | | S(   Ni   c         S` s$   d |  d |  d |  d |  d S(	   Ng      ?i    i   i(   i    i   (   i   i    (   i    i(   ii    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   <lambda>  s   RW   (   RE   RX   RY   RZ   R;   R   (   R[   R\   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   test_impl1~  s
    ""c         S` sf   t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } d   } t j |  |  } | S(   Ni   c         S` s$   d |  d |  d |  d |  d S(	   Ng      ?i    i   i(   i    i   (   i   i    (   i    i(   ii    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   sf  s    (   RE   RX   RY   RZ   R;   R   (   R[   R\   R]   Ry   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   test_impl2  s
    ""	c         S` s   t  j |  d  j |  |  f  } t  j |  d  j |  |  f  } x t d |  d  D]| } xs t d |  d  D]^ } d | | | d f | | d | f | | | d f | | d | f | | | f <qr WqX W| S(   Ni   i   g      ?(   RE   RX   RY   RZ   R   (   R[   R\   R]   R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa     s    ""]id   N(   RP   (   R*   Rx   Rz   Ra   R[   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil_cally  s    					c         C` s/   d   } d   } d } |  j  | | |  d S(   s&   Tests 1D numba.stencil calls.
        c         S` s>   t  j |   } t  j |   } t j d    | d | | S(   Nc         S` s   d |  d |  d |  d S(   Ng333333?ii    i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRw     t    RW   (   RE   RX   RZ   R;   R   (   R[   R\   R]   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt	   test_impl  s    c         S` sj   t  j |   } t  j |   } xE t d |  d  D]0 } d | | d | | | | d | | <q2 W| S(   Ni   g333333?(   RE   RX   RZ   R   (   R[   R\   R]   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa     s
    .id   N(   RP   (   R*   R}   Ra   R[   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil_call_1D  s    		c         C` s  d   } d   } d   } d   } d   } d } |  j  | t j f  } |  j  | t j f  } |  j  | t j f  }	 |  j  | t j f  }
 | |  } | j |  } | j |  } |	 j |  } |
 j |  } t j j | | d d t j j | | d d t j j | | d d t j j | | d d |  j t   } | d	  Wd
 QX|  j	 d t
 | j   |  j t   } t |  d	  Wd
 QX|  j	 d t
 | j   d
 S(   s   Tests numba.stencil call that has an index that can be inferred as
        constant from a unary expr. Otherwise, this would raise an error since
        neighborhood length is not specified.
        c         S` sG   t  j |   } t  j |   } d } t j d    | | d | | S(   Ni   c         S` s   d |  | |  d |  | S(   Ng333333?i    (    (   R   t   c(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRw     R|   RW   (   RE   RX   RZ   R;   R   (   R[   R\   R]   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRx     s    c         S` sG   t  j |   } t  j |   } d } t j d    | | d | | S(   Ni   c         S` s$   d |  d | |  d |  | d S(   Ng333333?i   i    (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRw     R|   RW   (   RE   RX   RZ   R;   R   (   R[   R\   R]   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRz     s    c         S` sG   t  j |   } t  j |   } d } t j d    | | d | | S(   Ni   c         S` s%   d |  | d |  d |  | d S(   Ng333333?i   i    (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRw     R|   RW   (   RE   RX   RZ   R;   R   (   R[   R\   R]   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   test_impl3  s    c         S` sP   t  j |   } t  j |   } d } d } t j d    | | | d | | S(   Ni   i   c         S` s%   d |  | | |  d |  | | S(   Ng333333?i    (    (   R   R   t   d(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRw     R|   RW   (   RE   RX   RZ   R;   R   (   R[   R\   R]   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   test_impl4  s    c         S` sp   t  j |   } t  j |   } d } xE t d |  d  D]0 } d | | | | | | | | | | <q8 W| S(   Ni   g333333?(   RE   RX   RZ   R   (   R[   R\   R]   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRa     s    .id   RC   i   i   NsD   stencil kernel index is not constant, 'neighborhood' option required(   R8   R   Rh   RD   RE   RF   RG   t   assertRaisest
   ValueErrorRH   t   strt	   exceptionR   R   (   R*   Rx   Rz   R   R   Ra   R[   t   cpfunc1t   cpfunc2t   cpfunc3t   cpfunc4RL   t   parfor_output1t   parfor_output2t   parfor_output3t   parfor_output4t   e(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil_call_const  s6    										c         C` sE   d   } |  j  | t j f d t } |  j d | j j    d S(   sY   Tests 1D numba.stencil calls without parallel translation
           turned off.
        c         S` s   t  j d    |   S(   Nc         S` s   d |  d |  d |  d S(   Ng333333?ii    i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRw     R|   (   R;   R   (   R\   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR}     s    R   s   @do_schedulingN(   R8   R;   t   float64RS   t   assertNotInRI   RJ   (   R*   R}   R@   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_stencil_parallel_off  s    	c         ` s  d d g } d   } x | D] } t  j | d |     f d   } t j d  j d  } t j | d	  } | | d
 d d  f <t j |  }   | d | t j j | |  |  j	 |  } x- | D]% }	 |	 j
   }
 t j j |
 |  q Wq Wt  j | d d     f d   } t j d  j d  } t j |  } |  j t   }   | d | Wd QXd } |  j | t | j   xi |  j |  j g D]U } y | | d  Wn/ t t f k
 r} |  j | t |   qXt d   qWd S(   s/    Issue #3518, out kwarg did not work with cval.i   g      @c         S` s   |  d |  d S(   Ni    i   (   i    i    (   i   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   kernel  s    R   c          ` s;   t  j d  j d  }  t  j |   }   |  d | | S(   Ni   i   i   RW   (   i   i   (   RE   RX   RY   t	   ones_like(   R\   t   ret(   t
   stencil_fn(    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   wrapped  s    i   i   i   iiNRW   y              ?c          ` s;   t  j d  j d  }  t  j |   }   |  d | | S(   Ni   i   i   RW   (   i   i   (   RE   RX   RY   R   (   R\   R   (   R   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   0  s    s-   cval type does not match stencil return type.s   Expected error was not raised(   i   i   (   i   i   (    (   R;   R   RE   RX   RY   t	   full_likeR   RF   RG   RB   RD   R   R   RH   R   R   R9   R8   R   t   AssertionError(   R*   t
   const_valsR   t	   const_valR   R\   RL   R   t   implst   implt   gotR   t   msgt   compiler(    (   R   s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_out_kwarg_w_cval  s:    	(   RQ   RR   R)   t   skip_unsupportedR   Rb   Ri   Rp   Rr   Ru   Rv   R{   R~   R   R   R   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRU      s,   	U#!Pt   pyStencilGeneratorc           B` s   e  Z d  Z d f  d     YZ d e j e f d     YZ d e j e f d     YZ d e j e f d     YZ d	 e j e f d
     YZ	 d e j
 e f d     YZ d e j f d     YZ d   Z RS(   s   
    Holds the classes and methods needed to generate a python stencil
    implementation from a kernel purely using AST transforms.
    t   Builderc           B` s   e  Z d  Z d   Z g  d d g D]/ Z e d  D] Z e e e  e  ^ q2 q" Z	 d   Z
 d d  Z d   Z d d d d	  Z d
   Z d   Z d   Z d d  Z d   Z d d  Z RS(   s   
        Provides code generation for the AST manipulation pipeline.
        The class methods largely produce AST nodes/trees.
        c         C` s   d |  _  d  S(   Ni    (   t   _Builder__state(   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)   R  s    R   R\   i   c         C` s   |  j  } |  j  d |  _  | S(   sZ   
            a monotonically increasing index for use in labelling variables.
            i   (   R   (   R*   t   tmp(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   varidxW  s    	i    c         C` s   t  j d t  j d | d t  j    g d t  j d t  j d t  j d d d t  j    d d d t  j    d	 t  j d t  j d | d t  j    d d
 d t  j    |  j |  g d t  j d d d |  j	 d | j
 g  j  g d d d d   } | S(   s   
            Generates an AST equivalent to:
                `var = np.full(orig.shape, init_val, dtype = dtype_var)`
            t   targetst   idt   ctxt   valueR0   RE   t   attrt   fullR+   t   shapet   keywordst   argt   dtypet   typet   starargsR>   N(   t   astt   Assignt   Namet   Storet   Callt	   Attributet   Loadt   gen_numt   keywordt   gen_callR   R   R/   (   R*   t   origt   vart	   dtype_vart   init_valt   new(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   gen_alloc_return`  s.    							!c         C` s   g  | D]$ } t  j d | d t  j    ^ q } t  j d t  j d t  j d | d t  j    d t  j d t  j d | d t  j     d t  j    g d |  } | S(   s   
            Generates an AST equivalent to:
                `retvar[(*index_names,)] = value[<already present indexing>]`
            R   R   R   R   t   slicet   elts(   R   R   R   R   t	   Subscriptt   Indext   TupleR   (   R*   R   R   t   index_namesR?   t	   elts_infoR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   gen_assign  s    1						c         C` s   t  | t  r$ t j d |  } n | } t  | t  rN t j d |  } n | } t j d t j d | d t j    d t j d t j d d d t j    d | | g d	 g  d
 d d d  d | d g   S(   s}   
            Generates an AST equivalent to a loop in `var` from
            `start` to `stop` with body `body`.
            R[   t   targetR   R   t   iterR0   R   R+   R   R   R>   t   bodyt   orelseN(
   t
   isinstancet   intR   t   Numt   ForR   R   R   R   R/   (   R*   R   t   startt   stopR   t	   start_valt   stop_val(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   gen_loop  s    		c         C` s(   t  j d t  j d | d t  j     S(   sE   
            Generates an AST equivalent to `return var`
            R   R   R   (   R   t   ReturnR   R   (   R*   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   gen_return  s    c         C` s   t  j d t  j d |   S(   s'   Generates an Index with the given valueR   R[   (   R   R   R   (   R*   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt	   gen_slice  s    c         C` s:   t  j d t  j d | d t  j    d | d t  j    S(   sA   
            Generates AST equivalent to `name.attr`
            R   R   R   R   (   R   R   R   R   (   R*   t   nameR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   gen_attr  s    	c   	   
   C` s   |  j  | |  } |  j |  } t j d | d | d t j    } | r | d k rc t j   n	 t j   } t j d | d | d t j d t	 |    } n  | S(	   s   
            Generates an AST equivalent to a subscript, something like:
                name.attr[slice(index) +/- offset]
            R   R   R   i    t   leftt   opt   rightR[   (
   R   R   R   R   R   t   Addt   Subt   BinOpR   t   abs(	   R*   R   R   t   indexRg   t	   attributet   sliset   sst   pm(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   gen_subscript  s    $$3c         C` se   t  | t  r" t j t |   St |  d k rA t j |  St j t j   t j |   Sd S(   s?   
            Generates an ast.Num of value `value`
            i    N(   R   t   boolR   R   R   R   t   UnaryOpt   USub(   R*   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s
    c         C` s   g  | D]( } t  j d d | d t  j    ^ q } | d k	 r g  | D]; } t  j d d | d t  j t |   j d j  ^ qH } n g  } t  j d | d t  j    } t  j	 d t  j
 d | d | d	 | d
 d d d  d t  j    S(   s|   
            Generates an AST equivalent to a call, something like:
                `call_name(*args, **kwargs)
            R   s   %sR   R   R   i    R0   R+   R   R   R>   N(   R   R   R   R/   R   t   parseR   R   R   t   ExprR   (   R*   t	   call_nameR+   R>   R?   t
   fixed_argsR   R0   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    5HN(   RQ   RR   t   __doc__R)   t   vR   R?   t   chrt   ordt   idsR   R   R   R/   R   R   R   R   R   R   R   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   L  s   	B		 					t	   FoldConstc           B` sD   e  Z d  Z i e j e j 6e j e j 6e j	 e j
 6Z d   Z RS(   sn   
        Folds const expr, this is so const expressions in the relidx are
        more easily handled
        c         C` s   |  j  |  } |  j j | j j  } t | d d   } t | d d   } | oZ | oZ | sa | St | t j	  r t | t j	  r t j	 | | j
 j | j j   S| Sd  S(   NR   R   (   t   generic_visitt   supported_opst   getR   t	   __class__t   getattrR/   R   R   R   R   R[   R   (   R*   t   nodeR   t   lhst   rhs(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   visit_BinOp  s    "(   RQ   RR   R   t   operatort   addR   R   t   subR   t   mult   MultR   R  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s   t   FixRelIndexc           B` se   e  Z d  Z d   Z d   Z d   Z e d    Z e d    Z e d    Z	 e d    Z
 RS(   sa    Fixes the relative indexes to be written in as
        induction index + relative index
        c         O` s   t  j j |  | |  t j j |  | |  | |  _ | |  _ d |  _ d  |  _	 d  |  _
 t j t  j |  _ t j t  j |  _ | r | n g  |  _ | |  _ | r d n d |  _ d  S(   Nis   __%sns   __%s(   R   t   NodeTransformerR)   R   R   t	   _argnamest   _const_assignst   _idx_lenR/   t   _minst   _maxesRE   t   iinfoR   t   mint   _imint   maxt   _imaxt   _standard_indexingt   _neighborhoodt   _id_pat(   R*   t   argnamest   const_assignsR   R   R+   R>   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)     s    						c         C` sF   t  | t j  r | j St  | t j  r6 | j j St d   d S(   sF   
            Gets the literal value from a Num or UnaryOp
            s,   get_val_from_num: Unknown indexing operationN(   R   R   R   R[   R   t   operandR   (   R*   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   get_val_from_num  s    c         ` s2   f d   }  f d   }  f d     f d         f d   }   f d   }  j  |  } | j j  j k r*| j j  j k r*t | j t j  r | |  St | j t j	  r | |  St | j j t j
  r | |  St | j t j  r| |  St d   n | Sd S(	   s   
            Transforms subscripts of the form `a[x]` and `a[x, y, z, ...]`
            where `x, y, z` are relative indexes, to forms such as:
            `a[x + i]` and `a[x + i, y + j, z + k]` for use in loop induced
            indexing.
            c   
      ` s  g  } x t  |  j j j  D]~ \ } }   j j | |  } | j t j d t j	 d   j
   j | d t j    d t j   d | d t j     q W  j d k r t |    _ n$   j t |  k r t d   n  t |  j t j  rd } t |   n  t j   } t j d	 |  j d
 t j d	 t j d | d t j    d t j    d |  } t j | |   t j |    j d  k r  j d  k r  j g   j   _   j g   j   _ n    j sx2t  |  j j j  D] \ } } t | t j  s#t | t j   r5  j! |  }	 n@ t" | d  ri| j#   j k ri  j | j# }	 n t d   |	   j | k  r|	   j | <n  |	   j | k r|	   j | <qqWnP xM t    j  D]< \ } }   j | d   j | <  j | d   j | <qW| S(   NR   R   R   R   R   is#   Relative indexing mismatch detecteds=   Assignments to array passed to stencil kernels is not allowedR   R   R   s   Cannot interpret indexing valuei    i   ($   t	   enumerateR   R   R   R
  R   t   appendR   R   R   R  R   R   R   R  Rd   R   R   R   R   R   R   R   t   copy_locationt   fix_missing_locationsR  R/   R  R  R  R  R   R   R  t   hasattrR   (
   R   t   idxR?   t   valt   usevalR   t   contextt   newnodet   lnodet   relvalue(   R*   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   handle2dindex0  sf    "								"	c      	   ` s    j  j |  j j |  j j  } t j d t j d   j   j d d t j	    d t j
   d | d t j	    }   j d k r d   _ n   j d k r t d	   n  t |  j t j  r d
 } t |   n  t j	   } t j d |  j d t j d | d t j	    d |  } t j | |   t j |    j d  k r{  j d  k r{  j g   _   j g   _ n    j sgt |  j j t j  st |  j j t j  r  j |  j j  } nR t |  j j d  r|  j j j   j  k r  j  |  j j j } n t d   |   j d k  rA|   j d <n  |   j d k r|   j d <qn0   j d d   j d <  j d d   j d <t j | |   t j |  | S(   NR   R   i    R   R   R   ii   s#   Relative indexing mismatch detecteds=   Assignments to array passed to stencil kernels is not allowedR   R   s   Cannot interpret indexing value(   R
  R   R   R   R   R   R   R  R   R   R   R  R   R   R   R   R   R   R  R  R  R/   R  R  R  R  R   R   R  R  R   (   R   R!  R  R   R"  R#  R%  (   R*   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   handle1dindexn  sZ    						c         ` sc      f d   } t  j |   j |   |   j |     j  } t  j |    t  j |  | S(   Nc      	   ` s    j  j |  |   }  j |   } t j d t j d  j  j | d t j    d t j	   d | d t j    } t j
 |    t j |  | S(   NR   R   R   R   R   (   R
  R   R  R   R   R   R  R   R   R   R  R  (   R   R?   R!  R   R   (   R   R*   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   gen_idx  s    		(   R   t   Slicet   lowert   uppert   stepR  R  (   R   R   R(  R#  (   R*   (   R   s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   computeSlice  s    c      	   ` s     j  j | j | j  } t j d t j d   j   j |  d t j    d t j	   d | d t j    } t j
 d | d t j    } t j | |  t j |  | S(   NR   R   R   R   R   R   (   R
  R   R   R   R   R   R  R   R   R   R   R  R  (   R   R   R!  R  R#  (   R*   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   computeIndex  s    c      	   ` s  g  } xv t  |  j j  D]b \ } } t | t j  rP | j  | |   n  t | t j  r | j   | |   q q W j d k r t	 |  j j   _ n*  j t	 |  j j  k r t
 d   n  t |  j t j  r d } t
 |   n  t j   } t j d |  j d t j d | d t j    d |  }  j d  k r j d  k r j g  j  _  j g  j  _ n   j snx&t  |  j j  D]\ } } t | t j  rx| j | j g D] }	 t |	 t j  st |	 t j  r j |	  }
 n@ t |	 d  rI|	 j  j k rI j |	 j }
 n t
 d	   |
  j | k  rx|
  j | <n  |
  j | k r|
  j | <qqWq| j } t | t j  st | t j  r j |  }
 n@ t | d  r| j  j k r j | j }
 n t
 d	   |
  j | k  rD|
  j | <n  |
  j | k r|
  j | <qqWnP xM t   j  D]< \ } }	  j | d
  j | < j | d  j | <q~Wt j | |   t j  |  | S(   Nis#   Relative indexing mismatch detecteds=   Assignments to array passed to stencil kernels is not allowedR   R   t   dimsR   R   s   Cannot interpret indexing valuei    i   (!   R  R   R/  R   R   R)  R  R   R  Rd   R   R   R   R   R   R   t   ExtSliceR  R/   R  R  R  R  R*  R+  R   R   R  R  R   R
  R  R  (   R   R  R   R   R   R"  R#  R?   t   anodeR$  R%  (   R.  R-  R*   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   handleExtSlice  sv    								c         ` s-    d |  j   } t j   | _ t |  j t j  rK d } t |   n  t j   } t j d |  j d | d |  } t j	 | |   t j
 |   j d k r d  _ n  j d k r t d   n   j d  k r j d  k r j g  _  j g  _ n   j st |  j  j t j  sFt |  j  j t j  r^ j |  j  j  } nR t |  j  j d	  r|  j  j j  j k r j |  j  j j } n t d
   |  j d k  r|  j d <n  |  j d k r)|  j d <q)n0  j d d  j d < j d d  j d <| S(   Ni    s=   Assignments to array passed to stencil kernels is not allowedR   R   R   ii   s#   Relative indexing mismatch detectedR   s   Cannot interpret indexing value(   R   R   R   R   R   R   R   R   R   R  R  R  R  R/   R  R  R  R  R   R   R  R  R   R
  (   R   R  R   R"  R#  R%  (   R-  R*   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   handleSlice  sF    				s   Unhandled subscriptN(   R   R   R   R	  R  R   R   R   R0  R)  R   R   R   (   R*   R   R&  R'  R2  R3  (    (   R.  R-  R*   s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   visit_Subscript(  s&    >7K0



c         C` s)   |  j  d k r t d   n |  j  Sd  S(   Nis+   Transform has not been run/no indexes found(   R  R   (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   idx_lenW  s    c         C` s   |  j  S(   N(   R  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   maxes_  s    c         C` s   |  j  S(   N(   R  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   minsc  s    c         C` s   |  j  S(   N(   R  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   id_patterng  s    (   RQ   RR   R   R)   R  R4  t   propertyR5  R6  R7  R8  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR    s   			 0t   TransformReturnsc           B` s/   e  Z d  Z d   Z d   Z e d    Z RS(   s;   
        Transforms return nodes into assignments.
        c         O` s^   t  j j |  | |  t j j |  | |  | |  _ |  j   |  _ d |  j } | |  _ d  S(   Ns   __b%s(	   R   R  R)   R   R   t   _relidx_infoR   t   _ret_var_idxt   _retvarname(   R*   t   relidx_infoR+   R>   t   retvar(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)   p  s    	c         C` sb   |  j  |  |  j j } |  j j } |  j |  j | j g  t |  D] } | |  j | ^ qD  S(   N(	   R   R;  R5  R8  R   R=  R   R   R   (   R*   R   t   nloopst   var_patternt   l(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   visit_Returnx  s    c         C` s   |  j  S(   N(   R=  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   ret_var_name  s    (   RQ   RR   R   R)   RC  R9  RD  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR:  k  s   		t   FixFuncc           B` s    e  Z d  Z d   Z d   Z RS(   s    The main function rewriter, takes the body of the kernel and generates:
         * checking function calls
         * return value allocation
         * loop nests
         * return site
         * Function definition as an entry point
        c   
      O` s   t  j j |  | |  t j j |  | |  | j |  _ | j |  _ | j	 |  _
 | |  _ | |  _ | rn | n g  |  _ | r | n t   |  _ g  |  j D] }	 |	 |  j k r |	 ^ q |  _ t | d  r | j   |  _ n	 | |  _ |  j d |  _ d  S(   NR   i    (   R   R  R)   R   R   t   original_kernelt   _original_kernelR  R	  t   rettyt   _rettyR;  t	   _ret_infoR  R:   R  t   _relidx_argsR  t   tolistR   t   stencil_arr(
   R*   t   kpropsR>  t   ret_infoR   R   R   R+   R>   R?   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)     s    		.	c         C` s  |  j  |  d   } t j |  } t j | j    j d } t j |  |  j d |  j	 d d g } |  j
 j } d   } |  j
 j } | j }	 d }
 x t |  D] } | |  j
 j |
 |  j
 j |
  \ } } | } |  j |  j d |
 |  } |  j | |  j |
 | | d |	 } | g }	 |
 d	 7}
 q Wt j | |  |  j j d } |  j j } |  j |  j | | |  j  } t j | |  |  j |  } t j | |  t rt j d t j    g } n t j d d  g } t j d
 d d t j!    g } t j" d | j# j# | d | d d d d d g  d g   } t j$ d d | j% d | d | | |  j& |  j | | | g d g   } t j | |  | S(   s   
            Transforms the kernel function into a function that will perform
            the stencil like behaviour on the kernel.
            c          _` s   | j  d  } |  d j } | d  k	 rR t |  t |  k rR t d   qR n  xB |  d D]6 } t | d  r] | | j k r t d   q q] q] Wd  S(   NR   i    s   Invalid neighborhood suppliedi   R   s#   Input stencil arrays do not commute(   R   R   R/   Rd   R   R  (   R+   R>   R   t
   init_shapeR?   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   check_stencil_arrays  s    i    RQ  R>   R   c         S` s<   |  d k r d n |  } | d k r, | n d } | | f S(   Ni    (    (   R7  t   maxst   minlimt   maxlim(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   computebound  s    R   R   i   R   R/   R   R+   t   defaultst   varargt   kwargt
   kwonlyargst   kw_defaultsR   s   __%st   decorator_listN('   R   t   inspectt	   getsourceR   R   t   stripR   R  R   RK  R;  R5  R8  R   R7  R6  R   RM  R   R   R  RI  R   RJ  RD  R   R   R   t   _py27R   t   ParamR   R/   R   t	   argumentsR+   t   FunctionDefR   RG  (   R*   R   RQ  t   checksrct
   check_implt   checker_callR@  RU  RA  t	   loop_bodyt
   loop_countRB  RS  RT  t   minboundt   maxboundt   loopst
   _rettynameR?  t   allocatet   returnert	   add_kwargRV  t   newargsR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   visit_FunctionDef  sz    					!				
		(   RQ   RR   R   R)   Rp  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRE    s   	t   GetKernelPropsc           B` se   e  Z d  Z d   Z d   Z d   Z e d    Z e d    Z e d    Z	 e d    Z
 RS(   sV    Gets the argument names and other properties
        of the original kernel.
        c         O` s]   t  j j |  | |  t j j |  | |  d  |  _ d  |  _ d  |  _ d  |  _	 i  |  _
 d  S(   N(   R   t   NodeVisitorR)   R   R   R/   R	  t   _kwargnamesRI  RG  R
  (   R*   R+   R>   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)     s    				c         C` s  |  j  d  k	 s |  j d  k	 r- t d   n  t r< d } n d } g  | j j D] } t | |  ^ qO |  _  | j j r g  | j j D] } | j ^ q |  _ n  |  j	 | j
 |  j   } t j d t j d d d t j    g d | j  |  _ t j t |   |  _ |  j |  d  S(   Ns%   multiple definition of function/args?R   R   R   t
   __retdtypeR   R   (   R	  R/   Rs  t   RuntimeErrorR_  R+   R   RX  R   R   R   R   R   R   R   R   RI  R  R   RG  R   (   R*   R   R   R?   t   compute_retdtype(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRp    s    	+(!c         C` s   |  j  |  | j } t |  d k r | d } t | t j  r t | j t j  rr | j j |  j	 | j
 <q t | j t j  r t | j t j  r | j j |  j	 | j
 <q | j j |  j	 | j
 <q q n  d  S(   Ni   i    (   R   R   Rd   R   R   R   R   R   R[   R
  R   R   t   UAdd(   R*   R   t   tgtR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   visit_Assign)  s    	
c         C` s   |  j  S(   sD   
            The names of the arguments to the function
            (   R	  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR  7  s    c         C` s   |  j  S(   s{   
            A map of variable name to constant for variables that are simple
            constant assignments
            (   R
  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR  >  s    c         C` s   |  j  S(   s)   
            The return type
            (   RI  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRH  F  s    c         C` s   |  j  S(   s7   
            The original unmutated kernel
            (   RG  (   R*   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRF  M  s    (   RQ   RR   R   R)   Rp  Ry  R9  R  R  RH  RF  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRq    s   				t   FixCallsc           B` s   e  Z d  Z d   Z RS(   s3    Fixes call sites for astor (in case it is in use) c         C` sD   |  j  |  t j d | j d | j d | j d d  d d   } | S(   NR0   R+   R   R   R>   (   R   R   R   R0   R+   R   R/   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt
   visit_CallW  s    					(   RQ   RR   R   R{  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRz  T  s   c   
      ` s   t  j |  } t j | j    } t } | rP t d  t t j |   n       f d   } | |  | r t d  t t j | d t  y# d d l	 }	 t |	 j
 |   Wq t k
 r q Xn  | S(   s   
        Generates the AST tree for a stencil from:
        func - a python stencil kernel
        cval, standard_indexing and neighborhood as per the @stencil decorator
        t   ORIGINALc         ` s   j    } | j |   | j } | j }  rf x2  D]' } | | k r8 d } t |   q8 q8 Wn   j   } | j |    j | |    } | j |    j |  } | j |    j | | |      }	 |	 j |    j	   }
 |
 j |   t
 j |  j d  d S(   s    the pipeline of manipulations s4   Non-existent variable specified in standard_indexingi    N(   Rq  t   visitR  R  R   R   R  R:  RE  Rz  R   R  R   (   t   treet   kernel_propst   argnmt
   const_asgnR?   R   t
   fold_constt   relidx_fixert   return_transformert   fixert	   callFixer(   R   R   R*   R   (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   pipelines  s6    			s   


NEWt   include_attributesi    N(   R\  R]  R   R   R^  RS   t   printt   dumpR5   t   astort	   to_sourcet   ImportError(
   R*   R0   R   R   R   t   srcR~  t   DEBUGR  R  (    (   R   R   R*   R   s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   generate_stencil_treeb  s"    
-

(   RQ   RR   R   R   R   R  R   R  R:  RE  Rr  Rq  Rz  R  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   F  s    eLt   constantc         K` s)  t  |  t  s d } |  } n' t  |  t  s9 t d   |  } d } x- | D]% } | d k rL t d |   qL qL W| d k r t d |   n  | j d d  } | j d d  } | j d d  } t   } | j | | | |  }	 t |	 d	 d
 d d }
 |
 j	 d } t
 j | t    } | S(   ss   
    A pure python implementation of (a large subset of) stencil functionality,
    equivalent to StencilFunc.
    R  sW   stencil mode should be
                                                        a stringR   R   R   s   Unknown stencil option s   Unsupported mode style i    t   filenames   <ast>t   modet   execN(   R   R   R   (   R   R   R   R/   R   R   R   R  t   compilet	   co_constst   pytypest   FunctionTypet   globals(   t   func_or_modeR7   R  R0   t   optionR   R   R   t   genR~  t   mod_codet	   func_codet	   full_func(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt	   pyStencil  s,    				t   TestManyStencilsc           B` s  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 d   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 d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d    Z" d!   Z# d"   Z$ d#   Z% d$   Z& e' j( d%  d&    Z) d'   Z* d(   Z+ d)   Z, d*   Z- d+   Z. d,   Z/ d-   Z0 d.   Z1 d/   Z2 d0   Z3 d1   Z4 d2   Z5 d3   Z6 d4   Z7 d5   Z8 d6   Z9 d7   Z: d8   Z; d9   Z< e' j( d:  d;    Z= d<   Z> d=   Z? d>   Z@ d?   ZA d@   ZB dA   ZC dB   ZD dC   ZE dD   ZF dE   ZG dF   ZH dG   ZI dH   ZJ dI   ZK dJ   ZL dK   ZM dL   ZN dM   ZO dN   ZP dO   ZQ dP   ZR dQ   ZS dR   ZT dS   ZU dT   ZV dU   ZW dV   ZX dW   ZY dX   ZZ dY   Z[ dZ   Z\ d[   Z] d\   Z^ d]   Z_ d^   Z` d_   Za d`   Zb da   Zc db   Zd dc   Ze dd   Zf de   Zg df   Zh dg   Zi dh   Zj di   Zk dj   Zl e' j( dk  dl    Zm dm   Zn e' j( dk  dn    Zo RS(o   c         O` s   t  t |   j | |   d  S(   N(   R(   R  R)   (   R*   R+   R>   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR)     s    c       
   ` s  | j  d t    } | j  d  } t } g    g   t d d    f d   } t | t  r | d } | d }	 | d }
 | d } n | } | }	 | }
 | } i | d 6} | j |  t } yG t d | |  } | d	 | j  d	  |  } | rt	 d
 |  n  Wn; t
 k
 rJ} | | d   |  Wd QX| } t } n Xd } | |	 d   t |     |   } Wd QXt |  d k r f d   } n^ t |  d k r f d   } n: t |  d k r f d   } n t d t |    t g  | D] } t j |  ^ q } d } | |
 d  & |  j | |  } | j |   } Wd QXd } | | d  & |  j | |  } | j |   } Wd QX| rt	 d |  t	 d |  t	 d |  n  | ry< |	 st j j | | d d |  j | j | j  n  WnP t
 k
 rg}  j d d t |  t |  f f  t	 d t |   n Xy< |
 st j j | | d d |  j | j | j  n  WnP t
 k
 r}  j d d t |  t |  f f  t	 d t |   n Xy | sut j j | | d d |  j | j | j  y |  j d | j j    Wqut k
 rqd } t |   quXn  Wqt
 k
 r}  j d d t |  t |  f f  t	 d t |   qXn  | rt	 d  n    rg    D] } d  | ^ q} t  d! |   n   rg   D] } d  | d" ^ q"} d# j! g   D] } d$ | ^ qI } d% | } d& | } t  | |   n  | s| d k rt  d' |   qn  d S((   s  
        For a given kernel:

        The expected result is computed from a pyStencil version of the
        stencil.

        The following results are then computed:
        * from a pure @stencil decoration of the kernel.
        * from the njit of a trivial wrapper function around the pure @stencil
          decorated function.
        * from the njit(parallel=True) of a trivial wrapper function around
           the pure @stencil decorated function.

        The results are then compared.
        R7   t   expected_exceptionc         3` s   y	 d  VWn t  k
 r } |  d  k	 r~ t |  d  r< |  n |  g } t } x! | D] } | t | |  O} qR W| s   q q  j | d t |  t |  f f  n X|  d  k	 r   j |  n  d  S(   Nt   __iter__s   %s: %s(   t	   ExceptionR/   R  RS   R   R  R   R   (   t   extyt   usecaseR   t   lextyt   foundt   ex(   t   should_failt   should_not_fail(    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   errorhandler  s    		!R  R   R   t   parforR  R   s   
Expected:
Ns   @stencili   c         ` s
     |   S(   N(    (   t   arg0(   t   stencil_func_impl(    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   wrap_stencil0  s    i   c         ` s     |  |  S(   N(    (   R  t   arg1(   R  (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR  3  s    i   c         ` s     |  | |  S(   N(    (   R  R  t   arg2(   R  (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR  6  s    s+   Up to 3 arguments can be provided, found %st   parforss   
@stencil_output:
s   
njit_output:
s   
parfor_output:
RC   s   %s: %ss   @stencil failed: %ss   @njit failed: %ss   @do_schedulings*   Could not find `@do_scheduling` in LLVM IRs   @njit(parallel=True) failed: %ss   

s   %ssM   The following implementations should have raised an exception but did not:
%si    R|   s   %s: Message: %s

sN   The following implementations should not have raised an exception but did:
%s
s   Errors were:

%ss)   pyStencil failed, was not caught/expected("   R   t   dictRS   R   R/   R   t   updateR5   R  R  R  R   Rd   R   R:   R;   R<   R9   RD   R8   RE   RF   RG   t   assertEqualR   R  R   R   RH   RI   RJ   R   Ru  t   join(    R*   R=   R+   R>   R7   R  t   DEBUG_OUTPUTR  t   pystencil_ext
   stencil_ext   njit_ext	   parfor_ext   stencil_argst   expected_presentt   ast_implRL   R  t   pyStencil_unhandled_ext   stencilfunc_outputR  R?   R1   RN   t   wrapped_cfuncRO   t   wrapped_cpfuncR   R   R   t   errst   str1t   str2(    (   R  R  R  s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyRP     s    



(		)	!	
c         K` s\   t    } d  | d <d  | d <d  | d <d  | d <x$ | j   D] \ } } | | | <q> W| S(   NR  R   R   R  (   R  R/   t   items(   R*   R>   R   t   kR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   exception_dict  s    	



c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s	   rel indexc         S` s   |  d S(   Ni    (   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    i   i   i   N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic00  s    	c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s   rel index add constc         S` s   |  d S(   Ni    i   (   i    i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic01  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Ni    i(   i    i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic02  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Ni   i    (   i   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic03  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Nii    (   ii    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic04  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Nii   (   ii   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic05  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Ni   i(   i   i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic06  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Ni   (   i   i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic07  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Ni(   ii(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic08  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d S(   Nii   (   ii   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic09  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d |  d S(   Ni    i   (   i    i    (   i   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic10  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d |  d S(   Nii    i   (   ii    (   i   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic11  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d |  d S(   Nii   (   ii   (   i   i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic12  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel index add constg      (@i   i   c         S` s   |  d |  d S(   Nii   (   ii(   i   i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic13  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s!   rel index add domain change consti   i   i   c         S` s   |  d d S(   Ni    y              ?(   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic14  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s!   rel index add domain change consti   i   i   c         S` s   d } |  d | S(   Ny              ?i    (   i    i    (    (   R   t   t(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic14b  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   two rel index, add consti   i   i   c         S` s   |  d |  d d S(   Ni    i   g      ?(   i    i    (   i   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic15  s    	c         C` sP   t  j d  j d d  } d   } |  j d t  } |  j | | d | d S(   s   two rel index OOB, add consti   i   i   c         S` s   |  d |  d d S(   Ni    i
   g      ?(   i    i    (   i
   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   #  s    R  R  N(   RE   RX   RY   R  t
   IndexErrorRP   (   R*   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic16  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s&   two rel index boundary test, add consti   i   i   c         S` s   |  d |  d d S(   Ni    i   g      ?(   i    i    (   i   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   .  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic17*  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s&   two rel index boundary test, add consti   i   i   c         S` s   |  d |  d d S(   Ni    ig      ?(   i    i    (   ii    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   6  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic182  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s&   two rel index boundary test, add consti   i   i   c         S` s   |  d |  d d S(   Ni    i   g      ?(   i    i    (   i    i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   >  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic19:  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s&   two rel index boundary test, add consti   i   i   c         S` s   |  d |  d d S(   Ni    ig      ?(   i    i    (   i    i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   F  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic20B  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   same rel, add consti   i   i   c         S` s   |  d |  d d S(   Ni    g      ?(   i    i    (   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   N  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic21J  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s%   rel idx const expr folding, add constg      (@i   i   c         S` s   |  d |  d d S(   Ni   i    g      ?i   (   i   i    (   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   V  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic22R  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   rel idx, work in bodyg      (@i   i   c         S` s+   t  j d |  d  } |  d |  d | S(	   Ni
   i   i   i    (   i   i   i   (   i   i    (   i    i    (   RE   t   sin(   R   R?   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   ^  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic23Z  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s,   rel idx, dead code should not impact rel idxg      (@i   i   c         S` s'   t  j d |  d  } |  d |  d S(	   Ni
   i   i   i    (   i   i   i   (   i   i    (   i    i    (   RE   R  (   R   R?   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   g  s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic23ac  s    	c         C` sD   t  j d  j d d  } d   } |  j | | d t t g d S(   s   1d idx on 2d arri   i   i   c         S` s   |  d d S(   Ni    g      ?(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   p  s    R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic24l  s    	c         C` sD   t  j d  j d d  } d   } |  j | | d t t g d S(   s   no idx on 2d arri   i   i   c         S` s   d S(   Ng      ?(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   x  s    R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic25t  s    	c         C` s;   t  j d  j d d d  } d   } |  j | |  d S(   s   3d arri@   i   i   i   c         S` s   |  d |  d d S(   Ni    i   g      ?(   i    i    i    (   i    i   i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic26|  s    	c         C` s>   t  j d  j d d d d  } d   } |  j | |  d S(   s   4d arri   i   i   i   c         S` s   |  d |  d d S(   Ni    i   ig      ?(   i    i    i    i    (   i    i   i    i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic27  s    !	c         C` sD   t  j d  j d d  j t  j  } d   } |  j | |  d S(   s   type widen i   i   i   c         S` s   |  d t  j d  S(   Ni    g      $@(   i    i    (   RE   R   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   t   astypet   float32RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic28  s    '	c         C` sD   t  j d  j d d  } d   } |  j | | d t t g d S(   s   const index from func g      (@i   i   c         S` s   |  d t  t j d   f S(   Ni    (   R   RE   t   cos(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic29  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   signed zerosg      (@i   i   c         S` s   |  d S(   Ni    (   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic30  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   does a const propagate? 2Dg      (@i   i   c         S` s   d } |  | d f S(   Ni   i    (    (   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic31  s    	s    constant folding not implementedc         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   does a const propagate?g      (@i   i   c         S` s   d } d | } |  | d f S(   Ni   i    (    (   R   t   sR  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    
N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic31b  s    	c         C` s,   t  j d  } d   } |  j | |  d S(   s   does a const propagate? 1Dg      (@c         S` s   d } |  | S(   Ni   (    (   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic31c  s    	c         C` sD   t  j d  j d d  } d   } |  j | | d t t g d S(   s   typed int indexg      (@i   i   c         S` s   |  t  j d  d f S(   Ni   i    (   RE   t   int8(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic32  s    	c         C` s8   t  j d  j d d  } d   } |  j | |  d S(   s   add 0d arrayg      (@i   i   c         S` s   |  d t  j d  S(   Ni    i   (   i    i    (   RE   t   array(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic33  s    	c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s<   More complex rel index with dependency on addition rel indexc         S` s;   d |  d } | |  d |  d |  d	 t  j |  d
  S(   Ng      @i    i   ii(   i    i   (   i    i   (   i   i    (   i    i(   ii    (   RE   R  (   R   t   g(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    i   i   N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic34  s    	c         C` si   d   } t  j d  j d d  } |  j d t d t d t  } |  j | | d i d	 d
 6d | d S(   s   simple cval c         S` s   |  d S(   Ni    i   (   i    i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R   R  R   R7   i   R   R  N(   RE   RX   RY   R  R   R   RP   (   R*   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic35  s    			c         C` sE   d   } t  j d  j d d  } |  j | | d i d d 6d S(	   s   more complex with cvalc         S` s    |  d |  d |  d |  d S(   Ni    i   i(   i    i   (   i    i(   i   i(   i   i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   g      @R   N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic36  s    	c         C` sE   d   } t  j d  j d d  } |  j | | d i d
 d 6d	 S(   s   cval is exprc         S` s    |  d |  d |  d |  d S(   Ni    i   i(   i    i   (   i    i(   i   i(   i   i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   i   g     O@R   Ng      Q@(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic37  s    	c         C` si   d   } t  j d  j d d  } |  j d t d t d t  } |  j | | d i d	 d
 6d | d S(   s   cval is complexc         S` s    |  d |  d |  d |  d S(   Ni    i   i(   i    i   (   i    i(   i   i(   i   i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R   R  R   R7   y              ?R   R  N(   RE   RX   RY   R  R   R   RP   (   R*   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic38  s    			c         C` s[   d   } t  j d  j d d  } |  j | | d i t  j d  t  j d  d 6d	 S(
   s   cval is func exprc         S` s    |  d |  d |  d |  d S(   Ni    i   i(   i    i   (   i    i(   i   i(   i   i(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   g      @i   R   N(   RE   RX   RY   RP   R  R  (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic39  s    	c         C` sV   d   } t  j d  j d d  } t  j d  j d d  } |  j | | |  d S(   s   2 args!c         S` s   |  d | d S(   Ni    i   i(   i    i   (   i    i(    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic40  s    	c         C` sb   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d t t g d S(	   s(   2 args! rel arrays wildly not same size!c         S` s   |  d | d S(   Ni    i   i(   i    i   (   i    i(    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   g      ?i   R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic41  s    	c         C` sb   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d t t g d S(   s%   2 args! rel arrays very close in sizec         S` s   |  d | d S(   Ni    i   i(   i    i   (   i    i(    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   g      "@R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic42  s    	c         C` sV   d   } t  j d  j d d  } t  j d  j d d  } |  j | | |  d S(   s   2 args more complexityc         S` s    |  d |  d | d | d	 S(
   Ni    i   i   ii(   i    i   (   i   i   (   ii    (   i    i(    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   "  s    g      >@i   i   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic43   s    	c         C` sb   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d t t g d S(   s!   2 args, has assignment before usec         S` s   d |  d <|  d S(   Ni   i    i   (   i    i   (   i    i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   *  s    
g      (@i   i   R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic44(  s    	c         C` sb   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d t t g d S(   s0   2 args, has assignment and then cross dependencyc         S` s   d |  d <|  d |  d S(   Ni   i    i   (   i    i   (   i    i   (   i   i    (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   5  s    
g      (@i   i   R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic453  s    	c         C` sb   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d t t g d S(   s#   2 args, has cross relidx assignmentc         S` s   | d |  d <|  d |  d S(   Ni   i   i    (   i   i   (   i    i   (   i    i   (   i   i    (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   @  s    g      (@i   i   R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic46>  s    	c         C` st   d   } t  j d  j d d  } t  j d  j d d  } t  j d  j d d  } |  j | | | |  d S(   s   3 argsc         S` s   |  d | d | d S(   Ni    i   i(   i    i   (   i   i    (   ii    (    (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   K  s    g      (@i   i   N(   RE   RX   RY   RP   (   R*   R   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic47I  s
    	c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s2   2 args, has assignment before use via memory aliasc         S` s-   |  j  } d | d  d   d  d   f <|  d S(   Ni
   i    i   (   i    i   (   t   T(   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   V  s    	g      (@i   i   N(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic48T  s    	c         C` sc   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d S(	   s#   2 args, standard_indexing on secondc         S` s   |  d | d S(   Ni    i   i   (   i    i   (   i    i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   _  s    g      (@i   i   R7   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic49]  s    	s&   dynamic range checking not implementedc         C` si   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d t d	 S(
   s   2 args, standard_indexing OOBc         S` s   |  d | d S(   Ni    i   i   (   i    i   (   i    i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   h  s    g      (@i   i   R7   R   R   R  N(   RE   RX   RY   RP   R  (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic50e  s    	
c      	   C` su   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d g d 6d	 t t g d
 S(   s$   2 args, standard_indexing, no relidxc         S` s   |  d | d S(   Ni    i   i   (   i    i   (   i    i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   v  s    g      (@i   i   R7   R   R   R   R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic51t  s    	c      	   C` s   d   } t  j d  j d d  } t  j d  j d d  } t  j d  j d d  } |  j | | | | d i d d	 6d
 S(   s(   3 args, standard_indexing on middle arg c         S` s   |  d | d | d S(   Ni    i   i   (   i    i   (   i    i   (   i   i   (    (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   g      @i   R7   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic52  s
    	c      	   C` s   d   } t  j d  j d d  } t  j d  j d d  } |  j d t d t d t d t  } |  j | | | d	 i d
 d 6d | d S(   s9   2 args, standard_indexing on variable that does not existc         S` s   |  d | d S(   Ni    i   i   (   i    i   (   i    i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R  R   R  R   R7   R   R   R  N(   RE   RX   RY   R  R   R  RP   (   R*   R   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic53  s    			
c         C` sc   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d S(	   s)   2 args, standard_indexing, index from varc         S` s   d } |  d | d | f S(   Ni   i    i   (   i    i   (    (   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic54  s    	c         C` sc   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d S(	   s6   2 args, standard_indexing, index from more complex varc         S` s&   d } d | } |  d | d | f S(   Ni   i   i    (   i    i   (    (   R   R   R  R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    
g      (@i   i   R7   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic55  s    	c         C` sc   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d S(	   s,   2 args, standard_indexing, added complexity c         S` s_   d } d } x( | d d  d   f D] } | | 7} q# Wd | d } |  d | d | f | S(   Ni   i    i   (   i    i   (    (   R   R   R  t   accR  R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic56  s    	c         C` sc   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d S(	   s1   2 args, standard_indexing, split index operation c         S` s   | d } |  d | d S(   Ni    i   (   i    i   (    (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    
g      (@i   i   R7   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic57  s    	c         C` sc   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d S(	   s?   2 args, standard_indexing, split index with broadcast mutation c         S` s   | d d } |  d | d S(   Ni    i   (   i    i   (    (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic58  s    	c      	   C` sr   d   } t  j d  j d d  } t  j d  j d d  } d } |  j | | | | d i d d g d	 6d
 S(   s>   3 args, mix of array, relative and standard indexing and constc         S` s   |  d | d | S(   Ni    i   (   i    i   (   i   i   (    (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   i
   R7   R   R   R   N(   RE   RX   RY   RP   (   R*   R   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic59  s
    	c      	   C` s   d   } t  j d  j d d  } t  j d  j d d  } d } |  j d t  } |  j | | | | d i d d	 g d
 6d | d S(   sP   3 args, mix of array, relative and standard indexing,
        tuple pass throughc         S` s   |  d | d | d S(   Ni    i   (   i    i   (   i   i   (    (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   i
   R  R7   R   R   R   R  N(   i
   (   RE   RX   RY   R  R   RP   (   R*   R   R   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic60  s    	c         C` si   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d t d	 S(
   s"   2 args, standard_indexing on firstc         S` s   |  d | d S(   Ni    i   (   i    i   (   i   i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   R   R   R  N(   RE   RX   RY   RP   R  (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic61  s    	
c         C` sj   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d 6d d	 6d
 S(   s"   2 args, standard_indexing and cvalc         S` s   |  d | d S(   Ni    i   (   i    i   (   i   i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR     s    g      (@i   i   R7   R   R   g      $@R   N(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic62  s    	c      	   C` s   d   } t  j d  j d d  } t  j d  j d d  } |  j d t d t d t d	 t  } |  j | | | d
 i d d 6d | d S(   sQ   2 args, standard_indexing applied to relative, should fail,
        non-const idxc         S` s   |  d | d f S(   Ni    i   (   i    i   (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    g      (@i   i   i   R  R   R  R   R7   R   R   R  N(   RE   RX   RY   R  R   R   RP   (   R*   R   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic63	  s    			
c         C` sQ   d   } t  j d  j d d  } |  j | | d i d d 6d t t g d	 S(
   s!   1 arg that uses standard_indexingc         S` s   |  d S(   Ni    (   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    g      (@i   i   R7   R   R   R  N(   RE   RX   RY   RP   R   R   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic64	  s    	
c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s   basic induced neighborhood testc         S` s6   d } x% t  d d  D] } | |  | 7} q W| d S(   Ni    ii   i   (   R   (   R   t   cumulR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   '	  s    g      N@R7   ii    R   N(   ii    (   (   ii    (   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic65%	  s    	c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s   basic const neighborhood testc         S` s6   d } x% t  d d  D] } | |  d 7} q W| d S(   Ni    ii   i   (   R   (   R   R  R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   2	  s    g      N@R7   ii    R   N(   ii    (   (   ii    (   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic660	  s    	c         C` sK   d   } t  j d  j d d  } |  j | | d i d d f d
 6d S(   s"   basic 2d induced neighborhood testc         S` sV   d } xE t  d d  D]4 } x+ t  d d  D] } | |  | | f 7} q, Wq W| d S(   Ni    ii   ii
   i   i2   (   R   (   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   <	  s
    g      $@g      4@i
   i   R7   ii    iR   Ng      i@(   ii    (   ii    (   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic67:	  s    	c         C` sQ   d   } t  j d  j d d  } |  j | | d i d d	 6d
 t t g d S(   s    basic 2d induced 1D neighborhoodc         S` s<   d } x+ t  d d  D] } | |  d | f 7} q W| d S(   Ni    ii   i
   i   i2   (   R   (   R   R  R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   G	  s    g      $@g      4@i
   i   R7   ii    R   R  Ng      i@(   ii    (   (   ii    (   RE   RX   RY   RP   R   R   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic67bE	  s    	 
c         C` sK   d   } t  j d  j d d  } |  j | | d i d d f d
 6d S(   s0   basic 2d one induced, one cost neighborhood testc         S` sV   d } xE t  d d  D]4 } x+ t  d d  D] } | |  | d f 7} q, Wq W| d S(   Ni    ii   ii
   i   i2   (   R   (   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   \	  s
    g      $@g      4@i
   i   R7   ii    iR   Ng      i@(   ii    (   ii    (   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic68Z	  s    	c         C` sK   d   } t  j d  j d d  } |  j | | d i d d f d
 6d S(   s#   basic 2d two cost neighborhood testc         S` sP   d } x? t  d d  D]. } x% t  d d  D] } | |  d 7} q, Wq W| d S(	   Ni    ii   ii
   i   (   i    i    i2   (   R   (   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   h	  s
    g      $@g      4@i
   i   R7   ii    iR   Ng      i@(   ii    (   ii    (   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic69f	  s    	c         C` sK   d   } t  j d  j d d  } |  j | | d i d d f d
 6d S(   s   neighborhood adding complexityc         S` sj   d } d } xS t  d d  D]B } | | } x/ t  d d  D] } | |  | | f | 7} q< Wq W| d S(	   Ni    g      (@ii   ii
   i   i2   (   R   (   R   R  t   zzR   R  R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   s	  s    
 g      $@g      4@i
   i   R7   ii    iR   Ng      i@(   ii    (   ii    (   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic70q	  s    	c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s   neighborhood, type changec         S` sU   d } xD t  d d  D]3 } d } | d k r7 d } n  | |  | | 7} q W| d S(   Ni    ii   g        iy              ?i   (   R   (   R   R  R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    	g      N@R7   ii    R   N(   ii    (   (   ii    (   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic71~	  s    	c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s+   neighborhood, narrower range than specifiedc         S` s6   d } x% t  d d  D] } | |  | 7} q W| d S(   Ni    iii   (   R   (   R   R  R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    g      N@R7   ii    R   N(   ii    (   (   ii    (   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic72	  s    	c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s   neighborhood, +ve rangec         S` s6   d } x% t  d d  D] } | |  | 7} q W| d S(   Ni    i   i   i   (   R   (   R   R  R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    g      N@R7   i   i
   R   N(   i   i
   (   (   i   i
   (   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic73	  s    	c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s   neighborhood, -ve rangec         S` s6   d } x% t  d d  D] } | |  | 7} q W| d S(   Ni    iii   (   R   (   R   R  R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    g      N@R7   iiR   N(   ii(   (   ii(   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic73b	  s    	c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s!   neighborhood, -ve->+ve range spanc         S` s6   d } x% t  d d  D] } | |  | 7} q W| d S(   Ni    ii   i   (   R   (   R   R  R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    g      N@R7   ii
   R   N(   ii
   (   (   ii
   (   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic74	  s    	c         C` s9   d   } t  j d  } |  j | | d i d	 d 6d S(
   s!   neighborhood, -ve->-ve range spanc         S` s6   d } x% t  d d  D] } | |  | 7} q W| d S(   Ni    iii   (   R   (   R   R  R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    g      N@R7   iiR   N(   ii(   (   ii(   RE   RX   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic75	  s    	c         C` sK   d   } t  j d  j d d  } |  j | | d i d d f d
 6d S(   s   neighborhood, mixed range spanc         S` sj   d } d } xS t  d d  D]B } | | } x/ t  d d  D] } | |  | | f | 7} q< Wq W| d S(   Ni    g      (@ii   i
   i   i2   (   R   (   R   R  R"  R   R  R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s    
 g      $@g      4@i
   i   R7   iii   R   Ng      i@(   ii(   ii   (   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic76	  s    	c      	   C` si   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d f d	 6d
 S(   s    neighborhood, two args c         S` sd   d } xS t  d d  D]B } x9 t  d d  D]( } | |  | | f | | | f 7} q, Wq W| d S(   Ni    ii   g      "@(   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s
    *g      $@g      4@i
   i   R7   ii    R   Ng      i@g      i@(   ii    (   ii    (   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic77	  s    	c      	   C` si   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d f d 6d S(   s.    neighborhood, two args, -ve range, -ve range c         S` sd   d } xS t  d d  D]B } x9 t  d d  D]( } | |  | | f | | | f 7} q, Wq W| d S(   Ni    iiiig      "@(   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s
    *g      .@g      4@i   i   R7   iiiiR   Ng     r@g     r@(   ii(   ii(   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic78	  s    	c      	   C` si   d   } t  j d  j d d  } t  j d  j d d  } |  j | | | d i d d f d 6d S(   s.    neighborhood, two args, -ve range, +ve range c         S` sd   d } xS t  d d  D]B } x9 t  d d  D]( } | |  | | f | | | f 7} q, Wq W| d S(   Ni    iii   i
   g      "@(   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s
    *g      .@g      4@i   i   R7   iii   i	   R   Ng     r@g     r@(   ii(   i   i	   (   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic78b	  s    	c      	   C` s   d   } t  j d  j d d  } t  j d  j d d d  } |  j d t d t d	 t d
 t  } |  j | | | d i d d f d 6d | d S(   s%    neighborhood, two incompatible args c         S` sd   d } xS t  d d  D]B } x9 t  d d  D]( } | |  | | f | | | f 7} q, Wq W| d S(   Ni    ii   g      "@(   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   	  s
    *g      $@g      4@i
   i   i   R  R   R  R   R7   ii    R   R  Ng      i@g      i@(   ii    (   ii    (   RE   RX   RY   R  R   R   RP   (   R*   R   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic79	  s    			c      	   C` sT   d   } t  j d  j d d  } d } |  j | | | d i d d f d
 6d S(   s    neighborhood, type change c         S` sZ   d } xI t  d d  D]8 } x/ t  d d  D] } | |  | | f | 7} q, Wq W| d S(   Ni    ii   g      "@(   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s
     g      $@g      4@i
   i   y              (@R7   ii    R   Ng      i@(   ii    (   ii    (   RE   RX   RY   RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic80
  s    	c      	   C` s   d   } t  j d  j d d  } | d j   } |  j d t d t d	 t d
 t  } |  j | | | d i d d f d 6d | d S(   s1    neighborhood, dimensionally incompatible arrays c         S` s^   d } xM t  d d  D]< } x3 t  d d  D]" } | |  | | f | | 7} q, Wq W| d S(   Ni    ii   g      "@(   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s
    $g      $@g      4@i
   i   i    R  R   R  R   R7   iR   R  Ng      i@(   ii    (   ii    (	   RE   RX   RY   t   copyR  R   R   R   RP   (   R*   R   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic81
  s    			c      	   C` sa   d   } t  j d  j d d  } | j   } |  j | | | d i d d f d	 6d
 d 6d S(   s%    neighborhood, with standard_indexingc         S` s^   d } xM t  d d  D]< } x3 t  d d  D]" } | |  | | f | d 7} q, Wq W| d S(   Ni    ii   i   g      "@(   i   i   (   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   '
  s
    $g      $@g      4@i
   i   R7   ii    R   R   R   Ng      i@(   ii    (   ii    (   RE   RX   RY   R0  RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic82%
  s    	c      	   C` sh   d   } t  j d  j d d  } | j   } |  j | | | d i d d f d	 6d
 d 6d d 6d S(   s.    neighborhood, with standard_indexing and cvalc         S` s^   d } xM t  d d  D]< } x3 t  d d  D]" } | |  | | f | d 7} q, Wq W| d S(   Ni    ii   i   g      "@(   i   i   (   R   (   R   R   R  R   R`   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   6
  s
    $g      $@g      4@i
   i   R7   ii    R   R   R   g      ?R   Ng      i@(   ii    (   ii    (   RE   RX   RY   R0  RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic834
  s    	c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s    kernel calls njit c         S` s   |  d t  |  d  S(   Ni    i   (   i    i    (   i    i   (   R!   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   E
  s    g      $@g      4@i
   i   Ng      i@(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic84C
  s    	c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s!    kernel calls njit(parallel=True)c         S` s   |  d t  |  d  S(   Ni    i   (   i    i    (   i    i   (   R#   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   M
  s    g      $@g      4@i
   i   Ng      i@(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic85K
  s    	c         C` sQ   d   } t  j d
  j d d  } |  j | | d i d d 6d t t g d	 S(   s    bad kwarg c         S` s   |  d S(   Ni    (   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   V
  s    g      $@g      4@i
   i   R7   t   badR  Ng      i@(   RE   RX   RY   RP   R   R   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic86T
  s    	c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s    reserved arg name in use c         S` s   |  d S(   Ni    (   i    i    (    (   t   __sentinel__(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   _
  s    g      $@g      4@i
   i   Ng      i@(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic87]
  s    	c      	   C` sk   d   } t  j d  j d d  } |  j d t d t d t d t  } |  j | | d	 d
 i  d | d S(   s    use of reserved word c         S` s   | |  d S(   Ni    i   (   i    i   (    (   R   RW   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   g
  s    g      (@i   i   R  R   R  R   g      ?R7   R  N(   RE   RX   RY   R  R   R   RP   (   R*   R   R   R  (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic88e
  s    			c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s    basic multiple returnc         S` s4   |  d d k r d S|  d	 d k  r, |  d
 Sd Sd  S(   Ni    i   i
   g      $@i   i   g      @(   i    i   (   i    i   (   i    i    (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   x
  s
    g      $@g      4@i
   i   Ng      i@(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic89v
  s    	c      	   C` sh   d   } t  j d  j d d  } | j   } |  j | | | d i d d f d	 6d
 d 6d d 6d S(   s@    neighborhood, with standard_indexing and cval, multiple returnsc         S` s|   d } xM t  d d  D]< } x3 t  d d  D]" } | |  | | f | d 7} q, Wq W| d } | d k rt | d S| Sd  S(	   Ni    ii   i   g      "@g      i@g      ?(   i   i   (   R   (   R   R   R  R   R`   t   res(    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    $
g      $@g      4@i
   i   R7   ii    R   R   R   g      ?R   Ng      i@(   ii    (   ii    (   RE   RX   RY   R0  RP   (   R*   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic90
  s    	
c         C` s8   d   } t  j d  j d d  } |  j | |  d S(   s?    Issue #3454, const(int) == const(int) evaluating incorrectly. c         S` s'   d } d d k r d } n  |  d | S(   Ni    i   (   i    i    (    (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    	g      $@g      4@i
   i   Ng      i@(   RE   RX   RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic91
  s    	c         C` sQ   d   } t  j t  j d  d  j d d  j t  j  } |  j | |  d S(   s7    Issue #3497, bool return type evaluating incorrectly. c         S` sH   |  d |  d A|  d A|  d A|  d A|  d	 A|  d
 A|  d A|  d AS(   Nii    i   (   ii(   ii    (   ii   (   i    i(   i    i    (   i    i   (   i   i(   i   i    (   i   i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    i   i   i   i   N(   RE   R  RX   RY   R  t   bool_RP   (   R*   R   R\   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic92
  s    	4c         C` s^   d   } t  j t  j d  d  j d d  j t  j  } |  j | | d i t d 6d S(	   s7    Issue #3497, bool return type evaluating incorrectly. c         S` sH   |  d |  d A|  d A|  d A|  d A|  d	 A|  d
 A|  d A|  d AS(   Nii    i   (   ii(   ii    (   ii   (   i    i(   i    i    (   i    i   (   i   i(   i   i    (   i   i   (    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    i   i   i   i   R7   R   N(   RE   R  RX   RY   R  R?  RP   R5   (   R*   R   R\   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic93
  s    	4c         C` sT   d   } t  j d d t  j j d d  } |  j | | d i d d f d	 6d
 S(   s"    Issue #3528. Support for slices. c         S` s#   t  j |  d d  d d  f  S(   Nii   (   RE   t   median(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    i   R   i   i   R7   ii   R   N(   ii   (   ii   (   RE   RX   t   uint32RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic94
  s    	$s   not yet supportedc         C` sA   d   } t  j d d t  j j d d  } |  j | |  d S(   s     Slice, calculate neighborhood. c         S` s#   t  j |  d d  d d  f  S(   Nii   ii   (   RE   RB  (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    i   R   i   i   N(   RE   RX   RC  RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic95
  s    	$c         C` sB   d   } t  j d d t  j } |  j | | d i d
 d 6d S(   s    1D slice. c         S` s   t  j |  d d ! S(   Nii   (   RE   RB  (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    i   R   R7   ii   R   N(   ii   (   (   ii   (   RE   RX   RC  RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic96
  s    	c         C` sA   d   } t  j d d t  j j d d  } |  j | |  d S(   s    2D slice and index. c         S` s   t  j |  d d  d f  S(   Nii   i   (   RE   RB  (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR   
  s    i   R   i   i   N(   RE   RX   RC  RY   RP   (   R*   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   test_basic97
  s    	$(p   RQ   RR   R)   RP   R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  t   unittestt   skipR  R  R  R  R  R  R  R  R  R  R   R  R  R  R  R  R  R  R	  R
  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R   R!  R#  R$  R%  R&  R'  R(  R)  R*  R+  R,  R-  R.  R/  R1  R2  R3  R4  R5  R7  R9  R:  R;  R=  R>  R@  RA  RD  RE  RF  RG  (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyR    s   			
																																																		
	
															
														
							
	
	
	
	
																				
	
		t   __main__(>   t
   __future__R    R   R   t   syst   numpyRE   R   R\  R  R   R  t
   contextlibR   R0  R   R;   R   RH  R   R   t   numba.compilerR	   R
   t   numba.targetsR   t   numba.targets.cpuR   t   supportR   t   numba.errorsR   R   t   version_infoR_  t   platformt
   startswitht   _windows_py27t   maxsizet   _32bitt   _reasont   _unsupportedt   skipIfR   R   R   R   R   R   R   R    R!   R5   R#   t   TestCaseR$   RU   R   R  R  RQ   t   main(    (    (    s8   lib/python2.7/site-packages/numba/tests/test_stencils.pyt   <module>   sb   !7    k'     