
    XhG                       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 dd	lmZm Z m!Z! dd
l"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. d Z/d Z0dede1fdZ2dede1fdZ3dede1fdZ4dede1fdZ5dede1fdZ6d Z7d Z8d Z9dee          fdZ:deej;                 dee!         fdZ<e1e= e>d          hZ? G d  d!          Z@ G d" d#e jA                  ZB G d$ d%          ZC ed&'           G d( d)                      ZD G d* d+e jA                  ZEd-d,ZFdS ).    N)	dataclass)
ModuleType)	AnyCallableDictOptionalTupleTypeUnionIterableList   )knobslanguage)irgluon_ir)	constexpr	str_to_tytensor)_unwrap_if_constexpr
base_value	base_type)get_jit_fn_file_lineget_full_name)JITFunction)find_paths_ifget_iterable_pathset_iterable_path   )CompilationErrorCompileTimeAssertionFailureUnsupportedLanguageConstructc                 `    d}t          j        ||           st          d| d|  |           | S )Nz^[a-zA-Z_][a-zA-Z0-9_]*$zinvalid z identifier: )rematchr    )nametypepatterns      p/var/www/tools.fuzzalab.pt/emblema-extractor/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                 b   d                     d |D                       }d                     fdt                    D                       }|                    dd          }|                    dd          }|                    dd                              d	d          }|  d
| d
| }|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)r1   i	constantss     r)   r3   zmangle_fn.<locals>.<listcomp>"   s3    !Y!Y!Y!Q"="=il););"="=!Y!Y!Yr+   ._d_'_sq_[]__)joinsortedreplace)r&   arg_tysr8   mangled_arg_namesmangled_constantsrets     `   r)   	mangle_fnrG      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   rH   s    r)   _is_triton_valuerN   +   s    a$$$r+   c                 ,    t          | t                    S rK   )rL   r   rM   s    r)   _is_triton_tensorrP   /   s    a   r+   c                 b    | d u p+t          | t          t          j        j        t
          f          S rK   )rL   r   r   coredtyper   rM   s    r)   _is_constexprrT   3   s'    9T
