
    wi                        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m	Z	m
Z
mZmZmZmZ ddl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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$ d Z%d Z&dede'fdZ(dede'fdZ)dede'fdZ*dede'fdZ+dede'fdZ,d Z-e'e. e/d          hZ0 G d d          Z1 G d de j2                  Z3 G d de j2                  Z4d Z5d Z6dS )    N)AnyCallableDictOptionalTupleTypeUnion   )language)ir)	constexprtensor	str_to_ty)_unwrap_if_constexprnv_tma_desc_type_value)_normalize_tyget_jit_fn_file_line)JITFunction   )CompilationErrorCompileTimeAssertionFailureUnsupportedLanguageConstruct)
ModuleTypec                 H   |                                  rdt          | j                  z   S |                                 r<t          j        j        j        }| j        |k    rdnd}|t          | j
                  z   S |                                 rt          |           S |                                 rIt          | j                  }d                    t          t          | j                            }| d| dS |                                 rdS t%          d|            )NPiu_SVzUnsupported type )is_ptr	mangle_ty
element_tyis_intr   dtype
SIGNEDNESSSIGNEDint_signednessstrint_bitwidthis_floatingis_blockscalarjoinmapshapeis_void	TypeError)tyr(   prefixeltr1   s        n/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/triton/compiler/code_generator.pyr#   r#      s   	yy{{ .Yr}----	yy{{ -*1)V33BO,,,,	~~ 2ww	{{}} !	""S"(++,,      	zz|| s
,,,
-
--    c                 b   d                     d |D                       }d                     fdt                    D                       }|                    dd          }|                    dd          }|                    dd                              d	d          }|  d
| d
| }|S )Nr   c                 ,    g | ]}t          |          S  )r#   ).0r4   s     r7   
<listcomp>zmangle_fn.<locals>.<listcomp>(   s    !B!B!BB)B--!B!B!Br8   c                 D    g | ]}| d t          |                    S )c)repr)r<   r   	constantss     r7   r=   zmangle_fn.<locals>.<listcomp>)   s3    !Y!Y!Y!Q"="=il););"="=!Y!Y!Yr8   ._d_'_sq_[]__)r/   sortedreplace)namearg_tysrA   mangled_arg_namesmangled_constantsrets     `   r7   	mangle_fnrP   &   s    !B!B'!B!B!BCC!Y!Y!Y!YviGXGX!Y!Y!YZZ)11#u==)11#v>>)11#s;;CCCMM
=
=&
=
=*;
=
=CJr8   oreturnc                 ,    t          | t                    S N)
isinstancer   rQ   s    r7   _is_triton_valuerW   2       a   r8   c                 ,    t          | t                    S rT   )rU   r   rV   s    r7   _is_triton_tensorrZ   6   rX   r8   c                 ,    t          | t                    S rT   )rU   r   rV   s    r7   _is_constexprr\   :   s    a###r8   c                 t    t          |           o)| j                                         p| j        j        dk    S )Nr   )rZ   typer-   numelrV   s    r7   _is_triton_scalarr`   >   s2    QP):):%:%Oafla>OPr8   c                 :    t          | t          t          f          S rT   )rU   listtuplerV   s    r7   _is_list_likerd   B   s    a$'''r8   c                     |j         rbt          |          D ]T\  }}t          |          s>t          |          s/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	enumerater\   r`   r   src__name__	arg_names)nodefnargsidxargs        r7   _check_fn_argsrq   F   s    	{ !$ 	 	HC %% .?.D.D 2FD D  D  Djljvwzj{  D  D  B  D  D   	 	r8   c                        e Zd Zd Zd Zd ZdS )enter_sub_regionc                     || _         d S rT   )	generator)selfru   s     r7   __init__zenter_sub_region.__init__U   s    "r8   c                 N   | j         j                                        | _        | j         j                                        | _        i | j         _        | j         j                                        | _        | j         j        	                                | _
        | j        | j        fS rT   )ru   lscopecopyliveins
local_defs	prev_defsbuilderget_insertion_blockinsert_blockget_insertion_pointinsert_point)rv   s    r7   	__enter__zenter_sub_region.__enter__X   s~    ~,113327799$&! N2FFHH N2FFHH|T...r8   c                     | j         j                            | j                   | j        | j         _        | j        | j         _        d S rT   )ru   r~   restore_insertion_pointr   r{   ry   r}   r|   )rv   rn   kwargss      r7   __exit__zenter_sub_region.__exit__a   s<    66t7HIII $$(N!!!r8   N)rj   
__module____qualname__rw   r   r   r;   r8   r7   rs   rs   S   sA        # # #/ / /3 3 3 3 3r8   rs   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 rT   )gscope)rv   r   s     r7   rw   zContainsReturnChecker.__init__j   s    r8   rR   c                 :     t           fd|D                       S )Nc              3   B   K   | ]}                     |          V  d S rT   visit)r<   srv   s     r7   	<genexpr>z5ContainsReturnChecker._visit_stmts.<locals>.<genexpr>n   s-      //Q4::a==//////r8   )any)rv   bodys   ` r7   _visit_stmtsz"ContainsReturnChecker._visit_stmtsm   s&    ////$//////r8   c                     t          |t                    rB|j        s;|                                }t	          | j                                      |          S dS NF)rU   r   rg   parser   r   r   )rv   rm   fn_nodes      r7   _visit_functionz%ContainsReturnChecker._visit_functionp   sO    b+&& 	Er{ 	EhhjjG(55;;GDDDur8   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_fieldsrU   rb   ASTr   )rv   rl   rO   r   valueitems         r7   generic_visitz#ContainsReturnChecker.generic_visitw   s    -- 	/ 	/HAu%&& /! 6 6D!$00 6!5TZZ%5%56 E37++ /.TZZ..
r8   rl   c                     t          |j        t          j                  rV|j        j        | j        v rA| j        |j        j                 }t          ||j                  }|                     |          S dS | 	                    |j                  S r   )
rU   r   r   Nameidr   getattrattrr   r   )rv   rl   r   rm   s       r7   visit_Attributez%ContainsReturnChecker.visit_Attribute   sy     dj#(++ 	z}++DJM2UDI..++B///5zz$*%%%r8   c                     t          |j                  t          j        u rdS |j        | j        v r'| j        |j                 }|                     |          S dS r   )r^   ctxr   Storer   r   r   )rv   rl   rm   s      r7   
visit_Namez ContainsReturnChecker.visit_Name   sR    >>SY&&57dk!!TW%B''+++ur8   c                     dS )NTr;   rv   rl   s     r7   visit_Returnz"ContainsReturnChecker.visit_Return       tr8   c                     dS r   r;   r   s     r7   visit_Assignz"ContainsReturnChecker.visit_Assign   	     ur8   c                     dS r   r;   r   s     r7   visit_AugAssignz%ContainsReturnChecker.visit_AugAssign   r   r8   c                 6    |                      |j                  S rT   r   r   r   s     r7   visit_Modulez"ContainsReturnChecker.visit_Module         +++r8   c                 6    |                      |j                  S rT   r   r   s     r7   visit_FunctionDefz'ContainsReturnChecker.visit_FunctionDef   r   r8   c                     |                      |j                  }|j        r|p|                      |j                  }|S rT   )r   r   orelse)rv   rl   rO   s      r7   visit_IfzContainsReturnChecker.visit_If   sB     	**; 	87**4;77C
r8   c                 j    |                      |j                  p|                      |j                  S rT   )r   r   r   r   s     r7   visit_IfExpz!ContainsReturnChecker.visit_IfExp   s)    zz$)$$?

