
    Pi{R                       d dl mZ d dlZd dlZddlmZmZ ddlmZ ddlm	Z	 ddl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mZ ddlmZ ddlmZ d dlmZ d dlZd dlZd dlZd dlZd dl Z dZ!de!iZ"dZ#de#iZ$d Z% G d d          Z& G d d          Z' ej(                    d             Z)d Z*d*dZ+ G d d          Z,d+dZ-d,d"Z. G d# d$          Z/ G d% d&e0          Z1d' Z2 G d( d)          Z3dS )-    )annotationsN   )get_cache_invalidating_env_varsir)backends)Language)BaseBackend	GPUTarget)__version__knobs)OutOfResources)get_cache_managerget_dump_managerget_override_managerget_cache_key)driver)get_sass)Pathz=\.(?:visible|extern)\s+\.(?:entry|func)\s+(\w+)\s*\(([^)]*)\)ptxz\.param\s+\.(\w+)c                    t          j        d|           }t          j        d|           }|dS t          j        dd|           } |%dt          |                    d                    z   S | S )Nz!tt\.ptr<([^,]+)ztt.nv_tma_desc = 1	nvTmaDescz {[^}]+} *   )researchsubconvert_type_reprgroup)xmatchtmas      p/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/triton/compiler/compiler.pyr   r   '   sn     I)1--E
))1
-
-C
{
{B""A&u{{1~~6666H    c                  ,    e Zd Zd
ddZd ZddZd	 ZdS )	ASTSourceNreturnNonec                   || _         t          j        | _        d| _        |j        | _        || _        t                      | _	        |m|
                                D ]X\  }}t          |t                    r|j                            |          fn|}t          |t                    sJ || j	        |<   Y|pt                      | _        | j                                        D ]&}t          |t                    st%          d          'd S )NttirzSignature keys must be string)fnr   TRITONlanguageext__name__name	signaturedict	constantsitems
isinstancestr	arg_namesindextupleattrskeys	TypeError)selfr+   r1   
constexprsr:   kvs          r#   __init__zASTSource.__init__6   s    K	"!"((** & &11;As1C1CJR\''**--!!U+++++$%q!!_dff
$$&& 	A 	AAa%% A ?@@@A	A 	Ar$   c                   d t          | j                                                  D             }d d                    fdt          | j                                                  D                       }| j        j         dt          | j                   d| d| }t          j
        |                    d                                                    S )Nc                    g | ]\  }}|S  rD   ).0r?   r@   s      r#   
<listcomp>z"ASTSource.hash.<locals>.<listcomp>H   s    CCCDAqaCCCr$   c                N    t          | d          r| j        nt          |           S )N	cache_key)hasattrrH   r6   )r    s    r#   <lambda>z ASTSource.hash.<locals>.<lambda>I   s!    71k+B+BNAKKA r$   -c                ,    g | ]\  }} |          S rD   rD   )rE   r?   r@   get_keys      r#   rF   z"ASTSource.hash.<locals>.<listcomp>J   s%    !X!X!XA''!**!X!X!Xr$   utf-8)sortedr1   r4   joinr3   r+   rH   r6   r:   hashlibsha256encode	hexdigest)r=   
sorted_sigconstants_keykeyrM   s       @r#   hashzASTSource.hashG   s    CCF4>+?+?+A+A$B$BCCC
NN!X!X!X!X@T@T@V@V9W9W!X!X!XYY"SSS__SSzSSMSS~cjj1122<<>>>r$   targetr
   c                :    ddl m}  || j        | ||||          S )Nr   )ast_to_ttir)contextoptionscodegen_fns
