
    J/Ph(                    n   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	             Z ed
          d             Z ed          d             Zed             Zed             Zed             Z ed          d             Z ed          d             Zed             Z es ed          d             Z! G d dej"                  Z# G d de#          Z$e G d d e#                      Z%e&d!k    r ej'                     dS dS )"    N)contextmanager)njitstencil)typesregistry)compile_extraFlags)ParallelOptions)skip_parfors_unsupported_32bit)LoweringErrorTypingErrorNumbaValueErrorc                 N    d| d         | d         z   | d         z   | d         z   z  S N      ?r      r   r   r   r   r    as    Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_stencils.pystencil1_kernelr      s,    1T7QtW$qx/!E(:;;    )r   neighborhoodc                 X    | d         }t          dd          D ]}|| |         z  }d|z  S )Nr    r   333333?range)r   cumis      r   stencil2_kernelr*      s;    
B%C2q\\  qt9r         ?cvalc                     d| d         z  S )Nr      r   r   s    r   stencil3_kernelr2   #   s    !E(?r   c                     d| d         | d         z   | d         z   | d         z   |d         z   |d         z   |d         z   |d         z   z  S r   r   r   bs     r   stencil_multiple_input_kernelr6   (   s`    1T7QtW$qx/!E(:T7tW%'(x023E(; < <r   c                     || d         | d         z   | d         z   | d         z   |d         z   |d         z   |d         z   |d         z   z  S Nr   r   r   r   r   )r   r5   ws      r   !stencil_multiple_input_kernel_varr:   .   s`    $!D'!AeH,qx7$D'"$%eH-/0x8 9 9r   c                 2    |d         r| d         n|d         S Nr   r   r   )r   r5   fs      r   %stencil_multiple_input_mixed_types_2dr?   4   s    g*1T771T7*r   )r5   )standard_indexingc                 H    | d         |d         z  | d         |d         z  z   S )Nr   r   r   r   r4   s     r   !stencil_with_standard_indexing_1drB   9   s%    R51Q4<!A$1+%%r   c                     | d         |d         z  | d         |d         z  z   | d         |d         z  z   | d         |d         z  z   S r8   r   r4   s     r   !stencil_with_standard_indexing_2drD   >   sS    dGag$!D' 11h5!"$%eHqx$78 9r   c                     | dz   S Nr   r   r   s    r   addone_njitrG   D   s    q5Lr   Tparallelc                     | dz   S rF   r   r   s    r   addone_pjitrK   J   s    1ur   c                   @     e Zd ZdZ fdZd Zd Zd Zd Zd Z	 xZ
S )TestStencilBaseFc                     t                      | _        d| j        _         t          t          |           j        |  d S NT)r	   cflagsnrtsuperrM   __init__)selfargs	__class__s     r   rS   zTestStencilBase.__init__S   s7    gg-ot$$-t4444r   c           	      h    t          t          j        j        t          j        j        ||d |i           S N)r   r   
cpu_targettyping_contexttarget_context)rT   funcsigflagss       r   _compile_thiszTestStencilBase._compile_thisZ   s0    X0?%0?s!5". . 	.r   c                     t                      }d|_        |sdn|}t          |          |_        |                     |||          S rO   )r	   rQ   r
   auto_parallelr_   )rT   r\   r]   kwsr^   optionss         r   compile_parallelz TestStencilBase.compile_parallel_   sH    	!*$$s-g66!!$U333r   c                 <    |                      ||| j                  S )N)r^   )r_   rP   )rT   r\   r]   s      r   compile_njitzTestStencilBase.compile_njitf   s    !!$4;!???r   c                     t          d |D                       }|                     ||          }|                     ||          }||fS )Nc                 6    g | ]}t          j        |          S r   numbatypeof.0xs     r   
<listcomp>z/TestStencilBase.compile_all.<locals>.<listcomp>j        333U\!__333r   )tuplerd   rf   )rT   pyfuncrU   kwargsr]   cpfunccfuncs          r   compile_allzTestStencilBase.compile_alli   sR    33d33344&&vs33!!&#..f}r   c                     | j         |g|R  \  }} || } || } |j        | } |j        | }	t          j                            ||d           t          j                            ||d           t          j                            |	|d           |                     d|j                                                   d S )N   decimal@do_scheduling)rv   entry_pointnptestingassert_almost_equalassertInlibraryget_llvm_str)
rT   no_stencil_funcrr   rU   ru   rt   expected	py_outputnjit_outputparfor_outputs
             r   checkzTestStencilBase.checkq   s    ((7$777v"?D)FDM	 (e'. +*D1

&&y(A&FFF

&&{Ha&HHH

&&}h&JJJ 	&(C(C(E(EFFFFFr   )__name__
__module____qualname___numba_parallel_test_rS   r_   rd   rf   rv   r   __classcell__rV   s   @r   rM   rM   O   s        !5 5 5 5 5. . .
4 4 4@ @ @  G G G G G G Gr   rM   c                   R    e Zd Z fdZed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Z xZS )TestStencilc                 H     t          t          |           j        |i | d S rX   )rR   r   rS   rT   rU   rs   rV   s      r   rS   zTestStencil.__init__   s+    )k4  )4:6:::::r   c                 x    d }d }d }d}|                      |||           |                      |||           dS )zHTests whether the optional out argument to stencil calls works.
        c                     t          j        | dz                                | | f          }t          j        | dz                                | | f          }t	          ||          }|S )Nr1   out)r}   arangereshapezerosr   nABs      r   test_with_outz0TestStencil.test_stencil1.<locals>.test_with_out   s_    	!Q$''A//AA&&1v..Aq)))AHr   c                 |    t          j        | dz                                | | f          }t          |          }|S Nr1   )r}   r   r   r   r   s      r   test_without_outz3TestStencil.test_stencil1.<locals>.test_without_out   7    	!Q$''A//A""AHr   c                    t          j        | dz                                | | f          }t          j        | dz                                | | f          }t	          d| dz
            D ]W}t	          d| dz
            D ]A}d|||dz   f         ||dz   |f         z   |||dz
  f         z   ||dz
  |f         z   z  |||f<   BX|S Nr1   r   r   r}   r   r   r   r'   r   r   r   r)   js        r   test_impl_seqz0TestStencil.test_stencil1.<locals>.test_impl_seq   s    	!Q$''A//AA&&1v..A1a!e__ O Oq!a% O OA"a1q5k&'Aqk'245aQhK'@BCAE1H+'N OAadGGO Hr   d   Nr   )rT   r   r   r   r   s        r   test_stencil1zTestStencil.test_stencil1   si    	 	 		 	 	
	 	 	 

=-333

