o
    Rel                    @   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se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re(  dS 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   $   d| d | d  | d  | d   S N      ?r      r   r   r   r   r    ar   r   c/var/www/html/SPIRAL.web.tool/spiral_venv/lib/python3.10/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,       r2   c                 C   sD   || d | d  | d  | d  |d  |d  |d  |d   S Nr   r   r   r   r   )r   r1   wr   r   r   !stencil_multiple_input_kernel_var2   r3   r6   c                 C   s   |d r| d S |d S Nr   r   r   )r   r1   fr   r   r   %stencil_multiple_input_mixed_types_2d8   s   r:   )r1   )standard_indexingc                 C   s    | d |d  | d |d   S )Nr   r   r   r   r0   r   r   r   !stencil_with_standard_indexing_1d=   s    r<   c                 C   s@   | d |d  | d |d   | d |d   | d |d   S r4   r   r0   r   r   r   !stencil_with_standard_indexing_2dB   s
   r=   c                 C      | d S Nr   r   r   r   r   r   addone_njitH      r@   Tparallelc                 C   r>   r?   r   r   r   r   r   addone_pjitN   rA   rD   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superrE   __init__)selfargs	__class__r   r   rJ   X   s   zTestStencilBase.__init__c                 C   s   t tjjtjj||d |i S N)r   r   
cpu_targettyping_contexttarget_context)rK   funcsigflagsr   r   r   _compile_this_   s   
zTestStencilBase._compile_thisc                 K   s0   t  }d|_|s
dn|}t||_| |||S rF   )r   rH   r	   auto_parallelrV   )rK   rS   rT   kwsrU   optionsr   r   r   compile_paralleld   s
   
z TestStencilBase.compile_parallelc                 C   s   | j ||| jdS )N)rU   )rV   rG   )rK   rS   rT   r   r   r   compile_njitk      zTestStencilBase.compile_njitc                 O   s2   t dd |D }| ||}| ||}||fS )Nc                 S      g | ]}t |qS r   numbatypeof.0xr   r   r   
<listcomp>o       z/TestStencilBase.compile_all.<locals>.<listcomp>)tuplerZ   r[   )rK   pyfuncrL   kwargsrT   cpfunccfuncr   r   r   compile_alln   s   zTestStencilBase.compile_allc           
      G   s   | j |g|R  \}}|| }|| }|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)rk   entry_pointnptestingassert_almost_equalassertInlibraryget_llvm_str)
rK   no_stencil_funcrg   rL   rj   ri   expected	py_outputnjit_outputparfor_outputr   r   r   checkv   s   

zTestStencilBase.check)__name__
__module____qualname___numba_parallel_test_rJ   rV   rZ   r[   rk   r|   __classcell__r   r   rM   r   rE   S   s    rE   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                       t t| j|i | d S rO   )rI   r   rJ   rK   rL   rh   rM   r   r   rJ         zTestStencil.__init__c                 C   <   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)rq   arangereshapezerosr   nABr   r   r   test_with_out   s   z0TestStencil.test_stencil1.<locals>.test_with_outc                 S   $   t | d | | f}t|}|S Nr.   )rq   r   r   r   r   r   r   r   test_without_out      z3TestStencil.test_stencil1.<locals>.test_without_outc                 S      t | d | | f}t | d | | f}td| d D ]2}td| d D ](}d|||d f ||d |f  |||d f  ||d |f   |||f< q(q|S Nr.   r   r   rq   r   r   r   r%   r   r   r   r'   jr   r   r   test_impl_seq   s   z0TestStencil.test_stencil1.<locals>.test_impl_seqd   Nr|   )rK   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 rO   )rq   r   r(   r   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   rq   r   r   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   r5   r&   r'   r   r   r   r(      s   
DTestStencil.test_stencil2.<locals>.test_seq.<locals>.stencil2_kernelr    rq   r   r_   r   )r   r5   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   r5   r   r   r'   r   r   r   r      s
   

&r   rl   rm   ro   c                 S   8   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!   index_offsetsr   r   r5   offsetr   r(   r   r   r   r   r      s   
r   c                 S   r   )Nc                 S   s    dt | | d |d   S )Nr#   r   r.   )rq   r   )r   r5   r   r   r   r(          r   r   r   r   r   r   r   r      s   
N)r|   rZ   r   intprp   rq   rr   rs   rt   ru   rv   )	rK   r   r   r   r5   ri   rx   r{   r   r   r   r   test_stencil2   s:   
	zTestStencil.test_stencil2c                 C   s   dd }t |}t |dd}d}||}||}||}| |d dko)|d dk | |d dko8|d dk | |d dkoG|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   r   r   )rq   r   r   r/   r   r   r   r   r     r   z+TestStencil.test_stencil3.<locals>.test_seqTrB   r   r8   r)   )   r   N)r   
assertTrue)rK   r   	test_njittest_parr   seq_resnjit_respar_resr   r   r   test_stencil3  s   "zTestStencil.test_stencil3c                 C   &   dd }dd }d}|  ||| dS )z1Tests standard indexing with a 1d array.
        c                 S   s    t | }ddg}t||}|S )N      @      @)rq   r   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   rq   r   r   r%   )r   r   r   r   r'   r   r   r   r   !  s   

*zDTestStencil.test_stencil_standard_indexing_1d.<locals>.test_impl_seqr   Nr   rK   r   r   r   r   r   r   !test_stencil_standard_indexing_1d  s   	z-TestStencil.test_stencil_standard_indexing_1dc                 C   r   )zLTests standard indexing with a 2d array and multiple stencil calls.
        c                 S   s:   t | d | | f}t d}t||}t||}|S )Nr.   rl   rl   )rq   r   r   onesr=   )r   r   r   r   Dr   r   r   r   1  s
   


z?TestStencil.test_stencil_standard_indexing_2d.<locals>.test_seqc                 S   sv  t | d | | f}t d}t | d | | f}t | d | | f}td| d D ]@}td| d D ]6}|||d f |d  ||d |f |d   |||d f |d   ||d |f |d   |||f< q9q0td| d D ]@}td| d D ]6}|||d f |d  ||d |f |d   |||d f |d   ||d |f |d   |||f< qqx|S )Nr.   r   r   r   r   r   r   )rq   r   r   r   r   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   )rq   r   r   r2   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 ]R}td| d D ]H}d|||d f ||d |f  |||d f  ||d |f  |||d f  ||d |f  |||d f  ||d |f   |||f< q4q+|S r   r   )r   r   r   r   r'   r   r   r   r   r   U  s,   z?TestStencil.test_stencil_multiple_inputs.<locals>.test_impl_seqrl   c                 S   sD   t | d | | f}t | d | | f}d}t|||}|S )Nr.   r   )rq   r   r   r6   )r   r   r   r5   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 ]}|||f rH|||f n|||f |||f< q:q3|S )Nr.   dtyper   )rq   r   r   eyebool_r   r   r%   )r   r   r   SOr'   r   r   r   r   r   p  s    .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   )rq   r   r   r   r   r:   )r   r   r   r   r   r   r   r   r   z  s
    z6TestStencil.test_stencil_mixed_types.<locals>.test_seqrl   r   )rK   r   r   r   r   r   r   test_stencil_mixed_typesn  s   
z$TestStencil.test_stencil_mixed_typesc                 C   r   )	z&Tests 2D numba.stencil calls.
        c                 S   sJ   t | d | | f}t | d | | f}tdd ||d |S )Nr.   c                 S   r   r   r   r   r   r   r   <lambda>  s    zCTestStencil.test_stencil_call.<locals>.test_impl1.<locals>.<lambda>r   rq   r   r   r   r_   r   r   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   r   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   r   r   r   r   r   r   r   r     s    z4TestStencil.test_stencil_call.<locals>.test_impl_seqr   Nr   )rK   r   r   r   r   r   r   r   test_stencil_call  s   		zTestStencil.test_stencil_callc                 C   r   )z&Tests 1D numba.stencil calls.
        c                 S   s.   t | }t | }tdd ||d |S )Nc                 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>r   rq   r   r   r_   r   r   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   rK   r   r   r   r   r   r   test_stencil_call_1D  s   z TestStencil.test_stencil_call_1Dc                 C   sx  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 d   n1 sw   Y  | 	dt
