U
    9%el                    @   sx  d dl Zd dlmZ d dlZd dlmZmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ d dlZeZed	d
 Zedddd Zedddd Zedd Zedd Zedd Zedddd Zedddd Z edd  Z!es(ed!d"d#d$ Z"eG d%d& d&ej#Z$G d'd( d(e$Z%eG d)d* d*e$Z&e'd+krte(  dS ),    N)contextmanager)njitstencil)typesregistry)compile_extraFlags)ParallelOptions)skip_parfors_unsupported_32bitskip_m1_llvm_rtdyld_failure)LoweringErrorTypingErrorNumbaValueErrorc                 C   s$   d| d | d  | d  | d   S N      ?r      r   r   r   r   r    ar   r   X/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_stencils.pystencil1_kernel   s    r   )r   neighborhoodc                 C   s,   | d }t ddD ]}|| | 7 }qd| S )Nr   r   333333?range)r   cumir   r   r   stencil2_kernel   s    r'         ?cvalc                 C   s   d| d  S )Nr      r   r   r   r   r   stencil3_kernel'   s    r.   c                 C   sD   d| d | d  | d  | d  |d  |d  |d  |d   S r   r   r   br   r   r   stencil_multiple_input_kernel,   s     r1   c                 C   sD   || d | d  | d  | d  |d  |d  |d  |d   S Nr   r   r   r   r   )r   r0   wr   r   r   !stencil_multiple_input_kernel_var2   s     r4   c                 C   s   |d r| d S |d S Nr   r   r   )r   r0   fr   r   r   %stencil_multiple_input_mixed_types_2d8   s    r8   )r0   )standard_indexingc                 C   s    | d |d  | d |d   S )Nr   r   r   r   r/   r   r   r   !stencil_with_standard_indexing_1d=   s    r:   c                 C   s@   | d |d  | d |d   | d |d   | d |d   S r2   r   r/   r   r   r   !stencil_with_standard_indexing_2dB   s
    r;   c                 C   s   | d S Nr   r   r   r   r   r   addone_njitH   s    r=   Tparallelc                 C   s   | d S r<   r   r   r   r   r   addone_pjitN   s    r@   c                       sH   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	  Z
S )TestStencilBaseFc                    s$   t  | _d| j_tt| j|  d S NT)r   cflagsnrtsuperrA   __init__)selfargs	__class__r   r   rF   X   s    zTestStencilBase.__init__c                 C   s   t tjjtjj||d |i S N)r   r   Z
cpu_targetZtyping_contextZtarget_context)rG   funcsigflagsr   r   r   _compile_this_   s        zTestStencilBase._compile_thisc                 K   s0   t  }d|_|sdn|}t||_| |||S rB   )r   rD   r	   Zauto_parallelrO   )rG   rL   rM   kwsrN   optionsr   r   r   compile_paralleld   s
    
z TestStencilBase.compile_parallelc                 C   s   | j ||| jdS )N)rN   )rO   rC   )rG   rL   rM   r   r   r   compile_njitk   s    zTestStencilBase.compile_njitc                 O   s2   t dd |D }| ||}| ||}||fS )Nc                 S   s   g | ]}t |qS r   numbaZtypeof.0xr   r   r   
<listcomp>o   s     z/TestStencilBase.compile_all.<locals>.<listcomp>)tuplerR   rS   )rG   pyfuncrH   kwargsrM   cpfunccfuncr   r   r   compile_alln   s    zTestStencilBase.compile_allc           
      G   s   | j |f| \}}|| }|| }|j| }|j| }	tjj||dd tjj||dd tjj|	|dd | d|j  d S )N   decimal@do_scheduling)r_   entry_pointnptestingassert_almost_equalassertInlibraryget_llvm_str)
rG   Zno_stencil_funcr[   rH   r^   r]   expectedZ	py_outputnjit_outputparfor_outputr   r   r   checkv   s    

zTestStencilBase.check)__name__
__module____qualname__Z_numba_parallel_test_rF   rO   rR   rS   r_   rn   __classcell__r   r   rI   r   rA   S   s   rA   c                       s   e Zd Z fddZedd Zedd Zedd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Z  ZS )TestStencilc                    s   t t| j|| d S rK   )rE   rs   rF   rG   rH   r\   rI   r   r   rF      s    zTestStencil.__init__c                 C   s<   dd }dd }dd }d}|  ||| |  ||| dS )	zHTests whether the optional out argument to stencil calls works.
        c                 S   s@   t | d | | f}t | d | | f}t||d}|S )Nr-   out)re   arangereshapezerosr   nABr   r   r   test_with_out   s    z0TestStencil.test_stencil1.<locals>.test_with_outc                 S   s$   t | d | | f}t|}|S Nr-   )re   rw   rx   r   rz   r   r   r   test_without_out   s    z3TestStencil.test_stencil1.<locals>.test_without_outc                 S   s   t | d | | f}t | d | | f}td| d D ]d}td| d D ]P}d|||d f ||d |f  |||d f  ||d |f   |||f< qPq>|S Nr-   r   r   re   rw   rx   ry   r$   r{   r|   r}   r&   jr   r   r   test_impl_seq   s    z0TestStencil.test_stencil1.<locals>.test_impl_seqd   Nrn   )rG   r~   r   r   r{   r   r   r   test_stencil1   s    	zTestStencil.test_stencil1c           	      C   s8  dd }dd }d}|  ||| dd }dd }d}d}| |tjtjf}|||}|||}tjj||d	d
 | d|j	
  dd }d}| |tjtjtjf}||||}tjj||d	d
 | d|j	
  dd }d}| |tjtjtjf}||||}tjj||d	d
 | d|j	
  dS )z`Tests whether the optional neighborhood argument to the stencil
        decorate works.
        c                 S   s   t | }t|}|S rK   )re   rw   r'   rz   r   r   r   test_seq   s    
z+TestStencil.test_stencil2.<locals>.test_seqc                 S   sL   t | }t | }tdt|D ]$}dt||d |d   ||< q"|S )N   r"   r   re   rw   ry   r$   lensumr{   r|   r}   r&   r   r   r   r      s
    

"z0TestStencil.test_stencil2.<locals>.test_impl_seqr   c                 S   s2   t | }dd }tj|| |ffd||}|S )Nc                 S   s8   | |  }t | d |d D ]}|| | 7 }qd| S Nr   r"   r#   r   r3   r%   r&   r   r   r   r'      s    
DTestStencil.test_stencil2.<locals>.test_seq.<locals>.stencil2_kernelr   re   rw   rU   r   )r{   r3   r|   r'   r}   r   r   r   r      s    
c                 S   sT   t | }t | }t|t|| D ](}dt||| || d   ||< q&|S )Nr"   r   r   )r{   r3   r|   r}   r&   r   r   r   r      s
    

&r   r`   ra   rc   c                 S   s8   t | }dd }tj|| |ff| fd||}|S )Nc                 S   s@   | | d  }t | d |d D ]}|| |d  7 }q"d| S r   r#   r   r   r   r   r'      s    r   r    Zindex_offsetsr   r{   r3   offsetr|   r'   r}   r   r   r   r      s    
 r   c                 S   s8   t | }dd }tj|| |ff| fd||}|S )Nc                 S   s    dt | | d |d   S )Nr"   r   r-   )re   r   )r   r3   r   r   r   r'      s    r   r   r   r   r   r   r   r      s    
 N)rn   rR   r   intprd   re   rf   rg   rh   ri   rj   )	rG   r   r   r{   r3   r]   rk   rm   r   r   r   r   test_stencil2   s:    
	zTestStencil.test_stencil2c                 C   s   dd }t |}t |dd}d}||}||}||}| |d dkoR|d dk | |d dkop|d dk | |d dko|d dk d	S )
zTests whether a non-zero optional cval argument to the stencil
        decorator works.  Also tests integer result type.
        c                 S   s$   t | d | | f}t|}|S r   )re   rw   rx   r.   rz   r   r   r   r     s    z+TestStencil.test_stencil3.<locals>.test_seqTr>   r   r6   r(   )   r   N)r   
assertTrue)rG   r   Z	test_njitZtest_parr{   Zseq_resZnjit_resZpar_resr   r   r   test_stencil3  s    zTestStencil.test_stencil3c                 C   s&   dd }dd }d}|  ||| dS )z1Tests standard indexing with a 1d array.
        c                 S   s    t | }ddg}t||}|S )N      @      @)re   rw   r:   r{   r|   r}   Cr   r   r   r     s    

z?TestStencil.test_stencil_standard_indexing_1d.<locals>.test_seqc                 S   sX   t | }ddg}t | }td| D ],}||d  |d  || |d   ||< q&|S )Nr   r   r   r   re   rw   ry   r$   )r{   r|   r}   r   r&   r   r   r   r   !  s    

*zDTestStencil.test_stencil_standard_indexing_1d.<locals>.test_impl_seqr   Nr   rG   r   r   r{   r   r   r   !test_stencil_standard_indexing_1d  s    	z-TestStencil.test_stencil_standard_indexing_1dc                 C   s&   dd }dd }d}|  ||| dS )zLTests standard indexing with a 2d array and multiple stencil calls.
        c                 S   s:   t | d | | f}t d}t||}t||}|S )Nr-   r`   r`   )re   rw   rx   onesr;   )r{   r|   r}   r   Dr   r   r   r   1  s
    


z?TestStencil.test_stencil_standard_indexing_2d.<locals>.test_seqc                 S   sx  t | d | | f}t d}t | d | | f}t | d | | f}td| d D ]}td| d D ]l}|||d f |d  ||d |f |d   |||d f |d   ||d |f |d   |||f< qrq`td| d D ]}td| d D ]n}|||d f |d  ||d |f |d   |||d f |d   ||d |f |d   |||f< qq|S )Nr-   r   r   r   r   r   r   )re   rw   rx   r   ry   r$   )r{   r|   r}   r   r   r&   r   r   r   r   r   8  s&    
..zDTestStencil.test_stencil_standard_indexing_2d.<locals>.test_impl_seqr   Nr   r   r   r   r   !test_stencil_standard_indexing_2d-  s    z-TestStencil.test_stencil_standard_indexing_2dc                 C   s<   dd }dd }d}|  ||| dd }|  ||| dS )z=Tests whether multiple inputs of the same size work.
        c                 S   s>   t | d | | f}t | d | | f}t||}|S r   )re   rw   rx   r1   r   r   r   r   r   O  s    
z:TestStencil.test_stencil_multiple_inputs.<locals>.test_seqc                 S   s   t | d | | f}t | d | | f}t | d | | f}td| d D ]}td| d D ]}d|||d f ||d |f  |||d f  ||d |f  |||d f  ||d |f  |||d f  ||d |f   |||f< qhqV|S r   r   )r{   r|   r}   r   r&   r   r   r   r   r   U  s*    z?TestStencil.test_stencil_multiple_inputs.<locals>.test_impl_seqr`   c                 S   sD   t | d | | f}t | d | | f}d}t|||}|S )Nr-   r   )re   rw   rx   r4   )r{   r|   r}   r3   r   r   r   r   r   f  s
    Nr   r   r   r   r   test_stencil_multiple_inputsK  s    z(TestStencil.test_stencil_multiple_inputsc                 C   s&   dd }dd }d}|  ||| d S )Nc                 S   s   t | d | | f}| d t | d | | f }t j| t jd}t j| | f|jd}td| D ]@}td| D ]0}|||f r|||f n
