Ë
    üÇ:jÕ›  ã                   ó  — d dl Z d dlZd dlmZ d dlmZmZm	Z	mZm
Z
mZmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlZd d	lmZ  G d
„ de«      Zed„ «       Z d„ Z! G d„ de«      Z"dd„Z#d„ Z$ ee#«      d„ «       Z%y)é    N)Úir)ÚtypesÚtypingÚutilsr   ÚconfigÚir_utilsÚregistry)ÚCallableTemplateÚ	signatureÚinfer_globalÚAbstractTemplate)Úlower_builtin)Úregister_jitable©ÚNumbaValueError)Úliteral_unroll)Únumpy_supportc                   ó   — e Zd ZdZd„ Zd„ Zy)ÚStencilFuncLowererzMCallable class responsible for lowering calls to a specific StencilFunc.
    c                 ó   — || _         y ©N)ÚstencilFunc)ÚselfÚsfs     úk/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/stencils/stencil.pyÚ__init__zStencilFuncLowerer.__init__   s
   € ØˆÕó    c                 óÞ   — | j                   j                  |j                  i |j                  d «      }|j	                  ||j
                  ||«      }|j                  |j                  g«       |S r   )r   Úcompile_for_argtysÚargsÚreturn_typeÚcall_internalÚfndescÚadd_linking_libsÚlibrary)r   ÚcontextÚbuilderÚsigr    ÚcresÚress          r   Ú__call__zStencilFuncLowerer.__call__   s\   € Ø×Ñ×2Ñ2°3·8±8¸RØ—O‘O Tó+ˆà×#Ñ# G¨T¯[©[¸#¸tÓDˆØ× Ñ  $§,¡, Ô0Øˆ
r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   © r   r   r   r      s   „ ñòór   r   c                 óú   — | j                   }t        |«      D ]a  }| j                  |j                  k7  rt        d«      ‚|j                   }t	        t        |«      «      D ]  }||   ||   kD  sŒt        d«      ‚ Œc y )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_sizesr<   $   s‰   € à�W‰W€Fô ˜dÓ#ò 	3ˆØ�6‰6�S—X‘XÒÜð Jó Kð Kà—9‘9ˆÜ”s˜6“{Ó#ò 	3ˆAØ�a‰y˜8 A™;Ó&Ü ð "2ó 3ð 3ñ	3ñ	3r   c                 óN   — t        | j                  |z   | j                  |z   «      S )z_ Called by stencil in Python mode to add the loop index to a
        user-specified slice.
    )ÚsliceÚstartÚstop)Ú	the_sliceÚaddends     r   Úslice_additionrC   ;   s#   € ô �—‘ 6Ñ)¨9¯>©>¸FÑ+BÓCÐCr   c                   óP   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)ÚStencilFuncz@
    A special type to hold stencil information for the IR.
    r   c                 óÌ  — t        | «      j                  | _        t        | «      xj                  dz  c_        || _        || _        || _        g | _        t        j                  j                  | _
        t        j                  j                  | _        | j                  | j                  «       | j
                  j                  d«      | _        i | _        t#        | «      | _        y )Né   Úneighborhood)ÚtypeÚ
id_counterÚidÚ	kernel_irÚmodeÚoptionsÚkwsr	   Ú
cpu_targetÚtyping_contextÚ
_typingctxÚtarget_contextÚ
_targetctxÚ_install_typeÚgetrH   Ú_type_cacher   Ú	_lower_me)r   rL   rM   rN   s       r   r   zStencilFunc.__init__H   s©   € Ü�t“*×'Ñ'ˆŒÜˆT‹
×Ò Ñ"ÕØ"ˆŒØˆŒ	ØˆŒØˆŒô #×-Ñ-×<Ñ<ˆŒÜ"×-Ñ-×<Ñ<ˆŒØ×Ñ˜4Ÿ?™?Ô+Ø ŸL™L×,Ñ,¨^Ó<ˆÔØˆÔÜ+¨DÓ1ˆ�r   c           
      ó–  — g }|j                  «       D �]²  \  }}|j                  }|j                  }g }	|j                  D �]{  }
t	        |
t
        j                  «      �rL|j                  |«       t        |«      dk(  rct        j                  |||«      }t        j                  ||d   |«      }|	j                  t        j                  |||
j                  |«      «       Œ¡g }|D ]  }t        j                  |||«      }||gz  }Œ! |j                  d|«      }t
        j                  j                  ||«      }|	j                  t        j                  |||«      «       t        j                  |||«      }t        j                  |||
