§
    OŠtjg"  ã                   óÊ   — d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlZd dlZe G d„ d¦  «        ¦   «         ZdZd	„ Zd
efd„Zedk    r e¦   «          dS dS )é    N)ÚArgumentParser)Ú	dataclass)ÚPath)ÚListc                   ó¤   — e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
edz  ed<   d	Zeed
<   dZeed<   dZedz  ed<   dZedz  ed<   dS )ÚCompileArgsz@
    A class to contain arguments from command-line parser.
    Ú ÚpathÚkernel_nameÚ	signatureÚgridNÚtargeté   Ú	num_warpsé   Ú
num_stagesÚout_nameÚout_path)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   ÚstrÚ__annotations__r   r   r   r   r   Úintr   r   r   r   © ó    úR/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/triton/tools/compile.pyr   r      s´   € € € € € € ðð ð €Dˆ#€N€N�NØ€K�ÐÐÑØ€IˆsÐÐÑØ€Dˆ#€N€N�NØ€FˆC�$‰JÐÐÑØ€IˆsÐÐÑØ€J�ÐÐÑØ€Hˆc�D‰jÐÐÑØ €Hˆd�T‰kÐ Ð Ñ Ð Ð r   r   a½  
Triton ahead-of-time compiler:

This program compiles the kernel with name `kernel-name` in the file at the
provided `path` into self-contained C source-code that embeds the `cubin`
data along with utilities to load, unload and launch the kernel.

signature is provided as a list of (optionally divisibility-hinted) types
or constexpr values, e.g.

`compile.py --kernel-name kernel --signature "*fp32:16, i32:16, 1024, i32" --out-name kernel /path/to/kernel.py`

will compile triton.JITFunction of name `kernel` inside the file `/path/to/kernel.py`.
Said kernel will be specialized such that argument 0, 1 are assumed to be multiple of 16,
and argument 2 is assumed to be a compile-time constant of value 1024, i.e. it won't be part of the generated prototype.

The resulting entry point will have signature

CUresult kernel_{specialization_suffix}(CUstream stream, unsigned gX, unsigned gY, unsigned gZ, float* arg0, int32_t arg1, int32_t arg2)

Different such specialized entry points can be combined using the `linker.py` script.

NOTE: when resolving the scope of /path/to/kernel.py, the file will be executed from within its parent directory with the python interpreter
used to run this `compile.py` script
c                  óÈ  — t          t          ¬¦  «        } |                      dd¬¦  «         |                      ddt          ddd	¬
¦  «         |                      ddt          d d¬¦  «         |                      ddt          dd¬¦  «         |                      ddt          dd¬¦  «         |                      ddt          d d¬¦  «         |                      ddt
          d d¬¦  «         |                      ddt          dd	¬ ¦  «         |                      d!d"t          d#d	¬ ¦  «         |                      ¦   «         }t          d$i t          |¦  «        ¤Ž}t          |¦  «         d S )%N)Údescriptionr
   zTPath to Python source containing desired kernel in its scope. File will be executed.)Úhelpz--kernel-namez-nr	   zName of the kernel to compileT)ÚtypeÚdefaultr!   Úrequiredz--targetz-tz°The target to compile towards, in format of '<backend>:<arch>:<warp-size>'; e.g., 'cuda:80:32', 'hip:gfx942:64'. Default to None, which means using current machine's GPU target)r"   r#   r!   z--num-warpsz-wr   z$Number of warps to launch the kernelz--num-stagesz-nsr   z/Number of stages (meta-parameter of the kernel)z
