o
    i(                    @   sp  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 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!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)LoweringErrorTypingErrorNumbaValueErrorc                 C   $   d| d | d  | d  | d   S N      ?r      r   r   r   r   r    ar   r   W/home/ubuntu/transcripts/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(       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_var.   r2   r5   c                 C   s   |d r| d S |d S Nr   r   r   )r   r0   fr   r   r   %stencil_multiple_input_mixed_types_2d4   s   r9   )r0   )standard_indexingc                 C   s    | d |d  | d |d   S )Nr   r   r   r   r/   r   r   r   !stencil_with_standard_indexing_1d9   s    r;   c                 C   s@   | d |d  | d |d   | d |d   | d |d   S r3   r   r/   r   r   r   !stencil_with_standard_indexing_2d>   s
   r<   c                 C      | d S Nr   r   r   r   r   r   addone_njitD      r?   Tparallelc                 C   r=   r>   r   r   r   r   r   addone_pjitJ   r@   rC   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superrD   __init__)selfargs	__class__r   r   rI   S   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)rJ   funcsigflagsr   r   r   _compile_thisZ   s   
zTestStencilBase._compile_thisc                 K   s0   t  }d|_|s
dn|}t||_| |||S rE   )r   rG   r	   auto_parallelrU   )rJ   rR   rS   kwsrT   optionsr   r   r   compile_parallel_   s
   
z TestStencilBase.compile_parallelc                 C   s   | j ||| jdS )N)rT   )rU   rF   )rJ   rR   rS   r   r   r   compile_njitf      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>j       z/TestStencilBase.compile_all.<locals>.<listcomp>)tuplerY   rZ   )rJ   pyfuncrK   kwargsrS   cpfunccfuncr   r   r   compile_alli   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)rj   entry_pointnptestingassert_almost_equalassertInlibraryget_llvm_str)
rJ   no_stencil_funcrf   rK   ri   rh   expected	py_outputnjit_outputparfor_outputr   r   r   checkq   s   

zTestStencilBase.check)__name__
__module____qualname___numba_parallel_test_rI   rU   rY   rZ   rj   r{   __classcell__r   r   rL   r   rD   O   s    rD   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 rN   )rH   r   rI   rJ   rK   rg   rL   r   r   rI         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)rp   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-   )rp   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   rp   r   r   r   r$   r   r   r   r&   jr   r   r   test_impl_seq   s   z0TestStencil.test_stencil1.<locals>.test_impl_seqd   Nr{   )rJ   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 rN   )rp   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   rp   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   r4   r%   r&   r   r   r   r'      s   
DTestStencil.test_stencil2.<locals>.test_seq.<locals>.stencil2_kernelr   rp   r   r^   r   )r   r4   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   r4   r   r   r&   r   r   r   r      s
   

&r   rk   rl   rn   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   r4   offsetr   r'   r   r   r   r   r      s   
r   c                 S   r   )Nc                 S   s    dt | | d |d   S )Nr"   r   r-   )rp   r   )r   r4   r   r   r   r'          r   r   r   r   r   r   r   r      s   
N)r{   rY   r   intpro   rp   rq   rr   rs   rt   ru   )	rJ   r   r   r   r4   rh   rw   rz   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   )rp   r   r   r.   r   r   r   r   r     r   z+TestStencil.test_stencil3.<locals>.test_seqTrA   r   r7   r(   )   r   N)r   
assertTrue)rJ   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      @      @)rp   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   rp   r   r   r$   )r   r   r   r   r&   r   r   r   r     s   

