o
    il                    @   sx  d dl Zd dlmZ d dlZd dlmZmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ d dlZeZed	d
 Zedddd Zedddd Zedd Zedd Zedd Zedddd Zedddd Z edd  Z!esed!d"d#d$ Z"eG d%d& d&ej#Z$G d'd( d(e$Z%eG d)d* d*e$Z&e'd+kre(  dS dS ),    N)contextmanager)njitstencil)typesregistry)compile_extraFlags)ParallelOptions)skip_parfors_unsupported_32bitskip_m1_llvm_rtdyld_failure)LoweringErrorTypingErrorNumbaValueErrorc                 C   $   d| d | d  | d  | d   S N      ?r      r   r   r   r   r    ar   r   h/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/tests/test_stencils.pystencil1_kernel   s   $r   )r   neighborhoodc                 C   s,   | d }t ddD ]}|| | 7 }q	d| S )Nr   r   333333?range)r   cumir   r   r   stencil2_kernel   s   r(         ?cvalc                 C   s   d| d  S )Nr      r   r   r   r   r   stencil3_kernel'   s   r/   c                 C   sD   d| d | d  | d  | d  |d  |d  |d  |d   S r   r   r   br   r   r   stencil_multiple_input_kernel,       r2   c                 C   sD   || d | d  | d  | d  |d  |d  |d  |d   S Nr   r   r   r   r   )r   r1   wr   r   r   !stencil_multiple_input_kernel_var2   r3   r6   c                 C   s   |d r| d S |d S Nr   r   r   )r   r1   fr   r   r   %stencil_multiple_input_mixed_types_2d8   s   r:   )r1   )standard_indexingc                 C   s    | d |d  | d |d   S )Nr   r   r   r   r0   r   r   r   !stencil_with_standard_indexing_1d=   s    r<   c                 C   s@   | d |d  | d |d   | d |d   | d |d   S r4   r   r0   r   r   r   !stencil_with_standard_indexing_2dB   s
   r=   c                 C      | d S Nr   r   r   r   r   r   addone_njitH      r@   TZparallelc                 C   r>   r?   r   r   r   r   r   addone_pjitN   rA   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   X   s   zTestStencilBase.__init__c                 C   s   t tjjtjj||d |i S N)r   r   Z
cpu_targetZtyping_contextZtarget_context)rJ   funcsigflagsr   r   r   _compile_this_   s   
zTestStencilBase._compile_thisc                 K   s0   t  }d|_|s
dn|}t||_| |||S rE   )r   rG   r	   Zauto_parallelrR   )rJ   rO   rP   kwsrQ   optionsr   r   r   compile_paralleld   s
   
z TestStencilBase.compile_parallelc                 C   s   | j ||| jdS )N)rQ   )rR   rF   )rJ   rO   rP   r   r   r   compile_njitk      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>o       z/TestStencilBase.compile_all.<locals>.<listcomp>)tuplerU   rV   )rJ   pyfuncrK   kwargsrP   cpfunccfuncr   r   r   compile_alln   s   zTestStencilBase.compile_allc           
      G   s   | j |g|R  \}}|| }|| }|j| }|j| }	tjj||dd tjj||dd tjj|	|dd | d|j  d S )N   decimal@do_scheduling)re   entry_pointnptestingassert_almost_equalassertInlibraryget_llvm_str)
rJ   Zno_stencil_funcra   rK   rd   rc   expectedZ	py_outputnjit_outputparfor_outputr   r   r   checkv   s   

zTestStencilBase.check)__name__
__module____qualname__Z_numba_parallel_test_rI   rR   rU   rV   re   rt   __classcell__r   r   rL   r   rD   S   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   ry   rI   rJ   rK   rb   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)rk   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.   )rk   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   rk   r   r   r   r%   r   r   r   r'   jr   r   r   test_impl_seq   s   z0TestStencil.test_stencil1.<locals>.test_impl_seqd   Nrt   )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   )rk   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   rk   r   r   r%   lensumr   r   r   r'   r   r   r   r      s
   

"z0TestStencil.test_stencil2.<locals>.test_impl_seqr   c                 S   s2   t | }dd }tj|| |ffd||}|S )Nc                 S   s8   | |  }t | d |d D ]}|| | 7 }qd| S Nr   r#   r$   r   r5   r&   r'   r   r   r   r(      s   
DTestStencil.test_stencil2.<locals>.test_seq.<locals>.stencil2_kernelr    rk   r   rZ   r   )r   r5   r   r(   r   r   r   r   r      s   
c                 S   sT   t | }t | }t|t|| D ]}dt||| || d   ||< q|S )Nr#   r   r   )r   r5   r   r   r'   r   r   r   r      s
   

&r   rf   rg   ri   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   r5   offsetr   r(   r   r   r   r   r      s   
r   c                 S   r   )Nc                 S   s    dt | | d |d   S )Nr#   r   r.   )rk   r   )r   r5   r   r   r   r(          r   r   r   r   r   r   r   r      s   
N)rt   rU   r   intprj   rk   rl   rm   rn   ro   rp   )	rJ   r   r   r   r5   rc   rq   rs   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   )rk   r   r   r/   r   r   r   r   r     r   z+TestStencil.test_stencil3.<locals>.test_seqTrB   r   r8   r)   )   r   N)r   
assertTrue)rJ   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      @      @)rk   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   rk   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.   rf   rf   )rk   r   r   onesr=   )r   r   r   r   Dr   r   r   r   1  s
   


z?TestStencil.test_stencil_standard_indexing_2d.<locals>.test_seqc                 S   sv  t | d | | f}t d}t | d | | f}t | d | | f}td| d D ]@}td| d D ]6}|||d f |d  ||d |f |d   |||d f |d   ||d |f |d   |||f< q9q0td| d D ]@}td| d D ]6}|||d f |d  ||d |f |d   |||d f |d   ||d |f |d   |||f< qqx|S )Nr.   r   r   r   r   r   r   )rk   r   r   r   r   r%   )r   r   r   r   r   r'   r   r   r   r   r   8  s*   
..zDTestStencil.test_stencil_standard_indexing_2d.<locals>.test_impl_seqr   Nr   r   r   r   r   !test_stencil_standard_indexing_2d-  s   z-TestStencil.test_stencil_standard_indexing_2dc                 C   s<   dd }dd }d}|  ||| dd }|  ||| dS )z=Tests whether multiple inputs of the same size work.
        c                 S   s>   t | d | | f}t | d | | f}t||}|S r   )rk   r   r   r2   r   r   r   r   r   O  s   