4;(?(??r8   c                 6    |                      |j                  S rT   )r   funcr   s     r7   
visit_Callz ContainsReturnChecker.visit_Call   s    zz$)$$$r8   N)rj   r   r   rw   boolr   r   r   r   	Attributer   r   r   Returnr   Assignr   	AugAssignr   Moduler   FunctionDefr   Ifr   IfExpr   Callr   r;   r8   r7   r   r   h   s         0D 0 0 0 0T    	T 	 	 	 	&CM &d & & & &sx D              
CM d    
, , , , , ,,co ,$ , , , ,SV     @	 @d @ @ @ @%sx %D % % % % % %r8   r   c                   v    e Zd ZU 	 	 dfdedee         dee         fdZd 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 Z%d Z&d Z'd Z(d Z)d Z*d  Z+d! Z,d" Z-d# Z.d$ Z/d% Z0e1j2        d&e1j3        d'e1j4        d(e1j5        d)e1j6        d*e1j7        d+e1j8        d,e1j9        d-e1j:        d.e1j;        d/e1j<        d0e1j=        d1iZ>ee?e1j@                 ef         ed2<   d3 ZAd4 ZBd5 ZCd6 ZDd7 ZEd8 ZFd9 ZGe1jH        d:e1jI        d;e1jJ        d<e1jK        d=e1jL        d>e1jM        d?iZNee?e1jO                 ef         ed@<   dA ZPe1jQ        dBe1jR        dCe1jS        dDe1jT        dEiZUee?e1jV                 ef         edF<   dG ZWdH ZXdI ZYdJ ZZdK Z[dL Z\dM Z]de^eef         fdNZ_defdOZ`dPefdQZadR ZbdS ZcdTe1jd        fdUZee1jf        dVe1jg        dWiZhee?e1ji                 ef         edX<   ejjk        dYk     r	dZ Zld[ Zmd\ Znd] Zod^ Zpd_ Zqd` Zr fdaZsdb ZtdTe1ju        ddfdcZvdd Zwej        jx        evej        jy         ewez          e ewe          e ewe          iZ{ee|e}e1ju        gef         f         ede<    xZ~S )gCodeGeneratorNFr   jit_fnfunction_types	file_namec                 z   || _         t          j        |          | _        || _        |dz
  | _        | j                            ||d           || j        _        |	| j        _        |
i n|
| j        _        || j        	                                n|| _
        |i n|| _        || _        i | _        |                                D ]\  }}t          |t                     r$|
                    |j        |          | j        |<   >t'          |dd          }||
v r$t'          |
|         |j                  | j        |<   w|| j        |<   i | _        || _        || _        || _        || _        || _        d | _        || _        g | _        d | _        i | _        |                                 | _         d | _!        d| _"        d S )Nr   r   r    F)#contextr   r~   r   
begin_lineset_locoptionscodegen_fns
module_mapcreate_modulemodulefunction_ret_types	prototyper   itemsrU   r   getrj   r   ry   
attributesrA   r   function_name	is_kernelcur_noderg   	scf_stackret_typer|   _define_name_lookupdereference_namerm   visiting_arg_default_value)rv   r   r   r   r   rA   r   r   r   r   r   r   r   r   rg   r   r   kvmodule_names                       r7   rw   zCodeGenerator.__init__   s    z'**"$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$"*"  .06:6N6N6P6P +0'''r8   c                     i | ]
}|j         |S r;   rj   r<   r   s     r7   
<dictcomp>zCodeGenerator.<dictcomp>   s    (t(t(t1Q(t(t(tr8   builtin_namespaceprintminmaxc                 8    t          | j        j        ||          S rT   )r   r   ri   )rv   rl   messages      r7   _unsupportedzCodeGenerator._unsupported   s    +DKOT7KKKr8   c                    t                      }| j                            ||          }||u rdS t          |          rdS | j                            di                               |          x}rt	          |          dk    S dS )NFT__annotations__r   )objectr   r   r\   r   )rv   rK   absent_markervalas        r7   _is_constexpr_globalz"CodeGenerator._is_constexpr_global   s    koodM22-5 	4 1266::4@@@1 	3 ##{22ur8   c                      dt           f fddt           f fdt                      dt           dt          f fd}|S )NrK   c                 :    j                             | |          S rT   )ry   r   )rK   absentrv   s     r7   local_lookupz7CodeGenerator._define_name_lookup.<locals>.local_lookup  s    ;??4000r8   c                 H   j                             | |          }t          ||u | j        v t	          |          t
          u t          |t                    t          |dd          t          |dd          	                    d          t          |t          j                                      |           j        t          j                            dd          dk    g
          r|S t!          t#          j        d	|  d
                              dd                    )N__triton_builtin__Fr   r   ztriton.language"TRITON_ALLOW_NON_CONSTEXPR_GLOBALS01z.                Cannot access global variable a   from within @jit'ed
                function. Triton kernels can only access global variables that
                are annotated as constexpr (`x: triton.language.constexpr = 42`
                or `x = triton.language.constexpr(42)`).  Alternatively, set the
                envvar TRITON_ALLOW_NON_CONSTEXPR_GLOBALS=1, but we do not
                promise to support this forever.
 )r   r   r   r   r^   r   rU   r   r   
startswithr   r&   r   r   osenviron	NameErrortextwrapdedentrJ   )rK   r  r   rv   s      r7   global_lookupz8CodeGenerator._define_name_lookup.<locals>.global_lookup  s    +//$//C 6M44+A#AII+sK00C!5u==Cr22==>OPPsHN33--d33 3JNN#GMMQTT    
 !4/3!4 !4 !4 5 5 6=WT35G5GI I Ir8   rR   c                 x    }j         j        fD ]} || |          }||ur|c S t          |  d          )Nz is not defined)r   r   r  )rK   r  lookup_functionr   r   r  r  rv   s       r7   name_lookupz6CodeGenerator._define_name_lookup.<locals>.name_lookup1  se    "F#/@V@Z#Z ! !'f55&& LLL 't444555r8   )r*   r   r   )rv   r  r   r  r  s   ` @@@r7   r   z!CodeGenerator._define_name_lookup  s    	1s 	1 	1 	1 	1 	1 	1	I 	I 	I 	I 	I 	I 	I: 	6c 	6c 	6 	6 	6 	6 	6 	6 	6 	6 	6 r8   rK   r   rR   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)ry   r|   )rv   rK   r   s      r7   	set_valuezCodeGenerator.set_value;  s"     "D %r8   c                 n    | j                                         }| j                                         }||fS rT   )r~   get_locr   )rv   locips      r7   _get_insertion_point_and_locz*CodeGenerator._get_insertion_point_and_locD  s3     l""$$\--//3wr8   c                 n    | j                             |           | j                             |           d S rT   )r~   r   r   )rv   r  r  s      r7   _set_insertion_point_and_locz*CodeGenerator._set_insertion_point_and_locL  s4    ,,R000S!!!!!r8   c                     t          |          s|g}|D ]4}|                     |           t          |t          j                  r d S 5d S rT   )rd   r   rU   r   r   )rv   stmtsstmts      r7   visit_compound_statementz&CodeGenerator.visit_compound_statementS  sf    U## 	GE 	 	DJJt $