module_map)code_generatorr[   r+   )r=   rY   r]   r^   r_   r\   r[   s          r#   make_irzASTSource.make_irN   s=    //////{47D'7Xc&02 2 2 	2r$   c                    t                      S N)r2   r=   s    r#   parse_optionszASTSource.parse_optionsS   s    vvr$   )NNr'   r(   rY   r
   r/   
__module____qualname__rA   rX   ra   re   rD   r$   r#   r&   r&   4   sd        A A A A A"? ? ?2 2 2 2
    r$   r&   c                  (    e Zd Zd Zd ZddZd ZdS )	IRSourcec                   || _         t          |          }|j        dd          | _        t          j        | _        |                                | _        t          j
        |           |
                    |           | j        dk    rt          j        t          | j                 | j        t          j                  }|                    d          | _        |                    d          }t          j        t$          | j                 |          }d t'          |          D             | _        d S t          j        | j         |          | _        | j                                        }d|z   | _        | j                            |          }| j                            |          }	d t'          |	          D             | _        d S )Nr   r   r   c                4    i | ]\  }}|t          |          S rD   )r   rE   r?   tys      r#   
<dictcomp>z%IRSource.__init__.<locals>.<dictcomp>i   s'    UUU51ba!22!6!6UUUr$   @c                    i | ]\  }}||	S rD   rD   ro   s      r#   rq   z%IRSource.__init__.<locals>.<dictcomp>p   s    DDD2aDDDr$   )pathr   suffixr.   r   r,   r-   	read_textsrcr   load_dialectsr   r   prototype_pattern	MULTILINEr   r0   findallarg_type_pattern	enumerater1   parse_mlir_modulemoduleget_entry_func_nameget_functionget_function_signature)
r=   rt   r\   backendr!   r1   typesfn_namefuncOpfunc_tys
             r#   rA   zIRSource.__init__Y   sk   	Dzz;qrr? >>##
!!!g&&& 8uI/948R\RREADIAIJ/99EEEUUIeDTDTUUUDNNN.ty'BBDKk5577GgDI[--g66Fk88@@GDD71C1CDDDDNNNr$   c                ~    t          j        | j                            d                                                    S )NrN   )rQ   rR   rw   rS   rT   rd   s    r#   rX   zIRSource.hashr   s,    ~dhoog6677AACCCr$   rY   r
   c                (    || j         _        | j         S rc   )r   r\   )r=   rY   r]   r^   r_   r\   s         r#   ra   zIRSource.make_iru   s    %{r$   c                    | j         dk    r*| j                            d          }|
J d            d|iS t                      S )Nttgirzttg.num-warpsz'Unable to parse ttg.num-warps attribute	num_warps)r.   r   get_int_attrr2   )r=   r   s     r#   re   zIRSource.parse_optionsy   sM    8w00AAI((*S(((++vvr$   Nrg   rh   rD   r$   r#   rl   rl   W   s[        E E E2D D D       r$   rl   c                V    t           j        j                            |           d         S )Nmax_shared_mem)r   activeutilsget_device_properties)devices    r#   r   r      s!    =44V<<=MNNr$   c                   |dk    s|dk    rt          j        | |          }||_        |S |dk    s|dk    s|dk    r!t          |                                           S |dk    s|dk    r!t          |                                           S d S )Nr*   r   llirr   amdgcncubinhsaco)r   r~   r\   r   rv   
read_bytes)	full_namer.   r\   r   s       r#   parser      s    
f}}w%i99 
f}}uxI((***
g~~I))+++ (r$   eBaseExceptionc                   t           j        j        rdS | j        t	          | j                   | j        t	          | j                   ddg}d |D             }| j        g }9t          fd|D                       s|                               j	        9t          ||dd                   D ]\  }}||_	        |s	d| _        dS d|d         _	        |d         | _        dS )	z
    Removes code_generator.py and related files from tracebacks.

    These are uninteresting to the user -- "just show me *my* code!"
    Nz"/triton/compiler/code_generator.pyz/ast.pyc                N    g | ]"}|                     d t          j                  #S )/)replaceossep)rE   bad_files     r#   rF   z$filter_traceback.<locals>.<listcomp>   s*    III8!!#rv..IIIr$   c              3  d   K   | ]*}j         j        j                            |          &|V  +d S rc   )tb_framef_codeco_filenameendswith)rE   ftbs     r#   	<genexpr>z#filter_traceback.<locals>.<genexpr>   s?      VV2;+=+I+R+RST+U+UV1VVVVVVr$   r   r   )r   compilationfront_end_debugging	__cause__filter_traceback__context____traceback__anyappendtb_nextzip)r   	BAD_FILESframes	cur_frame