z:TestStencil.test_stencil_multiple_inputs.<locals>.test_seqc                 S   s   t | d | | f}t | d | | f}t | d | | f}td| d D ]R}td| d D ]H}d|||d f ||d |f  |||d f  ||d |f  |||d f  ||d |f  |||d f  ||d |f   |||f< q4q+|S r   r   )r   r   r   r   r'   r   r   r   r   r   U  s,   z?TestStencil.test_stencil_multiple_inputs.<locals>.test_impl_seqrf   c                 S   sD   t | d | | f}t | d | | f}d}t|||}|S )Nr.   r   )rk   r   r   r6   )r   r   r   r5   r   r   r   r   r   f  s
   Nr   r   r   r   r   test_stencil_multiple_inputsK  s   z(TestStencil.test_stencil_multiple_inputsc                 C   s&   dd }dd }d}|  ||| d S )Nc                 S   s   t | d | | f}| d t | d | | f }t j| t jd}t j| | f|jd}td| D ] }td| D ]}|||f rH|||f n|||f |||f< q:q3|S )Nr.   dtyper   )rk   r   r   eyebool_r   r   r%   )r   r   r   SOr'   r   r   r   r   r   p  s    .z;TestStencil.test_stencil_mixed_types.<locals>.test_impl_seqc                 S   sX   t | d | | f}| d t | d | | f }t j| t jd}t|||}|S )Nr.   r   )rk   r   r   r   r   r:   )r   r   r   r   r   r   r   r   r   z  s
    z6TestStencil.test_stencil_mixed_types.<locals>.test_seqrf   r   )rJ   r   r   r   r   r   r   test_stencil_mixed_typesn  s   
z$TestStencil.test_stencil_mixed_typesc                 C   r}   )	z&Tests 2D numba.stencil calls.
        c                 S   sJ   t | d | | f}t | d | | f}tdd ||d |S )Nr.   c                 S   r   r   r   r   r   r   r   <lambda>  s    zCTestStencil.test_stencil_call.<locals>.test_impl1.<locals>.<lambda>r~   rk   r   r   r   rZ   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~   rk   r   r   rZ   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   rf   rg   r   NzDstencil kernel index is not constant, 'neighborhood' option required)rU   r   r   rj   rk   rl   rm   assertRaisesr   rn   str	exceptionr   r   )rJ   r   r   r   r   r   r   Zcpfunc1Zcpfunc2Zcpfunc3Zcpfunc4rq   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>)rZ   r   )r   r   r   r   r     rW   z8TestStencil.test_stencil_parallel_off.<locals>.test_implNFr   ri   )rU   rZ   float64ZassertNotInro   rp   )rJ   r   rc   r   r   r   test_stencil_parallel_off	  s
   z%TestStencil.test_stencil_parallel_offc                 C   s>   t dddd }dd }td}tj|||| dS )	z6Tests whether nested stencil decorator works.
        TrB   c                 S   s   t dd }|| }|S )Nc                 S   s   d}| | d  S )Nr.   r   r   r   r   r   r   fun  s   z@TestStencil.test_stencil_nested1.<locals>.test_impl.<locals>.funr   )r   r   r   r   r   r   r     s   
z3TestStencil.test_stencil_nested1.<locals>.test_implc                 S   s:   t jt| td}tdt| D ]
}| |d  ||< q|S )Nr   r   )rk   r   r   intr%   )r   r   r'   r   r   r   r   "  s   z7TestStencil.test_stencil_nested1.<locals>.test_impl_seq
   N)r   rk   r   rl   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 Nr8   r   r   r   r   r   r   kernel1     z1TestStencil.test_out_kwarg_w_cval.<locals>.kernelr*   c                     *   t dd} t | } | |d |S N   rf   r   r~   rk   r   r   	ones_liker   retZ
stencil_fnr   r   wrapped7     
z2TestStencil.test_out_kwarg_w_cval.<locals>.wrappedr   r   r"   r   Nr~                 ?c                     r   r   r   r   r   r   r   r   N  r   z-cval type does not match stencil return type.r   zExpected error was not raised)rZ   r   rk   r   r   	full_liker   rl   rm   re   rj   r   r   rn   r   r   rV   rU   r   AssertionError)rJ   Z
const_valsr   Z	const_valr   r   rq   r   implsimplgotr   msgcompilerr   r   r   test_out_kwarg_w_cval+  sD   


z!TestStencil.test_out_kwarg_w_cvalc           
         s   t jt jt j tdtd fD ]P}dd }tj||d  fdd}t dd}t |d	}||d
ddf< t 	|} ||d t j
|| | |}|D ]}| }	t j
|	| qRqdS )U Test issue #7286 where the cval is a np attr/string-based numerical
        constantinfc                 S   r   r   r   r   r   r   r   r   h  r   z9TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.kernelr*   c                     r   )N      (@r   r~   r   r   r   r   r   r   m  r   z:TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.wrappedr   r   r"   r   Nr~   )rk   nanr   floatrZ   r   r   r   r   r   rl   rm   re   rj   )
rJ   r+   r   r   r   rq   r   r   r   r   r   r   r   test_out_kwarg_w_cval_np_attrc  s    $

z)TestStencil.test_out_kwarg_w_cval_np_attr)ru   rv   rw   rI   skip_unsupportedr   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   r   rL   r   ry      s<    

T



"

 

O


7ry   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                    rz   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.
        rT   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 rN   r   arg0stencil_func_implr   r   wrap_stencil     z=TestManyStencils.check_against_expected.<locals>.wrap_stencilr.   c                    
    | |S rN   r   r  arg1r  r   r   r       