*zDTestStencil.test_stencil_standard_indexing_1d.<locals>.test_impl_seqr   Nr   rJ   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-   rk   rk   )rp   r   r   onesr<   )r   r   r   r   Dr   r   r   r   ,  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   )rp   r   r   r   r   r$   )r   r   r   r   r   r&   r   r   r   r   r   3  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   )rp   r   r   r1   r   r   r   r   r   J  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   P  s,   z?TestStencil.test_stencil_multiple_inputs.<locals>.test_impl_seqrk   c                 S   sD   t | d | | f}t | d | | f}d}t|||}|S )Nr-   r   )rp   r   r   r5   )r   r   r   r4   r   r   r   r   r   a  s
   Nr   r   r   r   r   test_stencil_multiple_inputsF  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   )rp   r   r   eyebool_r   r   r$   )r   r   r   SOr&   r   r   r   r   r   k  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   )rp   r   r   r   r   r9   )r   r   r   r   r   r   r   r   r   u  s
    z6TestStencil.test_stencil_mixed_types.<locals>.test_seqrk   r   )rJ   r   r   r   r   r   r   test_stencil_mixed_typesi  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   rp   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   )rJ   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   rp   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   rJ   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   rk   rl   r   NzDstencil kernel index is not constant, 'neighborhood' option required)rY   r   r   ro   rp   rq   rr   assertRaisesr   rs   str	exceptionr   r   )rJ   r   r   r   r   r   r   cpfunc1cpfunc2cpfunc3cpfunc4rw   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   rn   )rY   r^   float64assertNotInrt   ru   )rJ   r   rh   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.
        TrA   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   )rp   r   r   intr$   )r   r   r&   r   r   r   r     s   z7TestStencil.test_stencil_nested1.<locals>.test_impl_seq
   N)r   rp   r   rq   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 Nr7   r   r   r   r   r   r   kernel,     z1TestStencil.test_out_kwarg_w_cval.<locals>.kernelr)   c                     *   t dd} t | } | |d |S N   rk   r   r   rp   r   r   	ones_liker   ret
stencil_fnr   r   wrapped2     
z2TestStencil.test_out_kwarg_w_cval.<locals>.wrappedr   r  r!   r   Nr                 ?c                     r   r   r  r  r  r   r   r  I  r	  z-cval type does not match stencil return type.r   zExpected error was not raised)r^   r   rp   r   r   	full_liker  rq   rr   rj   ro   r   r   rs   r   r   rZ   rY   r   AssertionError)rJ   
const_valsr   	const_valr  r   rw   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   c  r   z9TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.kernelr)   c                     r   )N      (@r  r   r  r  r  r   r   r  h  r	  z:TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.wrappedr  r  r!   r   Nr   )rp   nanr  floatr^   r   r   r   r  r  rq   rr   rj   ro   )
rJ   r*   r   r  r   rw   r  r  r  r  r   r  r   test_out_kwarg_w_cval_np_attr^  s    $

z)TestStencil.test_out_kwarg_w_cval_np_attr)r|   r}   r~   rI   skip_unsupportedr   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   rL   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   rN   )rH   r  rI   r   rL   r   r   rI     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.
        rX   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 rN   r   arg0stencil_func_implr   r   wrap_stencil     z=TestManyStencils.check_against_expected.<locals>.wrap_stencilr-   c                    
    | |S rN   r   r8  arg1r9  r   r   r;       
rk   c                        | ||S rN   r   r8  r?  arg2r9  r   r   r;       +Up to 3 arguments can be provided, found %sc                 S   r\   r   r]   r`   r   r   r   rc     rd   z;TestManyStencils.check_against_expected.<locals>.<listcomp>parforsz
@stencil_output:
z
njit_output:
z
parfor_output:
rl   r!  z@stencil failed: %sz@njit failed: %srn   z*Could not find `@do_scheduling` in LLVM IRz@njit(parallel=True) failed: %sz

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

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

%sNNr   )getdictr   r%  updater   r   
ValueErrorre   rZ   ro   rY   printrp   rq   rr   assertEqualr   r#  r&  r'  r   rs   rt   ru   r  RuntimeErrorjoin)rJ   rf   rw   rK   rg   rX   r  DEBUG_OUTPUTr1  
stencil_exnjit_ex	parfor_exstencil_argsstencilfunc_outputr;  rS   ry   wrapped_cfuncrz   wrapped_cpfuncr   r  r  errsstr1str2r   r/  r0  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.
        rX   r  Nc              
   3   r  r  r"  r(  r.  r   r   r1  @  r2  z7TestManyStencils.check_exceptions.<locals>.errorhandlerr   r   r3  r4  r5  r   c                    r6  rN   r   r7  r9  r   r   r;  g  r<  z7TestManyStencils.check_exceptions.<locals>.wrap_stencilr-   c                    r=  rN   r   r>  r9  r   r   r;  j  r@  rk   c                    rA  rN   r   rB  r9  r   r   r;  m  rD  rE  c                 S   r\   r   r]   r`   r   r   r   rc   t  rd   z5TestManyStencils.check_exceptions.<locals>.<listcomp>rF  c                 S   rG  rH  r   r`   r   r   r   rc     rJ  rK  c                 S   rL  rM  r   r`   r   r   r   rc     rN  rO  c                 S   rG  rP  r   r`   r   r   r   rc     rQ  rR  rS  rT  r   )rU  rV  r   r%  rW  r   r   rX  re   rZ   ro   rY   r[  r\  )rJ   rf   rK   rg   rX   r  r1  r^  r_  r`  ra  r;  rS   rc  rd  r  r  re  rf  rg  r   rh  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   r3  )rV  items)rJ   rg   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)rU  rp  r   rX  r$  )rJ   rK   rg   r    
