Ë
    üÇ:j®¯  ã                   ó.  — d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZ	d dl
mZmZmZ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mZmZmZmZmZmZ d dl m!Z! d d	l"m#Z# d d
l$m%Z% d„ Z& G d„ de'«      Z(d„ Z) G d„ de'«      Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/y)é    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                 ó   — |dkD  r| |z
  S | S ©Nr   © )Údim_sizeÚindex_consts     úq/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/stencils/stencilparfor.pyÚ_compute_last_indr       s   € Ø�Q‚Ø˜+Ñ%Ð%àˆó    c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚStencilPassc                 óf   — || _         || _        || _        || _        || _        || _        || _        y ©N)Úfunc_irÚtypemapÚ	calltypesÚarray_analysisÚ	typingctxÚ	targetctxÚflags)Úselfr&   r'   r(   r)   r*   r+   r,   s           r   Ú__init__zStencilPass.__init__"   s4   € àˆŒØˆŒØ"ˆŒØ,ˆÔØ"ˆŒØ"ˆŒØˆ�
r!   c                 óT  ‡ — ddl m} t        ‰ j                  j                  «      \  }}g }i }|j                  «       D ]/  \  }}|D ]%  }t        ||«      sŒ|j                  |«       |||<   Œ' Œ1 |sy‰ j                  j                  j                  «       D �]	  \  }	}
t        t        t        |
j                  «      «      «      D �]Ø  \  }}t        |t        j                  «      �rt        |j                  t        j                  «      �ræ|j                  j                   dk(  �rÌ|j                  j"                  j$                  |v �r©t'        |j                  j(                  «      }t+        t-        |j                  j.                  «      «      D �ci c]  }||j                  j.                  |   “Œ }}|j                  j.                  }t1        ˆ fd„|D «       «      }|D ]'  }t        |t2        j4                  «      sŒt7        d«      ‚ |j9                  d«      }||j                  j"                  j$                     }t;        |‰ j<                  ||
j>                  |
j@                  |‰ jB                  ‰ jD                  «      \  }}}|jF                  j9                  dd«      }‰ jI                  |	|||||jJ                  |||«	      }|
j                  d |z   |
j                  |d	z   d z   |
_        �Œ-t        |t        j                  «      s�ŒIt        |j                  t        j                  «      s�Œo|j                  j                   dk(  s�ŒŠtM        tN        ‰ j                  |j                  «      d
k(  s�Œ´t        jP                  d|j@                  «      |_        �ŒÛ �Œ yc c}w )zP Finds all calls to StencilFuncs in the IR and converts them to parfor.
        r   )ÚStencilFuncNÚcallc              3   óP   •K  — | ]  }‰j                   |j                     –— Œ y ­wr%   )r'   Úname)Ú.0Úir-   s     €r   ú	<genexpr>z"StencilPass.run.<locals>.<genexpr>L   s   øè ø€ Ò'NÀ¨¯©°Q·V±VÕ(<Ñ'Nùs   ƒ#&zITuple parameters not supported for stencil kernels in parallel=True mode.ÚoutÚindex_offsetsé   )ÚstencilÚnumba))Únumba.stencils.stencilr0   r   r&   ÚblocksÚitemsÚ
isinstanceÚappendÚreversedÚlistÚ	enumerateÚbodyr   ÚAssignÚvalueÚExprÚopÚfuncr3   ÚdictÚkwsÚrangeÚlenÚargsÚtupler   Ú	BaseTupler   ÚgetÚget_stencil_irr*   ÚscopeÚlocr'   r(   ÚoptionsÚ_mk_stencil_parforÚtargetr   r   ÚConst)r-   r0   Ú
call_tableÚ_Ústencil_callsÚstencil_dictÚcall_varnameÚ	call_listÚone_callÚlabelÚblockr5   ÚstmtrK   Ú
input_dictÚin_argsÚarg_typemapÚarg_typeÚout_arrÚsfÚ
stencil_irÚrtÚarg_to_arr_dictr8   Ú	gen_nodess   `                        r   ÚrunzStencilPass.run,   sì  ø€ õ 	7ô ' t§|¡|×':Ñ':Ó;‰ˆ
�AØˆØˆØ'1×'7Ñ'7Ó'9ò 	:Ñ#ˆL˜)Ø%ò :�Ü˜h¨Õ4à!×(Ñ(¨Ô6Ø19�L Ò.ñ	:ð	:ñ Øð !ŸL™L×/Ñ/×5Ñ5Ó7ó )	7‰LˆE�5Ü#¤D¬°5·:±:Ó)>Ó$?Ó@ó (7‘��4ä˜t¤R§Y¡YÕ/Ü& t§z¡z´2·7±7Õ;Ø ŸJ™JŸM™M¨VÓ3Ø ŸJ™JŸO™O×0Ñ0°MÒAÜ˜tŸz™zŸ~™~Ó.�Cô 5:¼#¸d¿j¹j¿o¹oÓ:NÓ4Oö"Q¸A ! T§Z¡Z§_¡_°QÑ%7Ñ"7ð "Q�Jð "Qà"Ÿj™jŸo™o�GÜ"'Ó'NÀgÔ'NÓ"N�KØ$/ò ;˜Ü% h´·±Õ@Ü"1ð 3:ó #;ð ;ð;ð "Ÿg™g e›n�Gð & d§j¡j§o¡o×&:Ñ&:Ñ;�BÜ6DÀRØ ŸN™N¨KØ!ŸK™K¨¯©°JØ ŸL™L¨$¯.©.ó7:Ñ3�J  Oð %'§J¡J§N¡N°?ÀDÓ$I�MØ $× 7Ñ 7¸¸wÈØ&¨°t·{±{ÀBÈØ+ó!-�Ið "'§¡¨B¨Q °)Ñ!;¸e¿j¹jÈÈ1ÉÈÐ>NÑ!N�E–Jä  ¤r§y¡yÖ1Ü& t§z¡z´2·7±7Ö;Ø ŸJ™JŸM™M¨VÔ3Ü!¤-°·±¸t¿z¹zÓJØ';ô<ô "$§¡¨!¨T¯X©XÓ!6�D–JòQ(7ñ)	7ùò"Qs   Æ!N%c           	      ó„  — |j                  «       D �],  \  }}|j                  }|j                  }g }|j                  D ]ö  }	t	        |	t
        j                  «      rÉ|j                  «       }
t	        |
t
        j                  «      r=t	        |
j                  t
        j                  «      r|
j                  j                  dk(  sJ ‚|j                  t        j                  |
j                  j                  ||«      «       |j                  t        j                  ||«      «       Œæ|j                  |	«       Œø ||_        �Œ/ y)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>   rS   rT   rD   r?   r   ÚReturnÚpoprE   rF   rG   rH   r@   ÚJump)r-   r=   Úexit_value_varÚparfor_body_exit_labelr`   ra   rS   rT   Únew_bodyrb   Ú	prev_stmts              r   Úreplace_return_with_setitemz'StencilPass.replace_return_with_setitemj   sï   € ð #ŸL™L›Nó 	"‰LˆE�5Ø—K‘KˆEØ—)‘)ˆCØˆHØŸ
™
ò *�Ü˜d¤B§I¡IÔ.à (§¡£�IÜ& y´"·)±)Ô<Ü& y§¡¼¿¹Ô@Ø%ŸO™O×.Ñ.°&Ò8ð:ð 9ð —O‘O¤B§I¡I¨i¯o©o×.CÑ.CÀ^ÐUXÓ$YÔZØ—O‘O¤B§G¡GÐ,BÀCÓ$HÕIà—O‘O DÕ)ð*ð "ˆEŽJñ!	"r!   c
                 óŠ$  ‡ ‡‡S‡T— g }
|j                   }t        j                  dk\  r't        d||‰||||«       t	        j
                  |«       |d   }‰ j                  |j                     }t	        j                  |‰ j                  «      \  }}t	        j                  |«      }t	        j                  |||‰ j                  ‰ j                  «       t        j                  dk\  r t        d«       t	        j
                  |«       t	        j                  |‰ j                  j                  |‰ j                  «       t        j                  dk\  r t        d«       t	        j
                  |«       ‰ j                  |j                     j                  ŠS|j                   }|j"                  }g }t%        ‰S«      D ]Z  }t'        j(                  |t+        d«      |«      }t,        j.                  ‰ j                  |j                  <   |j1                  |«       Œ\ ‰ j3                  ||||||	«      \  }}t        j                  dk\  r8t        d«       t        d|«       t        d	|«       t	        j
                  |«       g }‰ j4                  j7                  |«      }|j9                  |«      }‰St;        |«      k(  sJ ‚g }g }t%        ‰S«      D ]”  }‰ j=                  ||   ||   |
