
    ܶiY                       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.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=d Z>dee#         fdZ?deej@                 dee$         fdZAe7eB eCd          hZDd ZEd ZF G d  d!          ZG G d" d#e jH                  ZI G d$ d%          ZJ e	d&'           G d( d)                      ZK G d* d+e jH                  ZLd-d,ZMdS ).    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)find_paths_ifget_iterable_pathset_iterable_pathis_namedtuple   )CompilationErrorCompileTimeAssertionFailureUnsupportedLanguageConstructc                 `    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      c/root/projects/openclaw-proxy/venv/lib64/python3.11/site-packages/triton/compiler/code_generator.pycheck_identifier_legalityr/      sB    )G8GT"" KC$CCTCCTJJJK    c                    d                     d |D                       }d                     fdt                    D                       }|                    dd          }|                    dd          }|                    dd                              d	d          }|  d
| d
| }|||                                z  }|S )N_c                 6    g | ]}|                                 S  )mangle).0tys     r.   
<listcomp>zmangle_fn.<locals>.<listcomp>!   s     !@!@!@""))++!@!@!@r0   c                 D    g | ]}| d t          |                    S )c)repr)r6   i	constantss     r.   r8   zmangle_fn.<locals>.<listcomp>"   s3    !Y!Y!Y!Q"="=il););"="=!Y!Y!Yr0   ._d_'_sq_[]__)joinsortedreplacer5   )r+   arg_tysr=   caller_contextmangled_arg_namesmangled_constantsrets     `    r.   	mangle_fnrM      s    !@!@!@!@!@AA!Y!Y!Y!YviGXGX!Y!Y!YZZ)11#u==)11#v>>)11#s;;CCCMM
=
=&
=
=*;
=
=C!~$$&&&Jr0   oreturnc                 ,    t          | t                    S N)
isinstancer   rN   s    r.   _is_triton_valuerT   -   s    a$$$r0   c                 ,    t          | t                    S rQ   )rR   r   rS   s    r.   _is_triton_tensorrV   1   s    a   r0   c                 b    | d u p+t          | t          t          j        j        t
          f          S rQ   )rR   r   r   coredtyper   rS   s    r.   _is_constexprrZ   5   s'    9T
1y(-2E{&STTTr0   c                 r    t          |           o(| j                                        o| j        j        dk    S Nr$   )rV   r,   is_blocknumelrS   s    r.   _is_non_scalar_tensorr_   9   s/    QMQV__%6%6%L16<1;LMr0   c                 :    t          | t          t          f          S rQ   )rR   listr   rS   s    r.   _is_list_likerb   =   s    a$'''r0   c                     |j         rbt          |          D ]T\  }}t          |          s>t          |          r/t	          |j        | d|j         d|j        |          d|           Sd S d S )Nz	Function z= is marked noinline, but was called with non-scalar argument :)noinline	enumeraterZ   r_   r'   src__name__	arg_names)nodefnargsidxargs        r.   _check_fn_argsro   A   s    	{ !$ 	 	HC %% *?*D*D 2FD D  D  Djljvwzj{  D  D  B  D  D   	 	r0   c                 j   t          t          |                     r| j        }nAt          | t          j                  r| j        j        }nJ dt          |                        fd| D             }d |D             }d |D             }t	          j        |t	          j        ||                    S )NFzUnsupported type c                 &    g | ]} |          S r4   r4   )r6   vrk   s     r.   r8   z*_apply_to_tuple_values.<locals>.<listcomp>S   s!    !!!aBBqEE!!!r0   c                 4    g | ]}|t          |          n|S rQ   )r   r6   rr   s     r.   r8   z*_apply_to_tuple_values.<locals>.<listcomp>T   s&    ;;;AIIaLLL1;;;r0   c                     g | ]	}|j         
S r4   r,   rt   s     r.   r8   z*_apply_to_tuple_values.<locals>.<listcomp>U   s    """QV"""r0   )r#   r,   _fieldsrR   r   r   fields
tuple_type)valuerk   rx   valstypess    `   r.   _apply_to_tuple_valuesr}   K   s    T%[[!! 8	E8>	*	* 8"77$u++77777!!!!5!!!D;;d;;;D""T"""E>$ 3E6 B BCCCr0   valuesc                 >    g }| D ]}|                     |           |S rQ   )_flatten_ir)r~   handlesrr   s      r.   flatten_values_to_irr   Y   s0    G  	gNr0   r   r|   c              #   |   K   d}|D ]}|                     | |          \  }}|V   |t          |           k    sJ d S Nr   )_unflatten_irlen)r   r|   cursorr7   rz   s        r.   unflatten_ir_valuesr   `   s[      F  ((&99vS\\!!!!!!r0   c                 p    g }|                      |           | j                            |d          \  }}|S r   )r   r,   r   )valr   cloner2   s       r.   _clone_triton_valuer   k   s9    GOOGx%%gq11HE1Lr0   c                 >    d |                                  D             S )Nc                 V    i | ]&\  }}|t          |          rt          |          n|'S r4   )rT   r   )r6   r+   r   s      r.   
<dictcomp>z _clone_scope.<locals>.<dictcomp>s   s=    lllQZQUWZD.>s.C.CL%c***lllr0   )items)scopes    r.   _clone_scoper   r   s#    ll^c^i^i^k^kllllr0   c                        e Zd Zd Zd Zd ZdS )enter_sub_regionc                     || _         d S rQ   )	generator)selfr   s     r.   __init__zenter_sub_region.__init__x   s    "r0   c                 :   t          | j        j                  | _        t          | j        j                  | _        i | j        _        | j        j                                        | _        | j        j        	                                | _
        | j        | j        fS rQ   )r   r   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__{   sv    #DN$9::%dn&?@@$&! N2FFHH N2FFHH|T...r0   c                     | j         j                            | j                   | j        | j         _        | j        | j         _        d S rQ   )r   r   restore_insertion_pointr   r   r   r   r   )r   rl   kwargss      r.   __exit__zenter_sub_region.__exit__   s<    66t7HIII $$(N!!!r0   N)rh   
__module____qualname__r   r   r   r4   r0   r.   r   r   v   sA        # # #/ / /3 3 3 3 3r0   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j        defdZdej        defdZdS )ContainsReturnCheckerc                     || _         d S rQ   )gscope)r   r   s     r.   r   zContainsReturnChecker.__init__   s    r0   rO   c                 :     t           fd|D                       S )Nc              3   B   K   | ]}                     |          V  d S rQ   visit)r6   sr   s     r.   	<genexpr>z5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>   s-      //Q4::a==//////r0   )any)r   bodys   ` r.   _visit_stmtsz"ContainsReturnChecker._visit_stmts   s&    ////$//////r0   c                     dS NFr4   )r   rk   s     r.   _visit_functionz%ContainsReturnChecker._visit_function   s	     ur0   c                 8   d}t          j        |          D ]\  }}t          |t                    r7|D ]3}t          |t           j                  r|p|                     |          }4Qt          |t           j                  r|p|                     |          }|S r   )astiter_fieldsrR   ra   ASTr   )r   rj   rL   r2   rz   items         r.   generic_visitz#ContainsReturnChecker.generic_visit   s    -- 	/ 	/HAu%&& /! 6 6D!$00 6!5TZZ%5%56 E37++ /.TZZ..
r0   rj   c                     t          |j        t          j                  rV|j        j        | j        v rA| j        |j        j                 }t          ||j                  }|                     |          S dS | 	                    |j                  S r   )
rR   rz   r   Nameidr   getattrattrr   r   )r   rj   rz   rk   s       r.   visit_Attributez%ContainsReturnChecker.visit_Attribute   sy     dj#(++ 	z}++DJM2UDI..++B///5zz$*%%%r0   c                     t          |j                  t          j        u rdS |j        | j        v r'| j        |j                 }|                     |          S dS r   )r,   ctxr   Storer   r   r   )r   rj   rk   s      r.   
visit_Namez ContainsReturnChecker.visit_Name   sR    >>SY&&57dk!!TW%B''+++ur0   c                     dS NTr4   r   rj   s     r.   visit_Returnz"ContainsReturnChecker.visit_Return       tr0   c                     dS r   r4   r   s     r.   visit_Assignz"ContainsReturnChecker.visit_Assign   	     ur0   c                     dS r   r4   r   s     r.   visit_AugAssignz%ContainsReturnChecker.visit_AugAssign   r   r0   c                 6    |                      |j                  S rQ   r   r   r   s     r.   visit_Modulez"ContainsReturnChecker.visit_Module         +++r0   c                 6    |                      |j                  S rQ   r   r   s     r.   visit_FunctionDefz'ContainsReturnChecker.visit_FunctionDef   r   r0   c                     |                      |j                  }|j        r|p|                      |j                  }|S rQ   )r   r   orelse)r   rj   rL   s      r.   visit_IfzContainsReturnChecker.visit_If   sB     	**; 	87**4;77C
r0   c                 j    |                      |j                  p|                      |j                  S rQ   )r   r   r   r   s     r.   visit_IfExpz!ContainsReturnChecker.visit_IfExp   s)    zz$)$$?

4;(?(??r0   c                 6    |                      |j                  S rQ   )r   funcr   s     r.   
visit_Callz ContainsReturnChecker.visit_Call   s    zz$)$$$r0   N)rh   r   r   r   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   r4   r0   r.   r   r      s         0D 0 0 0 0T    	T 	 	 	 	&CM &d & & & &sx D              
CM d    
, , , , , ,,co ,$ , , , ,SV     @	 @d @ @ @ @%sx %D % % % % % %r0   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d	S )
ASTFunctionc                 >    || _         || _        || _        || _        d S rQ   )	ret_types	arg_typesr=   attrs)r   r   r   r=   r   s        r.   r   zASTFunction.__init__   s"    """


r0   r   r|   rO   c                 F    g }|D ]}||                     ||           |S rQ   )_flatten_ir_types)r   r   r|   ir_typesr7   s        r.   flatten_ir_typeszASTFunction.flatten_ir_types   s<     	4 	4Bz  (3333r0   c                 8    |                      || j                  S rQ   )r   r   )r   r   s     r.   return_types_irzASTFunction.return_types_ir   s    $$Wdn===r0   c                       fd}t          t           j        |                    } fd|D             }                     ||          }                     |          }|                    ||          S )Nc                     | j         vo|d uS rQ   r=   pathr2   r   s     r.   <lambda>z'ASTFunction.serialize.<locals>.<lambda>       T^!;!M r0   c                 :    g | ]}t          j        |          S r4   )r!   r   )r6   r   r   s     r.   r8   z)ASTFunction.serialize.<locals>.<listcomp>   s&    SSS&t~t<<SSSr0   )ra   r    r   r   r   get_function_ty)r   r   is_val	val_pathsr   arg_types_irret_types_irs   `      r.   	serializezASTFunction.serialize   s     NMMMt~v>>??	SSSSSSS	,,Wi@@++G44&&|\BBBr0   c                 f    fd  j                   } fd}t          t           j         |                    }d}fdt                                                    D             }|D ]{}t           j         |          } j                            |g           }	|	D ]\  }
}                    ||
|           |	                    ||          \  }}t          |||           | j        }|                                D ](\  }}t          ||t          j        |                     )|S )Nc                     t          | t          t          t          j        f          r!t          j        fd| D             |           S t          j        d           S )Nc                 &    g | ]} |          S r4   r4   )r6   xmake_templates     r.   r8   zBASTFunction.deserialize.<locals>.make_template.<locals>.<listcomp>  s#    &D&D&DA}}Q'7'7&D&D&Dr0   )rR   ra   r   r   ry   r   )r7   r
  s    r.   r
  z.ASTFunction.deserialize.<locals>.make_template  sX    "tUH,?@AA J~&D&D&D&D&D&D&DbIII%d+++r0   c                     | j         vo|d uS rQ   r   r   s     r.   r   z)ASTFunction.deserialize.<locals>.<lambda>  r   r0   r   c                 :    g | ]}                     |          S r4   )rl   )r6   r<   rk   s     r.   r8   z+ASTFunction.deserialize.<locals>.<listcomp>  s#    @@@!2771::@@@r0   )r   ra   r    rangeget_num_argsr!   r   getset_arg_attrr   r"   r=   r   r   r   )r   rk   r{   r  r  r   r   r   r7   
attr_specs	attr_nameattr_valr   r=   r
  s   ``            @r.   deserializezASTFunction.deserialize   sc   	, 	, 	, 	, 	,
 }T^,,MMMMt~v>>??	@@@@uR__->->'?'?@@@ 	/ 	/D"4>488Bb11J'1 = =#	8	8<<<<**7F;;KCdD#....N	"** 	C 	CID#dD(*<S*A*ABBBBr0   N)rh   r   r   r   r   r   r   r   r,   r   r   r  r  r4   r0   r.   r   r      s          
 4	? tTVT[}    >rz >d27m > > > >C C C C C    r0   r   T)frozenc                   $    e Zd ZU eed<   eed<   dS )BoundJITMethod__self____func__N)rh   r   r   r   __annotations__r   r4   r0   r.   r  r    s*         r0   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d	 ee	e
eeeeefD             Zeeef         ed
<   e                    dej        j        fdej        j        fdej        j        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+j,        fdZ-d  Z.d! Z/d" Z0d# Z1d$ Z2d% Z3d& Z4d' Z5d( Z6d) Z7d* Z8d+ Z9d, Z:d- Z;e+j<        d.e+j=        d/e+j>        d0e+j?        d1e+j@        d2e+jA        d3e+jB        d4e+jC        d5e+jD        d6e+jE        d7e+jF        d8e+jG        d9iZHeeIe+jJ                 ef         ed:<   d; ZKd< ZLd= ZMd> ZNd? ZOd@ ZPdA ZQdB ZRe+jS        dCe+jT        dDe+jU        dEe+jV        dFe+jW        dGe+jX        dHiZYeeIe+jZ                 ef         edI<   dJ Z[e+j\        dKe+j]        dLe+j^        dMe+j_        dNiZ`eeIe+ja                 ef         edO<   dP ZbdQ ZcdR ZddS ZedT ZfdU ZgdV ZhdW ZidX Zjdekeef         fdYZldefdZZmdqd[efd\Znd] Zod^ Zpd_ Zqd` Zrde+js        fdaZte+ju        dbe+jv        dciZweeIe+jx                 ef         edd<   de Zydf Zzdg Z{dh Z|di Z} fdjZ~dk Zde+j        ddfdlZdm ZdndolmZ ej        j        eej        j         ee          ej        eej         ee          e ee          e ee          iZeeee+j        gef         f         edp<    xZS )rCodeGeneratorNFr   )module	is_kernelfunction_typesre   rI   	file_name
begin_linejit_fnr  r   c                   || _         |	| _        |	r5ddlm} t	          j        |          | _         || j                  | _        n4ddlm	} t          j        |          | _         || j                  | _        d | _        || _        |dz
  | _        | j                            ||d           || j        _        || j        _        |i n|| j        _        |
| j                                        n|
| _        |i n|| _        || _        i | _        |                                D ]\  }}t1          |t2                    r$|                    |j        |          | j        |<   >t9          |dd          }||v r$t9          ||         |j                  | j        |<   w|| j        |<   i | _        || _        |r0||                    d          dz   d          }tA          |d          }|| _!        || _"        d | _#        || _$        || _%        g | _&        d | _'        i | _(        | )                                | _*        d | _+        d	| _,        d S )
Nr   )GluonSemantic)TritonSemanticr$   r    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	prototyper   r   rR   r   r  rh   r   r   r"  rfindr/   function_namer  cur_nodere   rI   	scf_stackret_typer   _define_name_lookupdereference_namerk   visiting_arg_default_value)r   r(  r5  r   r7  r"  r0  r1  r2  r)  r  r  r  re   rI   r   r!  r$  r%  krr   module_names                         r.   r   zCodeGenerator.__init__$  se      	9RRRRRR#27;;DL)M$,77DMM??????:g..DL*N4<88DM"&"$q.Y
A666& $/ (2(:""
6<ndl00222&(6(>""N"LLNN 		# 		#DAq!Z(( !+
A!>!>A!!\266Kj((!(K)@!*!M!MA!"A 	Q)-*=*=c*B*BQ*F*G*GHM5mZPPM*" , .06:6N6N6P6P +0'''r0   c                     i | ]
}|j         |S r4   rh   r6   r2   s     r.   r   zCodeGenerator.<dictcomp>c  s,     ) ) ) 	

