+
    :i                     0   ^ RI t ^ RIt^ RIt^ RIHt ^ RIt^ RIt^ RIt	^ RI
HtHtHtHtHt ^ RIHtHt ^ RIHt ^ RI
HtHt ^ RIHtHtHtHtHtHtHtHtHt ^ RI H!t! ^ R	I"H#t# ^ R
I$H%t% R t& ! R R]'4      t(R t) ! R R]'4      t*R t+R t,R t-R t.R t/R# )    N)add)typesirrewritesconfigir_utils)infer_globalAbstractTemplate)	signature)utilstyping)	get_call_tablemk_unique_varcompile_to_numba_irreplace_arg_nodesguardfind_callnamerequire
find_constGuardException)NumbaValueError)OPERATORS_TO_BUILTINS)numpy_supportc                 $    V^ 8  d	   W,
          # V # r    )dim_sizeindex_consts   &&Z/var/www/html/photoedit/myenv/lib/python3.14/site-packages/numba/stencils/stencilparfor.py_compute_last_indr       s    Q%%    c                   V   a  ] tR t^!t o R tR tR tR tR tR t	R t
R tR	 tR
tV tR# )StencilPassc                Z    Wn         W n        W0n        W@n        WPn        W`n        Wpn        R # N)func_irtypemap	calltypesarray_analysis	typingctx	targetctxflags)selfr&   r'   r(   r)   r*   r+   r,   s   &&&&&&&&r   __init__StencilPass.__init__"   s&    ",""
r!   c                6  a  ^ RI Hp \        S P                  P                  4      w  r#. p/ pVP                  4        F6  w  rgV F+  p\        W4      '       g   K  VP                  V4       WV&   K-  	  K8  	  V'       g   R# S P                  P                  P                  4        EFj  w  r\        \        \        V
P                  4      4      4       EF8  w  r\        V\        P                  4      '       EdQ   \        VP                  \        P                  4      '       Ed&   VP                  P                   R8X  Ed
   VP                  P"                  P$                  V9   Ed   \'        VP                  P(                  4      p\+        \-        VP                  P.                  4      4       Uu/ uF   qVP                  P.                  V,          bK"  	  ppVP                  P.                  p\0        ;QJ d    . V 3R lV 4       F  NK  	  5M! V 3R lV 4       4      pV F.  p\        V\2        P4                  4      '       g   K%  \7        R4      h	  VP9                  R4      pW\P                  P"                  P$                  ,          p\;        VS P<                  VV
P>                  V
P@                  VS PB                  S PD                  4      w  pppVPF                  P9                  RR4      pS PI                  WVVVVPJ                  VVV4	      pV
P                  RX V,           V
P                  V^,           R ,           V
n        EKw  \        V\        P                  4      '       g   EK  \        VP                  \        P                  4      '       g   EK  VP                  P                   R8X  g   EK  \M        \N        S P                  VP                  4      R8X  g   EK  \        PP                  ! ^ VP@                  4      Vn        EK;  	  EKm  	  R# u upi )	zOFinds all calls to StencilFuncs in the IR and converts them to parfor.
        )StencilFuncNcallc              3   ^   <"   T F"  pSP                   VP                  ,          x  K$  	  R # 5ir%   )r'   name).0ir-   s   & r   	<genexpr>"StencilPass.run.<locals>.<genexpr>L   s!     'NgQVV(<(<gs   *-zITuple parameters not supported for stencil kernels in parallel=True mode.outindex_offsets)stencilnumba))numba.stencils.stencilr1   r   r&   blocksitems
isinstanceappendreversedlist	enumeratebodyr   AssignvalueExpropfuncr4   dictkwsrangelenargstupler   	BaseTupler   getget_stencil_irr*   scopelocr'   r(   options_mk_stencil_parfortargetr   r   Const)r-   r1   
call_table_stencil_callsstencil_dictcall_varname	call_listone_calllabelblockr6   stmtrL   
input_dictin_argsarg_typemaparg_typeout_arrsf
stencil_irrtarg_to_arr_dictr:   	gen_nodess   f                        r   runStencilPass.run,   s    	7 't||':':;
'1'7'7'9#L%h44!((619.	 & (:  !LL//557LE#D5::)>$?@tRYY//&tzz277;; JJMMV3 JJOO00MAtzz~~.C 5:#djjoo:N4O"Q4O =>TZZ__Q%7"74O  "Q"jjooG"'%'Ng'N%%'Ng'N"NK$/%h@@"1 3: #; ; %0 "ggenG &jjoo&:&:;B6DR NNK!KKJ LL$..7:3JO %'JJNN?D$IM $ 7 7&t{{B+!-I "'BQ)!;ejj1>N!NEJ ryy11&tzz277;; JJMMV3!-tzzJ';< "$!TXX!6DJQ A 8"Qs   /&Pc           	        VP                  4        EFD  w  rEVP                  pVP                  p. pVP                   EF  p	\	        V	\
        P                  4      '       d   VP                  4       p