="2A66666r   c                    d }d }d}|                      |||           d }d }d}d}|                     |t          j        t          j        f          } |||          }|                    ||          }t
          j                            ||d           |                     d	|j	        
                                           d
 }d}|                     |t          j        t          j        t          j        f          }|                    |||          }t
          j                            ||d           |                     d	|j	        
                                           d }d}|                     |t          j        t          j        t          j        f          }|                    |||          }t
          j                            ||d           |                     d	|j	        
                                           dS )z`Tests whether the optional neighborhood argument to the stencil
        decorate works.
        c                 L    t          j        |           }t          |          }|S rX   )r}   r   r*   r   s      r   test_seqz+TestStencil.test_stencil2.<locals>.test_seq   s!    	!A""AHr   c                     t          j        |           }t          j        |           }t          dt	          |                    D ]%}dt          ||dz
  |dz                      z  ||<   &|S )N   r%   r   r}   r   r   r'   lensumr   r   r   r)   s       r   r   z0TestStencil.test_stencil2.<locals>.test_impl_seq   sh    	!AA1c!ff%% 1 1S1q5Q;000!Hr   r   c                 |    t          j        |           }d } t          j        || |ff          ||          }|S )Nc                 h    | |          }t          | dz   |dz             D ]}|| |         z  }d|z  S Nr   r%   r&   r   r9   r(   r)   s       r   r*   zDTestStencil.test_stencil2.<locals>.test_seq.<locals>.stencil2_kernel   sI    erAvq1u--    A1Q4KCCSy r   r!   r}   r   rj   r   )r   r9   r   r*   r   s        r   r   z+TestStencil.test_stencil2.<locals>.test_seq   sN    	!A! ! !
 Ioqb!WKHHHANNAHr   c                     t          j        |           }t          j        |           }t          |t	          |          |z
            D ](}dt          |||z
  ||z   dz                      z  ||<   )|S )Nr%   r   r   )r   r9   r   r   r)   s        r   r   z0TestStencil.test_stencil2.<locals>.test_impl_seq   sq    	!AA1c!ffqj)) 5 5S1q5Q?!3444!Hr   r   rx   ry   r{   c                     t          j        |           }d } t          j        || |ff| f          ||          }|S )Nc                 t    | | dz            }t          | dz   |dz             D ]}|| |dz            z  }d|z  S r   r&   r   s       r   r*   zDTestStencil.test_stencil2.<locals>.test_seq.<locals>.stencil2_kernel   sQ    QirAvq1u-- $ $A1QU8OCCSy r   r"   index_offsetsr   r   r9   offsetr   r*   r   s         r   r   z+TestStencil.test_stencil2.<locals>.test_seq   s_    	!A! ! !
9oqb!WK.4WK9 9 99:A? ?AHr   r   c                     t          j        |           }d } t          j        || |ff| f          ||          }|S )Nc                 N    dt          j        | | dz   |dz                      z  S )Nr%   r   r1   )r}   r   )r   r9   s     r   r*   zDTestStencil.test_stencil2.<locals>.test_seq.<locals>.stencil2_kernel   s)    RVAqb1fQUlO4444r   r   r   r   s         r   r   z+TestStencil.test_stencil2.<locals>.test_seq   s_    	!A5 5 59oqb!WK.4WK9 9 99:A? ?AHr   N)r   rd   r   intpr|   r}   r~   r   r   r   r   )	rT   r   r   r   r9   rt   r   r   r   s	            r   test_stencil2zTestStencil.test_stencil2   s   
	 	 	
	 	 	 

=(A...		 		 			 	 	 &&x%*ej1IJJ =A&&**1a00

&&}h&JJJ&(C(C(E(EFFF
	 
	 
	 &&x%*ej27*2> ? ?**1a88

&&}h&JJJ&(C(C(E(EFFF	 	 	 &&x%*ej27*2> ? ?**1a88

&&}h&JJJ&(C(C(E(EFFFFFr   c                    d }t          |          }t          |d          }d} ||          } ||          } ||          }|                     |d         dk    o|d         dk               |                     |d         dk    o|d         dk               |                     |d         dk    o|d         dk               dS )	zTests whether a non-zero optional cval argument to the stencil
        decorator works.  Also tests integer result type.
        c                 |    t          j        | dz                                | | f          }t          |          }|S r   )r}   r   r   r2   r   s      r   r   z+TestStencil.test_stencil3.<locals>.test_seq  r   r   TrH   r   r=   r+   )   r   N)r   
assertTrue)rT   r   	test_njittest_parr   seq_resnjit_respar_ress           r   test_stencil3zTestStencil.test_stencil3   s    
	 	 	
 NN	4000(1++9Q<<(1++,E#1EFFF#-G(4.C2GHHH,E#1EFFFFFr   c                 D    d }d }d}|                      |||           dS )z1Tests standard indexing with a 1d array.
        c                 V    t          j        |           }ddg}t          ||          }|S )N      @      @)r}   r   rB   r   r   r   Cs       r   r   z?TestStencil.test_stencil_standard_indexing_1d.<locals>.test_seq  s,    	!Ac
A1!Q77AHr   c                     t          j        |           }ddg}t          j        |           }t          d|           D ]+}||dz
           |d         z  ||         |d         z  z   ||<   ,|S )Nr   r   r   r   r}   r   r   r'   )r   r   r   r   r)   s        r   r   zDTestStencil.test_stencil_standard_indexing_1d.<locals>.test_impl_seq  sm    	!Ac
AA1a[[ 5 5Qx!A$1!4!Hr   r   Nr   rT   r   r   r   s       r   !test_stencil_standard_indexing_1dz-TestStencil.test_stencil_standard_indexing_1d  sC    	 	 		 	 	 

=(A.....r   c                 D    d }d }d}|                      |||           dS )zLTests standard indexing with a 2d array and multiple stencil calls.
        c                     t          j        | dz                                | | f          }t          j        d          }t	          ||          }t	          ||          }|S )Nr1   rx   rx   )r}   r   r   onesrD   )r   r   r   r   Ds        r   r   z?TestStencil.test_stencil_standard_indexing_2d.<locals>.test_seq,  sU    	!Q$''A//AA1!Q77A1!Q77AHr   c                 f   t          j        | dz                                | | f          }t          j        d          }t          j        | dz                                | | f          }t          j        | dz                                | | f          }t          d| dz
            D ]x}t          d| dz
            D ]b}|||dz   f         |d         z  ||dz   |f         |d         z  z   |||dz
  f         |d         z  z   ||dz
  |f         |d         z  z   |||f<   cyt          d| dz
            D ]x}t          d| dz
            D ]b}|||dz   f         |d         z  ||dz   |f         |d         z  z   |||dz
  f         |d         z  z   ||dz
  |f         |d         z  z   |||f<   cy|S )Nr1   r   r   r   r   r   r   )r}   r   r   r   r   r'   )r   r   r   r   r   r)   r   s          r   r   zDTestStencil.test_stencil_standard_indexing_2d.<locals>.test_impl_seq3  s   	!Q$''A//AAA&&1v..AA&&1v..A1a!e__ P Pq!a% P PA AE{QtW4qQ{QtW7LL AE{QuX5 689!a%(ah8N OAadGGP 1a!e__ P Pq!a% P PA AE{QtW4qQ{QtW7LL AE{QuX5 689!a%(ah8N OAadGGP Hr   r   Nr   r   s       r   !test_stencil_standard_indexing_2dz-TestStencil.test_stencil_standard_indexing_2d(  sC    	 	 		 	 	  

=(A.....r   c                 x    d }d }d}|                      |||           d }|                      |||           dS )z=Tests whether multiple inputs of the same size work.
        c                     t          j        | dz                                | | f          }t          j        | dz                                | | f          }t          ||          }|S r   )r}   r   r   r6   r   s       r   r   z:TestStencil.test_stencil_multiple_inputs.<locals>.test_seqJ  s\    	!Q$''A//A	!Q$''A//A-a33AHr   c                 T   t          j        | dz                                | | f          }t          j        | dz                                | | f          }t          j        | dz                                | | f          }t	          d| dz
            D ]}t	          d| dz
            D ]y}d|||dz   f         ||dz   |f         z   |||dz
  f         z   ||dz
  |f         z   |||dz   f         z   ||dz   |f         z   |||dz
  f         z   ||dz
  |f         z   z  |||f<   z|S r   r   )r   r   r   r   r)   r   s         r   r   z?TestStencil.test_stencil_multiple_inputs.<locals>.test_impl_seqP  s]   	!Q$''A//A	!Q$''A//AA&&1v..A1a!e__ 6 6q!a% 6 6A"1a!e8qQ{2QAX;')*1q5!85QAX;')*1q5!85 QAX;' *+1q5!856AadGG6 Hr   rx   c                     t          j        | dz                                | | f          }t          j        | dz                                | | f          }d}t          |||          }|S )Nr1   r   )r}   r   r   r:   )r   r   r   r9   r   s        r   r   z:TestStencil.test_stencil_multiple_inputs.<locals>.test_seqa  sc    	!Q$''A//A	!Q$''A//AA1!Q::AHr   Nr   r   s       r   test_stencil_multiple_inputsz(TestStencil.test_stencil_multiple_inputsF  sj    	 	 		 	 	 

=(A...	 	 	 	

=(A.....r   c                 D    d }d }d}|                      |||           d S )Nc                    t          j        | dz                                | | f          }| dz  t          j        | dz                                | | f          z
  }t          j        | t           j                  }t          j        | | f|j                  }t          d|           D ]8}t          d|           D ]%}|||f         r
|||f         n	|||f         |||f<   &9|S )Nr1   dtyper   )r}   r   r   eyebool_r   r   r'   )r   r   r   SOr)   r   s          r   r   z;TestStencil.test_stencil_mixed_types.<locals>.test_impl_seqk  s    	!q&!!))1a&11AQ16**22Aq6:::Aq)))A!Qqw///A1a[[ > >q! > >A)*1a4=a1gga1gAadGG>Hr   c                 $   t          j        | dz                                | | f          }| dz  t          j        | dz                                | | f          z
  }t          j        | t           j                  }t          |||          }|S )Nr1   r   )r}   r   r   r   r   r?   )r   r   r   r   r   s        r   r   z6TestStencil.test_stencil_mixed_types.<locals>.test_sequ  s    	!q&!!))1a&11AQ16**22Aq6:::Aq)))A5aA>>AHr   rx   r   )rT   r   r   r   s       r   test_stencil_mixed_typesz$TestStencil.test_stencil_mixed_typesi  sC    	 	 		 	 	 

=(A.....r   c                 x    d }d }d }d}|                      |||           |                      |||           dS )z&Tests 2D numba.stencil calls.
        c                     t          j        | dz                                | | f          }t          j        | dz                                | | f          } t	          j        d           ||           |S )Nr1   c                 N    d| d         | d         z   | d         z   | d         z   z  S r   r   r   s    r   <lambda>zCTestStencil.test_stencil_call.<locals>.test_impl1.<locals>.<lambda>  s/    DAdGag,=%,H./h-7 %8 r   r   r}   r   r   r   rj   r   r   s      r   
test_impl1z1TestStencil.test_stencil_call.<locals>.test_impl1  s    	!Q$''A//AA&&1v..A9EM 8 8 9 99:C C C CHr   c                     t          j        | dz                                | | f          }t          j        | dz                                | | f          }d } t	          j        |          |          }|S )Nr1   c                 N    d| d         | d         z   | d         z   | d         z   z  S r   r   r   s    r   sfz=TestStencil.test_stencil_call.<locals>.test_impl2.<locals>.sf  s,    qw401U8;ahFGGr   r   )r   r   r   r   s       r   
test_impl2z1TestStencil.test_stencil_call.<locals>.test_impl2  sx    	!Q$''A//AA&&1v..AH H H!b!!!$$AHr   c                    t          j        | dz                                | | f          }t          j        | dz                                | | f          }t	          d| dz
            D ]W}t	          d| dz
            D ]A}d|||dz   f         ||dz   |f         z   |||dz
  f         z   ||dz
  |f         z   z  |||f<   BX|S r   r   r   s        r   r   z4TestStencil.test_stencil_call.<locals>.test_impl_seq  s    	!Q$''A//AA&&1v..A1a!e__ C Cq!a% C CA"a1q5kAa!eQhK&?()!QU('467Aqk'B CAadGGC Hr   r   Nr   )rT   r   r   r   r   s        r   test_stencil_callzTestStencil.test_stencil_call  sh    	 	 		 	 		 	 	 

=*a000

=*a00000r   c                 D    d }d }d}|                      |||           dS )z&Tests 1D numba.stencil calls.
        c                     t          j        |           }t          j        |           } t          j        d           ||           |S )Nc                 <    d| d         | d         z   | d         z   z  S Nr%   r   r   r   r   r   s    r   r   zETestStencil.test_stencil_call_1D.<locals>.test_impl.<locals>.<lambda>  s     C1R51Q4<!A$+>$? r   r   r}   r   r   rj   r   r   s      r   	test_implz3TestStencil.test_stencil_call_1D.<locals>.test_impl  sD    	!AA@EM??@@JJJJHr   c                     t          j        |           }t          j        |           }t          d| dz
            D ](}d||dz
           ||         z   ||dz            z   z  ||<   )|S r   r   r   s       r   r   z7TestStencil.test_stencil_call_1D.<locals>.test_impl_seq  si    	!AA1a!e__ : :aAh1o!a%89!Hr   r   Nr   rT   r   r   r   s       r   test_stencil_call_1Dz TestStencil.test_stencil_call_1D  sC    	 	 		 	 	 

=)Q/////r   c                    d }d }d }d }d }d}|                      |t          j        f          }|                      |t          j        f          }|                      |t          j        f          }	|                      |t          j        f          }
 ||          }|                    |          }|                    |          }|	                    |          }|
                    |          }t          j                            ||d           t          j                            ||d           t          j                            ||d           t          j                            ||d           |                     t                    5 } |d	           d
d
d
           n# 1 swxY w Y   | 	                    dt          |j                             |                     t          t          f          5 } t          |          d	           d
d
d
           n# 1 swxY w 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                     t          j        |           }t          j        |           }d} t          j        d           |||           |S )Nr   c                 >    d| |          | d         z   | |         z   z  S Nr%   r   r   r   cs     r   r   zITestStencil.test_stencil_call_const.<locals>.test_impl1.<locals>.<lambda>  s"    saeadlQqT.A'B r   r   r   r   r   r   r	  s       r   r   z7TestStencil.test_stencil_call_const.<locals>.test_impl1  sK    	!AAACEMBBCCAqaPPPPHr   c                     t          j        |           }t          j        |           }d} t          j        d           |||           |S )Nr1   c                 H    d| d|z
           | d         z   | |dz
           z   z  S Nr%   r   r   r   r  s     r   r   zITestStencil.test_stencil_call_const.<locals>.test_impl2.<locals>.<lambda>  s(    SAa!eHqtOaAh$>? r   r   r   r
  s       r   r   z7TestStencil.test_stencil_call_const.<locals>.test_impl2  sa    	!AAAAEM??A AABA1N N N NHr   c                     t          j        |           }t          j        |           }d} t          j        d           |||           |S )Nr1   c                 J    d| | dz            | d         z   | |dz
           z   z  S r  r   r  s     r   r   zITestStencil.test_stencil_call_const.<locals>.test_impl3.<locals>.<lambda>  s+    SAqb1fI!$4qQx$?@ r   r   r   r
  s       r   
test_impl3z7TestStencil.test_stencil_call_const.<locals>.test_impl3  sa    	!AAABEM@@B BBCQAO O O OHr   c                     t          j        |           }t          j        |           }d}d} t          j        d           ||||           |S )Nr   r1   c                 J    d| | |z            | d         z   | ||z
           z   z  S r  r   )r   r	  ds      r   r   zITestStencil.test_stencil_call_const.<locals>.test_impl4.<locals>.<lambda>  s+    saQi!A$&61q5&AB r   r   r   )r   r   r   r  r	  s        r   
test_impl4z7TestStencil.test_stencil_call_const.<locals>.test_impl4  sk    	!AAAADEMBBD DDEq!HIK K K K Hr   c                     t          j        |           }t          j        |           }d}t          d| dz
            D ](}d|||z
           ||         z   |||z            z   z  ||<   )|S r   r   )r   r   r   r	  r)   s        r   r   z:TestStencil.test_stencil_call_const.<locals>.test_impl_seq  sn    	!AAA1a!e__ : :aAh1o!a%89!Hr   r   rx   ry   r   NzDstencil kernel index is not constant, 'neighborhood' option required)rd   r   r   r|   r}   r~   r   assertRaisesr   r   str	exceptionr   r   )rT   r   r   r  r  r   r   cpfunc1cpfunc2cpfunc3cpfunc4r   parfor_output1parfor_output2parfor_output3parfor_output4es                    r   test_stencil_call_constz#TestStencil.test_stencil_call_const  s   	 	 		 	 		 	 		 	 		 	 	 ''
UZMBB''
UZMBB''
UZMBB''
UZMBB =## ,,Q// ,,Q// ,,Q// ,,Q//

&&~x&KKK

&&~x&KKK

&&~x&KKK

&&~x&KKK // 	1JqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 78;AK8H8H	J 	J 	J ?@@ 	 ADQ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 78;AK8H8H	J 	J 	J 	J 	Js$   F//F36F3H((H,/H,c                     d }|                      |t          j        dd         fd          }|                     d|j                                                   dS )zYTests 1D numba.stencil calls without parallel translation
           turned off.
        c                 >     t          j        d           |           S )Nc                 <    d| d         | d         z   | d         z   z  S r   r   r   s    r   r   zJTestStencil.test_stencil_parallel_off.<locals>.test_impl.<locals>.<lambda>
  s     3!B%!A$,12E+F r   )rj   r   )r   s    r   r   z8TestStencil.test_stencil_parallel_off.<locals>.test_impl	  s     G5=!F!FGGJJJr   NFr   r{   )rd   rj   float64assertNotInr   r   )rT   r   rt   s      r   test_stencil_parallel_offz%TestStencil.test_stencil_parallel_off  sp    
	K 	K 	K &&y5=3C2E/4 ' 6 6)6>+F+F+H+HIIIIIr   c                     t          d          d             }d }t          j        d          }t          j                             ||           ||                     dS )z6Tests whether nested stencil decorator works.
        TrH   c                 <    t           d             } ||           }|S )Nc                     d}| | dz            S )Nr1   r   r   r  s     r   funz@TestStencil.test_stencil_nested1.<locals>.test_impl.<locals>.fun  s    !ay r   r&  )r   r-  r   s      r   r   z3TestStencil.test_stencil_nested1.<locals>.test_impl  s/    ! ! W! AAHr   c                     t          j        t          |           t                    }t	          dt          |                     D ]}| |dz
           ||<   |S )Nr   r   )r}   r   r   intr'   )r   r   r)   s      r   r   z7TestStencil.test_stencil_nested1.<locals>.test_impl_seq  sS    Qs+++A1c!ff%%    Qx!Hr   
   N)r   r}   r   r~   assert_equalr  s       r   test_stencil_nested1z TestStencil.test_stencil_nested1  sw     
t				 	 
			 	 	 IbMM

		!mmA.>.>?????r   c                 V   ddg}d }|D ]}t          j        ||          fd}t          j        d                              d          }t          j        |d          }||d	d
d
f<   t          j        |          } ||           t          j                            ||           | 	                    |          }|D ]6}	|	
                                }
t          j                            |
|           7t          j        |d          fd}t          j        d                              d          }t          j        |          }|                     t                    5 } ||           d
d
d
           n# 1 swxY w Y   d}|                     |t          |j                             | j        | j        fD ]^}	  ||d           t%          d          # t          t&          f$ r-}|                     |t          |                     Y d
}~Wd
}~ww xY wd
S )z/ Issue #3518, out kwarg did not work with cval.   r   c                 $    | d         | d         z
  S Nr=   r   r   r   s    r   kernelz1TestStencil.test_out_kwarg_w_cval.<locals>.kernel,  s    dGag%&r   r,   c                      t          j        d                              d          } t          j        |           } | |           |S N   rx   r   r   r}   r   r   	ones_liker   ret
stencil_fns     r   wrappedz2TestStencil.test_out_kwarg_w_cval.<locals>.wrapped2  sE    IbMM))&11l1oo
1#&&&&
r   r:  r;  r$   r   Nr                 ?c                      t          j        d                              d          } t          j        |           } | |           |S r9  r<  r>  s     r   rA  z2TestStencil.test_out_kwarg_w_cval.<locals>.wrappedI  sE    	"%%f--A,q//CJqc""""Jr   z-cval type does not match stencil return type.r   zExpected error was not raised)rj   r   r}   r   r   	full_liker=  r~   r   rv   r|   r  r   r   r  r  rf   rd   AssertionErrorr   )rT   
const_valsr7  	const_valrA  r   r   r?  implsimplgotr!  msgcompilerr@  s                 @r   test_out_kwarg_w_cvalz!TestStencil.test_out_kwarg_w_cval&  s    X
	' 	' 	' $ 	> 	>IvI>>>J     	"%%f--A|Ar**H'HRUO,q//CJqc""""J**3999 $$W..E > >&&((
..sH====>
 ]6333
	 	 	 	 	 IbMM!!&))l1oo// 	#1Jqc""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#=c3q{++,,,*D,AB 	F 	FHF$$$ %%DEEE $]3 + + +c3q66********+	F 	Fs*   -FFFG((H&9#H!!H&c                 t  
 t           j        t           j        t           j         t          d          t          d           fD ]}d }t	          j        ||          

fd}t          j        d                              d          }t          j        |d          }||dd	d	f<   t          j	        |          } 
||
           t           j
                            ||           |                     |          }|D ]6}|                                }	t           j
                            |	|           7d	S )U Test issue #7286 where the cval is a np attr/string-based numerical
        constantinfc                 $    | d         | d         z
  S r6  r   r   s    r   r7  z9TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.kernelc  s    $!D')*r   r,   c                      t          j        d                              d          } t          j        |           } | |           |S )N      (@r;  r   r<  r>  s     r   rA  z:TestStencil.test_out_kwarg_w_cval_np_attr.<locals>.wrappedh  sE    IcNN**622l1oo
1#&&&&
r   rS  r;  r$   r   Nr   )r}   nanrP  floatrj   r   r   r   rD  r=  r~   r   rv   r|   )rT   r-   r7  rA  r   r   r?  rH  rI  rJ  r@  s             @r   test_out_kwarg_w_cval_np_attrz)TestStencil.test_out_kwarg_w_cval_np_attr^  sK    VRVbfWeEllU5\\MJ 	> 	>D+ + + vD999J     	#&&v..A|Ar**H"HRUO,q//CJqc""""J**3999 $$W..E > >&&((
..sH====>-	> 	>r   )r   r   r   rS   skip_unsupportedr   r   r   r   r   r   r   r   r  r"  r)  r2  rM  rV  r   r   s   @r   r   r      s       ; ; ; ; ; 7 7 76 RG RG RGh G G G* / / /* / / /:  /  /  /D / / /* 1 1 1@ 0 0 0& MJ MJ MJ^ 	J 	J 	J @ @ @* 5F 5F 5Fn > > > > > > >r   r   c                   \    e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z( e)j*        d'          d(             Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;d9 Z<d: Z=d; Z> e)j*        d<          d=             Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdC ZEdD ZFdE ZGdF ZHdG ZIdH ZJdI ZKdJ ZLdK ZMdL ZNdM ZOdN ZPdO ZQdP ZRdQ ZSdR ZTdS ZUdT ZVdU ZWdV ZXdW ZYdX ZZdY Z[dZ Z\d[ Z]d\ Z^d] Z_d^ Z`d_ Zad` Zbda Zcdb Zddc Zedd Zfde Zgdf Zhdg Zidh Zjdi Zkdj Zldk Zmdl Zn e)j*        dm          dn             Zodo Zp e)j*        dm          dp             Zqdq Zr xZsS )rTestManyStencilsc                 H     t          t          |           j        |i | d S rX   )rR   rY  rS   r   s      r   rS   zTestManyStencils.__init__  s,    .%%.??????r   c           	      	   |                     dt                                }|                     d          }d}g g t          d&fd	            }t          |t                    r|d         }	|d         }
|d         }n|}	|}
|}d	|i}|                    |           d} ||	d
          5  t          d'i | | }ddd           n# 1 swxY w Y   t          |          dk    rfd}nQt          |          dk    rfd}n8t          |          dk    rfd}nt          dt          |          z            t          d |D                       }d} ||
d          5  | 	                    ||          } |j
        | }ddd           n# 1 swxY w Y   d} ||d          5  |                     ||          } |j
        | }ddd           n# 1 swxY w Y   |r0t          d|           t          d|           t          d|           	 |	sBt          j                            ||d           |                     |j        |j                   nl# t$          $ r_}                    d
t)          |          dt+          |          f           t          dt+          |          z             Y d}~nd}~ww xY w	 |
sBt          j                            ||d           |                     |j        |j                   nl# t$          $ r_}                    dt)          |          dt+          |          f           t          dt+          |          z             Y d}~nd}~ww xY w	 |st          j                            ||d           |                     |j        |j                   	 |                     d|j                                                   n# t2          $ r d}t3          |          w xY wnl# t$          $ r_}                    dt)          |          dt+          |          f           t          dt+          |          z             Y d}~nd}~ww xY w|rt          d           rd D             }t5          d |z            rGd! D             }d"                    d# D                       }d$|z  }d%|z  }t5          ||z             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.
        rc   expected_exceptionFNc           	   3   Z  K   	 d V  |                      |           d S d S # t          $ r|}| 3t          | d          r| n| g}d}|D ]}|t          ||          z  }|s n<                     |t	          |          dt          |          f           Y d }~d S Y d }~d S d }~ww xY wN__iter__F: append	Exceptionhasattr
isinstancetyper  extyusecaser!  lextyfoundexshould_failshould_not_fails         r   errorhandlerz=TestManyStencils.check_against_expected.<locals>.errorhandler  4     0 #&&w///// $#  - - -#$+D*$=$=KDDD8E!E# 3 3Ar!2!22   $** q''''3q666#+ ,- - - - - - - - -     -   $ 
B*A+B%%B*r   r   parforfunc_or_mode@stencilr   c                      |           S rX   r   arg0stencil_func_impls    r   wrap_stencilz=TestManyStencils.check_against_expected.<locals>.wrap_stencil      ((...r   r1   c                      | |          S rX   r   rw  arg1rx  s     r   ry  z=TestManyStencils.check_against_expected.<locals>.wrap_stencil      ((t444r   rx   c                      | ||          S rX   r   rw  r}  arg2rx  s      r   ry  z=TestManyStencils.check_against_expected.<locals>.wrap_stencil      ((tT:::r   +Up to 3 arguments can be provided, found %sc                 6    g | ]}t          j        |          S r   ri   rl   s     r   ro   z;TestManyStencils.check_against_expected.<locals>.<listcomp>  rp   r   parforsz
@stencil_output:
z
njit_output:
z
parfor_output:
ry   r`  z@stencil failed: %sz@njit failed: %sr{   z*Could not find `@do_scheduling` in LLVM IRz@njit(parallel=True) failed: %sz

c                     g | ]}d |z  S %sr   rl   s     r   ro   z;TestManyStencils.check_against_expected.<locals>.<listcomp>      1114!8111r   MThe following implementations should have raised an exception but did not:
%sc                 $    g | ]}d |d         z  S r  r   r   rl   s     r   ro   z;TestManyStencils.check_against_expected.<locals>.<listcomp>        :::QTAaD[:::r    c                     g | ]}d |z  S z%s: Message: %s

