Ë
    ÛéñiR"  ã                   ó²   — 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«        yy)é    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<   y)Ú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   © ó    úV/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/triton/tools/compile.pyr   r      sm   … ñð €Dˆ#ƒNØ€K�ÓØ€IˆsÓØ€Dˆ#ƒ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                  óJ  — t        t        ¬«      } | j                  dd¬«       | j                  ddt        ddd	¬
«       | j                  ddt        d d¬«       | j                  ddt        dd¬«       | j                  ddt        dd¬«       | j                  ddt        d d¬«       | j                  ddt
        d d¬«       | j                  ddt        dd	¬ «       | j                  d!d"t        d#d	¬ «       | j                  «       }t        d$i t        |«      ¤Ž}t        |«       y )%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   s4  € ä¬Ô-€FØ
×Ñ˜Øsð ô uà
×Ñ˜¨´CÀÐJiØ!%ð ô 'à
×ÑØ�Dœs¨Dðoð ô pð ×Ñ˜ t´#¸qÐGmÐÔnØ
×Ñ˜¨´CÀØNð ô Pà
×Ñ˜ e´#¸tÐJlÐÔmØ
×Ñ˜ d´¸tÈ.ÐÔYØ
×Ñ˜ t´#Ð<UÐ`dÐÔeØ
×Ñ˜ $¬SÐ7RÐ]aÐÔbØ× Ñ Ó"€HÜÑ(œ˜h›Ñ(€DÜ�4Õr   r,   c                 ó  — | j                   r| j                   n| j                  }| j                  r| j                  n
t        |«      }t        | j                  «      }t
        j                  j                  dt        |j                  «      «       t        j                  j                  |j                  |«      }t        j                  j                  |«      }|j                  j                  |«       t!        || j                  «      }| j"                  j%                  d«      }t'        |«      dk(  sJ ‚t)        t+        d„ | j,                  j%                  d«      «      «      }dt.        t           fd„}	d| j0                  › d| j2                  › �}
 |	||
