
    ^jK                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZm Z! dd	l"m#Z#m$Z$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4 d Z5d Z6dede7fdZ8dede7fdZ9dede7fdZ:dede7fdZ;dede7fdZ<d Z=e>fdZ?d Z@dee$   fdZAdeej                     dee%   fdZCe7eD eEd      hZF G d d       ZG G d! d"e j                        ZI G d# d$      ZJ e
d%&       G d' d(             ZK G d) d*e j                        ZLd,d+ZMy)-    N)	dataclass)
ModuleType)	AnyCallableDictOptionalTupleTypeUnionIterableList   )knobslanguage)irgluon_ir)	constexpr	str_to_tytensortuple)_unwrap_if_constexpr
base_value	base_type)get_jit_fn_file_lineget_full_nameJITCallableBoundConstexprFunctionConstexprFunctionJITFunction)apply_with_pathset_iterable_pathis_namedtuple   )CompilationErrorCompileTimeAssertionFailureUnsupportedLanguageConstructc                 Z    d}t        j                  ||       st        d| d|  |       | S )Nz^[a-zA-Z_][a-zA-Z0-9_]*$zinvalid z identifier: )rematchr$   )nametypepatterns      i/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/triton/compiler/code_generator.pycheck_identifier_legalityr.      s4    )G88GT"$}TFCTJJK    c                 
   dj                  |D cg c]  }|j                          c}      }|j                  dd      }|j                  dd      j                  dd      }|  d| }|||j                         z  }|S c c}w )N_'_sq_[]__)joinmanglereplace)r*   arg_tyscaller_contexttymangled_argsrets         r-   	mangle_fnr?       s    887;RRYY[;<L''V4L''S199#sCLF"\N
#C!~$$&&J <s   B oreturnc                 "    t        | t              S N)
isinstancer   r@   s    r-   _is_triton_valuerF   ,   s    a$$r/   c                 "    t        | t              S rC   )rD   r   rE   s    r-   _is_triton_tensorrH   0   s    a  r/   c                 l    | d u xs/ t        | t        t        j                  j                  t
        f      S rC   )rD   r   r   coredtyper   rE   s    r-   _is_constexprrL   4   s)    9T
1y(--2E2E{&STTr/   c                     t        |       xr5 | j                  j                         xr | j                  j                  dk7  S Nr#   )rH   r+   is_blocknumelrE   s    r-   _is_non_scalar_tensorrQ   8   s/    QMQVV__%6%L166<<1;LMr/   c                 .    t        | t        t        f      S rC   )rD   listr   rE   s    r-   _is_list_likerT   <   s    a$''r/   c                     |j                   rbt        |      D ]S  \  }}t        |      rt        |      st	        |j
                  | d|j                   d|j                  |    d|        y y )Nz	Function z= is marked noinline, but was called with non-scalar argument :)noinline	enumeraterL   rQ   r&   src__name__	arg_names)nodefnargsidxargs        r-   _check_fn_argsra   @   s    	{{!$ 	HC %*?*D2FFD},ijljvjvwzj{i||}  B  ~C  D 	 r/   c                 "    | s | |             y rC    )condmsg_fncategorys      r-   _checkrg   J   s    vx   r/   c                    t        t        |             r| j                  }nDt        | t        j
                        r| j                  j                  }nJ dt        |               | D cg c]
  } ||       }}|D cg c]  }|t        |      n| }}|D cg c]  }|j                   }}t	        j
                  |t	        j                  ||            S c c}w c c}w c c}w )NzUnsupported type )	r"   r+   _fieldsrD   r   r   fieldsr   
tuple_type)valuer]   rj   vvalstypess         r-   _apply_to_tuple_valuesrp   O   s    T%[!	E8>>	*""7)$u+77u !aBqE!D!6:;AIIaL1,;D;!"QVV"E">>$ 3 3E6 BCC ";"s   *C?CC$valuesc                 :    g }| D ]  }|j                  |        |S rC   )_flatten_ir)rq   handlesrm   s      r-   flatten_values_to_irru   ]   s'    G 	gNr/   rt   ro   c              #   p   K   d}|D ]  }|j                  | |      \  }}|  |t        |       k(  sJ y wNr   )_unflatten_irlen)rt   ro   cursorr<   rl   s        r-   unflatten_ir_valuesr{   d   sI     F ((&9v S\!!!s   46c                       e Zd Zd Zd Zd Zy)enter_sub_regionc                     || _         y rC   )	generator)selfr   s     r-   __init__zenter_sub_region.__init__q   s	    "r/   c                    t        | j                  j                        | _        t        | j                  j                        | _        i | j                  _        | j                  j                  j                         | _        | j                  j                  j                         | _
        | j                  | j                  fS rC   )dictr   lscopeliveins
local_defs	prev_defsbuilderget_insertion_blockinsert_blockget_insertion_pointinsert_point)r   s    r-   	__enter__zenter_sub_region.__enter__t   s    DNN112dnn778$&! NN22FFH NN22FFH||T....r/   c                     | j                   j                  j                  | j                         | j                  | j                   _        | j                  | j                   _        y rC   )r   r   restore_insertion_pointr   r   r   r   r   )r   r^   kwargss      r-   __exit__zenter_sub_region.__exit__}   s@    66t7H7HI $$(NN!r/   N)rZ   
__module____qualname__r   r   r   rc   r/   r-   r}   r}   o   s    #/3r/   r}   c                      e Zd Zd ZdefdZdefdZdefdZdej                  defdZ
dej                  defdZdej                  defd	Zdej                  defd
Zdej"                  defdZdej&                  defdZdej*                  defdZdej.                  defdZdej2                  defdZdej6                  defdZy)ContainsReturnCheckerc                     || _         y rC   )gscope)r   r   s     r-   r   zContainsReturnChecker.__init__   s	    r/   rA   c                 ,     t         fd|D              S )Nc              3   @   K   | ]  }j                  |        y wrC   visit).0sr   s     r-   	<genexpr>z5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>   s     /Q4::a=/   )any)r   bodys   ` r-   _visit_stmtsz"ContainsReturnChecker._visit_stmts   s    /$///r/   c                      yNFrc   )r   r]   s     r-   _visit_functionz%ContainsReturnChecker._visit_function   s     r/   c                 4   d}t        j                  |      D ]}  \  }}t        |t              r8|D ]2  }t        |t         j                        s|xs | j                  |      }4 Nt        |t         j                        si|xs | j                  |      } |S r   )astiter_fieldsrD   rS   ASTr   )r   r\   r>   r1   rl   items         r-   generic_visitz#ContainsReturnChecker.generic_visit   s    - 	/HAu%&! 6D!$0!5TZZ%56 E377+.TZZ.	/ 
r/   r\   c                 Z   t        |j                  t        j                        rm|j                  j                  | j
                  v rJ| j
                  |j                  j                     }t        ||j                        }| j                  |      S y| j                  |j                        S r   )
rD   rl   r   Nameidr   getattrattrr   r   )r   r\   rl   r]   s       r-   visit_Attributez%ContainsReturnChecker.visit_Attribute   sw     djj#((+zz}}+DJJMM2UDII.++B//zz$**%%r/   c                     t        |j                        t        j                  u ry|j                  | j
                  v r*| j
                  |j                     }| j                  |      S yr   )r+   ctxr   Storer   r   r   )r   r\   r]   s      r-   
visit_Namez ContainsReturnChecker.visit_Name   sO    >SYY&77dkk!TWW%B''++r/   c                      yNTrc   r   r\   s     r-   visit_Returnz"ContainsReturnChecker.visit_Return       r/   c                      yr   rc   r   s     r-   visit_Assignz"ContainsReturnChecker.visit_Assign        r/   c                      yr   rc   r   s     r-   visit_AugAssignz%ContainsReturnChecker.visit_AugAssign   r   r/   c                 8    | j                  |j                        S rC   r   r   r   s     r-   visit_Modulez"ContainsReturnChecker.visit_Module         ++r/   c                 8    | j                  |j                        S rC   r   r   s     r-   visit_FunctionDefz'ContainsReturnChecker.visit_FunctionDef   r   r/   c                     | j                  |j                        }|j                  r|xs | j                  |j                        }|S rC   )r   r   orelse)r   r\   r>   s      r-   visit_IfzContainsReturnChecker.visit_If   s=     		*;;7**4;;7C
r/   c                 r    | j                  |j                        xs | j                  |j                        S rC   )r   r   r   r   s     r-   visit_IfExpz!ContainsReturnChecker.visit_IfExp   s'    zz$))$?

4;;(??r/   c                 8    | j                  |j                        S rC   )r   funcr   s     r-   
visit_Callz ContainsReturnChecker.visit_Call   s    zz$))$$r/   N)rZ   r   r   r   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   rc   r/   r-   r   r      s   0D 0T 	T 	&CMM &d &sxx D     
CMM d 
, , ,,coo ,$ ,SVV  @		 @d @%sxx %D %r/   r   c                       e Zd Zd Zdej
                  dee   deej                     fdZ	dej
                  deej                     fdZ
dej
                  fdZd Zy	)