r   rl   s     r   ro   z;TestManyStencils.check_against_expected.<locals>.<listcomp>!  0     8 8 8"# 2 8 8 8r   NThe following implementations should not have raised an exception but did:
%s
Errors were:

%sNNr   )getdictr   re  updater   r   
ValueErrorrq   rf   r|   rd   printr}   r~   r   assertEqualr   rc  rb  rf  r  r   r   r   rE  RuntimeErrorjoin)rT   rr   r   rU   rs   rc   r\  DEBUG_OUTPUTro  
stencil_exnjit_ex	parfor_exstencil_argsstencilfunc_outputry  r]   r   wrapped_cfuncr   wrapped_cpfuncr!  rK  rH  errsstr1str2rm  rn  rx  s                             @@@r   check_against_expectedz'TestManyStencils.check_against_expected  sA     **Y//#ZZ(<==   
	0 	0 	0 	0 	0 	0 
	0& ($// 	++I6J(0G*84II+J(G*I&/G$$$!\*j11 	: 	: ' 7 7, 7 7!2!2D!9	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: t99>>/ / / / / /YY!^^5 5 5 5 5 5YY!^^; ; ; ; ; ; =D		   33d33344\'6** 	; 	; --lC@@M3-3T:K	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
 \)Y// 	> 	>!22<EEN6N6=M	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>
  	7(*<===$k222&666		2 K
..&! / = = =  1C1IJJJ 	2 	2 	2""!WWWWc!fff& '( ( ( '#a&&011111111		2	/ D
..1 / 6 6 6  1BCCC 	/ 	/ 	/""FQQ,H#IJJJ$s1vv-........	/	> 
.
..!8Q / 8 8 8  1DEEE.MM(&.;;==? ? ? ? & . . .FC(---.  	> 	> 	>""!WWWWc!fff& '( ( ( 3c!ff<========		>  	&MMM 	O11[111C !GJM N O O O  	,::/:::E77 8 8'68 8 8 9 9D/167D'$.Dtd{+++	, 	,s   0CCC*!FFF0!GG!$G!AI   
K	*AKK	AL 
M;AM66M;?AP -O2 1P 2PP 
Q;AQ66Q;c                    |                     dt                                }|                     d          }g g t          dfd	            }t          |t                    r|d         }|d         }|d         }	n|}|}|}	d|i}
|
                    |            ||d	          5  t          di |
 |  ddd           n# 1 swxY w Y   t          |          d
k    rfd}nQt          |          dk    rfd}n8t          |          dk    rfd}nt          dt          |          z            t          d |D                       } ||d          5  | 	                    ||          } |j
        |  ddd           n# 1 swxY w Y    ||	d          5  |                     ||          } |j
        |  ddd           n# 1 swxY w Y   rd D             }t          d|z            rGd D             }d                    d D                       }d|z  }d|z  }t          ||z             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.
        rc   r\  Nc           	   3   Z  K   	 d V  |                      |           d S d S # t          $ r|}| 3t          | d          r| n| g}d}|D ]}|t          ||          z  }|s n<                     |t	          |          dt          |          f           Y d }~d S Y d }~d S d }~ww xY wr^  ra  rg  s         r   ro  z7TestManyStencils.check_exceptions.<locals>.errorhandler@  rp  rq  r   r   rr  rs  rt  r   c                      |           S rX   r   rv  s    r   ry  z7TestManyStencils.check_exceptions.<locals>.wrap_stencilg  rz  r   r1   c                      | |          S rX   r   r|  s     r   ry  z7TestManyStencils.check_exceptions.<locals>.wrap_stencilj  r~  r   rx   c                      | ||          S rX   r   r  s      r   ry  z7TestManyStencils.check_exceptions.<locals>.wrap_stencilm  r  r   r  c                 6    g | ]}t          j        |          S r   ri   rl   s     r   ro   z5TestManyStencils.check_exceptions.<locals>.<listcomp>t  rp   r   r  c                     g | ]}d |z  S r  r   rl   s     r   ro   z5TestManyStencils.check_exceptions.<locals>.<listcomp>  r  r   r  c                 $    g | ]}d |d         z  S r  r   rl   s     r   ro   z5TestManyStencils.check_exceptions.<locals>.<listcomp>  r  r   r  c                     g | ]}d |z  S r  r   rl   s     r   ro   z5TestManyStencils.check_exceptions.<locals>.<listcomp>  r  r   r  r  r  r   )r  r  r   re  r  r   r   r  rq   rf   r|   rd   r  r  )rT   rr   rU   rs   rc   r\  ro  r  r  r  r  ry  r]   r  r  rK  rH  r  r  r  rm  rn  rx  s                       @@@r   check_exceptionsz!TestManyStencils.check_exceptions(  s      **Y//#ZZ(<==  
	0 	0 	0 	0 	0 	0 
	0& ($// 	++I6J(0G*84II+J(G*I&/G$$$\*j11 	% 	% ' 7 7, 7 7t$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% t99>>/ / / / / /YY!^^5 5 5 5 5 5YY!^^; ; ; ; ; ; =D		   33d33344\'6** 	- 	- --lC@@M%M%t,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 \)Y// 	. 	.!22<EEN&N&--	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
  	O11[111C !GJM N O O O  	,::/:::E77 8 8'68 8 8 9 9D/167D'$.Dtd{+++	, 	,s6   ,C

CC$!FFF(!GGGc                     t                      }d |d<   d |d<   d |d<   d |d<   |                                D ]
\  }}|||<   |S )N	pyStencilr   r   rr  )r  items)rT   rs   r  kvs        r   exception_dictzTestManyStencils.exception_dict  sZ    FF+)&	(LLNN 	 	DAqAaDDr   c                    |                     d          }|d         j        }|/t          |          t          |          k    rt          d          |dd          D ],}t	          |d          r||j        k    rt          d          -d S )Nr"   r   zInvalid neighborhood suppliedr   shapez#Input stencil arrays do not commute)r  r  r   r  rd  )rT   rU   rs   r"   
init_shapern   s         r   check_stencil_arraysz%TestManyStencils.check_stencil_arrays  s    zz.11!W]
#:#l"3"333 !@AAAabb 	L 	LAq'"" L(($%JKKK	L 	Lr   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z	rel indexc                     | d         S r<   r   r   s    r   r7  z-TestManyStencils.test_basic00.<locals>.kernel      T7Nr   c                 @                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S Nr!   r   r   r   r  r}   fullr  rf  r'   r   r"   _TestManyStencils__retdtype_TestManyStencils__b0_TestManyStencils__b_TestManyStencils__ar7  rT   s         r   __kernelz/TestManyStencils.test_basic00.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ 9 9 AGAJ// 9 9C%&sQwa'7%8DcNN9Kr   r:  rx   r   Nr}   r   r   r  rT   _TestManyStencils__kernelr   r   r7  s   `   @r   test_basic00zTestManyStencils.test_basic00  s    	 	 		 	 	 	 	 	 IbMM!!!Q''8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )rel index add constc                     | d         S Nr   r   r   s    r   r7  z-TestManyStencils.test_basic01.<locals>.kernel  r  r   c                 F                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S r  r  r  s         r   r  z/TestManyStencils.test_basic01.<locals>.__kernel      %%al%CCCJ717AT*-=-=>>>DQ
Q// 9 9 AGAJ// 9 9C%&sQwa'7%8DcNN9Kr   rS  rx   r   Nr  r  s   `   @r   test_basic01zTestManyStencils.test_basic01      	 	 		 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr   r   r   s    r   r7  z-TestManyStencils.test_basic02.<locals>.kernel      U8Or   c                 @                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S Nr!   r   r   r   r   r  r  s         r   r  z/TestManyStencils.test_basic02.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ : : AGAJ// : :C%&sQwb'8%9DcNN:Kr   rS  rx   r   Nr  r  s   `   @r   test_basic02zTestManyStencils.test_basic02      	 	 		 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr   r   r   s    r   r7  z-TestManyStencils.test_basic03.<locals>.kernel  r  r   c                 F                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]8}t          d| j        d         dz
            D ]}| |dz   |dz   f         |||f<   9|S r  r  r  s         r   r  z/TestManyStencils.test_basic03.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ 9 9 AGAJN33 9 9C%&sQwa'7%8DcNN9Kr   rS  rx   r   Nr  r  s   `   @r   test_basic03zTestManyStencils.test_basic03  r  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr   r   r   s    r   r7  z-TestManyStencils.test_basic04.<locals>.kernel  r  r   c                 @                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S r  r  r  s         r   r  z/TestManyStencils.test_basic04.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ : : AGAJ// : :C%&sRxq'8%9DcNN:Kr   rS  rx   r   Nr  r  s   `   @r   test_basic04zTestManyStencils.test_basic04  r  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr   r   r   r   s    r   r7  z-TestManyStencils.test_basic05.<locals>.kernel  r  r   c                 F                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S r  r  r  s         r   r  z/TestManyStencils.test_basic05.<locals>.__kernel      %%al%CCCJ717AT*-=-=>>>DQ
Q// : : AGAJ// : :C%&sRxq'8%9DcNN:Kr   rS  rx   r   Nr  r  s   `   @r   test_basic05zTestManyStencils.test_basic05  r  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr   r   r   r   s    r   r7  z-TestManyStencils.test_basic06.<locals>.kernel)  r  r   c                 F                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]8}t          d| j        d         dz
            D ]}| |dz   |dz   f         |||f<   9|S r  r  r  s         r   r  z/TestManyStencils.test_basic06.<locals>.__kernel/  s    %%al%CCCJ717AT*-=-=>>>DQ
++ : : AGAJN33 : :C%&sQwb'8%9DcNN:Kr   rS  rx   r   Nr  r  s   `   @r   test_basic06zTestManyStencils.test_basic06'  r  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr   r   r   r   s    r   r7  z-TestManyStencils.test_basic07.<locals>.kernel?  r  r   c                 L                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]8}t          d| j        d         dz
            D ]}| |dz   |dz   f         |||f<   9|S r  r  r  s         r   r  z/TestManyStencils.test_basic07.<locals>.__kernelE  s    %%al%CCCJ717AT*-=-=>>>DQ
Q// 9 9 AGAJN33 9 9C%&sQwa'7%8DcNN9Kr   rS  rx   r   Nr  r  s   `   @r   test_basic07zTestManyStencils.test_basic07=  r  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr   r   r   r   s    r   r7  z-TestManyStencils.test_basic08.<locals>.kernelU      V9r   c                 @                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S r  r  r  s         r   r  z/TestManyStencils.test_basic08.<locals>.__kernel[      %%al%CCCJ717AT*-=-=>>>DQ
++ ; ; AGAJ// ; ;C%&sRxr'9%:DcNN;Kr   rS  rx   r   Nr  r  s   `   @r   test_basic08zTestManyStencils.test_basic08S  s    	 	 		 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     | d         S )Nr/   r   r   s    r   r7  z-TestManyStencils.test_basic09.<locals>.kernelk  r  r   c                 F                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S )Nr!   r   r   r   r1   r0   r  r  s         r   r  z/TestManyStencils.test_basic09.<locals>.__kernelq  r  r   rS  rx   r   Nr  r  s   `   @r   test_basic09zTestManyStencils.test_basic09i  r  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                 $    | d         | d         z   S r6  r   r   s    r   r7  z-TestManyStencils.test_basic10.<locals>.kernel      T7QtW$$r   c                 h                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]I}t          d| j        d         dz
            D ](}| |dz   |dz   f         | |dz   |dz   f         z   |||f<   )J|S r  r  r  s         r   r  z/TestManyStencils.test_basic10.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ O O AGAJN33 O OC%&sQwa'7%81S1WcAg=M;N%NDcNNOKr   rS  rx   r   Nr  r  s   `   @r   test_basic10zTestManyStencils.test_basic10  s    	% 	% 	%
	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                 $    | d         | d         z   S )Nr   r   r   r   s    r   r7  z-TestManyStencils.test_basic11.<locals>.kernel  s    U8ag%%r   c                 h                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]I}t          d| j        d         dz
            D ](}| |dz   |dz   f         | |dz   |dz   f         z   |||f<   )J|S r  r  r  s         r   r  z/TestManyStencils.test_basic11.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ P P AGAJN33 P PC%&sRxq'8%9AcAgsQw>N<O%ODcNNPKr   rS  rx   r   Nr  r  s   `   @r   test_basic11zTestManyStencils.test_basic11  s    	& 	& 	&
	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                 $    | d         | d         z   S )Nr  r  r   r   s    r   r7  z-TestManyStencils.test_basic12.<locals>.kernel  s    U8ah&&r   c                 n                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]I}t          d| j        d         dz
            D ](}| |dz   |dz   f         | |dz   |dz   f         z   |||f<   )J|S r  r  r  s         r   r  z/TestManyStencils.test_basic12.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
Q// Q Q AGAJN33 Q QC%&sRxq'8%9AcAgsRx>O<P%PDcNNQKr   rS  rx   r   Nr  r  s   `   @r   test_basic12zTestManyStencils.test_basic12      	' 	' 	'
	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                 $    | d         | d         z   S )Nr  r  r   r   s    r   r7  z-TestManyStencils.test_basic13.<locals>.kernel  s    V9qw&&r   c                 n                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]I}t          d| j        d         dz
            D ](}| |dz   |dz   f         | |dz   |dz   f         z   |||f<   )J|S r  r  r  s         r   r  z/TestManyStencils.test_basic13.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