A) ) )r0   builtin_namespaceprintminmaxc                 8    t          | j        j        ||          S rQ   )r'   r"  rg   )r   rj   messages      r.   _unsupportedzCodeGenerator._unsupportedm  s    +DKOT7KKKr0   c                     t                      }| j                            ||          }||u rdS t          |          rdS dS )NFT)objectr   r  rZ   )r   r+   absent_markerr   s       r.   _is_constexpr_globalz"CodeGenerator._is_constexpr_globalp  sJ    koodM22-5 	4ur0   c                      dt           f fddt           f fdt                      dt           dt          f fd}|S )Nr+   c                 :    j                             | |          S rQ   )r   r  )r+   absentr   s     r.   local_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookup}  s    ;??4000r0   c                    j                             | |          }t          ||u | j        v t	          |          t
          u t          |t                    t          |dd          t          |dd          t          |dd          	                    d          t          |dd          	                    d          t          |t          j                  t          |                              |           j        t          j        j        g          r|S t%          t'          j        d|  d	                              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   rC  r,   r   rR   r   r   
startswithr   rY   r#   rM  r=  r   compilationallow_non_constexpr_globals	NameErrortextwrapdedentrG   )r+   rP  r   r   s      r.   global_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookup  sI   +//$//C 6MD22II+sK00C!5u==C!7??Cr22==>OPPCr22==>bccsHN33!#&&--d33 3%A!   $ 
 !4/3!4 !4 !4 5 5 6=WT35G5GI I Ir0   rO   c                 x    }j         j        fD ]} || |          }||ur|c S t          |  d          )Nz is not defined)rC  r  rZ  )r+   rP  lookup_functionrz   rL  r]  rQ  r   s       r.   name_lookupz6CodeGenerator._define_name_lookup.<locals>.name_lookup  se    "F#/@V@Z#Z ! !'f55&& LLL 't444555r0   )strrK  r   )r   r`  rL  r]  rQ  s   ` @@@r.   r;  z!CodeGenerator._define_name_lookup{  s    	1s 	1 	1 	1 	1 	1 	1	I 	I 	I 	I 	I 	I 	IB 	6c 	6c 	6 	6 	6 	6 	6 	6 	6 	6 	6 r0   c              #   .   K   || _         d V  d | _         d S rQ   )r.  )r   prefixs     r.   _name_loc_prefixzCodeGenerator._name_loc_prefix  s%      "("&r0   c                    t          |t          j        t          j        f          rB|                    | j                            ||                                                     d S t          |          r\g }|	                    |           |D ]D}|                    | j                            ||                                                     Cd S d S rQ   )
rR   r   rz   block_argumentr/  r   create_name_locget_locrT   r   )r   r   r+   r   handles        r.   _maybe_set_loc_to_namez$CodeGenerator._maybe_set_loc_to_name  s    cBHb&7899 	UKK44T3;;==IIJJJJJc"" 	UGOOG$$$! U Ut|;;D&..BRBRSSTTTT		U 	UU Ur0   r+   rz   rO   c                 .    || j         |<   || j        |<   dS )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+   rz   s      r.   	set_valuezCodeGenerator.set_value  s"     "D %r0   c                 n    | j                                         }| j                                         }||fS rQ   )r   rh  r   )r   locips      r.   _get_insertion_point_and_locz*CodeGenerator._get_insertion_point_and_loc  s3     l""$$\--//3wr0   c                 n    | j                             |           | j                             |           d S rQ   )r   r   r/  )r   ro  rn  s      r.   _set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_loc  s4    ,,R000S!!!!!r0   ignorec                 (   | j                                         }| j                             |           | j                            |           |                     |j                   | j                                         |                                 g }g }g }|	                                D ]\  }}	||v r
t          |	          r| j        |         }
|                     ||
|	           t          |	g          }t          |
g          }||k    rD|                    |           |                    |	j                   |                    |           || j        vsJ d| d            |                                | _        i | _        |||fS )NLoop carried variable z is not a triton value)r   create_blockset_insertion_point_to_startr9  appendvisit_compound_statementr   poperaser   rT   r   _verify_loop_carried_variabler   r,   extendr   copy)r   rj   r   rs  blockinit_tysinit_handlesnamesr+   live_valloop_vallive_handlesloop_handless                r.   _find_carrieszCodeGenerator._find_carries  s   ))++11%888d###%%di000
 %mmoo 	j 	jND(v~~)) j;t,2248LLL3XJ??3XJ??<//LL&&&OOHM222 ''5554?2224iT4i4i4i2222 llnnlH,,r0   c                     t          |          s|g}|D ]4}|                     |           t          |t          j                  r d S 5d S rQ   )rb   r   rR   r   r   )r   stmtsstmts      r.   ry  z&CodeGenerator.visit_compound_statement  sf    U## 	GE 	 	DJJt $