|j | ttf}t|d W d   n1 sw   Y  | 	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   4   t | }t | }d}tdd |||d |S )Nr   c                 S   s   d| |  | d  | |   S Nr#   r   r   r   cr   r   r   r     s    zITestStencil.test_stencil_call_const.<locals>.test_impl1.<locals>.<lambda>r   r   r   r   r   r   r   r   r   r     s
   

z7TestStencil.test_stencil_call_const.<locals>.test_impl1c                 S   r   )Nr.   c                 S   s$   d| d|  | d  | |d    S Nr#   r   r   r   r   r   r   r   r     s   $ zITestStencil.test_stencil_call_const.<locals>.test_impl2.<locals>.<lambda>r   r   r   r   r   r   r        

z7TestStencil.test_stencil_call_const.<locals>.test_impl2c                 S   r   )Nr.   c                 S   s&   d| | d  | d  | |d    S r   r   r   r   r   r   r        & zITestStencil.test_stencil_call_const.<locals>.test_impl3.<locals>.<lambda>r   r   r   r   r   r   
test_impl3  r   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>r   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   rl   rm   r   NzDstencil kernel index is not constant, 'neighborhood' option required)rZ   r   r   rp   rq   rr   rs   assertRaisesr   rt   str	exceptionr   r   )rK   r   r   r   r   r   r   cpfunc1cpfunc2cpfunc3cpfunc4rx   parfor_output1parfor_output2parfor_output3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   r   r   r   r   r   r   r   r     r   zJTestStencil.test_stencil_parallel_off.<locals>.test_impl.<locals>.<lambda>)r_   r   )r   r   r   r   r     r\   z8TestStencil.test_stencil_parallel_off.<locals>.test_implNFr   ro   )rZ   r_   float64assertNotInru   rv   )rK   r   ri   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.
        TrB   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   )rq   r   r   intr%   )r   r   r'   r   r   r   r   "  s   z7TestStencil.test_stencil_nested1.<locals>.test_impl_seq
   N)r   rq   r   rr   assert_equalr   r   r   r   test_stencil_nested1  s
   

z TestStencil.test_stencil_nested1c                    s  ddg}dd }|D ]L}t j||d  fdd}tdd	}t|d
}||dddf< t|} ||d tj|| | 	|}|D ]}	|	
 }
tj|
| qHq
t j|dd  fdd}tdd	}t|}| t} ||d W d   n1 sw   Y  d}| |t|j | j| jfD ](}z
||d W td ttfy } z| |t| W Y d}~qd}~ww dS )z/ Issue #3518, out kwarg did not work with cval.   r   c                 S      | d | d  S Nr8   r   r   r   r   r   r   kernel1     z1TestStencil.test_out_kwarg_w_cval.<locals>.kernelr*   c                     *   t dd} t | } | |d |S N   rl   r   r   rq   r   r   	ones_liker   ret
stencil_fnr   r   wrapped7     
z2TestStencil.test_out_kwarg_w_cval.<locals>.wrappedr  r  r"   r   Nr                 ?c                     r   r   r  r  r  r   r   r	  N  r
  z-cval type does not match stencil return type.r   zExpected error was not raised)r_   r   rq   r   r   	full_liker  rr   rs   rk   rp   r   r   rt   r   r   r[   rZ   r   AssertionError)rK   
const_valsr   	const_valr	  r   rx   r  implsimplgotr   msgcompilerr   r  r   test_out_kwarg_w_cval+  sD   


z!TestStencil.test_out_kwarg_w_cvalc           
         s   t jt jt j tdtd fD ]P}dd }tj||d  fdd}t dd}t |d	}||d
ddf< t 	|} ||d t j
|| | |}|D ]}| }	t j
|	| qRqdS )U Test issue #7286 where the cval is a np attr/string-based numerical
        constantinfc                 S   r   r   r   r   r   r   r   r   h  r   z9TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.kernelr*   c                     r   )N      (@r  r   r  r  r  r   r   r	  m  r
  z:TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.wrappedr  r  r"   r   Nr   )rq   nanr  floatr_   r   r   r   r  r  rr   rs   rk   rp   )
rK   r+   r   r	  r   rx   r  r  r  r  r   r  r   test_out_kwarg_w_cval_np_attrc  s    $

z)TestStencil.test_out_kwarg_w_cval_np_attr)r}   r~   r   rJ   skip_unsupportedr   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   rM   r   r      s<    

T



"

 

O


7r   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                    r   rO   )rI   r  rJ   r   rM   r   r   rJ     r   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d*i || }W d   n1 sZw   Y  t|dkrlfdd}n"t|dkryfdd}nt|dkrfdd}ntdt| tdd |D }d}||
d | 	||}|j
| }W d   n1 sw   Y  d}||d | ||}|j
| }W d   n1 sw   Y  |rtd| td| td| z|	stjj||dd | |j|j W n* ty, } zddt|t|f f tdt|  W Y d}~nd}~ww z|
sBtjj||dd | |j|j W n* tym } zddt|t|f f tdt|  W Y d}~nd}~ww z0|stjj||dd | |j|j z| d|j  W n ty   d}t|w W n* ty } zddt|t|f f td t|  W Y d}~nd}~ww |rtd!  rd"d  D }td#| rd$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.
        rY   expected_exceptionFNc              
   3       zd V  W nI t yO } z=| d ur.t| dr| n| g}d}|D ]	}|t||O }q |s- n|dt|t|f f W Y d }~d S W Y d }~d S d }~ww | d ur[ | d S d S N__iter__F%s: %s	Exceptionhasattr
isinstanceappendtyper   extyusecaser   lextyfoundexshould_failshould_not_failr   r   errorhandler  .   
z=TestManyStencils.check_against_expected.<locals>.errorhandlerr   r   parforfunc_or_mode@stencilr   c                        | S rO   r   arg0stencil_func_implr   r   wrap_stencil     z=TestManyStencils.check_against_expected.<locals>.wrap_stencilr.   c                    
    | |S rO   r   r9  arg1r:  r   r   r<       
rl   c                        | ||S rO   r   r9  r@  arg2r:  r   r   r<       +Up to 3 arguments can be provided, found %sc                 S   r]   r   r^   ra   r   r   r   rd     re   z;TestManyStencils.check_against_expected.<locals>.<listcomp>parforsz
@stencil_output:
z
njit_output:
z
parfor_output:
rm   r"  z@stencil failed: %sz@njit failed: %sro   z*Could not find `@do_scheduling` in LLVM IRz@njit(parallel=True) failed: %sz

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

r   ra   r   r   r   rd   &  
    NThe following implementations should not have raised an exception but did:
%s
Errors were:

