
    hG                       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  SS	KJrJ r J!r!  SS
K"J#r#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*  SSK+J,r,J-r-J.r.  S r/S r0S\S\14S jr2S\S\14S jr3S\S\14S jr4S\S\14S jr5S\S\14S jr6S r7S r8S r9S\\    4S jr:S\\Rv                     S\\!   4S jr<\1\=\>" S5      1r? " S  S!5      r@ " S" S#\ R                  5      rB " S$ S%5      rC\" S&S'9 " S( S)5      5       rD " S* S+\ R                  5      rES-S, jrFg).    N)	dataclass)
ModuleType)	AnyCallableDictOptionalTupleTypeUnionIterableList   )knobslanguage)irgluon_ir)	constexpr	str_to_tytensor)_unwrap_if_constexpr
base_value	base_type)get_jit_fn_file_lineget_full_name)JITFunction)find_paths_ifget_iterable_pathset_iterable_path   )CompilationErrorCompileTimeAssertionFailureUnsupportedLanguageConstructc                 d    Sn[         R                  " X 5      (       d  [        SU SU  3U 5      eU $ )Nz^[a-zA-Z_][a-zA-Z0-9_]*$zinvalid z identifier: )rematchr    )nametypepatterns      X/var/www/fran/franai/venv/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SR                  [        U5       Vs/ s H  oU S[        X%   5       3PM     sn5      nUR	                  SS5      nUR	                  SS5      nUR	                  SS5      R	                  SS5      nU  S	U S	U 3nU$ s  snf s  snf )
N_c._d_'_sq_[]__)joinmanglesortedreprreplace)r&   arg_tys	constantstymangled_arg_namesimangled_constantsrets           r)   	mangle_fnrB      s    !@"))+!@AviGX!YGX!Cqil);(<"=GX!YZ)11#u=)11#v>)11#s;CCCMF"&'r*;)<
=CJ "A!Ys   B<Coreturnc                 "    [        U [        5      $ N)
isinstancer   rC   s    r)   _is_triton_valuerI   +   s    a$$r+   c                 "    [        U [        5      $ rF   )rG   r   rH   s    r)   _is_triton_tensorrK   /   s    a  r+   c                 v    U S L =(       d/    [        U [        [        R                  R                  [
        45      $ rF   )rG   r   r   coredtyper   rH   s    r)   _is_constexprrO   3   s)    9T
1y(--2E2E{&STTr+   c                     [        U 5      =(       a:    U R                  R                  5       =(       a    U R                  R                  S:g  $ Nr   )rK   r'   is_blocknumelrH   s    r)   _is_non_scalar_tensorrT   7   s/    QMQVV__%6%L166<<1;LMr+   c                 .    [        U [        [        45      $ rF   )rG   listtuplerH   s    r)   _is_list_likerX   ;   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	enumeraterO   rT   r"   src__name__	arg_names)nodefnargsidxargs        r)   _check_fn_argsre   ?   s    	{{!$HC %%*?*D*D2FFD},ijljvjvwzj{i||}  B  ~C  D  ( r+   c                 v    [        U [        5      =(       a#    [        U [        5      =(       a    [	        U S5      $ )N_fields)rG   r'   
issubclassrW   hasattr)vals    r)   _is_namedtuplerk   I   s'    c4 WZU%;WY@WWr+   c                    [        [        U 5      5      (       a  U R                  nOI[        U [        R
                  5      (       a  U R                  R                  nO S[        U 5       35       eU  Vs/ s H
  o1" U5      PM     nnU Vs/ s H  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 )	rk   r'   rg   rG   r   rW   fieldsr   
tuple_type)valuera   rm   vvalstypess         r)   _apply_to_tuple_valuesrs   M   s    d5k""	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$ rF   )_flatten_ir)rt   handlesrp   s      r)   flatten_values_to_irrx   [   s"    G	g Nr+   rw   rr   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)rw   rr   cursorr=   ro   s        r)   unflatten_ir_valuesr}   b   s?     F((9  S\!!!s   57c                   &    \ rS rSrS rS rS rSrg)enter_sub_regionm   c                     Xl         g rF   )	generator)selfr   s     r)   __init__enter_sub_region.__init__o   s    "r+   c                    U R                   R                  R                  5       U l        U R                   R                  R                  5       U l        0 U R                   l        U R                   R                  R                  5       U l        U R                   R                  R                  5       U l
        U R                  U R                  4$ rF   )r   lscopecopyliveins
local_defs	prev_defsbuilderget_insertion_blockinsert_blockget_insertion_pointinsert_point)r   s    r)   	__enter__enter_sub_region.__enter__r   s    ~~,,11322779$&! NN22FFH NN22FFH||T....r+   c                     U R                   R                  R                  U R                  5        U R                  U R                   l        U R                  U R                   l        g rF   )r   r   restore_insertion_pointr   r   r   r   r   )r   rb   kwargss      r)   __exit__enter_sub_region.__exit__{   s@    66t7H7HI $$(NN!r+   )r   r   r   r   r   N)r^   
__module____qualname____firstlineno__r   r   r   __static_attributes__ r+   r)   r   r   m   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 rF   gscope)r   r   s     r)   r   ContainsReturnChecker.__init__   s    r+   rD   c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frF   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NFr   )r   ra   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_fieldsrG   rV   ASTr   )r   r`   rA   r-   ro   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   )
rG   ro   r   Nameidr   getattrattrr   r   )r   r`   ro   ra   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`   ra   s      r)   
visit_Name ContainsReturnChecker.visit_Name   sO    >SYY&77dkk!TWW%B''++r+   c                     gNTr   r   r`   s     r)   visit_Return"ContainsReturnChecker.visit_Return       r+   c                     gr   r   r   s     r)   visit_Assign"ContainsReturnChecker.visit_Assign        r+   c                     gr   r   r   s     r)   visit_AugAssign%ContainsReturnChecker.visit_AugAssign   r   r+   c                 8    U R                  UR                  5      $ rF   r   r   r   s     r)   visit_Module"ContainsReturnChecker.visit_Module         ++r+   c                 8    U R                  UR                  5      $ rF   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$ rF   )r   r   orelse)r   r`   rA   s      r)   visit_IfContainsReturnChecker.visit_If   s=     		*;;7**4;;7C
r+   c                 |    U R                  UR                  5      =(       d    U R                  UR                  5      $ rF   )r   r   r   r   s     r)   visit_IfExp!ContainsReturnChecker.visit_IfExp   s'    zz$))$?

