o
    0 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   e/home/app/PaddleOCR-VL-test/.venv_paddleocr/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Zparallelc                 C   r=   r>   r   r   r   r   r   addone_pjitJ   r@   rB   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superrC   __init__)selfargs	__class__r   r   rH   S   s   zTestStencilBase.__init__c                 C   s   t tjjtjj||d |i S N)r   r   Z
cpu_targetZtyping_contextZtarget_context)rI   funcsigflagsr   r   r   _compile_thisZ   s   
zTestStencilBase._compile_thisc                 K   s0   t  }d|_|s
dn|}t||_| |||S rD   )r   rF   r	   Zauto_parallelrQ   )rI   rN   rO   kwsrP   optionsr   r   r   compile_parallel_   s
   
z TestStencilBase.compile_parallelc                 C   s   | j ||| jdS )N)rP   )rQ   rE   )rI   rN   rO   r   r   r   compile_njitf      zTestStencilBase.compile_njitc                 O   s2   t dd |D }| ||}| ||}||fS )Nc                 S      g | ]}t |qS r   numbaZtypeof.0xr   r   r   
<listcomp>j       z/TestStencilBase.compile_all.<locals>.<listcomp>)tuplerT   rU   )rI   pyfuncrJ   kwargsrO   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)rd   entry_pointnptestingassert_almost_equalassertInlibraryget_llvm_str)
rI   Zno_stencil_funcr`   rJ   rc   rb   expectedZ	py_outputnjit_outputparfor_outputr   r   r   checkq   s   

zTestStencilBase.check)__name__
__module____qualname__Z_numba_parallel_test_rH   rQ   rT   rU   rd   rs   __classcell__r   r   rK   r   rC   O   s    rC   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 rM   )rG   rx   rH   rI   rJ   ra   rK   r   r   rH         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)rj   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-   )rj   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   rj   r   r   r   r$   r   r   r   r&   jr   r   r   test_impl_seq   s   z0TestStencil.test_stencil1.<locals>.test_impl_seqd   Nrs   )rI   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 rM   )rj   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   rj   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   rj   r   rY   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   re   rf   rh   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    Z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-   )rj   r   )r   r4   r   r   r   r'          r   r   r   r   r   r   r   r      s   
N)rs   rT   r   intpri   rj   rk   rl   rm   rn   ro   )	rI   r   r   r   r4   rb   rp   rr   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   )rj   r   r   r.   r   r   r   r   r     r   z+TestStencil.test_stencil3.<locals>.test_seqTrA   r   r7   r(   )   r   N)r   
assertTrue)rI   r   Z	test_njitZtest_parr   Zseq_resZnjit_resZ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      @      @)rj   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   rj   r   r   r$   )r   r   r   r   r&   r   r   r   r     s   

*zDTestStencil.test_stencil_standard_indexing_1d.<locals>.test_impl_seqr   Nr   rI   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-   re   re   )rj   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   )rj   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   )rj   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_seqre   c                 S   sD   t | d | | f}t | d | | f}d}t|||}|S )Nr-   r   )rj   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   )rj   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   )rj   r   r   r   r   r9   )r   r   r   r   r   r   r   r   r   u  s
    z6TestStencil.test_stencil_mixed_types.<locals>.test_seqre   r   )rI   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}   rj   r   r   r   rY   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   )rI   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}   rj   r   r   rY   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   rI   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   re   rf   r   NzDstencil kernel index is not constant, 'neighborhood' option required)rT   r   r   ri   rj   rk   rl   assertRaisesr   rm   str	exceptionr   r   )rI   r   r   r   r   r   r   Zcpfunc1Zcpfunc2Zcpfunc3Zcpfunc4rp   Zparfor_output1Zparfor_output2Zparfor_output3Zparfor_output4er   r   r   test_stencil_call_const  s>   		





z#TestStencil.test_stencil_call_constc                 C   s:   dd }| j |tjdd fdd}| d|j  dS )zYTests 1D numba.stencil calls without parallel translation
           turned off.
        c                 S   s   t dd | S )Nc                 S   r   r   r   r   r   r   r   r   
  r   zJTestStencil.test_stencil_parallel_off.<locals>.test_impl.<locals>.<lambda>)rY   r   )r   r   r   r   r   	  rV   z8TestStencil.test_stencil_parallel_off.<locals>.test_implNFr   rh   )rT   rY   float64ZassertNotInrn   ro   )rI   r   rb   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   )rj   r   r   intr$   )r   r   r&   r   r   r   r     s   z7TestStencil.test_stencil_nested1.<locals>.test_impl_seq
   N)r   rj   r   rk   Z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   re   r   r}   rj   r   r   	ones_liker   retZ
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)rY   r   rj   r   r   	full_liker   rk   rl   rd   ri   r   r   rm   r   r   rU   rT   r   AssertionError)rI   Z
const_valsr   Z	const_valr   r   rp   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}   )rj   nanr   floatrY   r   r   r   r   r   rk   rl   rd   ri   )
rI   r*   r   r   r   rp   r   r   r   r   r   r   r   test_out_kwarg_w_cval_np_attr^  s    $

z)TestStencil.test_out_kwarg_w_cval_np_attr)rt   ru   rv   rH   skip_unsupportedr   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   rK   r   rx      s<    

T



"

 

O


7rx   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                    ry   rM   )rG   r   rH   rz   rK   r   r   rH     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.
        rS   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   ZextyZusecaser   Z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 rM   r   arg0stencil_func_implr   r   wrap_stencil     z=TestManyStencils.check_against_expected.<locals>.wrap_stencilr-   c                    
    | |S rM   r   r  arg1r  r   r   r       
re   c                        | ||S rM   r   r  r   Zarg2r  r   r   r       +Up to 3 arguments can be provided, found %sc                 S   rW   r   rX   rZ   r   r   r   r]     r^   z;TestManyStencils.check_against_expected.<locals>.<listcomp>parforsz
@stencil_output:
z
njit_output:
z
parfor_output:
rf   r  z@stencil failed: %sz@njit failed: %srh   z*Could not find `@do_scheduling` in LLVM IRz@njit(parallel=True) failed: %sz

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

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

%sNNr   )getdictr   r	  updater   r   
ValueErrorr_   rU   ri   rT   printrj   rk   rl   assertEqualr   r  r
  r  r   rm   rn   ro   r   RuntimeErrorjoin)rI   r`   rp   rJ   ra   rS   r  ZDEBUG_OUTPUTr  