ASTFunctionc                 .    || _         || _        || _        y rC   )	ret_types	arg_typesattrs)r   r   r   r   s       r-   r   zASTFunction.__init__   s    ""
r/   r   ro   rA   c                 B    g }|D ]  }||j                  ||        |S rC   )_flatten_ir_types)r   r   ro   ir_typesr<   s        r-   flatten_ir_typeszASTFunction.flatten_ir_types   s5     	4Bz  (3	4 r/   c                 :    | j                  || j                        S rC   )r   r   )r   r   s     r-   return_types_irzASTFunction.return_types_ir   s    $$Wdnn==r/   c                     | j                  || j                        }| j                  |      }|j                  ||      S rC   )r   r   r   get_function_ty)r   r   arg_types_irret_types_irs       r-   	serializezASTFunction.serialize   s;    ,,WdnnE++G4&&|\BBr/   c                      fd  j                         t        j                               D cg c]  }j                  |       c}d fd}t	         j                   |       S c c}w )Nc                     t        | t        t        t        j                  f      r*t        j                  | D cg c]
  } |       c}|       S t        j
                  d       S c c}w rC   )rD   rS   r   r   rk   r   )r<   xmake_templates     r-   r   z.ASTFunction.deserialize.<locals>.make_template   sR    "tUH,?,?@A~~&DA}Q'7&DbII%%d++ 'Es   A&r   c                     	j                   j                  | g       }|D ]  \  }}j                  ||        |j                        \  }t	        
| |       y rC   )r   getset_arg_attrrx   r!   )pathr<   
attr_specs	attr_nameattr_valvalrz   r]   rt   r   rn   s         r-   build_valuez,ASTFunction.deserialize.<locals>.build_value   sa     b1J'1 =#	8	8<= **7F;KCdD#.r/   )r   rangeget_num_argsr^   r    )r   r]   ir   rz   rt   r   rn   s   ``  @@@@r-   deserializezASTFunction.deserialize   sf    	,
 T^^,',R__->'?@!2771:@	/ 	/ 	4 As   A7N)rZ   r   r   r   r   r   r   r   r+   r   r   r   r   rc   r/   r-   r   r      sj    


 4	? tTVT[T[} >rzz >d277m >C Cr/   r   T)frozenc                   "    e Zd ZU eed<   eed<   y)BoundJITMethod__self____func__N)rZ   r   r   r   __annotations__r   rc   r/   r-   r   r     s    r/   r   c                      e Zd ZU dddddddddedee   dee   fdZee	e
eeeeefD  ci c]  }|j                   | c}} Zeeef   ed	<   ej'                  d
ej*                  j,                  fdej*                  j.                  fdej*                  j0                  ff       d Zd Zd Zej:                  d        Zd Zdede e!e"f   ddfdZ#d Z$d Z% e&       fde&e   fdZ'd Z(d Z)d Z*de+jX                  fdZ-d Z.d  Z/d! Z0d" Z1d# Z2d$ Z3d% Z4d& Z5d' Z6d( Z7d) Z8d* Z9d+ Z:d, Z;d- Z<d. Z=d/ Z>e+j~                  d0e+j                  d1e+j                  d2e+j                  d3e+j                  d4e+j                  d5e+j                  d6e+j                  d7e+j                  d8e+j                  d9e+j                  d:e+j                  d;iZKeeLe+j                     ef   ed<<   d= ZNd> ZOd? ZPd@ ZQdA ZRdB ZSdC ZTdD ZUe+j                  dEe+j                  dFe+j                  dGe+j                  dHe+j                  dIe+j                  dJiZ\eeLe+j                     ef   edK<   dL Z^e+j                  dMe+j                  dNe+j                  dOe+j                  dPiZceeLe+j                     ef   edQ<   dR ZedS ZfdT ZgdU ZhdV ZidW ZjdX ZkdY ZldZ Zmdeneef   fd[Zodefd\Zpdsd]efd^Zqd_ Zrd` Zsda Ztdb Zude+j                  fdcZwe+j                  dde+j                  deiZzeeLe+j                     ef   edf<   dg Z|dh Z}di Z~dj Zdk ZfdlZdm Zde+j                  ddfdnZdo ZdpdqlmZ ej*                  j                  eej*                  j                   ee      ej                  eej                   ee      e ee      e ee      iZeeee+j                  gef   f   edr<   xZS c c}} w )tCodeGeneratorNFr   )module	is_kernelfunction_typesrW   r;   	file_name
begin_linejit_fnr  r  c                   || _         |	| _        |	r8ddlm} t	        j
                  |      | _         || j                        | _        n7ddlm	} t        j                  |      | _         || j                        | _        d | _        || _        |dz
  | _        | j                  j                  ||d       || j                  _        || j                  _        |i n|| j                  _        |
| j                  j%                         n|
| _        |i n|| _        || _        g | _        g | _        i | _        |j3                         D ]  \  }}t5        |t6              r*|j9                  |j:                  |      | j0                  |<   @t=        |dd      }||v r't=        ||   |j:                        | j0                  |<   x|| j0                  |<    i | _        || _         |r#||jC                  d      dz   d  }tE        |d      }|| _#        || _$        d | _%        || _&        || _'        g | _(        d | _)        i | _*        | jW                         | _,        d | _-        d	| _.        y )
Nr   )GluonSemantic)TritonSemanticr#   r    .functionF)/contextis_gluon,triton.experimental.gluon.language._semanticr	  r   GluonOpBuilderr   semantictriton.language.semanticr
  r   name_loc_as_prefixr  r  set_locoptionscodegen_fns
module_mapcreate_moduler  function_ret_types	prototypereturn_vals
return_ipsr   itemsrD   r   r   rZ   r   r   r  rfindr.   function_namer  cur_noderW   r;   	scf_stackret_typer   _define_name_lookupdereference_namer]   visiting_arg_default_value)r   r  r  r   r   r  r  r  r  r  r  r  r  rW   r;   r  r  r	  r
  krm   module_names                         r-   r   zCodeGenerator.__init__  s     R#227;DL)$,,7DM?::g.DL*4<<8DM"&"$q.Y
A6& $/ (2(:"
6<ndll002&(6(>"N"46?ALLN 		#DAq!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                 D    t        | j                  j                  ||      S rC   )r&   r  rY   )r   r\   messages      r-   _unsupportedzCodeGenerator._unsupported`  s    +DKKOOT7KKr/   c                 r    t               }| j                  j                  ||      }||u ryt        |      ryy)NFT)objectr   r   rL   )r   r*   absent_markerr   s       r-   _is_constexpr_globalz"CodeGenerator._is_constexpr_globalc  s6    kkoodM2-r/   c                 |     dt         f fddt         f fdt               dt         dt        f fd}|S )Nr*   c                 <    j                   j                  | |      S rC   )r   r   )r*   absentr   s     r-   local_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookupp  s    ;;??400r/   c                 b   j                   j                  | |      }t        ||u | j                  v t	        |      t
        u t        |t              t        |dd      t        |dd      t        |dd      j                  d      t        |dd      j                  d      t        |t        j                        t        |      j                  |       j                  t        j                   j"                  g      r|S t%        t'        j(                  d|  d	      j+                  d
d            )N__triton_builtin__F__triton_aggregate__r   r  ztriton.languagez"triton.experimental.gluon.languagez.                Cannot access global variable a   from within @jit'ed
                function. Triton kernels can only access global variables that
                are instanstiated as constexpr (`x = triton.language.constexpr(42)`). Note that this is different from
                annotating a variable as constexpr (`x: triton.language.constexpr = 42`), which is not supported.  Alternatively, set the
                envvar TRITON_ALLOW_NON_CONSTEXPR_GLOBALS=1, but we do not
                promise to support this forever.
 )r   r   r   r)  r+   r   rD   r   r   
startswithr   rK   r"   r3  r&  r   compilationallow_non_constexpr_globals	NameErrortextwrapdedentr9   )r*   r6  r   r   s      r-   global_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookupt  s   ++//$/C 6MD222I+sK0C!5u=C!7?Cr2==>OPCr2==>bcsHNN3!#&--d3 33%%AA! $ 
 %//3f 51!4 5 6=WT35GI Ir/   rA   c                     }j                   j                  fD ]  } || |      }||us|c S  t        |  d      )Nz is not defined)r)  r   r@  )r*   r6  lookup_functionrl   r2  rC  r7  r   s       r-   name_lookupz6CodeGenerator._define_name_lookup.<locals>.name_lookup  sW    "F#/@V@V@Z@Z#Z !'f5& L! tfO455r/   )strr1  r   )r   rF  r2  rC  r7  s   ` @@@r-   r$  z!CodeGenerator._define_name_lookupn  sG    	1s 	1	I 	IB 	6c 	6c 	6 	6 r/   c              #   0   K   || _         d  d | _         y wrC   )r  )r   prefixs     r-   _name_loc_prefixzCodeGenerator._name_loc_prefix  s     "("&s   c                    t        |t        j                  t        j                  f      r:|j	                  | j
                  j                  ||j                                      y t        |      rTg }|j                  |       |D ];  }|j	                  | j
                  j                  ||j                                      = y y rC   )