%sNNr   )getdictr   r&  updater   r   
ValueErrorrf   r[   rp   rZ   printrq   rr   rs   assertEqualr   r$  r'  r(  r   rt   ru   rv   r  RuntimeErrorjoin)rK   rg   rx   rL   rh   rY   r  DEBUG_OUTPUTr2  
stencil_exnjit_ex	parfor_exstencil_argsstencilfunc_outputr<  rT   rz   wrapped_cfuncr{   wrapped_cpfuncr   r  r  errsstr1str2r   r0  r1  r;  r   check_against_expected  s   








z'TestManyStencils.check_against_expectedc                    s  | dt }| d}g  g td fdd	}t|tr,|d }|d }|d }	n|}|}|}	d	|i}
|
| ||d
 tdi |
|  W d   n1 sVw   Y  t|dkrhfdd}n"t|dkrufdd}nt|dkrfdd}ntdt| tdd |D }||d | 	||}|j
|  W d   n1 sw   Y  ||	d | ||}|j
|  W d   n1 sw   Y   rdd  D }td| rd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.
        rY   r  Nc              
   3   r  r   r#  r)  r/  r   r   r2  E  r3  z7TestManyStencils.check_exceptions.<locals>.errorhandlerr   r   r4  r5  r6  r   c                    r7  rO   r   r8  r:  r   r   r<  l  r=  z7TestManyStencils.check_exceptions.<locals>.wrap_stencilr.   c                    r>  rO   r   r?  r:  r   r   r<  o  rA  rl   c                    rB  rO   r   rC  r:  r   r   r<  r  rE  rF  c                 S   r]   r   r^   ra   r   r   r   rd   y  re   z5TestManyStencils.check_exceptions.<locals>.<listcomp>rG  c                 S   rH  rI  r   ra   r   r   r   rd     rK  rL  c                 S   rM  rN  r   ra   r   r   r   rd     rO  rP  c                 S   rH  rQ  r   ra   r   r   r   rd     rR  rS  rT  rU  r   )rV  rW  r   r&  rX  r   r   rY  rf   r[   rp   rZ   r\  r]  )rK   rg   rL   rh   rY   r  r2  r_  r`  ra  rb  r<  rT   rd  re  r  r  rf  rg  rh  r   ri  r   check_exceptions-  sn   





z!TestManyStencils.check_exceptionsc                 K   sD   t  }d |d< d |d< d |d< d |d< | D ]\}}|||< q|S )N	pyStencilr   r   r4  )rW  items)rK   rh   r   kvr   r   r   exception_dict  s   
zTestManyStencils.exception_dictc                 O   sf   | d}|d j}|d urt|t|krtd|dd  D ]}t|dr0||jkr0tdq d S )Nr!   r   zInvalid neighborhood suppliedr   shapez#Input stencil arrays do not commute)rV  rq  r   rY  r%  )rK   rL   rh   r!   
init_shaperc   r   r   r   check_stencil_arrays  s   



