
    Pi                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZm Z! dd	l"m#Z#m$Z$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4 d Z5d Z6dede7fdZ8dede7fdZ9dede7fdZ:dede7fdZ;dede7fdZ<d Z=d Z>d Z?dee$         fdZ@deejA                 dee%         fdZBe7eC eDd          hZEd ZFd  ZG G d! d"          ZH G d# d$e jI                  ZJ G d% d&          ZK e
d'(           G d) d*                      ZL G d+ d,e jI                  ZMd.d-ZNd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   )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      v/var/www/development/aibuddy-work/election-extract/venv/lib/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     !@!@!@""))++!@!@!@r/   c                 D    g | ]}| d t          |                    S )c)repr)r5   i	constantss     r-   r7   zmangle_fn.<locals>.<listcomp>#   s3    !Y!Y!Y!Q"="=il););"="=!Y!Y!Yr/   ._d_'_sq_[]__)joinsortedreplacer4   )r*   arg_tysr<   caller_contextmangled_arg_namesmangled_constantsrets     `    r-   	mangle_fnrL       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!~$$&&&Jr/   oreturnc                 ,    t          | t                    S N)
isinstancer   rM   s    r-   _is_triton_valuerS   .   s    a$$$r/   c                 ,    t          | t                    S rP   )rQ   r   rR   s    r-   _is_triton_tensorrU   2   s    a   r/   c                 b    | d u p+t          | t          t          j        j        t
          f          S rP   )rQ   r   r   coredtyper   rR   s    r-   _is_constexprrY   6   s'    9T
1y(-2E{&STTTr/   c                 r    t          |           o(| j                                        o| j        j        dk    S Nr#   )rU   r+   is_blocknumelrR   s    r-   _is_non_scalar_tensorr^   :   s/    QMQV__%6%6%L16<1;LMr/   c                 :    t          | t          t          f          S rP   )rQ   listr   rR   s    r-   _is_list_likera   >   s    a$'''r/   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	enumeraterY   r^   r&   src__name__	arg_names)nodefnargsidxargs        r-   _check_fn_argsrn   B   s    	{ !$ 	 	HC %% *?*D*D 2FD D  D  Djljvwzj{  D  D  B  D  D   	 	r/   c                 v    t          | t                    o$t          | t                    ot	          | d          S )N_fields)rQ   r+   
issubclassr   hasattr)vals    r-   _is_namedtuplert   L   s0    c4  WZU%;%;WY@W@WWr/   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 r3   r3   )r5   vrj   s     r-   r7   z*_apply_to_tuple_values.<locals>.<listcomp>X   s!    !!!aBBqEE!!!r/   c                 4    g | ]}|t          |          n|S rP   )r   r5   rw   s     r-   r7   z*_apply_to_tuple_values.<locals>.<listcomp>Y   s&    ;;;AIIaLLL1;;;r/   c                     g | ]	}|j         
S r3   r+   ry   s     r-   r7   z*_apply_to_tuple_values.<locals>.<listcomp>Z   s    """QV"""r/   )rt   r+   rp   rQ   r   r   fields
tuple_type)valuerj   r|   valstypess    `   r-   _apply_to_tuple_valuesr   P   s    d5kk"" 8	E8>	*	* 8"77$u++77777!!!!5!!!D;;d;;;D""T"""E>$ 3E6 B BCCCr/   valuesc                 >    g }| D ]}|                     |           |S rP   )_flatten_ir)r   handlesrw   s      r-   flatten_values_to_irr   ^   s0    G  	gNr/   r   r   c              #   |   K   d}|D ]}|                     | |          \  }}|V   |t          |           k    sJ d S Nr   )_unflatten_irlen)r   r   cursorr6   r~   s        r-   unflatten_ir_valuesr   e   s[      F  ((&99vS\\!!!!!!r/   c                 p    g }|                      |           | j                            |d          \  }}|S r   )r   r+   r   )rs   r   cloner1   s       r-   _clone_triton_valuer   p   s9    GOOGx%%gq11HE1Lr/   c                 >    d |                                  D             S )Nc                 V    i | ]&\  }}|t          |          rt          |          n|'S r3   )rS   r   )r5   r*   rs   s      r-   
<dictcomp>z _clone_scope.<locals>.<dictcomp>x   s=    lllQZQUWZD.>s.C.CL%c***lllr/   )items)scopes    r-   _clone_scoper   w   s#    ll^c^i^i^k^kllllr/   c                        e Zd Zd Zd Zd ZdS )enter_sub_regionc                     || _         d S rP   )	generator)selfr   s     r-   __init__zenter_sub_region.__init__}   s    "r/   c                 :   t          | j        j                  | _        t          | j        j                  | _        i | j        _        | j        j                                        | _        | j        j        	                                | _
        | j        | j        fS rP   )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...r/   c                     | j         j                            | j                   | j        | j         _        | j        | j         _        d S rP   )r   r   restore_insertion_pointr   r   r   r   r   )r   rk   kwargss      r-   __exit__zenter_sub_region.__exit__   s<    66t7HIII $$(N!!!r/   N)rg   