4;;(??r+   c                 8    U R                  UR                  5      $ rF   )r   funcr   s     r)   
visit_Call ContainsReturnChecker.visit_Call   s    zz$))$$r+   r   N)r^   r   r   r   r   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   r   r   r+   r)   r   r      s   0D 0T 	T 	&CMM &d &sxx D     
CMM d 
, , ,,coo ,$ ,SVV  @		 @d @%sxx %D %r+   r   c                       \ 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                 4    Xl         X l        X0l        X@l        g rF   )	ret_types	arg_typesr<   attrs)r   r   r   r<   r   s        r)   r   ASTFunction.__init__   s    """
r+   r   rr   rD   c                 H    / nU H  nUc  M  UR                  X5        M     U$ rF   )_flatten_ir_types)r   r   rr   ir_typesr=   s        r)   flatten_ir_typesASTFunction.flatten_ir_types   s.    Bz  3  r+   c                 8    U R                  XR                  5      $ rF   )r   r   )r   r   s     r)   return_types_irASTFunction.return_types_ir   s    $$Wnn==r+   c                 
  ^  U 4S jn[        [        T R                  U5      5      nU Vs/ s H  n[        T R                  U5      PM     nnT R	                  X5      nT R                  U5      nUR                  Xg5      $ s  snf )Nc                 8   > U TR                   ;  =(       a    US L$ rF   r<   pathr-   r   s     r)   <lambda>'ASTFunction.serialize.<locals>.<lambda>       T^^!;!M!Mr+   )rV   r   r   r   r   r   get_function_ty)r   r   is_val	val_pathsr  r   arg_types_irret_types_irs   `       r)   	serializeASTFunction.serialize   sw     Nt~~v>?	IRS&t~~t<	S,,W@++G4&&|BB Ts    B c                 x  ^ ^ U4S jmT" T R                   5      nU 4S jn[        [        T R                   U5      5      nSn[        UR	                  5       5       Vs/ s H  oaR                  U5      PM     nnU Hq  n[        T R                   U5      n	T R                  R                  U/ 5      n
U
 H  u  pUR                  X[U5        M     U	R                  Xu5      u  p[        X(U5        Ms     T R                  nUR                  5        H%  u  p[        X([        R                  " U5      5        M'     U$ 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 rF   )rG   rV   rW   r   rn   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c                 8   > U TR                   ;  =(       a    US L$ rF   r  r  s     r)   r  )ASTFunction.deserialize.<locals>.<lambda>   r	  r+   r   )r   rV   r   rangeget_num_argsrb   r   r   getset_arg_attrrz   r   r<   itemsr   r   )r   ra   rq   r  r  r|   r?   rw   r  r=   
attr_specs	attr_nameattr_valrj   r<   r  s   `              @r)   deserializeASTFunction.deserialize   s   	,
 T^^,Mt~~v>?	',R__->'?@'?!771:'?@D"4>>48Bb1J'1#	8< (2 **7;KCd#.  NN	"*IDd(*<*<S*AB + As   D7)r   r   r<   r   N)r^   r   r   r   r   r   r   r   r   r'   r   r   r  r   r   r   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__r   N)r^   r   r   r   r   __annotations__r   r   r   r+   r)   r$  r$    s    r+   r$  c                   $  ^ \ rS rSr%   SiS\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	\R0                  4S
\R2                  445        S rS rS rS\S\\\4   SS4S jr S r!S r"S r#S r$S r%S r&S\4S jr'S r(S r)S r*S r+S r,S r-S r.S  r/S! r0S" r1S# r2S$ r3S% r4\5Rl                  S&\5Rn                  S'\5Rp                  S(\5Rr                  S)\5Rt                  S*\5Rv                  S+\5Rx                  S,\5Rz                  S-\5R|                  S.\5R~                  S/\5R                  S0\5R                  S10rB\\C\5R                     \4   \S2'   S3 rES4 rFS5 rGS6 rHS7 rIS8 rJS9 rK\5R                  S:\5R                  S;\5R                  S<\5R                  S=\5R                  S>\5R                  S?0rR\\C\5R                     \4   \S@'   SA rT\5R                  SB\5R                  SC\5R                  SD\5R                  SE0rY\\C\5R                     \4   \SF'   SG r[SH r\SI r]SJ r^SK r_SL r`SM raSN rbSO rcSP rdSQ reS\f\\4   4SR jrgS\4SS jrhST\4SU jriSV rjSW rkSX\5R                  4SY jrm\5R                  SZ\5R                  S[0rp\\C\5R                     \4   \S\'   S] rrS^ rsS_ rtS` ruU4Sa jrvSb rwSX\5R                  SS4Sc jrySd rzSeSfK{Jr|  \R,                  R                  \y\R,                  R                  \z" \5      \|R                  \y\|R                  \z" \5      \\z" \5      \	\z" \	5      0r\\\\5R                  /\4   4   \Sg'   ShrU=r$ s  snn f )jCodeGeneratori  Njit_fnfunction_types	file_namec                    Xl         UR                  5       (       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        Xl        US-
  U l        U R                  R                  XS5        X`R                  l        XpR                  l        Uc  0 OUU R                  l        U	c  U R                  R#                  5       OU	U l        Uc  0 OUU l        X l        0 U l        UR-                  5        H  u  nn[/        U[0        5      (       a+  UR3                  UR4                  U5      U R*                  U'   MF  [7        USS5      nUU;   a(  [7        UU   UR4                  5      U R*                  U'   M  UU R*                  U'   M     0 U l        XPl        U
(       a"  XDR=                  S5      S-   S  n[?        US5      nX@l         Xl!        S U l"        Xl#        / U l$        S U l%        0 U l&        U RO                  5       U l(        S U l)        S	U l*        g )
Nr   )GluonSemantic)TritonSemanticr   r    r/   functionF)+contextis_gluon,triton.experimental.gluon.language._semanticr.  r   GluonOpBuilderr   semantictriton.language.semanticr/  r   r,  
begin_lineset_locoptionscodegen_fns
module_mapcreate_modulemodulefunction_ret_types	prototyper   r  rG   r   r  r^   r   r   r*  rfindr*   function_name	is_kernelcur_noder[   	scf_stackret_typer   _define_name_lookupdereference_namera   visiting_arg_default_value)r   r2  r@  r   rB  r*  r:  r;  r<  r>  rC  r+  r[   r,  r8  r.  r/  krp   module_names                       r)   r   CodeGenerator.__init__  s    ??R#227;DL)$,,7DM?::g.DL*4<<8DM"$q.YA6& $/ (2(:"
6<ndll002&(6(>"N"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      $ rF   )r"   r*  r]   )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  rO   )r   r&   absent_markerrj   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      $ rF   )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   r0  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   rM  r'   r   rG   r   r   
startswithr   rN   rk   rX  rI  r   compilationallow_non_constexpr_globals	NameErrortextwrapdedentr:   )r&   r\  rj   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"3'--d3 33%%AA!  $ 
 %//3f 51!4 5 6=WT35GI Ir+   rD   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)rM  r  rg  )r&   r\  lookup_functionro   rW  rj  r]  r   s       r)   name_lookup6CodeGenerator._define_name_lookup.<locals>.name_lookup  sO    "F#/@V@V@Z@Z#Z'5& L $[ tfO455r+   )strrV  r   )r   rn  rW  rj  r]  s   ` @@@r)   rG  !CodeGenerator._define_name_lookupn  sG    	1s 	1	I 	IB 	6c 	6c 	6 	6 r+   r&   ro   rD   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&   ro   s      r)   	set_valueCodeGenerator.set_value  s     "D %r+   c                 p    U R                   R                  5       nU R                   R                  5       nX!4$ rF   )r   get_locr   )r   locips      r)   _get_insertion_point_and_loc*CodeGenerator._get_insertion_point_and_loc  s/     ll""$\\--/wr+   c                 p    U R                   R                  U5        U R                   R                  U5        g rF   )r   r   r9  )r   rx  rw  s      r)   _set_insertion_point_and_loc*CodeGenerator._set_insertion_point_and_loc  s&    ,,R0S!r+   c                     [        U5      (       d  U/nU H5  nU R                  U5        [        U[        R                  5      (       d  M5    g    g rF   )rX   r   rG   r   r   )r   stmtsstmts      r)   visit_compound_statement&CodeGenerator.visit_compound_statement  s@    U##GEDJJt $

++ r+   c                 B    [         R                  R                  X5        g rF   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 rF   )r   r   r   rW   elts)r   r`   r   eltr  s        r)   
visit_ListCodeGenerator.visit_List  sP    jj"{{~~$))D)3zz#)DE Es   A"c                 8  ^ ^ T R                  UR                  5      n/ nUU 4S jmT" U5      nUc  [        R                  nOH[	        U[        R
                  R                  5      (       d   eUR                  U5        UR                  nT R                  R                  U5        T R                  c  UT l        O+T R                  U:w  a  [        ST R                   SU 35      eT R                  R                  5       nT R                  R                  U5        g )Nc                    > [        U [        R                  5      (       a  [        U T5      $ [        U [        R                  [
        [        45      (       a  TR                  R                  U 5      $ U $ rF   )	rG   r   rW   rs   r   intfloatr6  	to_tensor)ro   decayr   s    r)   r  )CodeGenerator.visit_Return.<locals>.decay  sU    %00-eU;;EH$6$6U#CDD}}..u55Lr+   zInconsistent return types:  and )r   ro   r   voidrG   rM   r   rv   r'   r   rA   rF  	TypeErrorcreate_blockset_insertion_point_to_end)r   r`   	ret_valuerw   ret_typost_ret_blockr  s   `     @r)   r   CodeGenerator.visit_Return  s    JJtzz*		 )$	]]Fi)A)ABBBB!!'*^^F!== "DM]]f$9$--fXVWW 224//?r+   c                     U R                  UR                  5      n[        U[        R                  R
                  5      (       d   eUR                  $ rF   )r   ro   rG   r   rM   rW   rt   )r   r`   rb   s      r)   visit_StarredCodeGenerator.visit_Starred  s;    zz$**%$ 3 34444{{r+   c                    U R                  UR                  5      u  p#U R                  (       a  U R                  US5      e[	        UR                  R
                  S S S2   5       H  u  pEUR                  R                  U* S-
     nUR                  nUR                  n[        R                  " U[        R                  " 5       S9n	Uc  [        R                  " U	/US9n
O[        R                  " XUS9n
 U R                  (       a   eSU l        U R                  U
5        SU l        M     U R                  (       a  S	OS
nU R                  R!                  U R"                  5      nU R"                  R%                  U R&                  U R(                  XU R*                  5      U l        U R&                  R-                  U R                  5        U R                  R/                  5       nU R                  R1                  U R                  5      n[3        X.5       H  u  nnU R5                  UU5        M     U R"                  R7                  5       nU R"                  R9                  U5        U R;                  UR<                  5        U R"                  R7                  5       R?                  5       (       a   eU R@                  b  U R@                  [B        RD                  :X  a2  [B        RD                  U l         U R"                  RG                  / 5        GO[I        U R@                  [B        RJ                  5      (       a&  U R@                  RL                  U R                  l'        OU R@                  /U R                  l'        U R                  RQ                  U R                  R!                  U R"                  5      5        U R"                  RG                  U R                  RS                  U R"                  5       Vs/ s H  nU R"                  RU                  U5      PM      sn5        U R                  RW                  5         U(       a  U R"                  RY                  U5        g g ! SU l        f = fs  snf )Nz,nested function definition is not supported.r   )r   r   targetsro   )targetro   
annotationTFpublicprivate)-r   rb   ra   rS  r\   defaultsr  rd   r   r   r   r   	AnnAssignrI  rC  r@  r  r   get_or_insert_functionr>  rB  r[   	push_backadd_entry_blockr   ziprs  r   set_insertion_point_to_startr  r   has_terminatorrF  r   r  rA   rG   rn   rr   r   
reset_typer   create_poisonfinalizer  )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_ptr=   s                      r)   r   CodeGenerator.visit_FunctionDef  s!   !%DII!6	77##D*XYY )$))*<*<TrT*B CAyy~~qb1f-H!,,J<<DDciik:I!JJ	{-P	MM\fg	8::::26/

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

4::&"$ F8 ,D "E F Fe$E"'KK;;v&&  &&r+   c                    [        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      (       a2  U R                  UR                  5      n[        XAR                  U5        g [        U[        R                   5      (       d   eU R#                  U R                  U5      U5        g rF   )rG   r   r   r   	Subscriptvisit_Subscript_Storer	   r\   r  assignTargetrt   r   r   ro   setattrr   r   rs  )r   r  ro   r?   bases        r)   r  CodeGenerator.assignTargetA  s    &**cii0000fcmm,,--f<<fcii((&v{{3	!!&,,q/: 4fcmm,,::fll+DD++u-&#((++++tzz&)51r+   c                   ^ ^ UU 4S jmT" T R                  UR                  5      5      n[        U[        R                  5      (       a  UR
                  /OUR                  n[        U5      S:X  d   eT R                  US   U5        g )Nc                 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 $ rF   )	rG   r   rW   rs   rN   r   rI   r6  r  )ro   native_nontensor_types_sanitize_valuer   s     r)   r  3CodeGenerator.visit_Assign.<locals>._sanitize_valueR  ss    %00-e_EE&.nnhnn%E"(/E $U++u==//6Lr+   r   r   )	r   ro   rG   r   r  r  r  r{   r  )r   r`   rt   r  r  s   `   @r)   r   CodeGenerator.visit_AssignP  sh    		 !DJJ!78#-dCMM#B#B4;;-7|q   '!*f-r+   c                 P   [         R                  " UR                  5      n[        R                  " 5       Ul        [        R                  " X!R                  UR                  5      n[        R                  " UR                  /US9nU R                  U5        U R                  U5      $ )Nr  )r   deepcopyr  r   Loadr   BinOpopro   r   r   )r   r`   lhsrhsassigns        r)   r   CodeGenerator.visit_AugAssignb  si    mmDKK(((*iiWWdjj1T[[M=

6zz#r+   c                     [        UR                  5      [        R                  L a  UR                  $ U R                  UR                  5      $ rF   )r'   r   r   r   r   rH  r   s     r)   r   CodeGenerator.visit_Namej  s4    >SYY&77N$$TWW--r+   c                 B    [         R                  R                  X5        g rF   r  r   s     r)   visit_StoreCodeGenerator.visit_Storeo  r  r+   c                 B    [         R                  R                  X5        g rF   r  r   s     r)   
visit_LoadCodeGenerator.visit_Loadr  r  r+   c                     UR                    Vs/ s H  o R                  U5      PM     nn[        R                  " U5      $ s  snf rF   )r  r   r   rW   )r   r`   r  rb   s       r)   visit_TupleCodeGenerator.visit_Tupleu  s4    '+yy1y!

1y1~~d## 2s   Ac                    [        U5      (       a  [        X!5      " X0R                  S9$ [        U5      (       a1  [        R                  " SSU5      n[        X45      " X R                  S9$ [        U[        [        R                  45      (       d   [        U[        5      (       a  [        U5      n[        X!5      " U5      $ )N	_semanticz__(.*)__z__r\1__)	rK   r   r6  r$   subrG   r   r   rW   )r   method_namer  r  reverse_method_names        r)   _apply_binary_method"CodeGenerator._apply_binary_methody  s    S!!3,SMMJJS!!"$&&j+"N34SMMRR#	8>>:;;
3PY@Z@ZC.Cs(--r+   c                 ^   U R                  UR                  5      nU R                  UR                  5      nU R                  R	                  [        UR                  5      5      nUc5  U R                  USR                  UR                  R                  5      5      eU R                  XBU5      $ )Nz8AST binary operator '{}' is not (currently) implemented.)r   leftright_method_name_for_bin_opr  r'   r  rS  formatr^   r  )r   r`   r  r  r  s        r)   visit_BinOpCodeGenerator.visit_BinOp  s    jj#jj$2266tDGG}E##D$^$e$efjfmfmfvfv$wy y((3??r+   __add____sub____mul____truediv____floordiv____mod____pow__
__lshift__
__rshift____and____or____xor__r  c                    U R                   R                  U5        U R                  UR                  5        U R                   R	                  5       nU R
                  R                  5       n0 nUR                  (       a  U R                   R                  U5        UR                  5       U l        0 U l        U R                  UR                  5        U R
                  R                  5       nU R                   R	                  5       n/ nU H  nUS4US44 Hc  u  pX;   d  M  [        X   5      [        X(   5      :H  nU(       a   X   R                  X(   R                  :X  a  MN   SU SX(    SU
 SX    35       e   X;   d  X;   a  UR                  U5        X;   a  X;  a  X(   Xh'   X;   d  M  X;  d  M  X(   XX'   M     [        UR                  5       UR                  5       -  5       Ho  nX;   a  M
  XX   nUR                  nXh   nUR                  n[        U5      [        U5      :H  nU(       a  X:X  d   SU SU S	U S
35       eUR                  U5        Mq     XVX4U4$ )Nthenelsezinitial value for `z` is of type z
, but the z block redefines it as zMismatched type for z between then block (z) and else block ())r   r  r  r   r   r   r   r   r   r'   appendr8   keys)r   r`   r   
then_block
else_block	then_defs	else_defsnamesr&   defs
block_name
type_equalthen_valthen_tyelse_valelse_tys                   r)   visit_then_else_blocks$CodeGenerator.visit_then_else_blocks  s?   11*=%%dii0\\557
OO((*		;;LL55jA!,,.DK DO))$++6,,.I99;J D&/%89f:M$N <!%dj!1T'-5H!HJ%$*//W]=O=O*O S-dV= P##-,.Edj\SSO %O  D$5T" T%:")-	 T%:")-	 $ 9>>+inn.>>?D} HmmG HmmGh4>9J'"4 .&tf,A' K##*)1..4 LL @ ZUBBr+   c                 b  ^^ [        U 5       nUu  pEU R                  R                  5       nU R                  R                  5       nU R                  R                  U5        U R                  R	                  UR
                  Xg5        U R                  X$Xg5      u  mmpgnU R                  R                  5       n	U R                  R                  U5        UR                  5       (       a   U 5       e[        U4S jU 5       5      n
U R                  R                  X5        U R                  R                  U5        UR                  5       (       a   U 5       e[        U4S jU 5       5      nU R                  R                  X5        [        U
5      [        U5      :X  d   e[        X5       H;  u  pUR                  5       nXR                  5       :X  d   eU	R                  U5        M=     S S S 5        U R                  R                  W	5        [        [        W
5      5       Vs/ s H  oR!                  U5      PM     nnW Vs/ s H  nTU   R"                  PM     nn[%        UU5      n[        UU5       H  u  nnU R'                  UU5        M     g ! , (       d  f       N= fs  snf s  snf )Nc              3   .   >#    U  H
  nTU   v   M     g 7frF   r   r   r&   r  s     r)   r   3CodeGenerator.visit_if_top_level.<locals>.<genexpr>       /RED	$E   c              3   .   >#    U  H
  nTU   v   M     g 7frF   r   r   r&   r  s     r)   r   r    r  r   )r   r   r  r  create_cond_branchhandler  r  rx   create_branchr{   r  get_typeadd_argumentr  r  rd   r'   r}   rs  )r   condr`   srr   ip_blockr  r  r  endif_blockthen_handleselse_handlesthen_helse_hr=   r?   res_handlesr&   rr   
new_values	new_valuer  r  s                        @@r)   visit_if_top_level CodeGenerator.visit_if_top_level  s-   d#r "G224J224JLL33H=LL++DKKP ++D:R @Iy*% ,,335KLL33J?!0022CzlC2//RE/RRLLL&&{ALL33J?!0022CzlC2//RE/RRLLL&&{A|$L(9999"%l"A__&__....((, #B/ $: 	11+>38\9J3KL3Kaq)3KL278%$4%%%8(e<
"5*5OD)NN4+  6E $#> M8s   GJ&J'J,
J$c                 p  ^^ [        U 5       nUu  pEU R                  5       u  pgU R                  R                  5       nUR                  (       a  U R                  R                  5       OS n	U R                  X$X5      u  mmpn
[        U4S jU
 5       5      nU R                  Xg5        U R                  R                  U Vs/ s H  oR                  5       PM     snUR                  S5      nUR                  UR                  5       5        U R                  R                  UR                  5       5        [        U
5      S:  a  U R                  R                  U5        UR                  (       d  UR!                  5       n	OU	R                  UR!                  5       5        U R                  R                  UR!                  5       5        [        U
5      S:  a0  [        U4S jU
 5       5      nU R                  R                  U5        S S S 5        [#        [        W5      5       Vs/ s H  nWR%                  U5      PM     nnW
 Vs/ s H  nTU   R&                  PM     nn[)        UU5      n[+        U
U5       H  u  nnU R-                  UU5        M     g s  snf ! , (       d  f       N= fs  snf s  snf )Nc              3   .   >#    U  H
  nTU   v   M     g 7frF   r   r  s     r)   r   -CodeGenerator.visit_if_scf.<locals>.<genexpr>   r  r   Tr   c              3   .   >#    U  H
  nTU   v   M     g 7frF   r   r"  s     r)   r   r7    s     3VPUIdOPUr   )r   ry  r   r  r   r  rx   r|  create_if_opr&  r$  merge_block_beforeget_then_blockr  r{   create_yield_opget_else_blockr  
get_resultr'   r}   r  rs  )r   r(  r`   r)  r   r-   rx  last_locr  r  r  r,  hif_opr-  r?   r0  r&   rr   r1  r2  r  r  s                        @@r)   visit_if_scfCodeGenerator.visit_if_scf  s   d#rJG<<>LB224J8<224J++D:R @Iy*% 0/RE/RRL--b;LL--\.R\zz|\.RTXT_T_aefE))%*>*>*@ALL33E4H4H4JK5zA~,,\:;;"113
--e.B.B.DELL33E4H4H4JK5zA~33VPU3VV,,\:- $0 5:#l:K4LM4Lqu''*4LM278%$4%%%8(e<
"5*5OD)NN4+  6# /S $#0 N8s+   B4JJ
D.J'J.J3J
J+c           	      
   U R                  UR                  5      n[        U5      (       Ga:  [        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      nU(       a5  U R&                  (       a  U R	                  US5      eU R)                  X!5        g U R+                  X!5        g [-        U5      n[        U5      [.        ;  aO  U R	                  US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  zCannot have `return` statements inside `while` or `for` statements in triton (note that this also applies to `return` statements that are inside functions transitively called from within `while`/`for` statements)O`if` conditionals can only accept values of type {{{}}}, not objects of type {}, c              3   8   #    U  H  oR                   v   M     g 7frF   r^   r   r-   s     r)   r   )CodeGenerator.visit_If.<locals>.<genexpr>2       !G6F**6F   )r   testrK   rT   rS  r'   rR   warningswarnr   unparser   rM   _unsplatr6  toint1r   r   rE  r3  rB  r   _condition_typesr  r6   r^   r   r   r  )r   r`   r(  contains_returnactive_blocks        r)   r   CodeGenerator.visit_If  s   zz$))$T""$T**''.mnnyy!!## Bkk$)),-.  }}--dmmX\-]778==DMM7BD3DKK@FFtLO>>++ TU U ''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   rF  rG  c              3   8   #    U  H  oR                   v   M     g 7frF   rI  rJ  s     r)   r   ,CodeGenerator.visit_IfExp.<locals>.<genexpr>f  rL  rM  )$r   rN  rK   rS  r   rT  r6  r   ry  r   r  r  r  r   r   r   r|  r'   r  to_irr9  r$  r:  r;  r  r<  r=  rM   r   r>  r   rU  rS  r  r6   r^   )r   r`   r(  rx  r?  r  r  r  r  rF  ret_type_irrA  s               r)   r   CodeGenerator.visit_IfExp8  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                     g rF   r   r   s     r)   
visit_PassCodeGenerator.visit_Passm  s    r+   c                    [        UR                  5      S:X  a  [        UR                  5      S:X  d  U R                  US5      eU R	                  UR
                  5      nU R	                  UR                  S   5      n[        U5      n[        U5      n[        UR                  S   5      [        R                  L a  [        XEL 5      $ [        UR                  S   5      [        R                  L a  [        XEL5      $ U R                  R                  [        UR                  S   5      5      nUc8  U R                  USR                  UR                  S   R                  5      5      eU R!                  XbU5      $ )Nr   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)r{   comparatorsopsrS  r   r  r   r'   r   Isr   IsNot_method_name_for_comp_opr  r  r^   r  )r   r`   r  r  	lhs_value	rhs_valuer  s          r)   visit_CompareCodeGenerator.visit_Comparep  s:   D$$%*s488}/A##D*]^^jj#jj))!,-(-	(-	&Y344		)Y7883377TXXa[8IJ##T[[\`\d\def\g\p\pqs s((3??r+   __eq____ne____lt____le____gt____ge__rg  c           
         U R                  UR                  5      nU R                  R                  [	        UR
                  5      5      nUc*  U R                  USUR
                  R                   S35      e[        U5      (       a  [        X#5      " U R                  S9$  [        X#5      " 5       $ ! [         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  rS  r^   rK   r   r6  AttributeErrorr   )r   r`   rt  ra   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__rs  
__invert__ru  c                 T   [        U5      (       d   SU S35       e[        U5      (       d   SU S35       e[        U5      [        U5      L d   SU S35       e[        U5      (       a@  UR                  UR                  :X  d%   SU SUR                   SUR                   S	35       eg g )
Nzcannot reassign constxpr z in the loopzcannot reasign constexpr zLoop carried variable z changed typezLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rI   r'   rK   )r   r&   loop_vallive_vals       r)   _verify_loop_carried_variable+CodeGenerator._verify_loop_carried_variable  s    ))Y-FtfL+YY)))Y-FtfL+YY)H~h/]3I$}1]]/$X..(--8==2P 	@$TF*<X]]O L%%-]]O 4?@	@P2P.r+   c                 8    U R                  UR                  5      $ rF   )r   context_exprr   s     r)   visit_withitemCodeGenerator.visit_withitem  s    zz$++,,r+   c                    [        UR                  5      S:X  d   eUR                  S   R                  nU R                  UR                  5      nU[
        R                  :X  aa  UR                   Vs/ s H  o@R                  U5      PM     nnU" USU R                  06   U R                  UR                  5        S S S 5        g U R                  UR                  5        g s  snf ! , (       d  f       g = f)Nr   r   _builder)r{   r  r  r   r   r   
async_taskrb   r   r  r   )r   r`   r2  withitemClassrd   rb   s         r)   
visit_WithCodeGenerator.visit_With  s    4::!###**Q-,,

7<<0H////6||<|JJsO|D<<t||<--dii8 =< ))$))4	 =<<s   2C! C&&
C4c                 Z	   [        U 5       nUu  p4U R                  5       u  pVU R                  R                  5       nU R                  R	                  U5        U R
                  R                  U5        U R                  UR                  5        U R
                  R                  5         U R                  nUR                  5         / n	/ n
U HF  nX;   d  M
  X   nX;   nU R                  XU5        U	R                  U5        U
R                  U5        MH     [        U
5      nU Vs/ s H  oR                  5       PM     nnU
 Vs/ s H  nUR                  PM     nnU R!                  XV5        U R                  R#                  UU5      nU R                  R%                  UR'                  5       U5      nU R                  R	                  U5        [)        [+        U5      5       Vs/ s H  nUR-                  U5      PM     nn[/        UU5      n[1        U	U5       H$  u  nnUU R2                  U'   UU R                  U'   M&     U R5                  UR6                  5      nU R                  R9                  U5        U R                  R;                  UR<                  U5        U R                  R%                  UR?                  5       U5      nU R                  R	                  U5        [)        [+        U5      5       Vs/ s H  nUR-                  U5      PM     nn[/        UU5      n[1        U	U5       H$  u  nnUU R2                  U'   UU R                  U'   M&     U R
                  R                  U5        U R                  UR                  5        U R
                  R                  5         U R                  n/ nU H  nX;   d  M
  X   RA                  U5        M     U R                  RC                  U5        S S S 5        [)        [+        W5      5       Vs/ s H  nWRE                  U5      PM     nn[/        UW5      n[1        W	U5       H$  u  nn U U R2                  U'   U U R                  U'   M&     URF                   H  n! S5       e   g s  snf s  snf s  snf s  snf ! , (       d  f       N= fs  snf )NzNot implemented)'r   ry  r   r  r  rE  r  r  r   popr   eraser  rx   r&  r'   r|  create_while_opcreate_block_with_parent
get_beforer  r{   rd   r}   r  r   r   rN  r  create_condition_opr$  	get_afterrv   r<  r>  r   r   r  r   )"r   r`   r)  r   r   rx  r?  dummy	loop_defsr  	init_argsr&   r}  r~  init_handlesr@  init_tysainit_fe_tyswhile_opbefore_blockr?   
block_argscondition_argsrj   r(  after_blockbody_handles	body_argsyieldsresult_handlesresult_valsnew_defr  s"                                     r)   visit_WhileCodeGenerator.visit_While  s   d#r$&!G<<>LB LL--/ELL55e<NN!!$'))$))4NN IKKM EI!?(H&}H66txP LL&$$X. " 0	:L.:;l

lH;+459a1669K5--b;||33HlKH<<@@ATATAVX`aLLL55lC7<S=N7OP7O!,**1-7OJP0[IN 7	c$'D!(+% 8 ::dii(DLL33LALL,,T[[*E,,??@R@R@TV^_K LL55kB8=c,>O8PQ8P1KOOA.8PLQ+L+FI 	2	c$'D!(+% 3 NN!!$'))$))4NN IF!?O//7 " LL((0A $F ;@L@Q:RS:RQ(--a0:RS).+F 4MD' 'DKK$+DOOD! 5 KKD+++5  Y <5 Q Re $#F TsX   CRAR#R<RRB
R"R=C9R6RB(R=2RR(R
R%c                    [        UR                  [        R                  5      (       d   eU R	                  UR
                  5      nU R	                  UR                  5      n[        U5      (       a  UR                  X0R                  S9$ X#   $ )Nr  )
rG   r   r   r  r   ro   slicerK   __getitem__r6  )r   r`   r  slicess       r)   visit_Subscript_Load"CodeGenerator.visit_Subscript_Load  si    $((CHH----jj$DJJ'S!!??6]]?CC{r+   c                 *   [        UR                  [        R                  5      (       d   eU R	                  UR
                  5      nU R	                  UR                  5      n[        U[        R                  5      (       d   eUR                  XB5        g rF   )
rG   r   r   r   r   ro   r  r   rW   __setitem__)r   r`   ro   r  r  s        r)   r  #CodeGenerator.visit_Subscript_Store  sd    $((CII....jj$DJJ'#x~~....&r+   c                 $    U R                  U5      $ rF   )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 rF   )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U[        R                  L ai  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OU[        L a  [9        U5      S:  a  US   O$T R                  [(        R:                  " S5      5      n[9        U5      S:  a  US   O'T R                  UR                  R                  S   5      n[9        U5      S:  a  US   O$T R                  [(        R:                  " S5      5      nO[=        S5      eSn[?        U5      (       a,  UR                  S:  a  [        UR                  * 5      nSnUUnnT R@                  RC                  U5      nT R@                  RC                  U5      nT R@                  RC                  U5      nURD                  RG                  5       (       a>  URD                  RG                  5       (       a  URD                  RG                  5       (       d3  [I        SURD                   S	URD                   S	URD                   S
35      eT R@                  RK                  URD                  URD                  5      nT R@                  RK                  UURD                  5      nURM                  T RN                  5      nURP                  [        RR                  RD                  RT                  RV                  :H  nURX                  nURX                  nURX                  nT RN                  R[                  UUU5      nT RN                  R[                  UUU5      nT RN                  R[                  UUU5      nT RN                  R]                  U5      nT R_                  UR                  R                   [        RR                  Ra                  UU5      5        [c        T 5       nUu  nnT Re                  5       u  nnT RN                  Rg                  5       nT RN                  Ri                  U5        T Rj                  Rm                  U5        T R#                  UR$                  5        T Rj                  Ro                  5         URq                  5         / n/ n/ nT Rr                   He  n U U;   d  M  T Rr                  U    n!UU    n"T Ru                  U U!U"5        URm                  U 5        URm                  U"5        URm                  U!5        Mg     T Rw                  UU5        [y        U5      n#U V$s/ s H  n$U$Rz                  PM     n%n$T RN                  R}                  UUUU#5      n&[        U
5      b+  U&R                  ST RN                  R                  U
5      5        [        U5      b+  U&R                  ST RN                  R                  U5      5        U(       a*  U&R                  ST RN                  R                  5       5        U(       a*  U&R                  ST RN                  R                  5       5        U(       a*  U&R                  ST RN                  R                  5       5        T Rj                  Rm                  U5        U&R                  S5      n'T RN                  Ri                  U'5        UR                  5       T l        0 T l9        [        [9        U#5      5       Vs/ s H  nU'R                  US-   5      PM     n(n[        U(U%5      n)[        UU)5       H  u  n n*T R_                  U U*5        M     T R#                  UR$                  5        T Rj                  Ro                  5         / nT Rr                   H[  n U U;   d  M  T Rr                  U    n+[        U+[        5      (       a  T R@                  RC                  U+5      n+URm                  U+5        M]     [9        U5      S:  a&  [y        U5      n,T RN                  R                  U,5        U'R                  5       n-U-R                  5       S:X  d   S5       eT RN                  Ri                  U'5        U&R                  5       nU(       a8  T RN                  R                  UU5      nT RN                  R                  UU5      nT R                  UR                  R                      RX                  R                  U5        T R_                  UR                  R                   [        RR                  Ra                  UU5      5        S S S 5        [        [9        W#5      5       Vs/ s H  nW&R                  U5      PM     n.n[        U.W%5      n/[        WU/5       H  u  n n*T R_                  U U*5        M     UR&                   H  n	 S5       e   g s  snf s  sn$f s  snf ! , (       d  f       N= fs  snf )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frF   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 (rG  r
  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializez7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Qr   iterr   rb   dictkeywordsr   static_ranger  startro   endstepr   r   r  r   r  r   r   r   r  r   
num_stagesloop_unroll_factordisallow_acc_multi_bufferflattenwarp_specializer{   NumRuntimeErrorrO   r6  r  rN   is_intr  integer_promote_implr\  r   int_signednessrM   
SIGNEDNESSSIGNEDr$  create_int_castr  rs  r   r   ry  r  r  rE  r  r  r  r   r  r|  rx   r'   create_for_opr   set_attrget_int32_attrget_unit_attrget_bodyr   rd   r}   r  rG   r<  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_withr>  )0r   r`   IteratorClassrd   	iter_argsiter_kwargsiteratorr  r?   r  r  r  r  r  r  lbubr  negative_stepiv_type
iv_ir_typeiv_is_signedivr)  r   r   rx  r?  blockr  r  r  r&   r}  r~  r  rp   r  for_opfor_op_bodyblock_handlesr  rj   localyield_handlesfor_op_regionr  result_valuess0   `                                               r)   	visit_ForCodeGenerator.visit_For  s   

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

4::&

4::&zz$))$~~eD11r+   c                 8    U R                  UR                  5      $ rF   )r   ro   r   s     r)   visit_IndexCodeGenerator.visit_Index  s    zz$**%%r+   c                 P    UR                   U R                  UR                  5      4$ rF   )rd   r   ro   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$ )Nr0  r  )r   rN  msgr   rM   device_assertr6  )r   r`   rN  r  s       r)   visit_AssertCodeGenerator.visit_Assert  sO    zz$))$&*hh&:djj"}}**4*NNr+   ra   c                    [         R                  " UR                  /UQ70 UD6nUR                   Vs/ s H  oBU   PM	     nn[	        U5       H\  u  pV[        U[        R                  [        [        [        [        45      (       d  M;  [        R                  R                  U5      X%'   M^     [        US 5      nU Vs0 s H  o[        X(5      _M     nn[        US 5      n	U	 Vs/ s H  n[        X(5      PM     n
n[!        [#        U5      U
 Vs/ s H  ofR$                  PM     snU5      nU R&                  R)                  U5      (       GdO  [+        U5      u  pU Vs/ s H`  nUb4  [        U[        [        [        R                  R                  45      (       a  [        R                  R                  OUR$                  PMb     nn[-        / X[/        5       5      n[1        U R2                  XR5                  5       U R&                  UXR6                  UR8                  XU R:                  R<                  U R:                  R>                  U R:                  R@                  S9n URC                  URE                  5       5        URV                  nUU R6                  U'   OU R6                  U   nU R&                  RY                  U5      n[[        U
5      n
U R:                  R]                  UU
5      nU[        R^                  :X  a  g [a        URc                  5       5       Vs/ s H  nURe                  U5      PM     nn[g        [i        UU/5      5      $ s  snf s  snf s  snf s  snf s  snf ! [F         aQ  n[H        RJ                  RL                  (       a  e [O        U RP                  RR                  U RT                  S 5      UeS nAff = fs  snf )Nc                     [        U5      $ rF   rO   r-   r  s     r)   r  0CodeGenerator.call_JitFunction.<locals>.<lambda>  s	    M!4Dr+   c                 "    [        U5      (       + $ rF   r  r  s     r)   r  r    s    q9I5Ir+   )
r>  r*  rB  r+  r[   r,  r8  r:  r;  r<  )5inspectgetcallargsra   r_   r\   rG   r   rN   r  r  r   r   rM   r   r   r   rB   r   r'   r>  has_functionr   r   r  r)  r2  get_capture_scoper?  r[   r   r:  r;  r<  r   parse	Exceptionr   re  front_end_debuggingr    r*  r]   rD  rF  get_functionrx   callr  r  get_num_resultsr>  nextr}   )r   ra   rb   r   r&   r?   rd   args_cstr  	args_pathargs_valfn_namer,  r8  r   r@  r   ecallee_ret_typesymbolcall_oprw   s                         r)   call_JitFunctionCodeGenerator.call_JitFunction  s   ""255:4:6:')||4|tT
|4oFA#sD+NOO"--11#6 & !'DEDLMHD+D77HM!$(IJ	>GHid%d1iHM"-H/MHSH/MxX{{''00$8$<!I    C ,/;*SFJCQYQ^Q^QdQdEe;g ;g''loltltu  
 $B	TVDI%dllI?S?S?U^b^i^irt4;LcLc/1{{i.2ll.B.BPTP\P\PhPh151H1H	JI
T
+ (00O/>D##G,"55g>O))'2'1,,##FH5hmm+278O8O8Q2RS2RQ7%%a(2RS'/1BCDDW 5
 NH/M
  T$$88&t{{tLRSS	T Ts=   M?M'MM!
 A'M&#M+ O	+
O5AOOc                   ^  [        T R                  UR                  5      5      n[        U[        5      (       d'  T R
                  R                  U5      nUb	  U" T U5      $ [        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        [        T R                  R                  USR                  U5      5      e[!        U 4S jUR"                   5       5      nUR$                   Vs/ s H  nT R                  U5      PM     nn['        [(        R*                  R-                  S U 5       5      5      n[        U[        5      (       a(  UR/                  SUR0                  5        UR2                  n[        U[4        5      (       a  [7        XU5        T R9                  X(U5      $ [;        US	5      (       a  [=        UR0                  5      (       d$  [>        R@                  RC                  U5      (       aq  S
T RD                  0n	[F        RH                  " U5      n
SU
RJ                  ;   a  T U	S'    U" U0 U	DUD6n[        U[L        5      (       a  [>        RL                  " U5      nU$ UT RV                  RY                  5       ;   a  [[        [         U5      nU" U0 UD6n[]        [_        U5      5      (       a  [a        US 5      $ U$ s  snf ! [N         aG  n[P        RR                  RT                  (       a  e [        T R                  R                  US 5      UeS nAff = f)N_must_use_resultF
_is_unusedz#The result of %s is not being used.rc  c              3   F   >#    U  H  nTR                  U5      v   M     g 7frF   r   r  s     r)   r   +CodeGenerator.visit_Call.<locals>.<genexpr>  s     Dm74::g&&mr   c              3   V   #    U  H  n[        U[        5      (       a  UOU/v   M!     g 7frF   )rG   rV   )r   r  s     r)   r   r      s(     1b]aXYz!T7J7J!QRPS2S]as   ')r   r%  r  rE  c                     U $ rF   r   )r  s    r)   r  *CodeGenerator.visit_Call.<locals>.<lambda>   s    Qr+   )1r   r   r   rG   r$   statically_implemented_functionsr  r   r   rQ  rp  r  r    r*  r]   r6   r  r  rb   rV   	itertoolschainfrom_iterableinsertr%  r&  r   re   r  ri   rI   r   rM   
is_builtinr6  r  	signature
parametersrW   r  r   re  r  rM  rt   maprk   r'   rs   )r   r`   ra   static_implementationmurerror_messagekwsrd   rb   extra_kwargssigrA   r  s   `            r)   r   CodeGenerator.visit_Call  s   !$**TYY"78"n--$($I$I$M$Mb$Q!$0,T488b,e474u55BS[[QUQZQZE[[\M#s##$$S)"4;;??D#((=:QRRDdmmDD+/9959C

395IOO111b]a1bbcb.))KK2;;'Bb+&&4T*((377B
##(8(E(E(--JbJbceJfJf'7L##B'Cs~~--1\*K$6,6#6c5))"..-C
 ''..00+T2D$#;I$s);T;T%c;7]Z]]C 6&  	K$$88 't{{dCJ	Ks   /L	46L 
MAMMc                 ,    [        UR                  5      $ rF   )r   ro   r   s     r)   visit_ConstantCodeGenerator.visit_Constant"  s    $$r+   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)U5      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_orlinenozeLogical operators 'and' and 'or' are deprecated for non-scalar tensors; please use '&' or '|' instead)categoryfilenamer:  sourcer   r   r   )_method_name_for_bool_opr  r'   r  rS  r  r^   rt   r   rK   r   rR   r   r8  rO  warn_explicitUserWarningr,  r   rQ  r  r{   r  r  )r   r`   r  nontrivial_valuessubnodero   bvr:  r  r  ress              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++KcBC$$S)	 #$) $%*** ##r+   r8  r9  r>  c                    U R                  UR                  5      n[        U5      (       a,  UR                  S:X  a  U R                  R                  US5      $ [        U[        5      (       a  UR                  S:w  a  UR                  n[        X!R                  5      n[        U5      (       a   [        U[        5      (       a  [        X#5      $ U$ )NT)r   r   ro   )r   ro   rK   r   r6  permuterG   r   r   rI   r   r$  )r   r`   r  r   s       r)   r   CodeGenerator.visit_Attribute[  s    jj$S!!dii3&6==((f55c9%%$))w*>))CsII&C  Zk%B%B!#,,r+   c                 d    SUR                   l        [        R                  R	                  X5        g r   )ro   r  r   r  r   r   s     r)   
visit_ExprCodeGenerator.visit_Exprg  s      $

%%d1r+   c                     g rF   r   r   s     r)   visit_NoneTypeCodeGenerator.visit_NoneTypek  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 noder0  )rV   rt   r\   rG   r   Constantrp  ro   FormattedValue
conversionr   rO   rS  r'   chrr  AssertionErrorr6   )r   r`   rt   r?   ro   conversion_code	evaluateds          r)   visit_JoinedStrCodeGenerator.visit_JoinedStrn  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 [         R                  " 5          [         R                  " S[        5        [         R                  " S[        5        U R
                  nU R                  R                  5       nXl        [        US5      (       as  [        US5      (       ab  U R                  R                  U R                  U R                  UR                  -   UR                  5        U R                  R                  5       n [        TU ]=  U5      nU(       a!  X l        U R                  R                  U5        UsS S S 5        $ ! [          a    e ["         aZ  n[$        R&                  R(                  (       a  e [!        U R*                  R,                  U R
                  [/        U5      5      S eS nAff = f! , (       d  f       g = f)Nignorer:  
col_offset)rO  catch_warningssimplefilterDeprecationWarningPendingDeprecationWarningrD  r   rv  ri   r9  r,  r8  r:  r^  superr   r    r  r   re  r  r*  r]   r9   )r   r`   	last_noder?  rA   r  	__class__s         r)   r   CodeGenerator.visit  sM   <$$& !!(,>?!!(,EFI||++-H MtX&&74+F+F$$T^^T__t{{5RTXTcTcd<<//1	ZgmD)  )$$X.5 '& $  Z$$88 't{{tAwOUYYZ '&s1   C'F6E)F6F3AF..F33F66
Gc                 j    U R                  USR                  [        U5      R                  5      5      e)Nzunsupported AST node type: {})rS  r  r'   r^   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   r0  z'<failed to evaluate assertion message: >)r{   rb   r  r  r   r   rG   r   NotImplementedErrorr  r9   r!   r*  r]   )r   r`   	arg_countpassedrR  r  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rF   r   r  s     r)   r   =CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>  s     #U}GDJJw$7$7}r   )r  r   rb   r   r   )r   r`   r&   ro   r0  rd   rb   	python_fns   `      r)   rA   *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   )rt  rA   s   ` r)   static_executorCodeGenerator.static_executor  s    	6CHH 	6 
r+   r   )r   r$  )r8  r   r2  rD  rH  r,  ra   rB  r?  r   rC  r*  r   r   r>  r[   r@  rF  rE  r6  rI  )NFNFNr   )r^   r   r   r   r   r   r   rp  r   r{   rV   r  r  r  rG   r   ri   rM  r   r'  updater   rM   device_printminimummaximumrS  rX  rG  r   r   r   rs  ry  r|  r  r   r  r   r  r   r  r  r  r  r   r   r   r  r  r  r  r  r   AddSubMultDivFloorDivModPowLShiftRShiftBitAndBitOrBitXorr  r
   operatorr  r3  rB  r   r   r`  rj  EqNotEqLtLtEGtGtErg  cmpoprw  USubUAddNotInvertru  unaryopr  r  r  r  r  r  r  r  r  r  r  r	   r  r  r  r   r5  BoolOprE  AndOrr>  boolopr   rL  rO  rZ  r   r   r   rn  rv  experimental.gluonttglstatic_assertstatic_printrN  r$  rV  r   r   __classcell__)r   r-   re  s   00@r)   r)  r)    sI    `e=>90+ 90?G~90$SM90z tUE3
GWM)MA 	


AM)tCH~  	(--,,-	  !	  ! L	1f&c &%
I0E*F &4 &"	2@<S 
3?j&' 2.$.
22$	.@ 	)n

L

L

I		8

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

#3S#89j
2$>c#(( t ,
 6##%:""OE$:1?51_S!_S!Q$d68SXXJO3L+L&M  _#)s   Nr)  c                    S /[        U R                  5      -  nUR                  R                  5        H-  u  pU R                  R	                  U5      n
[        U	5      Xz'   M/     [        / XqR                  UR                  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XEUS9nUR!                  U R#                  5       5        UR$                  nUUl        U$ s  snf )	Nr   )
namedtuplec                     [        U 5      S:H  $ rQ   )r{   )rp   s    r)   r  ast_to_ttir.<locals>.<lambda>  s    c!fkr+   SpecializationProxyr<   r*  T)
r   rB  r*  rC  r,  r8  r:  r;  r<  r>  )r{   r_   r*  r  indexr   r   r<   r   r   collectionsr  filterr)  r
  r9   r   r  r>  r2  )ra   r]   r2  r:  r;  r<  r>  r   rJ  rp   rc   r@  r,  r8  r  leavesr?   r<   r*  proxyr   rA   s                         r)   ast_to_ttirr    sB   R\\**I##%ll  #"1	 & B	==#))DI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[]I OOBHHJ


CCKJ Gs   4*E rF   )Gr   r   r  r$   rO  rh  r%  dataclassesr   rr   r   typingr   r   r   r   r	   r
   r   r   r   r0  r   r   _C.libtritonr   r   r   r   r   language.corer   r   r   runtime.jitr   r   runtimer   _utilsr   r   r   errorsr    r!   r"   r*   rB   r   rI   rK   rO   rT   rX   re   rk   rs   rx   ro   r}   r  r'   rU  r   r  r   r   r$  r)  r  r   r+   r)   <module>r     sn   
   	    !  T T T  ' 3 3 G G = ! H H a a	% % %! ! !US UT UNS NT N(S (T (XD*!5 "bhh "Y " #tDz* 3 3*T%COO T%n7 7t $  
sCOO sl%r+   