j                  |«      }|	j                  |«       �Œk|	j                  |
«       �Œ~ |	|_        �Œµ |S )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.
        rG   r   Ústencil_index)ÚitemsÚscopeÚlocÚbodyÚ
isinstancer   ÚReturnÚappendr6   ÚVarÚSetItemÚvalueÚredefineÚExprÚbuild_tupleÚAssign)r   ÚblocksÚ
index_varsÚout_nameÚ
ret_blocksÚlabelÚblockr\   r]   Únew_bodyÚstmtÚrvarÚivarÚvar_index_varsÚone_varÚ	index_varÚs_index_varÚ
tuple_callÚsis                      r   Úreplace_return_with_setitemz'StencilFunc.replace_return_with_setitemX   s†  € ð ˆ
à"ŸL™L›Nó 	"‰LˆE�5Ø—K‘KˆEØ—)‘)ˆCØˆHØŸ
™
ó *�Ü˜d¤B§I¡IÕ.Ø×%Ñ% eÔ,ä˜:“¨!Ò+Ü!Ÿv™v e¨X°sÓ;˜Ü!Ÿv™v e¨Z¸©]¸CÓ@˜Ø Ÿ™¬¯
©
°4¸¸t¿z¹zÈ3Ó(OÕPð *,˜Ø'1ò :˜GÜ(*¯©¨u°g¸sÓ(C˜IØ*¨y¨kÑ9™Nð:ð ',§n¡n°_ÀcÓ&J˜ä%'§W¡W×%8Ñ%8¸ÈÓ%M˜
Ø Ÿ™¬¯	©	°*¸kÈ3Ó(OÔPÜ!Ÿv™v e¨X°sÓ;˜ô  ŸZ™Z¨¨k¸4¿:¹:ÀsÓK˜Ø Ÿ™¨Ö+à—O‘O DÖ)ð5*ð6 "ˆEŽJð?	"ð@ Ðr   c                 ó  — i }g }	t         j                  dk\  r,t        d||«       t        j                  |j
                  «       |€d}
n)d}
t        |«      |k7  rt        dt        |«      |fz  «      ‚t        j                  |j
                  «      }t        «       }|j
                  j                  «       D �	][  }|j                  }|j                  }g }|j                  D �	]'  }t        |t        j                   «      r™t        |j"                  t        j$                  «      rut         j                  dk\  r5t        d|j&                  j(                  |j"                  j"                  «       |j"                  j"                  ||j&                  j(                  <   t        |t        j                   «      rht        |j"                  t        j*                  «      rD|j"                  j,                  dv r,|j"                  j"                  j(                  |j.                  v s<t        |t        j0                  «      r-|j&                  j(                  |j.                  v rt        d	«      ‚t        |t        j                   «      �r|t        |j"                  t        j*                  «      �rW|j"                  j,                  d