|||f |||f< qtqf|S )Nr-   dtyper   )re   rw   rx   eyebool_ry   r   r$   )r{   r|   r}   SOr&   r   r   r   r   r   p  s     0z;TestStencil.test_stencil_mixed_types.<locals>.test_impl_seqc                 S   sX   t | d | | f}| d t | d | | f }t j| t jd}t|||}|S )Nr-   r   )re   rw   rx   r   r   r8   )r{   r|   r}   r   r   r   r   r   r   z  s
     z6TestStencil.test_stencil_mixed_types.<locals>.test_seqr`   r   )rG   r   r   r{   r   r   r   test_stencil_mixed_typesn  s    
z$TestStencil.test_stencil_mixed_typesc                 C   s<   dd }dd }dd }d}|  ||| |  ||| dS )	z&Tests 2D numba.stencil calls.
        c                 S   sJ   t | d | | f}t | d | | f}tdd ||d |S )Nr-   c                 S   s$   d| d | d  | d  | d   S r   r   r   r   r   r   <lambda>  s   zCTestStencil.test_stencil_call.<locals>.test_impl1.<locals>.<lambda>ru   re   rw   rx   ry   rU   r   rz   r   r   r   
test_impl1  s     z1TestStencil.test_stencil_call.<locals>.test_impl1c                 S   sJ   t | d | | f}t | d | | f}dd }t||}|S )Nr-   c                 S   s$   d| d | d  | d  | d   S r   r   r   r   r   r   sf  s    z=TestStencil.test_stencil_call.<locals>.test_impl2.<locals>.sfr   )r{   r|   r}   r   r   r   r   
test_impl2  s
    z1TestStencil.test_stencil_call.<locals>.test_impl2c                 S   s   t | d | | f}t | d | | f}td| d D ]d}td| d D ]P}d|||d f ||d |f  |||d f  ||d |f   |||f< qPq>|S r   r   r   r   r   r   r     s     z4TestStencil.test_stencil_call.<locals>.test_impl_seqr   Nr   )rG   r   r   r   r{   r   r   r   test_stencil_call  s    		zTestStencil.test_stencil_callc                 C   s&   dd }dd }d}|  ||| dS )z&Tests 1D numba.stencil calls.
        c                 S   s.   t | }t | }tdd ||d |S )Nc                 S   s   d| d | d  | d   S Nr"   r   r   r   r   r   r   r   r   r         zETestStencil.test_stencil_call_1D.<locals>.test_impl.<locals>.<lambda>ru   re   rw   ry   rU   r   rz   r   r   r   	test_impl  s    

z3TestStencil.test_stencil_call_1D.<locals>.test_implc                 S   sT   t | }t | }td| d D ],}d||d  ||  ||d    ||< q"|S r   r   r   r   r   r   r     s
    

*z7TestStencil.test_stencil_call_1D.<locals>.test_impl_seqr   Nr   rG   r   r   r{   r   r   r   test_stencil_call_1D  s    z TestStencil.test_stencil_call_1Dc              	   C   sP  dd }dd }dd }dd }d	d
 }d}|  |tjf}|  |tjf}|  |tjf}	|  |tjf}
||}||}||}|	|}|
|}tjj||dd tjj||dd tjj||dd tjj||dd | t}|d W 5 Q R X | 	dt
|j | ttf}t|d W 5 Q R X | 	dt
|j dS )zTests 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   s4   t | }t | }d}tdd |||d |S )Nr   c                 S   s   d| |  | d  | |   S Nr"   r   r   r   cr   r   r   r     r   zITestStencil.test_stencil_call_const.<locals>.test_impl1.<locals>.<lambda>ru   r   r{   r|   r}   r   r   r   r   r     s
    

z7TestStencil.test_stencil_call_const.<locals>.test_impl1c                 S   s4   t | }t | }d}tdd |||d |S )Nr-   c                 S   s$   d| d|  | d  | |d    S Nr"   r   r   r   r   r   r   r   r     r   zITestStencil.test_stencil_call_const.<locals>.test_impl2.<locals>.<lambda>ru   r   r   r   r   r   r     s    

  z7TestStencil.test_stencil_call_const.<locals>.test_impl2c                 S   s4   t | }t | }d}tdd |||d |S )Nr-   c                 S   s&   d| | d  | d  | |d    S r   r   r   r   r   r   r     r   zITestStencil.test_stencil_call_const.<locals>.test_impl3.<locals>.<lambda>ru   r   r   r   r   r   
test_impl3  s    

  z7TestStencil.test_stencil_call_const.<locals>.test_impl3c                 S   s:   t | }t | }d}d}tdd ||||d |S )Nr   r-   c                 S   s&   d| | |  | d  | ||    S r   r   )r   r   dr   r   r   r     r   zITestStencil.test_stencil_call_const.<locals>.test_impl4.<locals>.<lambda>ru   r   )r{   r|   r}   r   r   r   r   r   
test_impl4  s    

  z7TestStencil.test_stencil_call_const.<locals>.test_impl4c                 S   sX   t | }t | }d}td| d D ],}d|||  ||  |||    ||< q&|S r   r   )r{   r|   r}   r   r&   r   r   r   r     s    

*z:TestStencil.test_stencil_call_const.<locals>.test_impl_seqr   r`   ra   r   zDstencil kernel index is not constant, 'neighborhood' option requiredN)rR   r   r   rd   re   rf   rg   assertRaisesr   rh   str	exceptionr   r   )rG   r   r   r   r   r   r{   Zcpfunc1Zcpfunc2Zcpfunc3Zcpfunc4rk   Zparfor_output1Zparfor_output2Zparfor_output3Zparfor_output4er   r   r   test_stencil_call_const  s:    		




z#TestStencil.test_stencil_call_constc                 C   s:   dd }| j |tjdd fdd}| d|j  dS )zYTests 1D numba.stencil calls without parallel translation
           turned off.
        c                 S   s   t dd | S )Nc                 S   s   d| d | d  | d   S r   r   r   r   r   r   r     r   zJTestStencil.test_stencil_parallel_off.<locals>.test_impl.<locals>.<lambda>)rU   r   )r|   r   r   r   r     s    z8TestStencil.test_stencil_parallel_off.<locals>.test_implNFr   rc   )rR   rU   float64ZassertNotInri   rj   )rG   r   r]   r   r   r   test_stencil_parallel_off	  s
    z%TestStencil.test_stencil_parallel_offc                 C   s>   t dddd }dd }td}tj|||| dS )	z6Tests whether nested stencil decorator works.
        Tr>   c                 S   s   t dd }|| }|S )Nc                 S   s   d}| | d  S )Nr-   r   r   r   r   r   r   fun  s    z@TestStencil.test_stencil_nested1.<locals>.test_impl.<locals>.funr   )r{   r   r}   r   r   r   r     s    
z3TestStencil.test_stencil_nested1.<locals>.test_implc                 S   s:   t jt| td}tdt| D ]}| |d  ||< q |S )Nr   r   )re   ry   r   intr$   )r{   r}   r&   r   r   r   r   "  s    z7TestStencil.test_stencil_nested1.<locals>.test_impl_seq
   N)r   re   rw   rf   Zassert_equalr   r   r   r   test_stencil_nested1  s
    

z TestStencil.test_stencil_nested1c                    s  ddg}dd }|D ]}t j||d  fdd}tdd	}t|d
}||dddf< t|} ||d tj|| | 	|}|D ]}	|	
 }
tj|
| qqt j|dd  fdd}tdd	}t|}| t} ||d W 5 Q R X d}| |t|j | j| jfD ]V}z||d W n8 ttfk
rp } z| |t| W 5 d}~X Y n
X tdq&dS )z/ Issue #3518, out kwarg did not work with cval.   r   c                 S   s   | d | d  S Nr6   r   r   r   r   r   r   kernel1  s    z1TestStencil.test_out_kwarg_w_cval.<locals>.kernelr)   c                     s*   t dd} t | } | |d |S N   r`   r   ru   re   rw   rx   	ones_liker|   retZ
stencil_fnr   r   wrapped7  s    
z2TestStencil.test_out_kwarg_w_cval.<locals>.wrappedr   r   r!   r   Nru                 ?c                     s*   t dd} t | } | |d |S r   r   r   r   r   r   r   N  s    
z-cval type does not match stencil return type.r   zExpected error was not raised)rU   r   re   rw   rx   	full_liker   rf   rg   r_   rd   r   r   rh   r   r   rS   rR   r   AssertionError)rG   Z
const_valsr   Z	const_valr   r|   rk   r   implsimplgotr   msgcompilerr   r   r   test_out_kwarg_w_cval+  s:    


"z!TestStencil.test_out_kwarg_w_cvalc           
         s   t jt jt j tdtd fD ]}dd }tj||d  fdd}t dd}t |d	}||d
ddf< t 	|} ||d t j
|| | |}|D ]}| }	t j
|	| qq dS )U Test issue #7286 where the cval is a np attr/string-based numerical
        constantinfc                 S   s   | d | d  S r   r   r   r   r   r   r   h  s    z9TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.kernelr)   c                     s*   t dd} t | } | |d |S )N      (@r   ru   r   r   r   r   r   r   m  s    
z:TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.wrappedr   r   r!   r   Nru   )re   nanr   floatrU   r   rw   rx   r   r   rf   rg   r_   rd   )
rG   r*   r   r   r|   rk   r   r   r   r   r   r   r   test_out_kwarg_w_cval_np_attrc  s    $

z)TestStencil.test_out_kwarg_w_cval_np_attr)ro   rp   rq   rF   skip_unsupportedr   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   rI   r   rs      s:   

T



"

 

O


7rs   c                       s  e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(e)*dMdNdO Z+dPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4dbdc Z5ddde Z6dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=dtdu Z>e)*dvdwdx Z?dydz Z@d{d| ZAd}d~ ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd ZdddĄ ZeddƄ ZfddȄ Zgddʄ Zhdd̄ Zidd΄ ZjddЄ Zkdd҄ ZlddԄ Zmddք Zne)*dסddل Zoddۄ Zpe)*dסdd݄ Zqdd߄ Zr  ZsS )TestManyStencilsc                    s   t t| j|| d S rK   )rE   r   rF   rt   rI   r   r   rF     s    zTestManyStencils.__init__c              
      s  | dt }| d}d}g  g td) fdd	}t|tr\|d }	|d }