||«      }‰ j?                  ||   |
||«      }|j1                  |«       |j1                  |«       |j1                  t@        jB                  jD                  jG                  ||   ||d«      «       Œ– tI        |jK                  «       «      dz   }t'        jL                  ||«      ||<   t'        j(                  |t+        d
«      |«      } |jN                  ‰ j                  | j                  <   g }!‰Sdk(  r|d   }"n­t'        j(                  |t+        d«      |«      }"t,        jP                  jS                  t,        j.                  ‰S«      ‰ j                  |"j                  <   t&        jT                  jW                  ||«      }#t'        jX                  |#|"|«      }$|!j1                  |$«       t        j                  dk\  r t        d«       t	        j
                  |«       t'        jL                  ||«      }%‰�€t‰ j                  |j                     }t	        j*                  d«      }&t'        j(                  ||&|«      }'t&        jT                  j[                  |d|«      }(t,        jP                  jS                  t,        j.                  |j                  «      ‰ j                  |&<   |%j\                  j_                  t'        jX                  |(|'|«      g«       t	        j*                  d«      })t'        j(                  ||)|«      ŠTd|j`                  v rq|j`                  d   }*tb        jd                  je                  |*«      }+‰ jf                  ji                  |+|jN                  «      stk        d«      ‚|jO                  |*«      },n|jO                  d«      },t'        jl                  |,|«      }-|jN                  ‰ j                  |)<   |%j\                  j_                  t'        jX                  |-‰T|«      g«       t	        j*                  d«      }.t'        j(                  ||.|«      Št@        jn                  j,                  jp                  js                  |jN                  |j                  |jt                  «      ‰ j                  ‰j                  <   t'        j(                  |t+        d«      |«      }/t,        jv                  jy                  tz        «      ‰ j                  |/j                  <   t'        j|                  dtz        |«      }0t'        jX                  |0|/|«      }1|%j\                  j1                  |1«       t        j€                  |jN                  «      j‚                  j„                  }2|2dk(  rd}2t&        jT                  j[                  |/|2|«      }3t'        j(                  |t+        d«      |«      }4t,        j†                  j‰                  |jN                  «      ‰ j                  |4j                  <   t'        jX                  |3|4|«      }5|%j\                  j1                  |5«       t	        jŠ                  dtz        jŒ                  ‰|'|4g‰ jf                  ‰ j                  ‰ j                  «      }6t'        j(                  |t+        d«      |«      }7t'        jX                  t'        jl                  d|«      |7|«      }8|6j1                  |8«       t,        jŽ                  ‰ j                  |7j                  <   t'        j(                  |t+        d«      |«      }9t'        jX                  t'        jl                  d|«      |9|«      }:|6j1                  |:«       t,        j.                  ‰ j                  |9j                  <   t'        j(                  |t+        d«      |«      };‰ jf                  j‘                  t’        «      }<|<‰ j                  |;j                  <   t'        j|                  dt’        |«      }=t'        jX                  |=|;|«      }>|6j1                  |>«       ‰ jf                  j•                  |<t,        jŽ                  fdz  i «      }?t&        jT                  j—                  |;|7|7fd|¬ «      }@|?‰ j                  |@<   t'        j(                  |t+        d!«      |«      }At,        j˜                  ‰ j                  |Aj                  <   t'        jX                  |@|A|«      }>|6j1                  |>«       ˆSˆˆ ˆTfd"„}Bt%        |j                  «      D ]G  }CAg|j                  z  }D|Ag|j                  z  }E B|<|C|||;|6||D|9d#«
        |B|<|C|||;|6||E||C   d$«
       ŒI |j›                  ‰|«       |%j\                  j_                  |6«       �nAd|j`                  v �r2|j`                  d   }*tb        jd                  je                  |*«      }+‰ jf                  ji                  |+|jN                  «      sd}Ftk        |F«      ‚t'        j(                  |t+        d%«      |«      }A‰ jf                  j‘                  t’        «      }<|<‰ j                  |Aj                  <   t'        j|                  dt’        |«      }=t'        jX                  |=|A|«      }G|%j\                  j1                  |G«       ‰ jf                  j•                  |<t,        jŽ                  fdz  i «      }?t&        jT                  j—                  |Add|¬ «      }H|?‰ j                  |H<   t'        j(                  |t+        d&«      |«      }It,        j˜                  ‰ j                  |Ij                  <   t'        jX                  |H|I|«      }>|%j\                  j1                  |>«       t'        jl                  |jO                  |*«      |«      }Jt'        j(                  |t+        d'«      |«      }K|jN                  ‰ j                  |Kj                  <   t'        jX                  |J|K|«      }L|%j\                  j1                  |L«       t'        jœ                  ‰t“        dd«      |I|K|«      }M|%j\                  j1                  |M«       tŸ        t,        jŽ                  ‰ j                  ‰j                     ‰ j                  |Ij                     ‰ j                  ‰j                     jN                  «      }?|?‰ j                  |M<   ‰ j¡                  || |«       t        j                  dk\  r t        d(«       t	        j
                  |«       t'        j¢                  ‰|"| |«      }NtŸ        t,        jŽ                  ‰ j                  ‰j                     ‰ j                  |"j                     ‰ j                  ‰j                     jN                  «      ‰ j                  |N<   ||   j\                  j_                  |!«       ||   j\                  j1                  |N«       t'        j¤                  d)d*«      }Ot'        j(                  |t+        d'«      |O«      }Pt'        jX                  t'        jl                  d|O¬+«      |P|O«      }L||   j\                  j1                  |L«       ||   j\                  j1                  t'        j¦                  |P|O«      «       t	        j¨                  |«      }|tI        |jK                  «       «         j\                  j«                  «        t        j                  dk\  r t        d,«       t	        j
                  |«       d-||gf}Qt@        jB                  jD                  j­                  ||%|||"||Q‰ j®                  «      }R|
j1                  |R«       |
j1                  t'        jX                  ‰||«      «       |
S ).z> Converts a set of stencil kernel blocks to a parfor.
        r9   rV   r   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é   r   ©rI   rN   rK   rT   ú$slicec
                 ó   •— ‰j                   j                  | t        j                  fdz  i «      }