v �r>|j"                  j"                  j(                  |j.                  v �r|j"                  j"                  j(                  |v�rî|j"                  j,                  dk(  r|j"                  j2                  }n|j"                  j4                  }|j7                  |j"                  j"                  j(                  «       |
r]t9        |d«      sJ ‚|j(                  |v r|	||j(                     gz  }	n-|j(                  |v r|	||j(                     gz  }	nt        d«      ‚|dk(  �r�t        j:                  ||d   |«      }|j=                  d|«      }||j(                     }t        |t>        j@                  jB                  «      �ru|j=                  d|«      }tE        jF                  tH        «      }t>        jJ                  jM                  |«      }|||j(                  <   t        jN                  d||«      }|jQ                  t        j                   |||«      «       t        j*                  jS                  |||gd|«      }|jU                  | jV                  |t>        jX                  gi «      ||<   |jQ                  t        j                   |||«      «       |jQ                  t        j                   t        j*                  j[                  |j"                  j"                  ||«      |j&                  |«      «       �ŒØt        j*                  j]                  t^        j6                  |||«      }|jQ                  t        j                   |||«      «       |jQ                  t        j                   t        j*                  j[                  |j"                  j"                  ||«      |j&                  |«      «       �Œ“g }g }|j=                  d|«      }g }g } ||j(                     }ta        |«      D �]¡  }!|j=                  d|«      }|jQ                  t        j                   t        j$                  |!|«      ||«      «       ||gz  }t        j:                  |||!   |«      }||gz  }|j=                  d|«      }| |gz  } |j=                  d|«      }"t        j*                  j[                  |||!   |«      }#|jQ                  t        j                   |#|"|«      «       t        |t>        jb                  «      r||!   }$n|dd }$t        |$t>        j@                  jB                  «      �r|j=                  d|«      }tE        jF                  tH        «      }t>        jJ                  jM                  |«      }|||j(                  <   t        jN                  d||«      }|jQ                  t        j                   |||«      «       t        j*                  jS                  ||"||!   gd|«      }|jU                  | jV                  |$t>        jX                  gi «      ||<   |jQ                  t        j                   |||«      «       �ŒIt        j*                  j]                  t^        j6                  |"||!   |«      }|jQ                  t        j                   |||«      «       �Œ¤ t        j*                  je                  | |«      }%|jQ                  t        j                   |%||«      «       |jQ                  t        j                   t        j*                  j[                  |j"                  j"                  ||«      |j&                  |«      «       �	Œ|jQ                  |«       �	Œ* ||_        �	Œ^ |
�rfta        |«      D �&cg c]  }&ddg‘Œ }}&t        |	«      dk(  rt        d«      ‚|	D �]-  }'t        |'tf        «      st        |'th        «      r¬ta        t        |'«      «      D ]‰  }(|'|(   })t        |)t        j:                  «      r|)j(                  |v r||)j(                     })t        |)tj        «      r1tm        ||(   d   |)«      ||(   d<   to        ||(   d   |)«      ||(   d<   Œ€t        d«      ‚ t        |'«      }*nNt        |'tj        «      r3tm        |d   d   |'«      |d   d<   to        |d   d   |'«      |d   d<   d}*nt        d«      ‚|*|k7  s�Œ%t        d«      ‚ ||fS c c}&w )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].
        rG   Ú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   rZ   rC   r0   Ú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_blocksri   r6   r   Úget_tuple_tableÚsetÚvaluesr\   r]   r^   r_   r   rh   rd   ÚConstÚtargetr�   rf   ÚopÚ	arg_namesrc   Úindexru   ÚaddÚhasattrrb   re   r   ÚmiscÚ	SliceTypeÚnumbaÚnjitrC   Ú	functionsÚ
DispatcherÚGlobalra   ÚcallÚget_call_typerR   Úintpr   ÚbinopÚoperatorr5   Ú
ConstSizedrg   ÚtupleÚlistÚintÚminÚmax)+r   ÚkernelÚindex_namesr3   rH   Ústandard_indexedÚtypemapÚ	calltypesÚ
const_dictÚkernel_constsÚneed_to_calc_kernelÚtuple_tableÚrelatively_indexedrn   r\   r]   ro   rp   Ústmt_index_varru   ÚtmpvarÚstmt_index_var_typÚsa_varÚsa_funcÚsa_func_typÚg_saÚslice_addition_callÚacc_callrj   Úsum_resultsrv   Úconst_index_varsÚind_stencilsÚdimÚ
getitemvarÚgetitemcallÚone_index_typrw   Ú_rŽ   r;   ÚteÚ	index_lens+                                              r   r{   z!StencilFunc.add_indices_to_kernel‚   sÐ	  € ð ˆ
Øˆä×!Ñ! QÒ&ÜÐ)¨4°Ô>Ü× Ñ  §¡Ô/àÐØ"&Ñà"'ÐÜ�<Ó  DÒ(Ü%ð 'Gä'*¨<Ó'8¸$Ð&?ñ'@ó Að Aô ×.Ñ.¨v¯}©}Ó=ˆä ›UÐà—]‘]×)Ñ)Ó+ó H	"ˆEØ—K‘KˆEØ—)‘)ˆCØˆHØŸ
™
ó C*�Ü˜t¤R§Y¡YÔ/Ü˜tŸz™z¬2¯8©8Ô4Ü×-Ñ-°Ò2ÜÐ9¸4¿;¹;×;KÑ;KØ"Ÿj™j×.Ñ.ô0ð 48·:±:×3CÑ3C�J˜tŸ{™{×/Ñ/Ñ0Ü ¤b§i¡iÔ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Ø Ÿ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Ô>Ð>Ð>à)×.Ñ.°+Ñ=Ø)¨k¸.×:MÑ:MÑ.NÐ-OÑO™MØ+×0Ñ0°JÑ>Ø)¨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Ø%*§^¡^Ð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Ð*ô $)¨£;ó #R˜CØ%*§^¡^°MÀ3Ó%G˜FØ$ŸO™O¬B¯I©I´b·h±h¸sÀCÓ6HØ6<¸có-Cô Dà,°°Ñ8Ð,Ü(*¯©¨u°kÀ#Ñ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Ø0BÀ3Ñ0G¡à0BÁ1Ð0E ô  *¨-¼¿¹×9MÑ9MÕ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#RôJ &(§W¡W×%8Ñ%8¸ÀsÓ%K˜
Ø Ÿ™¬¯	©	°*¸kÈ3Ó(OÔPØ Ÿ™¬¯	©	Ü"$§'¡'§/¡/°$·*±*×2BÑ2BÀ;ÈsÓ"SØ"&§+¡+¨có)3ö 4ð —O‘O DÖ)ðGC*ðH "ˆEŽJðQH	"òT ô ,1°«;Ö7 a˜Q˜qšEÐ7ˆLÐ7Ü�=Ó! QÒ&Ü%ð 'Có Dð Dð 'ó N�Ü˜e¤UÔ+¬z¸%ÄÔ/FÜ"¤3 u£:Ó.ò 
B˜Ø" 1™X˜Ü% b¬"¯&©&Ô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ð
Bô !$ E£
‘IÜ ¤sÔ+Ü),¨\¸!©_¸QÑ-?ÀÓ)G�L ‘O AÑ&Ü),¨\¸!©_¸QÑ-?ÀÓ)G�L ‘O AÑ&Ø !‘Iä)ØIóKð Kà Ô$Ü)ØLóNð Nð-Nð2 Ð0Ð1Ð1ùò= 8s   è$nc                 óR  — t         j                  dk\  r5t        d|«       t        j                  | j
                  j                  «       t        |d   t        j                  j                  «      st        d«      ‚ddlm} |j                  | j                  | j                   | j
                  |d i «      \  }}}}t        |t        j                  j                  «      rt        d«      ‚t        j                  j                  ||d   j"                  |d   j$                  «      }|||fS )NrG   Ú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†   rL   ri   r_   r   ÚnpytypesÚArrayr   Ú