init_shaperb   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 r6   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   rr  rp   fullrp  r'  r$   r   r    _TestManyStencils__retdtype_TestManyStencils__b0_TestManyStencils__b_TestManyStencils__ar   rJ   r   r   __kernel     z/TestManyStencils.test_basic00.<locals>.__kernelr   rk   r   Nrp   r   r   ri  rJ   _TestManyStencils__kernelr   rw   r   r~  r   test_basic00  
   

zTestManyStencils.test_basic00c                    rs  )	rel index add constc                 S   rt  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 rv  rw  ry  r~  r   r   r       z/TestManyStencils.test_basic01.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic01  r  zTestManyStencils.test_basic01c                    rs  )	r  c                 S   rt  )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   rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic02.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic02  r  zTestManyStencils.test_basic02c                    rs  )	r  c                 S   rt  )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 rv  rw  ry  r~  r   r   r       z/TestManyStencils.test_basic03.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic03  r  zTestManyStencils.test_basic03c                    rs  )	r  c                 S   rt  )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  rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic04.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic04  r  zTestManyStencils.test_basic04c                    rs  )	r  c                 S   rt  )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  rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic05.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic05  r  zTestManyStencils.test_basic05c                    rs  )	r  c                 S   rt  )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  rw  ry  r~  r   r   r  /  r  z/TestManyStencils.test_basic06.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic06'  r  zTestManyStencils.test_basic06c                    rs  )	r  c                 S   rt  )Nr   r   r   r   r   r   r   r   ?  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 rv  rw  ry  r~  r   r   r  E     z/TestManyStencils.test_basic07.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic07=  r  zTestManyStencils.test_basic07c                    rs  )	r  c                 S   rt  )Nr   r   r   r   r   r   r   r   U  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  rw  ry  r~  r   r   r  [  r  z/TestManyStencils.test_basic08.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic08S  r  zTestManyStencils.test_basic08c                    rs  )	r  c                 S   rt  )Nr+   r   r   r   r   r   r   k  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,   rw  ry  r~  r   r   r  q  r  z/TestManyStencils.test_basic09.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic09i  r  zTestManyStencils.test_basic09c                    rs  )	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 rv  rw  ry  r~  r   r   r       2z/TestManyStencils.test_basic10.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic10  
   

zTestManyStencils.test_basic10c                    rs  )	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  rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic11.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic11  r  zTestManyStencils.test_basic11c                    rs  )	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  rw  ry  r~  r   r   r       2z/TestManyStencils.test_basic12.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic12  r  zTestManyStencils.test_basic12c                    rs  )	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  rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic13.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic13  r  zTestManyStencils.test_basic13c                    rs  )	!rel index add domain change constc                 S      | d d S )Nr7   r
  r   r   r   r   r   r     rD  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
  rw  ry  r~  r   r   r    s   "z/TestManyStencils.test_basic14.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic14  r  zTestManyStencils.test_basic14c                    rs  )	r  c                 S   s   d}| d | S )Nr
  r7   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  rw  r   r    rz  r{  r|  r}  r  r~  r   r   r    s   "z0TestManyStencils.test_basic14b.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic14b  
   