next_framer   s        @r#   r   r      s$    , {%%%} ''' 	-I JIyIIII	
BF
.VVVViVVVVV 	MM"Z .
 $'vvabbz#:#: ' 'J&	 $!r
 )r$   c                  .    e Zd ZddZddZddZdd	Zd
S )CompileTimerr'   r(   c                `    t          j                     | _        d | _        g | _        d | _        d S rc   )timestartir_initialization_endlowering_stage_endsstore_results_endrd   s    r#   rA   zCompileTimer.__init__   s-     IKK
37"<> /3r$   c                6    t          j                     | _        d S rc   )r   r   rd   s    r#   finished_ir_initializationz'CompileTimer.finished_ir_initialization   s    %)Y[["""r$   
stage_namer6   c                `    | j                             |t          j                    f           d S rc   )r   r   r   )r=   r   s     r#   stage_finishedzCompileTimer.stage_finished   s*     ''TY[[(ABBBBBr$   knobs.CompileTimesc                B   t          j                     }| j        || _        n|| _        d	d}g }| j        }| j        D ](\  }}|                    | |||          f           |})t          j         || j        | j                  | ||| j                            S )
Nr   floatendfloat | Noner'   intc                4    |dS t          || z
  dz            S )Nr   i@B )r   )r   r   s     r#   deltazCompileTimer.end.<locals>.delta   s#    {qew.///r$   )ir_initializationlowering_stagesstore_results)r   r   r   r   r'   r   )r   r   r   r   r   r   CompileTimesr   )r=   	timestampr   lowering_stage_durationsstage_startr   	stage_ends          r#   r   zCompileTimer.end   s    IKK	%-)2D&&%.D"	0 	0 	0 	0
 $& 0%)%= 	$ 	$!J	$++Z{I9V9V,WXXX#KK!#eDJ0JKK4%T-CDD
 
 
 	
r$   Nrf   )r   r6   r'   r(   )r'   r   )r/   ri   rj   rA   r   r   r   rD   r$   r#   r   r      sh        4 4 4 41 1 1 1C C C C
 
 
 
 
 
r$   r   c                6   t           j        j        }|rt                      }|t          j                                        }t          |t                    s
J d            t          |          }t          | t                     }|rCt          | t                    s
J d            t          j                    }t          | ||          } |                                 }	|                    t!          |pt!                      fi |	          }|t#                      n|}
t%          | |||
          }t'          j        |                    d                                                    }t/          |          }t           j        j        }t           j        j        }t           j        j        }|r!t7          |                                           nd }|r!t;          |                                           nd }| j        d d         }| d}|                    |          pi }|                     |          }t           j        j!        }|sP|NtE          | ||          }|r9 || |j#        $                                ||%                                d           |S ||d	|j&        |
}tN          |d
<   t!                      }|(                    ||| j)                   tU          |+                                          ,                    | j-                  }|r|dz  }t          | t                    s<t          j                    }t          j.        |           |.                    |           |/                    |          }|0                                }	 | 1                    |||||          }n"# td          $ r}tg          |            d }~ww xY w|r&| d| j-         } |4                    ||           || <   n| d} |4                    ||           || <   t           j        j5        }!|r3|!r1|6                    | j7                   tq          d| j7                    |r|9                                 tU          |:                                          |d          D ]W\  }"}# |#||          }$| d|" } |B|                     dd           x}%r)|%;                    d|"           rty          |%|"|          }$n:|=                    |           x}&r#tq          d|&            ty          |&|"|          }$|r|"dv r|4                    |$|           || <   |D|4                    |$|            |"dk    r(t}          |$          }'|4                    |'|dz              |!|"k    r<|=                    |           }(|$6                    |(           tq          d|(            |$}|r|?                    |"           Y|4                    t          jA        |t                    |d          ||<   |C                    ||           t           j        jD        s|E                                 |r" || |||%                                d           tE          | ||          S )Nz target must be of GPUTarget typez'source must be either AST or a filepath)env_varsrN      .jsonT)rw   metadatametadata_grouptimes	cache_hit)rX   rY   triton_versionr   .z.sourcezCreating new locations for ir_overridez
Overriding kernel with file )r   r   jsonr   z.sass)defaultF)binary)Fr   r   listenerr   r   r   get_current_targetr5   r
   make_backendr&   r6   r   r\   rl   re   r2   r   r   rQ   rR   rS   rT   r   overridedump_irstore_binary_onlyr   rX   r   r0   	get_groupgetalways_compileCompiledKernelr   _asdictr   __dict__r   
add_stagesr-   listr;   r8   r.   rx   get_codegen_implementationget_module_mapra   	Exceptionr   put
use_ir_loccreate_location_snapshotrt   printr   r4   r   r   get_filer   r   r   dumpsvars	put_groupenable_asandisable_multithreading))rw   rY   r]   	_env_varscompilation_listenertimerr   	ir_sourcer\   extra_optionsr   rW   rX   fn_cache_managerenable_overrideenable_ir_dumpstore_only_binaryfn_override_managerfn_dump_manager	file_namemetadata_filenamer   metadata_pathr   resr   stagesfirst_stager^   r_   r   r   ir_filenamer   r.   
compile_irnext_moduler   r   sassir_full_names)                                            r#   compiler     s"    ,5 ~1133fi((LL*LLLL6""GsI...I .#s##NN%NNNN*,,sGW--%%''M##D):DFF$L$Lm$L$LMMG4=4E.0009H
Wg
A
A
AC>#**W--..88::D(.. '0O&.N);>MW.sxxzz:::SW6DN&sxxzz222$O
 #I$+++%//0ABBHbN"&&'899M&5N m7S.$77 	  --//-iikk    
   
 	H "-HVVFvw555v{{}}%%++CG44K q c8$$ '*,,
!!!g&&&44W==K''))JVWk:wOO     P"..SW..&6&:&:6;&O&O{##"+++&6&:&:6;&O&O{#"-J 8Z 8''1116CH66777 +((***//= & &Z j22"**S**&  (||M4@@@ ?kFZFZ[d_b[d[dFeFe ?#Kg>>-66{CCCY 	9>9>>???	388K! 	Ys.H'H'H*:*>*>{K*X*XN;'&[999g~~,,##D)g*=>>>+44[AAL00>>>>>>??? 	&  %%%(8(<(<TZZ^=_=_=_arDI )= )K )KN$%0.AAA ( )&&(((  .x^c^g^g^i^i',	. 	. 	. 	. #~t444s   N1 1
O;OOrY   r
   r'   r	   c                      fdt          j                    D             }t          |          dk    r*t          t          |           d j         d| d           |d                    S )Nc                R    g | ]#}|j                                       |j         $S rD   )compilersupports_target)rE   r    rY   s     r#   rF   z make_backend.<locals>.<listcomp>s  s1    [[[a
8R8RSY8Z8Z[qz[[[r$   r   z! compatible backends for target (z) (z). There should only be one.r   )r   valueslenRuntimeErrorr   )rY   activess   ` r#   r   r   r  s    [[[[8?#4#4[[[G
7||q7||vvfnvvQXvvvx x 	x71:fr$   c                       e Zd Zd Zd Zd ZdS )LazyDictc                "    || _         g | _        d S rc   )dataextras)r=   r$  s     r#   rA   zLazyDict.__init__|  s    	r$   c                    | j         D ]\  }}| j         || z  | _        | j                                          | j        S rc   )r%  r$  clearr=   funcargss      r#   r   zLazyDict.get  sI    + 	0 	0JD$	DD$K/DIIyr$   c                >    | j                             ||f           d S rc   )r%  r   r(  s      r#   addzLazyDict.add  s"    D$<(((((r$   N)r/   ri   rj   rA   r   r,  rD   r$   r#   r"  r"  z  sA            ) ) ) ) )r$   r"  c                      e Zd Zd ZdS )AsmDictc                l    |dk    rt          | d                   }nt          d|z            || |<   |S )Nr  r   zUnknown key: '%s')r   KeyError)r=   rW   values      r#   __missing__zAsmDict.__missing__  s@    &==T']++EE.4555S	r$   N)r/   ri   rj   r2  rD   r$   r#   r.  r.    s#            r$   r.  c                *    t          j        |           rc   )copydeepcopy)errr*  kwargss      r#   _raise_errorr8    s    
-

r$   c                  <    e Zd Zd Zd Zed             Zd Zd ZdS )r   c           	     `   ddl m} t          d |                                D                       }t	          j        |                                          }t          |d                   |d<   |d         }t          |d         |d         |d                   |d<    |d	t          t          |                                                              } |di || _        t          | j        j                  }	|	                    | j                  | _        || _        || _        | j        j        | _        d
 |                                D             }
|	j        t+          fd|
D                       | _        || _        | j                 | _        d | _        d | _        d | _        d S )Nr   )
namedtuplec              3  d   K   | ]+\  }}|                     d           t          |          V  ,dS )r   Nr   r   rE   cps      r#   r   z*CompiledKernel.__init__.<locals>.<genexpr>  s>      ``$!QAJJW^L_L_`d1gg``````r$   cluster_dimsrY   r   arch	warp_sizeKernelMetadatac                \    g | ])\  }}|                     d           t          |          *S )r   r=  r>  s      r#   rF   z+CompiledKernel.__init__.<locals>.<listcomp>  s4    [[[AqzzRYGZGZ[T!WW[[[r$   c                    i | ]K}|j         d d         |j         d d         k    r|                                n|                                LS )r   N)ru   r   rv   )rE   file
binary_exts     r#   rq   z+CompiledKernel.__init__.<locals>.<dictcomp>  se     
 
 
 KO$+abb/Z2O2OT__...UYUcUcUeUe
 
 