|d	 }n|}	|}
|}d
|i}|| d}||	d tf || }W 5 Q R X t|dkrfdd}nDt|dkrڇfdd}n*t|dkrfdd}ntdt| tdd |D }d}||
d | 	||}|j
| }W 5 Q R X d}||d | ||}|j
| }W 5 Q R X |rtd| td| td| z,|	stjj||dd | |j|j W nR tk
r } z2ddt|t|f f tdt|  W 5 d}~X Y nX z,|
sDtjj||dd | |j|j W nR tk
r } z2ddt|t|f f tdt|  W 5 d}~X Y nX zf|stjj||dd | |j|j z| d|j  W n" tk
r   d}t|Y nX W nR tk
rR } z2ddt|t|f f td t|  W 5 d}~X Y nX |rbtd!  rd"d  D }td#| rd$d D }d%d&d D }d'| }d(| }t|| dS )*a  
        For a given kernel:

        The expected result is available from argument `expected`.

        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.
        rQ   expected_exceptionFNc              
   3   s   z
d V  W n t k
r } zb| d k	r\t| dr2| n| g}d}|D ]}|t||O }q@|sz n|dt|t|f f W 5 d }~X Y nX | d k	r | d S N__iter__F%s: %s	Exceptionhasattr
isinstanceappendtyper   ZextyZusecaser   Zlextyfoundexshould_failshould_not_failr   r   errorhandler  s"    
z=TestManyStencils.check_against_expected.<locals>.errorhandlerr   r   parforfunc_or_mode@stencilr   c                    s    | S rK   r   arg0stencil_func_implr   r   wrap_stencil  s    z=TestManyStencils.check_against_expected.<locals>.wrap_stencilr-   c                    s
    | |S rK   r   r   arg1r  r   r   r    s    r`   c                    s    | ||S rK   r   r   r  Zarg2r  r   r   r    s    +Up to 3 arguments can be provided, found %sc                 S   s   g | ]}t |qS r   rT   rV   r   r   r   rY     s     z;TestManyStencils.check_against_expected.<locals>.<listcomp>parforsz
@stencil_output:
z
njit_output:
z
parfor_output:
ra   r   z@stencil failed: %sz@njit failed: %src   z*Could not find `@do_scheduling` in LLVM IRz@njit(parallel=True) failed: %sz

c                 S   s   g | ]}d | qS %sr   rV   r   r   r   rY      s     MThe following implementations should have raised an exception but did not:
%sc                 S   s   g | ]}d |d  qS r
  r   r   rV   r   r   r   rY   %  s      c                 S   s   g | ]}d | qS z%s: Message: %s

r   rV   r   r   r   rY   &  s   NThe following implementations should not have raised an exception but did:
%s
Errors were:

%s)NN)getdictr   r   updater   r   
ValueErrorrZ   rS   rd   rR   printre   rf   rg   assertEqualr   r   r   r   r   rh   ri   rj   r   RuntimeErrorjoin)rG   r[   rk   rH   r\   rQ   r   ZDEBUG_OUTPUTr   
stencil_exnjit_ex	parfor_exstencil_argsZstencilfunc_outputr  rM   rl   wrapped_cfuncrm   wrapped_cpfuncr   r   r   errsstr1str2r   r   r   r  r   check_against_expected  s    







  "  "  "
z'TestManyStencils.check_against_expectedc              	      s  | dt }| d}g  g td fdd	}t|trX|d }|d }|d }	n|}|}|}	d	|i}
|
| ||d
 tf |
|  W 5 Q R X t|dkrfdd}nDt|dkr҇fdd}n*t|dkrfdd}ntdt| tdd |D }||d | 	||}|j
|  W 5 Q R X ||	d | ||}|j
|  W 5 Q R X  rdd  D }td| rdd D }ddd D }d| }d| }t|| dS )a  
        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.
        rQ   r   Nc              
   3   s   z
d V  W n t k
r } zb| d k	r\t| dr2| n| g}d}|D ]}|t||O }q@|sz n|dt|t|f f W 5 d }~X Y nX | d k	r | d S r   r   r   r   r   r   r   E  s"    
z7TestManyStencils.check_exceptions.<locals>.errorhandlerr   r   r   r   r   r   c                    s    | S rK   r   r   r  r   r   r  l  s    z7TestManyStencils.check_exceptions.<locals>.wrap_stencilr-   c                    s
    | |S rK   r   r  r  r   r   r  o  s    r`   c                    s    | ||S rK   r   r  r  r   r   r  r  s    r  c                 S   s   g | ]}t |qS r   rT   rV   r   r   r   rY   y  s     z5TestManyStencils.check_exceptions.<locals>.<listcomp>r  c                 S   s   g | ]}d | qS r	  r   rV   r   r   r   rY     s     r  c                 S   s   g | ]}d |d  qS r  r   rV   r   r   r   rY     s     r  c                 S   s   g | ]}d | qS r  r   rV   r   r   r   rY     s   r  r  )NN)r  r  r   r   r  r   r   r  rZ   rS   rd   rR   r  r  )rG   r[   rH   r\   rQ   r   r   r  r  r  r  r  rM   r  r  r   r   r  r   r!  r   r"  r   check_exceptions-  sf    





z!TestManyStencils.check_exceptionsc                 K   sD   t  }d |d< d |d< d |d< d |d< | D ]\}}|||< q.|S )NZ	pyStencilr   r   r   )r  items)rG   r\   r   kvr   r   r   exception_dict  s    
zTestManyStencils.exception_dictc                 O   sf   | d}|d j}|d k	r4t|t|kr4td|dd  D ] }t|dr@||jkr@tdq@d S )Nr    r   zInvalid neighborhood suppliedr   shapez#Input stencil arrays do not commute)r  r)  r   r  r   )rG   rH   r\   r    Z
init_shaperX   r   r   r   check_stencil_arrays  s    



z%TestManyStencils.check_stencil_arraysc                    sD   dd   fdd}t ddd}||d} || dS )	z	rel indexc                 S   s   | d S r5   r   r   r   r   r   r     s    z-TestManyStencils.test_basic00.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}td| jd D ] }| |d |d f |||f< qPq<|S Nr   r   r   r   r*  re   fullr)  r   r$   r   r    _TestManyStencils__retdtype_TestManyStencils__b0_TestManyStencils__b_TestManyStencils__ar   rG   r   r   __kernel  s     z/TestManyStencils.test_basic00.<locals>.__kernelr   r`   r   Nre   rw   rx   r#  rG   _TestManyStencils__kernelr   rk   r   r3  r   test_basic00  s
    

zTestManyStencils.test_basic00c                    sD   dd   fdd}t ddd}||d} || dS )	rel index add constc                 S   s   | d S Nr   r   r   r   r   r   r     s    z-TestManyStencils.test_basic01.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]6}td| jd D ] }| |d |d f |||f< qTq@|S r+  r,  r.  r3  r   r   r4    s     z/TestManyStencils.test_basic01.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic01  s
    

zTestManyStencils.test_basic01c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr   r   r   r   r   r   r     s    z-TestManyStencils.test_basic02.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}td| jd D ] }| |d |d f |||f< qPq<|S Nr   r   r   r   r   r,  r.  r3  r   r   r4    s     z/TestManyStencils.test_basic02.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic02  s
    

zTestManyStencils.test_basic02c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr   r   r   r   r   r   r     s    z-TestManyStencils.test_basic03.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd D ]:}td| jd d D ] }| |d |d f |||f< qTq<|S r+  r,  r.  r3  r   r   r4    s     z/TestManyStencils.test_basic03.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic03  s
    

zTestManyStencils.test_basic03c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr   r   r   r   r   r   r     s    z-TestManyStencils.test_basic04.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}td| jd D ] }| |d |d f |||f< qPq<|S r<  r,  r.  r3  r   r   r4    s     z/TestManyStencils.test_basic04.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic04   s
    

zTestManyStencils.test_basic04c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr   r   r   r   r   r   r   r     s    z-TestManyStencils.test_basic05.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]6}td| jd D ] }| |d |d f |||f< qTq@|S r<  r,  r.  r3  r   r   r4    s     z/TestManyStencils.test_basic05.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic05  s
    

zTestManyStencils.test_basic05c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr   r   r   r   r   r   r   r   .  s    z-TestManyStencils.test_basic06.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd D ]:}td| jd d D ] }| |d |d f |||f< qTq<|S r<  r,  r.  r3  r   r   r4  4  s     z/TestManyStencils.test_basic06.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic06,  s
    

zTestManyStencils.test_basic06c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr   r   r   r   r   r   r   r   D  s    z-TestManyStencils.test_basic07.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]:}td| jd d D ] }| |d |d f |||f< qXq@|S r+  r,  r.  r3  r   r   r4  J  s     z/TestManyStencils.test_basic07.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic07B  s
    

zTestManyStencils.test_basic07c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr   r   r   r   r   r   r   r   Z  s    z-TestManyStencils.test_basic08.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}td| jd D ] }| |d |d f |||f< qPq<|S r<  r,  r.  r3  r   r   r4  `  s     z/TestManyStencils.test_basic08.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic08X  s
    

zTestManyStencils.test_basic08c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d S )Nr+   r   r   r   r   r   r   p  s    z-TestManyStencils.test_basic09.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]6}td| jd D ] }| |d |d f |||f< qTq@|S )Nr   r   r   r   r-   r,   r,  r.  r3  r   r   r4  v  s     z/TestManyStencils.test_basic09.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic09n  s
    

zTestManyStencils.test_basic09c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d | d  S r   r   r   r   r   r   r     s    z-TestManyStencils.test_basic10.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]N}td| jd d D ]4}| |d |d f | |d |d f  |||f< qTq<|S r+  r,  r.  r3  r   r   r4    s    4z/TestManyStencils.test_basic10.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic10  s
    

zTestManyStencils.test_basic10c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d | d  S )Nr   r   r   r   r   r   r   r     s    z-TestManyStencils.test_basic11.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]N}td| jd d D ]4}| |d |d f | |d |d f  |||f< qTq<|S r<  r,  r.  r3  r   r   r4    s    4z/TestManyStencils.test_basic11.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic11  s
    

zTestManyStencils.test_basic11c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d | d  S )Nr@  rB  r   r   r   r   r   r     s    z-TestManyStencils.test_basic12.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]N}td| jd d D ]4}| |d |d f | |d |d f  |||f< qXq@|S r<  r,  r.  r3  r   r   r4    s    4z/TestManyStencils.test_basic12.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic12  s
    

zTestManyStencils.test_basic12c                    sD   dd   fdd}t ddd}||d} || dS )	r9  c                 S   s   | d | d  S )NrF  rD  r   r   r   r   r   r     s    z-TestManyStencils.test_basic13.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]N}td| jd d D ]4}| |d |d f | |d |d f  |||f< qXq@|S r<  r,  r.  r3  r   r   r4    s    4z/TestManyStencils.test_basic13.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic13  s
    

zTestManyStencils.test_basic13c                    sD   dd   fdd}t ddd}||d} || dS )	!rel index add domain change constc                 S   s   | d d S )Nr6   r   r   r   r   r   r   r     s    z-TestManyStencils.test_basic14.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd D ]:}td| jd D ]$}| |d |d f d |||f< qPq<|S Nr   r   r   r   r   r,  r.  r3  r   r   r4    s    $z/TestManyStencils.test_basic14.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic14  s
    