zTestManyStencils.test_basic14bc                    rs  )	ztwo rel index, add constc                 S      | d | d  d S )Nr7   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(   rw  ry  r~  r   r   r       z/TestManyStencils.test_basic15.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic15  
   
zTestManyStencils.test_basic15c                    rs  )	&two rel index boundary test, add constc                 S   r  )Nr7   )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(   rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic17.<locals>.__kernelr   rk   r   Nr  r  r   r~  r   test_basic17  r  zTestManyStencils.test_basic17c                    rs  )	r  c                 S   r  )Nr7   r,   r   r(   r   r   r   r   r   r   -  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(   rw  ry  r~  r   r   r  2     z/TestManyStencils.test_basic18.<locals>.__kernelr   rk   r   Nr  r  r   r~  r   test_basic18+  r  zTestManyStencils.test_basic18c                    rs  )	r  c                 S   r  )Nr7   r   rk   r(   r   r   r   r   r   r   C  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   rk   r(   rw  ry  r~  r   r   r  H  s   z/TestManyStencils.test_basic19.<locals>.__kernelr   rk   r   Nr  r  r   r~  r   test_basic19A  r  zTestManyStencils.test_basic19c                    rs  )	r  c                 S   r  )Nr7   )r   r(   r   r   r   r   r   r   Y  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   rk   r   r  r(   rw  ry  r~  r   r   r  ^  r  z/TestManyStencils.test_basic20.<locals>.__kernelr   rk   r   Nr  r  r   r~  r   test_basic20W  r  zTestManyStencils.test_basic20c                    rs  )	zsame rel, add constc                 S   s   | d | d  d S )Nr7   r(   r   r   r   r   r   r   o  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  rw  ry  r~  r   r   r  t  r  z/TestManyStencils.test_basic21.<locals>.__kernelr   rk   r   Nr  r  r   r~  r   test_basic21m  r  zTestManyStencils.test_basic21c                    rs  )	z%rel idx const expr folding, add constc                 S   r  )Nr   r7   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  rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic22.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic22  r  zTestManyStencils.test_basic22c                    rs  )	zrel idx, work in bodyc                 S   s&   t d| d  }| d | d  | S Nr   )r-   r   r   r7   rp   sinr   rb   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   rr  rp   rx  rp  r'  r$   r  r   r    rz  r{  r|  r}  rb   r~  r   r   r    s   z/TestManyStencils.test_basic23.<locals>.__kernelr  rk   r   Nr  r  r   r~  r   test_basic23  s
   
zTestManyStencils.test_basic23c                    rs  )	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  rk   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   rk   r   c                 S   r  )Nr   r(   r   r   r   r   r   r     rD  z-TestManyStencils.test_basic24.<locals>.kernelr  N)rp   r   r   rj  r   rJ   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   rk   r   c                 S   s   dS )Nr(   r   r   r   r   r   r     s   z-TestManyStencils.test_basic25.<locals>.kernelr  Nrp   r   r   rj  rX  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(   rw  )r   r    rz  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   rk   r-   r   r(   rw  )r   r    rz  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 )Nr7         $@)rp   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  )rr  rp   rx  rp  r'  r$   r   ry  r~  r   r   r       (z/TestManyStencils.test_basic28.<locals>.__kernelr   rk   r   Nrp   r   r   astypefloat32ri  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  rk   r   c                 S   s   | dt tdf S )Nr   )r   rp   cosr   r   r   r   r   )     z-TestManyStencils.test_basic29.<locals>.kernelr  Nrp   r   r   rj  rX  r   r   r  r   r   r   test_basic29%     
zTestManyStencils.test_basic29c                    r  )	zsigned zerosc                 S   rt  r6   r   r   r   r   r   r   1  r<  z-TestManyStencils.test_basic30.<locals>.kernelc                    ru  rv  rw  ry  r~  r   r   r  6  r  z/TestManyStencils.test_basic30.<locals>.__kernelr   rk   r   Nr  r  r   r~  r   test_basic30/  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   F  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 rv  rw  r  r~  r   r   r  L  s   z/TestManyStencils.test_basic31.<locals>.__kernelr   rk   r   Nr  r  r   r~  r   test_basic31D  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  rk   r   c                 S   s   d}d| }| |df S r  r   )r   sr  r   r   r   r   _  s   z.TestManyStencils.test_basic31b.<locals>.kernelN)rp   r   r   r  r   r   r   test_basic31bZ  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   h  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 rv  rw  )r   r    rz  r{  r}  r  r~  r   r   r  n  s   z0TestManyStencils.test_basic31c.<locals>.__kernelr  Nrp   r   ri  r  r   r~  r   test_basic31cf  s
   
	
zTestManyStencils.test_basic31cc                 C   r  )ztyped int indexr  rk   r   c                 S   s   | t ddf S r  )rp   int8r   r   r   r   r     r[   z-TestManyStencils.test_basic32.<locals>.kernelr  Nr  r  r   r   r   test_basic32{  r  zTestManyStencils.test_basic32c                    rs  )	zadd 0d arrayc                 S   r  )Nr7   r   )rp   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 rv  )rr  rp   rx  rp  r'  r$   r  ry  r~  r   r   r    r  z/TestManyStencils.test_basic33.<locals>.__kernelr  rk   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    rz  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   rt  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   rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic35.<locals>.__kernelr  rk   r   Nr*   r   rX   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   rw  ry  r~  r   r   r       z/TestManyStencils.test_basic36.<locals>.__kernelr  rk   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   rw  ry  r~  r   r   r    r  z/TestManyStencils.test_basic37.<locals>.__kernelr  rk   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  rk   r   r   r3  r   r*   r
  rX   r  Nrp   r   r   ro  r   rj  rJ   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   rw  ry  r*   r   rJ   r   r   r    r  z/TestManyStencils.test_basic39.<locals>.__kernelr  rk   r   Nr*   r  )rp   r  r  r   r   ri  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   r/   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,   rw  r   r0   r    rz  r{  r|  r}  r~  r   r   r  #  s   