r$   rD   )collectionsr;  nextr4   r   loadsrv   r9   r
   rO   r   r;   r   r   rY   pack_metadatapacked_metadatarw   rX   r0   rH  r.  asmr   kernelr   function_run)r=   rw   r   rX   r;  r  r   rY   rD  r   	asm_filesrH  s              @r#   rA   zCompiledKernel.__init__  s   ******``.2F2F2H2H```aa:m557788#(.)A#B#B (#&vi'8&.&Q\J]^^#$4fT(--//=R=R6S6STT&2222t}344&44T]CC	M&	[[)=)=)?)?[[[	'
 
 
 
 
!
 
 
   -hz* 			r$   c                     j         d S  fd}t          j                                        }t          j                             j         j                   _        t          |          } j        j	        |k    r$ |t           j        j	        |d                     t           j        d          rB j        j        6d} j        j        |k    r$ |t           j        j        |d                     t          j        j        <t          j                             j          j         j         j         j                   t          j        j                             j         j         j        j	        |          \   _          _         _         _         _        t          j                                        j        } j        j        |z   j        k    r, |t           j        j        |z   j        d                     t          j        j        >t          j                             j          j         j         j         j                   d S d S )Nc                n    t          j        |           }t          j        t          |          _        | rc   )r4  r5  	functoolspartialr8  rQ  )r6  