numba.corerÂ   Útype_inference_stagerR   rT   r3   Úlayout)r   ÚargtysrÂ   r¦   r!   r§   r½   Úreal_rets           r   rÁ   zStencilFunc.get_return_typeK  s  € Ü×!Ñ! QÒ&ÜÐ# VÔ,Ü× Ñ  §¡×!6Ñ!6Ô7ä˜& ™)¤U§^¡^×%9Ñ%9Ô:Ü!ð #@ó Að Aõ 	,Ø-9×-NÑ-NØ—‘Ø—‘Ø—‘ØØØó.Ñ*ˆ�˜i¨ô �k¤5§>¡>×#7Ñ#7Ô8Ü!ØLóNð Nô —>‘>×'Ñ'¨°V¸A±Y·^±^Ø5;¸A±Y×5EÑ5EóGˆà˜' 9Ð-Ð-r   c                 ó¢   — t        dt        | j                  «      z   t        ft	        | | j
                  ¬«      «      }|j                  | |«       y)zmConstructs and installs a typing class for a StencilFunc object in
        the input typing context.
        ÚStencilFuncTyping_)ÚkeyÚgenericN)rI   ÚstrrK   r   ÚdictÚ_type_meÚinsert_user_function)r   Ú	typingctxÚ_ty_clss      r   rU   zStencilFunc._install_typed  sG   € ô Ð+Ü˜4Ÿ7™7“|ñ$ä(Ð*Ü ¨d¯m©mÔ<ó>ˆð 	×&Ñ& t¨WÕ5r   c                 ó\   — | j                   |   \  }}}} | j                  |||||g|¢­Ž }	|	S r   )rW   Ú_stencil_wrapper)
r   rÈ   Úkwtysr!   Úsigretr½   Úresultr¦   r§   Únew_funcs
             r   r   zStencilFunc.compile_for_argtysn  sG   € à*.×*:Ñ*:¸6Ñ*BÑ'ˆˆF�G˜YØ(�4×(Ñ(¨°¸Ø)0°)ðFØ>DòFˆàˆr   c                 ó  — | j                   �Ut        | j                   «      |d   j                  k7  r0t        dt        | j                   «      |d   j                  fz  «      ‚|}d}d}d|v r||d   fz  }|dz  }|d   }d|v r||d   fz  }|dz  }|| j                  v r| j                  |   \  }}}}|S | j                  |«      \  }}	}
t        |g|¢­Ž }d	j                  d
j                  | j                  j                  «      |«      }i }t        ||«       |d   }|j                  t        j                  |«      ¬«      }| j                  j!                  | j"                  | |fg«       |||	|
f| j                  |<   |S )z¡
        Implement AbstractTemplate.generic() for the typing class
        built by StencilFunc._install_type().
        Return the call-site signature.
        Nr   r|   Ú Úoutz
