+
    ړLj21                     j   ^ RI Ht ^ RIHt ^ RIHtHt ^ RIHt R t	 ! R R]
4      t] ! R R	4      4       t ! R
 R4      tR tR tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR t]R!8X  Edm   ^ R"IHt ]! ]R#7      t]P=                  R$R%R&R'7       ]P=                  R(R)]R*R+7       ]P=                  R,]R-R.R/7       ]PA                  4       t!]! 4       t. t"]!PF                   FG  t$]! ]$4      t%]%PM                  4       t']"PQ                  ]%PR                  4       ]PU                  ]'4       KI  	  ]PV                  PY                  4        U Uu. uF  w  r]! W4      NK  	  upp t-]PV                  PY                  4        U Uu. uF  w  rVNK	  	  upp t.].^ ,          ^ ,          t/]! ]/4      t0]! ]/4      t1]! ]24      Pf                  R0,          ]Ph                  ,          R1,          PM                  4       t5]!Pl                  Po                  R24      Pq                  R34      ;_uu_ 4       t9]5t6]6R4Pu                  ]-4      ,          t6]6R4,          t6]6]0,          t6]6R4,          t6]6]1,          t6]9Pw                  ]64       R5R5R54       ]PV                  PY                  4        U Uu. uF  w  r]! W4      NK  	  upp t<]PV                  P{                  4        U u. uF  q NK  	  up t>]! ]>]/4      t?]! ]/4      t@]! ]>]/4      tA]! ]/4      tB]! ]/4      tC]!Pl                  Po                  R64      Pq                  R34      ;_uu_ 4       t9]5t6]6R7,          t6]6R8,          t6]6R4,          t6]6R4Pu                  ]<4      ,          t6]6R4,          t6]6]?,          t6]6R4,          t6]6]B,          t6]6R4,          t6]6]@,          t6]6R4,          t6]6]A,          t6]6R4,          t6]6]C,          t6]9Pw                  ]64       R5R5R54       R5# R5# u upp i u upp i   + '       g   i     EL; iu upp i u up i   + '       g   i     R5# ; i)9    )defaultdict)Path)SequenceUnion)	dataclassc                 
    V R J# N )xs   &=/app/.local/lib/python3.14/site-packages/triton/tools/link.py_existsr      s    D=    c                       ] tR t^tRtR# )LinkerErrorr
   N)__name__
__module____qualname____firstlineno____static_attributes__r
   r   r   r   r      s    r   r   c                   .   a  ] tR t^t o  V 3R ltRtV tR# )KernelLinkerMetac                   < V ^8  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[S[R3,          ,          ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[;R	&   # )
   orig_kernel_name	arg_names
arg_ctypesNsizessig_hashtriton_suffixsuffix	num_specs)strr   r   int)format__classdict__s   "r   __annotate__KernelLinkerMeta.__annotate__   s~       }  	 
 E#t)$%%  M    K  N r   r
   N)r   r   r   r   __annotate_func__r   __classdictcell__r%   s   @r   r   r      s      ,  r   r   c                      a  ] tR t^t o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	Rt
V tR# )HeaderParserc                   < V ^8  d   QhRR/# )r   returnNr
   )r$   r%   s   "r   r&   HeaderParser.__annotate__   s     ! !$ !r   c                    ^ RI pVP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        \        \        4      V n	        RV n
        R# )r   Nz'//[\s]*tt-linker:[\s]*([\w]+):(.+):(.+)z^([\w]+)_([\w]+)_([\w]*)$z[\s]*(\w+)\s(\w+)[,]?z[c,d]z%//[\s]*tt-linker-backend:[\s]*([\w]+))recompilelinker_directiveskernel_namec_sig
arg_suffixbackend_name_rer   listkernelsbackend_name)selfr1   s   & r   __init__HeaderParser.__init__   sr     "$,X!Y::&DEZZ ;<
**W-!zz*TU"4( r   c                    < V ^8  d   QhRS[ /# )r   headerr"   )r$   r%   s   "r   r&   r/   0   s     l l# lr   c                
   VP                  4        EFm  pVP                  R 4      '       g   K  V P                  P                  V4      p\	        V4      '       d   VP                  ^4      VP                  ^4      VP                  ^4      repV P                  V4      w  rxp	V P                  V4      w  rV P                  W4      w  rV P                  RP                  Wv.4      \        VVV
VVV	V	VR7      4       K  V P                  P                  V4      p\	        V4      '       g   EK  VP                  ^4      pV P                  f
   Wn        EKA  V P                  V8w  g   EKU  \        RV P                   RV 24      h	  R# )z//_)r   r   r   r   r   r   r    r!   Nzdiffering backend z vs. )