1y(-2E{&STTTr+   c                 r    t          |           o(| j                                        o| j        j        dk    S Nr   )rP   r'   is_blocknumelrM   s    r)   _is_non_scalar_tensorrY   7   s/    QMQV__%6%6%L16<1;LMr+   c                 :    t          | t          t          f          S rK   )rL   listtuplerM   s    r)   _is_list_liker]   ;   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	enumeraterT   rY   r"   src__name__	arg_names)nodefnargsidxargs        r)   _check_fn_argsrj   ?   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)rL   r'   
issubclassr\   hasattr)vals    r)   _is_namedtuplerp   I   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 r/   r/   )r1   vrf   s     r)   r3   z*_apply_to_tuple_values.<locals>.<listcomp>U   s!    !!!aBBqEE!!!r+   c                 4    g | ]}|t          |          n|S rK   )r   r1   rs   s     r)   r3   z*_apply_to_tuple_values.<locals>.<listcomp>V   s&    ;;;AIIaLLL1;;;r+   c                     g | ]	}|j         
S r/   r'   ru   s     r)   r3   z*_apply_to_tuple_values.<locals>.<listcomp>W   s    """QV"""r+   )rp   r'   rl   rL   r   r\   fields
tuple_type)valuerf   rx   valstypess    `   r)   _apply_to_tuple_valuesr}   M   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 rK   )_flatten_ir)r~   handlesrs   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|   cursorr2   rz   s        r)   unflatten_ir_valuesr   b   s[      F  ((&99vS\\!!!!!!r+   c                        e Zd Zd Zd Zd ZdS )enter_sub_regionc                     || _         d S rK   )	generator)selfr   s     r)   __init__zenter_sub_region.__init__o   s    "r+   c                 N   | j         j                                        | _        | j         j                                        | _        i | j         _        | j         j                                        | _        | j         j        	                                | _
        | j        | j        fS rK   )r   lscopecopy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__r   s~    ~,113327799$&! N2FFHH N2FFHH|T...r+   c                     | j         j                            | j                   | j        | j         _        | j        | j         _        d S rK   )r   r   restore_insertion_pointr   r   r   r   r   )r   rg   kwargss      r)   __exit__zenter_sub_region.__exit__{   s<    66t7HIII $$(N!!!r+   N)rc   
__module____qualname__r   r   r   r/   r+   r)   r   r   m   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 rK   )gscope)r   r   s     r)   r   zContainsReturnChecker.__init__   s    r+   rI   c                 :     t           fd|D                       S )Nc              3   B   K   | ]}                     |          V  d S rK   visit)r1   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 NFr/   )r   rf   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_fieldsrL   r[   ASTr   )r   re   rF   r-   rz   items         r)   generic_visitz#ContainsReturnChecker.generic_visit   s    -- 	/ 	/HAu%&& /! 6 6D!$00 6!5TZZ%5%56 E37++ /.TZZ..
r+   re   c                     t          |j        t          j                  rV|j        j        | j        v rA| j        |j        j                 }t          ||j                  }|                     |          S dS | 	                    |j                  S r   )
rL   rz   r   Nameidr   getattrattrr   r   )r   re   rz   rf   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   re   rf   s      r)   
visit_Namez ContainsReturnChecker.visit_Name   sR    >>SY&&57dk!!TW%B''+++ur+   c                     dS NTr/   r   re   s     r)   visit_Returnz"ContainsReturnChecker.visit_Return       tr+   c                     dS r   r/   r   s     r)   visit_Assignz"ContainsReturnChecker.visit_Assign   	     ur+   c                     dS r   r/   r   s     r)   visit_AugAssignz%ContainsReturnChecker.visit_AugAssign   r   r+   c                 6    |                      |j                  S rK   r   r   r   s     r)   visit_Modulez"ContainsReturnChecker.visit_Module         +++r+   c                 6    |                      |j                  S rK   r   r   s     r)   visit_FunctionDefz'ContainsReturnChecker.visit_FunctionDef   r   r+   c                     |                      |j                  }|j        r|p|                      |j                  }|S rK   )r   r   orelse)r   re   rF   s      r)   visit_IfzContainsReturnChecker.visit_If   sB     	**; 	87**4;77C
r+   c                 j    |                      |j                  p|                      |j                  S rK   )r   r   r   r   s     r)   visit_IfExpz!ContainsReturnChecker.visit_IfExp   s)    zz$)$$?

4;(?(??r+   c                 6    |                      |j                  S rK   )r   funcr   s     r)   
visit_Callz ContainsReturnChecker.visit_Call   s    zz$)$$$r+   N)rc   r   r   r   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   r/   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 rK   )	ret_types	arg_typesr8   attrs)r   r   r   r8   r   s        r)   r   zASTFunction.__init__   s"    """


r+   r   r|   rI   c                 F    g }|D ]}||                     ||           |S rK   )_flatten_ir_types)r   r   r|   ir_typesr2   s        r)   flatten_ir_typeszASTFunction.flatten_ir_types   s<     	4 	4Bz  (3333r+   c                 8    |                      || j                  S rK   )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 rK   r8   pathr-   r   s     r)   <lambda>z'ASTFunction.serialize.<locals>.<lambda>       T^!;!M r+   c                 :    g | ]}t          j        |          S r/   )r   r   )r1   r   r   s     r)   r3   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 r/   r/   )r1   xmake_templates     r)   r3   zBASTFunction.deserialize.<locals>.make_template.<locals>.<listcomp>   s#    &D&D&DA}}Q'7'7&D&D&Dr+   )rL   r[   r\   r   ry   r   )r2   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 rK   r   r   s     r)   r   z)ASTFunction.deserialize.<locals>.<lambda>   r   r+   r   c                 :    g | ]}                     |          S r/   )rg   )r1   r7   rf   s     r)   r3   z+ASTFunction.deserialize.<locals>.<listcomp>  s#    @@@!2771::@@@r+   )r   r[   r   rangeget_num_argsr   r   getset_arg_attrr   r   r8   itemsr   r   )r   rf   r{   r   r   r   r   r   r2   
attr_specs	attr_nameattr_valro   r8   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)rc   r   r   r   r   r   r   r   r'   r   r   r   r  r/   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)rc   r   r   r   __annotations__r   r/   r+   r)   r  r    s*         r+   r  c                       e Zd ZU 	 	 djd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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fdZ&d Z'd Z(d Z)d Z*d Z+d  Z,d! Z-d" Z.d# Z/d$ Z0d% Z1d& Z2d' Z3e4j5        d(e4j6        d)e4j7        d*e4j8        d+e4j9        d,e4j:        d-e4j;        d.e4j<        d/e4j=        d0e4j>        d1e4j?        d2e4j@        d3iZAeeBe4jC                 ef         ed4<   d5 ZDd6 ZEd7 ZFd8 ZGd9 ZHd: ZId; ZJe4jK        d<e4jL        d=e4jM        d>e4jN        d?e4jO        d@e4jP        dAiZQeeBe4jR                 ef         edB<   dC ZSe4jT        dDe4jU        dEe4jV        dFe4jW        dGiZXeeBe4jY                 ef         edH<   dI ZZdJ Z[dK Z\dL Z]dM Z^dN Z_dO Z`dP ZadQ ZbdR ZcdS Zddeeeef         fdTZfdefdUZgdVefdWZhdX ZidY ZjdZe4jk        fd[Zle4jm        d\e4jn        d]iZoeeBe4jp                 ef         ed^<   d_ Zqd` Zrda Zsdb Zt fdcZudd ZvdZe4jw        ddfdeZxdf ZydgdhlzmZ{ ej        j|        exej        j}         eye~          e{j|        exe{j}         eye~          e eye          e eye          iZeeee4jw        gef         f         edi<    xZS )kCodeGeneratorNFr   jit_fnfunction_types	file_namec                    || _         |                                r5ddlm} t	          j        |          | _         || j                  | _        n4ddlm	} t          j        |          | _         || j                  | _        || _        |dz
  | _        | j                            ||d           || j        _        || j        _        |i n|| j        _        |	| j                                        n|	| _        |i n|| _        || _        i | _        |                                D ]\  }}t/          |t0                    r$|                    |j        |          | j        |<   >t7          |dd          }||v r$t7          ||         |j                  | j        |<   w|| j        |<   i | _        || _        |
r0||                    d          dz   d          }t?          |d          }|| _         |
| _!        d | _"        || _#        g | _$        d | _%        i | _&        | '                                | _(        d | _)        d	| _*        d S )
Nr   )GluonSemantic)TritonSemanticr   r    r9   functionF)+contextis_gluon,triton.experimental.gluon.language._semanticr  r   GluonOpBuilderr   semantictriton.language.semanticr  r   r  
begin_lineset_locoptionscodegen_fns
module_mapcreate_modulemodulefunction_ret_types	prototyper   r  rL   r   r  rc   r   r   r  rfindr*   function_name	is_kernelcur_noder`   	scf_stackret_typer   _define_name_lookupdereference_namerf   visiting_arg_default_value)r   r  r*  r   r,  r  r$  r%  r&  r(  r-  r  r`   r  r"  r  r  krs   module_names                       r)   r   zCodeGenerator.__init__  sX    ?? 	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 r/   rc   r1   r-   s     r)   
<dictcomp>zCodeGenerator.<dictcomp>V  s,     ) ) ) 	

A) ) )r+   builtin_namespaceprintminmaxc                 8    t          | j        j        ||          S rK   )r"   r  rb   )r   re   messages      r)   _unsupportedzCodeGenerator._unsupported`  s    +DKOT7KKKr+   c                     t                      }| j                            ||          }||u rdS t          |          rdS dS )NFT)objectr   r  rT   )r   r&   absent_markerro   s       r)   _is_constexpr_globalz"CodeGenerator._is_constexpr_globalc  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 rK   )r   r  )r&   absentr   s     r)   local_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookupp  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   r:  r'   r   rL   r   r   
startswithr   rS   rp   rD  r3  r   compilationallow_non_constexpr_globals	NameErrortextwrapdedentrB   )r&   rG  ro   r   s      r)   global_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookupt  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+   rI   c                 x    }j         j        fD ]} || |          }||ur|c S t          |  d          )Nz is not defined)r:  r  rQ  )r&   rG  lookup_functionrz   rC  rT  rH  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+   )strrB  r   )r   rW  rC  rT  rH  s   ` @@@r)   r1  z!CodeGenerator._define_name_lookupn  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+   r&   rz   rI   c                 .    || j         |<   || j        |<   dS )z This function:
            called by visit_Assign() & visit_FunctionDef() to store left value (lvalue)
        1. record local defined name (FIXME: should consider control flow)
        2. store tensor in self.lvalue
        N)r   r   )r   r&   rz   s      r)   	set_valuezCodeGenerator.set_value  s"     "D %r+   c                 n    | j                                         }| j                                         }||fS rK   )r   get_locr   )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 rK   )r   r   r#  )r   r^  r]  s      r)   _set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_loc  s4    ,,R000S!!!!!r+   c                     t          |          s|g}|D ]4}|                     |           t          |t          j                  r d S 5d S rK   )r]   r   rL   r   r   )r   stmtsstmts      r)   visit_compound_statementz&CodeGenerator.visit_compound_statement  sf    U## 	GE 	 	DJJt $
++ 		 	r+   c                 F    t           j                            | |           d S rK   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 r/   r   )r1   eltr   s     r)   r3   z,CodeGenerator.visit_List.<locals>.<listcomp>  s#    DDD3tzz#DDDr+   )r   r   r   r\   elts)r   re   r   rm  s   `   r)   
visit_ListzCodeGenerator.visit_List  sJ    jj""{{{~DDDD$)DDDEE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 rK   )	rL   r   r\   r}   r   intfloatr   	to_tensor)rz   decayr   s    r)   rt  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   rz   r   voidrL   rR   r   r   r'   r   rF   r0  	TypeErrorcreate_blockset_insertion_point_to_end)r   re   	ret_valuer   ret_typost_ret_blockrt  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 rK   )r   rz   rL   r   rR   r\   r~   r   re   rg   s      r)   visit_StarredzCodeGenerator.visit_Starred  s8    zz$*%%$ 344444{r+   c                 j                          |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                  }t3          ||          D ]\  }}                     ||            j                                        } j                            |                                |j                    j                                                                        rJ  j          j         tB          j"        k    r,tB          j"         _          j        #                    g            ntI           j         tB          j%                  r j         j&         j        _'        n j         g j        _'         j        (                     j                             j                              j        #                     fd j        )                     j                  D                         j        *                                 |r j        +                    |           d S d S )Nz,nested function definition is not supported.r   )r   r   targetsrz   )targetrz   
annotationTFpublicprivatec                 D    g | ]}j                             |          S r/   )r   create_poison)r1   r2   r   s     r)   r3   z3CodeGenerator.visit_FunctionDef.<locals>.<listcomp>   s)    tttdl88<<tttr+   ),r   rg   rf   r@  ra   defaultsr  ri   r   r   r   r   	AnnAssignr3  r-  r*  r   r   get_or_insert_functionr(  r,  r`   	push_backadd_entry_blockr  ziprZ  r   set_insertion_point_to_startre  r   has_terminatorr0  r   rv  rF   rL   ry   r|   r   
reset_typer   finalizery  )r   re   rd   kwarg_namesr7   default_valuearg_noder  r&   	st_target	init_node
visibilityfn_tyentry
arg_valuesarg_name	arg_value	insert_pts   `                 r)   r   zCodeGenerator.visit_FunctionDef  sq   !%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
#&y*#=#= 	0 	0Hi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 rK   )rg   r   kwarg)r   re   rd   ri   r  s        r)   visit_argumentszCodeGenerator.visit_arguments&  sO    	9 	+ 	+C$**S//**IIjj,,+%%r+   c                 P    t           j                            | |           |j        S rK   )r   rh  r   ri   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  rz   r   r   
ValueErrorr   )r   re   r  r  rz   s        r)   visit_AnnAssignzCodeGenerator.visit_AnnAssign1  s    ZZ00
DK((

4:&&""$$ F "E "E "E F F Fe$$E"'DK;v&&  &&&r+   c                 x   t          |j        t          j                  sJ t          |t          j                  r|                     ||          S t          |t          j                  r=t          |j                  D ]&\  }}| 	                    ||j
        |                    'd S t          |t          j                  r2|                     |j                  }t          ||j        |           d S t          |t          j                  sJ |                     |                     |          |           d S rK   )rL   r   r   r   	Subscriptvisit_Subscript_Storer	   ra   rm  assignTargetr~   r   r   rz   setattrr   r   rZ  )r   r  rz   r7   bases        r)   r  zCodeGenerator.assignTargetA  s   &*ci00000fcm,, 	=--fe<<<fci(( 	&v{33 ; ;	6!!&%,q/::::Ffcm,, 	::fl++DD&+u---F&#(+++++tzz&))511111r+   c                      fd                       |j                            }t          |t          j                  r|j        gn|j        }t          |          dk    sJ                      |d         |           d S )Nc                     t          | t          j                  rt          |           S t          j        t          j        f}t          |           } | 9t          |           s*t          | |          sj                            |           } | S rK   )	rL   r   r\   r}   rS   r   rN   r   rs  )rz   native_nontensor_types_sanitize_valuer   s     r)   r  z3CodeGenerator.visit_Assign.<locals>._sanitize_valueR  s    %00 F-e_EEE&.nhn%E"(//E $U++ !u&<== ! //66Lr+   r   r   )	r   rz   rL   r   r  r  r  r   r  )r   re   r~   r  r  s   `   @r)   r   zCodeGenerator.visit_AssignP  s    		 		 		 		 		 		 !DJ!7!788#-dCM#B#BT4;--7||q    '!*f-----r+   c                 0   t          j        |j                  }t          j                    |_        t          j        ||j        |j                  }t          j	        |j        g|          }| 
                    |           | 
                    |          S )Nr  )r   deepcopyr  r   Loadr   BinOpoprz   r   r   )r   re   lhsrhsassigns        r)   r   zCodeGenerator.visit_AugAssignb  sq    mDK(((**iTWdj11T[M===

6zz#r+   c                     t          |j                  t          j        u r|j        S |                     |j                  S rK   )r'   r   r   r   r   r2  r   s     r)   r   zCodeGenerator.visit_Namej  s4    >>SY&&7N$$TW---r+   c                 F    t           j                            | |           d S rK   rg  r   s     r)   visit_StorezCodeGenerator.visit_Storeo  ri  r+   c                 F    t           j                            | |           d S rK   rg  r   s     r)   
visit_LoadzCodeGenerator.visit_Loadr  ri  r+   c                 R      fd|j         D             }t          j        |          S )Nc                 :    g | ]}                     |          S r/   r   )r1   r   r   s     r)   r3   z-CodeGenerator.visit_Tuple.<locals>.<listcomp>v  s#    111!