z%TestManyStencils.check_stencil_arraysc                    D   dd   fdd}t ddd}||d} || dS )	z	rel indexc                 S      | d S r7   r   r   r   r   r   r     r=  z-TestManyStencils.test_basic00.<locals>.kernelc                    x   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}| |d |d f |||f< q(q|S Nr    r   r   r   rs  rq   fullrq  r(  r%   r   r!   _TestManyStencils__retdtype_TestManyStencils__b0_TestManyStencils__b_TestManyStencils__ar   rK   r   r   __kernel     z/TestManyStencils.test_basic00.<locals>.__kernelr  rl   r   Nrq   r   r   rj  rK   _TestManyStencils__kernelr   rx   r   r  r   test_basic00  
   

zTestManyStencils.test_basic00c                    rt  )	rel index add constc                 S   ru  Nr   r   r   r   r   r   r     r=  z-TestManyStencils.test_basic01.<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 |||f< q*q |S rw  rx  rz  r  r   r   r       z/TestManyStencils.test_basic01.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic01  r  zTestManyStencils.test_basic01c                    rt  )	r  c                 S   ru  )Nr   r   r   r   r   r   r     r=  z-TestManyStencils.test_basic02.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}| |d |d f |||f< q(q|S Nr    r   r   r   r   rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic02.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic02  r  zTestManyStencils.test_basic02c                    rt  )	r  c                 S   ru  )Nr   r   r   r   r   r   r     r=  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< q*q|S rw  rx  rz  r  r   r   r       z/TestManyStencils.test_basic03.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic03  r  zTestManyStencils.test_basic03c                    rt  )	r  c                 S   ru  )Nr   r   r   r   r   r   r     r=  z-TestManyStencils.test_basic04.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}| |d |d f |||f< q(q|S r  rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic04.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic04   r  zTestManyStencils.test_basic04c                    rt  )	r  c                 S   ru  )Nr   r   r   r   r   r   r   r     r=  z-TestManyStencils.test_basic05.<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 |||f< q*q |S r  rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic05.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic05  r  zTestManyStencils.test_basic05c                    rt  )	r  c                 S   ru  )Nr   r   r   r   r   r   r   r   .  r=  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< q*q|S r  rx  rz  r  r   r   r  4  r  z/TestManyStencils.test_basic06.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic06,  r  zTestManyStencils.test_basic06c                    rt  )	r  c                 S   ru  )Nr   r   r   r   r   r   r   r   D  r=  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< q,q |S rw  rx  rz  r  r   r   r  J     z/TestManyStencils.test_basic07.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic07B  r  zTestManyStencils.test_basic07c                    rt  )	r  c                 S   ru  )Nr   r   r   r   r   r   r   r   Z  r=  z-TestManyStencils.test_basic08.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}| |d |d f |||f< q(q|S r  rx  rz  r  r   r   r  `  r  z/TestManyStencils.test_basic08.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic08X  r  zTestManyStencils.test_basic08c                    rt  )	r  c                 S   ru  )Nr,   r   r   r   r   r   r   p  r=  z-TestManyStencils.test_basic09.<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 |||f< q*q |S )Nr    r   r   r   r.   r-   rx  rz  r  r   r   r  v  r  z/TestManyStencils.test_basic09.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic09n  r  zTestManyStencils.test_basic09c                    rt  )	r  c                 S      | d | d  S r   r   r   r   r   r   r     r   z-TestManyStencils.test_basic10.<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 | |d |d f  |||f< q*q|S rw  rx  rz  r  r   r   r       2z/TestManyStencils.test_basic10.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic10  
   

zTestManyStencils.test_basic10c                    rt  )	r  c                 S   r  )Nr   r   r   r   r   r   r   r     r   z-TestManyStencils.test_basic11.<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 | |d |d f  |||f< q*q|S r  rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic11.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic11  r  zTestManyStencils.test_basic11c                    rt  )	r  c                 S   r  )Nr  r  r   r   r   r   r   r     r   z-TestManyStencils.test_basic12.<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  |||f< q,q |S r  rx  rz  r  r   r   r       2z/TestManyStencils.test_basic12.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic12  r  zTestManyStencils.test_basic12c                    rt  )	r  c                 S   r  )Nr  r  r   r   r   r   r   r     r   z-TestManyStencils.test_basic13.<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  |||f< q,q |S r  rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic13.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic13  r  zTestManyStencils.test_basic13c                    rt  )	!rel index add domain change constc                 S      | d d S )Nr8   r  r   r   r   r   r   r     rE  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< q(q|S Nr    r   r   r   r  rx  rz  r  r   r   r    s   "z/TestManyStencils.test_basic14.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic14  r  zTestManyStencils.test_basic14c                    rt  )	r  c                 S   s   d}| d | S )Nr  r8   r   r   tr   r   r   r        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< q(q|S r  rx  r   r!   r{  r|  r}  r~  r  r  r   r   r    s   "z0TestManyStencils.test_basic14b.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic14b  
   
zTestManyStencils.test_basic14bc                    rt  )	ztwo rel index, add constc                 S      | d | d  d S )Nr8   r   r)   r   r   r   r   r   r        z-TestManyStencils.test_basic15.<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 | |d |d f  d |||f< q*q|S Nr    r   r   r   r)   rx  rz  r  r   r   r       z/TestManyStencils.test_basic15.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic15  
   
zTestManyStencils.test_basic15c                    rt  )	&two rel index boundary test, add constc                 S   r  )Nr8   )r.   r   r)   r   r   r   r   r   r     r  z-TestManyStencils.test_basic17.<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 | |d |d f  d |||f< q*q|S )Nr    r   r   r   r.   r)   rx  rz  r  r   r   r  !  r  z/TestManyStencils.test_basic17.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic17  r  zTestManyStencils.test_basic17c                    rt  )	r  c                 S   r  )Nr8   r-   r   r)   r   r   r   r   r   r   2  r  z-TestManyStencils.test_basic18.<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 |d f  d |||f< q(q|S )Nr    r   r   r   r.   r-   r)   rx  rz  r  r   r   r  7     z/TestManyStencils.test_basic18.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic180  r  zTestManyStencils.test_basic18c                    rt  )	r  c                 S   r  )Nr8   r   rl   r)   r   r   r   r   r   r   H  r  z-TestManyStencils.test_basic19.<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 |d f  d |||f< q*q |S )Nr    r   r   r   rl   r)   rx  rz  r  r   r   r  M  s   z/TestManyStencils.test_basic19.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic19F  r  zTestManyStencils.test_basic19c                    rt  )	r  c                 S   r  )Nr8   )r   r)   r   r   r   r   r   r   ^  r  z-TestManyStencils.test_basic20.<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 |d f  d |||f< q(q|S )Nr    r   r   rl   r   r  r)   rx  rz  r  r   r   r  c  r  z/TestManyStencils.test_basic20.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic20\  r  zTestManyStencils.test_basic20c                    rt  )	zsame rel, add constc                 S   s   | d | d  d S )Nr8   r)   r   r   r   r   r   r   t  r  z-TestManyStencils.test_basic21.<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 |d f  d |||f< q(q|S r  rx  rz  r  r   r   r  y  r  z/TestManyStencils.test_basic21.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic21r  r  zTestManyStencils.test_basic21c                    rt  )	z%rel idx const expr folding, add constc                 S   r  )Nr   r8   r)   r   r   r   r   r   r     r  z-TestManyStencils.test_basic22.<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 | |d |d f  d |||f< q*q|S r  rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic22.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic22  r  zTestManyStencils.test_basic22c                    rt  )	zrel idx, work in bodyc                 S   s&   t d| d  }| d | d  | S Nr   )r.   r   r   r8   rq   sinr   rc   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 ]8}td| jd d D ]+}td| |d |d f  }| |d |d f | |d |d f  | |||f< q,q |S Nr    r   r   r   r.   r   rs  rq   ry  rq  r(  r%   r  r   r!   r{  r|  r}  r~  rc   r  r   r   r    s   z/TestManyStencils.test_basic23.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic23  s
   
zTestManyStencils.test_basic23c                    rt  )	z,rel idx, dead code should not impact rel idxc                 S   s"   t d| d  }| d | d  S r  r  r  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 ]6}td| jd d D ])}td| |d |d f  }| |d |d f | |d |d f  |||f< q,q |S r  r  r  r  r   r   r    s   2z0TestManyStencils.test_basic23a.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic23a  r  zTestManyStencils.test_basic23ac                 C   s0   t ddd}dd }| j||tgd dS )z1d idx on 2d arrr  rl   r   c                 S   r  )Nr   r)   r   r   r   r   r   r     rE  z-TestManyStencils.test_basic24.<locals>.kernelr  N)rq   r   r   rk  r   rK   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  rl   r   c                 S   s   dS )Nr)   r   r   r   r   r   r     s   z-TestManyStencils.test_basic25.<locals>.kernelr  Nrq   r   r   rk  rY  r   r  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      | d | d  d S )N)r   r   r   )r   r   r   r)   r   r   r   r   r   r     r  z-TestManyStencils.test_basic26.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd D ];}td| jd d D ].}td| jd D ]#}| |d |d |d f | |d |d |d f  d ||||f< q4q*q|S )Nr    r   r   r.   r   r)   rx  )r   r!   r{  r|  _TestManyStencils__cr}  r~  r  r   r   r    s   z/TestManyStencils.test_basic26.<locals>.__kernel@   r      r.   Nr  r  r   r  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   r  )N)r   r   r   r   )r   r   r   r   r)   r   r   r   r   r   r     r  z-TestManyStencils.test_basic27.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]M}td| jd D ]B}td| jd d D ]5}td| jd D ]*}| |d |d |d |d f | |d |d |d |d f  d |||||f< q>q4q(q|S )	Nr    r   r   r   rl   r.   r   r)   rx  )r   r!   r{  r|  _TestManyStencils__dr  r}  r~  r  r   r   r     s(   z/TestManyStencils.test_basic27.<locals>.__kernel   r   r  r.   Nr  r  r   r  r   test_basic27  s
   
zTestManyStencils.test_basic27c                    L   dd   fdd}t dddt j}||d} || dS )	ztype widen c                 S      | d t d S )Nr8         $@)rq   r   r   r   r   r   r     r\   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< q(q|S )Nr    r   r   r   r  )rs  rq   ry  rq  r(  r%   r   rz  r  r   r   r       (z/TestManyStencils.test_basic28.<locals>.__kernelr  rl   r   Nrq   r   r   astypefloat32rj  r  r   r  r   test_basic28  
   

zTestManyStencils.test_basic28c                 C   4   t ddd}dd }| j||tttgd dS )zconst index from func r  rl   r   c                 S   s   | dt tdf S )Nr   )r   rq   cosr   r   r   r   r   .     z-TestManyStencils.test_basic29.<locals>.kernelr  Nrq   r   r   rk  rY  r   r   r  r   r   r   test_basic29*     
zTestManyStencils.test_basic29c                    r  )	zsigned zerosc                 S   ru  r7   r   r   r   r   r   r   6  r=  z-TestManyStencils.test_basic30.<locals>.kernelc                    rv  rw  rx  rz  r  r   r   r  ;  r  z/TestManyStencils.test_basic30.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic304  s
   

zTestManyStencils.test_basic30c                    r  )	zdoes a const propagate? 2Dc                 S   s   d}| |df S Nr   r   r   r  r   r   r   r   K  r  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< q*q|S rw  rx  r  r  r   r   r  Q  s   z/TestManyStencils.test_basic31.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic31I  r  zTestManyStencils.test_basic31z constant folding not implementedc                 C   s   t ddd}dd }dS )zdoes a const propagate?r  rl   r   c                 S   s   d}d| }| |df S r  r   )r   sr  r   r   r   r   d  s   z.TestManyStencils.test_basic31b.<locals>.kernelN)rq   r   r   r  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   r  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 rw  rx  )r   r!   r{  r|  r~  r  r  r   r   r  s  s   z0TestManyStencils.test_basic31c.<locals>.__kernelr  Nrq   r   rj  r  r   r  r   test_basic31ck  s
   
	
zTestManyStencils.test_basic31cc                 C   r  )ztyped int indexr  rl   r   c                 S   s   | t ddf S r  )rq   int8r   r   r   r   r     r\   z-TestManyStencils.test_basic32.<locals>.kernelr  Nr  r  r   r   r   test_basic32  r  zTestManyStencils.test_basic32c                    rt  )	zadd 0d arrayc                 S   r  )Nr8   r   )rq   arrayr   r   r   r   r     r\   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< q(q|S rw  )rs  rq   ry  rq  r(  r%   r  rz  r  r   r   r    r  z/TestManyStencils.test_basic33.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic33  
   	
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   r  r  )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 ]L}td| jd d D ]?}d| |d |d f  }|| |d |d f | |d |d f  | |d |d f  t| |d |d f   |||f< q,q |S )	Nr    r   r   r   r.   r  r   r-   r  )r   r!   r{  r|  r}  r~  r  r  r   r   r    s   z/TestManyStencils.test_basic34.<locals>.__kernel   r  Nr  r  r   r  r   test_basic34  s
   
zTestManyStencils.test_basic34c                    L   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   ru  r  r   r   r   r   r   r     r=  z-TestManyStencils.test_basic35.<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 |||f< q*q |S )Nr    r   r   r   r   rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic35.<locals>.__kernelr  rl   r   Nr+   r   rY   r  r  r   r  r   test_basic35  s
   	
zTestManyStencils.test_basic35c                    r  )zmore complex with cvalc                 S       | d | d  | d  | d  S Nr   r   r  r   r   r   r   r   r     r   z-TestManyStencils.test_basic36.<locals>.kernelc                       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  | |d |d f  | |d |d f  |||f< q,q |S )Nr    g      @r   r   r   r   rx  rz  r  r   r   r       z/TestManyStencils.test_basic36.<locals>.__kernelr  rl   r   Nr+   r   r  r  r  r   r  r   test_basic36  s
   
zTestManyStencils.test_basic36c                    r  )zcval is exprc                 S   r  r  r   r   r   r   r   r     r   z-TestManyStencils.test_basic37.<locals>.kernelc                    r  )Nr          Q@r   r   r   r   rx  rz  r  r   r   r    r  z/TestManyStencils.test_basic37.<locals>.__kernelr  rl   r   Nr+   r  r  r  r  r   r  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   r  r  r   r   r   r   r   r     r   z-TestManyStencils.test_basic38.<locals>.kernelr  rl   r   r   r4  r   r+   r  rY   r  Nrq   r   r   rp  r   rY  rk  rK   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   r  r  r   r   r   r   r   r     r   z-TestManyStencils.test_basic39.<locals>.kernelr   r.   c                    s   j | |d | }tj| j t|d}td| jd d D ];}td| jd d D ].}| |d |d f | |d |d f  | |d |d f  | |d |d f  |||f< q,q |S )Nr    r   r   r   r   rx  rz  r+   r   rK   r   r   r    r  z/TestManyStencils.test_basic39.<locals>.__kernelr  rl   r   Nr+   r  )rq   r  r  r   r   rj  r  r   r  r   test_basic39  s   


zTestManyStencils.test_basic39c                    Z   dd   fdd}t ddd}t ddd}|||d} ||| dS )	z2 args!c                 S      | d |d  S Nr   )r   r-   r   r0   r   r   r   r   #  r   z-TestManyStencils.test_basic40.<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 |d f  |||f< q,q"|S )Nr    r   r   r.   r   r-   rx  r   r1   r!   r{  r|  r}  r~  r  r   r   r  (  s   
2z/TestManyStencils.test_basic40.<locals>.__kernelr  rl   r   Nr  rK   r  r   r1   rx   r   r  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   r  r  r   r0   r   r   r   r   8  r   z-TestManyStencils.test_basic41.<locals>.kernelr  rl   r   r)   r   r  Nrq   r   r   rk  rY  r  rK   r   r   r1   r   r   r   test_basic416     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   r  r  r   r0   r   r   r   r   A  r   z-TestManyStencils.test_basic42.<locals>.kernelr  rl   r         "@r  Nr	  r
  r   r   r   test_basic42?  r  zTestManyStencils.test_basic42c                    r  )	z2 args more complexityc                 S   s    | d | d  |d  |d  S )Nr   r   r.   r  r   r   r0   r   r   r   r   J  r   z-TestManyStencils.test_basic43.<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  ||d |d f  ||d |d f  |||f< q.q"|S )Nr    r   r   r   r.   r-   r   rx  r  r  r   r   r  O  s   
z/TestManyStencils.test_basic43.<locals>.__kernelg      >@r      Nr  r  r   r  r   test_basic43H  s   zTestManyStencils.test_basic43c                 C   F   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   r0   r   r   r   r   b  s   z-TestManyStencils.test_basic44.<locals>.kernelr  rl   r   r  Nrq   r   r   rk  rY  r   r
  r   r   r   test_basic44`     zTestManyStencils.test_basic44c                 C   r  )z02 args, has assignment and then cross dependencyc                 S   s   d| d< | d | d  S )Nr  r   r   r   r0   r   r   r   r   l     z-TestManyStencils.test_basic45.<locals>.kernelr  rl   r   r  Nr  r
  r   r   r   test_basic45j  r  zTestManyStencils.test_basic45c                 C   r  )z#2 args, has cross relidx assignmentc                 S   s   |d | d< | d | d  S )Nr  r   r   r   r0   r   r   r   r   v     z-TestManyStencils.test_basic46.<locals>.kernelr  rl   r   r  Nr  r
  r   r   r   test_basic46t  r  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      | d |d  |d  S )Nr   r   r   r   r   r1   r   r   r   r   r        z-TestManyStencils.test_basic47.<locals>.kernelc                    s   j | |||d  | ||}tj| jdt|d}td| jd d D ]1}td| jd d D ]$}| |d |d f ||d |d f  ||d |d f  |||f< q0q$|S r  rx  r   r1   r   r!   r{  r|  r}  r~  r  r   r   r    s   z/TestManyStencils.test_basic47.<locals>.__kernelr  rl   r   Nr  rK   r  r   r1   r   rx   r   r  r   test_basic47~  s   zTestManyStencils.test_basic47c                    rt  )	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 ](}td| jd D ]}| j}d|d d d d f< | |d |d f |||f< q*q |S )Nr    r   r   r   r   )rs  rq   ry  rq  r(  r%   r   )r   r!   r{  r|  r}  r~  r   r  r   r   r    s   z/TestManyStencils.test_basic48.<locals>.__kernelr  rl   r   Nr  r  r   r  r   test_basic48  
   