, out=NonerH   z, neighborhood=Nonez*def __numba_dummy_stencil({}{}):
    pass
ú,Ú__numba_dummy_stencil)Úpysig)rH   r6   r3   r   rW   rÁ   r   ÚformatÚjoinrL   r�   ÚexecÚreplacer   ÚpysignaturerT   Úinsert_func_defnrX   )r   rÈ   rÖ   Úargtys_extraÚ	sig_extrarØ   Ú_sigr½   rÉ   r¦   r§   r(   Ú
dummy_textÚdctÚ
dummy_funcs                  r   rÐ   zStencilFunc._type_meu  s°  € ð ×ÑÐ)Ü�×!Ñ!Ó" f¨Q¡i§n¡nÒ4Ü!ð #Cä#& t×'8Ñ'8Ó#9¸6À!¹9¿>¹>Ð"Jñ#Kó Lð Lð ˆØˆ	ØˆØ�E‰>Ø˜U 5™\˜OÑ+ˆLØ˜Ñ%ˆIØ˜5‘\ˆFà˜UÑ"Ø˜U >Ñ2Ð4Ñ4ˆLØÐ.Ñ.ˆIð ˜4×+Ñ+Ñ+Ø"×.Ñ.¨|Ñ<‰OˆT�1�a˜ØˆKà)-×)=Ñ)=¸fÓ)EÑ&ˆ�7˜IÜ˜Ð0 <Ò0ˆØD×KÑKØŸ™ §¡×!9Ñ!9Ó:¸IóGˆ
àˆÜˆZ˜ÔØÐ0Ñ1ˆ
Ø�k‰k¤× 1Ñ 1°*Ó =ˆkÓ>ˆØ�‰×(Ñ(¨4¯>©>¸4ÀÐ*NÐ)OÔPØ*-¨v°wÀ	Ð)Jˆ×Ñ˜Ñ&Øˆ
r   c                 ó¨  — i } |j                   «       }i |_        |j                  j                  «       D ]˜  \  }}t        j                  |j                  |   «      }g |_        |j                  |   j                  D ]?  }t        j                  |«      }	|j                  j                  |	«       ||v sŒ8||   ||	<   ŒA ||j                  |<   Œš ||fS )a  
        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.
        )Úcopyri   r[   Údeepcopyr^   ra   )