++ 	 	r8   c                 F    t           j                            | |           d S rT   r   NodeVisitorr   r   s     r7   r   zCodeGenerator.visit_Module_       %%dD11111r8   c                 j                           |j                  }|J  fd|j        D             }|S )Nc                 :    g | ]}                     |          S r;   r   )r<   r6   rv   s     r7   r=   z,CodeGenerator.visit_List.<locals>.<listcomp>e  #    555C

3555r8   )r   r   elts)rv   rl   r   r(  s   `   r7   
visit_ListzCodeGenerator.visit_Listb  s?    jj""{{{555549555r8   c                                           |j                  }|' j                            g            t          j        }nt          |t                    rN fd|D             }d |D             } j                            d |D                        t          |          }nLt          j        	                    | j                  } j                            |j
        g           |j        } j        | _        n% j        |k    rt          d j         d|            j                                        } j                            |           d S )Nc                 Z    g | ]'}t           j                            |j                  (S r;   )r   semantic	to_tensorr~   )r<   r   rv   s     r7   r=   z.CodeGenerator.visit_Return.<locals>.<listcomp>o  s.    ZZZ1(+55aFFZZZr8   c                     g | ]	}|j         
S r;   r^   r<   r   s     r7   r=   z.CodeGenerator.visit_Return.<locals>.<listcomp>p  s    444A444r8   c                     g | ]	}|j         
S r;   handler0  s     r7   r=   z.CodeGenerator.visit_Return.<locals>.<listcomp>q  s    ;;;1ah;;;r8   zInconsistent return types:  and )r   r   r~   rO   r   voidrU   rc   r,  r-  r3  r^   r   r3   create_blockset_insertion_point_to_end)rv   rl   	ret_valueret_ty
ret_values	ret_typesrO   post_ret_blocks   `       r7   r   zCodeGenerator.visit_Returni  sY   JJtz**	LR   ]FF	5)) 	ZZZZPYZZZJ44444IL;;
;;;<<<9%%FF#--iFFCLcj\***XF= "DMM]f$$V$-VVfVVWWW 2244//?????r8   c                 x	                          |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                                        }g }d}t1          t3          |                    D ]!}| j        v rL j        |         }t7          |          st9           j        |                   }|                    |           X| j        v r/ j        |         D ]!\  }} j                            |||           "tA           j        j!        |         tD                    r j                            |dd           |                    tG           j                            |           j        j!        |                              |dz  }# j        $                                }tK          ||          D ]\  }} &                    ||            j        '                    |            (                    |j)                    j        $                                *                                rJ  j+         j+        tX          j-        k    r,tX          j-         _+         j        .                    g            ntA           j+        t^                    rta           j+                  n j+        g j        _1         j        2                     j                             j                              j        .                     fd j        j1        D                         j        3                                 |r j        4                    |           d S d S )Nz,nested function definition is not supported.r   r   r   targetsr   )targetr   
annotationTFpublicprivater   ztt.nv_tma_descc                     g | ];}j         	j                            |                    j                            <S rT   )r   r~   create_poisonto_irr<   r4   rv   s     r7   r=   z3CodeGenerator.visit_FunctionDef.<locals>.<listcomp>  sI       =, **288DL+A+ABB,,,r8   )5r   rn   rm   r   rh   defaultsrC  rp   r   r   r   r   	AnnAssignr   r   r~   get_or_insert_functionr   r   r   rH  rg   	push_backadd_entry_blockrangelenrA   r\   r   appendr   set_arg_attrrU   param_typesr   r   r   zipr  set_insertion_point_to_startr   r   has_terminatorr   r   r5  rO   rc   rb   r;  
reset_typefinalizer7  )rv   rl   rk   kwarg_namesr   default_valuearg_noderC  rK   	st_target	init_node
visibilityentry
arg_valuesro   cstr   	insert_ptarg_name	arg_values   `                   r7   r   zCodeGenerator.visit_FunctionDef  s   !%DI!6!6	;7 	Z##D*XYYY )$)*<TTrT*B C C 	8 	8A}y~qb1f-H!,J<DDcikk:::I!J	{-PPP		M-\fggg	8::::26/

9%%%27//%/7777 "&>XXY
,55dk4CU6:n6J6J4<6X6XZdfjfsu udg&&&''))
s9~~&& 	 	ADN""nQ'$S)) 7#DN1$566C!!#&&&'''+q'9 ? ?e,,S$>>>> dn8=?OPP CG((.>BBB!!&c):):DN<VWZ<["\"\]]]qL4466	#&y*#=#= 	0 	0HiNN8Y////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    >HX]>^>^'stDM':':':eierdsDN$Gt~33DLAABBBL    .2     
 	 	?L33I>>>>>	? 	?s    %D	Dc                     g }|j         D ]}||                     |          gz  }|                     |j                  }||fS rT   )rn   r   kwarg)rv   rl   rk   rp   rY  s        r7   visit_argumentszCodeGenerator.visit_arguments  sO    	9 	+ 	+C$**S//**IIjj,,+%%r8   c                 P    t           j                            | |           |j        S rT   )r   r#  r   rp   r   s     r7   	visit_argzCodeGenerator.visit_arg  s!    %%dD111xr8   c                 ~   |                      |j                  }|                      |j                  }|                      |j                  }|t          k    rP|| j        v rt          | d          t          |          st	          |          }|| j        |<   | j        |         S |                     |          S )Nz4 is already defined. constexpr cannot be reassigned.)	r   rC  rB  r   r   ry   
ValueErrorr\   r   )rv   rl   rC  rB  r   s        r7   visit_AnnAssignzCodeGenerator.visit_AnnAssign  s    ZZ00
DK((

4:&&""$$ F "E "E "E F F F '' )!%(("'DK;v&&  &&&r8   c                    g }t          |t          j                  r||                     |j                  gz  }n#|j        D ]}||                     |          gz  }t          |          dk    r|                     |d          |d         }|                     |j                  }t          |          s|g}t          |          s|g}t          j        f}t          ||          D ]p\  }}t          |          }|Dt          |          s5t          ||          s%t          j                            || j                  }|                     ||           qd S )Nr   z2simultaneous multiple assignment is not supported.r   )rU   r   rK  r   rB  rA  rP  r   r   rd   r   r&   rT  r   rW   r,  r-  r~   r  )	rv   rl   _namesrB  namesvaluesnative_nontensor_typesrK   r   s	            r7   r   zCodeGenerator.visit_Assign  so   dCM** 	/tzz$+..//FF, / /4::f--..v;;??##D*^___q	DJ''U## 	GEV$$ 	XF"*.!3uf-- 	( 	(KD%(//E #E** !e%;<< ! !)33E4<HHNN4''''	( 	(r8   c                 4   |j         j        }t          j        |t          j                              }t          j        ||j        |j                  }t          j        |j         g|          }| 	                    |           | 
                    |          S )Nr?  r@  )rB  r   r   r   LoadBinOpopr   r   r   r   )rv   rl   rK   lhsrhsassigns         r7   r   zCodeGenerator.visit_AugAssign  sz    {~h$CHJJ///iTWdj11T[M===

6$$T***r8   c                     t          |j                  t          j        u r|j        S |                     |j                  S rT   )r^   r   r   r   r   r   r   s     r7   r   zCodeGenerator.visit_Name	  s4    >>SY&&7N$$TW---r8   c                 F    t           j                            | |           d S rT   r"  r   s     r7   visit_StorezCodeGenerator.visit_Store  r$  r8   c                 F    t           j                            | |           d S rT   r"  r   s     r7   
visit_LoadzCodeGenerator.visit_Load  r$  r8   c                 H      fd|j         D             }t          |          S )Nc                 :    g | ]}                     |          S r;   r   )r<   xrv   s     r7   r=   z-CodeGenerator.visit_Tuple.<locals>.<listcomp>  s#    111!

1111r8   )r(  rc   )rv   rl   rn   s   `  r7   visit_TuplezCodeGenerator.visit_Tuple  s*    1111ty111T{{r8   c                    t          |          r  t          ||          || j                  S t          |          r6t          j        dd|          } t          ||          || j                  S  t          ||          |          S )N_builderz__(.*)__z__r\1__)rZ   r   r~   resub)rv   method_namerv  rw  reverse_method_names        r7   _apply_binary_methodz"CodeGenerator._apply_binary_method  s    S!! 	I,73,,S4<HHHHS!! 	Q"$&j+"N"N473 344S4<PPPP(wsK((---r8   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^   ru  r   formatrj   r  rv   rl   rv  rw  r  s        r7   visit_BinOpzCodeGenerator.visit_BinOp!  s    jj##jj$$266tDG}}EE##D$^$e$efjfmfv$w$wy y y((c3???r8   __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 }g }g }	|D ]&}
|df|dffD ]Q\  }}|
|v rH||
         j	        ||
         j	        k    s,J d|
 d||
         j	         d| d||
         j	                     R|
