
    'Th                     X   S SK r S SKrS SKrS SKrS SKr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JrJr  SSKJr  SSKJr  SSK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%J&r&J'r'  SSK(J)r)J*r*J+r+  S r,S r-S r.S\
S\/4S jr0S\
S\/4S jr1S\
S\/4S jr2S\
S\/4S jr3S\
S\/4S jr4S r5S r6S r7S\\   4S jr8S\\Rr                     S\\   4S jr:\/\;\<" S5      1r= " S  S!5      r> " S" S#\ R~                  5      r@ " S$ S%5      rA " S& S'\ R~                  5      rBS( rCg))    N)
ModuleType)	AnyCallableDictOptionalTupleTypeUnionIterableList   )language)ir)	constexprsemantic	str_to_tytensor)_unwrap_if_constexprnv_tma_desc_type
base_value	base_type)get_jit_fn_file_line)JITFunction)find_paths_ifget_iterable_pathset_iterable_path   )CompilationErrorCompileTimeAssertionFailureUnsupportedLanguageConstructc                 d    Sn[         R                  " X 5      (       d  [        SU SU  3U 5      eU $ )Nz^[a-zA-Z_][a-zA-Z0-9_]*$zinvalid z identifier: )rematchr   )nametypepatterns      V/var/www/auris/envauris/lib/python3.13/site-packages/triton/compiler/code_generator.pycheck_identifier_legalityr(      s5    )G88G""$}TFCTJJK    c                    U R                  5       (       a/  SSR                  [        [        U R                  5      5      -   S-   $ U R                  5       (       a  S[        U R                  5      -   $ U R                  5       (       aP  [        R                  R                  R                  nU R                  U:X  a  SOSnU[        U R                  5      -   $ U R                  5       (       a  [        U 5      $ U R!                  5       (       aF  [        U R"                  5      nSR                  [        [        U R$                  5      5      nU SU S3$ U R'                  5       (       a  g[)        SU  35      e)	NT_PiuSVUnsupported type )is_tuplejoinmap	mangle_tytypesis_ptr
element_tyis_intr   dtype
SIGNEDNESSSIGNEDint_signednessstrint_bitwidthis_floatingis_blockscalarshapeis_void	TypeError)tyr=   prefixeltrD   s        r'   r6   r6      s   	{{}}SXXc)RXX677#==	yy{{Yr}}---	yy{{**11))V3BOO,,,	~~2w	{{}}		"S"((+,awa  	zz||
't,
--r)   c                    SR                  U Vs/ s H  n[        U5      PM     sn5      nSR                  [        U5       Vs/ s H  oU S[        X%   5       3PM     sn5      nUR	                  SS5      nUR	                  SS5      nUR	                  SS5      R	                  SS5      nU  S	U S	U 3nU$ s  snf s  snf )
Nr,   c._d_'_sq_[]__)r4   r6   sortedreprreplace)r$   arg_tys	constantsrG   mangled_arg_namesr.   mangled_constantsrets           r'   	mangle_fnr[   2   s    '!B'B)B-'!BCviGX!YGX!Cqil);(<"=GX!YZ)11#u=)11#v>)11#s;CCCMF"&'r*;)<
=CJ "C!Ys   B8B=oreturnc                 "    [        U [        5      $ N)
isinstancer   r\   s    r'   _is_triton_valuerb   >   s    a$$r)   c                 "    [        U [        5      $ r_   )r`   r   ra   s    r'   _is_triton_tensorrd   B   s    a  r)   c                 l    U S L =(       d*    [        U [        [        R                  R                  45      $ r_   )r`   r   r   corer;   ra   s    r'   _is_constexprrg   F   s'    9G
1y(--2E2E&FGGr)   c                     [        U 5      =(       a?    U R                  R                  5       (       + =(       d    U R                  R                  S:H  $ Nr   )rd   r%   rB   numelra   s    r'   _is_triton_scalarrk   J   s2    QP):%:%Oafflla>OPr)   c                 .    [        U [        [        45      $ r_   )r`   listtuplera   s    r'   _is_list_likero   N   s    a$''r)   c                    UR                   (       an  [        U5       H^  u  p4[        U5      (       a  M  [        U5      (       a  M)  [	        UR
                  U SUR                   SUR                  U    SU 35      e   g g )Nz	Function z= is marked noinline, but was called with non-scalar argument :)noinline	enumeraterg   rk   r    src__name__	arg_names)nodefnargsidxargs        r'   _check_fn_argsr|   R   s    	{{!$HC %%.?.D.D2FFD},ijljvjvwzj{i||}  B  ~C  D  ( r)   c                 v    [        U [        5      =(       a#    [        U [        5      =(       a    [	        U S5      $ )N_fields)r`   r%   
issubclassrn   hasattr)vals    r'   _is_namedtupler   \   s'    c4 WZU%;WY@WWr)   c                    [        [        U 5      5      (       a  U R                  nOI[        U [        R
                  5      (       a  U R                  R                  nO S[        U 5       35       eU  Vs/ s H
  o1" U5      PM     nnU Vs/ s H  o3R                  PM     nn[        R
                  " U[        R                  " XR5      5      $ s  snf s  snf )Nr2   )r   r%   r~   r`   r   rn   fields
tuple_type)valuerx   r   vvalsr7   s         r'   _apply_to_tuple_valuesr   `   s    d5k""	E8>>	*	*""7)$u+77u !5aBqE5D!!"TVVTE">>$ 3 3E BCC ""s   4CCvaluesc                 >    / nU  H  nUR                  U5        M     U$ r_   )_flatten_ir)r   handlesr   s      r'   flatten_values_to_irr   m   s"    G	g Nr)   r   r7   c              #   r   #    SnU H  nUR                  X5      u  pBUv   M     U[        U 5      :X  d   eg 7f)Nr   )_unflatten_irlen)r   r7   cursorrG   r   s        r'   unflatten_ir_valuesr   t   s?     F((9  S\!!!s   57c                   &    \ rS rSrS rS rS rSrg)enter_sub_region   c                     Xl         g r_   )	generator)selfr   s     r'   __init__enter_sub_region.__init__   s    "r)   c                    U R                   R                  R                  5       U l        U R                   R                  R                  5       U l        0 U R                   l        U R                   R                  R                  5       U l        U R                   R                  R                  5       U l
        U R                  U R                  4$ r_   )r   lscopecopyliveins
local_defs	prev_defsbuilderget_insertion_blockinsert_blockget_insertion_pointinsert_point)r   s    r'   	__enter__enter_sub_region.__enter__   s    ~~,,11322779$&! NN22FFH NN22FFH||T....r)   c                     U R                   R                  R                  U R                  5        U R                  U R                   l        U R                  U R                   l        g r_   )r   r   restore_insertion_pointr   r   r   r   r   )r   ry   kwargss      r'   __exit__enter_sub_region.__exit__   s@    66t7H7HI $$(NN!r)   )r   r   r   r   r   N)ru   
__module____qualname____firstlineno__r   r   r   __static_attributes__ r)   r'   r   r      s    #/3r)   r   c                      \ rS rSrS rS\4S jrS\4S jrS\4S jrS\	R                  S\4S jrS\	R                  S\4S	 jrS\	R                  S\4S
 jrS\	R                   S\4S jrS\	R$                  S\4S jrS\	R(                  S\4S jrS\	R,                  S\4S jrS\	R0                  S\4S jrS\	R4                  S\4S jrS\	R8                  S\4S jrSrg)ContainsReturnChecker   c                     Xl         g r_   gscope)r   r   s     r'   r   ContainsReturnChecker.__init__   s    r)   r]   c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr_   visit).0sr   s     r'   	<genexpr>5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>   s     /$Q4::a==$   !)any)r   bodys   ` r'   _visit_stmts"ContainsReturnChecker._visit_stmts   s    /$///r)   c                     [        U[        5      (       aE  UR                  (       d4  UR                  5       n[	        U R
                  5      R                  U5      $ gNF)r`   r   rr   parser   r   r   )r   rx   fn_nodes      r'   _visit_function%ContainsReturnChecker._visit_function   s=    b+&&r{{hhjG(5;;GDDr)   c                 t   Sn[         R                  " U5       H  u  p4[        U[        5      (       aF  U H>  n[        U[         R                  5      (       d  M$  U=(       d    U R                  U5      nM@     M`  [        U[         R                  5      (       d  M  U=(       d    U R                  U5      nM     U$ r   )astiter_fieldsr`   rm   ASTr   )r   rw   rZ   r,   r   items         r'   generic_visit#ContainsReturnChecker.generic_visit   s    -HA%&&!D!$00!5TZZ%5 " E377++.TZZ. . 
