
    Ϧi                        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J	r	J
r
JrJrJrJr  SSKJr  SSKJr  SSKJrJrJr  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$  S r%S r&S\S\'4S jr(S\S\'4S jr)S\S\'4S jr*S\S\'4S jr+S\S\'4S jr,S r-\'\.\/" S5      1r0 " S S5      r1 " S S\ Rd                  5      r3 " S S\ Rd                  5      r4S r5S r6g)    N)AnyCallableDictOptionalTupleTypeUnion   )language)ir)	constexprtensor	str_to_ty)_unwrap_if_constexprnv_tma_desc_type_value)_normalize_tyget_jit_fn_file_line)JITFunction   )CompilationErrorCompileTimeAssertionFailureUnsupportedLanguageConstruct)
ModuleTypec                 d   U R                  5       (       a  S[        U R                  5      -   $ U R                  5       (       aP  [        R
                  R                  R                  nU R                  U:X  a  SOSnU[        U R                  5      -   $ U R                  5       (       a  [        U 5      $ U R                  5       (       aF  [        U R                  5      nSR                  [        [        U R                   5      5      nU SU S3$ U R#                  5       (       a  g[%        SU  35      e)NPiu_SVzUnsupported type )is_ptr	mangle_ty
element_tyis_intr   dtype
SIGNEDNESSSIGNEDint_signednessstrint_bitwidthis_floatingis_blockscalarjoinmapshapeis_void	TypeError)tyr(   prefixeltr1   s        ]/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/triton/compiler/code_generator.pyr#   r#      s    	yy{{Yr}}---	yy{{**11))V3BOO,,,	~~2w	{{}}		"S"((+,awa  	zz||
't,
--    c                    SR                  U Vs/ s H  n[        U5      PM     sn5      nSR                  [        U5       Vs/ s H  oU S[        X%   5       3PM     sn5      nUR	                  SS5      nUR	                  SS5      nUR	                  SS5      R	                  SS5      nU  S	U S	U 3nU$ s  snf s  snf )
Nr   c._d_'_sq_[]__)r/   r#   sortedreprreplace)namearg_tys	constantsr4   mangled_arg_namesr   mangled_constantsrets           r7   	mangle_fnrK   &   s    '!B'B)B-'!BCviGX!YGX!Cqil);(<"=GX!YZ)11#u=)11#v>)11#s;CCCMF"&'r*;)<
=CJ "C!Ys   B8B=oreturnc                 "    [        U [        5      $ N)
isinstancer   rL   s    r7   _is_triton_valuerR   2       a  r8   c                 "    [        U [        5      $ rO   )rP   r   rQ   s    r7   _is_triton_tensorrU   6   rS   r8   c                 "    [        U [        5      $ rO   )rP   r   rQ   s    r7   _is_constexprrW   :   s    a##r8   c                     [        U 5      =(       a?    U R                  R                  5       (       + =(       d    U R                  R                  S:H  $ )Nr   )rU   typer-   numelrQ   s    r7   _is_triton_scalarr[   >   s2    QP):%:%Oafflla>OPr8   c                 .    [        U [        [        45      $ rO   )rP   listtuplerQ   s    r7   _is_list_liker_   B   s    a$''r8   c                    UR                   (       an  [        U5       H^  u  p4[        U5      (       a  M  [        U5      (       a  M)  [	        UR
                  U SUR                   SUR                  U    SU 35      e   g g )Nz	Function z= is marked noinline, but was called with non-scalar argument :)noinline	enumeraterW   r[   r   src__name__	arg_names)nodefnargsidxargs        r7   _check_fn_argsrl   F   s    	{{!$HC %%.?.D.D2FFD},ijljvjvwzj{i||}  B  ~C  D  ( r8   c                   &    \ rS rSrS rS rS rSrg)enter_sub_regionS   c                     Xl         g rO   )	generator)selfrq   s     r7   __init__enter_sub_region.__init__U   s    "r8   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$ rO   )rq   lscopecopyliveins
local_defs	prev_defsbuilderget_insertion_blockinsert_blockget_insertion_pointinsert_point)rr   s    r7   	__enter__enter_sub_region.__enter__X   s    ~~,,11322779$&! NN22FFH NN22FFH||T....r8   c                     U R                   R                  R                  U R                  5        U R                  U R                   l        U R                  U R                   l        g rO   )rq   r{   restore_insertion_pointr   rx   rv   rz   ry   )rr   ri   kwargss      r7   __exit__enter_sub_region.__exit__a   s@    66t7H7HI $$(NN!r8   )rq   r}   r   rx   rz   N)re   
__module____qualname____firstlineno__rs   r   r   __static_attributes__ r8   r7   rn   rn   S   s    #/3r8   rn   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)ContainsReturnCheckerh   c                     Xl         g rO   gscope)rr   r   s     r7   rs   ContainsReturnChecker.__init__j   s    r8   rM   c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frO   visit).0srr   s     r7   	<genexpr>5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>n   s     /$Q4::a==$   !)any)rr   bodys   ` r7   _visit_stmts"ContainsReturnChecker._visit_stmtsm   s    /$///r8   c                     [        U[        5      (       aE  UR                  (       d4  UR                  5       n[	        U R
                  5      R                  U5      $ gNF)rP   r   rb   parser   r   r   )rr   rh   fn_nodes      r7   _visit_function%ContainsReturnChecker._visit_functionp   s=    b+&&r{{hhjG(5;;GDDr8   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_fieldsrP   r]   ASTr   )rr   rg   rJ   r   valueitems         r7   generic_visit#ContainsReturnChecker.generic_visitw   s    -HA%&&!D!$00!5TZZ%5 " E377++.TZZ. . 
r8   rg   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   )
rP   r   r   Nameidr   getattrattrr   r   )rr   rg   r   rh   s       r7   visit_Attribute%ContainsReturnChecker.visit_Attribute   sx     djj#((++zz}}+DJJMM2UII.++B//zz$**%%r8   c                     [        UR                  5      [        R                  L a  gUR                  U R
                  ;   a*  U R
                  UR                     nU R                  U5      $ gr   )rY   ctxr   Storer   r   r   )rr   rg   rh   s      r7   
visit_Name ContainsReturnChecker.visit_Name   sO    >SYY&77dkk!TWW%B''++r8   c                     g)NTr   rr   rg   s     r7   visit_Return"ContainsReturnChecker.visit_Return       r8   c                     gr   r   r   s     r7   visit_Assign"ContainsReturnChecker.visit_Assign        r8   c                     gr   r   r   s     r7   visit_AugAssign%ContainsReturnChecker.visit_AugAssign   r   r8   c                 8    U R                  UR                  5      $ rO   r   r   r   s     r7   visit_Module"ContainsReturnChecker.visit_Module         ++r8   c                 8    U R                  UR                  5      $ rO   r   r   s     r7   visit_FunctionDef'ContainsReturnChecker.visit_FunctionDef   r   r8   c                     U R                  UR                  5      nUR                  (       a$  U=(       d    U R                  UR                  5      nU$ rO   )r   r   orelse)rr   rg   rJ   s      r7   visit_IfContainsReturnChecker.visit_If   s=     		*;;7**4;;7C
r8   c                 |    U R                  UR                  5      =(       d    U R                  UR                  5      $ rO   )r   r   r   r   s     r7   visit_IfExp!ContainsReturnChecker.visit_IfExp   s'    zz$))$?

4;;(??r8   c                 8    U R                  UR                  5      $ rO   )r   funcr   s     r7   
visit_Call ContainsReturnChecker.visit_Call   s    zz$))$$r8   r   N)re   r   r   r   rs   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   r   r   r8   r7   r   r   h   s   0D 0T 	T 	&CMM &d &sxx D     
CMM d 
, , ,,coo ,$ ,SVV  @		 @d @%sxx %D %r8   r   c                     ^ \ rS rSr%   SeS\S\\   S\\   4S jjr\	\
\\\\\4 V Vs0 s H  oR                   U_M     snn r\\\4   \S'   \R'                  S\R*                  R,                  4S	\R.                  4S
\R0                  445        S rS rS rS\S\\\4   SS4S jrS r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S  r.S! r/S" r0S# r1\2Rf                  S$\2Rh                  S%\2Rj                  S&\2Rl                  S'\2Rn                  S(\2Rp                  S)\2Rr                  S*\2Rt                  S+\2Rv                  S,\2Rx                  S-\2Rz                  S.\2R|                  S/0r?\\@\2R                     \4   \S0'   S1 rBS2 rCS3 rDS4 rES5 rFS6 rGS7 rH\2R                  S8\2R                  S9\2R                  S:\2R                  S;\2R                  S<\2R                  S=0rO\\@\2R                     \4   \S>'   S? rQ\2R                  S@\2R                  SA\2R                  SB\2R                  SC0rV\\@\2R                     \4   \SD'   SE rXSF rYSG rZSH r[SI r\SJ r]SK r^S\_\\4   4SL jr`S\4SM jraSN\4SO jrbSP rcSQ rdSR\2R                  4SS jrf\2R                  ST\2R                  SU0ri\\@\2R                     \4   \SV'   \kR                  SW:  a	  SX rmSY rnSZ roS[ rpS\ rqS] rrS^ rsU4S_ jrtS` ruSR\2R                  SS4Sa jrwSb rx\R*                  R                  \w\R*                  R                  \x" \{5      \\x" \5      \	\x" \	5      0r|\\}\~\2R                  /\4   4   \Sc'   SdrU=r$ s  snn f )fCodeGenerator   Njit_fnfunction_types	file_namec                    Xl         [        R                  " U5      U l        Xl        US-
  U l        U R                  R                  UUS5        XR                  l        XR                  l        U