||   }t	        |t
        t        j                  f«      sJ ‚t        j                  |t        d«      |«      }t        j                  ‰j                  |j                  <   t	        |t
        «      r,t        j                  t        j                  ||«      ||«      }nt        j                  |||«      }|j                  |«       t        j                  j                  ||	r||fn||fd|¬«      }|
‰j                   |<   t        j                  |t        d«      |«      }t        j"                  ‰j                  |j                  <   t        j                  |||«      }|j                  |«       |||<   t        j                  |t        d«      |«      }t        j$                  j'                  t        j"                  ‰«      ‰j                  |j                  <   t        j                  j)                  ||«      }t        j                  |||«      }|j                  |«       t        j*                  ‰|‰|«      }t-        t        j.                  ‰j                  ‰j                     ‰j                  |j                     ‰j                  ‰j                     j0                  «      ‰j                   |<   |j                  |«       y )Nrƒ   z$border_indr   r„   r…   z$border_index_tuple_var)r*   Úresolve_function_typer   Úintpr?   Úintr   ÚVarr   r'   r3   rE   rX   r@   rG   r1   r(   Úslice2_typeÚ
containersÚUniTupleÚbuild_tupleÚSetItemr   ÚnoneÚdtype)Úslice_fn_tyÚdimrS   rT   Ú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Úndimsrg   r-   Úzero_vars                        €€€€r   Úhandle_borderz5StencilPass._mk_stencil_parfor.<locals>.handle_borderD  sV  ø€ ð —n‘n×:Ñ:ØÜ—Z‘Z�M AÑ%Øó�ð ! Ñ%�Ü! "¤s¬B¯F©F mÔ4Ð5Ð4ÜŸ™ ¤}°]Ó'CÀSÓI�Ü,1¯J©J�—‘˜VŸ[™[Ñ)Ü˜b¤#Ô&Ü "§	¡	¬"¯(©(°2°sÓ*;¸VÀSÓ I‘Iä "§	¡	¨"¨f°cÓ :�IØ—‘˜YÔ'ä!#§¡§¡Ø'Ù0;˜) VÑ,À&È)ÐATØØð	 ".ó "�ð
 25�—‘˜~Ñ.ä#%§6¡6¨%´¸xÓ1HÈ#Ó#NÐ Ü6;×6GÑ6G�—‘Ð-×2Ñ2Ñ3Ü!Ÿy™y¨Ð9IÈ3ÓO�Ø—‘˜\Ô*à*:Ð" 3Ñ'Ü!#§¡¨¬}Ø-ó0/Ø03ó"5�ä49×4DÑ4D×4MÑ4MÜ×%Ñ% uó5.�—‘˜^×0Ñ0Ñ1äŸW™W×0Ñ0Ð1CÀSÓI�
Ü!Ÿy™y¨°^ÀSÓI�Ø—‘˜\Ô*ä!Ÿz™z¨'°>À8ÈSÓQ�Ü/8Ü05·
±
¸D¿L¹LÈÏÉÑ<VØ04·±¸^×=PÑ=PÑ0QØ04·±¸W¿\¹\Ñ0J×0PÑ0Pó02�—‘˜|Ñ,ð
 —‘˜\Õ*r!   TFz	$py_g_varz$slice_instz$cval_constz%stencil_blocks after replacing returnÚstencilparfor_dummyéÿÿÿÿ)rT   z#stencil_blocks after adding SetItemr:   )Xr=   r   ÚDEBUG_ARRAY_OPTÚprintr   Údump_blocksr'   r3   Úcopy_propagateÚget_name_var_tableÚapply_copy_propagater(   Úremove_deadr&   Ú	arg_namesÚndimrS   rT   rL   r   rŠ   r   r   rˆ   r@   Ú_replace_stencil_accessesr)   Úget_equiv_setÚ	get_shaperM   Ú_get_stencil_last_indÚ_get_stencil_start_indr;   ÚparforsÚparforÚLoopNestÚmaxÚkeysÚBlockr‘   rŒ   r�   rG   rŽ   rE   ÚgetattrrD   ÚextendrU   r   Útypeofr*   Úcan_convertr   rX   ÚcoreÚnpytypesÚArrayÚlayoutÚmiscÚModuler~   ÚGlobalr   Úas_dtypeÚtypeÚ__name__Ú	functionsÚNumberClassÚgen_np_callr�   r�   Úresolve_value_typer‚   r‡   r1   r‹   Úinsert_equivÚStaticSetItemr   rw   r�   ÚLocrp   Úsimplify_CFGrq   ÚParforr,   )Ur-   r`   rd   rg   ri   r8   rW   Úreturn_typeÚstencil_funcrk   rl   Ústencil_blocksÚin_arrÚ
in_arr_typÚin_cpsÚout_cpsÚname_var_tablerS   rT   Úparfor_varsr5   Ú
parfor_varÚstart_lengthsÚend_lengthsÚ	loopnestsÚ	equiv_setÚin_arr_dim_sizesÚ
start_indsÚ	last_indsÚlast_indÚ	start_indrt   rs   Ú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   `  `                                                                               @@r   rV   zStencilPass._mk_stencil_parforƒ   sÊ  û€ ð
 ˆ	Ø#×*Ñ*ˆä×!Ñ! QÒ&ÜÐ&¨¨w¸ÀØ ¨nô>ä× Ñ  Ô0à˜‘ˆà—\‘\ &§+¡+Ñ.ˆ