++ 		 	r0   c                 F    t           j                            | |           d S rQ   r   NodeVisitorr   r   s     r.   r   zCodeGenerator.visit_Module       %%dD11111r0   c                                            |j                  }|J t          j         fd|j        D                       }|S )Nc                 :    g | ]}                     |          S r4   r   )r6   eltr   s     r.   r8   z,CodeGenerator.visit_List.<locals>.<listcomp>  s#    DDD3tzz#DDDr0   )r   r   r   r   elts)r   rj   r   r  s   `   r.   
visit_ListzCodeGenerator.visit_List  sJ    jj""{{{~DDDD$)DDDEEr0   rj   c                    t          |j                  dk    rt          d          |j        d         }|                     |j                  }t          |t                    st          d          g }|D ]O}|                     |j	        j
        |           |                    |                     |j                             Pt          |          S )Nr$   z'nested comprehensions are not supportedr   z'only tuple comprehensions are supported)r   
generators
ValueErrorr   iterrR   tl_tupleNotImplementedErrorrl  targetr   rx  r  )r   rj   compr  resultsr   s         r.   visit_ListCompzCodeGenerator.visit_ListComp  s    t1$$FGGGq!zz$)$$$)) 	Q%&OPPP 	1 	1DNN4;>4000NN4::dh//0000   r0   c                                           |j                  }g } fd |          }|t          j        }n=t	          |t          j        j                  sJ |                    |           |j        } j	        
                    |            j        | _        n% j        |k    rt          d j         d|            j	                                        } j	                            |           d S )Nc                     t          | t          j                  rt          |           S t          | t          j        t
          t          f          rj                            |           S | S rQ   )	rR   r   r   r}   r   intfloatr,  	to_tensor)rz   decayr   s    r.   r  z)CodeGenerator.visit_Return.<locals>.decay%  s^    %00 6-eU;;;EH$6U#CDD 6}..u555Lr0   zInconsistent return types:  and )r   rz   r   voidrR   rX   r   r   r,   r   rL   r:  	TypeErrorrv  set_insertion_point_to_end)r   rj   	ret_valuer   ret_typost_ret_blockr  s   `     @r.   r   zCodeGenerator.visit_Return!  s   JJtz**		 	 	 	 	 	 E)$$	]FFi)ABBBBB!!'***^F!!!= "DMM]f$$V$-VVfVVWWW 2244//?????r0   c                                           |j                  \  }} j        r                     |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 _                              |
           d _        # d _        w xY w j        rd	nd
} j                             j                  } j                             j         j        || j                   _         j                             j                    j                                        } j                             j                  } j        % j                             j         j                   t7          ||          D ]1\  }}                     ||                                ||           2 j                                        } j                            |                                 |j!                    j                                        "                                rJ  j#         j#        tH          j%        k    r,tH          j%         _#         j        &                    g            ntO           j#        tH          j(                  r j#        j)         j        _*        n j#        g j        _*         j        +                     j                             j                              j        &                     fd j        ,                     j                  D                         j        -                                 |r j        .                    |           d S d S )Nz,nested function definition is not supported.r$   )r   r   targetsrz   )r  rz   
annotationTFpublicprivatec                 D    g | ]}j                             |          S r4   )r   create_poison)r6   r7   r   s     r.   r8   z3CodeGenerator.visit_FunctionDef.<locals>.<listcomp>q  s)    tttdl88<<tttr0   )/r   rl   rk   rI  rf   defaultsr  rn   r   r   r   r   	AnnAssignr=  r  r5  r  r   get_or_insert_functionr  r7  re   	push_backadd_entry_blockr  rI   initialize_calleeziprj  rl  r   rw  ry  r   has_terminatorr:  r   r  rL   rR   ry   r|   r   
reset_typer   finalizer  )r   rj   ri   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_FunctionDef?  s   !%DI!6!6	;7 	Z##D*XYYY )$)*<TTrT*B C C 	8 	8A}y~qb1f-H!,J<DDcikk:::I!J	{-PPP		M-\fggg	8::::26/

9%%%27//%/7777 "&>XXY
((66,55dk4CUW\^hjnjwxxdg&&&''))^//88
*11$'4<HHH#&y*#=#= 	0 	0Hi''	8<<<NN8Y////L4466	11%888%%di000 <3355DDFFFFF= DMX]$B$B$MDMLR    $-)<== ;+/=+>((,0M?(Gt~77EEFFFLttttt~GeGefjfrGsGstttuuu 	?L33I>>>>>	? 	?s    %D	Dc                     g }|j         D ]}||                     |          gz  }|                     |j                  }||fS rQ   )rl   r   kwarg)r   rj   ri   rn   r  s        r.   visit_argumentszCodeGenerator.visit_argumentsw  sO    	9 	+ 	+C$**S//**IIjj,,+%%r0   c                    t           j                            |            t          fd| j        j        D                       }|j        r1|j        s|j        r#t          | j        j
        j         d          j        S )Nc              3   <   K   | ]}|j         j        k    |V  d S rQ   )r+   rn   )r6   prj   s     r.   r   z*CodeGenerator.visit_arg.<locals>.<genexpr>  s1      II1af6H6HQ6H6H6H6HIIr0   z marked as constexpr and listed in do_not_specialize/do_not_specialize_on_alignment. Remove constexpr designation to skip specialization.)r   r  r   nextr"  paramsis_constexprdo_not_specializedo_not_specialize_on_alignmentr%   rg   rn   )r   rj   params    ` r.   	visit_argzCodeGenerator.visit_arg~  s    %%dD111IIII 2IIIII 	H5#: 	He>b 	H"8 G G GH H H xr0   c                 `   |                      |j                  }|                      |j                  }|                      |j                  }|t          k    rA|| j        v rt          | d          t	          |          }|| j        |<   | j        |         S |                     |          S )Nz4 is already defined. constexpr cannot be reassigned.)r   r  r  rz   r   r   r  r   )r   rj   r  r  rz   s        r.   visit_AnnAssignzCodeGenerator.visit_AnnAssign  s    ZZ00
DK((

4:&&""$$ F "E "E "E F F Fe$$E"'DK;v&&  &&&r0   c                 2   t          |j        t          j                  sJ t          |t          j                  r|                     ||          S t          |t          j                  r=t          |j                  D ]&\  }}| 	                    ||j
        |                    'd S t          |t          j                  rt          d          t          |t          j                  sJ |                     |                     |          |           d S )Nz/Attribute assignment is not supported in triton)rR   r   r   r   	Subscriptvisit_Subscript_Storer	   rf   r  assignTargetr~   r   r  r   rl  r   )r   r  rz   r<   s       r.   r  zCodeGenerator.assignTarget  s    &*ci00000fcm,, 	=--fe<<<fci(( 	&v{33 ; ;	6!!&%,q/::::Ffcm,, 	Y%&WXXX&#(+++++tzz&))511111r0   c                      fdt          |t          j                  r|j        gn|j        }t          |          dk    sJ |d         }t          |t          j                  rV                     |j                  5    	                    |j
                            }d d d            n# 1 swxY w Y   n#  	                    |j
                            }                     ||           d S )Nc                     t          | t          j                  rt          |           S t          j        t          j        f}t          |           } | 9t          |           s*t          | |          sj                            |           } | S rQ   )	rR   r   r   r}   rY   r   rT   r,  r  )rz   native_nontensor_types_sanitize_valuer   s     r.   r  z3CodeGenerator.visit_Assign.<locals>._sanitize_value  s    %00 F-e_EEE&.nhn%E"(//E $U++ !u&<== ! //66Lr0   r$   r   )rR   r   r  r  r  r   r   rd  r   r   rz   r  )r   rj   r  r  r~   r  s   `    @r.   r   zCodeGenerator.visit_Assign  sM   		 		 		 		 		 		 $.dCM#B#BT4;--7||q    fch'' 	=&&vy11 A A(DJ)?)?@@A A A A A A A A A A A A A A A %_TZZ