zTestManyStencils.test_basic48c                    b   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   r  )Nr   r  r   r0   r   r   r   r     r   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< q+q!|S )Nr    r   r   r   r  rx  r  r  r   r   r       
&z/TestManyStencils.test_basic49.<locals>.__kernelr  rl   r   Nr;   r1   r  r  r  r   r  r   test_basic49  s   

zTestManyStencils.test_basic49z&dynamic range checking not implementedc                 C      dd }dS )z2 args, standard_indexing OOBc                 S   r  )Nr   )r      r   r0   r   r   r   r     r   z-TestManyStencils.test_basic50.<locals>.kernelNr   rK   r   r   r   r   test_basic50     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   r  Nr   )r   r.   r   r0   r   r   r   r     r   z-TestManyStencils.test_basic51.<locals>.kernelr  rl   r   r;   r   r1   r  Nr  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     r  z-TestManyStencils.test_basic52.<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 |d f  |||f< q/q#|S )Nr    r   r   r   r.   r   rx  r  r  r   r   r    s   z/TestManyStencils.test_basic52.<locals>.__kernelr  rl   r   r  r.   Nr;   r1   r  r  r  r   r  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   r  r+  r   r0   r   r   r   r     r   z-TestManyStencils.test_basic53.<locals>.kernelr  rl   r   r  r;   r   r  N)rq   r   r   rp  r$  rY  rk  rK   r   r   r1   r.  r   r   r   test_basic53  s   
zTestManyStencils.test_basic53c                    r#  )z)2 args, standard_indexing, index from varc                 S   s   d}| d |d|f  S )Nr.   r   r   r   )r   r1   r  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 ]#}td| jd D ]}d}| |d |d f |d|f  |||f< q+q!|S Nr    r   r   r   r.   rx  )r   r1   r!   r{  r|  r}  r~  r  r  r   r   r    s   
*z/TestManyStencils.test_basic54.<locals>.__kernelr  rl   r   Nr;   r1   r  r  r  r   r  r   test_basic54      