Q// Q Q AGAJN33 Q QC%&sRxr'9%:QsQwa?O=P%PDcNNQKr   rS  rx   r   Nr  r  s   `   @r   test_basic13zTestManyStencils.test_basic13  r  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )!rel index add domain change constc                     | d         dz   S )Nr=   rB  r   r   s    r   r7  z-TestManyStencils.test_basic14.<locals>.kernel  s    T7R<r   c                 F                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]8}t          d| j        d                   D ]}| |dz   |dz   f         dz   |||f<   9|S Nr!   r   r   r   rB  r  r  s         r   r  z/TestManyStencils.test_basic14.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ @ @ AGAJ// @ @C%&sQwa'7%84%?DcNN@Kr   rS  rx   r   Nr  r  s   `   @r   test_basic14zTestManyStencils.test_basic14  s    	  	  	 
	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r  c                     d}| d         |z   S )NrB  r=   r   r   ts     r   r7  z.TestManyStencils.test_basic14b.<locals>.kernel  s    AT7Q;r   c                 J                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]:}t          d| j        d                   D ]}d}| |dz   |dz   f         |z   |||f<   ;|S r  r  	r   r"   r  r  r  r  r  r7  rT   s	          r   r  z0TestManyStencils.test_basic14b.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ = = AGAJ// = =CA%&sQwa'7%81%<DcNN= Kr   rS  rx   r   Nr  r  s   `   @r   test_basic14bzTestManyStencils.test_basic14b  s    	 	 		 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )ztwo rel index, add constc                 *    | d         | d         z   dz   S )Nr=   r   r+   r   r   s    r   r7  z-TestManyStencils.test_basic15.<locals>.kernel      T7QtW$r))r   c                 n                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]L}t          d| j        d         dz
            D ]+}| |dz   |dz   f         | |dz   |dz   f         z   dz   |||f<   ,M|S Nr!   r   r   r   r+   r  r  s         r   r  z/TestManyStencils.test_basic15.<locals>.__kernel      %%al%CCCJ717AT*-=-=>>>DQ
++ A A AGAJN33 A AC&'aq(8&9&'aq(8&9':<?'@DcNNA Kr   rS  rx   r   Nr  r  s   `   @r   test_basic15zTestManyStencils.test_basic15  s    	* 	* 	*
	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )&two rel index boundary test, add constc                 *    | d         | d         z   dz   S )Nr=   )r1   r   r+   r   r   s    r   r7  z-TestManyStencils.test_basic17.<locals>.kernel  r!  r   c                 n                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]L}t          d| j        d         dz
            D ]+}| |dz   |dz   f         | |dz   |dz   f         z   dz   |||f<   ,M|S )Nr!   r   r   r   r1   r+   r  r  s         r   r  z/TestManyStencils.test_basic17.<locals>.__kernel  r$  r   r:  rx   r   Nr  r  s   `   @r   test_basic17zTestManyStencils.test_basic17      	* 	* 	*
	 	 	 	 	 	 IbMM!!!Q''8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r'  c                 *    | d         | d         z   dz   S )Nr=   r0   r   r+   r   r   s    r   r7  z-TestManyStencils.test_basic18.<locals>.kernel-      T7QuX%**r   c                 h                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]I}t          d| j        d                   D ]+}| |dz   |dz   f         | |dz   |dz   f         z   dz   |||f<   ,J|S )Nr!   r   r   r   r1   r0   r+   r  r  s         r   r  z/TestManyStencils.test_basic18.<locals>.__kernel2  s    %%al%CCCJ717AT*-=-=>>>DQ
++ B B AGAJ// B BC&'aq(8&9&'b#'(9&:';=@'ADcNNB Kr   r:  rx   r   Nr  r  s   `   @r   test_basic18zTestManyStencils.test_basic18+      	+ 	+ 	+
	 	 	 	 	 	 IbMM!!!Q''8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r'  c                 *    | d         | d         z   dz   S )Nr=   r   rx   r+   r   r   s    r   r7  z-TestManyStencils.test_basic19.<locals>.kernelC  r!  r   c                 n                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]I}t          d| j        d                   D ]+}| |dz   |dz   f         | |dz   |dz   f         z   dz   |||f<   ,J|S )Nr!   r   r   r   rx   r+   r  r  s         r   r  z/TestManyStencils.test_basic19.<locals>.__kernelH  s    %%al%CCCJ717AT*-=-=>>>DQ
Q// A A AGAJ// A AC&'aq(8&9&'aq(8&9':<?'@DcNNA Kr   r:  rx   r   Nr  r  s   `   @r   test_basic19zTestManyStencils.test_basic19A  r+  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )r'  c                 *    | d         | d         z   dz   S )Nr=   )r   r+   r   r   s    r   r7  z-TestManyStencils.test_basic20.<locals>.kernelY  r/  r   c                 h                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]I}t          d| j        d                   D ]+}| |dz   |dz   f         | |dz   |dz   f         z   dz   |||f<   ,J|S )Nr!   r   r   rx   r   r:  r+   r  r  s         r   r  z/TestManyStencils.test_basic20.<locals>.__kernel^  s    %%al%CCCJ717AT*-=-=>>>DQ
++ B B AGAJ// B BC&'aq(8&9&'ar(9&:';=@'ADcNNB Kr   r:  rx   r   Nr  r  s   `   @r   test_basic20zTestManyStencils.test_basic20W  r2  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )zsame rel, add constc                 *    | d         | d         z   dz   S )Nr=   r+   r   r   s    r   r7  z-TestManyStencils.test_basic21.<locals>.kernelo  r!  r   c                 h                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]I}t          d| j        d                   D ]+}| |dz   |dz   f         | |dz   |dz   f         z   dz   |||f<   ,J|S r#  r  r  s         r   r  z/TestManyStencils.test_basic21.<locals>.__kernelt  s    %%al%CCCJ717AT*-=-=>>>DQ
++ A A AGAJ// A AC&'aq(8&9&'aq(8&9':<?'@DcNNA Kr   r:  rx   r   Nr  r  s   `   @r   test_basic21zTestManyStencils.test_basic21m  r+  r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z%rel idx const expr folding, add constc                 *    | d         | d         z   dz   S )Nr   r=   r+   r   r   s    r   r7  z-TestManyStencils.test_basic22.<locals>.kernel  s    X;4(2--r   c                 n                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]L}t          d| j        d         dz
            D ]+}| |dz   |dz   f         | |dz   |dz   f         z   dz   |||f<   ,M|S r#  r  r  s         r   r  z/TestManyStencils.test_basic22.<locals>.__kernel  r$  r   rS  rx   r   Nr  r  s   `   @r   test_basic22zTestManyStencils.test_basic22  s    	. 	. 	.
	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )zrel idx, work in bodyc                 d    t          j        d| d         z             }| d         | d         z   |z   S Nr0  )r1   r   r   r=   r}   sinr   rn   s     r   r7  z-TestManyStencils.test_basic23.<locals>.kernel  s1    rAdG|$$AX;4(1,,r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]q}t          d| j        d         dz
            D ]P}t          j        d| |dz   |dz   f         z             }| |dz   |dz   f         | |dz   |dz   f         z   |z   |||f<   Qr|S Nr!   r   r   r   r1   r0  r  r}   r  r  rf  r'   rI  	r   r"   r  r  r  r  rn   r7  rT   s	          r   r  z/TestManyStencils.test_basic23.<locals>.__kernel  s   %%al%CCCJ717AT*-=-=>>>DQ
Q// ? ? AGAJN33 ? ?CrAcAgsQw&6$7788A&'aq(8&9&'aq(8&9':<='>DcNN? Kr   rS  rx   r   Nr  r  s   `   @r   test_basic23zTestManyStencils.test_basic23  s    	- 	- 	-		 		 		 		 		 		 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z,rel idx, dead code should not impact rel idxc                 ^    t          j        d| d         z             }| d         | d         z   S rG  rH  rJ  s     r   r7  z.TestManyStencils.test_basic23a.<locals>.kernel  s,    rAdG|$$AX;4((r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]n}t          d| j        d         dz
            D ]M}t          j        d| |dz   |dz   f         z             }| |dz   |dz   f         | |dz   |dz   f         z   |||f<   No|S rL  rM  rN  s	          r   r  z0TestManyStencils.test_basic23a.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
Q// O O AGAJN33 O OCrAcAgsQw&6$7788A%&sQwa'7%81S1WcAg=M;N%NDcNNO Kr   rS  rx   r   Nr  r  s   `   @r   test_basic23azTestManyStencils.test_basic23a  s    	) 	) 	)	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                     t          j        d                              dd          }d }|                     ||t          g           dS )z1d idx on 2d arrr:  rx   r   c                     | d         dz   S )Nr   r+   r   r   s    r   r7  z-TestManyStencils.test_basic24.<locals>.kernel  s    Q4"9r   r\  N)r}   r   r   r  r   rT   r   r7  s      r   test_basic24zTestManyStencils.test_basic24  sS    IbMM!!!Q''	 	 	 	fa[NKKKKKr   c                     t          j        d                              dd          }d }|                     ||t          t
          g           dS )zno idx on 2d arrr:  rx   r   c                     dS )Nr+   r   r   s    r   r7  z-TestManyStencils.test_basic25.<locals>.kernel  s    2r   rV  Nr}   r   r   r  r  r   rW  s      r   test_basic25zTestManyStencils.test_basic25  sg    IbMM!!!Q''	 	 	faZ=L=O 	P 	P 	P 	P 	Pr   c                      d  fd}t          j        d                              ddd          } ||d          }                     ||           dS )z3d arrc                 *    | d         | d         z
  dz   S )N)r   r   r   )r   r   r   r+   r   r   s    r   r7  z-TestManyStencils.test_basic26.<locals>.kernel  s    W:'
*R//r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]s}t          d| j        d         dz
            D ]R}t          d| j        d                   D ]4}| |dz   |dz   |dz   f         | |dz   |dz   |dz   f         z
  dz   ||||f<   5St|S )Nr!   r   r   r1   r   r+   r  )	r   r"   r  r  _TestManyStencils__cr  r  r7  rT   s	          r   r  z/TestManyStencils.test_basic26.<locals>.__kernel  s   %%al%CCCJ717AT*-=-=>>>DQ
++ 4 4 AGAJN33 4 4C$Q
33 4 4/0q#'371J/K/0q#'371J/K0L/203S#s]++44
 Kr   @   r      r1   Nr  r  s   `   @r   test_basic26zTestManyStencils.test_basic26  s    	0 	0 	0

	 
	 
	 
	 
	 
	 IbMM!!!Q**8At$$##FHa88888r   c                      d  fd}t          j        d                              dddd          } ||d          }                     ||           dS )z4d arrc                 *    | d         | d         z
  dz   S )N)r   r   r   r   )r   r   r   r   r+   r   r   s    r   r7  z-TestManyStencils.test_basic27.<locals>.kernel  s    Z=1[>1B66r   c                 
   	                     | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]}t          d| j        d                   D ]|}t          d| j        d         dz
            D ][}t          d| j        d                   D ]=}| |dz   |dz   |dz   |dz   f         | |dz   |dz   |dz   |dz   f         z
  dz   |||||f<   >\}|S )	Nr!   r   r   r   rx   r1   r   r+   r  )
r   r"   r  r  _TestManyStencils__dr`  r  r  r7  rT   s
           r   r  z/TestManyStencils.test_basic27.<locals>.__kernel  sR   %%al%CCCJ717AT*-=-=>>>DQ
++ = = AGAJ// = =C$Q
Q77 = =#(AGAJ#7#7 = =C89#'37:='37;K 9L89#'37:='38;L 9M9M 9<	9<Dc3!344=== Kr      r   rb  r1   Nr  r  s   `   @r   test_basic27zTestManyStencils.test_basic27  s    	7 	7 	7	 	 	 	 	 	  IcNN""1aA..8At$$##FHa88888r   c                      d  fd}t          j        d                              dd                              t           j                  } ||d          }                     ||           dS )ztype widen c                 <    | d         t          j        d          z   S )Nr=         $@)r}   r'  r   s    r   r7  z-TestManyStencils.test_basic28.<locals>.kernel  s    T7RZ__,,r   c                 j                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]J}t          d| j        d                   D ],}| |dz   |dz   f         t          j        d          z   |||f<   -K|S )Nr!   r   r   r   rl  )r  r}   r  r  rf  r'   r'  r  s         r   r  z/TestManyStencils.test_basic28.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ L L AGAJ// L LC%&sQwa'7%82:d;K;K%KDcNNLKr   r:  rx   r   Nr}   r   r   astypefloat32r  r  s   `   @r   test_basic28zTestManyStencils.test_basic28  s    	- 	- 	-	 	 	 	 	 	 IbMM!!!Q''..rz::8At$$##FHa88888r   c                     t          j        d                              dd          }d }|                     ||t          t
          t          g           dS )zconst index from func rS  rx   r   c                 T    | dt          t          j        d                    f         S )Nr   )r/  r}   cosr   s    r   r7  z-TestManyStencils.test_basic29.<locals>.kernel)  s     QBF1II&''r   rV  Nr}   r   r   r  r  r   r   rW  s      r   test_basic29zTestManyStencils.test_basic29%  sj    IcNN""1a((	( 	( 	(faZ=L=J=L 	M 	M 	M 	M 	Mr   c                      d  fd}t          j        d                              dd                              t           j                  } ||d          }                     ||           dS )zsigned zerosc                     | d         S r<   r   r   s    r   r7  z-TestManyStencils.test_basic30.<locals>.kernel1  r  r   c                 @                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S r  r  r  s         r   r  z/TestManyStencils.test_basic30.<locals>.__kernel6  r  r   r:  rx   r   Nrn  r  s   `   @r   test_basic30zTestManyStencils.test_basic30/  s    	 	 	
	 	 	 	 	 	 IbMM!!!Q''..rz::8At$$##FHa88888r   c                      d  fd}t          j        d                              dd                              t           j                  } ||d          }                     ||           dS )zdoes a const propagate? 2Dc                     d}| |df         S Nr   r   r   r  s     r   r7  z-TestManyStencils.test_basic31.<locals>.kernelF  s    AQT7Nr   c                 J                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]:}t          d| j        d         dz
            D ]}d}| ||z   |dz   f         |||f<   ;|S r  r  r  s	          r   r  z/TestManyStencils.test_basic31.<locals>.__kernelL  s    %%al%CCCJ717AT*-=-=>>>DQ
++ 9 9 AGAJN33 9 9CA%&sQwa'7%8DcNN9 Kr   r:  rx   r   Nrn  r  s   `   @r   test_basic31zTestManyStencils.test_basic31D  s    	 	 		 	 	 	 	 	 IbMM!!!Q''..rz::8At$$##FHa88888r   z constant folding not implementedc                 \    t          j        d                              dd          }d }dS )zdoes a const propagate?rS  rx   r   c                 $    d}d|z
  }| |df         S r}  r   )r   sr  s      r   r7  z.TestManyStencils.test_basic31b.<locals>.kernel_  s    AAAQT7Nr   N)r}   r   r   rW  s      r   test_basic31bzTestManyStencils.test_basic31bZ  s:     IcNN""1a((	 	 	 	 	r   c                      d  fd}t          j        d          } ||d          }                     ||           dS )zdoes a const propagate? 1Dc                     d}| |         S rF   r   r  s     r   r7  z.TestManyStencils.test_basic31c.<locals>.kernelh  s    AQ4Kr   c                                         | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]}d}| ||z            ||f<   |S r  r  )r   r"   r  r  r  r  r7  rT   s         r   r  z0TestManyStencils.test_basic31c.<locals>.__kerneln  s    %%al%CCCJ717AT*-=-=>>>DQ
Q// ( (sQwZST

Kr   rS  Nr}   r   r  r  s   `   @r   test_basic31czTestManyStencils.test_basic31cf  so    	 	 		 	 	 	 	 	 IcNN8At$$##FHa88888r   c                     t          j        d                              dd          }d }|                     ||t          t
          t          g           dS )ztyped int indexrS  rx   r   c                 :    | t          j        d          df         S r}  )r}   int8r   s    r   r7  z-TestManyStencils.test_basic32.<locals>.kernel  s    RWQZZ]##r   rV  Nru  rW  s      r   test_basic32zTestManyStencils.test_basic32{  sj    IcNN""1a((	$ 	$ 	$faZ=L=J=L 	M 	M 	M 	M 	Mr   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )zadd 0d arrayc                 <    | d         t          j        d          z   S )Nr=   r   )r}   arrayr   s    r   r7  z-TestManyStencils.test_basic33.<locals>.kernel  s    T7RXa[[((r   c                 j                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]J}t          d| j        d                   D ],}| |dz   |dz   f         t          j        d          z   |||f<   -K|S r  )r  r}   r  r  rf  r'   r  r  s         r   r  z/TestManyStencils.test_basic33.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ G G AGAJ// G GC%&sQwa'7%828A;;%FDcNNGKr   rS  rx   r   Nr  r  s   `   @r   test_basic33zTestManyStencils.test_basic33  s    	) 	) 	)
	 	 	 	 	 	 IcNN""1a((8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z<More complex rel index with dependency on addition rel indexc                     d| d         z   }|| d         | d         z   | d         z   t          j        | d                   z   z   S )N      @r   r   r   r.  rH  )r   gs     r   r7  z-TestManyStencils.test_basic34.<locals>.kernel  sC    QtWA$!D')AeH4rvah7G7GGHHr   c           
                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]}t          d| j        d         dz
            D ]r}d| |dz   |dz   f         z   }|| |dz   |dz   f         | |dz   |dz   f         z   | |dz   |dz   f         z   t          j        | |dz   |dz   f                   z   z   |||f<   s|S )	Nr!   r   r   r   r1   r  r   r0   rM  )	r   r"   r  r  r  r  r  r7  rT   s	          r   r  z/TestManyStencils.test_basic34.<locals>.__kernel  s@   %%al%CCCJ717AT*-=-=>>>DQ