splitlines
startswithr3   matchr   group_match_name_match_c_sig_match_suffix_add_kerneljoinr   r7   r:   RuntimeError)r;   r?   lnmker_namer5   	algo_infonamer   r    c_typesr   r!   r   r:   s   &&             r   extract_linker_meta HeaderParser.extract_linker_meta0   sP   ##%B}}T""**0041::12QWWQZQRYH-1-=-=h-G*DF)-):):5)A&G'+'9'9&'H$I$$$!23(-1&/'."'%-*0#)&/	 ,,2226Aqzz'(wwqz,,40<-!..,>".1CDDUDUCVV[\h[i/j"kk9 &r   c                    < V ^8  d   QhRS[ /# )r   rO   r@   )r$   r%   s   "r   r&   r/   O   s     D DC Dr   c                    V P                   P                  V4      p\        V4      '       d7   VP                  ^4      VP                  ^4      VP                  ^4      rTpW4V3# \	        V R24      h)   z is not a valid kernel name)r4   rE   r   rF   r   )r;   rO   rN   rQ   r   r    s   &&    r   rG   HeaderParser._match_nameO   sb    ""8,1::%&WWQZQWWQZFD6))XJ&ABCCr   c                    < V ^8  d   QhRS[ /# )r   r5   r@   )r$   r%   s   "r   r&   r/   V   s     	H 	H# 	Hr   c                    V P                   P                  V4      p\        V4      '       d4   . . rCV F'  w  rVVP                  V4       VP                  V4       K)  	  W43# \	        V R 24      h)z" is not a valid argument signature)r5   findalllenappendr   )r;   r5   rN   tysargstyarg_names   &&     r   rH   HeaderParser._match_c_sigV   sf    JJu%q66B !

2H% !" 9UG#EFGGr   c                &   < V ^8  d   QhRS[ RS[ /# )r   r    r5   r@   )r$   r%   s   "r   r&   r/   a   s        C    r   c                   VP                  R 4      pR^R^/p^ p. p\        \        V4      4       F  p^ pVP                  \	        V4      4      p	V	'       g   K)  V\        \	        V4      4      ,          pV P
                  P                  W4      '       dZ   V^,          pVP                  R.V\        V4      ,
          ,          4       VP                  WAV,          ,          4       V^,          pWR pK  	  \        V4      ^ 8  d   \        RV 24      hVP                  R.\        V4      \        V4      ,
          ,          4       WV3# ),cdNzHas invalid extra suffix: )
splitranger\   rD   r"   r6   rE   extendr]   	Exception)
r;   r    r5   r_   s2ir!   r   iposidx_matcheds
   &&&       r   rI   HeaderParser._match_suffixa   s   {{3AsB	s4y!AC ++CF3K3s1v;C$$V11Q	dVq3u:~67S-.qD\F " v;?8ABBdVs4y3u:567r   c                &   < V ^8  d   QhRS[ RS[/# )r   rQ   kerr"   r   )r$   r%   s   "r   r&   r/   z   s     
' 
' 
'*: 
'r   c                   WP                   9   d   V P                   V,          R,          p\        VP                  VP                  4       FQ  w  rEWE8w  g   K  \        RV RRP	                  VP                  4       RRP	                  VP                  4       24      h	  V P                   V,          P                  V4       R# )rW   z Mismatched signature for kernel z: 
	existing sig is: re   z
	current is: N)r9   zipr   r   rK   r]   )r;   rQ   rr   lastcurnew_s   &&&   r   rJ   HeaderParser._add_kernelz   s    <<%)\\$%7%;D #..A	;%:4&@WX[X`X`aeapapXqWr  sC  DG  DL  DL  MP  M[  M[  D\  C]  ^  B 	T!!#&r   )r6   r:   r7   r5   r4   r9   r3   N)r   r   r   r   r<   rS   rG   rH   rI   rJ   r   r)   r*   s   @r   r,   r,      sG     ! !"l l>D D	H 	H   2