Ü"×1Ñ1°.À$Ç,Á,ÓO‰ˆ�Ü!×4Ñ4°^ÓDˆä×%Ñ%ØØØØ�L‰LØ�N‰Nô	ô ×!Ñ! QÒ&ÜÐ7Ô8Ü× Ñ  Ô0Ü×Ñ˜^¨T¯\©\×-CÑ-CÀZØ!Ÿ\™\ô	+ä×!Ñ! QÒ&ÜÐ;Ô<Ü× Ñ  Ô0ð —‘˜VŸ[™[Ñ)×.Ñ.ˆØ—‘ˆØ�j‰jˆØˆÜ�u“ò 	+ˆAÜŸ™ ¤}Ø#ó(%Ø&)ó+ˆJä,1¯J©JˆD�L‰L˜Ÿ™Ñ)Ø×Ñ˜zÕ*ð		+ð &*×%CÑ%CØ˜ g¨}¸lØó&Ñ"ˆ�{ô ×!Ñ! QÒ&ÜÐAÔBÜÐ" MÔ2Ü�. +Ô.Ü× Ñ  Ô0ð ˆ	Ø×'Ñ'×5Ñ5°eÓ<ˆ	Ø$×.Ñ.¨vÓ6ÐàœÐ,Ó-Ò-Ð-Ð-Øˆ
Øˆ	Ü�u“ò 		9ˆAØ×1Ñ1Ð2BÀ1Ñ2EØ(3°A©¸	À5È#óOˆHà×3Ñ3Ø(5°aÑ(8¸)ÀUÈCóQˆIà×Ñ˜iÔ(Ø×Ñ˜XÔ&à×ÑœUŸ]™]×1Ñ1×:Ñ:¸;Àq¹>Ø )¨8°Qó8õ 9ð		9ô "% ^×%8Ñ%8Ó%:Ó!;¸aÑ!?ÐÜ13·±¸%ÀÓ1EˆÐ-Ñ.ÜŸ™ ¤}Ð5IÓ'JÈCÓPˆØ,7×,=Ñ,=ˆ�‰�^×(Ñ(Ñ)ð ÐØ�AŠ:Ø(¨™^‰NäŸV™V E¬=Ø)ó,+Ø,/ó1ˆNä05×0@Ñ0@×0IÑ0IÜ—
‘
˜Eó1#ˆD�L‰L˜×,Ñ,Ñ-äŸ™×,Ñ,¨[¸#Ó>ˆJÜŸ9™9 Z°ÀÓEˆLØ×$Ñ$ \Ô2ä×!Ñ! QÒ&ÜÐBÔCÜ× Ñ  Ô0ô —X‘X˜e SÓ)ˆ
Ø‰?ØŸ™ f§k¡kÑ2ˆJä!×/Ñ/°Ó?ˆJÜŸ™˜u j°#Ó6ˆIÜŸG™GŸO™O¨F°G¸SÓAˆMÜ',×'7Ñ'7×'@Ñ'@ÄÇÁØ?I¿¹ó(PˆD�L‰L˜Ñ$à�O‰O×"Ñ"¤B§I¡I¨m¸YÈÓ$LÐ#MÔNä ×.Ñ.¨zÓ:ˆIÜ—v‘v˜e Y°Ó4ˆHØ˜×-Ñ-Ñ-Ø#×+Ñ+¨FÑ3�ä Ÿ-™-×.Ñ.¨tÓ4�Ø—~‘~×1Ñ1°'¸;×;LÑ;LÔMÜ)ð +9ó :ð :ð $×)Ñ)¨$Ó/‘à#×)Ñ)¨!Ó,�ÜŸ™ %¨Ó-ˆJØ&1×&7Ñ&7ˆD�L‰L˜Ñ#Ø�O‰O×"Ñ"¤B§I¡I¨j¸(ÀCÓ$HÐ#IÔJä×,Ñ,Ð-=Ó>ˆGÜ—f‘f˜U G¨SÓ1ˆGÜ).¯©×)9Ñ)9×)BÑ)B×)HÑ)HØ;F×;LÑ;LØ;E¿?¹?Ø;E×;LÑ;Ló*NˆD�L‰L˜Ÿ™Ñ&ô  ŸV™V E¬=¸Ó+EÀsÓKˆNÜ05·
±
×0AÑ0AÄ"Ó0EˆD�L‰L˜×,Ñ,Ñ-ÜŸ™ 4¬¨SÓ1ˆJÜ "§	¡	¨*°nÀcÓ JÐØ�O‰O×"Ñ"Ð#4Ô5ä,×5Ñ5Ø*×0Ñ0ó 2ß26±$·x±xð à 6Ò)Ø#*Ð Ü!#§¡§¡°ÐAQÐSVÓ!WÐÜŸV™V E¬=¸Ó+IÈ3ÓOˆNÜ05·±×0KÑ0KÈK×L]ÑL]Ó0^ˆD�L‰L˜×,Ñ,Ñ-Ü "§	¡	Ð*<¸nÈcÓ RÐØ�O‰O×"Ñ"Ð#4Ô5ä×(Ñ(¨Ü')§x¡xØ'.Ø(1°>Ð'BØ'+§~¡~Ø'+§|¡|Ø'+§~¡~ó7ˆEô —v‘v˜e¤]°;Ó%?ÀÓEˆHÜŸ)™)¤B§H¡H¨T°3Ó$7¸À3ÓGˆKØ�L‰L˜Ô%Ü*/¯*©*ˆD�L‰L˜Ÿ™Ñ'äŸV™V E¬=Ð9JÓ+KÈSÓQˆNÜ "§	¡	¬"¯(©(°1°cÓ*:¸NÈCÓ PÐØ�L‰LÐ*Ô+Ü05·
±
ˆD�L‰L˜×,Ñ,Ñ-ô  ŸV™V E¬=Ð9JÓ+KÈSÓQˆNØŸ.™.×;Ñ;¼EÓBˆKØ0;ˆD�L‰L˜×,Ñ,Ñ-Ü—i‘i ¬°Ó4ˆGÜŸ9™9 W¨n¸cÓBˆLØ�L‰L˜Ô&à—.‘.×6Ñ6°{Ü8=¿
¹
°}ÀqÑ7HØ79ó;ˆCô  ŸW™WŸ\™\¨~Ø08¸(Ð/CØ.0Ø.1ð *ó 3ˆNð .1ˆD�N‰N˜>Ñ*äŸ™˜u¤m°HÓ&=¸sÓCˆIÜ+0×+<Ñ+<ˆD�L‰L˜Ÿ™Ñ(ÜŸ9™9 ^°YÀÓDˆLØ�L‰L˜Ô&÷5+ôp ˜ZŸ_™_Ó-ò %�à%. K°*·/±/Ñ$AÐ!Ø$- ;°·±Ñ#@Ð á˜kØ!Ø#Ø!Ø,Ø#Ø(Ø/Ø,Ø"ô	$ñ ˜kØ!Ø#Ø!Ø,Ø#Ø'Ø.Ø.¨sÑ3Ø#õ	%ð%ð8 ×"Ñ" 7Ð,<Ô=Ø�O‰O×"Ñ" 5Ö)à˜×-Ñ-Ò-Ø#×+Ñ+¨FÑ3�ä Ÿ-™-×.Ñ.¨tÓ4�Ø—~‘~×1Ñ1°'¸;×;LÑ;LÔMØI�CÜ)¨#Ó.Ð.ô ŸF™F 5¬-¸Ó*DÀcÓJ�	Ø"Ÿn™n×?Ñ?ÄÓF�Ø/:�—‘˜YŸ^™^Ñ,ÜŸ)™) G¬U°CÓ8�Ü!#§¡¨7°I¸sÓ!C�Ø—‘×&Ñ& ~Ô6à—n‘n×:Ñ:¸;Ü<A¿J¹J¸=È1Ñ;LØ;=ó?�ô Ÿ7™7Ÿ<™<¨Y¸RÀRØ,/ð (ó 1�ð ,/�—‘˜xÑ(Ü!#§¡¨¬}¸]Ó/KØ(+ó"-�ä49×4EÑ4E�—‘˜^×0Ñ0Ñ1Ü!Ÿy™y¨°>À3ÓG�Ø—‘×&Ñ& |Ô4ô "$§¡¨+×*;Ñ*;¸DÓ*AÀ3Ó!G�Ü!#§¡¨¬}¸]Ó/KØ,/ó"1�à4?×4EÑ4E�—‘˜^×0Ñ0Ñ1Ü$&§I¡I¨nØ.<¸có%CÐ!à—‘×&Ñ&Ð'8Ô9ô !×.Ñ.¨w¼¸dÀDÓ8IØ/=¸~Ø/2ó4�ð —‘×&Ñ& {Ô3Ü¤§
¡
¨D¯L©L¸¿¹Ñ,FØ $§¡¨^×-@Ñ-@Ñ AØ $§¡¨W¯\©\Ñ :× @Ñ @óB�ð /2�—‘˜{Ñ+ð 	×(Ñ(¨¸Ø)?ô	Aô ×!Ñ! QÒ&ÜÐ9Ô:Ü× Ñ  Ô0ä—z‘z '¨>¸>È3ÓOˆÜ'0Ü(-¯
©
°D·L±LÀÇÁÑ4NØ(,¯©°^×5HÑ5HÑ(IØ(,¯©°W·\±\Ñ(B×(HÑ(Hó(*ˆ�‰�|Ñ$ð
 	Ð-Ñ.×3Ñ3×:Ñ:Ð;LÔMØÐ-Ñ.×3Ñ3×:Ñ:¸<ÔHô —F‘FÐ0°"Ó5ˆ	ÜŸ™˜u¤m°MÓ&BÀIÓNˆÜŸI™I¤b§h¡h¨q°iÔ&@À-ÐQZÓ[ÐØÐ-Ñ.×3Ñ3×:Ñ:Ð;LÔMàÐ-Ñ.×3Ñ3×:Ñ:Ü�I‰I�m YÓ/ô	
ô "×.Ñ.¨~Ó>ˆØ”s˜>×.Ñ.Ó0Ó1Ñ2×7Ñ7×;Ñ;Ô=ä×!Ñ! QÒ&ÜÐ7Ô8Ü× Ñ  Ô0à˜}¨kÐ:Ð;ˆÜ—‘×%Ñ%×,Ñ,¨Y¸
ÀNØ%(¨.¸)ÀWÈdÏjÉjóZˆà×Ñ˜Ô Ø×ÑœŸ™ 7¨F°CÓ8Ô9ØÐr!   c                 ó–  — |}|dk7  �r@t        j                  |t        d«      |«      }t        j                  | j
                  |j                  <   t        |t        j                  «      r,t        j                  t        j                  ||«      ||«      }nt        j                  |||«      }|j                  |«       t        j                  |t        d«      |«      }t        j                  | j
                  |j                  <   t        j                  |t        d«      |«      }	t        j                  t        «      }
t        j                   j#                  |
«      }|| j
                  |	j                  <   t        j$                  d|
|«      }t        j                  ||	|«      }|j                  |«       t         j&                  j)                  |	||gd|«      }|j+                  | j,                  t        j                  t        j                  gi «      | j.                  |<   t        j                  |||«      }|j                  |«       |S )Nr   Ústencil_const_varræ   Úcompute_last_ind_varr    r   )r   rŠ   r   r   rˆ   r'   r3   r?   ÚnumbersÚNumberrE   rX   r@   r;   Únjitr    rÌ   Ú
DispatcherrÈ   rG   r1   Úget_call_typer*   r(   )r-   r   Ú
end_lengthrl   rS   rT   ræ   r   Úconst_assignÚg_varÚ
check_funcÚfunc_typÚg_objÚg_assignÚ
index_callÚindex_assigns                   r   r¶   z!StencilPass._get_stencil_last_indõ  sµ  € àˆØ˜‹?ô Ÿ&™& ¬Ð6IÓ(JØHKóMˆKä-2¯Z©ZˆD�L‰L˜×)Ñ)Ñ*Ü˜*¤g§n¡nÔ5Ü!Ÿy™y¬¯©°*¸cÓ)BØ8CÀSó J‘ô  "Ÿy™y¨°[À#ÓF�à×Ñ˜\Ô*Ü—v‘v˜e¤]°:Ó%>ÀÓDˆHÜ*/¯*©*ˆD�L‰L˜Ÿ™Ñ'ä—F‘F˜5¤-Ð0FÓ"GÈÓMˆEÜŸ™Ô$5Ó6ˆJÜ—‘×1Ñ1°*Ó=ˆHØ'/ˆD�L‰L˜Ÿ™Ñ$Ü—I‘IÐ1°:¸sÓCˆEÜ—y‘y ¨¨sÓ3ˆHØ×Ñ˜XÔ&ÜŸ™Ÿ™ e¨h¸Ð-DÀbÈ#ÓNˆJØ)1×)?Ñ)?Ø—‘¤§¡¬U¯Z©ZÐ 8¸"ó*>ˆD�N‰N˜:Ñ&äŸ9™9 Z°¸3Ó?ˆLØ×Ñ˜\Ô*àˆr!   c           	      óØ  — t        |t        «      rt        t        |d«      «      S d„ }t	        |i | j
                  | j                  t        j                  f| j                  | j                  «      }t        |j                  «      dk(  sJ ‚|j                  j                  «       d   }t        ||g«       ||j                  d d z  }|j                  d   j                   j                   }|S )Nr   c                 ó,   — t        t        | d«      «      S r   )ÚabsÚmin)Ús_lengths    r   Úget_start_indz9StencilPass._get_stencil_start_ind.<locals>.get_start_ind  s   € Ü”s˜8 QÓ'Ó(Ð(r!   r9   éþÿÿÿ)r?   r‰   r   r!  r   r*   r+   r   rˆ   r'   r(   rM   r=   Úpopitemr   rD   rF   )	r-   Ústart_lengthrl   rS   rT   r#  Úf_irra   Úret_vars	            r   r·   z"StencilPass._get_stencil_start_ind  sÁ   € Ü�l¤CÔ(Ü”s˜<¨Ó+Ó,Ð,ò	)ä" =°"°d·n±nØ#'§>¡>´E·J±J°=À$Ç,Á,Ø#'§>¡>ó3ˆô �4—;‘;Ó 1Ò$Ð$Ð$Ø—‘×#Ñ#Ó% aÑ(ˆÜ˜% , Ô0Ø�U—Z‘Z  �_Ñ$ˆ	Ø—*‘*˜R‘.×&Ñ&×,Ñ,ˆØˆr!   c                 óÐ  — |j                   }|d   }|D �	cg c]  }	|	j                  ‘Œ }
}	d|j                  v rC|j                  d   D ]  }	|	|vsŒt        d«      ‚ |j                  d   D �	cg c]  }	||	   ‘Œ	 }}	ng }|j                  |v rt        d«      ‚| j                  |j                     j
                  }|j                  }|j                  }|j                  du }|r|dgz  }|dgz  }n8|j                  D �	cg c]  }	|	d   ‘Œ	 }}	|j                  D �	cg c]  }	|	d   ‘Œ	 }}	t        j                  |«      }d}|j                  «       D �]à  \  }}g }|j                  D �]Á  }t        |t        j                  «      r^t        |j                   t        j"                  «      r:|j                   j$                  dv r"|j                   j                   j                  |
