§
    2@ÄjŸ  ã                   ó4  — 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%dS )é    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dS )ÚStencilFuncLowererzMCallable class responsible for lowering calls to a specific StencilFunc.
    c                 ó   — || _         d S ©N)ÚstencilFunc)ÚselfÚsfs     úGC:\Projects\Historical\venv\Lib\site-packages\numba/stencils/stencil.pyÚ__init__zStencilFuncLowerer.__init__   s   € ØˆÔÐÐó    c                 óÄ   — | j                              |j        i |j        d ¦  «        }|                     ||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¸RØ”O Tñ+ô +ˆà×#Ò# G¨T¬[¸#¸tÑDÔDˆØ× Ò  $¤, Ñ0Ô0Ð0Øˆ
r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   © r   r   r   r      s<   € € € € € ðð ðð ð ðð ð ð ð r   r   c                 ó  — | j         }t          |¦  «        D ]h}| j        |j        k    rt          d¦  «        ‚|j         }t	          t          |¦  «        ¦  «        D ]#}||         ||         k    rt          d¦  «        ‚Œ$Œid S )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€Fõ ˜dÑ#Ô#ð 	3ð 	3ˆØŒ6�S”XÒÐÝð Jñ Kô Kð Kà”9ˆÝ•s˜6‘{”{Ñ#Ô#ð 	3ð 	3ˆAØ�aŒy˜8 Aœ;Ò&Ð&Ý ð "2ñ 3ô 3ð 3ð 'ð	3ð	3ð 	3r   c                 óB   — 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ÔCÐCr   c                   óR   — 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dS )Ú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                             d¦  «        | _        i | _        t#          | ¦  «        | _        d S )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×,Ò,¨^Ñ<Ô<ˆÔØˆÔÝ+¨DÑ1Ô1ˆŒˆˆr   c           
      ó’  — g }|                      ¦   «         D �]®\  }}|j        }|j        }g }	|j        D �]ˆ}
t	          |
t
          j        ¦  «        �rU|                     |¦  «         t          |¦  «        dk    rbt          j	        |||¦  «        }t          j	        ||d         |¦  «        }|	                     t          j
        |||
j        |¦  «        ¦  «         Œ¨g }|D ]}t          j	        |||¦  «        }||gz  }Œ|                     d|¦  «        }t
          j                             ||¦  «        }|	                     t          j        |||¦  «        ¦  «         t          j	        |||¦  «        }t          j
        |||
j        |¦  «        }|	                     |¦  «         �Œs|	                     |
¦  «         �ŒŠ|	|_        �Œ°|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œNð 	"ñ 	"‰LˆE�5Ø”KˆEØ”)ˆCØˆHØœ
ð *ñ *�Ý˜d¥B¤IÑ.Ô.ñ *Ø×%Ò% eÑ,Ô,Ð,å˜:‘”¨!Ò+Ð+Ý!œv e¨X°sÑ;Ô;˜Ý!œv e¨Z¸¬]¸CÑ@Ô@˜Ø Ÿš­¬
°4¸¸t¼zÈ3Ñ(OÔ(OÑPÔPÐPÐPð *,˜Ø'1ð :ð :˜GÝ(*¬¨u°g¸sÑ(CÔ(C˜IØ*¨y¨kÑ9˜N˜Nà&+§n¢n°_ÀcÑ&JÔ&J˜å%'¤W×%8Ò%8¸ÈÑ%MÔ%M˜
Ø Ÿš­¬	°*¸kÈ3Ñ(OÔ(OÑPÔPÐPÝ!œv e¨X°sÑ;Ô;˜õ  œZ¨¨k¸4¼:ÀsÑKÔK˜Ø Ÿš¨Ñ+Ô+Ð+Ñ+à—O’O DÑ)Ô)Ð)Ñ)Ø!ˆEŒJ‰JØÐr   c                 ó8  — i }g }	t           j        dk    r*t          d||¦  «         t          j        |j        ¦  «         |€d}
n6d}
t          |¦  «        |k    r!t          dt          |¦  «        |fz  ¦  «        ‚t          j        |j        ¦  «        }t          ¦   «         }|j         
                    ¦   «         D �]’}|j        }|j        }g }|j        D �]o}t          |t          j        ¦  «        rmt          |j        t          j        ¦  «        rNt           j        dk    r%t          d|j        j        |j        j        ¦  «         |j        j        ||j        j        <   t          |t          j        ¦  «        rEt          |j        t          j        ¦  «        r&|j        j        dv r|j        j        j        |j        v s-t          |t          j        ¦  «        r"|j        j        |j        v rt          d	¦  «        ‚t          |t          j        ¦  «        �rt          |j        t          j        ¦  «        �rú|j        j        d