1111r+   )rm  r   r\   r~  s   `  r)   visit_TuplezCodeGenerator.visit_Tupleu  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__)	rP   r   r   r$   subrL   r   r   r\   )r   method_namer  r  reverse_method_names        r)   _apply_binary_methodz"CodeGenerator._apply_binary_methody  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  r@  formatrc   r  )r   re   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                                        }i }|j        r| j                             |           |                                | _        i | _        |                     |j                   | j                                        }| j                                         }g }|D ]}|df|dffD ]u\  }	}
||	v rlt          |	|                   t          ||                   k    }|r|	|         j	        ||         j	        k    s"J d| d||          d|
 d|	|                      v||v s||v r|
                    |           ||v r||vr||         ||<   ||v r||vr||         ||<   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   r  re  r   r   r   r   r   r   r'   appendrA   keys)r   re   r   
then_block
else_block	then_defs	else_defsnamesr&   defs
block_name
type_equalthen_valthen_tyelse_valelse_tys                   r)   visit_then_else_blocksz$CodeGenerator.visit_then_else_blocks  s   11*===%%di000\5577
O((**		; 	<L55jAAA!,,..DK DO))$+666,,..I99;;J  	0 	0D&/%89f:M$N S S j4<<!%d4j!1!1T'$-5H5H!HJ% S$t*/WT]=O*O*O*OSd S S S S#-S SFJ4jS S +P*O*O y  DI$5$5T"""y  T%:%:")$-	$y  T%:%:")$-	$ 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 rK   r/   r1   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 rK   r/   r1   r&   r  s     r)   r   z3CodeGenerator.visit_if_top_level.<locals>.<genexpr>  r  r+   c                 :    g | ]}                     |          S r/   ri   )r1   r7   endif_blocks     r)   r3   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>  s%    LLLa{q))LLLr+   c                 *    g | ]}|         j         S r/   rw   r  s     r)   r3   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>       888$4%888r+   )r   r   rx  ry  create_cond_branchhandler  r  r   create_branchr   r  get_typeadd_argumentr  r  r   rZ  )r   condre   srr   ip_blockr  r  r  then_handleselse_handlesthen_helse_hr2   res_handlesr|   
new_valuesr&   	new_valuer  r  r  s                      @@@r)   visit_if_top_levelz CodeGenerator.visit_if_top_level  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                 N   t          |           5 }|\  }}|                                 \  }}| j                                        }|j        r| j                                        nd }	|                     ||||	          \  }}	}
t          fd|
D                       }|                     ||           | j                            d |D             |j	        d          |
                                                               | j                                                                       t          |
          dk    r| j                            |           |j        s                                }	n'|	
                                                               | j                                                                       t          |
          dk    r5t          fd|
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 rK   r/   r  s     r)   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>   r  r+   c                 6    g | ]}|                                 S r/   r  r1   hs     r)   r3   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  s     .R.R.Rqzz||.R.R.Rr+   Tr   c              3   (   K   | ]}|         V  d S rK   r/   r  s     r)   r   z-CodeGenerator.visit_if_scf.<locals>.<genexpr>  s'      3V3VIdO3V3V3V3V3V3Vr+   c                 :    g | ]}                     |          S r/   
get_result)r1   r7   if_ops     r)   r3   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  s'    MMMqu''**MMMr+   c                 *    g | ]}|         j         S r/   rw   r  s     r)   r3   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  r  r+   )r   r_  r   rx  r   r  r   ra  create_if_opr  merge_block_beforeget_then_blockry  r   create_yield_opget_else_blockr  r   r  rZ  )r   r  re   r  r   r-   r^  last_locr  r  r  r  r  r  r|   r  r&   r  r  r  r  s                     @@@r)   visit_if_scfzCodeGenerator.visit_if_scf  s   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--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,,\:::-	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;0 NMMME#l:K:K4L4LMMM8888%888(e<<
"5*55 	, 	,OD)NN4++++	, 	,s   H	H((H,/H,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  zCannot have `return` statements inside `while` or `for` statements in triton (note that this also applies to `return` statements that are inside functions transitively called from within `while`/`for` statements)O`if` conditionals can only accept values of type {{{}}}, not objects of type {}, c              3   $   K   | ]}|j         V  d S rK   r7  r8  s     r)   r   z)CodeGenerator.visit_If.<locals>.<genexpr>2  $      !G!G!*!G!G!G!G!G!Gr+   )r   testrP   rY   r@  r'   rW   warningswarnr   unparser   rR   _unsplatr   toint1r   r   r/  r  r  r   _condition_typesr  r@   rc   r   r   re  )r   re   r  contains_returnactive_blocks        r)   r   zCodeGenerator.visit_If  s    zz$)$$T"" 	8$T** o''.mnnny!!## ^ Bk$),,-. . .  }--ddmX\-]]778=DM7BBD3DK@@FFtLLO .> U++ TU U U ''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 ru  Tr   r  r  c              3   $   K   | ]}|j         V  d S rK   r7  r8  s     r)   r   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>f  r!  r+   )$r   r"  rP   r'  r   r(  r   r   r_  r   rx  r  rs  r   r   r   ra  r'   rv  to_irr  r  r  r  ry  r  r  rR   r   r  r   r)  r@  r  r@   rc   )r   re   r  r^  r  r  r  r  r  r0  ret_type_irr  s               r)   r   zCodeGenerator.visit_IfExp8  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                     d S rK   r/   r   s     r)   
visit_PasszCodeGenerator.visit_Passm  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opsr@  r   r  r   r'   r   Isr   IsNot_method_name_for_comp_opr  r  rc   r  )r   re   r  r  	lhs_value	rhs_valuer  s          r)   visit_ComparezCodeGenerator.visit_Comparep  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__r7  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  r@  rc   rP   r   r   AttributeErrorr   )r   re   rC  rf   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__rB  
__invert__rD  c                 P   t          |          sJ d| d            t          |          sJ d| d            t          |          t          |          u sJ d| d            t          |          r.|j        |j        k    s J d| d|j         d|j         d	            d S d S )
Nzcannot reassign constxpr z in the loopzcannot reasign constexpr zLoop carried variable z changed typezLoop-carried variable z has initial type z but is re-assigned to z: in loop! Please make sure that the type stays consistent.)rN   r'   rP   )r   r&   loop_vallive_vals       r)   _verify_loop_carried_variablez+CodeGenerator._verify_loop_carried_variable  s    ))YY+Yt+Y+Y+YYYY))YY+Yt+Y+Y+YYYYH~~h///1]$1]1]1]///$X.. 	@(-8=2P2P2P@T @ @X] @ @%-]@ @ @ 3Q2P2P 	@ 	@2P2Pr+   c                 6    |                      |j                  S rK   )r   context_exprr   s     r)   visit_withitemzCodeGenerator.visit_withitem  s    zz$+,,,r+   c                     t          |j                  dk    sJ |j        d         j        }                     |j                  }|t
          j        k    rU fd|j        D             } ||d j        i5   	                    |j
                   d d d            d S # 1 swxY w Y   d S  	                    |j
                   d S )Nr   r   c                 :    g | ]}                     |          S r/   r   r1   ri   r   s     r)   r3   z,CodeGenerator.visit_With.<locals>.<listcomp>  s#    <<<DJJsOO<<<r+   _builder)r   r  rO  r   r   r   
async_taskrg   r   re  r   )r   re   r  withitemClassrg   s   `    r)   
visit_WithzCodeGenerator.visit_With  s   4:!####*Q-,