rD   r   rl   block_argumentr  r   create_name_locget_locrF   rs   )r   r   r*   rt   handles        r-   _maybe_set_loc_to_namez$CodeGenerator._maybe_set_loc_to_name  s    cBHHb&7&789KK44T3;;=IJc"GOOG$! Ut||;;D&..BRSTU #r/   r*   rl   rA   c                 @    || j                   |<   || j                  |<   y)z This function:
            called by visit_Assign() & visit_FunctionDef() to store left value (lvalue)
        1. record local defined name (FIXME: should consider control flow)
        2. store tensor in self.lvalue
        N)r   r   )r   r*   rl   s      r-   	set_valuezCodeGenerator.set_value  s      "D %r/   c                 r    | j                   j                         }| j                   j                         }||fS rC   )r   rN  r   )r   locips      r-   _get_insertion_point_and_locz*CodeGenerator._get_insertion_point_and_loc  s1     ll""$\\--/3wr/   c                 p    | j                   j                  |       | j                   j                  |       y rC   )r   r   r  )r   rU  rT  s      r-   _set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_loc  s&    ,,R0S!r/   ignorec                    | j                   j                         }| j                   j                  |       | j                  j	                  |       | j                  |j                         | j                  j                          |j                          g }g }g }|j                         D ]  \  }}	||v rt        |	      r~| j                  |   }
| j                  ||
|	       t        |	g      }t        |
g      }||k7  sV|j	                  |       |j	                  |	j                         |j                  |       || j                   vrJ d| d        |j#                         | _        i | _        |||fS )NLoop carried variable z is not a triton value)r   create_blockset_insertion_point_to_startr"  appendvisit_compound_statementr   poperaser  rF   r   _verify_loop_carried_variableru   r+   extendr   copy)r   r\   r   rY  blockinit_tysinit_handlesnamesr*   live_valloop_vallive_handlesloop_handless                r-   _find_carrieszCodeGenerator._find_carries  sP   ))+11%8d#%%dii0
 %mmo 	jND(v~);;t,2248L3XJ?3XJ?</LL&OOHMM2 ''54??2i6LTFRh4ii2	j$ llnlH,,r/   c                     t        |      s|g}|D ]/  }| j                  |       t        |t        j                        s/ y  y rC   )rT   r   rD   r   r   )r   stmtsstmts      r-   r_  z&CodeGenerator.visit_compound_statement  s?    U#GE 	DJJt $

+	r/   c                 D    t         j                  j                  | |       y rC   r   NodeVisitorr   r   s     r-   r   zCodeGenerator.visit_Module      %%dD1r/   c                     | j                  |j                        }|J t        j                  |j                  D cg c]  }| j                  |       c}      }|S c c}w rC   )r   r   r   r   elts)r   r\   r   eltrv  s        r-   
visit_ListzCodeGenerator.visit_List  sN    jj"{{~~$))D3tzz#DE Es   Ar\   c                    t        |j                        dk7  rt        d      |j                  d   }| j                  |j                        }t        |t              st        d      g }|D ]R  }| j                  |j                  j                  |       |j                  | j                  |j                               T t        |      S )Nr#   z'nested comprehensions are not supportedr   z'only tuple comprehensions are supported)ry   
generators
ValueErrorr   iterrD   tl_tupleNotImplementedErrorrR  targetr   r^  rw  )r   r\   compr|  resultsr   s         r-   visit_ListCompzCodeGenerator.visit_ListComp  s    t1$FGGq!zz$))$$)%&OPP 	1DNN4;;>>40NN4::dhh/0	1   r/   c                 Z   | j                  |j                        }|t        j                  d       }| j                  j                  |       | j                  j                  | j                                | j                  j                         }| j                  j                  |       y rC   )r   rl   r   r   r  r^  r  rV  r   r\  set_insertion_point_to_end)r   r\   	ret_valuepost_ret_blocks       r-   r   zCodeGenerator.visit_Return  s    JJtzz*	 **40I	*t@@BC 224//?r/   c                 `    t         j                        t         j                        k(  sJ  j                  st        j                  d       S t        j
                  fd fd j                  D cg c]  }|j                   c}t        j                        S c c}w )Nc                 *    d|  d| d}|d z  }|S )NzReturn type mismatch:  and z. zNote all return types were: rc   )aberrreturn_typess      r-   	error_msgz3CodeGenerator.decide_return_type.<locals>.error_msg'  s.    *1#U1#R8C1,@@CJr/   c           
          t         j                        rt        t        j                         fd       t         j                  j                  k(   fd       j                  t	               D cg c]  \  }} ||       c}} j                        S t         j
                        r> k(  r S j                  j                          j                  j                        nLt        j
                        r6j                  j                          j                  j                        t         k(   fd        S c c}}w )Nc                              S rC   rc   r  r  r  s   r-   <lambda>zGCodeGenerator.decide_return_type.<locals>.common_type.<locals>.<lambda>.  s    Yq!_ r/   c                              S rC   rc   r  s   r-   r  zGCodeGenerator.decide_return_type.<locals>.common_type.<locals>.<lambda>/  s    Yq!_ r/   )rj   c                              S rC   rc   r  s   r-   r  zGCodeGenerator.decide_return_type.<locals>.common_type.<locals>.<lambda>9  s    9Q? r/   )rD   rk   rg   rj   zipconstexpr_typer  to_tensor_type)r  r  aibicommon_typer  r   tls   ``  r-   r  z5CodeGenerator.decide_return_type.<locals>.common_type,  s   !R]]+z!R]]35LMqxx188+-DE}}Aq	%Rfb"k"b&9%R[\[c[c}dd!R../6HMM003MM003Ar001MM003MM0031623H &Ss   E
)	ry   r  r  r   r  rJ   r+   	functoolsreduce)r   r   r  r  r  r  s   ` @@@@r-   decide_return_typez CodeGenerator.decide_return_type   s    4##$DOO(<<<<**400]]	
	  )-(8(8919\:: :s   ?B+c           
      v   j                   k(  rS t        j                  }t        |j                        rkt        |j
                        sJ |j	                  t        j                  j                        D cg c]  \  }}| j                  ||       c}}      S t        |j                        r[t        |j                        rt        j                   k(  fd       S | j                  j                  j                        S t        j                   k(  fd       S c c}}w )Nc                  (    dj                    d  S NzReturn type mismatch r  r+   r<   rl   s   r-   r  z'CodeGenerator.cast_to.<locals>.<lambda>L  s    3HTYZ\Y]1^ r/   c                  (    dj                    d  S r  r  r  s   r-   r  z'CodeGenerator.cast_to.<locals>.<lambda>O  s    +@ERTQU)V r/   )r+   r   rJ   rD   r   rk   r  rq   ro   cast_tor   r  rg   r  scalar_constantrl   )r   rl   r<   r  rm   ts    ``   r-   r  zCodeGenerator.cast_to?  s    ::L]]eRXX&b"--0008803ELL"((0KL1a#L  eR\\*"b//0uzzR')^_==00bAAuzzR!VW Ms    D5
c                    | j                         }| j                         \  }}t        | j                        t        | j                        k(  sJ t        | j                  | j                        D ]w  \  }} | j                  |  | j                  j                         j                         rJ | j                  ||      }t        |g      }| j                  j                  |       y | j                  ||       || _        | j                  j                         j                         rJ t        | j                  t        j                         r/t#        | j                  j$                        | j&                  _        n| j                  g| j&                  _        | j*                  j-                  | j&                  j/                  | j                               | j                  j                  | j&                  j1                  | j                        D cg c]  }| j                  j3                  |       c}       y c c}w rC   )r  rV  ry   r  r  r  rX  r   r   has_terminatorr  ru   r>   r#  rD   r   rk   rS   ro   r  r   r]   
reset_typer   r   create_poison)r   return_typerU  rT  r>   ret_ipret_handlesr<   s           r-   handle_returnszCodeGenerator.handle_returnsR  s   --/335C4##$DOO(<<<<t//A 	*KC-D--v6||779HHJJJ,,sK0C.u5KLL[)	* 	))"c2#<<335DDFFFdmmX%8%89'+DMM,?,?'@DNN$(,DNN$4>>33DLLAB4>>CaCabfbnbnCopR$,,44R8pqps   "Ic                    | j                  |j                        \  }}| j                  r| j                  |d      t	        |j                  j
                  d d d         D ]  \  }}|j                  j                  | dz
     }|j                  }|j                  }t        j                  |t        j                               }	|t        j                  |	g|      }
nt        j                  |	||      }
	 | j                  rJ d| _        | j                  |
       d| _         | j                  rd	nd
}| j                  j!                  | j"                        }| j"                  j%                  | j&                  | j(                  ||| j*                        | _        | j&                  j-                  | j                         | j                  j/                         }| j                  j1                  | j                        }| j2                  0| j2                  j5                  | j                  | j"                         t7        ||      D ])  \  }}| j9                  ||       | j;                  ||       + | j"                  j=                         }| j"                  j?                  |       | jA                  |jB                         | jE                          |r| j"                  jG                  |       y y # d| _        w xY w)Nz,nested function definition is not supported.r#   )r   r   targetsrl   )r  rl   
annotationTFpublicprivate)$r   r^   r]   r/  rX   defaultsr  r`   r   r   r   r   	AnnAssignr&  r  r  r   r   get_or_insert_functionr  r   rW   	push_backadd_entry_blockr   r;   initialize_calleer  rP  rR  r   r]  r_  r   r  r  )r   r\   r[   kwarg_namesr   default_valuearg_noder  r*   	st_target	init_node
visibilityfn_tyentry
arg_valuesarg_name	arg_value	insert_pts                     r-   r   zCodeGenerator.visit_FunctionDefh  sd   !%DII!6	;77##D*XYY )$))*<*<TrT*B C 	8A}yy~~qb1f-H!,,J<<DDciik:I!JJ	{-P	MM-\fg	8::::26/

9%27/	8" "&XY
((6,,55dkk4CUCUW\^hjnjwjwxdgg&'')^^//8
*11$''4<<H#&y*#= 	0Hi''	8<NN8Y/	0 LL446	11%8%%dii0 	LL33I> / 38/s   :&K77	L c                     g }|j                   D ]  }|| j                  |      gz  } | j                  |j                        }||fS rC   )r^   r   kwarg)r   r\   r[   r`   r  s        r-   visit_argumentszCodeGenerator.visit_arguments  sL    	99 	+C$**S/**I	+jj,+%%r/   c                 P   t         j                  j                  |        t        fd| j                  j
                  D              }|j                  rF|j                  s|j                  r.t        | j                  j                  j                   d      j                  S )Nc              3   V   K   | ]   }|j                   j                  k(  s| " y wrC   )r*   r`   )r   pr\   s     r-   r   z*CodeGenerator.visit_arg.<locals>.<genexpr>  s      I1aff6HQIs   ))z marked as constexpr and listed in do_not_specialize/do_not_specialize_on_alignment. Remove constexpr designation to skip specialization.)r   rs  r   nextr  paramsis_constexprdo_not_specializedo_not_specialize_on_alignmentr$   rY   r`   )r   r\   params    ` r-   	visit_argzCodeGenerator.visit_arg  s    %%dD1I 2 2II5#:#:e>b>b"88* G GH H xxr/   c                 b   | j                  |j                        }| j                  |j                        }| j                  |j                        }|t        k(  rE|| j
                  v rt        | d      t	        |      }|| j
                  |<   | j
                  |   S | j                  |      S )Nz4 is already defined. constexpr cannot be reassigned.)r   r  r  rl   r   r   r{  r   )r   r\   r  r  rl   s        r-   visit_AnnAssignzCodeGenerator.visit_AnnAssign  s    ZZ0