\	        V
\
        P                  4      '       dF   \	        V
P                  \
        P                  4      '       d   V
P                  P                  R8X  g   Q hVP                  \
        P                  ! V
P                  P                  W'4      4       VP                  \
        P                  ! W74      4       K  VP                  V	4       EK  	  Wn        EKG  	  R# )z
Find return statements in the IR and replace them with a SetItem
call of the value "returned" by the kernel into the result array.
Returns the block labels that contained return statements.
castN)r?   rT   rU   rE   r@   r   ReturnpoprF   rG   rH   rI   rA   Jump)r-   r>   exit_value_varparfor_body_exit_labelra   rb   rT   rU   new_bodyrc   	prev_stmts   &&&&       r   replace_return_with_setitem'StencilPass.replace_return_with_setitemj   s     #LLNLEKKE))CH

dBII.. (I&y"))<<&y@@%OO..&8: 9 OOBIIioo.C.C^$YZOOBGG,B$HIOOD) # "J! +r!   c
                :&  a aaSaT . p
VP                   p\        P                  ^8  d'   \        RWSVWxV4       \        P
                  ! V4       V^ ,          pS P                  VP                  ,          p\        P                  ! VS P                  4      w  r\        P                  ! V4      p\        P                  ! VVVS P                  S P                  4       \        P                  ^8  d"   \        R4       \        P
                  ! V4       \        P                  ! VS P                  P                  VS P                  4       \        P                  ^8  d"   \        R4       \        P
                  ! V4       S P                  VP                  ,          P                  oSVP                   pVP"                  p. p\%        SS4       F\  p\&        P(                  ! V\+        R4      V4      p\,        P.                  S P                  VP                  &   VP1                  V4       K^  	  S P3                  VVW%VV	4      w  pp\        P                  ^8  d:   \        R4       \        RV4       \        RV4       \        P
                  ! V4       . pS P4                  P7                  V4      pVP9                  V4      pSS\;        V4      8X  g   Q h. p. p\%        SS4       F  pS P=                  VV,          VV,          V
VV4      pS P?                  VV,          V
VV4      pVP1                  V4       VP1                  V4       VP1                  \@        PB                  PD                  PG                  VV,          VV^4      4       K  	  \I        VPK                  4       4      ^,           p\&        PL                  ! VV4      VV&   \&        P(                  ! V\+        R4      V4      p VPN                  S P                  V P                  &   . p!SS^8X  d   V^ ,          p"M\&        P(                  ! V\+        R	4      V4      p"\,        PP                  PS                  \,        P.                  SS4      S P                  V"P                  &   \&        PT                  PW                  VV4      p#\&        PX                  ! V#V"V4      p$V!P1                  V$4       \        P                  ^8  d"   \        R
4       \        P
                  ! V4       \&        PL                  ! VV4      p%SEf   S P                  VP                  ,          p\        P*                  ! R4      p&\&        P(                  ! VV&V4      p'\&        PT                  P[                  VRV4      p(\,        PP                  PS                  \,        P.                  VP                  4      S P                  V&&   V%P\                  P_                  \&        PX                  ! V(V'V4      .4       \        P*                  ! R4      p)\&        P(                  ! VV)V4      oTRVP`                  9   d|   VP`                  R,          p*\b        Pd                  Pe                  V*4      p+S Pf                  Pi                  V+VPN                  4      '       g   \k        R4      hVPO                  V*4      p,MVPO                  ^ 4      p,\&        Pl                  ! V,V4      p-VPN                  S P                  V)&   V%P\                  P_                  \&        PX                  ! V-STV4      .4       \        P*                  ! R4      p.\&        P(                  ! VV.V4      o\@        Pn                  P,                  Pp                  Ps                  VPN                  VP                  VPt                  4      S P                  SP                  &   \&        P(                  ! V\+        R4      V4      p/\,        Pv                  Py                  \z        4      S P                  V/P                  &   \&        P|                  ! R\z        V4      p0\&        PX                  ! V0V/V4      p1V%P\                  P1                  V14       \~        P                  ! VPN                  4      P                  P                  p2V2R8X  d   Rp2\&        PT                  P[                  V/V2V4      p3\&        P(                  ! V\+        R4      V4      p4\,        P                  P                  VPN                  4      S P                  V4P                  &   \&        PX                  ! V3V4V4      p5V%P\                  P1                  V54       \        P                  ! R\z        P                  SV'V4.S Pf                  S P                  S P                  4      p6\&        P(                  ! V\+        R4      V4      p7\&        PX                  ! \&        Pl                  ! RV4      V7V4      p8V6P1                  V84       \,        P                  S P                  V7P                  &   \&        P(                  ! V\+        R4      V4      p9\&        PX                  ! \&        Pl                  ! ^ V4      V9V4      p:V6P1                  V:4       \,        P.                  S P                  V9P                  &   \&        P(                  ! V\+        R4      V4      p;S Pf                  P                  \        4      p<V<S P                  V;P                  &   \&        P|                  ! R\        V4      p=\&        PX                  ! V=V;V4      p>V6P1                  V>4       S Pf                  P                  V<\,        P                  3^,          / 4      p?\&        PT                  P                  V;V7V73R)VR7      p@V?S P                  V@&   \&        P(                  ! V\+        R4      V4      pA\,        P                  S P                  VAP                  &   \&        PX                  ! V@VAV4      p>V6P1                  V>4       VSVV VT3R lpB\%        VP                  4       FT  pCXA.VP                  ,          pDVA.VP                  ,          pEXB! V<VCVVV;V6VVDV9R4
       VB! V<VCVVV;V6VVEVVC,          R 4
       KV  	  VP                  SV4       V%P\                  P_                  V64       EMgRVP`                  9   EdV   VP`                  R,          p*\b        Pd                  Pe                  V*4      p+S Pf                  Pi                  V+VPN                  4      '       g   RpF\k        VF4      h\&        P(                  ! V\+        R!4      V4      pAS Pf                  P                  \        4      p<V<S P                  VAP                  &   \&        P|                  ! R\        V4      p=\&        PX                  ! V=VAV4      pGV%P\                  P1                  VG4       S Pf                  P                  V<\,        P                  3^,          / 4      p?\&        PT                  P                  VAR)R)VR7      pHV?S P                  VH&   \&        P(                  ! V\+        R"4      V4      pI\,        P                  S P                  VIP                  &   \&        PX                  ! VHVIV4      p>V%P\                  P1                  V>4       \&        Pl                  ! VPO                  V*4      V4      pJ\&        P(                  ! V\+        R#4      V4      pKVPN                  S P                  VKP                  &   \&        PX                  ! VJVKV4      pLV%P\                  P1                  VL4       \&        P                  ! S\        RR4      VIVKV4      pMV%P\                  P1                  VM4       \        \,        P                  S P                  SP                  ,          S P                  VIP                  ,          S P                  SP                  ,          PN                  4      p?V?S P                  VM&   S P                  VV V4       \        P                  ^8  d"   \        R$4       \        P
                  ! V4       \&        P                  ! SV"V V4      pN\        \,        P                  S P                  SP                  ,          S P                  V"P                  ,          S P                  SP                  ,          PN                  4      S P                  VN&   VV,          P\                  P_                  V!4       VV,          P\                  P1                  VN4       \&        P                  ! R%R*4      pO\&        P(                  ! V\+        R#4      VO4      pP\&        PX                  ! \&        Pl                  ! ^ VOR&7      VPVO4      pLVV,          P\                  P1                  VL4       VV,          P\                  P1                  \&        P                  ! VPVO4      4       \        P                  ! V4      pV\I        VPK                  4       4      ,          P\                  P                  4        \        P                  ^8  d"   \        R'4       \        P
                  ! V4       R(VV.3pQ\@        PB                  PD                  P                  VV%VVV"VVQS P                  4      pRV
P1                  VR4       V
P1                  \&        PX                  ! SVV4      4       V
# )+z=Converts a set of stencil kernel blocks to a parfor.
        rW   z#stencil_blocks after copy_propagatez'stencil_blocks after removing dead codez$parfor_index_varz-stencil_blocks after replace stencil accesseszstart_lengths:zend_lengths:z$parfor_exit_valuez$parfor_index_tuple_varz.stencil_blocks after creating parfor index varNin_arr_shapeshapezero_valcvalz-cval type does not match stencil return type.stencil_outputz	$np_g_varnpboolbool_z$np_attr_attremptyz	$none_varz$zero_index_varz$slice_func_varslicerJ   rO   rL   rU   $slicec
                 N  < SP                   P                  V \        P                  3^,          / 4      p
Wa,          p\	        V\
        \        P                  34      '       g   Q h\        P                  ! V\        R4      V4      p\        P                  SP                  VP                  &   \	        V\
        4      '       d-   \        P                  ! \        P                  ! W4      W4      pM\        P                  ! WV4      pVP                  V4       \        P                  P                  TV	'       d   W3MW3RVR7      pV
SP                   V&   \        P                  ! V\        R4      V4      p\        P"                  SP                  VP                  &   \        P                  ! WV4      pVP                  V4       WV&   \        P                  ! V\        R4      V4      p\        P$                  P'                  \        P"                  S4      SP                  VP                  &   \        P                  P)                  Ws4      p\        P                  ! VVV4      pVP                  V4       \        P*                  ! SVSV4      p\-        \        P.                  SP                  SP                  ,          SP                  VP                  ,          SP                  SP                  ,          P0                  4      SP                   V&   VP                  V4       R# )   z$border_indr   r   z$border_index_tuple_varNr   )r*   resolve_function_typer   intpr@   intr   Varr   r'   r4   rF   rY   rA   rH   r2   r(   slice2_type
containersUniTuplebuild_tupleSetItemr   nonedtype)slice_fn_tydimrT   rU   slice_func_varstmtsborder_indsborder_tuple_items	other_argother_firstsigsisi_var	si_assignslice_callexprborder_slice_varslice_assignborder_ind_var
tuple_calltuple_assignsetitem_callndimsrh   r-   zero_vars   &&&&&&&&&&           r   handle_border5StencilPass._mk_stencil_parfor.<locals>.handle_borderD  sH    nn::ZZMA% !%!"sBFFm4454}]'CSI,1JJV[[)b#&& "		"((2*;V II "		"c :IY'!#'0;),&AT	 ". "
 25~.#%66%x1H##N 6;6G6G-223!yy3O\**:3'!#}-0/03"5494D4D4M4M%%u5.^001WW001CI
!yy^SI\*!zz'>8SQ/805

DLL<V04^=P=P0Q04W\\0J0P0P02|,
 \*r!   TFz	$py_g_varz$slice_instz$cval_constz%stencil_blocks after replacing returnstencilparfor_dummy)rU   z#stencil_blocks after adding SetItemr;   r   )Xr>   r   DEBUG_ARRAY_OPTprintr   dump_blocksr'   r4   copy_propagateget_name_var_tableapply_copy_propagater(   remove_deadr&   	arg_namesndimrT   rU   rM   r   r   r   r   r   rA   _replace_stencil_accessesr)   get_equiv_set	get_shaperN   _get_stencil_last_ind_get_stencil_start_indr<   parforsparforLoopNestmaxkeysBlockr   r   r   rH   r   rF   getattrrE   extendrV   r   typeofr*   can_convertr   rY   corenpytypesArraylayoutmiscModuler   Globalr   as_dtypetype__name__	functionsNumberClassgen_np_callr   r   resolve_value_typer   r   r2   r   insert_equivStaticSetItemr   ry   r   Locrr   simplify_CFGrs   Parforr,   )Ur-   ra   re   rh   rj   r:   rX   return_typestencil_funcrl   rm   stencil_blocksin_arr
in_arr_typin_cpsout_cpsname_var_tablerT   rU   parfor_varsr6   
parfor_varstart_lengthsend_lengths	loopnests	equiv_setin_arr_dim_sizes
start_inds	last_indslast_ind	start_indrv   ru   for_replacing_retparfor_ind_varr   r   
init_block
shape_name	shape_varshape_getattr	zero_namer   cval_tytemp2
full_constso_namedtype_g_np_var
dtype_g_npdtype_g_np_assignreturn_type_namedtype_np_attr_calldtype_attr_vardtype_attr_assignr   none_varnone_assignzero_index_varzero_index_assignr   r   slice_gr   r   r   	slice_varr   r   start_tuple_itemslast_tuple_itemsmsgslice_assignedcallexprslice_inst_varcval_const_valcval_const_varcval_const_assignsetitemexprr   	dummy_locret_const_varpatternr   r   r   sU   f&&f&&&&&&                                                                         @@r   rW   StencilPass._mk_stencil_parfor   s   
 	#**!!Q&&n>  0\\&++.
"11.$,,O!44^D%%LLNN	 !!Q&78  0^T\\-C-CZ!\\	+!!Q&;<  0 V[[)..jjuA}#(%&)+J,1JJDLL)z*	  &*%C%Cgl&"{ !!Q&AB"M2.+.  0 	''55e<	$..v6,----
	uA112B12E(3A	5#OH33(5a(8)UCQIi(X&U]]11::;q> )8Q8 9  "%^%8%8%:!;a!?13%1E-.}5I'JCP,7,=,=^(() A:(^NVVE=),+,/1N050@0@0I0I

E1#DLL,,-,,[#>J99ZEL$$\2!!Q&BC  0 XXeS)
?fkk2J!//?Juj#6IGGOOFGSAM','7'7'@'@?I(PDLL$OO""BIImY$L#MN ..z:IvveY4H---#++F3 --..t4~~11';;L;LMM) +9 : : $))$/#))!,%-J&1&7&7DLL#OO""BIIj(C$H#IJ,,-=>GffUGS1G).)9)9)B)B)H)H;F;L;L;E??;E;L;L*NDLL&  VVE=+EsKN05

0A0A"0EDLL,,-4S1J "		*nc JOO""#45,55*00 226$xx 6)#* !#AQSV!WVVE=+I3ON050K0KKL]L]0^DLL,,- "		*<nc ROO""#45((')xx'.(1>'B'+~~'+||'+~~7E vve];%?EH))BHHT3$73GKLL%*/**DLL'VVE=9J+KSQN "		"((1c*:NC PLL*+05

DLL,,-  VVE=9J+KSQN..;;EBK0;DLL,,-ii4G99WncBLLL&..66{8=

}q7H79;C  WW\\~08(/C.0.1 * 3N .1DNN>*umH&=sCI+0+<+<DLL(99^YDLLL&5+ 5+p Z__-%.K*//$A!$-;#@ k!#!,#(/,"	$ k!#!,#'..s3#	% .8 ""7,<=OO""5)---#++F3 --..t4~~11';;L;LMMIC)#.. FF5-*DcJ	"nn??F/:Y^^,))GUC8!#7Is!C&&~6nn::;<AJJ=1;L;=? 77<<YRR,/ ( 1 ,/x(!#}]/K(+"-494E4E^001!yy>3G&&|4 "$+*;*;D*A3!G!#}]/K,/"14?4E4E^001$&IIn.<c%C!&&'89 !..wdD8I/=~/24 &&{3

DLL,F $^-@-@ A $W\\ : @ @B /2{+ 	(()?	A !!Q&9:  0zz'>>3O'0(-

DLL4N(,^5H5H(I(,W\\(B(H(H(*|$
 	-.33::;LM-.33::<H FF0"5	umM&BINIIbhhqi&@-QZ[-.33::;LM-.33::IImY/	
 "..~>s>..01277;;=!!Q&78  0}k:;%%,,Y
N%(.)WdjjZ 7FC89r!   c                   TpV^ 8w  EdI   \         P                  ! V\        R4      V4      p\        P                  V P
                  VP                  &   \        V\        P                  4      '       d-   \         P                  ! \         P                  ! W%4      Wu4      pM\         P                  ! W'V4      pVP                  V4       \         P                  ! V\        R4      V4      p\        P                  V P
                  VP                  &   \         P                  ! V\        R4      V4      p	\        P                  ! \        4      p
\        P                   P#                  V
4      pWP
                  V	P                  &   \         P$                  ! RW4      p\         P                  ! WV4      pVP                  V4       \         P&                  P)                  WV.RV4      pVP+                  V P,                  \        P                  \        P                  ./ 4      V P.                  V&   \         P                  ! WV4      pVP                  V4       V# )r   stencil_const_varr   compute_last_ind_varr    r   )r   r   r   r   r   r'   r4   r@   numbersNumberrF   rY   rA   r<   njitr    r   
Dispatcherr   rH   r2   get_call_typer*   r(   )r-   r   
end_lengthrm   rT   rU   r   r   const_assigng_var
check_funcfunc_typg_objg_assign
index_callindex_assigns   &&&&&&          r   r   !StencilPass._get_stencil_last_ind  s   ? &&6I(JHKMK-2ZZDLL))**gnn55!yy*)B8C J  "yy#F\*vve]:%>DH*/**DLL'FF5-0F"GME$56J11*=H'/LL$II1:CEyys3HX&e-Db#NJ)1)?)?UZZ 8"*>DNN:&99Z3?L\*r!   c           	        \        V\        4      '       d   \        \        V^ 4      4      # R p\	        V/ V P
                  V P                  \        P                  3V P                  V P                  4      p\        VP                  4      ^8X  g   Q hVP                  P                  4       ^,          p\        Wq.4       W'P                  RR ,          pVP                  R,          P                   P                   pV# )r   c                 ,    \        \        V ^ 4      4      # r   )absmin)s_lengths   &r   get_start_ind9StencilPass._get_stencil_start_ind.<locals>.get_start_ind  s    s8Q'((r!   N)r@   r   r&  r'  r   r*   r+   r   r   r'   r(   rN   r>   popitemr   rE   rG   )	r-   start_lengthrm   rT   rU   r)  f_irrb   ret_vars	   &&&&&    r   r   "StencilPass._get_stencil_start_ind  s    lC((s<+,,	)"="dnn#'>>EJJ=$,,#'>>3 4;;1$$$##%a(%0ZZ_$	**R.&&,,r!   c                p   VP                   pV^ ,          pV U	u. uF  qP                  NK  	  p
p	RVP                  9   dU   VP                  R,           F  p	W9  g   K  \        R4      h	  VP                  R,           U	u. uF  qV	,          NK  	  pp	M. pVP                  V9   d   \        R4      hV P                  VP                  ,          P
                  pVP                  pVP                  pVP                  RJ pV'       d   V^ .,          pV^ .,          pMBVP                   U	u. uF  q^ ,          NK  	  pp	VP                   U	u. uF  q^,          NK  	  pp	\        P                  ! V4      pRpVP                  4        EFj  w  pp. pVP                   EFI  p\        V\        P                  4      '       dk   \        VP                   \        P"                  4      '       dA   VP                   P$                  R9   d&   VP                   P                   P                  V
9   g\   \        V\        P&                  4      '       g!   \        V\        P(                  4      '       d'   VP*                  P                  V
9   d   \        R4      h\        V\        P                  4      '       Ed$   \        VP                   \        P"                  4      '       Ed   VP                   P$                  R9   Ed   VP                   P                   P                  V
9   Ed   VP                   P                   P                  V9  Ed   VP                   P,                  pV^8X  d   V.pM6\/        VR4      '       d%   VP                  V9   d   VVP                  ,          p\        P0                  ! V4      Vn        V Uu. uF  p\5        WP6                  V4      NK  	  ppV'       d   V P9                  V\;        V4      VW4      pV'       d   \        V\        P<                  4      '       g5   \?        V Uu. uF  p\        V\@        4      '       * NK  	  up4      '       d   \        R4      h\;        \C        \D        VV4      4      p\;        \C        \F        VV4      4      pR	pV P9                  V\;        V4      VW4      pV^8X  d   V^ ,          pM\        P<                  ! V\I        R
4      V4      p\J        PL                  PO                  \J        PP                  V4      V P                  VP                  &   \        P"                  PS                  VV4      p\        P                  ! VVV4      pVPU                  V4       \W        V Uu. uF1  pV P                  VP                  ,          \J        PP                  8H  NK3  	  up4      '       d=   V P                  VP                   P                   P                  ,          PX                  pM1V P                  VP                   P                   P                  ,          p\        P"                  P[                  VP                   P                   VV4      p\]        VV P                  VP                   P                   P                  ,          V P                  VP                  ,          4      V P^                  V&   VVn        VPU                  V4       EKL  	  VVn        EKm  	  V'       d   V'       g   \        R4      hVV3# u up	i u up	i u up	i u up	i u upi u upi u upi )zConvert relative indexing in the stencil kernel to standard indexing
by adding the loop index variables to the corresponding dimensions
of the array index tuples.
standard_indexingz[Standard indexing requested for an array name not present in the stencil kernel definition.zYThe first argument to a stencil kernel must use relative indexing, not standard indexing.NFz?Assignments to arrays passed to stencil kernels is not allowed.r4   z<Variable stencil index only possible with known neighborhoodTz$parfor_index_ind_varz=Stencil kernel with no accesses to relatively indexed arrays.)setitemstatic_setitem)static_getitemgetitem)0r>   r4   rV   r   r'   r   rT   rU   neighborhoodr   get_tuple_tabler?   rE   r@   r   rF   rG   rH   rI   r   r   rX   indexhasattrbuild_definitions_definitions_get_const_index_exprr&   _add_index_offsetsrC   r   anyr   mapr'  r   r   r   r   r   r   r   rA   allr   r6  r   r(   ) r-   rj   r   re   r:   r   rl   r   r   xin_arg_namesstandard_indexedr   rT   rU   need_to_calc_kernelr   r   tuple_tablefound_relative_indexra   rb   rw   rc   
index_listv
index_varsind_varr   r   getitem_return_typgetitem_calls    &&&&&&&                         r   r   %StencilPass._replace_stencil_accesses&  s    $**(/010,"6"66!))*=>>+) +G H H ? &2%9%9:M%N P%N 89 2 2%N   P  ";;**! #. / / V[[)..jj*774? !1#IM)K+7+D+DE+DaqTT+DME+7+D+DE+DaqTT+DKE ..~>$ +002LE5H

bii00&tzz277;; JJMM-JJ JJ,,11\Abjj11b&6&677 KK,,<) +L M M tRYY//&tzz277;; JJMM-JJ JJ,,11\A JJ,,119II!%!1!1Jz&0\
":v66:??k;Y)4Z__)EJ /7.H.H.XJ+>H"J>H #8"LL!#5>H  "J$%)%<%<Z$($75&O
 + 'z266:: LAZ3%7!7 LMM"1 3A #B B )-SmDN.P )Q&*3sK+L&M/3, "&!8!8 $Z 0(E"HJ z",Q-"$&&31569#;5:5E5E5N5N!JJ6/W\\2%'WW%8%8S%I
')yyWc'J 5 AKMAKA !LL0EJJ>AKM N N-1\\48JJ4D4D4I4I.KKP5 + .2\\$**:J:J:O:O-P*#%77??4::3C3CWLO$QL3<*TZZ%5%5%:%:;W\\244DNN<0 ".DJ%k #l "EJs 3t ';! #? @ @ k))O 1 P0 FEV"J !M4Ms)   \\+\\$:\)1\.7\3c           	        \        V4      \        V4      8X  g   Q h\        W,            Uu. uF  p\        V\        4      NK  	  up4      '       d   \	        \        \        W4      4      # . p. p\        \        V4      4       EF  p	W,          p
\        V
\        4      '       d   \        P                  ! V\        R4      V4      p
\        P                  V P                  V
P                  &   \        P                  ! \        P                   ! W,          V4      W4      pVP#                  V4       W),          p\        V\        4      '       d   \        P                  ! V\        R4      V4      p\        P                  V P                  VP                  &   \        P                  ! \        P                   ! W),          V4      W4      pVP#                  V4       \        V
\$        4      '       gF   \        V P                  V
P                  ,          \        P&                  P(                  4      '       dZ   V P                  VP                  ,          \        P                  8X  g   Q hV P+                  WWtV4      pVP#                  V4       EK
  \        V\$        4      '       gF   \        V P                  VP                  ,          \        P&                  P(                  4      '       dZ   V P                  V
P                  ,          \        P                  8X  g   Q hV P+                  WWtV4      pVP#                  V4       EK  \        P                  ! V\        R4      V4      p\        P                  V P                  VP                  &   \        P,                  P/                  \0        P                  V
W4      pV P2                  P5                  \0        P                  \        P                  \        P                  3/ 4      V P6                  V&   \        P                  ! WV4      pVP#                  V4       VP#                  V4       EK  	  VP9                  V4       V# u upi )zbDoes the actual work of adding loop index variables to the
relative index constants or variables.
old_index_var
offset_varoffset_stencil_index)rN   rA  r@   r   rC   r@  r   rM   r   r   r   r   r   r'   r4   rF   rY   rA   r   r   	SliceType_add_offset_to_slicerH   binopoperatorr*   r   r(   r   )r-   rH  r:   rw   rT   rU   rI  	out_nodesrJ  r6   rP  r  rQ  	index_varr!  r"  s   &&&&&&          r   r>  StencilPass._add_index_offsets  s2   
 :#m"4444 J,DE,Dq
1c",DEFFC;<<	
s:'A&MM--- "u -o >!E38::]//0!yy*-)E4A H  .&)J*c**VVE -l ;SB
05

Z__-!yy-2BC)H0: A  .=%00!$,,}/A/A"B$)JJ$8$8: : ||JOO4

BBB 55m8A#O	!!),:u--!$,,z"?$)JJ$8$8: : ||M$6$675::EEE 55j8A#O	!!),u)*@A3HI+0::DLL(x||]0:AJ)-)M)M)1

EJJ7OQS*UDNN:&99ZC@L\*i(c (f 		"u Fs   Qc           	        \        V\        4      '       dT   R P                  VP                  VP                  4      p/ p\        V/ V4       VR,          pV.p\        P                  3p	M5R pW.pV P                  VP                  ,          p
V
\        P                  3p	V P                  P                  P                  P                  p\        W{V P                  V P                   WP                  V P"                  4      pVP$                  P'                  4       w  r\)        W4       VP*                  R,          P,                  P,                  pVP/                  VP*                  RR 4       V# )zRdef f(offset):
                return slice({} + offset, {} + offset)
            fc                 ^    \        V P                  V,           V P                  V,           4      # r%   )r   startstop)	old_sliceoffsets   &&r   r[  +StencilPass._add_offset_to_slice.<locals>.f  s!    Y__v5y~~7NOOr!   Nr+  )r@   r   formatr]  r^  execr   r   r'   r4   r&   func_idrJ   __globals__r   r*   r+   r(   r>   r,  r   rE   rG   r   )r-   r  rQ  rW  rT   rU   f_textr[  rO   arg_typs
slice_type_globalsr.  r[   rb   	new_indexs   &&&&&&          r   rT   StencilPass._add_offset_to_slice  s   i''y	7  CS!CA<D

}HP*Dinn5J"EJJ0H<<'',,88"1#+\\4>>K;;&&(%&JJrN((..	CR)r!   )r)   r(   r,   r&   r+   r'   r*   N)r   
__module____qualname____firstlineno__r.   rn   ry   rW   r   r   r   r>  rT  __static_attributes____classdictcell____classdict__s   @r   r#   r#   !   s?     <7|"2pd DO*bBH r!   r#   c                v
   ^ RI Hp ^ RIHp	 ^ RIHp
 ^ RIHp V P                  P                  4       p\        P                  ! VP                  4      pWn        \        P                  ! VP                  4      pRV9   d   \        R4      h^ RIHp	 V	P                  p\!        WW,4      p\"        P$                  P'                  RVP(                  4       V! VP(                  P*                  VP(                  P,                  VP(                  P.                  VP(                  P0                  R4      w  VP(                  n        VP(                  n        VP(                  n        pV
P9                  VP(                  P.                  VP(                  P2                  VP(                  P6                  RRVP(                  P0                  VP(                  P4                  \:        P<                  R	7       \        P>                  ! V\        P@                  ! 4       4      p\C        VPE                  4       4      p\G        VPE                  4       4      p\        PH                  PK                  V4       \:        PL                  ^8  d"   \O        R
4       \        PP                  ! V4       / pVP(                  P2                  PS                  4        F;  w  pp\T        PV                  ! V\Y        V4      V4      pVVV&   VVVPZ                  &   K=  	  \        P\                  ! VV4       \:        PL                  ^8  d"   \O        R4       \        PP                  ! V4       VP(                  P6                  PS                  4        F  w  ppVVV&   K  	  / pVP_                  4        EF*  pVP`                   EF  p\c        V\T        Pd                  4      '       g   K&  \c        VPf                  \T        Ph                  4      '       g   KR  \:        PL                  ^8  dO   \O        RVVPf                  Pj                  VPf                  PZ                  VPf                  Pj                  V9   4       VVPf                  Pj                  ,          PZ                  VVPf                  PZ                  &   VVPf                  Pj                  ,          Vn3        EK  	  EK-  	  \:        PL                  ^8  d.   \O        RV4       \O        R4       \        PP                  ! V4       \        Pl                  ! V4       Wn        WPo                  V4      ^ ,          V3# )z'get typed IR from stencil bytecode
    )
CPUContext)
cpu_target)type_annotations)type_inference_stager9   z6Cannot use the reserved word 'out' in stencil kernels.zbefore-inferenceN)r&   r'   r(   liftedlifted_fromrO   r   html_outputzInitial stencil_blockszAfter replace_varsrd   rl   zAfter replace arg with arrr   )8numba.core.cpurt  numba.core.registryru  numba.core.annotationsrv  numba.core.typed_passesrw  	kernel_ircopydeepcopyr>   r   r   r   target_contextDummyPipeliner   rewrite_registryapplystater*   r+   r&   rO   r'   r   r(   TypeAnnotationr   HTMLadd_offset_to_labels
next_labelr'  r   r   _the_max_labelupdater   r   r   r?   r   r   r   r4   replace_varsvaluesrE   r@   rF   rG   Argr9  remove_delsget_return_type)ri   r*   rO   rT   rU   rd   r'   r(   rt  ru  rv  rw  stencil_func_irr   r   r+   tpr[   	min_label	max_labelvar_dictrI  typnew_varr2   call_typrl   rb   rc   s   &&&&&&&&                     r   rS   rS     s    *.7< ll'')O]]?#9#9:N+001G1GHN ) * 	* /))I	yT	CB##$6ADX
BHH..0@0@
tEABHHbhh*BHH,> ##    (($$XX]]HH((KK $ ! 22>8@8K8K8MONN'')*IN'')*I""9-"&'^, H((""((*3&&a 0#6 # + .(3""#^, ((,,224h"	$ 5 O&&(JJD$		**z$**bff/M/M))Q.,
DJJ4D4D#zz

0@0@J0NP3=djj>N>N3O3T3T

0'

(8(89
  ) "1*+^,(+..t4Q7HHr!   c                   &   a  ] tR tRt o R tRtV tR# )r  in  c                   ^ RI Hp V! 4       V n        WP                  n        W P                  n        W0P                  n        W@P                  n        RV P                  n        RV P                  n        RV P                  n	        R# )r   )	StateDictN)
numba.core.compilerr  r  r*   r+   rO   r&   r'   r   r(   )r-   r*   r+   rO   r.  r  s   &&&&& r   r.   DummyPipeline.__init__o  sY    1[
(

(



!

!

!%

#

r!   )r  N)r   rl  rm  rn  r.   ro  rp  rq  s   @r   r  r  n  s     	$ 	$r!   r  c                4    \        \        WV4      pVe   V# V# )z
infer index_var as constant if it is of a expression form like c-1 where c
is a constant in the outer function.
index_var is assumed to be inside stencil kernel
)r   _get_const_index_expr_inner)rj   r&   rX  	const_vals   &&& r   r=  r=  {  s(     #Z)EIr!   c                
   \        \        V\        P                  4      4       \	        \
        WV4      pVe   V# \        P                  ! W4      p\	        \        WV4      pVe   V# \	        \        WV4      pVe   V# \        h)zOinner constant inference function that calls constant, unary and binary
cases.
)r   r@   r   r   r   _get_const_two_irsr   get_definition_get_const_unary_expr_get_const_binary_exprr   )rj   r&   rX  	var_const	index_defs   &&&  r   r  r    s     Jy"&&)*):	JI''
>IzI?I
Y@I
r!   c                f    \        \        W4      pVe   V# \        \        W4      pVe   V# \        h)zOget constant in either of two IRs if available
otherwise, throw GuardException
)r   r   r   )ir1ir2varr  s   &&& r   r  r    s:     j#+Ij#+I
r!   c                   \        \        V\        P                  4      ;'       d    VP                  R8H  4       VP
                  p\        WV4      p\        VP                  ,          p\        RP                  WT4      4      # )zIevaluate constant unary expr if possible
otherwise, raise GuardException
unaryz{}{})r   r@   r   rH   rI   rG   r  r   fnevalrb  )rj   r&   r  	inner_varr  rI   s   &&&   r   r  r    s_     Jy"''*FFy||w/FGI+JKI	y||	,Bb,--r!   c                2   \        \        V\        P                  4      ;'       d    VP                  R8H  4       \        WVP                  4      p\        WVP                  4      p\        VP                  ,          p\        RP                  W5V4      4      # )zJevaluate constant binary expr if possible
otherwise, raise GuardException
rU  z{}{}{})r   r@   r   rH   rI   r  lhsrhsr   r  r  rb  )rj   r&   r  arg1arg2rI   s   &&&   r   r  r    sl     Jy"''*FFy||w/FG&zIMMJD&zIMMJD	y||	,B$/00r!   )0r  r  r   pytypesrV  r   numpyr   numba.parfors.parforr<   
numba.corer   r   r   r   numba.core.typing.templatesr	   r
   numba.core.typingr   r   r   numba.core.ir_utilsr   r   r   r   r   r   r   r   r   numba.core.errorsr   numba.core.utilsr   numba.npr   r    objectr#   rS   r  r=  r  r  r  r  r   r!   r   <module>r     s           < < F ' %P P P . 2 "r& rhWIr
$F 
$
.
	.1r!   