Q// H H AGAJN33 H HCaaq 011A%&!C!GS1W,<*=*+C!GS1W,<*=+>*+C!GS2X,=*>+? +-&38S1W3D1E*F*F+G &HDcNNH Kr      r:  Nr  r  s   `   @r   test_basic34zTestManyStencils.test_basic34  s    	I 	I 	I	 	 	 	 	 	 IcNN""2r**8At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||ddi	           dS )
z<simple cval where cval is int but castable to dtype of floatc                     | d         S r  r   r   s    r   r7  z-TestManyStencils.test_basic35.<locals>.kernel  r  r   c                 F                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S )Nr!   r   r   r   r   r  r  s         r   r  z/TestManyStencils.test_basic35.<locals>.__kernel  r  r   rS  rx   r   Nr-   r   rc   r  r  s   `   @r   test_basic35zTestManyStencils.test_basic35  s    	 	 	
	 	 	 	 	 	 IcNN""1a((8At$$##FHa&!#MMMMMr   c                      d  fd}t          j        d                              dd          } ||d          }                     ||ddi	           dS )
zmore complex with cvalc                 H    | d         | d         z   | d         z   | d         z   S Nr   r   r  r   r   s    r   r7  z-TestManyStencils.test_basic36.<locals>.kernel  '    T7QuX%%01U8;;r   c                                         | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]k}t          d| j        d         dz
            D ]J}| |dz   |dz   f         | |dz   |dz   f         z   | |dz   |dz   f         z   | |dz   |dz   f         z   |||f<   Kl|S )Nr!   g      @r   r   r   r   r  r  s         r   r  z/TestManyStencils.test_basic36.<locals>.__kernel  s   %%al%CCCJ717CtJ/?/?@@@DQ
Q// < < AGAJN33 < <C&'aq(8&9&'ar(9&:';&'ar(9&:'; '(ar(9&:';DcNN<
 Kr   rS  rx   r   Nr-   r   r  r  r  s   `   @r   test_basic36zTestManyStencils.test_basic36  s    	< 	< 	<

	 
	 
	 
	 
	 
	 IcNN""1a((8At$$##FHa&!#MMMMMr   c                      d  fd}t          j        d                              dd          } ||d          }                     ||ddi	           dS )
zcval is exprc                 H    | d         | d         z   | d         z   | d         z   S r  r   r   s    r   r7  z-TestManyStencils.test_basic37.<locals>.kernel  r  r   c                                         | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]k}t          d| j        d         dz
            D ]J}| |dz   |dz   f         | |dz   |dz   f         z   | |dz   |dz   f         z   | |dz   |dz   f         z   |||f<   Kl|S )Nr!         Q@r   r   r   r   r  r  s         r   r  z/TestManyStencils.test_basic37.<locals>.__kernel     %%al%CCCJ717DZ0@0@AAADQ
Q// < < AGAJN33 < <C&'aq(8&9&'ar(9&:';&'ar(9&:'; '(ar(9&:';DcNN<
 Kr   rS  rx   r   Nr-   r  r  r  r  s   `   @r   test_basic37zTestManyStencils.test_basic37  s    	< 	< 	<

	 
	 
	 
	 
	 
	 IcNN""1a((8At$$##FHa-3W,= 	$ 	? 	? 	? 	? 	?r   c                     d }t          j        d                              dd          }|                     t          t          t                    }|                     ||ddi|           d	S )
zcval is complexc                 H    | d         | d         z   | d         z   | d         z   S r  r   r   s    r   r7  z-TestManyStencils.test_basic38.<locals>.kernel  r  r   rS  rx   r   r   rr  r   r-   rB  rc   r\  Nr}   r   r   r  r   r  rT   r7  r   rl  s       r   test_basic38zTestManyStencils.test_basic38  s    	< 	< 	<IcNN""1a((  #"  ! " " 	fa&#13 	 	5 	5 	5 	5 	5r   c                     d t          j        d          t          j        d          z    fd}t          j        d                              dd          } ||d          }                     ||d	i
           dS )zcval is func exprc                 H    | d         | d         z   | d         z   | d         z   S r  r   r   s    r   r7  z-TestManyStencils.test_basic39.<locals>.kernel  r  r   r   r1   c                                         | |            |           }t          j        | j        t	          |                    }t          d| j        d         dz
            D ]k}t          d| j        d         dz
            D ]J}| |dz   |dz   f         | |dz   |dz   f         z   | |dz   |dz   f         z   | |dz   |dz   f         z   |||f<   Kl|S )Nr!   r   r   r   r   r  )	r   r"   r  r  r  r  r-   r7  rT   s	         r   r  z/TestManyStencils.test_basic39.<locals>.__kernel  r  r   rS  rx   r   Nr-   r  )r}   rI  rt  r   r   r  )rT   r  r   r   r-   r7  s   `   @@r   test_basic39zTestManyStencils.test_basic39  s    	< 	< 	< vbzzBF1II%

	 
	 
	 
	 
	 
	 
	 IcNN""1a((8At$$##FHa-3TN 	$ 	< 	< 	< 	< 	<r   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||           dS )z2 args!c                 $    | d         |d         z   S Nr   )r   r0   r   r4   s     r   r7  z-TestManyStencils.test_basic40.<locals>.kernel      T7QuX%%r   c                 l                        | ||            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]F}t          d| j        d                   D ](}| |dz   |dz   f         ||dz   |dz   f         z   |||f<   )G|S )Nr!   r   r   r1   r   r0   r  	r   r5   r"   r  r  r  r  r7  rT   s	          r   r  z/TestManyStencils.test_basic40.<locals>.__kernel#  s    %%a%FFF1J717AT*-=-=>>>DQ
Q// P P AGAJ// P PC%&sQwa'7%81S1WcBh=N;O%ODcNNPKr   rS  rx   r   Nr  rT   r  r   r5   r   r7  s   `    @r   test_basic40zTestManyStencils.test_basic40  s    	& 	& 	&
	 	 	 	 	 	 IcNN""1a((IcNN""1a((8Aq$''##FHa;;;;;r   c                     d }t          j        d                              dd          }t          j        d                              dd          }|                     |||t          t
          g           dS )	z(2 args! rel arrays wildly not same size!c                 $    | d         |d         z   S r  r   r4   s     r   r7  z-TestManyStencils.test_basic41.<locals>.kernel3  r  r   rS  rx   r   r+   r   rV  Nr}   r   r   r  r  rE  rT   r7  r   r5   s       r   test_basic41zTestManyStencils.test_basic411      	& 	& 	&IcNN""1a((IbMM!!!Q''fa
@N@P 	Q 	Q 	Q 	Q 	Qr   c                     d }t          j        d                              dd          }t          j        d                              dd          }|                     |||t          t
          g           dS )z%2 args! rel arrays very close in sizec                 $    | d         |d         z   S r  r   r4   s     r   r7  z-TestManyStencils.test_basic42.<locals>.kernel<  r  r   rS  rx   r         "@rV  Nr  r  s       r   test_basic42zTestManyStencils.test_basic42:  r  r   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||           dS )z2 args more complexityc                 H    | d         | d         z   |d         z   |d         z   S )Nr   r   r1   r.  r   r   r4   s     r   r7  z-TestManyStencils.test_basic43.<locals>.kernelE  s'    T7QtW$qx/!E(::r   c                                         | ||            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]k}t          d| j        d         dz
            D ]J}| |dz   |dz   f         | |dz   |dz   f         z   ||dz   |dz   f         z   ||dz   |dz   f         z   |||f<   Kl|S )Nr!   r   r   r   r1   r0   r   r  r  s	          r   r  z/TestManyStencils.test_basic43.<locals>.__kernelJ  s   %%a%FFF1J717AT*-=-=>>>DQ
Q// < < AGAJN33 < <C&'aq(8&9&'aq(8&9':&'b#'(9&:'; '(ar(9&:';DcNN<
 Kr   g      >@r      Nr  r  s   `    @r   test_basic43zTestManyStencils.test_basic43C  s    	; 	; 	;

	 
	 
	 
	 
	 
	 IcNN""1a((IcNN""1a((8Aq$''##FHa;;;;;r   c                     d }t          j        d                              dd          }t          j        d                              dd          }|                     |||t          t
          g           dS )z!2 args, has assignment before usec                     d| d<   | d         S )Nr:  r   r   r4   s     r   r7  z-TestManyStencils.test_basic44.<locals>.kernel]  s    AdGT7Nr   rS  rx   r   rV  Nr}   r   r   r  r   r   r  s       r   test_basic44zTestManyStencils.test_basic44[  s    	 	 	 IcNN""1a((IcNN""1a((fa@M@O 	P 	P 	P 	P 	Pr   c                     d }t          j        d                              dd          }t          j        d                              dd          }|                     |||t          t
          g           dS )z02 args, has assignment and then cross dependencyc                 .    d| d<   | d         | d         z   S )Nr:  r   r   r   r4   s     r   r7  z-TestManyStencils.test_basic45.<locals>.kernelg  s    AdGT7QtW$$r   rS  rx   r   rV  Nr  r  s       r   test_basic45zTestManyStencils.test_basic45e      	% 	% 	% IcNN""1a((IcNN""1a((fa@M@O 	P 	P 	P 	P 	Pr   c                     d }t          j        d                              dd          }t          j        d                              dd          }|                     |||t          t
          g           dS )z#2 args, has cross relidx assignmentc                 :    |d         | d<   | d         | d         z   S )Nr  r   r   r   r4   s     r   r7  z-TestManyStencils.test_basic46.<locals>.kernelq  s"    gAdGT7QtW$$r   rS  rx   r   rV  Nr  r  s       r   test_basic46zTestManyStencils.test_basic46o  r  r   c                 Z    d  fd}t          j        d                              dd          }t          j        d                              dd          }t          j        d                              dd          } ||||d          }                     ||||           dS )z3 argsc                 6    | d         |d         z   |d         z   S )Nr   r   r   r   r   r5   r	  s      r   r7  z-TestManyStencils.test_basic47.<locals>.kernel{  s    T7QtW$qx//r   c                    	                     | |||            | ||          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]Z}t          d| j        d         dz
            D ]9}| |dz   |dz   f         ||dz   |dz   f         z   ||dz   |dz   f         z   |||f<   :[|S r  r  
r   r5   r	  r"   r  r  r  r  r7  rT   s
           r   r  z/TestManyStencils.test_basic47.<locals>.__kernel  s    %%aAL%III1aJ717AT*-=-=>>>DQ
Q// < < AGAJN33 < <C&'aq(8&9&'aq(8&9':&'b#'(9&:';DcNN< Kr   rS  rx   r   Nr  rT   r  r   r5   r	  r   r7  s   `     @r   test_basic47zTestManyStencils.test_basic47y  s    	0 	0 	0		 		 		 		 		 		 IcNN""1a((IcNN""1a((IcNN""1a((8Aq!T**##FHaA>>>>>r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z22 args, has assignment before use via memory aliasc                 6    | j         }d|d d d d f<   | d         S )Nr0  r   )Tr  s     r   r7  z-TestManyStencils.test_basic48.<locals>.kernel  s'    AAaaadGT7Nr   c                 j                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]G}t          d| j        d                   D ])}| j        }d|d d d d f<   | |dz   |dz   f         |||f<   *H|S )Nr!   r   r   r   r0  )r  r}   r  r  rf  r'   r  )	r   r"   r  r  r  r  r	  r7  rT   s	          r   r  z/TestManyStencils.test_basic48.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
Q// 9 9 AGAJ// 9 9CA AaaadG%&sQwa'7%8DcNN9 Kr   rS  rx   r   Nr  r  s   `   @r   test_basic48zTestManyStencils.test_basic48  s    	 	 			 		 		 		 		 		 IcNN""1a((8At$$##FHa88888r   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||ddi	           dS )
z#2 args, standard_indexing on secondc                 $    | d         |d         z   S )Nr   r5  r   r4   s     r   r7  z-TestManyStencils.test_basic49.<locals>.kernel  r  r   c                 Z                        | |            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]>}t          d| j        d                   D ] }| |dz   |dz   f         |d         z   |||f<   !?|S )Nr!   r   r   r   r5  r  r  s	          r   r  z/TestManyStencils.test_basic49.<locals>.__kernel  s    %%al%CCC1J717AT*-=-=>>>DQ
Q// C C AGAJ// C CC%&sQwa'7%81T7%BDcNNCKr   rS  rx   r   Nr@   r5   r  r  r  s   `    @r   test_basic49zTestManyStencils.test_basic49  s    	% 	% 	%
	 	 	 	 	 	 IcNN""1a((IcNN""1a((8Aq$''##FHa-@#,F 	$ 	H 	H 	H 	H 	Hr   z&dynamic range checking not implementedc                     d }dS )z2 args, standard_indexing OOBc                 $    | d         |d         z   S )Nr   )r      r   r4   s     r   r7  z-TestManyStencils.test_basic50.<locals>.kernel  r  r   Nr   rT   r7  s     r   test_basic50zTestManyStencils.test_basic50  s    	& 	& 	& 	& 	&r   c                     d }t          j        d                              dd          }t          j        d                              dd          }|                     |||dddgit          t
          g           d	S )
z$2 args, standard_indexing, no relidxc                 $    | d         |d         z   S Nr   )r   r1   r   r4   s     r   r7  z-TestManyStencils.test_basic51.<locals>.kernel  r  r   rS  rx   r   r@   r   r5   r  Nr[  r  s       r   test_basic51zTestManyStencils.test_basic51  s    	% 	% 	%IcNN""1a((IcNN""1a((fa':S#J&G2<o1N 	 	P 	P 	P 	P 	Pr   c           	      b    d  fd}t          j        d                              dd          }t          j        d                              dd          }t          j        d                              dd          } ||||d          }                     ||||d	d
i           dS )z(3 args, standard_indexing on middle arg c                 6    | d         |d         z   |d         z   S )Nr   r  r   r  s      r   r7  z-TestManyStencils.test_basic52.<locals>.kernel  s    T7QtW$qw..r   c                    	                     | ||            | ||          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]R}t          d| j        d         dz
            D ]1}| |dz   |dz   f         |d         z   ||dz   |dz   f         z   |||f<   2S|S )Nr!   r   r   r   r1   r   r  r  s
           r   r  z/TestManyStencils.test_basic52.<locals>.__kernel  s    %%a%FFF1aJ717AT*-=-=>>>DQ
Q// ; ; AGAJN33 ; ;C&'aq(8&9AdG&C&'aq(8&9':DcNN; Kr   rS  rx   r   r  r1   Nr@   r5   r  r  r  s   `     @r   test_basic52zTestManyStencils.test_basic52  s    	/ 	/ 	/
	 	 	 	 	 	 IcNN""1a((IbMM!!!Q''IcNN""1a((8Aq!T**##FHaA-@#,F 	$ 	H 	H 	H 	H 	Hr   c                 2   d }t          j        d                              dd          }t          j        d                              dd          }|                     t          t
          t                    }|                     |||ddi|           d	S )
z92 args, standard_indexing on variable that does not existc                 $    | d         |d         z   S r  r   r4   s     r   r7  z-TestManyStencils.test_basic53.<locals>.kernel  r  r   rS  rx   r   r  r@   r	  r  N)r}   r   r   r  rc  r   r  rT   r7  r   r5   rl  s        r   test_basic53zTestManyStencils.test_basic53  s    	% 	% 	%IcNN""1a((IcNN""1a((  " !   	fa5H#4N13 	 	5 	5 	5 	5 	5r   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||ddi	           dS )
z)2 args, standard_indexing, index from varc                 ,    d}| d         |d|f         z   S )Nr1   r   r   r   )r   r5   r  s      r   r7  z-TestManyStencils.test_basic54.<locals>.kernel  s    AT7Qq!tW$$r   c                 b   	                     | |            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]B}t          d| j        d                   D ]$}d}| |dz   |dz   f         |d|f         z   |||f<   %C|S Nr!   r   r   r   r1   r  )
r   r5   r"   r  r  r  r  r  r7  rT   s
           r   r  z/TestManyStencils.test_basic54.<locals>.__kernel  s    %%al%CCC1J717AT*-=-=>>>DQ
Q// C C AGAJ// C CCA%&sQwa'7%81QT7%BDcNNC Kr   rS  rx   r   Nr@   r5   r  r  r  s   `    @r   test_basic54zTestManyStencils.test_basic54  s    	% 	% 	%	 	 	 	 	 	 IcNN""1a((IcNN""1a((8Aq$''##FHa-@#,F 	$ 	H 	H 	H 	H 	Hr   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||ddi	           dS )
z62 args, standard_indexing, index from more complex varc                 6    d}d|z
  }| d         |d|f         z   S )Nr   r1   r   r   r   )r   r5   r  r  s       r   r7  z-TestManyStencils.test_basic55.<locals>.kernel  s'    AAAT7Qq!tW$$r   c                 l   
                     | |            	| |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]G}t          d| j        d                   D ])}d}d|z
  }| |dz   |dz   f         |d|f         z   |||f<   *H|S r  r  )r   r5   r"   r  r  r  r  r  r  r7  rT   s            r   r  z/TestManyStencils.test_basic55.<locals>.__kernel  s    %%al%CCC1J717AT*-=-=>>>DQ