|v s|
|v r|
                    |
           |
                    |
|v r||
         j	        n||
         j	                   |	
                    |
|v r||
         j                                        n||
         j                                                   |
|v r|
|vr||
         ||
<   |
|v r|
|vr||
         ||
<   (t          |                                |                                z            D ]}
|
|v r||
         j	        }||
         j	        }||k    sJ d|
 d| d	| d
            |
                    |
           |
                    |           |	
                    ||
         j                                                   |||||||	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~   rU  r   r   r   r|   rz   r   ry   r^   rQ  r3  get_typerI   keys)rv   rl   r{   
then_block
else_block	then_defs	else_defsro  r;  ir_ret_typesrK   defs
block_namethen_tyelse_tys                  r7   visit_then_else_blocksz$CodeGenerator.visit_then_else_blocks9  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 X X j4<<:?gdm.@@@@Xd X XAS X X#-X XFJ4joX X A@@ y  DI$5$5T"""  9J9J4!5!5PYZ^P_Pdeee##$-J. J.IdO$:$C$C$E$E$E3<T?3I3R3R3T3TV V V y  T%:%:")$-	$y  T%:%:")$-	$ 9>>++inn.>.>>?? 
	C 
	CDu}}o*Go*Gg%%%.t . .' . .#*. . . &%% LLW%%%	$ 6 ? ? A ABBBB)ZUI|[[r8   c                 `   t          |           5 }|\  }}| j                                        }| j                                        }| j                            |           | j                            |j        ||           |                     ||||          \  }}}}	}
| j                                        }| j                            |           |                                rJ |             | j                            |fd|D                        | j                            |           |                                rJ |             | j                            |fd|D                        |
D ]}|	                    |           	 d d d            n# 1 swxY w Y   | j        
                    |           t          |          D ]T\  }}t          j                            |                    |          |	|                   }|                     ||           Ud S )Nc                 *    g | ]}|         j         S r;   r2  r<   nr  s     r7   r=   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>       4X4X4XQYq\5H4X4X4Xr8   c                 *    g | ]}|         j         S r;   r2  r<   r  r  s     r7   r=   z4CodeGenerator.visit_if_top_level.<locals>.<listcomp>  r  r8   )rs   r~   r6  r7  create_cond_branchr3  r  rV  create_branchadd_argumentrU  rh   r   corer   rp   r  )rv   condrl   srr{   ip_blockr  r  ro  r;  r  endif_blockr4   r   rK   
new_tensorr  r  s                   @@r7   visit_if_top_levelz CodeGenerator.visit_if_top_levelp  sz   d## 	-r "GX2244J2244JL33H===L++DKZPPP ++D':zRR YIy*j%L ,3355KL33J???!0022CCzOCC2L&&{4X4X4X4XRW4X4X4XYYYL33J???!0022CCzOCC2L&&{4X4X4X4XRW4X4X4XYYY" - -((,,,,-)	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-0 	11+>>> '' 	- 	-GAt!--kooa.@.@)A,OOJNN4,,,,	- 	-s   FF%%F),F)c                     t                     5 }|\  }}                                 \  }} j                                        }|j        r j                                        nd }	                     ||||	          \  }}	}
}}                     ||            j                             fd|D             |j        d          }|	                    |
                                            j                            |
                                           t          |
          dk    r& j                            fd|
D                        |j        s|                                }	n'|		                    |                                            j                            |                                           t          |
          dk    r& j                            fd|
D                        d d d            n# 1 swxY w Y   t          |
          D ]T\  }}t           j                            |                    |          ||                   }                     ||           Ud S )Nc                 D    g | ]}|                     j                  S r;   rH  r~   rI  s     r7   r=   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  s'    .Z.Z.Z"rxx/E/E.Z.Z.Zr8   Tr   c                 *    g | ]}|         j         S r;   r2  r  s     r7   r=   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>       -Q-Q-Qail.A-Q-Q-Qr8   c                 *    g | ]}|         j         S r;   r2  r  s     r7   r=   z.CodeGenerator.visit_if_scf.<locals>.<listcomp>  r  r8   )rs   r  r~   r6  r   r  r  create_if_opr3  merge_block_beforeget_then_blockr7  rP  create_yield_opget_else_blockrh   r   r  r   
