Ë
    7^(h_.  ã                   ó@  — d dl mZ d dlmZ d dlmZmZ d dlmZ d„ Z	 G d„ de
«      Ze G d„ d	«      «       Z G d
„ d«      Zd„ Zd„ Zdedee   defd„Zdedefd„Zdedefd„Zdedee   defd„Zdedefd„Zdededefd„Zdededefd„Zdedefd„Zdedefd„ZdZedk(  �rÉd dlmZ  ee¬«      Zej?                  d d!d"¬#«       ej?                  d$d%ed&¬'«       ej?                  d(ed)d*¬+«       ejA                  «       Z! e«       Zg Z"e!jF                  D ]F  Z$ ee$«      Z%e%jM                  «       Z'e"jQ                  e%jR                  «       ejU                  e'«       ŒH ejV                  jY                  «       D � �cg c]  \  } } e| |«      ‘Œ c}} Z-ejV                  jY                  «       D � �cg c]  \  } }|‘Œ	 c}} Z.e.d    d    Z/ ee/«      Z0 ee/«      Z1e!jd                  jg                  d,«      ji                  d-«      5 Z5d.Z2e2d/jm                  e-«      z  Z2e2d/z  Z2e2e0z  Z2e2d/z  Z2e2e1z  Z2e5jo                  e2«       d0d0d0«       ejV                  jY                  «       D � �cg c]  \  } } e| |«      ‘Œ c}} Z8ejV                  js                  «       D � cg c]  } | ‘Œ c} Z: ee:e/«      Z; ee/«      Z< ee:e/«      Z= ee/«      Z> ee/«      Z?e!jd                  jg                  d1«      ji                  d-«      5 Z5d)Z2e2d.z  Z2e2d2z  Z2e2d3z  Z2e2d/z  Z2e2d/jm                  e8«      z  Z2e2d/z  Z2e2e;z  Z2e2d/z  Z2e2e>z  Z2e2d/z  Z2e2e<z  Z2e2d/z  Z2e2e=z  Z2e2d/z  Z2e2e?z  Z2e5jo                  e2«       d0d0d0«       y0y0c c}} w c c}} w # 1 sw Y   �Œ>xY wc c}} w c c} w # 1 sw Y   y0xY w)4é    )Údefaultdict)ÚPath)ÚSequenceÚUnion)Ú	dataclassc                 ó
   — | d uS ©N© )Úxs    úO/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/triton/tools/link.pyÚ_existsr      s   € Ø�Dˆ=Ðó    c                   ó   — e Zd Zy)ÚLinkerErrorN)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r      s   „ Ør   r   c                   óz   — e Zd ZU eed<   ee   ed<   ee   ed<   eeedf      ed<   eed<   eed<   eed<   eed	<   y)
ÚKernelLinkerMetaÚorig_kernel_nameÚ	arg_namesÚ
arg_ctypesNÚsizesÚsig_hashÚtriton_suffixÚsuffixÚ	num_specs)r   r   r   ÚstrÚ__annotations__r   r   Úintr
   r   r   r   r      sH   … àÓØ˜‰}ÓØ˜‘ÓØ�E˜#˜t˜)Ñ$Ñ%Ó%ØƒMØÓØƒKØƒNØ+r   r   c                   óX   — e Zd Zdd„Zdefd„Zdefd„Zdefd„Zd	edefd