r   r   r§   Úcopy_calltypesÚkernel_copyÚblock_labelrn   Ú	new_blockrp   Úscopys
             r   Úcopy_ir_with_calltypesz"StencilFunc.copy_ir_with_calltypesž  sÐ   € ð ˆØ�b—g‘g“iˆØˆÔà$&§I¡I§O¡OÓ$5ò 	8Ñ ˆ[˜%ÜŸ™ b§i¡i°Ñ&<Ó=ˆIØˆIŒNàŸ	™	 +Ñ.×3Ñ3ò <�ô
 Ÿ™ dÓ+�Ø—‘×%Ñ% eÔ,Ø˜9Ò$Ø,5°d©O�N 5Ò)ð<ð /8ˆK×Ñ˜{Ò+ð	8ð ˜^Ð,Ð,r   c           
      óÆ  — | j                  | j                  |«      \  }}t        j                  |j                  «       |j
                  d   }	t        j                  |j                  |«      \  }
}t        j                  |j                  «      }t        j                  |j                  |
|||«       d|v rt        d«      ‚t        j                  d|«      }t        j                  dk\  rt        d||«       |d   }t        j                  dk\  rKt        d||j                  t        |j                  «      |«       t        j                   |j                  «       dt#        t%        |«      «      j'                  d	d
«      ›d
| j$                  ›�}g }t)        |j*                  «      D ]*  }t        j                  dt-        |«      z   |«      }||gz  }Œ, t        j                  d|«      }t        j                  d|«      }d}|�|dj/                  |«      z  }dt1        | j2                  «      v r|dj/                  |«      z  }| j4                  j7                  dg «      }|	|v rt        d«      ‚t9        t;        |«      t;        |j
                  «      z
  «      dk7  rt        d«      ‚| j=                  |||j*                  | j>                  |||«      \  }}| j>                  €|| _        t        j                  dk\  r*t        d«       t        j                   |j                  «       | jA                  |j                  ||«      }t        j                  dk\  r+t        d|«       t        j                   |j                  «       dj/                  |djC                  |j
                  «      |«      }g }t)        |j*                  «      D ]`  }tE        ||   d   tF        «      r||   d   }||   d   }n$dj/                  ||«      }dj/                  ||«      }|jI                  ||f«       Œb t9        |«      dkD  r"|d|	z   z  }|D ]  }||	k7  sŒ	|d|z   z  }Œ |dz  }t        j                  d|«      }|dj/                  ||	«      z  }d„ } |�€žtK        jL                  |j                  «      j                  jN                  }!dj/                  |||!«      }"d| j4                  v ra| j4                  d   }#tP        jR                  jS                  |#«      }$| jT                  jW                  |$|j                  «      sd}%t        |%«      ‚d}#|d |"z   z  }t)        |j*                  «      D ]Æ  }&d!g|j*                  z  }'d!g|j*                  z  }(d"j/                  | j>                  |&   d   «      |'|&<   d#j/                  | j>                  |&   d   «      |(|&<   |d d$j/                  |djC                  |'«       | |#«      «      z   z  }|d d$j/                  |djC                  |(«       | |#«      «      z   z  }ŒÈ n�d| j4                  v r�| j4                  d   }#tP        jR                  jS                  |#«      }$| jT                  jW                  |$|j                  «      sd}%t        |%«      ‚d%j/                  | | |#«      «      }"|d |"z   z  }d})t)        |j*                  «      D ]C  }t)        |)«      D ]  }*|d z  }Œ	 |d&j/                  ||   ||   d   ||||   d   «      z  }|)dz  })ŒE t)        |)«      D ]  }*|d z  }Œ	 |d'j/                  |«      z  }|d(j/                  |«      z  }t        j                  dk\  rt        d)«       t        |«       i }+|+jY                  t[        «       «       t]        ||+«       |+|   },|�t_        j`                  |,«      }-|-|_1        dd*l2m3}. |.ji                  |,«      }/t        jj                  |/j                  «       t        j                  |/j                  «      }0i }1||||g|j
                  z   |z   }2|0jm                  «       D ]e  \  }3}4|3|2vsŒtE        |4tn        jp                  «      sJ ‚|4jr                  ju                  |4jv                  |4jx                  «      }5|5jv                  |1|3<   Œg t        jz                  |/j                  |1«       t}        |/j                  j                  «       «      dz   }6t        j€                  |j                  |6«      |_        t}        |j                  j                  «       «      dz   }7|D �8cg c]  }8|8|6z   ‘Œ	 }}8t        j                  dk\  rat        d+||6«       t        d,«       t        j                   |/j                  «       t        d-«       t        j                   |j                  «       |/j                  jm                  «       D �]…  \  }9}:tƒ        |:j„                  «      D �]d  \  }};tE        |;tn        j†                  «      sŒ"|;jˆ                  jv                  |k(  sŒ<|;jx                  }<|:jr                  }=to        jŠ                  |=|<«      }>|:j„                  d | |>_B        |:j„                  |dz   d  |:_B        t�        |j                  j                  «       «      }?|>jI                  to        jŽ                  |?|<«      «       |j                  jm                  «       D ]  \  }@}A|A|/j                  |@<   Œ |:|/j                  |7<   |>|/j                  |9<   |D ]4  }B|/j                  |B   jI                  to        jŽ                  |7|<«      «       Œ6  n �Œ† n t        j�                  |/j                  «      |/_        t        jj                  |/j                  «       tE        |t’        j”                  «      sJ ‚|}Ct—        |C«      }Dt        j                  dk\  r+t        d.D«       t        j                   |/j                  «       t        j˜                  |/j                  «       |.j›                  | jT                  | jœ                  |/Dd |.jž                  i «      }E|ES c c}8w )/Nr   rÜ   z6Cannot use the reserved word 'out' in stencil kernels.Ú__sentinel__rG   Úname_var_tablerÕ   Ú__numba_stencil_ú-r½   rŽ   rH   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                 ó¨   — t        j                  | «      s3t        j                  | «      ryt        j                  | «      r| dk  ryyy t	        | «      S )Nznp.nanr   z-np.infznp.inf)ÚnpÚisfiniteÚisnanÚisinfrÎ   )Úcvals    r   Úcval_as_strz1StencilFunc._stencil_wrapper.<locals>.cval_as_strD  sE   € Ü—;‘;˜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ô   rL   r   Úremove_argsri   r�   Úcopy_propagateÚget_name_var_tableÚapply_copy_propagater   Úget_unused_var_namer   r„   r…   ÚdtyperI   r†   ÚhexrK   rã   r5   r3   rÎ   rà   rÏ   rO   rN   rV   r6   rˆ   r{   rH   ry   rá   r_   r    ra   r   Úas_dtyper,   r   ÚtypeofrR   Úcan_convertÚupdateÚglobalsrâ   r   rä   rß   rÅ   r  Úrun_frontendÚremove_delsr[   r   rb   r\   re   r�   r]   Úreplace_var_namesr¢   ÚkeysÚadd_offset_to_labelsÚ	enumerater^   rh   r‹   ÚBlockr¡   ÚJumpÚrename_labelsr   ÚTyperŸ   Úfixup_var_define_in_scopeÚ