zTestManyStencils.test_basic54c                    r#  )z62 args, standard_indexing, index from more complex varc                 S   s    d}d| }| d |d|f  S )Nr   r.   r   r   r   )r   r1   r  r  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 ]'}td| jd D ]}d}d| }| |d |d f |d|f  |||f< q+q!|S r0  rx  )	r   r1   r!   r{  r|  r}  r~  r  r  r  r   r   r  !  s   
*z/TestManyStencils.test_basic55.<locals>.__kernelr  rl   r   Nr;   r1   r  r  r  r   r  r   test_basic55  s   
zTestManyStencils.test_basic55c                    r#  )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   r1   r  accrn  r  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 ]<}td| jd D ]1}d}d}|dd d f D ]}	||	7 }q9d| d }
| |d |d f |d|
f  | |||f< q+q!|S r0  rx  )r   r1   r!   r{  r|  r}  r~  r  r4  rn  r  r  r   r   r  >  s   

.z/TestManyStencils.test_basic56.<locals>.__kernelr  rl   r   Nr;   r1   r  r  r  r   r  r   test_basic562  s   

zTestManyStencils.test_basic56c                    r#  )z12 args, standard_indexing, split index operation c                 S   s   |d }| d |d  S )Nr   r   r   r   r  r   r   r   r   T  r  z-TestManyStencils.test_basic57.<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  |||f< q+q!|S rw  rx  r   r1   r!   r{  r|  r}  r~  r   r  r   r   r  Z  s   
&z/TestManyStencils.test_basic57.<locals>.__kernelr  rl   r   Nr;   r1   r  r  r  r   r  r   test_basic57R  r2  zTestManyStencils.test_basic57c                    r#  )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  r  z-TestManyStencils.test_basic58.<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  |||f< q+q!|S rw  rx  r6  r  r   r   r  r  s   
&z/TestManyStencils.test_basic58.<locals>.__kernelr  rl   r   Nr;   r1   r  r  r  r   r  r   test_basic58j  r2  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   r  r   r  r   r   r   r     r  z-TestManyStencils.test_basic59.<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< q,q"|S )Nr    r   r   r   r  rx  r  r  r   r   r    s   *z/TestManyStencils.test_basic59.<locals>.__kernelr  rl   r   r   Nr;   r1   r   r  r  r  r   r  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   r  )Nr   r  r   r   r  r   r   r   r     r  z-TestManyStencils.test_basic60.<locals>.kernelr  rl   r   )r   )r4  r;   r1   r   r  N)rq   r   r   rp  rY  rk  )rK   r   r   r1   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   r  r9  r   r0   r   r   r   r     r   z-TestManyStencils.test_basic61.<locals>.kernelr  rl   r   r;   r   r  N)rq   r   r   rk  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   r  r9  r   r0   r   r   r   r     r   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< q+q!|S )Nr    r  r   r   r   r  rx  r  r  r   r   r    r$  z/TestManyStencils.test_basic62.<locals>.__kernelr  rl   r   Nr1   r  )r;   r+   r  r  r  r   r  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   r0   r   r   r   r     r   z-TestManyStencils.test_basic63.<locals>.kernelr  rl   r   r  r  r;   r1   r  Nr  r.  r   r   r   test_basic63  s   
zTestManyStencils.test_basic63c                 C   8   dd }t ddd}| j||ddittgd d	S )
z!1 arg that uses standard_indexingc                 S   ru  r7   r   r   r   r   r   r     r=  z-TestManyStencils.test_basic64.<locals>.kernelr  rl   r   r;   r   r  Nr  rK   r   r   r   r   r   test_basic64  s
   
zTestManyStencils.test_basic64c                    H   dd   fdd}t d}d}|||}j ||d|id d	S )
zbasic induced neighborhood testc                 S   (   d}t ddD ]}|| | 7 }q|d S Nr   r      r$   r   cumulr'   r   r   r   r        z-TestManyStencils.test_basic65.<locals>.kernelc                    x   j | |d  | }tj| jdt|d}td| jd D ]}d}tddD ]
}|| ||  7 }q'|d ||f< q|S Nr    r   r      rE  r   rF  rx  r   r!   r{  r|  _TestManyStencils__anrH  r'   r  r   r   r       z/TestManyStencils.test_basic65.<locals>.__kernel      N@)rE  r   r!   r  Nr  rK   r  r   nhrx   r   r  r   test_basic65     



zTestManyStencils.test_basic65c                    rB  )
zbasic const neighborhood testc                 S   s(   d}t ddD ]}|| d 7 }q|d S rD  r$   rG  r   r   r   r     rI  z-TestManyStencils.test_basic66.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]}d}tddD ]
}|| |d  7 }q'|d ||f< q|S rK  rx  rM  r  r   r   r  	  rO  z/TestManyStencils.test_basic66.<locals>.__kernelrP  rQ  r!   r  Nr  rR  r   r  r   test_basic66  rU  zTestManyStencils.test_basic66c                    P   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   rH  r'   r   r   r   r   r   	     z-TestManyStencils.test_basic67.<locals>.kernelc           	   	      s   j | |d  | }tj| jdt|d}td| jd D ]3}td| jd D ](}d}tddD ]}tddD ]}|| || || f 7 }q8q1|d	 |||f< q(q|S 
Nr    r   r   r   r   r   r   rY  rZ  rx  	r   r!   r{  r|  _TestManyStencils__bnrN  rH  r'   r   r  r   r   r  "	     z/TestManyStencils.test_basic67.<locals>.__kernel      i@r      r   rY  r   r!   r  Nr  rR  r   r  r   test_basic67	     	


zTestManyStencils.test_basic67c                 C   r?  )
z basic 2d induced 1D neighborhoodc                 S   s,   d}t ddD ]
}|| d|f 7 }q|d S )Nr   rY  r   rZ  r$   )r   rH  r   r   r   r   r   7	  s   z.TestManyStencils.test_basic67b.<locals>.kernelra  r   rb  r!   )rd  r  N)rq   r   r   rk  r   rY  r@  r   r   r   test_basic67b5	  s
   
zTestManyStencils.test_basic67bc                    rW  )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 rX  r$   r[  r   r   r   r   C	  r\  z-TestManyStencils.test_basic68.<locals>.kernelc           	   	      s   j | |d  | }tj| jdt|d}td| jd D ]3}td| jd D ](}d}tddD ]}tddD ]}|| || |d f 7 }q8q1|d	 |||f< q(q|S r]  rx  r^  r  r   r   r  M	  r`  z/TestManyStencils.test_basic68.<locals>.__kernelra  r   rb  rc  r!   r  Nr  rR  r   r  r   test_basic68A	  s   



zTestManyStencils.test_basic68c                    rW  )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   rY  r8   rZ  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 ]3}td| jd D ](}d}tddD ]}tddD ]}|| |d |d f 7 }q8q1|d	 |||f< q(q|S r]  rx  r^  r  r   r   r  l	  r`  z/TestManyStencils.test_basic69.<locals>.__kernelra  r   rb  rc  r!   r  Nr  rR  r   r  r   test_basic69a	  rf  zTestManyStencils.test_basic69c                    rW  )zneighborhood adding complexityc                 S   sL   d}d}t ddD ]}|| }t ddD ]}|| ||f | 7 }qq	|d S )Nr   r  r   r   rY  rZ  r$   r   rH  zzr'   r  r   r   r   r   r   	     z-TestManyStencils.test_basic70.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd D ];}td| jd D ]0}d}d}tddD ]}|| }	td	dD ]}
|| || ||
 f |	 7 }q>q3|d
 |||f< q(q|S )Nr    r   r   r   r   r   r  r   rY  rZ  rx  r   r!   r{  r|  r_  rN  rH  rk  r'   r  r   r  r   r   r  	  s   z/TestManyStencils.test_basic70.<locals>.__kernelra  r   rb  rc  r!   r  Nr  rR  r   r  r   test_basic70	  s   


zTestManyStencils.test_basic70c                    rB  )
zneighborhood, type changec                 S   s<   d}t ddD ]}d}|dkrd}|| | | 7 }q|d S )Nr   rE  r           r  rF  r$   )r   rH  r'   rn  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 ]%}d}tddD ]}d}|dkr1d	}|| ||  | 7 }q'|d
 ||f< q|S )Nr    r   r   rL  rE  r   ro  rp  r  rF  rx  )r   r!   r{  r|  rN  rH  r'   rn  r  r   r   r  	  s   z/TestManyStencils.test_basic71.<locals>.__kernelrP  rQ  r!   r  Nr  rR  r   r  r   test_basic71	  s   



zTestManyStencils.test_basic71c                    rB  )
z+neighborhood, narrower range than specifiedc                 S   rC  )Nr   r  rF  r$   rG  r   r   r   r   	  rI  z-TestManyStencils.test_basic72.<locals>.kernelc                    rJ  )Nr    r   r   rL  rr  r  rF  rx  rM  r  r   r   r  	  rO  z/TestManyStencils.test_basic72.<locals>.__kernelrP  rQ  r!   r  Nr  rR  r   r  r   test_basic72	  rU  zTestManyStencils.test_basic72c                    rB  )
zneighborhood, +ve rangec                 S   rC  )Nr   r      rF  r$   rG  r   r   r   r   	  rI  z-TestManyStencils.test_basic73.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]}d}tddD ]
}|| ||  7 }q)|d ||f< q |S )Nr    r   r   r   r   rt  rF  rx  rM  r  r   r   r  	     z/TestManyStencils.test_basic73.<locals>.__kernelrP  ))r   r   r!   r  Nr  rR  r   r  r   test_basic73	  rU  zTestManyStencils.test_basic73c                    rB  )
zneighborhood, -ve rangec                 S   rC  )Nr   rY  r"   rF  r$   rG  r   r   r   r   	  rI  z.TestManyStencils.test_basic73b.<locals>.kernelc                    rJ  )Nr    r   r   r   rY  r"   rF  rx  rM  r  r   r   r  
  rO  z0TestManyStencils.test_basic73b.<locals>.__kernelrP  ))rY  r   r!   r  Nr  rR  r   r  r   test_basic73b	  rU  zTestManyStencils.test_basic73bc                    rB  )
