ó
    „ñ:i®¯  ã                   ó.  • S SK r S SKrS SKrS SKJr  S SKrS SKrS SKr	S SK
JrJrJrJrJr  S SKJrJr  S SKJr  S SK
JrJr  S SKJrJrJrJrJrJrJrJrJr  S SK J!r!  S S	K"J#r#  S S
K$J%r%  S r& " S S\'5      r(S r) " S S\'5      r*S r+S r,S r-S r.S r/g)é    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                 ó   • US:”  a  X-
  $ U $ ©Nr   © )Údim_sizeÚindex_consts     Ú_/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/numba/stencils/stencilparfor.pyÚ_compute_last_indr       s   € Ø�QƒØÑ%Ð%àˆó    c                   óJ   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)ÚStencilPassé!   c                 óX   • Xl         X l        X0l        X@l        XPl        X`l        Xpl        g ©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                 ó¼  ^ • SSK Jn  [        T R                  R                  5      u  p#/ n0 nUR                  5        H5  u  pgU H*  n[        X�5      (       d  M  UR                  U5        X…U'   M,     M7     U(       d  gT R                  R                  R                  5        GH1  u  pš[        [        [        U
R                  5      5      5       GHÿ  u  p¼[        U[        R                  5      (       Ga  [        UR                  [        R                  5      (       Gaò  UR                  R                   S:X  Ga×  UR                  R"                  R$                  U;   Ga²  ['        UR                  R(                  5      n[+        [-        UR                  R.                  5      5       Vs0 s H  o»UR                  R.                  U   _M     nnUR                  R.                  n[1        U 4S jU 5       5      nU H-  n[        U[2        R4                  5      (       d  M$  [7        S5      e   UR9                  S5      nX\R                  R"                  R$                     n[;        UT R<                  UU
R>                  U
R@                  UT RB                  T RD                  5      u  nnnURF                  R9                  SS5      nT RI                  XŸUUUURJ                  UUU5	      nU
R                  SW U-   U
R                  US	-   S -   U
l        GMB  [        U[        R                  5      (       d  GMd  [        UR                  [        R                  5      (       d  GM�  UR                  R                   S:X  d  GM­  [M        [N        T R                  UR                  5      S
:X  d  GMÙ  [        RP                  " SUR@                  5      Ul        GM     GM4     gs  snf )zOFinds all calls to StencilFuncs in the IR and converts them to parfor.
        r   )ÚStencilFuncNÚcallc              3   óV   >#   • U  H  nTR                   UR                     v •  M      g 7fr&   )r(   Úname)Ú.0Úir.   s     €r   Ú	<genexpr>Ú"StencilPass.run.<locals>.<genexpr>L   s   øé € Ð'NÂgÀ¨¯©°Q·V±VÖ(<Âgùs   ƒ&)zITuple parameters not supported for stencil kernels in parallel=True mode.ÚoutÚindex_offsetsé   )ÚstencilÚnumba))Únumba.stencils.stencilr2   r   r'   ÚblocksÚitemsÚ
isinstanceÚappendÚreversedÚlistÚ	enumerateÚbodyr   ÚAssignÚvalueÚExprÚopÚfuncr5   ÚdictÚkwsÚrangeÚlenÚargsÚtupler   Ú	BaseTupler   ÚgetÚget_stencil_irr+   ÚscopeÚlocr(   r)   ÚoptionsÚ_mk_stencil_parforÚtargetr   r   ÚConst)r.   r2   Ú
call_tableÚ_Ústencil_callsÚstencil_dictÚcall_varnameÚ	call_listÚone_callÚlabelÚblockr7   ÚstmtrN   Ú
input_dictÚin_argsÚarg_typemapÚarg_typeÚout_arrÚsfÚ
stencil_irÚrtÚarg_to_arr_dictr;   Ú	gen_nodess   `                        r   ÚrunÚStencilPass.run,   sÚ  ø€ õ 	7ô ' t§|¡|×':Ñ':Ó;‰ˆ
ØˆØˆØ'1×'7Ñ'7Ö'9Ñ#ˆLÛ%�Ü˜h×4Ó4à!×(Ñ(¨Ô6Ø19 Ó.ó	 &ñ (:ö Øð !ŸL™L×/Ñ/×5Ñ5×7‰LˆEÜ#¤D¬°5·:±:Ó)>Ó$?×@‘�ä˜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Ú4Oð => T§Z¡Z§_¡_°QÑ%7Ò"7Ù4Oð ð "Qà"Ÿj™jŸo™o�GÜ"'Ô'NÁgÓ'NÓ"N�KÛ$/˜Ü% h´·±×@Ó@Ü"1ð 3:ó #;ð ;ñ %0ð "Ÿg™g e›n�Gð &§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¸ÈØ&¨°t·{±{ÀBÈØ+ó!-�Ið "'§¡¨B¨Q °)Ñ!;¸e¿j¹jÈÈ1ÉÈÐ>NÑ!N�E—Jä  ¤r§y¡y×1Ô1Ü& t§z¡z´2·7±7×;Ô;Ø ŸJ™JŸM™M¨VÖ3Ü!¤-°·±¸t¿z¹zÓJØ';ö<ô "$§¢¨!¨T¯X©XÓ!6�D—JôQ Aò 8ùò"Qs   Æ(#Oc           	      ó®  • UR                  5        GH@  u  pEUR                  nUR                  n/ nUR                   GH	  n	[	        U	[
        R                  5      (       aÕ  UR                  5       n
[	        U
[
        R                  5      (       aC  [	        U
R                  [
        R                  5      (       a  U
R                  R                  S:X  d   eUR                  [
        R                  " U
R                  R                  X'5      5        UR                  [
        R                  " X75      5        Mø  UR                  U	5        GM     X…l        GMC     g)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)rA   rV   rW   rG   rB   r   ÚReturnÚpoprH   rI   rJ   rK   rC   ÚJump)r.   r@   Úexit_value_varÚparfor_body_exit_labelrc   rd   rV   rW   Únew_bodyre   Ú	prev_stmts              r   Úreplace_return_with_setitemÚ'StencilPass.replace_return_with_setitemj   så   € ð #ŸL™LŸN‰LˆEØ—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À^Ó$YÔZØ—O‘O¤B§G¢GÐ,BÓ$HÖIà—O‘O D×)ñ #ð "�Jò! +r!   c
                 ó*%  ^ ^^S^T• / n
UR                   n[        R                  S:¼  a&  [        SXTUXxU5        [        R
                  " U5        US   nT R                  UR                     n[        R                  " UT R                  5      u  pï[        R                  " U5      n[        R                  " UUUT R                  T R                  5        [        R                  S:¼  a!  [        S5        [        R
                  " U5        [        R                  " UT R                  R                  UT R                  5        [        R                  S:¼  a!  [        S5        [        R
                  " U5        T R                  UR                     R                  mSUR                   nUR"                  n/ n[%        TS5       H\  n[&        R(                  " U[+        S5      U5      n[,        R.                  T R                  UR                  '   UR1                  U5        M^     T R3                  UUX%UU	5      u  nn[        R                  S:¼  a9  [        S5        [        SU5        [        S	U5        [        R
                  " U5        / nT R4                  R7                  U5      nUR9                  U5      nTS[;        U5      :X  d   e/ n/ n[%        TS5       H•  nT R=                  UU   UU   U
UU5      nT R?                  UU   U
UU5      nUR1                  U5        UR1                  U5        UR1                  [@        RB                  RD                  RG                  UU   UUS5      5        M—     [I        URK                  5       5      S-   n[&        RL                  " UU5      UU'   [&        R(                  " U[+        S
5      U5      n URN                  T R                  U R                  '   / n!TSS:X  a  US   n"O¯[&        R(                  " U[+        S5      U5      n"[,        RP                  RS                  [,        R.                  TS5      T R                  U"R                  '   [&        RT                  RW                  UU5      n#[&        RX                  " U#U"U5      n$U!R1                  U$5        [        R                  S:¼  a!  [        S5        [        R
                  " U5        [&        RL                  " UU5      n%TGc—  T R                  UR                     n[        R*                  " S5      n&[&        R(                  " UU&U5      n'[&        RT                  R[                  USU5      n([,        RP                  RS                  [,        R.                  UR                  5      T R                  U&'   U%R\                  R_                  [&        RX                  " U(U'U5      /5        [        R*                  " S5      n)[&        R(                  " UU)U5      mTSUR`                  ;   av  UR`                  S   n*[b        Rd                  Re                  U*5      n+T Rf                  Ri                  U+URN                  5      (       d  [k        S5      eURO                  U*5      n,OURO                  S5      n,[&        Rl                  " U,U5      n-URN                  T R                  U)'   U%R\                  R_                  [&        RX                  " U-TTU5      /5        [        R*                  " S5      n.[&        R(                  " UU.U5      m[@        Rn                  R,                  Rp                  Rs                  URN                  UR                  URt                  5      T R                  TR                  '   [&        R(                  " U[+        S5      U5      n/[,        Rv                  Ry                  [z        5      T R                  U/R                  '   [&        R|                  " S[z        U5      n0[&        RX                  " U0U/U5      n1U%R\                  R1                  U15        [~        R€                  " URN                  5      R‚                  R„                  n2U2S:X  a  Sn2[&        RT                  R[                  U/U2U5      n3[&        R(                  " U[+        S5      U5      n4[,        R†                  R‰                  URN                  5      T R                  U4R                  '   [&        RX                  " U3U4U5      n5U%R\                  R1                  U55        [        RŠ                  " S[z        RŒ                  TU'U4/T Rf                  T R                  T R                  5      n6[&        R(                  " U[+        S5      U5      n7[&        RX                  " [&        Rl                  " SU5      U7U5      n8U6R1                  U85        [,        RŽ                  T R                  U7R                  '   [&        R(                  " U[+        S5      U5      n9[&        RX                  " [&        Rl                  " SU5      U9U5      n:U6R1                  U:5        [,        R.                  T R                  U9R                  '   [&        R(                  " U[+        S5      U5      n;T Rf                  R‘                  [’        5      n<U<T R                  U;R                  '   [&        R|                  " S[’        U5      n=[&        RX                  " U=U;U5      n>U6R1                  U>5        T Rf                  R•                  U<[,        RŽ                  4S-  0 5      n?[&        RT                  R—                  U;U7U74SUS 9n@U?T R                  U@'   [&        R(                  " U[+        S!5      U5      nA[,        R˜                  T R                  UAR                  '   [&        RX                  " U@UAU5      n>U6R1                  U>5        USUU UT4S" jnB[%        UR                  5       HH  nCWA/UR                  -  nDUA/UR                  -  nEWB" U<UCUUU;U6UUDU9S#5
        UB" U<UCUUU;U6UUEUUC   S$5
        MJ     UR›                  TU5        U%R\                  R_                  U65        GONSUR`                  ;   Ga=  UR`                  S   n*[b        Rd                  Re                  U*5      n+T Rf                  Ri                  U+URN                  5      (       d  SnF[k        UF5      e[&        R(                  " U[+        S%5      U5      nAT Rf                  R‘                  [’        5      n<U<T R                  UAR                  '   [&        R|                  " S[’        U5      n=[&        RX                  " U=UAU5      nGU%R\                  R1                  UG5        T Rf                  R•                  U<[,        RŽ                  4S-  0 5      n?[&        RT                  R—                  UASSUS 9nHU?T R                  UH'   [&        R(                  " U[+        S&5      U5      nI[,        R˜                  T R                  UIR                  '   [&        RX                  " UHUIU5      n>U%R\                  R1                  U>5        [&        Rl                  " URO                  U*5      U5      nJ[&        R(                  " U[+        S'5      U5      nKURN                  T R                  UKR                  '   [&        RX                  " UJUKU5      nLU%R\                  R1                  UL5        [&        Rœ                  " T[“        SS5      UIUKU5      nMU%R\                  R1                  UM5        [Ÿ        [,        RŽ                  T R                  TR                     T R                  UIR                     T R                  TR                     RN                  5      n?U?T R                  UM'   T R¡                  UU U5        [        R                  S:¼  a!  [        S(5        [        R
                  " U5        [&        R¢                  " TU"U U5      nN[Ÿ        [,        RŽ                  T R                  TR                     T R                  U"R                     T R                  TR                     RN                  5      T R                  UN'   UU   R\                  R_                  U!5        UU   R\                  R1                  UN5        [&        R¤                  " S)S*5      nO[&        R(                  " U[+        S'5      UO5      nP[&        RX                  " [&        Rl                  " SUOS+9UPUO5      nLUU   R\                  R1                  UL5        UU   R\                  R1                  [&        R¦                  " UPUO5      5        [        R¨                  " U5      nU[I        URK                  5       5         R\                  R«                  5         [        R                  S:¼  a!  [        S,5        [        R
                  " U5        S-UU/4nQ[@        RB                  RD                  R­                  UU%UUU"UUQT R®                  5      nRU
R1                  UR5        U
R1                  [&        RX                  " TUU5      5        U
$ ).z=Converts a set of stencil kernel blocks to a parfor.
        r<   rY   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   ©rL   rQ   rN   rW   ú$slicec
                 ó  >• TR                   R                  U [        R                  4S-  0 5      n
Xa   n[	        U[
        [        R                  45      (       d   e[        R                  " U[        S5      U5      n[        R                  TR                  UR                  '   [	        U[
        5      (       a,  [        R                  " [        R                  " X³5      XÃ5      nO[        R                  " X¼U5      nUR                  U5        [        R                  R                  UU	(       a  XŒ4OXÈ4SUS9nU
TR                   U'   [        R                  " U[        S5      U5      n[        R"                  TR                  UR                  '   [        R                  " XïU5      nUR                  U5        X÷U'   [        R                  " U[        S5      U5      n[        R$                  R'                  [        R"                  T5      TR                  UR                  '   [        R                  R)                  Xs5      n[        R                  " UUU5      nUR                  U5        [        R*                  " TUTU5      n[-        [        R.                  TR                  TR                     TR                  UR                     TR                  TR                     R0                  5      TR                   U'   UR                  U5        g )Nrˆ   z$border_indr   r‰   rŠ   z$border_index_tuple_var)r+   Úresolve_function_typer   ÚintprB   Úintr   ÚVarr   r(   r5   rH   r[   rC   rJ   r3   r)   Úslice2_typeÚ
containersÚUniTupleÚbuild_tupleÚSetItemr   ÚnoneÚdtype)Úslice_fn_tyÚdimrV   rW   Ú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Úndimsrj   r.   Úzero_vars                        €€€€r   Úhandle_borderÚ5StencilPass._mk_stencil_parfor.<locals>.handle_borderD  sH  ø€ ð —n‘n×:Ñ:ØÜ—Z‘Z�M AÑ%Øó�ð !Ñ%�Ü! "¤s¬B¯F©F m×4Ñ4Ð5Ð4ÜŸš ¤}°]Ó'CÀSÓI�Ü,1¯J©J�—‘˜VŸ[™[Ñ)Ü˜b¤#×&Ñ&Ü "§	¢	¬"¯(ª(°2Ó*;¸VÓ I‘Iä "§	¢	¨"°cÓ :�IØ—‘˜YÔ'ä!#§¡§¡Ø'Þ0;˜)Ñ,À&ÐATØØð	 ".ð "�ð
 25�—‘˜~Ñ.ä#%§6¢6¨%´¸xÓ1HÈ#Ó#NÐ Ü6;×6GÑ6G�—‘Ð-×2Ñ2Ñ3Ü!Ÿyšy¨È3ÓO�Ø—‘˜\Ô*à*: 3Ñ'Ü!#§¢¨¬}Ø-ó0/Ø03ó"5�ä49×4DÑ4D×4MÑ4MÜ×%Ñ% uó5.�—‘˜^×0Ñ0Ñ1äŸW™W×0Ñ0Ð1CÓ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éÿÿÿÿ)rW   z#stencil_blocks after adding SetItemr=   )Xr@   r   ÚDEBUG_ARRAY_OPTÚprintr   Údump_blocksr(   r5   Úcopy_propagateÚget_name_var_tableÚapply_copy_propagater)   Úremove_deadr'   Ú	arg_namesÚndimrV   rW   rO   r   r�   r   r   r�   rC   Ú_replace_stencil_accessesr*   Úget_equiv_setÚ	get_shaperP   Ú_get_stencil_last_indÚ_get_stencil_start_indr>   ÚparforsÚparforÚLoopNestÚmaxÚkeysÚBlockr–   r‘   r’   rJ   r“   rH   ÚgetattrrG   ÚextendrX   r   Útypeofr+   Úcan_convertr   r[   ÚcoreÚnpytypesÚArrayÚlayoutÚmiscÚModulerƒ   ÚGlobalr   Úas_dtypeÚtypeÚ__name__Ú	functionsÚNumberClassÚgen_np_callr†   r•   Úresolve_value_typer‡   rŒ   r3   r�   Úinsert_equivÚStaticSetItemr   r{   r”   ÚLocrt   Úsimplify_CFGru   ÚParforr-   )Ur.   rc   rg   rj   rl   r;   rZ   Úreturn_typeÚstencil_funcrn   ro   Ústencil_blocksÚin_arrÚ
in_arr_typÚin_cpsÚout_cpsÚname_var_tablerV   rW   Úparfor_varsr7   Ú
parfor_varÚstart_lengthsÚend_lengthsÚ	loopnestsÚ	equiv_setÚin_arr_dim_sizesÚ
start_indsÚ	last_indsÚlast_indÚ	start_indrx   rw   Ú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   rY   ÚStencilPass._mk_stencil_parforƒ   s¾  û€ ð
 ˆ	Ø#×*Ñ*ˆä×!Ñ! QÓ&ÜÐ&¨¸ÀØ¨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–ˆ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ñ ô "% ^×%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Ñ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+ð 5+ôp ˜ZŸ_™_Ö-�à%. K°*·/±/Ñ$AÐ!Ø$- ;°·±Ñ#@Ð á˜kØ!Ø#Ø!Ø,Ø#Ø(Ø/Ø,Ø"ô	$ñ ˜kØ!Ø#Ø!Ø,Ø#Ø'Ø.Ø.¨sÑ3Ø#ö	%ñ .ð8 ×"Ñ" 7Ð,<Ô=Ø�O‰O×"Ñ" 5Ö)à˜×-Ñ-Ô-Ø#×+Ñ+¨FÑ3�ä Ÿ-™-×.Ñ.¨tÓ4�Ø—~‘~×1Ñ1°'¸;×;LÑ;L×MÑ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                 ó¦  • UnUS:w  GaG  [         R                  " U[        S5      U5      n[        R                  U R
                  UR                  '   [        U[        R                  5      (       a,  [         R                  " [         R                  " X%5      Xu5      nO[         R                  " X'U5      nUR                  U5        [         R                  " U[        S5      U5      n[        R                  U R
                  UR                  '   [         R                  " U[        S5      U5      n	[        R                  " [        5      n
[        R                   R#                  U
5      nX°R
                  U	R                  '   [         R$                  " SX¥5      n[         R                  " XÉU5      nUR                  U5        [         R&                  R)                  X‘U/SU5      nUR+                  U R,                  [        R                  [        R                  /0 5      U R.                  U'   [         R                  " XæU5      nUR                  U5        U$ )Nr   Ústencil_const_varrì   Úcompute_last_ind_varr    r   )r   r�   r   r   r�   r(   r5   rB   ÚnumbersÚNumberrH   r[   rC   r>   Únjitr    rÒ   Ú
DispatcherrÎ   rJ   r3   Úget_call_typer+   r)   )r.   r   Ú
end_lengthro   rV   rW   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Ó(JØHKóMˆKä-2¯Z©ZˆD�L‰L˜×)Ñ)Ñ*Ü˜*¤g§n¡n×5Ñ5Ü!Ÿyšy¬¯ª°*Ó)BØ8Có 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Ø'/�L‰L˜Ÿ™Ñ$Ü—I’IÐ1°:ÓCˆEÜ—y’y ¨sÓ3ˆHØ×Ñ˜XÔ&ÜŸ™Ÿ™ e¸Ð-DÀbÈ#ÓNˆJØ)1×)?Ñ)?Ø—‘¤§¡¬U¯Z©ZÐ 8¸"ó*>ˆD�N‰N˜:Ñ&äŸ9š9 Z¸3Ó?ˆLØ×Ñ˜\Ô*àˆr!   c           	      óà  • [        U[        5      (       a  [        [        US5      5      $ S n[	        U0 U R
                  U R                  [        R                  4U R                  U R                  5      n[        UR                  5      S:X  d   eUR                  R                  5       S   n[        Xq/5        X'R                  S S -  nUR                  S   R                   R                   nU$ )Nr   c                 ó,   • [        [        U S5      5      $ r   )ÚabsÚmin)Ús_lengths    r   Úget_start_indÚ9StencilPass._get_stencil_start_ind.<locals>.get_start_ind  s   € Ü”s˜8 QÓ'Ó(Ð(r!   r<   éþÿÿÿ)rB   rŽ   r(  r)  r   r+   r,   r   r�   r(   r)   rP   r@   Úpopitemr   rG   rI   )	r.   Ústart_lengthro   rV   rW   r+  Úf_irrd   Úret_vars	            r   r½   Ú"StencilPass._get_stencil_start_ind  sÀ   € Ü�l¤C×(Ñ(Ü”s˜<¨Ó+Ó,Ð,ò	)ä" =°"°d·n±nØ#'§>¡>´E·J±J°=À$Ç,Á,Ø#'§>¡>ó3ˆô �4—;‘;Ó 1Ó$Ð$Ð$Ø—‘×#Ñ#Ó% aÑ(ˆÜ˜% Ô0Ø—Z‘Z  �_Ñ$ˆ	Ø—*‘*˜R‘.×&Ñ&×,Ñ,ˆØˆr!   c                 óÈ  • UR                   nUS   nU V	s/ s H  o™R                  PM     n
n	SUR                  ;   aH  UR                  S    H  n	X–;  d  M
  [        S5      e   UR                  S    V	s/ s H  o–U	   PM	     nn	O/ nUR                  U;   a  [        S5      eU R                  UR                     R
                  nUR                  nUR                  nUR                  SL nU(       a  US/-  nUS/-  nO<UR                   V	s/ s H  o™S   PM	     nn	UR                   V	s/ s H  o™S   PM	     nn	[        R                  " U5      nSnUR                  5        GH<  u  nn/ nUR                   GH  n[        U[        R                  5      (       ag  [        UR                   [        R"                  5      (       a>  UR                   R$                  S;   a$  UR                   R                   R                  U
;   dX  [        U[        R&                  5      (       d  [        U[        R(                  5      (       a%  UR*                  R                  U
;   a  [        S	5      e[        U[        R                  5      (       Gaý  [        UR                   [        R"                  5      (       GaÓ  UR                   R$                  S
;   Ga¸  UR                   R                   R                  U
;   Ga“  UR                   R                   R                  U;  Gan  UR                   R,                  nUS:X  a  U/nO0[/        US5      (       a  UR                  U;   a  UUR                     n[        R0                  " U5      Ul        U Vs/ s H  n[5        XR6                  U5      PM     nnU(       a  U R9                  U[;        U5      UXÞ5      nU(       a”  [        U[        R<                  5      (       d4  [?        U Vs/ s H  n[        U[@        5      (       + PM     sn5      (       a  [        S5      e[;        [C        [D        UU5      5      n[;        [C        [F        UU5      5      nSnU R9                  U[;        U5      UXÞ5      nUS:X  a  US   nO¯[        R<                  " U[I        S5      U5      n[J        RL                  RO                  [J        RP                  U5      U R                  UR                  '   [        R"                  RS                  UU5      n[        R                  " UUU5      nURU                  U5        [W        U Vs/ s H-  nU R                  UR                     [J        RP                  :H  PM/     sn5      (       a8  U R                  UR                   R                   R                     RX                  nO-U R                  UR                   R                   R                     n[        R"                  R[                  UR                   R                   UU5      n[]        UU R                  UR                   R                   R                     U R                  UR                     5      U R^                  U'   UUl        URU                  U5        GM     UUl        GM?     U(       a  U(       d  [        S5      eUU4$ s  sn	f s  sn	f s  sn	f s  sn	f s  snf s  snf s  snf )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.Nr<   F)ÚsetitemÚstatic_setitemz?Assignments to arrays passed to stencil kernels is not allowed.)Ústatic_getitemÚgetitemr5   z<Variable stencil index only possible with known neighborhoodTz$parfor_index_ind_varz=Stencil kernel with no accesses to relatively indexed arrays.)0r@   r5   rX   r   r(   r¸   rV   rW   Úneighborhoodr   Úget_tuple_tablerA   rG   rB   r   rH   rI   rJ   rK   r”   r×   rZ   ÚindexÚhasattrÚbuild_definitionsÚ_definitionsÚ_get_const_index_exprr'   Ú_add_index_offsetsrE   r�   ÚanyrŽ   Úmapr)  rÁ   r   r   r‘   r’   r�   r“   rC   Úallr–   r8  r   r)   ) r.   rl   rã   rg   r;   rÜ   rn   rÝ   rÞ   ÚxÚin_arg_namesÚstandard_indexedrª   rV   rW   Úneed_to_calc_kernelrå   ræ   Útuple_tableÚfound_relative_indexrc   rd   ry   re   Ú
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Ù%Nð ð  PÐð  "Ðà�;‰;Ð*Ó*Ü!ð #.ó /ð /ð —‘˜VŸ[™[Ñ)×.Ñ.ˆØ—‘ˆØ�j‰jˆà*×7Ñ7¸4Ð?Ðö Ø! 1 #™IˆMØ  ™)‰Kà+7×+DÒ+DÓEÒ+D a˜qœTÑ+DˆMÐEØ+7×+DÒ+DÓEÒ+D a˜qœTÑ+DˆKÐEô ×.Ò.¨~Ó>ˆà$Ðð +×0Ñ0×2‰LˆE�5ØˆHàŸ
�
�ä ¤b§i¡i×0Ñ0Ü& t§z¡z´2·7±7×;Ñ;Ø ŸJ™JŸM™MÐ-JÓJØ ŸJ™J×,Ñ,×1Ñ1°\ÓAÜ ¤b§j¡j×1Ñ1Ü ¤b×&6Ñ&6×7Ñ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Ñ6¸:¿?¹?ÈkÓ;YØ)4°Z·_±_Ñ)E˜Jô /7×.HÒ.HÈÓ.X�JÔ+á>Hó"JÚ>H¸ô #8Ø"§L¡L°!ö#5Ù>Hð ð "Jæ$Ø%)×%<Ñ%<¸ZÜ$(¨Ó$7¸À5ó&O˜
ö +ô ' z´2·6±6×:Ñ:ÜÁÓ LÂ¸A¤Z°´3Ó%7×!7ÁÑ L×MÑMÜ"1ð 3Aó #Bð Bô )-¬S´°mØDNó.Pó )Q˜ä&*¬3¬s°KÀÓ+LÓ&M˜Ø/3Ð,ð "&×!8Ñ!8¸Ü $ ZÓ 0°(¸Eó"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ÚAK¸Að !ŸL™L¨¯©Ñ0´E·J±JÔ>ÙAKñM÷ Nñ 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 #ðl "ˆE�Jñs 3öt Ö';Ü!ð #?ó @ð @ð ˜kÐ)Ð)ùòO 1ùò Pùò0 FùÚEùòV"Jùò !Mùò4Ms)   –[Á4[Ä[Ä+[Î [Ï8[Õ4[c           	      ól  • [        U5      [        U5      :X  d   e[        X-    Vs/ s H  n[        U[        5      PM     sn5      (       a  [	        [        [        X5      5      $ / n/ n[        [        U5      5       GHœ  n	X   n
[        U
[        5      (       a‡  [        R                  " U[        S5      U5      n
[        R                  U R                  U
R                  '   [        R                  " [        R                   " X   U5      X¥5      nUR#                  U5        X)   n[        U[        5      (       a‡  [        R                  " U[        S5      U5      n[        R                  U R                  UR                  '   [        R                  " [        R                   " X)   U5      XÅ5      nUR#                  U5        [        U
[$        5      (       d@  [        U R                  U
R                     [        R&                  R(                  5      (       aT  U R                  UR                     [        R                  :X  d   eU R+                  X¬XtU5      nUR#                  U5        GMí  [        U[$        5      (       d@  [        U R                  UR                     [        R&                  R(                  5      (       aT  U R                  U
R                     [        R                  :X  d   eU R+                  XÊXtU5      nUR#                  U5        GM–  [        R                  " U[        S5      U5      n[        R                  U R                  UR                  '   [        R,                  R/                  [0        R                  U
XÅ5      nU R2                  R5                  [0        R                  [        R                  [        R                  40 5      U R6                  U'   [        R                  " XíU5      nUR#                  U5        UR#                  U5        GMŸ     UR9                  U5        U$ s  snf )zbDoes the actual work of adding loop index variables to the
relative index constants or variables.
Úold_index_varÚ
offset_varÚoffset_stencil_index)rP   rC  rB   rŽ   rE   rB  r   rO   r   r�   r   r   r�   r(   r5   rH   r[   rC   r‡   rÌ   Ú	SliceTypeÚ_add_offset_to_slicerJ   ÚbinopÚoperatorr+   rŒ   r)   rÅ   )r.   rJ  r;   ry   rV   rW   rK  Ú	out_nodesrL  r7   rR  r  rS  Ú	index_varr#  r$  s                   r   r@  ÚStencilPass._add_index_offsets·  s2  € ô
 �:‹¤# mÓ"4Ó4Ð4Ð4ô ¨JÒ,DÓEÒ,D q”
˜1œcÖ"Ñ,DÑE×FÑFäœœC Ó;Ó<Ð<àˆ	Øˆ
Ü”s˜:“×'ˆAà&™MˆMÜ˜-¬×-Ñ-Ü "§¢ uÜ -¨oÓ >Àó!E�ä38·:±:�—‘˜]×/Ñ/Ñ0Ü!Ÿyšy¬¯ª°*±-ÀÓ)EØ4Aó H�à× Ñ  Ô.à&Ñ)ˆJÜ˜*¤c×*Ñ*ÜŸVšV EÜ -¨lÓ ;¸SóB�
ä05·
±
�—‘˜ZŸ_™_Ñ-Ü!Ÿyšy¬¯ª°-Ñ2BÀCÓ)HØ0:ó A�à× Ñ  Ô.ä˜=¬%×0Ñ0Ü! $§,¡,¨}×/AÑ/AÑ"BÜ$)§J¡J×$8Ñ$8÷:ñ :ð —|‘| J§O¡OÑ4¼¿
¹
ÓBÐBÐBØ ×5Ñ5°mØ8AÈ#óO�	à×!Ñ! )Ô,Úä˜:¤u×-Ñ-Ü! $§,¡,¨z¯©Ñ"?Ü$)§J¡J×$8Ñ$8÷:ñ :ð —|‘| M×$6Ñ$6Ñ7¼5¿:¹:ÓEÐEÐEØ ×5Ñ5°jØ8AÈ#óO�	à×!Ñ! )Ô,ÚäŸš˜uÜ)Ð*@ÓAÀ3óHˆIä+0¯:©:ˆD�L‰L˜Ÿ™Ñ(ÜŸ™Ÿ™¤x§|¡|°]Ø0:óAˆJà)-¯©×)MÑ)MÜ)1¯©¼¿
¹
ÄEÇJÁJÐ7OÐQSó*UˆD�N‰N˜:Ñ&äŸ9š9 Z¸CÓ@ˆLØ×Ñ˜\Ô*Ø×Ñ˜i×(ñc (ðf 	�‰˜	Ô"ØÐùòu Fs   ¦P1c           	      óÂ  • [        U[        5      (       aO  SR                  UR                  UR                  5      n0 n[        U0 U5        US   nU/n[        R                  4n	O1S nX/nU R                  UR                     n
U
[        R                  4n	U R                  R                  R                  R                  n[        X{U R                  U R                   X�R                  U R"                  5      nUR$                  R'                  5       u  pÞ[)        Xè5        UR*                  S   R,                  R,                  nUR/                  UR*                  S S 5        U$ )NzRdef f(offset):
                return slice({} + offset, {} + offset)
            Úfc                 óN   • [        U R                  U-   U R                  U-   5      $ r&   )r‡   ÚstartÚstop)Ú	old_sliceÚoffsets     r   r]  Ú+StencilPass._add_offset_to_slice.<locals>.f  s!   € Ü˜YŸ_™_¨vÑ5°y·~±~ÈÑ7NÓOÐOr!   r-  )rB   r‡   Úformatr_  r`  Úexecr   r�   r(   r5   r'   Úfunc_idrL   Ú__globals__r   r+   r,   r)   r@   r.  r   rG   rI   rÅ   )r.   r  rS  rY  rV   rW   Úf_textr]  rQ   Úarg_typsÚ
slice_typeÚ_globalsr0  r]   rd   Ú	new_indexs                   r   rV  Ú StencilPass._add_offset_to_sliceû  s  € ä�i¤×'Ñ'ðç‘�y—‘¨	¯©Ó7ð ð ˆCÜ�˜˜SÔ!Ø�C‘ˆAØ�<ˆDÜŸ
™
�}‰HòPàÐ*ˆDØŸ™ i§n¡nÑ5ˆJØ"¤E§J¡JÐ0ˆHØ—<‘<×'Ñ'×,Ñ,×8Ñ8ˆÜ" 1°·±ÀÇÁØ#+¯\©\¸4¿>¹>óKˆà—;‘;×&Ñ&Ó(‰ˆÜ˜%Ô&Ø—J‘J˜r‘N×(Ñ(×.Ñ.ˆ	Ø×Ñ˜Ÿ™ C R˜Ô)ØÐr!   )r*   r)   r-   r'   r,   r(   r+   N)rÑ   Ú
__module__Ú__qualname__Ú__firstlineno__r/   rp   r{   rY   r¼   r½   r¹   r@  rV  Ú__static_attributes__r   r!   r   r#   r#   !   s7   † òò<7ò|"ò2pòd òDòO*òbBõHr!   r#   c                 óJ
  • SSK Jn  SSKJn	  SSKJn
  SSKJn  U R                  R                  5       n[        R                  " UR                  5      nXÜl        [        R                  " UR                  5      nSU;   a  [        S5      eSSKJn	  U	R                  n[!        XX,5      n["        R$                  R'                  SUR(                  5        U" UR(                  R*                  UR(                  R,                  UR(                  R.                  UR(                  R0                  S	5      u  UR(                  l        UR(                  l        UR(                  l        nU
R9                  UR(                  R.                  UR(                  R2                  UR(                  R6                  S
S	UR(                  R0                  UR(                  R4                  [:        R<                  S9  [        R>                  " U[        R@                  " 5       5      n[C        URE                  5       5      n[G        URE                  5       5      n[        RH                  RK                  U5        [:        RL                  S:¼  a!  [O        S5        [        RP                  " U5        0 nUR(                  R2                  RS                  5        H;  u  nn[T        RV                  " U[Y        U5      U5      nUUU'   UUURZ                  '   M=     [        R\                  " UU5        [:        RL                  S:¼  a!  [O        S5        [        RP                  " U5        UR(                  R6                  RS                  5        H  u  nnUUU'   M     0 nUR_                  5        GH  nUR`                   GH
  n[c        U[T        Rd                  5      (       d  M%  [c        URf                  [T        Rh                  5      (       d  MP  [:        RL                  S:¼  aN  [O        SUURf                  Rj                  URf                  RZ                  URf                  Rj                  U;   5        UURf                  Rj                     RZ                  UURf                  RZ                  '   UURf                  Rj                     Ul3        GM     GM"     [:        RL                  S:¼  a-  [O        SU5        [O        S5        [        RP                  " U5        [        Rl                  " U5        XÜl        XÀRo                  U5      S   U4$ )z'get typed IR from stencil bytecode
    r   )Ú
CPUContext)Ú
cpu_target)Útype_annotations)Útype_inference_stager:   z6Cannot use the reserved word 'out' in stencil kernels.zbefore-inferenceNr   )r'   r(   r)   ÚliftedÚlifted_fromrQ   rÛ   Úhtml_outputr<   zInitial stencil_blockszAfter replace_varsrf   rn   zAfter replace arg with arr)8Únumba.core.cpurs  Únumba.core.registryrt  Únumba.core.annotationsru  Únumba.core.typed_passesrv  Ú	kernel_irÚcopyÚdeepcopyr@   r   r´   r   Útarget_contextÚDummyPipeliner   Úrewrite_registryÚapplyÚstater+   r,   r'   rQ   r(   rÛ   r)   ÚTypeAnnotationr   ÚHTMLÚadd_offset_to_labelsÚ
next_labelr)  rÂ   rÁ   Ú_the_max_labelÚupdater°   r±   r²   rA   r   r�   r   r5   Úreplace_varsÚvaluesrG   rB   rH   rI   ÚArgr;  Úremove_delsÚget_return_type)rk   r+   rQ   rV   rW   rf   r(   r)   rs  rt  ru  rv  Ústencil_func_irrÝ   râ   r,   Útpr]   Ú	min_labelÚ	max_labelÚvar_dictrK  ÚtypÚnew_varr3   Úcall_typrn   rd   re   s                                r   rU   rU     sÈ  € õ *Ý.Ý7Ý<ð —l‘l×'Ñ'Ó)€Oä—]’] ?×#9Ñ#9Ó:€NØ+Ôä×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Ø"ˆ	�$‹ñ 5ð €Oà×&Ñ&×(ˆØ—J•JˆDÜ˜$¤§	¡	×*Ó*¬z¸$¿*¹*ÄbÇfÁf×/MÓ/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ÜÐ*Ô+Ü×Ò˜^Ô,ä×Ò˜Ô(Ø+ÔØ×.Ñ.¨tÓ4°QÑ7¸ÐHÐHr!   c                   ó   • \ rS rSrS rSrg)r‚  in  c                 ó  • SSK Jn  U" 5       U l        XR                  l        X R                  l        X0R                  l        X@R                  l        S U R                  l        S U R                  l        S U R                  l	        g )Nr   )Ú	StateDict)
Únumba.core.compilerr›  r…  r+   r,   rQ   r'   r(   rÛ   r)   )r.   r+   r,   rQ   r0  r›  s         r   r/   ÚDummyPipeline.__init__o  sY   € Ý1Ù“[ˆŒ
Ø(�
‰
ÔØ(�
‰
ÔØ�
‰
ŒØ!�
‰
ÔØ!ˆ�
‰
ÔØ!%ˆ�
‰
ÔØ#ˆ�
‰
Õr!   )r…  N)rÑ   rn  ro  rp  r/   rq  r   r!   r   r‚  r‚  n  s   † õ	$r!   r‚  c                 ó2   • [        [        XU5      nUb  U$ U$ )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)rl   r'   rZ  Ú	const_vals       r   r?  r?  {  s(   € ô Ü# Z¸)óE€IàÑØÐØÐr!   c                 ó  • [        [        U[        R                  5      5        [	        [
        XU5      nUb  U$ [        R                  " X5      n[	        [        XU5      nUb  U$ [	        [        XU5      nUb  U$ [        e)zOinner constant inference function that calls constant, unary and binary
cases.
)r   rB   r   r�   r   Ú_get_const_two_irsr   Úget_definitionÚ_get_const_unary_exprÚ_get_const_binary_exprr   )rl   r'   rZ  Ú	var_constÚ	index_defs        r   rŸ  rŸ  ‡  sƒ   € ô ŒJ�y¤"§&¡&Ó)Ô*äÔ)¨:À	ÓJ€IØÑØÐä×'Ò'¨
Ó>€IäÜ˜z°Ió?€IàÑØÐäÜ 
°Yó@€IàÑØÐÜ
Ðr!   c                 ób   • [        [        X5      nUb  U$ [        [        X5      nUb  U$ [        e)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                 óþ   • [        [        U[        R                  5      =(       a    UR                  S:H  5        UR
                  n[        XU5      n[        UR                     n[        SR                  XT5      5      $ )zIevaluate constant unary expr if possible
otherwise, raise GuardException
Úunaryz{}{})r   rB   r   rJ   rK   rI   rŸ  r   ÚfnÚevalrd  )rl   r'   r§  Ú	inner_varr   rK   s         r   r¤  r¤  ª  s\   € ô ŒJ�y¤"§'¡'Ó*×F¨y¯|©|¸wÑ/FÔGØ—‘€Iä+¨JÀÓK€IÜ	˜yŸ|™|Ñ	,€BÜ�—‘˜bÓ,Ó-Ð-r!   c                 ó(  • [        [        U[        R                  5      =(       a    UR                  S:H  5        [        XUR                  5      n[        XUR                  5      n[        UR                     n[        SR                  X5U5      5      $ )zJevaluate constant binary expr if possible
otherwise, raise GuardException
rW  z{}{}{})r   rB   r   rJ   rK   rŸ  ÚlhsÚrhsr   r®  r¯  rd  )rl   r'   r§  Úarg1Úarg2rK   s         r   r¥  r¥  µ  si   € ô ŒJ�y¤"§'¡'Ó*×F¨y¯|©|¸wÑ/FÔGÜ& z¸I¿M¹MÓJ€DÜ& z¸I¿M¹MÓJ€DÜ	˜yŸ|™|Ñ	,€BÜ�—‘ ¨$Ó/Ó0Ð0r!   )0r  r  r   ÚpytypesrX  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#   rU   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!   