v sLt        |t        j&                  «      st        |t        j(                  «      r#|j*                  j                  |
v rt        d	«      ‚t        |t        j                  «      �rÃt        |j                   t        j"                  «      �rž|j                   j$                  d
v �r…|j                   j                   j                  |
v �rb|j                   j                   j                  |v�r?|j                   j,                  }|dk(  r|g}n)t/        |d«      r|j                  |v r||j                     }t        j0                  |«      |_        |D �cg c]  }t5        || j6                  |«      ‘Œ }}|r| j9                  |t;        |«      |||«      }|rƒt        |t        j<                  «      s(t?        |D �cg c]  }t        |t@        «       ‘Œ c}«      rt        d«      ‚t;        tC        tD        ||«      «      }t;        tC        tF        ||«      «      }d}| j9                  |t;        |«      |||«      }|dk(  r|d   }n­t        j<                  |tI        d«      |«      }tJ        jL                  jO                  tJ        jP                  |«      | j                  |j                  <   t        j"                  jS                  ||«      }t        j                  |||«      }|jU                  |«       tW        |D �cg c],  }| j                  |j                     tJ        jP                  k(  ‘Œ. c}«      r8| j                  |j                   j                   j                     jX                  }n-| j                  |j                   j                   j                     }t        j"                  j[                  |j                   j                   ||«      }t]        || j                  |j                   j                   j                     | j                  |j                     «      | j^                  |<   ||_        |jU                  |«       �ŒÄ ||_        �Œã |r|st        d«      ‚||fS c c}	w c c}	w c c}	w c c}	w c c}w c c}w c c}w )zÄ Convert relative indexing in the stencil kernel to standard indexing
            by adding the loop index variables to the corresponding dimensions
            of the array index tuples.
        r   Ú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.Nr9   F)ÚsetitemÚstatic_setitemz?Assignments to arrays passed to stencil kernels is not allowed.)Ústatic_getitemÚgetitemr3   z<Variable stencil index only possible with known neighborhoodTz$parfor_index_ind_varz=Stencil kernel with no accesses to relatively indexed arrays.)0r=   r3   rU   r   r'   r²   rS   rT   Úneighborhoodr   Úget_tuple_tabler>   rD   r?   r   rE   rF   rG   rH   r�   rÑ   rW   ÚindexÚhasattrÚbuild_definitionsÚ_definitionsÚ_get_const_index_exprr&   Ú_add_index_offsetsrB   rŠ   Úanyr‰   Úmapr!  r»   r   r   rŒ   r�   rˆ   rŽ   r@   Úallr‘   r.  r   r(   ) r-   ri   rÝ   rd   r8   rÖ   rk   r×   rØ   ÚxÚin_arg_namesÚstandard_indexedr¥   rS   rT   Úneed_to_calc_kernelrß   rà   Útuple_tableÚfound_relative_indexr`   ra   ru   rb   Ú