rf   c                        | ||S rN   r   r  r!  Zarg2r  r   r   r       +Up to 3 arguments can be provided, found %sc                 S   rX   r   rY   r[   r   r   r   r^     r_   z;TestManyStencils.check_against_expected.<locals>.<listcomp>parforsz
@stencil_output:
z
njit_output:
z
parfor_output:
rg   r  z@stencil failed: %sz@njit failed: %sri   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   r^          MThe following implementations should have raised an exception but did not:
%sc                 S      g | ]}d |d  qS r*  r   r   r[   r   r   r   r^   %       c                 S   r(  z%s: Message: %s

r   r[   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`   rV   rj   rU   printrk   rl   rm   assertEqualr   r  r  r  r   rn   ro   rp   r   RuntimeErrorjoin)rJ   ra   rq   rK   rb   rT   r  ZDEBUG_OUTPUTr  
stencil_exnjit_ex	parfor_exstencil_argsZstencilfunc_outputr  rP   rr   wrapped_cfuncrs   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.
        rT   r  Nc              
   3   r  r  r  r  r  r   r   r  E  r  z7TestManyStencils.check_exceptions.<locals>.errorhandlerr   r   r  r  r  r   c                    r  rN   r   r  r  r   r   r  l  r  z7TestManyStencils.check_exceptions.<locals>.wrap_stencilr.   c                    r  rN   r   r   r  r   r   r  o  r"  rf   c                    r#  rN   r   r$  r  r   r   r  r  r%  r&  c                 S   rX   r   rY   r[   r   r   r   r^   y  r_   z5TestManyStencils.check_exceptions.<locals>.<listcomp>r'  c                 S   r(  r)  r   r[   r   r   r   r^     r+  r,  c                 S   r-  r.  r   r[   r   r   r   r^     r/  r0  c                 S   r(  r1  r   r[   r   r   r   r^     r2  r3  r4  r5  r   )r6  r7  r   r
  r8  r   r   r9  r`   rV   rj   rU   r<  r=  )rJ   ra   rK   rb   rT   r  r  r>  r?  r@  rA  r  rP   rB  rC  r   r   rD  rE  rF  r   rG  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  )r7  items)rJ   rb   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)r6  rN  r   r9  r	  )rJ   rK   rb   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 r7   r   r   r   r   r   r     r  z-TestManyStencils.test_basic00.<locals>.kernelc                    x   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}| |d |d f |||f< q(q|S Nr    r   r   r   rO  rk   fullrN  r  r%   r   r!   _TestManyStencils__retdtype_TestManyStencils__b0_TestManyStencils__b_TestManyStencils__ar   rJ   r   r   __kernel     z/TestManyStencils.test_basic00.<locals>.__kernelr   rf   r   Nrk   r   r   rH  rJ   _TestManyStencils__kernelr   rq   r   r[  r   test_basic00  
   

zTestManyStencils.test_basic00c                    rP  )	rel index add constc                 S   rQ  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 rS  rT  rV  r[  r   r   r\       z/TestManyStencils.test_basic01.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic01  rb  zTestManyStencils.test_basic01c                    rP  )	rc  c                 S   rQ  )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   rT  rV  r[  r   r   r\    r]  z/TestManyStencils.test_basic02.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic02  rb  zTestManyStencils.test_basic02c                    rP  )	rc  c                 S   rQ  )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 rS  rT  rV  r[  r   r   r\       z/TestManyStencils.test_basic03.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic03  rb  zTestManyStencils.test_basic03c                    rP  )	rc  c                 S   rQ  )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 rg  rT  rV  r[  r   r   r\    r]  z/TestManyStencils.test_basic04.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic04   rb  zTestManyStencils.test_basic04c                    rP  )	rc  c                 S   rQ  )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 rg  rT  rV  r[  r   r   r\    re  z/TestManyStencils.test_basic05.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic05  rb  zTestManyStencils.test_basic05c                    rP  )	rc  c                 S   rQ  )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 rg  rT  rV  r[  r   r   r\  4  ri  z/TestManyStencils.test_basic06.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic06,  rb  zTestManyStencils.test_basic06c                    rP  )	rc  c                 S   rQ  )Nr   r   r   r   r   r   r   r   D  r  z-TestManyStencils.test_basic07.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]}td| jd d D ]}| |d |d f |||f< q,q |S rS  rT  rV  r[  r   r   r\  J     z/TestManyStencils.test_basic07.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic07B  rb  zTestManyStencils.test_basic07c                    rP  )	rc  c                 S   rQ  )Nr   r   r   r   r   r   r   r   Z  r  z-TestManyStencils.test_basic08.<locals>.kernelc                    sx   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}| |d |d f |||f< q(q|S rg  rT  rV  r[  r   r   r\  `  r]  z/TestManyStencils.test_basic08.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic08X  rb  zTestManyStencils.test_basic08c                    rP  )	rc  c                 S   rQ  )Nr,   r   r   r   r   r   r   p  r  z-TestManyStencils.test_basic09.<locals>.kernelc                    s|   j | |d  | }tj| jdt|d}td| jd d D ]}td| jd D ]}| |d |d f |||f< q*q |S )Nr    r   r   r   r.   r-   rT  rV  r[  r   r   r\  v  re  z/TestManyStencils.test_basic09.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic09n  rb  zTestManyStencils.test_basic09c                    rP  )	rc  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 rS  rT  rV  r[  r   r   r\       2z/TestManyStencils.test_basic10.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic10  
   

zTestManyStencils.test_basic10c                    rP  )	rc  c                 S   rv  )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 rg  rT  rV  r[  r   r   r\    rw  z/TestManyStencils.test_basic11.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic11  ry  zTestManyStencils.test_basic11c                    rP  )	rc  c                 S   rv  )Nrl  rn  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 rg  rT  rV  r[  r   r   r\       2z/TestManyStencils.test_basic12.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic12  ry  zTestManyStencils.test_basic12c                    rP  )	rc  c                 S   rv  )Nrs  rp  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 rg  rT  rV  r[  r   r   r\    r{  z/TestManyStencils.test_basic13.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic13  ry  zTestManyStencils.test_basic13c                    rP  )	!rel index add domain change constc                 S      | d d S )Nr8   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   rT  rV  r[  r   r   r\    s   "z/TestManyStencils.test_basic14.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic14  ry  zTestManyStencils.test_basic14c                    rP  )	r~  c                 S   s   d}| d | S )Nr   r8   r   r   tr   r   r   r        z.TestManyStencils.test_basic14b.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]}td| jd D ]}d}| |d |d f | |||f< q(q|S r  rT  r   r!   rW  rX  rY  rZ  r  r[  r   r   r\    s   "z0TestManyStencils.test_basic14b.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic14b  
   
zTestManyStencils.test_basic14bc                    rP  )	ztwo rel index, add constc                 S      | d | d  d S )Nr8   r   r)   r   r   r   r   r   r        z-TestManyStencils.test_basic15.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ])}td| jd d D ]}| |d |d f | |d |d f  d |||f< q*q|S Nr    r   r   r   r)   rT  rV  r[  r   r   r\       z/TestManyStencils.test_basic15.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic15  
   
zTestManyStencils.test_basic15c                    rP  )	&two rel index boundary test, add constc                 S   r  )Nr8   )r.   r   r)   r   r   r   r   r   r     r  z-TestManyStencils.test_basic17.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ])}td| jd d D ]}| |d |d f | |d |d f  d |||f< q*q|S )Nr    r   r   r   r.   r)   rT  rV  r[  r   r   r\  !  r  z/TestManyStencils.test_basic17.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic17  r  zTestManyStencils.test_basic17c                    rP  )	r  c                 S   r  )Nr8   r-   r   r)   r   r   r   r   r   r   2  r  z-TestManyStencils.test_basic18.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]'}td| jd D ]}| |d |d f | |d |d f  d |||f< q(q|S )Nr    r   r   r   r.   r-   r)   rT  rV  r[  r   r   r\  7     z/TestManyStencils.test_basic18.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic180  r  zTestManyStencils.test_basic18c                    rP  )	r  c                 S   r  )Nr8   r   rf   r)   r   r   r   r   r   r   H  r  z-TestManyStencils.test_basic19.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]'}td| jd D ]}| |d |d f | |d |d f  d |||f< q*q |S )Nr    r   r   r   rf   r)   rT  rV  r[  r   r   r\  M  s   z/TestManyStencils.test_basic19.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic19F  r  zTestManyStencils.test_basic19c                    rP  )	r  c                 S   r  )Nr8   )r   r)   r   r   r   r   r   r   ^  r  z-TestManyStencils.test_basic20.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]'}td| jd D ]}| |d |d f | |d |d f  d |||f< q(q|S )Nr    r   r   rf   r   r  r)   rT  rV  r[  r   r   r\  c  r  z/TestManyStencils.test_basic20.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic20\  r  zTestManyStencils.test_basic20c                    rP  )	zsame rel, add constc                 S   s   | d | d  d S )Nr8   r)   r   r   r   r   r   r   t  r  z-TestManyStencils.test_basic21.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]'}td| jd D ]}| |d |d f | |d |d f  d |||f< q(q|S r  rT  rV  r[  r   r   r\  y  r  z/TestManyStencils.test_basic21.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic21r  r  zTestManyStencils.test_basic21c                    rP  )	z%rel idx const expr folding, add constc                 S   r  )Nr   r8   r)   r   r   r   r   r   r     r  z-TestManyStencils.test_basic22.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ])}td| jd d D ]}| |d |d f | |d |d f  d |||f< q*q|S r  rT  rV  r[  r   r   r\    r  z/TestManyStencils.test_basic22.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic22  r  zTestManyStencils.test_basic22c                    rP  )	zrel idx, work in bodyc                 S   s&   t d| d  }| d | d  | S Nr   )r.   r   r   r8   rk   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   rO  rk   rU  rN  r  r%   r  r   r!   rW  rX  rY  rZ  r]   r[  r   r   r\    s   z/TestManyStencils.test_basic23.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic23  s
   
zTestManyStencils.test_basic23c                    rP  )	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   rf   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   rf   r   c                 S   r  )Nr   r)   r   r   r   r   r   r     r%  z-TestManyStencils.test_basic24.<locals>.kernelr  N)rk   r   r   rI  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   rf   r   c                 S   s   dS )Nr)   r   r   r   r   r   r     s   z-TestManyStencils.test_basic25.<locals>.kernelr  Nrk   r   r   rI  r9  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)   rT  )r   r!   rW  rX  _TestManyStencils__crY  rZ  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   rf   r.   r   r)   rT  )r   r!   rW  rX  Z_TestManyStencils__dr  rY  rZ  r[  r   r   r\     s(   z/TestManyStencils.test_basic27.<locals>.__kernel   r   r  r.   Nr^  r_  r   r[  r   test_basic27  s
   
zTestManyStencils.test_basic27c                    L   dd   fdd}t dddt j}||d} || dS )	ztype widen c                 S      | d t d S )Nr8         $@)rk   r   r   r   r   r   r     rW   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  )rO  rk   rU  rN  r  r%   r   rV  r[  r   r   r\       (z/TestManyStencils.test_basic28.<locals>.__kernelr   rf   r   Nrk   r   r   astypeZfloat32rH  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   rf   r   c                 S   s   | dt tdf S )Nr   )r   rk   cosr   r   r   r   r   .     z-TestManyStencils.test_basic29.<locals>.kernelr  Nrk   r   r   rI  r9  r   r   r  r   r   r   test_basic29*     
zTestManyStencils.test_basic29c                    r  )	zsigned zerosc                 S   rQ  r7   r   r   r   r   r   r   6  r  z-TestManyStencils.test_basic30.<locals>.kernelc                    rR  rS  rT  rV  r[  r   r   r\  ;  r]  z/TestManyStencils.test_basic30.<locals>.__kernelr   rf   r   Nr  r_  r   r[  r   test_basic304  s
   

zTestManyStencils.test_basic30c                    r  )	zdoes a const propagate? 2Dc                 S   s   d}| |df S Nr   r   r   r  r   r   r   r   K  r  z-TestManyStencils.test_basic31.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]}td| jd d D ]}d}| || |d f |||f< q*q|S rS  rT  r  r[  r   r   r\  Q  s   z/TestManyStencils.test_basic31.<locals>.__kernelr   rf   r   Nr  r_  r   r[  r   test_basic31I  r  zTestManyStencils.test_basic31z constant folding not implementedc                 C   s   t ddd}dd }dS )zdoes a const propagate?r   rf   r   c                 S   s   d}d| }| |df S r  r   )r   sr  r   r   r   r   d  s   z.TestManyStencils.test_basic31b.<locals>.kernelN)rk   r   r   r  r   r   r   test_basic31b_  s   zTestManyStencils.test_basic31bc                    s<   dd   fdd}t d}||d} || dS )zdoes a const propagate? 1Dc                 S   s   d}| | S r?   r   r  r   r   r   r   m  s   z.TestManyStencils.test_basic31c.<locals>.kernelc                    s`   j | |d  | }tj| jdt|d}td| jd d D ]}d}| ||  ||f< q |S rS  rT  )r   r!   rW  rX  rZ  r  r[  r   r   r\  s  s   z0TestManyStencils.test_basic31c.<locals>.__kernelr   Nrk   r   rH  r_  r   r[  r   test_basic31ck  s
   
	
zTestManyStencils.test_basic31cc                 C   r  )ztyped int indexr   rf   r   c                 S   s   | t ddf S r  )rk   Zint8r   r   r   r   r     rW   z-TestManyStencils.test_basic32.<locals>.kernelr  Nr  r  r   r   r   test_basic32  r  zTestManyStencils.test_basic32c                    rP  )	zadd 0d arrayc                 S   r  )Nr8   r   )rk   arrayr   r   r   r   r     rW   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 rS  )rO  rk   rU  rN  r  r%   r  rV  r[  r   r   r\    r  z/TestManyStencils.test_basic33.<locals>.__kernelr   rf   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!   rW  rX  rY  rZ  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   rQ  rd  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   rT  rV  r[  r   r   r\    re  z/TestManyStencils.test_basic35.<locals>.__kernelr   rf   r   Nr+   r   rT   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   rn  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   rT  rV  r[  r   r   r\       z/TestManyStencils.test_basic36.<locals>.__kernelr   rf   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   rT  rV  r[  r   r   r\    r  z/TestManyStencils.test_basic37.<locals>.__kernelr   rf   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   rf   r   r   r  r   r+   r   rT   r  Nrk   r   r   rM  r   r9  rI  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   rT  rV  r+   r   rJ   r   r   r\    r  z/TestManyStencils.test_basic39.<locals>.__kernelr   rf   r   Nr+   r  )rk   r  r  r   r   rH  r_  r   r  r   test_basic39  s   


zTestManyStencils.test_basic39c                    Z   dd   fdd}t ddd}t ddd}|||d} ||| dS )	z2 args!c                 S      | d |d  S Nr   )r   r-   r   r0   r   r   r   r   #  r   z-TestManyStencils.test_basic40.<locals>.kernelc                    s   j | ||d  | |}tj| jdt|d}td| jd d D ]%}td| jd D ]}| |d |d f ||d |d f  |||f< q,q"|S )Nr    r   r   r.   r   r-   rT  r   r1   r!   rW  rX  rY  rZ  r[  r   r   r\  (  s   
2z/TestManyStencils.test_basic40.<locals>.__kernelr   rf   r   Nr^  rJ   r`  r   r1   rq   r   r[  r   test_basic40!  s   	zTestManyStencils.test_basic40c                 C   sF   dd }t ddd}t ddd}| j|||ttgd d	S )
z(2 args! rel arrays wildly not same size!c                 S   r  r  r   r0   r   r   r   r   8  r   z-TestManyStencils.test_basic41.<locals>.kernelr   rf   r   r)   r   r  Nrk   r   r   rI  r9  r   rJ   r   r   r1   r   r   r   test_basic416     zTestManyStencils.test_basic41c                 C   sF   dd }t ddd}t ddd}| j|||ttgd dS )	z%2 args! rel arrays very close in sizec                 S   r  r  r   r0   r   r   r   r   A  r   z-TestManyStencils.test_basic42.<locals>.kernelr   rf   r         "@r  Nr  r  r   r   r   test_basic42?  r  zTestManyStencils.test_basic42c                    r  )	z2 args more complexityc                 S   s    | d | d  |d  |d  S )Nr   r   r.   r  r   r   r0   r   r   r   r   J  r   z-TestManyStencils.test_basic43.<locals>.kernelc                    s   j | ||d  | |}tj| jdt|d}td| jd d D ];}td| jd d D ].}| |d |d f | |d |d f  ||d |d f  ||d |d f  |||f< q.q"|S )Nr    r   r   r   r.   r-   r   rT  r  r[  r   r   r\  O  s   
z/TestManyStencils.test_basic43.<locals>.__kernelg      >@r      Nr^  r  r   r[  r   test_basic43H  s   zTestManyStencils.test_basic43c                 C   F   dd }t ddd}t ddd}| j|||ttgd dS )z!2 args, has assignment before usec                 S   s   d| d< | d S )Nr   r   r   r0   r   r   r   r   b  s   z-TestManyStencils.test_basic44.<locals>.kernelr   rf   r   r  Nrk   r   r   rI  r9  r   r  r   r   r   test_basic44`     zTestManyStencils.test_basic44c                 C   r  )z02 args, has assignment and then cross dependencyc                 S   s   d| d< | d | d  S )Nr   r   r   r   r0   r   r   r   r   l     z-TestManyStencils.test_basic45.<locals>.kernelr   rf   r   r  Nr  r  r   r   r   test_basic45j  r  zTestManyStencils.test_basic45c                 C   r  )z#2 args, has cross relidx assignmentc                 S   s   |d | d< | d | d  S )Nr  r   r   r   r0   r   r   r   r   v     z-TestManyStencils.test_basic46.<locals>.kernelr   rf   r   r  Nr  r  r   r   r   test_basic46t  r  zTestManyStencils.test_basic46c                    sp   dd   fdd}t ddd}t ddd}t ddd}||||d} |||| dS )	z3 argsc                 S      | d |d  |d  S )Nr   r   r   r   r   r1   r   r   r   r   r        z-TestManyStencils.test_basic47.<locals>.kernelc                    s   j | |||d  | ||}tj| jdt|d}td| jd d D ]1}td| jd d D ]$}| |d |d f ||d |d f  ||d |d f  |||f< q0q$|S rg  rT  r   r1   r   r!   rW  rX  rY  rZ  r[  r   r   r\    s   z/TestManyStencils.test_basic47.<locals>.__kernelr   rf   r   Nr^  rJ   r`  r   r1   r   rq   r   r[  r   test_basic47~  s   zTestManyStencils.test_basic47c                    rP  )	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   )rO  rk   rU  rN  r  r%   r  )r   r!   rW  rX  rY  rZ  r   r[  r   r   r\    s   z/TestManyStencils.test_basic48.<locals>.__kernelr   rf   r   Nr^  r_  r   r[  r   test_basic48  
   