cloned_errr=   s     r#   raise_z,CompiledKernel._init_handles.<locals>.raise_  s-     s++J!),
CCDIIr$   zshared memory	tmem_sizei   ztensor memorythreads)r   r   r   get_current_devicelauncher_clsrw   r   rQ  r   sharedr   rI   rY  r   runtimekernel_load_start_hookrP  r0   r   rX   r   load_binaryrO  n_regsn_spillsn_max_threadsr   rC  r   kernel_load_end_hook)r=   rX  r   
max_sharedmax_tmem_sizerC  s   `     r#   _init_handleszCompiledKernel._init_handles  s	   ;"F	 	 	 	 	 1133M..txGG	#F++
=*,,F>$-"6
OTTUUU4=+.. 	`4=3J3VM}&66~dm&=}o^^___=/;M00dmTYX\XkmqmvwwwU[UbUhUtUtIt{DM$8&VB VBRT]DK@RM4466@	="Y.1CCCF>$-"9I"EtGY[deefff=-9M..t{DM49VZVikoktuuuuu :9r$   c                F    | j         |                                  | j         S rc   )rQ  rg  rd   s    r#   runzCompiledKernel.run  s$    9   yr$   c                   t           j        j        d S |                                  t	          | j        | j        |d          }t          | j        t                    r| j        j
        j        |S d t          | j        j
        j        |          D             }|                    | j        j
        j        || j        |f           |S )N)r0   rP  streamc                    i | ]\  }}||	S rD   rD   )rE   r0   args      r#   rq   z2CompiledKernel.launch_metadata.<locals>.<dictcomp>  s    PPP)$D#PPPr$   )r   r^  launch_enter_hookrg  r"  r0   rP  r5   rw   r&   r+   launch_metadatar   r7   r,  r   )r=   gridrk  r*  retarg_dicts         r#   ro  zCompiledKernel.launch_metadata  s    =*24	t}PVWWXX$(I.. 	$(+2M2UJPPs48;3H$/O/OPPP+dDM8-LMMM
