ó
    Eñi%Y ã                   óô  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJrJr  S SKJr  S SKJr  S SKJrJrJr  S SKrS SKJ r   S SK!J"r"J#r#  S S	K$J%r%J&r&  S S
K'J(r(  S SK)J*r*  \"RV                  " 5       (       a  S SK,J-r-J.r.  S SK/J0r0J1r1J2r2J3r3  O(S\S\SS4S jr0S\S\SS4S jr1S\S\SS4S jr2S\44S jr3Sr5\Rl                  Ro                  \85      r9\Rl                  Ru                  \Rl                  Ru                  \95      5      r;\Rl                  Ry                  \;S5      r=\R                  R}                  S5      r?\R                  R}                  S5      r@\R                  S:H  rASrB\A(       a  \R†                  " 5       4OSrD\RŠ                  " \F5      rG\R�                  " S5      S\IS\I4S j5       rJS\I4S jrK\R˜                  S \ISS4S! j5       rM " S" S#5      rN\R˜                  S \ISS4S$ j5       rO\R˜                  S \IS\I4S% j5       rPS\I4S& jrQS'\4S\R\I\I4   4S( jrSS)\IS*\IS+\IS,\IS\I4
S- jrT\R˜                  S.\IS\44S/ j5       rU\R˜                  S.\IS\44S0 j5       rV\R˜                  S.\IS\44S1 j5       rW\R˜                  S.\IS\44S2 j5       rX\R˜                  S.\IS\44S3 j5       rY\R˜                  S\44S4 j5       rZ\R˜                  S\44S5 j5       r[\R˜                  S\44S6 j5       r\\R˜                  S\44S7 j5       r]\R˜                  S\44S8 j5       r^\R˜                  S \IS\I4S9 j5       r_S:\`\I   S;\`\I   SS4S< jraS=\`\I   S\`\I   4S> jrbS?\ISS4S@ jrcS?\ISS4SA jrdSB\ISC\ISS4SD jreSB\ISC\ISS4SE jrfSF\IS\I4SG jrg " SH SI5      rhS…SJ\4S\`\I   4SK jjriS†SL\IS\`\I   4SM jjrjS.\IS\`\I   4SN jrkS.\IS\`\I   4SO jrlS\`\I   4SP jrmS\R\`\I   \`\I   4   4SQ jrn S‡S.\ISR\4S\R\`\I   \`\I   4   4SS jjroST\4S\`\I   4SU jrp   SˆS.\IST\4SJ\4SV\\I   SR\4S\R\`\I   \`\I   \`\I   \`\I   \`\I   \`\I   \`\I   4   4SW jjrq " SX SY\h5      rrS\`\I   4SZ jrsS\`\I   4S[ jrtS\`\I   4S\ jruS.\IS]\4S'\4S\R\`\I   \`\I   \`\I   4   4S^ jrvS_\&S\R\`\I   \`\I   4   4S` jrwSa\4S]\4S\R\`\I   \`\I   \`\I   4   4Sb jrxS\`\I   4Sc jryS\R\`\I   \`\I   4   4Sd jrz\R˜                  S\44Se j5       r{\R˜                  S\R\4\I4   4Sf j5       r|\R˜                  S.\ISg\ISS4Sh j5       r}\R˜                  S.\ISS4Si j5       r~S.\IS\R\`\I   \`\I   \`\I   \`\I   \`\I   \`\I   4   4Sj jrS\R\`\I   \`\I   4   4Sk jr€Sl\4Sm\4S\`\I   4Sn jr�S\`\I   4So jr‚S.\IS_\&Sa\4S]\4S'\4Sl\4Sm\4S\R\`\I   \`\I   \`\I   \`\I   \`\I   \`\I   \`\I   4   4Sp jrƒ " Sq Sr\r5      r„S‰Ss jr…\R�                  " St5      Su\IS\\   4Sv j5       r†Sw\`\I   SS4Sx jr‡  SŠSy\IS]\4Sz\4S\R\`\I   \`\I   \`\I   \`\I   \`\I   \`\I   \`\I   4   4S{ jjrˆ " S| S}\„5      r‰S~\IS\R\I\I4   4S jrŠ " S€ S�5      r‹S‚\ISƒ\ISC\ISS4S„ jrŒg)‹é    N)ÚSequence)ÚcdllÚwintypes)Úfind_library)ÚPath)ÚAnyÚOptionalÚUnion)Údynamo_timed)ÚconfigÚexc)Úinvalid_vec_isaÚVecISA)Ú	cache_dir)ÚTorchVersion)Ú_run_build_commandÚbuild_paths)Úlog_global_cache_errorsÚlog_global_cache_statsÚlog_global_cache_valsÚuse_global_cacheÚargsÚkwargsÚreturnc                  ó   • g ©N© ©r   r   s     ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/cpp_builder.pyr   r   /   ó   € Øó    c                  ó   • g r   r   r   s     r   r   r   2   r    r!   c                  ó   • g r   r   r   s     r   r   r   5   r    r!   c                  ó   • g)NFr   r   r!   r   r   r   8   s   € Ør!   ÚCxxBuildz_inductor/script.ldÚlinuxÚdarwinÚwin32zx86_64-w64-mingw32-g++r   é   Úsearchc                 óâ  • SSK JnJn  U  H›  n Ucz  [        R                  S:w  a  M  [
        R                  " S5      (       d  M:  SSKJn  U" 5       nU" [
        R                  R                  US5      US9nU   [        5       nS S S 5        [        R                  " US/5        Us  $    ["        R$                  e! , (       d  f       N<= f! [        R                  [        [         4 a     Mâ  f = f)	Nr   )Úget_lock_dirÚLOCK_TIMEOUTr&   ÚTORCH_INDUCTOR_INSTALL_GXX)ÚFileLockzg++.lock)Útimeoutú	--version)Útorch._inductor.codecacher,   r-   ÚsysÚplatformÚosÚgetenvÚtorch.utils._filelockr/   ÚpathÚjoinÚinstall_gcc_via_condaÚ
subprocessÚcheck_outputÚSubprocessErrorÚFileNotFoundErrorÚImportErrorr   ÚInvalidCxxCompiler)r*   r,   r-   Úcxxr/   Úlock_dirÚlocks          r   Úcpp_compiler_searchrD   O   sÆ   € çDãˆð	Ø‰{ô —<‘< 7Ó*Ùä—y’yÐ!=×>Ñ>ÙÝ:á'›>�ÙÜ—G‘G—L‘L ¨:Ó6Àñ�ò Ü/Ó1�C÷ ä×#Ò# S¨+Ð$6Ô7ØŠJñ' ô, ×
 Ñ
 Ð ÷ •Tûô ×*Ñ*Ô,=¼{ÐKó 	Úð	ús4   �C¨CÁ4CÁ9B:Â!CÂ:
C	ÃCÃC.Ã-C.c            
      óÞ  • [         R                  R                  [        5       S5      n [         R                  R                  U SS5      n[         R                  R	                  U5      (       d  [
        R                  S5        [         R                  R                  SS5      nUc  [        R                  " S5      nUb.  [        R                  " USSU  3S	S
SSS/[        R                  S9  U$ )z>On older systems, this is a quick way to get a modern compilerÚgccÚbinzg++zDownloading GCC via condaÚ	CONDA_EXEÚcondaÚcreatez	--prefix=z--channel=conda-forgez--quietz-yz
python=3.8Úgxx)Ústdout)r5   r8   r9   r   ÚexistsÚlogÚinfoÚenvironÚgetÚshutilÚwhichr;   Ú
check_callÚPIPE)ÚprefixÚcxx_pathrI   s      r   r:   r:   l   s½   € ä�W‰W�\‰\œ)›+ uÓ-€FÜ�w‰w�|‰|˜F E¨5Ó1€HÜ�7‰7�>‰>˜(×#Ñ#Ü�‰Ð,Ô-Ü—
‘
—‘˜{¨GÓ4ˆØ‰=Ü—L’L Ó)ˆEØÑÜ×!Ò!àØØ ˜xÐ(Ø+ØØØ Øð	ô "—‘òð €Or!   Úcompilerc                 ó¾   •  [         R                  " U S/[         R                  S9  g! [         a  n[	        SU  S35      UeSnAf[         R
                   a     gf = f)zM
Check if compiler is ready, in case end user not activate MSVC environment.
ú/help©Ústderrú
Compiler: ú is not found.N)r;   r<   ÚSTDOUTr>   ÚRuntimeErrorr=   )rX   r   s     r   Úcheck_compiler_exist_windowsra   †   sZ   € ð
Ü×Ò ¨7Ð 3¼J×<MÑ<MÓNøÜó KÜ˜Z¨ z°Ð@ÓAÀsÐJûÜ×%Ñ%ó áðús   ‚%( ¨
A²AÁAÁAc                   óH   • \ rS rSrS\SS4S jrS
S jrS
S jrS\4S jr	S	r
g)ÚWinPeFileVersionInfoé”   Ú	file_pathr   Nc                 ó†   • Xl         [        R                  " S5      U l        U R	                  5         U R                  5         g )Nzversion.dll)re   ÚctypesÚWinDLLÚversion_dllÚ_setup_functionsÚ_get_version_info)Úselfre   s     r   Ú__init__ÚWinPeFileVersionInfo.__init__•   s0   € Ø"ŒÜ!Ÿ=š=¨Ó7ˆÔØ×ÑÔØ×ÑÕ r!   c                 ó  • [         R                  [         R                  /U R                  R                  l        [         R                  U R                  R                  l        [         R                  [         R                  [         R                  [         R                  /U R                  R                  l        [         R                  U R                  R                  l        [         R                  [         R                  [        R                  " [        R                  5      [        R                  " [         R                  5      /U R                  R                   l        [         R                  U R                  R                   l        g r   )r   ÚLPCWSTRÚLPDWORDri   ÚGetFileVersionInfoSizeWÚargtypesÚDWORDÚrestypeÚLPVOIDÚGetFileVersionInfoWÚBOOLÚLPCVOIDrg   ÚPOINTERÚc_void_pÚUINTÚVerQueryValueW©rl   s    r   rj   Ú%WinPeFileVersionInfo._setup_functions›   sú   € ä×ÑÜ×Ñð=
ˆ×Ñ×0Ñ0Ô9ô <D¿>¹>ˆ×Ñ×0Ñ0Ô8ô ×ÑÜ�N‰NÜ�N‰NÜ�O‰Oð	9
ˆ×Ñ×,Ñ,Ô5ô 8@·}±}ˆ×Ñ×,Ñ,Ô4ô ×ÑÜ×ÑÜ�NŠNœ6Ÿ?™?Ó+Ü�NŠNœ8Ÿ=™=Ó)ð	4
ˆ×Ñ×'Ñ'Ô0ô 3;·-±-ˆ×Ñ×'Ñ'Õ/r!   c                 ó¸  • [         R                  " 5       nU R                  R                  U R                  [
        R                  " U5      5      nUS:X  a  [        SU R                   S35      e[
        R                  " U5      U l	        U R                  R                  U R                  SX R                  5      nU(       d  [        SU R                   S35      eg )Nr   zCan't get version info size of Ú.zCan't get version info of )r   rt   ri   rr   re   rg   Úbyrefr`   Úcreate_string_bufferÚversion_inforw   )rl   ÚdummyÚsizeÚsuccesss       r   rk   Ú&WinPeFileVersionInfo._get_version_info²   s¸   € Ü—’Ó ˆØ×Ñ×7Ñ7Ø�N‰NœFŸLšL¨Ó/ó