%;%;<<F&&)))))s   $B33B7:B7c                    t          j        |j                  }t          j                    |_        t          j        ||j        |j                  }t          j	        |j        g|          }dD ]D}t          ||          r2t          ||          }t          |||           t          |||           E|                     |           |                     |          S )Nr  )lineno
col_offset
end_linenoend_col_offset)r~  deepcopyr  r   Loadr   BinOpoprz   r   hasattrr   setattrr   )r   rj   lhsrhsassignr	  ys          r.   r   zCodeGenerator.visit_AugAssign  s    mDK(((**iTWdj11T[M===I 	& 	&AtQ &D!$$Q"""1%%%

6zz#r0   c                     t          |j                  t          j        u r|j        S |                     |j                  S rQ   )r,   r   r   r   r   r<  r   s     r.   r   zCodeGenerator.visit_Name  s4    >>SY&&7N$$TW---r0   c                 F    t           j                            | |           d S rQ   r  r   s     r.   visit_StorezCodeGenerator.visit_Store  r  r0   c                 F    t           j                            | |           d S rQ   r  r   s     r.   
visit_LoadzCodeGenerator.visit_Load  r  r0   c                 R      fd|j         D             }t          j        |          S )Nc                 :    g | ]}                     |          S r4   r   )r6   r	  r   s     r.   r8   z-CodeGenerator.visit_Tuple.<locals>.<listcomp>  s#    111!

1111r0   )r  r   r   )r   rj   rl   s   `  r.   visit_TuplezCodeGenerator.visit_Tuple  s.    1111ty111~d###r0   c                    t          |          r  t          ||          || j                  S t          |          r6t          j        dd|          } t          ||          || j                  S t          |t          t          j        f          s$t          |t                    rt          |          }t          |t                    rt          ||          }n| 	                    ||          }| 
                    |||gi           S )N	_semanticz__(.*)__z__r\1__)rV   r   r,  r)   subrR   r   r   r   get_Attributecall_Function)r   rj   method_namer  r  reverse_method_namerk   s          r.   _apply_binary_methodz"CodeGenerator._apply_binary_method  s   S!! 	K,73,,SDMJJJJS!! 	S"$&j+"N"N473 344SDMRRRR#	8>:;; 	!
3PY@Z@Z 	!C..Cc9%% 	6k**BB##C55B!!$SE2666r0   c                 \   |                      |j                  }|                      |j                  }| j                            t          |j                            }|3|                     |d                    |j        j	                            | 
                    ||||          S )Nz8AST binary operator '{}' is not (currently) implemented.)r   leftright_method_name_for_bin_opr  r,   r  rI  formatrh   r   )r   rj   r  r  r  s        r.   visit_BinOpzCodeGenerator.visit_BinOp  s    jj##jj$$266tDG}}EE##D$^$e$efjfmfv$w$wy y y(({CEEEr0   __add____sub____mul____truediv____floordiv____mod____pow__
__lshift__
__rshift____and____or____xor__r  c                    | j                             |           |                     |j                   | j                                         }| j                                        }| j                                        }i }|                                }|j        r| j                             |           |                                | _        i | _        |                     |j                   | j                                        }| j                                         }| j                                        }g }	|	                                D ]\  }
}t          |          st          ||
         g          }t          ||
         g          }||k    rH|	                    |
           ||
         ||
<   ||
         ||
<   |df|dffD ]_\  }}t          ||
                   t          |          k    }|r||
         j        |j        k    sJ d|
 d| d| d||
                      `t          |                                |                                z            D ]v}
|
|	v r||
         }|j        }||
         }|j        }t          |          t          |          k    }|r||k    sJ d|
 d| d	| d
            |	                    |
           w|||||	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   rw  ry  r   r   r   r~  r   r   r   rT   r   rx  r,   rF   keys)r   rj   r   
then_block
else_block	then_defs	then_vals	else_defs	else_valsr  r+   rz   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*===%%di000\5577
O((**	K$$&&		LLNN	; 	+L55jAAA!,,..DK DO))$+666,,..I99;;J((**I "==?? 	O 	OKD%#E** /40ABBL/40ABBL|++LL'oIdO'oIdO&/%89f:M$N O O j!$t*--e<
! Od4jo&C&C&CO$ O OU O O)O OBFt*O O 'D&C&C&CO 9>>++inn.>.>>?? 	 	Du}} HmG HmGh4>>9J .'W"4"4"4.t . .' . .#*. . . #5"4"4 LL)ZUBBr0   c                 x   t          |           5 }|\  }}| j                                        }| j                                        }| j                            |           | j                            |j        ||           |                     ||||          \  }}}| j                                        | j                            |           |                                rJ |             t          fd|D                       }	| j        	                    |	           | j                            |           |                                rJ |             t          fd|D                       }
| j        	                    |
           t          |	          t          |
          k    sJ t          |	|
          D ]H\  }}|                                }||                                k    sJ                     |           I	 d d d            n# 1 swxY w Y   | j                                       fdt          t          |	                    D             }fd|D             }t!          ||          }t          ||          D ]\  }}|                     ||           d S )Nc              3   (   K   | ]}|         V  d S rQ   r4   r6   r+   r  s     r.   r   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>H  '      /R/RD	$/R/R/R/R/R/Rr0   c              3   (   K   | ]}|         V  d S rQ   r4   r6   r+   r  s     r.   r   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>M  r+  r0   c                 :    g | ]}                     |          S r4   rn   )r6   r<   endif_blocks     r.   r8   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>X  s%    LLLa{q))LLLr0   c                 *    g | ]}|         j         S r4   rv   r*  s     r.   r8   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>Y       888$4%888r0   )r   r   rv  r  create_cond_branchri  r'  r  r   create_branchr   r  get_typeadd_argumentrw  r  r   rl  )r   condrj   srr   ip_blockr  r  r  r  r  then_helse_hr7   res_handlesr|   
new_valuesr+   	new_valuer  r0  r  s                      @@@r.   visit_if_top_levelz CodeGenerator.visit_if_top_level8  s   d## 	-r "GX2244J2244JL33H===L++DKZPPP ++D':zRR @Iy*j% ,3355KL33J???!0022CCzOCCC//R/R/R/RE/R/R/RRRLL&&{LAAAL33J???!0022CCzOCCC//R/R/R/RE/R/R/RRRLL&&{LAAA|$$L(9(99999"%lL"A"A - -__&&V__......((,,,,-/	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-: 	11+>>>LLLL5\9J9J3K3KLLL8888%888(e<<
"5*55 	, 	,OD)NN4++++	, 	,s   HH##H'*H'c                    t          |           5 }|\  }}|                                 \  }}| j                                        }|j        r| j                                        nd }	|                     ||||	          \  }}	}
t          fd|
D                       }t          |
|          D ]\  }}|                     ||           | 	                    ||           | j        
                    d |D             |j        d          |                                                               | j                                                                       t          |
          dk    r| j                            |           |j        s                                }	n'|	                                                               | j                                                                       t          |
          dk    rat          fd|
D                       }t          |
|          D ]\  }}|                     ||           | j                            |           d d d            n# 1 swxY w Y   fdt%          t          |                    D             }fd|
D             }t'          ||          }t          |
|          D ]\  }}|                     ||           d S )Nc              3   (   K   | ]}|         V  d S rQ   r4   r*  s     r.   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>h  r+  r0   c                 6    g | ]}|                                 S r4   r5  r6   hs     r.   r8   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>l  s     .R.R.Rqzz||.R.R.Rr0   Tr   c              3   (   K   | ]}|         V  d S rQ   r4   r-  s     r.   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>w  s'      3V3VIdO3V3V3V3V3V3Vr0   c                 :    g | ]}                     |          S r4   
get_result)r6   r<   if_ops     r.   r8   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>|  s'    MMMqu''**MMMr0   c                 *    g | ]}|         j         S r4   rv   r*  s     r.   r8   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>}  r2  r0   )r   rp  r   rv  r   r'  r   r  rj  rr  create_if_opri  merge_block_beforeget_then_blockr  r   create_yield_opget_else_blockr  r   rl  )r   r7  rj   r8  r   r2   ro  last_locr  r  r  r  r+   r   r  r<  r|   r=  r>  r  rJ  r  s                      @@@r.   visit_if_scfzCodeGenerator.visit_if_scf_  sP   d## 	;rJGQ<<>>LB2244J8<M22444J++D':zRR @Iy*j% 0/R/R/R/RE/R/R/RRRL 55 7 7	c++C6666--b(;;;L--.R.R\.R.R.RTXT_aeffE))%*>*>*@*@AAAL33E4H4H4J4JKKK5zzA~~,,\:::; F"1133

--e.B.B.D.DEEEL33E4H4H4J4JKKK5zzA~~33V3V3V3VPU3V3V3VVV!$UL!9!9 ; ;ID#//T::::,,\:::5	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;8 NMMME#l:K:K4L4LMMM8888%888(e<<
"5*55 	, 	,OD)NN4++++	, 	,s   I!J  JJc           	         |                      |j                  }t          |          r-t          |          r|                     |d          |j                                        rUt          j        dt          j
        |j                  z             t          j                            || j        |           }|                    t          j        | j                  }t#          | j                                       |          r5| j        r|                     |d          |                     ||           d S |                     ||           d S t-          |          }t          |          t.          vr^|                     |d                    d                    d t.          D                       t          |          j                            |r|j        n|j        }|                     |           d S )	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   $   K   | ]}|j         V  d S rQ   rA  rB  s     r.   r   z)CodeGenerator.visit_If.<locals>.<genexpr>  $      !G!G!*!G!G!G!G!G!Gr0   )r   testrV   r_   rI  r,   r]   warningswarnr   unparser   rX   _unsplatr,  toint1r   r   r9  r?  rR  r   _condition_typesr  rE   rh   r   r   ry  )r   rj   r7  active_blocks       r.   r   zCodeGenerator.visit_If  s   zz$)$$T"" 	8$T** o''.mnnny!!## ^ Bk$),,-. . .  }--ddmX\-]]778=DM7BBD$T[1177== .> o++mo o o''d33333!!$-----'--DDzz!111''krr		!G!G6F!G!G!GGGT

+- -. . .
 )-=499$+L)),77777r0   c           	      P   |                      |j                  }t          |          rD|                    t          j        | j                  }t          |           5  |                                 \  }}| j	        
                                }| j	                            |           | j                            |                      |j                            }| j	                                        }| j	        
                                }| j	                            |           | j                            |                      |j                            }| j	                                        }|                     ||           |j        |j        k    sJ d|j         d|j                     |j        }	|	t          j        k    r|	                    | j	                  gng }
| j	                            |
|j        d          }|                    |                                           |
rL| j	                            |                                           | j	                            |j        g           | j	                            |                                           |                    |                                           |
rL| j	                            |                                           | j	                            |j        g           |
r3t          j                            |                    d          |	          nd cd d d            S # 1 swxY w Y   d S t=          |          }t#          |          t>          vr^|                      |d!                    d"                    d t>          D                       t#          |          j#                            |r|                      |j                  S |                      |j                  S )	Nr  zATernary expression with dynamic condition has inconsistent types r  Tr   rU  rV  c              3   $   K   | ]}|j         V  d S rQ   rA  rB  s     r.   r   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>  rX  r0   )$r   rY  rV   r^  r   r_  r,  r   rp  r   rv  rw  r  r   r   r   rr  r,   r  to_irrL  ri  rM  rN  r  rO  rP  rX   r   rI  r   r`  rI  r  rE   rh   )r   rj   r7  ro  rQ  r  r#  r  r%  r:  ret_type_irrJ  s               r.   r   zCodeGenerator.visit_IfExp  s   zz$)$$T"" 1	/778=DM7BBD!$'' !d !d#@@BBH!\6688
99*EEE=224::di3H3HII!\==??
!\6688
99*EEE  =224::dk3J3JKK!\==??
11"h???}555{X`Xe{{ltly{{ 655#=@HHM@Y@Yx~~dl;;<<_a11+t{DQQ--e.B.B.D.DEEE DL;;E<P<P<R<RSSSL00(/1BCCC778L8L8N8NOOO--e.B.B.D.DEEE DL;;E<P<P<R<RSSSL00(/1BCCCNYcx}++E,<,<Q,?,?JJJ_cC!d !d !d !d !d !d !d !d !d !d !d !d !d !d !d !d !d !dF (--D Dzz!111''krr		!G!G6F!G!G!GGGT

+- -. . .  /zz$),,,zz$+...s    K5M""M&)M&c                     g }|j         D ]z}|j        }                     |j                  } fd|j        D             }t           fd|j        D                       } ||d j        i|}|                    |           {t          ||j                   D ]P\  }}|
                                }	|j        0                     |j                  }
                     |
|	           Qt           j                                      |          r                     |d                               |j                   t%          |          D ]}|                    d d d            d S )Nc                 :    g | ]}                     |          S r4   r   r6   rn   r   s     r.   r8   z,CodeGenerator.visit_With.<locals>.<listcomp>  s#    999DJJsOO999r0   c              3   B   K   | ]}                     |          V  d S rQ   r   )r6   kwr   s     r.   r   z+CodeGenerator.visit_With.<locals>.<genexpr>  s-      >>"tzz"~~>>>>>>r0   r  zCCannot have `return` statements inside `with` statements in triton )r   context_exprr   r   rl   dictkeywordsr,  rx  r  r   optional_varsrl  r   r   rI  ry  r   reversedr   )r   rj   cm_listr   callrk   rl   kwscmresvar_names   `          r.   
visit_WithzCodeGenerator.visit_With  s    J 	 	D$DDI&&B9999ty999D>>>>>>>>>CT:T]:c::BNN2GTZ00 	. 	.HB,,..C!-::d&899x--- --33D99 	q##D*oppp%%di0007## 	* 	*BKKdD))))	* 	*r0   c                     d S rQ   r4   r   s     r.   
visit_PasszCodeGenerator.visit_Pass  s    r0   c                 $   t          |j                  dk    rt          |j                  dk    s|                     |d          |                     |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                            t          |j        d                             }|9|                     |d                    |j        d         j                            |                     ||||          S )Nr$   z1simultaneous multiple comparison is not supportedr   z<AST comparison operator '{}' is not (currently) implemented.)r   comparatorsopsrI  r   r  r   r,   r   Isr   IsNot_method_name_for_comp_opr  r  rh   r   )r   rj   r  r  	lhs_value	rhs_valuer  s          r.   visit_ComparezCodeGenerator.visit_Compare  sc   D$%%**s48}}/A/A##D*]^^^jj##jj)!,--(--	(--	&&Y)3444	))Yi7888377TXa[8I8IJJ##T[[\`\def\g\pqqs s s(({CEEEr0   __eq____ne____lt____le____gt____ge__r~  c           
         |                      |j                  }| j                            t	          |j                            }|$|                     |d|j        j         d          t          |          r t          ||          | j
                  S 	  t          ||                      S # t          $ rG |dk    rt          |           cY S |                     |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  rI  rh   rV   r   r,  AttributeErrorr   )r   rj   r  rk   s       r.   visit_UnaryOpzCodeGenerator.visit_UnaryOp  s)   **T\**+//TW>>:##D*tAQ*t*t*tuuuW%% 	A'77B''$-@@@@	t'77B''))) 	t 	t 	tY W-----##rRrrZ^_fZgZgZprrt t t	ts   B4 4 D/D__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	            d S d S )
Nzcannot reassign constexpr z in the loopru  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.)rT   r,   rV   )r   r+   r  r  s       r.   r|  z+CodeGenerator._verify_loop_carried_variable  s   ))ZZ+Z+Z+Z+ZZZZ))ZZ+Z+Z+Z+ZZZZH~~h///jTjjd8nnjjZ^_gZhZhjj 0//$X.. 	@(-8=2P2P2P@T @ @X] @ @%-]@ @ @ 3Q2P2P 	@ 	@2P2Pr0   c                     t                     5 }|\  }}                                 \  }}                     ||          \  }}}	d |D             }
                     ||            j                            |
|           j                                                            |
           j                                       fdt          t          |                    D             }t          ||	          }t          ||          D ]/\  }}| j        |<   | j        |<                        ||           0                     |j                  }t%          |t&          j                  r;|j        r-                    d j                                                   |j        } j                                        j                            |j        |            j                                                            |
           j                                       fdt          t          |                    D             }t          ||	          }t          ||          D ]/\  }}| j        |<   | j        |<                        ||           0 j                            |                                |j                    j                                          tC           fd|D                       } j        "                    |           d d d            n# 1 swxY w Y   fdt          t          |                    D             }t          ||	          }t          ||          D ]/\  }}| j        |<   | j        |<                        ||           0|j#        D ]}J d            d S )	Nc                 6    g | ]}|                                 S r4   rC  rD  s     r.   r8   z-CodeGenerator.visit_While.<locals>.<listcomp>(  s     ;;;

;;;r0   c                 :    g | ]}                     |          S r4   r/  )r6   r<   before_blocks     r.   r8   z-CodeGenerator.visit_While.<locals>.<listcomp>.  s'    PPP!,**1--PPPr0   llvm.loop_annotationc                 :    g | ]}                     |          S r4   r/  )r6   r<   after_blocks     r.   r8   z-CodeGenerator.visit_While.<locals>.<listcomp>A  s%    QQQ1KOOA..QQQr0   c              3   2   K   | ]}j         |         V  d S rQ   r   r6   r+   r   s     r.   r   z,CodeGenerator.visit_While.<locals>.<genexpr>K  *      0U0UtT1B0U0U0U0U0U0Ur0   c                 :    g | ]}                     |          S r4   rH  )r6   r<   while_ops     r.   r8   z-CodeGenerator.visit_While.<locals>.<listcomp>O  s'    SSSQ(--a00SSSr0   FzNot implemented)'r   rp  r  rr  r   create_while_opcreate_block_with_parent
get_beforerw  r  r   r   r  r   r   rj  r   rY  rR   r   	conditiondisable_licmset_attrget_disable_loop_licm_attrr  create_condition_opri  	get_afterr9  rx  ry  r   rz  r   rO  r   r   r  r   )r   rj   r8  r   r   ro  rQ  r  r  init_fe_tysr  
block_argscondition_argsr+   r   r7  body_handles	body_argsyield_handlesresult_handlesresult_valsnew_defr  r  r  r  s   `                      @@@r.   visit_WhilezCodeGenerator.visit_While!  s    d## *	8r$&!G\<<>>LB/3/A/A$/P/P,E<;;l;;;H--b(;;;|33HlKKH<@@ATATAVAVX`aaLL55lCCCPPPPuS=N=N7O7OPPPJ0[IIN 77 7 7	c$'D!(+%++C6666::di((D$ 233 &$ i%%&<dl>e>e>g>ghhh~L33LAAAL,,T[*EEE,??@R@R@T@TV^__K L55kBBBQQQQc,>O>O8P8PQQQL+L+FFI 	22 7 7	c$'D!(+%++C6666N!!$'''))$)444N   00U0U0U0Uu0U0U0UUUML((777U*	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8 *	8Z TSSS%L@Q@Q:R:RSSS).+FF 44 	7 	7MD' 'DK$+DOD!''6666K 	6 	6D+++++	6 	6s   LL==MMc                    t          |j        t          j                  sJ |                     |j                  }|                     |j                  }t          |          r|                     ||j	        ||gi           S ||         S rQ   )
rR   r   r   r  r   rz   slicerT   call_Method__getitem__)r   rj   r  slicess       r.   visit_Subscript_Loadz"CodeGenerator.visit_Subscript_LoadZ  s}    $(CH-----jj$$DJ''C   	N##D#/3"MMM6{r0   c                      t          d          )Nz&__setitem__ is not supported in triton)r  )r   rj   rz   s      r.   r  z#CodeGenerator.visit_Subscript_Storeb  s    !"JKKKr0   c                 ,    |                      |          S rQ   )r  r   s     r.   visit_SubscriptzCodeGenerator.visit_Subscripte  s    ((...r0   c                 *      fd|j         D             S )Nc                 :    g | ]}                     |          S r4   r   )r6   dimr   s     r.   r8   z0CodeGenerator.visit_ExtSlice.<locals>.<listcomp>i  s#    555C

3555r0   )dimsr   s   ` r.   visit_ExtSlicezCodeGenerator.visit_ExtSliceh  s    5555495555r0   c           	      ^   ()                       |j        j                  } fd|j        j        D             }t	           fd|j        j        D                       }|t          j        k    r ||i |}t          |j	        j
        |j        j
        |j        j
                  }|D ]g}t          |           j        |j        j        <                        |j                   |j        D ]"}t(          j                             |           #hd S d }	d }
d}d}d}d}|t          j        u rH ||i |}|j	        }|j        }|j        }|j        }	|j        }
|j        }|j        }|j        }|j        }n|t          u rt;          |          dk    r|d         n&                      t)          j        d                    }t;          |          dk    r|d         n$                      |j        j        d                   }t;          |          dk    r|d         n&                      t)          j        d                    }nt?          d          d}tA          |          r&|j
        dk     rt          |j
                   }d}||}} j!        "                    |          } j!        "                    |          } j!        "                    |          }|j#        $                                r2|j#        $                                r|j#        $                                s(tK          d	|j#         d
|j#         d
|j#         d          tM          |          rtK          d|j'                   tM          |          rtK          d|j'                   tM          |          rtK          d|j'                    j!        (                    |j#        |j#                  } j!        (                    ||j#                  }|)                     j*                  }|j+        t          j,        j#        j-        j.        k    }|j/        }|j/        }|j/        } j*        0                    |||          } j*        0                    |||          } j*        0                    |||          } j*        1                    |          } 2                    |j        j        t          j,        3                    ||                     ti                     5 }|\  }} 5                                \  }} 6                    |||j        j        h          \  }}} 7                    ||            j*        8                    ||||          (ts          |	          .(:                    d j*        ;                    |	                     ts          |
          .(:                    d j*        ;                    |
                     |r-(:                    d j*        <                                           |r-(:                    d j*        <                                           |r-(:                    d j*        <                                           |r-(:                    d j*        =                                            j>        ?                    |           (@                    d          ) j*        A                    )           )fdt          t;          |                    D             }t          ||          } t          ||           D ]1\  }!}" D                    |"|!            2                    |!|"           2                     |j                    j>        E                                 t           fd|D                       }#t;          |#          dk    r j*        G                    |#           )H                                }$|$I                                dk    s
J d             j*        A                    )           (J                                }%|r6 j*        K                    ||%          }% j*        L                    |%|          }%|M                    |%            2                    |j        j        t          j,        3                    |%|                      D                    |%|j        j                   d d d            n# 1 swxY w Y   (fdt          t;          |                    D             }&t          |&|          }'t          ||'          D ]1\  }!}" 2                    |!|"            D                    |"|!           2|j        D ]}J d            d S )Nc                 :    g | ]}                     |          S r4   r   rh  s     r.   r8   z+CodeGenerator.visit_For.<locals>.<listcomp>m  s#    ???TZZ__???r0   c              3   B   K   | ]}                     |          V  d S rQ   r   r6   keywordr   s     r.   r   z*CodeGenerator.visit_For.<locals>.<genexpr>n  s/      QQ74::g..QQQQQQr0   Fr$   r   r   zAOnly `range` and `static_range` iterators are currently supportedTz0For loop bounds and step must all be ints, are (rV  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 )rs  ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializer  c                 @    g | ]}                     |d z             S )r$   r/  )r6   r<   for_op_bodys     r.   r8   z+CodeGenerator.visit_For.<locals>.<listcomp>  s)    VVV[__QU33VVVr0   c              3   2   K   | ]}j         |         V  d S rQ   r  r  s     r.   r   z*CodeGenerator.visit_For.<locals>.<genexpr>  r  r0   z7We use SCF, so the loop body should only have one blockc                 :    g | ]}                     |          S r4   rH  )r6   r<   for_ops     r.   r8   z+CodeGenerator.visit_For.<locals>.<listcomp>  s'    QQQ1&++A..QQQr0   z)Don't know what to do with else after for)Nr   r  r   rl   rl  rm  r   static_ranger  startrz   endstepr   r   r  r   ry  r   r   r   r  r   
num_stagesloop_unroll_factordisallow_acc_multi_bufferflattenwarp_specializer  r   ConstantRuntimeErrorrZ   r,  r  rY   is_intr  r_   r,   integer_promote_implrd  r   int_signednessrX   
SIGNEDNESSSIGNEDri  create_int_castr  rl  r   r   rp  r  rr  create_for_opr   r  get_int32_attrget_unit_attrr  r9  rx  get_bodyrw  r   r  rj  rz  r   rO  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_with)*r   rj   IteratorClass	iter_argsiter_kwargsiteratorr  r<   r  r  r  r  r  r  r  lbubr  negative_stepiv_type
iv_ir_typeiv_is_signediv_placeholderr8  r   r   ro  rQ  r  r  r  block_handlesr  r+   r   r  for_op_regionivr  result_valuesr  r  s*   `                                       @@r.   	visit_ForzCodeGenerator.visit_Fork  s	   

49>22????	???	QQQQdi>PQQQQQH111$}i?;??H !5x|7I8=K^__L! > >.7llDKN+--di888 K > >DO11$====>F
!$)!HN**$}i?;??H BB=D!,J!)!<(0(J%&G&6O#0LLe## "%Y!!3!31CLQROO9T9TB!$Y!!3!31DINSTDU9V9VB#&y>>A#5#59Q<<4::clSToo;V;VDDbccc 	4:>>dj[))D MB]$$R((]$$R((}&&t,,x   	v(9(9 	vARARATAT 	vtrxtt[][cttgkgqtttuuu $$ 	PNRWNNOOO $$ 	PNRWNNOOO && 	KIdiIIJJJ-44RXrxHH-44WdjII]]4<00
-1D1O1VVYY{\))"j,GG\))"j,GG|++D*lKK33J??t{~x}';';NG'T'TUUUd## 0	<r$&!G\<<>>LB,0,>,>tWVZVaVdUe,>,f,f)E< --b(;;;\//BlKKF#J//;1L1LZ1X1XYYY#$677C 79T9TUg9h9hiii( ^ >@Z@Z@\@\]]] Ldl.H.H.J.JKKK T 4dl6P6P6R6RSSS c 68_8_8a8abbbN!!$''' //!,,KL55kBBBVVVVU3|CTCT=U=UVVVM,]HEEJ 
33 * *	c++C666tS))))))$)444N   00U0U0U0Uu0U0U0UUUM =!!A%%,,];;;'2244M %%''1,,,.g,,, L55kBBB))++B 5\,,R44\,,R4400444NN4;>8=+?+?G+L+LMMM''DKN;;;a0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	< 0	<f RQQQc,>O>O8P8PQQQ+NHEEUM22 	3 	3ID#NN4%%%''T2222K 	6 	6DEEEEE	6 	6s   O:dddc                     |                      |j                  }|                      |j                  }|                      |j                  }t	          j        |||          S rQ   )r   lowerupperr  r   r  )r   rj   r  r  r  s        r.   visit_SlicezCodeGenerator.visit_Slice  sO    

4:&&

4:&&zz$)$$~eUD111r0   c                 6    |                      |j                  S rQ   )r   rz   r   s     r.   visit_IndexzCodeGenerator.visit_Index  s    zz$*%%%r0   c                 D    |j         |                     |j                  fS rQ   )rn   r   rz   r   s     r.   visit_keywordzCodeGenerator.visit_keyword  s    xDJ////r0   c                     |                      |j                  }|j        |                      |j                  nd}t          j                            ||| j                  S )Nr&  r  )r   rY  msgr   rX   device_assertr,  )r   rj   rY  r  s       r.   visit_AssertzCodeGenerator.visit_Assert   sS    zz$)$$&*h&:djj"""}**4*NNNr0   rk   c                    t          j        |j        gR i |fd|j        D             t	                    D ]Z\  }}t          |t          j        t          t          t          t          f          r"t          j                            |          |<   [t          d           }fd|D             }t          d           }fd|D             }	|p| j        }t!          t#          |          d |	D             ||          }
| j                            |
          s#t)          |          \  }}d D             }t+          g ||t-                                }t/          | j        ||                                | j        ||