r$   c                D                                        d d fd
}|S )N)rk  c                D   | =t           j                                        }t           j                            |          }  j        | g|R  } j        d         d         d         | j        j        |t          j	        j
        t          j	        j        g	|R   d S )Nr   r   r   )r   r   r[  get_current_streamro  ri  rP  rM  r   r^  rn  launch_exit_hook)rk  r*  r   ro  rp  r=   s       r#   runnerz*CompiledKernel.__getitem__.<locals>.runner  s    ~99;;99&AA2d24G$GGGODHT!Wd1gtAwtG[]l]4em6T]W[] ] ] ] ] ]r$   )rg  )r=   rp  rw  s   `` r#   __getitem__zCompiledKernel.__getitem__  sP    !% 	] 	] 	] 	] 	] 	] 	] 	] r$   N)	r/   ri   rj   rA   rg  propertyri  ro  rx  rD   r$   r#   r   r     so          >#v #v #vJ   X
	 	 	    r$   r   )r   r   )NNN)rY   r
   r'   r	   )4
__future__r   rQ   r   _C.libtritonr   r   r   backends.compilerr   r	   r
   r   r   r   runtime.autotunerr   runtime.cacher   r   r   r   runtime.driverr   tools.disasmr   pathlibr   r   rU  r   r   r4  ptx_prototype_patternry   ptx_arg_type_patternr|   r   r&   rl   	lru_cacher   r   r   r   r  r   r"  r2   r.  r8  r   rD   r$   r#   <module>r     s    " " " " " "   > > > > > > > >       ( ( ( ( ( ( 6 6 6 6 6 6 6 6 ! ! ! ! ! ! ! ! . . . . . . d d d d d d d d d d d d # # # # # # # # # # # #       				     				   Y 	   , 	 

 
 
               F' ' ' ' ' ' ' 'T O O O, , ,#$ #$ #$ #$L$
 $
 $
 $
 $
 $
 $
 $
NQ5 Q5 Q5 Q5h   ) ) ) ) ) ) ) ) 
 
 
 
 
d 
 
 
  b b b b b b b b b br$   