index_listÚvÚ
index_varsÚind_varr¢   r£   Úgetitem_return_typÚgetitem_calls                                    r   r³   z%StencilPass._replace_stencil_accesses&  sØ  € ð $×*Ñ*ˆØ˜‘ˆØ(/Ö0 1˜Ÿ›Ð0ˆÐ0à ,×"6Ñ"6Ñ6Ø!×)Ñ)Ð*=Ñ>ò H�Ø˜OÒ+Ü)ð +Gó Hð HðHð &2×%9Ñ%9Ð:MÑ%Nö P°q °Ó 2ð  PÐñ  Pð  "Ðà�;‰;Ð*Ñ*Ü!ð #.ó /ð /ð —‘˜VŸ[™[Ñ)×.Ñ.ˆØ—‘ˆØ�j‰jˆà*×7Ñ7¸4Ð?Ðñ Ø! 1 #™IˆMØ  ™)‰Kà+7×+DÑ+DÖE a˜Q˜q›TÐEˆMÐEØ+7×+DÑ+DÖE a˜Q˜q›TÐEˆKÐEô ×.Ñ.¨~Ó>ˆà$Ðð +×0Ñ0Ó2ó Y	"‰LˆE�5ØˆHàŸ
™
ó U&�ä ¤b§i¡iÔ0Ü& t§z¡z´2·7±7Ô;Ø ŸJ™JŸM™MÐ-JÑJØ ŸJ™J×,Ñ,×1Ñ1°\ÑAÜ ¤b§j¡jÔ1Ü ¤b×&6Ñ&6Ô7Ø ŸK™K×,Ñ,°Ñ<Ü)ð +Ló Mð Mô ˜t¤R§Y¡YÕ/Ü& t§z¡z´2·7±7Õ;Ø ŸJ™JŸM™MÐ-JÒJØ ŸJ™J×,Ñ,×1Ñ1°\ÒAØ ŸJ™J×,Ñ,×1Ñ1Ð9IÒIØ!%§¡×!1Ñ!1�Jà ’zØ&0 \™
ä" :¨vÔ6¸:¿?¹?ÈkÑ;YØ)4°Z·_±_Ñ)E˜Jô /7×.HÑ.HÈÓ.X�JÔ+à>Hö"JØ9:ô #8Ø" D§L¡L°!õ#5ð "J�Jð "Já$Ø%)×%<Ñ%<¸ZÜ$(¨Ó$7¸À5È#ó&O˜
ñ +ô ' z´2·6±6Ô:ÜÀÖ L¸A¤Z°´3Ó%7Ò!7Ò LÔMÜ"1ð 3Aó #Bð Bô )-¬S´°mØDNó.Pó )Q˜ä&*¬3¬s°KÀÓ+LÓ&M˜Ø/3Ð,ð "&×!8Ñ!8¸Ü $ ZÓ 0°(¸EÀ3ó"H�Jð  ’zØ",¨Q¡-™ä"$§&¡&¨´Ø3ó15Ø69ó#;˜ä5:×5EÑ5E×5NÑ5NÜ!ŸJ™J¨ó6/˜Ÿ™ W§\¡\Ñ2ä%'§W¡W×%8Ñ%8¸ÀSÓ%I˜
Ü')§y¡y°¸WÀcÓ'J˜Ø Ÿ™¨Ô5ô ØAKöMØ<=ð !ŸL™L¨¯©Ñ0´E·J±JÓ>ò Mô Nà-1¯\©\Ø48·J±J×4DÑ4D×4IÑ4Iñ.KßKPÉ5ñ +ð .2¯\©\¸$¿*¹*×:JÑ:J×:OÑ:OÑ-PÐ*ä#%§7¡7§?¡?°4·:±:×3CÑ3CÀWØLOó$Q�Lä3<Ø*ØŸ™ T§Z¡Z×%5Ñ%5×%:Ñ%:Ñ;ØŸ™ W§\¡\Ñ2ó44�D—N‘N <Ñ0ð ".�D”Jà—‘ Ö%ðkU&ðl "ˆEŽJðsY	"ñt Ñ';Ü!ð #?ó @ð @ð ˜kÐ)Ð)ùòO 1ùò Pùò0 FùÚEùòV"Jùò !Mùò4Ms)   –YÁ-Y
Ã=YÄYÌ;YÎ YÓ1Y#c           	      ó  — t        |«      t        |«      k(  sJ ‚t        ||z   D �cg c]  }t        |t        «      ‘Œ c}«      rt	        t        t        ||«      «      S g }g }t        t        |«      «      D �]}  }	||	   }
t        |
t        «      r†t        j                  |t        d«      |«      }
t        j                  | j                  |
j                  <   t        j                  t        j                   ||	   |«      |
|«      }|j#                  |«       ||	   }t        |t        «      r†t        j                  |t        d«      |«      }t        j                  | j                  |j                  <   t        j                  t        j                   ||	   |«      ||«      }|j#                  |«       t        |
t$        «      s;t        | j                  |
j                     t        j&                  j(                  «      rT| j                  |j                     t        j                  k(  sJ ‚| j+                  |
||||«      }|j#                  |«       �ŒÙt        |t$        «      s;t        | j                  |j                     t        j&                  j(                  «      rT| j                  |
j                     t        j                  k(  sJ ‚| j+                  ||
|||«      }|j#                  |«       �Œxt        j                  |t        d«      |«      }t        j                  | j                  |j                  <   t        j,                  j/                  t0        j                  |
||«      }| j2                  j5                  t0        j                  t        j                  t        j                  fi «      | j6                  |<   t        j                  |||«      }|j#                  |«       |j#                  |«       �Œ€ |j9                  |«       |S c c}w )zw Does the actual work of adding loop index variables to the
            relative index constants or variables.
        Úold_index_varÚ