2z/TestManyStencils.test_basic40.<locals>.__kernelr  rk   r   Nr  rJ   r  r   r0   rw   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   r/   r   r   r   r   3  r   z-TestManyStencils.test_basic41.<locals>.kernelr  rk   r   r(   r   r  Nrp   r   r   rj  rX  r  rJ   r   r   r0   r   r   r   test_basic411     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   r/   r   r   r   r   <  r   z-TestManyStencils.test_basic42.<locals>.kernelr  rk   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   r/   r   r   r   r   E  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   rw  r  r~  r   r   r  J  s   
z/TestManyStencils.test_basic43.<locals>.__kernelg      >@r      Nr  r  r   r~  r   test_basic43C  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   r/   r   r   r   r   ]  s   z-TestManyStencils.test_basic44.<locals>.kernelr  rk   r   r  Nrp   r   r   rj  r   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   r/   r   r   r   r   g     z-TestManyStencils.test_basic45.<locals>.kernelr  rk   r   r  Nr  r	  r   r   r   test_basic45e  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   r/   r   r   r   r   q     z-TestManyStencils.test_basic46.<locals>.kernelr  rk   r   r  Nr  r	  r   r   r   test_basic46o  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   r0   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  rw  r   r0   r   r    rz  r{  r|  r}  r~  r   r   r    s   z/TestManyStencils.test_basic47.<locals>.__kernelr  rk   r   Nr  rJ   r  r   r0   r   rw   r   r~  r   test_basic47y  s   zTestManyStencils.test_basic47c                    rs  )	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   )rr  rp   rx  rp  r'  r$   r  )r   r    rz  r{  r|  r}  r   r~  r   r   r    s   z/TestManyStencils.test_basic48.<locals>.__kernelr  rk   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   r/   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  rw  r  r~  r   r   r       
&z/TestManyStencils.test_basic49.<locals>.__kernelr  rk   r   Nr:   r0   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   r/   r   r   r   r     r   z-TestManyStencils.test_basic50.<locals>.kernelNr   rJ   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   r/   r   r   r   r     r   z-TestManyStencils.test_basic51.<locals>.kernelr  rk   r   r:   r   r0   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   rw  r  r~  r   r   r    s   z/TestManyStencils.test_basic52.<locals>.__kernelr  rk   r   r  r-   Nr:   r0   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   r/   r   r   r   r     r   z-TestManyStencils.test_basic53.<locals>.kernelr  rk   r   r  r:   r   r  N)rp   r   r   ro  r#  r   rj  rJ   r   r   r0   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   r0   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-   rw  )r   r0   r    rz  r{  r|  r}  r  r~  r   r   r    s   
*z/TestManyStencils.test_basic54.<locals>.__kernelr  rk   r   Nr:   r0   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   r0   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 r/  rw  )	r   r0   r    rz  r{  r|  r}  r  r  r~  r   r   r    s   
*z/TestManyStencils.test_basic55.<locals>.__kernelr  rk   r   Nr:   r0   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   r0   r  accrm  r  r   r   r   r   /  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 r/  rw  )r   r0   r    rz  r{  r|  r}  r  r3  rm  r  r~  r   r   r  9  s   