DKK(

4::&"$ F8 ,D "E F Fe$E"'DKK;;v&&  &&r/   c                    t        |j                  t        j                        sJ t        |t        j                        r| j                  ||      S t        |t        j                        r=t        |j                        D ]$  \  }}| j                  ||j                  |          & y t        |t        j                        rt        d      t        |t        j                        sJ | j                  | j                  |      |       y )Nz/Attribute assignment is not supported in triton)rD   r   r   r   	Subscriptvisit_Subscript_Storer	   rX   rv  assignTargetrq   r   r~  r   rR  r   )r   r  rl   r   s       r-   r  zCodeGenerator.assignTarget  s    &**cii000fcmm,--fe<<fcii(&v{{3 ;	6!!&%,,q/:;fcmm,%&WXX&#((+++tzz&)51r/   c                      fdt        |t        j                        r|j                  gn|j                  }t        |      dk(  sJ |d   }t        |t        j                        rF j                  |j                        5    j                  |j                              }d d d        n!  j                  |j                              } j                  |       y # 1 sw Y   xY w)Nc                    t        | t        j                        rt        |       S t        j                  t        j                  f}t        |       } | 2t        |       s't        | |      sj                  j                  |       } | S rC   )	rD   r   r   rp   rK   r   rF   r  	to_tensor)rl   native_nontensor_types_sanitize_valuer   s     r-   r  z3CodeGenerator.visit_Assign.<locals>._sanitize_value  sm    %0-e_EE&.nnhnn%E"(/E $U+u&<=//6Lr/   r#   r   )rD   r   r  r  r  ry   r   rJ  r   r   rl   r  )r   r\   r  r  rq   r  s   `    @r-   r   zCodeGenerator.visit_Assign  s    		 $.dCMM#B4;;-7|q   fchh'&&vyy1 A(DJJ)?@A A %TZZ

%;<F&&)	A As   "C%%C.c                    t        j                  |j                        }t        j                         |_        t        j                  ||j                  |j                        }t        j                  |j                  g|      }dD ]5  }t        ||      st        ||      }t        |||       t        |||       7 | j                  |       | j                  |      S )Nr  )lineno
col_offset
end_linenoend_col_offset)rd  deepcopyr  r   Loadr   BinOpoprl   r   hasattrr   setattrr   )r   r\   lhsrhsassignr   ys          r-   r   zCodeGenerator.visit_AugAssign  s    mmDKK(((*iiTWWdjj1T[[M=I 	&AtQD!$Q"1%		&
 	

6zz#r/   c                     t        |j                        t        j                  u r|j                  S | j                  |j                        S rC   )r+   r   r   r   r   r%  r   s     r-   r   zCodeGenerator.visit_Name  s4    >SYY&77N$$TWW--r/   c                 D    t         j                  j                  | |       y rC   rr  r   s     r-   visit_StorezCodeGenerator.visit_Store  rt  r/   c                 D    t         j                  j                  | |       y rC   rr  r   s     r-   
visit_LoadzCodeGenerator.visit_Load  rt  r/   c                     |j                   D cg c]  }| j                  |       }}t        j                  |      S c c}w rC   )rv  r   r   r   )r   r\   r   r^   s       r-   visit_TuplezCodeGenerator.visit_Tuple  s5    '+yy1!

111~~d## 2s   >c                    t        |      r t        ||      || j                        S t        |      r5t        j                  dd|      } t        ||      || j                        S t        |t        t        j                  f      st        |t              rt        |      }t        |t              rt        ||      }n| j                  ||      }| j                  |||gi       S )N	_semanticz__(.*)__z__r\1__)rH   r   r  r(   subrD   r   r   r   get_Attributecall_Function)r   r\   method_namer  r  reverse_method_namer]   s          r-   _apply_binary_methodz"CodeGenerator._apply_binary_method  s    S!,73,SDMMJJS!"$&&j+"N473 34SDMMRR#	8>>:;
3PY@ZC.Cc9%k*B##C5B!!$SE266r/   c                 `   | j                  |j                        }| j                  |j                        }| j                  j	                  t        |j                              }|5| j                  |dj                  |j                  j                              | j                  ||||      S )Nz8AST binary operator '{}' is not (currently) implemented.)r   leftright_method_name_for_bin_opr   r+   r  r/  formatrZ   r  )r   r\   r  r  r  s        r-   visit_BinOpzCodeGenerator.visit_BinOp  s    jj#jj$2266tDGG}E##D$^$e$efjfmfmfvfv$wy y(({CEEr/   __add____sub____mul____truediv____floordiv____mod____pow__
__lshift__
__rshift____and____or____xor__r  c                 R   | j                   j                  |       | j                  |j                         | j                   j	                         }| j
                  j                         }| j                  j                         }i }|j                         }|j                  r| j                   j                  |       |j                         | _        i | _        | j                  |j                         | j
                  j                         }| j                   j	                         }| j                  j                         }g }	|j                         D ]  \  }
}t        |      st        ||
   g      }t        ||
   g      }||k(  r6|	j                  |
       ||
   ||
<   ||
   ||
<   |df|dffD ]S  \  }}t        ||
         t        |      k(  }|r||
   j                  |j                  k(  r?J d|
 d| d| d||
             t        |j                         |j                         z        D ]i  }
|
|	v r||
   }|j                  }||
   }|j                  }t        |      t        |      k(  }|r||k(  sJ d|
 d| d	| d
       |	j                  |
       k |||||	fS )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   rd  r   r   r  rF   ru   r^  r+   sortedkeys)r   r\   r   
then_block
else_block	then_defs	then_vals	else_defs	else_valsrh  r*   rl   then_handleselse_handlesdefs
block_name
type_equalthen_valthen_tyelse_valelse_tys                        r-   visit_then_else_blocksz$CodeGenerator.visit_then_else_blocks  s   11*=%%dii0\\557
OO((*	KK$$&		LLN	;;LL55jA!,,.DK DO))$++6,,.I99;J((*I "==? 	OKD%#E*/40ABL/40ABL|+LL'oIdO'oIdO&/%89f:M$N O j!$t*-e<
!d4joo&C O)$}UG D)l*A$t*OOCO	O( 9>>+inn.>>? 	Du} HmmG HmmGh4>9J'W"4 .&tf,A' K##*)1..4 LL	 )ZUBBr/   c                 @   t        |       5 }|\  }}| j                  j                         }| j                  j                         }| j                  j                  |       | j                  j	                  |j
                  ||       | j                  ||||      \  }}}| j                  j                         }	| j                  j                  |       |j                         rJ |        t        fd|D              }