offset_varÚoffset_stencil_index)rM   r9  r?   r‰   rB   r8  r   rL   r   rŠ   r   r   rˆ   r'   r3   rE   rX   r@   r‚   rÆ   Ú	SliceTypeÚ_add_offset_to_slicerG   ÚbinopÚoperatorr*   r‡   r(   r¿   )r-   r@  r8   ru   rS   rT   rA  Ú	out_nodesrB  r5   rG  r  rH  Ú	index_varr  r  s                   r   r6  zStencilPass._add_index_offsets·  s4  € ô
 �:‹¤# mÓ"4Ò4Ð4Ð4ô ¨J°}Ñ,DÖE q”
˜1œcÕ"ÒEÔFäœœC ¨]Ó;Ó<Ð<àˆ	Øˆ
Ü”s˜:“Ó'ó 1	)ˆAà& q™MˆMÜ˜-¬Ô-Ü "§¡ uÜ -¨oÓ >Àó!E�ä38·:±:�—‘˜]×/Ñ/Ñ0Ü!Ÿy™y¬¯©°*¸Q±-ÀÓ)EØ4AÀ3ó H�à× Ñ  Ô.à& qÑ)ˆJÜ˜*¤cÔ*ÜŸV™V EÜ -¨lÓ ;¸SóB�
ä05·
±
�—‘˜ZŸ_™_Ñ-Ü!Ÿy™y¬¯©°-ÀÑ2BÀCÓ)HØ0:¸Có A�à× Ñ  Ô.ä˜=¬%Ô0Ü! $§,¡,¨}×/AÑ/AÑ"BÜ$)§J¡J×$8Ñ$8ô:ð —|‘| J§O¡OÑ4¼¿
¹
ÒBÐBÐBØ ×5Ñ5°mÀZØ8AÀ5È#óO�	à×!Ñ! )Ô,Ùä˜:¤uÔ-Ü! $§,¡,¨z¯©Ñ"?Ü$)§J¡J×$8Ñ$8ô:ð —|‘| M×$6Ñ$6Ñ7¼5¿:¹:ÒEÐEÐEØ ×5Ñ5°jÀ-Ø8AÀ5È#óO�	à×!Ñ! )Ô,ÙäŸ™˜uÜ)Ð*@ÓAÀ3óHˆIä+0¯:©:ˆD�L‰L˜Ÿ™Ñ(ÜŸ™Ÿ™¤x§|¡|°]Ø0:¸CóAˆJà)-¯©×)MÑ)MÜ)1¯©¼¿
¹
ÄEÇJÁJÐ7OÐQSó*UˆD�N‰N˜:Ñ&äŸ9™9 Z°¸CÓ@ˆLØ×Ñ˜\Ô*Ø×Ñ˜iÖ(ðc1	)ðf 	�‰˜	Ô"ØÐùòu Fs   ¦P
c           	      óÂ  — t        |t        «      rOdj                  |j                  |j                  «      }i }t        |i |«       |d   }|g}t        j                  f}	n2d„ }||g}| j                  |j                     }
|
t        j                  f}	| j                  j                  j                  j                  }t        ||| j                  | j                   |	| j                  | j"                  «      }|j$                  j'                  «       \  }}t)        ||«       |j*                  d   j,                  j,                  }|j/                  |j*                  d d «       |S )NzRdef f(offset):
                return slice({} + offset, {} + offset)
            Úfc                 óN   — t        | j                  |z   | j                  |z   «      S r%   )r‚   ÚstartÚstop)Ú	old_sliceÚoffsets     r   rQ  z+StencilPass._add_offset_to_slice.<locals>.f  s!   € Ü˜YŸ_™_¨vÑ5°y·~±~ÈÑ7NÓOÐOr!   r$  )r?   r‚   ÚformatrS  rT  Úexecr   rˆ   r'   r3   r&   Úfunc_idrI   Ú__globals__r   r*   r+   r(   r=   r%  r   rD   rF   r¿   )r-   rÿ   rH  rN  rS   rT   Úf_textrQ  rN   Úarg_typsÚ
slice_typeÚ_globalsr'  rZ   ra   Ú	new_indexs                   r   rK  z StencilPass._add_offset_to_sliceû  s$  € ä�i¤Ô'ðç‘�y—‘¨	¯©Ó7ð ð ˆCÜ�˜˜SÔ!Ø�C‘ˆAØ�<ˆDÜŸ
™
�}‰HòPà˜zÐ*ˆDØŸ™ i§n¡nÑ5ˆJØ"¤E§J¡JÐ0ˆHØ—<‘<×'Ñ'×,Ñ,×8Ñ8ˆÜ" 1 h°·±ÀÇÁØ#+¨T¯\©\¸4¿>¹>óKˆà—;‘;×&Ñ&Ó(‰ˆˆ5Ü˜% Ô&Ø—J‘J˜r‘N×(Ñ(×.Ñ.ˆ	Ø×Ñ˜Ÿ™ C R˜Ô)ØÐr!   N)rË   Ú
__module__Ú__qualname__r.   rm   rw   rV   r¶   r·   r³   r6  rK  r   r!   r   r#   r#   !   s7   „ òò<7ò|"ò2pòd òDòO*òbBóHr!   r#   c           
      ó
  — ddl m} ddlm}	 ddlm}
 ddlm} | j                  j                  «       }t        j                  |j                  «      }||_        t        j                  |j                  «      }d|v rt        d«      ‚ddlm}	 |	j                  }t!        ||||«      }t"        j$                  j'                  d|j(                  «        ||j(                  j*                  |j(                  j,                  |j(                  j.                  |j(                  j0                  d	«      \  |j(                  _        |j(                  _        |j(                  _        }|