.z/TestManyStencils.test_basic56.<locals>.__kernelr  rk   r   Nr:   r0   r  r  r  r   r~  r   test_basic56-  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   O  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 rv  rw  r   r0   r    rz  r{  r|  r}  r   r~  r   r   r  U  s   
&z/TestManyStencils.test_basic57.<locals>.__kernelr  rk   r   Nr:   r0   r  r  r  r   r~  r   test_basic57M  r1  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   g  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 rv  rw  r5  r~  r   r   r  m  s   
&z/TestManyStencils.test_basic58.<locals>.__kernelr  rk   r   Nr:   r0   r  r  r  r   r~  r   test_basic58e  r1  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  rw  r  r~  r   r   r    s   *z/TestManyStencils.test_basic59.<locals>.__kernelr  rk   r   r   Nr:   r0   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  rk   r   )r   )r3  r:   r0   r   r  Nr  )rJ   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   r  r8  r   r/   r   r   r   r     r   z-TestManyStencils.test_basic61.<locals>.kernelr  rk   r   r:   r   r  N)rp   r   r   rj  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  r8  r   r/   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  rw  r  r~  r   r   r    r#  z/TestManyStencils.test_basic62.<locals>.__kernelr  rk   r   Nr0   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   r/   r   r   r   r     r   z-TestManyStencils.test_basic63.<locals>.kernelr  rk   r   r   r  r:   r0   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   rt  r6   r   r   r   r   r   r     r<  z-TestManyStencils.test_basic64.<locals>.kernelr  rk   r   r:   r   r  Nr  rJ   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      rD  r   rE  rw  r   r    rz  r{  _TestManyStencils__anrG  r&   r~  r   r   r       z/TestManyStencils.test_basic65.<locals>.__kernel      N@)rD  r   r    r  Nr  rJ   r  r   nhrw   r   r~  r   test_basic65     



zTestManyStencils.test_basic65c                    rA  )
zbasic const neighborhood testc                 S   s(   d}t ddD ]}|| d 7 }q|d S rC  r#   rF  r   r   r   r     rH  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 rJ  rw  rL  r~  r   r   r  	  rN  z/TestManyStencils.test_basic66.<locals>.__kernelrO  rP  r    r  Nr  rQ  r   r~  r   test_basic66  rT  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   rG  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   rX  rY  rw  	r   r    rz  r{  _TestManyStencils__bnrM  rG  r&   r   r~  r   r   r  	     z/TestManyStencils.test_basic67.<locals>.__kernel      i@r      r   rX  r   r    r  Nr  rQ  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   rX  r   rY  r#   )r   rG  r   r   r   r   r   2	  s   z.TestManyStencils.test_basic67b.<locals>.kernelr`  r   ra  r    )rc  r  N)rp   r   r   rj  r   rX  r?  r   r   r   test_basic67b0	  s
   
zTestManyStencils.test_basic67bc                    rV  )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 rW  r#   rZ  r   r   r   r   >	  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\  rw  r]  r~  r   r   r  H	  r_  z/TestManyStencils.test_basic68.<locals>.__kernelr`  r   ra  rb  r    r  Nr  rQ  r   r~  r   test_basic68<	  s   



zTestManyStencils.test_basic68c                    rV  )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   rX  r7   rY  r#   rZ  r   r   r   r   ^	  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\  rw  r]  r~  r   r   r  g	  r_  z/TestManyStencils.test_basic69.<locals>.__kernelr`  r   ra  rb  r    r  Nr  rQ  r   r~  r   test_basic69\	  re  zTestManyStencils.test_basic69c                    rV  )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   rX  rY  r#   r   rG  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   rX  rY  rw  r   r    rz  r{  r^  rM  rG  rj  r&   r  r   r~  r   r   r  	  s   z/TestManyStencils.test_basic70.<locals>.__kernelr`  r   ra  rb  r    r  Nr  rQ  r   r~  r   test_basic70z	  s   


zTestManyStencils.test_basic70c                    rA  )
zneighborhood, type changec                 S   s<   d}t ddD ]}d}|dkrd}|| | | 7 }q|d S )Nr   rD  r           r
  rE  r#   )r   rG  r&   rm  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   rK  rD  r   rn  ro  r
  rE  rw  )r   r    rz  r{  rM  rG  r&   rm  r~  r   r   r  	  s   z/TestManyStencils.test_basic71.<locals>.__kernelrO  rP  r    r  Nr  rQ  r   r~  r   test_basic71	  s   



zTestManyStencils.test_basic71c                    rA  )
z+neighborhood, narrower range than specifiedc                 S   rB  )Nr   r  rE  r#   rF  r   r   r   r   	  rH  z-TestManyStencils.test_basic72.<locals>.kernelc                    rI  )Nr   r   r   rK  rq  r  rE  rw  rL  r~  r   r   r  	  rN  z/TestManyStencils.test_basic72.<locals>.__kernelrO  rP  r    r  Nr  rQ  r   r~  r   test_basic72	  rT  zTestManyStencils.test_basic72c                    rA  )
zneighborhood, +ve rangec                 S   rB  )Nr   r      rE  r#   rF  r   r   r   r   	  rH  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   rs  rE  rw  rL  r~  r   r   r  	     z/TestManyStencils.test_basic73.<locals>.__kernelrO  ))r   r   r    r  Nr  rQ  r   r~  r   test_basic73	  rT  zTestManyStencils.test_basic73c                    rA  )
zneighborhood, -ve rangec                 S   rB  )Nr   rX  r!   rE  r#   rF  r   r   r   r   	  rH  z.TestManyStencils.test_basic73b.<locals>.kernelc                    rI  )Nr   r   r   r   rX  r!   rE  rw  rL  r~  r   r   r  	  rN  z0TestManyStencils.test_basic73b.<locals>.__kernelrO  ))rX  r   r    r  Nr  rQ  r   r~  r   test_basic73b	  rT  zTestManyStencils.test_basic73bc                    rA  )
z!neighborhood, -ve->+ve range spanc                 S   rB  )Nr   r   rs  rE  r#   rF  r   r   r   r   
  rH  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   rs  rE  rw  rL  r~  r   r   r  
  rt  z/TestManyStencils.test_basic74.<locals>.__kernelrO  ))r   r   r    r  Nr  rQ  r   r~  r   test_basic74
  rT  zTestManyStencils.test_basic74c                    rA  )