--out-namez-onz Out name for the compiled kernelz
--out-pathz-ozOut filenamez--signaturez-szSignature of the kernel)r"   r!   r$   z--gridz-gzLaunch grid of the kernelr   )
r   ÚdescÚadd_argumentr   r   r   Ú
parse_argsr   ÚvarsÚcompile_kernel)ÚparserÚcli_argsÚargss      r   Úmainr-   9   s�  € å­Ð-Ñ-Ô-€FØ
×Ò˜Øsð ñ uô uð uà
×Ò˜¨µCÀÐJiØ!%ð ñ 'ô 'ð 'à
×ÒØ�D�s¨Dðoð ñ pô pð pð ×Ò˜ tµ#¸qÐGmÐÑnÔnÐnØ
×Ò˜¨µCÀØNð ñ Pô Pð Pà
×Ò˜ eµ#¸tÐJlÐÑmÔmÐmØ
×Ò˜ dµ¸tÈ.ÐÑYÔYÐYØ
×Ò˜ tµ#Ð<UÐ`dÐÑeÔeÐeØ
×Ò˜ $­SÐ7RÐ]aÐÑbÔbÐbØ× Ò Ñ"Ô"€HÝÐ(Ð(�˜h™œÐ(Ð(€DÝ�4ÑÔÐÐÐr   r,   c                 ó$  ‡,‡-‡.— | j         r| j         n| j        }| j        r| j        nt          |¦  «        }t          | j        ¦  «        }t
          j                             dt          |j        ¦  «        ¦  «         t          j
                             |j        |¦  «        }t          j
                             |¦  «        }|j                             |¦  «         t!          || j        ¦  «        Š-| j                             d¦  «        }t'          |¦  «        dk    sJ ‚t)          t+          d„ | j                             d¦  «        ¦  «        ¦  «        }dt.          t                   fd„}d| j        › d| j        › �}	 |||	gz   ¦  «        }
