ó
    „ñ:iÕ›  ã                   ó  • S SK r S SKrS SKJr  S SKJrJrJ	r	JrJ
r
JrJr  S SKJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKrS SKrS S	KJr   " S
 S\5      r\S 5       r S r! " S S\5      r"SS jr#S r$\" \#5      S 5       r%g)é    N)Úir)ÚtypesÚtypingÚutilsr   ÚconfigÚir_utilsÚregistry)ÚCallableTemplateÚ	signatureÚinfer_globalÚAbstractTemplate)Úlower_builtin)Úregister_jitable©ÚNumbaValueError)Úliteral_unroll)Únumpy_supportc                   ó$   • \ rS rSrSrS rS rSrg)ÚStencilFuncLowereré   zMCallable class responsible for lowering calls to a specific StencilFunc.
    c                 ó   • Xl         g ©N©ÚstencilFunc)ÚselfÚsfs     ÚY/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/numba/stencils/stencil.pyÚ__init__ÚStencilFuncLowerer.__init__   s   € ØÕó    c                 óÚ   • U R                   R                  UR                  0 UR                  S 5      nUR	                  X%R
                  X45      nUR                  UR                  /5        U$ r   )r   Úcompile_for_argtysÚargsÚreturn_typeÚcall_internalÚfndescÚadd_linking_libsÚlibrary)r   ÚcontextÚbuilderÚsigr#   ÚcresÚress          r   Ú__call__ÚStencilFuncLowerer.__call__   sX   € Ø×Ñ×2Ñ2°3·8±8¸RØ—O‘O Tó+ˆà×#Ñ# G¯[©[¸#ÓDˆØ× Ñ  $§,¡, Ô0Øˆ