| j                  j                  |	|
       | j                  j                  |       |j                         rJ |        t        fd|D              }| j                  j                  |	|       t        |
      t        |      k(  sJ t        |
|      D ];  \  }}|j                         }||j                         k(  sJ |	j                  |       = 	 d d d        | j                  j                  	       t        t        
            D cg c]  }|	j!                  |       }}D cg c]  }|   j"                   }}t%        ||      }t        ||      D ]  \  }}| j'                  ||        y # 1 sw Y   xY wc c}w c c}w )Nc              3   (   K   | ]	  }|     y wrC   rc   r   r*   r  s     r-   r   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>f       /RD	$/R   c              3   (   K   | ]	  }|     y wrC   rc   r   r*   r  s     r-   r   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>k  r+  r,  )r}   r   r\  r  create_cond_branchrO  r'  r  ru   create_branchry   r  get_typeadd_argumentr]  r   r`   r+   r{   rR  )r   rd   r\   srr   ip_blockr  r  rh  endif_blockr  r  then_helse_hr<   r   res_handlesr*   ro   
new_values	new_valuer  r  s                        @@r-   visit_if_top_levelz CodeGenerator.visit_if_top_levelV  sI   d# 	-r "GX224J224JLL33H=LL++DKKZP ++D':zR @Iy*j% ,,335KLL33J?!002CzlC2//RE/RRLLL&&{LALL33J?!002CzlC2//RE/RRLLL&&{LA|$L(9999"%lL"A -__&V__....((,-/	-: 	11+>38\9J3KLa{q)LL278$4%%88(e<
"5*5 	,OD)NN4+	,E	- 	-> M8s   GJ
!J?J
Jc                    t        |       5 }|\  }}| j                         \  }}| j                  j                         }|j                  r| j                  j                         nd }	| j                  ||||	      \  }}	}
t        fd|
D              }t        |
|      D ]  \  }}| j                  ||        | j                  ||       | j                  j                  |D cg c]  }|j                          c}|j                  d      }|j                  |j                                | j                  j                  |j                                t!        |
      dkD  r| j                  j#                  |       |j                  s|j%                         }	n|	j                  |j%                                | j                  j                  |j%                                t!        |
      dkD  rUt        fd|
D              }t        |
|      D ]  \  }}| j                  ||        | j                  j#                  |       d d d        t'        t!                    D cg c]  }j)                  |       }}
D cg c]  }|   j*                   }}t-        ||      }t        |
|      D ]  \  }}| j/                  ||        y c c}w # 1 sw Y   xY wc c}w c c}w )Nc              3   (   K   | ]	  }|     y wrC   rc   r*  s     r-   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>  r+  r,  Tr   c              3   (   K   | ]	  }|     y wrC   rc   r.  s     r-   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>  s     3VIdO3Vr,  )r}   rV  r   r\  r   r'  ru   r  rP  rX  create_if_opr1  rO  merge_block_beforeget_then_blockr  ry   create_yield_opget_else_blockr   
get_resultr+   r{   rR  )r   rd   r\   r3  r   r1   rU  last_locr  r  rh  r  r*   r   hif_opr  r   r8  ro   r9  r:  r  r  s                         @@r-   visit_if_scfzCodeGenerator.visit_if_scf}  s   d# 	;rJGQ<<>LB224J8<224J++D':zR @Iy*j% 0/RE/RRL 5 7	c++C67--b(;LL--\.Rqzz|.RTXT_T_aefE))%*>*>*@ALL33E4H4H4JK5zA~,,\:;;"113
--e.B.B.DELL33E4H4H4JK5zA~33VPU3VV!$UL!9 ;ID#//T:;,,\:5	;8 5:#l:K4LMqu''*MM278$4%%88(e<
"5*5 	,OD)NN4+	,' /S	; 	;8 N8s+   CK(K
?EK)K#K(KK c           	         | j                  |j                        }t        |      r+t        |      r| j	                  |d      |j
                  j                         rat        j                  dt        j                  |j                        z         t        j                  j                  || j                  |       }|j                  t        j                   | j                        }t#        | j$                        j                  |      r1| j&                  r| j	                  |d      | j)                  ||       y | j+                  ||       y t-        |      }t        |      t.        vrO| j	                  |dj1                  dj3                  d t.        D              t        |      j4                              |r|j6                  n|j8                  }| j;                  |       y )	Nz=Boolean value of Tensor with more than one value is ambiguousziIf conditional called with multidimensional Tensor instead of scalar; please use "if (%s).item()" instead)r  
_generatorr  zMCannot have `return` statements inside `while` or `for` statements in triton.O`if` conditionals can only accept values of type {{{}}}, not objects of type {}, c              3   4   K   | ]  }|j                     y wrC   rZ   r   r1   s     r-   r   z)CodeGenerator.visit_If.<locals>.<genexpr>       !G!**!G   )r   testrH   rQ   r/  r+   rO   warningswarnr   unparser   rJ   _unsplatr  toint1r   r   r"  r;  rH  r   _condition_typesr  r7   rZ   r   r   r_  )r   r\   rd   active_blocks       r-   r   zCodeGenerator.visit_If  s   zz$))$T"$T*''.mnnyy!!# Bkk$)),-.  }}--ddmmX\-]778==DMM7BD$T[[177=>>++mo o''d3!!$-'-DDz!11''krr		!G6F!GGT
++-. .
 )-499$++L)),7r/   c           	      8   | j                  |j                        }t        |      rE|j                  t        j
                  | j                        }t        |       5  | j                         \  }}| j                  j                         }| j                  j                  |       | j                  j                  | j                  |j                              }| j                  j                         }| j                  j                         }| j                  j                  |       | j                  j                  | j                  |j                              }| j                  j                         }| j!                  ||       |j"                  |j"                  k(  s!J d|j"                   d|j"                          |j"                  }	|	t        j$                  k7  r|	j'                  | j                        gng }
| j                  j)                  |
|j*                  d      }|j-                  |j/                                |
rO| j                  j1                  |j/                                | j                  j3                  |j*                  g       | j                  j1                  |j/                                |j-                  |j5                                |
rO| j                  j1                  |j5                                | j                  j3                  |j*                  g       |
r/t        j6                  j9                  |j;                  d      |	      nd cd d d        S t=        |      }t#        |      t>        vrO| jA                  |djC                  djE                  d t>        D              t#        |      jF                              |r| j                  |j                        S | j                  |j                        S # 1 sw Y   y xY w)	Nr  zATernary expression with dynamic condition has inconsistent types r  Tr   rK  rL  c              3   4   K   | ]  }|j                     y wrC   rN  rO  s     r-   r   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>  rP  rQ  )$r   rR  rH   rW  r   rX  r  r}   rV  r   r\  r]  r  r   r   r   rX  r+   voidto_irr?  rO  r@  rA  r  rB  rC  rJ   r   rD  r   rY  r/  r  r7   rZ   )r   r\   rd   rU  rE  r  r#  r  r%  r#  ret_type_irrG  s               r-   r   zCodeGenerator.visit_IfExp  s   zz$))$T"778==DMM7BD!$' !d#@@BH!\\668
99*E==224::dii3HI!\\==?
!\\668
99*E  ==224::dkk3JK!\\==?
11"h?}}5 |WX`XeXeWffkltlylykz{|5#==@HHMM@Yx~~dll;<_a11+t{{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!d !dF (-D Dz!11''krr		!G6F!GGT
++-. . zz$)),,zz$++..]!d !ds   LPPc                     g }|j                   D ]  }|j                  } j                  |j                        }|j                  D cg c]  } j                  |       }}t         fd|j                  D              } ||d j                  i|}	|j                  |	        t        ||j                         D ]O  \  }	}|	j                         }
|j                  # j                  |j                        } j                  ||
       Q t         j                        j                  |      r j                  |d       j!                  |j"                         t%        |      D ]  }	|	j'                  d d d         y c c}w )Nc              3   @   K   | ]  }j                  |        y wrC   r   )r   kwr   s     r-   r   z+CodeGenerator.visit_With.<locals>.<genexpr>  s     >"tzz"~>r   r  zCCannot have `return` statements inside `with` statements in triton )r  context_exprr   r   r^   r   keywordsr  r^  r  r   optional_varsrR  r   r   r/  r_  r   reversedr   )r   r\   cm_listr   callr]   r`   r^   kwscmresvar_names   `           r-   
visit_WithzCodeGenerator.visit_With  sR    JJ 	D$$DDII&B/3yy9DJJsO9D9>>>CT:T]]:c:BNN2	 GTZZ0 	.HB,,.C!!-::d&8&89x-		.
 !-33D9##D*opp%%dii07# 	*BKKdD)	* :s   Fc                      y rC   rc   r   s     r-   