' 
'r   r,   c           	          R P                  \        V P                  V P                  4       UUu. uF  w  rV RV 2NK  	  upp4      # u uppi ),  )rK   rv   r   r   )rN   r`   args   &  r   gen_signature_with_full_argsr      s@    993q||Q[[3QR3QAcUm3QRSSRs   A	
c           	         \        V P                  V P                  4       UUu. uF  w  rV^8w  g   K  VNK  	  ppp\        V P                  V P                  4       UUu. uF  w  rBV^8w  g   K  VNK  	  pppRP	                  \        W54       UUu. uF  w  rV RV 2NK  	  upp4      pV# u uppi u uppi u uppi )rW   r|   r}   )rv   r   r   r   rK   )rN   r`   hint	arg_typesr~   r   sigs   &      r   gen_signaturer      s    $'agg$>L$>$!)$>IL&)!++qww&?M&?419&?IM
))#i2KL2Kwrt1SE]2KL
MCJ MMLs   B.B. B40B4B:
c                R    V ^8  d   QhR\         R\        \        ,          R\         /# r   rQ   metasr.   r"   r   r   )r$   s   "r   r&   r&      s'      # h/?&@ S r   c           	      @    R V  R\        VR,          4       RV  RV  R2	# )
TT_ResultTy (TT_StreamTy stream, z);
void load_();
void unload_();
    ru   )r   )rQ   r   s   &&r   make_algo_declsr      sB    F'(DU2Y(O'P Q& F  r   c                0    V ^8  d   QhR\         R\        /# r   metar.   r   r"   )r$   s   "r   r&   r&      s      +  r   c                     R V P                    R\        V 4       RV P                    R\        V 4       RV P                    RV P                    R2# )r   _default(TT_StreamTy stream, z);
