
    3jK                       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rS SKrS SK	J
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Jr  SSKJrJr  SSKJrJrJrJ r!  SS	K"J#r#J$r$J%r%  SS
K&J'r'J(r(J)r)J*r*J+r+J,r,  SSK-J.r.J/r/J0r0  SSK1J2r2J3r3J4r4  S r5S r6S\S\74S jr8S\S\74S jr9S\S\74S jr:S\S\74S jr;S\S\74S jr<S r=\>4S jr?S r@S\\$   4S jrAS\\R                     S\\%   4S jrC\7\D\E" S5      1rF " S S 5      rG " S! S"\ R                  5      rI " S# S$5      rJ\
" S%S&9 " S' S(5      5       rK " S) S*\ R                  5      rLS,S+ jrMg)-    N)	dataclass)
ModuleType)	AnyCallableDictOptionalTupleTypeUnionIterableList   )knobslanguage)irgluon_ir)	constexpr	str_to_tytensortuple)_unwrap_if_constexpr
base_value	base_type)get_jit_fn_file_lineget_full_nameJITCallableBoundConstexprFunctionConstexprFunctionJITFunction)apply_with_pathset_iterable_pathis_namedtuple   )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      X/home/wildlama/miniconda3/lib/python3.13/site-packages/triton/compiler/code_generator.pycheck_identifier_legalityr.      s5    )G88G""$}TFCTJJK    c                    SR                  U Vs/ s H  o3R                  5       PM     sn5      nUR                  SS5      nUR                  SS5      R                  SS5      nU  SU 3nUb  XRR                  5       -  nU$ s  snf )N_'_sq_[]__)joinmanglereplace)r*   arg_tyscaller_contexttymangled_argsrets         r-   	mangle_fnr?       s    887;7RYY[7;<L''V4L''S199#sCLF"\N
#C!$$&&J <s   Boreturnc                 "    [        U [        5      $ N)
isinstancer   r@   s    r-   _is_triton_valuerF   ,   s    a$$r/   c                 "    [        U [        5      $ rC   )rD   r   rE   s    r-   _is_triton_tensorrH   0   s    a  r/   c                 v    U S L =(       d/    [        U [        [        R                  R                  [
        45      $ rC   )rD   r   r   coredtyper   rE   s    r-   _is_constexprrL   4   s)    9T
1y(--2E2E{&STTr/   c                     [        U 5      =(       a:    U R                  R                  5       =(       a    U R                  R                  S:g  $ Nr#   )rH   r+   is_blocknumelrE   s    r-   _is_non_scalar_tensorrQ   8   s/    QMQVV__%6%L166<<1;LMr/   c                 .    [        U [        [        45      $ rC   )rD   listr   rE   s    r-   _is_list_likerT   <   s    a$''r/   c                    UR                   (       an  [        U5       H^  u  p4[        U5      (       a  M  [        U5      (       d  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	enumeraterL   rQ   r&   src__name__	arg_names)nodefnargsidxargs        r-   _check_fn_argsra   @   s    	{{!$HC %%*?*D*D2FFD},ijljvjvwzj{i||}  B  ~C  D  ( r/   c                 ,    U (       d  U" U" 5       5      eg rC    )condmsg_fncategorys      r-   _checkrg   J   s    vx   r/   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  o3c  [        U5      OU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 s  snf )NzUnsupported type )	r"   r+   _fieldsrD   r   r   fieldsr   
tuple_type)valuer]   rj   vvalstypess         r-   _apply_to_tuple_valuesrp   O   s    T%[!!	E8>>	*	*""7)$u+77u !5aBqE5D!6:;dIIaL1,dD;!"TVVTE">>$ 3 3E BCC ";"s   4C,C1*C6valuesc                 >    / nU  H  nUR                  U5        M     U$ rC   )_flatten_ir)rq   handlesrm   s      r-   flatten_values_to_irru   ]   s"    G	g Nr/   rt   ro   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)rt   ro   cursorr<   rl   s        r-   unflatten_ir_valuesr{   d   s?     F((9  S\!!!s   57c                   &    \ rS rSrS rS rS rSrg)enter_sub_regiono   c                     Xl         g rC   )	generator)selfr   s     r-   __init__enter_sub_region.__init__q   s    "r/   c                    [        U R                  R                  5      U l        [        U 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$ rC   )dictr   lscopeliveins
local_defs	prev_defsbuilderget_insertion_blockinsert_blockget_insertion_pointinsert_point)r   s    r-   	__enter__enter_sub_region.__enter__t   s    DNN112dnn778$&! 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 rC   )r   r   restore_insertion_pointr   r   r   r   r   )r   r^   kwargss      r-   __exit__enter_sub_region.__exit__}   s@    66t7H7HI $$(NN!r/   )r   r   r   r   r   N)rZ   
__module____qualname____firstlineno__r   r   r   __static_attributes__rc   r/   r-   r}   r}   o   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 rC   gscope)r   r   s     r-   r   ContainsReturnChecker.__init__   s    r/   rA   c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frC   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                     gNFrc   )r   r]   s     r-   _visit_function%ContainsReturnChecker._visit_function   s     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_fieldsrD   rS   ASTr   )r   r\   r>   r1   rl   items         r-   generic_visit#ContainsReturnChecker.generic_visit   s    -HA%&&!D!$00!5TZZ%5 " E377++.TZZ. . 
r/   r\   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   )
rD   rl   r   Nameidr   getattrattrr   r   )r   r\   rl   r]   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   r\   r]   s      r-   
visit_Name ContainsReturnChecker.visit_Name   sO    >SYY&77dkk!TWW%B''++r/   c                     gNTrc   r   r\   s     r-   visit_Return"ContainsReturnChecker.visit_Return       r/   c                     gr   rc   r   s     r-   visit_Assign"ContainsReturnChecker.visit_Assign        r/   c                     gr   rc   r   s     r-   visit_AugAssign%ContainsReturnChecker.visit_AugAssign   r   r/   c                 8    U R                  UR                  5      $ rC   r   r   r   s     r-   visit_Module"ContainsReturnChecker.visit_Module         ++r/   c                 8    U R                  UR                  5      $ rC   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$ rC   )r   r   orelse)r   r\   r>   s      r-   visit_IfContainsReturnChecker.visit_If   s=     		*;;7**4;;7C
r/   c                 |    U R                  UR                  5      =(       d    U R                  UR                  5      $ rC   )r   r   r   r   s     r-   visit_IfExp!ContainsReturnChecker.visit_IfExp   s'    zz$))$?

4;;(??r/   c                 8    U R                  UR                  5      $ rC   )r   funcr   s     r-   
visit_Call ContainsReturnChecker.visit_Call   s    zz$))$$r/   r   N)rZ   r   r   r   r   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   r   rc   r/   r-   r   r      s   0D 0T 	T 	&CMM &d &sxx D     
CMM d 
, , ,,coo ,$ ,SVV  @		 @d @%sxx %D %r/   r   c                       \ rS rSrS rS\R                  S\\   S\\R                     4S jr
S\R                  S\\R                     4S jrS\R                  4S jrS	 rS
rg)ASTFunction   c                 (    Xl         X l        X0l        g rC   )	ret_types	arg_typesattrs)r   r   r   r   s       r-   r   ASTFunction.__init__   s    ""
r/   r   ro   rA   c                 H    / nU H  nUc  M  UR                  X5        M     U$ rC   )_flatten_ir_types)r   r   ro   ir_typesr<   s        r-   flatten_ir_typesASTFunction.flatten_ir_types   s.    Bz  3  r/   c                 8    U R                  XR                  5      $ rC   )r   r   )r   r   s     r-   return_types_irASTFunction.return_types_ir   s    $$Wnn==r/   c                 |    U R                  XR                  5      nU R                  U5      nUR                  X#5      $ rC   )r   r   r   get_function_ty)r   r   arg_types_irret_types_irs       r-   	serializeASTFunction.serialize   s7    ,,WnnE++G4&&|BBr/   c                   ^ ^^^^^ U4S jmT" T R                   5      m[        TR                  5       5       Vs/ s H  nTR                  U5      PM     snmSmUUUU U4S jn[	        T R                   U5        T$ s  snf )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 rC   )rD   rS   r   r   rk   r   )r<   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r   c                    > T	R                   R                  U / 5      nU H  u  p4TR                  TX45        M     UR                  TT5      u  nm[	        T
X5        g rC   )r   getset_arg_attrrx   r!   )pathr<   
attr_specs	attr_nameattr_valvalrz   r]   rt   r   rn   s         r-   build_value,ASTFunction.deserialize.<locals>.build_value   sV     b1J'1#		< (2 **7F;KCdD.r/   )r   rangeget_num_argsr^   r    )r   r]   ir  rz   rt   r  rn   s   ``  @@@@r-   deserializeASTFunction.deserialize   sl    	,
 T^^,',R__->'?@'?!2771:'?@	/ 	/ 	4 As   A<)r   r   r   N)rZ   r   r   r   r   r   r   r   r   r+   r   r   r  r  r   rc   r/   r-   r   r      sj    


 4	? tTVT[T[} >rzz >d277m >C Cr/   r   T)frozenc                   *    \ rS rSr% \\S'   \\S'   Srg)BoundJITMethodi  __self____func__rc   N)rZ   r   r   r   r   __annotations__r   r   rc   r/   r-   r  r    s    r/   r  c                     ^ \ rS rSr% SSSSSSSS.S\S\\   S\\   4S	 jjr\	\