stencil_exnjit_ex	parfor_exstencil_argsZstencilfunc_outputr  rO   rq   wrapped_cfuncrr   wrapped_cpfuncr   r   r   errsstr1str2r   r  r  r  r   check_against_expected  s   








z'TestManyStencils.check_against_expectedc                    s  | dt }| d}g  g td fdd	}t|t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.
        rS   r  Nc              
   3   r  r  r  r  r  r   r   r  @  r  z7TestManyStencils.check_exceptions.<locals>.errorhandlerr   r   r  r  r  r   c                    r  rM   r   r  r  r   r   r  g  r  z7TestManyStencils.check_exceptions.<locals>.wrap_stencilr-   c                    r  rM   r   r  r  r   r   r  j  r!  re   c                    r"  rM   r   r#  r  r   r   r  m  r$  r%  c                 S   rW   r   rX   rZ   r   r   r   r]   t  r^   z5TestManyStencils.check_exceptions.<locals>.<listcomp>r&  c                 S   r'  r(  r   rZ   r   r   r   r]     r*  r+  c                 S   r,  r-  r   rZ   r   r   r   r]     r.  r/  c                 S   r'  r0  r   rZ   r   r   r   r]     r1  r2  r3  r4  r   )r5  r6  r   r	  r7  r   r   r8  r_   rU   ri   rT   r;  r<  )rI   r`   rJ   ra   rS   r  r  r=  r>  r?  r@  r  rO   rA  rB  r   r   rC  rD  rE  r   rF  r   check_exceptions(  sn   





z!TestManyStencils.check_exceptionsc                 K   sD   t  }d |d< d |d< d |d< d |d< | D ]\}}|||< q|S )NZ	pyStencilr   r   r  )r6  items)rI   ra   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)r5  rM  r   r8  r  )rI   rJ   ra   r    Z
init_shaper\   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   rN  rj   fullrM  r  r$   r   r    _TestManyStencils__retdtype_TestManyStencils__b0_TestManyStencils__b_TestManyStencils__ar   rI   r   r   __kernel     z/TestManyStencils.test_basic00.<locals>.__kernelr   re   r   Nrj   r   r   rG  rI   _TestManyStencils__kernelr   rp   r   rZ  r   test_basic00  
   