r)   rw   c                 f   [        UR                  [        R                  5      (       an  UR                  R                  U R
                  ;   aI  U R
                  UR                  R                     n[        X!R                  5      nU R                  U5      $ gU R                  UR                  5      $ r   )
r`   r   r   Nameidr   getattrattrr   r   )r   rw   r   rx   s       r'   visit_Attribute%ContainsReturnChecker.visit_Attribute   sx     djj#((++zz}}+DJJMM2UII.++B//zz$**%%r)   c                     [        UR                  5      [        R                  L a  gUR                  U R
                  ;   a*  U R
                  UR                     nU R                  U5      $ gr   )r%   ctxr   Storer   r   r   )r   rw   rx   s      r'   
visit_Name ContainsReturnChecker.visit_Name   sO    >SYY&77dkk!TWW%B''++r)   c                     g)NTr   r   rw   s     r'   visit_Return"ContainsReturnChecker.visit_Return       r)   c                     gr   r   r   s     r'   visit_Assign"ContainsReturnChecker.visit_Assign        r)   c                     gr   r   r   s     r'   visit_AugAssign%ContainsReturnChecker.visit_AugAssign   r   r)   c                 8    U R                  UR                  5      $ r_   r   r   r   s     r'   visit_Module"ContainsReturnChecker.visit_Module         ++r)   c                 8    U R                  UR                  5      $ r_   r   r   s     r'   visit_FunctionDef'ContainsReturnChecker.visit_FunctionDef   r   r)   c                     U R                  UR                  5      nUR                  (       a$  U=(       d    U R                  UR                  5      nU$ r_   )r   r   orelse)r   rw   rZ   s      r'   visit_IfContainsReturnChecker.visit_If   s=     		*;;7**4;;7C
r)   c                 |    U R                  UR                  5      =(       d    U R                  UR                  5      $ r_   )r   r   r   r   s     r'   visit_IfExp!ContainsReturnChecker.visit_IfExp   s'    zz$))$?

4;;(??r)   c                 8    U R                  UR                  5      $ r_   )r   funcr   s     r'   
visit_Call ContainsReturnChecker.visit_Call   s    zz$))$$r)   r   N)ru   r   r   r   r   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   r   r   r)   r'   r   r      s   0D 0T 	T 	&CMM &d &sxx D     
CMM d 
, , ,,coo ,$ ,SVV  @		 @d @%sxx %D %r)   r   c                   d    \ rS rSrS rS\R                  4S jrS\R                  4S jrS r	Sr
g)	ASTFunction   c                 4    Xl         X l        X0l        X@l        g r_   )	ret_types	arg_typesrW   attrs)r   r  r  rW   r  s        r'   r   ASTFunction.__init__   s    """
r)   r   c                     / nU R                    HR  nUc  M  UR                  U5      n[        U[        5      (       a  UR	                  U5        MA  UR                  U5        MT     U$ r_   )r  to_irr`   rm   extendappend)r   r   r  ret_tyir_tys        r'   return_types_irASTFunction.return_types_ir   s\    	nnF~LL)E%&&  '  ' % r)   c                   ^  U 4S jn[        [        T R                  U5      5      nU Vs/ s H(  n[        T R                  U5      R	                  U5      PM*     nnT R                  U5      nUR                  XV5      $ s  snf )Nc                 8   > U TR                   ;  =(       a    US L$ r_   rW   pathr,   r   s     r'   <lambda>'ASTFunction.serialize.<locals>.<lambda>      T^^!;!M!Mr)   )rm   r   r  r   r  r  get_function_ty)r   r   is_val	val_pathsr  r  r  s   `      r'   	serializeASTFunction.serialize   su     Nt~~v>?	XabXaPT&t~~t<BB7KXa	b((1	&&y<< cs   /A>c           
        ^ ^ U4S jmT" T R                   5      nU 4S jn[        [        T R                   U5      5      nT R                  R	                  5        H8  u  pVU H-  u  pxXT;   d  M  UR                  UR                  U5      Xx5        M/     M:     [        U5       HE  u  p[        T R                   U
5      n[        U[        5      (       d  M2  UR                  U	SS5        MG     [        U5       HK  u  p[        T R                   U
5      n[        X*[        R                  " UR                  U	5      U5      5        MM     T R                  nUR	                  5        H%  u  p[        X*[        R                   " U5      5        M'     U$ )Nc                    > [        U [        [        [        R                  45      (       a.  [        R                  " U  Vs/ s H  nT" U5      PM     snU 5      $ [        R
                  " S 5      $ s  snf r_   )r`   rm   rn   r   r   r   )rG   xmake_templates     r'   r)  .ASTFunction.deserialize.<locals>.make_template  sY    "tUH,?,?@AA~~&DA}Q'7&DbII%%d++ 'Es    A0c                 8   > U TR                   ;  =(       a    US L$ r_   r  r  s     r'   r  )ASTFunction.deserialize.<locals>.<lambda>  r   r)   ztt.nv_tma_descr   )r  rm   r   r  itemsset_arg_attrindexrs   r   r`   r   r   r   r   ry   rW   r   )r   rx   r   r"  r#  	attr_path
attr_specs	attr_nameattr_valr.   r  rG   rW   r   r)  s   `             @r'   deserializeASTFunction.deserialize	  s0   	,
 T^^,Mt~~v>?	%)ZZ%5%5%7!I'1#	)OOIOOI$>	T (2 &8 !+GA"4>>48B".//#3Q7 ,
 !+GA"4>>48Bd(//"''!*b*IJ , NN	"*IDd(*<*<S*AB +r)   )r  r  rW   r  N)ru   r   r   r   r   r   r   r  r$  r4  r   r   r)   r'   r
  r
     s,    
rzz 
= =r)   r
  c                     ^ \ rS rSr%   SeS\S\\   S\\   4S jjr\	\
\\\\\4 V Vs0 s H  oR                   U_M     snn r\\\4   \S'   \R'                  S\R*                  R,                  4S	\R.                  4S
\R0                  445        S rS rS rS\S\\\4   SS4S jrS r S r!S r"S r#S r$S r%S\4S jr&S r'S r(S r)S r*S r+S r,S r-S  r.S! r/S" r0S# r1S$ r2S% r3\4Rj                  S&\4Rl                  S'\4Rn                  S(\4Rp                  S)\4Rr                  S*\4Rt                  S+\4Rv                  S,\4Rx                  S-\4Rz                  S.\4R|                  S/\4R~                  S0\4R                  S10rA\\B\4R                     \4   \S2'   S3 rDS4 rES5 rFS6 rGS7 rHS8 rIS9 rJ\4R                  S:\4R                  S;\4R                  S<\4R                  S=\4R                  S>\4R                  S?0rQ\\B\4R                     \4   \S@'   SA rS\4R                  SB\4R                  SC\4R                  SD\4R                  SE0rX\\B\4R                     \4   \SF'   SG rZSH r[SI r\SJ r]SK r^SL r_SM r`SN raSO rbS\c\\4   4SP jrdS\4SQ jreSR\4SS jrfST rgSU rhSV\4R                  4SW jrj\4R                  SX\4R                  SY0rm\\B\4R                     \4   \SZ'   S[ roS\ rpS] rqS^ rrU4S_ jrsS` rtSV\4R                  SS4Sa jrvSb rw\R*                  R                  \v\R*                  R                  \w" \z5      \\w" \5      \	\w" \	5      0r{\\|\}\4R                  /\4   4   \Sc'   Sdr~U=r$ s  snn f )fCodeGeneratori'  Njit_fnfunction_types	file_namec                    Xl         [        R                  " U5      U l        Xl        US-
  U l        U R                  R                  XS5        X`R                  l        XpR                  l        Uc  0 OUU R                  l        U	c  U R                  R                  5       OU	U l
        Uc  0 OUU l        X l        0 U l        UR                  5        H  u  nn[        U[         5      (       a+  UR#                  UR$                  U5      U R                  U'   MF  ['        USS5      nUU;   a(  ['        UU   UR$                  5      U R                  U'   M  UU R                  U'   M     0 U l        XPl        U
(       a  [-        US5      nX@l        Xl        S U l        Xl        / U l        S U l        0 U l        U R=                  5       U l        S U l         SU l!        g )Nr   r   r    functionF)"contextr   r   r:  
begin_lineset_locoptionscodegen_fns
module_mapcreate_modulemodulefunction_ret_types	prototyper   r-  r`   r   getru   r   r   r8  r(   function_name	is_kernelcur_noderr   	scf_stackret_typer   _define_name_lookupdereference_namerx   visiting_arg_default_value)r   r>  rG  r   rI  r8  rA  rB  rC  rE  rJ  r9  rr   r:  r?  kr   module_names                     r'   r   CodeGenerator.__init__)  s    zz'*"$q.YA6& $/ (2(:"
6<ndll002&(6(>"N"LLNDAq!Z((!+

A!>A!!\26Kj(!(K)@!**!MA!"A # 5mZPM*"  .06:6N6N6P +0'r)   builtin_namespaceprintminmaxc                 B    [        U R                  R                  X5      $ r_   )r    r8  rt   )r   rw   messages      r'   _unsupportedCodeGenerator._unsupportedc  s    +DKKOOTKKr)   c                 z    [        5       nU R                  R                  X5      nX2L a  g[        U5      (       a  gg)NFT)objectr   rH  rg   )r   r$   absent_markerr   s       r'   _is_constexpr_global"CodeGenerator._is_constexpr_globalf  s5    kkood2r)   c                    ^ ^^^ S[         4U 4S jjmS[         4U 4S jjm[        5       mS[         S[        4UUUU 4S jjnU$ )Nr$   c                 :   > TR                   R                  X5      $ r_   )r   rH  )r$   absentr   s     r'   local_lookup7CodeGenerator._define_name_lookup.<locals>.local_lookups  s    ;;??400r)   c                 0  > TR                   R                  X5      n[        X!L U TR                  ;   [	        U5      [
        L [        U[        5      [        USS5      [        USS5      R                  S5      [        U[        R                  5      [        U5      TR                  U 5      TR                  [        R                   R                  SS5      S:H  /5      (       a  U$ [#        [$        R&                  " S	U  S
35      R)                  SS5      5      e)N__triton_builtin__Fr   r<  ztriton.language"TRITON_ALLOW_NON_CONSTEXPR_GLOBALS01z.                Cannot access global variable a   from within @jit'ed
                function. Triton kernels can only access global variables that
                are instanstiated as constexpr (`x = triton.language.constexpr(42)`). Note that this is different from
                annotating a variable as constexpr (`x: triton.language.constexpr = 42`), which is not supported.  Alternatively, set the
                envvar TRITON_ALLOW_NON_CONSTEXPR_GLOBALS=1, but we do not
                promise to support this forever.
 )r   rH  r   rT  r%   r   r`   r   r   
startswithr   r;   r   r_  rP  osenviron	NameErrortextwrapdedentrU   )r$   rc  r   r   s      r'   global_lookup8CodeGenerator._define_name_lookup.<locals>.global_lookupw  s   ++//$/C M44+A+A#AI+sK0C!5u=Cr2==>OPsHNN3"3'--d3 33JJNN#GMQTT   
 %//3f 51!4 5 6=WT35GI Ir)   r]   c                    > TnTTTR                   R                  4 H  nU" X5      nX1Ld  M  Us  $    [        U  S35      e)Nz is not defined)rT  rH  rp  )r$   rc  lookup_functionr   r^  rs  rd  r   s       r'   name_lookup6CodeGenerator._define_name_lookup.<locals>.name_lookup  sO    "F#/@V@V@Z@Z#Z'5& L $[ tfO455r)   )r?   r]  r   )r   rw  r^  rs  rd  s   ` @@@r'   rN  !CodeGenerator._define_name_lookupq  sF    	1s 	1	I 	I< 	6c 	6c 	6 	6 r)   r$   r   r]   c                 <    X R                   U'   X R                  U'   g)zThis function:
    called by visit_Assign() & visit_FunctionDef() to store left value (lvalue)
1. record local defined name (FIXME: should consider control flow)
2. store tensor in self.lvalue
N)r   r   )r   r$   r   s      r'   	set_valueCodeGenerator.set_value  s     "D %r)   c                 p    U R                   R                  5       nU R                   R                  5       nX!4$ r_   )r   get_locr   )r   locips      r'   _get_insertion_point_and_loc*CodeGenerator._get_insertion_point_and_loc  s/     ll""$\\--/wr)   c                 p    U R                   R                  U5        U R                   R                  U5        g r_   )r   r   r@  )r   r  r  s      r'   _set_insertion_point_and_loc*CodeGenerator._set_insertion_point_and_loc  s&    ,,R0S!r)   c                     [        U5      (       d  U/nU H5  nU R                  U5        [        U[        R                  5      (       d  M5    g    g r_   )ro   r   r`   r   r  )r   stmtsstmts      r'   visit_compound_statement&CodeGenerator.visit_compound_statement  s@    U##GEDJJt $

++ r)   c                 B    [         R                  R                  X5        g r_   r   NodeVisitorr   r   s     r'   r   CodeGenerator.visit_Module      %%d1r)   c                     U R                  UR                  5      nUb   e[        R                  " UR                   Vs/ s H  o0R                  U5      PM     sn5      nU$ s  snf r_   )r   r   r   rn   elts)r   rw   r   rI   r  s        r'   
visit_ListCodeGenerator.visit_List  sP    jj"{{~~$))D)3zz#)DE Es   A"c                 8  ^ ^ T R                  UR                  5      n/ nUU 4S jmT" U5      nUc  [        R                  nOH[	        U[        R
                  R                  5      (       d   eUR                  U5        UR                  nT R                  R                  U5        T R                  c  UT l        O+T R                  U:w  a  [        ST R                   SU 35      eT R                  R                  5       nT R                  R                  U5        g )Nc                    > [        U [        R                  5      (       a  [        U T5      $ [        U [        R                  [
        [        45      (       a!  [        R                  " U TR                  5      $ U $ r_   )
r`   r   rn   r   r   intfloatr   	to_tensorr   )r   decayr   s    r'   r  )CodeGenerator.visit_Return.<locals>.decay  sW    %00-eU;;EH$6$6U#CDD))%>>Lr)   zInconsistent return types:  and )r   r   r   voidr`   rf   r   r   r%   r   rZ   rM  rF   create_blockset_insertion_point_to_end)r   rw   	ret_valuer   r  post_ret_blockr  s   `     @r'   r   CodeGenerator.visit_Return  s    JJtzz*		 )$	]]Fi)A)ABBBB!!'*^^F!== "DM]]f$9$--fXVWW 224//?r)   c                     U R                  UR                  5      n[        U[        R                  R
                  5      (       d   eUR                  $ r_   )r   r   r`   r   rf   rn   r   )r   rw   ry   s      r'   visit_StarredCodeGenerator.visit_Starred  s;    zz$**%$ 3 34444{{r)   c                    U R                  UR                  5      u  p#U R                  (       a  U R                  US5      e[	        UR                  R
                  S S S2   5       H  u  pEUR                  R                  U* S-
     nUR                  nUR                  n[        R                  " U[        R                  " 5       S9n	Uc  [        R                  " U	/US9n
O[        R                  " XUS9n
 U R                  (       a   eSU l        U R                  U
5        SU l        M     U R                  (       a  S	OS
nU R                  R!                  U R"                  5      nU R"                  R%                  U R&                  U R(                  XU R*                  5      U l        U R&                  R-                  U R                  5        U R                  R/                  5       nU R                  R1                  U R                  5      n[3        X.5       H  u  nnU R5                  UU5        M     U R"                  R7                  5       nU R"                  R9                  U5        U R;                  UR<                  5        U R"                  R7                  5       R?                  5       (       a   eU R@                  b  U R@                  [B        RD                  :X  a2  [B        RD                  U l         U R"                  RG                  / 5        GO[I        U R@                  [B        RJ                  5      (       a&  U R@                  RL                  U R                  l'        OU R@                  /U R                  l'        U R                  RQ                  U R                  R!                  U R"                  5      5        U R"                  RG                  U R                  RS                  U R"                  5       Vs/ s H  nU R"                  RU                  U5      PM      sn5        U R                  RW                  5         U(       a  U R"                  RY                  U5        g g ! SU l        f = fs  snf )Nz,nested function definition is not supported.r   r   r   targetsr   )targetr   
annotationTFpublicprivate)-r   ry   rx   rZ  rs   defaultsr  r{   r   r   r   r  	AnnAssignrP  rJ  rG  r$  r   get_or_insert_functionrE  rI  rr   	push_backadd_entry_blockr4  zipr{  r   set_insertion_point_to_startr  r   has_terminatorrM  r   r  rZ   r`   r   r7   r  
reset_typer  create_poisonfinalizer  )r   rw   rv   kwarg_namesr.   default_valuearg_noder  r$   	st_target	init_node
visibilityfn_tyentry
arg_valuesarg_name	arg_value	insert_ptrG   s                      r'   r   CodeGenerator.visit_FunctionDef  s!   !%DII!6	77##D*XYY )$))*<*<TrT*B CAyy~~qb1f-H!,,J<<DDciik:I!JJ	{-P	MM\fg	8::::26/

9%27/ !D" "&XY
((6,,55dkk4CUCUW\jnjwjwxdgg&'')^^//8
#&y#=HiNN8Y/ $>LL446	11%8%%dii0 <<335DDFFFF== DMMX]]$B$MMDMLLR $--)<)<==+/==+>+>(,0MM?(GGt~~77EFLLt~~GeGefjfrfrGstGsdll88<GstuLL33I> ? 38/8 us   8+Q5%Q+	Q(c                     / nUR                    H  nX R                  U5      /-  nM     U R                  UR                  5      nX$4$ r_   )ry   r   kwarg)r   rw   rv   r{   r  s        r'   visit_argumentsCodeGenerator.visit_arguments&  sC    	99C**S/**I jj,%%r)   c                 X    [         R                  R                  X5        UR                  $ r_   )r   r  r   r{   r   s     r'   	visit_argCodeGenerator.visit_arg-  s    %%d1xxr)   c                 d   U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      nU[        :X  aE  X0R
                  ;   a  [        U S35      e[	        U5      nX@R
                  U'   U R
                  U   $ U R                  U5      $ )Nz4 is already defined. constexpr cannot be reassigned.)r   r  r  r   r   r   
ValueErrorr   )r   rw   r  r  r   s        r'   visit_AnnAssignCodeGenerator.visit_AnnAssign1  s    ZZ0
DKK(

4::&"$ F8 ,D "E F Fe$E"'KK;;v&&  &&r)   c                 X   [        U[        R                  5      (       a7  UR                  R                  R
                  S:X  d   eU R                  X5      $ [        U[        R                  5      (       as  UR                  R                  R
                  S:X  d   e[        UR                  5       H3  u  p4U R                  U R                  U5      UR                  U   5        M5     g [        U[        R                  5      (       d   eU R                  U R                  U5      U5        g Nr   )r`   r   	Subscriptr   	__class__ru   visit_Subscript_Storer   rs   r  r{  r   r   r   )r   r  r   r.   r$   s        r'   assignTargetCodeGenerator.assignTargetA  s    fcmm,,::''00G;;;--f<<fcii((::''00G;;;$V[[1tzz$/aA 2&#((++++tzz&)51r)   c                   ^ ^ UU 4S jmT" T R                  UR                  5      5      n[        U[        R                  5      (       a  UR
                  /OUR                  n[        U5      S:X  d   eT R                  US   U5        g )Nc                 <  > [        U [        R                  5      (       a  [        U T5      $ [        R                  [        R                  4n[        U 5      n U bA  [        U 5      (       d1  [        X5      (       d!  [        R                  " U TR                  5      n U $ r_   )
r`   r   rn   r   r;   r   rb   r   r  r   )r   native_nontensor_types_sanitize_valuer   s     r'   r  3CodeGenerator.visit_Assign.<locals>._sanitize_valueO  su    %00-e_EE&.nnhnn%E"(/E $U++u== **5$,,?Lr)   r   r   )	r   r   r`   r   r  r  r  r   r  )r   rw   r   r  r  s   `   @r'   r   CodeGenerator.visit_AssignM  sh    		 !DJJ!78#-dCMM#B#B4;;-7|q   '!*f-r)   c                 X   UR                   R                  n[        R                  " U[        R                  " 5       S9n[        R
                  " X1R                  UR                  5      n[        R                  " UR                   /US9nU R                  U5        U R                  U5      $ )Nr  r  )r  r   r   r   LoadBinOpopr   r  r   rO  )r   rw   r$   lhsrhsassigns         r'   r   CodeGenerator.visit_AugAssign_  sp    {{~~hh$CHHJ/iiWWdjj1T[[M=

6$$T**r)   c                     [        UR                  5      [        R                  L a  UR                  $ U R                  UR                  5      $ r_   )r%   r   r   r   r   rO  r   s     r'   r   CodeGenerator.visit_Nameg  s4    >SYY&77N$$TWW--r)   c                 B    [         R                  R                  X5        g r_   r  r   s     r'   visit_StoreCodeGenerator.visit_Storel  r  r)   c                 B    [         R                  R                  X5        g r_   r  r   s     r'   
visit_LoadCodeGenerator.visit_Loado  r  r)   c                     UR                    Vs/ s H  o R                  U5      PM     nn[        R                  " U5      $ s  snf r_   )r  r   r   rn   )r   rw   r(  ry   s       r'   visit_TupleCodeGenerator.visit_Tupler  s4    '+yy1y!

1y1~~d## 2s   Ac                     [        U5      (       a  [        X!5      " X0R                  S9$ [        U5      (       a1  [        R                  " SSU5      n[        X45      " X R                  S9$ [        X!5      " U5      $ )N_builderz__(.*)__z__r\1__)rd   r   r   r"   sub)r   method_namer  r  reverse_method_names        r'   _apply_binary_method"CodeGenerator._apply_binary_methodv  sc    S!!3,S<<HHS!!"$&&j+"N34S<<PPs(--r)   c                 ^   U R                  UR                  5      nU R                  UR                  5      nU R                  R	                  [        UR                  5      5      nUc5  U R                  USR                  UR                  R                  5      5      eU R                  XBU5      $ )Nz8AST binary operator '{}' is not (currently) implemented.)r   leftright_method_name_for_bin_oprH  r%   r  rZ  formatru   r  r   rw   r  r  r  s        r'   visit_BinOpCodeGenerator.visit_BinOp  s    jj#jj$2266tDGG}E##D$^$e$efjfmfmfvfv$wy y((3??r)   __add____sub____mul____truediv____floordiv____mod____pow__
__lshift__
__rshift____and____or____xor__r  c                    U R                   R                  U5        U R                  UR                  5        U R                   R	                  5       nU R
                  R                  5       n0 nUR                  (       a  U R                   R                  U5        UR                  5       U l        0 U l        U R                  UR                  5        U R
                  R                  5       nU R                   R	                  5       n/ nU H  nUS4US44 Hc  u  pX;   d  M  [        X   5      [        X(   5      :H  nU(       a   X   R                  X(   R                  :X  a  MN   SU SX(    SU
 SX    35       e   X;   d  X;   a  UR                  U5        X;   a  X;  a  X(   Xh'   X;   d  M  X;  d  M  X(   XX'   M     [        UR                  5       UR                  5       -  5       Ho  nX;   a  M
  XX   nUR                  nXh   nUR                  n[        U5      [        U5      :H  nU(       a  X:X  d   SU SU S	U S
35       eUR                  U5        Mq     XVX4U4$ )Nthenelsezinitial value for `z` is of type z
, but the z block redefines it as zMismatched type for z between then block (z) and else block ())r   r  r  r   r   r   r   r   r   r%   r  rS   keys)r   rw   r   
then_block
else_block	then_defs	else_defsnamesr$   defs
block_name
type_equalthen_valthen_tyelse_valelse_tys                   r'   visit_then_else_blocks$CodeGenerator.visit_then_else_blocks  s?   11*=%%dii0\\557
OO((*		;;LL55jA!,,.DK DO))$++6,,.I99;J D&/%89f:M$N <!%dj!1T'-5H!HJ%$*//W]=O=O*O S-dV= P##-,.Edj\SSO %O  D$5T" T%:")-	 T%:")-	 $ 9>>+inn.>>?D} HmmG HmmGh4>9J'"4 .&tf,A' K##*)1..4 LL @ ZUBBr)   c                 b  ^^ [        U 5       nUu  pEU R                  R                  5       nU R                  R                  5       nU R                  R                  U5        U R                  R	                  UR
                  Xg5        U R                  X$Xg5      u  mmpgnU R                  R                  5       n	U R                  R                  U5        UR                  5       (       a   U 5       e[        U4S jU 5       5      n
U R                  R                  X5        U R                  R                  U5        UR                  5       (       a   U 5       e[        U4S jU 5       5      nU R                  R                  X5        [        U
5      [        U5      :X  d   e[        X5       H;  u  pUR                  5       nXR                  5       :X  d   eU	R                  U5        M=     S S S 5        U R                  R                  W	5        [        [        W
5      5       Vs/ s H  oR!                  U5      PM     nnW Vs/ s H  nTU   R"                  PM     nn[%        UU5      n[        UU5       H  u  nnU R'                  UU5        M     g ! , (       d  f       N= fs  snf s  snf )Nc              3   .   >#    U  H
  nTU   v   M     g 7fr_   r   r   r$   r  s     r'   r   3CodeGenerator.visit_if_top_level.<locals>.<genexpr>       /RED	$E   c              3   .   >#    U  H
  nTU   v   M     g 7fr_   r   r   r$   r  s     r'   r   r#    r$  r%  )r   r   r  r  create_cond_branchhandler  r  r   create_branchr   r  get_typeadd_argumentr  ranger{   r%   r   r{  )r   condrw   srr   ip_blockr  r  r  endif_blockthen_handleselse_handlesthen_helse_hrG   r.   res_handlesr$   r7   
new_values	new_valuer  r  s                        @@r'   visit_if_top_level CodeGenerator.visit_if_top_level  s-   d#r "G224J224JLL33H=LL++DKKP ++D:R @Iy*% ,,335KLL33J?!0022CzlC2//RE/RRLLL&&{ALL33J?!0022CzlC2//RE/RRLLL&&{A|$L(9999"%l"A__&__....((, #B/ $: 	11+>38\9J3KL3Kaq)3KL278%$4%%%8(e<
"5*5OD)NN4+  6E $#> M8s   GJ&J'J,
J$c                 p  ^^ [        U 5       nUu  pEU R                  5       u  pgU R                  R                  5       nUR                  (       a  U R                  R                  5       OS n	U R                  X$X5      u  mmpn
[        U4S jU
 5       5      nU R                  Xg5        U R                  R                  U Vs/ s H  oR                  5       PM     snUR                  S5      nUR                  UR                  5       5        U R                  R                  UR                  5       5        [        U
5      S:  a  U R                  R                  U5        UR                  (       d  UR!                  5       n	OU	R                  UR!                  5       5        U R                  R                  UR!                  5       5        [        U
5      S:  a0  [        U4S jU
 5       5      nU R                  R                  U5        S S S 5        [#        [        W5      5       Vs/ s H  nWR%                  U5      PM     nnW
 Vs/ s H  nTU   R&                  PM     nn[)        UU5      n[+        U
U5       H  u  nnU R-                  UU5        M     g s  snf ! , (       d  f       N= fs  snf s  snf )Nc              3   .   >#    U  H
  nTU   v   M     g 7fr_   r   r"  s     r'   r   -CodeGenerator.visit_if_scf.<locals>.<genexpr>  r$  r%  Tr   c              3   .   >#    U  H
  nTU   v   M     g 7fr_   r   r'  s     r'   r   r=    s     3VPUIdOPUr%  )r   r  r   r  r   r  r   r  create_if_opr+  r)  merge_block_beforeget_then_blockr  r   create_yield_opget_else_blockr-  
get_resultr%   r   r  r{  )r   r.  rw   r/  r   r,   r  last_locr  r  r  r2  hif_opr3  r.   r6  r$   r7   r7  r8  r  r  s                        @@r'   visit_if_scfCodeGenerator.visit_if_scf  s   d#rJG<<>LB224J8<224J++D:R @Iy*% 0/RE/RRL--b;LL--\.R\zz|\.RTXT_T_aefE))%*>*>*@ALL33E4H4H4JK5zA~,,\:;;"113
--e.B.B.DELL33E4H4H4JK5zA~33VPU3VV,,\:- $0 5:#l:K4LM4Lqu''*4LM278%$4%%%8(e<
"5*5OD)NN4+  6# /S $#0 N8s+   B4JJ
D.J'J.J3J
J+c           	         U R                  UR                  5      n[        U5      (       a  UR                  [        R
                  U R                  S9n[        U R                  5      R                  U5      nU(       a5  U R                  (       a  U R                  US5      eU R                  X!5        g U R                  X!5        g [        U5      n[        U5      [        ;  aO  U R                  USR!                  SR#                  S [         5       5      [        U5      R$                  5      5      eU(       a  UR&                  OUR(                  nU R+                  U5        g )Nr  zCannot have `return` statements inside `while` or `for` statements in triton (note that this also applies to `return` statements that are inside functions transitively called from within `while`/`for` statements)O`if` conditionals can only accept values of type {{{}}}, not objects of type {}, c              3   8   #    U  H  oR                   v   M     g 7fr_   ru   r   r,   s     r'   r   )CodeGenerator.visit_If.<locals>.<genexpr>&       !G6F**6F   )r   testrd   tor   int1r   r   r   rL  rZ  r9  rH  r   r%   _condition_typesr  r4   ru   r   r   r  )r   rw   r.  contains_returnactive_blocks        r'   r   CodeGenerator.visit_If  s   zz$))$T""778==4<<7@D3DKK@FFtLO>>++ TU U ''3!!$-'-DDz!11''krr		!G6F!GGT
++-. .
 )-499$++L)),7r)   c           	         U R                  UR                  5      n[        U5      (       Ga\  UR                  [        R
                  U R                  S9n[        U 5         U R                  5       u  p4U R                  R                  5       nU R                  R                  U5        [        R                  " U R                  UR                  5      U R                  5      nU R                  R                  5       nU R                  R                  5       nU R                  R                  U5        [        R                  " U R                  UR                  5      U R                  5      nU R                  R                  5       nU R!                  X45        UR"                  UR"                  :X  d!   SUR"                   SUR"                   35       eUR"                  n	U	[        R$                  :w  a  U	R'                  U R                  5      /O/ n
U R                  R)                  XR*                  S5      nUR-                  UR/                  5       5        U
(       aO  U R                  R1                  UR/                  5       5        U R                  R3                  UR*                  /5        U R                  R1                  UR/                  5       5        UR-                  UR5                  5       5        U
(       aO  U R                  R1                  UR5                  5       5        U R                  R3                  UR*                  /5        U
(       a/  [        R6                  R9                  UR;                  S5      U	5      OS sS S S 5        $ [=        U5      n[#        U5      [>        ;  aO  U RA                  USRC                  SRE                  S [>         5       5      [#        U5      RF                  5      5      eU(       a  U R                  UR                  5      $ U R                  UR                  5      $ ! , (       d  f       g = f)	Nr  zATernary expression with dynamic condition has inconsistent types r  Tr   rK  rL  c              3   8   #    U  H  oR                   v   M     g 7fr_   rN  rO  s     r'   r   ,CodeGenerator.visit_IfExp.<locals>.<genexpr>Z  rQ  rR  )$r   rS  rd   rT  r   rU  r   r   r  r  r  r   r  r   r   r   r  r%   r  r  r?  r)  r@  rA  r  rB  rC  rf   r   rD  r   rV  rZ  r  r4   ru   )r   rw   r.  r  rE  r  r  r  r  rM  ret_type_irrG  s               r'   r   CodeGenerator.visit_IfExp,  s   zz$))$T""778==4<<7@D!$'#@@B!\\668
99*E#--djj.CT\\R!\\==?
!\\668
99*E $--djj.Et||T!\\==?
11"?}}5 |WX`XeXeWffkltlylykz{|5#==@HHMM@Yx~~dll;<_a11+{{DQ--e.B.B.DELL;;E<P<P<RSLL00(//1BC778L8L8NO--e.B.B.DELL;;E<P<P<RSLL00(//1BCNYx}}++E,<,<Q,?J_cC ('F (-D Dz!11''krr		!G6F!GGT
++-. . zz$)),,zz$++..] ('s    LP33
Qc                     g r_   r   r   s     r'   
visit_PassCodeGenerator.visit_Passa  s    r)   c                    [        UR                  5      S:X  a  [        UR                  5      S:X  d  U R                  US5      eU R	                  UR
                  5      nU R	                  UR                  S   5      n[        U5      n[        U5      n[        UR                  S   5      [        R                  L a  [        XEL 5      $ [        UR                  S   5      [        R                  L a  [        XEL5      $ U R                  R                  [        UR                  S   5      5      nUc8  U R                  USR                  UR                  S   R                  5      5      eU R!                  XbU5      $ )Nr   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)r   comparatorsopsrZ  r   r  r   r%   r   Isr   IsNot_method_name_for_comp_oprH  r  ru   r  )r   rw   r  r  	lhs_value	rhs_valuer  s          r'   visit_CompareCodeGenerator.visit_Compared  s:   D$$%*s488}/A##D*]^^jj#jj))!,-(-	(-	&Y344		)Y7883377TXXa[8IJ##T[[\`\d\def\g\p\pqs s((3??r)   __eq____ne____lt____le____gt____ge__rg  c           
         U R                  UR                  5      nU R                  R                  [	        UR
                  5      5      nUc*  U R                  USUR
                  R                   S35      e[        U5      (       a  [        X#5      " U R                  S9$  [        X#5      " 5       $ ! [         a,    U R                  USU S[	        U5      R                   35      ef = f)NzAST unary operator 'z!' is not (currently) implemented.r  z)' is not (currently) implemented on type )r   operand_method_name_for_unary_oprH  r%   r  rZ  ru   rd   r   r   AttributeError)r   rw   rs  rx   s       r'   visit_UnaryOpCodeGenerator.visit_UnaryOpy  s    **T\\*++//TWW>:##D,@AQAQ@RRs*tuuW%%7'>>	t7')) 	t##,RD0YZ^_fZgZpZpYqrt t	ts   !B1 16C'__neg____pos____not__
__invert__rt  c                 T   [        U5      (       d   SU S35       e[        U5      (       d   SU S35       e[        U5      [        U5      L d   SU S35       e[        U5      (       a@  UR                  UR                  :X  d%   SU SUR                   SUR                   S	35       eg g )
Nzcannot reassign constxpr z in the loopzcannot reasign constexpr zLoop carried variable z changed typezLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rb   r%   rd   )r   r$   loop_vallive_vals       r'   _verify_loop_carried_variable+CodeGenerator._verify_loop_carried_variable  s    ))Y-FtfL+YY)))Y-FtfL+YY)H~h/]3I$}1]]/$X..(--8==2P 	@$TF*<X]]O L%%-]]O 4?@	@P2P.r)   c                 Z	   [        U 5       nUu  p4U R                  5       u  pVU R                  R                  5       nU R                  R	                  U5        U R
                  R                  U5        U R                  UR                  5        U R
                  R                  5         U R                  nUR                  5         / n	/ n
U HF  nX;   d  M
  X   nX;   nU R                  XU5        U	R                  U5        U
R                  U5        MH     [        U
5      nU Vs/ s H  oR                  5       PM     nnU
 Vs/ s H  nUR                  PM     nnU R!                  XV5        U R                  R#                  UU5      nU R                  R%                  UR'                  5       U5      nU R                  R	                  U5        [)        [+        U5      5       Vs/ s H  nUR-                  U5      PM     nn[/        UU5      n[1        U	U5       H$  u  nnUU R2                  U'   UU R                  U'   M&     U R5                  UR6                  5      nU R                  R9                  U5        U R                  R;                  UR<                  U5        U R                  R%                  UR?                  5       U5      nU R                  R	                  U5        [)        [+        U5      5       Vs/ s H  nUR-                  U5      PM     nn[/        UU5      n[1        U	U5       H$  u  nnUU R2                  U'   UU R                  U'   M&     U R
                  R                  U5        U R                  UR                  5        U R
                  R                  5         U R                  n/ nU H  nX;   d  M
  X   RA                  U5        M     U R                  RC                  U5        S S S 5        [)        [+        W5      5       Vs/ s H  nWRE                  U5      PM     nn[/        UW5      n[1        W	U5       H$  u  nn U U R2                  U'   U U R                  U'   M&     URF                   H  n! S5       e   g s  snf s  snf s  snf s  snf ! , (       d  f       N= fs  snf )NzNot implemented)'r   r  r   r  r  rL  r  r  r   popr   eraser  r   r+  r%   r  create_while_opcreate_block_with_parent
get_beforer-  r   r{   r   r  r   r   rS  r  create_condition_opr)  	get_afterr   rB  rD  r   r   r  r   )"r   rw   r/  r   r   r  rE  dummy	loop_defsr  	init_argsr$   r}  r~  init_handlesrF  init_tysainit_fe_tyswhile_opbefore_blockr.   
block_argscondition_argsr   r.  after_blockbody_handles	body_argsyieldsresult_handlesresult_valsnew_defr  s"                                     r'   visit_WhileCodeGenerator.visit_While  s   d#r$&!G<<>LB LL--/ELL55e<NN!!$'))$))4NN IKKM EI!?(H&}H66txP LL&$$X. " 0	:L.:;l

lH;+459a1669K5--b;||33HlKH<<@@ATATAVX`aLLL55lC7<S=N7OP7O!,**1-7OJP0[IN 7	c$'D!(+% 8 ::dii(DLL33LALL,,T[[*E,,??@R@R@TV^_K LL55kB8=c,>O8PQ8P1KOOA.8PLQ+L+FI 	2	c$'D!(+% 3 NN!!$'))$))4NN IF!?O//7 " LL((0A $F ;@L@Q:RS:RQ(--a0:RS).+F 4MD' 'DKK$+DOOD! 5 KKD+++5  Y <5 Q Re $#F TsX   CRAR#R<RRB
R"R=C9R6RB(R=2RR(R
R%c                    UR                   R                  R                  S:X  d   eU R                  UR                  5      nU R                  UR
                  5      n[        U5      (       a  UR                  X0R                  S9$ X#   $ )Nr  r  )	r   r  ru   r   r   slicerd   __getitem__r   )r   rw   r  slicess       r'   visit_Subscript_Load"CodeGenerator.visit_Subscript_Load  sl    xx!!**f444jj$DJJ'S!!??6LL?AA{r)   c                     UR                   R                  R                  S:X  d   eU R                  UR                  5      nU R                  UR
                  5      n[        U[        R                  5      (       d   eUR                  XB5        g r  )
r   r  ru   r   r   r  r`   r   rn   __setitem__)r   rw   r   r  r  s        r'   r  #CodeGenerator.visit_Subscript_Store  sg    xx!!**g555jj$DJJ'#x~~....&r)   c                 $    U R                  U5      $ r_   )r  r   s     r'   visit_SubscriptCodeGenerator.visit_Subscript  s    ((..r)   c                 b    UR                    Vs/ s H  o R                  U5      PM     sn$ s  snf r_   )dimsr   )r   rw   dims      r'   visit_ExtSliceCodeGenerator.visit_ExtSlice  s$    +/9959C

39555s   ,c           	      4  ^  T R                  UR                  R                  5      nUR                  R                   Vs/ s H  nT R                  U5      PM     nn[	        U 4S jUR                  R
                   5       5      nU[        R                  :X  a  U" U0 UD6n[        UR                  R                  UR                  R                  UR                  R                  5      nU H}  n[        U5      T R                  UR                  R                   '   T R#                  UR$                  5        UR&                   H#  n	[(        R*                  R-                  T U	5        M%     M     g S n
S nSnSnU[        R                  L a]  U" U0 UD6nUR                  nUR                  nUR                  nUR.                  n
UR0                  nUR2                  nUR4                  nOU[        L a  [7        U5      S:  a  US   O$T R                  [(        R8                  " S5      5      n[7        U5      S:  a  US   O'T R                  UR                  R                  S   5      n[7        U5      S:  a  US   O$T R                  [(        R8                  " S5      5      nO[;        S5      eSn[=        U5      (       a*  UR                  S:  a  [        UR                  * 5      nSnXp[>        R@                  " UT RB                  5      n[>        R@                  " UT RB                  5      n[>        R@                  " UT RB                  5      nURD                  RG                  5       (       a>  URD                  RG                  5       (       a  URD                  RG                  5       (       d3  [I        SURD                   S	URD                   S	URD                   S
35      e[>        RJ                  " URD                  URD                  5      n[>        RJ                  " UURD                  5      nURM                  T RB                  5      nURN                  [        RP                  RD                  RR                  RT                  :H  nURV                  nURV                  nURV                  nT RB                  RY                  UUU5      nT RB                  RY                  UUU5      nT RB                  RY                  UUU5      nT RB                  R[                  U5      nT R]                  UR                  R                   [        RP                  R_                  UU5      5        [a        T 5       nUu  nnT Rc                  5       u  nnT RB                  Re                  5       nT RB                  Rg                  U5        T Rh                  Rk                  U5        T R#                  UR$                  5        T Rh                  Rm                  5         URo                  5         / n/ n/ nT Rp                   He  nUU;   d  M  T Rp                  U   n UU   n!T Rs                  UU U!5        URk                  U5        URk                  U!5        URk                  U 5        Mg     T Ru                  UU5        [w        U5      n"U V#s/ s H  n#U#Rx                  PM     n$n#T RB                  R{                  XUU"5      n%[}        U
5      b+  U%R                  ST RB                  R                  U
5      5        [}        U5      b+  U%R                  ST RB                  R                  U5      5        U(       a*  U%R                  ST RB                  R                  5       5        U(       a*  U%R                  ST RB                  R                  5       5        T Rh                  Rk                  U5        U%R                  S5      n&T RB                  Rg                  U&5        UR                  5       T l        0 T l8        [        [7        U"5      5       Vs/ s H  nU&R                  US-   5      PM     n'n[        U'U$5      n([        UU(5       H  u  nn)T R]                  UU)5        M     T R#                  UR$                  5        T Rh                  Rm                  5         / nT Rp                   Ha  nUU;   d  M  T Rp                  U   n*[        U*[        5      (       a!  [>        R@                  " U*T RB                  5      n*URk                  U*5        Mc     [7        U5      S:  a&  [w        U5      n+T RB                  R                  U+5        U&R                  5       n,U,R                  5       S:X  d   S5       eT RB                  Rg                  U&5        U%R                  5       nU(       a8  T RB                  R                  UU5      nT RB                  R                  UU5      nT R                  UR                  R                      RV                  R                  U5        T R]                  UR                  R                   [        RP                  R_                  UU5      5        S S S 5        [        [7        W"5      5       Vs/ s H  nW%R                  U5      PM     n-n[        U-W$5      n.[        WU.5       H  u  nn)T R]                  UU)5        M     UR&                   H  n	 S5       e   g s  snf s  sn#f s  snf ! , (       d  f       N= fs  snf )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr_   r   r   keywordr   s     r'   r   *CodeGenerator.visit_For.<locals>.<genexpr>  s     Q>P74::g..>Pr   Fr   r   r   zAOnly `range` and `static_range` iterators are currently supportedTz0For loop bounds and step must all be ints, are (rL  r  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenz7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Pr   iterr   ry   dictkeywordsr   static_ranger-  startr   endstepr   r   r  r   r  r   r   r   r  r   
num_stagesloop_unroll_factordisallow_acc_multi_bufferflattenr   NumRuntimeErrorrg   r   r  r   r;   r:   rF   integer_promote_implr  r>   rf   r<   r=   r)  create_int_castr  r{  r   r   r  r  r  rL  r  r  r  r   r  r  r   r%   create_for_opr   set_attrget_int32_attrget_unit_attrget_bodyr   r{   r   r  r`   rB  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_withrD  )/r   rw   IteratorClassr{   	iter_argsiter_kwargsiteratorr  r.   r  r  r  r  r  lbubr  negative_stepiv_type
iv_ir_typeiv_is_signedivr/  r   r   r  rE  blockr  r  r  r$   r}  r~  r  r   r  for_opfor_op_bodyblock_handlesr  r   localyield_handlesfor_op_regionr  result_valuess/   `                                              r'   	visit_ForCodeGenerator.visit_For  sx   

499>>204		?TZZ_	?Qdii>P>PQQH111$i?;?H !5!5x||7I7I8==K^K^_L!.7lDKKNN+--dii8 KKDOO11$= ( "
 
!$)!HNN*$i?;?H BB==D!,,J!)!<!<(0(J(J%&&Ge# "%Y!!31CGGAJ9OB!$Y!!31DIINNSTDU9VB#&y>A#59Q<4::cggaj;QDbcc4::>djj[)D MDLL1DLL1!!$5xx  (9(9ARARATATNrxxjXZ[][c[cZddfgkgqgqfrrstuu//"((C//D]]4<<0
--1D1D1O1O1V1VVYYYY{{\\))"j,G\\))"j,G||++D*lK\\''
3t{{~~x}}';';B'HId#r$&!G\<<>LB LL--/ELL55e<NN!!$'))$))4NN KKM IFE7?#t4H&t}H66tXxPLL&$$X.MM(+ ( --b(;/	:L(12	1	H2\\//lKF#J/;1L1LZ1XY#$67C 79T9TUg9hi( >@Z@Z@\]dll.H.H.JKNN!!$' //!,KLL55kB!,,.DK DO=B3|CT=UV=U[__QU3=UMV,]HEJ 
3	ctS) 4))$))4NN F7? OOD1E!%33 ( 2 25$,, GMM%( ( 6{Q 4V <,,];'224M %%'1,g.gg, LL55kB))+B\\,,R4\\,,R4KK'..DDRHNN4;;>>8==+?+?G+LMY $^ 9>c,>O8PQ8P1&++A.8PQ+NHEUM2ID#NN4% 3 KKDEEE5  i @~ 3" Wa $#^ RsF   k5Cl*A?l)k:?E(l'k?B l	F$ll:
l
lc                     U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      n[        R
                  " X#U5      $ r_   )r   lowerupperr  r   r  )r   rw   r  r  r  s        r'   visit_SliceCodeGenerator.visit_Slice  sI    

4::&

4::&zz$))$~~eD11r)   c                 8    U R                  UR                  5      $ r_   )r   r   r   s     r'   visit_IndexCodeGenerator.visit_Index  s    zz$**%%r)   c                 P    UR                   U R                  UR                  5      4$ r_   )r{   r   r   r   s     r'   visit_keywordCodeGenerator.visit_keyword  s    xxDJJ///r)   c                     U R                  UR                  5      nUR                  b  U R                  UR                  5      OSn[        R                  R                  X#U R                  S9$ )Nr<  r  )r   rS  msgr   rf   device_assertr   )r   rw   rS  r  s       r'   visit_AssertCodeGenerator.visit_Assert  sO    zz$))$&*hh&:djj"}}**4t||*LLr)   rx   c                    [         R                  " UR                  /UQ70 UD6nUR                   Vs/ s H  oBU   PM	     nn[	        U5       H\  u  pV[        U[        R                  [        [        [        [        45      (       d  M;  [        R                  R                  U5      X%'   M^     [        US 5      nU Vs0 s H  o[        X(5      _M     nn[        US 5      n	U	 Vs/ s H  n[        X(5      PM     n
n[!        UR"                  U
 Vs/ s H  ofR$                  PM     snU5      nU R&                  R)                  U5      (       GdM  UR*                  n[-        U5      u  pU Vs/ s H`  nUb4  [        U[        [        [        R                  R                  45      (       a  [        R                  R                  OUR$                  PMb     nn[/        / X[1        5       5      n[3        U R4                  UXR&                  UXR6                  UR8                  XU R:                  R<                  U R:                  R>                  U R:                  R@                  S9n URC                  URE                  5       5        URP                  nUU R6                  U'   OU R6                  U   nU R&                  RS                  U5      nU
 Vs/ s H  ofRT                  PM     n
nU R:                  RW                  UU
5      nU[        RX                  :X  a  g [[        UR]                  5       5       Vs/ s H  nUR_                  U5      PM     nn[a        [c        UU/5      5      $ s  snf s  snf s  snf s  snf s  snf ! [F         a1  n[I        U RJ                  RL                  U RN                  S 5      UeS nAff = fs  snf s  snf )Nc                     [        U5      $ r_   rg   r,   r(  s     r'   r  0CodeGenerator.call_JitFunction.<locals>.<lambda>  s	    M!4Dr)   c                 "    [        U5      (       + $ r_   r  r  s     r'   r  r    s    q9I5Ir)   )
rE  r8  rI  r9  rr   r:  r?  rA  rB  rC  )2inspectgetcallargsrx   rv   rs   r`   r   r;   r  r  r   r   rf   r   r   r   r[   ru   r%   rE  has_function__globals__r   r
  r  r7  r>  rF  rr   r   rA  rB  rC  r   r   	Exceptionr   r8  rt   rK  rM  get_functionr)  callr  r-  get_num_resultsrD  nextr   )r   rx   ry   r   r$   r.   r{   args_cstr  	args_pathargs_valfn_namer   r:  r?  r  rG  r   ecallee_ret_typesymbolcall_opr   s                          r'   call_JitFunctionCodeGenerator.call_JitFunction  s   ""255:4:6:')||4|tT
|4oFA#sD+NOO"--11#6 & !'DEDLMHD+D77HM!$(IJ	>GHid%d1iHBKKh)Ghs((h)GR{{''00^^F$8$<!I    C ,/;*SFJCQYQ^Q^QdQdEe;g ;g''loltltu  
 $B	TVDI%dllIvkkbd4;LcLc/1{{i.2ll.B.BPTP\P\PhPh151H1H	JI
T
+
 (00O/>D##G,"55g>O))'2*23(3JJ(3,,##FH5hmm+278O8O8Q2RS2RQ7%%a(2RS'/1BCDDU 5
 NH)G  T&t{{tLRSST 4 TsB   M!?M&'M+M0
-A'M5"M: N8.N=:
N5,N00N5c                   ^  [        T R                  UR                  5      5      nT R                  R	                  U5      nUb	  U" T U5      $ [        U 4S jUR                   5       5      nUR                   Vs/ s H  nT R                  U5      PM     nn[        [        R                  R                  S U 5       5      5      n[        U[        5      (       a  [        XU5        T R                  X&U5      $ [!        US5      (       a  [#        UR$                  5      (       d$  [&        R(                  R+                  U5      (       aq  ST R,                  0n[.        R0                  " U5      nSUR2                  ;   a  T US'    U" U0 UDUD6n	[        U	[4        5      (       a  [&        R4                  " U	5      n	U	$ UT R>                  RA                  5       ;   a  [C        [         U5      nU" U0 UD6n	[E        [G        U	5      5      (       a  [I        U	S 5      $ U	$ s  snf ! [6         a'  n
[9        T R:                  R<                  US 5      U
eS n
A
ff = f)Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr_   r   r  s     r'   r   +CodeGenerator.visit_Call.<locals>.<genexpr>  s     Dm74::g&&mr   c              3   V   #    U  H  n[        U[        5      (       a  UOU/v   M!     g 7fr_   )r`   rm   )r   r(  s     r'   r   r    s(     1b]aXYz!T7J7J!QRPS2S]as   ')__self__r  
_generatorc                     U $ r_   r   )r(  s    r'   r  *CodeGenerator.visit_Call.<locals>.<lambda>  s    Qr)   )%r   r   r    statically_implemented_functionsrH  r  r  ry   rm   	itertoolschainfrom_iterabler`   r   r|   r	  r   rb   r  r   rf   
is_builtinr   r  	signature
parametersrn   r  r   r8  rt   rT  r   r5   r   r%   r   )r   rw   rx   static_implementationkwsr{   ry   extra_kwargssigrZ   r  s   `          r'   r   CodeGenerator.visit_Call  s   !$**TYY"78 $ E E I I" M ,(t44DdmmDD+/9959C

395IOO111b]a1bbcb+&&4T*((377B
##(8(E(E(--JbJbceJfJf&5L##B'Cs~~--1\*K$6,6#6c5))"..-C
 ''..00+T2D$#;I$s);T;T%c;7]Z]]9 6   K 't{{dCJKs   :H6H 
I&"IIc                 ,    [        UR                  5      $ r_   )r   r   r   s     r'   visit_ConstantCodeGenerator.visit_Constant  s    $$r)   rw   c                    [        UR                  5      S:w  a  U R                  US5      eU R                  UR                  S   5      nU R                  UR                  S   5      nU R                  R                  [        UR                  5      5      nUc5  U R                  USR                  UR                  R                  5      5      eU R                  XBU5      $ )Nr   z^chained boolean operators (A or B or C) are not supported; use parentheses to split the chain.r   r   z9AST boolean operator '{}' is not (currently) implemented.)r   r   rZ  r   _method_name_for_bool_oprH  r%   r  r  ru   r  r  s        r'   visit_BoolOpCodeGenerator.visit_BoolOp  s    t{{q ##vx xjjQ(jjQ(3377TWWF##QXXY]Y`Y`YiYijl l((3??r)   logical_and
logical_orr#  c                     U R                  UR                  5      n[        U5      (       a0  UR                  S:X  a   [        R
                  " USU R                  S9$ [        X!R                  5      $ )Nr+   )r   r   )r   )r   r   rd   r   r   permuter   r   )r   rw   r  s      r'   r   CodeGenerator.visit_Attribute  sR    jj$S!!dii3&6##CFFsII&&r)   c                 B    [         R                  R                  X5        g r_   r  r   s     r'   
visit_ExprCodeGenerator.visit_Expr  r  r)   c                     g r_   r   r   s     r'   visit_NoneTypeCodeGenerator.visit_NoneType  r   r)   c           
         [        UR                  5      n[        U5       GH  u  p4[        U[        R
                  5      (       a  [        UR                  5      X#'   M>  [        U[        R                  5      (       a  UR                  nU R                  UR                  5      n[        U5      (       d'  U R                  US[        [        U5      5      -   5      eUS:  a  SOS[        U5      -   S-   R                  UR                  5      X#'   M  [!        SR                  [        U5      5      5      e   SR#                  U5      $ )Nz^Cannot evaluate f-string containing non-constexpr conversion values, found conversion of type r   z{}z{!}z:encountered unexpected node of type {} in a JoinedStr noder<  )rm   r   rs   r`   r   Constantr?   r   FormattedValue
conversionr   rg   rZ  r%   chrr  AssertionErrorr4   )r   rw   r   r.   r   conversion_code	evaluateds          r'   visit_JoinedStrCodeGenerator.visit_JoinedStr  s	   dkk"!&)HA%..,	E3#5#566"'"2"2 JJu{{3	$Y//++xd9o./0 0 &5q%8TdSEY>Y\_>_gghqhwhwx	$%a%h%himnsit%uvv * wwvr)   c           	      N  > Uc  g [         R                  " 5          [         R                  " S[        5        [         R                  " S[        5        U R
                  nU R                  R                  5       nXl        [        US5      (       as  [        US5      (       ab  U R                  R                  U R                  U R                  UR                  -   UR                  5        U R                  R                  5       n [        TU ]=  U5      nU(       a!  X l        U R                  R                  U5        UsS S S 5        $ ! [          a    e ["         a:  n[!        U R$                  R&                  U R
                  [)        U5      5      S eS nAff = f! , (       d  f       g = f)Nignorelineno
col_offset)warningscatch_warningssimplefilterDeprecationWarningPendingDeprecationWarningrK  r   r~  r   r@  r:  r?  r>  r?  superr   r   r  r8  rt   rT   )r   rw   	last_noderE  rZ   r  r  s         r'   r   CodeGenerator.visit#  s;   <$$& !!(,>?!!(,EFI||++-H MtX&&74+F+F$$T^^T__t{{5RTXTcTcd<<//1ZgmD)  )$$X.1 '& $  Z 't{{tAwOUYYZ '&s0   C'FE)FF5FFF
F$c                 j    U R                  USR                  [        U5      R                  5      5      e)Nzunsupported AST node type: {})rZ  r  r%   ru   r   s     r'   r   CodeGenerator.generic_visit@  s,    &E&L&LTRVZM`M`&abbr)   c                 (   [        UR                  5      nSUs=:  a  S::  a  O  O[        UR                  5      (       a  [        S5      e[	        U R                  UR                  S   5      5      n[        U[        5      (       d  [        S5      eU(       dR  US:X  a  SnO U R                  UR                  S   5      n[        U R                  R                  U[	        U5      5      eg ! [         a  nS[        U5      -   S-   n S nANKS nAff = f)	Nr   r   z=`static_assert` requires one or two positional arguments onlyzqAssertion condition could not be determined at compile-time. Make sure that it depends only on `constexpr` valuesr   r<  z'<failed to evaluate assertion message: >)r   ry   r  rF   r   r   r`   r   NotImplementedErrorr  rT   r   r8  rt   )r   rw   	arg_countpassedrY  r  s         r'   execute_static_assert#CodeGenerator.execute_static_assertC  s    		N	I""s4=='9'9[\\%djj1&>?&$''% D  A~X"jj16G .dkkootEYZaEbcc	 ! XG$q'QTWWGXs   #C, ,
D6DDc                 8   ^  S[         R                  4U 4S jjnU$ )Nrw   c                   >^  U 4S jUR                    5        VVs0 s H  u  p#U[        U5      _M     nnnUR                   Vs/ s H  n[        T R                  U5      5      PM     nn[	        T" U0 UD65      $ s  snnf s  snf )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr_   r   r  s     r'   r   =CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>^  s     #U}GDJJw$7$7}r   )r  r   ry   r   r   )r   rw   r$   r   r  r{   ry   	python_fns   `      r'   rZ   *CodeGenerator.static_executor.<locals>.ret[  s     $Vt}}#U#UKD *511#U   FJYYOYc(C9YDOY4455 Ps   A<$B)r   r  )rU  rZ   s   ` r'   static_executorCodeGenerator.static_executorY  s    	6CHH 	6 
r)   r  )r?  r   r>  rK  rO  r:  rx   rI  rF  r   rJ  r8  r   r   rE  rr   rG  rM  rL  rP  )NFNFNr   )ru   r   r   r   r   r   r   r?   r   r   rm   r-  r  r  r`   r   rT  r   __annotations__updater   rf   device_printminimummaximumrZ  r_  rN  r
   r   r   r{  r  r  r  r   r  r   r  r   r  r  r  r  r   r   r   r  r  r  r  r  r   AddSubMultDivFloorDivModPowLShiftRShiftBitAndBitOrBitXorr  r	   operatorr  r9  rH  r   r   r`  rj  EqNotEqLtLtEGtGtErg  cmpoprv  USubUAddNotInvertrt  unaryopr  r  r  r  r  r  r  r  r  r   r  r  r	  r   r   BoolOpr$  AndOrr#  boolopr   r,  r/  r:  r   r   r  rO  rW  static_assertstatic_printrU  r  r]  r   r   __classcell__)r   r,   r  s   00@r'   r7  r7  '  s    `e=>10+ 10?G~10$SM10f BEdESXZ]_ikr@s(t@s1Q@s(ttCH~t	(--,,-	  !	  ! L	.`&c &%
I0E*F &4 &"	2@<S 
3?j&' 
2.$+.
22$.@ 	)n

L

L

I		8

I>T$s||"4c"9: 2Ch$,N,>863/j@$ 	#))Xsvvx(TWTZTZ\dfifmfmow<d4		?C#78 t 	)SXXy#''9cjjR^?tD$5s$:; @L6\'/6X6t2&0U38_ 0MC M
,E; ,E\#^J%
@ 
@ >AWWmUXU[U[]i<jd4

#3S#89j'2$:c#(( t ,
 	##%:""OE$:_S!_S!	Q$d68SXXJO3L+L&M  S  )us   M r7  c                 r   [        [        [        UR                  R	                  5       5      5      n[        / XaR                  UR                  5      n[        U 5      u  pSSK	J
n
  [        S UR                  5      nU Vs0 s H"  oR                  US      UR                  U   _M$     nnUR                  nU
" SSS/5      " X5      n[        X'U R                  R                  5       U R!                  U5      U SXUXES9nUR#                  U R%                  5       5        UR&                  nUUl        U$ s  snf )	Nr   )
namedtuplec                     [        U 5      S:H  $ ri   )r   )r   s    r'   r  ast_to_ttir.<locals>.<lambda>s  s    c!fkr)   SpecializationProxyrW   r  T)	r   rI  r8  rJ  r:  r?  rA  rB  rC  )rm   r5   r   r  r   r
  rW   r  r   collectionsr  filterrv   r7  r  r   rT   r   r   rE  r>  )rx   rt   r>  rA  rB  rC  r  rG  r:  r?  r  leavesr.   rW   r  proxyr   rZ   s                     r'   ast_to_ttirr  m  s   SCMM$8$8$:;<IB	==#))DI04I&)3==9F?EFv!ad#S]]1%55vIFI,{K.HI)_Eg9L9L9N^`^e^efk^luw(,	bi*5NI OOBHHJ


CCKJ Gs   )D4)Dr   r  r"   r@  rn  rq  r  r7   r   typingr   r   r   r   r   r	   r
   r   r   r<  r   _C.libtritonr   r   r   r   r   language.corer   r   r   r   runtime.jitr   runtimer   _utilsr   r   r   errorsr   r   r    r(   r6   r[   r   rb   rd   rg   rk   ro   r|   r   r   r   r   r   r  r%   rV  r   r  r   r
  r7  r  r   r)   r'   <module>r     sR   
  	  	    T T T   = = Y Y . ! H H a a.(	% % %! ! !HS HT HQ Q Q(S (T (X
D*!5 "bhh "Y " #tDz* 3 3*U%COO U%p8 8vCCOO CL"r)   