zTestManyStencils.test_basic48c                    b   dd   fdd}t ddd}t ddd}|||d}j |||d	d
id dS )z#2 args, standard_indexing on secondc                 S   r  )Nr   r  r   r0   r   r   r   r     r   z-TestManyStencils.test_basic49.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]}td| jd D ]}| |d |d f |d  |||f< q+q!|S )Nr    r   r   r   r  rT  r  r[  r   r   r\       
&z/TestManyStencils.test_basic49.<locals>.__kernelr   rf   r   Nr;   r1   r  r^  r  r   r[  r   test_basic49  s   

zTestManyStencils.test_basic49z&dynamic range checking not implementedc                 C      dd }dS )z2 args, standard_indexing OOBc                 S   r  )Nr   )r      r   r0   r   r   r   r     r   z-TestManyStencils.test_basic50.<locals>.kernelNr   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   r0   r   r   r   r     r   z-TestManyStencils.test_basic51.<locals>.kernelr   rf   r   r;   r   r1   r  Nr  r  r   r   r   test_basic51  s   


zTestManyStencils.test_basic51c                    sx   dd   fdd}t ddd}t dd	d	}t ddd}||||d
}j ||||ddid d
S )z(3 args, standard_indexing on middle arg c                 S   s   | d |d  |d  S )Nr   r  r   r  r   r   r   r     r  z-TestManyStencils.test_basic52.<locals>.kernelc                    s   j | ||d  | ||}tj| jdt|d}td| jd d D ]+}td| jd d D ]}| |d |d f |d  ||d |d f  |||f< q/q#|S )Nr    r   r   r   r.   r   rT  r  r[  r   r   r\    s   z/TestManyStencils.test_basic52.<locals>.__kernelr   rf   r   r  r.   Nr;   r1   r  r^  r  r   r[  r   test_basic52  s   