zTestManyStencils.test_basic00c                    rO  )	rel index add constc                 S   rP  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 rR  rS  rU  rZ  r   r   r[       z/TestManyStencils.test_basic01.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic01  ra  zTestManyStencils.test_basic01c                    rO  )	rb  c                 S   rP  )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   rS  rU  rZ  r   r   r[    r\  z/TestManyStencils.test_basic02.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic02  ra  zTestManyStencils.test_basic02c                    rO  )	rb  c                 S   rP  )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 rR  rS  rU  rZ  r   r   r[       z/TestManyStencils.test_basic03.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic03  ra  zTestManyStencils.test_basic03c                    rO  )	rb  c                 S   rP  )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 rf  rS  rU  rZ  r   r   r[    r\  z/TestManyStencils.test_basic04.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic04  ra  zTestManyStencils.test_basic04c                    rO  )	rb  c                 S   rP  )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 rf  rS  rU  rZ  r   r   r[    rd  z/TestManyStencils.test_basic05.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic05  ra  zTestManyStencils.test_basic05c                    rO  )	rb  c                 S   rP  )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 rf  rS  rU  rZ  r   r   r[  /  rh  z/TestManyStencils.test_basic06.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic06'  ra  zTestManyStencils.test_basic06c                    rO  )	rb  c                 S   rP  )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 rR  rS  rU  rZ  r   r   r[  E     z/TestManyStencils.test_basic07.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic07=  ra  zTestManyStencils.test_basic07c                    rO  )	rb  c                 S   rP  )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 rf  rS  rU  rZ  r   r   r[  [  r\  z/TestManyStencils.test_basic08.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic08S  ra  zTestManyStencils.test_basic08c                    rO  )	rb  c                 S   rP  )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,   rS  rU  rZ  r   r   r[  q  rd  z/TestManyStencils.test_basic09.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic09i  ra  zTestManyStencils.test_basic09c                    rO  )	rb  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 rR  rS  rU  rZ  r   r   r[       2z/TestManyStencils.test_basic10.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic10  
   

zTestManyStencils.test_basic10c                    rO  )	rb  c                 S   ru  )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 rf  rS  rU  rZ  r   r   r[    rv  z/TestManyStencils.test_basic11.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic11  rx  zTestManyStencils.test_basic11c                    rO  )	rb  c                 S   ru  )Nrk  rm  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 rf  rS  rU  rZ  r   r   r[       2z/TestManyStencils.test_basic12.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic12  rx  zTestManyStencils.test_basic12c                    rO  )	rb  c                 S   ru  )Nrr  ro  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 rf  rS  rU  rZ  r   r   r[    rz  z/TestManyStencils.test_basic13.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic13  rx  zTestManyStencils.test_basic13c                    rO  )	!rel index add domain change constc                 S      | d d S )Nr7   r   r   r   r   r   r   r     r$  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   rS  rU  rZ  r   r   r[    s   "z/TestManyStencils.test_basic14.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic14  rx  zTestManyStencils.test_basic14c                    rO  )	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  rS  r   r    rV  rW  rX  rY  r  rZ  r   r   r[    s   "z0TestManyStencils.test_basic14b.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic14b  
   
zTestManyStencils.test_basic14bc                    rO  )	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(   rS  rU  rZ  r   r   r[       z/TestManyStencils.test_basic15.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic15  
   
zTestManyStencils.test_basic15c                    rO  )	&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(   rS  rU  rZ  r   r   r[    r  z/TestManyStencils.test_basic17.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic17  r  zTestManyStencils.test_basic17c                    rO  )	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(   rS  rU  rZ  r   r   r[  2     z/TestManyStencils.test_basic18.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic18+  r  zTestManyStencils.test_basic18c                    rO  )	r  c                 S   r  )Nr7   r   re   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   re   r(   rS  rU  rZ  r   r   r[  H  s   z/TestManyStencils.test_basic19.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic19A  r  zTestManyStencils.test_basic19c                    rO  )	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   re   r   r  r(   rS  rU  rZ  r   r   r[  ^  r  z/TestManyStencils.test_basic20.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic20W  r  zTestManyStencils.test_basic20c                    rO  )	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  rS  rU  rZ  r   r   r[  t  r  z/TestManyStencils.test_basic21.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic21m  r  zTestManyStencils.test_basic21c                    rO  )	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  rS  rU  rZ  r   r   r[    r  z/TestManyStencils.test_basic22.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic22  r  zTestManyStencils.test_basic22c                    rO  )	zrel idx, work in bodyc                 S   s&   t d| d  }| d | d  | S Nr   )r-   r   r   r7   rj   sinr   r\   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   rN  rj   rT  rM  r  r$   r  r   r    rV  rW  rX  rY  r\   rZ  r   r   r[    s   z/TestManyStencils.test_basic23.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  r   test_basic23  s
   
zTestManyStencils.test_basic23c                    rO  )	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  rZ  r   r   r[    s   2z0TestManyStencils.test_basic23a.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  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   re   r   c                 S   r~  )Nr   r(   r   r   r   r   r   r     r$  z-TestManyStencils.test_basic24.<locals>.kernelr  N)rj   r   r   rH  r   rI   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   re   r   c                 S   s   dS )Nr(   r   r   r   r   r   r     s   z-TestManyStencils.test_basic25.<locals>.kernelr  Nrj   r   r   rH  r8  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(   rS  )r   r    rV  rW  _TestManyStencils__crX  rY  rZ  r   r   r[    s   z/TestManyStencils.test_basic26.<locals>.__kernel@   r      r-   Nr]  r^  r   rZ  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   re   r-   r   r(   rS  )r   r    rV  rW  Z_TestManyStencils__dr  rX  rY  rZ  r   r   r[    s(   z/TestManyStencils.test_basic27.<locals>.__kernel   r   r  r-   Nr]  r^  r   rZ  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         $@)rj   r   r   r   r   r   r     rV   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  )rN  rj   rT  rM  r  r$   r   rU  rZ  r   r   r[       (z/TestManyStencils.test_basic28.<locals>.__kernelr   re   r   Nrj   r   r   astypeZfloat32rG  r^  r   rZ  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   re   r   c                 S   s   | dt tdf S )Nr   )r   rj   cosr   r   r   r   r   )     z-TestManyStencils.test_basic29.<locals>.kernelr  Nrj   r   r   rH  r8  r   r   r  r   r   r   test_basic29%     
zTestManyStencils.test_basic29c                    r  )	zsigned zerosc                 S   rP  r6   r   r   r   r   r   r   1  r  z-TestManyStencils.test_basic30.<locals>.kernelc                    rQ  rR  rS  rU  rZ  r   r   r[  6  r\  z/TestManyStencils.test_basic30.<locals>.__kernelr   re   r   Nr  r^  r   rZ  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 rR  rS  r  rZ  r   r   r[  L  s   z/TestManyStencils.test_basic31.<locals>.__kernelr   re   r   Nr  r^  r   rZ  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   re   r   c                 S   s   d}d| }| |df S r  r   )r   sr  r   r   r   r   _  s   z.TestManyStencils.test_basic31b.<locals>.kernelN)rj   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 rR  rS  )r   r    rV  rW  rY  r  rZ  r   r   r[  n  s   z0TestManyStencils.test_basic31c.<locals>.__kernelr   Nrj   r   rG  r^  r   rZ  r   test_basic31cf  s
   
	
zTestManyStencils.test_basic31cc                 C   r  )ztyped int indexr   re   r   c                 S   s   | t ddf S r  )rj   Zint8r   r   r   r   r     rV   z-TestManyStencils.test_basic32.<locals>.kernelr  Nr  r  r   r   r   test_basic32{  r  zTestManyStencils.test_basic32c                    rO  )	zadd 0d arrayc                 S   r  )Nr7   r   )rj   arrayr   r   r   r   r     rV   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 rR  )rN  rj   rT  rM  r  r$   r  rU  rZ  r   r   r[    r  z/TestManyStencils.test_basic33.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  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    rV  rW  rX  rY  r  rZ  r   r   r[    s   z/TestManyStencils.test_basic34.<locals>.__kernel   r   Nr]  r^  r   rZ  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   rP  rc  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   rS  rU  rZ  r   r   r[    rd  z/TestManyStencils.test_basic35.<locals>.__kernelr   re   r   Nr*   r   rS   r]  r^  r   rZ  r   test_basic35  s
   	
zTestManyStencils.test_basic35c                    r  )zmore complex with cvalc                 S       | d | d  | d  | d  S Nr   r   rm  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   rS  rU  rZ  r   r   r[       z/TestManyStencils.test_basic36.<locals>.__kernelr   re   r   Nr*   r   r  r]  r^  r   rZ  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   rS  rU  rZ  r   r   r[    r  z/TestManyStencils.test_basic37.<locals>.__kernelr   re   r   Nr*   r  r  r]  r^  r   rZ  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   re   r   r   r  r   r*   r   rS   r  Nrj   r   r   rL  r   rH  rI   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   rS  rU  r*   r   rI   r   r   r[    r  z/TestManyStencils.test_basic39.<locals>.__kernelr   re   r   Nr*   r  )rj   r  r  r   r   rG  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,   rS  r   r0   r    rV  rW  rX  rY  rZ  r   r   r[  #  s   
2z/TestManyStencils.test_basic40.<locals>.__kernelr   re   r   Nr]  rI   r_  r   r0   rp   r   rZ  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   re   r   r(   r   r  Nrj   r   r   rH  r8  r   rI   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   re   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   rS  r  rZ  r   r   r[  J  s   
z/TestManyStencils.test_basic43.<locals>.__kernelg      >@r      Nr]  r  r   rZ  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   re   r   r  Nrj   r   r   rH  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   re   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   re   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 rf  rS  r   r0   r   r    rV  rW  rX  rY  rZ  r   r   r[    s   z/TestManyStencils.test_basic47.<locals>.__kernelr   re   r   Nr]  rI   r_  r   r0   r   rp   r   rZ  r   test_basic47y  s   zTestManyStencils.test_basic47c                    rO  )	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   )rN  rj   rT  rM  r  r$   r  )r   r    rV  rW  rX  rY  r   rZ  r   r   r[    s   z/TestManyStencils.test_basic48.<locals>.__kernelr   re   r   Nr]  r^  r   rZ  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  rS  r  rZ  r   r   r[       
&z/TestManyStencils.test_basic49.<locals>.__kernelr   re   r   Nr:   r0   r  r]  r  r   rZ  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   rI   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   re   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   rS  r  rZ  r   r   r[    s   z/TestManyStencils.test_basic52.<locals>.__kernelr   re   r   r  r-   Nr:   r0   r  r]  r  r   rZ  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   re   r   r  r:   r   r  N)rj   r   r   rL  r  r   rH  rI   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-   rS  )r   r0   r    rV  rW  rX  rY  r  rZ  r   r   r[    s   
*z/TestManyStencils.test_basic54.<locals>.__kernelr   re   r   Nr:   r0   r  r]  r  r   rZ  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  rS  )	r   r0   r    rV  rW  rX  rY  r  r  rZ  r   r   r[    s   
*z/TestManyStencils.test_basic55.<locals>.__kernelr   re   r   Nr:   r0   r  r]  r  r   rZ  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  accrJ  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  rS  )r   r0   r    rV  rW  rX  rY  r  r  rJ  r  rZ  r   r   r[  9  s   

.z/TestManyStencils.test_basic56.<locals>.__kernelr   re   r   Nr:   r0   r  r]  r  r   rZ  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 rR  rS  r   r0   r    rV  rW  rX  rY  r   rZ  r   r   r[  U  s   
&z/TestManyStencils.test_basic57.<locals>.__kernelr   re   r   Nr:   r0   r  r]  r  r   rZ  r   test_basic57M  r
  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 rR  rS  r  rZ  r   r   r[  m  s   
&z/TestManyStencils.test_basic58.<locals>.__kernelr   re   r   Nr:   r0   r  r]  r  r   rZ  r   test_basic58e  r
  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   ro  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   ro  rS  r  rZ  r   r   r[    s   *z/TestManyStencils.test_basic59.<locals>.__kernelr   re   r   r   Nr:   r0   r   r  r]  r  r   rZ  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   ro  r   r   r  r   r   r   r     r  z-TestManyStencils.test_basic60.<locals>.kernelr   re   r   )r   )r  r:   r0   r   r  Nr  )rI   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  r  r   r/   r   r   r   r     r   z-TestManyStencils.test_basic61.<locals>.kernelr   re   r   r:   r   r  N)rj   r   r   rH  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  r  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   ro  rS  r  rZ  r   r   r[    r  z/TestManyStencils.test_basic62.<locals>.__kernelr   re   r   Nr0   r  )r:   r*   r  r]  r  r   rZ  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   re   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   rP  r6   r   r   r   r   r   r     r  z-TestManyStencils.test_basic64.<locals>.kernelr   re   r   r:   r   r  Nr  rI   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      r  r   r  rS  r   r    rV  rW  _TestManyStencils__anr   r&   rZ  r   r   r[       z/TestManyStencils.test_basic65.<locals>.__kernel      N@)r  r   r    r  Nr  rI   r_  r   nhrp   r   rZ  r   test_basic65     