z!neighborhood, -ve->+ve range spanc                 S   rC  )Nr   r   rt  rF  r$   rG  r   r   r   r   
  rI  z-TestManyStencils.test_basic74.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]}d}tddD ]
}|| ||  7 }q)|d ||f< q |S )	Nr    r   r   r   r   r   rt  rF  rx  rM  r  r   r   r  
  ru  z/TestManyStencils.test_basic74.<locals>.__kernelrP  ))r   r   r!   r  Nr  rR  r   r  r   test_basic74
  rU  zTestManyStencils.test_basic74c                    rB  )
z!neighborhood, -ve->-ve range spanc                 S   rC  )Nr   rY  r   rF  r$   rG  r   r   r   r   0
  rI  z-TestManyStencils.test_basic75.<locals>.kernelc                    rJ  )Nr    r   r   r   rY  r   rF  rx  rM  r  r   r   r  9
  rO  z/TestManyStencils.test_basic75.<locals>.__kernelrP  ))rY  r-   r!   r  Nr  rR  r   r  r   test_basic75.
  s   	



zTestManyStencils.test_basic75c                    rW  )zneighborhood, mixed range spanc                 S   sL   d}d}t ddD ]}|| }t ddD ]}|| ||f | 7 }qq	|d S )Nr   r  r  r   rZ  r$   rj  r   r   r   r   L
  rl  z-TestManyStencils.test_basic76.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ];}td| jd D ]0}d}d}tddD ]}|| }	tddD ]}
|| || ||
 f |	 7 }q@q5|d	 |||f< q*q |S )
Nr    r   r   rl   r   r  r  r   rZ  rx  rm  r  r   r   r  X
  s   z/TestManyStencils.test_basic76.<locals>.__kernelra  r   rb  ))r  r   )r  rl   r!   r  Nr  rR  r   r  r   test_basic76J
  s   


zTestManyStencils.test_basic76c                    f   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   H   d}t ddD ]}t ddD ]}|| ||f |||f  7 }qq|d S Nr   r  r   r  r$   r   r1   rH  r'   r   r   r   r   r   o
     z-TestManyStencils.test_basic77.<locals>.kernelc           
   
      s   j | ||d  | |}tj| jdt|d}td| jd D ]=}td| jd D ]2}d}tddD ] }tddD ]}	|| || ||	 f ||| ||	 f  7 }q:q3|d |||f< q*q |S Nr    r   r   rl   r   r  r  rx  
r   r1   r!   r{  r|  r_  rN  rH  r'   r   r  r   r   r  x
     
z/TestManyStencils.test_basic77.<locals>.__kernelra  r   rb  r  r   r  r!   r  Nr  rK   r  r   r1   rS  rx   r   r  r   test_basic77m
     	
zTestManyStencils.test_basic77c                    r{  )z. neighborhood, two args, -ve range, -ve range c                 S   H   d}t ddD ]}t ddD ]}|| ||f |||f  7 }qq|d S )Nr   r-   r   r  r$   r~  r   r   r   r   
  r  z-TestManyStencils.test_basic78.<locals>.kernelc           
   
      s   j | ||d  | |}tj| jdt|d}td| jd D ]=}td| jd D ]2}d}tddD ] }td	d
D ]}	|| || ||	 f ||| ||	 f  7 }q:q3|d |||f< q*q |S )Nr    r   r   r   r   r  r  r-   r  r   r  rx  r  r  r   r   r  
  r  z/TestManyStencils.test_basic78.<locals>.__kernel     r@r'  rb  )r  r  )r  r-   r!   r  Nr  r  r   r  r   test_basic78
  r  zTestManyStencils.test_basic78c                    r{  )z. neighborhood, two args, -ve range, +ve range c                 S   r  )Nr   r  r-   r.   r   r  r$   r~  r   r   r   r   
  r  z.TestManyStencils.test_basic78b.<locals>.kernelc           
   
      s   j | ||d  | |}tj| jdt|d}td| jd d D ]=}td| jd D ]2}d}tddD ] }td	d
D ]}	|| || ||	 f ||| ||	 f  7 }q<q5|d |||f< q,q"|S )Nr    r   r   r   	   r  r  r-   r.   r   r  rx  r  r  r   r   r  
  s   
z0TestManyStencils.test_basic78b.<locals>.__kernelr  r'  rb  )r  )r.   r  r!   r  Nr  r  r   r  r   test_basic78b
  r  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   r|  r}  r$   r~  r   r   r   r   
  r  z-TestManyStencils.test_basic79.<locals>.kernelra  r   rb  r.   r  r!   r  r  N)rq   r   r   rp  r   rk  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 ]5}td| jd D ]*}d}tddD ]}tddD ]}	|| || ||	 f | 7 }q:q3|d |||f< q*q |S r  rx  r  r  r   r   r  
  s   
z/TestManyStencils.test_basic80.<locals>.__kernelra  r   rb  y              (@r  r!   r  Nr  r  r   r  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         z-TestManyStencils.test_basic81.<locals>.kernelra  r   rb  r   r  r!   r  r  N)rq   r   r   copyrp  r   r  rk  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   D   d}t ddD ]}t ddD ]}|| ||f |d  7 }qq|d S Nr   r  r   r   rl   r  r$   r~  r   r   r   r     r  z-TestManyStencils.test_basic82.<locals>.kernelc           
   	      s   j | ||d  | |}tj| jdt|d}td| jd D ]7}td| jd D ],}d}tddD ]}tddD ]}	|| || ||	 f |d  7 }q:q3|d |||f< q*q |S )	Nr    r   r   rl   r   r  r  r  rx  r  r  r   r   r       