get_resultr  )rv   r  rl   r  r{   r   r  last_locr  r  ro  r;  if_opr   rK   r  r  r  s   `               @@r7   visit_if_scfzCodeGenerator.visit_if_scf  s   d## 	SrJGQ<<>>LB2244J8<M22444J++D':zRR NIy*j%A --b(;;;L--.Z.Z.Z.ZPY.Z.Z.Z\`\gimnnE))%*>*>*@*@AAAL33E4H4H4J4JKKK5zzA~~,,-Q-Q-Q-Q5-Q-Q-QRRR; F"1133

--e.B.B.D.DEEEL33E4H4H4J4JKKK5zzA~~,,-Q-Q-Q-Q5-Q-Q-QRRR)	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S, !'' 	- 	-GAt!--e.>.>q.A.A9Q<PPJNN4,,,,	- 	-s   G/HHHc           	         |                      |j                  }t          |          r|                    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 )Nr  zCannot have `return` statements inside `while` or `for` statements in triton (note that this also applies to `return` statements that are inside functions transitively called from within `while`/`for` statements)O`if` conditionals can only accept values of type {{{}}}, not objects of type {}, c              3   $   K   | ]}|j         V  d S rT   r   r   s     r7   r   z)CodeGenerator.visit_If.<locals>.<genexpr>  $      !G!G!*!G!G!G!G!G!Gr8   )r   testrZ   tor   int1r~   r   r   r   r   r  r  r   r^   _condition_typesr  r/   rj   r   r   r   )rv   rl   r  contains_returnactive_blocks        r7   r   zCodeGenerator.visit_If  sr   zz$)$$T"" 	8778=4<7@@D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7r8   c           	      |   |                      |j                  }t          |          rZ|                    t          j        | j                  }t          |           5  |                                 \  }}| j        	                                }| j        
                    |           t          j                            |                      |j                  | j                  }| j                                        }| j        	                                }| j        
                    |           t          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 r4  Tr   r  r  c              3   $   K   | ]}|j         V  d S rT   r   r   s     r7   r   z,CodeGenerator.visit_IfExp.<locals>.<genexpr>  r  r8   )$r   r  rZ   r  r   r  r~   rs   r  r6  rU  r,  r-  r   r   r   r  r^   r5  rH  r  r3  r  r  r7  r  r  r  r   r  r   r  r   r  r/   rj   )rv   rl   r  r  r  r  then_valr  else_valr   ret_type_irr  s               r7   r   zCodeGenerator.visit_IfExp  s	   zz$)$$T"" 1	/778=4<7@@D!$'' !d !d#@@BBH!\6688
99*EEE#,66tzz$)7L7Ldl[[!\==??
!\6688
99*EEE $,66tzz$+7N7NPTP\]]!\==??
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    LM88M<?M<c                     d S rT   r;   r   s     r7   
visit_PasszCodeGenerator.visit_Pass  s    r8   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.)rP  comparatorsopsr   r   r  r   r^   r   Isr   IsNot_method_name_for_comp_opr   r  rj   r  )rv   rl   rv  rw  	lhs_value	rhs_valuer  s          r7   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???r8   __eq____ne____lt____le____gt____ge__r  c           
         |                      |j                  }| j                            t	          |j                            }|$|                     |d|j        j         d          t          |          r t          ||          | j
                  S 	  t          ||                      S # t          $ r/ |                     |d| dt	          |          j                   w xY w)NzAST unary operator 'z!' is not (currently) implemented.r  z)' is not (currently) implemented on type )r   operand_method_name_for_unary_opr   r^   ru  r   rj   rZ   r   r~   AttributeError)rv   rl   r  rm   s       r7   visit_UnaryOpzCodeGenerator.visit_UnaryOp  s	   **T\**+//TW>>:##D*tAQ*t*t*tuuuW%% 	?'77B''>>>>	t'77B''))) 	t 	t 	t##rRrrZ^_fZgZgZprrt t t	ts   B4 49C-__neg____pos____not__
__invert__r  c                 T   t          |          sJ d| d            t          |          sJ d| d            t          |          t          |          k    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.)rW   r^   rZ   )rv   rK   loop_vallive_vals       r7   _verify_loop_carried_variablez+CodeGenerator._verify_loop_carried_variable$  s    ))YY+Yt+Y+Y+YYY)))YY+Yt+Y+Y+YYY)H~~h///1]$1]1]1]///$X.. 	@(-8=2P2P2P@T @ @X] @ @%-]@ @ @ 3Q2PP 	@ 	@2P2Pr8   c           
      Z	    t                     5 }|\  }}                                 \  }} j                                        } j                            |            j                            |                                |j                    j        	                                  j
        }|                                 g }	g }
g }|D ]q}||v rk||         }||         }                     |||           |	                    |           |
                    |j                   |                    |           r                     ||            j                             fd|
D             d |D                       } j                            |                                 fd|
D                        j                                       t%          |	          D ][\  }}t&          j                                                |          |
|                    j        |<    j        |          j
        |<   \                     |j                  } j                                        j                            |j        fdt;          t=          |                    D                         j                            |                                 fd|
D                       } j                            |           t%          |	          D ][\  }}t&          j                            |                    |          |
|                    j        |<    j        |          j
        |<   \ j                            |                                |j                    j        	                                  j
        }g }|D ]!}||v r|                    ||                    " j                             d |D                        d d d            n# 1 swxY w Y   t%          |	          D ]R\  }}t&          j                            |!                    |          |
|                   }| j        |<   | j
        |<   S|j"        D ]}J d            d S )	Nc                 D    g | ]}|                     j                  S r;   r  rI  s     r7   r=   z-CodeGenerator.visit_While.<locals>.<listcomp>M  s(    4`4`4`PRRXXdl5K5K4`4`4`r8   c                     g | ]	}|j         
S r;   r2  r<   rp   s     r7   r=   z-CodeGenerator.visit_While.<locals>.<listcomp>N  s    4U4U4UCSZ4U4U4Ur8   c                 D    g | ]}|                     j                  S r;   r  rI  s     r7   r=   z-CodeGenerator.visit_While.<locals>.<listcomp>Q  s(    AmAmAm]_"((4<BXBXAmAmAmr8   c                 :    g | ]}                     |          S r;   )rp   )r<   r   before_blocks     r7   r=   z-CodeGenerator.visit_While.<locals>.<listcomp>Y  s(    :n:n:nST<;K;KA;N;N:n:n:nr8   c                 D    g | ]}|                     j                  S r;   r  rI  s     r7   r=   z-CodeGenerator.visit_While.<locals>.<listcomp>\  s(    @l@l@l\^$,AWAW@l@l@lr8   c                     g | ]	}|j         
S r;   r2  r<   ys     r7   r=   z-CodeGenerator.visit_While.<locals>.<listcomp>k  s    )C)C)Cq!()C)C)Cr8   FzNot implemented)&rs   r  r~   r6  rU  r   rQ  r   r   popr|   eraser  r^   r  create_while_opcreate_block_with_parent
get_beforerh   r   r  r   rp   ry   r   r  r7  create_condition_opr3  rO  rP  	get_afterr  r  r   r   r#  r   )rv   rl   r  r{   r   r  r  dummy	loop_defsro  r;  	init_argsrK   r  r  while_opr   r  after_blockyieldsnew_defr  r  s   `                     @r7   visit_WhilezCodeGenerator.visit_While-  s   d## =	Er$&!G\<<>>LB L--//EL55e<<<N!!$'''))$)444N   IKKMMM EII! 
/ 
/7??(H&t}H66tXxPPP LL&&&$$X]333$$X...--b(;;;|334`4`4`4`V_4`4`4`4U4U94U4U4UW WH  <@@ATATAVAVAmAmAmAmclAmAmAmo oLL55lCCC$U++ : :4$,M$8$89I9I!9L9LiXYl$[$[D!(,D(9%%::di((DL33LAAAL,,T[:n:n:n:nX]^abk^l^lXmXm:n:n:nooo,??@R@R@T@T@l@l@l@lbk@l@l@ln nK L55kBBB$U++ : :4$,M$8$89K9KYWX\$Z$ZD!(,D(9%%N!!$'''))$)444N   IF! 3 37??MM)D/222L(()C)CF)C)C)CDDD{=	E =	E =	E =	E =	E =	E =	E =	E =	E =	E =	E =	E =	E =	E =	E@ !'' 	, 	,GAtm**8+>+>q+A+A9Q<PPG 'DK$+DOD!!K 	6 	6D++++5	6 	6s   PP++P/2P/c                     |j         j        j        dk    sJ |                     |j                  }|                     |j                  }t          |          r|                    || j                  S ||         S )Nrs  r  )	r   	__class__rj   r   r   slicerZ   __getitem__r~   )rv   rl   rv  slicess       r7   visit_SubscriptzCodeGenerator.visit_Subscriptw  st    x!*f4444jj$$DJ''S!! 	B??6DL?AAA6{r8   c                 *      fd|j         D             S )Nc                 :    g | ]}                     |          S r;   r   )r<   dimrv   s     r7   r=   z0CodeGenerator.visit_ExtSlice.<locals>.<listcomp>  r'  r8   )dimsr   s   ` r7   visit_ExtSlicezCodeGenerator.visit_ExtSlice  s    5555495555r8   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 }
|t          j        u r, ||i |}|j	        }|j        }|j        }|j        }	|j        }
n|t          u rt3          |          dk    r|d         n&                      t)          j        d                    }t3          |          dk    r|d         n$                      |j        j        d                   }t3          |          dk    r|d         n&                      t)          j        d                    }nt7          d          d}t9          |          r&|j
        dk     rt          |j
                   }d}||}}t          j                            | j                  }t          j                            | j                  }t          j                            | j                  }|j         !                                r2|j         !                                r|j         !                                s(tE          d	|j          d
|j          d
|j          d          t          j        #                    |j         |j                   }t          j        #                    ||j                   }|$                     j                  }|j%        t          j&        j         j'        j(        k    }|j)        }|j)        }|j)        } j        *                    |||          } j        *                    |||          } j        *                    |||          } j        +                    |          } ,                    |j        j        t          j&        -                    ||                     t]                     5 }|\  }} /                                \  }} j        0                                } j        1                    |            j2        3                    |                                |j                    j2        4                                 |5                                 g }g }g } j6        D ]q}||v rk j6        |         }||         } 7                    |||           |3                    |           |3                    |           |3                    |           r 8                    ||            j        9                    |||d |D                       }|	.|:                    d j        ;                    |	                     |
.|:                    d j        ;                    |
                      j2        3                    |            j        1                    |<                    d                     |=                                 _        i  _6        t}          |          D ]m\  }} ,                    |t          j&        -                    |<                    d          ?                    |dz             ||         j@                             n                     |j                    j2        4                                 g } j6        D ]I}||v rC|3                    t          j                             j6        |          j                             Jt3          |          dk    r$ j        A                    d |D                        |<                    d          B                                } | C                                dk    s