\\\\\\4 V Vs0 s H  nUR                   U_M     snn r\\\4   \S
'   \R)                  S\R,                  R.                  4S\R,                  R0                  4S\R,                  R2                  445        S rS rS r\R<                  S 5       rS r S\S\!\"\#4   SS4S jr$S r%S r&\'" 5       4S\'\   4S jjr(S r)S r*S r+S\,RZ                  4S jr.S  r/S! r0S" r1S# r2S$ r3S% r4S& r5S' r6S( r7S) r8S* r9S+ r:S, r;S- r<S. r=S/ r>S0 r?\,R                  S1\,R                  S2\,R                  S3\,R                  S4\,R                  S5\,R                  S6\,R                  S7\,R                  S8\,R                  S9\,R                  S:\,R                  S;\,R                  S<0rL\\M\,R                     \4   \S='   S> rOS? rPS@ rQSA rRSB rSSC rTSD rUSE rV\,R                  SF\,R                  SG\,R                  SH\,R                  SI\,R                  SJ\,R                  SK0r]\\M\,R                     \4   \SL'   SM r_\,R                  SN\,R                  SO\,R                  SP\,R                  SQ0rd\\M\,R                     \4   \SR'   SS rfST rgSU rhSV riSW rjSX rkSY rlSZ rmS[ rnS\o\\4   4S\ jrpS\4S] jrqSuS^\4S_ jjrrS` rsSa rtSb ruSc rvS\,R                  4Sd jrx\,R                  Se\,R                  Sf0r{\\M\,R                     \4   \Sg'   Sh r}Si r~Sj rSk rSl rU4Sm jrSn rS\,GR                  SS4So jrSp rSqSrKJr  \R,                  GR                  \\R,                  GR                  \" \5      \GR                  \\GR                  \" \5      \\" \5      \	\" \	5      0r\\\\,GR                  /\4   4   \Ss'   StrU=r$ s  snn f )vCodeGeneratori  NFr   )module	is_kernelfunction_typesrW   r;   	file_name
begin_linejit_fnr#  r$  c                   Xl         Xl        U	(       a9  SSKJn  [        R
                  " U5      U l        U" U R                  5      U l        O8SSKJ	n  [        R                  " U5      U l        U" U R                  5      U l        S U l        Xl        US-
  U l        U R                  R                  UUS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        / U l        / U l        0 U l        UR3                  5        H  u  nn[5        U[6        5      (       a+  UR9                  UR:                  U5      U R0                  U'   MF  [=        USS5      nUU;   a(  [=        UU   UR:                  5      U R0                  U'   M  UU R0                  U'   M     0 U l        XPl         U(       a"  XDRC                  S5      S-   S  n[E        US5      nX@l#        Xl$        S U l%        Xl&        Xl'        / U l(        S U l)        0 U l*        U RW                  5       U l,        S U l-        S	U l.        g )
Nr   )GluonSemantic)TritonSemanticr#   r    .functionF)/contextis_gluon,triton.experimental.gluon.language._semanticr(  r   GluonOpBuilderr   semantictriton.language.semanticr)  r   name_loc_as_prefixr$  r%  set_locoptionscodegen_fns
module_mapcreate_moduler!  function_ret_types	prototypereturn_vals
return_ipsr   itemsrD   r   r  rZ   r   r   r&  rfindr.   function_namer"  cur_noderW   r;   	scf_stackret_typer   _define_name_lookupdereference_namer]   visiting_arg_default_value)r   r-  r:  r   r?  r&  r5  r6  r7  r.  r!  r"  r#  rW   r;   r$  r%  r(  r)  krm   module_names                         r-   r   CodeGenerator.__init__  s     R#227;DL)$,,7DM?::g.DL*4<<8DM"&"$q.Y
A6& $/ (2(:"
6<ndll002&(6(>"N"46?ALLNDAq!Z((!+

A!>A!!\26Kj(!(K)@!**!MA!"A # )*=*=c*BQ*F*GHM5mZPM*" , .06:6N6N6P +0'r/   builtin_namespaceprintminmaxc                 B    [        U R                  R                  X5      $ rC   )r&   r&  rY   )r   r\   messages      r-   _unsupportedCodeGenerator._unsupported`  s    +DKKOOTKKr/   c                 z    [        5       nU R                  R                  X5      nX2L a  g[        U5      (       a  gg)NFT)objectr   r  rL   )r   r*   absent_markerr  s       r-   _is_constexpr_global"CodeGenerator._is_constexpr_globalc  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      $ rC   )r   r  )r*   absentr   s     r-   local_lookup7CodeGenerator._define_name_lookup.<locals>.local_lookupp  s    ;;??400r/   c                 l  > TR                   R                  X5      n[        X!L U TR                  ;   [	        U5      [
        L [        U[        5      [        USS5      [        USS5      [        USS5      R                  S5      [        USS5      R                  S5      [        U[        R                  5      [        U5      TR                  U 5      TR                  [        R                   R"                  /5      (       a  U$ [%        [&        R(                  " SU  S	35      R+                  S
S5      5      e)N__triton_builtin__F__triton_aggregate__r   r*  ztriton.languagez"triton.experimental.gluon.languagez.                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   r  r   rI  r+   r   rD   r   r   
startswithr   rK   r"   rT  rE  r   compilationallow_non_constexpr_globals	NameErrortextwrapdedentr9   )r*   rX  r  r   s      r-   global_lookup8CodeGenerator._define_name_lookup.<locals>.global_lookupt  s   ++//$/C MD222I+sK0C!5u=C!7?Cr2==>OPCr2==>bcsHNN3!#&--d3 33%%AA!  $ 
 %//3f 51!4 5 6=WT35GI Ir/   rA   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)rI  r  rc  )r*   rX  lookup_functionrl   rS  rf  rY  r   s       r-   name_lookup6CodeGenerator._define_name_lookup.<locals>.name_lookup  sO    "F#/@V@V@Z@Z#Z'5& L $[ tfO455r/   )strrR  r   )r   rj  rS  rf  rY  s   ` @@@r-   rC  !CodeGenerator._define_name_lookupn  sG    	1s 	1	I 	IB 	6c 	6c 	6 	6 r/   c              #   .   #    Xl         S v   S U l         g 7frC   )r3  )r   prefixs     r-   _name_loc_prefixCodeGenerator._name_loc_prefix  s     "("&s   c                    [        U[        R                  [        R                  45      (       a9  UR	                  U R
                  R                  X!R                  5       5      5        g [        U5      (       aU  / nUR                  U5        U H;  nUR	                  U R
                  R                  X$R                  5       5      5        M=     g g rC   )
rD   r   rl   block_argumentr4  r   create_name_locget_locrF   rs   )r   r  r*   rt   handles        r-   _maybe_set_loc_to_name$CodeGenerator._maybe_set_loc_to_name  s    cBHHb&7&7899KK44T;;=IJc""GOOG$!t||;;D..BRST " #r/   r*   rl   rA   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*   rl   s      r-   	set_valueCodeGenerator.set_value  s     "D %r/   c                 p    U R                   R                  5       nU R                   R                  5       nX!4$ rC   )r   ru  r   )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 rC   )r   r   r4  )r   r~  r}  s      r-   _set_insertion_point_and_loc*CodeGenerator._set_insertion_point_and_loc  s&    ,,R0S!r/   ignorec                 
   U 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                  5         / n/ n/ nUR                  5        H  u  pX;   a  M  [        U	5      (       a  U R                  U   n
U R                  XU	5        [        U	/5      n[        U
/5      nX:w  a?  UR	                  U5        UR	                  U	R                  5        UR                  U5        M  M  XR                   ;  a  M   SU S35       e   UR#                  5       U l        0 U l        XvU4$ )NLoop carried variable z is not a triton value)r   create_blockset_insertion_point_to_startrA  appendvisit_compound_statementr   poperaser=  rF   r   _verify_loop_carried_variableru   r+   extendr   copy)r   r\   r   r  blockinit_tysinit_handlesnamesr*   live_valloop_vallive_handlesloop_handless                r-   _find_carriesCodeGenerator._find_carries  sG   ))+11%8d#%%dii0
 %mmoND~));;t,2248L3XJ?3XJ?/LL&OOHMM2 ''5 0
 ??2i6LTFRh4ii2 .$ llnH,,r/   c                     [        U5      (       d  U/nU H5  nU R                  U5        [        U[        R                  5      (       d  M5    g    g rC   )rT   r   rD   r   r   )r   stmtsstmts      r-   r  &CodeGenerator.visit_compound_statement  s@    U##GEDJJt $

++ r/   c                 B    [         R                  R                  X5        g rC   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 rC   )r   r   r   r   elts)r   r\   r   eltr  s        r-   
visit_ListCodeGenerator.visit_List  sP    jj"{{~~$))D)3zz#)DE Es   A"r\   c                    [        UR                  5      S:w  a  [        S5      eUR                  S   nU R                  UR                  5      n[        U[        5      (       d  [        S5      e/ nU HS  nU R                  UR                  R                  U5        UR                  U R                  UR                  5      5        MU     [        U5      $ )Nr#   z'nested comprehensions are not supportedr   z'only tuple comprehensions are supported)ry   
generators
ValueErrorr   iterrD   tl_tupleNotImplementedErrorrz  targetr   r  r  )r   r\   compr  resultsr   s         r-   visit_ListCompCodeGenerator.visit_ListComp  s    t1$FGGq!zz$))$$))%&OPPDNN4;;>>40NN4::dhh/0    r/   c                 ^   U R                  UR                  5      nUc  [        R                  " S 5      nU R                  R                  U5        U R                  R                  U R                  5       5        U R                  R                  5       nU R                  R                  U5        g rC   )r   rl   r   r   r;  r  r<  r  r   r  set_insertion_point_to_end)r   r\   	ret_valuepost_ret_blocks       r-   r   CodeGenerator.visit_Return  s    JJtzz*	 **40I	*t@@BC 224//?r/   c                 x  ^ ^^^^ [        T R                  5      [        T R                  5      :X  d   eT R                  (       d  [        R                  " S 5      $ [        R
                  mU4S jmUUU U4S jmT R                   Vs/ s H  oR                  PM     snm[        R                  " TT5      $ s  snf )Nc                 *   > SU  SU S3nUST 3-  nU$ )NzReturn type mismatch:  and z. zNote all return types were: rc   )aberrreturn_typess      r-   	error_msg3CodeGenerator.decide_return_type.<locals>.error_msg'  s.    *1#U1#R8C1,@@CJr/   c           
        >^ ^ [        T TR                  5      (       a  [        [        TTR                  5      U UU4S j5        [        T R                  TR                  :H  U UU4S j5        TR                  [	        T T5       VVs/ s H  u  p#T" X#5      PM     snnT R                  S9$ [        T TR
                  5      (       a?  T T:X  a  T $ TR                  R                  T 5      m TR                  R                  T5      mOQ[        TTR
                  5      (       a6  TR                  R                  T 5      m TR                  R                  T5      m[        T T:H  U UU4S j5        T $ s  snnf )Nc                     > T" T T5      $ rC   rc   r  r  r  s   r-   <lambda>GCodeGenerator.decide_return_type.<locals>.common_type.<locals>.<lambda>.  s    Yq!_r/   c                     > T" T T5      $ rC   rc   r  s   r-   r  r  /  s    Yq!_r/   )rj   c                     > T" T T5      $ rC   rc   r  s   r-   r  r  9  s    9Q?r/   )rD   rk   rg   rj   zipconstexpr_typer1  to_tensor_type)r  r  aibicommon_typer  r   tls   ``  r-   r  5CodeGenerator.decide_return_type.<locals>.common_type,  s   !R]]++z!R]]35LMqxx188+-DE}}Aq	%R	fbk"&9	%R[\[c[c}dd!R..//6HMM003MM003Ar0011MM003MM0031623H &Ss   E/
)	ry   r;  r<  r   r  rJ   r+   	functoolsreduce)r   r  r  r  r  r  s   ` @@@@r-   decide_return_type CodeGenerator.decide_return_type   s    4##$DOO(<<<<**400]]	
	 	  )-(8(89(81(89\:: :s   B7c           
        ^^ TR                   T:X  a  T$ [        R                  n[        TUR                  5      (       aq  [        TUR
                  5      (       d   eUR	                  [        TR                  TR                  5       VVs/ s H  u  pEU R                  XE5      PM     snnT5      $ [        TUR                  5      (       aa  [        TUR                  5      (       a   [        TR                   T:H  UU4S j5        T$ U R                  R                  TR                  T5      $ [        TR                   T:H  UU4S j5        T$ s  snnf )Nc                  (   > STR                    ST  3$ NzReturn type mismatch r  r+   r<   rl   s   r-   r  'CodeGenerator.cast_to.<locals>.<lambda>L  s    3HTYZ\Y]1^r/   c                  (   > STR                    ST  3$ r  r  r  s   r-   r  r  O  s    +@ERTQU)Vr/   )r+   r   rJ   rD   r   rk   r  rq   ro   cast_tor   r  rg   r1  scalar_constantrl   )r   rl   r<   r  rm   ts    ``   r-   r  CodeGenerator.cast_to?  s    ::L]]eRXX&&b"--00008803ELL"((0KL0Ka#0KL  eR\\**"b//00uzzR')^_==00bAAuzzR!VW Ms   E
c                    U R                  5       nU R                  5       u  p#[        U R                  5      [        U R                  5      :X  d   e[        U R                  U R                  5       H{  u  pEU R                  " U6   U R                  R                  5       R                  5       (       a   eU R                  XA5      n[        U/5      nU R                  R                  U5        M}     U R                  X#5        Xl        U R                  R                  5       R                  5       (       a   e[        U R                  [        R                   5      (       a/  [#        U R                  R$                  5      U R&                  l        OU R                  /U R&                  l        U R*                  R-                  U R&                  R/                  U R                  5      5        U R                  R                  U R&                  R1                  U R                  5       Vs/ s H  opR                  R3                  U5      PM     sn5        g s  snf rC   )r  r  ry   r;  r<  r  r  r   r   has_terminatorr  ru   r>   rB  rD   r   rk   rS   ro   r:  r   r]   
reset_typer  r   create_poison)r   return_typer~  r}  r>   ret_ipret_handlesr<   s           r-   handle_returnsCodeGenerator.handle_returnsR  s   --/3354##$DOO(<<<<t//AKC--v6||779HHJJJJ,,s0C.u5KLL[) B 	))"2#<<335DDFFFFdmmX%8%899'+DMM,?,?'@DNN$(,DNN$4>>33DLLAB4>>CaCabfbnbnCopCoR,,44R8Copqps   $$I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U R2                  b0  U R2                  R5                  U R                  U R"                  5        [7        X.5       H*  u  nnU R9                  UU5        U R;                  UU5        M,     U R"                  R=                  5       nU R"                  R?                  U5        U RA                  URB                  5        U RE                  5         U(       a  U R"                  RG                  U5        g g ! SU l        f = f)Nz,nested function definition is not supported.r#   )r   r   targetsrl   )r  rl   
annotationTFpublicprivate)$r   r^   r]   rO  rX   defaultsr  r`   r   r   r   r   	AnnAssignrE  r"  r:  r  r   get_or_insert_functionr!  r?  rW   	push_backadd_entry_blockr  r;   initialize_calleer  rw  rz  r   r  r  r   r  r  )r   r\   r[   kwarg_namesr  default_valuearg_noder  r*   	st_target	init_node
visibilityfn_tyentry
arg_valuesarg_name	arg_value	insert_pts                     r-   r   CodeGenerator.visit_FunctionDefh  sP   !%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
*11$''4<<H#&y#=Hi''	8<NN8Y/ $> LL446	11%8%%dii0 	LL33I> / 38/s   8+L	Lc                     / nUR                    H  nX R                  U5      /-  nM     U R                  UR                  5      nX$4$ rC   )r^   r   kwarg)r   r\   r[   r`   r  s        r-   visit_argumentsCodeGenerator.visit_arguments  sC    	99C**S/**I jj,%%r/   c                 p  ^ [         R                  R                  U T5        [        U4S jU R                  R
                   5       5      nUR                  (       aP  UR                  (       d  UR                  (       a.  [        U R                  R                  TTR                   S35      eTR                  $ )Nc              3   ^   >#    U  H"  oR                   TR                  :X  d  M  Uv   M$     g 7frC   )r*   r`   )r   pr\   s     r-   r   *CodeGenerator.visit_arg.<locals>.<genexpr>  s"     I 21ff6HQQ 2s   -	-z marked as constexpr and listed in do_not_specialize/do_not_specialize_on_alignment. Remove constexpr designation to skip specialization.)r   r  r   nextr&  paramsis_constexprdo_not_specializedo_not_specialize_on_alignmentr$   rY   r`   )r   r\   params    ` r-   	visit_argCodeGenerator.visit_arg  s    %%dD1I 2 2II5#:#:e>b>b"88* G GH H 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  rl   r   r   r  r   )r   r\   r  r  rl   s        r-   visit_AnnAssignCodeGenerator.visit_AnnAssign  s    ZZ0
DKK(

4::&"$ F8 ,D "E F Fe$E"'KK;;v&&  &&r/   c                 J   [        UR                  [        R                  5      (       d   e[        U[        R                  5      (       a  U R                  X5      $ [        U[        R                  5      (       a=  [        UR                  5       H#  u  p1U R                  XR                  U   5        M%     g [        U[        R                  5      (       a  [        S5      e[        U[        R                  5      (       d   eU R                  U R                  U5      U5        g )Nz/Attribute assignment is not supported in triton)rD   r   r   r   	Subscriptvisit_Subscript_Storer	   rX   r  assignTargetrq   r   r  r   rz  r   )r   r  rl   r  s       r-   r  CodeGenerator.assignTarget  s    &**cii0000fcmm,,--f<<fcii((&v{{3	!!&,,q/: 4fcmm,,%&WXX&#((++++tzz&)51r/   c                   ^ ^ UU 4S jm[        U[        R                  5      (       a  UR                  /OUR                  n[        U5      S:X  d   eUS   n[        U[        R                  5      (       aF  T R                  UR                  5         T" T R                  UR                  5      5      nS S S 5        O!T" T R                  UR                  5      5      nT R                  UW5        g ! , (       d  f       N!= f)Nc                 0  > [        U [        R                  5      (       a  [        U T5      $ [        R                  [        R                  4n[        U 5      n U b;  [        U 5      (       d+  [        X5      (       d  TR                  R                  U 5      n U $ rC   )	rD   r   r   rp   rK   r   rF   r1  	to_tensor)rl   native_nontensor_types_sanitize_valuer   s     r-   r  3CodeGenerator.visit_Assign.<locals>._sanitize_value  ss    %00-e_EE&.nnhnn%E"(/E $U++u==//6Lr/   r#   r   )rD   r   r  r  r  ry   r   rp  r   r   rl   r  )r   r\   r  r  rq   r  s   `    @r-   r   CodeGenerator.visit_Assign  s    		 $.dCMM#B#B4;;-7|q   fchh''&&vyy1(DJJ)?@ 21 %TZZ

%;<F&&)	 21s   "C11
C?c                    [         R                  " UR                  5      n[        R                  " 5       Ul        [        R                  " X!R                  UR                  5      n[        R                  " UR                  /US9nS H8  n[        X5      (       d  M  [        X5      n[        X5U5        [        XEU5        M:     U R                  U5        U R                  U5      $ )Nr  )lineno
col_offset
end_linenoend_col_offset)r  deepcopyr  r   Loadr   BinOpoprl   r   hasattrr   setattrr   )r   r\   lhsrhsassignr  ys          r-   r   CodeGenerator.visit_AugAssign  s    mmDKK(((*iiWWdjj1T[[M=IAtD$"1%	 J
 	

6zz#r/   c                     [        UR                  5      [        R                  L a  UR                  $ U R                  UR                  5      $ rC   )r+   r   r   r   r   rD  r   s     r-   r   CodeGenerator.visit_Name  s4    >SYY&77N$$TWW--r/   c                 B    [         R                  R                  X5        g rC   r  r   s     r-   visit_StoreCodeGenerator.visit_Store  r  r/   c                 B    [         R                  R                  X5        g rC   r  r   s     r-   
visit_LoadCodeGenerator.visit_Load  r  r/   c                     UR                    Vs/ s H  o R                  U5      PM     nn[        R                  " U5      $ s  snf rC   )r  r   r   r   )r   r\   r  r^   s       r-   visit_TupleCodeGenerator.visit_Tuple  s4    '+yy1y!

1y1~~d## 2s   Ac                    [        U5      (       a  [        X25      " X@R                  S9$ [        U5      (       a1  [        R                  " SSU5      n[        XE5      " X0R                  S9$ [        U[        [        R                  45      (       d   [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        X25      nOU R                  X25      nU R                  XU/0 5      $ )N	_semanticz__(.*)__z__r\1__)rH   r   r1  r(   subrD   r   r   r   get_Attributecall_Function)r   r\   method_namer,  r-  reverse_method_namer]   s          r-   _apply_binary_method"CodeGenerator._apply_binary_method  s    S!!3,SMMJJS!!"$&&j+"N34SMMRR#	8>>:;;
3PY@Z@ZC.Cc9%%*B##C5B!!$SE266r/   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                  XX#5      $ )Nz8AST binary operator '{}' is not (currently) implemented.)r   leftright_method_name_for_bin_opr  r+   r)  rO  formatrZ   rD  )r   r\   r,  r-  rB  s        r-   visit_BinOpCodeGenerator.visit_BinOp  s    jj#jj$2266tDGG}E##D$^$e$efjfmfmfvfv$wy y((CEEr/   __add____sub____mul____truediv____floordiv____mod____pow__
__lshift__
__rshift____and____or____xor__rI  c                 t   U R                   R                  U5        U R                  UR                  5        U R                   R	                  5       nU R
                  R                  5       nU R                  R                  5       n0 nUR                  5       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U R                  R                  5       n/ n	UR                  5        H  u  p[        U5      (       d  M  [        Xj   /5      n[        X   /5      nX:X  a  M:  U	R                  U
5        Xj   XZ'   X   Xz'   US4US44 HV  u  p[        X   5      [        U5      :H  nU(       a  X   R                  UR                  :X  a  MC   SU
 SU SU SX    35       e   M     [        UR                  5       UR                  5       -  5       Hp  n
X;   a  M
  XZ   nUR                  nXz   nUR                  n[        U5      [        U5      :H  nU(       a  UU:X  d   SU
 SU S	U S
35       eU	R                  U
5        Mr     XWX4U	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=  rF   ru   r  r+   sortedkeys)r   r\   r   
then_block
else_block	then_defs	then_vals	else_defs	else_valsr  r*   rl   then_handleselse_handles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((*	KK$$&		LLN	;;LL55jA!,,.DK DO))$++6,,.I99;J((*I "==?KD#E**/0ABL/0ABL+LL'oIO'oIO&/%89f:M$N !$*-e<
!djoo&C O)$}UG D)l*A$*OOC %O +( 9>>+inn.>>?D} HmmG HmmGh4>9J'W"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rC   rc   r   r*   ra  s     r-   r   3CodeGenerator.visit_if_top_level.<locals>.<genexpr>f       /RED	$E   c              3   .   >#    U  H
  nTU   v   M     g 7frC   rc   r   r*   rc  s     r-   r   rs  k  rt  ru  )r}   r   r  r  create_cond_branchrv  rn  r  ru   create_branchry   r  get_typeadd_argumentr  r  r`   r+   r{   rz  )r   rd   r\   srr   ip_blockr_  r`  r  endif_blockre  rf  then_helse_hr<   r  res_handlesr*   ro   
new_values	new_valuerc  ra  s                        @@r-   visit_if_top_level CodeGenerator.visit_if_top_levelV  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                   ^^ [        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[        X5       H  u  pU R                  X5        M     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:  aV  [        U4S jU
 5       5      n[        U
U5       H  u  pU R                  X5        M     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rC   rc   rr  s     r-   r   -CodeGenerator.visit_if_scf.<locals>.<genexpr>  rt  ru  Tr   c              3   .   >#    U  H
  nTU   v   M     g 7frC   rc   rw  s     r-   r   r    s     3VPUIdOPUru  )r}   r  r   r  r   rn  ru   r  rw  r  create_if_oprz  rv  merge_block_beforeget_then_blockr  ry   create_yield_opget_else_blockr  
get_resultr+   r{   rz  )r   rd   r\   r|  r   r1   r~  last_locr_  r`  r  re  r*   r  hif_oprf  r  r  ro   r  r  rc  ra  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 5	++C6 6--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!$UL!9ID//: ":,,\:5 $8 5:#l:K4LM4Lqu''*4LM278%$4%%%8(e<
"5*5OD)NN4+  6' /S $#8 N8s+   CK('K#
 EK(2K9K>#K((
K6c           	         U R                  UR                  5      n[        U5      (       Ga8  [        U5      (       a  U R	                  US5      eUR
                  R                  5       (       a_  [        R                  " S[        R                  " UR                  5      -  5        [        R                  R                  X R                  U S9nUR                  [        R                   U R                  S9n[#        U R$                  5      R                  U5      (       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R1                  SR3                  S [.         5       5      [        U5      R4                  5      5      eU(       a  UR6                  OUR8                  nU R;                  U5        g )	Nz=Boolean value of Tensor with more than one value is ambiguousziIf conditional called with multidimensional Tensor instead of scalar; please use "if (%s).item()" instead)r>  
_generatorr=  zMCannot have `return` statements inside `while` or `for` statements in triton.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rC   rZ   r   r1   s     r-   r   )CodeGenerator.visit_If.<locals>.<genexpr>       !G6F**6F   )r   testrH   rQ   rO  r+   rO   warningswarnr   unparser   rJ   _unsplatr1  toint1r   r   rA  r  r  r   _condition_typesrJ  r7   rZ   r   r   r  )r   r\   rd   active_blocks       r-   r   CodeGenerator.visit_If  s   zz$))$T""$T**''.mnnyy!!## Bkk$)),-.  }}--dmmX\-]778==DMM7BD$T[[177==>>++mo o''3!!$-'-DDz!11''krr		!G6F!GGT
++-. .
 )-499$++L)),7r/   c           	      p   U R                  UR                  5      n[        U5      (       GaP  UR                  [        R
                  U R                  S9n[        U 5         U R                  5       u  p4U R                  R                  5       nU R                  R                  U5        U R                  R                  U R                  UR                  5      5      nU R                  R                  5       nU R                  R                  5       nU R                  R                  U5        U R                  R                  U R                  UR                  5      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   r  r  c              3   8   #    U  H  oR                   v   M     g 7frC   r  r  s     r-   r   ,CodeGenerator.visit_IfExp.<locals>.<genexpr>  r  r  )$r   r  rH   r  r   r  r1  r}   r  r   r  r  r  r   r   r   r  r+   voidto_irr  rv  r  r  r  r  r  rJ   r   r  r   r  rO  rJ  r7   rZ   )r   r\   rd   r~  r  r_  rj  r`  rl  rB  ret_type_irr  s               r-   r   CodeGenerator.visit_IfExp  s   zz$))$T""778==DMM7BD!$'#@@B!\\668
99*E==224::dii3HI!\\==?
!\\668
99*E  ==224::dkk3JK!\\==?
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P''
P5c                 .  ^  / nUR                    H  nUR                  nT R                  UR                  5      nUR                   Vs/ s H  nT R                  U5      PM     nn[        U 4S jUR                   5       5      nU" UST R                  0UD6n	UR                  U	5        M     [        X!R                   5       HP  u  pU	R                  5       n
UR                  c  M$  T R                  UR                  5      nT R                  X5        MR     [        T R                  5      R                  U5      (       a  T R                  US5      eT R!                  UR"                  5        [%        U5       H  n	U	R'                  S S S 5        M     g s  snf )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frC   r   )r   kwr   s     r-   r   +CodeGenerator.visit_With.<locals>.<genexpr>  s     >"tzz"~~r   r>  zCCannot have `return` statements inside `with` statements in triton )r=  context_exprr   r   r^   r   keywordsr1  r  r  r   optional_varsrz  r   r   rO  r  r   reversedr   )r   r\   cm_listr   callr]   r`   r^   kwscmresvar_names   `           r-   
visit_WithCodeGenerator.visit_With  sA    JJD$$DDII&B/3yy9yDJJsOyD9>>>CT:T]]:c:BNN2  GZZ0HB,,.C!!-::d&8&89x-	 1
 !-33D99##D*opp%%dii07#BKKdD) $ :s   Fc                     g rC   rc   r   s     r-   
visit_PassCodeGenerator.visit_Pass
  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!                  XX#5      $ )Nr#   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)ry   comparatorsopsrO  r   rG  r   r+   r   Isr   IsNot_method_name_for_comp_opr  rJ  rZ   rD  )r   r\   r,  r-  	lhs_value	rhs_valuerB  s          r-   visit_CompareCodeGenerator.visit_Compare  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((CEEr/   __eq____ne____lt____le____gt____ge__r  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       $ ! [         aD    US:X  a  [        U(       + 5      s $ U R                  USU S[	        U5      R                   35      ef = f)NzAST unary operator 'z!' is not (currently) implemented.r=  __not__z)' is not (currently) implemented on type )r   operand_method_name_for_unary_opr  r+   r)  rO  rZ   rH   r   r1  AttributeErrorr   )r   r\   r  r]   s       r-   visit_UnaryOpCodeGenerator.visit_UnaryOp"  s    **T\\*++//TWW>:##D,@AQAQ@RRs*tuuW%%7'$--@@	t7')) 	tY W--##,RD0YZ^_fZgZpZpYqrt t	ts   !B1 1 C?,C?__neg____pos__r  
__invert__r  c           	         [        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[        U5       S[        U5       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 constexpr z in the loopr  z changed type, was z but is now zLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rF   r+   rH   )r   r*   r  r  s       r-   r  +CodeGenerator._verify_loop_carried_variable5  s    ))Z-Gv\+ZZ)))Z-Gv\+ZZ)H~h/ 	l$TF*=d8n=M\Z^_gZhYij	l/$X..(--8==2P 	@$TF*<X]]O L%%-]]O 4?@	@P2P.r/   c                 D  ^  [        T 5       nUu  p4T R                  5       u  pVT R                  X5      u  pxn	U V
s/ s H  oR                  5       PM     nn
T R	                  XV5        T R
                  R                  X5      nT R
                  R                  UR                  5       U5      nT R
                  R                  U5        [        [        U5      5       Vs/ s H  oR                  U5      PM     nn[        X5      n[        UU5       H6  u  nnUT R                  U'   UT R                   U'   T R#                  UU5        M8     T R%                  UR&                  5      n[)        U[*        R,                  5      (       aG  UR.                  (       a*  UR1                  ST R
                  R3                  5       5        UR,                  nT R
                  R5                  U5        T R
                  R7                  UR8                  U5        T R
                  R                  UR;                  5       U5      nT R
                  R                  U5        [        [        U5      5       Vs/ s H  nUR                  U5      PM     nn[        UU	5      n[        UU5       H6  u  nnUT R                  U'   UT R                   U'   T R#                  UU5        M8     T R<                  R?                  U5        T RA                  URB                  5        T R<                  RE                  5         [G        U 4S jU 5       5      nT R
                  RI                  U5        S S S 5        [        [        W5      5       Vs/ s H  nWRK                  U5      PM     nn[        UW	5      n[        WU5       H6  u  nnUT R                  U'   UT R                   U'   T R#                  UU5        M8     URL                   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 )Nllvm.loop_annotationc              3   B   >#    U  H  nTR                   U   v   M     g 7frC   r   r   r*   r   s     r-   r   ,CodeGenerator.visit_While.<locals>.<genexpr>i       0UutT1Bu   zNot implemented)*r}   r  r  rz  r  r   create_while_opcreate_block_with_parent
get_beforer  r  ry   r`   r{   r  r   r   rw  r   r  rD   r   	conditiondisable_licmset_attrget_disable_loop_licm_attrr  create_condition_oprv  	get_afterrA  r  r  r   r  ru   r  r  r   r   r  r   )r   r\   r|  r   r   r~  r  r  r  init_fe_tysr  r  while_opbefore_blockr  
block_argscondition_argsr*   r  rd   after_blockbody_handles	body_argsyield_handlesresult_handlesresult_valsnew_defr  s   `                           r-   visit_WhileCodeGenerator.visit_While?  s[   d#r$&!G<<>LB/3/A/A$/P,E.:;l

lH;--b;||33HKH<<@@ATATAVX`aLLL55lC7<S=N7OP7O!**1-7OJP0IN 7	c$'D!(+%++C6 8 ::dii(D$ 2 233$$%%&<dll>e>e>gh~~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!(+%++C6 3 NN!!$'))$))4NN 00Uu0UUMLL((7U $Z ;@L@Q:RS:RQ(--a0:RS).+F 4MD' 'DKK$+DOOD!''6 5
 KKD+++5  ] < Q& R? $#Z Ts=   /PO=B	PP8E0P(PCP5P=P
Pc                 (   [        UR                  [        R                  5      (       d   eU R	                  UR
                  5      nU R	                  UR                  5      n[        U5      (       a  U R                  XR                  X#/0 5      $ X#   $ rC   )
rD   r   r   r'  r   rl   slicerF   call_Method__getitem__)r   r\   r,  slicess       r-   visit_Subscript_Load"CodeGenerator.visit_Subscript_Loadx  so    $((CHH----jj$DJJ'C  ##D//3"MM{r/   c                     [        S5      e)Nz&__setitem__ is not supported in triton)r  )r   r\   rl   s      r-   r  #CodeGenerator.visit_Subscript_Store  s    !"JKKr/   c                 $    U R                  U5      $ rC   )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 rC   )dimsr   )r   r\   dims      r-   visit_ExtSliceCodeGenerator.visit_ExtSlice  s$    +/9959C

39555s   ,c           	      &  ^  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SnSnU[        R                  L au  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UR6                  nUR8                  nOU[        L a  [;        U5      S:  a  US   O$T R                  [(        R<                  " S5      5      n[;        U5      S:  a  US   O'T R                  UR                  R                  S   5      n[;        U5      S:  a  US   O$T R                  [(        R<                  " S5      5      nO[?        S5      eSn[A        U5      (       a,  UR                  S:  a  [        UR                  * 5      nSnUUnnT RB                  RE                  U5      nT RB                  RE                  U5      nT RB                  RE                  U5      nURF                  RI                  5       (       a>  URF                  RI                  5       (       a  URF                  RI                  5       (       d3  [K        SURF                   S	URF                   S	URF                   S
35      e[M        U5      (       a  [K        SURN                   35      e[M        U5      (       a  [K        SURN                   35      e[M        U5      (       a  [K        SURN                   35      eT RB                  RQ                  URF                  URF                  5      nT RB                  RQ                  UURF                  5      nURS                  T RT                  5      nURV                  [        RX                  RF                  RZ                  R\                  :H  nUR^                  nUR^                  nUR^                  nT RT                  Ra                  UUU5      nT RT                  Ra                  UUU5      nT RT                  Ra                  UUU5      nT RT                  Rc                  U5      nT Re                  UR                  R                   [        RX                  Rg                  UU5      5        [i        T 5       nUu  nnT Rk                  5       u  nnT Rm                  UUUR                  R                   1S9u  nnnT Ro                  UU5        T RT                  Rq                  UUUU5      n [s        U
5      b+  U Ru                  ST RT                  Rw                  U
5      5        [s        U5      b+  U Ru                  ST RT                  Rw                  U5      5        U(       a*  U Ru                  ST RT                  Ry                  5       5        U(       a*  U Ru                  ST RT                  Ry                  5       5        U(       a*  U Ru                  ST RT                  Ry                  5       5        U(       a*  U Ru                  ST RT                  R{                  5       5        T R|                  R                  U5        U R                  S5      n!T RT                  R                  U!5        [        [;        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        T Re                  U$U%5        M,     T R#                  UR$                  5        T R|                  R                  5         [        U 4S jU 5       5      n&[;        U&5      S:  a  T RT                  R                  U&5        U!R                  5       n'U'R                  5       S:X  d   S5       eT RT                  R                  U!5        U R                  5       n(U(       a8  T RT                  R                  UU(5      n(T RT                  R                  U(U5      n(UR                  U(5        T Re                  UR                  R                   [        RX                  Rg                  U(U5      5        T R                  U(UR                  R                   5        S S S 5        [        [;        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 Re                  U$U%5        T R                  U%U$5        M,     UR&                   H  n	 S5       e   g 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rC   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 (r  r\  z&For lower bound must be a scalar, got z&For upper bound must be a scalar, got zFor step must be a scalar, got )r  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializer  c              3   B   >#    U  H  nTR                   U   v   M     g 7frC   r  r  s     r-   r   r    r  r  z7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Pr   r  r   r^   r   r  r   static_ranger  startrl   endstepr   r   r  r   r  r   r   r   r  r   
num_stagesloop_unroll_factordisallow_acc_multi_bufferflattenwarp_specializer  ry   ConstantRuntimeErrorrL   r1  r  rK   is_int	TypeErrorrQ   r+   integer_promote_implr  r   int_signednessrJ   
SIGNEDNESSSIGNEDrv  create_int_castr  rz  r   r}   r  r  r  create_for_opr   r  get_int32_attrget_unit_attrr  rA  r  get_bodyr  r`   r{   r  rw  r  ru   r  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_withr  )+r   r\   IteratorClassr`   	iter_argsiter_kwargsiteratorr  r  r  r  r  r  r  r  r  lbubr  negative_stepiv_type
iv_ir_typeiv_is_signediv_placeholderr|  r   r   r~  r  r  r  r  for_opfor_op_bodyblock_handlesr  r*   r  r  for_op_regionivr  result_valuess+   `                                          r-   	visit_ForCodeGenerator.visit_For  s4   

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&66O#00Le# "%Y!!31CLLQRO9TB!$Y!!31DIINNSTDU9VB#&y>A#59Q<4::cllSTo;VDbcc4::>djj[)D MB]]$$R(]]$$R(}}&&t,xx  (9(9ARARATATNrxxjXZ[][c[cZddfgkgqgqfrrstuu $$DRWWINOO $$DRWWINOO &&=dii[IJJ--44RXXrxxH--44WdjjI]]4<<0
--1D1D1O1O1V1VVYYYY{{\\))"j,G\\))"j,G||++D*lK33J?t{{~~x}}';';NG'TUd#r$&!G\<<>LB,0,>,>tWVZVaVaVdVdUe,>,f)E< --b(;\\//BlKF#J/;1L1LZ1XY#$67C 79T9TUg9hi( >@Z@Z@\]dll.H.H.JK 4dll6P6P6RS 68_8_8abNN!!$' //!,KLL55kB=B3|CT=UV=U[__QU3=UMV,]HEJ 
3	c++C6tS) 4 ))$))4NN 00Uu0UUM =!A%,,];'224M %%'1,g.gg, LL55kB))+B\\,,R4\\,,R4004NN4;;>>8==+?+?G+LM''DKKNN;a $f 9>c,>O8PQ8P1&++A.8PQ+NHEUM2ID#NN4%''T2 3 KKDEEE5  G @F W3 $#f Rs+   i3-Hi=/i8Gi=7j8i==
jc                     U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      n[        R
                  " X#U5      $ rC   )r   lowerupperr  r   r  )r   r\   rE  rF  r  s        r-   visit_SliceCodeGenerator.visit_Slice  sI    

4::&

4::&zz$))$~~eD11r/   c                 8    U R                  UR                  5      $ rC   )r   rl   r   s     r-   visit_IndexCodeGenerator.visit_Index  s    zz$**%%r/   c                 P    UR                   U R                  UR                  5      4$ rC   )r`   r   rl   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   r  msgr   rJ   device_assertr1  )r   r\   r  rP  s       r-   visit_AssertCodeGenerator.visit_Assert  sO    zz$))$&*hh&:djj"}}**4*NNr/   r]   c                 .   UR                   R                  " U0 UD6nUR                  5         UR                  nUR                   Vs/ s H  obU   PM	     nn[        U5       HR  u  px[        U[        5      (       a  [        U[        5      (       d  M1  [        R                  R                  U5      X''   MT     U=(       d    U R                  nU Vs/ s H  oR                  PM     n	n[        [        U5      X5      n
U R                   R#                  U
5      (       d  [%        U5      u  p['        / U	[)        5       5      n[+        U R,                  XR/                  5       U R                   UXR0                  UR2                  XU R4                  R6                  U R4                  R8                  U R4                  R:                  UU R<                  S9n UR?                  URA                  5       5        URR                  nUU R0                  U
'   OU R0                  U
   nU R                   RU                  U
5      n[W        U5      nU R4                  RY                  UU5      n[[        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 ! [B         aQ  n[D        RF                  RH                  (       a  e [K        U RL                  RN                  U RP                  S 5      UeS nAff = fs  snf )N)r!  r&  r?  r#  rW   r$  r%  r5  r6  r7  r;   r.  )2	signaturebindapply_defaults	argumentsr[   rX   rD   r   r   r   rJ   r   r;   r+   r?   r   r!  has_functionr   r   r   r   r-  get_capture_scoper9  rW   r   r5  r6  r7  r.  r   parse	Exceptionr   ra  front_end_debuggingr$   r&  rY   r@  rB  get_functionru   r  r  get_num_resultsr  r
  r{   )r   r]   r^   r   r;   
bound_argsr*   r  r`   r   fn_namer$  r%  r:  r   ecallee_ret_typesymbolargs_valcall_oprt   s                        r-   call_JitFunctionCodeGenerator.call_JitFunction#  st   \\&&77
!!###')||4|tT
|4oFAc:..*S+2N2N"--11#6 & (>4+>+>)-.#XX	.M"-yI{{''00$8$<!I#B	46:I%dllI?S?S?U^b^i^irt4;LcLc/1{{i.2ll.B.BPTP\P\PhPh151H1HYg/3}}>IT
+ (00O/>D##G,"55g>O))'2'-,,##FH5278O8O8Q2RS2RQ7%%a(2RS'/1BCDDG 5 /  T$$88&t{{tLRSS	T Ts+   J*J/J4 7L4
L>AL

Lc                 z   [        U[        [        45      (       a(  UR                  SUR                  5        UR
                  n[        USS5      nU(       a  [        USS5      (       az  S[        R                  " UR                  5      -  /n[        U[        5      (       a  UR                  U5        [        U R                  R                  USR                  U5      5      e[        U[         5      (       a  [#        XU5        U R%                  X#U5      $ ['        US5      (       a  [)        UR                  5      (       d9  [*        R,                  R/                  U5      (       d  [        U[0        5      (       a  [3        5       n[        USS 5      n[        U[0        5      (       a  U R4                  US	'   OLUc  [6        R8                  " U5      nS	UR:                  ;   a  U R4                  US	'   S
UR:                  ;   a  XS
'    U" U0 UDUD6n	[        U	[<        5      (       a  [*        R<                  " U	5      n	U	$ X RF                  RI                  5       ;   d+  ['        US5      (       a*  [)        UR                  5      (       d  [K        [L        U5      nU" U0 UD6n	S n[        U	[N        R<                  [*        R<                  45      (       a  [Q        X5      $ U" U	5      $ ! [>         aP  n
[@        RB                  RD                  (       a  e [        U R                  R                  U[        U
5      5      U
eS n
A
ff = f)Nr   _must_use_resultF
_is_unusedz#The result of %s is not being used.r_  r  rU  r>  r  c                 <    [        U 5      (       a  U $ [        U 5      $ rC   )rF   r   )r  s    r-   wrap_constexpr3CodeGenerator.call_Function.<locals>.wrap_constexpr~  s    ""Q<r/   ))rD   r  r   insertr  r  r   r   r  r   rl  r  r$   r&  rY   r7   r   ra   rg  r*  rF   r   rJ   
is_builtinr   r   r1  inspectrU  
parametersr   r\  r   ra  r]  rI  rq   mapr   builtinsrp   )r   r\   r]   r^   r  murerror_messageextra_kwargssigr>   rb  rm  s               r-   rA  CodeGenerator.call_FunctionL  s   b>+ABCCKK2;;'Bb,e474u55BS[[QUQZQZE[[\M#s##$$S)"4;;??D#((=:QRRb+&&4T*((377B
##(8(E(E(--JbJbceJfJfjt%k' k'6L"k40C"/00,0MM[);!++B/C#..004L-3>>115.M$6,6#6c5))"..-C
 ''..00WR5L5LUefhfqfqUrUr+T2D$#	 
 cHNNHNN;<<)#>>c""-  	M$$88 't{{c!fE1L	Ms   6K   
L:*AL55L:c                 t    [        U[        5      (       a  UR                  SU5        U R                  XXE5      $ rw   )rD   r   ro  rA  )r   r\   r]   fn_selfr^   r  s         r-   r   CodeGenerator.call_Method  s0    b+&&KK7#!!$D66r/   c                   ^  [        T R                  UR                  5      5      n[        U[        5      (       d'  T R
                  R                  U5      nUb	  U" T U5      $ [        U 4S jUR                   5       5      n/ nUR                   H  n[        U[        R                  5      (       ac  T R                  UR                  5      n[        U[        R                  R                  5      (       d   eUR!                  UR"                  5        M  UR%                  T R                  U5      5        M     T R'                  XXT5      $ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frC   r   r  s     r-   r   +CodeGenerator.visit_Call.<locals>.<genexpr>  s     Dm74::g&&mr   )r   r   r   rD   r   statically_implemented_functionsr  r   r  r^   r   Starredrl   r   rJ   r   r  rq   r  rA  )r   r\   r]   static_implementationr  r^   r`   s   `      r-   r   CodeGenerator.visit_Call  s    !$**TYY"78"n--$($I$I$M$Mb$Q!$0,T488DdmmDD99C#s{{++jj+!#x}}':':;;;;CJJ'DJJsO,  !!$D66r/   c                 ,    [        UR                  5      $ rC   )r   rl   r   s     r-   visit_ConstantCodeGenerator.visit_Constant  s    $$r/   c           
         U R                   R                  [        UR                  5      5      nUc5  U R	                  USR                  UR                  R                  5      5      e/ nUR                   H  nU R                  U5      n[        U5      (       d-  [        U5      nUSL a
  US:X  a  Us  $ USL a  US:X  a  Us  $ MO  MQ  UR                  R                  5       (       aX  [        USS 5      nUb  XpR                  -  n[        R                  " S[         U R"                  U[$        R&                  " U5      S9  UR)                  U5        M     [+        U5      S	:X  a  UR)                  W5        [+        U5      S
:  aT  UR-                  5       nUR-                  5       n	U R/                  XX5      n
UR)                  U
5        [+        U5      S
:  a  MT  [+        U5      S:X  d   eUS	   $ )Nz9AST boolean operator '{}' is not (currently) implemented.Flogical_andT
logical_orr"  zeLogical operators 'and' and 'or' are deprecated for non-scalar tensors; please use '&' or '|' instead)rf   filenamer"  sourcer   r   r#   )_method_name_for_bool_opr  r+   r)  rO  rJ  rZ   rq   r   rH   r   rO   r   r%  r  warn_explicitUserWarningr$  r   r  r  ry   r  rD  )r   r\   rB  nontrivial_valuessubnoderl   bvr"  r-  r,  r  s              r-   visit_BoolOpCodeGenerator.visit_BoolOp  s   3377TWWF##QXXY]Y`Y`YiYijl l {{G JJw'E$U++%[%Kk]&B L$J[L%@ L &AJ ::&&(($T8T:F)//1**!,!%%"{{40 "((/9 #<  !Q& $$U+#$)#'')C#'')C++DsHC$$S)	 #$) $%*** ##r/   r  r  r  c                 .   [        U5      (       a"  US:X  a  U R                  R                  US5      $ [        U[        5      (       a  US;  a  UR
                  n[        X5      n[        U5      (       a   [        U[        5      (       a  [        X5      $ U$ )NT)r#   r   )rl   r+   )
rH   r1  permuterD   r   rl   r   rF   r   r  )r   r,  r   s      r-   r@  CodeGenerator.get_Attribute  sy    S!!dck==((f55c9%%$6G*G))Cs!C  Zk%B%B!#,,r/   c                    U R                  UR                  5      n[        U[        5      (       av  UR                  =o0R
                  R                  ;   aQ  U R
                  R                  U   nUR                  U:X  a  O'UR                  =o0R
                  R                  ;   a  MQ  U R                  X!R                  5      $ rC   )	r   rl   rD   r   rZ   r   r7  r@  r   )r   r\   r,  r*   s       r-   r   CodeGenerator.visit_Attribute  s    jj$c:&&<<'4LL,C,CCll--d3<<4' <<'4LL,C,CC !!#yy11r/   c                 d    SUR                   l        [        R                  R	                  X5        g r   )rl   rk  r   r  r   r   s     r-   
visit_ExprCodeGenerator.visit_Expr  s      $

%%d1r/   c                     g rC   rc   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*  )rS   rq   rX   rD   r   r  rl  rl   FormattedValue
conversionr   rL   rO  r+   chrrJ  AssertionErrorr7   )r   r\   rq   r  rl   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                   > Uc  g U R                   nU R                  R                  5       nXl         [        US5      (       a  [        US5      (       a  U R                  R	                  U R
                  U R                  UR                  -   UR                  5      nU R                  b@  U R                  R                  U R                  R                  U R                  U5      5        OU R                  R                  U5        U R                  R                  5       n [        TU ]5  U5      nU(       a!  X l         U R                  R                  U5        U$ ! [         a    e [         aZ  n[         R"                  R$                  (       a  e [        U R&                  R(                  U R                   [+        U5      5      S eS nAff = f)Nr"  r#  )r@  r   ru  r*  
create_locr$  r%  r"  r#  r3  r4  rt  superr   r$   r\  r   ra  r]  r&  rY   repr)r   r\   	last_noder  here_locr>   rb  	__class__s          r-   r   CodeGenerator.visit  s[   <MM	<<'')4""wt\'B'B||..t~~tQUQ\Q\?\^b^m^mnH&&2$$T\\%A%A$BYBY[c%de$$X.||++-H		V'-%C %MLL  *
   	 	V  44 #4;;??DMM47KQUU	Vs   E G,AGGc                 j    U R                  USR                  [        U5      R                  5      5      e)Nzunsupported AST node type: {})rO  rJ  r+   rZ   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: >)ry   r^   r  r!  r   r   rD   r   r  r\  r  r%   r&  rY   )r   r\   	arg_countpassedrN  rb  s         r-   execute_static_assert#CodeGenerator.execute_static_assert'  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$ )Nr\   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rC   r   r  s     r-   r   =CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>B  s     #U}GDJJw$7$7}r   )r  r   r^   r   r   )r   r\   r*   rl   r  r`   r^   	python_fns   `      r-   r>   *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   )r  r>   s   ` r-   static_executorCodeGenerator.static_executor=  s    	6CHH 	6 
r/   r   )r   r  )r%  r   r;   r-  r@  rD  r$  r]   r?  r9  r   r.  r"  r&  r   r   r!  r3  rW   r:  rB  r<  r;  rA  r1  rE  rC   )rZ   r   r   r   r   r   r   rl  r   ry   rS   r  floatintrD   r   r*  rI  r   r  updater   rJ   device_printbuiltin_minbuiltin_maxrO  rT  rC  
contextlibcontextmanagerrp  rw  r   r   r   rz  r  r  setr  r  r   r  r   ListCompr  r   r  r  r  r   r  r  r  r  r   r   r   r4  r7  r:  rD  rK  AddSubMultDivFloorDivModPowLShiftRShiftBitAndBitOrBitXorrI  r
   operatorrn  r  r  r   r   r  r  r  EqNotEqLtLtEGtGtEr  cmpopr  USubUAddNotInvertr  unaryopr  r  r  r  r  r  rB  rG  rJ  r	   rM  rR  rg  rA  r   r   r  BoolOpr  AndOrr  boolopr@  r   r  r  r  r   r   r   r  r  experimental.gluonttglstatic_assertstatic_printrJ  r  rR  r   r   __classcell__)r   r1   r  s   00@r-   r   r     s    /3efjQUbc@0+ @0U]^bUc@0AI#@0H tUE3
GWM)MA 	


AM)tCH~  	(--,,-	))*	))* L	1f ' '
U&c &%
I0E*F &4 &" ?Be &-3s8 &-V	2!3<< ! 
@;>&r,+?Z&' 2*..
22$7F 	)n

L

L

I		8

I>T$s||"4c"9: 7Cr$,N!,F8>3/j*,F$ 	#))Xsvvx(TWTZTZ\dfifmfmow<d4		?C#78 t  	)SXXy#''9cjjR^?tD$5s$:; @76rL/6G6R2&0U38_ 0OC O
'E; 'ER9#v7
7&%2$ 2$h >AWWmUXU[U[]i<jd4

#3S#89j	22$<c#(( t ,
 6##%:""OE$:1?51_S!_S!Q$d68SXXJO3L+L&M  i')s   O.r   c                   ^ S /[        U R                  5      -  nUR                  R                  5        H.  u  pU R                  R	                  U5      n
[        U	S 5      Xz'   M0     U4S jmUR                  R                  5        H  u  pT" U[        U5      S S S2   U5        M      [        / XqR                  5      n[        U 5      u  pSSKJn  [        S UR                  5      nU Vs0 s H#  nU R                  US      UR                  U   _M%     nnUR                  nU" SSS/5      " UU5      n[        X-U R                  5       U R!                  U5      U S	XUXEX`R#                  5       S
9nUR%                  U R'                  5       5        UR(                  nX&l        UR-                  5       (       d+  U R#                  5       (       d  [/        U5        [1        S5      eU$ s  snf )Nc                    > UR                  5       n[        U5      S:X  aP  [        U [        5      (       a  [	        U5      R
                  X'   g [	        U5      R
                  U R                  U'   g T" X   X5        g rw   )r  ry   rD   rS   r   r+   ro   )argumentindicesrl   indexapply_constexpr_typess       r-   r  *ast_to_ttir.<locals>.apply_constexpr_types[  s^    w<1(D))"+E"2"7"7(1%(8(=(=u%!(/7Br/   r  r   )
namedtuplec                     [        U 5      S:H  $ rN   )ry   )rm   s    r-   r  ast_to_ttir.<locals>.<lambda>l  s    c!fkr/   SpecializationProxy	constantsrU  T)r   r?  r&  r"  r$  r%  r5  r6  r7  r!  r.  z error encountered during parsing)ry   r[   rU  r=  r  r   r  rS   r   r   r   collectionsr  filterr   rZ  r  r.  r   r[  r!  r-  verifyrJ  r  )r]   rY   r-  r5  r6  r7  r!  r   rF  rm   r_   r  rl   r:  r$  r%  r  leavesr  r  rU  proxyr   r  s                          @r-   ast_to_ttirr  T  s   R\\**I##%ll  #"1d+	 &C }}**,idDbD)95A - B	995I04I&)3==9F?EFv!ad#S]]1%55vIFI,{K.HI)U^_Eg9M9M9O_a_f_fgl_m%'49mt*5U[fqfqfsuI OOBHHJFN==??{{}}&M=>>M Gs   -*G&rC   )Nr   rt  r  r  r  rq  r(   r  rd  dataclassesr   ro   r   typingr   r   r   r   r	   r
   r   r   r   r*  r   r   _C.libtritonr   r   r   r   r   r   r  language.corer   r   r   runtime.jitr   r   r   r   r   r   _utilsr    r!   r"   errorsr$   r%   r&   r.   r?   r   rF   rH   rL   rQ   rT   ra   r!  rg   rp   ru   rl   r{   r  r+   r  r}   r  r   r   r  r   r  rc   r/   r-   <module>r     s~   
      	   !  T T T  ' F F G G C  C F F a a	% % %! ! !US UT UNS NT N(S (T ( #, !
D*!5 "bhh "Y " #tDz* 3 3*T%COO T%n. .b $  
COO D*'r/   