zTestManyStencils.test_basic14c                    sD   dd   fdd}t ddd}||d} || dS )	rM  c                 S   s   d}| d | S )Nr   r6   r   r   tr   r   r   r     s    z.TestManyStencils.test_basic14b.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]>}td| jd D ](}d}| |d |d f | |||f< qPq<|S rN  r,  r   r    r/  r0  r1  r2  rQ  r3  r   r   r4    s    $z0TestManyStencils.test_basic14b.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic14b  s
    
zTestManyStencils.test_basic14bc                    sD   dd   fdd}t ddd}||d} || dS )	ztwo rel index, add constc                 S   s   | d | d  d S )Nr6   r   r(   r   r   r   r   r   r     s    z-TestManyStencils.test_basic15.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]R}td| jd d D ]8}| |d |d f | |d |d f  d |||f< qTq<|S Nr   r   r   r   r(   r,  r.  r3  r   r   r4    s    z/TestManyStencils.test_basic15.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic15  s
    
zTestManyStencils.test_basic15c                    sD   dd   fdd}t ddd}||d} || dS )	&two rel index boundary test, add constc                 S   s   | d | d  d S )Nr6   )r-   r   r(   r   r   r   r   r   r     s    z-TestManyStencils.test_basic17.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]R}td| jd d D ]8}| |d |d f | |d |d f  d |||f< qTq<|S )Nr   r   r   r   r-   r(   r,  r.  r3  r   r   r4  !  s    z/TestManyStencils.test_basic17.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic17  s
    
zTestManyStencils.test_basic17c                    sD   dd   fdd}t ddd}||d} || dS )	rV  c                 S   s   | d | d  d S )Nr6   r,   r   r(   r   r   r   r   r   r   2  s    z-TestManyStencils.test_basic18.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]N}td| jd D ]8}| |d |d f | |d |d f  d |||f< qPq<|S )Nr   r   r   r   r-   r,   r(   r,  r.  r3  r   r   r4  7  s    z/TestManyStencils.test_basic18.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic180  s
    
zTestManyStencils.test_basic18c                    sD   dd   fdd}t ddd}||d} || dS )	rV  c                 S   s   | d | d  d S )Nr6   r   r`   r(   r   r   r   r   r   r   H  s    z-TestManyStencils.test_basic19.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]N}td| jd D ]8}| |d |d f | |d |d f  d |||f< qTq@|S )Nr   r   r   r   r`   r(   r,  r.  r3  r   r   r4  M  s    z/TestManyStencils.test_basic19.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic19F  s
    
zTestManyStencils.test_basic19c                    sD   dd   fdd}t ddd}||d} || dS )	rV  c                 S   s   | d | d  d S )Nr6   )r   r(   r   r   r   r   r   r   ^  s    z-TestManyStencils.test_basic20.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]N}td| jd D ]8}| |d |d f | |d |d f  d |||f< qPq<|S )Nr   r   r   r`   r   r\  r(   r,  r.  r3  r   r   r4  c  s    z/TestManyStencils.test_basic20.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic20\  s
    
zTestManyStencils.test_basic20c                    sD   dd   fdd}t ddd}||d} || dS )	zsame rel, add constc                 S   s   | d | d  d S )Nr6   r(   r   r   r   r   r   r   t  s    z-TestManyStencils.test_basic21.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]N}td| jd D ]8}| |d |d f | |d |d f  d |||f< qPq<|S rT  r,  r.  r3  r   r   r4  y  s    z/TestManyStencils.test_basic21.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic21r  s
    
zTestManyStencils.test_basic21c                    sD   dd   fdd}t ddd}||d} || dS )	z%rel idx const expr folding, add constc                 S   s   | d | d  d S )Nr   r6   r(   r   r   r   r   r   r     s    z-TestManyStencils.test_basic22.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]R}td| jd d D ]8}| |d |d f | |d |d f  d |||f< qTq<|S rT  r,  r.  r3  r   r   r4    s    z/TestManyStencils.test_basic22.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic22  s
    
zTestManyStencils.test_basic22c                    sD   dd   fdd}t ddd}||d} || dS )	zrel idx, work in bodyc                 S   s&   t d| d  }| d | d  | S Nr   )r-   r   r   r6   re   sinr   rX   r   r   r   r     s    z-TestManyStencils.test_basic23.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ]p}td| jd d D ]V}td| |d |d f  }| |d |d f | |d |d f  | |||f< qXq@|S Nr   r   r   r   r-   r   r*  re   r-  r)  r   r$   rb  r   r    r/  r0  r1  r2  rX   r3  r   r   r4    s    z/TestManyStencils.test_basic23.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic23  s
    
zTestManyStencils.test_basic23c                    sD   dd   fdd}t ddd}||d} || dS )	z,rel idx, dead code should not impact rel idxc                 S   s"   t d| d  }| d | d  S r`  ra  rc  r   r   r   r     s    z.TestManyStencils.test_basic23a.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ]l}td| jd d D ]R}td| |d |d f  }| |d |d f | |d |d f  |||f< qXq@|S rd  re  rf  r3  r   r   r4    s    4z0TestManyStencils.test_basic23a.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic23a  s
    
zTestManyStencils.test_basic23ac                 C   s0   t ddd}dd }| j||tgd dS )z1d idx on 2d arrr   r`   r   c                 S   s   | d d S )Nr   r(   r   r   r   r   r   r     s    z-TestManyStencils.test_basic24.<locals>.kernelr   N)re   rw   rx   r$  r   rG   r   r   r   r   r   test_basic24  s    zTestManyStencils.test_basic24c                 C   s2   t ddd}dd }| j||ttgd dS )zno idx on 2d arrr   r`   r   c                 S   s   dS )Nr(   r   r   r   r   r   r     s    z-TestManyStencils.test_basic25.<locals>.kernelri  Nre   rw   rx   r$  r  r   rj  r   r   r   test_basic25  s
    
zTestManyStencils.test_basic25c                    sF   dd   fdd}t dddd}||d	} || d	S )
z3d arrc                 S   s   | d | d  d S )N)r   r   r   )r   r   r   r(   r   r   r   r   r   r     s    z-TestManyStencils.test_basic26.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd D ]v}td| jd d D ]\}td| jd D ]F}| |d |d |d f | |d |d |d f  d ||||f< qhqTq<|S )Nr   r   r   r-   r   r(   r,  )r   r    r/  r0  _TestManyStencils__cr1  r2  r3  r   r   r4    s    z/TestManyStencils.test_basic26.<locals>.__kernel@   r      r-   Nr5  r6  r   r3  r   test_basic26  s
    
zTestManyStencils.test_basic26c                    sH   dd   fdd}t ddddd}||d	} || d	S )
z4d arrc                 S   s   | d | d  d S )N)r   r   r   r   )r   r   r   r   r(   r   r   r   r   r   r     s    z-TestManyStencils.test_basic27.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}td| jd d D ]j}td| jd D ]T}| |d |d |d |d f | |d |d |d |d f  d |||||f< q|qhqPq<|S )	Nr   r   r   r   r`   r-   r   r(   r,  )r   r    r/  r0  Z_TestManyStencils__drn  r1  r2  r3  r   r   r4     s&      z/TestManyStencils.test_basic27.<locals>.__kernel   r   rp  r-   Nr5  r6  r   r3  r   test_basic27  s
    
zTestManyStencils.test_basic27c                    sL   dd   fdd}t dddt j}||d} || dS )	ztype widen c                 S   s   | d t d S )Nr6         $@)re   r   r   r   r   r   r     s    z-TestManyStencils.test_basic28.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]@}td| jd D ]*}| |d |d f td |||f< qPq<|S )Nr   r   r   r   rt  )r*  re   r-  r)  r   r$   r   r.  r3  r   r   r4    s    *z/TestManyStencils.test_basic28.<locals>.__kernelr   r`   r   Nre   rw   rx   astypeZfloat32r#  r6  r   r3  r   test_basic28  s
    

zTestManyStencils.test_basic28c                 C   s4   t ddd}dd }| j||tttgd dS )zconst index from func r   r`   r   c                 S   s   | dt tdf S )Nr   )r   re   cosr   r   r   r   r   .  s    z-TestManyStencils.test_basic29.<locals>.kernelri  Nre   rw   rx   r$  r  r   r   rj  r   r   r   test_basic29*  s    
zTestManyStencils.test_basic29c                    sL   dd   fdd}t dddt j}||d} || dS )	zsigned zerosc                 S   s   | d S r5   r   r   r   r   r   r   6  s    z-TestManyStencils.test_basic30.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}td| jd D ] }| |d |d f |||f< qPq<|S r+  r,  r.  r3  r   r   r4  ;  s     z/TestManyStencils.test_basic30.<locals>.__kernelr   r`   r   Nru  r6  r   r3  r   test_basic304  s
    

zTestManyStencils.test_basic30c                    sL   dd   fdd}t dddt j}||d} || dS )	zdoes a const propagate? 2Dc                 S   s   d}| |df S Nr   r   r   rP  r   r   r   r   K  s    z-TestManyStencils.test_basic31.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]>}td| jd d D ]$}d}| || |d f |||f< qTq<|S r+  r,  rR  r3  r   r   r4  Q  s     z/TestManyStencils.test_basic31.<locals>.__kernelr   r`   r   Nru  r6  r   r3  r   test_basic31I  s
    

zTestManyStencils.test_basic31z constant folding not implementedc                 C   s   t ddd}dd }dS )zdoes a const propagate?r   r`   r   c                 S   s   d}d| }| |df S r|  r   )r   srQ  r   r   r   r   d  s    z.TestManyStencils.test_basic31b.<locals>.kernelN)re   rw   rx   rj  r   r   r   test_basic31b_  s    zTestManyStencils.test_basic31bc                    s<   dd   fdd}t d}||d} || dS )zdoes a const propagate? 1Dc                 S   s   d}| | S r<   r   rP  r   r   r   r   m  s    z.TestManyStencils.test_basic31c.<locals>.kernelc                    s`   j | |d  | }tj| jdt|d}td| jd d D ]}d}| ||  ||f< q@|S r+  r,  )r   r    r/  r0  r2  rQ  r3  r   r   r4  s  s    z0TestManyStencils.test_basic31c.<locals>.__kernelr   Nre   rw   r#  r6  r   r3  r   test_basic31ck  s
    	

zTestManyStencils.test_basic31cc                 C   s4   t ddd}dd }| j||tttgd dS )ztyped int indexr   r`   r   c                 S   s   | t ddf S r|  )re   Zint8r   r   r   r   r     s    z-TestManyStencils.test_basic32.<locals>.kernelri  Nry  rj  r   r   r   test_basic32  s    
zTestManyStencils.test_basic32c                    sD   dd   fdd}t ddd}||d} || dS )	zadd 0d arrayc                 S   s   | d t d S )Nr6   r   )re   arrayr   r   r   r   r     s    z-TestManyStencils.test_basic33.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]@}td| jd D ]*}| |d |d f td |||f< qPq<|S r+  )r*  re   r-  r)  r   r$   r  r.  r3  r   r   r4    s    *z/TestManyStencils.test_basic33.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic33  s
    	