__module____qualname__r   r   r   r3   r/   r-   r   r   {   sA        # # #/ / /3 3 3 3 3r/   r   c                   <   e Zd Zd ZdefdZdefdZdefdZdej	        defdZ
dej        defdZdej        defd	Zdej        defd
Zdej        defdZdej        defdZdej        defdZdej        defdZdej        defdZdej        defdZdS )ContainsReturnCheckerc                     || _         d S rP   )gscope)r   r   s     r-   r   zContainsReturnChecker.__init__   s    r/   rN   c                 :     t           fd|D                       S )Nc              3   B   K   | ]}                     |          V  d S rP   visit)r5   sr   s     r-   	<genexpr>z5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>   s-      //Q4::a==//////r/   )any)r   bodys   ` r-   _visit_stmtsz"ContainsReturnChecker._visit_stmts   s&    ////$//////r/   c                     dS NFr3   )r   rj   s     r-   _visit_functionz%ContainsReturnChecker._visit_function   s	     ur/   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_fieldsrQ   r`   ASTr   )r   ri   rK   r1   r~   items         r-   generic_visitz#ContainsReturnChecker.generic_visit   s    -- 	/ 	/HAu%&& /! 6 6D!$00 6!5TZZ%5%56 E37++ /.TZZ..
r/   ri   c                     t          |j        t          j                  rV|j        j        | j        v rA| j        |j        j                 }t          ||j                  }|                     |          S dS | 	                    |j                  S r   )
rQ   r~   r   Nameidr   getattrattrr   r   )r   ri   r~   rj   s       r-   visit_Attributez%ContainsReturnChecker.visit_Attribute   sy     dj#(++ 	z}++DJM2UDI..++B///5zz$*%%%r/   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   ri   rj   s      r-   
visit_Namez ContainsReturnChecker.visit_Name   sR    >>SY&&57dk!!TW%B''+++ur/   c                     dS NTr3   r   ri   s     r-   visit_Returnz"ContainsReturnChecker.visit_Return       tr/   c                     dS r   r3   r   s     r-   visit_Assignz"ContainsReturnChecker.visit_Assign   	     ur/   c                     dS r   r3   r   s     r-   visit_AugAssignz%ContainsReturnChecker.visit_AugAssign   r   r/   c                 6    |                      |j                  S rP   r   r   r   s     r-   visit_Modulez"ContainsReturnChecker.visit_Module         +++r/   c                 6    |                      |j                  S rP   r   r   s     r-   visit_FunctionDefz'ContainsReturnChecker.visit_FunctionDef   r   r/   c                     |                      |j                  }|j        r|p|                      |j                  }|S rP   )r   r   orelse)r   ri   rK   s      r-   visit_IfzContainsReturnChecker.visit_If   sB     	**; 	87**4;77C
r/   c                 j    |                      |j                  p|                      |j                  S rP   )r   r   r   r   s     r-   visit_IfExpz!ContainsReturnChecker.visit_IfExp   s)    zz$)$$?

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