| j        |j        ||| j        j        | j        j        | j        j        || j                   }	 |!                    |"                                           nE# tF          $ r8}tH          j%        j&        r tO          | j(        j)        | j*        d           |d }~ww xY w|j+        }|| j        |
<   n| j        |
         }| j        ,                    |
          }t[          |	          }	| j        .                    ||	          |t          j/        k    rd S fd	ta          1                                          D             }te          tg          ||g                    S )
Nc                      g | ]
}|         S r4   r4   )r6   r+   rl   s     r.   r8   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s    444tT
444r0   c                      t          |          S rQ   rZ   r2   r	  s     r.   r   z0CodeGenerator.call_JitFunction.<locals>.<lambda>  s    M!4D4D r0   c                 2    i | ]}|t          |          S r4   r!   r6   r   rl   s     r.   r   z2CodeGenerator.call_JitFunction.<locals>.<dictcomp>  s&    MMMDD+D$77MMMr0   c                 "    t          |           S rQ   r  r  s     r.   r   z0CodeGenerator.call_JitFunction.<locals>.<lambda>  s    q9I9I5I r0   c                 0    g | ]}t          |          S r4   r  r  s     r.   r8   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s$    HHHd%dD11HHHr0   c                     g | ]	}|j         
S r4   rv   r6   rn   s     r.   r8   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s    /M/M/MS/M/M/Mr0   c                     g | ]H}|,t          |t          t          t          j        j        f          rt          j        j        n|j        IS rQ   )rR   r   r  r   rX   rY   r   r,   r  s     r.   r8   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s_         ,/;*SFJCQYQ^QdEe;g ;g;''lolt  r0   )r  r"  r7  r  re   r   r!  r0  r1  r2  rI   r)  c                 :    g | ]}                     |          S r4   rH  )r6   r<   call_ops     r.   r8   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>3  s'    SSSQ7%%a((SSSr0   )4inspectgetcallargsrk   ri   rf   rR   r   rY   r  r  r   r   rX   r   r    rI   rM   r   r  has_functionr   r   rl  r  r(  get_capture_scoper4  re   r   r0  r1  r2  r)  r   parse	Exceptionr   rX  front_end_debuggingr%   r"  rg   r8  r:  get_functionr   rq  r  r  get_num_resultsr  r   )r   rk   rl   r   rI   r<   rn   args_cst	args_pathargs_valfn_namer   r!  r   r5  r   ecallee_ret_typesymbolr   r  s     `                 @r.   call_JitFunctionzCodeGenerator.call_JitFunction  s   "25:4:::6::4444r|444oo 	7 	7FAs#sD+NOO 7"-11#66Q 'D'DEEMMMMHMMM!$(I(IJJ	HHHHiHHH'>4+>M"--/M/MH/M/M/MxYghh{''00 	?$8$<$<!Iz     I
 $B	8TVVDDI%dlIr?S?S?U?U^b^irt4;DLc/1{i\f.2l.BPTP\Ph151HYg/3}> > >IT

++++ T T T$8 &t{tLLRSS	T (0O/>D#G,,"5g>O))'22'11,##FH55hm++4SSSS%8O8O8Q8Q2R2RSSS'/1BCCDDDs   	'G1 1
H3;3H..H3c                    t          |t          t          f          r"|                    d|j                   |j        }t          |t                    r(t          |||           |                     |||          S t          |d          rt          |j                  s4t          j                            |          st          |t                    rt                      }t          |t                    rt!          j        |j                  }nt!          j        |          }d|j        v r
| j        |d<   d|j        v r| |d<   	  ||i ||}t          |t*                    rt          j        |          }|S # t,          $ r@}t.          j        j        r t5          | j        j        |t;          |                    |d }~ww xY w|| j                                        v s$t          |d          r)t          |j                  stA          tB          |          } ||i |}d }	t          |tD          j        t          j        f          rtG          ||	          S  |	|          S )Nr   r  r  rT  c                 B    t          |           r| S t          |           S rQ   )rT   r   )r	  s    r.   wrap_constexprz3CodeGenerator.call_Function.<locals>.wrap_constexpr^  s#    "" Q<<r0   )$rR   r  r   insertr  r  r   ro   r   r  rT   r   rX   
is_builtinr   rl  r  	signature__call__
parametersr,  r   r  r   rX  r  r%   r"  rg   ra  rC  r~   mapr   builtinsr}   )
r   rj   rk   rl   rr  extra_kwargssigrL   r  r#  s
             r.   r  zCodeGenerator.call_Function6  s   b>+ABCC 	KK2;'''Bb+&& 	84T***((T3777B
## 	M(8(E(E 	M(-JbJbceJfJf 	Mjt%k' k' 	M66L"/00 ,'44'++cn,,,0M[)s~---1\*Mb$6,6#66c5)) .".--C
 	M 	M 	M$8  't{c!ffEE1L	M '..0000WR5L5L0UefhfqUrUr0+T22Db$#	  	  	 
 cHNHN;<< 	?)#~>>>~c"""s   4E< <
G;GGc                     t          |t                    r|                    d|           |                     ||||          S r   )rR   r   r$  r  )r   rj   rk   fn_selfrl   rr  s         r.   r  zCodeGenerator.call_Methodg  sB    b+&& 	$KK7###!!$D#666r0   c                     t                               |j                            }t          |t                    s( j                            |          }| | |          S t          |dd          }|rt          |dd          rudt          j	        |j                  z  g}t          |t                    r|                    |           t           j        j        |d                    |                    t!           fd|j        D                       }g }|j        D ]}t          |t          j                  rV                     |j                  }t          |t*          j        j                  sJ |                    |j                   r|                                         |                                          ||||          S )N_must_use_resultF
_is_unusedz#The result of %s is not being used.rV  c              3   B   K   | ]}                     |          V  d S rQ   r   r  s     r.   r   z+CodeGenerator.visit_Call.<locals>.<genexpr>z  s/      DD74::g&&DDDDDDr0   )r   r   r   rR   r   statically_implemented_functionsr  r   r   r\  ra  rx  r%   r"  rg   rE   rl  rm  rl   Starredrz   r   rX   r   r}  r~   r  )	r   rj   rk   static_implementationmurerror_messagerr  rl   rn   s	   `        r.   r   zCodeGenerator.visit_Calll  s   !$**TY"7"788"n-- 	9$($I$M$Mb$Q$Q!$0,,T4888b,e44 	S74u55 	SBS[QUQZE[E[[\M#s## *$$S)))"4;?D#((=:Q:QRRRDDDDdmDDDDD9 	- 	-C#s{++ -jj++!#x}':;;;;;CJ''''DJJsOO,,,,!!$D#666r0   c                 *    t          |j                  S rQ   )r   rz   r   s     r.   visit_ConstantzCodeGenerator.visit_Constant  s    $$$r0   c           
         | j                             t          |j                            }|3|                     |d                    |j        j                            g }|j        D ]}|                     |          }t          |          s,t          |          }|du r