zTestManyStencils.test_basic52c                 C   sX   dd }t ddd}t ddd}| jtttd}| j|||ddi|d	 d
S )z92 args, standard_indexing on variable that does not existc                 S   r  r  r   r0   r   r   r   r     r   z-TestManyStencils.test_basic53.<locals>.kernelr   rf   r   r  r;   r   r  N)rk   r   r   rM  r  r9  rI  rJ   r   r   r1   r  r   r   r   test_basic53  s   
zTestManyStencils.test_basic53c                    r  )z)2 args, standard_indexing, index from varc                 S   s   d}| d |d|f  S )Nr.   r   r   r   )r   r1   r  r   r   r   r     s   z-TestManyStencils.test_basic54.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]#}td| jd D ]}d}| |d |d f |d|f  |||f< q+q!|S Nr    r   r   r   r.   rT  )r   r1   r!   rW  rX  rY  rZ  r  r[  r   r   r\    s   
*z/TestManyStencils.test_basic54.<locals>.__kernelr   rf   r   Nr;   r1   r  r^  r  r   r[  r   test_basic54      

zTestManyStencils.test_basic54c                    r  )z62 args, standard_indexing, index from more complex varc                 S   s    d}d| }| d |d|f  S )Nr   r.   r   r   r   )r   r1   r  r  r   r   r   r     s   z-TestManyStencils.test_basic55.<locals>.kernelc           	         s   j | |d  | |}tj| jdt|d}td| jd d D ]'}td| jd D ]}d}d| }| |d |d f |d|f  |||f< q+q!|S r	  rT  )	r   r1   r!   rW  rX  rY  rZ  r  r  r[  r   r   r\  !  s   
*z/TestManyStencils.test_basic55.<locals>.__kernelr   rf   r   Nr;   r1   r  r^  r  r   r[  r   test_basic55  s   
zTestManyStencils.test_basic55c                    r  )z,2 args, standard_indexing, added complexity c                 S   sJ   d}d}|dd d f D ]}||7 }qd| d }| d |d|f  | S )Nr   r   r.   r   r   )r   r1   r  accrK  r  r   r   r   r   4  s   
z-TestManyStencils.test_basic56.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]<}td| jd D ]1}d}d}|dd d f D ]}	||	7 }q9d| d }
| |d |d f |d|
f  | |||f< q+q!|S r	  rT  )r   r1   r!   rW  rX  rY  rZ  r  r  rK  r  r[  r   r   r\  >  s   

.z/TestManyStencils.test_basic56.<locals>.__kernelr   rf   r   Nr;   r1   r  r^  r  r   r[  r   test_basic562  s   

zTestManyStencils.test_basic56c                    r  )z12 args, standard_indexing, split index operation c                 S   s   |d }| d |d  S )Nr   r   r   r   r  r   r   r   r   T  r  z-TestManyStencils.test_basic57.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]#}td| jd D ]}|d }| |d |d f |d  |||f< q+q!|S rS  rT  r   r1   r!   rW  rX  rY  rZ  r   r[  r   r   r\  Z  s   
&z/TestManyStencils.test_basic57.<locals>.__kernelr   rf   r   Nr;   r1   r  r^  r  r   r[  r   test_basic57R  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   l  r  z-TestManyStencils.test_basic58.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]%}td| jd D ]}|d d }| |d |d f |d  |||f< q+q!|S rS  rT  r  r[  r   r   r\  r  s   
&z/TestManyStencils.test_basic58.<locals>.__kernelr   rf   r   Nr;   r1   r  r^  r  r   r[  r   test_basic58j  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   rp  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   rp  rT  r  r[  r   r   r\    s   *z/TestManyStencils.test_basic59.<locals>.__kernelr   rf   r   r   Nr;   r1   r   r  r^  r  r   r[  r   test_basic59  s   


zTestManyStencils.test_basic59c                 C   s^   dd }t ddd}t ddd}d}| jtd}| j||||dd	d
gi|d dS )zP3 args, mix of array, relative and standard indexing,
        tuple pass throughc                 S   r  )Nr   rp  r   r   r  r   r   r   r     r  z-TestManyStencils.test_basic60.<locals>.kernelr   rf   r   )r   )r  r;   r1   r   r  N)rk   r   r   rM  r9  rI  )rJ   r   r   r1   r   r  r   r   r   test_basic60  s   