compile_irrT   ÚDEFAULT_FLAGS)Fr   rØ   r×   r!   r¦   r§   r    rð   rï   Ú	first_argÚin_cpsÚout_cpsr÷   Úsentinel_nameÚ	the_arrayÚstencil_func_namerj   r;   Úindex_var_namerk   Úneighborhood_namerç   r¥   Úkernel_sizer¬   rl   Ú	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Úxrm   rn   Úinstr]   r\   Ú
prev_blockÚbody_first_labelÚlÚbÚ	ret_blockÚarray_typesr  rÙ   sF                                                                         r   rÕ   zStencilFunc._stencil_wrapper¹  sÒ  € ð& )-×(CÑ(CØ,0¯N©N¸Ió)GÑ%ˆ�nô 	×Ñ˜[×/Ñ/Ô0Ø×)Ñ)¨!Ñ,ˆ	ä"×1Ñ1°+×2DÑ2DÀgÓN‰ˆ�Ü!×4Ñ4°[×5GÑ5GÓHˆÜ×%Ñ%Ø×ÑØØØØô	ð �NÑ"Ü!Ð"ZÓ[Ð[ä ×4Ñ4°^À^ÓTˆÜ×!Ñ! QÒ&ÜÐ" N°MÔ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ó+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Ø  ‘^ AÑ&�Ø  ‘^ AÑ&‘à ×'Ñ'Ð(9¸1Ó=�Ø ×'Ñ'Ð(9¸1Ó=�Ø�M‰M˜2˜r˜(Õ#ð	$ô Ð!Ó" QÒ&ØÐAÀIÑMÑMˆIØ1ò 3�Ø )Ó+Ø  {Ñ!2Ñ2‘Ið3ð ˜Ñˆ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ØI�CÜ)¨#Ó.Ð.à�Ø˜ (Ñ*Ñ*ˆIÜ˜YŸ^™^Ó,ò o�Ø"˜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‘	ñoð ˜Ÿ™Ñ%Ø—|‘| FÑ+�Ü Ÿ-™-×.Ñ.¨tÓ4�Ø—‘×2Ñ2°7¸K×<MÑ<MÔ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ˆà"Ÿ™Ó*ò 	2‰IˆD�#Ø˜>Ò)Ü! #¤r§v¡vÔ.Ð.Ð.ØŸ)™)×,Ñ,¨S¯X©X°s·w±wÓ?�Ø%,§\¡\�˜TÒ"ð		2ô
 	×"Ñ" :×#4Ñ#4°lÔCä"% j×&7Ñ&7×&<Ñ&<Ó&>Ó"?À!Ñ"CÐô &×:Ñ:Ø +× 2Ñ 2Ð4KóMˆÔä˜×*Ñ*×/Ñ/Ó1Ó2°QÑ6ˆ	à;EÖF°a�aÐ1Ó1ÐFˆ
Ð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Ø—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×":Ñ":Ó"<ò 1™˜˜AØ/0˜
×)Ñ)¨!Ò,ð1ð 49�J×%Ñ% iÑ0Ø/9�J×%Ñ% eÑ,ð &0ò 5˜	Ø"×)Ñ)¨)Ñ4×;Ñ;ÜŸG™G I¨sÓ3õ5ð5ñ ðC#ñF ÙðK%	ôN %×2Ñ2°:×3DÑ3DÓEˆ
ÔÜ×Ñ˜Z×.Ñ.Ô/ä˜)¤U§Z¡ZÔ0Ð1Ð0Øˆä"& {Ó"3Ðä×!Ñ! QÒ&ÜÐ+Ð-DÔEÜ× Ñ  ×!2Ñ!2Ô3ô 	×*Ñ*¨:×+<Ñ+<Ô=Ø×&Ñ&Ø�O‰OØ�O‰OØØ#ØØ×"Ñ"Øóˆð ˆùòQ Gs   ä9qc                 ó4  — | j                   j                  «        | j                  �`t        | j                  «      |d   j                  k7  r;t        dj                  t        | j                  «      |d   j                  «      «      ‚d|v rÕ|d   }|j                  }t        j                  |«      }t        j                  j                  ||j                  t        j                  |«      «      }t        |D �cg c]!  }t        j                   j!                  |«      ‘Œ# c}«      }t        |D �cg c]!  }t        j                   j!                  |«      ‘Œ# c}|gz   «      }	n:d }t        |D �cg c]!  }t        j                   j!                  |«      ‘Œ# c}«      }|}	t"        j$                  dk\  rt'        d|||«       | j)                  |«      \  }
}} | j*                  |d |
||g|	¢­Ž }|€ |j,                  |Ž S  |j,                  ||fz   Ž S c c}w c c}w c c}w )Nr   zD{} dimensional neighborhood specified for {} dimensional input arrayrÜ   rG   r+   )rR   ÚrefreshrH   r6   r3   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_typer@  rG  Úarray_types_fullrÉ   r¦   r§   rÙ   s                 r   r+   z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°v·{±{Ü/<×/GÑ/GÈÓ/OóQˆKäÀ$Ö G¸Q¤§¡×!5Ñ!5°aÕ!8Ò GÓHˆKÜ$ÀtÖ%LÀ!¤f§m¡m×&:Ñ&:¸1Õ&=Ò%LØ&1 ]ñ&3ó  4Ñð ˆFÜÀ$Ö G¸Q¤§¡×!5Ñ!5°aÕ!8Ò GÓHˆKØ*Ðä×!Ñ! QÒ&Ü�*˜k¨4°Ô8à)-×)=Ñ)=¸kÓ)JÑ&ˆ�7˜IØ(�4×(Ñ(¨°°xÀØ)2ðGØ5EòGˆð ˆ>Ø'�8×'Ñ'¨Ð.Ð.à'�8×'Ñ'¨$°¨y©.Ð:Ð:ùò% !HùÚ%Lùò !Hs   Ã8&HÄ.&HÅ+&HN)r,   r-   r.   r/   rJ   r   ry   r{   rÁ   rU   r   rÐ   rô   rÕ   r+   r0   r   r   rE   rE   A   sF   „ ñð €Jò2ò (òTF2òR.ò26òò'òR-ò6GóR
 ;r   rE   c                 ó–   — t        | t        «      sd}| }n| }d }|D ]  }|dvsŒt        d|z   «      ‚ t        ||«      }|� ||«      S |S )NÚconstant)r  rú   rH   zUnknown stencil option )r_   rÎ   r   Ú_stencil)Úfunc_or_moderN   rM   ÚfuncÚoptionÚwrappers         r   ÚstencilrY  $  sn   € ä�l¤CÔ(ØˆØ‰àˆØˆàò FˆØÐFÒFÜ!Ð";¸fÑ"DÓEÐEðFô �t˜WÓ%€GØÐÙ�t‹}ÐØ€Nr   c                 ó<   ‡ ‡— ‰ dk7  rt        d‰ z   «      ‚ˆ ˆfd„}|S )NrS  zUnsupported mode style c                 óL   •— ddl m} |j                  | «      }t        |‰‰«      S )Nr   r  )rÅ   r  r  rE   )rV  r  rL   rM   rN   s      €€r   Ú	decoratedz_stencil.<locals>.decorated:  s%   ø€ Ý'Ø×)Ñ)¨$Ó/ˆ	Ü˜9 d¨GÓ4Ð4r   r   )rM   rN   r\  s   `` r   rT  rT  6  s)   ù€ ØˆzÒÜÐ7¸$Ñ>Ó?Ð?õ5ð
 Ðr   c                 ó„   — t        j                  t        j                  t        j                  j
                  «      d«      S )z lowering for dummy stencil callsr   )ÚlirÚConstantÚIntTyper   rš   Úbitwidth)r&   r'   r(   r    s       r   Ústencil_dummy_lowerrb  A  s(   € ô �<‰<œŸ™¤E§J¡J×$7Ñ$7Ó8¸!Ó<Ð<r   )rS  )&rí   Únumpyrý   Úllvmliter   r^  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   r<   rC   rE   rY  rT  rb  r0   r   r   ú<module>rl     s’   ðó ã Ý ç K× KÑ K÷Ió Iå -Ý 1Ý -Ý -Û ã Ý "ô˜ô ð ñ3ó ð3ò,Dôa;�&ô a;óFò$	ñ ˆwÓñ=ó ñ=r   