„Zdede	fd„Z
y)ÚHeaderParserNc                 óä   — dd l }|j                  d«      | _        |j                  d«      | _        |j                  d«      | _        |j                  d«      | _        t        t        «      | _        y )Nr   z'//[\s]*tt-linker:[\s]*([\w]+):(.+):(.+)z^([\w]+)_([\w]+)_([\w]+)$z[\s]*(\w+)\s(\w+)[,]?z[c,d])	ÚreÚcompileÚlinker_directivesÚkernel_nameÚc_sigÚ
arg_suffixr   ÚlistÚkernels)Úselfr$   s     r   Ú__init__zHeaderParser.__init__   sX   € Ûð "$§¡Ð,XÓ!YˆÔàŸ:™:Ð&DÓEˆÔà—Z‘ZÐ ;Ó<ˆŒ
àŸ*™* WÓ-ˆŒä"¤4Ó(ˆ�r   Úheaderc                 óê  — |j                  «       D ]à  }|j                  d«      sŒ| j                  j                  |«      }t	        |«      sŒ<|j                  d«      |j                  d«      |j                  d«      }}}| j                  |«      \  }}}	| j                  |«      \  }
}| j                  |	|«      \  }}| j                  dj                  ||g«      t        |||
|||	|	|¬«      «       Œâ y )Nz//é   é   é   Ú_)r   r   r   r   r   r   r   r   )Ú
splitlinesÚ
startswithr&   Úmatchr   ÚgroupÚ_match_nameÚ_match_c_sigÚ_match_suffixÚ_add_kernelÚjoinr   )r,   r.   ÚlnÚmÚker_namer(   Ú	algo_infoÚnamer   r   Úc_typesr   r   r   s                 r   Úextract_linker_metaz HeaderParser.extract_linker_meta-   së   € Ø×#Ñ#Ó%ò 	ˆBØ�}‰}˜TÕ"Ø×*Ñ*×0Ñ0°Ó4�Ü˜1•:Ø12·±¸³¸Q¿W¹WÀQ»ZÈÏÉÐQRË Y˜e�HØ-1×-=Ñ-=¸hÓ-GÑ*�D˜( FØ)-×):Ñ):¸5Ó)AÑ&�G˜YØ'+×'9Ñ'9¸&À%Ó'HÑ$�I˜uØ×$Ñ$ØŸ™ $¨	Ð!2Ó3Ü(Ø-1Ø&/Ø'.Ø"'Ø%-Ø*0Ø#)Ø&/ô	õñ	r   r?   c                 óÚ   — | j                   j                  |«      }t        |«      r8|j                  d«      |j                  d«      |j                  d«      }}}|||fS t	        |› d�«      ‚)Nr0   r1   r2   z is not a valid kernel name)r'   r6   r   r7   r   )r,   r?   r>   rA   r   r   s         r   r8   zHeaderParser._match_nameD   sd   € Ø×Ñ×"Ñ" 8Ó,ˆÜ�1Œ:Ø%&§W¡W¨Q£Z°·±¸³¸Q¿W¹WÀQ»Z˜F�(ˆDØ˜ 6Ð)Ð)Ü˜X˜JÐ&AÐBÓCÐCr   r(   c                 óÒ   — | j                   j                  |«      }t        |«      r4g g }}|D ]'  \  }}|j                  |«       |j                  |«       Œ) ||fS t	        |› d�«      ‚)Nz" is not a valid argument signature)r(   ÚfindallÚlenÚappendr   )r,   r(   r>   ÚtysÚargsÚtyÚarg_names          r   r9   zHeaderParser._match_c_sigK   so   € Ø�J‰J×Ñ˜uÓ%ˆÜˆqŒ6Ø˜B�ˆCØ !ò &‘��HØ—
‘
˜2”Ø—‘˜HÕ%ð&ð ˜�9Ðä˜U˜GÐ#EÐFÓGÐGr   r   c                 ó6  — |j                  d«      }dddœ}d}g }t        t        |«      «      D ]å  }|j                  t	        |«      «      }|dk(  rt        |› d�«      ‚|t        t	        |«      «      z  }| j                  j                  ||«      rB|dz  }|j                  d g|t        |«      z
  z  «       |j                  |||      «       |dz  }|t        |«      dz
  k  r||d  }Œ¼|j                  d gt        |«      t        |«      z
  z  «       Œç ||fS )Nú,r0   é   )ÚcÚdr   éÿÿÿÿz is not a valid kernel suffix)