J d             j        1                    |<                    d                     |D                                }|r6 j        E                    ||          } j        F                    ||          } j        |j        j                 j)        G                    |            ,                    |j        j        t          j&        -                    ||                     d d d            n# 1 swxY w Y   t}          |          D ]W\  }} ,                    |t          j&        -                    |H                    |          ||         j@                             X|j        D ]}J d            d S )Nc                 :    g | ]}                     |          S r;   r   r<   rp   rv   s     r7   r=   z+CodeGenerator.visit_For.<locals>.<listcomp>  s#    ???TZZ__???r8   c              3   B   K   | ]}                     |          V  d S rT   r   r<   keywordrv   s     r7   r   z*CodeGenerator.visit_For.<locals>.<genexpr>  s/      QQ74::g..QQQQQQr8   r   r   r
   zAOnly `range` and `static_range` iterators are currently supportedFTz0For loop bounds and step must all be ints, are (r  r  c                     g | ]	}|j         
S r;   r2  r  s     r7   r=   z+CodeGenerator.visit_For.<locals>.<listcomp>  s    >_>_>_csz>_>_>_r8   ztt.num_stagesztt.loop_unroll_factorc                     g | ]	}|j         
S r;   r2  r  s     r7   r=   z+CodeGenerator.visit_For.<locals>.<listcomp>  s    -G-G-G1ah-G-G-Gr8   z7We use SCF, so the loop body should only have one blockz)Don't know what to do with else after for)Ir   iterr   rn   dictkeywordsr   static_rangerO  startr   endstepr   ry   rB  r   r   r   r   r   r#  r   
num_stagesloop_unroll_factorrP  NumRuntimeErrorr\   r,  r-  r~   r&   r%   r3   integer_promote_implrH  r)   r  r'   r(   r3  create_int_castrG  r  r   rs   r  r6  rU  r   rQ  r  r  r|   r  r  create_for_opset_attrget_int32_attrget_bodyrz   rh   rp   r^   r  
get_parentsizeget_induction_var
create_sub
create_addreplace_all_uses_withr  )!rv   rl   IteratorClass	iter_argsiter_kwargsiteratorr+  r   r  r/  r0  lbubr.  negative_stepiv_type
iv_ir_typeiv_is_signedivr  r{   r   r  r  blockr  r  ro  rK   r  r  for_opfor_op_regions!   `                                r7   	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!)!<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((T\::((T\:: **4>>x   	v(9(9 	vARARATAT 	vtrxtt[][cttgkgqtttuuu#8828LL#88$*MM]]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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(;;;\//B>_>_U^>_>_>_``F%1L1LZ1X1XYYY!- 79T9TUg9h9hiiiN!!$'''L55fooa6H6HIII!,,..DK DO$U++ j j4tX]%9%9&//!:L:L:P:PQRUVQV:W:WY_`aYbYg%h%hiiii))$)444N   F d d7??MM("3"="=dod>SUYUa"b"bccc 6{{Q,,-G-G-G-G-GHHH"OOA..99;;M %%''1,,,.g,,, L55fooa6H6HIII))++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D !'' 	] 	]GAtNN4!5!5f6G6G6J6JFSTIN![![\\\\K 	6 	6DEEEE5	6 	6s   "Reeec                     |                      |j                  }|                      |j                  }|                      |j                  }t	          |||          S rT   )r   lowerupperr.  r  )rv   rl   rO  rP  r.  s        r7   visit_SlicezCodeGenerator.visit_Slice	  sM    

4:&&

4:&&zz$)$$UE4(((r8   c                 6    |                      |j                  S rT   )r   r   r   s     r7   visit_IndexzCodeGenerator.visit_Index  s    zz$*%%%r8   c                 D    |j         |                     |j                  fS rT   )rp   r   r   r   s     r7   visit_keywordzCodeGenerator.visit_keyword  s    xDJ////r8   c                     |                      |j                  }|j        |                      |j                  nd}t          j                            ||| j                  S )Nr   r  )r   r  msgr   r  device_assertr~   )rv   rl   r  rW  s       r7   visit_AssertzCodeGenerator.visit_Assert  sS    zz$)$$&*h&:djj"""}**4t|*LLLr8   rm   c                 |   t          j        |j        gR i |fd|j        D             d D             i }d t	                    D             fdD             }fdt	                    D             d D             }d D             }t          |j        ||          }| j                            |          st          j
        g |          }	|j        }