7<00H///<<<<w|<<<D<t|<< 9 9--di8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ))$)44444s   8B  B$'B$c                    t          |           5 }|\  }}|                                 \  }}| j                                        }| j                            |           | j                            |           |                     |j                   | j        	                                 | j
        }|                                 g }	g }
|D ]W}||v rQ||         }||         }|                     |||           |	                    |           |
                    |           Xt          |
          }d |D             }d |
D             }|                     ||           | j                            ||          | j                                                            |          | j                                       fdt%          t'          |                    D             }t)          ||          }t+          |	|          D ]\  }}|| j        |<   || j
        |<   |                     |j                  }| j                                       | j                            |j        |           | j                                                            |          | j                                       fdt%          t'          |                    D             }t)          ||          }t+          |	|          D ]\  }}|| j        |<   || j
        |<   | j                            |           |                     |j                   | j        	                                 | j
        }g }|D ]!}||v r||                             |           "| j                            |           d d d            n# 1 swxY w Y   fdt%          t'          |                    D             }t)          ||          }t+          |	|          D ]\  }}|| j        |<   || j
        |<   |j        D ]}J d            d S )Nc                 6    g | ]}|                                 S r/   r  r  s     r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>  s     ;;;

;;;r+   c                     g | ]	}|j         
S r/   rw   )r1   as     r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>  s    555a16555r+   c                 :    g | ]}                     |          S r/   r  )r1   r7   before_blocks     r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>  s'    PPP!,**1--PPPr+   c                 :    g | ]}                     |          S r/   r  )r1   r7   after_blocks     r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>  s%    QQQ1KOOA..QQQr+   c                 :    g | ]}                     |          S r/   r  )r1   r7   while_ops     r)   r3   z-CodeGenerator.visit_While.<locals>.<listcomp>  s'    SSSQ(--a00SSSr+   FzNot implemented)#r   r_  r   rx  r  r/  r  re  r   popr   eraserM  r   ra  create_while_opcreate_block_with_parent
get_beforer  r   r   r  r   r   r"  ry  create_condition_opr  	get_afterr   r  r   r   rh  r   )r   re   r  r   r   r^  r  dummy	loop_defsr  	init_argsr&   rK  rL  init_handlesinit_tysinit_fe_tys
block_argscondition_argsro   r  body_handles	body_argsyieldsresult_handlesresult_valsnew_defrd  r_  r]  ra  s                               @@@r)   visit_WhilezCodeGenerator.visit_While  s   d## @	1r$&!G\<<>>LB L--//EL55e<<<N!!$'''))$)444N   IKKMMM EI! 	/ 	/7??(H&t}H66tXxPPP LL&&&$$X.../	::L;;l;;;H559555K--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 , ,	c$'D!(+%%::di((D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 , ,	c$'D!(+%%N!!$'''))$)444N   IF! 8 87??dO//777L((000A@	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1 @	1F TSSS%L@Q@Q:R:RSSS).+FF 44 	, 	,MD' 'DK$+DOD!!K 	6 	6D+++++	6 	6s   N(OOOc                    t          |j        t          j                  sJ |                     |j                  }|                     |j                  }t          |          r|                    || j	                  S ||         S )Nr  )
rL   r   r   r  r   rz   slicerP   __getitem__r   )r   re   r  slicess       r)   visit_Subscript_Loadz"CodeGenerator.visit_Subscript_Load  su    $(CH-----jj$$DJ''S!! 	D??6T]?CCC6{r+   c                    t          |j        t          j                  sJ |                     |j                  }|                     |j                  }t          |t          j                  sJ |	                    ||           d S rK   )
rL   r   r   r   r   rz   ry  r   r\   __setitem__)r   re   rz   r  r{  s        r)   r  z#CodeGenerator.visit_Subscript_Store  st    $(CI.....jj$$DJ''#x~.....&&&&&r+   c                 ,    |                      |          S rK   )r|  r   s     r)   visit_SubscriptzCodeGenerator.visit_Subscript  s    ((...r+   c                 *      fd|j         D             S )Nc                 :    g | ]}                     |          S r/   r   )r1   dimr   s     r)   r3   z0CodeGenerator.visit_ExtSlice.<locals>.<listcomp>  #    555C