zTestManyStencils.test_basic65c                    r  )
zbasic const neighborhood testc                 S   s(   d}t ddD ]}|| d 7 }q|d S r  r#   r  r   r   r   r     r!  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 r#  rS  r%  rZ  r   r   r[  	  r'  z/TestManyStencils.test_basic66.<locals>.__kernelr(  r)  r    r  Nr  r*  r   rZ  r   test_basic66  r-  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   r   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   r1  r2  rS  	r   r    rV  rW  _TestManyStencils__bnr&  r   r&   r   rZ  r   r   r[  	     z/TestManyStencils.test_basic67.<locals>.__kernel      i@r      r   r1  r   r    r  Nr]  r*  r   rZ  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   r1  r   r2  r#   )r   r   r   r   r   r   r   2	  s   z.TestManyStencils.test_basic67b.<locals>.kernelr9  r   r:  r    )r<  r  N)rj   r   r   rH  r   r8  r  r   r   r   test_basic67b0	  s
   
zTestManyStencils.test_basic67bc                    r/  )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 r0  r#   r3  r   r   r   r   >	  r4  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 r5  rS  r6  rZ  r   r   r[  H	  r8  z/TestManyStencils.test_basic68.<locals>.__kernelr9  r   r:  r;  r    r  Nr]  r*  r   rZ  r   test_basic68<	  s   