zTestManyStencils.test_basic33c                    sD   dd   fdd}t ddd}||d} || dS )z<More complex rel index with dependency on addition rel indexc                 S   s6   d| d  }|| d | d  | d  t | d   S )N      @r   r   r   rX  ra  )r   gr   r   r   r     s    z-TestManyStencils.test_basic34.<locals>.kernelc              
      s   j | |d  | }tj| jdt|d}td| jd d D ]}td| jd d D ]~}d| |d |d f  }|| |d |d f | |d |d f  | |d |d f  t| |d |d f   |||f< qXq@|S )	Nr   r   r   r   r-   r  r   r,   re  )r   r    r/  r0  r1  r2  r  r3  r   r   r4    s    z/TestManyStencils.test_basic34.<locals>.__kernel   r   Nr5  r6  r   r3  r   test_basic34  s
    
zTestManyStencils.test_basic34c                    sL   dd   fdd}t ddd}||d}j ||d	d
id dS )z<simple cval where cval is int but castable to dtype of floatc                 S   s   | d S r:  r   r   r   r   r   r     s    z-TestManyStencils.test_basic35.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]6}td| jd D ] }| |d |d f |||f< qTq@|S )Nr   r   r   r   r   r,  r.  r3  r   r   r4    s     z/TestManyStencils.test_basic35.<locals>.__kernelr   r`   r   Nr*   r   rQ   r5  r6  r   r3  r   test_basic35  s
    	
zTestManyStencils.test_basic35c                    sL   dd   fdd}t ddd}||d}j ||d	d
id dS )zmore complex with cvalc                 S   s    | d | d  | d  | d  S Nr   r   rB  r   r   r   r   r   r     s    z-TestManyStencils.test_basic36.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]v}td| jd d D ]\}| |d |d f | |d |d f  | |d |d f  | |d |d f  |||f< qXq@|S )Nr   g      @r   r   r   r   r,  r.  r3  r   r   r4    s    z/TestManyStencils.test_basic36.<locals>.__kernelr   r`   r   Nr*   r   r  r5  r6  r   r3  r   test_basic36  s
    
zTestManyStencils.test_basic36c                    sL   dd   fdd}t ddd}||d}j ||d	d
id dS )zcval is exprc                 S   s    | d | d  | d  | d  S r  r   r   r   r   r   r     s    z-TestManyStencils.test_basic37.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]v}td| jd d D ]\}| |d |d f | |d |d f  | |d |d f  | |d |d f  |||f< qXq@|S )Nr         Q@r   r   r   r   r,  r.  r3  r   r   r4    s    z/TestManyStencils.test_basic37.<locals>.__kernelr   r`   r   Nr*   r  r  r5  r6  r   r3  r   test_basic37  s    

zTestManyStencils.test_basic37c                 C   sD   dd }t ddd}| jtttd}| j||ddi|d	 d
S )zcval is complexc                 S   s    | d | d  | d  | d  S r  r   r   r   r   r   r     s    z-TestManyStencils.test_basic38.<locals>.kernelr   r`   r   r   r   r   r*   r   rQ   r   Nre   rw   rx   r(  r   r  r$  rG   r   r   r   r   r   r   test_basic38  s    zTestManyStencils.test_basic38c                    sb   dd t dt d   fdd}t ddd	}||d
}j||d id d
S )zcval is func exprc                 S   s    | d | d  | d  | d  S r  r   r   r   r   r   r     s    z-TestManyStencils.test_basic39.<locals>.kernelr   r-   c                    s   j | |d | }tj| j t|d}td| jd d D ]v}td| jd d D ]\}| |d |d f | |d |d f  | |d |d f  | |d |d f  |||f< qXq@|S )Nr   r   r   r   r   r,  r.  r*   r   rG   r   r   r4    s    z/TestManyStencils.test_basic39.<locals>.__kernelr   r`   r   Nr*   r  )re   rb  rx  rw   rx   r#  r6  r   r  r   test_basic39  s    

zTestManyStencils.test_basic39c                    sZ   dd   fdd}t ddd}t ddd}|||d} ||| dS )	z2 args!c                 S   s   | d |d  S Nr   )r   r,   r   r/   r   r   r   r   #  s    z-TestManyStencils.test_basic40.<locals>.kernelc                    s   j | ||d  | |}tj| jdt|d}td| jd d D ]J}td| jd D ]4}| |d |d f ||d |d f  |||f< qXqD|S )Nr   r   r   r-   r   r,   r,  r   r0   r    r/  r0  r1  r2  r3  r   r   r4  (  s    
4z/TestManyStencils.test_basic40.<locals>.__kernelr   r`   r   Nr5  rG   r7  r   r0   rk   r   r3  r   test_basic40!  s    	zTestManyStencils.test_basic40c                 C   sF   dd }t ddd}t ddd}| j|||ttgd d	S )
z(2 args! rel arrays wildly not same size!c                 S   s   | d |d  S r  r   r/   r   r   r   r   8  s    z-TestManyStencils.test_basic41.<locals>.kernelr   r`   r   r(   r   ri  Nre   rw   rx   r$  r  r   rG   r   r   r0   r   r   r   test_basic416  s    zTestManyStencils.test_basic41c                 C   sF   dd }t ddd}t ddd}| j|||ttgd dS )	z%2 args! rel arrays very close in sizec                 S   s   | d |d  S r  r   r/   r   r   r   r   A  s    z-TestManyStencils.test_basic42.<locals>.kernelr   r`   r         "@ri  Nr  r  r   r   r   test_basic42?  s    zTestManyStencils.test_basic42c                    sZ   dd   fdd}t ddd}t ddd}|||d} ||| dS )	z2 args more complexityc                 S   s    | d | d  |d  |d  S )Nr   r   r-   rX  r   r   r/   r   r   r   r   J  s    z-TestManyStencils.test_basic43.<locals>.kernelc                    s   j | ||d  | |}tj| jdt|d}td| jd d D ]v}td| jd d D ]\}| |d |d f | |d |d f  ||d |d f  ||d |d f  |||f< q\qD|S )Nr   r   r   r   r-   r,   r   r,  r  r3  r   r   r4  O  s    
z/TestManyStencils.test_basic43.<locals>.__kernelg      >@r      Nr5  r  r   r3  r   test_basic43H  s    zTestManyStencils.test_basic43c                 C   sF   dd }t ddd}t ddd}| j|||ttgd dS )z!2 args, has assignment before usec                 S   s   d| d< | d S )Nr   r   r   r/   r   r   r   r   b  s    z-TestManyStencils.test_basic44.<locals>.kernelr   r`   r   ri  Nre   rw   rx   r$  r  r   r  r   r   r   test_basic44`  s    zTestManyStencils.test_basic44c                 C   sF   dd }t ddd}t ddd}| j|||ttgd dS )z02 args, has assignment and then cross dependencyc                 S   s   d| d< | d | d  S )Nr   r   r   r   r/   r   r   r   r   l  s    z-TestManyStencils.test_basic45.<locals>.kernelr   r`   r   ri  Nr  r  r   r   r   test_basic45j  s    zTestManyStencils.test_basic45c                 C   sF   dd }t ddd}t ddd}| j|||ttgd dS )z#2 args, has cross relidx assignmentc                 S   s   |d | d< | d | d  S )Nr  r   r   r   r/   r   r   r   r   v  s    z-TestManyStencils.test_basic46.<locals>.kernelr   r`   r   ri  Nr  r  r   r   r   test_basic46t  s    zTestManyStencils.test_basic46c                    sp   dd   fdd}t ddd}t ddd}t ddd}||||d} |||| dS )	z3 argsc                 S   s   | d |d  |d  S )Nr   r   r   r   r   r0   r   r   r   r   r     s    z-TestManyStencils.test_basic47.<locals>.kernelc                    s   j | |||d  | ||}tj| jdt|d}td| jd d D ]b}td| jd d D ]H}| |d |d f ||d |d f  ||d |d f  |||f< q`qH|S r<  r,  r   r0   r   r    r/  r0  r1  r2  r3  r   r   r4    s    z/TestManyStencils.test_basic47.<locals>.__kernelr   r`   r   Nr5  rG   r7  r   r0   r   rk   r   r3  r   test_basic47~  s    zTestManyStencils.test_basic47c                    sD   dd   fdd}t ddd}||d} || dS )	z22 args, has assignment before use via memory aliasc                 S   s"   | j }d|d d d d f< | d S )Nr   r   )Tr   r   r   r   r     s    z-TestManyStencils.test_basic48.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]P}td| jd D ]:}| j}d|d d d d f< | |d |d f |||f< qTq@|S )Nr   r   r   r   r   )r*  re   r-  r)  r   r$   r  )r   r    r/  r0  r1  r2  r   r3  r   r   r4    s     z/TestManyStencils.test_basic48.<locals>.__kernelr   r`   r   Nr5  r6  r   r3  r   test_basic48  s
    