Q// C C AGAJ// C CCAAA%&sQwa'7%81QT7%BDcNNC Kr   rS  rx   r   Nr@   r5   r  r  r  s   `    @r   test_basic55zTestManyStencils.test_basic55  s    	% 	% 	%		 		 		 		 		 		 IcNN""1a((IcNN""1a((8Aq$''##FHa-@#,F 	$ 	H 	H 	H 	H 	Hr   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||ddi	           dS )
z,2 args, standard_indexing, added complexity c                 n    d}d}|dd d f         D ]}||z  }d|z
  dz
  }| d         |d|f         z   |z   S )Nr   r   r1   r   r   )r   r5   r  accr  r  s         r   r7  z-TestManyStencils.test_basic56.<locals>.kernel/  s[    ACq!!!tW  qA	AT7Qq!tW$s**r   c                                         | |            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]c}t          d| j        d                   D ]E}d}d}|dd d f         D ]}	||	z  }d|z
  dz
  }
| |dz   |dz   f         |d|
f         z   |z   |||f<   Fd|S r  r  )r   r5   r"   r  r  r  r  r  r  r  r  r7  rT   s              r   r  z/TestManyStencils.test_basic56.<locals>.__kernel9  s   %%al%CCC1J717AT*-=-=>>>DQ
Q// I I AGAJ// I ICACAAAvY ! !qA	A%&sQwa'7%81QT7%BS%HDcNNI Kr   rS  rx   r   Nr@   r5   r  r  r  s   `    @r   test_basic56zTestManyStencils.test_basic56-  s    	+ 	+ 	+	 	 	 	 	 	 IcNN""1a((IcNN""1a((8Aq$''##FHa-@#,F 	$ 	H 	H 	H 	H 	Hr   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||ddi	           dS )
z12 args, standard_indexing, split index operation c                 4    |d         }| d         |d         z   S )Nr   r   r   r   r  s      r   r7  z-TestManyStencils.test_basic57.<locals>.kernelO  s    !AT7QqT>!r   c                 j   	                     | |            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]F}t          d| j        d                   D ](}|d         }| |dz   |dz   f         |d         z   |||f<   )G|S r  r  
r   r5   r"   r  r  r  r  r	  r7  rT   s
           r   r  z/TestManyStencils.test_basic57.<locals>.__kernelU  s    %%al%CCC1J717AT*-=-=>>>DQ
Q// @ @ AGAJ// @ @C!A%&sQwa'7%81Q4%?DcNN@ Kr   rS  rx   r   Nr@   r5   r  r  r  s   `    @r   test_basic57zTestManyStencils.test_basic57M      	" 	" 	"	 	 	 	 	 	 IcNN""1a((IcNN""1a((8Aq$''##FHa-@#,F 	$ 	H 	H 	H 	H 	Hr   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||ddi	           dS )
z?2 args, standard_indexing, split index with broadcast mutation c                 :    |d         dz   }| d         |d         z   S )Nr   r   r   r   r  s      r   r7  z-TestManyStencils.test_basic58.<locals>.kernelg  s!    !qAT7QqT>!r   c                 p   	                     | |            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]I}t          d| j        d                   D ]+}|d         dz   }| |dz   |dz   f         |d         z   |||f<   ,J|S r  r  r
  s
           r   r  z/TestManyStencils.test_basic58.<locals>.__kernelm  s    %%al%CCC1J717AT*-=-=>>>DQ
Q// @ @ AGAJ// @ @C!qA%&sQwa'7%81Q4%?DcNN@ Kr   rS  rx   r   Nr@   r5   r  r  r  s   `    @r   test_basic58zTestManyStencils.test_basic58e  r  r   c           
          d  fd}t          j        d                              dd          }t          j        d                              dd          }d} ||||d          }                     ||||dd	d
gi           dS )z>3 args, mix of array, relative and standard indexing and constc                 *    | d         |d         z   |z   S Nr   r  r   r  s      r   r7  z-TestManyStencils.test_basic59.<locals>.kernel  s    T7QtW$q((r   c                 b   	                     | |            | ||          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]A}t          d| j        d                   D ]#}| |dz   |dz   f         |d         z   |z   |||f<   $B|S )Nr!   r   r   r   r  r  r  s
           r   r  z/TestManyStencils.test_basic59.<locals>.__kernel  s    %%al%CCC1aJ717AT*-=-=>>>DQ
Q// G G AGAJ// G GC%&sQwa'7%81T7%BQ%FDcNNGKr   rS  rx   r   r0  Nr@   r5   r	  r  r  r  s   `     @r   test_basic59zTestManyStencils.test_basic59}  s    	) 	) 	)
	 	 	 	 	 	 IcNN""1a((IcNN""1a((8Aq!T**##FHaA-@3*,M 	$ 	O 	O 	O 	O 	Or   c           	      $   d }t          j        d                              dd          }t          j        d                              dd          }d}|                     t                    }|                     ||||ddd	gi|
           dS )zP3 args, mix of array, relative and standard indexing,
        tuple pass throughc                 6    | d         |d         z   |d         z   S )Nr   r  r   r   r  s      r   r7  z-TestManyStencils.test_basic60.<locals>.kernel  s    T7QtW$qt++r   rS  rx   r   )r0  )rr  r@   r5   r	  r  Nr  )rT   r7  r   r5   r	  rl  s         r   test_basic60zTestManyStencils.test_basic60  s    	, 	, 	,IcNN""1a((IcNN""1a((   88faA':S#J&G13 	 	5 	5 	5 	5 	5r   c                     d }t          j        d                              dd          }t          j        d                              dd          }|                     |||ddit                     dS )	z"2 args, standard_indexing on firstc                 $    | d         |d         z   S r  r   r4   s     r   r7  z-TestManyStencils.test_basic61.<locals>.kernel  r  r   rS  rx   r   r@   r   r  N)r}   r   r   r  rc  r  s       r   test_basic61zTestManyStencils.test_basic61  s    	% 	% 	%IcNN""1a((IcNN""1a((fa':C&@1: 	 	< 	< 	< 	< 	<r   c           	          d  fd}t          j        d                              dd          }t          j        d                              dd          } |||d          }                     |||ddd	
           dS )z"2 args, standard_indexing and cvalc                 $    | d         |d         z   S r  r   r4   s     r   r7  z-TestManyStencils.test_basic62.<locals>.kernel  r  r   c                 Z                        | |            | |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]>}t          d| j        d                   D ] }| |dz   |dz   f         |d         z   |||f<   !?|S )Nr!   rl  r   r   r   r  r  r  s	          r   r  z/TestManyStencils.test_basic62.<locals>.__kernel  s    %%al%CCC1J717DZ0@0@AAADQ
Q// C C AGAJ// C CC%&sQwa'7%81T7%BDcNNCKr   rS  rx   r   Nr5   rl  )r@   r-   r  r  r  s   `    @r   test_basic62zTestManyStencils.test_basic62  s    	% 	% 	%
	 	 	 	 	 	 IcNN""1a((IcNN""1a((8Aq$''##FHaBE58-: -: 	$ 	; 	; 	; 	; 	;r   c                 2   d }t          j        d                              dd          }t          j        d                              dd          }|                     t          t          t                    }|                     |||ddi|	           d
S )zQ2 args, standard_indexing applied to relative, should fail,
        non-const idxc                 "    | d|d         f         S )Nr   r   r   r4   s     r   r7  z-TestManyStencils.test_basic63.<locals>.kernel  s    Q$Z= r   rS  rx   r   r:  r  r@   r5   r  Nr  r  s        r   test_basic63zTestManyStencils.test_basic63  s    	! 	! 	!IcNN""1a((IbMM!!!Q''  #"  ! " " 	fa5H#4N13 	 	5 	5 	5 	5 	5r   c                     d }t          j        d                              dd          }|                     ||ddit          t
          g           dS )	z!1 arg that uses standard_indexingc                     | d         S r<   r   r   s    r   r7  z-TestManyStencils.test_basic64.<locals>.kernel  r  r   rS  rx   r   r@   r   r  Nr[  rT   r7  r   s      r   test_basic64zTestManyStencils.test_basic64  sn    	 	 	IcNN""1a((fa2Es1K2<o1N 	 	P 	P 	P 	P 	Pr   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )zbasic induced neighborhood testc                 L    d}t          dd          D ]}|| |         z  }|dz  S Nr   r      r&   r   cumulr)   s      r   r7  z-TestManyStencils.test_basic65.<locals>.kernel  7    E3]]  12:r   c                 2                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ].}d}t          dd          D ]}|| ||z            z  }|dz  ||f<   /|S Nr!   r   r      r*  r   r+  r  	r   r"   r  r  _TestManyStencils__anr-  r)   r7  rT   s	          r   r  z/TestManyStencils.test_basic65.<locals>.__kernel      %%al%CCCJ717AT*-=-=>>>Db!'!*-- ) )sA ) )AQtax[(EE#bjTUKr         N@)r*  r   r"   r  Nr  rT   r  r   nhr   r7  s   `    @r   test_basic65zTestManyStencils.test_basic65      	 	 			 		 		 		 		 		 IcNN8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )zbasic const neighborhood testc                 L    d}t          dd          D ]}|| d         z  }|dz  S r)  r&   r,  s      r   r7  z-TestManyStencils.test_basic66.<locals>.kernel  r.  r   c                 2                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ].}d}t          dd          D ]}|| |dz            z  }|dz  ||f<   /|S r0  r  r2  s	          r   r  z/TestManyStencils.test_basic66.<locals>.__kernel	  r4  r   r5  r6  r"   r  Nr  r7  s   `    @r   test_basic66zTestManyStencils.test_basic66  r:  r   c                      d  fd}t          j        d                              dd          }d} |||          }                     ||d|i           d	S )
z"basic 2d induced neighborhood testc                 v    d}t          dd          D ]"}t          dd          D ]}|| ||f         z  }#|dz  S Nr   r    r   2   r&   r   r-  r)   r   s       r   r7  z-TestManyStencils.test_basic67.<locals>.kernel	  Y    E2q\\ % %sA % %AQq!tW$EE%F##r   c           	         
                     | |            	|           }t          j        | j        dt	          |                    }t          d| j        d                   D ]e}t          d| j        d                   D ]G}d}t          dd          D ](}t          dd          D ]}|| ||z   ||z   f         z  })|d	z  |||f<   Hf|S 
Nr!   r   r   r0  r   r   r    rB  rC  r  r   r"   r  r  _TestManyStencils__bnr3  r-  r)   r   r7  rT   s            r   r  z/TestManyStencils.test_basic67.<locals>.__kernel	      %%al%CCCJ717AT*-=-=>>>Db!'!*-- 2 2!!QWQZ00 2 2DE"2q\\ ; ;!&sA ; ;A!Qtax'9%::EE;',rzDt$$2 Kr         i@r0     r   rB  r   r"   r  Nr  r7  s   `    @r   test_basic67zTestManyStencils.test_basic67	      	$ 	$ 	$	 	 	 	 	 	 Ii  ((R00!8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                     d }t          j        d                              dd          }|                     ||ddit          t
          g           dS )	z basic 2d induced 1D neighborhoodc                 P    d}t          dd          D ]}|| d|f         z  }|dz  S )Nr   rB  r   rC  r&   )r   r-  r   s      r   r7  z.TestManyStencils.test_basic67b.<locals>.kernel2	  s=    E3]] ! !1a4 F##r   rK  r0  rL  r"   )rN  r  N)r}   r   r   r  r   r  r%  s      r   test_basic67bzTestManyStencils.test_basic67b0	  sq    	$ 	$ 	$
 Ii  ((R00fa.+1N2=z1J 	 	L 	L 	L 	L 	Lr   c                      d  fd}t          j        d                              dd          }d} |||          }                     ||d|i           d	S )
z0basic 2d one induced, one cost neighborhood testc                 v    d}t          dd          D ]"}t          dd          D ]}|| |df         z  }#|dz  S rA  r&   rD  s       r   r7  z-TestManyStencils.test_basic68.<locals>.kernel>	  rE  r   c           	         
                     | |            	|           }t          j        | j        dt	          |                    }t          d| j        d                   D ]e}t          d| j        d                   D ]G}d}t          dd          D ](}t          dd          D ]}|| ||z   |dz   f         z  })|d	z  |||f<   Hf|S rG  r  rH  s            r   r  z/TestManyStencils.test_basic68.<locals>.__kernelH	  rJ  r   rK  r0  rL  rM  r"   r  Nr  r7  s   `    @r   test_basic68zTestManyStencils.test_basic68<	  s    	$ 	$ 	$	 	 	 	 	 	 Ii  ((R00!8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                      d  fd}t          j        d                              dd          }d} |||          }                     ||d|i           d	S )
z#basic 2d two cost neighborhood testc                 r    d}t          dd          D ] }t          dd          D ]}|| d         z  }!|dz  S )Nr   r    r   rB  r=   rC  r&   rD  s       r   r7  z-TestManyStencils.test_basic69.<locals>.kernel^	  sU    E2q\\ % %sA % %AQtW$EE%F##r   c           	         
                     | |            	|           }t          j        | j        dt	          |                    }t          d| j        d                   D ]e}t          d| j        d                   D ]G}d}t          dd          D ](}t          dd          D ]}|| |dz   |dz   f         z  })|d	z  |||f<   Hf|S rG  r  rH  s            r   r  z/TestManyStencils.test_basic69.<locals>.__kernelg	  rJ  r   rK  r0  rL  rM  r"   r  Nr  r7  s   `    @r   test_basic69zTestManyStencils.test_basic69\	  rP  r   c                      d  fd}t          j        d                              dd          }d} |||          }                     ||d|i           d	S )