zTestManyStencils.test_basic68c                    r/  )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   r1  r7   r2  r#   r3  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 r5  rS  r6  rZ  r   r   r[  g	  r8  z/TestManyStencils.test_basic69.<locals>.__kernelr9  r   r:  r;  r    r  Nr]  r*  r   rZ  r   test_basic69\	  r>  zTestManyStencils.test_basic69c                    r/  )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   r1  r2  r#   r   r   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   r1  r2  rS  r   r    rV  rW  r7  r&  r   rC  r&   r  r   rZ  r   r   r[  	  s   z/TestManyStencils.test_basic70.<locals>.__kernelr9  r   r:  r;  r    r  Nr]  r*  r   rZ  r   test_basic70z	  s   


zTestManyStencils.test_basic70c                    r  )
zneighborhood, type changec                 S   s<   d}t ddD ]}d}|dkrd}|| | | 7 }q|d S )Nr   r  r           r   r  r#   )r   r   r&   rJ  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   r$  r  r   rG  rH  r   r  rS  )r   r    rV  rW  r&  r   r&   rJ  rZ  r   r   r[  	  s   z/TestManyStencils.test_basic71.<locals>.__kernelr(  r)  r    r  Nr  r*  r   rZ  r   test_basic71	  s   



zTestManyStencils.test_basic71c                    r  )
z+neighborhood, narrower range than specifiedc                 S   r  )Nr   r  r  r#   r  r   r   r   r   	  r!  z-TestManyStencils.test_basic72.<locals>.kernelc                    r"  )Nr   r   r   r$  rJ  r  r  rS  r%  rZ  r   r   r[  	  r'  z/TestManyStencils.test_basic72.<locals>.__kernelr(  r)  r    r  Nr  r*  r   rZ  r   test_basic72	  r-  zTestManyStencils.test_basic72c                    r  )
zneighborhood, +ve rangec                 S   r  )Nr   r      r  r#   r  r   r   r   r   	  r!  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   rL  r  rS  r%  rZ  r   r   r[  	     z/TestManyStencils.test_basic73.<locals>.__kernelr(  ))r   r   r    r  Nr  r*  r   rZ  r   test_basic73	  r-  zTestManyStencils.test_basic73c                    r  )
zneighborhood, -ve rangec                 S   r  )Nr   r1  r!   r  r#   r  r   r   r   r   	  r!  z.TestManyStencils.test_basic73b.<locals>.kernelc                    r"  )Nr   r   r   r   r1  r!   r  rS  r%  rZ  r   r   r[  	  r'  z0TestManyStencils.test_basic73b.<locals>.__kernelr(  ))r1  r   r    r  Nr  r*  r   rZ  r   test_basic73b	  r-  zTestManyStencils.test_basic73bc                    r  )
z!neighborhood, -ve->+ve range spanc                 S   r  )Nr   r   rL  r  r#   r  r   r   r   r   
  r!  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   rL  r  rS  r%  rZ  r   r   r[  
  rM  z/TestManyStencils.test_basic74.<locals>.__kernelr(  ))r   r   r    r  Nr  r*  r   rZ  r   test_basic74
  r-  zTestManyStencils.test_basic74c                    r  )