zTestManyStencils.test_basic48c                    sb   dd   fdd}t ddd}t ddd}|||d}j |||d	d
id dS )z#2 args, standard_indexing on secondc                 S   s   | d |d  S )Nr   rZ  r   r/   r   r   r   r     s    z-TestManyStencils.test_basic49.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]>}td| jd D ](}| |d |d f |d  |||f< qVqB|S )Nr   r   r   r   rZ  r,  r  r3  r   r   r4    s    
(z/TestManyStencils.test_basic49.<locals>.__kernelr   r`   r   Nr9   r0   r  r5  r  r   r3  r   test_basic49  s    
zTestManyStencils.test_basic49z&dynamic range checking not implementedc                 C   s   dd }dS )z2 args, standard_indexing OOBc                 S   s   | d |d  S )Nr   )r      r   r/   r   r   r   r     s    z-TestManyStencils.test_basic50.<locals>.kernelNr   rG   r   r   r   r   test_basic50  s    zTestManyStencils.test_basic50c                 C   sP   dd }t ddd}t ddd}| j|||dddgittgd	 d
S )z$2 args, standard_indexing, no relidxc                 S   s   | d |d  S Nr   )r   r-   r   r/   r   r   r   r     s    z-TestManyStencils.test_basic51.<locals>.kernelr   r`   r   r9   r   r0   r  Nrl  r  r   r   r   test_basic51  s    

zTestManyStencils.test_basic51c                    sx   dd   fdd}t ddd}t dd	d	}t ddd}||||d
}j ||||ddid d
S )z(3 args, standard_indexing on middle arg c                 S   s   | d |d  |d  S )Nr   r  r   r  r   r   r   r     s    z-TestManyStencils.test_basic52.<locals>.kernelc                    s   j | ||d  | ||}tj| jdt|d}td| jd d D ]V}td| jd d D ]<}| |d |d f |d  ||d |d f  |||f< q^qF|S )Nr   r   r   r   r-   r   r,  r  r3  r   r   r4    s    z/TestManyStencils.test_basic52.<locals>.__kernelr   r`   r   r  r-   Nr9   r0   r  r5  r  r   r3  r   test_basic52  s    
zTestManyStencils.test_basic52c                 C   sX   dd }t ddd}t ddd}| jtttd}| j|||ddi|d	 d
S )z92 args, standard_indexing on variable that does not existc                 S   s   | d |d  S r  r   r/   r   r   r   r     s    z-TestManyStencils.test_basic53.<locals>.kernelr   r`   r   r  r9   r   r  N)re   rw   rx   r(  r   r  r$  rG   r   r   r0   r   r   r   r   test_basic53  s    zTestManyStencils.test_basic53c                    sb   dd   fdd}t ddd}t ddd}|||d}j |||d	d
id dS )z)2 args, standard_indexing, index from varc                 S   s   d}| d |d|f  S )Nr-   r   r   r   )r   r0   rQ  r   r   r   r     s    z-TestManyStencils.test_basic54.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]F}td| jd D ]0}d}| |d |d f |d|f  |||f< qVqB|S Nr   r   r   r   r-   r,  )r   r0   r    r/  r0  r1  r2  rQ  r3  r   r   r4    s    
,z/TestManyStencils.test_basic54.<locals>.__kernelr   r`   r   Nr9   r0   r  r5  r  r   r3  r   test_basic54   s    
zTestManyStencils.test_basic54c                    sb   dd   fdd}t ddd}t ddd}|||d}j |||d	d
id dS )z62 args, standard_indexing, index from more complex varc                 S   s    d}d| }| d |d|f  S )Nr   r-   r   r   r   )r   r0   r~  rQ  r   r   r   r     s    z-TestManyStencils.test_basic55.<locals>.kernelc           	         s   j | |d  | |}tj| jdt|d}td| jd d D ]N}td| jd D ]8}d}d| }| |d |d f |d|f  |||f< qVqB|S r  r,  )	r   r0   r    r/  r0  r1  r2  r~  rQ  r3  r   r   r4  !  s    
,z/TestManyStencils.test_basic55.<locals>.__kernelr   r`   r   Nr9   r0   r  r5  r  r   r3  r   test_basic55  s    zTestManyStencils.test_basic55c                    sb   dd   fdd}t ddd}t ddd}|||d}j |||d	d
id dS )z,2 args, standard_indexing, added complexity c                 S   sJ   d}d}|dd d f D ]}||7 }qd| d }| d |d|f  | S )Nr   r   r-   r   r   )r   r0   r~  accr&  rQ  r   r   r   r   4  s    
z-TestManyStencils.test_basic56.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]x}td| jd D ]b}d}d}|dd d f D ]}	||	7 }qrd| d }
| |d |d f |d|
f  | |||f< qVqB|S r  r,  )r   r0   r    r/  r0  r1  r2  r~  r  r&  rQ  r3  r   r   r4  >  s    

0z/TestManyStencils.test_basic56.<locals>.__kernelr   r`   r   Nr9   r0   r  r5  r  r   r3  r   test_basic562  s    
zTestManyStencils.test_basic56c                    sb   dd   fdd}t ddd}t ddd}|||d}j |||d	d
id dS )z12 args, standard_indexing, split index operation c                 S   s   |d }| d |d  S )Nr   r   r   r   r  r   r   r   r   T  s    z-TestManyStencils.test_basic57.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]F}td| jd D ]0}|d }| |d |d f |d  |||f< qVqB|S r+  r,  r   r0   r    r/  r0  r1  r2  r   r3  r   r   r4  Z  s    
(z/TestManyStencils.test_basic57.<locals>.__kernelr   r`   r   Nr9   r0   r  r5  r  r   r3  r   test_basic57R  s    
zTestManyStencils.test_basic57c                    sb   dd   fdd}t ddd}t ddd}|||d}j |||d	d
id dS )z?2 args, standard_indexing, split index with broadcast mutation c                 S   s   |d d }| d |d  S )Nr   r   r   r   r  r   r   r   r   l  s    z-TestManyStencils.test_basic58.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]J}td| jd D ]4}|d d }| |d |d f |d  |||f< qVqB|S r+  r,  r  r3  r   r   r4  r  s    
(z/TestManyStencils.test_basic58.<locals>.__kernelr   r`   r   Nr9   r0   r  r5  r  r   r3  r   test_basic58j  s    
zTestManyStencils.test_basic58c              	      sn   dd   fdd}t ddd}t ddd}d}||||d	}j ||||d
ddgid d	S )z>3 args, mix of array, relative and standard indexing and constc                 S   s   | d |d  | S Nr   rD  r   r  r   r   r   r     s    z-TestManyStencils.test_basic59.<locals>.kernelc                    s   j | |d  | ||}tj| jdt|d}td| jd d D ]B}td| jd D ],}| |d |d f |d  | |||f< qXqD|S )Nr   r   r   r   rD  r,  r  r3  r   r   r4    s    ,z/TestManyStencils.test_basic59.<locals>.__kernelr   r`   r   r   Nr9   r0   r   r  r5  r  r   r3  r   test_basic59  s    

zTestManyStencils.test_basic59c                 C   s^   dd }t ddd}t ddd}d}| jtd}| j||||dd	d
gi|d dS )zP3 args, mix of array, relative and standard indexing,
        tuple pass throughc                 S   s   | d |d  |d  S )Nr   rD  r   r   r  r   r   r   r     s    z-TestManyStencils.test_basic60.<locals>.kernelr   r`   r   )r   )r   r9   r0   r   r  N)re   rw   rx   r(  r  r$  )rG   r   r   r0   r   r   r   r   r   test_basic60  s    
zTestManyStencils.test_basic60c                 C   sH   dd }t ddd}t ddd}| j|||dditd d	S )
z"2 args, standard_indexing on firstc                 S   s   | d |d  S r  r   r/   r   r   r   r     s    z-TestManyStencils.test_basic61.<locals>.kernelr   r`   r   r9   r   r  N)re   rw   rx   r$  r   r  r   r   r   test_basic61  s    
zTestManyStencils.test_basic61c                    sd   dd   fdd}t ddd}t ddd}|||d}j |||d	d
dd dS )z"2 args, standard_indexing and cvalc                 S   s   | d |d  S r  r   r/   r   r   r   r     s    z-TestManyStencils.test_basic62.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]>}td| jd D ](}| |d |d f |d  |||f< qVqB|S )Nr   rt  r   r   r   rD  r,  r  r3  r   r   r4    s    
(z/TestManyStencils.test_basic62.<locals>.__kernelr   r`   r   Nr0   rt  )r9   r*   r  r5  r  r   r3  r   test_basic62  s    	zTestManyStencils.test_basic62c                 C   sX   dd }t ddd}t ddd}| jtttd}| j|||dd	i|d
 dS )zQ2 args, standard_indexing applied to relative, should fail,
        non-const idxc                 S   s   | d|d f S )Nr   r   r   r/   r   r   r   r     s    z-TestManyStencils.test_basic63.<locals>.kernelr   r`   r   r   r  r9   r0   r  Nr  r  r   r   r   test_basic63  s    zTestManyStencils.test_basic63c                 C   s8   dd }t ddd}| j||ddittgd d	S )
z!1 arg that uses standard_indexingc                 S   s   | d S r5   r   r   r   r   r   r     s    z-TestManyStencils.test_basic64.<locals>.kernelr   r`   r   r9   r   r  Nrl  rG   r   r   r   r   r   test_basic64  s
    zTestManyStencils.test_basic64c                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
zbasic induced neighborhood testc                 S   s(   d}t ddD ]}|| | 7 }q|d S Nr   r      r#   r   cumulr&   r   r   r   r     s    z-TestManyStencils.test_basic65.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}d}tddD ]}|| ||  7 }qN|d ||f< q<|S Nr   r   r      r  r   r  r,  r   r    r/  r0  _TestManyStencils__anr  r&   r3  r   r   r4    s    z/TestManyStencils.test_basic65.<locals>.__kernel      N@)r  r   r    r  Nr  rG   r7  r   nhrk   r   r3  r   test_basic65  s    


zTestManyStencils.test_basic65c                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
zbasic const neighborhood testc                 S   s(   d}t ddD ]}|| d 7 }q|d S r  r#   r  r   r   r   r     s    z-TestManyStencils.test_basic66.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}d}tddD ]}|| |d  7 }qN|d ||f< q<|S r  r,  r  r3  r   r   r4  	  s    z/TestManyStencils.test_basic66.<locals>.__kernelr  r  r    r  Nr  r  r   r3  r   test_basic66  s    


zTestManyStencils.test_basic66c                    sP   dd   fdd}t ddd}d}|||}j ||d	|id
 dS )z"basic 2d induced neighborhood testc                 S   s<   d}t ddD ]$}t ddD ]}|| ||f 7 }qq|d S Nr   r   r   2   r#   r   r  r&   r   r   r   r   r   	  s
    z-TestManyStencils.test_basic67.<locals>.kernelc           	   	      s   j | |d  | }tj| jdt|d}td| jd D ]f}td| jd D ]P}d}tddD ],}tddD ]}|| || || f 7 }qpqb|d	 |||f< qPq<|S 
Nr   r   r   r   r   r   r   r  r  r,  	r   r    r/  r0  _TestManyStencils__bnr  r  r&   r   r3  r   r   r4  "	  s    z/TestManyStencils.test_basic67.<locals>.__kernel      i@r      r   r  r   r    r  Nr5  r  r   r3  r   test_basic67	  s    	

zTestManyStencils.test_basic67c                 C   s8   dd }t ddd}| j||ddittgd d	S )
z basic 2d induced 1D neighborhoodc                 S   s,   d}t ddD ]}|| d|f 7 }q|d S )Nr   r  r   r  r#   )r   r  r   r   r   r   r   7	  s    z.TestManyStencils.test_basic67b.<locals>.kernelr  r   r  r    )r  r  N)re   rw   rx   r$  r   r  r  r   r   r   test_basic67b5	  s
    zTestManyStencils.test_basic67bc                    sP   dd   fdd}t ddd}d}|||}j ||d	|id
 dS )z0basic 2d one induced, one cost neighborhood testc                 S   s<   d}t ddD ]$}t ddD ]}|| |df 7 }qq|d S r  r#   r  r   r   r   r   C	  s
    z-TestManyStencils.test_basic68.<locals>.kernelc           	   	      s   j | |d  | }tj| jdt|d}td| jd D ]f}td| jd D ]P}d}tddD ],}tddD ]}|| || |d f 7 }qpqb|d	 |||f< qPq<|S r  r,  r  r3  r   r   r4  M	  s    z/TestManyStencils.test_basic68.<locals>.__kernelr  r   r  r  r    r  Nr5  r  r   r3  r   test_basic68A	  s    


zTestManyStencils.test_basic68c                    sP   dd   fdd}t ddd}d}|||}j ||d	|id
 dS )z#basic 2d two cost neighborhood testc                 S   s8   d}t ddD ] }t ddD ]}|| d 7 }qq|d S )Nr   r   r   r  r6   r  r#   r  r   r   r   r   c	  s
    z-TestManyStencils.test_basic69.<locals>.kernelc           	   	      s   j | |d  | }tj| jdt|d}td| jd D ]f}td| jd D ]P}d}tddD ],}tddD ]}|| |d |d f 7 }qpqb|d	 |||f< qPq<|S r  r,  r  r3  r   r   r4  l	  s    z/TestManyStencils.test_basic69.<locals>.__kernelr  r   r  r  r    r  Nr5  r  r   r3  r   test_basic69a	  s    	

zTestManyStencils.test_basic69c                    sP   dd   fdd}t ddd}d}|||}j ||d	|id
 dS )zneighborhood adding complexityc                 S   sL   d}d}t ddD ]0}|| }t ddD ]}|| ||f | 7 }q(q|d S )Nr   r   r   r   r  r  r#   r   r  zzr&   rQ  r   r   r   r   r   	  s    z-TestManyStencils.test_basic70.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd D ]v}td| jd D ]`}d}d}tddD ]8}|| }	td	dD ] }