v �rë|j        j        j        |j        v �rÒ|j        j        j        |v�r¾|j        j        dk    r|j        j        }n|j        j        }|                     |j        j        j        ¦  «         |
rWt9          |d¦  «        sJ ‚|j        |v r|	||j                 gz  }	n*|j        |v r|	||j                 gz  }	nt          d¦  «        ‚|dk    �rut          j        ||d         |¦  «        }|                     d|¦  «        }||j                 }t          |t>          j         j!        ¦  «        �rh|                     d|¦  «        }tE          j#        tH          ¦  «        }t>          j%         &                    |¦  «        }|||j        <   t          j'        d||¦  «        }| (                    t          j        |||¦  «        ¦  «         t          j         )                    |||gd|¦  «        }| *                    | j+        |t>          j,        gi ¦  «        ||<   | (                    t          j        |||¦  «        ¦  «         | (                    t          j        t          j         -                    |j        j        ||¦  «        |j        |¦  «        ¦  «         �Œt          j         .                    t^          j        |||¦  «        }| (                    t          j        |||¦  «        ¦  «         | (                    t          j        t          j         -                    |j        j        ||¦  «        |j        |¦  «        ¦  «         �Œ¾g }g }|                     d|¦  «        }g }g } ||j                 }ta          |¦  «        D �]¾}!|                     d|¦  «        }| (                    t          j        t          j        |!|¦  «        ||¦  «        ¦  «         ||gz  }t          j        |||!         |¦  «        }||gz  }|                     d|¦  «        }| |gz  } |                     d|¦  «        }"t          j         -                    |||!         |¦  «        }#| (                    t          j        |#|"|¦  «        ¦  «         t          |t>          j1        ¦  «        r	||!         }$n
|dd…         }$t          |$t>          j         j!        ¦  «        �r|                     d|¦  «        }tE          j#        tH          ¦  «        }t>          j%         &                    |¦  «        }|||j        <   t          j'        d||¦  «        }| (                    t          j        |||¦  «        ¦  «         t          j         )                    ||"||!         gd|¦  «        }| *                    | j+        |$t>          j,        gi ¦  «        ||<   | (                    t          j        |||¦  «        ¦  «         �Œct          j         .                    t^          j        |"||!         |¦  «        }| (                    t          j        |||¦  «        ¦  «         �ŒÀt          j         2                    | |¦  «        }%| (                    t          j        |%||¦  «        ¦  «         | (                    t          j        t          j         -                    |j        j        ||¦  «        |j        |¦  «        ¦  «         �ŒZ| (                    |¦  «         �Œq||_        �Œ”|
�rÇd„ ta          |¦  «        D ¦   «         }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          ¦  «        rKtm          ||'         d         |(¦  «        ||'         d<   to          ||'         d         |(¦  «        ||'         d<   Œšt          d¦  «        ‚t          |&¦  «        })nqt          |&tj          ¦  «        rMtm          |d         d         |&¦  «        |d         d<   to          |d         d         |&¦  «        |d         d<   d})nt          d¦  «        ‚|)|k    rt          d¦  «        ‚�ŒŠ||fS )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_indexc                 ó   — g | ]}d d g‘ŒS )r   r0   )Ú.0Ú_s     r   ú
<listcomp>z5StencilFunc.add_indices_to_kernel.<locals>.<listcomp>*  s   € Ð7Ð7Ð7 a˜Q˜q˜EÐ7Ð7Ð7r   z=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Ô'8¸$Ð&?ñ'@ñ Aô Að Aõ Ô.¨v¬}Ñ=Ô=ˆå ™UœUÐà”]×)Ò)Ñ+Ô+ð H	"ñ H	"ˆEØ”KˆEØ”)ˆCØˆHØœ
ð C*ñ C*�Ý˜t¥R¤YÑ/Ô/ð DÝ˜tœz­2¬8Ñ4Ô4ðDåÔ-°Ò2Ð2ÝÐ9¸4¼;Ô;KØ"œjÔ.ñ0ô 0ð 0ð 48´:Ô3C�J˜tœ{Ô/Ñ0Ý ¥b¤iÑ0Ô0ð MÝ& t¤zµ2´7Ñ;Ô;ðMà œJœMÐ-JÐJÐJØ œJÔ,Ô1°VÔ5EÐEÐEÝ˜t¥R¤ZÑ0Ô0ð Fà œKÔ,°Ô0@Ð@Ð@Ý)ð +Lñ Mô Mð Må˜t¥R¤YÑ/Ô/ñ s*Ý& t¤zµ2´7Ñ;Ô;ñs*à œJœMÐ-JÐJÑJØ œJÔ,Ô1°VÔ5EÐEÑEØ œJÔ,Ô1Ð9IÐIÑIà”z”}¨	Ò1Ð1Ø)-¬Ô)9˜˜à)-¬Ô)=˜ð '×*Ò*¨4¬:Ô+;Ô+@ÑAÔAÐAð +ð 	LÝ& ~°vÑ>Ô>Ð>Ð>Ð>à)Ô.°+Ð=Ð=Ø)¨k¸.Ô:MÔ.NÐ-OÑO˜M˜MØ+Ô0°JÐ>Ð>Ø)¨j¸Ô9LÔ.MÐ-NÑN˜M˜Må"1ð 3Kñ #Lô #Lð Lð ˜q’y‘yõ
 %'¤F¨5°+¸a´.À#Ñ$FÔ$F˜	Ø!&§¢°ÀÑ!EÔ!E˜Ø-4°^Ô5HÔ-IÐ*õ &Ð&8½%¼*Ô:NÑOÔOñ >Ø%*§^¢^Ð4DÀcÑ%JÔ%J˜FÝ&+¤jµÑ&@Ô&@˜GÝ*/¬/×*DÒ*DÀWÑ*MÔ*M˜KØ3>˜G F¤KÑ0Ý#%¤9Ð-=¸wÈÑ#LÔ#L˜DØ$ŸOšO­B¬I°d¸FÀCÑ,HÔ,HÑIÔIÐIÝ24´'·,²,¸vÈÐXaÐGbÐdfÐhkÑ2lÔ2lÐ/Ø=H×=VÒ=VÐW[ÔWfÐi{õ  ~Cô  ~Hð  iIð  KMñ  >Nô  >N˜IÐ&9Ñ:Ø$ŸOšO­B¬IÐ6IÈ6ÐSVÑ,WÔ,WÑXÔXÐXØ$ŸOšO­B¬IÝ+-¬7¯?ª?¸4¼:Ô;KÈVÐUXÑ+YÔ+YØ+/¬;¸ñ-=ô -=ñ >ô >ð >ñ >õ (*¤w§}¢}µX´\À>Ø5>Àñ(Eô (E˜Hà$ŸOšO­B¬I°hÀÈÑ,LÔ,LÑMÔMÐMØ$ŸOšO­B¬IÝ+-¬7¯?ª?¸4¼:Ô;KÈVÐUXÑ+YÔ+YØ+/¬;¸ñ-=ô -=ñ >ô >ð >ñ >ð &(˜
Ø&(˜Ø&+§n¢n°_ÀcÑ&JÔ&J˜Ø+-Ð(Ø')˜à-4°^Ô5HÔ-IÐ*õ $)¨¡;¤;ð #Rñ #R˜CØ%*§^¢^°MÀ3Ñ%GÔ%G˜FØ$ŸOšO­B¬Iµb´h¸sÀCÑ6HÔ6HØ6<¸cñ-Cô -Cñ Dô Dð Dà,°°Ñ8Ð,Ý(*¬¨u°kÀ#Ô6FÈÑ(LÔ(L˜IØ&¨9¨+Ñ5˜Jà%*§^¢^Ð4GÈÑ%MÔ%M˜FØ(¨V¨HÑ4˜LØ).¯ª¸	À3Ñ)GÔ)G˜JÝ*,¬'¯/ª/¸.Ø7GÈÔ7LÈcñ+Sô +S˜Kà$ŸOšO­B¬I°kÀ:ÈsÑ,SÔ,SÑTÔTÐTå)Ð*<½eÔ>NÑOÔOð FØ0BÀ3Ô0G  à0BÀ1À1À1Ô0E õ  *¨-½¼Ô9MÑNÔNñ RØ).¯ªÐ8HÈ#Ñ)NÔ)N Ý*/¬*µ^Ñ*DÔ*D Ý.3¬o×.HÒ.HÈÑ.QÔ.Q Ø7B ¨¬Ñ 4Ý')¤yÐ1AÀ7ÈCÑ'PÔ'P Ø (§¢µ´	¸$ÀÈÑ0LÔ0LÑ MÔ MÐ MÝ68´g·l²lÀ6ÈJÐXbÐcfÔXgÐKhÐjlÐnqÑ6rÔ6rÐ 3ØAL×AZÒAZÐ[_Ô[jÐmzõ  }Bô  }Gð  mHð  JLñ  BMô  BM 	Ð*=Ñ >Ø (§¢µ´	Ð:MÈvÐWZÑ0[Ô0[Ñ \Ô \Ð \Ñ \å+-¬7¯=ª=½¼ÀzØ9CÀC¼È#ñ,Oô ,O à (§¢µ´	¸(ÀFÈCÑ0PÔ0PÑ QÔ QÐ QÑ Qå%'¤W×%8Ò%8¸ÀsÑ%KÔ%K˜
Ø Ÿš­¬	°*¸kÈ3Ñ(OÔ(OÑPÔPÐPØ Ÿš­¬	Ý"$¤'§/¢/°$´*Ô2BÀ;ÈsÑ"SÔ"SØ"&¤+¨cñ)3ô )3ñ 4ô 4ð 4ñ 4ð —O’O DÑ)Ô)Ð)Ñ)Ø!ˆEŒJ‰Jàñ 	Nð 8Ð7­5°©;¬;Ð7Ñ7Ô7ˆLÝ�=Ñ!Ô! QÒ&Ð&Ý%ð 'Cñ Dô Dð Dð 'ð Nñ N�Ý˜e¥UÑ+Ô+ð K­z¸%ÅÑ/FÔ/Fð KÝ"¥3 u¡:¤:Ñ.Ô.ð 
Bð 
B˜Ø" 1œX˜Ý% b­"¬&Ñ1Ô1ð 5°b´gÀÐ6KÐ6KØ!+¨B¬GÔ!4˜BÝ% b­#Ñ.Ô.ð BÝ14°\À!´_ÀQÔ5GÈÑ1LÔ1L˜L¨œO¨AÑ.Ý14°\À!´_ÀQÔ5GÈÑ1LÔ1L˜L¨œO¨AÑ.Ð.å"1ð!Añ#Bô #Bð Bõ !$ E¡
¤
�I�IÝ ¥sÑ+Ô+ð KÝ),¨\¸!¬_¸QÔ-?ÀÑ)GÔ)G�L ”O AÑ&Ý),¨\¸!¬_¸QÔ-?ÀÑ)GÔ)G�L ”O AÑ&Ø !�I�Iå)ØIñKô Kð Kà Ò$Ð$Ý)ØLñNô Nð Nñ %ð Ð0Ð1Ð1r   c                 ó"  — t           j        dk    r.t          d|¦  «         t          j        | j        j        ¦  «         t          |d         t          j	        j
        ¦  «        st          d¦  «        ‚ddlm} |                     | j        | j        | j        |d i ¦  «        \  }}}}t          |t          j	        j
        ¦  «        rt          d¦  «        ‚t          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Ñ7Ô7Ð7å˜& œ)¥U¤^Ô%9Ñ:Ô:ð 	AÝ!ð #@ñ Aô Að Að 	,Ð+Ð+Ð+Ð+Ð+Ø-9×-NÒ-NØ”Ø”Ø”ØØØñ.ô .Ñ*ˆ�˜i¨õ �k¥5¤>Ô#7Ñ8Ô8ð 	NÝ!ØLñNô Nð Nõ ”>×'Ò'¨°V¸A´Y´^Ø5;¸A´YÔ5EñGô Gˆà˜' 9Ð-Ð-r   c                 ó²   — t          dt          | j        ¦  «        z   t          ft	          | | j        ¬¦  «        ¦  «        }|                     | |¦  «         dS )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  s\   € õ Ð+Ý˜4œ7‘|”|ñ$å(Ð*Ý ¨d¬mÐ<Ñ<Ô<ñ>ô >ˆð 	×&Ò& t¨WÑ5Ô5Ð5Ð5Ð5r   c                 óN   — | j         |         \  }}}} | j        |||||g|¢R Ž }	|	S r   )rW   Ú_stencil_wrapper)