j9                  |j(                  j.                  |j(                  j2                  |j(                  j6                  d
d	|j(                  j0                  |j(                  j4                  t:        j<                  ¬«       t        j>                  |t        j@                  «       «      }tC        |jE                  «       «      }tG        |jE                  «       «      }t        jH                  jK                  |«       t:        jL                  dk\  r tO        d«       t        jP                  |«       i }|j(                  j2                  jS                  «       D ]9  \  }}tU        jV                  |tY        |«      |«      }|||<   |||jZ                  <   Œ; t        j\                  ||«       t:        jL                  dk\  r tO        d«       t        jP                  |«       |j(                  j6                  jS                  «       D ]
  \  }}|||<   Œ i }|j_                  «       D �]  }|j`                  D ]ú  }tc        |tT        jd                  «      sŒtc        |jf                  tT        jh                  «      sŒCt:        jL                  dk\  rMtO        d||jf                  jj                  |jf                  jZ                  |jf                  jj                  |v «       ||jf                  jj                     jZ                  ||jf                  jZ                  <   ||jf                  jj                     |_3        Œü �Œ t:        jL                  dk\  r,tO        d|«       tO        d«       t        jP                  |«       t        jl                  |«       ||_        || jo                  |«      d   |fS )z'get typed IR from stencil bytecode
    r   )Ú
CPUContext)Ú
cpu_target)Útype_annotations)Útype_inference_stager7   z6Cannot use the reserved word 'out' in stencil kernels.zbefore-inferenceNr   )r&   r'   r(   ÚliftedÚlifted_fromrN   rÕ   Úhtml_outputr9   zInitial stencil_blockszAfter replace_varsrc   rk   zAfter replace arg with arr)8Únumba.core.cpurc  Únumba.core.registryrd  Únumba.core.annotationsre  Únumba.core.typed_passesrf  Ú	kernel_irÚcopyÚdeepcopyr=   r   r®   r   Útarget_contextÚDummyPipeliner   Úrewrite_registryÚapplyÚstater*   r+   r&   rN   r'   rÕ   r(   ÚTypeAnnotationr   ÚHTMLÚadd_offset_to_labelsÚ
next_labelr!  r¼   r»   Ú_the_max_labelÚupdaterª   r«   r¬   r>   r   rŠ   r   r3   Úreplace_varsÚvaluesrD   r?   rE   rF   ÚArgr1  Úremove_delsÚget_return_type)rh   r*   rN   rS   rT   rc   r'   r(   rc  rd  re  rf  Ústencil_func_irr×   rÜ   r+   ÚtprZ   Ú	min_labelÚ	max_labelÚvar_dictrA  ÚtypÚnew_varr1   Úcall_typrk   ra   rb   s                                r   rR   rR     sà  € õ *Ý.Ý7Ý<ð —l‘l×'Ñ'Ó)€Oä—]‘] ?×#9Ñ#9Ó:€NØ+€OÔä×0Ñ0°×1GÑ1GÓH€NØ�ÑÜð )ó *ð 	*õ /Ø×)Ñ)€Iä	�y )¨T°?Ó	C€Bä×Ñ×#Ñ#Ð$6¸¿¹ÔAáDXØ
�‰×Ñ˜BŸH™H×.Ñ.°·±×0@Ñ0@Ø
�‰�‰�tóEÑA€B‡H�HÔ�b—h‘hÔ*¨B¯H©HÔ,>Àð ×#Ñ#Ø—‘× Ñ Ø—‘× Ñ Ø—(‘(×$Ñ$ØØØ�X‰X�]‰]Ø—H‘H×(Ñ(Ü—K‘Kð $ô !ô ×2Ñ2°>Ü8@×8KÑ8KÓ8MóO€Nä�N×'Ñ'Ó)Ó*€IÜ�N×'Ñ'Ó)Ó*€IÜ×Ñ×"Ñ" 9Ô-ä×Ñ Ò"ÜÐ&Ô'Ü×Ñ˜^Ô,ð €HØ—(‘(×"Ñ"×(Ñ(Ó*ò $‰ˆˆ3Ü—&‘&˜¤¨aÓ 0°#Ó6ˆØˆ�‰Ø #ˆ�—‘Òð$ô ×Ñ˜.¨(Ô3ä×Ñ Ò"ÜÐ"Ô#Ü×Ñ˜^Ô,ð Ÿ(™(×,Ñ,×2Ñ2Ó4ò #‰ˆˆhØ"ˆ	�$Šð#ð €Oà×&Ñ&Ó(ó :ˆØ—J‘Jò 	:ˆDÜ˜$¤§	¡	Õ*¬z¸$¿*¹*ÄbÇfÁfÕ/MÜ×)Ñ)¨QÒ.Ü˜,¨
°D·J±J×4DÑ4DØ#Ÿz™zŸ™°·
±
×0@Ñ0@ÀJÐ0NôPà3=¸d¿j¹j×>NÑ>NÑ3O×3TÑ3T� §
¡
§¡Ñ0Ø'¨¯
©
×(8Ñ(8Ñ9�•
ò	:ð:ô ×Ñ Ò"ÜÐ Ô1ÜÐ*Ô+Ü×Ñ˜^Ô,ä×Ñ˜Ô(Ø+€OÔØ˜B×.Ñ.¨tÓ4°QÑ7¸ÐHÐHr!   c                   ó   — e Zd Zd„ Zy)rr  c                 ó  — ddl m}  |«       | _        || j                  _        || j                  _        || j                  _        || j                  _        d | j                  _        d | j                  _        d | j                  _	        y )Nr   )Ú	StateDict)
Únumba.core.compilerr‹  ru  r*   r+   rN   r&   r'   rÕ   r(   )r-   r*   r+   rN   r'  r‹  s         r   r.   zDummyPipeline.__init__o  sa   € Ý1Ù“[ˆŒ
Ø(ˆ�
‰
ÔØ(ˆ�
‰
ÔØˆ�
‰
ŒØ!ˆ�
‰
ÔØ!ˆ�
‰
ÔØ!%ˆ�
‰
ÔØ#ˆ�
‰
Õr!   N)rË   r`  ra  r.   r   r!   r   rr  rr  n  s   „ ó	$r!   rr  c                 ó2   — t        t        | ||«      }|�|S |S )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)ri   r&   rO  Ú	const_vals       r   r5  r5  {  s*   € ô Ü# Z°¸)óE€IàÐØÐØÐr!   c                 ó  — t        t        |t        j                  «      «       t	        t
        | ||«      }|�|S t        j                  | |«      }t	        t        | ||«      }|�|S t	        t        | ||«      }|�|S t        ‚)zWinner 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   )ri   r&   rO  Ú	var_constÚ	index_defs        r   rŽ  rŽ  ‡  s‹   € ô ŒJ�y¤"§&¡&Ó)Ô*äÔ)¨:°wÀ	ÓJ€IØÐØÐä×'Ñ'¨
°IÓ>€IäÜ˜z¨7°Ió?€IàÐØÐäÜ 
¨G°Yó@€IàÐØÐÜ
Ðr!   c                 ób   — t        t        | |«      }|�|S t        t        ||«      }|�|S t        ‚)zWget constant in either of two IRs if available
    otherwise, throw GuardException
    )r   r   r   )Úir1Úir2Úvarr•  s       r   r‘  r‘  ž  s>   € ô ”j # sÓ+€IØÐØÐÜ”j # sÓ+€IØÐØÐÜ
Ðr!   c                 óø   — t        t        |t        j                  «      xr |j                  dk(  «       |j
                  }t        | ||«      }t        |j                     }t        dj                  ||«      «      S )zQevaluate constant unary expr if possible
    otherwise, raise GuardException
    Úunaryz{}{})r   r?   r   rG   rH   rF   rŽ  r   ÚfnÚevalrW  )ri   r&   r–  Ú	inner_varr�  rH   s         r   r“  r“  ª  s`   € ô ŒJ�y¤"§'¡'Ó*ÒF¨y¯|©|¸wÑ/FÔGØ—‘€Iä+¨J¸ÀÓK€IÜ	˜yŸ|™|Ñ	,€BÜ�—‘˜b )Ó,Ó-Ð-r!   c                 ó$  — t        t        |t        j                  «      xr |j                  dk(  «       t        | ||j                  «      }t        | ||j                  «      }t        |j                     }t        dj                  |||«      «      S )zRevaluate constant binary expr if possible
    otherwise, raise GuardException
    rL  z{}{}{})r   r?   r   rG   rH   rŽ  ÚlhsÚrhsr   r�  rž  rW  )ri   r&   r–  Úarg1Úarg2rH   s         r   r”  r”  µ  so   € ô ŒJ�y¤"§'¡'Ó*ÒF¨y¯|©|¸wÑ/FÔGÜ& z°7¸I¿M¹MÓJ€DÜ& z°7¸I¿M¹MÓJ€DÜ	˜yŸ|™|Ñ	,€BÜ�—‘  b¨$Ó/Ó0Ð0r!   )0r  ro  r   ÚpytypesrM  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#   rR   rr  r5  rŽ  r‘  r“  r”  r   r!   r   ú<module>r°     s‰   ðó Û Û Ý Û ã ã ß <Õ <ß FÝ 'ß %÷P÷ Põ Põ .Ý 2Ý "òôr�&ô ròhWIôr
$�Fô 
$ò
òò.
ò	.ó1r!   