|| || ||
 f |	 7 }q|qf|d
 |||f< qPq<|S )Nr   r   r   r   r   r   r   r   r  r  r,  r   r    r/  r0  r  r  r  r  r&   rQ  r   r3  r   r   r4  	  s     z/TestManyStencils.test_basic70.<locals>.__kernelr  r   r  r  r    r  Nr5  r  r   r3  r   test_basic70	  s    

zTestManyStencils.test_basic70c                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
zneighborhood, type changec                 S   s<   d}t ddD ]$}d}|dkr"d}|| | | 7 }q|d S )Nr   r  r           r   r  r#   )r   r  r&   r&  r   r   r   r   	  s    z-TestManyStencils.test_basic71.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]J}d}tddD ](}d}|dkrbd	}|| ||  | 7 }qN|d
 ||f< q<|S )Nr   r   r   r  r  r   r  r  r   r  r,  )r   r    r/  r0  r  r  r&   r&  r3  r   r   r4  	  s    z/TestManyStencils.test_basic71.<locals>.__kernelr  r  r    r  Nr  r  r   r3  r   test_basic71	  s    


zTestManyStencils.test_basic71c                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
z+neighborhood, narrower range than specifiedc                 S   s(   d}t ddD ]}|| | 7 }q|d S )Nr   r\  r  r#   r  r   r   r   r   	  s    z-TestManyStencils.test_basic72.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}d}tddD ]}|| ||  7 }qN|d ||f< q<|S )Nr   r   r   r  r  r\  r  r,  r  r3  r   r   r4  	  s    z/TestManyStencils.test_basic72.<locals>.__kernelr  r  r    r  Nr  r  r   r3  r   test_basic72	  s    


zTestManyStencils.test_basic72c                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
zneighborhood, +ve rangec                 S   s(   d}t ddD ]}|| | 7 }q|d S )Nr   r      r  r#   r  r   r   r   r   	  s    z-TestManyStencils.test_basic73.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]6}d}tddD ]}|| ||  7 }qR|d ||f< q@|S )Nr   r   r   r   r   r  r  r,  r  r3  r   r   r4  	  s    z/TestManyStencils.test_basic73.<locals>.__kernelr  ))r   r   r    r  Nr  r  r   r3  r   test_basic73	  s    


zTestManyStencils.test_basic73c                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
zneighborhood, -ve rangec                 S   s(   d}t ddD ]}|| | 7 }q|d S )Nr   r  r!   r  r#   r  r   r   r   r   	  s    z.TestManyStencils.test_basic73b.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}d}tddD ]}|| ||  7 }qN|d ||f< q<|S )Nr   r   r   r   r  r!   r  r,  r  r3  r   r   r4  
  s    z0TestManyStencils.test_basic73b.<locals>.__kernelr  ))r  r   r    r  Nr  r  r   r3  r   test_basic73b	  s    


zTestManyStencils.test_basic73bc                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
z!neighborhood, -ve->+ve range spanc                 S   s(   d}t ddD ]}|| | 7 }q|d S )Nr   r   r  r  r#   r  r   r   r   r   
  s    z-TestManyStencils.test_basic74.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]6}d}tddD ]}|| ||  7 }qR|d ||f< q@|S )	Nr   r   r   r   r   r   r  r  r,  r  r3  r   r   r4  
  s    z/TestManyStencils.test_basic74.<locals>.__kernelr  ))r   r   r    r  Nr  r  r   r3  r   test_basic74
  s    


zTestManyStencils.test_basic74c                    sH   dd   fdd}t d}d}|||}j ||d|id d	S )
z!neighborhood, -ve->-ve range spanc                 S   s(   d}t ddD ]}|| | 7 }q|d S )Nr   r  r   r  r#   r  r   r   r   r   0
  s    z-TestManyStencils.test_basic75.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}d}tddD ]}|| ||  7 }qN|d ||f< q<|S )Nr   r   r   r   r  r   r  r,  r  r3  r   r   r4  9
  s    z/TestManyStencils.test_basic75.<locals>.__kernelr  ))r  r,   r    r  Nr  r  r   r3  r   test_basic75.
  s    	


zTestManyStencils.test_basic75c                    sP   dd   fdd}t ddd}d}|||}j ||d	|id
 dS )zneighborhood, mixed range spanc                 S   sL   d}d}t ddD ]0}|| }t ddD ]}|| ||f | 7 }q(q|d S )Nr   r   r\  r   r  r#   r  r   r   r   r   L
  s    z-TestManyStencils.test_basic76.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ]v}td| jd D ]`}d}d}tddD ]8}|| }	tddD ] }
|| || ||
 f |	 7 }qqj|d	 |||f< qTq@|S )
Nr   r   r   r`   r   r   r\  r   r  r,  r  r3  r   r   r4  X
  s     z/TestManyStencils.test_basic76.<locals>.__kernelr  r   r  ))r\  r   )r\  r`   r    r  Nr5  r  r   r3  r   test_basic76J
  s    

zTestManyStencils.test_basic76c                    sf   dd   fdd}t ddd}t ddd}d}||||}j |||d	|id
 dS )z neighborhood, two args c                 S   sH   d}t ddD ]0}t ddD ] }|| ||f |||f  7 }qq|d S Nr   r\  r   r  r#   r   r0   r  r&   r   r   r   r   r   o
  s
     z-TestManyStencils.test_basic77.<locals>.kernelc           
   
      s   j | ||d  | |}tj| jdt|d}td| jd D ]z}td| jd D ]d}d}tddD ]@}tddD ]0}	|| || ||	 f ||| ||	 f  7 }qtqf|d |||f< qTq@|S Nr   r   r   r`   r   r\  r  r,  
r   r0   r    r/  r0  r  r  r  r&   r   r3  r   r   r4  x
  s    

z/TestManyStencils.test_basic77.<locals>.__kernelr  r   r  r\  r   r  r    r  Nr5  rG   r7  r   r0   r  rk   r   r3  r   test_basic77m
  s    	zTestManyStencils.test_basic77c                    sf   dd   fdd}t ddd}t ddd}d}||||}j |||d	|id
 dS )z. neighborhood, two args, -ve range, -ve range c                 S   sH   d}t ddD ]0}t ddD ] }|| ||f |||f  7 }qq|d S )Nr   r,   r   r  r#   r  r   r   r   r   
  s
     z-TestManyStencils.test_basic78.<locals>.kernelc           
   
      s   j | ||d  | |}tj| jdt|d}td| jd D ]z}td| jd D ]d}d}tddD ]@}td	d
D ]0}	|| || ||	 f ||| ||	 f  7 }qtqf|d |||f< qTq@|S )Nr   r   r   r   r   r  r  r,   r  r   r  r,  r  r3  r   r   r4  
  s    

z/TestManyStencils.test_basic78.<locals>.__kernel     r@r  r  )r  r\  )r  r,   r    r  Nr5  r  r   r3  r   test_basic78
  s    	zTestManyStencils.test_basic78c                    sf   dd   fdd}t ddd}t ddd}d}||||}j |||d	|id
 dS )z. neighborhood, two args, -ve range, +ve range c                 S   sH   d}t ddD ]0}t ddD ] }|| ||f |||f  7 }qq|d S )Nr   r  r,   r-   r   r  r#   r  r   r   r   r   
  s
     z.TestManyStencils.test_basic78b.<locals>.kernelc           
   
      s   j | ||d  | |}tj| jdt|d}td| jd d D ]z}td| jd D ]d}d}tddD ]@}td	d
D ]0}	|| || ||	 f ||| ||	 f  7 }qxqj|d |||f< qXqD|S )Nr   r   r   r   	   r  r  r,   r-   r   r  r,  r  r3  r   r   r4  
  s    

z0TestManyStencils.test_basic78b.<locals>.__kernelr  r  r  )r  )r-   r  r    r  Nr5  r  r   r3  r   test_basic78b
  s    	zTestManyStencils.test_basic78bc                 C   sZ   dd }t ddd}t dddd}| jtttd}| j|||dd	i|d
 dS )z% neighborhood, two incompatible args c                 S   sH   d}t ddD ]0}t ddD ] }|| ||f |||f  7 }qq|d S r  r#   r  r   r   r   r   
  s
     z-TestManyStencils.test_basic79.<locals>.kernelr  r   r  r-   r  r    r  r  N)re   rw   rx   r(  r   r$  r  r   r   r   test_basic79
  s    zTestManyStencils.test_basic79c                    sX   dd   fdd}t ddd}d}d	}||||}j |||d
|id dS )z neighborhood, type change c                 S   s@   d}t ddD ](}t ddD ]}|| ||f | 7 }qq|d S r  r#   r  r   r   r   r   
  s
    z-TestManyStencils.test_basic80.<locals>.kernelc           
   	      s   j | ||d  | |}tj| jdt|d}td| jd D ]j}td| jd D ]T}d}tddD ]0}tddD ] }	|| || ||	 f | 7 }qtqf|d |||f< qTq@|S r  r,  r  r3  r   r   r4  
  s    
 z/TestManyStencils.test_basic80.<locals>.__kernelr  r   r  y              (@r  r    r  Nr5  r  r   r3  r   test_basic80
  s    	zTestManyStencils.test_basic80c                 C   sR   dd }t ddd}|d  }| jtttd}| j|||dd	i|d
 dS )z1 neighborhood, dimensionally incompatible arrays c                 S   sD   d}t ddD ],}t ddD ]}|| ||f ||  7 }qq|d S r  r#   r  r   r   r   r      s
    z-TestManyStencils.test_basic81.<locals>.kernelr  r   r  r   r  r    r  r  N)re   rw   rx   copyr(  r   r   r$  r  r   r   r   test_basic81
  s    
zTestManyStencils.test_basic81c                    s^   dd   fdd}t ddd}| }d}||||}j ||||d	d
d dS )z% neighborhood, with standard_indexingc                 S   sD   d}t ddD ],}t ddD ]}|| ||f |d  7 }qq|d S Nr   r\  r   r   r`   r  r#   r  r   r   r   r     s
    z-TestManyStencils.test_basic82.<locals>.kernelc           
   	      s   j | ||d  | |}tj| jdt|d}td| jd D ]n}td| jd D ]X}d}tddD ]4}tddD ]$}	|| || ||	 f |d  7 }qtqf|d |||f< qTq@|S )	Nr   r   r   r`   r   r\  r  r  r,  r  r3  r   r   r4    s    