3555r+   )dimsr   s   ` r)   visit_ExtSlicezCodeGenerator.visit_ExtSlice  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}|t          j        u rA ||i |}|j	        }|j        }|j        }|j        }	|j        }
|j        }|j        }|j        }n|t          u rt9          |          dk    r|d         n&                      t)          j        d                    }t9          |          dk    r|d         n$                      |j        j        d                   }t9          |          dk    r|d         n&                      t)          j        d                    }nt=          d          d}t?          |          r&|j
        dk     rt          |j
                   }d}||}} j         !                    |          } j         !                    |          } j         !                    |          }|j"        #                                r2|j"        #                                r|j"        #                                s(tI          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'        .                    |          } /                    |j        j        t          j)        0                    ||                     tc                     5 }|\  }} 2                                \  }} j'        3                                } j'        4                    |            j5        6                    |                                |j                    j5        7                                 |8                                 g }g }g } j9        D ]q}||v rk j9        |         } ||         }! :                    || |!           |6                    |           |6                    |!           |6                    |            r ;                    ||           ty          |          }"d |D             }# j'        =                    ||||"          ,t}          |	          .,?                    d j'        @                    |	                     t}          |
          .,?                    d j'        @                    |
                     |r-,?                    d j'        A                                           |r-,?                    d j'        A                                           |r-,?                    d j'        A                                            j5        6                    |           ,B                    d          - j'        4                    -           |C                                 _        i  _9        -fdt          t9          |"                    D             }$t          |$|#          }%t          ||%          D ]\  }}& /                    ||&                                |j                    j5        7                                 g } j9        D ]W}||v rQ j9        |         }'t          |'t                    r j         !                    |'          }'|6                    |'           Xt9          |          dk    r)ty          |          }( j'        G                    |(           -H                                })|)I                                dk    s
J d             j'        4                    -           ,J                                }|r6 j'        K                    ||          } j'        L                    ||          } j        |j        j                 j,        M                    |            /                    |j        j        t          j)        0                    ||                     d d d            n# 1 swxY w Y   ,fdt          t9          |"                    D             }*t          |*|#          }+t          ||+          D ]\  }}& /                    ||&           |j        D ]}J d            d S )Nc                 :    g | ]}                     |          S r/   r   rS  s     r)   r3   z+CodeGenerator.visit_For.<locals>.<listcomp>  s#    ???TZZ__???r+   c              3   B   K   | ]}                     |          V  d S rK   r   r1   keywordr   s     r)   r   z*CodeGenerator.visit_For.<locals>.<genexpr>  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 (r  r  c                     g | ]	}|j         
S r/   rw   ru   s     r)   r3   z+CodeGenerator.visit_For.<locals>.<listcomp>u  s    2221222r+   ztt.num_stagesztt.loop_unroll_factorztt.disallow_acc_multi_bufferz
tt.flattenztt.warp_specializec                 @    g | ]}                     |d z             S )r   r  )r1   r7   for_op_bodys     r)   r3   z+CodeGenerator.visit_For.<locals>.<listcomp>  s)    VVV[__QU33VVVr+   z7We use SCF, so the loop body should only have one blockc                 :    g | ]}                     |          S r/   r  )r1   r7   for_ops     r)   r3   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)Nr   iterr   rg   dictkeywordsr   static_ranger  startrz   endstepr   r   r  r   re  r   r   r   rh  r   
num_stagesloop_unroll_factordisallow_acc_multi_bufferflattenwarp_specializer   NumRuntimeErrorrT   r   rs  rS   is_intrw  integer_promote_implr.  r   int_signednessrR   
SIGNEDNESSSIGNEDr  create_int_castr  rZ  r   r   r_  rx  r  r/  r  rb  rc  r   rM  ra  r   create_for_opr   set_attrget_int32_attrget_unit_attrget_bodyr   r   r  rL   r  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_with).r   re   IteratorClass	iter_argsiter_kwargsiteratorr  r7   rd  r  r  r  r  r  lbubr  negative_stepiv_type
iv_ir_typeiv_is_signedivr  r   r   r^  r  blockrk  rs  r  r&   rK  rL  rl  rm  block_handlesro  ro   localyield_handlesfor_op_regionrt  result_valuesr  r  s.   `                                           @@r)   	visit_ForzCodeGenerator.visit_For  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&6OO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## N	Nr$&!G\<<>>LB L--//EL55e<<<N!!$'''))$)444N   KKMMM IFE , ,7??#t4H&t}H66tXxPPPLL&&&$$X...MM(+++ --b(;;;/	::L22	222H\//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N!!$''' //!,,KL55kBBB!,,..DK DOVVVVU3|CTCT=U=UVVVM,]HEEJ 
33 * *	ctS))))))$)444N   F ) )7?? OD1E!%33 ? $ 7 7 > >MM%((( 6{{Q 4V < <,,];;;'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]N	N N	N N	N N	N N	N N	N N	N N	N N	N N	N N	N N	N N	N N	N N	Nb RQQQc,>O>O8P8PQQQ+NHEEUM22 	& 	&ID#NN4%%%%K 	6 	6DEEEEE	6 	6s   T+gggc                     |                      |j                  }|                      |j                  }|                      |j                  }t	          j        |||          S rK   )r   lowerupperr  r   ry  )r   re   r  r  r  s        r)   visit_SlicezCodeGenerator.visit_Slice  sO    

4:&&

4:&&zz$)$$~eUD111r+   c                 6    |                      |j                  S rK   )r   rz   r   s     r)   visit_IndexzCodeGenerator.visit_Index  s    zz$*%%%r+   c                 D    |j         |                     |j                  fS rK   )ri   r   rz   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   r"  msgr   rR   device_assertr   )r   re   r"  r  s       r)   visit_AssertzCodeGenerator.visit_Assert  sS    zz$)$$&*h&:djj"""}**4*NNNr+   rf   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             }t          t!          |          d |D             |          }	| j                            |	          st'          |          \  }
}d D             }t)          g ||t+                                }t-          | j        ||                                | j        ||	| j        |j        |
|| j        j        | j        j        | j        j                  }	 |                    |                                            nE# tB          $ r8}tD          j#        j$        r tK          | j&        j'        | j(        d           |d }~ww xY w|j)        }|| j        |	<   n| j        |	         }| j        *                    |	          }tW          |          }| j        ,                    ||          |t          j-        k    rd S fd	t]          /                                          D             }ta          tc          ||g                    S )
Nc                      g | ]
}|         S r/   r/   )r1   r&   rg   s     r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s    444tT
444r+   c                      t          |          S rK   rT   r-   r   s     r)   r   z0CodeGenerator.call_JitFunction.<locals>.<lambda>  s    M!4D4D r+   c                 2    i | ]}|t          |          S r/   r   r1   r   rg   s     r)   r9  z2CodeGenerator.call_JitFunction.<locals>.<dictcomp>  s&    MMMDD+D$77MMMr+   c                 "    t          |           S rK   r  r  s     r)   r   z0CodeGenerator.call_JitFunction.<locals>.<lambda>  s    q9I9I5I r+   c                 0    g | ]}t          |          S r/   r  r  s     r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s$    HHHd%dD11HHHr+   c                     g | ]	}|j         
S r/   rw   r1   ri   s     r)   r3   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 rK   )rL   r   rq  r   rR   rS   r   r'   r  s     r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s_         ,/;*SFJCQYQ^QdEe;g ;g;''lolt  r+   )
r(  r  r,  r  r`   r  r"  r$  r%  r&  c                 :    g | ]}                     |          S r/   r  )r1   r7   call_ops     r)   r3   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s'    SSSQ7%%a((SSSr+   )2inspectgetcallargsrf   rd   ra   rL   r   rS   rr  rq  r   r   rR   r   r   rG   r   r(  has_functionr   r   r  r  r  get_capture_scoper)  r`   r   r$  r%  r&  r   parse	Exceptionr   rO  front_end_debuggingr    r  rb   r.  r0  get_functionr   callrv  r  get_num_resultsnextr   )r   rf   rg   r   r7   ri   args_cst	args_pathargs_valfn_namer  r"  r   r*  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M"--/M/MH/M/M/MxXX{''00 	?$8$<$<!Iz     I
 $B	8TVVDDI%dlIr?S?S?U?U^b^irt4;DLc/1{i\f.2l.BPTP\Ph151H	J J J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   8'G   
H"*3HH"c                 N    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                                 }t          |t                    r"|                    d	|j                   |j        }t          |t4                    r(t7          |||                                |||          S t;          |d
          rt=          |j                  st>          j         !                    |          rd j"        i}tG          j$        |          }	d|	j%        v r |d<   	  ||i ||}
t          |
tL                    rt?          j&        |
          }
|
S # tN          $ r3}tP          j)        j*        r t           j        j        |d           |d }~ww xY w| j+        ,                                v rt[          t           |          } ||i |}
t]          t_          |
                    rta          |
d           n|
S )N_must_use_resultF
_is_unusedz#The result of %s is not being used.rM  c              3   B   K   | ]}                     |          V  d S rK   r   r  s     r)   r   z+CodeGenerator.visit_Call.<locals>.<genexpr>  s/      DD74::g&&DDDDDDr+   c                 :    g | ]}                     |          S r/   r   rS  s     r)   r3   z,CodeGenerator.visit_Call.<locals>.<listcomp>  r  r+   c              3   J   K   | ]}t          |t                    r|n|gV  d S rK   )rL   r[   )r1   r   s     r)   r   z+CodeGenerator.visit_Call.<locals>.<genexpr>   s:      1b1bXYz!T7J7J2S!!QRPS1b1b1b1b1b1br+   r   r  r  r  c                     | S rK   r/   )r   s    r)   r   z*CodeGenerator.visit_Call.<locals>.<lambda>   s    Q r+   )1r   r   r   rL   r   statically_implemented_functionsr  r   r   r%  rX  r  r    r  rb   r@   r  r  rg   r[   	itertoolschainfrom_iterableinsertr  r  r   rj   r  rn   rN   r   rR   
is_builtinr   r  	signature
parametersr\   r  r   rO  r  r:  r~   maprp   r'   r}   )r   re   rf   static_implementationmurerror_messagekwsrg   extra_kwargssigrF   r  s   `           r)   r   zCodeGenerator.visit_Call  s:   !$**TY"7"788"n-- 	9$($I$M$Mb$Q$Q!$0,,T4888b,e44 	S74u55 	SBS[QUQZE[E[[\M#s## *$$S)))"4;?D#((=:Q:QRRRDDDDdmDDDDD555549555IO111b1b]a1b1b1bbbccb.)) 	KK2;'''Bb+&& 	84T***((T3777B
## 	K(8(E(E 	K(-JbJbceJfJf 	K'7L#B''Cs~---1\*Kb$6,6#66c5)) .".--C
 	K 	K 	K$8  't{dCCJ	K '..0000+T22Db$#;I$s));T;T]%c;;777Z]]s   4J   
J=
.J88J=c                 *    t          |j                  S rK   )r   rz   r   s     r)   visit_ConstantzCodeGenerator.visit_Constant"  s    $$$r+   re   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  r@  r  rc   r~   r   rP   r   rW   r   r"  r#  warn_explicitUserWarningr  r   r%  r  r   rb  r  )r   re   r  nontrivial_valuessubnoderz   bvr  r  r  ress              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
  r  c                    |                      |j                  }t          |          r&|j        dk    r| j                            |d          S t          |t                    r|j        dk    r|j        }t          ||j                  }t          |          r%t          |t                    rt          ||          S |S )NT)r   r   rz   )r   rz   rP   r   r   permuterL   r   r   rN   r   r  )r   re   r  r   s       r)   r   zCodeGenerator.visit_Attribute[  s    jj$$S!! 	6di3&6&6=((f555c9%% 	$)w*>*>)CsDI&&C   	-Zk%B%B 	-!#t,,,r+   c                 ^    d|j         _        t          j                            | |           d S r   )rz   r  r   rh  r   r   s     r)   
visit_ExprzCodeGenerator.visit_Exprg  s*     $
%%dD11111r+   c                     d S rK   r/   r   s     r)   visit_NoneTypezCodeGenerator.visit_NoneTypek  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~   ra   rL   r   ConstantrX  rz   FormattedValue
conversionr   rT   r@  r'   chrr  AssertionErrorr@   )r   re   r~   r7   rz   conversion_code	evaluateds          r)   visit_JoinedStrzCodeGenerator.visit_JoinedStrn  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          r\t          |d          rL| j        	                    | j
        | j        |j        z   |j                   | j                                        }	 t                                          |          }n\# t           $ r  t"          $ rE}t$          j        j        r t!          | j        j        | j        t/          |                    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)r#  catch_warningssimplefilterDeprecationWarningPendingDeprecationWarningr.  r   r\  rn   r#  r  r"  r  r*  superr   r    r  r   rO  r  r  rb   r6   )r   re   	last_noder  rF   r  	__class__s         r)   r   zCodeGenerator.visit  s   <F$&& 	 	 !(,>???!(,EFFFI|++--H DMtX&& 274+F+F 2$$T^T_t{5RTXTcddd<//11	ZggmmD))#    Z Z Z$8  't{tAwwOOUYYZ  / )$$X...5	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s7   CF"!DFEA EE'FFFc                 x    |                      |d                    t          |          j                            )Nzunsupported AST node type: {})r@  r  r'   rc   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   rg   r  rw  r   r   rL   r   NotImplementedErrorr  r6   r!   r  rb   )r   re   	arg_countpassedr?  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 )Nre   c                      d  fd|j         D             D             } fd|j        D             }t           |i |          S )Nc                 4    i | ]\  }}|t          |          S r/   )r   )r1   r&   rz   s      r)   r9  z>CodeGenerator.static_executor.<locals>.ret.<locals>.<dictcomp>  s7       D% *511  r+   c              3   B   K   | ]}                     |          V  d S rK   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 r/   )r   r   rS  s     r)   r3   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<listcomp>  s,    OOOc(C99OOOr+   )r  rg   r   )r   re   r  rg   	python_fns   `   r)   rF   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   )r>  rF   s   ` r)   static_executorzCodeGenerator.static_executor  s1    	6CH 	6 	6 	6 	6 	6 	6 
r+   r   )r   r  )NFNFNr   )rc   r   r   r   r   r   rX  r   r   r[   r  rr  rq  rL   r   rn   r:  r   r  updater   rR   device_printminimummaximumr@  rD  r1  r   r   r   rZ  r_  ra  re  r   rn  r   r  r   r  r  r  r  r   r   r   r  r  r  r  r  r   AddSubMultDivFloorDivModPowLShiftRShiftBitAndBitOrBitXorr  r
   operatorr  r  r  r   r   r1  r:  EqNotEqLtLtEGtGtEr7  cmpoprF  USubUAddNotInvertrD  unaryoprM  rP  rW  rw  r|  r  r  r  r  r  r  r	   r  r  r  r   r  BoolOpr  AndOrr  boolopr   r  r  r'  r   r   r   r8  r?  experimental.gluonttglstatic_assertstatic_printr;  r  rB  r   __classcell__)r1  s   @r)   r  r    s         `e=>90 90+ 90?G~90$SM90 90 90 90v) )tUE3
GWM) ) )tCH~    	(-,-	 !	 !   L L L	 	 	1 1 1f&c &%
I0E*F &4 & & & &  " " "	 	 	2 2 2  @ @ @<S    
3? 3? 3?j& & &  ' ' ' 2 2 2. . .$  . . .
2 2 22 2 2$ $ $	. 	. 	.@ @ @ 	)n
L
L
I	8
I>T$s|"4c"9:   2C 2C 2Ch$, $, $,N, , ,> 8  8  8D3/ 3/ 3/j  @ @ @$ 	#)Xsvx(TWTZ\dfifmow<d4	?C#78   t t t  	)SXy#'9cjR^?tD$5s$:;   @ @ @- - -	5 	5 	5L6 L6 L6\  ' ' '/ / /6 6 6\6 \6 \6|2 2 2& & &0U38_ 0 0 0 0OC O O O O
-E; -E -E -E -E^0^ 0^ 0^d% % %2$ 2$ 2$ 2$ 2$h >AWmUXU[]i<jd4
#3S#89jjj
 
 
2 2 2    $    >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  }j                                        D ]1\  }}	 j                            |          }
t          |	          ||
<   2t          g |j        j                  }t                     \  }}ddl
m} t          d j                  } fd|D             }j        }  |dddg          ||          }t          ||                                                      |           d||||||	          }|                                                                |j        }||_        |S )
Nr   )
namedtuplec                 (    t          |           dk    S rV   )r   )rs   s    r)   r   zast_to_ttir.<locals>.<lambda>  s    c!ffk r+   c                 N    i | ]!}j         |d                   j        |         "S )r   )rd   r8   )r1   r7   rf   rb   s     r)   r9  zast_to_ttir.<locals>.<dictcomp>  s-    FFF!ad#S]1%5FFFr+   SpecializationProxyr8   r  T)
r   r,  r  r-  r  r"  r$  r%  r&  r(  )r   rd   r  r  indexr   r   r8   r   r   collectionsrg  filterr  r  r6   r   r  r(  r  )rf   rb   r  r$  r%  r&  r(  r   r4  rs   rh   r*  r  r"  rg  leavesr8   r  proxyr   rF   s   ``                   r)   ast_to_ttirrp    sx   R\***I##%% & &1l  ##"1	#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[] ] ]I OOBHHJJ

CCKJr+   rK   )Gr   r   r  r$   r#  rR  r  dataclassesr   r|   r   typingr   r   r   r   r	   r
   r   r   r   r  r   r   _C.libtritonr   r   r   r   r   language.corer   r   r   runtime.jitr   r   runtimer   _utilsr   r   r   errorsr    r!   r"   r*   rG   r   rN   rP   rT   rY   r]   rj   rp   r}   r   rz   r   rq  r'   r)  r   rh  r   r   r  r  rp  r/   r+   r)   <module>ry     s   



   				       ! ! ! ! ! !       T T T T T T T T T T T T T T T T T T T T T T         ' ' ' ' ' ' ' ' 3 3 3 3 3 3 3 3 3 3 G G G G G G G G G G = = = = = = = = ! ! ! ! ! ! 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* 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 $       
s s s s sCO s s sl%     r+   