r   rË   Úkwtysr!   Úsigretr†   Úresultrª   r«   Únew_funcs
             r   r   zStencilFunc.compile_for_argtysn  sM   € à*.Ô*:¸6Ô*BÑ'ˆˆF�G˜YØ(�4Ô(¨°¸Ø)0°)ðFØ>DðFð Fð Fˆàˆr   c                 óþ  — | j         �Tt          | j         ¦  «        |d         j        k    r1t          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 |                      |¦  «        \  }}	}
t          |g|¢R Ž }d	                     d
                     | j	        j
        ¦  «        |¦  «        }i }t          ||¦  «         |d         }|                     t          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Ò4Ð4Ý!ð #Cå#& tÔ'8Ñ#9Ô#9¸6À!¼9¼>Ð"Jñ#Kñ Lô 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Ô)EÑ&ˆ�7˜IÝ˜Ð0 <Ð0Ð0Ð0ˆØD×KÒKØŸš ¤Ô!9Ñ:Ô:¸IñGô Gˆ
àˆÝˆZ˜ÑÔÐØÐ0Ô1ˆ
Ø�kŠk¥Ô 1°*Ñ =Ô =ˆkÑ>Ô>ˆØŒ×(Ò(¨4¬>¸4ÀÐ*NÐ)OÑPÔPÐPØ*-¨v°wÀ	Ð)JˆÔ˜Ñ&Øˆ
r   c                 ó|  — i } |j         ¦   «         }i |_        |j                             ¦   «         D ]‡\  }}t          j        |j        |         ¦  «        }g |_        |j        |         j        D ]?}t          j        |¦  «        }	|j                             |	¦  «         ||v r||         ||	<   Œ@||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‘i”iˆØˆÔà$&¤I§O¢OÑ$5Ô$5ð 	8ð 	8Ñ ˆ[˜%Ýœ b¤i°Ô&<Ñ=Ô=ˆIØˆIŒNàœ	 +Ô.Ô3ð <ð <�õ
 œ dÑ+Ô+�Ø”×%Ò% eÑ,Ô,Ð,Ø˜9Ð$Ð$Ø,5°d¬O�N 5Ñ)øØ.7ˆKÔ˜{Ñ+Ð+Ø˜^Ð,Ð,r   c           
      óZ  ‡D— |                       | 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    rCt          d||j        t          |j        ¦  «        |¦  «         t          j        |j        ¦  «         dt#          t%          |¦  «        ¦  «                             d	d
¦  «        ›d
| j        ›�}g }t)          |j        ¦  «        D ]-}t          j
        dt-          |¦  «        z   |¦  «        }||gz  }Œ.t          j
        d|¦  «        }t          j
        d|¦  «        }d}|�|d                     |¦  «        z  }dt1          | j        ¦  «        v r|d                     |¦  «        z  }| j                             dg ¦  «        }|	|v rt          d¦  «        ‚t9          t;          |¦  «        t;          |j        ¦  «        z
  ¦  «        dk    rt          d¦  «        ‚|                      |||j        | j        |||¦  «        \  }}| j        €|| _        t          j        dk    r(t          d¦  «         t          j        |j        ¦  «         |                       |j        ||¦  «        }t          j        dk    r)t          d|¦  «         t          j        |j        ¦  «         d                     |d !                    |j        ¦  «        |¦  «        }g }t)          |j        ¦  «        D ]ƒ}tE          ||         d         tF          ¦  «        r||         d         }||         d         }n,d                     ||¦  «        }d                     ||¦  «        }| $                    ||f¦  «         Œ„t9          |¦  «        dk    r |d|	z   z  }|D ]}||	k    r|d|z   z  }Œ|dz  }t          j
        d|¦  «        }|d                     ||	¦  «        z  }d„ } |�€�tK          j&        |j        ¦  «        j        j'        }!d                     |||!¦  «        }"d| j        v r^| j        d         }#tP          j)         )                    |#¦  «        }$| j*         +                    |$|j        ¦  «        sd}%t          |%¦  «        ‚nd}#|d |"z   z  }t)          |j        ¦  «        D ]Ü}&d!g|j        z  }'d!g|j        z  }(d"                     | j        |&         d         ¦  «        |'|&<   d#                     | j        |&         d         ¦  «        |(|&<   |d d$                     |d !                    |'¦  «         | |#¦  «        ¦  «        z   z  }|d d$                     |d !                    |(¦  «         | |#¦  «        ¦  «        z   z  }ŒÝn�d| j        v r„| j        d         }#tP          j)         )                    |#¦  «        }$| j*         +                    |$|j        ¦  «        sd}%t          |%¦  «        ‚d%                     | | |#¦  «        ¦  «        }"|d |"z   z  }d})t)          |j        ¦  «        D ]X}t)          |)¦  «        D ]}*|d z  }Œ|d&                     ||         ||         d         ||||         d         ¦  «        z  }|)dz  })ŒYt)          |)¦  «        D ]}*|d z  }Œ|d'                     |¦  «        z  }|d(                     |¦  «        z  }t          j        dk    rt          d)¦  «         t          |¦  «         i }+|+ ,                    t[          ¦   «         ¦  «         t]          ||+¦  «         |+|         },|�t_          j0        |,¦  «        }-|-|_1        dd*l2m3}. |. 4                    |,¦  «        }/t          j5        |/j        ¦  «         t          j        |/j        ¦  «        }0i }1||||g|j        z   |z   }2|0 6                    ¦   «         D ]T\  }3}4|3|2vrKtE          |4tn          j8        ¦  «        sJ ‚|4j9         :                    |4j;        |4j<        ¦  «        }5|5j;        |1|3<   ŒUt          j=        |/j        |1¦  «         t}          |/j         ?                    ¦   «         ¦  «        dz   ŠDt          j@        |j        ‰D¦  «        |_        t}          |j         ?                    ¦   «         ¦  «        dz   }6ˆDfd+„|D ¦   «         }t          j        dk    rat          d,|‰D¦  «         t          d-¦  «         t          j        |/j        ¦  «         t          d.¦  «         t          j        |j        ¦  «         |/j         6                    ¦   «         D �]b\  }7}8tƒ          |8jB        ¦  «        D �]E\  }}9tE          |9tn          jC        ¦  «        �r$|9jD        j;        |k    �r|9j<        }:|8j9        };to          jE        |;|:¦  «        }<|8jB        d |…         |<_B        |8jB        |dz   d …         |8_B        t�          |j         ?                    ¦   «         ¦  «        }=|< $                    to          jG        |=|:¦  «        ¦  «         |j         6                    ¦   «         D ]\  }>}?|?|/j        |><   Œ|8|/j        |6<   |<|/j        |7<   |D ]5}@|/j        |@          $                    to          jG        |6|:¦  «        ¦  «         Œ6 n�ŒG�Œc t          jH        |/j        ¦  «        |/_        t          j5        |/j        ¦  «         tE          |t’          jJ        ¦  «        sJ ‚|}At—          |A¦  «        }Bt          j        dk    r)t          d/|B¦  «         t          j        |/j        ¦  «         t          jL        |/j        ¦  «         |. M                    | j*        | jN        |/|Bd |.jO        i ¦  «        }C|CS )0Nr   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        | ¦  «        s6t          j        | ¦  «        rdS t          j        | ¦  «        r
| dk     rdS dS d S 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  sd   € Ý”;˜tÑ$Ô$ð 
!å”8˜D‘>”>ð (Ø#˜8Ý”X˜d‘^”^ð (Ø˜a’x�xØ(˜yà'˜xð	(ð (õ ˜4‘y”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©Úcompilerc                 ó   •— g | ]}|‰z   ‘ŒS r0   r0   )r…   ÚxÚstencil_stub_last_labels     €r   r‡   z0StencilFunc._stencil_wrapper.<locals>.<listcomp>¸  s   ø€ ÐFÐFÐF°a�aÐ1Ñ1ÐFÐFÐFr   z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)Er   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Ú	new_labelrm   rn   Úinstr]   r\   Ú
prev_blockÚbody_first_labelÚlÚbÚ	ret_blockÚarray_typesr  rÜ   r  sE                                                                       @r   rØ   zStencilFunc._stencil_wrapper¹  sþ  ø€ ð& )-×(CÒ(CØ,0¬N¸Iñ)Gô )GÑ%ˆ�nõ 	Ô˜[Ô/Ñ0Ô0Ð0ØÔ)¨!Ô,ˆ	å"Ô1°+Ô2DÀgÑNÔN‰ˆ�Ý!Ô4°[Ô5GÑHÔHˆÝÔ%ØÔØØØØñ	ô 	ð 	ð �NÐ"Ð"Ý!Ð"ZÑ[Ô[Ð[å Ô4°^À^ÑTÔTˆÝÔ! QÒ&Ð&ÝÐ" N°MÑBÔBÐBà˜”Gˆ	åÔ! QÒ&Ð&ÝÐ$ k°;Ô3DÝ&*¨;Ô+<Ñ&=Ô&=¸tñEô Eð EåÔ  Ô!3Ñ4Ô4Ð4øõ
 ),­B¨y©M¬MÑ(:Ô(:×(BÒ(BÀ3ÈÑ(LÔ(LÐ(LÐ(LØ(,¬¨ð1Ðð ˆ
Ý�y”~Ñ&Ô&ð 	+ð 	+ˆAÝ%Ô9¸'ÅCÈÁFÄFÑ:JØ:HñJô JˆNà˜>Ð*Ñ*ˆJˆJõ Ô/°°~ÑFÔFˆÝ$Ô8¸Ø9GñIô IÐàˆ	ØÐØ˜×+Ò+¨HÑ5Ô5Ñ5ˆIØ�T $¤(™^œ^Ð+Ð+Ø˜×+Ò+Ð,=Ñ>Ô>Ñ>ˆIð  œ<×+Ò+Ð,?ÀÑDÔDÐàÐ(Ð(Ð(Ý!ð #Rñ Sô Sð Sõ �sÐ#Ñ$Ô$¥s¨;Ô+@Ñ'AÔ'AÑAÑBÔBÀaÒGÐGÝ!ð #Rñ Sô Sð Sð +/×*DÒ*DØ˜Z¨¬ØÔ!Ð#3°W¸nñ+Nô +NÑ'ˆÐ'ð ÔÐ$Ø +ˆDÔåÔ! QÒ&Ð&ÝÐ/Ñ0Ô0Ð0ÝÔ  Ô!3Ñ4Ô4Ð4ð ×5Ò5°kÔ6HØ6@À(ñLô Lˆ
õ Ô! QÒ&Ð&ÝÐ5°zÑBÔBÐBÝÔ  Ô!3Ñ4Ô4Ð4ð &×,Ò,Ð->ØŸš Ô!6Ñ7Ô7¸ñDô Dˆ	ð ˆÝ�y”~Ñ&Ô&ð 	$ð 	$ˆAÝ˜+ aœ.¨Ô+­SÑ1Ô1ð >Ø  ”^ AÔ&�Ø  ”^ AÔ&��à ×'Ò'Ð(9¸1Ñ=Ô=�Ø ×'Ò'Ð(9¸1Ñ=Ô=�Ø�MŠM˜2˜r˜(Ñ#Ô#Ð#Ð#õ
 Ð!Ñ"Ô" QÒ&Ð&ØÐAÀIÑMÑMˆIØ1ð 3ð 3�Ø )Ò+Ð+Ø  {Ñ!2Ñ2�IøØ˜ÑˆIõ Ô1°,ÀÑOÔOˆ
ØÐ*×1Ò1°*¸iÑHÔHÑHˆ	ð	!ð 	!ð 	!ð  ‰>Ý,Ô5Ø*Ô0ñ 2ô  2Ü26´xð à8×?Ò?Ø  *Ð.>ñ@ô @ˆHð ˜œÐ%Ð%Ø”| FÔ+�Ý œ-×.Ò.¨tÑ4Ô4�Ø”×2Ò2°7¸KÔ<MÑNÔNð /ØI�CÝ)¨#Ñ.Ô.Ð.ð/ð �Ø˜ (Ñ*Ñ*ˆIÝ˜Yœ^Ñ,Ô,ð oð o�Ø"˜e i¤nÑ4�Ø ˜E I¤NÑ2�	Ø#)§=¢=°Ô1BÀ3Ô1GÈÔ1JÑ#KÔ#K�˜CÑ Ø!'§¢¨tÔ/@ÀÔ/EÀaÔ/HÑ!IÔ!I�	˜#‘Ø˜V o×&<Ò&<¸XÀsÇxÂxÐP[ÑG\ÔG\Ð^iÐ^iÐjnÑ^oÔ^oÑ&pÔ&pÑpÑp�	Ø˜V o×&<Ò&<¸XÀsÇxÂxÐPYÑGZÔGZÐ\gÐ\gÐhlÑ\mÔ\mÑ&nÔ&nÑnÑn�	�	ðoð ˜œÐ%Ð%Ø”| FÔ+�Ý œ-×.Ò.¨tÑ4Ô4�Ø”×2Ò2°7¸KÔ<MÑNÔNð /ØI�CÝ)¨#Ñ.Ô.Ð.Ø)×0Ò0°¸;¸;ÀtÑ;LÔ;LÑMÔM�Ø˜V hÑ.Ñ.�	àˆå�y”~Ñ&Ô&ð 	ð 	ˆAÝ˜6‘]”]ð $ð $�Ø˜VÑ#�	�	ð ð 1ß28²&Ø& qœMØ" 1œI aœLØ&ØØ" 1œI aœLñ3*ô 3*ñ*ˆIð �a‰KˆFˆFå�v‘”ð 	 ð 	 ˆAØ˜ÑˆIˆIð 	�Z×&Ò& }Ñ5Ô5Ñ5ˆ	ØÐ&×-Ò-¨hÑ7Ô7Ñ7ˆ	åÔ! QÒ&Ð&ÝÐ)Ñ*Ô*Ð*Ý�)ÑÔÐð ˆØ�
Š
•7‘9”9ÑÔÐÝˆY˜ÑÔÐØÐ,Ô-ˆØÐÝÔ% lÑ3Ô3ˆEØ ˆFŒLà'Ð'Ð'Ð'Ð'Ð'Ø×*Ò*¨<Ñ8Ô8ˆ
ÝÔ˜ZÔ.Ñ/Ô/Ð/õ Ô/°
Ô0AÑBÔBˆ	ØˆØ(¨(Ð4EØ%ð'Ø)4Ô)>ñ?ØAKñLˆà"ŸšÑ*Ô*ð 	2ð 	2‰IˆD�#Ø˜>Ð)Ð)Ý! #¥r¤vÑ.Ô.Ð.Ð.Ð.Øœ)×,Ò,¨S¬X°s´wÑ?Ô?�Ø%,¤\�˜TÑ"øÝÔ" :Ô#4°lÑCÔCÐCå"% jÔ&7×&<Ò&<Ñ&>Ô&>Ñ"?Ô"?À!Ñ"CÐõ &Ô:Ø +Ô 2Ð4KñMô MˆÔå˜Ô*×/Ò/Ñ1Ô1Ñ2Ô2°QÑ6ˆ	àFÐFÐFÐF¸:ÐFÑFÔFˆ
åÔ! QÒ&Ð&ÝÐ)¨:Ð7NÑOÔOÐOÝÐ6Ñ7Ô7Ð7ÝÔ  Ô!2Ñ3Ô3Ð3ÝÐ7Ñ8Ô8Ð8ÝÔ  Ô!3Ñ4Ô4Ð4ð 'Ô-×3Ò3Ñ5Ô5ð %	ñ %	‰LˆE�5Ý$ U¤ZÑ0Ô0ð #ñ #‘��4Ý ¥b¤iÑ0Ô0ñ  Ø”KÔ$¨Ò5Ñ5àœ(�CØ!œK�Eõ
 "$¤¨%°Ñ!5Ô!5�JØ&+¤j°°!°¤n�J”Oà!&¤¨A°©E¨F¨FÔ!3�E”Jå'*¨;Ô+=×+BÒ+BÑ+DÔ+DÑ'EÔ'EÐ$ð ×%Ò%¥b¤gÐ.>ÀÑ&DÔ&DÑEÔEÐEð #.Ô"4×":Ò":Ñ"<Ô"<ð 1ð 1™˜˜AØ/0˜
Ô)¨!Ñ,Ð,à38�JÔ% iÑ0Ø/9�JÔ% eÑ,ð &0ð 5ð 5˜	Ø"Ô)¨)Ô4×;Ò;ÝœG I¨sÑ3Ô3ñ5ô 5ð 5ð 5à�EùáØå$Ô2°:Ô3DÑEÔEˆ
ÔÝÔ˜ZÔ.Ñ/Ô/Ð/å˜)¥U¤ZÑ0Ô0Ð1Ð1Ð0Øˆå"& {Ñ"3Ô"3ÐåÔ! QÒ&Ð&ÝÐ+Ð-DÑEÔEÐEÝÔ  Ô!2Ñ3Ô3Ð3õ 	Ô*¨:Ô+<Ñ=Ô=Ð=Ø×&Ò&ØŒOØŒOØØ#ØØÔ"Øñô ˆð ˆr   c                 ó<  — | j                              ¦   «          | j        �ct          | j        ¦  «        |d         j        k    r@t          d                     t          | j        ¦  «        |d         j        ¦  «        ¦  «        ‚d|v r’|d         }|j        }t          j	        |¦  «        }t          j                             ||j        t          j        |¦  «        ¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         |gz   ¦  «        }nd }t          d„ |D ¦   «         ¦  «        }|}t          j        dk    rt#          d|||¦  «         |                      |¦  «        \  }	}
} | j        |d |	|
|g|¢R Ž }|€
 |j        |Ž S  |j        ||fz   Ž S )	Nr   zD{} dimensional neighborhood specified for {} dimensional input arrayrß   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r0   ©r   r  ©r…   r
  s     r   r‡   z(StencilFunc.__call__.<locals>.<listcomp>  ó(   € Ð GÐ GÐ G¸Q¥¤×!5Ò!5°aÑ!8Ô!8Ð GÐ GÐ Gr   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r0   rN  rO  s     r   r‡   z(StencilFunc.__call__.<locals>.<listcomp>  s(   € Ð%LÐ%LÐ%LÀ!¥f¤m×&:Ò&:¸1Ñ&=Ô&=Ð%LÐ%LÐ%Lr   c                 óL   — g | ]!}t           j                             |¦  «        ‘Œ"S r0   rN  rO  s     r   r‡   z(StencilFunc.__call__.<locals>.<listcomp>  rP  r   rG   r+   )rR   ÚrefreshrH   r6   r3   r   rã   r  r   Ú
from_dtyper   rÆ   rÇ   Ú
map_layoutr¢   r   rˆ   r‰   rÄ   rØ   Úentry_point)r   r    ÚkwargsrÛ   ÚrdtypeÚrttypeÚresult_typerK  Úarray_types_fullrÌ   rª   r«   rÜ   s                r   r+   zStencilFunc.__call__  sâ  € ØŒ×ÒÑ!Ô!Ð!ØÔÐ)Ý�Ô!Ñ"Ô" d¨1¤g¤lÒ2Ð2Ý!ð #?ß?EºvÝ"% dÔ&7Ñ"8Ô"8¸$¸q¼'¼,ñ@Hô @HñIô Ið Ið �Fˆ?ˆ?Ø˜E”]ˆFØ”\ˆFÝ"Ô-¨fÑ5Ô5ˆFÝœ.×.Ò.¨v°v´{Ý/<Ô/GÈÑ/OÔ/OñQô QˆKåÐ GÐ GÀ$Ð GÑ GÔ GÑHÔHˆKÝ$Ð%LÐ%LÀtÐ%LÑ%LÔ%LØ&1 ]ñ&3ñ  4ô  4ÐÐð ˆFÝÐ GÐ GÀ$Ð GÑ GÔ GÑHÔHˆKØ*ÐåÔ! QÒ&Ð&Ý�*˜k¨4°Ñ8Ô8Ð8à)-×)=Ò)=¸kÑ)JÔ)JÑ&ˆ�7˜IØ(�4Ô(¨°°xÀØ)2ðGØ5EðGð Gð Gˆð ˆ>Ø'�8Ô'¨Ð.Ð.à'�8Ô'¨$°¨y©.Ð:Ð:r   N)r,   r-   r.   r/   rJ   r   ry   r{   rÄ   rU   r   rÓ   r÷   rØ   r+   r0   r   r   rE   rE   A   sÅ   € € € € € ðð ð €Jð2ð 2ð 2ð (ð (ð (ðTF2ð F2ð F2ðR.ð .ð .ð26ð 6ð 6ðð ð ð'ð 'ð 'ðR-ð -ð -ð6Gð Gð GðR
 ;ð  ;ð  ;ð  ;ð  ;r   rE   Úconstantc                 ó²   — t          | t          ¦  «        sd}| }n| }d }|D ]}|dvrt          d|z   ¦  «        ‚Œt          ||¦  «        }|� ||¦  «        S |S )Nr\  )r  rý   rH   zUnknown stencil option )r_   rÑ   r   Ú_stencil)Úfunc_or_moderN   rM   ÚfuncÚoptionÚwrappers         r   Ústencilrc  $  s‹   € å�l¥CÑ(Ô(ð ØˆØˆˆàˆØˆàð Fð FˆØÐFÐFÐFÝ!Ð";¸fÑ"DÑEÔEÐEð Gõ �t˜WÑ%Ô%€GØÐØˆw�t‰}Œ}ÐØ€Nr   c                 óF   ‡ ‡— ‰ dk    rt          d‰ z   ¦  «        ‚ˆ ˆfd„}|S )Nr\  zUnsupported mode style c                 ó\   •— ddl m} |                     | ¦  «        }t          |‰‰¦  «        S )Nr   r  )rÈ   r  r  rE   )r`  r  rL   rM   rN   s      €€r   Ú	decoratedz_stencil.<locals>.decorated:  s:   ø€ Ø'Ð'Ð'Ð'Ð'Ð'Ø×)Ò)¨$Ñ/Ô/ˆ	Ý˜9 d¨GÑ4Ô4Ð4r   r   )rM   rN   rf  s   `` r   r^  r^  6  sI   øø€ ØˆzÒÐÝÐ7¸$Ñ>Ñ?Ô?Ð?ð5ð 5ð 5ð 5ð 5ð 5ð
 Ðr   c                 ón   — 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_lowerrl  A  s%   € õ Œ<�œ¥E¤JÔ$7Ñ8Ô8¸!Ñ<Ô<Ð<r   )r\  )&rð   Únumpyr   Úllvmliter   rh  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   rc  r^  rl  r0   r   r   ú<module>rv     sö  ðð €€€à Ð Ð Ð Ø Ð Ð Ð Ð Ð à KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KðIð Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ià -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø -Ð -Ð -Ð -Ð -Ð -Ø -Ð -Ð -Ð -Ð -Ð -Ø €€€à €€€Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ˜ñ ô ð ð ð3ð 3ñ Ôð3ð,Dð Dð Dða;ð a;ð a;ð a;ð a;�&ñ a;ô a;ð a;ðFð ð ð ð$	ð 	ð 	ð €ˆwÑÔð=ð =ñ Ôð=ð =ð =r   