d	„ Š,ˆ,fd
„t5          |¦  «        D ¦   «         }d„ |                     ¦   «         D ¦   «         }ˆ,ˆ-fd„t5          |¦  «        D ¦   «         }d„ |                     ¦   «         D ¦   «         }|                     ¦   «         D ]!\  }}|dk    r||‰-j        |d                  <   Œ"ˆ-fd„t5          |¦  «        D ¦   «         }|D ]}d||<   Œd                     d„ |                     ¦   «         D ¦   «         ¦  «        }d„ |                     ¦   «         D ¦   «         }|d| j        › �d| j        › �gz  }|                     ¦   «         D ]}|dv sJ d|› �¦   «         ‚Œd„ |                     ¦   «         D ¦   «         }‰-                     ¦   «          ‰-                      ‰-|||¬¦  «        }| j!        r0tE          j#        j$        j%        | j!                             d¦  «        Ž n'tD          j&        j'        j(         )                    ¦   «         }tD          j$         *                    |¦  «        }| j        | j        dœ}| +                    |¦  «        }tE          j,        |||j-        ¬¦  «        }t!          |j.        dd¦  «        dk    rt_          d¦  «        ‚|j.        j0        dk    rt_          d¦  «        ‚g }g }g }g }t5          ‰-j        ¦  «        D ]¯\  }}||vra| 1                    |¦  «         | 1                    ||         ¦  «         | 1                    |¦  «         | 1                    ||         ¦  «         Œj| 2                    |fd ¦  «        dk    r*| 1                    |¦  «         | 1                    d ¦  «         Œ°d!}t5          |                     ¦   «         ¦  «        D ]K\  }} | 2                    |fd ¦  «        dk    r||› d"�z  }| 2                    |fd ¦  «        d#k    r||› d$�z  }ŒLd%                     ||
|g¦  «        }!|j3        |j4                 }"t          tk          j6        |"¦  «        ¦  «        d&d'…         }#tD          j&        j'        j(        j7        Š.|j8        }$i d(|!“d)| j        “d*t'          |"¦  «        “d+d,                     d-„ ts          |#d d d&…         |#dd d&…         ¦  «        D ¦   «         ¦  «        “dd,                     ˆ.fd.„ts          ||¦  «        D ¦   «         ¦  «        “d/d,                     ˆ.fd0„ts          ||¦  «        D ¦   «         ¦  «        “d1d,                     d2„ |D ¦   «         d3gz   d4gz   ¦  «        “d5t'          |¦  «        d&z   “d6|“d7|j.        j:        “d8| j        “d9d%                     ||	g¦  «        “d:|d         “d;|d         “d<|d&         “d=d!“d>|j;        “d?|$i¥}%g }&t          tx          ¦  «        j        d@z  |$z  }'|' =                    dA¦  «        D ]š}(|(j>        })| ?                    dB|
› d%|› |)› �¦  «        }*|* @                    dC¦  «        5 }+|+ A                     |( B                    ¦   «         jC        dDi |%¤Ž¦  «         d d d ¦  «         n# 1 swxY w Y   |& 1                    |*¦  «         Œ›|!|&fS )ENr   ú,r   c                 ó,   — |                       d¦  «        S )Nú )Ústrip)Úss    r   ú<lambda>z compile_kernel.<locals>.<lambda>_   s   €  1§7¢7¨3¡<¤<€ r   r   c                 óÔ   — t          j        ¦   «         }|                     d                     | ¦  «                             ¦   «         ¦  «         |                     ¦   «         d d…         S )Nr1   é   )ÚhashlibÚsha256ÚupdateÚjoinÚencodeÚ	hexdigest)r   Úms     r   Úhash_signaturez&compile_kernel.<locals>.hash_signaturea   sP   € ÝŒNÑÔˆØ	�Š�—’˜)Ñ$Ô$×+Ò+Ñ-Ô-Ñ.Ô.Ð.Ø�{Š{‰}Œ}˜R˜a˜RÔ Ð r   ÚwarpsÚxstagesc                 óŽ   — 	 t          | ¦  «        }|S # t          $ r Y nw xY w	 t          | ¦  «        }|S # t          $ r Y nw xY wd S ©N)r   Ú
ValueErrorÚfloat)r3   Úrets     r   Ú	constexprz!compile_kernel.<locals>.constexpri   sq   € ð	Ý�a‘&”&ˆCØˆJøÝð 	ð 	ð 	ØˆDð	øøøð	Ý˜‘(”(ˆCØˆJøÝð 	ð 	ð 	ØˆDð	øøøàˆts   ‚ “
 Ÿ ¤5 µ
AÁAc                 ój   •— i | ]/\  }}d |v ¯	|f ‰|                      d ¦  «        d         ¦  «        “Œ0S )ú:r   )Úsplit)Ú.0Úir3   rF   s      €r   ú
<dictcomp>z"compile_kernel.<locals>.<dictcomp>v   sE   ø€ Ð\Ð\Ð\±4°1°aÐSVÐZ[ÐS[ÐS[ˆaˆU�I�I˜aŸgšg c™lœl¨1œoÑ.Ô.ÐS[ÐS[ÐS[r   c                 ó   — i | ]
\  }}|®||“ŒS rB   r   ©rJ   ÚkÚvs      r   rL   z"compile_kernel.<locals>.<dictcomp>w   s   € Ð=Ð=Ð=‘d�a˜¨q¨}ˆQ�¨}¨}¨}r   c                 óD   •— i | ]\  }}‰j         |          ‰|¦  «        “ŒS r   )Ú	arg_names)rJ   rK   r3   rF   Úkernels      €€r   rL   z"compile_kernel.<locals>.<dictcomp>x   s/   ø€ ÐTÐTÐT±t°q¸!�Ô! !Ô$ i i°¡l¤lÐTÐTÐTr   c                 ó   — i | ]
\  }}|®||“ŒS rB   r   rN   s      r   rL   z"compile_kernel.<locals>.<dictcomp>y   s   € ÐEÐEÐE™$˜!˜Q°q°}��A°}°}°}r   r   c                 ód   •— i | ],\  }}‰j         |         |                     d ¦  «        d         “Œ-S )rH   r   )rR   rI   )rJ   rK   r3   rS   s      €r   rL   z"compile_kernel.<locals>.<dictcomp>}   s5   ø€ ÐWÐWÐW¹$¸!¸Q�Ô! !Ô$ a§g¢g¨c¡l¤l°1¤oÐWÐWÐWr   rF   Úxc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )r   )rJ   rP   s     r   ú
<listcomp>z"compile_kernel.<locals>.<listcomp>€   s   € Ð=Ð=Ð= Q�#˜a™&œ&Ð=Ð=Ð=r   c                 ó"   — g | ]\  }}|› d |› �‘ŒS )ú=r   rN   s      r   rX   z"compile_kernel.<locals>.<listcomp>�   s&   € Ð;Ð;Ð;¡  A�Q�*�*˜�*�*Ð;Ð;Ð;r   z
num_warps=znum_stages=)r   é   z#Only 1 and 16 are valid hints, got c                 ó,   — i | ]\  }}|d k    ¯|dd gg“ŒS )r[   ztt.divisibilityr   rN   s      r   rL   z"compile_kernel.<locals>.<dictcomp>†   s,   € ÐOÐOÐO©d¨a°ÀqÈBÂwÀwˆQÐ# RÐ(Ð)ÀwÀwÀwr   )ÚfnÚ
constexprsr   ÚattrsrH   )r   r   )r   ÚoptionsÚglobal_scratch_sizezMAOT compiling kernels with global scratch requirements is not yet implementedzNAOT compiling kernels with profile scratch requirements is not yet implementedÚi32r	   Úcr[   ÚdÚ_é   éÿÿÿÿr   Útriton_kernel_nameÚbin_sizeÚbin_dataz, c                 ó"   — g | ]\  }}d |› |› �‘ŒS )Ú0xr   )rJ   rV   Úys      r   rX   z"compile_kernel.<locals>.<listcomp>¶   s&   € ÐRÐRÐR©t¨q°!˜{ A˜{ q˜{˜{ÐRÐRÐRr   c                 ó6   •— g | ]\  }} ‰|¦  «        › d |› �‘ŒS ©r1   r   ©rJ   ÚnameÚtyÚ	ty_to_cpps      €r   rX   z"compile_kernel.<locals>.<listcomp>·   s3   ø€ ÐpÐpÐp¹h¸dÀB 9 9¨R¡=¤=Ð 9Ð 9°4Ð 9Ð 9ÐpÐpÐpr   Úfull_signaturec                 ó6   •— g | ]\  }} ‰|¦  «        › d |› �‘ŒS ro   r   rp   s      €r   rX   z"compile_kernel.<locals>.<listcomp>¸   s3   ø€ Ð$iÐ$iÐ$iÁ8À4È¨	¨	°"©¬Ð%>Ð%>¸Ð%>Ð%>Ð$iÐ$iÐ$ir   Úarg_pointersc                 ó   — g | ]}d |› �‘ŒS )ú&r   )rJ   Úargs     r   rX   z"compile_kernel.<locals>.<listcomp>¹   s   € Ð"HÐ"HÐ"H° 9 s 9 9Ð"HÐ"HÐ"Hr   z&global_scratchz&profile_scratchÚnum_argsÚkernel_docstringÚsharedr   Ú	algo_infoÚgridXÚgridYÚgridZÚ_placeholderÚ	warp_sizeÚbackend_nameÚextraz	compile.*ú.Úwr   )Dr   r   r   r   r
   ÚsysÚinsertr   ÚparentÚ	importlibÚutilÚspec_from_file_locationÚstemÚmodule_from_specÚloaderÚexec_moduleÚgetattrr   rI   ÚlenÚlistÚmapr   r   r   r   Ú	enumerateÚitemsrR   r:   ÚvaluesÚcreate_binderÚ	ASTSourcer   ÚtritonÚbackendsÚcompilerÚ	GPUTargetÚruntimeÚdriverÚactiveÚget_current_targetÚmake_backendÚparse_optionsÚcompileÚ__dict__ÚmetadataÚRuntimeErrorÚprofile_scratch_sizeÚappendÚgetÚasmÚ
binary_extÚbinasciiÚhexlifyÚmap_python_to_cpp_typeÚbackendÚzipr|   r‚   Ú__file__ÚglobÚsuffixÚwith_suffixÚopenÚwriteÚ	read_textÚformat)/r,   r   r   Úarg_pathÚspecÚmodr   r   r>   Úmeta_sigÚsig_hashÚhintsÚ	constantsÚkeyÚvalueÚ	const_sigÚ
doc_stringÚhr_   Úsrcr   r°   Úkwargsr`   ÚccinforR   Ú	arg_typesÚarg_names_not_1Úarg_types_not_1rK   Úarg_namer´   rr   Ú	func_namer«   Úhex_rƒ   ÚparamsÚoutput_filesÚtemplate_dirÚtemplate_pathÚextÚoutput_fileÚfprF   rS   rs   s/                                               @@@r   r)   r)   P   s	  øøø€ Ø $¤ÐCˆtŒ}ˆ}°4Ô3C€HØ $¤ÐAˆtŒ}ˆ}µ4¸±>´>€Hõ �D”I‰Œ€HÝ„H‡O‚O�A•s˜8œ?Ñ+Ô+Ñ,Ô,Ð,ÝŒ>×1Ò1°(´-ÀÑJÔJ€DÝ
Œ.×
)Ò
)¨$Ñ
/Ô
/€CØ„K×Ò˜CÑ Ô Ð Ý�S˜$Ô*Ñ+Ô+€FØŒ9�?Š?˜3ÑÔ€DÝˆt‰9Œ9˜Š>ˆ>ˆ>ˆ>õ •SÐ/Ð/°´×1EÒ1EÀcÑ1JÔ1JÑKÔKÑLÔL€Ið!¥$¥s¤)ð !ð !ð !ð !ð
 @�t”~Ð?Ð?¨d¬oÐ?Ð?€HØˆ~˜i¨8¨*Ñ4Ñ5Ô5€Hðð ð ð ]Ð\Ð\Ð\½9ÀYÑ;OÔ;OÐ\Ñ\Ô\€EØ=Ð=˜eŸkšk™mœmÐ=Ñ=Ô=€EØTÐTÐTÐTÐT½yÈÑ?SÔ?SÐTÑTÔT€IØEÐE )§/¢/Ñ"3Ô"3ÐEÑEÔE€IØ—k’k‘m”mð 8ð 8‰
ˆˆUØ�AŠ:ˆ:Ø27ˆI�fÔ& s¨1¤vÔ.Ñ/øØWÐWÐWÐWÅ)ÈIÑBVÔBVÐWÑWÔW€IØð %ð %ˆØ$ˆ	�#‰ˆØ—’Ð=Ð=¨)×*:Ò*:Ñ*<Ô*<Ð=Ñ=Ô=Ñ>Ô>€IØ;Ð;¨¯ªÑ):Ô):Ð;Ñ;Ô;€JØÐ0 ¤Ð0Ð0Ð2QÀÄÐ2QÐ2QÐRÑR€Jà�\Š\‰^Œ^ð Gð GˆØ�Gˆ|ˆ|ˆ|ÐFÀ1ÐFÐF‰|Œ|ˆ|ˆ|ØOÐO°e·k²k±m´mÐOÑOÔO€EØ
×ÒÑÔÐØ
×
Ò
˜f°ÀiÐW\Ð
Ñ
]Ô
]€CàŒ;ðN�VŒ_Ô%Ô/°´×1BÒ1BÀ3Ñ1GÔ1GÐHÐHÝ"œNÔ1Ô8×KÒKÑMÔMð åŒo×*Ò*¨6Ñ2Ô2€GØœ>¸¼ÐIÐI€FØ×#Ò# FÑ+Ô+€GÝŒ^˜C¨¸Ô8HÐIÑIÔI€FåˆvŒÐ 5°qÑ9Ô9¸AÒ=Ð=ÝÐjÑkÔkÐkØ„Ô+¨aÒ/Ð/ÝÐkÑlÔlÐlà€IØ€IØ€OØ€OÝ  Ô!1Ñ2Ô2ð $ð $‰ˆˆ8Ø˜9Ð$Ð$Ø×Ò˜XÑ&Ô&Ð&Ø×Ò˜Y xÔ0Ñ1Ô1Ð1Ø×"Ò" 8Ñ,Ô,Ð,Ø×"Ò" 9¨XÔ#6Ñ7Ô7Ð7Ð7Ø�YŠY˜�u˜dÑ#Ô# qÒ(Ð(Ø×Ò˜XÑ&Ô&Ð&Ø×Ò˜UÑ#Ô#Ð#øð €FÝ˜9×+Ò+Ñ-Ô-Ñ.Ô.ð ð ‰ˆˆ2Ø�9Š9�a�U˜DÑ!Ô! QÒ&Ð&Ø˜�g�g�gÑˆFØ�9Š9�a�U˜DÑ!Ô! RÒ'Ð'Ø˜�g�g�gÑˆFøØ—’˜( H¨fÐ5Ñ6Ô6€IØ
Œ*�WÔ'Ô
(€Cå�xÔ Ñ$Ô$Ñ%Ô% a¨ dÔ+€Då”Ô%Ô,ÔC€IØ”>€LðØ�yðà˜dÔ.ðð 	•C˜‘H”Hðð 	�D—I’IÐRÐRµs¸4ÀÀÀ!À¼9ÀdÈ1È4ÈaÈ4ÄjÑ7QÔ7QÐRÑRÔRÑSÔSð	ð
 	�T—Y’YÐpÐpÐpÐpÍ#ÈoÐ_nÑJoÔJoÐpÑpÔpÑqÔqðð 	˜$Ÿ)š)Ð$iÐ$iÐ$iÐ$iÍsÐS\Ð^gÑOhÔOhÐ$iÑ$iÔ$iÑjÔjðð 	˜Ÿ	š	Ð"HÐ"H¸Ð"HÑ"HÔ"HÐL]ÐK^Ñ"^ÐbtÐauÑ"uÑvÔvðð 	•C˜Ñ(Ô(¨1Ñ,ðð 	˜Jðð 	�&”/Ô(ðð 	�T”^ðð 	�S—X’X˜y¨(Ð3Ñ4Ô4ðð 	��a”ðð 	��a”ðð 	��a”ðð  	˜ð!ð" 	�VÔ%ð#ð$ 	˜ð%ð €Fð( €LÝ�‘>”>Ô(¨7Ñ2°\ÑA€LØ%×*Ò*¨;Ñ7Ô7ð )ð )ˆØÔ"ˆØ×*Ò*Ð+G¨xÐ+GÐ+G¸&Ð+GÀ#Ð+GÐ+GÑHÔHˆØ×Ò˜cÑ"Ô"ð 	A bØ�HŠHÐ5�]×,Ò,Ñ.Ô.Ô5Ð?Ð?¸Ð?Ð?Ñ@Ô@Ð@ð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aà×Ò˜KÑ(Ô(Ð(Ð(à�lÐ"Ð"s   Þ.3_-ß-_1	ß4_1	Ú__main__)r­   r7   Úimportlib.utilrŠ   r‡   Úargparser   Údataclassesr   Úpathlibr   Útypingr   rš   Útriton.backendsr   r%   r-   r)   r   r   r   r   ú<module>rÝ      s  ðØ €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð ð ð!ð !ð !ð !ð !ñ !ô !ñ „ð!ð€ð6ð ð ð.#˜ð #ð #ð #ð #ðD ˆzÒÐØ€D�F„F€F€F€Fð Ðr   