zneighborhood adding complexityc                     d}d}t          dd          D ]*}||z   }t          dd          D ]}|| ||f         |z   z  }+|dz  S )Nr   rS  r    r   rB  rC  r&   r   r-  zzr)   r  r   s         r   r7  z-TestManyStencils.test_basic70.<locals>.kernel|	  sk    EB2q\\ ) )FsA ) )AQq!tWq[(EE)F##r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]o}t          d| j        d                   D ]Q}d}d}t          dd          D ]0}||z   }	t          d	d          D ]}
|| ||z   ||
z   f         |	z   z  }1|d
z  |||f<   Rp|S )Nr!   r   r   r0  r   r   rS  r    rB  rC  r  r   r"   r  r  rI  r3  r-  r_  r)   r  r   r7  rT   s              r   r  z/TestManyStencils.test_basic70.<locals>.__kernel	  s   %%al%CCCJ717AT*-=-=>>>Db!'!*-- 2 2!!QWQZ00 2 2DEB"2q\\ ? ?F!&sA ? ?A!Qtax'9%:Q%>>EE?',rzDt$$2 Kr   rK  r0  rL  rM  r"   r  Nr  r7  s   `    @r   test_basic70zTestManyStencils.test_basic70z	  s    	$ 	$ 	$	 	 	 	 	 	 Ii  ((R00!8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )zneighborhood, type changec                 f    d}t          dd          D ]}d}|dk    rd}|| |         |z   z  }|dz  S )Nr   r*  r           rB  r+  r&   )r   r-  r)   r  s       r   r7  z-TestManyStencils.test_basic71.<locals>.kernel	  sO    E3]] " "s77A1!2:r   c                 L   	                     | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ];}d}t          dd          D ]}d}|dk    rd	}|| ||z            |z   z  }|d
z  ||f<   <|S )Nr!   r   r   r1  r*  r   re  rf  rB  r+  r  )
r   r"   r  r  r3  r-  r)   r  r7  rT   s
           r   r  z/TestManyStencils.test_basic71.<locals>.__kernel	  s    %%al%CCCJ717AT*-=-=>>>Db!'!*-- ) )sA - -AA3ww Qtax[1_,EE#bjTUKr   r5  r6  r"   r  Nr  r7  s   `    @r   test_basic71zTestManyStencils.test_basic71	  s    	 	 		 	 	 	 	 	 IcNN8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )z+neighborhood, narrower range than specifiedc                 L    d}t          dd          D ]}|| |         z  }|dz  S )Nr   r:  r+  r&   r,  s      r   r7  z-TestManyStencils.test_basic72.<locals>.kernel	  7    E3^^  12:r   c                 2                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ].}d}t          dd          D ]}|| ||z            z  }|dz  ||f<   /|S )Nr!   r   r   r1  rk  r:  r+  r  r2  s	          r   r  z/TestManyStencils.test_basic72.<locals>.__kernel	      %%al%CCCJ717AT*-=-=>>>Db!'!*-- ) )sB ) )AQtax[(EE#bjTUKr   r5  r6  r"   r  Nr  r7  s   `    @r   test_basic72zTestManyStencils.test_basic72	  r:  r   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )zneighborhood, +ve rangec                 L    d}t          dd          D ]}|| |         z  }|dz  S )Nr   r      r+  r&   r,  s      r   r7  z-TestManyStencils.test_basic73.<locals>.kernel	  s7    E1b\\  12:r   c                 8                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ].}d}t          dd          D ]}|| ||z            z  }|dz  ||f<   /|S )Nr!   r   r   r0  r   rr  r+  r  r2  s	          r   r  z/TestManyStencils.test_basic73.<locals>.__kernel	  s    %%al%CCCJ717AT*-=-=>>>Dab11 ) )q" ) )AQtax[(EE#bjTUKr   r5  ))r   r0  r"   r  Nr  r7  s   `    @r   test_basic73zTestManyStencils.test_basic73	  s    	 	 			 		 		 		 		 		 IcNN8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )zneighborhood, -ve rangec                 L    d}t          dd          D ]}|| |         z  }|dz  S )Nr   rB  r$   r+  r&   r,  s      r   r7  z.TestManyStencils.test_basic73b.<locals>.kernel	  rl  r   c                 2                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ].}d}t          dd          D ]}|| ||z            z  }|dz  ||f<   /|S )Nr!   r   r   r0  rB  r$   r+  r  r2  s	          r   r  z0TestManyStencils.test_basic73b.<locals>.__kernel	  rn  r   r5  ))rB  r    r"   r  Nr  r7  s   `    @r   test_basic73bzTestManyStencils.test_basic73b	  s    	 	 			 		 		 		 		 		 IcNN8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )z!neighborhood, -ve->+ve range spanc                 L    d}t          dd          D ]}|| |         z  }|dz  S )Nr   r    rr  r+  r&   r,  s      r   r7  z-TestManyStencils.test_basic74.<locals>.kernel
  s7    E2r]]  12:r   c                 8                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ].}d}t          dd          D ]}|| ||z            z  }|dz  ||f<   /|S )	Nr!   r   r   r   r0  r    rr  r+  r  r2  s	          r   r  z/TestManyStencils.test_basic74.<locals>.__kernel
  s    %%al%CCCJ717AT*-=-=>>>Dab11 ) )r2 ) )AQtax[(EE#bjTUKr   r5  ))r    r0  r"   r  Nr  r7  s   `    @r   test_basic74zTestManyStencils.test_basic74
  r:  r   c                      d  fd}t          j        d          }d} |||          }                     ||d|i           dS )z!neighborhood, -ve->-ve range spanc                 L    d}t          dd          D ]}|| |         z  }|dz  S )Nr   rB  r   r+  r&   r,  s      r   r7  z-TestManyStencils.test_basic75.<locals>.kernel+
  rl  r   c                 2                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ].}d}t          dd          D ]}|| ||z            z  }|dz  ||f<   /|S )Nr!   r   r   r0  rB  r   r+  r  r2  s	          r   r  z/TestManyStencils.test_basic75.<locals>.__kernel4
  rn  r   r5  ))rB  r0   r"   r  Nr  r7  s   `    @r   test_basic75zTestManyStencils.test_basic75)
  s    	 	 			 		 		 		 		 		 IcNN8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                      d  fd}t          j        d                              dd          }d} |||          }                     ||d|i           d	S )
zneighborhood, mixed range spanc                     d}d}t          dd          D ]*}||z   }t          dd          D ]}|| ||f         |z   z  }+|dz  S )Nr   rS  r:  r   rC  r&   r^  s         r   r7  z-TestManyStencils.test_basic76.<locals>.kernelG
  sk    EB2q\\ ) )Fr1 ) )AQq!tWq[(EE)F##r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]o}t          d| j        d                   D ]Q}d}d}t          dd          D ]0}||z   }	t          dd          D ]}
|| ||z   ||
z   f         |	z   z  }1|d	z  |||f<   Rp|S )
Nr!   r   r   rx   r   rS  r:  r   rC  r  ra  s              r   r  z/TestManyStencils.test_basic76.<locals>.__kernelS
  s   %%al%CCCJ717AT*-=-=>>>Daa00 2 2!!QWQZ00 2 2DEB"2q\\ ? ?F!&r1 ? ?A!Qtax'9%:Q%>>EE?',rzDt$$2 Kr   rK  r0  rL  ))r:  r   )r:  rx   r"   r  Nr  r7  s   `    @r   test_basic76zTestManyStencils.test_basic76E
  s    	$ 	$ 	$	 	 	 	 	 	 Ii  ((R00!8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          }d} ||||          }                     |||d|i           d	S )
z neighborhood, two args c                     d}t          dd          D ]-}t          dd          D ]}|| ||f         |||f         z   z  }.|dz  S Nr   r:  r   r  r&   r   r5   r-  r)   r   s        r   r7  z-TestManyStencils.test_basic77.<locals>.kernelj
  e    E2q\\ / /r1 / /AQq!tWqAw..EE/B<r   c           
                              | ||            
| |          }t          j        | j        dt	          |                    }t          d| j        d                   D ]v}t          d| j        d                   D ]X}d}t          dd          D ]9}t          dd          D ]&}	|| ||z   ||	z   f         |||z   ||	z   f         z   z  }':|dz  |||f<   Yw|S Nr!   r   r   rx   r   r:  r  r  r   r5   r"   r  r  rI  r3  r-  r)   r   r7  rT   s             r   r  z/TestManyStencils.test_basic77.<locals>.__kernels
  s    %%a%FFF1J717AT*-=-=>>>Da,, 3 3!!QWQZ00 3 3DE"2q\\ = =!&r1 = =A!aq$((:&;&'q$((:&;'< =EE= (-s{Dt$$3 Kr   rK  r0  rL  r:  r   r  r"   r  Nr  rT   r  r   r5   r8  r   r7  s   `     @r   test_basic77zTestManyStencils.test_basic77h
      	  	  	 	 	 	 	 	 	 Ii  ((R00Ii  ((R00 8Aq"%%##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          }d} ||||          }                     |||d|i           d	S )
z. neighborhood, two args, -ve range, -ve range c                     d}t          dd          D ]-}t          dd          D ]}|| ||f         |||f         z   z  }.|dz  S )Nr   r0   r   r  r&   r  s        r   r7  z-TestManyStencils.test_basic78.<locals>.kernel
  se    E2r]] / /r2 / /AQq!tWqAw..EE/B<r   c           
                              | ||            
| |          }t          j        | j        dt	          |                    }t          d| j        d                   D ]v}t          d| j        d                   D ]X}d}t          dd          D ]9}t          d	d
          D ]&}	|| ||z   ||	z   f         |||z   ||	z   f         z   z  }':|dz  |||f<   Yw|S )Nr!   r   r   r4  r   r  r  r0   r  r   r  r  r  s             r   r  z/TestManyStencils.test_basic78.<locals>.__kernel
  s    %%a%FFF1J717AT*-=-=>>>Da,, 3 3!!QWQZ00 3 3DE"2r]] = =!&r2 = =A!aq$((:&;&'q$((:&;'< =EE= (-s{Dt$$3 Kr        r@r  rL  )r  r:  )r  r0   r"   r  Nr  r  s   `     @r   test_basic78zTestManyStencils.test_basic78
  s    	  	  	 	 	 	 	 	 	 Ii  ((R00Ii  ((R00"8Aq"%%##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                     d  fd}t          j        d                              dd          }t          j        d                              dd          }d} ||||          }                     |||d|i           d	S )
z. neighborhood, two args, -ve range, +ve range c                     d}t          dd          D ]-}t          dd          D ]}|| ||f         |||f         z   z  }.|dz  S )Nr   r  r0   r1   r0  r  r&   r  s        r   r7  z.TestManyStencils.test_basic78b.<locals>.kernel
  se    E2r]] / /q" / /AQq!tWqAw..EE/B<r   c           
                              | ||            
| |          }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]v}t          d| j        d                   D ]X}d}t          dd          D ]9}t          d	d
          D ]&}	|| ||z   ||	z   f         |||z   ||	z   f         z   z  }':|dz  |||f<   Yw|S )Nr!   r   r   r   	   r  r  r0   r1   r0  r  r  r  s             r   r  z0TestManyStencils.test_basic78b.<locals>.__kernel
  s$   %%a%FFF1J717AT*-=-=>>>Daa00 3 3!!QWQZ00 3 3DE"2r]] = =!&q" = =A!aq$((:&;&'q$((:&;'< =EE= (-s{Dt$$3 Kr   r  r  rL  )r  )r1   r  r"   r  Nr  r  s   `     @r   test_basic78bzTestManyStencils.test_basic78b
  r  r   c                 4   d }t          j        d                              dd          }t          j        d                              ddd          }|                     t          t          t                    }|                     |||ddi|	           d
S )z% neighborhood, two incompatible args c                     d}t          dd          D ]-}t          dd          D ]}|| ||f         |||f         z   z  }.|dz  S r  r&   r  s        r   r7  z-TestManyStencils.test_basic79.<locals>.kernel
  r  r   rK  r0  rL  r1   r  r"   r  r  N)r}   r   r   r  r   r  r  s        r   test_basic79zTestManyStencils.test_basic79
  s    	  	  	  Ii  ((R00Ii  ((R33   !   	fa^5H5J13 	 	5 	5 	5 	5 	5r   c                      d  fd}t          j        d                              dd          }d}d} ||||          }                     |||d|i	           d