ˆð �1‹9ÜÐ!@ÀÇÁÐ@PÐPQÐRÓSÐSä"×7Ò7¸Ó=ˆÔØ×"Ñ"×6Ñ6Ø�N‰N˜A˜t×%6Ñ%6ó
ˆö ÜÐ!;¸D¿N¹NÐ;KÈ1ÐMÓNÐNð r!   c                 ó~  • [         R                  " 5       n[        R                  " 5       nU R                  R                  U R                  S[         R                  " U5      [         R                  " U5      5      nU(       a  UR                  S:X  a  g/ nSnUR                  bŽ  [        UR                  S-  5       Hp  nUS-  n[         R                  " UR                  U-   S5      n[        R                  US S S5      n[        R                  USS S5      n	UR                  XY45        Mr     U$ [        S5        U$ )Nz\VarFileInfo\Translationr   é   é   ÚlittlezBuffer is None)rg   r{   r   r|   ri   r}   r„   r‚   ÚvalueÚrangeÚ	string_atÚintÚ
from_bytesÚappendÚprint)
rl   Ú	lp_bufferÚu_lenr‡   ÚtranslationsÚlang_idÚiÚoffsetÚdataÚ	code_pages
             r   Úget_language_idÚ$WinPeFileVersionInfo.get_language_idÃ   s
  € Ü—O’OÓ%ˆ	Ü—’“ˆà×"Ñ"×1Ñ1Ø×ÑØ'Ü�LŠL˜Ó#Ü�LŠL˜Óó	
ˆö ˜%Ÿ+™+¨Ó*ØàˆØˆØ�?‰?Ñ&Ü˜5Ÿ;™;¨!Ñ+Ö,�Ø˜Q™�Ü×'Ò'¨	¯©¸&Ñ(@À!ÓD�ÜŸ.™.¨¨b¨q¨°8Ó<�ÜŸN™N¨4°°!¨9°hÓ?�	Ø×#Ñ# WÐ$8Ö9ñ -ð ˆô Ð"Ô#àˆr!   )re   ri   r„   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ústrrm   rj   rk   r�   rœ   Ú__static_attributes__r   r!   r   rc   rc   ”   s-   † ð! #ð !¨$ô !ô@ô.Oð" ÷ r!   rc   c                 ó  • S[         [        [        4   4S jn[        U 5      (       d  g[        R
                  R                  U 5      (       a  U nOU" 5       u  p2USL a  g[        U5      nUR                  5       nUS:w  a  [        S5      eg)z¬
Torch.compile() is only work on MSVC with English language pack well.
Check MSVC's language pack: https://github.com/pytorch/pytorch/issues/157673#issuecomment-3051682766
r   c            	      ó  • [         R                  R                  [         R                  R	                  SS5      SSS5      n [         R                  R                  U 5      (       de  [         R                  R                  [         R                  R	                  SS5      SSS5      n [         R                  R                  U 5      (       d  g U S	S
SSSSSS/	n[        R                  " USSS9R                  5       nU(       d  g[         R                  R                  USSS5      n[         R                  R                  U5      (       d  g[         R                  " U5       Vs/ s HH  n[         R                  R                  [         R                  R                  X45      5      (       d  MF  UPMJ     nnU(       d  g[        USS9S   n[         R                  R                  UUSSSS5      n[         R                  R                  U5      (       a  SU4$ [         R                  R                  UUSSSS5      n[         R                  R                  U5      (       a  SU4$  gs  snf ! [        R                  [        4 a     gf = f)z-
Finds the path to cl.exe using vswhere.exe.
zProgramFiles(x86)zC:\Program Files (x86)zMicrosoft Visual StudioÚ	Installerzvswhere.exeÚProgramFileszC:\Program Files©FÚ z-latestz-prereleasez	-productsÚ*z	-requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z	-propertyÚinstallationPathTúutf-8)ÚtextÚencodingÚVCÚToolsÚMSVC)Úreverser   rG   ÚHostX64Úx64zcl.exeÚHostX86Úx86)r5   r8   r9   rP   rQ   rM   r;   r<   ÚstripÚlistdirÚisdirÚsortedÚCalledProcessErrorr>   )Úvswhere_pathÚcmdÚvs_install_pathÚmsvc_tools_pathÚdÚtoolset_versionsÚlatest_toolset_versionÚcl_paths           r   Úget_msvc_cl_pathÚ3check_msvc_cl_language_id.<locals>.get_msvc_cl_pathè   s0  € ô —w‘w—|‘|Ü�J‰J�N‰NÐ.Ð0IÓJØ%ØØó	
ˆô �w‰w�~‰~˜l×+Ñ+ÜŸ7™7Ÿ<™<Ü—
‘
—‘˜~Ð/BÓCØ)ØØó	ˆLô —7‘7—>‘> ,×/Ñ/Ø ð<	ð ØØØØØØCØØ"ð
ˆCô )×5Ò5Ø˜$¨ñç‰e‹gð ö #Ø ô !Ÿg™gŸl™l¨?¸DÀ'È6ÓRˆOÜ—7‘7—>‘> /×2Ñ2Ø ô
 Ÿš OÔ4ó â4�AÜ—7‘7—=‘=¤§¡§¡¨oÓ!A×B÷ Ù4ð ð  ö
 $Ø Ü%+Ð,<ÀdÑ%KÈAÑ%NÐ"ô —g‘g—l‘lØØ&ØØØØóˆGô �w‰w�~‰~˜g×&Ñ&Ø˜W�}Ð$ô Ÿ'™'Ÿ,™,Ø#Ø*ØØØØó�ô —7‘7—>‘> '×*Ñ*Ø ˜=Ð(ð +ð ùòI øôB ×-Ñ-Ô/@ÐAó 	Ùð	úsF   Ã6I& ÄAI& Å	I& Å!AI!Æ*I!Æ0	I& Æ:AI& ÈAI& É!I& É&JÊJNFi	  znTorch.compile() is only support MSVC with English language pack,Please reinstall its language pack to English.)
ÚtupleÚboolr£   Ú_is_msvc_clr5   r8   rM   rc   rœ   r`   )rX   rÅ   Úcl_exe_pathÚb_retr„   r—   s         r   Úcheck_msvc_cl_language_idrÌ   á   s�   € ðRœe¤D¬# IÑ.ô Rôh �x× Ñ Øä	‡w�w‡~�~�h×Ñà‰á-Ó/ÑˆØ�EŠ>Øä'¨Ó4€LØ×*Ñ*Ó,€GØ�$ƒäð=ó
ð 	
ð r!   c                 óÎ  •  [         R                  " U S/[         R                  SS9nSnUR                  5        H<  nS	U;   d  M  UR                  S
S5      S   R                  5       R                  5       nM>     Uc  [	        SU  SU  S35      eUS;  a  [	        SU  SU 35      eU$ ! [         a  n[	        SU  S35      UeSnAf[
         a  n[	        SU  S35      UeSnAff = f)zK
Check if MinGW `compiler` exists and return it's flavor (win32 or posix).
ú-vT)r\   r®   r]   r^   NzFailed to run z -vzThread modelÚ:r)   éÿÿÿÿzCannot determine the flavor of z, (win32 or posix). No Thread model found in )r(   ÚposixzOnly win32 and pofix flavor of z is supported. The flavor is )
r;   r<   r_   r>   r`   Ú	ExceptionÚ
splitlinesÚsplitr¸   Úlower)rX   ÚoutÚeÚflavorÚlines        r   Úcheck_mingw_win32_flavorrÚ   Q  s  € ð
BÜ×%Ò%Ø�tÐ¤Z×%6Ñ%6¸Tñ
ˆð €FØ—‘Ö ˆØ˜TÕ!Ø—Z‘Z  QÓ'¨Ñ+×1Ñ1Ó3×9Ñ9Ó;ŠFñ !ð �~ÜØ-¨h¨ZÐ7cÐdlÐcmÐmpÐqó
ð 	
ð Ð'Ó'ÜØ-¨h¨ZÐ7TÐU[ÐT\Ð]ó
ð 	
ð €Møô) ó IÜ˜Z¨ z°Ð@ÓAÀqÐHûÜó BÜ˜^¨H¨:°SÐ9Ó:ÀÐAûðBús#   ‚&B( Â(
C$Â2CÃC$ÃCÃC$c                  ó¸  • [         R                  R                  S:X  aF  [        R                  S:w  a2  [
        n [         R                  R                  (       d  [        U 5        U $ [        (       aC  [        R                  R                  SS5      n [        U 5      n [        U 5        [        U 5        U $ [         R                  " 5       (       a  [         R"                  $ [%        [         R&                  R(                  [*        [,        45      (       a$  [-        [         R&                  R(                  5      nO[         R&                  R(                  4n[/        U5      n U $ )NÚwindowsr(   ÚCXXÚcl)r   Úaot_inductorÚcross_target_platformr3   r4   Ú	MINGW_GXXÚpackage_cpp_onlyrÚ   Ú_IS_WINDOWSr5   rP   rQ   Únormalize_path_separatorra   rÌ   Ú	is_fbcoder   ÚccÚ
isinstanceÚcpprA   ÚlistrÇ   rD   )rX   r*   s     r   Úget_cpp_compilerrê   q  sä   € ä×Ñ×1Ñ1°YÓ>Ü�L‰L˜GÓ#ô ˆÜ×"Ñ"×3×3Ü$ XÔ.Øˆç‚{Ü—:‘:—>‘> %¨Ó.ˆÜ+¨HÓ5ˆÜ$ XÔ.Ü! (Ô+ð €Oô ×Ò×ÑÜ—>‘>Ð!Ü”f—j‘j—n‘n¤t¬U m×4Ñ4Üœ6Ÿ:™:Ÿ>™>Ó*‰Fä—j‘j—n‘nÐ&ˆFÜ& vÓ.ˆØ€Or!   Úuse_relative_pathc                 óä   • [         (       a  [        S5      e[        R                  " 5       (       a:  [        R
                  nU (       a  [        R                  O[        R                  nX4$ SnSnX4$ )NzWindows is not supported yet.ÚldÚobjcopy)rã   r`   r   rå   r   rí   Úobjcopy_fallbackrî   )rë   rí   rî   s      r   Úget_ld_and_objcopyrð   Œ  sg   € ß‚{ÜÐ:Ó;Ð;ä×Ò×ÑÜ—‘ˆBö %ô ×,Ò,ä ×(Ñ(ð ð ˆ;Ðð ˆBØˆGØˆ;Ðr!   Ú
cubin_fileÚkernel_namerí   rî   c                 ó†  • U S-   nU SU SU  3n[         R                  " UR                  5       SSSS9  U SU 3n[         R                  " UR                  5       SSSS9  [        R                  " SSU 5      nUS	U S
U S3-   SU SU S3-   SU SU S3-   U-   n[         R                  " UR                  5       SSSS9  U$ )Nú.oz  -r -b binary -z noexecstack -o Ú T)Úcapture_outputr®   ÚcheckzB --rename-section .data=.rodata,alloc,load,readonly,data,contents z[\W]Ú_z --redefine-sym _binary_z	_start=__z_start z--redefine-sym _binary_z_size=__z_size z_end=__z_end )r;   ÚrunrÔ   ÚreÚsub)rñ   rò   rí   rî   Úobj_filer¾   Ú	file_names          r   Úconvert_cubin_to_objrþ   �  s÷   € ð ˜DÑ €HàˆDÐ0°°
¸!¸J¸<Ð
H€CÜ‡N‚N�3—9‘9“;¨t¸$ÀdÒKàˆIÐWÐX`ÐWaÐ
b€CÜ‡N‚N�3—9‘9“;¨t¸$ÀdÒKô —’�w  ZÓ0€IàØ$ Y K¨y¸¸ÀWÐ
Mñ	Nà# I ;¨h°{°mÀ6Ð
Jñ	Kð $ I ;¨g°k°]À%Ð
Hñ	Ið ñ		ð ô ‡N‚N�3—9‘9“;¨t¸$ÀdÒKØ€Or!   Úcpp_compilerc                 ó|   • [         R                  " U S/5      R                  S5      nSUR                  5       S   ;   $ )Nr1   Úutf8ÚAppler   )r;   r<   ÚdecoderÓ   )rÿ   Úversion_strings     r   Ú_is_apple_clangr  ¸  s<   € ä×,Ò,¨l¸KÐ-HÓI×PÑPÐQWÓX€NØ�n×/Ñ/Ó1°!Ñ4Ñ4Ð4r!   c                 ó$  • [         R                  S:X  a  [        U 5      $ [        (       aG  [        R
                  " SU 5      (       a  [        S5      e[        [        R
                  " SU 5      5      $ [        [        R
                  " SU 5      5      $ )Nr'   z((clang$)|(clang\+\+$))z]Please use clang-cl, due to torch.compile only support MSVC-like CLI (compiler flags syntax).z
(clang-cl)z(clang|clang\+\+))r3   r4   r  rã   rú   r*   r`   rÈ   ©rÿ   s    r   Ú	_is_clangr  ¾  sq   € ô ‡|�|�xÓÜ˜|Ó,Ð,ß	Šä�9Š9Ð/°×>Ñ>ÜØoóð ô ”B—I’I˜m¨\Ó:Ó;Ð;Ü”—	’	Ð.°Ó=Ó>Ð>r!   c                 ód   • [        U 5      (       a  g[        [        R                  " SU 5      5      $ )NFz(gcc|g\+\+|gnu-c\+\+))r  rÈ   rú   r*   r  s    r   Ú_is_gccr
  Í  s)   € ô �×ÑØÜ”—	’	Ð2°LÓAÓBÐBr!   c                 óð   • [         (       d  g [        R                  " U S/[        R                  S9R	                  5       R
                  " [        6 nSUR                  5       S   ;   $ ! [         a     gf = f)NFrZ   r[   Ú	Microsoftr   )	rã   r;   r<   r_   r¸   r  ÚSUBPROCESS_DECODE_ARGSrÓ   r>   )rÿ   Ú
output_msgs     r   rÉ   rÉ   Õ  su   € çŠ;Øðä×#Ò# \°7Ð$;ÄJ×DUÑDUÑVß‰U‹Wß‰Vðä+ð-ð 	ð
 ˜j×3Ñ3Ó5°aÑ8Ñ8Ð8øÜó Ùðús   ŽAA( Á(
A5Á4A5c                 ó
  • S[         SS 4S jn [        R                  " U S/[        R                  S9R	                  5       R
                  " [        6 nSUR                  5       S   ;   nU(       an  [        (       a'  [        R                  " SU 5      (       a  [        S	5      e[        R                  " S
U5      nUb"  UR                  S5      nU" [        U5      5        U$ ! [         a     g[        R                   a     gf = f)NÚcompiler_versionr   c                 ó^   • [         (       a  SOSnU [        U5      :  a  [        SU S35      eg)zg
On Windows: early version icx has `-print-file-name` issue, and can't preload correctly for inductor.
z2024.2.1z0.0.0z0Intel Compiler error: less than minimal version r�   N)rã   r   r`   )r  Úmin_versions     r   Ú_check_minimal_versionÚ2_is_intel_compiler.<locals>._check_minimal_versionê  s:   € ÷ %0¢K‘j°WˆØœl¨;Ó7Ó7ÜØBÀ;À-ÈqÐQóð ð 8r!   r1   r[   ÚIntelr   z((icx$)|(icx-cc$))z[Please use icx-cl, due to torch.compile only support MSVC-like CLI (compiler flags syntax).z(\d+[.]\d+[.]\d+[.]\d+)r)   F)r   r;   r<   ÚDEVNULLr¸   r  r  rÓ   rã   rú   r*   r`   Úgroupr>   r=   )rÿ   r  r  Úis_intel_compilerÚicx_ver_searchÚicx_vers         r   Ú_is_intel_compilerr  è  sþ   € ð´ð À$ô ðä×#Ò#Ø˜{Ð+´J×4FÑ4Fñ÷ ‰U‹Wß‰Vð	ô ,ð	-ð 	ð $ z×'<Ñ'<Ó'>¸qÑ'AÑAÐÞßŠ{Ü—9’9Ð2°L×AÑAÜ&Øuóð ô
  ŸYšYÐ'AÀ:ÓNˆNØÑ)Ø(×.Ñ.¨qÓ1�Ù&¤|°GÓ'<Ô=à Ð øÜó ÙÜ×%Ñ%ó áðús   �CC  Ã 
DÃ,DÄDc                  ó(   • [        [        5       5      $ r   )r
  rê   r   r!   r   Úis_gccr    s   € äÔ#Ó%Ó&Ð&r!   c                  ó(   • [        [        5       5      $ r   )r  rê   r   r!   r   Úis_clangr    s   € äÔ%Ó'Ó(Ð(r!   c                  ó(   • [        [        5       5      $ r   )r  rê   r   r!   r   r  r    s   € äÔ.Ó0Ó1Ð1r!   c                  ó(   • [        [        5       5      $ r   )r  rê   r   r!   r   Úis_apple_clangr"  $  s   € äÔ+Ó-Ó.Ð.r!   c                  ó(   • [        [        5       5      $ r   )rÉ   rê   r   r!   r   Ú
is_msvc_clr$  )  s   € äÔ'Ó)Ó*Ð*r!   c                 ó¶  • [         R                  R                  5       nSUS'    [        R                  " U S/[        R
                  US9R                  " [        6 nUR                  SS5      nUR                  S	S5      nU$ ! [         aL     [        R                  " U S/[        R
                  US9R                  " [        6 n Nj! [         a      gf = ff = f)
NÚCÚLC_ALLrÎ   )r\   Úenvr1   rª   Úrø   Ú
)
r5   rP   Úcopyr;   r<   r_   r  r  rÒ   Úreplace)rX   r(  r  s      r   Úget_compiler_version_infor-  .  sÞ   € ä
�*‰*�/‰/Ó
€CØ€Cˆ�Mð
Ü#×0Ò0Ø�tÐ¤Z×%6Ñ%6¸Cñ
ç
‰&ðä(ð*ˆð $×+Ñ+¨D°#Ó6€NØ#×+Ñ+¨D°#Ó6€NØÐøô ó ð	Ü'×4Ò4Ø˜;Ð'´
×0AÑ0AÀsñç‰fðä,ð.ŠNøô ó 	Úð	úðús)   ¥7B Â
CÂ7CÃ
CÃCÃCÃCÚ	dest_listÚsrc_listc                 ó4   • U R                  S U 5       5        g )Nc              3   óN   #   • U  H  n[         R                  " U5      v •  M     g 7fr   ©r+  Údeepcopy)Ú.0Úitems     r   Ú	<genexpr>Ú_append_list.<locals>.<genexpr>E  s   é € Ð>²X¨T”T—]’] 4×(Ð(²Xùó   ‚#%)Úextend)r.  r/  s     r   Ú_append_listr:  D  s   € Ø×ÑÑ>±XÓ>Õ>r!   Ú	orig_listc                 óL   • / nU  H  nX!;  d  M
  UR                  U5        M     U$ r   )r’   )r;  Únew_listr5  s      r   Ú_remove_duplication_in_listr>  H  s*   € Ø€HÛˆØÕØ�O‰O˜DÖ!ñ ð €Or!   Úpath_dirc                 ó
  • [         R                  R                  U 5      (       d   [        U 5      R	                  SSS9  g g ! [
         a7  nUR                  [        R                  :w  a  [        SU  35      Ue S nAg S nAff = f)NT)ÚparentsÚexist_okzFail to create path )	r5   r8   rM   r   ÚmkdirÚOSErrorÚerrnoÚEEXISTr`   )r?  r   s     r   Ú_create_if_dir_not_existrG  P  su   € Ü�7‰7�>‰>˜(×#Ñ#ð	OÜ�‹N× Ñ ¨¸Ð Ò=ð $øô ó 	OØ�y‰yœEŸL™LÓ(Ü"Ð%9¸(¸Ð#DÓEÈ3ÐNô )ûð	Oús   ¦A Á
BÁ-A=Á=Bc                 ó°  • [         R                  R                  U 5      (       a²  [         R                  " U SS9 H‚  u  pnU H8  n[         R                  R	                  X5      n[         R
                  " U5        M:     U H8  n[         R                  R	                  X5      n[         R                  " U5        M:     M„     [         R                  " U 5        g g )NF)Útopdown)r5   r8   rM   Úwalkr9   ÚremoveÚrmdir)r?  ÚrootÚdirsÚfilesÚnamere   Údir_paths          r   Ú_remove_dirrR  Y  s•   € Ü	‡w�w‡~�~�h×ÑÜ!#§¢¨¸5Ô!AÑˆD˜Û�ÜŸG™GŸL™L¨Ó4�	Ü—	’	˜)Ö$ñ ó �ÜŸ7™7Ÿ<™<¨Ó3�Ü—’˜Ö"ó ñ	 "Bô 	�Š�Õð  r!   Úcmd_lineÚcwdc                 óœ  • [         R                  " U 5      n [        R                  " X!S[        R                  [        R
                  S9  g ! [        R                   ak  nUR                  R                  " [        6 nSU;   =(       d    SU;   nU(       a  [        R                  S:X  a  SnXF-  n[        R                  " X$5      UeS nAff = f)NT)rT  r÷   rL   r\   z'omp.h' file not foundÚlibompr'   a¢  

OpenMP support not found. Please try one of the following solutions:
(1) Set the `CXX` environment variable to a compiler other than Apple clang++/g++ that has builtin OpenMP support;
(2) install OpenMP via conda: `conda install llvm-openmp`;
(3) install libomp via brew: `brew install libomp`;
(4) manually setup OpenMP and set the `OMP_PREFIX` environment variable to point to a path with `include/omp.h` under it.)ÚshlexrÔ   r;   rù   rU   r_   r¼   rL   r  r  r3   r4   r   ÚCppCompileError)rS  rT  r¾   r×   ÚoutputÚopenmp_problemÚinstructions          r   Ú_run_compile_cmdr\  e  s¨   € Ü
�+Š+�hÓ
€Cð6Ü�ŠØ ¬Z¯_©_ÄZ×EVÑEVó	
øô ×(Ñ(ó 6Ø—‘—’Ô"8Ð9ˆØ1°VÑ;×Q¸xÈ6Ñ?QˆÞœcŸl™l¨hÓ6ð2ð ð Ñ!ˆFÜ×!Ò! #Ó.°AÐ5ûð6ús   ˜3A ÁCÁ A&CÃCc                 ód   • [        S5         [        X5        S S S 5        g ! , (       d  f       g = f)NÚcompile_file)r   r\  )rS  rT  s     r   Úrun_compile_cmdr_  |  s   € Ü	�nÕ	%Ü˜Ô'÷ 
&×	%Ö	%ús   Œ!¡
/Ú	orig_pathc                 ó\   • [         (       a   U R                  [        R                  S5      $ U $ )NÚ/)rã   r,  r5   Úsep)r`  s    r   rä   rä   �  s$   € ß‚{Ø× Ñ ¤§¡¨Ó-Ð-ØÐr!   c                   óÜ  • \ rS rSrSr             S&S\S\\\      S\\\      S\\\      S\\\      S	\\\      S
\\\      S\\\      S\S\S\S\S\SS4S jjr	S'S jr
S'S jrS'S jrS\4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\\   4S jrS\4S jrS\4S jrS\4S  jrS\4S! jrS\4S" jrS#\SS4S$ jrS%rg)(ÚBuildOptionsBasei‡  z°
This is the Base class for store cxx build options, as a template.
Actually, to build a cxx shared library. We just need to select a compiler
and maintains the suitable args.
NrX   ÚdefinitionsÚinclude_dirsÚcflagsÚldflagsÚlibraries_dirsÚ	librariesÚpassthrough_argsÚaot_moderë   Úcompile_onlyÚprecompilingÚpreprocessingr   c                 ó:  • Xl         U=(       d    / U l        U=(       d    / U l        U=(       d    / U l        U=(       d    / U l        U=(       d    / U l        U=(       d    / U l        U=(       d    / U l        S U l        X�l	        X l
        X°l        XÀl        XÐl        g r   )Ú	_compilerÚ_definitionsÚ_include_dirsÚ_cflagsÚ_ldflagsÚ_libraries_dirsÚ
_librariesÚ_passthrough_argsÚprecompiled_headerÚ	_aot_modeÚ_use_relative_pathÚ_compile_onlyÚ_precompilingÚ_preprocessing)rl   rX   rf  rg  rh  ri  rj  rk  rl  rm  rë   rn  ro  rp  s                 r   rm   ÚBuildOptionsBase.__init__Ž  s…   € ð  "ŒØ'2×'8°bˆÔØ(4×(:¸ˆÔØ"(§,¨BˆŒØ#*§=¨bˆŒØ*8×*>¸BˆÔØ%.§_°"ˆŒà,<×,BÀˆÔð 26ˆÔà'ŒØ(9ÔØ#/ÔØ#/ÔØ$1Õr!   c                 óD   • U R                   (       a  / U l        / U l        g g r   )r}  rw  rx  r~   s    r   Ú_process_compile_only_optionsÚ.BuildOptionsBase._process_compile_only_options²  s   € Ø××Ø#%ˆDÔ Ø ˆD�Oð r!   c                 óp  • [        U R                  5      U l        [        U R                  5      U l        [        U R                  5      U l        [        U R                  5      U l        [        U R
                  5      U l        [        U R                  5      U l        [        U R                  5      U l        g r   )r>  rs  rt  ru  rv  rw  rx  ry  r~   s    r   Ú_remove_duplicate_optionsÚ*BuildOptionsBase._remove_duplicate_options·  s~   € Ü7¸×8IÑ8IÓJˆÔÜ8¸×9KÑ9KÓLˆÔÜ2°4·<±<Ó@ˆŒÜ3°D·M±MÓBˆŒÜ:¸4×;OÑ;OÓPˆÔÜ5°d·o±oÓFˆŒÜ!<¸T×=SÑ=SÓ!TˆÕr!   c                 óD   • U R                  5         U R                  5         g r   )r‚  r…  r~   s    r   Ú_finalize_optionsÚ"BuildOptionsBase._finalize_optionsÀ  s   € Ø×*Ñ*Ô,Ø×&Ñ&Õ(r!   c                 ó   • U R                   $ r   ©rr  r~   s    r   Úget_compilerÚBuildOptionsBase.get_compilerÄ  ó   € Ø�~‰~Ðr!   c                 ó   • U R                   $ r   )rs  r~   s    r   Úget_definitionsÚ BuildOptionsBase.get_definitionsÇ  s   € Ø× Ñ Ð r!   c                 ó   • U R                   $ r   )rt  r~   s    r   Úget_include_dirsÚ!BuildOptionsBase.get_include_dirsÊ  ó   € Ø×!Ñ!Ð!r!   c                 ó   • U R                   $ r   )ru  r~   s    r   Ú
get_cflagsÚBuildOptionsBase.get_cflagsÍ  s   € Ø�|‰|Ðr!   c                 ó   • U R                   $ r   )rv  r~   s    r   Úget_ldflagsÚBuildOptionsBase.get_ldflagsÐ  s   € Ø�}‰}Ðr!   c                 ó   • U R                   $ r   )rw  r~   s    r   Úget_libraries_dirsÚ#BuildOptionsBase.get_libraries_dirsÓ  s   € Ø×#Ñ#Ð#r!   c                 ó   • U R                   $ r   )rx  r~   s    r   Úget_librariesÚBuildOptionsBase.get_librariesÖ  s   € Ø�‰Ðr!   c                 ó   • U R                   $ r   )ry  r~   s    r   Úget_passthrough_argsÚ%BuildOptionsBase.get_passthrough_argsÙ  s   € Ø×%Ñ%Ð%r!   c                 ó   • U R                   $ r   ©r{  r~   s    r   Úget_aot_modeÚBuildOptionsBase.get_aot_modeÜ  rŽ  r!   c                 ó   • U R                   $ r   )r|  r~   s    r   Úget_use_relative_pathÚ&BuildOptionsBase.get_use_relative_pathß  s   € Ø×&Ñ&Ð&r!   c                 ó   • U R                   $ r   )r}  r~   s    r   Úget_compile_onlyÚ!BuildOptionsBase.get_compile_onlyâ  r•  r!   c                 ó   • U R                   $ r   )r~  r~   s    r   Úget_precompilingÚ!BuildOptionsBase.get_precompilingå  r•  r!   c                 ó   • U R                   $ r   )r  r~   s    r   Úget_preprocessingÚ"BuildOptionsBase.get_preprocessingè  s   € Ø×"Ñ"Ð"r!   Úfilec                 óÌ  • U R                  5       U R                  5       U R                  5       U R                  5       U R	                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       S.n[        US5       n[        R                  " X#5        S S S 5        g ! , (       d  f       g = f)N)rX   rf  rg  rh  ri  rj  rk  rl  rm  rë   rn  Úw)rŒ  r�  r“  r—  rš  r�  r   r£  r§  rª  r­  ÚopenÚjsonÚdump)rl   rµ  ÚattrsÚfs       r   Úsave_flags_to_jsonÚ#BuildOptionsBase.save_flags_to_jsonë  s®   € à×)Ñ)Ó+Ø×/Ñ/Ó1Ø ×1Ñ1Ó3Ø—o‘oÓ'Ø×'Ñ'Ó)Ø"×5Ñ5Ó7Ø×+Ñ+Ó-Ø $× 9Ñ 9Ó ;Ø×)Ñ)Ó+Ø!%×!;Ñ!;Ó!=Ø ×1Ñ1Ó3ñ
ˆô �$˜Œ_ Ü�IŠI�eÔ÷ �_Ž_ús   Â5CÃ
C#)r{  ru  r}  rr  rs  rt  rv  rx  rw  ry  r~  r  r|  rz  )rª   NNNNNNNFFFFFrž   )rŸ   r    r¡   r¢   Ú__doc__r£   r	   ré   rÈ   rm   r‚  r…  rˆ  rŒ  r�  r“  r—  rš  r�  r   r£  r§  rª  r­  r°  r³  r½  r¤   r   r!   r   re  re  ‡  sÚ  † ñð Ø+/Ø,0Ø&*Ø'+Ø.2Ø)-Ø04ØØ"'Ø"Ø"Ø#ñ"2àð"2ð ˜d 3™iÑ(ð"2ð ˜t C™yÑ)ð	"2ð
 ˜˜c™Ñ#ð"2ð ˜$˜s™)Ñ$ð"2ð !  c¡Ñ+ð"2ð ˜D ™IÑ&ð"2ð # 4¨¡9Ñ-ð"2ð ð"2ð  ð"2ð ð"2ð ð"2ð ð"2ð 
õ"2ôH!ô
Uô)ð˜cô ð!  c¡ô !ð" $ s¡)ô "ð˜D ™Iô ð˜T #™Yô ð$ D¨¡Iô $ð˜t C™yô ð& d¨3¡iô &ð˜dô ð' tô 'ð" $ô "ð" $ô "ð# 4ô #ð  sð  ¨t÷  r!   re  Úwarning_allc                 ó4   • [         (       d  U (       a  S/$ / $ / $ )NÚWall©rã   )rÀ  s    r   Ú_get_warning_all_cflagrÄ  þ  s   € ßŠ;Þ&�ˆxÐ.¨BÐ.àˆ	r!   Ústd_numc                 ó6   • [         (       a	   Sn SU  3/$ SU  3/$ )Nzc++20zstd:zstd=rÃ  )rÅ  s    r   Ú_get_cpp_std_cflagrÇ    s3   € ß‚{ð	ð ˆØ�w�iÐ Ð!Ð!à�w�iÐ Ð!Ð!r!   c                 óú   • [         (       a  / SQnU$ SS/n[        U 5      (       a4  [        R                  R                  (       a  SOSnUR                  U5        [        U 5      (       a  UR                  S5        U$ )N)Úwd4819Úwd4251Úwd4244Úwd4267Úwd4275Úwd4018Úwd4190Úwd4624Úwd4067Úwd4068ÚEHsczZc:__cpluspluszpermissive-zWno-unused-variablezWno-unknown-pragmasz$Werror=ignored-optimization-argumentz!Wno-ignored-optimization-argumentÚpedantic)rã   r  r   rß   Ú#raise_error_on_ignored_optimizationr’   r
  )rÿ   rh  Úignored_optimization_arguments      r   Ú_get_os_related_cpp_cflagsr×    sx   € ß‚{ò
ˆð> €Mð (Ð)>Ð?ˆÜ�\×"Ñ"ô ×&Ñ&×J×Jñ 7à8ð *ð
 �M‰MÐ7Ô8Ü�<× Ñ ð �M‰M˜*Ô%Ø€Mr!   c                 óB   • / n[         (       a  UR                  S5        U$ )NÚNOMINMAX©rã   r’   )rÿ   Úos_definitionss     r   Ú_get_os_related_cpp_definitionsrÜ  8  s"   € Ø "€Nß‚{ð 	×Ñ˜jÔ)ØÐr!   c                  óF  • [         (       a  / n U $ / SQn U R                  S5        [        R                  R                  (       d  U R                  S5        U R                  S[        R                  R
                   35        [        5       (       a  U R                  S5        U $ )N)zfno-trapping-mathzfunsafe-math-optimizationszffinite-math-onlyzfno-signed-zeroszfno-math-errnozfno-finite-math-onlyzfno-unsafe-math-optimizationszffp-contract=zfexcess-precision=fast)rã   r’   r   rè   Úenable_unsafe_math_opt_flagÚ#enable_floating_point_contract_flagr  )Úflagss    r   Ú_get_ffast_math_flagsrá  A  sz   € ß‚{Øˆð0 €Lò!
ˆð 	�‰Ð+Ô,Ü�z‰z×5×5Ø�L‰LÐ8Ô9Ø�‰�}¤V§Z¡Z×%SÑ%SÐ$TÐUÔVä�8‰8Ø�L‰LÐ1Ô2à€Lr!   c                  ó^   • / n / n[         (       a  SS/n / SQnX4$ U R                  S5        X4$ )z¸
When we turn on generate debug symbol.
On Windows, it should create a [module_name].pdb file. It helps debug by WinDBG.
On Linux, it should create some debug sections in binary file.
ÚZIÚ_DEBUG)ÚDEBUGzASSEMBLYDEBUG zOPT:REFzOPT:ICFÚgrÚ  )rh  ri  s     r   Ú!_get_inductor_debug_symbol_cflagsrç  ^  sB   € ð €FØ€Gç‚{Ø˜Ð!ˆÚCˆð ˆ?Ðð 	�‰�cÔàˆ?Ðr!   Úmin_optimizec                 ó6  • / n/ n[         R                  R                  =(       d#    [        R                  R                  SS5      S:H  (       + n[         R                  R                  =(       dn    [         R                  R                  =(       dM    [        R                  R                  SS5      S:H  =(       d#    [        R                  R                  SS5      S:H  nU(       aC  [        (       a  X!(       a  SOS/-  nOBUU(       a  [         R                  R                  OSS/-  nO[        (       a  U/ S	Q-  nOUS
/-  nU(       a  [        5       u  pgX&-  nX7-  nU[        5       -  n[        (       a   X#4$ [        R                  S:w  aÍ  [        U 5      (       a  UR                  S5        [         R                  " 5       (       d’  [        R                   " 5       S:X  a  UR                  S5        Og[        R                   " 5       S:X  a  UR                  S5        O<[        R                   " 5       S:X  a  UR                  S5        OUR                  S5        [         R                  R"                  (       a!  [%        U 5      (       a  UR                  S5        X#4$ )NÚTORCHINDUCTOR_DEBUG_COMPILEÚ0Ú1ÚTORCHINDUCTOR_DEBUG_SYMBOLÚO1ÚO2ÚO3ÚDNDEBUG)ÚOdÚOb0zOy-ÚO0r'   zfno-tree-loop-vectorizeÚppc64lezmcpu=nativeÚriscv64zmarch=rv64gcÚriscv32zmarch=rv32gczmarch=nativeú	flto=thin)r   rß   Údebug_compiler5   rP   rQ   Údebug_symbolsrã   Úcompile_wrapper_opt_levelrç  rá  r3   r4   r
  r’   rå   ÚmachineÚ
enable_ltor  )rÿ   rè  rh  ri  Úshould_use_optimized_flagsÚshould_add_debug_symbol_flagsÚdebug_cflagsÚdebug_ldflagss           r   Ú_get_optimization_cflagsr  p  s  € ð €FØ€Gô 	×Ñ×)Ñ)÷ 	EÜ�:‰:�>‰>Ð7¸Ó=ÀÑDô"Ðô
 	×Ñ×)Ñ)÷ 	DÜ×Ñ×,Ñ,÷	Dä�:‰:�>‰>Ð7¸Ó=ÀÑD÷	Dô �:‰:�>‰>Ð6¸Ó<ÀÑCð	 "ö "ßŠ;Ø�|‘t°Ð6Ñ6‰FàÞAM”×#Ñ#×=Ò=ÐSWØðñ ‰F÷
 Š;ØÒ*Ñ*‰Fà�t�fÑˆFæ$Ü&GÓ&IÑ#ˆØÑˆØÑ ˆà
Ô#Ó%Ñ%€Fç‚{Øð* ˆ?Ðô' �<‰<˜8Ó#ä�|×$Ñ$Ø—‘Ð7Ô8ô ×#Ò#×%Ñ%Ü×#Ò#Ó%¨Ó2Ø—M‘M -Õ0Ü×%Ò%Ó'¨9Ó4Ø—M‘M .Õ1Ü×%Ò%Ó'¨9Ó4Ø—M‘M .Õ1à—M‘M .Ô1ä×Ñ×)×)¬i¸×.EÑ.EØ�M‰M˜+Ô&àˆ?Ðr!   Údo_linkc                 óÒ   • [         (       a   SS/$ [        R                  " 5       S:X  a  S[        5       ;   a  / SQ$ / nU (       a  UR	                  S5        UR	                  S5        U$ )NÚDLLÚMDÚDarwinÚclang)ÚsharedÚfPICzundefined dynamic_lookupr	  r
  )rã   r4   Úsystemrê   r’   )r  rà  s     r   Ú_get_shared_cflagsr  ®  s]   € ß‚{ð	ð �tˆ}ÐÜ‡‚Ó˜HÓ$¨Ô4DÓ4FÓ)Fâ=Ð=Ø€EÞØ�‰�XÔà	‡L�L�ÔØ€Lr!   Úextra_flagsc                 ón  • / n/ n/ n/ n/ n	/ n
/ n[        X5      u  pÍU[        U5      -   [        U5      -   [        5       -   [	        U 5      -   nU[        U 5      -  n[        (       dQ  [        R                  R                  (       a2  [        U 5      (       a"  UR                  S5        UR                  S5        UR                  SR                  U5      5        [        R                  R                  S:X  a7  UR                  SS/5        [        [         5      S:X  a  UR                  S5        UUUX�-   U	U
U4$ )	Nzfuse-ld=lldrø  rõ   rÜ   z-static-libstdc++z-static-libgccrÑ   z'-Wl,-Bstatic -lwinpthread -Wl,-Bdynamic)r  r  rÄ  rÇ  r×  rÜ  rã   r   rß   rý  r  r’   r9   rà   r9  rÚ   rá   )rÿ   r  rÀ  r  rè  rf  rg  rh  ri  rj  rk  rl  Ú
opt_cflagsÚopt_ldflagss                 r   Úget_cpp_optionsr  À  s<  € ð  €KØ €LØ€FØ€GØ "€NØ€IØ"$Ðä6°|ÓRÑ€Jð 	Ü
˜WÓ
%ñ	&ä
  Ó
-ñ	.ô Ó
ñ	ô % \Ó
2ñ		3ð ð Ô2°<Ó@Ñ@€KçŠ;œ6×.Ñ.×9×9¼iÈ×>UÑ>UØ�‰�}Ô%Ø�‰�{Ô#à×Ñ˜CŸH™H [Ó1Ô2ä×Ñ×0Ñ0°IÓ=Ø×ÑÐ!4Ð6FÐ GÔHÜ#¤IÓ.°'Ó9Ø×#Ñ#Ð$MÔNð 	ØØØÑØØØðð r!   c                   ón   ^ • \ rS rSrSr        SS\S\S\\   S\S\S\S	\S
\SS4U 4S jjjrSr	U =r
$ )Ú
CppOptionsiñ  a(  
This class is inherited from BuildOptionsBase, and as cxx build options.
This option need contains basic cxx build option, which contains:
1. OS related args.
2. Toolchains related args.
3. Cxx standard related args.
Note:
1. This Options is good for assist modules build, such as x86_isa_help.
rn  rÀ  r  rë   rX   rè  ro  rp  r   Nc	                 ó  >• [         TU ]  UUUUS9  U(       a  UO	[        5       U l        [	        U R                  U=(       d    U=(       d    U(       + UUUS9u  n	n
nnnnn[        U R                  U	5        [        U R                  U
5        [        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        U R                  5         g )N)rn  rë   ro  rp  )rÿ   r  r  rÀ  rè  )Úsuperrm   rê   rr  r  r:  rs  rt  ru  rv  rw  rx  ry  rˆ  )rl   rn  rÀ  r  rë   rX   rè  ro  rp  rf  rg  rh  ri  rj  rk  rl  Ú	__class__s                   €r   rm   ÚCppOptions.__init__ü  sñ   ø€ ô 	‰ÑØ%Ø/Ø%Ø'ð	 	ñ 	
ö &.™Ô3CÓ3EˆŒô ØŸ™Ø%×F¨×F¸ÔGØ#Ø#Ø%ñ
ñ	
ØØØØØØØô 	�T×&Ñ&¨Ô4Ü�T×'Ñ'¨Ô6Ü�T—\‘\ 6Ô*Ü�T—]‘] GÔ,Ü�T×)Ñ)¨>Ô:Ü�T—_‘_ iÔ0Ü�T×+Ñ+Ð-=Ô>Ø×ÑÕ r!   r‹  )FTr   Frª   FFF)rŸ   r    r¡   r¢   r¿  rÈ   r   r£   rm   r¤   Ú__classcell__©r  s   @r   r  r  ñ  sˆ   ø† ñð #Ø Ø%'Ø"'ØØ"Ø"Ø#ñ*!àð*!ð ð*!ð ˜c‘]ð	*!ð
  ð*!ð ð*!ð ð*!ð ð*!ð ð*!ð 
÷*!ö *!r!   r  c                  ó
   • SS/$ )NÚTORCH_INDUCTOR_CPP_WRAPPERÚSTANDALONE_TORCH_HEADERr   r   r!   r   Ú!_get_torch_cpp_wrapper_definitionr  )  s   € Ø(Ð*CÐDÐDr!   c                  ó   • S/$ )Nz" C10_USING_CUSTOM_GENERATED_MACROSr   r   r!   r   Ú_use_custom_generated_macrosr  -  s   € Ø0Ð1Ð1r!   c                  ó`   • [         (       d"  [        R                  " 5       (       a  / SQn U $ / $ / $ )N)ÚC10_USE_GLOGÚC10_USE_MINIMAL_GLOGÚ$C10_DISABLE_TENSORIMPL_EXTENSIBILITY)rã   r   rå   )Úfb_internal_macross    r   Ú_use_fb_internal_macrosr%  1  s0   € ßŠ;Ü×Ò×Ñò"Ðð
 &Ð%àˆIàˆ	r!   rm  c                 ó`  • / n/ n/ n[         (       a  X4U4$ [        R                  " 5       (       Gaû  UR                  S5        UR                  [        R
                  5        UR                  [        R                  5        UR                  [        R                  5        UR                  [        R                  5        UR                  [        R                  5        UR                  [        R                  5        UR                  [        R                  5        UR                  [        R                  5        UR                  [        R                  5        UR                  S5        U(       a  U(       d  [        nO#[        R                   R#                  [        5      n[%        U 5      (       az  UR                  S5        UR                  S5        UR                  SU 35        UR                  S[        R&                  -   5        UR                  S[        R&                  -   5        X4U4$ )NÚnostdincÚincludez --rtlib=compiler-rtz -fuse-ld=lldz -Wl,--script=z -Bz -L)rã   r   rå   r’   r   Úsleef_includeÚopenmp_includeÚpython_includeÚ
cc_includeÚlibgcc_includeÚlibgcc_arch_includeÚlibgcc_backward_includeÚglibc_includeÚlinux_kernel_includeÚ_LINKER_SCRIPTr5   r8   Úbasenamer  Ú	glibc_lib)rÿ   rm  rë   rh  rg  rl  Úlinker_scripts          r   Ú_setup_standard_sys_libsr6  @  sž  € ð
 €FØ €LØ"$Ðß‚{ØÐ%5Ð5Ð5ä×Ò×Òà�‰�jÔ!ð 	×ÑœK×5Ñ5Ô6Ø×ÑœK×6Ñ6Ô7Ø×ÑœK×6Ñ6Ô7Ø×ÑœK×2Ñ2Ô3Ø×ÑœK×6Ñ6Ô7Ø×ÑœK×;Ñ;Ô<Ø×ÑœK×?Ñ?Ô@Ø×ÑœK×5Ñ5Ô6Ø×ÑœK×<Ñ<Ô=Ø×Ñ˜IÔ&æÖ-Ü*‰MäŸG™G×,Ñ,¬^Ó<ˆMä�\×"Ñ"Ø×#Ñ#Ð$:Ô;Ø×#Ñ# OÔ4Ø×#Ñ# n°]°OÐ$DÔEØ×#Ñ# E¬K×,AÑ,AÑ$AÔBØ×#Ñ# E¬K×,AÑ,AÑ$AÔBàÐ!1Ð1Ð1r!   Úvec_isac                 ó  • / n/ nU [         :w  ay  UR                  S U R                  5        5       5        U R                  5       /n[        R
                  " 5       (       a(  [        U 5      R                  5       nSU 3SU 3SU S3/nX4$ )Nc              3   óN   #   • U  H  n[         R                  " U5      v •  M     g 7fr   r2  )r4  Úxs     r   r6  Ú0_get_build_args_of_chosen_isa.<locals>.<genexpr>o  s   é € ÐFÒ0E¨1”d—m’m A×&Ð&Ò0Eùr8  zCPU_CAPABILITY=ÚCPU_CAPABILITY_ÚHAVE_Ú_CPU_DEFINITION)r   r9  Úbuild_macroÚbuild_arch_flagsr   rå   r£   Úupper)r7  ÚmacrosÚbuild_flagsÚcaps       r   Ú_get_build_args_of_chosen_isarE  j  s“   € Ø€FØ€KØ”/Ó!à�‰ÑF°×0CÑ0CÔ0EÓFÔFà×/Ñ/Ó1Ð2ˆä×Ò×ÑÜ�g“,×$Ñ$Ó&ˆCà! # Ð'Ø! # Ð'Ø˜�u˜OÐ,ðˆFð ÐÐr!   Úinclude_pytorchc                 ód  • SSK JnJn  / nU" 5       n[        R                  R
                  (       a]  U/n[        R                  S:w  aE  [        R                  " 5       (       d+  UR                  SS/5        U(       d  UR                  S5        O—/ n[        R                  R                  S:X  aw  [        R                  R                  nU(       d   S5       e[        U[        5      (       a  UR                  U5        O([        U[        5      (       d   eUR                  U5        [        R                  R                  S:X  aO  [        R                  R                   (       d   S	5       eUR                  [        R                  R                   5        ["        (       a  UR                  S
5        XVU4$ )Nr   )Úinclude_pathsÚTORCH_LIB_PATHr'   ÚtorchÚ	torch_cpuÚtorch_pythonrÜ   z^'config.aot_inductor.aoti_shim_library' must be set when 'cross_target_platform' is 'windows'.)z]'config.aot_inductor.aoti_shim_library_path' must be set to the path of the AOTI shim libraryz+ when 'cross_target_platform' is 'windows'.Úsleef)Útorch.utils.cpp_extensionrH  rI  r   rß   Úlink_libtorchr3   r4   rå   r9  r’   rà   Úaoti_shim_libraryrç   r£   ré   Úaoti_shim_library_pathrã   )rF  rm  rH  rI  rk  rg  rj  rP  s           r   Ú_get_torch_related_argsrR  ~  sY  € ÷ Hà€IÙ “?€Lä×Ñ×(×(Ø(Ð)ˆÜ�<‰<˜8Ó#¬F×,<Ò,<×,>Ñ,>Ø×Ñ˜g {Ð3Ô4ÞØ× Ñ  Ô0øàˆÜ×Ñ×4Ñ4¸	ÓAÜ &× 3Ñ 3× EÑ EÐæ$ð ØpóÐ$ô Ð+¬S×1Ñ1Ø× Ñ Ð!2Õ3ä!Ð"3´T×:Ñ:Ð:Ð:Ø× Ñ Ð!2Ô3ä×Ñ×0Ñ0°IÓ=Ü×"Ñ"×9×9ð 	
ð <
ó 	
Ð9ð 	×Ñœf×1Ñ1×HÑHÔIç‚{Ø×Ñ˜Ô!à¨Ð2Ð2r!   c                  ó´  • [        [        R                  " S5      5      n U R                  5       (       d_  [        R
                  " 5       S:X  aF  [        [        R                  " S5      5      nUR                  R                  S-  R                  5       n U S-  R                  5       (       d"  [        R                  " S[        U 5       35        [        U 5      /$ )Nr(  r  ÚstdlibÚHeaderszPython.hzCan't find Python.h in )r   Ú	sysconfigÚget_pathrM   r4   r  ÚparentÚabsoluteÚwarningsÚwarnr£   )Úinclude_dirÚstd_libs     r   Ú_get_python_include_dirsr^  §  s¤   € Ü”y×)Ò)¨)Ó4Ó5€Kð ×Ñ×Ñ¤H§O¢OÓ$5¸Ó$AÜ”y×)Ò)¨(Ó3Ó4ˆØ—~‘~×,Ñ,¨yÑ8×BÑBÓDˆØ˜*Ñ$×,Ñ,×.Ñ.Ü�ŠÐ/´°KÓ0@Ð/AÐBÔCÜ�ÓÐÐr!   c            	      óÆ  • [        5       n [        R                  " S[        (       a  SOSS9nUb  U R	                  U5        [        (       aD  [        [        [        R                  " SSS95      R                  S-  R                  5       5      /nO[        R                  " S5      /n[        R                  " 5       (       a  U R	                  [        R                  5        X4$ )Nr(  ÚntÚposix_prefix)ÚschemeÚlibsÚLIBDIR)r^  rV  rW  rã   r’   r£   r   rX  rY  Úget_config_varr   rå   r   r+  )Úpython_include_dirsÚpython_include_pathÚpython_lib_paths      r   Ú_get_python_related_argsri  ´  sº   € Ü2Ó4ÐÜ#×,Ò,Ø§+¢+™$°>ñÐð Ñ&Ø×"Ñ"Ð#6Ô7ç‚{ääœ×+Ò+¨I¸dÑCÓD×KÑKÈfÑTß‘(“*óð
‰ô %×3Ò3°HÓ=Ð>ˆä×Ò×ÑØ×"Ñ"¤;×#=Ñ#=Ô>àÐ/Ð/r!   c                  óò   •  Sn [         R                  " U R                  5       5      R                  S5      n[	        [
        R                  " U5      5      S:„  $ ! [         R                  [        4 a     gf = f)Nzconda list llvm-openmp --jsonr  r   F)	r;   r<   rÔ   r  Úlenr¹  Úloadsr=   r>   )ÚcommandrY  s     r   Úis_conda_llvm_openmp_installedrn  Í  sd   € ðØ1ˆÜ×(Ò(¨¯©«Ó9×@Ñ@ÀÓHˆÜ”4—:’:˜fÓ%Ó&¨Ñ*Ð*øÜ×&Ñ&Ô(9Ð:ó Ùðús   ‚AA ÁA6Á5A6c                  ó  •  [         R                  " S5      c  g[        R                  " / SQ5      R	                  S5      R                  5       n [        R                  R                  U 5      nX4$ ! [        R                   a     gf = f)NÚbrewr©   )rp  z--prefixrV  r  )
rR   rS   r;   r<   r  r¸   r5   r8   rM   r=   )Úlibomp_pathÚomp_availables     r   Úhomebrew_libomprs  ×  st   € ðä�<Š<˜ÓÑ'Øô
 ×#Ò#Ò$BÓCß‰V�F‹^ß‰U‹Wð 	ô Ÿ™Ÿ™ {Ó3ˆØÐ)Ð)øÜ×%Ñ%ó Ùðús   ‚A1 šAA1 Á1BÂBÚomp_namec                 ó€  •  [         R                  " U S/5      R                  S5      n[        R                  R                  UR                  5       U5      n[        R                  R                  U5      (       a*  S[        R                  S'   [        R                  " U5        g g ! [         R                   a     g f = f)Nz-print-file-name=binr  ÚTRUEÚKMP_DUPLICATE_LIB_OK)r;   r<   r  r5   r8   r9   ÚrstripÚisfilerP   r   ÚLoadLibraryr=   )rÿ   rt  rY  Úomp_paths       r   Úperload_clang_libomp_winr|  ì  s–   € ð	Ü×(Ò(¨,Ð8NÐ)OÓP×WÑWØó
ˆô —7‘7—<‘< §¡£°Ó:ˆÜ�7‰7�>‰>˜(×#Ñ#Ø17ŒB�J‰JÐ-Ñ.Ü×Ò˜XÕ&ð $øô ×%Ñ%ó Ùðús   ‚B"B& Â&B=Â<B=c                 ó^   • S[         S[         S[        4S jn / SQnU H  nU" X5        M     g )Nrÿ   Úlib_namer   c                 ój  •  [         R                  " U SU 3/[         R                  S9R                  " [        6 nUR                  5       n[        R                  R                  U5      (       a*  S[        R                  S'   [        R                  " U5        g g! [         R                   a     gf = f)Nz-print-file-name=r[   rv  rw  TF)r;   r<   r  r  r  rx  r5   r8   ry  rP   r   rz  r=   )rÿ   r~  rY  r{  s       r   Ú_load_icx_built_in_lib_by_nameÚ>perload_icx_libomp_win.<locals>._load_icx_built_in_lib_by_nameü  s­   € ð	Ü×,Ò,ØÐ!2°8°*Ð=Ð>Ü!×)Ñ)ñ÷ ‰fðô -ð.ˆFð —}‘}“ˆHÜ�w‰w�~‰~˜h×'Ñ'Ø5;”—
‘
Ð1Ñ2Ü× Ò  Ô*Øð (ð øô ×)Ñ)ó 	ØØð	ús   ‚BB ÂB2Â1B2)zlibiomp5md.dllzsvml_dispmd.dllz
libmmd.dll)r£   rÈ   )rÿ   r€  Úpreload_listr~  s       r   Úperload_icx_libomp_winrƒ  ú  s<   € ð´Sð ÄCð ÌDô ðò€Ló !ˆÙ& |Ö>ò !r!   c                 ó	  • / n/ n/ n/ n/ n/ n[         R                  R                  S:X  a  XX4XV4$ [        (       Ga«  UR	                  S5        UR	                  S5        [        U 5      (       + n[        R                  " S5      nUbÇ  [        R                  R                  USS5      n	[        R                  R                  U	5      n
U
(       a_  UR	                  [        R                  R                  US5      5        UR	                  [        R                  R                  US5      5        O[        R                  " S5        U=(       d    U
nU(       d  UR	                  S	5        [        R                  " S
5      nU(       dê  Ubç  [        5       nU(       aÖ  [        R                  R                  US5      nUR	                  [        R                  R                  US5      5        UR	                  U5        [        R                  " 5       R                  S:X  aS  [        R                  R                  [        R                  R                  US5      5      (       a  UR	                  S5        U(       dq  [!        5       u  p}U(       a^  UR	                  [        R                  R                  US5      5        UR	                  [        R                  R                  US5      5        GO–["        (       a£   [%        U 5      (       a0  UR	                  S5        UR	                  S5        ['        U S5        GOJ[)        U 5      (       a/  UR	                  S5        UR	                  S5        [+        U 5        GOUR	                  S5        UR	                  S5        Oè[         R,                  " 5       (       aW  UR	                  [.        R0                  5        [.        R2                  nSU 3nUR	                  U5        UR	                  S	5        Ow[%        U 5      (       a#  UR	                  S5        UR	                  S5        OD[)        U 5      (       a  UR	                  S5        O"UR	                  S5        UR	                  S5        XX4XV4$ )NrÜ   ÚXclangÚfopenmpÚ
OMP_PREFIXr(  zomp.hÚlibz-environment variable `OMP_PREFIX` is invalid.ÚompÚCONDA_PREFIXÚx86_64zlibiomp5.dylibÚiomp5ÚopenmprV  z
libomp.dllÚQiopenmpÚ
libiomp5mdzopenmp:experimentalz-Wp,-fopenmp ÚgompÚfiopenmp)r   rß   rà   Ú	_IS_MACOSr’   r  r5   r6   r8   r9   rM   rZ  r[  rn  Úunamerü  rs  rã   r  r|  r  rƒ  rå   r   r*  Úopenmp_lib_so)rÿ   rh  ri  Úinclude_dir_pathsÚlib_dir_pathsrc  rl  rr  Ú
omp_prefixÚheader_pathÚ	valid_envÚconda_prefixÚconda_lib_pathrq  Ú
openmp_libÚfb_openmp_extra_flagss                   r   Ú_get_openmp_argsrž    sC  € ð €FØ€GØ#%ÐØ!€MØ€DØ"$Ðä×Ñ×0Ñ0°IÓ=ØÐ 1À$ÐXÐXßƒyà�‰�hÔØ�‰�iÔ ô ,¨LÓ9Ô9ˆô —Y’Y˜|Ó,ˆ
ØÑ!ÜŸ'™'Ÿ,™, z°9¸gÓFˆKÜŸ™Ÿ™ {Ó3ˆIÞØ!×(Ñ(¬¯©¯©°jÀ)Ó)LÔMØ×$Ñ$¤R§W¡W§\¡\°*¸eÓ%DÕEä—’ÐMÔNØ)×6¨YˆMæØ�K‰K˜Ôô —y’y Ó0ˆÞ Ñ!9Ü:Ó<ˆMÞÜ!#§¡§¡¨l¸EÓ!B�Ø!×(Ñ(¬¯©¯©°lÀIÓ)NÔOØ×$Ñ$ ^Ô4ä—8’8“:×%Ñ%¨Ó1´b·g±g·n±nÜ—G‘G—L‘L Ð1AÓB÷7ñ 7ð —K‘K Ô(ö Ü)8Ó):Ñ&ˆMÞØ!×(Ñ(¬¯©¯©°kÀ9Ó)MÔNØ×$Ñ$¤R§W¡W§\¡\°+¸uÓ%EÔFù÷ 
Šð	ô �\×"Ñ"Ø�M‰M˜(Ô#Ø�K‰K˜Ô!Ü$ \°<Ö@Ü ×-Ñ-Ø�M‰M˜*Ô%Ø�K‰K˜Ô%Ü" <Ö0ð
 �M‰M˜(Ô#Ø�M‰MÐ/Õ0ä×Ò×ÑØ×$Ñ$¤[×%?Ñ%?Ô@ä$×2Ñ2ˆJØ&3°J°<Ð$@Ð!Ø×#Ñ#Ð$9Ô:à�K‰K˜Õä˜×&Ñ&à—‘˜iÔ(Ø—‘˜FÕ#Ü# L×1Ñ1Ø—‘˜jÕ)à—‘˜iÔ(Ø—‘˜FÔ#àÐ-¸dÐTÐTr!   c                  ó”   • / n / n[         R                  " 5       (       a(  [        R                  " S5      /n UR	                  S5        X4$ )z
For fbcode cpu case, we should link stdc++ instead assuming the binary where dlopen is executed is built with dynamic stdc++.
rd  zstdc++)r   rå   rV  re  r’   )r–  rc  s     r   Ú_get_libstdcxx_argsr   ‡  sE   € ð  "€MØ€DÜ×Ò×ÑÜ"×1Ò1°(Ó;Ð<ˆØ�‰�HÔàÐÐr!   Úuse_mmap_weightsÚuse_mmap_weights_externalc                 ó    • / nU (       a  U(       a  [        S5      eU (       a  UR                  S5        U$ U(       a  UR                  S5        U$ )NzIOnly one of use_mmap_weights and use_mmap_weights_external should be truez USE_MMAP_SELFz USE_MMAP_EXTERNAL)r`   r’   )r¡  r¢  rB  s      r   Úget_mmap_self_macror¤  ”  sO   € ð €FæÖ5ÜØWó
ð 	
ö Ø�‰Ð&Ô'ð €Mö 
#Ø�‰Ð*Ô+Ø€Mr!   c                  ón   • SSK Jn   / nU R                  R                  (       a  UR	                  S5        U$ )Nr   )r   z# AOT_INDUCTOR_USE_CACHING_ALLOCATOR)Útorch._inductorr   rß   Úweight_use_caching_allocatorr’   )r   rB  s     r   Úget_caching_allocator_macror¨  ¤  s+   € Ý&à€FØ×Ñ×7×7Ø�‰Ð;Ô<Ø€Mr!   c                 óš  • / n/ n/ n	/ n
/ n/ n/ n[        5       n[        5       n[        XU5      u  nnn[        U5      u  nn[	        X#S9u  nnn[        5       u  nn[        U 5      u  nnnnnn[        5       n [        XV5      n![        5       n"UU-   U-   U -   U!-   U"-   nUU-   U-   U-   nUU-   n	Un
UU-   U-   nUU-   nUU-   U-   nUUU	U
UUU4$ )a  
This function is used to get the build args of torch related build options.
1. Torch include_directories, libraries, libraries_directories.
2. Python include_directories, libraries, libraries_directories.
3. OpenMP related.
4. Torch MACROs.
5. MISC
6. Return the build args
)rF  rm  )
r  r  r6  rE  rR  ri  rž  r%  r¤  r¨  )#rÿ   r7  rF  rm  rë   r¡  r¢  rf  rg  rh  ri  rj  rk  rl  Útorch_cpp_wrapper_definitionsÚ'use_custom_generated_macros_definitionsÚsys_libs_cflagsÚsys_libs_include_dirsÚsys_libs_passthrough_argsÚ
isa_macrosÚisa_ps_args_build_flagsÚtorch_include_dirsÚtorch_libraries_dirsÚtorch_librariesrf  Úpython_libraries_dirsÚ
omp_cflagsÚomp_ldflagsÚomp_include_dir_pathsÚomp_lib_dir_pathsÚomp_libÚomp_passthrough_argsÚfb_macro_passthrough_argsÚmmap_self_macrosÚcaching_allocator_macross#                                      r   Úget_cpp_torch_optionsr¾  ­  s�  € ð$  €KØ €LØ€FØ€GØ "€NØ€IØ"$Ðä$EÓ$GÐ!Ü.JÓ.LÐ+ô 	! Ð9JÓKñ	ØØØ!ô +HÈÓ*PÑ'€JÐ'ô 	 °ÑSñ	ØØØô 2JÓ1KÑ.ÐÐ.ô 	˜Ó&ñØØØØØØô !8Ó 9Ðä*Ð+;ÓWÐÜ:Ó<Ðð 	&Ø
1ñ	2à
ñ	ð $ñ	$ð ñ		ð
 #ñ	#ð ð 	Ø
ñ	à
ñ	ð  ñ	 ð ð ˜zÑ)€FØ€GØ*Ð-AÑAÐDUÑU€NØ 'Ñ)€Ià!Ð$;Ñ;Ð>RÑRð ð
 	ØØØØØØðð r!   c                   ó’   ^ • \ rS rSrSr\SSSSSSSSSSSSS4S\S\S	\S
\S\S\S\S\S\S\\	   S\	S\S\S\SS4U 4S jjjr
SrU =r$ )ÚCppTorchOptionsi	  aB  
This class is inherited from CppTorchOptions, which automatic contains
base cxx build options. And then it will maintains torch related build
args.
1. Torch include_directories, libraries, libraries_directories.
2. Python include_directories, libraries, libraries_directories.
3. OpenMP related.
4. Torch MACROs.
5. MISC
FTr   rª   r7  rF  rÀ  rm  rn  rë   r¡  r¢  r	  r  rX   rè  ro  rp  r   Nc                 óÐ  >• [         TU ]  UUU
UUUUUS9  X@l        [        U R                  UUUUUUS9u  nnnnnnn[        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        U R                  5         g )N)rn  rÀ  r  rë   rX   rè  ro  rp  )rÿ   r7  rF  rm  rë   r¡  r¢  )r  rm   r{  r¾  rr  r:  rs  rt  ru  rv  rw  rx  ry  rˆ  )rl   r7  rF  rÀ  rm  rn  rë   r¡  r¢  r	  r  rX   rè  ro  rp  Útorch_definitionsr±  Útorch_cflagsÚtorch_ldflagsr²  r³  Útorch_passthrough_argsr  s                         €r   rm   ÚCppTorchOptions.__init__  sï   ø€ ô" 	‰ÑØ%Ø#Ø#Ø/ØØ%Ø%Ø'ð 	ñ 		
ð "Œô "ØŸ™ØØ+ØØ/Ø-Ø&?ñ
ñ	
ØØØØØ ØØ"ô 	�T×&Ñ&Ð(9Ô:Ü�T×'Ñ'Ð);Ô<Ü�T—\‘\ <Ô0Ü�T—]‘] MÔ2Ü�T×)Ñ)Ð+?Ô@Ü�T—_‘_ oÔ6Ü�T×+Ñ+Ð-CÔDØ×ÑÕ r!   r¦  )rŸ   r    r¡   r¢   r¿  r   r   rÈ   r   r£   rm   r¤   r  r  s   @r   rÀ  rÀ  	  sÖ   ø† ñ	ð *Ø %Ø ØØ"Ø"'Ø!&Ø*/ØØ%'ØØ"Ø"Ø#ñ7!àð7!ð ð7!ð ð	7!ð
 ð7!ð ð7!ð  ð7!ð ð7!ð $(ð7!ð ð7!ð ˜c‘]ð7!ð ð7!ð ð7!ð ð7!ð ð7!ð  
÷!7!ö 7!r!   rÀ  c                  ó  • [         R                  " 5       (       ah  [        R                  R                  cL  S[
        R                  ;  a7  S[
        R                  ;  a"  [        R                  [
        R                  S'   g g g g g )NÚ	CUDA_HOMEÚ	CUDA_PATH)	r   rå   rJ  ÚversionÚhipr5   rP   r   Úsdk_homer   r!   r   Ú_set_gpu_runtime_envrÍ  O  sa   € ä×Ò×ÑÜ�M‰M×ÑÑ%ØœrŸz™zÓ)ØœrŸz™zÓ)ä"-×"6Ñ"6Œ�
‰
�;Òð *ð *ð &ð 	r!   é   r8   c                 óÆ   • [        [        U 5      R                  S5      5      nU(       a  US   R                  5       R                  $ SU  3n[
        R                  U5        g )Nzlibcudart_static.ar   z%"libcudart_static.a" not found under )ré   r   ÚrglobÚresolverX  rN   rO   )r8   Úlib_dirsÚlog_msgs      r   Ú_find_libcudart_staticrÔ  Y  sS   € ä”D˜“J×$Ñ$Ð%9Ó:Ó;€HÞØ˜‰{×"Ñ"Ó$×+Ñ+Ð+Ø5°d°VÐ<€GÜ‡H�HˆWÔØr!   Úlpathsc                 óP  • [        U 5       H—  u  pS[        R                  ;   d  M  UR                  [        R                  S   5      (       d  MD  [	        U5      nUc  MT  [        U5      X'   US-  nUR                  5       (       d  M}  U R                  [        U5      5        M™     g )NrÈ  Ústubs)Ú	enumerater5   rP   Ú
startswithrÔ  r£   rM   r’   )rÕ  r˜   r8   Úlib_dirÚstub_dirs        r   Ú_transform_cuda_pathsrÜ  c  s|   € ô ˜VÖ$‰ˆØœ"Ÿ*™*Õ$¨¯©¼¿¹ÀKÑ9P×)QÓ)QÜ&<¸TÓ&BˆGØ‰ÙÜ˜G›ˆF‰IØ Ñ(ˆHØ�‰× Ó Ø—‘œc (›mÖ,ò %r!   Údevice_typern  c                 ó  • / n/ n/ n/ n/ n/ n/ n	[         R                  " 5       (       aI  S[        R                  ;  a5  S[        R                  ;  a!  [        R
                  [        R                  S'   [        5         SSKJn
  U
R                  U [         R                  R                  SL 5      n[         R                  R                  nU
R                  U U[         R                  R                  S9nU S:X  aë  UR                  [        R                   R"                  (       a  SOS	5        [        R                   R"                  b@  [         R                  " 5       (       d  U(       d  US
/-  nOUS/-  nUR                  S5        O^[         R                  " 5       (       d  U(       d  US/-  nOUSS/-  n[         R                  R                  S:X  a  US/-  n[%        U5        U S:X  aÀ  UR                  S5        Sn[&        (       am  [        R(                  " S5      nUc  [+        U5      eU[        R,                  R/                  US5      /-  nU[        R,                  R/                  US5      /-  nO!US/-  n[1        S5      (       d  [+        U5      eUSS/-  nU(       a  US/-  nU S:X  a  UR                  S5        [         R                  " 5       (       al  UR                  [        R2                  5        U(       a+  U S:X  a%  [        R                   R"                  c
  U(       d  S/n	U S:X  a  [5        5       u  nnX~-  nX�-  n[         R                  R6                  (       a  U[         R                  R6                  -  nUUUUUUU	4$ )zÂ
This function is used to get the build args of device related build options.
1. Device include_directories, libraries, libraries_directories.
2. Device MACROs.
3. MISC
4. Return the build args
rÈ  rÉ  r   )Úcpp_extensionN)r±  rà   Úcudaz	 USE_ROCMz	 USE_CUDAÚamdhip64Ú	torch_hipz __HIP_PLATFORM_AMD__Ú
torch_cudarÜ   ÚcudartÚxpuz USE_XPUz•Intel GPU driver is not properly installed, please follow the instruction in https://github.com/pytorch/pytorch?tab=readme-ov-file#intel-gpu-support.ÚLEVEL_ZERO_V1_SDK_PATHr(  rˆ  zWno-commentÚ	ze_loaderÚsyclÚ	torch_xpuÚmpsz USE_MPSz*-Wl,-Bstatic -lcudart_static -Wl,-BdynamicÚcpu)r   rå   r5   rP   r   rÌ  rÍ  Útorch.utilsrß  rH  rß   rO  Úlibrary_pathsrà   r’   rJ  rÊ  rË  rÜ  rã   r6   rD  r8   r9   r   Úsdk_includer   Úcustom_op_libs)rÝ  rm  rn  rf  rg  rh  ri  rj  rk  rl  rß  rO  Úxpu_error_stringÚze_rootÚstdcxx_lib_dir_pathsÚstdcxx_libss                   r   Úget_cpp_torch_device_optionsrô  r  s$  € ð  €KØ €LØ€FØ€GØ "€NØ€IØ"$Ðä×Ò×ÑØœrŸz™zÓ)ØœrŸz™zÓ)ä"-×"6Ñ"6Œ�
‰
�;ÑäÔÝ)à ×.Ñ.Ø”V×(Ñ(×6Ñ6¸$Ð>ó€Lô ×'Ñ'×5Ñ5€MØ"×0Ñ0ØØ(Ü$×1Ñ1×GÑGð 1ð €Nð
 �fÓØ×Ñ¬%¯-©-×*;×*;™;ÀÔMä�=‰=×ÑÑ(Ü×Ò×!Ñ!®Ø˜j˜\Ñ)‘	à˜k˜]Ñ*�	Ø×ÑÐ6Õ7ä×Ò×!Ñ!®Ø˜f˜XÑ%‘	à˜f lÐ3Ñ3�	Ü×"Ñ"×8Ñ8¸IÓEØ˜h˜ZÑ'�	Ü! .Ô1à�eÓØ×Ñ˜:Ô&ðZð 	÷ Š;Ü—i’iÐ 8Ó9ˆGØ‰ÜÐ.Ó/Ð/ØœRŸW™WŸ\™\¨'°9Ó=Ð>Ñ>ˆLØœrŸw™wŸ|™|¨G°UÓ;Ð<Ñ<‰Nð �}�oÑ%ˆFÜ ×,Ñ,ÜÐ.Ó/Ð/à�k 6Ð*Ñ*ˆ	ÞØ˜+˜Ñ&ˆIà�eÓØ×Ñ˜:Ô&ä×Ò×ÑØ×ÑœK×3Ñ3Ô4æ˜ vÓ-Ü�}‰}× Ñ Ñ(Þ#à(TÐ'UÐ$à˜%Óô $Ó%ñØ$ØàÑ2ˆNØÑ$ˆIä×Ñ×)×)Ø”V×(Ñ(×7Ñ7Ñ7ˆ	ð 	ØØØØØØðð r!   c                   óœ   ^ • \ rS rSrSr\SSSSSSSSSSSS4S\S\S	\S
\S\S\S\S\S\S\	\   S\S\S\SS4U 4S jjjr
SU 4S jjrSrU =r$ )ÚCppTorchDeviceOptionsiâ  z¾
This class is inherited from CppTorchOptions, which automatic contains
base cxx build options and torch common build options. And then it will
maintains cuda/xpu device related build args.
Frà  Tr   r7  rF  rÝ  rm  rn  rë   r¡  r¢  r	  r  rè  ro  rp  r   Nc                 óÊ  >• [         TU ]  UUUUUUUU
UUUS9  / n/ n/ n/ n/ n/ n/ n[        UUUS9u  nnnnnnn[        U R                  U5        [        U R
                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        [        U R                  U5        U R                  5         g )N)r7  rF  rm  rn  rë   r¡  r¢  r  rè  ro  rp  )rÝ  rm  rn  )r  rm   rô  r:  rs  rt  ru  rv  rw  rx  ry  rˆ  )rl   r7  rF  rÝ  rm  rn  rë   r¡  r¢  r	  r  rè  ro  rp  Údevice_definitionsÚdevice_include_dirsÚdevice_cflagsÚdevice_ldflagsÚdevice_libraries_dirsÚdevice_librariesÚdevice_passthrough_argsr  s                        €r   rm   ÚCppTorchDeviceOptions.__init__é  s  ø€ ô  	‰ÑØØ+ØØ%Ø/Ø-Ø&?Ø#Ø%Ø%Ø'ð 	ñ 	
ð )+ÐØ)+ÐØ#%ˆØ$&ˆØ+-ÐØ&(ÐØ-/Ðô )Ø#ØØ%ñ
ñ	
ØØØØØ!ØØ#ô 	�T×&Ñ&Ð(:Ô;Ü�T×'Ñ'Ð)<Ô=Ü�T—\‘\ =Ô1Ü�T—]‘] NÔ3Ü�T×)Ñ)Ð+@ÔAÜ�T—_‘_Ð&6Ô7Ü�T×+Ñ+Ð-DÔEØ×ÑÕ r!   c                 óB  >• [         TU ]  5         [        R                  " 5       (       av  [	        5       u  p[        U5      S:X  d
   SU 35       eUS   U R                  ;   a=  U R                  R                  US   5        U R                  R                  US   5        g g g )Nr)   zPython lib dirs: r   )	r  rˆ  r   rå   ri  rk  rw  rK  r’   )rl   rø   Úpython_lib_dirsr  s      €r   rˆ  Ú'CppTorchDeviceOptions._finalize_options%  sš   ø€ Ü‰Ñ!Ô#Ü×Ò×Ñô ":Ó!;ÑˆAÜ�Ó'¨1Ó,ÐSÐ0AÀ/ÐARÐ.SÓSÐ,Ø˜qÑ! T×%9Ñ%9Ó9Ø×$Ñ$×+Ñ+¨O¸AÑ,>Ô?Ø×$Ñ$×+Ñ+¨O¸AÑ,>Õ?ð :ð r!   rž   )rŸ   r    r¡   r¢   r¿  r   r   rÈ   r£   r   rm   rˆ  r¤   r  r  s   @r   rö  rö  â  sÖ   ø† ñð *Ø %Ø!ØØ"Ø"'Ø!&Ø*/ØØ%'Ø"Ø"Ø#ñ:!àð:!ð ð:!ð ð	:!ð
 ð:!ð ð:!ð  ð:!ð ð:!ð $(ð:!ð ð:!ð ˜c‘]ð:!ð ð:!ð ð:!ð ð:!ð 
÷:!ð :!÷x	@õ 	@r!   rö  re   c                 óÆ   • [         R                  R                  U 5      n[         R                  R                  U5      u  p#[         R                  R	                  U 5      nX$4$ )a�  
This function help prepare parameters to new cpp_builder.
Example:
    input_code: /tmp/tmpof1n5g7t/5c/c5crkkcdvhdxpktrmjxbqkqyq5hmxpqsfza4pxcf3mwk42lphygc.cpp
    name, dir = get_name_and_dir_from_output_file_path(input_code)
Run result:
    name = c5crkkcdvhdxpktrmjxbqkqyq5hmxpqsfza4pxcf3mwk42lphygc
    dir = /tmp/tmpof1n5g7t/5c/

put 'name' and 'dir' to CppBuilder's 'name' and 'output_dir'.
CppBuilder --> get_target_file_path will format output path according OS:
Linux: /tmp/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.so
Windows: [Windows temp path]/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.dll
)r5   r8   r3  ÚsplitextÚdirname)re   Úname_and_extrP  Ú_extÚdirs        r   Ú&get_name_and_dir_from_output_file_pathr	  1  sH   € ô" —7‘7×#Ñ# IÓ.€LÜ—‘×!Ñ! ,Ó/�J€DÜ
�'‰'�/‰/˜)Ó
$€Càˆ9Ðr!   c                   ób  • \ rS rSrSr\S\\\4   4S j5       r\S\\\4   4S j5       r	\S\\\4   4S j5       r
\S\\\4   4S j5       r SS\S	\\\\   4   S
\S\SS4
S jjrS\4S jrS\4S jr  SS jrSS jrS\S\SS4S jrS\S\SS4S jrS\S\\   SS4S jrS\SS4S jrSrg)Ú
CppBuilderiI  ag  
CppBuilder is a cpp jit builder, and it supports both Windows, Linux and MacOS.
Args:
    name:
        1. Build target name, the final target file will append extension type automatically.
        2. Due to the CppBuilder is supports multiple OS, it will maintains ext for OS difference.
    sources:
        Source code file list to be built.
    BuildOption:
        Build options to the builder.
    output_dir:
        1. The output_dir the target file will output to.
        2. The default value is empty string, and then the use current dir as output dir.
        3. Final target file: output_dir/name.ext
r   c                  óD   • [         (       a  SOSn [         (       a  SOSnX4$ )Nz.pydú.soz/Feú-orÃ  ©Ú	extensionÚoutput_flagss     r   Ú__get_python_module_flagsÚ$CppBuilder.__get_python_module_flagsZ  s!   € ç)šk‘F¨uˆ	ß +¢‘u°ˆØÐ&Ð&r!   c                  óD   • [         (       a  SOSn [         (       a  SOSnX4$ )Nz.objrô   z/c /Foz-c -orÃ  r  s     r   Ú__get_object_flagsÚCppBuilder.__get_object_flags`  s!   € ç)šk‘F¨tˆ	ß#.¢;‘x°GˆØÐ&Ð&r!   c                  ób   • [         (       d  [        5       (       d  SOSn [         (       a  SOSnX4$ )Nz.pchz.gchz/Fpr  )rã   r  r  s     r   Ú__get_precompiled_header_flagsÚ)CppBuilder.__get_precompiled_header_flagsf  s'   € ç)šk´·±‘F¸vˆ	ß +¢‘u°ˆØÐ&Ð&r!   c                  ó*   • Sn [         (       a  SOSnX4$ )Nz.iz/EP /Pz-E -P -orÃ  r  s     r   Ú__get_preprocessor_output_flagsÚ*CppBuilder.__get_preprocessor_output_flagsl  s   € àˆ	ß#.¢;‘x°JˆØÐ&Ð&r!   rP  ÚsourcesÚBuildOptionÚ
output_dirNc                 ól  • SU l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        / U l        SU l	        SU l
        SU l        SU l        Xl        [        R                  R                   =(       d    SU l        X0l        UR'                  5       U l         UR)                  5       U l        UR+                  5       U l        X@l	        UR-                  5       U l        UR1                  5       U l        UR5                  5       U l        [9        U R.                  U R2                  U R6                  45      S::  d   eU R.                  =(       d    U R2                  =(       d    U R6                  (       + U l        [<        (       a  U R2                  (       a   S5       eU R.                  (       a  U R?                  5       u  pVOZU R2                  (       a  U RA                  5       u  pVO6U R6                  (       a  U RC                  5       u  pVOU RE                  5       u  pV[F        RH                  RK                  U R                  U R                   U 35      U l
        U R                  (       a)  [F        RH                  RM                  U R                  5      OU R                  n[<        (       a$  U R6                  (       a  X`l'        OU U 3U l'        OU SU 3U l'        [Q        U[R        5      (       a  U/n[        RT                  " 5       (       aP  U R                  (       a?  [W        U5      U l        U Vs/ s H"  n[F        RH                  RM                  U5      PM$     nnU R2                  (       a  [Y        U5      S:X  d   eSUS    3U l-        OSRK                  U5      U l-        UR]                  5        HB  n	[<        (       a  U =R                  S	U	 S3-  sl        M)  U =R                  S
U	 S3-  sl        MD     UR_                  5        HB  n
[<        (       a  U =R                  SU
 S3-  sl        M)  U =R                  SU
 S3-  sl        MD     UR`                  =n(       a-  [<        (       a  [b        Re                  SU5        OSU S3U l        URg                  5        HV  n[<        (       a  U =R                  SU S3-  sl        M)  U =R                  S[h        Rj                  " U5       S3-  sl        MX     URm                  5        HB  n[<        (       a  U =R                  S	U S3-  sl        M)  U =R                  S
U S3-  sl        MD     URo                  5        HB  n[<        (       a  U =R
                  SU S3-  sl        M)  U =R
                  SU S3-  sl        MD     URq                  5        HB  n[<        (       a  U =R                  SU S3-  sl        M)  U =R                  SU S3-  sl        MD     URs                  5        H  nU =R                  U S3-  sl        M     g s  snf )Nrª   FÚ
aoti_modelr)   z/Cannot currently precompile headers on Windows!rõ   z-x c++-header r   rb  Ú-z/D z-D zIPrecompiled header support for MSVC is currently unavailable; ignoring %sz	-include z/I "z" z-Iz
/LIBPATH:"z-LÚ"z.lib" z-l):rr  Ú_cflags_argsÚ_definitions_argsÚ_include_dirs_argsÚ_ldflags_argsÚ_libraries_dirs_argsÚ_libraries_argsÚ_passthrough_parameters_argsÚ_orig_source_pathsÚ_output_dirÚ_target_filer|  r{  Ú_namer   rß   Úmodel_name_for_generated_filesÚ_target_nameÚ_build_optionrŒ  rª  r§  r­  r}  r°  r~  r³  r  ÚsumÚ_do_linkrã   Ú_CppBuilder__get_object_flagsÚ)_CppBuilder__get_precompiled_header_flagsÚ*_CppBuilder__get_preprocessor_output_flagsÚ$_CppBuilder__get_python_module_flagsr5   r8   r9   r3  Ú_outputrç   r£   rå   ré   rk  Ú_sources_argsr—  r�  rz  rN   Úwarningr“  rW  Úquoterš  r�  r   r£  )rl   rP  r  r  r  Úfile_extr  Úrelative_target_filer˜   ÚcflagÚ
definitionrz  Úinc_dirÚldflagrÚ  rˆ  Úpassthrough_args                    r   rm   ÚCppBuilder.__init__r  sW  € ð ˆŒØˆÔØ!#ˆÔØ"$ˆÔØˆÔØ$&ˆÔ!Ø!ˆÔØ,.ˆÔ)ð #%ˆÔØˆÔØˆÔà(-ˆÔØ$ˆŒàŒ
ä×Ñ×>Ñ>×NÀ,ð 	Ôð
 )ÔØ$×1Ñ1Ó3ˆŒØ"-×"CÑ"CÓ"EˆÔØ$×1Ñ1Ó3ˆŒà%Ôà(×9Ñ9Ó;ˆÔØ(×9Ñ9Ó;ˆÔØ)×;Ñ;Ó=ˆÔä�D×&Ñ&¨×(:Ñ(:¸D×<OÑ<OÐPÓQÐUVÓVÐVÐVà×Ñ×K $×"4Ñ"4×K¸×8KÑ8Kô
ˆŒ÷ ’; d×&8×&8ð 	
Ø=ó	
Ð8ð ××Ø%)×%<Ñ%<Ó%>Ñ"ˆH�lØ××Ø%)×%HÑ%HÓ%JÑ"ˆH�lØ× × Ø%)×%IÑ%IÓ%KÑ"ˆH�là%)×%CÑ%CÓ%EÑ"ˆHÜŸG™GŸL™L¨×)9Ñ)9¸d¿j¹j¸\È(ÈÐ;TÓUˆÔð ×&×&ô �G‰G×Ñ˜T×.Ñ.Ô/à×"Ñ"ð 	÷
 Š;Ø×"×"à+•à". Ð0DÐ/EÐF�•à*˜^¨1Ð-AÐ,BÐCˆDŒLä�gœs×#Ñ#Ø�iˆGô ×Ò×Ñ $×"9×"9ô '+¨7£mˆDÔ#Ù4;Ó<²G¨q”r—w‘w×'Ñ'¨Ö*±GˆGÐ<à××Ü�w“< 1Ó$Ð$Ð$à#1°'¸!±*°Ð!>ˆDÕà!$§¡¨'Ó!2ˆDÔà ×+Ñ+Ö-ˆEßŠ{Ø×!Ò! q¨¨¨q \Ñ1×!à×!Ò! q¨¨¨q \Ñ1×!ñ	 .ð &×5Ñ5Ö7ˆJßŠ{Ø×&Ò&¨C°
¨|¸1Ð*=Ñ=×&à×&Ò&¨C°
¨|¸1Ð*=Ñ=×&ñ	 8ð "-×!?Ñ!?Ð?ÐÕ?ßŠ{Ü—‘Ø_Ø&õð
 -6Ð6HÐ5IÈÐ*K�Ô'à"×3Ñ3Ö5ˆGßŠ{Ø×'Ò'¨T°'°¸"Ð+=Ñ=×'à×'Ò'¨R´·²¸GÓ0DÐ/EÀQÐ+GÑG×'ñ	 6ð "×-Ñ-Ö/ˆFßŠ{Ø×"Ò"¨¨&¨° mÑ3×"à×"Ò"¨¨&¨° mÑ3×"ñ	 0ð #×5Ñ5Ö7ˆGßŠ{Ø×)Ò)¨z¸'¸À"Ð-EÑE×)à×)Ò)¨r°'°¸!¨_Ñ<×)ñ	 8ð ×,Ñ,Ö.ˆCßŠ{Ø×$Ò$¨!¨C¨5°¨Ñ7×$à×$Ò$¨"¨S¨E°¨Ñ3×$ñ	 /ð  +×?Ñ?ÖAˆOØ×-Ò-°OÐ3DÀAÐ1FÑF×-ò  Bùòm =s   Ì8)X1c                 ó‚  ^ • S[         S[         S[         S[         S[         S[         S[         S[         S	[         S
[         S[         4U 4S jjnU" T R                  T R                  T R                  T R                  T R
                  T R                  T R                  T R                  T R                  T R                  S9
nU$ )NrX   r  Úinclude_dirs_argsÚdefinitions_argsÚcflags_argsÚldflags_argsÚlibraries_argsÚlibraries_dirs_argsrl  rY  r   c
                 ó  >• [         (       aB  U  SU SU SU SU SU SU	 3n
TR                  (       a  U
SU SU SU 3-  n
[        U
5      n
U
$ U  SU SU SU SU SU SU	 3n
TR                  (       a  U
SU SU SU 3-  n
U
$ )Nrõ   z /LD /link )rã   r3  rä   )rX   r  rE  rF  rG  rH  rI  rJ  rl  rY  r¾   rl   s              €r   Úformat_build_commandÚ9CppBuilder.get_command_line.<locals>.format_build_command  sì   ø€ ÷ Š{ð  �j Ð"3Ð!4°AÐ6FÐ5GÀqÈÈÐUVØ�i˜qÐ!1Ð 2°!°F°8ð=ð ð —=—=Ø˜[Ð)<Ð(=¸Q¸~Ð>NÈaÐP\È~Ð^Ñ^�CÜ.¨sÓ3�ð ˆJð  �j  ' ¨!Ð,<Ð+=¸Q¸{¸mÈ1Ø(Ð)¨Ð+;Ð*<¸A¸f¸XðGð ð —=—=Ø˜Q˜|˜n¨A¨nÐ-=¸QÐ?RÐ>SÐTÑT�CØˆJr!   )
rX   r  rE  rF  rG  rH  rI  rJ  rl  rY  )r£   rr  r9  r&  r%  r$  r'  r)  r(  r*  r8  )rl   rL  Úcommand_lines   `  r   Úget_command_lineÚCppBuilder.get_command_line   sÜ   ø€ ð	Üð	äð	ô  #ð	ô "ð		ô
 ð	ô ð	ô  ð	ô "%ð	ô "ð	ô ð	ô ÷	ñ> ,Ø—^‘^Ø×&Ñ&Ø"×5Ñ5Ø!×3Ñ3Ø×)Ñ)Ø×+Ñ+Ø×/Ñ/Ø $× 9Ñ 9Ø!×>Ñ>Ø—<‘<ñ
ˆð Ðr!   c                 ó,   • [        U R                  5      $ r   )rä   r-  r~   s    r   Úget_target_file_pathÚCppBuilder.get_target_file_path.  s   € Ü'¨×(9Ñ(9Ó:Ð:r!   c                 ó6  • [        S5         U R                  5       R                  5       n U R                  n[        R
                  R                  [        S5      n[        R                  " 5        n[        R                  " [        [        R
                  R                  US5      5        U R                   HU  n[        R                  " U[        R
                  R                  U[        R
                  R                  U5      5      5        MW     [        R
                  R                  US5      n[        R                  " X65        [!        X[        R
                  R                  U5      5      n[        R
                  R#                  U5      (       a  [        R$                  " U5        [        R                  " Xr5        UR'                  S5      (       a  [        R(                  " US5        O-UR'                  S5      (       a  [        R(                  " US5        S S S 5        S S S 5        g ! , (       d  f       N= f! [*        R,                   a7  nUR.                  R1                  S5      n	[2        R4                  " X5      UeS nAff = f! , (       d  f       g = f)	Nr^  r(  z	script.ldrô   i¤  r  ií  r­   )r   rO  rÔ   r-  r5   r8   r9   Ú_TORCH_PATHÚtempfileÚTemporaryDirectoryrR   r+  r2  r+  r3  Úcopytreer   rM   rK  ÚendswithÚchmodr;   r¼   rY  r  r   rX  )
rl   rm  Úoutput_pathÚtorch_includes_pathÚtmp_dirÚsrcÚdest_include_pathÚtmp_output_pathr×   rY  s
             r   Úbuild_fbcode_reÚCppBuilder.build_fbcode_re1  s»  € ô ˜.Õ)Ø×+Ñ+Ó-×3Ñ3Ó5ˆGðBØ"×/Ñ/�ô ')§g¡g§l¡l´;À	Ó&JÐ#Ü×0Ò0Ô2°gä—K’K¤´·±·±¸WÀkÓ0RÔSØ#×6Ô6˜ÜŸš C¬¯©¯©°g¼r¿w¹w×?OÑ?OÐPSÓ?TÓ)UÖVñ  7ä(*¯©¯©°W¸iÓ(HÐ%Ü—O’OÐ$7ÔKä&8Ø¬"¯'©'×*:Ñ*:¸;Ó*Gó'�Oô —w‘w—~‘~ k×2Ñ2ÜŸ	š	 +Ô.Ü—K’K Ô=Ø"×+Ñ+¨D×1Ñ1ÜŸš ¨eÕ4Ø$×-Ñ-¨e×4Ñ4ÜŸš ¨eÔ4÷% 3÷ *Ð)÷ 3Õ2ûô& ×0Ñ0ó BØŸ™Ÿ™¨Ó1�Ü×)Ò)¨'Ó:ÀÐAûðBú÷7 *Õ)úsN   ŒJ
¬AH<Á1F)H+ÈH<È+
H9	È5H<È8J
È9H<È<JÉ2JÊJÊJ
Ê

Jc                 óH  • U R                   (       a  U R                  5       $ [        U R                  5        [        R
                  R                  U R                  U R                   S[         35      n[        U5        U R                  5       n[        X!S9  [        U5        g)z“
It is must need a temporary directory to store object files in Windows.
After build completed, delete the temporary directory to save disk space.
rø   ©rT  N)r|  ra  rG  r,  r5   r8   r9   r.  Ú_BUILD_TEMP_DIRrO  r_  rR  )rl   Ú_build_tmp_dirÚ	build_cmds      r   ÚbuildÚCppBuilder.buildS  s   € ð
 ×"×"à×'Ñ'Ó)Ð)Ü  ×!1Ñ!1Ô2ÜŸ™Ÿ™Ø×Ñ §¡ ¨A¬oÐ->Ð?ó
ˆô 	! Ô0à×)Ñ)Ó+ˆ	Ü˜	Ò6Ü�NÕ#r!   Ú
cmake_pathrÝ  c                 ó|  • SR                  U R                  R                  5       5      n[        R                  R
                  (       d  SOSn[        R                  " SU R                   SU R                   SU S35      n[        R                  R                  (       d  [        R                  R                  (       ax  U[        R                  " S5      -  nU[        R                  " SU R                   S	U S
U R                   S	U R                   SU R                   S	U R                   S35      -  nO4U[        R                  " SU R                   SU R                   S35      -  nUS:X  av  [        R                  R                   c[  SSKJn  U" 5       nU[        R                  " SU R                   SU R                   SU R                   SU SU SU SU S35      -  nOUS:X  a  U[        R                  " S5      -  n['        US5       nUR)                  U5        SSS5        g! , (       d  f       g= f)z
Save global cmake settings here, e.g. compiler options.
If targeting CUDA, also emit a custom function to embed CUDA kernels.
rõ   ÚSTATICÚSHAREDzR
            cmake_minimum_required(VERSION 3.27 FATAL_ERROR)
            project(zs LANGUAGES CXX)
            set(CMAKE_CXX_STANDARD 17)

            # Set a library target
            add_library(z)

            z‘
                # May need to point CMAKE_PREFIX_PATH to the right torch location
                find_package(Torch REQUIRED)

                zT
                # Add macro definitions
                target_compile_definitions(ú	 PRIVATE zN)

                # Add compile flags
                target_compile_options(zS)

                # Backend-specific flags
                target_compile_options(z -c)

                zµ
                find_package(TorchStandalone REQUIRED)
                # Set up include directories to find headers at the correct paths
                target_include_directories(zU PRIVATE ${TorchStandalone_INCLUDE_DIRS})
                target_include_directories(zF PRIVATE ${TorchStandalone_INCLUDE_DIRS}/standalone)

                rà  Nr   )Ú_nvcc_arch_as_compile_optionz±
                enable_language(CUDA)
                set(CMAKE_CUDA_STANDARD 17)
                find_package(CUDAToolkit REQUIRED)
                target_include_directories(zQ PRIVATE ${CUDAToolkit_INCLUDE_DIRS})
                target_compile_definitions(z9 PRIVATE USE_CUDA)
                target_link_libraries(ab   PRIVATE cuda CUDA::cudart_static)

                find_program(OBJCOPY_EXECUTABLE objcopy)
                if(NOT OBJCOPY_EXECUTABLE)
                    message(FATAL_ERROR "objcopy not found. Cannot embed fatbin as object file")
                endif()

                set(KERNEL_TARGETS "")
                set(KERNEL_OBJECT_FILES "")
                # Function to embed a single kernel
                function(embed_gpu_kernel KERNEL_NAME PTX_FILE)
                    set(FATBIN_BASENAME ${KERNEL_NAME}.fatbin)
                    set(FATBIN_FILE ${CMAKE_CURRENT_BINARY_DIR}/${FATBIN_BASENAME})
                    set(OBJECT_BASENAME ${KERNEL_NAME}.fatbin.o)
                    set(OBJECT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${OBJECT_BASENAME})

                    # --- Define UNIQUE C symbol names ---
                    set(SYMBOL_START __${KERNEL_NAME}_start)
                    set(SYMBOL_END __${KERNEL_NAME}_end)
                    set(SYMBOL_SIZE __${KERNEL_NAME}_size)
                    string(REGEX REPLACE "[^a-zA-Z0-9]" "_" MANGLED_BASENAME ${FATBIN_FILE})
                    set(OBJCOPY_START_SYM _binary_${MANGLED_BASENAME}_start)
                    set(OBJCOPY_END_SYM _binary_${MANGLED_BASENAME}_end)
                    set(OBJCOPY_SIZE_SYM _binary_${MANGLED_BASENAME}_size)

                    # --- PTX to FATBIN Command & Target ---
                    add_custom_command(
                        OUTPUT ${FATBIN_FILE}
                        COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} --fatbin ${PTX_FILE} -o ${FATBIN_FILE} ${NVCC_GENCODE_FLAGS}
                                -gencode arch=compute_z,code=compute_z7
                                -gencode arch=compute_z	,code=sm_a'  
                        DEPENDS ${PTX_FILE}
                    )

                    # --- FATBIN to Object File (.o) Command ---
                    add_custom_command(
                        OUTPUT ${OBJECT_FILE}
                        COMMAND ${CMAKE_LINKER} -r -b binary -z noexecstack -o ${OBJECT_FILE} ${FATBIN_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE} --rename-section .data=.rodata,alloc,load,readonly,data,contents
                                ${OBJECT_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE}
                                --redefine-sym ${OBJCOPY_START_SYM}=${SYMBOL_START}
                                --redefine-sym ${OBJCOPY_END_SYM}=${SYMBOL_END}
                                --redefine-sym ${OBJCOPY_SIZE_SYM}=${SYMBOL_SIZE}
                                ${OBJECT_FILE}
                        DEPENDS ${FATBIN_FILE}
                    )
                    add_custom_target(build_kernel_object_${KERNEL_NAME} DEPENDS ${OBJECT_FILE})

                    # --- Add to a list for linking later ---
                    set(KERNEL_TARGETS ${KERNEL_TARGETS} build_kernel_object_${KERNEL_NAME} PARENT_SCOPE)
                    set(KERNEL_OBJECT_FILES ${KERNEL_OBJECT_FILES} ${OBJECT_FILE} PARENT_SCOPE)
                endfunction()

                rå  a=	  
                find_program(OBJCOPY_EXECUTABLE objcopy)
                if(NOT OBJCOPY_EXECUTABLE)
                    message(FATAL_ERROR "objcopy not found. Cannot embed spv as object file")
                endif()

                set(KERNEL_TARGETS "")
                set(KERNEL_OBJECT_FILES "")
                # Function to embed a single kernel
                function(embed_gpu_kernel KERNEL_NAME SPV_FILE)
                    set(OBJECT_BASENAME ${KERNEL_NAME}.spv.o)
                    set(OBJECT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${OBJECT_BASENAME})

                    # --- Define UNIQUE C symbol names ---
                    set(SYMBOL_START __${KERNEL_NAME}_start)
                    set(SYMBOL_END __${KERNEL_NAME}_end)
                    set(SYMBOL_SIZE __${KERNEL_NAME}_size)
                    string(REGEX REPLACE "[^a-zA-Z0-9]" "_" MANGLED_BASENAME ${SPV_FILE})
                    set(OBJCOPY_START_SYM _binary_${MANGLED_BASENAME}_start)
                    set(OBJCOPY_END_SYM _binary_${MANGLED_BASENAME}_end)
                    set(OBJCOPY_SIZE_SYM _binary_${MANGLED_BASENAME}_size)

                    # --- SPV_FILE to Object File (.o) Command ---
                    add_custom_command(
                        OUTPUT ${OBJECT_FILE}
                        COMMAND ${CMAKE_LINKER} -r -b binary -z noexecstack -o ${OBJECT_FILE} ${SPV_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE} --rename-section .data=.rodata,alloc,load,readonly,data,contents
                                ${OBJECT_FILE}
                        COMMAND ${OBJCOPY_EXECUTABLE}
                                --redefine-sym ${OBJCOPY_START_SYM}=${SYMBOL_START}
                                --redefine-sym ${OBJCOPY_END_SYM}=${SYMBOL_END}
                                --redefine-sym ${OBJCOPY_SIZE_SYM}=${SYMBOL_SIZE}
                                ${OBJECT_FILE}
                        DEPENDS ${SPV_FILE}
                    )
                    add_custom_target(build_kernel_object_${KERNEL_NAME} DEPENDS ${OBJECT_FILE})

                    # --- Add to a list for linking later ---
                    set(KERNEL_TARGETS ${KERNEL_TARGETS} build_kernel_object_${KERNEL_NAME} PARENT_SCOPE)
                    set(KERNEL_OBJECT_FILES ${KERNEL_OBJECT_FILES} ${OBJECT_FILE} PARENT_SCOPE)
                endfunction()

                r·  )r9   r1  r�  r   rß   Údynamic_linkageÚtextwrapÚdedentr0  rO  Útest_configsÚuse_libtorchr$  r*  rJ  rÊ  rË  Ú*torch._inductor.codegen.cuda.compile_utilsro  r¸  Úwrite)	rl   rj  rÝ  rf  Útarget_library_typeÚcontentsro  Úcurrent_archr¼  s	            r   Úsave_compile_cmd_to_cmakeÚ$CppBuilder.save_compile_cmd_to_cmakee  sk  € ð —h‘h˜t×1Ñ1×AÑAÓCÓDˆä"×/Ñ/×?×?‰HÀXð 	ô —?’?ðà×&Ñ&Ð'ð (ð ×*Ñ*Ð+¨1Ð-@Ð,Að Bðó

ˆô ×Ñ×,×,´×0CÑ0C×0P×0Pð œŸšðóñ ˆHð œŸšð,à,0×,=Ñ,=Ð+>¸iÈÀ}ð U(ð )-×(9Ñ(9Ð':¸)ÀD×DUÑDUÐCVð W(ð )-×(9Ñ(9Ð':¸)ÀD×DeÑDeÐCfð gð
óñ ‰Hð œŸšð,ð -1×,=Ñ,=Ð+>ð ?,Ø,0×,=Ñ,=Ð+>ð ?ð	óñ ˆHð ˜&Ó ¤U§]¡]×%6Ñ%6Ñ%>õñ 8Ó9ˆLØœŸšð,ð -1×,=Ñ,=Ð+>ð ?,Ø,0×,=Ñ,=Ð+>ð ?'Ø'+×'8Ñ'8Ð&9ð :7ð: 8D°nÀNÐS_ÐR`ð a7Ø7C°nÀIÈlÈ^ð \ðI<ó>ñ >‰Hð~ ˜EÓ!ØœŸšð*ó,ñ ,ˆHô\ �*˜cÔ" aØ�G‰G�HÔ÷ #×"Ö"ús   ÈH-È-
H;Úsrc_pathc                 óÄ   • S[        U5      R                  -   n[        US5       nUR                  SU R                   SU S35        S S S 5        g ! , (       d  f       g = f)Nú${CMAKE_CURRENT_SOURCE_DIR}/Úaztarget_sources(rn  z)
)r   rP  r¸  rv  r0  )rl   rj  r|  r¼  s       r   Úsave_src_to_cmakeÚCppBuilder.save_src_to_cmake	  sP   € à1´D¸³N×4GÑ4GÑGˆÜ�*˜cÔ" aØ�G‰G�o d×&7Ñ&7Ð%8¸	À(ÀÈ3ÐOÔP÷ #×"Ö"ús   ¥#AÁ
AÚ	asm_filesc           	      óÆ  • [        US5       nU Hp  n[        U5      R                  R                  S5      S   nS[        U5      R                   3n[        R
                  " SU SU S35      nUR                  U5        Mr     U(       a>  UR                  SU R                   S	35        UR                  S
U R                   S35        S S S 5        g ! , (       d  f       g = f)Nr  r�   r   r~  z&
                    embed_gpu_kernel(rõ   z)
                    zadd_dependencies(z ${KERNEL_TARGETS})
ztarget_link_libraries(z! PRIVATE ${KERNEL_OBJECT_FILES})
)r¸  r   rP  rÔ   rq  rr  rv  r0  )rl   rj  r‚  r¼  Úasm_filerò   rx  s          r   Úsave_kernel_asm_to_cmakeÚ#CppBuilder.save_kernel_asm_to_cmake$	  sÓ   € ä�*˜cÔ" aÛ%�Ü" 8›n×1Ñ1×7Ñ7¸Ó<¸QÑ?�Ø;¼DÀ»N×<OÑ<OÐ;PÐQ�Ü#Ÿ?š?ð&Ø&1 ]°!°H°:ð >ðó�ð
 —‘˜Ö!ñ &ö Ø—‘Ð+¨D×,=Ñ,=Ð+>Ð>UÐVÔWØ—‘Ø,¨T×->Ñ->Ð,?Ð?cÐdô÷ #×"Ö"ús   �B<CÃ
C c                 óâ  • SR                  U R                  R                  5       5      nSR                  U R                  R                  5       5      n[        R
                  " SU R                   SU SU R                   SU S3	5      n[        R                  R                  U5      (       d   SU S35       e[        US5       nUR                  U5        S S S 5        g ! , (       d  f       g = f)	Nrõ   z@
            # Add linker flags
            target_link_options(rn  zA)

            # Add libraries
            target_link_libraries(z)
         z#save_link_cmd_to_cmakefile expects z to already existr  )r9   r1  rš  r   rq  rr  r0  r5   r8   rM   r¸  rv  )rl   rj  Úlflagsrc  rx  r¼  s         r   Úsave_link_cmd_to_cmakeÚ!CppBuilder.save_link_cmd_to_cmake6	  sÛ   € Ø—‘˜$×,Ñ,×8Ñ8Ó:Ó;ˆØ�x‰x˜×*Ñ*×8Ñ8Ó:Ó;ˆÜ—?’?ð!à!%×!2Ñ!2Ð 3°9¸V¸Hð E#ð $(×#4Ñ#4Ð"5°Y¸t¸fð E
ðó
ˆô �w‰w�~‰~˜j×)Ñ)ð 	
Ø1°*°Ð=NÐOó	
Ð)ô �*˜cÔ" aØ�G‰G�HÔ÷ #×"Ö"ús   ÃC Ã 
C.)r{  r1  r$  r}  rr  r%  r3  r&  r'  r)  r(  r.  r+  r8  r,  r*  r~  r  r9  r-  r0  r|  )rª   rž   )rŸ   r    r¡   r¢   r¿  ÚstaticmethodrÇ   r£   r7  r4  r5  r6  r
   ré   re  rm   rO  rR  ra  rh  rz  r€  r…  r‰  r¤   r   r!   r   r  r  I  s‹  † ñð  ð' u¨S°#¨X¡ó 'ó ð'ð
 ð'  c¨3 h¡ó 'ó ð'ð
 ð'¨E°#°s°(©Oó 'ó ð'ð
 ð'¨U°3¸°8©_ó 'ó ð'ð ñLGàðLGð �s˜D ™I�~Ñ&ðLGð &ð	LGð
 ðLGð 
õLGð\, #ô ,ð\; cô ;ð Bà	ô BôD$ð$wàðwð ðwð 
ô	wðrQ¨Cð Q¸3ð QÀ4ô Qð°3ð À4ÈÁ9ð ÐQUô ð$°ð ¸÷ r!   r  r^  Útargetc                 ó¼   • S[         4S jnS[         S[         S[         S[         4S jnU" 5       nU" U[        U 5      [        U5      S9n[        U[        U5      S9  g )	Nr   c                  ó\   • [         (       a  Sn U $ [        5       n [        U 5      (       a  Sn U $ )NÚml64rF   )rã   rê   r  )ÚASM_CCs    r   Úget_asm_compilerÚ.run_asm_build_object.<locals>.get_asm_compilerK	  s2   € ßŠ;ØˆFð ˆô	 &Ó'ˆFä! &×)Ñ)Ø�Øˆr!   Úasm_ccr^  rŒ  c                 óH   • [         (       a  U  SU SU 3nU$ U  SU SU 3nU$ )Nrõ   z /c /Fo z -c z -o rÃ  )r“  r^  rŒ  r¾   s       r   rO  Ú.run_asm_build_object.<locals>.get_command_lineU	  sC   € ßŠ;ð �H˜A˜c˜U (¨6¨(Ð3ˆCð ˆ
ð �H˜D   T¨&¨Ð2ˆCàˆ
r!   )r“  r^  rŒ  rd  )r£   rä   r_  )r^  rŒ  rT  r‘  rO  r“  r¾   s          r   Úrun_asm_build_objectr–  J	  sh   € ðœcô ð¤ð ¬3ð ¼ð Äô ñ Ó€FÙ
ØÜ$ SÓ)Ü'¨Ó/ñ€Cô
 �CÔ5°cÓ:Ó;r!   )T)zc++17)F)Tr   Frž   )FF)�r+  rg   rE  Ú	functoolsr¹  ÚlocaleÚloggingr5   r4   rú   rW  rR   r;   r3   rV  rV  rq  rZ  Úcollections.abcr   r   r   Úctypes.utilr   Úpathlibr   Útypingr   r	   r
   rJ  Útorch._dynamo.utilsr   r¦  r   r   Útorch._inductor.cpu_vec_isar   r   Ú%torch._inductor.runtime.runtime_utilsr   Útorch.torch_versionr   rå   Útriton.fb.buildr   r   Útorch._inductor.fb.utilsr   r   r   r   rÈ   re  r8   ÚabspathÚ__file__Ú_HEREr  rU  r9   r2  rÙ  Ú	_IS_LINUXr’  rã   rá   Úgetpreferredencodingr  Ú	getLoggerrŸ   rN   Ú	lru_cacher£   rD   r:   Úcachera   rc   rÌ   rÚ   rê   rÇ   rð   rþ   r  r  r
  rÉ   r  r  r  r  r"  r$  r-  ré   r:  r>  rG  rR  r\  r_  rä   re  rÄ  rÇ  r×  rÜ  rá  rç  r  r  r  r  r  r  r%  r6  rE  rR  r^  ri  rn  rs  r|  rƒ  rž  r   r¤  r¨  r¾  rÀ  rÍ  rÔ  rÜ  rô  rö  r	  r  r–  r   r!   r   Ú<module>r¬     s
  ðó Û Û Û Û Û Û Û 	Û Û 	Û Û Û Û 
Û Û Û Û Ý $ß !Ý $Ý ß 'Ñ 'ã Ý ,ß 'ß ?Ý ;Ý ,ð 
×Ò×Ñß?÷ô ð sð °cð ¸dô ð cð °Sð ¸Tô ð Sð °Cð ¸Dô ð˜dô ð
 €Ø
�‰�‰˜Ó!€Ø�g‰g�o‰o˜bŸg™gŸo™o¨eÓ4Ó5€Ø—‘—‘˜kÐ+@ÓA€ð �L‰L×#Ñ# GÓ,€	Ø�L‰L×#Ñ# HÓ-€	Ø�l‰l˜gÑ%€à$€	æ=H˜&×5Ò5Ó7Ñ9ÈbÐ à×Ò˜Ó!€ð ×Ò�QÓð! ð !¨ó !ó ð!ð8˜sô ð4 ‡�ð
¨3ð 
°4ó 
ó ð
÷Jñ JðZ ‡�ðl
¨ð l
°ó l
ó ðl
ð^ ‡�ð sð ¨só ó ðð>˜#ô ð6¨$ð °5¸¸c¸±?ô ð"Øðàðð 	ðð ð	ð
 	ôð6 ‡�ð5 #ð 5¨$ó 5ó ð5ð
 ‡�ð?˜Cð ? Dó ?ó ð?ð ‡�ðC˜#ð C $ó Có ðCð ‡�ð˜cð  dó ó ðð$ ‡�ð) Sð )¨Tó )ó ð)ðX ‡�ð'�ó 'ó ð'ð ‡�ð)�$ó )ó ð)ð ‡�ð2˜4ó 2ó ð2ð ‡�ð/˜ó /ó ð/ð ‡�ð+�Dó +ó ð+ð ‡�ð¨ð °ó ó ðð*?˜D ™Ið ?°°c±ð ?¸tô ?ð¨4°©9ð ¸¸c¹ô ðO sð O¨tô Oð	˜#ð 	 $ô 	ð6˜sð 6¨ð 6°ô 6ð.(˜cð (¨ð (°ô (ð
¨ð °ô ÷t ñ t ñn¨ð ¸¸S¹	õ ñ" ð "°$°s±)õ "ð!¨Sð !°T¸#±Yô !ðH°#ð ¸$¸s¹)ô ð˜t C™yô ð:¨5°°c±¸DÀ¹IÐ1EÑ+Fô ð& -2ñ;Øð;Ø%)ð;à
ˆ4�‰9�d˜3‘iÐÑ õ;ð| ð ¨¨c©ô ð* Ø!#Øñ.Øð.àð.ð ð.ð ˜#‘ð	.ð
 ð.ð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWõ.ôb5!Ð!ô 5!ðpE¨4°©9ô Eð2 d¨3¡iô 2ð  c¡ô ð'2Øð'2àð'2ð ð'2ð ˆ4�‰9�d˜3‘i  c¡Ð*Ñ+ô	'2ðT¨6ð °e¸DÀ¹IÀtÈCÁyÐ<PÑ6Qô ð(&3Øð&3Ø%)ð&3à
ˆ4�‰9�d˜3‘i  c¡Ð*Ñ+ô&3ðR
 $ s¡)ô 
ð0 %¨¨S©	°4¸±9Ð(<Ñ"=ô 0ð2 ‡�ð¨ó ó ðð ‡�ð˜˜t S˜yÑ)ó ó ðð( ‡�ð
¨3ð 
¸#ð 
À$ó 
ó ð
ð ‡�ð?¨ð ?°ó ?ó ð?ð<kUØðkUà
ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÐKÑLôkUð\
˜U 4¨¡9¨d°3©iÐ#7Ñ8ô 
ðØðØ7;ðà	ˆ#�Yôð  T¨#¡Yô ðYØðYàðYð ðYð ð	Yð
 ðYð ðYð  $ðYð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWôYôxC!�jô C!ôL7ð ×Ò�QÓð ð ¨°$©ó ó ðð- $ s¡)ð -°ô -ð" ØñmØðmàðmð ðmð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWõ	mô`L@˜Oô L@ð^Øðà
ˆ3�ˆ8�_ô÷0~ñ ~ðB<˜cð <¨3ð <°Sð <¸Tõ <r!   