zTestManyStencils.test_basic60c                 C   sH   dd }t ddd}t ddd}| j|||dditd d	S )
z"2 args, standard_indexing on firstc                 S   r  r  r   r0   r   r   r   r     r   z-TestManyStencils.test_basic61.<locals>.kernelr   rf   r   r;   r   r  N)rk   r   r   rI  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   r0   r   r   r   r     r   z-TestManyStencils.test_basic62.<locals>.kernelc                    s   j | |d  | |}tj| jdt|d}td| jd d D ]}td| jd D ]}| |d |d f |d  |||f< q+q!|S )Nr    r  r   r   r   rp  rT  r  r[  r   r   r\    r  z/TestManyStencils.test_basic62.<locals>.__kernelr   rf   r   Nr1   r  )r;   r+   r  r^  r  r   r[  r   test_basic62  s   	
zTestManyStencils.test_basic62c                 C   sX   dd }t ddd}t ddd}| jtttd}| j|||dd	i|d
 dS )zQ2 args, standard_indexing applied to relative, should fail,
        non-const idxc                 S   s   | d|d f S )Nr   r   r   r0   r   r   r   r     r   z-TestManyStencils.test_basic63.<locals>.kernelr   rf   r   r   r  r;   r1   r  Nr  r  r   r   r   test_basic63  s   
zTestManyStencils.test_basic63c                 C   8   dd }t ddd}| j||ddittgd d	S )
z!1 arg that uses standard_indexingc                 S   rQ  r7   r   r   r   r   r   r     r  z-TestManyStencils.test_basic64.<locals>.kernelr   rf   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      r  r   r  rT  r   r!   rW  rX  _TestManyStencils__anr!  r'   r[  r   r   r\       z/TestManyStencils.test_basic65.<locals>.__kernel      N@)r  r   r!   r  Nr  rJ   r`  r   nhrq   r   r[  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$  rT  r&  r[  r   r   r\  	  r(  z/TestManyStencils.test_basic66.<locals>.__kernelr)  r*  r!   r  Nr  r+  r   r[  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   r2  r3  rT  	r   r!   rW  rX  _TestManyStencils__bnr'  r!  r'   r   r[  r   r   r\  "	     z/TestManyStencils.test_basic67.<locals>.__kernel      i@r      r   r2  r   r!   r  Nr^  r+  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   r2  r   r3  r$   )r   r!  r   r   r   r   r   7	  s   z.TestManyStencils.test_basic67b.<locals>.kernelr:  r   r;  r!   )r=  r  N)rk   r   r   rI  r   r9  r  r   r   r   test_basic67b5	  s
   