S )z neighborhood, type change c                 |    d}t          dd          D ]%}t          dd          D ]}|| ||f         |z   z  }&|dz  S r  r&   r  s        r   r7  z-TestManyStencils.test_basic80.<locals>.kernel
  s\    E2q\\ ) )r1 ) )AQq!tWq[(EE)B<r   c           	                              | ||            
| |          }t          j        | j        dt	          |                    }t          d| j        d                   D ]h}t          d| j        d                   D ]J}d}t          dd          D ]+}t          dd          D ]}	|| ||z   ||	z   f         |z   z  },|dz  |||f<   Ki|S r  r  r  s             r   r  z/TestManyStencils.test_basic80.<locals>.__kernel
  s   %%a%FFF1J717AT*-=-=>>>Da,, 3 3!!QWQZ00 3 3DE"2q\\ ? ?!&r1 ? ?A!Qtax'9%:Q%>>EE?',s{Dt$$3 Kr   rK  r0  rL  y              (@r  r"   r  Nr  r  s   `     @r   test_basic80zTestManyStencils.test_basic80
  s    	  	  	 	 	 	 	 	 	 Ii  ((R008Aq"%%##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                    d }t          j        d                              dd          }|d                                         }|                     t
          t          t
                    }|                     |||ddi|	           d
S )z1 neighborhood, dimensionally incompatible arrays c                     d}t          dd          D ]+}t          dd          D ]}|| ||f         ||         z   z  },|dz  S r  r&   r  s        r   r7  z-TestManyStencils.test_basic81.<locals>.kernel
  s`    E2q\\ , ,r1 , ,AQq!tWqt^+EE,B<r   rK  r0  rL  r   r  r"   r  r  N)r}   r   r   copyr  r   rE  r  r  s        r   test_basic81zTestManyStencils.test_basic81
  s    	  	  	  Ii  ((R00aDIIKK  ! !   	fa'57I&J13 	 	5 	5 	5 	5 	5r   c           	           d  fd}t          j        d                              dd          }|                                }d} ||||          }                     ||||dd	           d
S )z% neighborhood, with standard_indexingc                     d}t          dd          D ]+}t          dd          D ]}|| ||f         |d         z   z  },|dz  S Nr   r:  r   r   rx   r  r&   r  s        r   r7  z-TestManyStencils.test_basic82.<locals>.kernel  a    E2q\\ / /r1 / /AQq!tWqw..EE/B<r   c           	                              | ||            
| |          }t          j        | j        dt	          |                    }t          d| j        d                   D ]n}t          d| j        d                   D ]P}d}t          dd          D ]1}t          dd          D ]}	|| ||z   ||	z   f         |d         z   z  }2|dz  |||f<   Qo|S )	Nr!   r   r   rx   r   r:  r  r  r  r  s             r   r  z/TestManyStencils.test_basic82.<locals>.__kernel  s   %%a%FFF1J717AT*-=-=>>>Da,, 3 3!!QWQZ00 3 3DE"2q\\ E E!&r1 E EA!Qtax'9%:QtW%DDEEE',s{Dt$$3 Kr   rK  r0  rL  r  r5   )r"   r@   r  Nr}   r   r   r  r  r  s   `     @r   test_basic82zTestManyStencils.test_basic82  s    	  	  	 	 	 	 	 	 	 Ii  ((R00FFHH8Aq"%%##FHa=?BE-G -G 	$ 	H 	H 	H 	H 	Hr   c           
      f    d t          j        d                              dd          }|                                } fd}t          j        d                              dd          }|                                }d} ||||          }                     ||||ddd	
           dS )z. neighborhood, with standard_indexing and cvalc                     d}t          dd          D ]+}t          dd          D ]}|| ||f         |d         z   z  },|dz  S r  r&   r  s        r   r7  z-TestManyStencils.test_basic83.<locals>.kernel-  r  r   rK  r0  rL  c           	                              | ||            
| |          }t          j        | j        dt	          |                    }t          d| j        d                   D ]n}t          d| j        d                   D ]P}d}t          dd          D ]1}t          dd          D ]}	|| ||z   ||	z   f         |d         z   z  }2|d	z  |||f<   Qo|S )
Nr!         ?r   rx   r   r   r:  r  r  r  r  s             r   r  z/TestManyStencils.test_basic83.<locals>.__kernel9  s   %%a%FFF1J717CtJ/?/?@@@Da,, 3 3!!QWQZ00 3 3DE"2q\\ E E!&r1 E EA!Qtax'9%:QtW%DDEEE',s{Dt$$3 Kr   r  r5   r  r"   r@   r-   r  Nr  )rT   r   r5   r  r8  r   r7  s   `     @r   test_basic83zTestManyStencils.test_basic83+  s    	  	  	  Ii  ((R00FFHH
	 	 	 	 	 	 Ii  ((R00FFHH8Aq"%%##FHa=?BE58-; -; 	$ 	< 	< 	< 	< 	<r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z kernel calls njit c                 >    | d         t          | d                   z   S Nr=   r   )rG   r   s    r   r7  z-TestManyStencils.test_basic84.<locals>.kernelQ      T7[41111r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]^}t          d| j        d                   D ]@}| |dz   |dz   f         t                              | |dz   |dz   f                   z   |||f<   A_|S r  )r  r}   r  r  rf  r'   rG   py_funcr  s         r   r  z/TestManyStencils.test_basic84.<locals>.__kernelV      %%al%CCCJ717AT*-=-=>>>DQ
Q// P P AGAJ// P PC&'aq(8&9&1&9&9!C!GS1W<L:M&N&N'ODcNNP Kr   rK  r0  rL  Nr  r  s   `   @r   test_basic84zTestManyStencils.test_basic84O  s    	2 	2 	2
	 	 	 	 	 	 Ii  ((R008At$$##FHa88888r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z! kernel calls njit(parallel=True)c                 >    | d         t          | d                   z   S r  )rK   r   s    r   r7  z-TestManyStencils.test_basic85.<locals>.kernelf  r  r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]^}t          d| j        d                   D ]@}| |dz   |dz   f         t                              | |dz   |dz   f                   z   |||f<   A_|S r  )r  r}   r  r  rf  r'   rK   r  r  s         r   r  z/TestManyStencils.test_basic85.<locals>.__kernell  r  r   rK  r0  rL  Nr  r  s   `   @r   test_basic85zTestManyStencils.test_basic85d  s    	2 	2 	2	 	 	 	 	 	 Ii  ((R008At$$##FHa88888r   c                     d }t          j        d                              dd          }|                     ||ddit          t
          g           dS )z bad kwarg c                     | d         S r<   r   r   s    r   r7  z-TestManyStencils.test_basic86.<locals>.kernel}  r  r   rK  r0  rL  badr  N)r}   r   r   r  r  r   r%  s      r   test_basic86zTestManyStencils.test_basic86{  sp    	 	 	 Ii  ((R00fa%2<k1J 	 	L 	L 	L 	L 	Lr   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z reserved arg name in use c                     | d         S r<   r   )__sentinel__s    r   r7  z-TestManyStencils.test_basic87.<locals>.kernel  s    %%r   c                 @                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]5}t          d| j        d                   D ]}| |dz   |dz   f         |||f<   6|S r  r  )r  r"   r  r  r  r  r7  rT   s         r   r  z/TestManyStencils.test_basic87.<locals>.__kernel  s    %%l%NNN--J7<-qZ8H8HIIIDQ 21 566 D D L$6q$9:: D DC%1#'372B%CDcNNDKr   rK  r0  rL  Nr  r  s   `   @r   test_basic87zTestManyStencils.test_basic87  s    	& 	& 	&
	 	 	 	 	 	 Ii  ((R008At$$##FHa88888r   c                     d }t          j        d                              dd          }|                     t          t          t                    }|                     ||di |           dS )	z use of reserved word c                     || d         z  S r  r   )r   r   s     r   r7  z-TestManyStencils.test_basic88.<locals>.kernel  s    4= r   rS  rx   r   r  r+   r  Nr  r  s       r   test_basic88zTestManyStencils.test_basic88  sx    	! 	! 	!IcNN""1a((  #"  ! " " 	fabRPPPPPr   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z basic multiple returnc                 J    | d         dk    rdS | d         dk     r| d         S dS )Nr   r0  rl  r5  rb  r=   r   r   r   s    r   r7  z-TestManyStencils.test_basic89.<locals>.kernel  s/    w||s41wrr   c                                         | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]m}t          d| j        d                   D ]O}| |dz   |dz   f         dk    rd|||f<   | |dz   |dz   f         dk     r| |dz   |dz   f         |||f<   Hd	|||f<   Pn|S )
Nr!   r   r   r   rx   r0  rl  rb  r   r  r  s         r   r  z/TestManyStencils.test_basic89.<locals>.__kernel  s   %%al%CCCJ717AT*-=-=>>>DQ
Q// - - AGAJ// - -Cq#')*R//)-S#X37C!G+,q00)*37C!G+;)<S#X),S#X- Kr   rK  r0  rL  Nr  r  s   `   @r   test_basic89zTestManyStencils.test_basic89  s    	 	 		 	 	 	 	 	 Ii  ((R008At$$##FHa88888r   c           
           d  fd}t          j        d                              dd          }|                                }d} ||||          }                     ||||ddd	
           dS )z@ neighborhood, with standard_indexing and cval, multiple returnsc                     d}t          dd          D ]+}t          dd          D ]}|| ||f         |d         z   z  },|dz  }|dk    r|dz   S |S )Nr   r:  r   r  r  rK  r+   r&   )r   r5   r-  r)   r   ress         r   r7  z-TestManyStencils.test_basic90.<locals>.kernel  sx    E2q\\ / /r1 / /AQq!tWqw..EE/2,CU{{Sy 
r   c           	                              | ||            | |          }t          j        | j        dt	          |                    }t          d| j        d                   D ]}t          d| j        d                   D ]c}d}t          dd          D ]1}t          dd          D ]}	|| ||z   ||	z   f         |d         z   z  }2|d	z  }
|
d
k    r|
dz   |||f<   \|
|||f<   d|S )Nr!   r  r   rx   r   r   r:  r  r  rK  r+   r  )r   r5   r"   r  r  rI  r3  r-  r)   r   r  r7  rT   s              r   r  z/TestManyStencils.test_basic90.<locals>.__kernel  s3   %%a%FFF1J717CtJ/?/?@@@Da,, 
/ 
/!!QWQZ00 	/ 	/DE"2q\\ E E!&r1 E EA!Qtax'9%:QtW%DDEEE#+CU{{+.9T4Z((+.T4Z((	/ Kr   rK  r0  rL  r  r5   r  r  r  Nr  r  s   `     @r   test_basic90zTestManyStencils.test_basic90  s    		 		 			 	 	 	 	 	" Ii  ((R00FFHH8Aq"%%##FHa=?BE58-; -; 	$ 	< 	< 	< 	< 	<r   c                      d  fd}t          j        d                              dd          } ||d          }                     ||           dS )z? Issue #3454, const(int) == const(int) evaluating incorrectly. c                 ,    d}ddk    rd}| d         |z   S )Nr   r1   r=   r   r4   s     r   r7  z-TestManyStencils.test_basic91.<locals>.kernel  s#    AQT7Q;r   c                 Z                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d                   D ]B}t          d| j        d                   D ]$}d}ddk    rd}| |dz   |dz   f         |z   |||f<   %C|S r  r  )	r   r"   r  r  r  r  r5   r7  rT   s	          r   r  z/TestManyStencils.test_basic91.<locals>.__kernel  s    %%al%CCCJ717AT*-=-=>>>DQ
++ = = AGAJ// = =CAAvv%&sQwa'7%81%<DcNN	=
 Kr   rK  r0  rL  Nr  r  s   `   @r   test_basic91zTestManyStencils.test_basic91  s    	 	 	
	 
	 
	 
	 
	 
	 Ii  ((R008At$$##FHa88888r   c                     d  fd}t          j        t          j        d          dz                                dd                              t           j                  } ||d          }                     ||           dS )7 Issue #3497, bool return type evaluating incorrectly. c                     | d         | d         z  | d         z  | d         z  | d         z  | d         z  | d         z  | d         z  | d	         z  S 
Nr  r   r  r   r=   r   r  r   r  r   r   s    r   r7  z-TestManyStencils.test_basic92.<locals>.kernel  h    fI%(1U83eH w')*41eH w')*41 2r   c                 \                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]}t          d| j        d         dz
            D ]}| |dz   |dz   f         | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  |||f<   |S r  r  r  s         r   r  z/TestManyStencils.test_basic92.<locals>.__kernel     %%al%CCCJ717AT*-=-=>>>DQ
Q// 
; 
; AGAJN33 	; 	;C&'b#((:&;&'b#'(9&:';&'b#'(9&:'; '(ar(9&:'; '(aq(8&9	':
 '(aq(8&9': '(ar(9&:'; '(aq(8&9': '(aq(8&9':DcNN	; Kr   rL  r1   r   r   Nr}   r  r   r   ro  r   r  rT   r  r   r   r7  s   `   @r   test_basic92zTestManyStencils.test_basic92  s    	2 	2 	2	 	 	 	 	 	" HRYr]]Q&''//155<<RXFF8At$$##FHa88888r   c                     d  fd}t          j        t          j        d          dz                                dd                              t           j                  } ||d          }                     ||dd	i
           dS )r  c                     | d         | d         z  | d         z  | d         z  | d         z  | d         z  | d         z  | d         z  | d	         z  S r  r   r   s    r   r7  z-TestManyStencils.test_basic93.<locals>.kernel%  r  r   c                 \                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]}t          d| j        d         dz
            D ]}| |dz   |dz   f         | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  | |dz   |dz   f         z  |||f<   |S )Nr!   r   r   r   r   r  r  s         r   r  z/TestManyStencils.test_basic93.<locals>.__kernel,  r  r   rL  r1   r   r   Nr-   Tr  r  r  s   `   @r   test_basic93zTestManyStencils.test_basic93#  s    	2 	2 	2	 	 	 	 	 	" HRYr]]Q&''//155<<RXFF8At$$##FHa&$#PPPPPr   c                      d  fd}t          j        dt           j                                      dd          }d} |||          }                     ||d|i	           d
S )z" Issue #3528. Support for slices. c                 B    t          j        | ddddf                   S Nr   r1   r}   medianr   s    r   r7  z-TestManyStencils.test_basic94.<locals>.kernelC  "    9Qr!tRTz]+++r   c           	                              | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ]T}t          d| j        d         dz
            D ]3}t          j        | |dz   |dz   |dz   |dz   f                   |||f<   4U|S Nr!   r   r   r   r   r1   r  r}   r  r  rf  r'   r  )r   r"   r  r  rI  r3  r7  rT   s         r   r  z/TestManyStencils.test_basic94.<locals>.__kernelH  s    %%al%CCCJ717AT*-=-=>>>Daa00 H H!!QWQZ!^44 H HD')y4"9TAX3E37"9TAX3E4F 2G (H (HDt$$H Kr   rL  r   r   r   r  r  r"   r  N)r}   r   uint32r   r  r7  s   `    @r   test_basic94zTestManyStencils.test_basic94A  s    	, 	, 	,
	 	 	 	 	 	 Ib	***221a88 8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   znot yet supportedc                     d }dS )z  Slice, calculate neighborhood. c                 B    t          j        | ddddf                   S )Nr   r1   r:  r   r  r   s    r   r7  z-TestManyStencils.test_basic95.<locals>.kernel[  r  r   Nr   r  s     r   test_basic95zTestManyStencils.test_basic95X  s    	, 	, 	, 	, 	,r   c                      d  fd}t          j        dt           j                  }d} |||          }                     ||d|i           dS )	z 1D slice. c                 :    t          j        | dd                   S r  r  r   s    r   r7  z-TestManyStencils.test_basic96.<locals>.kernela  s    9Qr!tW%%%r   c                 ,                        | |            |           }t          j        | j        dt	          |                    }t          d| j        d         dz
            D ](}t          j        | |dz   |dz                      ||f<   )|S r  r  )r   r"   r  r  r3  r7  rT   s        r   r  z/TestManyStencils.test_basic96.<locals>.__kernelf  s    %%al%CCCJ717AT*-=-=>>>Daa00 ? ? i$)D1H*<(=>>TUKr   rL  r   )r  r"   r  N)r}   r   r  r  r7  s   `    @r   test_basic96zTestManyStencils.test_basic96_  s    	& 	& 	&
	 	 	 	 	 	 Ib	***8Ar??##FHa-;R,@ 	$ 	B 	B 	B 	B 	Br   c                     d }dS )z 2D slice and index. c                 >    t          j        | dddf                   S )Nr   r1   rx   r  r   s    r   r7  z-TestManyStencils.test_basic97.<locals>.kernelw  s    9Qr!tQwZ(((r   Nr   r  s     r   test_basic97zTestManyStencils.test_basic97t  s    	) 	) 	) 	) 	)r   c           	      J    t           j        t           j        t           j         t          d          t          d           fD ]]d  fd}t          j        d                              d          }d} |||          }                     |||d           ^d	S )
rO  rP  c                     | d         S r<   r   r   s    r   r7  z-TestManyStencils.test_basic98.<locals>.kernel  s    wr   c                 L                        | |            |           }t          j        | j        t	          |                    }t          d| j        d         dz
            D ]8}t          d| j        d         dz
            D ]}| |dz   |dz   f         |||f<   9|S )Nr!   r   r   r   r  )	r   r"   r  r  rI  r3  r-   r7  rT   s	         r   r  z/TestManyStencils.test_basic98.<locals>.__kernel  s    ))!,)GGG#VAYY
wqwD4D4DEEE!!QWQZ!^44 A AD %aa 8 8 A A+,TAXtax-?+@T4Z((Ar   g      @)r1   rx   r  )r"   r-   r  N)r}   rT  rP  rU  r   r   r  )rT   r  r   r8  r   r-   r7  s   `    @@r   test_basic98zTestManyStencils.test_basic98{  s     VRVbfWeEllU5\\MJ 	? 	?D  
       	"%%f--A$Bx2H''!AC8<1> 1> ( ? ? ? ?'	? 	?r   )tr   r   r   rS   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r*  r1  r7  r<  r@  rD  rO  rS  rX  r\  rc  ri  rq  rv  rz  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&  r9  r>  rO  rS  rW  r[  rb  rh  ro  rt  rx  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   s   @r   rY  rY  }  s       @ @ @ @ @X, X, X,td, d, d,L  	L 	L 	L9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9*9 9 9*9 9 9*9 9 9*9 9 9*9 9 9.9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 9,9 9 909 9 9.L L LP P P9 9 929 9 989 9 9,M M M9 9 9*9 9 9, X]566  769 9 9*M M M9 9 9(9 9 92N N N(N N N.? ? ?0
5 
5 
5< < <6< < <*Q Q QQ Q Q< < <0P P PP P PP P P? ? ?69 9 94H H H. X];<<& & =<&P P PH H H05 5 5H H H0H H H4H H H@H H H0H H H0O O O05 5 5< < <; ; ;.5 5 5P P PB B B8B B B6B B B<	L 	L 	LB B B@B B B< B  B  BDB B BBB B B6B B B6B B B6B B B6B B B8!B !B !BFB B B@B B B@B B B@5 5 5$B B B>5 5 5$H H H@"< "< "<H9 9 9*9 9 9.L L L9 9 9(	Q 	Q 	Q9 9 9<'< '< '<R9 9 949 9 9>Q Q Q<B B B. X]&'', , (',B B B* X]&'') ) (')? ? ? ? ? ? ?r   rY  __main__)(numpyr}   
contextlibr   rj   r   r   
numba.corer   r   numba.core.compilerr   r	   numba.core.cpur
   numba.tests.supportr   r   numba.core.errorsr   r   r   r  rW  r   r*   r2   r6   r:   r?   rB   rD   rG   rK   TestCaserM   r   rY  r   mainr   r   r   <module>r     s       % % % % % %          & & & & & & & & 4 4 4 4 4 4 4 4 * * * * * * @ @ @ @ @ @ @ @ I I I I I I I I I I  ,  	< < 	< 	k"""  #" 	c   	< < 	<
 	9 9 	9
 	+ + 	+ 	6"""& & #"& 	6"""9 9 #"9
     	T4  4G 4G 4G 4G 4Gh' 4G 4G 4Gnt> t> t> t> t>/ t> t> t>n U(? U(? U(? U(? U(? U(? U(? U(?pP zHMOOOOO r   