r/   r   r   rN   c                 F    g }|D ]}||                     ||           |S rP   )_flatten_ir_types)r   r   r   ir_typesr6   s        r-   flatten_ir_typeszASTFunction.flatten_ir_types   s<     	4 	4Bz  (3333r/   c                 8    |                      || j                  S rP   )r   r   )r   r   s     r-   return_types_irzASTFunction.return_types_ir   s    $$Wdn===r/   c                       fd}t          t           j        |                    } fd|D             }                     ||          }                     |          }|                    ||          S )Nc                     | j         vo|d uS rP   r<   pathr1   r   s     r-   <lambda>z'ASTFunction.serialize.<locals>.<lambda>       T^!;!M r/   c                 :    g | ]}t          j        |          S r3   )r!   r   )r5   r   r   s     r-   r7   z)ASTFunction.serialize.<locals>.<listcomp>   s&    SSS&t~t<<SSSr/   )r`   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Br/   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 r3   r3   )r5   xmake_templates     r-   r7   zBASTFunction.deserialize.<locals>.make_template.<locals>.<listcomp>  s#    &D&D&DA}}Q'7'7&D&D&Dr/   )rQ   r`   r   r   r}   r   )r6   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+++r/   c                     | j         vo|d uS rP   r   r   s     r-   r   z)ASTFunction.deserialize.<locals>.<lambda>  r  r/   r   c                 :    g | ]}                     |          S r3   )rk   )r5   r;   rj   s     r-   r7   z+ASTFunction.deserialize.<locals>.<listcomp>  s#    @@@!2771::@@@r/   )r   r`   r    rangeget_num_argsr!   r   getset_arg_attrr   r"   r<   r   r   r   )r   rj   r   r  r  r   r   r   r6   
attr_specs	attr_nameattr_valrs   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r/   N)rg   r   r   r   r   r   r   r   r+   r   r   r  r  r3   r/   r-   r   r      s          
 4	? tTVT[}    >rz >d27m > > > >C C C C C    r/   r   T)frozenc                   $    e Zd ZU eed<   eed<   dS )BoundJITMethod__self____func__N)rg   r   r   r   __annotations__r   r3   r/   r-   r  r  !  s*         r/   r  c                       e Zd ZU dddddddddedee         dee         fdZ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        fde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%d Z&d Z'd Z(d Z)de*j+        fdZ,d Z-def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 ZjdY Zkdeleef         fdZZmdefd[Zndqd\efd]Zod^ Zpd_ Zqd` Zrda Zsde*jt        fdbZue*jv        dce*jw        ddiZxeeIe*jy                 ef         ede<   df 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_typesrd   rH   	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   rQ   r   r  rg   r   r   r%  rfindr.   function_namer!  cur_noderd   rH   	scf_stackret_typer   _define_name_lookupdereference_namerj   visiting_arg_default_value)r   r+  r8  r   r:  r%  r3  r4  r5  r,  r   r!  r"  rd   rH   r#  r$  r'  r(  krw   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'''r/   c                     i | ]
}|j         |S r3   rg   r5   r1   s     r-   r   zCodeGenerator.<dictcomp>h  s,     ) ) ) 	

A) ) )r/   builtin_namespaceprintminmaxc                 8    t          | j        j        ||          S rP   )r&   r%  rf   )r   ri   messages      r-   _unsupportedzCodeGenerator._unsupportedr  s    +DKOT7KKKr/   c                     t                      }| j                            ||          }||u rdS t          |          rdS dS )NFT)objectr   r  rY   )r   r*   absent_markerrs   s       r-   _is_constexpr_globalz"CodeGenerator._is_constexpr_globalu  sJ    koodM22-5 	4ur/   c                      dt           f fddt           f fdt                      dt           dt          f fd}|S )Nr*   c                 :    j                             | |          S rP   )r   r  )r*   absentr   s     r-   local_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookup  s    ;??4000r/   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   rF  r+   r   rQ   r   r   
startswithr   rX   rt   rP  r@  r   compilationallow_non_constexpr_globals	NameErrortextwrapdedentrF   )r*   rS  rs   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"3''--d33 3%A!   $ 
 !4/3!4 !4 !4 5 5 6=WT35G5GI I Ir/   rN   c                 x    }j         j        fD ]} || |          }||ur|c S t          |  d          )Nz is not defined)rF  r  r]  )r*   rS  lookup_functionr~   rO  r`  rT  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5r/   )strrN  r   )r   rc  rO  r`  rT  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 r/   c              #   .   K   || _         d V  d | _         d S rP   )r1  )r   prefixs     r-   _name_loc_prefixzCodeGenerator._name_loc_prefix  s%      "("&r/   c                    t          |t          j        t          j        f          rB|                    | j                            ||                                                     d S t          |          r\g }|	                    |           |D ]D}|                    | j                            ||                                                     Cd S d S rP   )
rQ   r   r~   block_argumentr2  r   create_name_locget_locrS   r   )r   rs   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r/   r*   r~   rN   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*   r~   s      r-   	set_valuezCodeGenerator.set_value  s"     "D %r/   c                 n    | j                                         }| j                                         }||fS rP   )r   rk  r   )r   locips      r-   _get_insertion_point_and_locz*CodeGenerator._get_insertion_point_and_loc  s3     l""$$\--//3wr/   c                 n    | j                             |           | j                             |           d S rP   )r   r   r2  )r   rr  rq  s      r-   _set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_loc  s4    ,,R000S!!!!!r/   c                    | j                                         }| j                             |           | j                            |           |                     |j                   | j                                         |                                 g }g }g }|	                                D ]\  }}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_startr<  appendvisit_compound_statementr   poperaser   rS   r   _verify_loop_carried_variabler   r+   extendr   copy)r   ri   r   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()) 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,,r/   c                     t          |          s|g}|D ]4}|                     |           t          |t          j                  r d S 5d S rP   )ra   r   rQ   r   r   )r   stmtsstmts      r-   r{  z&CodeGenerator.visit_compound_statement  sf    U## 	GE 	 	DJJt $
++ 		 	r/   c                 F    t           j                            | |           d S rP   r   NodeVisitorr   r   s     r-   r   zCodeGenerator.visit_Module
       %%dD11111r/   c                                            |j                  }|J t          j         fd|j        D                       }|S )Nc                 :    g | ]}                     |          S r3   r   )r5   eltr   s     r-   r7   z,CodeGenerator.visit_List.<locals>.<listcomp>  s#    DDD3tzz#DDDr/   )r   r   r   r   elts)r   ri   r   r  s   `   r-   
visit_ListzCodeGenerator.visit_List  sJ    jj""{{{~DDDD$)DDDEEr/   ri   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   iterrQ   tl_tupleNotImplementedErrorro  targetr   rz  r  )r   ri   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   r/   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 rP   )	rQ   r   r   r   r   intfloatr/  	to_tensor)r~   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Lr/   zInconsistent return types:  and )r   r~   r   voidrQ   rW   r   r   r+   r   rK   r=  	TypeErrorrx  set_insertion_point_to_end)r   ri   	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//?????r/   c                     |                      |j                  }t          |t          j        j                  sJ |j        S rP   )r   r~   rQ   r   rW   r   r   r   ri   rk   s      r-   visit_StarredzCodeGenerator.visit_StarredA  s8    zz$*%%$ 344444{r/   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   targetsr~   )r  r~   
annotationTFpublicprivatec                 D    g | ]}j                             |          S r3   )r   create_poison)r5   r6   r   s     r-   r7   z3CodeGenerator.visit_FunctionDef.<locals>.<listcomp>x  s)    tttdl88<<tttr/   )/r   rk   rj   rL  re   defaultsr  rm   r   r   r   r   	AnnAssignr@  r!  r8  r  r   get_or_insert_functionr   r:  rd   	push_backadd_entry_blockr  rH   initialize_calleeziprm  ro  r   ry  r{  r   has_terminatorr=  r   r  rK   rQ   r}   r   r   
reset_typer   finalizer  )r   ri   rh   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_FunctionDefF  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 rP   )rk   r   kwarg)r   ri   rh   rm   r  s        r-   visit_argumentszCodeGenerator.visit_arguments~  sO    	9 	+ 	+C$**S//**IIjj,,+%%r/   c                 P    t           j                            | |           |j        S rP   )r   r  r   rm   r   s     r-   	visit_argzCodeGenerator.visit_arg  s!    %%dD111xr/   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  r~   r   r   r  r   )r   ri   r  r  r~   s        r-   visit_AnnAssignzCodeGenerator.visit_AnnAssign  s    ZZ00
DK((

4:&&""$$ F "E "E "E F F Fe$$E"'DK;v&&  &&&r/   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)rQ   r   r   r   	Subscriptvisit_Subscript_Storer	   re   r  assignTargetr   r   r  r   ro  r   )r   r  r~   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1r/   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 rP   )	rQ   r   r   r   rX   r   rS   r/  r  )r~   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Lr/   r#   r   )rQ   r   r  r  r  r   r   rg  r   r   r~   r  )r   ri   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                 0   t          j        |j                  }t          j                    |_        t          j        ||j        |j                  }t          j	        |j        g|          }| 
                    |           | 
                    |          S )Nr  )r  deepcopyr  r   Loadr   BinOpopr~   r   r   )r   ri   lhsrhsassigns        r-   r   zCodeGenerator.visit_AugAssign  sq    mDK(((**iTWdj11T[M===

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

1111r/   )r  r   r   r  s   `  r-   visit_TuplezCodeGenerator.visit_Tuple  s.    1111ty111~d###r/   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          ||          |          S )N	_semanticz__(.*)__z__r\1__)	rU   r   r/  r(   subrQ   r   r   r   )r   method_namer  r  reverse_method_names        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(wsK((---r/   c                 Z   |                      |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  rL  formatrg   r  )r   ri   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((c3???r/   __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   ry  r{  r   r   r   r  r   r   r   rS   r   rz  r+   rE   keys)r   ri   r   
then_block
else_block	then_defs	then_vals	else_defs	else_valsr  r*   r~   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Br/   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 rP   r3   r5   r*   r  s     r-   r   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>@  '      /R/RD	$/R/R/R/R/R/Rr/   c              3   (   K   | ]}|         V  d S rP   r3   r5   r*   r  s     r-   r   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>E  r  r/   c                 :    g | ]}                     |          S r3   rm   )r5   r;   endif_blocks     r-   r7   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>P  s%    LLLa{q))LLLr/   c                 *    g | ]}|         j         S r3   r{   r  s     r-   r7   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>Q       888$4%888r/   )r   r   rx  r  create_cond_branchrl  r  r  r   create_branchr   r  get_typeadd_argumentry  r  r   ro  )r   condri   srr   ip_blockr  r  r  r  r  then_helse_hr6   res_handlesr   
new_valuesr*   	new_valuer  r$  r  s                      @@@r-   visit_if_top_levelz CodeGenerator.visit_if_top_level0  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 rP   r3   r  s     r-   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>`  r  r/   c                 6    g | ]}|                                 S r3   r)  r5   hs     r-   r7   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>d  s     .R.R.Rqzz||.R.R.Rr/   Tr   c              3   (   K   | ]}|         V  d S rP   r3   r!  s     r-   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>o  s'      3V3VIdO3V3V3V3V3V3Vr/   c                 :    g | ]}                     |          S r3   
get_result)r5   r;   if_ops     r-   r7   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>t  s'    MMMqu''**MMMr/   c                 *    g | ]}|         j         S r3   r{   r  s     r-   r7   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>u  r&  r/   )r   rs  r   rx  r   r  r   r  rm  ru  create_if_oprl  merge_block_beforeget_then_blockr  r   create_yield_opget_else_blockr  r   ro  )r   r+  ri   r,  r   r1   rr  last_locr  r  r  r  r*   rs   r  r0  r   r1  r2  r  r>  r  s                      @@@r-   visit_if_scfzCodeGenerator.visit_if_scfW  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 rP   rD  rE  s     r-   r   z)CodeGenerator.visit_If.<locals>.<genexpr>  $      !G!G!*!G!G!G!G!G!Gr/   )r   testrU   r^   rL  r+   r\   warningswarnr   unparser   rW   _unsplatr/  toint1r   r   r<  r3  rF  r   _condition_typesr  rD   rg   r   r   r{  )r   ri   r+  active_blocks       r-   r   zCodeGenerator.visit_Ifz  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7r/   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   rI  rJ  c              3   $   K   | ]}|j         V  d S rP   rD  rE  s     r-   r   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>  rL  r/   )$r   rM  rU   rR  r   rS  r/  r   rs  r   rx  ry  r  r   r   r   ru  r+   r  to_irr@  rl  rA  rB  r  rC  rD  rW   r   r=  r   rT  rL  r  rD   rg   )r   ri   r+  rr  rE  r  r  r  r  r=  ret_type_irr>  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                 ,    t          |j                  dk    r|j        d         j        }                     |j                  }|t
          j        k    rT fd|j        D             } ||d j        i5   	                    |j
                   d d d            n# 1 swxY w Y   d S 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 )	Nr#   r   c                 :    g | ]}                     |          S r3   r   r5   rm   r   s     r-   r7   z,CodeGenerator.visit_With.<locals>.<listcomp>  s#    @@@C

3@@@r/   _builderc                 :    g | ]}                     |          S r3   r   r\  s     r-   r7   z,CodeGenerator.visit_With.<locals>.<listcomp>  s#    999DJJsOO999r/   c              3   B   K   | ]}                     |          V  d S rP   r   )r5   kwr   s     r-   r   z+CodeGenerator.visit_With.<locals>.<genexpr>  s-      >>"tzz"~~>>>>>>r/   r  zCCannot have `return` statements inside `with` statements in triton )r   r   context_exprr   r   r   
async_taskrk   r   r{  r   dictkeywordsr/  rz  r  r   optional_varsro  r   r   rL  reversedr   )r   ri   r+  withitemClassrk   cm_listr   callrj   kwscmresvar_names   `            r-   
visit_WithzCodeGenerator.visit_With  so    tz??ajm0G JJw|44M 333@@@@7<@@@"]D@4<@@ = =11$)<<<= = = = = = = = = = = = = = =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))))	* 	*s   6BB!$B!c                     d S rP   r3   r   s     r-   
visit_PasszCodeGenerator.visit_Pass  s    r/   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opsrL  r   r  r   r+   r   Isr   IsNot_method_name_for_comp_opr  r  rg   r  )r   ri   r  r  	lhs_value	rhs_valuer  s          r-   visit_ComparezCodeGenerator.visit_Compare  sa   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((c3???r/   __eq____ne____lt____le____gt____ge__rv  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  rL  rg   rU   r   r/  AttributeErrorr   )r   ri   r  rj   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 looprw  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.)rS   r+   rU   )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 	@ 	@2P2Pr/   c                 6    |                      |j                  S rP   )r   ra  r   s     r-   visit_withitemzCodeGenerator.visit_withitem"  s    zz$+,,,r/   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 r3   r7  r8  s     r-   r7   z-CodeGenerator.visit_While.<locals>.<listcomp>,  s     ;;;

;;;r/   c                 :    g | ]}                     |          S r3   r#  )r5   r;   before_blocks     r-   r7   z-CodeGenerator.visit_While.<locals>.<listcomp>2  s'    PPP!,**1--PPPr/   llvm.loop_annotationc                 :    g | ]}                     |          S r3   r#  )r5   r;   after_blocks     r-   r7   z-CodeGenerator.visit_While.<locals>.<listcomp>E  s%    QQQ1KOOA..QQQr/   c              3   2   K   | ]}j         |         V  d S rP   r   r5   r*   r   s     r-   r   z,CodeGenerator.visit_While.<locals>.<genexpr>O  *      0U0UtT1B0U0U0U0U0U0Ur/   c                 :    g | ]}                     |          S r3   r<  )r5   r;   while_ops     r-   r7   z-CodeGenerator.visit_While.<locals>.<listcomp>S  s'    SSSQ(--a00SSSr/   FzNot implemented)'r   rs  r  ru  r   create_while_opcreate_block_with_parent
get_beforery  r  r   r   r  r   r   rm  r   rM  rQ   r   	conditiondisable_licmset_attrget_disable_loop_licm_attrr  create_condition_oprl  	get_afterr<  rz  r{  r   r|  r   rC  r   r   r  r   )r   ri   r,  r   r   rr  rE  r  r  init_fe_tysr  
block_argscondition_argsr*   rs   r+  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 rP   )
rQ   r   r   r  r   r~   slicerS   call_Method__getitem__)r   ri   r  slicess       r-   visit_Subscript_Loadz"CodeGenerator.visit_Subscript_Load^  s}    $(CH-----jj$$DJ''C   	N##D#/3"MMM6{r/   c                      t          d          )Nz&__setitem__ is not supported in triton)r  )r   ri   r~   s      r-   r  z#CodeGenerator.visit_Subscript_Storef  s    !"JKKKr/   c                 ,    |                      |          S rP   )r  r   s     r-   visit_SubscriptzCodeGenerator.visit_Subscripti  s    ((...r/   c                 *      fd|j         D             S )Nc                 :    g | ]}                     |          S r3   r   )r5   dimr   s     r-   r7   z0CodeGenerator.visit_ExtSlice.<locals>.<listcomp>m  #    555C

3555r/   )dimsr   s   ` r-   visit_ExtSlicezCodeGenerator.visit_ExtSlicel  s    5555495555r/   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           j!        &                    |j#        |j#                  } j!        &                    ||j#                  }|'                     j(                  }|j)        t          j*        j#        j+        j,        k    }|j-        }|j-        }|j-        } j(        .                    |||          } j(        .                    |||          } j(        .                    |||          } j(        /                    |          } 0                    |j        j        t          j*        1                    ||                     te                     5 }|\  }} 3                                \  }} 4                    ||          \  }}} 5                    ||            j(        6                    ||||          'to          |	          .'8                    d j(        9                    |	                     to          |
          .'8                    d j(        9                    |
                     |r-'8                    d j(        :                                           |r-'8                    d j(        :                                           |r-'8                    d j(        :                                           |r-'8                    d j(        ;                                            j<        =                    |           '>                    d          ( j(        ?                    (           (fdt          t;          |                    D             }t          ||          } t          ||           D ]1\  }!}" B                    |"|!            0                    |!|"           2                     |j                    j<        C                                 t           fd|D                       }#t;          |#          dk    r j(        E                    |#           (F                                }$|$G                                dk    s
J d             j(        ?                    (           'H                                }|r6 j(        I                    ||          } j(        J                    ||          } j        |j        j                 j-        K                    |            0                    |j        j        t          j*        1                    ||                      B                    ||j        j                   d d d            n# 1 swxY w Y   'fdt          t;          |                    D             }%t          |%|          }&t          ||&          D ]1\  }!}" 0                    |!|"            B                    |"|!           2|j        D ]}J d            d S )Nc                 :    g | ]}                     |          S r3   r   r\  s     r-   r7   z+CodeGenerator.visit_For.<locals>.<listcomp>q  s#    ???TZZ__???r/   c              3   B   K   | ]}                     |          V  d S rP   r   r5   keywordr   s     r-   r   z*CodeGenerator.visit_For.<locals>.<genexpr>r  s/      QQ74::g..QQQQQQr/   Fr#   r   r   zAOnly `range` and `static_range` iterators are currently supportedTz0For loop bounds and step must all be ints, are (rJ  r
  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#  )r5   r;   for_op_bodys     r-   r7   z+CodeGenerator.visit_For.<locals>.<listcomp>  s)    VVV[__QU33VVVr/   c              3   2   K   | ]}j         |         V  d S rP   r  r  s     r-   r   z*CodeGenerator.visit_For.<locals>.<genexpr>  r  r/   z7We use SCF, so the loop body should only have one blockc                 :    g | ]}                     |          S r3   r<  )r5   r;   for_ops     r-   r7   z+CodeGenerator.visit_For.<locals>.<listcomp>  s'    QQQ1&++A..QQQr/   z)Don't know what to do with else after for)Lr   r  r   rk   rc  rd  r   static_ranger  startr~   endstepr   r   r  r   r{  r   r   r   r  r   
num_stagesloop_unroll_factordisallow_acc_multi_bufferflattenwarp_specializer  r   NumRuntimeErrorrY   r/  r  rX   is_intr  integer_promote_implrX  r   int_signednessrW   
SIGNEDNESSSIGNEDrl  create_int_castr  ro  r   r   rs  r  ru  create_for_opr   r  get_int32_attrget_unit_attrr  r<  rz  get_bodyry  r   r  rm  r|  r   rC  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_with))r   ri   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ivr,  r   r   rr  rE  r  r  r  block_handlesr  r*   rs   r  for_op_regionr  result_valuesr  r  s)   `                                      @@r-   	visit_ForzCodeGenerator.visit_Foro  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CGAJJ9O9OB!$Y!!3!31DINSTDU9V9VB#&y>>A#5#59Q<<4::cgajj;Q;QDD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-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3t{~x}';';B'H'HIIId## 0	<r$&!G\<<>>LB,0,>,>tW,M,M)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K'.DDRHHH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   Pb00b47b4c                     |                      |j                  }|                      |j                  }|                      |j                  }t	          j        |||          S rP   )r   lowerupperr  r   r  )r   ri   r  r  r  s        r-   visit_SlicezCodeGenerator.visit_Slice  sO    

4:&&

4:&&zz$)$$~eUD111r/   c                 6    |                      |j                  S rP   )r   r~   r   s     r-   visit_IndexzCodeGenerator.visit_Index  s    zz$*%%%r/   c                 D    |j         |                     |j                  fS rP   )rm   r   r~   r   s     r-   visit_keywordzCodeGenerator.visit_keyword  s    xDJ////r/   c                     |                      |j                  }|j        |                      |j                  nd}t          j                            ||| j                  S )Nr)  r  )r   rM  msgr   rW   device_assertr/  )r   ri   rM  r  s       r-   visit_AssertzCodeGenerator.visit_Assert  sS    zz$)$$&*h&:djj"""}**4*NNNr/   rj   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 r3   r3   )r5   r*   rk   s     r-   r7   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s    444tT
444r/   c                      t          |          S rP   rY   r1   r  s     r-   r   z0CodeGenerator.call_JitFunction.<locals>.<lambda>	  s    M!4D4D r/   c                 2    i | ]}|t          |          S r3   r!   r5   r   rk   s     r-   r   z2CodeGenerator.call_JitFunction.<locals>.<dictcomp>
  s&    MMMDD+D$77MMMr/   c                 "    t          |           S rP   r  r  s     r-   r   z0CodeGenerator.call_JitFunction.<locals>.<lambda>  s    q9I9I5I r/   c                 0    g | ]}t          |          S r3   r  r  s     r-   r7   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s$    HHHd%dD11HHHr/   c                     g | ]	}|j         
S r3   r{   r5   rm   s     r-   r7   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s    /M/M/MS/M/M/Mr/   c                     g | ]H}|,t          |t          t          t          j        j        f          rt          j        j        n|j        IS rP   )rQ   r   r  r   rW   rX   r   r+   r  s     r-   r7   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s_         ,/;*SFJCQYQ^QdEe;g ;g;''lolt  r/   )r   r%  r:  r"  rd   r#  r$  r3  r4  r5  rH   r,  c                 :    g | ]}                     |          S r3   r<  )r5   r;   call_ops     r-   r7   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>1  s'    SSSQ7%%a((SSSr/   )4inspectgetcallargsrj   rh   re   rQ   r   rX   r  r  r   r   rW   r   r    rH   rL   r   r   has_functionr   r   rc  r  r+  get_capture_scoper7  rd   r   r3  r4  r5  r,  r   parse	Exceptionr   r[  front_end_debuggingr$   r%  rf   r;  r=  get_functionr   ri  r  r  get_num_resultsnextr   )r   rj   rk   r   rH   r;   rm   args_cst	args_pathargs_valfn_namer#  r$  r   r8  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 rtA          tB          |          } ||i |}d }	t          |tD          j        t          j        f          rtG          ||	          S  |	|          S )Nr   r  r  rH  c                 B    t          |           r| S t          |           S rP   )rS   r   )r  s    r-   wrap_constexprz3CodeGenerator.call_Function.<locals>.wrap_constexpr\  s#    "" Q<<r/   )$rQ   r  r   insertr  r  r   rn   r  rr   rS   r   rW   
is_builtinr   rc  r
  	signature__call__
parametersr/  r   r  r   r[  r  r$   r%  rf   rd  rF  r   mapr   builtinsr   )
r   ri   rj   rk   rj  extra_kwargssigrK   r  r  s
             r-   call_FunctionzCodeGenerator.call_Function4  sb   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0+T22Db$#	  	  	 
 cHNHN;<< 	?)#~>>>~c"""s   4E< <
G;GGc                     t          |t                    r|                    d|           |                     ||||          S r   )rQ   r   r  r(  )r   ri   rj   fn_selfrk   rj  s         r-   r  zCodeGenerator.call_Methode  sB    b+&& 	$KK7###!!$D#666r/   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                       } fd|j        D             }t'          t(          j                            d |D                                 }                     ||||          S )	N_must_use_resultF
_is_unusedz#The result of %s is not being used.rY  c              3   B   K   | ]}                     |          V  d S rP   r   r  s     r-   r   z+CodeGenerator.visit_Call.<locals>.<genexpr>x  s/      DD74::g&&DDDDDDr/   c                 :    g | ]}                     |          S r3   r   r\  s     r-   r7   z,CodeGenerator.visit_Call.<locals>.<listcomp>y  r  r/   c              3   J   K   | ]}t          |t                    r|n|gV  d S rP   )rQ   r`   )r5   r  s     r-   r   z+CodeGenerator.visit_Call.<locals>.<genexpr>z  s:      1b1bXYz!T7J7J2S!!QRPS1b1b1b1b1b1br/   )r   r   r   rQ   r   statically_implemented_functionsr  r   r   rP  rd  rz  r$   r%  rf   rD   rc  rd  rk   r`   	itertoolschainfrom_iterabler(  )r   ri   rj   static_implementationmurerror_messagerj  rk   s   `       r-   r   zCodeGenerator.visit_Callj  sx   !$**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555549555IO111b1b]a1b1b1bbbcc!!$D#666r/   c                 *    t          |j                  S rP   )r   r~   r   s     r-   visit_ConstantzCodeGenerator.visit_Constant~  s    $$$r/   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    rg|                                }|                                }	|                     ||	|          }
|                    |
           t+          |          d
k    gt+          |          dk    sJ |d	         S )Nz9AST boolean operator '{}' is not (currently) implemented.Flogical_andT
logical_orlinenozeLogical operators 'and' and 'or' are deprecated for non-scalar tensors; please use '&' or '|' instead)categoryfilenamer=  sourcer   r   r#   )_method_name_for_bool_opr  r+   r  rL  r  rg   r   r   rU   r   r\   r   r$  rN  warn_explicitUserWarningr#  r   rP  rz  r   r|  r  )r   ri   r  nontrivial_valuessubnoder~   bvr=  r  r  rl  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++KcBBC$$S)))	 #$$)) $%%**** ##r/   r;  r<  rA  c                    |                      |j                  }t          |          r&|j        dk    r| j                            |d          S t          |t                    r|j        dvr|j        }t          ||j                  }t          |          r%t          |t                    rt          ||          S |S )NT)r#   r   )r~   r+   )r   r~   rU   r   r/  permuterQ   r   r   rS   r   r  )r   ri   r  r   s       r-   r   zCodeGenerator.visit_Attribute  s    jj$$S!! 	6di3&6&6=((f555c9%% 	$);L*L*L)CsDI&&C   	-Zk%B%B 	-!#t,,,r/   c                 ^    d|j         _        t          j                            | |           d S r   )r~   r-  r   r  r   r   s     r-   
visit_ExprzCodeGenerator.visit_Expr  s*     $
%%dD11111r/   c                     d S rP   r3   r   s     r-   visit_NoneTypezCodeGenerator.visit_NoneType  r   r/   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)  )r`   r   re   rQ   r   Constantrd  r~   FormattedValue
conversionr   rY   rL  r+   chrr  AssertionErrorrD   )r   ri   r   r;   r~   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r/   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 )Nignorer=  
col_offset)rN  catch_warningssimplefilterDeprecationWarningPendingDeprecationWarningr;  r   rk  rr   
create_locr#  r$  r=  r[  r1  r2  rj  superr   r$   r  r   r[  r  r%  rf   r:   )r   ri   	last_noderE  here_locrK   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: {})rL  r  r+   rg   r   s     r-   r   zCodeGenerator.generic_visit  s1    &E&L&LTRVZZM`&a&abbbr/   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   rk   rd  r  r   r   rQ   r   r  r  r:   r%   r%  rf   )r   ri   	arg_countpassedrK  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 )Nri   c                      d  fd|j         D             D             } fd|j        D             }t           |i |          S )Nc                 4    i | ]\  }}|t          |          S r3   )r   )r5   r*   r~   s      r-   r   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<dictcomp>  s7       D% *511  r/   c              3   B   K   | ]}                     |          V  d S rP   r   r  s     r-   r   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>  s/      #U#UGDJJw$7$7#U#U#U#U#U#Ur/   c                 T    g | ]$}t                              |                    %S r3   )r   r   r\  s     r-   r7   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<listcomp>  s,    OOOc(C99OOOr/   )rd  rk   r   )r   ri   rj  rk   	python_fns   `   r-   rK   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5r/   )r   r   )rp  rK   s   ` r-   static_executorzCodeGenerator.static_executor  s1    	6CH 	6 	6 	6 	6 	6 	6 
r/   r   )r   r1  rP   )rg   r   r   r   r   r   rd  r   r   r`   r  r  r  rQ   r   rr   rF  r   r  updater   rW   device_printminimummaximumrL  rP  r>  
contextlibcontextmanagerrg  rm  r   r   r   ro  rs  ru  r  r{  r   r  r   ListCompr  r   r  r   r  r  r  r  r   r   r   r  r  r  r  r  AddSubMultDivFloorDivModPowLShiftRShiftBitAndBitOrBitXorr  r
   operatorr  r3  rF  r   r   rn  rp  ry  EqNotEqLtLtEGtGtErv  cmpopr  USubUAddNotInvertr  unaryopr~  r  r  r  r  r  r  r  r  r  r	   r  r  r  r(  r  r   r9  BoolOprG  AndOrrA  boolopr   rL  rN  rX  r   r   r   rj  rq  experimental.gluonttglstatic_assertstatic_printrG  r1  rN  r   __classcell__)rd  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 & & & &  " " "#- #- #-P	 	 	2 2 2  !3< ! ! ! ! @ @ @<S    
6? 6? 6?p& & &  ' ' ' 2 2 2* * *.  . . .
2 2 22 2 2$ $ $	. 	. 	.@ @ @ 	)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* * *>  @ @ @$ 	#)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A6 A6 A6F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 7(% % %2$ 2$ 2$ 2$ 2$h >AWmUXU[]i<jd4
#3S#89jjj
 
 
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       r/   r  c                 :    d gt           j                  z  }t          j                                                  }t          |d          \  }	}
t          j                                                  D ]Z\  }\  }} j                            |          }d }|	!|	d         |k    r|
}t          |d          \  }	}
t          ||          ||<   [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t3          |           t5          d          |S )N)NNr   )
namedtuplec                 (    t          |           dk    S r[   )r   )rw   s    r-   r   zast_to_ttir.<locals>.<lambda>?  s    c!ffk r/   c                 N    i | ]!}j         |d                   j        |         "S )r   )rh   r<   )r5   r;   rj   rf   s     r-   r   zast_to_ttir.<locals>.<dictcomp>@  s-    FFF!ad#S]1%5FFFr/   SpecializationProxyr<   r!  T)r   r:  r%  r!  r#  r$  r3  r4  r5  r   r,  z error encountered during parsing)r   rh   r  r<   r   r  re   r!  indexr   r   r   r   collectionsr  filterr  r  r:   r,  r   r  r   r+  verify_with_diagnosticsrG  r  )rj   rf   r+  r3  r4  r5  r   r   
const_iterkcvcr;   ksrw   rl   cexprr8  r#  r$  r  leavesr<   r!  proxyr   s   ``                       r-   ast_to_ttirr  /  s1   R\***Icm))++,,J*l++FB 3 3 5 566 - -
7Bl  $$>beqjjE*l33FB"1e,,	#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=>>>Mr/   rP   )Or   r%  rv  r  r
  r(   rN  r^  r2  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"   errorsr$   r%   r&   r.   rL   r   rS   rU   rY   r^   ra   rn   rt   r   r   r~   r   r  r+   rT  r   r   r   r  r   r   r  r  r  r3   r/   r-   <module>r     sv   



        				       ! ! ! ! ! !       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 H H H H H H H H H H 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 ( ( ( (  X X X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 $       
E E E E ECO E E EP(     r/   