visit_PasszCodeGenerator.visit_Pass
  s    r/   c                    t        |j                        dk(  rt        |j                        dk(  s| j                  |d      | j	                  |j
                        }| j	                  |j                  d         }t        |      }t        |      }t        |j                  d         t        j                  u rt        ||u       S t        |j                  d         t        j                  u rt        ||u      S | j                  j                  t        |j                  d               }|8| j                  |dj                  |j                  d   j                              | j!                  ||||      S )Nr#   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)ry   comparatorsopsr/  r   r  r   r+   r   Isr   IsNot_method_name_for_comp_opr   r  rZ   r  )r   r\   r  r  	lhs_value	rhs_valuer  s          r-   visit_ComparezCodeGenerator.visit_Compare  sB   D$$%*s488}/A##D*]^^jj#jj))!,-(-	(-	&Y)344		)Yi7883377TXXa[8IJ##T[[\`\d\def\g\p\pqs s(({CEEr/   __eq____ne____lt____le____gt____ge__ru  c           
         | j                  |j                        }| j                  j                  t	        |j
                              }|*| j                  |d|j
                  j                   d      t        |      r t        ||      | j                        S 	  t        ||             S # t        $ r? |dk(  rt        |       cY S | j                  |d| dt	        |      j                         w xY w)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  r/  rZ   rH   r   r  AttributeErrorr   )r   r\   r  r]   s       r-   visit_UnaryOpzCodeGenerator.visit_UnaryOp"  s    **T\\*++//TWW>:##D,@AQAQ@RRs*tuuW%'77B'$--@@	t'77B')) 	tY W--##,RD0YZ^_fZgZpZpYqrt t	ts   B0 0C8,C8__neg____pos__r  
__invert__r  c           	      `   t        |      sJ d| d       t        |      sJ d| d       t        |      t        |      u s"J d| dt        |       dt        |              t        |      r?|j                  |j                  k(  s%J d| d|j                   d|j                   d	       y y )
Nzcannot reassign constexpr z in the loopr[  z changed type, was z but is now zLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rF   r+   rH   )r   r*   rj  ri  s       r-   rb  z+CodeGenerator._verify_loop_carried_variable5  s    )Z-Gv\+ZZ))Z-Gv\+ZZ)H~h/ 	l$TF*=d8n=M\Z^_gZhYij	l/$X.(--8==2P 	@$TF*<X]]O L%%-]]O 4?@	@P2P.r/   c                     t               5 }|\  }} j                         \  }} j                  ||      \  }}}	|D 
cg c]  }
|
j                          }}
 j	                  ||        j
                  j                  ||      } j
                  j                  |j                         |      } j
                  j                  |       t        t        |            D cg c]  }|j                  |       }}t        ||	      }t        ||      D ]5  \  }}| j                  |<   | j                   |<    j#                  ||       7  j%                  |j&                        }t)        |t*        j,                        rB|j.                  r*|j1                  d j
                  j3                                |j,                  } j
                  j5                  |        j
                  j7                  |j8                  |        j
                  j                  |j;                         |      } j
                  j                  |       t        t        |            D cg c]  }|j                  |       }}t        ||	      }t        ||      D ]5  \  }}| j                  |<   | j                   |<    j#                  ||       7  j<                  j?                  |        jA                  |jB                          j<                  jE                          tG         fd|D              } j
                  jI                  |       d d d        t        t                    D cg c]  }jK                  |       }}t        |	      }t        |      D ]5  \  }}| j                  |<   | j                   |<    j#                  ||       7 |jL                  D ]  }J d        y c c}
w c c}w c c}w # 1 sw Y   xY wc c}w )Nllvm.loop_annotationc              3   <   K   | ]  }j                   |     y wrC   r   r   r*   r   s     r-   r   z,CodeGenerator.visit_While.<locals>.<genexpr>i       0UtT1B0U   zNot implemented)*r}   rV  rm  r1  rX  r   create_while_opcreate_block_with_parent
get_beforer]  r   ry   r`   r{   r  r   r   rP  r   rR  rD   r   	conditiondisable_licmset_attrget_disable_loop_licm_attrr  create_condition_oprO  	get_afterr"  r^  r_  r   r`  ru   rB  rD  r   r   rs  r   )r   r\   r3  r   r   rU  rE  rh  rg  init_fe_tysrF  rf  while_opbefore_blockr   
block_argscondition_argsr*   r   rd   after_blockbody_handles	body_argsyield_handlesresult_handlesresult_valsnew_defrp  s   `                           r-   visit_WhilezCodeGenerator.visit_While?  s{   d# *	8r$&!G\<<>LB/3/A/A$/P,E<.:;

;H;--b(;||33HlKH<<@@ATATAVX`aLLL55lC7<S=N7OP!,**1-PJP0[IN 7 7	c$'D!(+%++C67 ::dii(D$ 2 23$$%%&<dll>e>e>gh~~LL33LALL,,T[[*E,,??@R@R@TV^_K LL55kB8=c,>O8PQ1KOOA.QLQ+L+FI 	2 7	c$'D!(+%++C67 NN!!$'))$))4NN 00Uu0UUMLL((7U*	8Z ;@L@Q:RSQ(--a0SS).+F 4 	7MD' 'DKK$+DOOD!''6	7
 KK 	6D+++5	6] < Q& R?*	8 *	8Z Ts>   3O7 O(BO7"O-:E%O7O27CO7&P(O77P c                    t        |j                  t        j                        sJ | j	                  |j
                        }| j	                  |j                        }t        |      r | j                  ||j                  ||gi       S ||   S rC   )
rD   r   r   r  r   rl   slicerF   call_Method__getitem__)r   r\   r  slicess       r-   visit_Subscript_Loadz"CodeGenerator.visit_Subscript_Loadx  so    $((CHH---jj$DJJ'C ##D#//3"MM6{r/   c                     t        d      )Nz&__setitem__ is not supported in triton)r~  )r   r\   rl   s      r-   r  z#CodeGenerator.visit_Subscript_Store  s    !"JKKr/   c                 $    | j                  |      S rC   )r  r   s     r-   visit_SubscriptzCodeGenerator.visit_Subscript  s    ((..r/   c                 ^    |j                   D cg c]  }| j                  |       c}S c c}w rC   )dimsr   )r   r\   dims      r-   visit_ExtSlicezCodeGenerator.visit_ExtSlice  s"    +/995C

3555s   *c           	      h     j                  |j                  j                        }|j                  j                  D cg c]  } j                  |       }}t	         fd|j                  j
                  D              }|t        j                  k(  r ||i |}t        |j                  j                  |j                  j                  |j                  j                        }|D ]z  }t        |       j                  |j                  j                   <    j#                  |j$                         |j&                  D ]"  }	t(        j*                  j-                   |	       $ | y d }
d }d}d}d}d}|t        j                  u ru ||i |}|j                  }|j                  }|j                  }|j.                  }
|j0                  }|j2                  }|j4                  }|j6                  }|j8                  }n|t        u rt;        |      dkD  r|d   n# j                  t)        j<                  d            }t;        |      dkD  r|d   n' j                  |j                  j                  d         }t;        |      dkD  r|d   n# j                  t)        j<                  d            }nt?        d      d}tA        |      r+|j                  dk  rt        |j                         }d}||}} jB                  jE                  |      } jB                  jE                  |      } jB                  jE                  |      }|jF                  jI                         r4|jF                  jI                         r|jF                  jI                         s3tK        d|jF                   d	|jF                   d	|jF                   d
      tM        |      rtK        d|jN                         tM        |      rtK        d|jN                         tM        |      rtK        d|jN                          jB                  jQ                  |jF                  |jF                        } jB                  jQ                  ||jF                        }|jS                   jT                        }|jV                  t        jX                  jF                  jZ                  j\                  k(  }|j^                  }|j^                  }|j^                  } jT                  ja                  |||      } jT                  ja                  |||      } jT                  ja                  |||      } jT                  jc                  |      } je                  |j                  j                   t        jX                  jg                  ||             ti               5 }|\  }} jk                         \  }} jm                  |||j                  j                   h      \  }}} jo                  ||        jT                  jq                  ||||      } ts        |
      +| ju                  d jT                  jw                  |
             ts        |      +| ju                  d jT                  jw                  |             |r*| ju                  d jT                  jy                                |r*| ju                  d jT                  jy                                |r*| ju                  d jT                  jy                                |r*| ju                  d jT                  j{                                 j|                  j                  |       | j                  d      }! jT                  j                  |!       t        t;        |            D cg c]  }|!j                  |dz          }"}t        |"|      }#t        ||#      D ])  \  }$}% j                  |%|$        je                  |$|%       +  j#                  |j$                          j|                  j                          t         fd|D              }&t;        |&      dkD  r jT                  j                  |&       |!j                         }'|'j                         dk(  sJ d        jT                  j                  |!       | j                         }(|r8 jT                  j                  ||(      }( jT                  j                  |(|      }(|j                  |(        je                  |j                  j                   t        jX                  jg                  |(|              j                  |(|j                  j                          d d d        t        t;                    D cg c]  } j                  |       })}t        |)      }*t        |*      D ])  \  }$}% je                  |$|%        j                  |%|$       + |j&                  D ]  }	J d        y c c}w c c}w # 1 sw Y   xY wc c}w )Nc              3   @   K   | ]  }j                  |        y wrC   r   r   keywordr   s     r-   r   z*CodeGenerator.visit_For.<locals>.<genexpr>  s     Q74::g.Qr   Fr#   r   r   zAOnly `range` and `static_range` iterators are currently supportedTz0For loop bounds and step must all be ints, are (rL  r  z&For lower bound must be a scalar, got z&For upper bound must be a scalar, got zFor step must be a scalar, got )rY  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializer  c              3   <   K   | ]  }j                   |     y wrC   r  r  s     r-   r   z*CodeGenerator.visit_For.<locals>.<genexpr>  r  r  z7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Pr   r|  r   r^   r   rd  r   static_ranger   startrl   endstepr   r   r  r   r_  r   r   r   rs  r   