r    r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r.   Ú__static_attributes__© r    r   r   r      s   † ñòõr    r   c                 ó  • U R                   n[        U5       Hd  nU R                  UR                  :w  a  [        S5      eUR                   n[	        [        U5      5       H  nX%   XE   :”  d  M  [        S5      e   Mf     g )Nz\Secondary stencil array does not have same number  of dimensions as the first stencil input.zaSecondary stencil array has some dimension smaller the same dimension in the first stencil input.)Úshaper   ÚndimÚ
ValueErrorÚrangeÚlen)Úar#   ÚashapeÚargÚargshapeÚis         r   Ú!raise_if_incompatible_array_sizesrB   $   s{   € à�W‰W€Fô ˜dÖ#ˆØ�6‰6�S—X‘XÓÜð Jó Kð Kà—9‘9ˆÜ”s˜6“{Ö#ˆAØ‰y˜8™;Õ&Ü ð "2ó 3ð 3ó $ò $r    c                 óN   • [        U R                  U-   U R                  U-   5      $ )zRCalled by stencil in Python mode to add the loop index to a
user-specified slice.
)ÚsliceÚstartÚstop)Ú	the_sliceÚaddends     r   Úslice_additionrI   ;   s#   € ô �—‘ 6Ñ)¨9¯>©>¸FÑ+BÓCÐCr    c                   óX   • \ 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S rS rSrg)ÚStencilFuncéA   z8
A special type to hold stencil information for the IR.
r   c                 óÆ  • [        U 5      R                  U l        [        U 5      =R                  S-  sl        Xl        X l        X0l        / U l        [        R                  R                  U l
        [        R                  R                  U l        U R                  U R                  5        U R
                  R                  S5      U l        0 U l        [#        U 5      U l        g )Né   Úneighborhood)ÚtypeÚ
id_counterÚidÚ	kernel_irÚmodeÚoptionsÚkwsr	   Ú
cpu_targetÚtyping_contextÚ
_typingctxÚtarget_contextÚ
_targetctxÚ_install_typeÚgetrO   Ú_type_cacher   Ú	_lower_me)r   rS   rT   rU   s       r   r   ÚStencilFunc.__init__H   s£   € Ü�t“*×'Ñ'ˆŒÜˆT‹
×Ò Ñ"ÕØ"ŒØŒ	ØŒØˆŒô #×-Ñ-×<Ñ<ˆŒÜ"×-Ñ-×<Ñ<ˆŒØ×Ñ˜4Ÿ?™?Ô+Ø ŸL™L×,Ñ,¨^Ó<ˆÔØˆÔÜ+¨DÓ1ˆ�r    c           
      ó®  • / nUR                  5        GH½  u  pVUR                  nUR                  n/ n	UR                   GH†  n
[	        U
[
        R                  5      (       GaQ  UR                  U5        [        U5      S:X  ad  [
        R                  " XsU5      n[
        R                  " XrS   U5      nU	R                  [
        R                  " X¼U
R                  U5      5        M¨  / nU H  n[
        R                  " X~U5      nXß/-  nM!     UR                  SU5      n[
        R                  R                  XØ5      nU	R                  [
        R                  " UUU5      5        [
        R                  " XsU5      n[
        R                  " UUU
R                  U5      nU	R                  U5        GMu  U	R                  U
5        GM‰     X–l        GMÀ     U$ )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.
rN   r   Ústencil_index)ÚitemsÚscopeÚlocÚbodyÚ
isinstancer   ÚReturnÚappendr<   ÚVarÚSetItemÚvalueÚredefineÚExprÚbuild_tupleÚAssign)r   ÚblocksÚ
index_varsÚout_nameÚ
ret_blocksÚlabelÚblockrd   re   Únew_bodyÚstmtÚrvarÚivarÚvar_index_varsÚone_varÚ	index_varÚs_index_varÚ
tuple_callÚsis                      r   Úreplace_return_with_setitemÚ'StencilFunc.replace_return_with_setitemX   sh  € ð ˆ
à"ŸL™LŸN‰LˆEØ—K‘KˆEØ—)‘)ˆCØˆHØŸ
�
�Ü˜d¤B§I¡I×.Ò.Ø×%Ñ% eÔ,ä˜:“¨!Ó+Ü!Ÿvšv e°sÓ;˜Ü!Ÿvšv e¸©]¸CÓ@˜Ø Ÿ™¬¯
ª
°4¸t¿z¹zÈ3Ó(OÖPð *,˜Û'1˜GÜ(*¯ª¨u¸sÓ(C˜IØ*¨kÑ9šNñ (2ð ',§n¡n°_ÀcÓ&J˜ä%'§W¡W×%8Ñ%8¸Ó%M˜
Ø Ÿ™¬¯	ª	°*¸kÈ3Ó(OÔPÜ!Ÿvšv e°sÓ;˜ô  ŸZšZ¨¨k¸4¿:¹:ÀsÓK˜Ø Ÿ™¨×+à—O‘O D×)ñ5 #ð6 "�Jñ? +ð@ Ðr    c                 ó4  • 0 n/ n	[         R                  S:¼  a,  [        SX45        [        R                  " UR
                  5        Uc  Sn
O*Sn
[        U5      U:w  a  [        S[        U5      U4-  5      e[        R                  " UR
                  5      n[        5       nUR
                  R                  5        G	HÂ  nUR                  nUR                  n/ nUR                   G	HŒ  n[        U[        R                   5      (       aŸ  [        UR"                  [        R$                  5      (       av  [         R                  S:¼  a5  [        SUR&                  R(                  UR"                  R"                  5        UR"                  R"                  UUR&                  R(                  '   [        U[        R                   5      (       aq  [        UR"                  [        R*                  5      (       aH  UR"                  R,                  S;   a.  UR"                  R"                  R(                  UR.                  ;   dC  [        U[        R0                  5      (       a/  UR&                  R(                  UR.                  ;   a  [        S	5      e[        U[        R                   5      (       Ga»  [        UR"                  [        R*                  5      (       Ga‘  UR"                  R,                  S
;   Gav  UR"                  R"                  R(                  UR.                  ;   GaG  UR"                  R"                  R(                  U;  Ga"  UR"                  R,                  S:X  a  UR"                  R2                  nOUR"                  R4                  nUR7                  UR"                  R"                  R(                  5        U
(       ad  [9        US5      (       d   eUR(                  U;   a  X›UR(                     /-  n	O.UR(                  U;   a  X˜UR(                     /-  n	O[        S5      eUS:X  Gaž  [        R:                  " XâS   U5      nUR=                  SU5      nUUR(                     n[        U[>        R@                  RB                  5      (       Ga{  UR=                  SU5      n[D        RF                  " [H        5      n[>        RJ                  RM                  U5      nUUUR(                  '   [        RN                  " SUU5      nURQ                  [        R                   " UUU5      5        [        R*                  RS                  UUU/SU5      nURU                  U RV                  U[>        RX                  /0 5      UU'   URQ                  [        R                   " UUU5      5        URQ                  [        R                   " [        R*                  R[                  UR"                  R"                  UU5      UR&                  U5      5        GM!  [        R*                  R]                  [^        R6                  UUU5      nURQ                  [        R                   " UUU5      5        URQ                  [        R                   " [        R*                  R[                  UR"                  R"                  UU5      UR&                  U5      5        GMß  / n/ nUR=                  SU5      n/ n/ n UUR(                     n[a        U5       GHµ  n!UR=                  SU5      nURQ                  [        R                   " [        R$                  " U!U5      UU5      5        UU/-  n[        R:                  " XâU!   U5      nUU/-  nUR=                  SU5      nU U/-  n UR=                  SU5      n"[        R*                  R[                  UUU!   U5      n#URQ                  [        R                   " U#U"U5      5        [        U[>        Rb                  5      (       a  UU!   n$OUSS n$[        U$[>        R@                  RB                  5      (       Ga  UR=                  SU5      n[D        RF                  " [H        5      n[>        RJ                  RM                  U5      nUUUR(                  '   [        RN                  " SUU5      nURQ                  [        R                   " UUU5      5        [        R*                  RS                  UU"UU!   /SU5      nURU                  U RV                  U$[>        RX                  /0 5      UU'   URQ                  [        R                   " UUU5      5        GM[  [        R*                  R]                  [^        R6                  U"UU!   U5      nURQ                  [        R                   " UUU5      5        GM¸     [        R*                  Re                  U U5      n%URQ                  [        R                   " U%UU5      5        URQ                  [        R                   " [        R*                  R[                  UR"                  R"                  UU5      UR&                  U5      5        G	M{  URQ                  U5        G	M�     UUl        G	MÅ     U
(       GaŠ  [a        U5       V&s/ s H  n&SS/PM	     nn&[        U	5      S:X  a  [        S5      eU	 GHL  n'[        U'[f        5      (       d  [        U'[h        5      (       aº  [a        [        U'5      5       H–  n(U'U(   n)[        U)[        R:                  5      (       a  U)R(                  U;   a  UU)R(                     n)[        U)[j        5      (       a2  [m        UU(   S   U)5      UU(   S'   [o        UU(   S   U)5      UU(   S'   M�  [        S5      e   [        U'5      n*OS[        U'[j        5      (       a3  [m        US   S   U'5      US   S'   [o        US   S   U'5      US   S'   Sn*O[        S5      eU*U:w  d  GMD  [        S5      e   XL4$ s  sn&f )z¿
Transforms the stencil kernel as specified by the user into one
that includes each dimension's index variable as part of the getitem
calls.  So, in effect array[-1] becomes array[index0-1].
rN   Úadd_indices_to_kernelNTFúD%d dimensional neighborhood specified for %d dimensional input arrayzremembering in const_dict)ÚsetitemÚstatic_setitemz?Assignments to arrays passed to stencil kernels is not allowed.)ÚgetitemÚstatic_getitemrˆ   ÚnamezDstencil kernel index is not constant, 'neighborhood' option requiredr   rb   rI   r6   Úconst_indexÚind_stencil_indexz=Stencil kernel with no accesses to relatively indexed arrays.zCstencil kernel index is not constant,'neighborhood' option requiredz/Non-tuple or non-integer used as stencil index.z2Stencil index does not match array dimensionality.)8r   ÚDEBUG_ARRAY_OPTÚprintr   Údump_blocksrq   r<   r   Úget_tuple_tableÚsetÚvaluesrd   re   rf   rg   r   rp   rl   ÚConstÚtargetrŠ   rn   ÚopÚ	arg_namesrk   Úindexr}   ÚaddÚhasattrrj   rm   r   ÚmiscÚ	SliceTypeÚnumbaÚnjitrI   Ú	functionsÚ
DispatcherÚGlobalri   ÚcallÚget_call_typerY   Úintprˆ   ÚbinopÚoperatorr;   Ú
ConstSizedro   ÚtupleÚlistÚintÚminÚmax)+r   ÚkernelÚindex_namesr9   rO   Ústandard_indexedÚtypemapÚ	calltypesÚ
const_dictÚkernel_constsÚneed_to_calc_kernelÚtuple_tableÚrelatively_indexedrv   rd   re   rw   rx   Ústmt_index_varr}   ÚtmpvarÚstmt_index_var_typÚsa_varÚsa_funcÚsa_func_typÚg_saÚslice_addition_callÚacc_callrr   Úsum_resultsr~   Úconst_index_varsÚind_stencilsÚdimÚ
getitemvarÚgetitemcallÚone_index_typr   Ú_r—   rA   ÚteÚ	index_lens+                                              r   r„   Ú!StencilFunc.add_indices_to_kernel‚   sÑ	  € ð ˆ
Øˆä×!Ñ! QÓ&ÜÐ)¨4Ô>Ü× Ò  §¡Ô/àÑØ"&Ñà"'ÐÜ�<Ó  DÓ(Ü%ð 'Gä'*¨<Ó'8¸$Ð&?ñ'@ó Að Aô ×.Ò.¨v¯}©}Ó=ˆä ›UÐà—]‘]×)Ñ)×+ˆEØ—K‘KˆEØ—)‘)ˆCØˆHØŸ
�
�Ü˜t¤R§Y¡Y×/Ñ/Ü˜tŸz™z¬2¯8©8×4Ñ4Ü×-Ñ-°Ó2ÜÐ9¸4¿;¹;×;KÑ;KØ"Ÿj™j×.Ñ.ô0ð 48·:±:×3CÑ3C�J˜tŸ{™{×/Ñ/Ñ0Ü ¤b§i¡i×0Ñ0Ü& t§z¡z´2·7±7×;Ñ;Ø ŸJ™JŸM™MÐ-JÓJØ ŸJ™J×,Ñ,×1Ñ1°V×5EÑ5EÓEÜ˜t¤R§Z¡Z×0Ñ0Ø ŸK™K×,Ñ,°×0@Ñ0@Ó@Ü)ð +Ló Mð Mä˜t¤R§Y¡Y×/Ò/Ü& t§z¡z´2·7±7×;Ò;Ø ŸJ™JŸM™MÐ-JÔJØ ŸJ™J×,Ñ,×1Ñ1°V×5EÑ5EÔEØ ŸJ™J×,Ñ,×1Ñ1Ð9IÔIà—z‘z—}‘}¨	Ó1Ø)-¯©×)9Ñ)9™à)-¯©×)=Ñ)=˜ð '×*Ñ*¨4¯:©:×+;Ñ+;×+@Ñ+@ÔAö +Ü& ~°v×>Ñ>Ð>Ð>à)×.Ñ.°+Ó=Ø)¸.×:MÑ:MÑ.NÐ-OÑO™MØ+×0Ñ0°JÓ>Ø)¸×9LÑ9LÑ.MÐ-NÑN™Mä"1ð 3Kó #Lð Lð ˜q”yô
 %'§F¢F¨5¸a±.À#Ó$F˜	Ø!&§¡°ÀÓ!E˜Ø-4°^×5HÑ5HÑ-IÐ*ô &Ð&8¼%¿*¹*×:NÑ:N×OÒOØ%*§^¡^Ð4DÀcÓ%J˜FÜ&+§j¢j´Ó&@˜GÜ*/¯/©/×*DÑ*DÀWÓ*M˜KØ3>˜G F§K¡KÑ0Ü#%§9¢9Ð-=¸wÈÓ#L˜DØ$ŸO™O¬B¯IªI°d¸FÀCÓ,HÔIÜ24·'±'·,±,¸vÈÐXaÐGbÐdfÐhkÓ2lÐ/Ø=H×=VÑ=VÐW[×WfÑWfÐi{ô  ~C÷  ~Hñ  ~Hð  iIð  KMó  >N˜IÐ&9Ñ:Ø$ŸO™O¬B¯IªIÐ6IÈ6ÐSVÓ,WÔXØ$ŸO™O¬B¯IªIÜ+-¯7©7¯?©?¸4¿:¹:×;KÑ;KÈVÐUXÓ+YØ+/¯;©;¸ó-=÷ >ô (*§w¡w§}¡}´X·\±\À>Ø5>Àó(E˜Hà$ŸO™O¬B¯IªI°hÀÈÓ,LÔMØ$ŸO™O¬B¯IªIÜ+-¯7©7¯?©?¸4¿:¹:×;KÑ;KÈVÐUXÓ+YØ+/¯;©;¸ó-=÷ >ð &(˜
Ø&(˜Ø&+§n¡n°_ÀcÓ&J˜Ø+-Ð(Ø')˜à-4°^×5HÑ5HÑ-IÐ*ô $)¨§;˜CØ%*§^¡^°MÀ3Ó%G˜FØ$ŸO™O¬B¯IªI´b·h²h¸sÀCÓ6HØ6<¸có-Cô Dà,°°Ñ8Ð,Ü(*¯ª¨uÀ#Ñ6FÈÓ(L˜IØ&¨9¨+Ñ5˜Jà%*§^¡^Ð4GÈÓ%M˜FØ(¨V¨HÑ4˜LØ).¯©¸	À3Ó)G˜JÜ*,¯'©'¯/©/¸.Ø7GÈÑ7LÈcó+S˜Kà$ŸO™O¬B¯IªI°kÀ:ÈsÓ,SÔTä)Ð*<¼e×>NÑ>N×OÑOØ0BÀ3Ñ0G¡à0BÁ1Ð0E ô  *¨-¼¿¹×9MÑ9M×NÒNØ).¯©Ð8HÈ#Ó)N Ü*/¯*ª*´^Ó*D Ü.3¯o©o×.HÑ.HÈÓ.Q Ø7B ¨¯©Ñ 4Ü')§y¢yÐ1AÀ7ÈCÓ'P Ø (§¡´·	²	¸$ÀÈÓ0LÔ MÜ68·g±g·l±lÀ6ÈJÐXbÐcfÑXgÐKhÐjlÐnqÓ6rÐ 3ØAL×AZÑAZÐ[_×[jÑ[jÐmzô  }B÷  }Gñ  }Gð  mHð  JLó  BM 	Ð*=Ñ >Ø (§¡´·	²	Ð:MÈvÐWZÓ0[× \ä+-¯7©7¯=©=¼¿¹ÀzØ9CÀC¹È#ó,O à (§¡´·	²	¸(ÀFÈCÓ0P× QñG $/ôJ &(§W¡W×%8Ñ%8¸ÀsÓ%K˜
Ø Ÿ™¬¯	ª	°*¸kÈ3Ó(OÔPØ Ÿ™¬¯	ª	Ü"$§'¡'§/¡/°$·*±*×2BÑ2BÀ;ÈsÓ"SØ"&§+¡+¨có)3÷ 4ð —O‘O D×)ñG #ðH "ˆE�JñQ ,÷T ô ,1°¬;Ó7ª; a˜Q˜q›E©;ˆLÐ7Ü�=Ó! QÓ&Ü%ð 'Có Dð Dô '�Ü˜e¤U×+Ñ+¬z¸%Ä×/FÑ/FÜ"¤3 u£:Ö.˜Ø" 1™X˜Ü% b¬"¯&©&×1Ñ1°b·g±gÀÓ6KØ!+¨B¯G©GÑ!4˜BÜ% b¬#×.Ñ.Ü14°\À!±_ÀQÑ5GÈÓ1L˜L¨™O¨AÑ.Ü14°\À!±_ÀQÑ5GÈÓ1L˜L¨™O¨AÓ.ä"1ð!Aó#Bð Bñ /ô !$ E£
‘IÜ ¤s×+Ñ+Ü),¨\¸!©_¸QÑ-?ÀÓ)G�L ‘O AÑ&Ü),¨\¸!©_¸QÑ-?ÀÓ)G�L ‘O AÑ&Ø !‘Iä)ØIóKð Kà Ö$Ü)ØLóNð Nñ- 'ð2 Ð1Ð1ùò= 8s   êpc                 ób  • [         R                  S:¼  a6  [        SU5        [        R                  " U R
                  R                  5        [        US   [        R                  R                  5      (       d  [        S5      eSSKJn  UR                  U R                  U R                   U R
                  US 0 5      u  p4pV[        U[        R                  R                  5      (       a  [        S5      e[        R                  R                  XAS   R"                  US   R$                  5      nXsU4$ )NrN   Úget_return_typer   zGThe first argument to a stencil kernel must be the primary input array.)Útyped_passesz:Stencil kernel must return a scalar and not a numpy array.)r   r�   rŽ   r   r�   rS   rq   rg   r   ÚnpytypesÚArrayr   Ú
numba.corerÌ   Útype_inference_stagerY   r[   r9   Úlayout)r   ÚargtysrÌ   r¯   r$   r°   rÆ   Úreal_rets           r   rË   ÚStencilFunc.get_return_typeK  sÿ   € Ü×!Ñ! QÓ&ÜÐ# VÔ,Ü× Ò  §¡×!6Ñ!6Ô7ä˜& ™)¤U§^¡^×%9Ñ%9×:Ñ:Ü!ð #@ó Að Aõ 	,Ø-9×-NÑ-NØ—‘Ø—‘Ø—‘ØØØó.Ñ*ˆ˜iô �k¤5§>¡>×#7Ñ#7×8Ñ8Ü!ØLóNð Nô —>‘>×'Ñ'¨¸A±Y·^±^Ø5;¸A±Y×5EÑ5EóGˆà 9Ð-Ð-r    c           	      ó˜   • [        S[        U R                  5      -   [        4[	        X R
                  S95      nUR                  X5        g)z]Constructs and installs a typing class for a StencilFunc object in
the input typing context.
ÚStencilFuncTyping_)ÚkeyÚgenericN)rP   ÚstrrR   r   ÚdictÚ_type_meÚinsert_user_function)r   Ú	typingctxÚ_ty_clss      r   r\   ÚStencilFunc._install_typed  sC   € ô Ð+Ü˜4Ÿ7™7“|ñ$ä(Ð*Ü ¯m©mÑ<ó>ˆð 	×&Ñ& tÕ5r    c                 óT   • U R                   U   u  pVpxU R                  " XdUXx/UQ76 n	U	$ r   )r^   Ú_stencil_wrapper)
r   rÒ   Úkwtysr$   ÚsigretrÆ   Úresultr¯   r°   Únew_funcs
             r   r"   ÚStencilFunc.compile_for_argtysn  s=   € à*.×*:Ñ*:¸6Ñ*BÑ'ˆ�GØ×(Ò(¨¸Ø)0ðFØ>DòFˆàˆr    c                 óþ  • U R                   bV  [        U R                   5      US   R                  :w  a0  [        S[        U R                   5      US   R                  4-  5      eUnSnSnSU;   a  X2S   4-  nUS-  nUS   nSU;   a  X2S   4-  nUS-  nX0R                  ;   a  U R                  U   u  n    nU$ U R                  U5      u  p‰n
[        U/UQ76 nS	R                  S
R                  U R                  R                  5      U5      n0 n[        XÍ5        US   nUR                  [        R                  " U5      S9nU R                  R!                  U R"                  X4/5        XµXš4U R                  U'   U$ )z�
Implement AbstractTemplate.generic() for the typing class
built by StencilFunc._install_type().
Return the call-site signature.
Nr   r…   Ú Úoutz
, out=NonerO   z, neighborhood=Nonez*def __numba_dummy_stencil({}{}):
    pass
Ú,Ú__numba_dummy_stencil)Úpysig)rO   r<   r9   r   r^   rË   r   ÚformatÚjoinrS   r–   ÚexecÚreplacer   Úpysignaturer[   Úinsert_func_defnr_   )r   rÒ   râ   Úargtys_extraÚ	sig_extrarä   Ú_sigrÆ   rÓ   r¯   r°   r+   Ú
dummy_textÚdctÚ
dummy_funcs                  r   rÛ   ÚStencilFunc._type_meu  s   € ð ×ÑÑ)Ü�×!Ñ!Ó" f¨Q¡i§n¡nÓ4Ü!ð #Cä#& t×'8Ñ'8Ó#9¸6À!¹9¿>¹>Ð"Jñ#Kó Lð Lð ˆØˆ	ØˆØ�E‹>Ø 5™\˜OÑ+ˆLØ˜Ñ%ˆIØ˜5‘\ˆFà˜UÓ"Ø >Ñ2Ð4Ñ4ˆLØÐ.Ñ.ˆIð ×+Ñ+Ó+Ø"×.Ñ.¨|Ñ<‰OˆT�1�a˜ØˆKà)-×)=Ñ)=¸fÓ)EÑ&ˆ˜IÜ˜Ð0 <Ò0ˆØD×KÑKØŸ™ §¡×!9Ñ!9Ó:¸IóGˆ
àˆÜˆZÔØÐ0Ñ1ˆ
Ø�k‰k¤× 1Ò 1°*Ó =ˆkÐ>ˆØ�‰×(Ñ(¨4¯>©>¸4Ð*NÐ)OÔPØ*-°wÐ)Jˆ×Ñ˜Ñ&Øˆ
r    c                 ó®  • 0 nUR                   " 5       n0 Ul        UR                  R                  5        H›  u  pV[         R                  " UR                  U   5      n/ Ul        UR                  U   R                   HA  n[         R                  " U5      n	UR                  R                  U	5        X‚;   d  M;  X(   X9'   MC     XtR                  U'   M�     XC4$ )zã
Create a copy of a given IR along with its calltype information.
We need a copy of the calltypes because copy propagation applied
to the copied IR will change the calltypes and make subsequent
uses of the original IR invalid.
)Úcopyrq   rc   Údeepcopyrf   ri   )
r   r   r°   Úcopy_calltypesÚkernel_copyÚblock_labelrv   Ú	new_blockrx   Úscopys
             r   Úcopy_ir_with_calltypesÚ"StencilFunc.copy_ir_with_calltypesž  s¸   € ð ˆØ—g’g“iˆØˆÔà$&§I¡I§O¡OÖ$5Ñ ˆ[ÜŸš b§i¡i°Ñ&<Ó=ˆIØˆIŒNàŸ	™	 +Ñ.×3Ô3�ô
 Ÿš dÓ+�Ø—‘×%Ñ% eÔ,ØÕ$Ø,5©O�NÓ)ñ 4ð /8×Ñ˜{Ó+ñ %6ð Ð,Ð,r    c           
      ó¦  • U R                  U R                  U5      u  px[        R                  " UR                  5        UR
                  S   n	[        R                  " UR                  U5      u  p«[        R                  " UR                  5      n[        R                  " UR                  U
UUU5        SU;   a  [        S5      e[        R                  " SU5      n[        R                  S:¼  a  [        SXÍ5        US   n[        R                  S:¼  aK  [        SX3R                  [        UR                  5      U5        [        R                   " UR                  5        S[#        [%        U5      5      R'                  S	S
5      < S
U R$                  < 3n/ n[)        UR*                  5       H,  n[        R                  " S[-        U5      -   U5      nUU/-  nM.     [        R                  " SU5      n[        R                  " SU5      nSnUb  USR/                  U5      -  nS[1        U R2                  5      ;   a  USR/                  U5      -  nU R4                  R7                  S/ 5      nU	U;   a  [        S5      e[9        [;        U5      [;        UR
                  5      -
  5      S:w  a  [        S5      eU R=                  UUUR*                  U R>                  UXH5      u  nnU R>                  c  UU l        [        R                  S:¼  a+  [        S5        [        R                   " UR                  5        U RA                  UR                  UU5      n[        R                  S:¼  a,  [        SU5        [        R                   " UR                  5        SR/                  USRC                  UR
                  5      U5      n/ n[)        UR*                  5       Hf  n[E        UU   S   [F        5      (       a  UU   S   nUU   S   nO$SR/                  UU5      nSR/                  UU5      nURI                  UU45        Mh     [9        U5      S:”  a&  USU	-   -  nU H  nUU	:w  d  M  USU-   -  nM     US-  n[        R                  " SU5      nUSR/                  UU	5      -  nS n UGc©  [J        RL                  " UR                  5      R                  RN                  n!SR/                  UUU!5      n"SU R4                  ;   ag  U R4                  S   n#[P        RR                  RS                  U#5      n$U RT                  RW                  U$UR                  5      (       d  Sn%[        U%5      eOSn#US U"-   -  n[)        UR*                  5       HÇ  n&S!/UR*                  -  n'S!/UR*                  -  n(S"R/                  U R>                  U&   S   5      U'U&'   S#R/                  U R>                  U&   S   5      U(U&'   US S$R/                  USRC                  U'5      U " U#5      5      -   -  nUS S$R/                  USRC                  U(5      U " U#5      5      -   -  nMÉ     O–SU R4                  ;   a†  U R4                  S   n#[P        RR                  RS                  U#5      n$U RT                  RW                  U$UR                  5      (       d  Sn%[        U%5      eS%R/                  UU " U#5      5      n"US U"-   -  nSn)[)        UR*                  5       HF  n[)        U)5       H  n*US -  nM
     US&R/                  UU   UU   S   UUUU   S   5      -  nU)S-  n)MH     [)        U)5       H  n*US -  nM
     US'R/                  U5      -  nUS(R/                  U5      -  n[        R                  S:¼  a  [        S)5        [        U5        0 n+U+RY                  [[        5       5        []        UU+5        U+U   n,Ub  [^        R`                  " U,5      n-U-Ul1        SS*K2J3n.  U.Ri                  U,5      n/[        Rj                  " U/R                  5        [        R                  " U/R                  5      n00 n1UUUU/UR
                  -   U-   n2U0Rm                  5        Hn  u  n3n4U3U2;  d  M  [E        U4[n        Rp                  5      (       d   eU4Rr                  Ru                  U4Rv                  U4Rx                  5      n5U5Rv                  U1U3'   Mp     [        Rz                  " U/R                  U15        [}        U/R                  R                  5       5      S-   n6[        R€                  " UR                  U65      Ul        [}        UR                  R                  5       5      S-   n7U V8s/ s H  n8U8U6-   PM
     nn8[        R                  S:¼  ac  [        S+UU65        [        S,5        [        R                   " U/R                  5        [        S-5        [        R                   " UR                  5        U/R                  Rm                  5        GH–  u  n9n:[ƒ        U:R„                  5       GHs  u  nn;[E        U;[n        R†                  5      (       d  M(  U;Rˆ                  Rv                  U:X  d  MD  U;Rx                  n<U:Rr                  n=[n        RŠ                  " U=U<5      n>U:R„                  S U U>lB        U:R„                  US-   S  U:lB        [�        UR                  R                  5       5      n?U>RI                  [n        RŽ                  " U?U<5      5        UR                  Rm                  5        H  u  n@nAUAU/R                  U@'   M     U:U/R                  U7'   U>U/R                  U9'   U H6  nBU/R                  UB   RI                  [n        RŽ                  " U7U<5      5        M8       O   GM—    O   [        R�                  " U/R                  5      U/l        [        Rj                  " U/R                  5        [E        U[’        R”                  5      (       d   eUnC[—        UC5      nD[        R                  S:¼  a,  [        S.WD5        [        R                   " U/R                  5        [        R˜                  " U/R                  5        U.R›                  U RT                  U Rœ                  U/WDS U.Rž                  0 5      nEUE$ s  sn8f )/Nr   ré   z6Cannot use the reserved word 'out' in stencil kernels.Ú__sentinel__rN   Úname_var_tablerá   Ú__numba_stencil_Ú-rÆ   r—   rO   rè   z	, {}=NoneÚstandard_indexingzYThe first argument to a stencil kernel must use relative indexing, not standard indexing.z[Standard indexing requested for an array name not present in the stencil kernel definition.zAfter add_indices_to_kernelz!After replace_return_with_setitemzdef {}({}{}):
rê   z	{}[{}][0]z	{}[{}][1]z&    raise_if_incompatible_array_sizes(z)
Ú
full_shapez    {} = {}.shape
c                 óÎ   • [         R                  " U 5      (       d@  [         R                  " U 5      (       a  g[         R                  " U 5      (       a  U S:  a  ggg [	        U 5      $ )Nznp.nanr   z-np.infznp.inf)ÚnpÚisfiniteÚisnanÚisinfrÙ   )Úcvals    r   Úcval_as_strÚ1StencilFunc._stencil_wrapper.<locals>.cval_as_strD  sL   € Ü—;’;˜t×$Ñ$ä—8’8˜D—>‘>Ø#Ü—X’X˜d—^‘^Ø˜a“xØ(à'ð	 $ô ˜4“yÐ r    z{} = np.empty({}, dtype=np.{})
r  z-cval type does not match stencil return type.z    Ú:z:-{}z-{}:z{}[{}] = {}
z{}[:] = {}
z.for {} in range(-min(0,{}),{}[{}]-max(0,{})):
z{} = 0
z    return {}
znew stencil func text©Úcompilerzret_blocks w/ offsetsz"before replace sentinel stencil_irz#before replace sentinel kernel_copyÚnew_stencil_param_types)Pr  rS   r   Úremove_argsrq   r–   Úcopy_propagateÚget_name_var_tableÚapply_copy_propagater   Úget_unused_var_namer   r�   rŽ   ÚdtyperP   r�   ÚhexrR   rð   r;   r9   rÙ   rí   rÚ   rV   rU   r]   r<   r‘   r„   rO   r�   rî   rg   r©   ri   r   Úas_dtyper0   r   ÚtypeofrY   Úcan_convertÚupdateÚglobalsrï   r   rñ   rì   rÏ   r  Úrun_frontendÚremove_delsrc   r   rj   rd   rm   rŠ   re   Úreplace_var_namesr«   ÚkeysÚadd_offset_to_labelsÚ	enumeraterf   rp   r”   ÚBlockrª   ÚJumpÚrename_labelsr   ÚTyper¨   Úfixup_var_define_in_scopeÚ
compile_irr[   ÚDEFAULT_FLAGS)Fr   rä   rã   r$   r¯   r°   r#   rþ   rý   Ú	first_argÚin_cpsÚout_cpsr  Úsentinel_nameÚ	the_arrayÚstencil_func_namerr   rA   Úindex_var_namers   Úneighborhood_namerô   r®   Úkernel_sizerµ   rt   Ú	func_textÚrangesÚloÚhiÚother_arrayÚ
shape_namer  Úreturn_type_nameÚout_initr  Úcval_tyÚmsgrÂ   Ústart_itemsÚ	end_itemsÚoffsetÚjr÷   Ústencil_funcrì   r  Ú
stencil_irÚ	var_tableÚnew_var_dictÚreserved_namesrŠ   ÚvarÚnew_varÚstencil_stub_last_labelÚ	new_labelÚxru   rv   Úinstre   rd   Ú
prev_blockÚbody_first_labelÚlÚbÚ	ret_blockÚarray_typesr  rå   sF                                                                         r   rá   ÚStencilFunc._stencil_wrapper¹  s¥  € ð& )-×(CÑ(CØ,0¯N©N¸Ió)GÑ%ˆô 	×Ò˜[×/Ñ/Ô0Ø×)Ñ)¨!Ñ,ˆ	ä"×1Ò1°+×2DÑ2DÀgÓN‰ˆÜ!×4Ò4°[×5GÑ5GÓHˆÜ×%Ò%Ø×ÑØØØØô	ð �NÓ"Ü!Ð"ZÓ[Ð[ä ×4Ò4°^À^ÓTˆÜ×!Ñ! QÓ&ÜÐ" NÔBà˜‘Gˆ	ä×!Ñ! QÓ&ÜÐ$ k×3DÑ3DÜ&*¨;×+<Ñ+<Ó&=¸tôEä× Ò  ×!3Ñ!3Ô4øô
 ),¬B¨y«MÓ(:×(BÑ(BÀ3ÈÖ(LØ(,¯«ð1Ðð ˆ
Ü�y—~‘~Ö&ˆAÜ%×9Ò9¸'ÄCÈÃFÑ:JØ:HóJˆNà˜>Ð*Ñ*ŠJñ 'ô ×/Ò/°°~ÓFˆÜ$×8Ò8¸Ø9GóIÐàˆ	ØÑØ˜×+Ñ+¨HÓ5Ñ5ˆIØœT $§(¡(›^Ó+Ø˜×+Ñ+Ð,=Ó>Ñ>ˆIð  Ÿ<™<×+Ñ+Ð,?ÀÓDÐàÐ(Ó(Ü!ð #Ró Sð Sô ŒsÐ#Ó$¤s¨;×+@Ñ+@Ó'AÑAÓBÀaÓGÜ!ð #Ró Sð Sð +/×*DÑ*DØ˜Z¨¯©Ø×!Ñ!Ð#3°Wó+NÑ'ˆÐ'ð ×ÑÑ$Ø +ˆDÔä×!Ñ! QÓ&ÜÐ/Ô0Ü× Ò  ×!3Ñ!3Ô4ð ×5Ñ5°k×6HÑ6HØ6@À(óLˆ
ô ×!Ñ! QÓ&ÜÐ5°zÔBÜ× Ò  ×!3Ñ!3Ô4ð &×,Ñ,Ð->ØŸ™ ×!6Ñ!6Ó7¸óDˆ	ð ˆÜ�y—~‘~Ö&ˆAÜ˜+ a™.¨Ñ+¬S×1Ñ1Ø  ‘^ AÑ&�Ø  ‘^ AÑ&‘à ×'Ñ'Ð(9¸1Ó=�Ø ×'Ñ'Ð(9¸1Ó=�Ø�M‰M˜2˜r˜(Ö#ñ 'ô Ð!Ó" QÓ&ØÐAÀIÑMÑMˆIÛ1�Ø )Õ+Ø  {Ñ!2Ñ2’Iñ  2ð ˜ÑˆIô ×1Ò1°,ÀÓOˆ
ØÐ*×1Ñ1°*¸iÓHÑHˆ	ò	!ð  Š>Ü,×5Ò5Ø*×0Ñ0ó 2ß26±$·x±xð à8×?Ñ?Ø  *Ð.>ó@ˆHð ˜Ÿ™Ó%Ø—|‘| FÑ+�Ü Ÿ-™-×.Ñ.¨tÓ4�Ø—‘×2Ñ2°7¸K×<MÑ<M×NÑNØI�CÜ)¨#Ó.Ð.ð Oð �Ø˜ (Ñ*Ñ*ˆIÜ˜YŸ^™^Ö,�Ø"˜e i§n¡nÑ4�Ø ˜E I§N¡NÑ2�	Ø#)§=¡=°×1BÑ1BÀ3Ñ1GÈÑ1JÓ#K�˜CÑ Ø!'§¡¨t×/@Ñ/@ÀÑ/EÀaÑ/HÓ!I�	˜#‘Ø˜V o×&<Ñ&<¸XÀsÇxÁxÐP[ÓG\Ñ^iÐjnÓ^oÓ&pÑpÑp�	Ø˜V o×&<Ñ&<¸XÀsÇxÁxÐPYÓGZÑ\gÐhlÓ\mÓ&nÑnÑn’	ò -ð ˜Ÿ™Ó%Ø—|‘| FÑ+�Ü Ÿ-™-×.Ñ.¨tÓ4�Ø—‘×2Ñ2°7¸K×<MÑ<M×NÑNØI�CÜ)¨#Ó.Ð.Ø)×0Ñ0°¹;ÀtÓ;LÓM�Ø˜V hÑ.Ñ.�	àˆä�y—~‘~Ö&ˆAÜ˜6–]�Ø˜VÑ#’	ñ #ð ð 1ß28±&Ø& q™MØ" 1™I a™LØ&ØØ" 1™I a™Ló3*ñ*ˆIð �a‰KŠFñ' 'ô* �v–ˆAØ˜ÑŠIñ ð
 	�Z×&Ñ& }Ó5Ñ5ˆ	ØÐ&×-Ñ-¨hÓ7Ñ7ˆ	ä×!Ñ! QÓ&ÜÐ)Ô*Ü�)Ôð ˆØ�
‰
”7“9ÔÜˆY˜ÔØÐ,Ñ-ˆØÑÜ×%Ò% lÓ3ˆEØ ˆFŒLå'Ø×*Ñ*¨<Ó8ˆ
Ü×Ò˜Z×.Ñ.Ô/ô ×/Ò/°
×0AÑ0AÓBˆ	ØˆØ(¨(Ð4EØ%ð'Ø)4×)>Ñ)>ñ?ØAKñLˆà"Ÿ™Ö*‰IˆD�#Ø˜>Õ)Ü! #¤r§v¡v×.Ñ.Ð.Ð.ØŸ)™)×,Ñ,¨S¯X©X°s·w±wÓ?�Ø%,§\¡\�˜TÓ"ñ	 +ô
 	×"Ò" :×#4Ñ#4°lÔCä"% j×&7Ñ&7×&<Ñ&<Ó&>Ó"?À!Ñ"CÐô &×:Ò:Ø +× 2Ñ 2Ð4KóMˆÔä˜×*Ñ*×/Ñ/Ó1Ó2°QÑ6ˆ	á;EÓFº:°a�aÐ1Ô1¹:ˆ
ÐFä×!Ñ! QÓ&ÜÐ)¨:Ð7NÔOÜÐ6Ô7Ü× Ò  ×!2Ñ!2Ô3ÜÐ7Ô8Ü× Ò  ×!3Ñ!3Ô4ð '×-Ñ-×3Ñ3×5‰LˆE�5Ü$ U§Z¡Z×0‘��4Ü ¤b§i¡i×0Ó0Ø—K‘K×$Ñ$¨Õ5àŸ(™(�CØ!ŸK™K�Eô
 "$§¢¨%°Ó!5�JØ&+§j¡j°°! n�J”Oà!&§¡¨A°©E¨FÐ!3�E”Jä'*¨;×+=Ñ+=×+BÑ+BÓ+DÓ'EÐ$ð ×%Ñ%¤b§g¢gÐ.>ÀÓ&DÔEð #.×"4Ñ"4×":Ñ":Ö"<™˜˜AØ/0˜
×)Ñ)¨!Ó,ñ #=ð 49�J×%Ñ% iÑ0Ø/9�J×%Ñ% eÑ,ó &0˜	Ø"×)Ñ)¨)Ñ4×;Ñ;ÜŸGšG I¨sÓ3ö5ñ &0ñ ñC 1òF ÙñK 6ôN %×2Ò2°:×3DÑ3DÓEˆ
ÔÜ×Ò˜Z×.Ñ.Ô/ä˜)¤U§Z¡Z×0Ñ0Ð1Ð0Øˆä"& {Ó"3Ðä×!Ñ! QÓ&ÜÐ+Ð-DÔEÜ× Ò  ×!2Ñ!2Ô3ô 	×*Ò*¨:×+<Ñ+<Ô=Ø×&Ñ&Ø�O‰OØ�O‰OØØ#ØØ×"Ñ"Øóˆð ˆùòQ Gs   æsc                 óL  • U R                   R                  5         U R                  ba  [        U R                  5      US   R                  :w  a;  [        SR                  [        U R                  5      US   R                  5      5      eSU;   aÜ  US   nUR                  n[        R                  " U5      n[        R                  R                  XSR                  [        R                  " U5      5      n[        U Vs/ s H"  n[        R                   R!                  U5      PM$     sn5      n[        U Vs/ s H"  n[        R                   R!                  U5      PM$     snU/-   5      n	O=S n[        U Vs/ s H"  n[        R                   R!                  U5      PM$     sn5      nUn	["        R$                  S:¼  a  ['        SX�U5        U R)                  U5      u  p«nU R*                  " US X«U/U	Q76 nUc  UR,                  " U6 $ UR,                  " X4-   6 $ s  snf s  snf s  snf )Nr   zD{} dimensional neighborhood specified for {} dimensional input arrayré   rN   r.   )rY   ÚrefreshrO   r<   r9   r   rí   r  r   Ú
from_dtyper   rÍ   rÎ   Ú
map_layoutr§   r   r  r   r�   rŽ   rË   rá   Úentry_point)r   r#   Úkwargsrä   ÚrdtypeÚrttypeÚresult_typerP  rW  Úarray_types_fullrÓ   r¯   r°   rå   s                 r   r.   ÚStencilFunc.__call__  så  € Ø�‰×ÑÔ!Ø×ÑÑ)Ü�×!Ñ!Ó" d¨1¡g§l¡lÓ2Ü!ð #?ß?E¹vÜ"% d×&7Ñ&7Ó"8¸$¸q¹'¿,¹,ó@HóIð Ið �F‹?Ø˜E‘]ˆFØ—\‘\ˆFÜ"×-Ò-¨fÓ5ˆFÜŸ.™.×.Ñ.¨v·{±{Ü/<×/GÒ/GÈÓ/OóQˆKäÁ$Ó GÂ$¸Q¤§¡×!5Ñ!5°aÖ!8Á$Ñ GÓHˆKÜ$ÁtÓ%LÂtÀ!¤f§m¡m×&:Ñ&:¸1Ö&=ÁtÑ%LØ&1 ]ñ&3ó  4Ñð ˆFÜÁ$Ó GÂ$¸Q¤§¡×!5Ñ!5°aÖ!8Á$Ñ GÓHˆKØ*Ðä×!Ñ! QÓ&Ü�*˜k°Ô8à)-×)=Ñ)=¸kÓ)JÑ&ˆ˜IØ×(Ò(¨°°xØ)2ðGØ5EòGˆð ‰>Ø×'Ò'¨Ð.Ð.à×'Ò'¨$¨y©.Ð:Ð:ùò% !HùÚ%Lùò !Hs   Ã=)HÄ6)HÅ6)H!)
r_   r[   r^   rY   rR   rS   rV   rT   rO   rU   N)r0   r1   r2   r3   r4   rQ   r   r�   r„   rË   r\   r"   rÛ   r  rá   r.   r5   r6   r    r   rK   rK   A   sF   † ñð €Jò2ò (òTF2òR.ò26òò'òR-ò6GõR
 ;r    rK   c                 ó¨   • [        U [        5      (       d  SnU nOU nS nU H  nUS;  d  M  [        SU-   5      e   [        X!5      nUb  U" U5      $ U$ )NÚconstant)r  r	  rO   zUnknown stencil option )rg   rÙ   r   Ú_stencil)Úfunc_or_moderU   rT   ÚfuncÚoptionÚwrappers         r   Ústencilrk  $  sh   € ä�l¤C×(Ñ(ØˆØ‰àˆØˆãˆØÐFÕFÜ!Ð";¸fÑ"DÓEÐEñ ô �tÓ%€GØÑÙ�t‹}ÐØ€Nr    c                 ó@   ^ ^• T S:w  a  [        ST -   5      eU U4S jnU$ )Nre  zUnsupported mode style c                 óL   >• SSK Jn  UR                  U 5      n[        UTT5      $ )Nr   r  )rÏ   r  r#  rK   )rh  r  rS   rT   rU   s      €€r   Ú	decoratedÚ_stencil.<locals>.decorated:  s%   ø€ Ý'Ø×)Ñ)¨$Ó/ˆ	Ü˜9 d¨GÓ4Ð4r    r   )rT   rU   rn  s   `` r   rf  rf  6  s)   ù€ ØˆzÓÜÐ7¸$Ñ>Ó?Ð?ö5ð
 Ðr    c                 óˆ   • [         R                  " [         R                  " [        R                  R
                  5      S5      $ )z lowering for dummy stencil callsr   )ÚlirÚConstantÚIntTyper   r£   Úbitwidth)r)   r*   r+   r#   s       r   Ústencil_dummy_lowerru  A  s(   € ô �<Š<œŸš¤E§J¡J×$7Ñ$7Ó8¸!Ó<Ð<r    )re  )&rû   Únumpyr  Úllvmliter   rq  rÏ   r   r   r   r   r   r	   Únumba.core.typing.templatesr
   r   r   r   Únumba.core.imputilsr   Únumba.core.extendingr   Únumba.core.errorsr   Únumba.misc.specialr   rœ   r¥   Únumba.npr   Úobjectr   rB   rI   rK   rk  rf  ru  r6   r    r   Ú<module>r     s’   ðó ã Ý ç K× KÑ K÷Ió Iå -Ý 1Ý -Ý -Û ã Ý "ô˜ô ð ñ3ó ð3ò,Dôa;�&ô a;ôFò$	ñ ˆwÓñ=ó ñ=r    