|dk    r|c S |du r
|dk    r|c S R|j                                        rRt          |dd           }|
|| j        z  }t          j        dt           | j        |t%          j        |                     |                    |           t+          |          d	k    r|                    |           t+          |          d
k    rh|                                }|                                }	|                     |||	|          }
|                    |
           t+          |          d
k    ht+          |          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)categoryfilenamer  sourcer   r   r$   )_method_name_for_bool_opr  r,   r  rI  r  rh   r~   r   rV   r   r]   r   r!  rZ  warn_explicitUserWarningr   r   r\  rx  r   rz  r   )r   rj   r  nontrivial_valuessubnoderz   bvr  r  r  rt  s              r.   visit_BoolOpzCodeGenerator.visit_BoolOp  s/   377TWFF##QXXY]Y`Yijjl l l { 	0 	0G JJw''E$U++ 0%[[%KKk]&B&B LLL$JJ[L%@%@ LLL :&&(( 
$T8T::F)$/1*!,!%%"{400    "((//// !!Q&& $$U+++#$$))#''))C#''))C++D+sCHHC$$S)))	 #$$)) $%%**** ##r0   r;  r<  r@  c                 .   t          |          r!|dk    r| j                            |d          S t          |t                    r|dvr|j        }t          ||          }t          |          r%t          |t                    rt          ||          S |S )NT)r$   r   )rz   r,   )
rV   r,  permuterR   r   rz   r   rT   r   r  )r   r  r   s      r.   r  zCodeGenerator.get_Attribute  s    S!! 	6dckk=((f555c9%% 	$6G*G*G)CsD!!C   	-Zk%B%B 	-!#t,,,r0   c                 &   |                      |j                  }t          |t                    rH|j        x}| j        j        v r3| j        j        |         }|j        |k    rn|j        x}| j        j        v 3|                     ||j                  S rQ   )	r   rz   rR   r   rh   r   r2  r  r   )r   rj   r  r+   s       r.   r   zCodeGenerator.visit_Attribute  s    jj$$c:&& 	<'4DL,CCCl-d3<4'' <'4DL,CCC !!#ty111r0   c                 ^    d|j         _        t          j                            | |           d S r   )rz   r1  r   r  r   r   s     r.   
visit_ExprzCodeGenerator.visit_Expr  s*     $
%%dD11111r0   c                     d S rQ   r4   r   s     r.   visit_NoneTypezCodeGenerator.visit_NoneType  r   r0   c           
         t          |j                  }t          |          D ]\  }}t          |t          j                  rt          |j                  ||<   8t          |t          j                  r|j	        }| 
                    |j                  }t          |          s3|                     |dt          t          |                    z             |dk     rdndt          |          z   dz                       |j                  ||<   t!          d                    t          |                              d                    |          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&  )ra   r~   rf   rR   r   r  ra  rz   FormattedValue