z!neighborhood, -ve->-ve range spanc                 S   rB  )Nr   rX  r   rE  r#   rF  r   r   r   r   +
  rH  z-TestManyStencils.test_basic75.<locals>.kernelc                    rI  )Nr   r   r   r   rX  r   rE  rw  rL  r~  r   r   r  4
  rN  z/TestManyStencils.test_basic75.<locals>.__kernelrO  ))rX  r,   r    r  Nr  rQ  r   r~  r   test_basic75)
  s   	



zTestManyStencils.test_basic75c                    rV  )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   rY  r#   ri  r   r   r   r   G
  rk  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   rk   r   r  r  r   rY  rw  rl  r~  r   r   r  S
  s   z/TestManyStencils.test_basic76.<locals>.__kernelr`  r   ra  ))r  r   )r  rk   r    r  Nr  rQ  r   r~  r   test_basic76E
  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   r0   rG  r&   r   r   r   r   r   j
     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   rk   r   r  r  rw  
r   r0   r    rz  r{  r^  rM  rG  r&   r   r~  r   r   r  s
     
z/TestManyStencils.test_basic77.<locals>.__kernelr`  r   ra  r  r   r  r    r  Nr  rJ   r  r   r0   rR  rw   r   r~  r   test_basic77h
     	
zTestManyStencils.test_basic77c                    rz  )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  rw  r  r~  r   r   r  
  r  z/TestManyStencils.test_basic78.<locals>.__kernel     r@r&  ra  )r  r  )r  r,   r    r  Nr  r  r   r~  r   test_basic78
  r  zTestManyStencils.test_basic78c                    rz  )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  rw  r  r~  r   r   r  
  s   
z0TestManyStencils.test_basic78b.<locals>.__kernelr  r&  ra  )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>.kernelr`  r   ra  r-   r  r    r  r  N)rp   r   r   ro  r   rj  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  rw  r  r~  r   r   r  
  s   
z/TestManyStencils.test_basic80.<locals>.__kernelr`  r   ra  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>.kernelr`  r   ra  r   r  r    r  r  N)rp   r   r   copyro  r   r  rj  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   rk   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   rk   r   r  r  r  rw  r  r~  r   r   r       
"z/TestManyStencils.test_basic82.<locals>.__kernelr`  r   ra  r  r0   )r    r:   r  Nrp   r   r   r  ri  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   -  r  z-TestManyStencils.test_basic83.<locals>.kernelr`  r   ra  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   rk   r   r   r  r  r  rw  r  r~  r   r   r  9  r  z/TestManyStencils.test_basic83.<locals>.__kernelr  r0   r  r    r:   r*   r  Nr  )rJ   r   r0   r  rR  rw   r   r~  r   test_basic83+  s   
zTestManyStencils.test_basic83c                    rs  )	z kernel calls njit c                 S      | d t | d  S Nr7   r   )r?   r   r   r   r   r   Q  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 rv  )rr  rp   rx  rp  r'  r$   r?   py_funcry  r~  r   r   r  V     z/TestManyStencils.test_basic84.<locals>.__kernelr`  r   ra  Nr  r  r   r~  r   test_basic84O  r  zTestManyStencils.test_basic84c                    rs  )	z! kernel calls njit(parallel=True)c                 S   r  r  )rC   r   r   r   r   r   f  r  z-TestManyStencils.test_basic85.<locals>.kernelc              	      r  rv  )rr  rp   rx  rp  r'  r$   rC   r  ry  r~  r   r   r  l  r  z/TestManyStencils.test_basic85.<locals>.__kernelr`  r   ra  Nr  r  r   r~  r   test_basic85d  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   rt  r6   r   r   r   r   r   r   }  r<  z-TestManyStencils.test_basic86.<locals>.kernelr`  r   ra  badr  N)rp   r   r   rj  rX  r   r?  r   r   r   test_basic86{  s
   