$z/TestManyStencils.test_basic82.<locals>.__kernelr  r   r  r  r0   )r    r9   r  Nre   rw   rx   r  r#  r  r   r3  r   test_basic82  s    	zTestManyStencils.test_basic82c              	      sz   dd  t ddd}| } fdd}t ddd}| }d}||||}j ||||d	d
dd dS )z. neighborhood, with standard_indexing and cvalc                 S   sD   d}t ddD ],}t ddD ]}|| ||f |d  7 }qq|d S r  r#   r  r   r   r   r   2  s
    z-TestManyStencils.test_basic83.<locals>.kernelr  r   r  c           
   	      s   j | ||d  | |}tj| jdt|d}td| jd D ]n}td| jd D ]X}d}tddD ]4}tddD ]$}	|| || ||	 f |d  7 }qtqf|d	 |||f< qTq@|S )
Nr         ?r   r`   r   r   r\  r  r  r,  r  r3  r   r   r4  >  s    
$z/TestManyStencils.test_basic83.<locals>.__kernelr  r0   r	  r    r9   r*   r  Nr  )rG   r   r0   r7  r  rk   r   r3  r   test_basic830  s    zTestManyStencils.test_basic83c                    sD   dd   fdd}t ddd}||d} || dS )	z kernel calls njit c                 S   s   | d t | d  S Nr6   r   )r=   r   r   r   r   r   V  s    z-TestManyStencils.test_basic84.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ]P}td| jd D ]:}| |d |d f t| |d |d f  |||f< qTq@|S r+  )r*  re   r-  r)  r   r$   r=   py_funcr.  r3  r   r   r4  [  s    z/TestManyStencils.test_basic84.<locals>.__kernelr  r   r  Nr5  r6  r   r3  r   test_basic84T  s
    

zTestManyStencils.test_basic84c                    sD   dd   fdd}t ddd}||d} || dS )	z! kernel calls njit(parallel=True)c                 S   s   | d t | d  S r  )r@   r   r   r   r   r   k  s    z-TestManyStencils.test_basic85.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ]P}td| jd D ]:}| |d |d f t| |d |d f  |||f< qTq@|S r+  )r*  re   r-  r)  r   r$   r@   r  r.  r3  r   r   r4  q  s    z/TestManyStencils.test_basic85.<locals>.__kernelr  r   r  Nr5  r6  r   r3  r   test_basic85i  s
    

zTestManyStencils.test_basic85c                 C   s8   dd }t ddd}| j||ddittgd dS )	z bad kwarg c                 S   s   | d S r5   r   r   r   r   r   r     s    z-TestManyStencils.test_basic86.<locals>.kernelr  r   r  badr  N)re   rw   rx   r$  r  r   r  r   r   r   test_basic86  s
    zTestManyStencils.test_basic86c                    sD   dd   fdd}t ddd}||d} || dS )	z reserved arg name in use c                 S   s   | d S r5   r   )__sentinel__r   r   r   r     s    z-TestManyStencils.test_basic87.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]6}td| jd D ] }| |d |d f |||f< qPq<|S r+  r,  )r  r    r/  r0  r1  r2  r3  r   r   r4    s     z/TestManyStencils.test_basic87.<locals>.__kernelr  r   r  Nr5  r6  r   r3  r   test_basic87  s
    	
zTestManyStencils.test_basic87c                 C   sB   dd }t ddd}| jtttd}| j||di |d d	S )
z use of reserved word c                 S   s   || d  S r:  r   )r   rv   r   r   r   r     s    z-TestManyStencils.test_basic88.<locals>.kernelr   r`   r   r  r(   r  Nr  r  r   r   r   test_basic88  s    zTestManyStencils.test_basic88c                    sD   dd   fdd}t ddd}||d} || dS )	z basic multiple returnc                 S   s,   | d dkrdS | d dk r$| d S dS d S )Nr   r   rt  rZ  rp  r6   r   r   r   r   r   r   r     s
    z-TestManyStencils.test_basic89.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]}td| jd D ]l}| |d |d f dkr~d|||f< qT| |d |d f dk r| |d |d f |||f< qTd	|||f< qTq@|S )
Nr   r   r   r   r`   r   rt  rp  r   r,  r.  r3  r   r   r4    s    z/TestManyStencils.test_basic89.<locals>.__kernelr  r   r  Nr5  r6  r   r3  r   test_basic89  s
    

zTestManyStencils.test_basic89c              	      s`   dd   fdd}t ddd}| }d}||||}j ||||d	d
dd dS )z@ neighborhood, with standard_indexing and cval, multiple returnsc                 S   s\   d}t ddD ],}t ddD ]}|| ||f |d  7 }qq|d }|dkrT|d S |S d S )Nr   r\  r   r  r  r  r(   r#   )r   r0   r  r&   r   resr   r   r   r     s    z-TestManyStencils.test_basic90.<locals>.kernelc              	      s   j | ||d  | |}tj| jdt|d}td| jd D ]}td| jd D ]v}d}tddD ]4}tddD ]$}	|| || ||	 f |d  7 }qtqf|d	 }
|
d
kr|
d |||f< qT|
|||f< qTq@|S )Nr   r	  r   r`   r   r   r\  r  r  r  r(   r,  )r   r0   r    r/  r0  r  r  r  r&   r   r  r3  r   r   r4    s    
$z/TestManyStencils.test_basic90.<locals>.__kernelr  r   r  r  r0   r	  r
  r  Nr  r  r   r3  r   test_basic90  s    zTestManyStencils.test_basic90c                    sD   dd   fdd}t ddd}||d} || dS )	z? Issue #3454, const(int) == const(int) evaluating incorrectly. c                 S   s   d}ddkrd}| d | S )Nr   r-   r6   r   r/   r   r   r   r     s    z-TestManyStencils.test_basic91.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]J}td| jd D ]4}d}ddkrdd}| |d |d f | |||f< qPq<|S r  r,  )r   r    r/  r0  r1  r2  r0   r3  r   r   r4    s    $z/TestManyStencils.test_basic91.<locals>.__kernelr  r   r  Nr5  r6  r   r3  r   test_basic91  s
    
zTestManyStencils.test_basic91c                    sV   dd   fdd}t t dd ddt j}||d	} || d	S )
7 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	 A S 
NrF  r   r@  r   r6   r   rB  r   rD  r   r   r   r   r   r     s    z-TestManyStencils.test_basic92.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]}td| jd d D ]}| |d |d f | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A |||f< qXq@|S r<  r,  r.  r3  r   r   r4    s.    	z/TestManyStencils.test_basic92.<locals>.__kernelr  r-   r   r   Nre   r  rw   rx   rv  r   r#  rG   r7  r|   rk   r   r3  r   test_basic92	  s
    $
zTestManyStencils.test_basic92c                    s^   dd   fdd}t t dd ddt j}||d	}j ||d
did d	S )r  c                 S   sH   | d | d A | d A | d A | d A | d A | d A | d A | d	 A S r  r   r   r   r   r   r   *  s    z-TestManyStencils.test_basic93.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]}td| jd d D ]}| |d |d f | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A | |d |d f A |||f< qXq@|S )Nr   r   r   r   r   r,  r.  r3  r   r   r4  1  s.    	z/TestManyStencils.test_basic93.<locals>.__kernelr  r-   r   r   Nr*   Tr  r  r  r   r3  r   test_basic93(  s
    $
zTestManyStencils.test_basic93c                    sV   dd   fdd}t jdt jddd}d	}|||}j ||d
|id dS )z" Issue #3528. Support for slices. c                 S   s   t | ddddf S Nr   r-   re   medianr   r   r   r   r   H  s    z-TestManyStencils.test_basic94.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ]P}td| jd d D ]6}t| |d |d |d |d f |||f< qXq@|S Nr   r   r   r   r   r-   r*  re   r-  r)  r   r$   r!  r   r    r/  r0  r  r  r3  r   r   r4  M  s     z/TestManyStencils.test_basic94.<locals>.__kernelr  r   r   r   r@  r@  r    r  N)re   rw   uint32rx   r#  r  r   r3  r   test_basic94F  s    


zTestManyStencils.test_basic94znot yet supportedc                 C   s   dd }dS )z  Slice, calculate neighborhood. c                 S   s   t | ddddf S )Nr   r-   r\  r   r   r   r   r   r   r   `  s    z-TestManyStencils.test_basic95.<locals>.kernelNr   r  r   r   r   test_basic95]  s    zTestManyStencils.test_basic95c                    sN   dd   fdd}t jdt jd}d}|||}j ||d|id	 d
S )z 1D slice. c                 S   s   t | dd S r  r   r   r   r   r   r   f  s    z-TestManyStencils.test_basic96.<locals>.kernelc                    sj   j | |d  | }tj| jdt|d}td| jd d D ]$}t| |d |d  ||f< q@|S r"  r#  )r   r    r/  r0  r  r3  r   r   r4  k  s    "z/TestManyStencils.test_basic96.<locals>.__kernelr  r   )r@  r    r  N)re   rw   r&  r#  r  r   r3  r   test_basic96d  s    

zTestManyStencils.test_basic96c                 C   s   dd }dS )z 2D slice and index. c                 S   s   t | dddf S )Nr   r-   r`   r   r   r   r   r   r   |  s    z-TestManyStencils.test_basic97.<locals>.kernelNr   r  r   r   r   test_basic97y  s    zTestManyStencils.test_basic97c                    sx   t jt jt j tdtd fD ]R dd  fdd}t dd}d}|||}j||| d	d
 q dS )r   r   c                 S   s   | d S r5   r   r   r   r   r   r     s    z-TestManyStencils.test_basic98.<locals>.kernelc                    s   j | |d | }tj| j t|d}td| jd d D ]:}td| jd d D ] }| |d |d f |||f< qXq@|S )Nr   r   r   r   r,  r$  r  r   r   r4    s     z/TestManyStencils.test_basic98.<locals>.__kernelg      @)r-   r`   r%  )r    r*   r  N)re   r   r   r   rw   rx   r#  r  r   r  r   test_basic98  s    $


zTestManyStencils.test_basic98)tro   rp   rq   rF   r#  r$  r(  r*  r8  r;  r=  r>  r?  rA  rC  rE  rG  rH  rI  rJ  rK  rL  rO  rS  rU  rW  rY  r[  r]  r^  r_  rg  rh  rk  rm  rq  rs  rw  rz  r{  r}  unittest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  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r(  r)  r*  r+  rr   r   r   rI   r   r     s    f
		


		




 
 "!#    $	)

r   __main__))numpyre   
contextlibr   rU   r   r   Z
numba.corer   r   Znumba.core.compilerr   r   Znumba.core.cpur	   Znumba.tests.supportr
   r   r   Znumba.core.errorsr   r   r   r,  r   r   r'   r.   r1   r4   r8   r:   r;   r=   r@   ZTestCaserA   rs   r   ro   mainr   r   r   r   <module>   sz   









7   z                    ,