ÚsplitÚrangerG   Úfindr   r   r)   r6   ÚextendrH   )	r,   r   r(   rJ   Ús2ir   r   ÚiÚposs	            r   r:   zHeaderParser._match_suffixV   s  € Ø�{‰{˜3ÓˆØ˜BÑˆØˆ	Øˆô ”s˜4“yÓ!ò 	@ˆAØ—+‘+œc !›fÓ%ˆCØ�bŠyÜ! V HÐ,IÐ"JÓKÐKØ”3”s˜1“v“;ÑˆCØ�‰×$Ñ$ V¨SÔ1Ø˜Q‘�	Ø—‘˜d˜V q¬3¨u«:¡~Ñ6Ô7Ø—‘˜S ¨¡Ñ-Ô.Ø�q‘�Ø”3�t“9˜q‘=Ò Ø  ˜‘à—‘˜d˜V¤s¨4£y´3°u³:Ñ'=Ñ>Õ?ð	@ð ˜%ÐÐr   rA   Úkerc                 óf  — || j                   v r…| j                   |   d   }t        |j                  |j                  «      D ]P  \  }}||k7  sŒt        d|› ddj	                  |j                  «      › ddj	                  |j                  «      › �«      ‚ | j                   |   j                  |«       y )NrR   z Mismatched signature for kernel z: 
	existing sig is: rN   z
	current is: )r+   Úzipr   r   r<   rH   )r,   rA   rZ   ÚlastÚcurÚnew_s         r   r;   zHeaderParser._add_kernelm   s×   € Ø�4—<‘<ÑØ%)§\¡\°$Ñ%7¸Ñ%;ˆDä  §¡°#·.±.ÓAò ‘	��TØ˜$“;Ü%Ø:¸4¸&Ð@WÐX[×X`ÑX`Ðae×apÑapÓXqÐWrð  sCð  DG÷  DLñ  DLð  MP÷  M[ñ  M[ó  D\ð  C]ð  ^óð ðð 	�‰�TÑ×!Ñ! #Õ&r   )ÚreturnN)r   r   r   r-   r   rC   r8   r9   r:   r   r;   r
   r   r   r"   r"      sV   „ ó)ð¨#ó ð.D Có Dð	H #ó 	Hð  Cð  °ó  ð.