conversionr   rZ   rI  r,   chrr  AssertionErrorrE   )r   rj   r~   r<   rz   conversion_code	evaluateds          r.   visit_JoinedStrzCodeGenerator.visit_JoinedStr  sD   dk""!&)) 	w 	wHAu%.. w,,q		E3#566 
w"'"2 JJu{33	$Y// 0++xd9oo../0 0 0 &5q%8%8TTdSEYEY>Y\_>_gghqhwxxq		$%a%h%himnsitit%u%uvvvwwvr0   c           	         |d S t          j                    5  t          j        dt                     t          j        dt                     | j        }| j                                        }|| _        t          |d          rt          |d          r| j        	                    | j
        | j        |j        z   |j                  }| j        9| j                            | j                            | j        |                     n| j                            |           | j                                        }	 t#                                          |          }n\# t&          $ r  t(          $ rE}t*          j        j        r t'          | j        j        | j        t5          |                    d d }~ww xY w|r!|| _        | j                            |           |cd d d            S # 1 swxY w Y   d S )Nrs  r  r  )rZ  catch_warningssimplefilterDeprecationWarningPendingDeprecationWarningr8  r   rh  r  
create_locr   r!  r  r  r.  r/  rg  superr   r%   r  r   rX  r  r"  rg   r;   )r   rj   	last_noderQ  here_locrL   r  	__class__s          r.   r   zCodeGenerator.visit  s,   <F$&& 	 	 !(,>???!(,EFFFI|++--H DMtX&& 274+F+F 2<224>4?UYU`C`bfbqrr*6L(()E)EdF]_g)h)hiiiiL((222<//11	ZggmmD))#    Z Z Z$8  't{tAwwOOUYYZ  / )$$X...=	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s7   D"G+<!EG+F72A F22F77'G++G/2G/c                 x    |                      |d                    t          |          j                            )Nzunsupported AST node type: {})rI  r  r,   rh   r   s     r.   r   zCodeGenerator.generic_visit  s1    &E&L&LTRVZZM`&a&abbbr0   c                 8   t          |j                  }d|cxk     rdk    rn nt          |j                  rt          d          t	          |                     |j        d                             }t          |t                    st          d          |s|dk    rd}nN	 |                     |j        d                   }n,# t          $ r}dt          |          z   dz   }Y d }~nd }~ww xY wt          | j        j        |t	          |                    d S )	Nr   r   z=`static_assert` requires one or two positional arguments onlyzqAssertion condition could not be determined at compile-time. Make sure that it depends only on `constexpr` valuesr$   r&  z'<failed to evaluate assertion message: >)r   rl   rm  r  r   r   rR   r   r  r  r;   r&   r"  rg   )r   rj   	arg_countpassedrH  r  s         r.   execute_static_assertz#CodeGenerator.execute_static_assert  s<   	NN	I"""""""""s4='9'9"[\\\%djj1&>&>??&$'' 	% D    		dA~~X"jj166GG  X X XG$q''QTWWGGGGGGX .dkotEYZaEbEbcccts   % C 
C/C**C/c                 ,     dt           j        f fd}|S )Nrj   c                      d  fd|j         D             D             } fd|j        D             }t           |i |          S )Nc                 4    i | ]\  }}|t          |          S r4   )r   )r6   r+   rz   s      r.   r   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<dictcomp>,  s7       D% *511  r0   c              3   B   K   | ]}                     |          V  d S rQ   r   r  s     r.   r   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>.  s/      #U#UGDJJw$7$7#U#U#U#U#U#Ur0   c                 T    g | ]$}t                              |                    %S r4   )r   r   rh  s     r.   r8   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<listcomp>0  s,    OOOc(C99OOOr0   )rm  rl   r   )r   rj   rr  rl   	python_fns   `   r.   rL   z*CodeGenerator.static_executor.<locals>.ret+  ss     #U#U#U#Ut}#U#U#U  C POOOTYOOODYY444555r0   )r   r   )rm  rL   s   ` r.   static_executorzCodeGenerator.static_executor)  s1    	6CH 	6 	6 	6 	6 	6 	6 
r0   r   )r   r3  rQ   )rh   r   r   r   r   r   ra  r   r   ra   r  r  r  rR   r   r  rC  r   r  updater   rX   device_printbuiltin_minbuiltin_maxrI  rM  r;  
contextlibcontextmanagerrd  rj  r   r   r   rl  rp  rr  setr  ry  r   r  r   ListCompr  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?  rR  r   r   rv  rx  r  EqNotEqLtLtEGtGtEr~  cmpopr  USubUAddNotInvertr  unaryopr|  r  r  r  r  r  r  r  r  r	   r  r   r   r  r  r   r9  BoolOprF  AndOrr@  boolopr  r   rL  rN  rW  r   r   r   rg  rn  experimental.gluonttglstatic_assertstatic_printrD  r3  rK  r   __classcell__)ra  s   @r.   r  r  "  s         /3efjQUbc=0 =0 =0+ =0U]^bUc=0AI#=0 =0 =0 =0~) )tUE3
GWM) ) )tCH~    	(-,-	)*	)*   L L L	 	 	1 1 1f ' ' '
U U U&c &%
I0E*F &4 & & & &  " " " ?Bcee &- &-3s8 &- &- &- &-V	 	 	2 2 2  !3< ! ! ! ! @ @ @<6? 6? 6?p& & &  ' ' ' 2 2 2* * *.  . . .
2 2 22 2 2$ $ $7 7 7F F F 	)n
L
L
I	8
I>T$s|"4c"9:   7C 7C 7Cr$, $, $,N!, !, !,F8 8 8>3/ 3/ 3/j* * *,  F F F$ 	#)Xsvx(TWTZ\dfifmow<d4	?C#78   t t t  	)SXy#'9cjR^?tD$5s$:;   @ @ @76 76 76r  L L L/ / /6 6 6G6 G6 G6R2 2 2& & &0U38_ 0 0 0 0OC O O O O
/E /E; /E /E /E /Eb/# /# /#b7 7 7
7 7 74% % %2$ 2$ 2$ 2$ 2$h >AWmUXU[]i<jd4
#3S#89jjj	 	 	2 2 22 2 2    $! ! ! ! !Fc c c#( t    ,
 
 
 655555#%:"OOE$:$:1??511__S!!__S!!Q$d68SXJO3L+L&M       r0   r  c                     d gt           j                  z  }j                                        D ]2\  }}	 j                            |          }