gz   «      }d	„ }t5        |«      D ��ci c]&  \  }}d
|v sŒ|f ||j%                  d
«      d   «      “Œ( }}}|j7                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}t5        |«      D ��ci c]  \  }}|j8                  |    ||«      “Œ }}}|j7                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}|j7                  «       D ]   \  }}|dk(  sŒ|||j8                  |d      <   Œ" t5        |«      D ��ci c]'  \  }}|j8                  |   |j%                  d
«      d   “Œ) }}}|D ]  }d||<   Œ	 dj;                  |j=                  «       D �cg c]  }t        |«      ‘Œ c}«      }|j7                  «       D ��cg c]  \  }}|› d|› �‘Œ }}}|d| j0                  › �d| j2                  › �gz  }|j=                  «       D ]  }|dv rŒJ d|› �«       ‚ |j7                  «       D ��ci c]  \  }}|dk(  sŒ|ddgg“Œ }}}|j?                  «        |jA                  ||||¬«      }| jB                  r?tE        jF                  jH                  jJ                  | jB                  j%                  d
«      Ž n1tD        jL                  jN                  jP                  jS                  «       }tD        jH                  jU                  |«      }| j0                  | j2                  dœ}|jW                  |«      }tE        jX                  |||jZ                  ¬«      }t!        |j\                  dd«      dkD  rt_        d«      ‚|j\                  j`                  dkD  rt_        d«      ‚g }g } g }!g }"t5        |j8                  «      D ]�  \  }}#|#|vrK|jc                  |#«       | jc                  ||#   «       |!jc                  |#«       |"jc                  ||#   «       ŒU|je                  |fd «      dk(  sŒl|jc                  |#«       | jc                  d«       Œ� d}$t5        |j=                  «       «      D ]J  \  }}%|$t        |«      z  }$|je                  |fd «      dk(  r|$dz  }$|je                  |fd «      dk(  sŒF|$dz  }$ŒL dj;                  |||$g«      }&|jf                  |jh                     }'t        tk        jl                  |'«      «      d d! }(tD        jL                  jN                  jP                  jn                  })i d"|&“d#| j                  “d$t'        |'«      “d%d&j;                  tq        |(d d d …   |(dd d …   «      D �*�+cg c]  \  }*}+d'|*› |+› �‘Œ c}+}*«      “dd&j;                  tq        |!|"«      D �,�%cg c]  \  },}% |)|%«      › d(|,› �‘Œ c}%},«      “d)d&j;                  tq        || «      D �,�%cg c]  \  },}% |)|%«      › d(|,› �‘Œ c}%},«      “d*d&j;                  |!D �-cg c]  }-d+|-› �‘Œ	 c}-d,gz   d-gz   «      “d.t'        |!«      d z   “d/|“d0|j\                  jr                  “d1| j0                  “d2dj;                  ||
g«      “d3|d   “d4|d   “d5|d    “d6d“d7|jt                  “}.g }/|jv                  }0t        tx        «      j                  d8z  |0z  }1|1j{                  d9«      D ]�  }2|2j|                  }3|j                  d:|› d|$› |3› �«      }4|4j�                  d;«      5 }5|5jƒ                   |2j…                  «       j†                  d<i |.¤Ž«       d d d «       |/jc                  |4«       Œƒ |&|/fS c c}}w c c}}w c c}}w c c}}w c c}}w c c}w c c}}w c c}}w c c}+}*w c c}%},w c c}%},w c c}-w # 1 sw Y   ŒfxY w)=Nr   ú,r   c                 ó$   — | j                  d«      S )Nú )Ústrip)Úss    r   ú<lambda>z compile_kernel.<locals>.<lambda>_   s   €  1§7¡7¨3£<€ r   r   c                 ó¬   — t        j                  «       }|j                  dj                  | «      j	                  «       «       |j                  «       d d S )Nr1   é   )ÚhashlibÚsha256ÚupdateÚjoinÚencodeÚ	hexdigest)r   Úms     r   Úhash_signaturez&compile_kernel.<locals>.hash_signaturea   s?   € Ü�N‰NÓˆØ	�‰�—‘˜)Ó$×+Ñ+Ó-Ô.Ø�{‰{‹}˜R˜aÐ Ð r   ÚwarpsÚxstagesc                 óv   — 	 t        | «      }|S # t        $ r Y nw xY w	 t        | «      }|S # t        $ r Y y w xY w)N)r   Ú
ValueErrorÚfloat)r3   Úrets     r   Ú	constexprz!compile_kernel.<locals>.constexpri   sO   € ð	Ü�a“&ˆCØˆJøÜò 	Ùð	úð	Ü˜“(ˆCØˆJøÜò 	ØØð	ús   ‚ �	šŸ, ¬	8·8ú:r   rE   Úxú=z
num_warps=znum_stages=)r   é   z#Only 1 and 16 are valid hints, got rI   ztt.divisibility)ÚfnÚ
constexprsr   Úattrs)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	   ÚcÚdÚ_é   éÿÿÿÿr   Útriton_kernel_nameÚbin_sizeÚbin_dataz, Ú0xr1   Úfull_signatureÚarg_pointersú&z&global_scratchz&profile_scratchÚnum_argsÚkernel_docstringÚsharedr   Ú	algo_infoÚgridXÚgridYÚgridZÚ_placeholderÚ	warp_sizeÚ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   ÚsplitÚlenÚlistÚmapr   r   r   r   Ú	enumerateÚitemsÚ	arg_namesr:   Ú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Úzipr^   rd   ÚbackendÚ__file__ÚglobÚsuffixÚwith_suffixÚopenÚwriteÚ	read_textÚformat)6r,   r   r   Úarg_pathÚspecÚmodÚkernelr   r   r>   Úmeta_sigÚsig_hashrE   Úir3   ÚhintsÚkÚvÚ	constantsÚkeyÚvalueÚ	const_sigÚ
doc_stringÚhrL   Úsrcr   r”   ÚkwargsrM   Úccinfory   Ú	arg_typesÚarg_names_not_1Úarg_types_not_1Úarg_namer—   ÚtyÚ	func_namerŽ   Úhex_Ú	ty_to_cpprG   ÚyÚnameÚargÚparamsÚoutput_filesÚbackend_nameÚtemplate_dirÚtemplate_pathÚextÚoutput_fileÚfps6                                                         r   r)   r)   P   s»  € Ø $§¢ˆt�}Š}°4×3CÑ3C€HØ $§¢ˆt�}Š}´4¸³>€Hô �D—I‘I‹€HÜ‡H�H‡O�O�A”s˜8Ÿ?™?Ó+Ô,Ü�>‰>×1Ñ1°(·-±-ÀÓJ€DÜ
�.‰.×
)Ñ
)¨$Ó
/€CØ‡K�K×Ñ˜CÔ Ü�S˜$×*Ñ*Ó+€FØ�9‰9�?‰?˜3Ó€DÜˆt‹9˜Š>Ðˆ>ô ”SÑ/°·±×1EÑ1EÀcÓ1JÓKÓL€Ið!¤$¤s¡)ó !ð
 �t—~‘~Ð& g¨d¯o©oÐ->Ð?€HÙ˜i¨8¨*Ñ4Ó5€Hòô <EÀYÓ;O×\±4°1°aÐSVÐZ[ÒS[ˆaˆU‘I˜aŸg™g c›l¨1™oÓ.Ñ.Ð\€EÑ\Ø#Ÿk™k›m×=‘d�a˜¨q©}ˆQ�‰TÐ=€EÑ=Ü?HÈÓ?S×T±t°q¸!�×!Ñ! !Ñ$¡i°£lÑ2ÐT€IÑTØ"+§/¡/Ó"3×E™$˜!˜Q°q±}��A‘ÐE€IÑEØ—k‘k“mò 8‰
ˆˆUØ�A‹:Ø27ˆI�f×&Ñ& s¨1¡vÑ.Ò/ð8ô CLÈIÓBV×W¹$¸!¸Q�×!Ñ! !Ñ$ a§g¡g¨c£l°1¡oÑ5ÐW€IÑWØò %ˆØ$ˆ	�#Šð%à—‘¨)×*:Ñ*:Ó*<Ö= Qœ#˜a�&Ò=Ó>€IØ)2¯©Ó):×;¡  A�Q�C�q˜˜’*Ð;€JÑ;Ø�Z §¡Ð/Ð0°KÀÇÁÐ?PÐ2QÐRÑR€Jà�\‰\‹^ò GˆØ�GŠ|ÐFÐBÀ1À#ÐFÓFˆ|ðGà6;·k±k³m×O©d¨a°ÀqÈBÃwˆQÐ# RÐ(Ð)Ñ)ÐO€EÑOØ
×ÑÔØ
×
Ñ
˜f°ÀiÐW\Ð
Ó
]€Cà�;Š;ô �_‰_×%Ñ%×/Ñ/°·±×1BÑ1BÀ3Ó1GÑHÜ"ŸN™N×1Ñ1×8Ñ8×KÑKÓMð ä�o‰o×*Ñ*¨6Ó2€GØŸ>™>¸¿¹ÑI€FØ×#Ñ# FÓ+€GÜ�^‰^˜C¨¸×8HÑ8HÔI€Fäˆv�‰Ð 5°qÓ9¸AÒ=ÜÐjÓkÐkØ‡�×+Ñ+¨aÒ/ÜÐkÓlÐlà€IØ€IØ€OØ€OÜ  ×!1Ñ!1Ó2ò $‰ˆˆ8Ø˜9Ñ$Ø×Ñ˜XÔ&Ø×Ñ˜Y xÑ0Ô1Ø×"Ñ" 8Ô,Ø×"Ñ" 9¨XÑ#6Õ7Ø�Y‰Y˜�u˜dÓ# qÓ(Ø×Ñ˜XÔ&Ø×Ñ˜UÕ#ð$ð €FÜ˜9×+Ñ+Ó-Ó.ò ‰ˆˆ2Ø”#�a“&ÑˆØ�9‰9�a�U˜DÓ! QÒ&Ø�c‰MˆFØ�9‰9�a�U˜DÓ! RÓ'Ø�c‰M‰Fðð —‘˜( H¨fÐ5Ó6€IØ
�*‰*�W×'Ñ'Ñ
(€CäŒx×Ñ Ó$Ó% a¨Ð+€Dä—‘×%Ñ%×,Ñ,×CÑC€IðØ�yðà˜d×.Ñ.ðð 	”C˜“Hðð 	�D—I‘I´s¸4ÁÀ!À¹9ÀdÈ1È4ÈaÈ4ÁjÓ7Q×R©t¨q°!  A 3 q cš{ÓRÓSð	ð
 	�T—Y‘YÌ#ÈoÐ_nÓJo×p¹h¸dÀB¡9¨R£= /°°4°&Ò 9ÓpÓqðð 	˜$Ÿ)™)ÌsÐS\Ð^gÓOh×$iÁ8À4È©	°"« °a¸°vÒ%>Ó$iÓjðð 	˜Ÿ	™	¸Ö"H° Q s e¢9Ò"HÐL]ÐK^Ñ"^ÐbtÐauÑ"uÓvðð 	”C˜Ó(¨1Ñ,ðð 	˜Jðð 	�&—/‘/×(Ñ(ðð 	�T—^‘^ðð 	�S—X‘X˜y¨(Ð3Ó4ðð 	��a‘ðð 	��a‘ðð 	��a‘ðð  	˜ð!ð" 	�V×%Ñ%ð#€Fð& €LØ—>‘>€LÜœ“>×(Ñ(¨7Ñ2°\ÑA€LØ%×*Ñ*¨;Ó7ò )ˆØ×"Ñ"ˆØ×*Ñ*¨Q¨x¨j¸¸&¸À#ÀÐ+GÓHˆØ×Ñ˜cÓ"ð 	A bØ�H‰HÐ5�]×,Ñ,Ó.×5Ñ5Ñ?¸Ñ?Ô@÷	Aà×Ñ˜KÕ(ð)ð �lÐ"Ð"ùós ]ùÛ=ùÛTùÛEùó Xùò >ùÛ;ùó
 Pùó` SùÛpùÛ$iùÚ"H÷$	Að 	Aúsl   Æ.b8Æ;b8Ç/
b>Ç:b>È cÉ
c
Éc
Ê,cË2cÌcÎ	c!Îc!Ûc'Üc-Ü;c3Ý*c9á)0c>ã>d	Ú__main__)r�   r7   Úimportlib.utilrk   rh   Úargparser   Údataclassesr   Úpathlibr   Útypingr   r}   Útriton.backendsr   r%   r-   r)   r   r   r   r   ú<module>rÊ      sk   ðÛ Û Û Û 
Ý #Ý !Ý Ý ã Û ð ÷!ð !ó ð!ð€ò6ð.#˜ó #ðD ˆzÒÙ…Fð r   