
    sh՛                        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     j/Users/tiagomarins/Projetos/claudeai/copy_bank/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2388ROOT+##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{    WWF d#66SXX J K K99s6{#Ay8;&  "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)StencilFuncA   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??+ LL,,^<+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                  " XU
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                  X5      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     Xl        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    
"LLNLEKKE))CH

dBII..%%e,:!+!vves;!vve]C@ 

4tzz3(OP *,'1G(*us(CI*k9N (2 ',nn_c&J%'WW%8%8%M
 		*k3(OP!vves;  ZZk4::sK +OOD)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  XUR(                     /-  n	O.UR(                  U;   a  XUR(                     /-  n	O[        S5      eUS:X  Ga  [        R:                  " XS   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:                  " XU!   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_kernelNTFD%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KKE))CH

tRYY//tzz28844--294;;;K;K"jj..0 48::3C3CJt{{//0bii00&tzz277;; JJMM-JJ JJ,,11V5E5EEtRZZ00 KK,,0@0@@) +L M MtRYY//&tzz277;; JJMM-JJ JJ,,11V5E5EE JJ,,119IIzz}}	1)-)9)9)-)=)= '**4::+;+;+@+@A +&~v>>>>)..+=).:M:M.N-OOM+00J>)9L9L.M-NNM"1 3K #L L qy
 %'FF5a.#$F	!&!E-4^5H5H-I* &&8%**:N:NOO%*^^4Dc%JF&+jj&@G*///*D*DW*MK3>GFKK0#%99-=w#LD$OOBIIdFC,HI24'',,vXaGbdfhk2l/=H=V=VW[WfWfi{  ~C  ~H  ~H  iI  KM  >NI&9:$OOBII6I6SV,WX$OOBII+-77??4::;K;KVUX+Y+/;;-= > (*ww}}X\\>5>(EH$OOBIIh,LM$OOBII+-77??4::;K;KVUX+Y+/;;-= > &(
&(&+nn_c&J+-(')-4^5H5H-I* $);C%*^^M3%GF$OOBIIbhhsC6H6<c-C D,8,(*u#6F(LI&9+5J%*^^4G%MF(VH4L).	3)GJ*,''//.7G7Lc+SK$OOBIIk:s,ST)*<e>N>NOO0B30G0B10E  *-9M9MNN).8H#)N*/**^*D.3oo.H.H.Q7B 4')yy1A7C'P (		$0L M68ggll6JXbcfXgKhjlnq6r 3ALAZAZ[_[j[jmz  }B  }G  }G  mH  JL  BM	*= > (		:MvWZ0[ \+-77==z9CC#,O (		(FC0P QG $/J &(WW%8%8s%K
 		*k3(OP 		"$''//$**2B2B;s"S"&++c)3 4 OOD)G #H "EJQ ,T  ,1;7;aQqE;L7=!Q&% 'C D D 'eU++z%/F/F"3u:."1X%b"&&11bgg6K!+BGG!4B%b#..14\!_Q5G1LLOA.14\!_Q5G1LLOA."1!A#B B / !$E
Is++),\!_Q-?)GLOA&),\!_Q-?)GLOA& !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 k5>>#7#788!LN N >>''AY^^5;AY5E5E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     +477|$(*mm<> 	&&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  pn
[        U/UQ76 nS	R                  S
R                  U R                  R                  5      U5      n0 n[        X5        US   nUR                  [        R                  " U5      S9nU R                  R!                  U R"                  X4/5        XX4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    )!!"fQinn4! #C#&t'8'8#96!9>>"J#K L L 	E>5\O+L%I5\FU">244L..I +++"..|<OT1aK)-)=)=f)E&I0<0DKK!9!9:IG
Z01
kk 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     ggi$&IIOO$5 [bii&<=IIN		+.33
 d+%%e,$,5ON) 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X5        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     OS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_str1StencilFunc._stencil_wrapper.<locals>.cval_as_strD  sL    ;;t$$88D>>#XXd^^ax('	 $ 4y 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,0NNI)G% 	[//0))!,	"11+2D2DgN!44[5G5GH%%	 N"!"Z[[ 44^^T!!Q&"NBG	!!Q&$k3D3D&*;+<+<&=tE  !3!34
 ),ByM(:(B(B3(L(,1 
y~~&A%99'CF:J:HJN>**J ' //~F$889GI	++H55IT$((^+++,=>>I  <<++,?D((! #R S S s#$s;+@+@'AABaG! #R S S +/*D*DZ!!#3W+N'' $ +D!!Q&/0  !3!34 55k6H6H6@(L
 !!Q&5zB  !3!34 &,,->!6!67D	 y~~&A+a.+S11 ^A& ^A& ''(91= ''(91=MM2r(# ' !"Q&AIMMI1)+{!22I  2 I 11,O
*11*iHH		!  >,55*00 226$xx 8?? *.>@H %||F+ --..t4227K<M<MNNIC)#.. O (**IY^^,"einn4 EINN2	#)==1B1B31G1J#KC !'t/@/@/Ea/H!I	#Vo&<&<XsxxP[G\^ijn^o&ppp	Vo&<&<XsxxPYGZ\ghl\m&nnn	 - %||F+ --..t4227K<M<MNNIC)#..)00;t;LMVh..	y~~&A6]V#	 #  128&&qM"1IaL&"1IaL3**I aKF' '* vAI 
 	Z&&}55	&--h77	!!Q&)*) 

79Y,-%%l3E FL'**<8
Z../ //
0A0AB	((4E%')4)>)>?AKL"*ID#>)!#rvv....)),,SXXsww?%,\\T"	 +
 	"":#4#4lC"%j&7&7&<&<&>"?!"C &:: + 2 24KM**//12Q6	;EF:aa11:
F!!Q&):7NO67  !2!2378  !3!34 '--335LE5$UZZ04bii00KK$$5((C!KKE
 "$%!5J&+jj!nJO!&AEF!3EJ'*;+=+=+B+B+D'E$ %%bgg.>&DE #."4"4":":"<A/0
))!, #= 49J%%i0/9J%%e, &0	")))4;;GGIs35 &0 C 1F K 6N %22:3D3DE
Z../)UZZ0010"&{"3!!Q&+-DE  !2!23 	**:+<+<=&&OOOO#"" 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XU5        U R)                  U5      u  pnU R*                  " US XU/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   !)!!"d1gll2! #??Ev"%d&7&7"8$q',,@HI I F?E]F\\F"--f5F....v{{/</G/G/OQK$ G$Q!5!5a!8$ GHK$t%Lt!fmm&:&:1&=t%L&1]&3  4 F$ G$Q!5!5a!8$ GHK*!!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2R.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    lC((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%    '))$/	9dG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(     <<EJJ$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    