zTestManyStencils.test_basic67bc                    r0  )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 r1  r$   r4  r   r   r   r   C	  r5  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 r6  rT  r7  r[  r   r   r\  M	  r9  z/TestManyStencils.test_basic68.<locals>.__kernelr:  r   r;  r<  r!   r  Nr^  r+  r   r[  r   test_basic68A	  s   



zTestManyStencils.test_basic68c                    r0  )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   r2  r8   r3  r$   r4  r   r   r   r   c	  s   z-TestManyStencils.test_basic69.<locals>.kernelc           	   	      s   j | |d  | }tj| jdt|d}td| jd D ]3}td| jd D ](}d}tddD ]}tddD ]}|| |d |d f 7 }q8q1|d	 |||f< q(q|S r6  rT  r7  r[  r   r   r\  l	  r9  z/TestManyStencils.test_basic69.<locals>.__kernelr:  r   r;  r<  r!   r  Nr^  r+  r   r[  r   test_basic69a	  r?  zTestManyStencils.test_basic69c                    r0  )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   r2  r3  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   r2  r3  rT  r   r!   rW  rX  r8  r'  r!  rD  r'   r  r   r[  r   r   r\  	  s   z/TestManyStencils.test_basic70.<locals>.__kernelr:  r   r;  r<  r!   r  Nr^  r+  r   r[  r   test_basic70	  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'   rK  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   rH  rI  r   r  rT  )r   r!   rW  rX  r'  r!  r'   rK  r[  r   r   r\  	  s   z/TestManyStencils.test_basic71.<locals>.__kernelr)  r*  r!   r  Nr  r+  r   r[  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%  rK  r  r  rT  r&  r[  r   r   r\  	  r(  z/TestManyStencils.test_basic72.<locals>.__kernelr)  r*  r!   r  Nr  r+  r   r[  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   rM  r  rT  r&  r[  r   r   r\  	     z/TestManyStencils.test_basic73.<locals>.__kernelr)  ))r   r   r!   r  Nr  r+  r   r[  r   test_basic73	  r.  zTestManyStencils.test_basic73c                    r  )
zneighborhood, -ve rangec                 S   r  )Nr   r2  r"   r  r$   r   r   r   r   r   	  r"  z.TestManyStencils.test_basic73b.<locals>.kernelc                    r#  )Nr    r   r   r   r2  r"   r  rT  r&  r[  r   r   r\  
  r(  z0TestManyStencils.test_basic73b.<locals>.__kernelr)  ))r2  r   r!   r  Nr  r+  r   r[  r   test_basic73b	  r.  zTestManyStencils.test_basic73bc                    r  )
z!neighborhood, -ve->+ve range spanc                 S   r  )Nr   r   rM  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   rM  r  rT  r&  r[  r   r   r\  
  rN  z/TestManyStencils.test_basic74.<locals>.__kernelr)  ))r   r   r!   r  Nr  r+  r   r[  r   test_basic74
  r.  zTestManyStencils.test_basic74c                    r  )
z!neighborhood, -ve->-ve range spanc                 S   r  )Nr   r2  r   r  r$   r   r   r   r   r   0
  r"  z-TestManyStencils.test_basic75.<locals>.kernelc                    r#  )Nr    r   r   r   r2  r   r  rT  r&  r[  r   r   r\  9
  r(  z/TestManyStencils.test_basic75.<locals>.__kernelr)  ))r2  r-   r!   r  Nr  r+  r   r[  r   test_basic75.
  s   	



zTestManyStencils.test_basic75c                    r0  )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   r3  r$   rC  r   r   r   r   L
  rE  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   rf   r   r   r  r   r3  rT  rF  r[  r   r   r\  X
  s   z/TestManyStencils.test_basic76.<locals>.__kernelr:  r   r;  ))r  r   )r  rf   r!   r  Nr^  r+  r   r[  r   test_basic76J
  s   


zTestManyStencils.test_basic76c                    f   dd   fdd}t ddd}t ddd}d}||||}j |||d	|id
 dS )z neighborhood, two args c                 S   H   d}t ddD ]}t ddD ]}|| ||f |||f  7 }qq|d S Nr   r  r   r  r$   r   r1   r!  r'   r   r   r   r   r   o
     z-TestManyStencils.test_basic77.<locals>.kernelc           
   
      s   j | ||d  | |}tj| jdt|d}td| jd D ]=}td| jd D ]2}d}tddD ] }tddD ]}	|| || ||	 f ||| ||	 f  7 }q:q3|d |||f< q*q |S Nr    r   r   rf   r   r  r  rT  
r   r1   r!   rW  rX  r8  r'  r!  r'   r   r[  r   r   r\  x
     
z/TestManyStencils.test_basic77.<locals>.__kernelr:  r   r;  r  r   r]  r!   r  Nr^  rJ   r`  r   r1   r,  rq   r   r[  r   test_basic77m
     	
zTestManyStencils.test_basic77c                    rT  )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$   rW  r   r   r   r   
  rX  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  rb  r-   rc  r   r  rT  rZ  r[  r   r   r\  
  r[  z/TestManyStencils.test_basic78.<locals>.__kernel     r@r   r;  )rb  r  )rc  r-   r!   r  Nr^  r^  r   r[  r   test_basic78
  r`  zTestManyStencils.test_basic78c                    rT  )z. neighborhood, two args, -ve range, +ve range c                 S   ra  )Nr   rb  r-   r.   r   r  r$   rW  r   r   r   r   
  rX  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  rb  r-   r.   r   r  rT  rZ  r[  r   r   r\  
  s   
z0TestManyStencils.test_basic78b.<locals>.__kernelrd  r   r;  )re  )r.   rg  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   rU  rV  r$   rW  r   r   r   r   
  rX  z-TestManyStencils.test_basic79.<locals>.kernelr:  r   r;  r.   r  r!   r\  r  N)rk   r   r   rM  r   rI  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 rV  r$   rW  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 rY  rT  rZ  r[  r   r   r\  
  s   
z/TestManyStencils.test_basic80.<locals>.__kernelr:  r   r;  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 rV  r$   rW  r   r   r   r         z-TestManyStencils.test_basic81.<locals>.kernelr:  r   r;  r   r  r!   r\  r  N)rk   r   r   copyrM  r   r   rI  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   rf   r  r$   rW  r   r   r   r     rk  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   rf   r   r  rp  r  rT  rZ  r[  r   r   r\       
"z/TestManyStencils.test_basic82.<locals>.__kernelr:  r   r;  r\  r1   )r!   r;   r  Nrk   r   r   rl  rH  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   rn  ro  r$   rW  r   r   r   r   2  rk  z-TestManyStencils.test_basic83.<locals>.kernelr:  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   rf   r   r   r  rp  r  rT  rZ  r[  r   r   r\  >  rq  z/TestManyStencils.test_basic83.<locals>.__kernelr\  r1   rt  r!   r;   r+   r  Nrr  )rJ   r   r1   r`  r,  rq   r   r[  r   test_basic830  s   
zTestManyStencils.test_basic83c                    rP  )	z kernel calls njit c                 S      | d t | d  S Nr8   r   )r@   r   r   r   r   r   V  r  z-TestManyStencils.test_basic84.<locals>.kernelc              	         j | |d  | }tj| jdt|d}td| jd d D ](}td| jd D ]}| |d |d f t| |d |d f  |||f< q*q |S rS  )rO  rk   rU  rN  r  r%   r@   py_funcrV  r[  r   r   r\  [     z/TestManyStencils.test_basic84.<locals>.__kernelr:  r   r;  Nr^  r_  r   r[  r   test_basic84T  ry  zTestManyStencils.test_basic84c                    rP  )	z! kernel calls njit(parallel=True)c                 S   rw  rx  )rC   r   r   r   r   r   k  r  z-TestManyStencils.test_basic85.<locals>.kernelc              	      ry  rS  )rO  rk   rU  rN  r  r%   rC   rz  rV  r[  r   r   r\  q  r{  z/TestManyStencils.test_basic85.<locals>.__kernelr:  r   r;  Nr^  r_  r   r[  r   test_basic85i  rb  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   rQ  r7   r   r   r   r   r   r     r  z-TestManyStencils.test_basic86.<locals>.kernelr:  r   r;  badr  N)rk   r   r   rI  r9  r   r  r   r   r   test_basic86  s
   
zTestManyStencils.test_basic86c                    rP  )	z reserved arg name in use c                 S   rQ  r7   r   )__sentinel__r   r   r   r     r  z-TestManyStencils.test_basic87.<locals>.kernelc                    rR  rS  rT  )r  r!   rW  rX  rY  rZ  r[  r   r   r\    r]  z/TestManyStencils.test_basic87.<locals>.__kernelr:  r   r;  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 rd  r   )r   r   r   r   r   r     r%  z-TestManyStencils.test_basic88.<locals>.kernelr   rf   r   r  r)   r  Nr  r  r   r   r   test_basic88  s   zTestManyStencils.test_basic88c                    rP  )	z basic multiple returnc                 S   s(   | d dkrdS | d dk r| d S dS )Nr   r   r  r  r  r8   r   r   r   r   r   r   r     s
   z-TestManyStencils.test_basic89.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd d D ]A}td| jd D ]6}| |d |d f dkr?d|||f< q*| |d |d f dk rZ| |d |d f |||f< q*d	|||f< q*q |S )