TT_ResultTy r   z, int algo_id);
void load_r   r   )r   r   )r   s   &r   make_global_declr      su    ""##@A]^bAc@d e""##89UVZ9[8\ ]  
! """# $	 r   c                0    V ^8  d   QhR\         R\        /# r   r   )r$   s   "r   r&   r&      s      #3  r   c                     R V P                    R\        V 4       R2pVRV P                    RRP                  V P                  4       R2,          pVR,          pV# )TT_ResultTy r   z){
	  return 	(stream, r|   z, 0);
}
r   r   rK   r   r   srcs   & r   make_default_algo_kernelr      sd    ..//LMijnMoLppu
vCi--.i		$..8Q7RRYZ[C5LCJr   c                R    V ^8  d   QhR\         R\        \        ,          R\         /# r   r   )r$   s   "r   r&   r&      s(     % %s %8<L3M %RU %r   c                 $   R V  R2p\        VR R7       F@  pVRVP                   RVP                   RVP                   R\	        V4       R2	,          pKB  	  VR,          pVRV  R\        VR,          4       R2,          pVR,          p\        VR	 R7       F  pR
 pRP                  \        VP                  VP                  4       UUu. uF  w  rVVf   K  V! WV4      NK  	  upp4      pT\        VP                  4      '       d   RV R2MR,          p\        VP                  VP                  4       UUu. uF  w  rV^8w  g   K  VNK  	  p	ppVRVP                   RVP                   RVP                   RRP                  V	4       R2	,          pEK  	  VR,          pVR,          pVR,          pR F  p
VRV
 RV  R2,          p\        VR R7       F7  pVRV
 RVP                   RVP                   RVP                   R2	,          pK9  	  VRV
 RV  R2,          pVR,          p\        VR R7       F7  pVRV
 RVP                   RVP                   RVP                   R2	,          pK9  	  VR,          pK  	  V# u uppi u uppi )z// launcher for: 
c                     V P                   ) # r	   r!   rN   s   &r   <lambda>.make_kernel_hints_dispatcher.<locals>.<lambda>   
    Q[[Lr   )keyr   rB   r   );
z){c                     V P                   ) # r	   r   r   s   &r   r   r      r   r   c                 F    V^8X  d
   RV  RV R2# V^8X  d
   RV  RV R2# R# )   z((uintptr_t)z % z == 0)(z == )Nr
   )valr   s   &&r   r   r      sN    rz !-SETF&A  qy SEdV1% 	r   z && z  if (z)
zif (1)
z    return r   r|   z!  return TT_ERROR_INVALID_VALUE;
r   z
// z for: c                     V P                   ) # r	   r   r   s   &r   r   r      
    r   void ();
z() {c                     V P                   ) # r	   r   r   s   &r   r   r      r   r     ru   loadunload)sortedr   r   r    r   r   rK   rv   r   r   any)rQ   r   r   r   cond_fnr   r   condsr~   r   modes   &&         r   make_kernel_hints_dispatcherr      s   dV2
&Cu"89d334Admm_Adkk]Rghuvzh{g|  }A  B  	B :4KCl4& 56RSXY[S\6]5^^abcC4KCu"89 	  <
<	 GC<
 
 	s4::&s#J 	*-dnndjj*IW*IYSTUVYSS*I	WT2231T]]O1T[[MQZ[_[d[den[oZpptuu :  4KC//C5LC"tfF4&++5&<=DU4&$"7"7!8$--$++V[\\C >tfAdV5))t5&<=Dba 5 56aa}TYZ[C >u # J-
 Xs   JJ;JJc                0    V ^8  d   QhR\         R\        /# r   r   )r$   s   "r   r&   r&      s      ,<  r   c                     R V P                    R\        V 4       R2pVRV P                    R2,          pVRV P                    RRP                  V P                  4       R2,          pVR	,          pV# )
r   r   z, int algo_id){
z   assert (algo_id < (int)sizeof(z_kernels));
r   z_kernels[algo_id](stream, r|   r   r   r   r   s   & r   !make_kernel_meta_const_dispatcherr      s    ..//DEabfEgDhhz
{C-d.C.C-DMRRCYt,,--G		RVR`R`HaGbbfggC5LCJr   c                <    V ^8  d   QhR\         R\        R\         /# r   namesr   r.   rs   )r$   s   "r   r&   r&      s"      c )9 c r   c                     R \        V4       R2pVRVP                   R2,          pV  F  pVRV R2,          pK  	  VR,          pV# )z9typedef TT_ResultTy (*kernel_func_t)(TT_StreamTy stream, r   zkernel_func_t z_kernels[] = {
r   z,
z};
)r   r   )r   r   r   rQ   s   &&  r   make_func_pointersr      s^    EFbcgFhEiim
nC^D1122CDDCD6~ 6MCJr   c                <    V ^8  d   QhR\         R\        R\         /# r   rs   )r$   s   "r   r&   r&      s"       +;  r   c                     R pR F?  pVRV RVP                    R2,          pV  F  pVRV RV R2,          pK  	  VR,          pKA  	  V# ) r   rB   z(void){
r   r   z}

r   r   )r   r   r   r   rQ   s   &&   r   make_kernel_load_defr      sd    
C"tfAd334J??DRvQtfE**C w	 #
 Jr   c                0    V ^8  d   QhR\         R\        /# r   r   )r$   s   "r   r&   r&      s      "2 s r   c                 &    R V P                    R2pV# )int z_get_num_algos(void);r   r   s   & r   make_get_num_algos_declr      s    &&''<
=CJr   c                0    V ^8  d   QhR\         R\        /# r   r   )r$   s   "r   r&   r&      s      !1 c r   c                     R V P                    R2pVRV P                    RV P                    R2,          pVR,          pV# )r   z_get_num_algos(void){
z  return (int)(sizeof(z_kernels) / sizeof(z_kernels[0]));
r   r   r   s   & r   make_get_num_algos_defr      sP    &&''?
@C#D$9$9#::MdNcNcMddtuuC5LCJr   a0  
Triton ahead-of-time linker:

This program takes in header files generated by compile.py, and generates a
single entry-point responsible for dispatching the user's input to the right
kernel given the specializations that were compiled.

Example usage:
python link.py /path/to/headers/*.h -o kernel_name
__main__)ArgumentParser)descriptionheaders+z_Paths to header files to link. Must include linker directive annotations (autogenerated by ttc))nargshelpz--outz-ozOut filename)typer   z--prefixr   z(String to prefix kernel dispatcher names)r   defaultr   extrazlink.hz.hwr   Nz.cz#include <stdint.h>
z#include <assert.h>
)Dcollectionsr   pathlibr   typingr   r   dataclassesr   r   rk   r   r   r,   r   r   r   r   r   r   r   r   r   r   r   descr   argparser   parseradd_argumentr"   
parse_argsr_   includesr   r?   h_path	read_texth_strr]   rQ   rS   r9   items
algo_decls
meta_listsr   get_num_algos_declglobal_decl__file__parentr:   backend_preludeoutwith_suffixopenfprK   writedefskeysr   func_pointers_defmeta_const_defload_unload_defget_num_algos_defdefault_algo_kernel)rQ   r   s   00r   <module>r      s   #  " !	) 	 	, 	, 	,g' g'TT%R
	 z'-F
n  
 D~F
7	   D ^FH,,f  "$""5)	  AG@T@T@VW@V*$/$-@VWJ)/)=)=)?@)?:4$)?@Ja=D06"4(KH~,,w69L9LLxWbbdO			d	#	(	(	-	-tyy$$t!!t{
 
. HN~~G[G[G]^G](4G]^D$nn11343dT34E*5$76t<N*5$7O.t4248			d	#	(	(	-	-&&&&ttyyt  t  t~tt""
! 
.	-g 8 X@
 
.	-	- _4 
.	-	-s2   "O6O<8AP-P 
P	B!P!P	!P2	