"z/TestManyStencils.test_basic82.<locals>.__kernelra  r   rb  r  r1   )r!   r;   r  Nrq   r   r   r  rj  r  r   r  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   r  r  r$   r~  r   r   r   r   2  r  z-TestManyStencils.test_basic83.<locals>.kernelra  r   rb  c           
   	      s   j | ||d  | |}tj| jdt|d}td| jd D ]7}td| jd D ],}d}tddD ]}tddD ]}	|| || ||	 f |d  7 }q:q3|d	 |||f< q*q |S )
Nr          ?r   rl   r   r   r  r  r  rx  r  r  r   r   r  >  r  z/TestManyStencils.test_basic83.<locals>.__kernelr  r1   r  r!   r;   r+   r  Nr  )rK   r   r1   r  rS  rx   r   r  r   test_basic830  s   
zTestManyStencils.test_basic83c                    rt  )	z kernel calls njit c                 S      | d t | d  S Nr8   r   )r@   r   r   r   r   r   V  r  z-TestManyStencils.test_basic84.<locals>.kernelc              	         j | |d  | }tj| jdt|d}td| jd d D ](}td| jd D ]}| |d |d f t| |d |d f  |||f< q*q |S rw  )rs  rq   ry  rq  r(  r%   r@   py_funcrz  r  r   r   r  [     z/TestManyStencils.test_basic84.<locals>.__kernelra  r   rb  Nr  r  r   r  r   test_basic84T  r  zTestManyStencils.test_basic84c                    rt  )	z! kernel calls njit(parallel=True)c                 S   r  r  )rD   r   r   r   r   r   k  r  z-TestManyStencils.test_basic85.<locals>.kernelc              	      r  rw  )rs  rq   ry  rq  r(  r%   rD   r  rz  r  r   r   r  q  r  z/TestManyStencils.test_basic85.<locals>.__kernelra  r   rb  Nr  r  r   r  r   test_basic85i  r  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   ru  r7   r   r   r   r   r   r     r=  z-TestManyStencils.test_basic86.<locals>.kernelra  r   rb  badr  N)rq   r   r   rk  rY  r   r@  r   r   r   test_basic86  s
   
zTestManyStencils.test_basic86c                    rt  )	z reserved arg name in use c                 S   ru  r7   r   )__sentinel__r   r   r   r     r=  z-TestManyStencils.test_basic87.<locals>.kernelc                    rv  rw  rx  )r  r!   r{  r|  r}  r~  r  r   r   r    r  z/TestManyStencils.test_basic87.<locals>.__kernelra  r   rb  Nr  r  r   r  r   test_basic87  r  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   r   r   r   r   r     rE  z-TestManyStencils.test_basic88.<locals>.kernelr  rl   r   r  r)   r  Nr  r  r   r   r   test_basic88  s   zTestManyStencils.test_basic88c                    rt  )	z basic multiple returnc                 S   s(   | d dkrdS | d dk r| d S dS )Nr   r   r  r  r  r8   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 ]A}td| jd D ]6}| |d |d f dkr?d|||f< q*| |d |d f dk rZ| |d |d f |||f< q*d	|||f< q*q |S )
Nr    r   r   r   rl   r   r  r  r   rx  rz  r  r   r   r    s   z/TestManyStencils.test_basic89.<locals>.__kernelra  r   rb  Nr  r  r   r  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   sX   d}t ddD ]}t ddD ]}|| ||f |d  7 }qq|d }|dkr*|d S |S )Nr   r  r   r  r  ra  r)   r$   )r   r1   rH  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 ]F}td| jd D ];}d}tddD ]}tddD ]}	|| || ||	 f |d  7 }q:q3|d	 }
|
d
kr_|
d |||f< q*|
|||f< q*q |S )Nr    r  r   rl   r   r   r  r  r  ra  r)   rx  )r   r1   r!   r{  r|  r_  rN  rH  r'   r   r  r  r   r   r    s    
"
z/TestManyStencils.test_basic90.<locals>.__kernelra  r   rb  r  r1   r  r  r  Nr  r  r   r  r   test_basic90  s   
zTestManyStencils.test_basic90c                    rt  )	z? Issue #3454, const(int) == const(int) evaluating incorrectly. c                 S   s   d}ddkrd}| d | S )Nr   r.   r8   r   r0   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 ]%}td| jd D ]}d}ddkr2d}| |d |d f | |||f< q(q|S r0  rx  )r   r!   r{  r|  r}  r~  r1   r  r   r   r    s   "z/TestManyStencils.test_basic91.<locals>.__kernelra  r   rb  Nr  r  r   r  r   test_basic91  r"  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   H   | d | d A | d A | d A | d A | d A | d A | d A | d	 A S 
Nr  r   r  r   r8   r   r  r   r  r   r   r   r   r   r        z-TestManyStencils.test_basic92.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]m}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< q,q |S r  rx  rz  r  r   r   r    0   
z/TestManyStencils.test_basic92.<locals>.__kernelrb  r.   r   r   Nrq   r  r   r   r  r   rj  rK   r  r   rx   r   r  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   r  r  r   r   r   r   r   r   *  r  z-TestManyStencils.test_basic93.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]m}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< q,q |S )Nr    r   r   r   r   rx  rz  r  r   r   r  1  r  z/TestManyStencils.test_basic93.<locals>.__kernelrb  r.   r   r   Nr+   Tr  r  r  r   r  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.   rq   medianr   r   r   r   r   H  r   z-TestManyStencils.test_basic94.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ](}td| jd d D ]}t| |d |d |d |d f |||f< q,q |S Nr    r   r   r   r   r.   rs  rq   ry  rq  r(  r%   r  r   r!   r{  r|  r_  rN  r  r   r   r  M  s   z/TestManyStencils.test_basic94.<locals>.__kernelrb  r   r   r   r  r  r!   r  N)rq   r   uint32r   rj  rR  r   r  r   test_basic94F  s   



zTestManyStencils.test_basic94znot yet supportedc                 C   r&  )z  Slice, calculate neighborhood. c                 S   s   t | ddddf S )Nr   r.   r  r   r  r   r   r   r   r   `  r   z-TestManyStencils.test_basic95.<locals>.kernelNr   r(  r   r   r   test_basic95]  r*  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  r\   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{  r|  rN  r  r   r   r  k  s   "z/TestManyStencils.test_basic96.<locals>.__kernelrb  r   )r  r!   r  N)rq   r   r  rj  rR  r   r  r   test_basic96d  s   


zTestManyStencils.test_basic96c                 C   r&  )z 2D slice and index. c                 S   s   t | dddf S )Nr   r.   rl   r  r   r   r   r   r   |  r  z-TestManyStencils.test_basic97.<locals>.kernelNr   r(  r   r   r   test_basic97y  r*  zTestManyStencils.test_basic97c                    sx   t jt jt j tdtd fD ]) dd  fdd}t dd}d}|||}j||| d	d
 qdS )r  r  c                 S   ru  r7   r   r   r   r   r   r     r=  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< q,q |S )Nr    r   r   r   rx  r  r  r   r   r    r  z/TestManyStencils.test_basic98.<locals>.__kernelg      @)r.   rl   r  )r!   r+   r  N)rq   r  r  r  r   r   rj  rR  r   r  r   test_basic98  s   $


zTestManyStencils.test_basic98)tr}   r~   r   rJ   rj  rk  rp  rs  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  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/  r1  r3  r5  r7  r8  r:  r;  r<  r=  r>  rA  rT  rV  re  rg  rh  ri  rn  rq  rs  rv  rw  rx  ry  rz  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   rM   r   r    s     f
		


		




 
 "!#    $	)

r  __main__))numpyrq   
contextlibr   r_   r   r   
numba.corer   r   numba.core.compilerr   r   numba.core.cpur	   numba.tests.supportr
   r   r   numba.core.errorsr   r   r   r  r  r   r(   r/   r2   r6   r:   r<   r=   r@   rD   TestCaserE   r   r  r}   mainr   r   r   r   <module>   s~   









7   z                    ,