z!neighborhood, -ve->-ve range spanc                 S   r  )Nr   r1  r   r  r#   r  r   r   r   r   +
  r!  z-TestManyStencils.test_basic75.<locals>.kernelc                    r"  )Nr   r   r   r   r1  r   r  rS  r%  rZ  r   r   r[  4
  r'  z/TestManyStencils.test_basic75.<locals>.__kernelr(  ))r1  r,   r    r  Nr  r*  r   rZ  r   test_basic75)
  s   	



zTestManyStencils.test_basic75c                    r/  )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   r2  r#   rB  r   r   r   r   G
  rD  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   re   r   r   r  r   r2  rS  rE  rZ  r   r   r[  S
  s   z/TestManyStencils.test_basic76.<locals>.__kernelr9  r   r:  ))r  r   )r  re   r    r  Nr]  r*  r   rZ  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   r   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   re   r   r  r  rS  
r   r0   r    rV  rW  r7  r&  r   r&   r   rZ  r   r   r[  s
     
z/TestManyStencils.test_basic77.<locals>.__kernelr9  r   r:  r  r   r\  r    r  Nr]  rI   r_  r   r0   r+  rp   r   rZ  r   test_basic77h
     	
zTestManyStencils.test_basic77c                    rS  )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#   rV  r   r   r   r   
  rW  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  ra  r,   rb  r   r  rS  rY  rZ  r   r   r[  
  rZ  z/TestManyStencils.test_basic78.<locals>.__kernel     r@r  r:  )ra  r  )rb  r,   r    r  Nr]  r]  r   rZ  r   test_basic78
  r_  zTestManyStencils.test_basic78c                    rS  )z. neighborhood, two args, -ve range, +ve range c                 S   r`  )Nr   ra  r,   r-   r   r  r#   rV  r   r   r   r   
  rW  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  ra  r,   r-   r   r  rS  rY  rZ  r   r   r[  
  s   
z0TestManyStencils.test_basic78b.<locals>.__kernelrc  r  r:  )rd  )r-   rf  r    r  Nr]  r]  r   rZ  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   rT  rU  r#   rV  r   r   r   r   
  rW  z-TestManyStencils.test_basic79.<locals>.kernelr9  r   r:  r-   r  r    r[  r  N)rj   r   r   rL  r   rH  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 rU  r#   rV  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 rX  rS  rY  rZ  r   r   r[  
  s   
z/TestManyStencils.test_basic80.<locals>.__kernelr9  r   r:  y              (@r[  r    r  Nr]  r]  r   rZ  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 rU  r#   rV  r   r   r   r   
     z-TestManyStencils.test_basic81.<locals>.kernelr9  r   r:  r   r  r    r[  r  N)rj   r   r   copyrL  r   r   rH  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   re   r  r#   rV  r   r   r   r     rj  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   re   r   r  ro  r  rS  rY  rZ  r   r   r[       
"z/TestManyStencils.test_basic82.<locals>.__kernelr9  r   r:  r[  r0   )r    r:   r  Nrj   r   r   rk  rG  r]  r   rZ  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   rm  rn  r#   rV  r   r   r   r   -  rj  z-TestManyStencils.test_basic83.<locals>.kernelr9  r   r:  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   re   r   r   r  ro  r  rS  rY  rZ  r   r   r[  9  rp  z/TestManyStencils.test_basic83.<locals>.__kernelr[  r0   rs  r    r:   r*   r  Nrq  )rI   r   r0   r_  r+  rp   r   rZ  r   test_basic83+  s   
zTestManyStencils.test_basic83c                    rO  )	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 rR  )rN  rj   rT  rM  r  r$   r?   py_funcrU  rZ  r   r   r[  V     z/TestManyStencils.test_basic84.<locals>.__kernelr9  r   r:  Nr]  r^  r   rZ  r   test_basic84O  rx  zTestManyStencils.test_basic84c                    rO  )	z! kernel calls njit(parallel=True)c                 S   rv  rw  )rB   r   r   r   r   r   f  r  z-TestManyStencils.test_basic85.<locals>.kernelc              	      rx  rR  )rN  rj   rT  rM  r  r$   rB   ry  rU  rZ  r   r   r[  l  rz  z/TestManyStencils.test_basic85.<locals>.__kernelr9  r   r:  Nr]  r^  r   rZ  r   test_basic85d  ra  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   rP  r6   r   r   r   r   r   r   }  r  z-TestManyStencils.test_basic86.<locals>.kernelr9  r   r:  badr  N)rj   r   r   rH  r8  r   r  r   r   r   test_basic86{  s
   
zTestManyStencils.test_basic86c                    rO  )	z reserved arg name in use c                 S   rP  r6   r   )__sentinel__r   r   r   r     r  z-TestManyStencils.test_basic87.<locals>.kernelc                    rQ  rR  rS  )r  r    rV  rW  rX  rY  rZ  r   r   r[    r\  z/TestManyStencils.test_basic87.<locals>.__kernelr9  r   r:  Nr]  r^  r   rZ  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 rc  r   )r   r~   r   r   r   r     r$  z-TestManyStencils.test_basic88.<locals>.kernelr   re   r   r  r(   r  Nr  r  r   r   r   test_basic88  s   zTestManyStencils.test_basic88c                    rO  )	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   re   r   r  r  r   rS  rU  rZ  r   r   r[    s   z/TestManyStencils.test_basic89.<locals>.__kernelr9  r   r:  Nr]  r^  r   rZ  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   ro  r  r9  r(   r#   )r   r0   r   r&   r   resr   r   r   r     s   z-TestManyStencils.test_basic90.<locals>.kernelc              	      s   j | ||d  | |}tj| jdt|d}td| jd D ]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   rs  r   re   r   r   r  ro  r  r9  r(   rS  )r   r0   r    rV  rW  r7  r&  r   r&   r   r  rZ  r   r   r[    s    
"
z/TestManyStencils.test_basic90.<locals>.__kernelr9  r   r:  r[  r0   rs  rt  r  Nrq  r]  r   rZ  r   test_basic90  s   
zTestManyStencils.test_basic90c                    rO  )	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  rS  )r   r    rV  rW  rX  rY  r0   rZ  r   r   r[    s   "z/TestManyStencils.test_basic91.<locals>.__kernelr9  r   r:  Nr]  r^  r   rZ  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 
Nrr  r   rk  r   r7   r   rm  r   ro  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 rf  rS  rU  rZ  r   r   r[    0   
z/TestManyStencils.test_basic92.<locals>.__kernelr:  r-   r   r   Nrj   r  r   r   r  r   rG  rI   r_  r   rp   r   rZ  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   rS  rU  rZ  r   r   r[  ,  r  z/TestManyStencils.test_basic93.<locals>.__kernelr:  r-   r   r   Nr*   Tr  r  r  r   rZ  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-   rj   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-   rN  rj   rT  rM  r  r$   r  r   r    rV  rW  r7  r&  rZ  r   r   r[  H  s   z/TestManyStencils.test_basic94.<locals>.__kernelr:  r   r   r   rk  rk  r    r  N)rj   r   uint32r   rG  r*  r   rZ  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  rV   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    rV  rW  r&  rZ  r   r   r[  f  s   "z/TestManyStencils.test_basic96.<locals>.__kernelr:  r   )rk  r    r  N)rj   r   r  rG  r*  r   rZ  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-   re   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   rP  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   rS  r  r  r   r   r[    rp  z/TestManyStencils.test_basic98.<locals>.__kernelg      @)r-   re   r  )r    r*   r  N)rj   r   r   r   r   r   rG  r*  r   r  r   test_basic98{  s   $


zTestManyStencils.test_basic98)trt   ru   rv   rH   rG  rH  rL  rN  r`  re  rg  ri  rj  rl  rn  rq  rs  rt  rw  ry  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  r	  r  r  r  r  r  r  r  r  r  r  r,  r.  r=  r?  r@  rA  rF  rI  rK  rN  rO  rP  rQ  rR  r^  re  rg  rh  ri  rl  rr  ru  r{  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  rw   r   r   rK   r   r   }  s     f
		


		




 
 "!#    $	)

r   __main__)(numpyrj   
contextlibr   rY   r   r   Z
numba.corer   r   Znumba.core.compilerr   r   Znumba.core.cpur	   Znumba.tests.supportr
   r   Znumba.core.errorsr   r   r   r  r   r   r'   r.   r1   r5   r9   r;   r<   r?   rB   ZTestCaserC   rx   r   rt   mainr   r   r   r   <module>   s|   









7   z                    ,