t          |          \  }}t          | j        |	|
||| j        ||| j        |j        ||| j        j        | j        j        | j        j                  }	 |                    |                                           n3# t.          $ r&}t1          | j        j        | j        d           |d }~ww xY w|j        }|| j        |<   n| j        |         }| j                            |          }| j                            ||          }|                                d	k    s|d S |                                d
k    r#tA          |!                    d	          |          S g }tE          |                                          D ]>}|#                    tA          |!                    |          ||                              ?tI          |          S )Nc                      g | ]
}|         S r;   r;   )r<   rK   rn   s     r7   r=   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s    444tT
444r8   c                 N    g | ]"}t          |          r|nt          |          #S r;   )rW   r   r  s     r7   r=   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>  s0    QQQS',,@)C..QQQr8   c                 6    g | ]\  }}t          |          |S r;   )r\   )r<   r   rp   s      r7   r=   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>   s)    LLLFAss9K9KLaLLLr8   c                 "    i | ]}||         S r;   r;   )r<   r   rn   s     r7   r   z2CodeGenerator.call_JitFunction.<locals>.<dictcomp>!  s    444AQQ444r8   c                 &    g | ]\  }}|v rd n|S rT   r;   )r<   r   rp   
constexprss      r7   r=   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>#  s)    OOOVQZSOOOr8   c                      g | ]}||j         S rT   r2  r  s     r7   r=   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>$  s    BBB3#/CJ///r8   c                      g | ]}||j         S rT   r/  r  s     r7   r=   z2CodeGenerator.call_JitFunction.<locals>.<listcomp>%  s    AAA#SXr8   )
r   r   r   r   rg   r   r   r   r   r   r   r   )%inspectgetcallargsrm   rk   rh   rP   rj   r   has_functionr   function_type__globals__r   r   r   r   rg   r~   r   r   r   r   r   	Exceptionr   r   ri   r   r   get_functioncallget_num_resultsr   r  rO  rQ  rc   )rv   rm   rn   r   r   rA   arg_vals	arg_typesfn_namer   r   r   r   ru   ecallee_ret_typesymbolcall_opresultsr   r`  s     `                 @r7   call_JitFunctionzCodeGenerator.call_JitFunction  s   "25:4:::6::4444r|444QQDQQQ
LLiooLLL
4444444	OOOOyOOOBB$BBBAAAAA	BKI>>{''00 	? .r9==I^F$8$<$<!Iz%dlIvzS\eiep-/wW[Wn/1{i\f.2l.BPTP\Ph151H	J J JI
T

++++ T T T&t{tLLRSST (0O/>D#G,,"5g>O))'22,##FH55""$$))_-D4$$&&!++',,Q//AAA G7224455 R Rvg&8&8&;&;_Q=OPPQQQQ>>!s   'E/ /
F9!FFc                 @    t                               |j                            } j                            |          }| | |          S t           fd|j        D                       } fd|j        D             }t          |t                    r(t          |||                                |||          S t          |d          rt          |j                  st          j                            |          rdd j        i}t'          j        |          }d|j        v r |d<   	  ||i ||S # t,          $ r!}t/           j        j        |d           |d }~ww xY w| j                                        v rt9          t           |          } ||i |S )Nc              3   B   K   | ]}                     |          V  d S rT   r   r$  s     r7   r   z+CodeGenerator.visit_Call.<locals>.<genexpr>O  s/      DD74::g&&DDDDDDr8   c                 :    g | ]}                     |          S r;   r   r"  s     r7   r=   z,CodeGenerator.visit_Call.<locals>.<listcomp>P  r'  r8   __self__r  
_generator)r   r   r    statically_implemented_functionsr   r)  r*  rn   rU   r   rq   rt  hasattrrW   rx  r   r  
is_builtinr~   rc  	signature
parametersrh  r   r   ri   r   rp  r0   )	rv   rl   rm   static_implementationkwsrn   extra_kwargssigro  s	   `        r7   r   zCodeGenerator.visit_CallI  s   !$**TY"7"788 $ E I I" M M ,((t444DDDDdmDDDDD555549555b+&& 	84T***((T3777B
## 	K(8(E(E 	K(-JbJbceJfJf 	K&5L#B''Cs~---1\*	Kr47<73777 K K K 't{dCCJK '..0000+T22Dr43s   0	D: :
E%E  E%c                 *    t          |j                  S rT   r   r   r   s     r7   visit_ConstantzCodeGenerator.visit_Constanth  s    $$$r8   rl   c                    t          |j                  dk    r|                     |d          |                     |j        d                   }|                     |j        d                   }| j                            t          |j                            }|3|                     |d                    |j        j	                            | 
                    |||          S )Nr
   z^chained boolean operators (A or B or C) are not supported; use parentheses to split the chain.r   r   z9AST boolean operator '{}' is not (currently) implemented.)rP  rp  r   r   _method_name_for_bool_opr   r^   ru  r  rj   r  r  s        r7   visit_BoolOpzCodeGenerator.visit_BoolOpk  s    t{q  ##vx x xjjQ((jjQ((377TWFF##QXXY]Y`Yijjl l l((c3???r8   logical_and
logical_orr  )      c                 *    t          |j                  S rT   r  r   s     r7   visit_NameConstantz CodeGenerator.visit_NameConstant{  s    TZ(((r8   c                 *    t          |j                  S rT   )r   r  r   s     r7   	visit_NumzCodeGenerator.visit_Num~  s    TV$$$r8   c                 D    t          t          j        |                    S rT   )r   r   literal_evalr   s     r7   	visit_StrzCodeGenerator.visit_Str  s    S-d33444r8   c                     |                      |j                  }t          |          r2|j        dk    r't          j                            |d| j                  S t          ||j                  S )NT)r   r   )r~   )	r   r   rZ   r   r   r,  permuter~   r   )rv   rl   rv  s      r7   r   zCodeGenerator.visit_Attribute  sd    jj$$S!! 	Pdi3&6&6$,,S&$,,OOOsDI&&&r8   c                 F    t           j                            | |           d S rT   r"  r   s     r7   
visit_ExprzCodeGenerator.visit_Expr  r$  r8   c                     d S rT   r;   r   s     r7   visit_NoneTypezCodeGenerator.visit_NoneType  r   r8   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   )rb   rp  rh   rU   r   Constantr*   r   FormattedValue
conversionr   r\   r   r^   chrr  AssertionErrorr/   )rv   rl   rp  r   r   conversion_code	evaluateds          r7   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r8   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                                          |          }nJ# t           $ r  t"          $ r3}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ignorelineno
col_offset)warningscatch_warningssimplefilterDeprecationWarningPendingDeprecationWarningr   r~   r  r{  r   r   r   r  r  superr   r   rh  r   ri   r@   )rv   rl   	last_noder  rO   ro  r  s         r7   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 't{tAwwOOUYYZ  / )$$X...1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   CE?"!DE?E.EE'E??FFc                 x    |                      |d                    t          |          j                            )Nzunsupported AST node type: {})r   r  r^   rj   r   s     r7   r   zCodeGenerator.generic_visit  s1    &E&L&LTRVZZM`&a&abbbr8   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: >)rP  rn   r*  r3   r   r   rU   r   NotImplementedErrorrh  r@   r   r   ri   )rv   rl   	arg_countpassedr   ro  s         r7   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 )Nrl   c                      d  fd|j         D             D             } fd|j        D             }t           |i |          S )Nc                 4    i | ]\  }}|t          |          S r;   )r   )r<   rK   r   s      r7   r   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<dictcomp>  s7       D% *511  r8   c              3   B   K   | ]}                     |          V  d S rT   r   r$  s     r7   r   z=CodeGenerator.static_executor.<locals>.ret.<locals>.<genexpr>  s/      #U#UGDJJw$7$7#U#U#U#U#U#Ur8   c                 T    g | ]$}t                              |                    %S r;   )r   r   r"  s     r7   r=   z>CodeGenerator.static_executor.<locals>.ret.<locals>.<listcomp>  s,    OOOc(C99OOOr8   )r*  rn   r   )rv   rl   r  rn   	python_fns   `   r7   rO   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5r8   )r   r   )r  rO   s   ` r7   static_executorzCodeGenerator.static_executor  s1    	6CH 	6 	6 	6 	6 	6 	6 
r8   rz  )NFNFNr   )rj   r   r   r   r   r   r*   rw   rP  rb   rO  floatintrU   r   r   r   r   updater   r  device_printminimummaximumr   r   r   r	   r   r   r  r  r  r   r   r)  r   r   rg  ri  rl  r   r   r   r{  r}  r  r  r  r   AddSubMultDivFloorDivModPowLShiftRShiftBitAndBitOrBitXorr  r   operatorr  r  r  r   r   r  r  EqNotEqLtLtEGtGtEr  cmpopr  USubUAddNotInvertr  unaryopr  r  r  r  rM  rQ  rS  r   rU  rY  rt  r   r  BoolOpr  AndOrr  boolopsysversion_infor  r  r  r   r  r  r  r   r   r   r  r  static_assertstatic_printr   rz  r   r   __classcell__)r  s   @r7   r   r      s         jnMN00 00al 00X`aeXf00,4SM00 00 00 00d )u(tdESXZ]_ikr@s(t(t(ttCH~ttt	(-,-	 !	 !   L L L  - - -^&c &%	0A*B &t & & & &  " " "
 
 
2 2 2  @ @ @2H? H? H?T& & &  ' ' '"( ( (2+ + +. . .
2 2 22 2 2  . . .@ @ @ 	)n
L
L
I	8
I>T$s|"4c"9:   5\ 5\ 5\n- - -@- - -68 8 863/ 3/ 3/j  @ @ @$ 	#)Xsvx(TWTZ\dfifmow<d4	?C#78   t t t 	)SXy#'9cjR^?tD$5s$:;   @ @ @H6 H6 H6T  6 6 6E6 E6 E6N) ) )& & &0U38_ 0 0 0 0MC M M M M
-"; -" -" -" -"^     >% % %
@ 
@ 
@ 
@ 
@ >AWmUXU[]i<jd4
#3S#89jjj
&  	) 	) 	)	% 	% 	%	5 	5 	5' ' '2 2 2    $    :c c c#( t    ,
 
 
 	#%:"OOE$:$:__S!!__S!!	Q$d68SXJO3L+L&M       r8   r   c                     d}t          |           D ]3\  }}|t          |          z  }||j        v r|dz  }||j        v r|dz  }4|S )Nr   r?   d)rh   r*   