Nr    r   r   r   rf   r   r  r  r   rT  rV  r[  r   r   r\    s   z/TestManyStencils.test_basic89.<locals>.__kernelr:  r   r;  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   rp  r  r:  r)   r$   )r   r1   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    rt  r   rf   r   r   r  rp  r  r:  r)   rT  )r   r1   r!   rW  rX  r8  r'  r!  r'   r   r  r[  r   r   r\    s    
"
z/TestManyStencils.test_basic90.<locals>.__kernelr:  r   r;  r\  r1   rt  ru  r  Nrr  r^  r   r[  r   test_basic90  s   
zTestManyStencils.test_basic90c                    rP  )	z? Issue #3454, const(int) == const(int) evaluating incorrectly. c                 S   s   d}ddkrd}| d | S )Nr   r.   r8   r   r0   r   r   r   r     s   z-TestManyStencils.test_basic91.<locals>.kernelc                    s   j | |d  | }tj| jdt|d}td| jd D ]%}td| jd D ]}d}ddkr2d}| |d |d f | |||f< q(q|S r	  rT  )r   r!   rW  rX  rY  rZ  r1   r[  r   r   r\    s   "z/TestManyStencils.test_basic91.<locals>.__kernelr:  r   r;  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 
Nrs  r   rl  r   r8   r   rn  r   rp  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 rg  rT  rV  r[  r   r   r\    0   
z/TestManyStencils.test_basic92.<locals>.__kernelr;  r.   r   r   Nrk   r  r   r   r  r   rH  rJ   r`  r   rq   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   rT  rV  r[  r   r   r\  1  r  z/TestManyStencils.test_basic93.<locals>.__kernelr;  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.   rk   medianr   r   r   r   r   H  r|   z-TestManyStencils.test_basic94.<locals>.kernelc              	      s   j | |d  | }tj| jdt|d}td| jd d D ](}td| jd d D ]}t| |d |d |d |d f |||f< q,q |S Nr    r   r   r   r   r.   rO  rk   rU  rN  r  r%   r  r   r!   rW  rX  r8  r'  r[  r   r   r\  M  s   z/TestManyStencils.test_basic94.<locals>.__kernelr;  r   r   r   rl  rl  r!   r  N)rk   r   uint32r   rH  r+  r   r[  r   test_basic94F  s   



zTestManyStencils.test_basic94znot yet supportedc                 C   r  )z  Slice, calculate neighborhood. c                 S   s   t | ddddf S )Nr   r.   r  r   r  r   r   r   r   r   `  r|   z-TestManyStencils.test_basic95.<locals>.kernelNr   r  r   r   r   test_basic95]  r  zTestManyStencils.test_basic95c                    sN   dd   fdd}t jdt jd}d}|||}j ||d|id	 d
S )z 1D slice. c                 S   s   t | dd S r  r  r   r   r   r   r   f  rW   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!   rW  rX  r'  r[  r   r   r\  k  s   "z/TestManyStencils.test_basic96.<locals>.__kernelr;  r   )rl  r!   r  N)rk   r   r  rH  r+  r   r[  r   test_basic96d  s   


zTestManyStencils.test_basic96c                 C   r  )z 2D slice and index. c                 S   s   t | dddf S )Nr   r.   rf   r  r   r   r   r   r   |  r  z-TestManyStencils.test_basic97.<locals>.kernelNr   r  r   r   r   test_basic97y  r  zTestManyStencils.test_basic97c                    sx   t jt jt j tdtd fD ]) dd  fdd}t dd}d}|||}j||| d	d
 qdS )r   r   c                 S   rQ  r7   r   r   r   r   r   r     r  z-TestManyStencils.test_basic98.<locals>.kernelc                    s   j | |d | }tj| j t|d}td| jd d D ]}td| jd d D ]}| |d |d f |||f< q,q |S )Nr    r   r   r   rT  r  r  r   r   r\    rq  z/TestManyStencils.test_basic98.<locals>.__kernelg      @)r.   rf   r  )r!   r+   r  N)rk   r   r   r   r   r   rH  r+  r   r  r   test_basic98  s   $


zTestManyStencils.test_basic98)tru   rv   rw   rI   rH  rI  rM  rO  ra  rf  rh  rj  rk  rm  ro  rr  rt  ru  rx  rz  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@  rA  rB  rG  rJ  rL  rO  rP  rQ  rR  rS  r_  rf  rh  ri  rj  rm  rs  rv  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  rx   r   r   rL   r   r    s     f
		


		




 
 "!#    $	)

r  __main__))numpyrk   
contextlibr   rZ   r   r   Z
numba.corer   r   Znumba.core.compilerr   r   Znumba.core.cpur	   Znumba.tests.supportr
   r   r   Znumba.core.errorsr   r   r   r  r   r   r(   r/   r2   r6   r:   r<   r=   r@   rC   ZTestCaserD   ry   r  ru   mainr   r   r   r   <module>   s~   









7   z                    ,