num_stagesloop_unroll_factordisallow_acc_multi_bufferflattenwarp_specializer  ry   ConstantRuntimeErrorrL   r  r  rK   is_int	TypeErrorrQ   r+   integer_promote_implr^  r   int_signednessrJ   
SIGNEDNESSSIGNEDrO  create_int_castr  rR  r   r}   rV  rm  rX  create_for_opr   r  get_int32_attrget_unit_attrr  r"  r^  get_bodyr]  r`   r{   r  rP  r`  ru   rB  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_withrD  )+r   r\   IteratorClassr`   	iter_argsiter_kwargsiteratorr  r   rp  r  r  r  r  r  r  lbubr  negative_stepiv_type
iv_ir_typeiv_is_signediv_placeholderr3  r   r   rU  rE  rh  rg  rf  for_opfor_op_bodyblock_handlesr  r*   r   r  for_op_regionivr  result_valuess+   `                                          r-   	visit_ForzCodeGenerator.visit_For  s8   

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

4::&

4::&zz$))$~~eUD11r/   c                 8    | j                  |j                        S rC   )r   rl   r   s     r-   visit_IndexzCodeGenerator.visit_Index  s    zz$**%%r/   c                 P    |j                   | j                  |j                        fS rC   )r`   r   rl   r   s     r-   visit_keywordzCodeGenerator.visit_keyword  s    xxDJJ///r/   c                     | j                  |j                        }|j                  | j                  |j                        nd}t        j                  j                  ||| j                        S )Nr  r  )r   rR  msgr   rJ   device_assertr  )r   r\   rR  r  s       r-   visit_AssertzCodeGenerator.visit_Assert  sQ    zz$))$&*hh&:djj"}}**4*NNr/   r]   c                     |j                   j                  |i |}|j                          |j                  }|j                  D cg c]  }||   	 }}t        |      D ]H  \  }}t        |t              rt        |t              s't        j                  j                  |      ||<   J |xs | j                  }|D cg c]  }|j                   }	}t        t        |      |	|      }
| j                   j#                  |
      st%        |      \  }}t'        g |	t)                     }t+        | j,                  ||j/                         | j                   ||
| j0                  |j2                  ||| j4                  j6                  | j4                  j8                  | j4                  j:                  || j<                        }	 |j?                  |jA                                |jR                  }|| j0                  |
<   n| j0                  |
   }| j                   jU                  |
      }tW        |      }| j4                  jY                  ||      }t[        |j]                               D cg c]  }|j_                  |       }}ta        tc        ||g            S c c}w c c}w # tB        $ rL}tD        jF                  jH                  r tK        | jL                  jN                  | jP                  d       |d }~ww xY wc c}w )N)r  r  r   r  rW   r  r  r  r  r  r;   r  )2	signaturebindapply_defaults	argumentsr[   rX   rD   r   r   r   rJ   r   r;   r+   r?   r   r  has_functionr   r   r   r  r  get_capture_scoper  rW   r   r  r  r  r  r   parse	Exceptionr   r>  front_end_debuggingr$   r  rY   r!  r#  get_functionru   rh  r   get_num_resultsrD  r  r{   )r   r]   r^   r   r;   
bound_argsr*   r   r`   r   fn_namer  r  r  r   ecallee_ret_typesymbolargs_valcall_oprt   s                        r-   call_JitFunctionzCodeGenerator.call_JitFunction#  s   &R\\&&77
!!###')||4tT
44o 	7FAsc:.*S+2N"--11#6Q	7 (>4+>+>)-.#SXX.	.M"-y.I{{''0$8$<!Iz#B	46:I%dllIr?S?S?U^b^i^irt4;DLcLc/1{{i\f.2ll.B.BPTP\P\PhPh151H1HYg/3}}>IT
+ (00O/>D##G,"55g>O))'2'-,,##FH5278O8O8Q2RSQ7%%a(SS'/1BCDDG 5 /  T$$88&t{{tLRSS	T Ts+   J?J?J  &K8 	K5)AK00K5c                    t        |t        t        f      r(|j                  d|j                         |j
                  }t        |dd      }|rt        |dd      rtdt        j                  |j                        z  g}t        |t              r|j                  |       t        | j                  j                  |dj                  |            t        |t               r t#        |||       | j%                  |||      S t'        |d      rt)        |j                        s/t*        j,                  j/                  |      st        |t0              rt3               }t        |dd       }t        |t0              r| j4                  |d	<   nG|t7        j8                  |      }d	|j:                  v r| j4                  |d	<   d
|j:                  v r| |d
<   	  ||i ||}	t        |	t<              rt+        j<                  |	      }	|	S || jF                  jI                         v s!t'        |d      r%t)        |j                        stK        tL        |      } ||i |}	d }t        |	tN        j<                  t*        j<                  f      rtQ        |	|      S  ||	      S # t>        $ rK}
t@        jB                  jD                  r t        | j                  j                  |t        |
            |
d }
~
ww xY w)Nr   _must_use_resultF
_is_unusedz#The result of %s is not being used.r<  r   r  r  rJ  c                 2    t        |       r| S t        |       S rC   )rF   r   )r   s    r-   wrap_constexprz3CodeGenerator.call_Function.<locals>.wrap_constexpr~  s    "Q<r/   ))rD   r   r   insertr   r   r   r   rU  r   rG  r^  r$   r  rY   r7   r   ra   r  r  rF   r   rJ   
is_builtinr   r   r  inspectr  
parametersr   r  r   r>  r  r)  rq   mapr   builtinsrp   )r   r\   r]   r^   ri  murerror_messageextra_kwargssigr>   r   r
  s               r-   r  zCodeGenerator.call_FunctionL  ss   b>+ABCKK2;;'Bb,e474u5BS[[QUQZQZE[[\M#s#$$S)"4;;??D#((=:QRRb+&4T*((T377B
#(8(E(--JbJbceJfjt%k'6L"k40C"/0,0MM[);!++B/C#..004L-3>>115L.M$6,6#6c5)"..-C
 ''..00WR5LUefhfqfqUr+T2D$#	 
 cHNNHNN;<)#~>>c""-  	M$$88 't{{c!fE1L	Ms   0J 	K)AK$$K)c                 n    t        |t              r|j                  d|       | j                  ||||      S rw   )rD   r   r  r  )r   r\   r]   fn_selfr^   ri  s         r-   r  zCodeGenerator.call_Method  s1    b+&KK7#!!$D#66r/   c                 p    t         j                  |j                              }t        |t              s& j
                  j                  |      }|	 | |      S t         fd|j                  D              }g }|j                  D ]  }t        |t        j                        r] j                  |j                        }t        |t        j                  j                        sJ |j!                  |j"                         z|j%                   j                  |               j'                  ||||      S )Nc              3   @   K   | ]  }j                  |        y wrC   r   r  s     r-   r   z+CodeGenerator.visit_Call.<locals>.<genexpr>  s     D74::g&Dr   )r   r   r   rD   r    statically_implemented_functionsr   r   rd  r^   r   Starredrl   r   rJ   r   rc  rq   r^  r  )r   r\   r]   static_implementationri  r^   r`   s   `      r-   r   zCodeGenerator.visit_Call  s    !$**TYY"78"n-$($I$I$M$Mb$Q!$0,T488DdmmDD99 	-C#s{{+jj+!#x}}':':;;;CJJ'DJJsO,	- !!$D#66r/   c                 ,    t        |j                        S rC   )r   rl   r   s     r-   visit_ConstantzCodeGenerator.visit_Constant  s    $$r/   c           
         | j                   j                  t        |j                              }|5| j	                  |dj                  |j                  j                              g }|j                  D ]  }| j                  |      }t        |      s't        |      }|du r	|dk(  r|c S |du s<|dk(  sB|c S |j                  j                         rYt        |dd       }||| j                  z  }t        j                  dt         | j"                  |t%        j&                  |             |j)                  |        t+        |      d	k(  r|j)                         t+        |      d
k\  rT|j-                         }|j-                         }	| j/                  |||	|      }
|j)                  |
       t+        |      d
k\  rTt+        |      dk(  sJ |d	   S )Nz9AST boolean operator '{}' is not (currently) implemented.Flogical_andT
logical_orr  zeLogical operators 'and' and 'or' are deprecated for non-scalar tensors; please use '&' or '|' instead)rf   filenamer  sourcer   r   r#   )_method_name_for_bool_opr   r+   r  r/  r  rZ   rq   r   rH   r   rO   r   r  rS  warn_explicitUserWarningr  r   rU  r^  ry   r`  r  )r   r\   r  nontrivial_valuessubnoderl   bvr  r  r  rk  s              r-   visit_BoolOpzCodeGenerator.visit_BoolOp  s   3377TWWF##QXXY]Y`Y`YiYijl l {{ 	0G JJw'E$U+%[%Kk]&B L$J[L%@ L ::&&($T8T:F)$//1**!,!%%"{{40 "((/9	0<  !Q& $$U+#$)#'')C#'')C++D+sCHC$$S)	 #$) $%*** ##r/   r  r   r#  c                    t        |      r!|dk(  r| j                  j                  |d      S t        |t              r|dvr|j
                  }t        ||      }t        |      rt        |t              rt        ||      S |S )NT)r#   r   )rl   r+   )