zTestManyStencils.test_basic86c                    rs  )	z reserved arg name in use c                 S   rt  r6   r   )__sentinel__r   r   r   r     r<  z-TestManyStencils.test_basic87.<locals>.kernelc                    ru  rv  rw  )r  r    rz  r{  r|  r}  r~  r   r   r    r  z/TestManyStencils.test_basic87.<locals>.__kernelr`  r   ra  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     rD  z-TestManyStencils.test_basic88.<locals>.kernelr  rk   r   r  r(   r  Nr  r  r   r   r   test_basic88  s   zTestManyStencils.test_basic88c                    rs  )	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  r7   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   rk   r   r  r  r   rw  ry  r~  r   r   r    s   z/TestManyStencils.test_basic89.<locals>.__kernelr`  r   ra  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  r`  r(   r#   )r   r0   rG  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   rk   r   r   r  r  r  r`  r(   rw  )r   r0   r    rz  r{  r^  rM  rG  r&   r   r  r~  r   r   r    s    
"
z/TestManyStencils.test_basic90.<locals>.__kernelr`  r   ra  r  r0   r  r  r  Nr  r  r   r~  r   test_basic90  s   
zTestManyStencils.test_basic90c                    rs  )	z? Issue #3454, const(int) == const(int) evaluating incorrectly. c                 S   s   d}ddkrd}| d | S )Nr   r-   r7   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 ]%}td| jd D ]}d}ddkr2d}| |d |d f | |||f< q(q|S r/  rw  )r   r    rz  r{  r|  r}  r0   r~  r   r   r    s   "z/TestManyStencils.test_basic91.<locals>.__kernelr`  r   ra  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   r7   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  rw  ry  r~  r   r   r    0   
z/TestManyStencils.test_basic92.<locals>.__kernelra  r-   r   r   Nrp   r  r   r   r  r   ri  rJ   r  r   rw   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   rw  ry  r~  r   r   r  ,  r  z/TestManyStencils.test_basic93.<locals>.__kernelra  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-   rp   medianr   r   r   r   r   C  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-   rr  rp   rx  rp  r'  r$   r  r   r    rz  r{  r^  rM  r~  r   r   r  H  s   z/TestManyStencils.test_basic94.<locals>.__kernelra  r   r   r   r  r  r    r  N)rp   r   uint32r   ri  rQ  r   r~  r   test_basic94A  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_basic95X  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   a  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    rz  r{  rM  r~  r   r   r  f  s   "z/TestManyStencils.test_basic96.<locals>.__kernelra  r   )r  r    r  N)rp   r   r  ri  rQ  r   r~  r   test_basic96_  s   


zTestManyStencils.test_basic96c                 C   r%  )z 2D slice and index. c                 S   s   t | dddf S )Nr   r-   rk   r  r   r   r   r   r   w  r  z-TestManyStencils.test_basic97.<locals>.kernelNr   r'  r   r   r   test_basic97t  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   rt  r6   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   rw  r  r   r   r   r    r  z/TestManyStencils.test_basic98.<locals>.__kernelg      @)r-   rk   r  )r    r*   r  N)rp   r  r  r  r   r   ri  rQ  r   r   r   test_basic98{  s   $


zTestManyStencils.test_basic98)tr|   r}   r~   rI   ri  rj  ro  rr  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.  r0  r2  r4  r6  r7  r9  r:  r;  r<  r=  r@  rS  rU  rd  rf  rg  rh  rm  rp  rr  ru  rv  rw  rx  ry  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   rL   r   r  }  s     f
		


		




 
 "!#    $	)

r  __main__)(numpyrp   
contextlibr   r^   r   r   
numba.corer   r   numba.core.compilerr   r   numba.core.cpur	   numba.tests.supportr
   r   numba.core.errorsr   r   r   r  r  r   r'   r.   r1   r5   r9   r;   r<   r?   rC   TestCaserD   r   r  r|   mainr   r   r   r   <module>   s|   









7   z                    ,