equal_to_1divisibility_16)r}  specializationsuffixr   r   s        r7   kernel_suffixr    sh     F)$$  1#a&&)))cMF...cMFMr8   c                 f    j         } fdfdj                                        D             } j                                        }                               }	t          j                                                  }
|	                                }|D ]#}||
v r|
|         dk    r||         dk    rd||<   $|
                                }|                                }|                                }|                    |           fdj                                        D             }t                     \  }}t          j        g |          }t!          |||||	 |d|||||          }|                                                                |j        }||_        |S )Nc                 f    t          | t                    rj                            |           n| S rT   )rU   r*   rk   index)r   rm   s    r7   <lambda>zast_to_ttir.<locals>.<lambda>  s+    As1C1CJ**1--- r8   c                 .    i | ]\  }} |          |S r;   r;   )r<   keyr   cst_keys      r7   r   zast_to_ttir.<locals>.<dictcomp>  s'    XXXeuXXXr8   i1r   Tc                 F    g | ]\  }}|j         vt          |          S r;   )rA   r   )r<   r   r   r  s      r7   r=   zast_to_ttir.<locals>.<listcomp>  s1    ppp$!QaWeWoNoNo1NoNoNor8   )r   rA   r   r   r   r   r   r   r   r   r   )attrsrA   r   rg  rz   r@   rb   r}  rp  get_constantsfilter_out_constantsget_fn_attrsr  r   r   rf  r   r   r   r   r   )rm   r  r   r   r   r   r  rA   r   r   tysnew_constantsr   	new_attrsfn_attrsall_constantsrm  r   r   r   ru   rO   r  s   ``                    @r7   ast_to_ttirr    s    EJJJJGXXXX~7O7U7U7W7WXXXI^  ""FGGN++M
~'..00
1
1C''))M $ $88A$=+;q+@+@#M!**,,I%%''HNN$$M'''pppp.*B*H*H*J*JpppI044Iz&r955Igy=hu%'HXa)3WR]jtv v vI OOBHHJJ

CCKJr8   )7r   rc  r  r  r  r  r  typingr   r   r   r   r   r   r	   r   r   _C.libtritonr   r   r   r   language.corer   r   r   runtime.jitr   r   runtimer   errorsr   r   r   typesr   r#   rP   r   rW   rZ   r\   r`   rd   rq   r  r^   r  rs   r#  r   r   r  r  r;   r8   r7   <module>r     s   



  				 



  				  D D D D D D D D D D D D D D D D D D             3 3 3 3 3 3 3 3 3 3 J J J J J J J J J J = = = = = = = = ! ! ! ! ! ! a a a a a a a a a a      . . .$	 	 	! ! ! ! ! !! ! ! ! ! !$S $T $ $ $ $Q Q Q Q Q Q(S (T ( ( ( (   #ttDzz* 3 3 3 3 3 3 3 3*U% U% U% U% U%CO U% U% U%pi i i i iCO i i iX!
 
 
    r8   