t          |	d           ||
<   3fdj                                        D ](\  }} |t          |          d d d         |           )t          g |j        j	                  }t                     \  }}ddlm} t          d j                  } fd|D             }j        }  |ddd	g          ||          }t          ||                                                      |           d
||||||                                           }|                                                                |j        }||_        |                                s2                                 st/          |           t1          d          |S )Nc                    |                                 }t          |          dk    rLt          | t                    rt	          |          j        | |<   d S t	          |          j        | j        |<   d S  | |         ||           d S r   )rz  r   rR   ra   r   r,   r|   )argumentindicesrz   indexapply_constexpr_typess       r.   r  z*ast_to_ttir.<locals>.apply_constexpr_typesG  s    w<<1(D)) >"+E"2"2"7(1%(8(8(=u%%%!!(5/7EBBBBBr0   r  r   )
namedtuplec                 (    t          |           dk    S r\   )r   )rr   s    r.   r   zast_to_ttir.<locals>.<lambda>X  s    c!ffk r0   c                 N    i | ]!}j         |d                   j        |         "S )r   )ri   r=   )r6   r<   rk   rg   s     r.   r   zast_to_ttir.<locals>.<dictcomp>Y  s-    FFF!ad#S]1%5FFFr0   SpecializationProxyr=   r&  T)r   r7  r"  r  r   r!  r0  r1  r2  r  r)  z error encountered during parsing)r   ri   r&  r   r  r   r=   ra   r   r   r   collectionsr  filterr  r  r;   r)  r   r  r  r(  verifyrD  r  )rk   rg   r(  r0  r1  r2  r  r   r>  rr   rm   r   rz   r5  r   r!  r  leavesr=   r&  proxyr   r  s   ``                    @r.   ast_to_ttirr  @  s2   R\***I##%% , ,1l  ##"1d++	#C C C C C }**,, B BeidDDbD)95AAAAB	3=#)DDI044Iz&&&&&&))3=99FFFFFFvFFFIIIJJ,{K.HII)U^__Egy9M9M9O9O_a_f_fgl_m_m%'49Ycmt*5*U[fhfqfqfsfsu u uI OOBHHJJFFN==?? ?{{}} 	&MMM=>>>Mr0   rQ   )Nr   r*  rs  r~  r  r)   rZ  r[  dataclassesr   r|   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"   r#   errorsr%   r&   r'   r/   rM   r   rT   rV   rZ   r_   rb   ro   r}   r   rz   r   r  r,   r`  r   r   r   r  r   r   r  r  r  r4   r0   r.   <module>r     s^   



        				   ! ! ! ! ! !       T T T T T T T T T T T T T T T T T T T T T T         ' ' ' ' ' ' ' ' F F F F F F F F F F F F G G G G G G G G G G C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C W W W W W W W W W W W W a a a a a a a a a a    % % % % % %! ! ! ! ! !US UT U U U UNS NT N N N N(S (T ( ( ( (  D D D*!5    "bh "Y " " " " #ttDzz*   m m m3 3 3 3 3 3 3 3*T% T% T% T% T%CO T% T% T%n7 7 7 7 7 7 7 7t $       
[ [ [ [ [CO [ [ [|(' ' ' ' ' 'r0   