' ð 
'Ð*:ô 
'r   r"   c           	      óœ   — dj                  t        | j                  | j                  «      D ��cg c]  \  }}|› d|› �‘Œ c}}«      S c c}}w )Nú, ú )r<   r\   r   r   )r>   rK   Úargs      r   Úgen_signature_with_full_argsre   z   s<   € Ø�9‰9´3°q·|±|ÀQÇ[Á[Ó3Q×R©¨¨C˜˜˜A˜c˜U’mÓRÓSÐSùÓRs   ¯A
c           	      óp  — t        | j                  | j                  «      D ��cg c]  \  }}|dk7  sŒ|‘Œ }}}t        | j                  | j                  «      D ��cg c]  \  }}|dk7  sŒ|‘Œ }}}dj	                  t        ||«      D ��cg c]  \  }}|› d|› �‘Œ c}}«      }|S c c}}w c c}}w c c}}w )Nr0   rb   rc   )r\   r   r   r   r<   )r>   rK   ÚhintÚ	arg_typesrd   r   Úsigs          r   Úgen_signaturerj   ~   s™   € Ü$'¨¯©°a·g±gÓ$>×L™˜˜DÀ$È!Ã)’ÐL€IÑLÜ&)¨!¯+©+°q·w±wÓ&?×M™˜˜dÀ4È1Ã9’ÐM€IÑMØ
�)‰)´#°iÀÓ2K×L¡w r¨3˜�t˜1˜S˜E’]ÓLÓ
M€CØ€Jùó MùÛMùÛLs   ¤B&²B&ÁB,Á*B,ÂB2
rA   Úmetasr`   c           	      ó8   — d| › dt        |d   «      › d| › d| › d�	S )Nú

CUresult ú(CUstream stream, rR   z);
void load_ú();
void unload_ú();
    )re   )rA   rk   s     r   Úmake_algo_declsrq   †   sB   € ð
Ø
ˆÐ!Ô">¸uÀR¹yÓ"IÐ!Jð KØˆ&ð ØˆFð ðð r   Úmetac                 ó    — d| j                   › dt        | «      › d| j                   › dt        | «      › d| j                   › d| j                   › d�S )Nrm   ú_default(CUstream stream, z);
CUresult rn   z, int algo_id);
void load_ro   rp   )r   re   )rr   s    r   Úmake_global_declru   �   su   € ð
Ø
×
Ñ
Ð	 Ð :Ô;WÐX\Ó;]Ð:^ð _
Ø
×
Ñ
Ð	 Ð 2Ô3OÐPTÓ3UÐ2Vð WØ× Ñ Ð
!ð "Ø×"Ñ"Ð#ð $ð	ð r   c                 ó¦   — d| j                   › dt        | «      › d�}|d| j                   › ddj                  | j                  «      › d�z  }|dz  }|S )	Nú	CUresult rt   z){
ú	  return ú	(stream, rb   z, 0);
ú}
©r   re   r<   r   ©rr   Úsrcs     r   Úmake_default_algo_kernelr~   ™   sd   € Ø�d×+Ñ+Ð,Ð,FÔGcÐdhÓGiÐFjÐjoÐ
p€CØˆi˜×-Ñ-Ð.¨i¸¿	¹	À$Ç.Á.Ó8QÐ7RÐRYÐZÑ[€CØˆ5�L€CØ€Jr   c                 ór  — d| › d�}t        |d„ ¬«      D ];  }|d|j                  › d|j                  › d|j                  › dt	        |«      › d�	z  }Œ= |dz  }|d| › dt        |d	   «      › d
�z  }|dz  }t        |d„ ¬«      D ]ç  }d„ }dj                  t        |j                  |j                  «      D ��cg c]  \  }}|�	 |||«      ‘Œ c}}«      }|t        |j                  «      rd|› d�ndz  }t        |j                  |j                  «      D ��cg c]  \  }}|dk7  sŒ|‘Œ }	}}|d|j                  › d|j                  › d|j                  › ddj                  |	«      › d�	z  }Œé |dz  }|dz  }|dz  }dD ]ª  }
|d|
› d| › d�z  }t        |d„ ¬«      D ]2  }|d|
› d|j                  › d|j                  › d|j                  › d�	z  }Œ4 |d|
› d| › d�z  }|dz  }t        |d„ ¬«      D ]2  }|d|
› d|j                  › d|j                  › d|j                  › d�	z  }Œ4 |dz  }Œ¬ |S c c}}w c c}}w ) Nz// launcher for: ú
c                 ó   — | j                    S r	   ©r   ©r>   s    r   ú<lambda>z.make_kernel_hints_dispatcher.<locals>.<lambda>£   ó   € ¨Q¯[©[¨L€ r   )Úkeyrw   r3   rn   ú);
rR   z){c                 ó   — | j                    S r	   r‚   rƒ   s    r   r„   z.make_kernel_hints_dispatcher.<locals>.<lambda>©   r…   r   c                 ó>   — |dk(  r	d| › d|› d�S |dk(  r	d| › d|› d�S d S )NrO   ú(z % z == 0)r0   z == ú)r
   )Úvalrg   s     r   r„   z.make_kernel_hints_dispatcher.<locals>.<lambda>«   sK   € Ø�rŠzð !" #  c¨$¨¨vÐ6€ ð �qŠyð �S�E˜˜d˜V 1Ð%ð ð ð	 r   z && z  if (z)
zif (1)
r0   z    return ry   rb   z#  return CUDA_ERROR_INVALID_VALUE;
rz   ©ÚloadÚunloadz
// z for: c                 ó   — | j                    S r	   r‚   rƒ   s    r   r„   z.make_kernel_hints_dispatcher.<locals>.<lambda>¿   ó   € °·±°€ r   úvoid ú();
z() {c                 ó   — | j                    S r	   r‚   rƒ   s    r   r„   z.make_kernel_hints_dispatcher.<locals>.<lambda>Ã   r‘   r   ú  )Úsortedr   r   r   rj   re   r<   r\   r   r   Úany)rA   rk   r}   rr   Úcond_fnrŒ   rg   Úcondsrd   r   Úmodes              r   Úmake_kernel_hints_dispatcherr›   ¡   s½  € Ø˜d˜V 2Ð
&€CÜ�uÑ"8Ô9ò |ˆØ�˜4×0Ñ0Ð1°°4·=±=°/ÀÀ4Ç;Á;À-ÐOaÔboÐptÓbuÐavÐvzÐ{Ñ{‰ð|àˆ4�K€Càˆi˜�vÐ/Ô0LÈUÐSUÉYÓ0WÐ/XÐX[Ð\Ñ]€CØˆ4�K€CÜ�uÑ"8Ô9ò vˆñð 	ð —‘ä  §¡°·±Ó<÷
á��TØÐñ �C˜Õó
ó ˆð
 	¤s¨4¯:©:¤�&˜˜˜sÑ#¸Jñ 	ˆä*-¨d¯n©n¸d¿j¹jÓ*I×W™Y˜S $ÈTÐUVËY’SÐWˆ	ÑWØ�˜T×2Ñ2Ð3°1°T·]±]°OÀ1ÀTÇ[Á[ÀMÐQZÐ[_×[dÑ[dÐenÓ[oÐZpÐptÐuÑu‰ðvð  ˆ4�K€CØÐ1Ñ1€CØˆ5�L€Cà"ò ˆØ��t�f˜F 4 &¨Ð+Ñ+ˆÜ˜5Ñ&<Ô=ò 	]ˆDØ�U˜4˜&  $×"7Ñ"7Ð!8¸¸$¿-¹-¸ÈÈ$Ï+É+ÈÐV[Ð\Ñ\‰Cð	]à��t�f˜A˜d˜V 5Ð)Ñ)ˆØˆt‰ˆÜ˜5Ñ&<Ô=ò 	\ˆDØ�b˜˜˜a × 5Ñ 5Ð6°a¸¿¹°ÀaÈÏÉÀ}ÐTYÐZÑ[‰Cð	\àˆu‰‰ðð €Jùó-
ùó Xs   Â7H-ÄH3Ä%H3c                 óÌ   — d| j                   › dt        | «      › d�}|d| j                   › d�z  }|d| j                   › ddj                  | j                  «      › d	�z  }|d
z  }|S )Nrw   rn   z, int algo_id){
z   assert (algo_id < (int)sizeof(z_kernels));
rx   z_kernels[algo_id](stream, rb   r‡   rz   r{   r|   s     r   Ú!make_kernel_meta_const_dispatcherr�   Ê   sƒ   € Ø�d×+Ñ+Ð,Ð,>Ô?[Ð\`Ó?aÐ>bÐbtÐ
u€CØÐ-¨d×.CÑ.CÐ-DÀMÐRÑR€CØˆY�t×,Ñ,Ð-Ð-GÈÏ	É	ÐRV×R`ÑR`ÓHaÐGbÐbfÐgÑg€CØˆ5�L€CØ€Jr   Únamesc                 ót   — dt        |«      › d�}|d|j                  › d�z  }| D ]  }|d|› d�z  }Œ |dz  }|S )Nz3typedef CUresult (*kernel_func_t)(CUstream stream, r‡   zkernel_func_t z_kernels[] = {
r•   z,
z};
)re   r   )rž   rr   r}   rA   s       r   Úmake_func_pointersr    Ó   sc   € à?Ô@\Ð]aÓ@bÐ?cÐcgÐ
h€CØˆ^˜D×1Ñ1Ð2Ð2CÐDÑD€CØò ˆØ��D�6˜ˆ~Ñ‰ðàˆ6�M€CØ€Jr   c                 ót   — d}dD ]0  }|d|› d|j                   › d�z  }| D ]  }|d|› d|› d�z  }Œ |dz  }Œ2 |S )	NÚ r�   r’   r3   z(void){
r•   r“   z}

©r   )rž   rr   r}   rš   rA   s        r   Úmake_kernel_load_defr¤   Þ   sn   € Ø
€CØ"ò ˆØ��t�f˜A˜d×3Ñ3Ð4°JÐ?Ñ?ˆØò 	+ˆDØ�R˜�v˜Q˜t˜f EÐ*Ñ*‰Cð	+àˆw‰‰ð	ð
 €Jr   c                 ó&   — d| j                   › d�}|S )Núint z_get_num_algos(void);r£   r|   s     r   Úmake_get_num_algos_declr§   è   s   € Ø�×&Ñ&Ð'Ð'<Ð
=€CØ€Jr   c                 óp   — d| j                   › d�}|d| j                   › d| j                   › d�z  }|dz  }|S )Nr¦   z_get_num_algos(void){
z  return (int)(sizeof(z_kernels) / sizeof(z_kernels[0]));
rz   r£   r|   s     r   Úmake_get_num_algos_defr©   í   sP   € Ø�×&Ñ&Ð'Ð'?Ð
@€CØÐ# D×$9Ñ$9Ð#:Ð:MÈd×NcÑNcÐMdÐdtÐuÑu€CØˆ5�L€CØ€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°   z.hÚwz#include <cuda.h>
r€   Nz.cz#include <stdint.h>
z#include <assert.h>
)@Úcollectionsr   Úpathlibr   Útypingr   r   Údataclassesr   r   Ú	Exceptionr   r   r"   re   rj   r   rq   ru   r~   r›   r�   r    r¤   r§   r©   Údescr   Úargparser«   ÚparserÚadd_argumentÚ
parse_argsrJ   Úincludesr­   r.   Úh_pathÚ	read_textÚh_strrH   rA   rC   r+   ÚitemsÚ
algo_declsÚ
meta_listsrr   Úget_num_algos_declÚglobal_declÚoutÚwith_suffixÚopenÚfpr<   ÚwriteÚdefsÚkeysrž   Úfunc_pointers_defÚmeta_const_defÚload_unload_defÚget_num_algos_defÚdefault_algo_kernel)rA   rr   s   00r   ú<module>rÓ      sv  ðÝ #Ý ß "å !òô	�)ô 	ð ÷	,ð 	,ó ð	,÷Z'ñ Z'òzTòð˜#ð  hÐ/?Ñ&@ð ÀSó ðÐ+ð °ó ðÐ#3ð ¸ó ð% sð %°8Ð<LÑ3Mð %ÐRUó %ðRÐ,<ð Àó ð˜cð Ð)9ð ¸có ð ð Ð+;ð Àó ðÐ"2ð °só ð
Ð!1ð °có ð	€ð ˆzÓÝ'á¨Ô-€FØ
×ÑØØØnð ô ð
 ×Ñ˜ ¨D°~ÐÔFØ
×ÑØØØØ7ð	 ô ð ×ÑÓ€Dñ ‹^€FØ€HØ—,‘,ò *ˆÙ�f“ˆØ× Ñ Ó"ˆØ�‰˜Ÿ™Ô$Ø×"Ñ" 5Õ)ð	*ð AGÇÁ×@TÑ@TÓ@V×W±*°$¸‘/ $¨Õ-ÓW€JØ)/¯©×)=Ñ)=Ó)?×@™:˜4 ’$Ó@€JØ�a‰=˜Ñ€DÙ0°Ó6ÐÙ" 4Ó(€KØ	�‰×	Ñ	˜dÓ	#×	(Ñ	(¨Ó	-ð °Ø#ˆØˆt�y‰y˜Ó$Ñ$ˆØˆt‰ˆØÐ!Ñ!ˆØˆt‰ˆØˆ{ÑˆØ
�‰�Œ÷ð HNÇ~Á~×G[ÑG[ÓG]×^¹¸¸tÑ(¨¨tÕ4Ó^€DØ$Ÿn™n×1Ñ1Ó3Ö4�dŠTÒ4€EÙ*¨5°$Ó7ÐÙ6°tÓ<€NÙ*¨5°$Ó7€OÙ.¨tÓ4ÐÙ2°4Ó8ÐØ	�‰×	Ñ	˜dÓ	#×	(Ñ	(¨Ó	-ð °ØˆØÐ$Ñ$ˆØÐ&Ñ&ˆØÐ&Ñ&ˆØˆt‰ˆØˆt�y‰y˜‹ÑˆØˆt‰ˆØÐ Ñ ˆØˆt‰ˆØÐ Ñ ˆØˆt‰ˆØˆ~ÑˆØˆt‰ˆØˆÑˆØˆt‰ˆØÐ"Ñ"ˆØ
�‰�Œ÷#ð ðe ùó8 XùÛ@÷ñ üó _ùÚ4÷ð ús1   Å>M0Æ2M6È<M<É%N	Ê	NË8A.NÍ<NÎN