c  0 OU
U R                  l        Uc  U R                  R                  5       OUU l
        Uc  0 OUU l        X l        0 U l        UR                  5        H  u  nn[        U[         5      (       a+  U
R#                  UR$                  U5      U R                  U'   MF  ['        USS5      nUU
;   a(  ['        U
U   UR$                  5      U R                  U'   M  UU R                  U'   M     0 U l        X@l        XPl        Xpl        X`l        Xl        S U l        Xl        / U l        S U l        0 U l        U R?                  5       U l         S U l!        SU l"        g )Nr   r   r    F)#contextr   r{   r   
begin_lineset_locoptionscodegen_fns
module_mapcreate_modulemodulefunction_ret_types	prototyper   itemsrP   r   getre   r   rv   
attributesrG   r   function_name	is_kernelcur_noderb   	scf_stackret_typery   _define_name_lookupdereference_namerh   visiting_arg_default_value)rr   r   r   r   r   rG   r   r   r   r   r   r   r   r   rb   r   r   kvmodule_names                       r7   rs   CodeGenerator.__init__   s    zz'*"$q.Y
A6& $/ (2(:"
6<ndll002&(6(>"N"LLNDAq!Z((!+

A!>A!!\26Kj(!(K)@!**!MA!"A # $"*"  .06:6N6N6P +0'r8   builtin_namespaceprintminmaxc                 B    [        U R                  R                  X5      $ rO   )r   r   rd   )rr   rg   messages      r7   _unsupportedCodeGenerator._unsupported   s    +DKKOOTKKr8   c                     [        5       nU R                  R                  X5      nX2L a  g[        U5      (       a  gU R                  R                  S0 5      R                  U5      =n(       a  [	        U5      S:H  $ g)NFT__annotations__r   )objectr   r   rW   r   )rr   rE   absent_markervalas        r7   _is_constexpr_global"CodeGenerator._is_constexpr_global   sk    kkood2 126::4@@1@ #{22r8   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$ )NrE   c                 :   > TR                   R                  X5      $ rO   )rv   r   )rE   absentrr   s     r7   local_lookup7CodeGenerator._define_name_lookup.<locals>.local_lookup  s    ;;??400r8   c                   > TR                   R                  X5      n[        X!L U TR                  ;   [	        U5      [
        L [        U[        5      [        USS5      [        USS5      R                  S5      [        U[        R                  5      TR                  U 5      TR                  [        R                  R                  SS5      S:H  /
5      (       a  U$ [!        ["        R$                  " S	U  S
35      R'                  SS5      5      e)N__triton_builtin__Fr   r   ztriton.language"TRITON_ALLOW_NON_CONSTEXPR_GLOBALS01z.                Cannot access global variable a   from within @jit'ed
                function. Triton kernels can only access global variables that
                are annotated as constexpr (`x: triton.language.constexpr = 42`
                or `x = triton.language.constexpr(42)`).  Alternatively, set the
                envvar TRITON_ALLOW_NON_CONSTEXPR_GLOBALS=1, but we do not
                promise to support this forever.
 )r   r   r   r  rY   r   rP   r   r   
startswithr   r&   r  r   osenviron	NameErrortextwrapdedentrD   )rE   r  r  rr   s      r7   global_lookup8CodeGenerator._define_name_lookup.<locals>.global_lookup  s    ++//$/C M44+A+A#AI+sK0C!5u=Cr2==>OPsHNN3--d3 33JJNN#GMQTT   
 %//3f 51!4 5 6=WT35GI Ir8   rM   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)r  r   r#  )rE   r  lookup_functionr   r  r&  r  rr   s       r7   name_lookup6CodeGenerator._define_name_lookup.<locals>.name_lookup1  sO    "F#/@V@V@Z@Z#Z'5& L $[ tfO455r8   )r*   r  r   )rr   r*  r  r&  r  s   ` @@@r7   r   !CodeGenerator._define_name_lookup  sF    	1s 	1	I 	I: 	6c 	6c 	6 	6 r8   rE   r   rM   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)rv   ry   )rr   rE   r   s      r7   	set_valueCodeGenerator.set_value;  s     "D %r8   c                 p    U R                   R                  5       nU R                   R                  5       nX!4$ rO   )r{   get_locr~   )rr   locips      r7   _get_insertion_point_and_loc*CodeGenerator._get_insertion_point_and_locD  s/     ll""$\\--/wr8   c                 p    U R                   R                  U5        U R                   R                  U5        g rO   )r{   r   r   )rr   r3  r2  s      r7   _set_insertion_point_and_loc*CodeGenerator._set_insertion_point_and_locL  s&    ,,R0S!r8   c                     [        U5      (       d  U/nU H5  nU R                  U5        [        U[        R                  5      (       d  M5    g    g rO   )r_   r   rP   r   r   )rr   stmtsstmts      r7   visit_compound_statement&CodeGenerator.visit_compound_statementS  s@    U##GEDJJt $

++ r8   c                 B    [         R                  R                  X5        g rO   r   NodeVisitorr   r   s     r7   r   CodeGenerator.visit_Module_      %%d1r8   c                     U R                  UR                  5      nUb   eUR                   Vs/ s H  o0R                  U5      PM     nnU$ s  snf rO   )r   r   elts)rr   rg   r   r6   rD  s        r7   
visit_ListCodeGenerator.visit_Listb  sF    jj"{{+/9959C

395 6s   Ac                    U R                  UR                  5      nUc-  U R                  R                  / 5        [        R
                  nGO[        U[        5      (       a  U Vs/ s H,  n[        R                  R                  X@R                  5      PM.     nnU Vs/ s H  oDR                  PM     nnU R                  R                  U Vs/ s H  oDR                  PM     sn5        [        U5      nO[[        R                  R                  X R                  5      nU R                  R                  UR                  /5        UR                  nU R                  c  X0l        O+U R                  U:w  a  [        SU R                   SU 35      eU R                  R                  5       nU R                  R                  U5        g s  snf s  snf s  snf )NzInconsistent return types:  and )r   r   r{   rJ   r   voidrP   r^   semantic	to_tensorrY   handler   r3   create_blockset_insertion_point_to_end)	rr   rg   	ret_valueret_tyr  
ret_values	ret_typesrJ   post_ret_blocks	            r7   r   CodeGenerator.visit_Returni  sU   JJtzz*	LLR ]]F	5))PYZPY1(++55aFPYJZ)34AI4LL
;
1hh
;<9%F##--iFCLLcjj\*XXF== "M]]f$9$--fXVWW 224//?# [4;s   %3GGG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"                  U R$                  U R&                  R)                  U R                  5      XR*                  5      U l        U R"                  R-                  U R                  5        U R                  R/                  5       n/ nSn[1        [3        U5      5       GH:  nX@R4                  ;   aJ  U R4                  U   n[7        U5      (       d  [9        U R4                  U   5      nUR;                  U5        M]  X@R<                  ;   a5  U R<                  U    H"  u  nnU R                  R?                  XU5        M$     [A        U R&                  RB                  U   [D        5      (       a  U R                  R?                  USS5        UR;                  [G        U R                  R                  U5      U R&                  RB                  U   5      5        US-  nGM=     U R                  RI                  5       n[K        X-5       H  u  nnU RM                  UU5        M     U R                  RO                  U5        U RQ                  URR                  5        U R                  RI                  5       RU                  5       (       a   eU RV                  b  U RV                  [X        RZ                  :X  a2  [X        RZ                  U l+        U R                  R]                  / 5        GO[A        U RV                  [^        5      (       a  [a        U RV                  5      OU RV                  /U R&                  l1        U R                  Re                  U R&                  R)                  U R                  5      5        U R                  R]                  U R&                  Rb                   Vs/ s HF  nU RV                  c  M  U R                  Rg                  UR)                  U R                  5      5      PMH     sn5        U R                  Ri                  5         U(       a  U R                  Rk                  U5        g g ! SU l        f = fs  snf )Nz,nested function definition is not supported.r   r   r   targetsr   )targetr   
annotationTFpublicprivater   ztt.nv_tma_desc)6r   ri   rh   r
  rc   defaultsr[  rk   r   r   r   r   	AnnAssignr   r   r{   get_or_insert_functionr   r   r   to_irrb   	push_backadd_entry_blockrangelenrG   rW   r   appendr   set_arg_attrrP   param_typesr   r   r|   zipr.  set_insertion_point_to_startr<  r   has_terminatorr   r   rI  rJ   r^   r]   rR  
reset_typecreate_poisonfinalizerN  )rr   rg   rf   kwarg_namesr   default_valuearg_noder[  rE   	st_target	init_node
visibilityentry
arg_valuesrj   cstr   	insert_ptarg_name	arg_valuer4   s                        r7   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
,,55dkk4CUCU6:nn6J6J4<<6XZdfsfsudgg&'')
s9~&ANN"nnQ'$S))#DNN1$56C!!#&''+q'9e,,S> (: dnn88=?OPPGG((.>B!!&c):DNN<V<VWZ<["\]q# '& LL446	#&y#=HiNN8Y/ $>11%8%%dii0 <<335DDFFFF== DMMX]]$B$MMDMLLR >HX]>^>^tDMM':eiererdsDNN$GGt~~33DLLABLL..222B== C**288DLL+AB2 
 	LL33I> g 38/Xs   8+V;V8V	Vc                     / nUR                    H  nX R                  U5      /-  nM     U R                  UR                  5      nX$4$ rO   )ri   r   kwarg)rr   rg   rf   rk   ro  s        r7   visit_argumentsCodeGenerator.visit_arguments  sC    	99C**S/**I jj,%%r8   c                 X    [         R                  R                  X5        UR                  $ rO   )r   r@  r   rk   r   s     r7   	visit_argCodeGenerator.visit_arg  s    %%d1xxr8   c                    U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      nU[        :X  aU  X0R
                  ;   a  [        U S35      e[        U5      (       d  [	        U5      nX@R
                  U'   U R
                  U   $ U R                  U5      $ )Nz4 is already defined. constexpr cannot be reassigned.)	r   r[  rZ  r   r   rv   
ValueErrorrW   r   )rr   rg   r[  rZ  r   s        r7   visit_AnnAssignCodeGenerator.visit_AnnAssign  s    ZZ0
DKK(

4::&"$ F8 ,D "E F F ''!%("'KK;;v&&  &&r8   c                    / n[        U[        R                  5      (       a  X R                  UR                  5      /-  nO'UR
                   H  nX R                  U5      /-  nM     [        U5      S:  a  U R                  US5      eUS   nU R                  UR                  5      n[        U5      (       d  U/n[        U5      (       d  U/n[        R                  4n[        XE5       Hm  u  px[        U5      nUbI  [        U5      (       d9  [        X5      (       d)  [        R                  R!                  XR"                  5      nU R%                  Xx5        Mo     g )Nr   z2simultaneous multiple assignment is not supported.r   )rP   r   r_  r   rZ  rY  re  r
  r   r_   r   r&   ri  r   rR   rJ  rK  r{   r.  )	rr   rg   _namesrZ  namesvaluesnative_nontensor_typesrE   r   s	            r7   r   CodeGenerator.visit_Assign  s   dCMM**zz$++.//F,,::f-.. 'v;?##D*^__q	DJJ'U##GEV$$XF"*..!3u-KD(/E #E**e<< ))33E<<HNN4' .r8   c                 X   UR                   R                  n[        R                  " U[        R                  " 5       S9n[        R
                  " X1R                  UR                  5      n[        R                  " UR                   /US9nU R                  U5        U R                  U5      $ )NrW  rX  )rZ  r   r   r   LoadBinOpopr   r   r   r   )rr   rg   rE   lhsrhsassigns         r7   r   CodeGenerator.visit_AugAssign  sp    {{~~hh$CHHJ/iiWWdjj1T[[M=

6$$T**r8   c                     [        UR                  5      [        R                  L a  UR                  $ U R                  UR                  5      $ rO   )rY   r   r   r   r   r   r   s     r7   r   CodeGenerator.visit_Name	  s4    >SYY&77N$$TWW--r8   c                 B    [         R                  R                  X5        g rO   r?  r   s     r7   visit_StoreCodeGenerator.visit_Store  rB  r8   c                 B    [         R                  R                  X5        g rO   r?  r   s     r7   
visit_LoadCodeGenerator.visit_Load  rB  r8   c                 v    UR                    Vs/ s H  o R                  U5      PM     nn[        U5      $ s  snf rO   )rD  r   r^   )rr   rg   xri   s       r7   visit_TupleCodeGenerator.visit_Tuple  s/    '+yy1y!

1y1T{ 2s   6c                     [        U5      (       a  [        X!5      " X0R                  S9$ [        U5      (       a1  [        R                  " SSU5      n[        X45      " X R                  S9$ [        X!5      " U5      $ )N_builderz__(.*)__z__r\1__)rU   r   r{   resub)rr   method_namer  r  reverse_method_names        r7   _apply_binary_method"CodeGenerator._apply_binary_method  sc    S!!3,S<<HHS!!"$&&j+"N34S<<PPs(--r8   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   rY   r  r
  formatre   r  rr   rg   r  r  r  s        r7   visit_BinOpCodeGenerator.visit_BinOp!  s    jj#jj$2266tDGG}E##D$^$e$efjfmfmfvfv$wy y((3??r8   __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/ n/ n	U GH#  n
US4US44 HU  u  pX;   d  M  X   R                  X*   R                  :X  a  M,   SU
 SX*   R                   SU SX   R                   35       e   X;   d  X;   a  UR                  U
5        UR                  X;   a  XZ   R                  OXj   R                  5        U	R                  U
U;   a  XZ   R                  R                  5       OXj   R                  R                  5       5        X;   a  X;  a  X*   Xj'   X;   d  GM  X;  d  GM  X*   XZ'   GM&     [        UR                  5       UR                  5       -  5       H  n
X;   a  M
  XZ   R                  nXj   R                  nX:X  d   SU
 SU S	U S
35       eUR                  U
5        UR                  U5        U	R                  XZ   R                  R                  5       5        M     XVX4XxU	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{   rj  r<  r   r|   ry   rw   r   rv   rY   rf  rL  get_typerB   keys)rr   rg   rx   
then_block
else_block	then_defs	else_defsr  rR  ir_ret_typesrE   defs
block_namethen_tyelse_tys                  r7   visit_then_else_blocks$CodeGenerator.visit_then_else_blocks9  s   11*=%%dii0\\557
OO((*		;;LL55jA!,,.DK DO))$++6,,.I99;J 	D&/%89f:M$N <:??gm.@.@@ X-dV=ASAS@T U##-,.EdjooEVXX@ %O
  D$5T"  9J!5!5PYP_PdPde##$-J.IO$:$:$C$C$E3<?3I3I3R3R3TV  T%:")-	 T%:")-	# ( 9>>+inn.>>?D}o**Go**G% .&tf,A' K##*)1..% LLW%	 6 6 ? ? AB @ ZU|[[r8   c           	         [        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  ppgpnU R                  R                  5       nU R                  R                  U5        UR                  5       (       a   U 5       eU R                  R                  X Vs/ s H  oU   R
                  PM     sn5        U R                  R                  U5        UR                  5       (       a   U 5       eU R                  R                  X Vs/ s H  oU   R
                  PM     sn5        U H  nUR                  U5        M     S S S 5        U R                  R                  W5        [        W
5       HJ  u  nn[        R                  R                  UR                  U5      WU   5      nU R!                  UU5        ML     g s  snf s  snf ! , (       d  f       N= frO   )rn   r{   rM  rN  create_cond_branchrL  r  rk  create_branchadd_argumentrj  rc   r   corer   rk   r.  )rr   condrg   srrx   ip_blockr  r  r  r  r  rR  r  endif_blocknr4   r   rE   
new_tensors                      r7   visit_if_top_level CodeGenerator.visit_if_top_levelp  s   d#r "G224J224JLL33H=LL++DKKP ++D:R YI*%L ,,335KLL33J?!0022CzlC2LL&&{RW4XRWQq\5H5HRW4XYLL33J?!0022CzlC2LL&&{RW4XRWQq\5H5HRW4XY"((, #) $0 	11+> 'GAt!--kooa.@)A,OJNN4, ( 5Y 5Y' $#s+   C<H8H. AH88H3!H8.
H88
Ic           	      L   [        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  pppnU R                  Xg5        U R                  R                  U Vs/ s H  oR                  U R                  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:  a9  U R                  R                  U Vs/ s H  nU
U   R                  PM     sn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:  a9  U R                  R                  U Vs/ s H  nUU   R                  PM     sn5        S S S 5        [!        W5       HJ  u  nn["        R$                  R'                  WR)                  U5      WU   5      nU R+                  UU5        ML     g s  snf s  snf s  snf ! , (       d  f       Nw= f)NTr   )rn   r4  r{   rM  r   r  r7  create_if_opra  rL  merge_block_beforeget_then_blockrN  re  create_yield_opget_else_blockrc   r   r  r   
get_resultr.  )rr   r  rg   r  rx   r   r3  last_locr  r  r  r  r  rR  r4   if_opr  r   rE   r  s                       r7   visit_if_scfCodeGenerator.visit_if_scf  s   d#rJG<<>LB224J8<224J++D:R NI*%A --b;LL--PY.ZPY"xx/EPY.Z\`\g\gimnE))%*>*>*@ALL33E4H4H4JK5zA~,,5-Q5ail.A.A5-QR;;"113
--e.B.B.DELL33E4H4H4JK5zA~,,5-Q5ail.A.A5-QR) $, !'GAt!--e.>.>q.A9Q<PJNN4, ( /[ .R .R) $#s8   BJ+$J
BJJ
+BJJ
JJ
J#c           	         U R                  UR                  5      n[        U5      (       a  UR                  [        R
                  U R                  S9n[        U R                  5      R                  U5      nU(       a5  U R                  (       a  U R                  US5      eU R                  X!5        g U R                  X!5        g [        U5      n[        U5      [        ;  aO  U R                  USR!                  SR#                  S [         5       5      [        U5      R$                  5      5      eU(       a  UR&                  OUR(                  nU R+                  U5        g )Nr  zCannot have `return` statements inside `while` or `for` statements in triton (note that this also applies to `return` statements that are inside functions transitively called from within `while`/`for` statements)O`if` conditionals can only accept values of type {{{}}}, not objects of type {}, c              3   8   #    U  H  oR                   v   M     g 7frO   re   r   r   s     r7   r   )CodeGenerator.visit_If.<locals>.<genexpr>       !G6F**6F   )r   testrU   tor   int1r{   r   r   r   r
  r  r  r   rY   _condition_typesr  r/   re   r   r   r<  )rr   rg   r  contains_returnactive_blocks        r7   r   CodeGenerator.visit_If  s   zz$))$T""778==4<<7@D3DKK@FFtLO>>++ TU U ''3!!$-'-DDz!11''krr		!G6F!GGT
++-. .
 )-499$++L)),7r8   c           	         U R                  UR                  5      n[        U5      (       Gan  UR                  [        R
                  U R                  S9n[        U 5         U R                  5       u  p4U R                  R                  5       nU R                  R                  U5        [        R                  R                  U R                  UR                  5      U R                  5      nU R                  R                  5       nU R                  R                  5       nU R                  R                  U5        [        R                  R                  U R                  UR                  5      U R                  5      nU R                  R                  5       nU R!                  X45        UR"                  UR"                  :X  d!   SUR"                   SUR"                   35       eUR"                  n	U	[        R$                  :w  a  U	R'                  U R                  5      /O/ n
U R                  R)                  XR*                  S5      nUR-                  UR/                  5       5        U
(       aO  U R                  R1                  UR/                  5       5        U R                  R3                  UR*                  /5        U R                  R1                  UR/                  5       5        UR-                  UR5                  5       5        U
(       aO  U R                  R1                  UR5                  5       5        U R                  R3                  UR*                  /5        U
(       a/  [        R6                  R9                  UR;                  S5      U	5      OS sS S S 5        $ [=        U5      n[#        U5      [>        ;  aO  U RA                  USRC                  SRE                  S [>         5       5      [#        U5      RF                  5      5      eU(       a  U R                  UR                  5      $ U R                  UR                  5      $ ! , (       d  f       g = f)	Nr  zATernary expression with dynamic condition has inconsistent types rH  Tr   r  r  c              3   8   #    U  H  oR                   v   M     g 7frO   r  r  s     r7   r   ,CodeGenerator.visit_IfExp.<locals>.<genexpr>  r  r  )$r   r  rU   r  r   r  r{   rn   r4  rM  rj  rJ  rK  r   r|   r   r7  rY   rI  ra  r  rL  r  r  rN  r  r  r  r   r  r   r  r
  r  r/   re   )rr   rg   r  r3  r  r  then_valr  else_valr   ret_type_irr  s               r7   r   CodeGenerator.visit_IfExp  s!   zz$))$T""778==4<<7@D!$'#@@B!\\668
99*E#,,66tzz$))7Ldll[!\\==?
!\\668
99*E $,,66tzz$++7NPTP\P\]!\\==?
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    L1Q
Qc                     g rO   r   r   s     r7   
visit_PassCodeGenerator.visit_Pass  s    r8   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.)re  comparatorsopsr
  r   r  r   rY   r   Isr   IsNot_method_name_for_comp_opr   r  re   r  )rr   rg   r  r  	lhs_value	rhs_valuer  s          r7   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((3??r8   __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       $ ! [         a,    U R                  USU S[	        U5      R                   35      ef = f)NzAST unary operator 'z!' is not (currently) implemented.r  z)' is not (currently) implemented on type )r   operand_method_name_for_unary_opr   rY   r  r
  re   rU   r   r{   AttributeError)rr   rg   r  rh   s       r7   visit_UnaryOpCodeGenerator.visit_UnaryOp  s    **T\\*++//TWW>:##D,@AQAQ@RRs*tuuW%%7'>>	t7')) 	t##,RD0YZ^_fZgZpZpYqrt t	ts   !B1 16C'__neg____pos____not__
__invert__r  c                 V   [        U5      (       d   SU S35       e[        U5      (       d   SU S35       e[        U5      [        U5      :X  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.)rR   rY   rU   )rr   rE   loop_vallive_vals       r7   _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.r8   c           
      
   [        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
/ nU Ha  nX;   d  M
  X   nX<   nU R                  XU5        U	R                  U5        U
R                  UR                  5        UR                  U5        Mc     U R                  XV5        U R                  R                  U
 Vs/ s H  oR!                  U R                  5      PM     snU Vs/ s H  nUR"                  PM     sn5      nU R                  R%                  UR'                  5       U
 Vs/ s H  oR!                  U R                  5      PM     sn5      nU R                  R	                  U5        [)        U	5       Ha  u  nn[*        R,                  R/                  UR1                  U5      U
U   5      U R2                  U'   U R2                  U   U R                  U'   Mc     U R5                  UR6                  5      nU R                  R9                  U5        U R                  R;                  UR"                  [=        [?        U5      5       Vs/ s H  nUR1                  U5      PM     sn5        U R                  R%                  URA                  5       U
 Vs/ s H  oR!                  U R                  5      PM     sn5      nU R                  R	                  U5        [)        U	5       Ha  u  nn[*        R,                  R/                  UR1                  U5      U
U   5      U R2                  U'   U R2                  U   U R                  U'   Mc     U R
                  R                  U5        U R                  UR                  5        U R
                  R                  5         U R                  n/ nU H  nX;   d  M
  UR                  X   5        M     U R                  RC                  U Vs/ s H  nUR"                  PM     sn5        S S S 5        [)        W	5       HV  u  nn[*        R,                  R/                  WRE                  U5      W
U   5      nUU R2                  U'   UU R                  U'   MX     URF                   H  n S5       e   g s  snf s  snf s  snf s  snf s  snf s  snf ! , (       d  f       N= f)NzNot implemented)'rn   r4  r{   rM  rj  r   rf  r<  r   popry   eraser  rY   r7  create_while_opra  rL  create_block_with_parent
get_beforerc   r   r  r   rk   rv   r   r  rN  create_condition_oprd  re  	get_afterr  r  r   r   r@  r   )rr   rg   r  rx   r}   r3  r  dummy	loop_defsr  rR  	init_argsrE   r  r  r4   rk   while_opbefore_blockr   r  after_blockyieldsynew_defr;  s                             r7   visit_WhileCodeGenerator.visit_While-  sE   d#r$&!G<<>LB LL--/ELL55e<NN!!$'))$))4NN IKKM EII!?(H&}H66txP LL&$$X]]3$$X. " --b;||33V_4`V_PRXXdll5KV_4`KT4U9CSZZ94UWH  <<@@ATATAVclAmcl]_((4<<BXclAmoLLL55lC$U+4$,MM$8$89I9I!9LiXYl$[D!(,D(9% , ::dii(DLL33LALL,,T[[X]^abk^lXm:nXmST<;K;KA;NXm:no,,??@R@R@Tbk@lbk\^$,,AWbk@lnK LL55kB$U+4$,MM$8$89KYWX\$ZD!(,D(9% , NN!!$'))$))4NN IF!?MM)/2 " LL((F)CFq!((F)CD{ $@ !'GAtmm**8+>+>q+A9Q<PG 'DKK$+DOOD! (
 KKD+++5  M 5a4U Bn ;o Am *D{ $#si   CUBU$T)
?UT./U
$T3.C>U,T8/U6$T=C8U0UU
U)U
Uc                    UR                   R                  R                  S:X  d   eU R                  UR                  5      nU R                  UR
                  5      n[        U5      (       a  UR                  X0R                  S9$ X#   $ )Nr  r  )	r   	__class__re   r   r   slicerU   __getitem__r{   )rr   rg   r  slicess       r7   visit_SubscriptCodeGenerator.visit_Subscriptw  sl    xx!!**f444jj$DJJ'S!!??6LL?AA{r8   c                 b    UR                    Vs/ s H  o R                  U5      PM     sn$ s  snf rO   )dimsr   )rr   rg   dims      r7   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U[        R                  L aE  U" U0 UD6nUR                  nUR                  nUR                  nUR.                  n
UR0                  nOU[        L a  [3        U5      S:  a  US   O$T R                  [(        R4                  " S5      5      n[3        U5      S:  a  US   O'T R                  UR                  R                  S   5      n[3        U5      S:  a  US   O$T R                  [(        R4                  " S5      5      nO[7        S5      eSn[9        U5      (       a*  UR                  S:  a  [        UR                  * 5      nSnXp[        R:                  R=                  UT R>                  5      n[        R:                  R=                  UT R>                  5      n[        R:                  R=                  UT R>                  5      nUR@                  RC                  5       (       a>  UR@                  RC                  5       (       a  UR@                  RC                  5       (       d3  [E        SUR@                   S	UR@                   S	UR@                   S
35      e[        R:                  RG                  UR@                  UR@                  5      n[        R:                  RG                  UUR@                  5      nURI                  T R>                  5      nURJ                  [        RL                  R@                  RN                  RP                  :H  nURR                  nURR                  nURR                  nT R>                  RU                  UUU5      nT R>                  RU                  UUU5      nT R>                  RU                  UUU5      nT R>                  RW                  U5      nT RY                  UR                  R                   [        RL                  R[                  UU5      5        []        T 5       nUu  nnT R_                  5       u  nnT R>                  Ra                  5       nT R>                  Rc                  U5        T Rd                  Rg                  U5        T R#                  UR$                  5        T Rd                  Ri                  5         URk                  5         / n/ n/ nT Rl                   He  nUU;   d  M  T Rl                  U   nUU   nT Ro                  UUU5        URg                  U5        URg                  U5        URg                  U5        Mg     T Rq                  UU5        T R>                  Rs                  XUU Vs/ s H  o3RR                  PM     sn5      n U
b+  U Ru                  ST R>                  Rw                  U
5      5        Ub+  U Ru                  ST R>                  Rw                  U5      5        T Rd                  Rg                  U5        T R>                  Rc                  U Ry                  S5      5        UR{                  5       T l        0 T l6        [}        U5       Hd  u  nnT RY                  U[        RL                  R[                  U Ry                  S5      R                  US-   5      UU   R                  5      5        Mf     T R#                  UR$                  5        T Rd                  Ri                  5         / nT Rl                   HQ  nUU;   d  M  URg                  [        R:                  R=                  T Rl                  U   T R>                  5      5        MS     [3        U5      S:  a6  T R>                  R                  U V!s/ s H  n!U!RR                  PM     sn!5        U Ry                  S5      R                  5       n"U"R                  5       S:X  d   S5       eT R>                  Rc                  U Ry                  S5      5        U R                  5       nU(       a8  T R>                  R                  UU5      nT R>                  R                  UU5      nT R                  UR                  R                      RR                  R                  U5        T RY                  UR                  R                   [        RL                  R[                  UU5      5        S S S 5        [}        W5       HR  u  nnT RY                  U[        RL                  R[                  W R                  U5      WU   R                  5      5        MT     UR&                   H  n	 S5       e   g s  snf s  snf s  sn!f ! , (       d  f       N= f)Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frO   r   r   keywordrr   s     r7   r   *CodeGenerator.visit_For.<locals>.<genexpr>  s     Q>P74::g..>Pr   r   r   r
   zAOnly `range` and `static_range` iterators are currently supportedFTz0For loop bounds and step must all be ints, are (r  r  ztt.num_stagesztt.loop_unroll_factorz7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Ir   iterr   ri   dictkeywordsr   static_rangerd  startr   endstepr   rv   rZ  r   r<  r   r   r   r@  r   
num_stagesloop_unroll_factorre  NumRuntimeErrorrW   rJ  rK  r{   r&   r%   r3   integer_promote_implra  r)   r  r'   r(   rL  create_int_castrm  r.  r   rn   r4  rM  rj  r   rf  r!  r"  ry   r  r7  create_for_opset_attrget_int32_attrget_bodyrw   rc   rk   rY   r  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_withr  )#rr   rg   IteratorClassrk   	iter_argsiter_kwargsiteratorrG  r   r;  rK  rL  lbubrJ  negative_stepiv_type
iv_ir_typeiv_is_signedivr  rx   r}   r3  r  blockr*  r.  r  rE   r  r  for_opr/  for_op_regions#   `                                  r7   	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!)!<!<e# "%Y!!31CGGAJ9OB!$Y!!31DIINNSTDU9VB#&y>A#59Q<4::cggaj;QDbcc4::>djj[)D M((T\\:((T\\:  **4>xx  (9(9ARARATATNrxxjXZ[][c[cZddfgkgqgqfrrstuu##88288L##88$**M]]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(;\\//U^>_U^czzU^>_`F%1L1LZ1XY!- 79T9TUg9hiNN!!$'LL55fooa6HI!,,.DK DO$U+4tX]]%9%9&//!:L:P:PQRUVQV:WY_`aYbYgYg%hi ,))$))4NN F7?MM("3"3"="=dood>SUYUaUa"bc (
 6{Q,,-G1ahh-GH"OOA.99;M %%'1,g.gg, LL55fooa6HI))+B\\,,R4\\,,R4KK'..DDRHNN4;;>>8==+?+?G+LM $D !'GAtNN4!5!5f6G6G6JFSTINN![\ ( KKDEEE5  C @t ?`, .Hi $#s@   j$0Cj3;Bj3j)Fj3 A2j3j.
(D:j3)
j33
kc                     U R                  UR                  5      nU R                  UR                  5      nU R                  UR                  5      n[	        X#U5      $ rO   )r   lowerupperrJ  r5  )rr   rg   rl  rm  rJ  s        r7   visit_SliceCodeGenerator.visit_Slice	  sE    

4::&

4::&zz$))$U4((r8   c                 8    U R                  UR                  5      $ rO   )r   r   r   s     r7   visit_IndexCodeGenerator.visit_Index  s    zz$**%%r8   c                 P    UR                   U R                  UR                  5      4$ rO   )rk   r   r   r   s     r7   visit_keywordCodeGenerator.visit_keyword  s    xxDJJ///r8   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   r  device_assertr{   )rr   rg   r  rw  s       r7   visit_AssertCodeGenerator.visit_Assert  sO    zz$))$&*hh&:djj"}}**4t||*LLr8   rh   c                    [         R                  " UR                  /UQ70 UD6nUR                   Vs/ s H  oBU   PM	     nnU Vs/ s H   n[	        U5      (       a  UO
[        U5      PM"     nn0 n[        U5       VVs/ s H  u  pu[        U5      (       d  M  UPM     nnnU Vs0 s H  owX'   _M	     n	n[        U5       VVs/ s H  u  puXx;   a  S OUPM     nnnU Vs/ s H  oUc  M  UR                  PM     n
nU Vs/ s H  oUc  M  UR                  PM     nn[        UR                  X5      nU R                  R                  U5      (       d  [        R                  " / U5      nUR                   n[#        U5      u  nn[%        U R&                  XXiU R                  XU R(                  UR*                  UUU R,                  R.                  U R,                  R0                  U R,                  R2                  S9n UR5                  UR7                  5       5        URB                  nUU R(                  U'   OU R(                  U   nU R                  RE                  U5      nU R,                  RG                  UU
5      nURI                  5       S:X  d  Uc  g URI                  5       S:X  a  [K        URM                  S5      U5      $ / n[O        URI                  5       5       H0  nURQ                  [K        URM                  U5      UU   5      5        M2     [S        U5      $ s  snf s  snf s  snnf s  snf s  snnf s  snf s  snf ! [8         a1  n[;        U R<                  R>                  U R@                  S 5      UeS nAff = f)N)
r   r   r   r   rb   r   r   r   r   r   r   r   )*inspectgetcallargsrh   rf   rR   r   rc   rW   rL  rY   rK   re   r   has_functionr   function_type__globals__r   r   r   r   rb   r{   r   r   r   r   r   	Exceptionr   r   rd   r   r   get_functioncallget_num_resultsr   r  rd  rf  r^   )rr   rh   ri   r   rE   rk   r   r   
constexprsrG   arg_vals	arg_typesfn_namer   r   r   r   rq   ecallee_ret_typesymbolcall_opresultss                          r7   call_JitFunctionCodeGenerator.call_JitFunction  s   ""255:4:6:')||4|tT
|4LPQDS',,)C.@DQ
&/oLoFAs9Kao
L)34AZ	4?HOVQS0O*.B$3JCJJ$B)-A#XSXX	ABKK>{{''00 ..r9=I^^F$8$<!Iz%dllIzeiepep-/W[WnWn/1{{i\f.2ll.B.BPTP\P\PhPh151H1H	JI
T
+
 (00O/>D##G,"55g>O))'2,,##FH5""$)_-D$$&!+',,Q/AA G72245vg&8&8&;_Q=OPQ 6>!W 5Q M4OBA  T&t{{tLRSSTsS   L'L$ L)L)'L/L4!L:+L:L?L?=M 
M?,M::M?c                   ^  [        T R                  UR                  5      5      nT R                  R	                  U5      nUb	  U" T U5      $ [        U 4S jUR                   5       5      nUR                   Vs/ s H  nT R                  U5      PM     nn[        U[        5      (       a  [        XU5        T R                  X&U5      $ [        US5      (       a  [        UR                  5      (       d$  [        R                   R#                  U5      (       aD  ST R$                  0n[&        R(                  " U5      nSUR*                  ;   a  T US'    U" U0 UDUD6$ UT R4                  R7                  5       ;   a  [9        [         U5      nU" U0 UD6$ s  snf ! [,         a'  n	[/        T R0                  R2                  US 5      U	eS n	A	ff = f)Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7frO   r   rA  s     r7   r   +CodeGenerator.visit_Call.<locals>.<genexpr>O  s     Dm74::g&&mr   __self__r  
_generator)r   r   r    statically_implemented_functionsr   rE  rF  ri   rP   r   rl   r  hasattrrR   r  r   r  
is_builtinr{   r|  	signature
parametersr  r   r   rd   r  r  r0   )
rr   rg   rh   static_implementationkwsrk   ri   extra_kwargssigr  s
   `         r7   r   CodeGenerator.visit_CallI  s   !$**TYY"78 $ E E I I" M ,(t44DdmmDD+/9959C

395b+&&4T*((377B
##(8(E(E(--JbJbceJfJf&5L##B'Cs~~--1\*	K47<7377 ''..00+T2D43- 6  K 't{{dCJKs   :F	F 
G	""GG	c                 ,    [        UR                  5      $ rO   r   r   r   s     r7   visit_ConstantCodeGenerator.visit_Constanth  s    $$r8   rg   c                    [        UR                  5      S:w  a  U R                  US5      eU R                  UR                  S   5      nU R                  UR                  S   5      nU R                  R                  [        UR                  5      5      nUc5  U R                  USR                  UR                  R                  5      5      eU R                  XBU5      $ )Nr
   z^chained boolean operators (A or B or C) are not supported; use parentheses to split the chain.r   r   z9AST boolean operator '{}' is not (currently) implemented.)re  r  r
  r   _method_name_for_bool_opr   rY   r  r  re   r  r  s        r7   visit_BoolOpCodeGenerator.visit_BoolOpk  s    t{{q ##vx xjjQ(jjQ(3377TWWF##QXXY]Y`Y`YiYijl l((3??r8   logical_and
logical_orr  )      c                 ,    [        UR                  5      $ rO   r  r   s     r7   visit_NameConstant CodeGenerator.visit_NameConstant{  s    TZZ((r8   c                 ,    [        UR                  5      $ rO   )r   r  r   s     r7   	visit_NumCodeGenerator.visit_Num~  s    TVV$$r8   c                 @    [        [        R                  " U5      5      $ rO   )r   r   literal_evalr   s     r7   	visit_StrCodeGenerator.visit_Str  s    S--d344r8   c                     U R                  UR                  5      n[        U5      (       a9  UR                  S:X  a)  [        R
                  R                  USU R                  S9$ [        X!R                  5      $ )NT)r   r   )r{   )	r   r   rU   r   r   rJ  permuter{   r   )rr   rg   r  s      r7   r   CodeGenerator.visit_Attribute  s[    jj$S!!dii3&6$$,,S&$,,,OOsII&&r8   c                 B    [         R                  R                  X5        g rO   r?  r   s     r7   
visit_ExprCodeGenerator.visit_Expr  rB  r8   c                     g rO   r   r   s     r7   visit_NoneTypeCodeGenerator.visit_NoneType  r   r8   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   )r]   r  rc   rP   r   Constantr*   r   FormattedValue
conversionr   rW   r
  rY   chrr  AssertionErrorr/   )rr   rg   r  r   r   conversion_code	evaluateds          r7   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r8   c           	      N  > Uc  g [         R                  " 5          [         R                  " S[        5        [         R                  " S[        5        U R
                  nU R                  R                  5       nXl        [        US5      (       as  [        US5      (       ab  U R                  R                  U R                  U R                  UR                  -   UR                  5        U R                  R                  5       n [        TU ]=  U5      nU(       a!  X l        U R                  R                  U5        UsS S S 5        $ ! [          a    e ["         a:  n[!        U R$                  R&                  U R
                  [)        U5      5      S eS nAff = f! , (       d  f       g = f)Nignorelineno
col_offset)warningscatch_warningssimplefilterDeprecationWarningPendingDeprecationWarningr   r{   r1  r  r   r   r   r  r  superr   r   r  r   rd   rC   )rr   rg   	last_noder  rJ   r  r4  s         r7   r   CodeGenerator.visit  s;   <$$& !!(,>?!!(,EFI||++-H MtX&&74+F+F$$T^^T__t{{5RTXTcTcd<<//1ZgmD)  )$$X.1 '& $  Z 't{{tAwOUYYZ '&s0   C'FE)FF5FFF
F$c                 j    U R                  USR                  [        U5      R                  5      5      e)Nzunsupported AST node type: {})r
  r  rY   re   r   s     r7   r   CodeGenerator.generic_visit  s,    &E&L&LTRVZM`M`&abbr8   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: >)re  ri   rF  r3   r   r   rP   r   NotImplementedErrorr  rC   r   r   rd   )rr   rg   	arg_countpassedr	  r  s         r7   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$ )Nrg   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rO   r   rA  s     r7   r   =CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>  s     #U}GDJJw$7$7}r   )rF  r   ri   r   r   )rr   rg   rE   r   r  rk   ri   	python_fns   `      r7   rJ   *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  rJ   s   ` r7   static_executorCodeGenerator.static_executor  s    	6CHH 	6 
r8   r  )r   r   r{   rG   r   r   r   r   rh   r   r   r   r   r   ry   rv   r   rb   r   r   r   r   )NFNFNr   )re   r   r   r   r   r   r   r*   rs   re  r]   rd  floatintrP   r   r  r   r  updater   r  device_printminimummaximumr
  r  r   r	   r   r   r.  r4  r7  r<  r   rE  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  r  r  r   r   r  r	  EqNotEqLtLtEGtGtEr  cmpopr  USubUAddNotInvertr  unaryopr  r1  r8  r=  ri  rn  rq  r   rt  ry  r  r   r  BoolOpr  AndOrr  boolopsysversion_infor  r  r  r   r  r  r  r   r   r   r  r  static_assertstatic_printr  r  r  r   r   __classcell__)r   r   r4  s   00@r7   r   r      s    jnMN00al 00X`aeXf00,4SM00d BEdESXZ]_ikr@s(t@s1Q@s(ttCH~t	(--,,-	  !	  ! L-^&c &%	0A*B &t &"
2@2H?T&'"(2+.
22.@ 	)n

L

L

I		8

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

#3S#89j
& 	)	%	5'2$:c#(( t ,
 	##%:""OE$:_S!_S!	Q$d68SXXJO3L+L&M  a )us   M)r   c                     Sn[        U 5       H=  u  p4U[        U5      -  nX1R                  ;   a  US-  nX1R                  ;   d  M8  US-  nM?     U$ )Nr   r:   d)rc   r*   
equal_to_1divisibility_16)r  specializationsuffixr   r   s        r7   kernel_suffixr    sY     F)$#a&)))cMF...cMF % Mr8   c                   ^  UR                   nU 4S jnUR                  R                  5        VV	s0 s H  u  pU" U5      U	_M     n
nn	T R                  R	                  5       nT R                  U5      n[        UR                  R                  5       5      nUR                  5       nU H"  nX;   d  M
  X   S:X  d  M  X   S:X  d  M  SX'   M$     UR                  5       nUR                  5       nU
R	                  5       nUR                  U5        UR                  R                  5        VVs/ s H"  u  nnXR                  ;  d  M  [        U5      PM$     nnn[        T 5      u  nn[        R                   " / U5      n[#        UUUUUT USUUX4US9nUR%                  T R'                  5       5        UR(                  nUUl        U$ s  sn	nf s  snnf )Nc                 h   > [        U [        5      (       a  TR                  R                  U 5      $ U $ rO   )rP   r*   rf   index)r   rh   s    r7   <lambda>ast_to_ttir.<locals>.<lambda>  s(    As1C1C**1-JJr8   i1r   T)r   rG   r   r   r   r   r   r   r   r   r   )attrsrG   r   r  rw   rC   r]   r  r  get_constantsfilter_out_constantsget_fn_attrsr  r   r   r   r  r   r   r   r   r   )rh   r  r   r   r   r   r  cst_keykeyr   rG   r   r   tysnew_constantsr   	new_attrsfn_attrsall_constantsr  r  r   r   r   rq   rJ   s   `                         r7   ast_to_ttirr'    s     EJG7E7O7O7U7U7WX7Wu$7WIX^^  "FGGN+M
~''..0
1C'')M8$=+;q+@#M  **,I%%'HNN$M'*8*B*B*H*H*Jp*J$!QaWoWoNo1*JIp04Iz&&r95Igy=hu%'HXa)3WjtvI OOBHHJ


CCKJ5 Y qs   G-GG)7r   r|  r  r
  r  r!  r$  typingr   r   r   r   r   r   r	   r   r   _C.libtritonr   r   r   r   language.corer   r   r   runtime.jitr   r   runtimer   errorsr   r   r   typesr   r#   rK   r   rR   rU   rW   r[   r_   rl   r  rY   r  rn   r@  r   r   r  r'  r   r8   r7   <module>r/     s   
  	 
  	  D D D   3 3 J J = ! a a .$	! ! !! ! !$S $T $Q Q Q(S (T ( #tDz* 3 3*U%COO U%piCOO iX!
r8   