rH   r  permuterD   r   rl   r   rF   r   r   )r   r  r   s      r-   r  zCodeGenerator.get_Attribute  sq    S!dck==((f55c9%$6G*G))CsD!C Zk%B!#t,,r/   c                 t   | j                  |j                        }t        |t              rr|j                  x}| j
                  j                  v rN| j
                  j                  |   }|j                  |k(  rn%|j                  x}| j
                  j                  v rN| j                  ||j                        S rC   )	r   rl   rD   r   rZ   r   r  r  r   )r   r\   r  r*   s       r-   r   zCodeGenerator.visit_Attribute  s    jj$c:&<<'4DLL,C,CCll--d3<<4' <<'4DLL,C,CC !!#tyy11r/   c                 f    d|j                   _        t        j                  j	                  | |       y r   )rl   r  r   rs  r   r   s     r-   
visit_ExprzCodeGenerator.visit_Expr  s"     $

%%dD1r/   c                      y rC   rc   r   s     r-   visit_NoneTypezCodeGenerator.visit_NoneType  r   r/   c           
      p   t        |j                        }t        |      D ]  \  }}t        |t        j
                        rt        |j                        ||<   :t        |t        j                        r|j                  }| j                  |j                        }t        |      s'| j                  |dt        t        |            z         |dk  rdndt        |      z   dz   j                  |j                        ||<   t!        dj                  t        |                   dj#                  |      S )Nz^Cannot evaluate f-string containing non-constexpr conversion values, found conversion of type r   z{}z{!}z:encountered unexpected node of type {} in a JoinedStr noder  )rS   rq   rX   rD   r   r  rG  rl   FormattedValue
conversionr   rL   r/  r+   chrr  AssertionErrorr7   )r   r\   rq   r   rl   conversion_code	evaluateds          r-   visit_JoinedStrzCodeGenerator.visit_JoinedStr  s   dkk"!&) 	wHAu%.,q	E3#5#56"'"2"2 JJu{{3	$Y/++xd9o./0 0 &5q%8TdSEY>Y\_>_gghqhwhwxq	$%a%h%himnsit%uvv	w wwvr/   c                 f   |y | j                   }| j                  j                         }|| _         t        |d      rt        |d      r| j                  j	                  | j
                  | j                  |j                  z   |j                        }| j                  @| j                  j                  | j                  j                  | j                  |             n| j                  j                  |       | j                  j                         }	 t        | 5  |      }|r"|| _         | j                  j                  |       |S # t        $ r  t        $ rU}t         j"                  j$                  r t        | j&                  j(                  | j                   t+        |            d d }~ww xY w)Nr  r  )r!  r   rN  r  
create_locr  r  r  r  r  r  rM  superr   r$   r  r   r>  r  r  rY   repr)r   r\   	last_noderE  here_locr>   r   	__class__s          r-   r   zCodeGenerator.visit  sY   <MM	<<'')4"wt\'B||..t~~tQUQ\Q\?\^b^m^mnH&&2$$T\\%A%A$BYBY[c%de$$X.||++-H		V'-%C %DMLL  *
   	 	V  44 #4;;??DMM47KQUU	Vs   E	 	F0AF++F0c                 j    | j                  |dj                  t        |      j                              )Nzunsupported AST node type: {})r/  r  r+   rZ   r   s     r-   r   zCodeGenerator.generic_visit$  s,    &E&L&LTRVZM`M`&abbr/   c                    t        |j                        }d|cxk  rdk  r"n t        d      t        |j                        rt        d      t	        | j                  |j                  d               }t        |t              st        d      |sQ|dk(  rd}n	 | j                  |j                  d         }t        | j                  j                  |t	        |            y # t        $ r}dt        |      z   dz   }Y d }~Jd }~ww xY w)	Nr   r   z=`static_assert` requires one or two positional arguments onlyzqAssertion condition could not be determined at compile-time. Make sure that it depends only on `constexpr` valuesr#   r  z'<failed to evaluate assertion message: >)ry   r^   rd  r  r   r   rD   r   r~  r  r>  r%   r  rY   )r   r\   	arg_countpassedr.  r   s         r-   execute_static_assertz#CodeGenerator.execute_static_assert'  s    		N	I""[\\ (+4=='9[\\%djj1&>?&$'% D  A~X"jj16G .dkkootEYZaEbcc	 ! XG$q'QTWWGXs   C$ $	D-DDc                 4     dt         j                  f fd}|S )Nr\   c                      fd|j                   D        D ci c]  \  }}|t        |       }}}|j                  D cg c]  }t         j                  |             }}t	         |i |      S c c}}w c c}w )Nc              3   @   K   | ]  }j                  |        y wrC   r   r  s     r-   r   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>B  s     #UGDJJw$7#Ur   )rd  r   r^   r   r   )r   r\   r*   rl   ri  r`   r^   	python_fns   `      r-   r>   z*CodeGenerator.static_executor.<locals>.ret?  s     $Vt}}#UD% *511C  FJYYOc(C9ODOY4455 Ps   A6!A<)r   r   )rK  r>   s   ` r-   static_executorzCodeGenerator.static_executor=  s    	6CHH 	6 
r/   r   )r   r  rC   )rZ   r   r   r   r   r   rG  r   ry   rS   r   floatintrD   r   r  r)  r   r   updater   rJ   device_printbuiltin_minbuiltin_maxr/  r3  r$  
contextlibcontextmanagerrJ  rP  r   r   r   rR  rV  rX  setrm  r_  r   rx  r   ListCompr  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'  r;  rH  r   r   rm  ro  rx  EqNotEqLtLtEGtGtEru  cmpopr  USubUAddNotInvertr  unaryoprb  r  r  r  r  r  r  r  r  r	   r  r  r  r  r  r   r  BoolOpr)  AndOrr#  boolopr  r   r/  r1  r:  r   r   r   rG  rL  experimental.gluonttglstatic_assertstatic_printr*  r  r1  r   __classcell__)r   r1   rA  s   00@r-   r  r    s    /3efjQUbc@0+ @0U]^bUc@0AI#@0H tUE3
GWM) 	


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

L

L

I		8

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

#3S#89j	22$<c#(( t ,
 6##%:""OE$:1?51_S!_S!Q$d68SXXJO3L+L&M i')s   Or  c                    d gt        | j                        z  }|j                  j                         D ]/  \  }}	| j                  j	                  |      }
t        |	d       ||
<   1 fd|j                  j                         D ]  \  }} |t        |      d d d   |         t        g ||j                        }t        |       \  }}ddlm} t        d |j                        }|D ci c]"  }| j                  |d      |j                  |   $ }}|j                  }  |dddg      ||      }t        ||| j                         | j!                  |      | d	||||||| j#                         
      }|j%                  | j'                                |j(                  }||_        |j-                         s&| j#                         st/        |       t1        d      |S c c}w )Nc                     |j                         }t        |      dk(  rLt        | t              rt	        |      j
                  | |<   y t	        |      j
                  | j                  |<   y  | |   ||       y rw   )r`  ry   rD   rS   r   r+   ro   )argumentindicesrl   indexapply_constexpr_typess       r-   r~  z*ast_to_ttir.<locals>.apply_constexpr_types[  sa    w<1(D)"+E"2"7"7(1%(8(=(=u%!(5/7EBr/   r  r   )
namedtuplec                     t        |       dk(  S rN   )ry   )rm   s    r-   r  zast_to_ttir.<locals>.<lambda>l  s    c!fk r/   SpecializationProxy	constantsr  T)r   r   r  r  r  r  r  r  r  r  r  z error encountered during parsing)ry   r[   r  r  r}  r   r  rS   r   r   r   collectionsr  filterr  r  r>  r  r   r  r  r  verifyr*  r  )r]   rY   r  r  r  r  r  r   r'  rm   r_   r   rl   r  r  r  r  leavesr   r  r  proxyr   r~  s                          @r-   ast_to_ttirr  T  s   R\\**I##% ,1ll  #"1d+	#,C }}**, BeidDbD)95AB B	3995I04Iz&)3==9F?EF!ad#S]]1%55FIFIIJ,{K.HI)U^_Egy9M9M9O_a_f_fgl_m%'49Ycmt*5*U[fhfqfqfsuI OOBHHJFFN==?{{}&M=>>M Gs   -'G!rC   )Nr   r  rS  rd  r  r  r(   rS  rA  dataclassesr   ro   r   typingr   r   r   r   r	   r
   r   r   r   r  r   r   _C.libtritonr   r   r   r   r   r   r}  language.corer   r   r   runtime.jitr   r   r   r   r   r   _utilsr    r!   r"   errorsr$   r%   r&   r.   r?   r   rF   rH   rL   rQ   rT   ra   r  rg   rp   ru   rl   r{   rN  r+   rY  r}   rs  r   r   r   r  r  rc   r/   r-   <module>r     s~   
      	   !  T T T  ' F F G G C  C F F a a	% % %! ! !US UT UNS NT N(S (T ( #, !
D*!5 "bhh "Y " #tDz* 3 3*T%COO T%n. .b $  
COO D*'r/   