Ë
    P/æjXÌ  ã                   óÞ	  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZ d dlZd dlmZ d dlmZmZ d dlm Z m!Z! d dl"m#Z# d d	l$m%Z%  ejL                  «       rd d
l'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- n$dededdfd„Z*dededdfd„Z+dededdfd„Z,de.fd„Z-dZ/ej                  ja                  d«      Z1ej                  ja                  d«      Z2ej                  dk(  Z3e3rdndZ4 ejj                  e6«      Z7 ejp                  d«      de9de9fd„«       Z:de9fd„Z; ejp                  d«      de9ddfd„«       Z<de9fd„Z= ejp                  d«      d e9de.fd!„«       Z>d e9de.fd"„Z?d e9de.fd#„Z@ ejp                  d«      d e9de.fd$„«       ZA ejp                  d«      d e9de.fd%„«       ZB ejp                  d«      de.fd&„«       ZC ejp                  d«      de.fd'„«       ZD ejp                  d«      de.fd(„«       ZE ejp                  d«      de.fd)„«       ZF ejp                  d«      de.fd*„«       ZGde9de9fd+„ZHd,ee9   d-ee9   ddfd.„ZId/ee9   dee9   fd0„ZJd1e9ddfd2„ZKd1e9ddfd3„ZLd4e9d5e9deMfd6„ZNd4e9d5e9deMfd7„ZOd8e9de9fd9„ZP G d:„ d;«      ZQdkd<e.dee9   fd=„ZRdld>e9dee9   fd?„ZSd e9dee9   fd@„ZTdee9   fdA„ZUdBe.dee9   fdC„ZV	 	 dmd e9dBe.d<e.dDee9   deee9   ee9   ee9   ee9   ee9   ee9   ee9   f   f
dE„ZW G dF„ dGeQ«      ZXdee9   fdH„ZYdee9   fdI„ZZdee9   fdJ„Z[dee9   fdK„Z\d e9dLe.dMe.deee9   ee9   ee9   f   fdN„Z]dOe!deee9   ee9   f   fdP„Z^dQe.dLe.deee9   ee9   ee9   f   fdR„Z_dee9   fdS„Z`deee9   ee9   f   fdT„Za ejp                  d«      de.fdU„«       Zb ejp                  d«      dee.e9f   fdV„«       Zc ejp                  d«      d e9dWe9ddfdX„«       Zd ejp                  d«      d e9ddfdY„«       Zed e9deee9   ee9   ee9   ee9   ee9   ee9   f   fdZ„Zfd[e.dee9   fd\„Zgd e9dOe!dQe.dLe.dBe.dMe.d[e.deee9   ee9   ee9   ee9   ee9   ee9   ee9   f   fd]„Zh G d^„ d_eX«      Zidnd`„Zjdaee9   ddfdb„Zk	 	 dodce.dLe.dBe.deee9   ee9   ee9   ee9   ee9   ee9   ee9   f   fdd„Zl G de„ dfei«      Zmdge9dee9e9f   fdh„Zn G di„ dj«      Zoy)pé    N)Úcdll)ÚPath)ÚAnyÚListÚOptionalÚSequenceÚTupleÚUnion)Údynamo_timed)ÚconfigÚexc)Úinvalid_vec_isaÚVecISA)Ú	cache_dir)ÚTorchVersion)Úbuild_paths)Úlog_global_cache_errorsÚlog_global_cache_statsÚlog_global_cache_valsÚuse_global_cacheÚargsÚkwargsÚreturnc                   ó   — y ©N© ©r   r   s     ú^/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_inductor/cpp_builder.pyr   r   )   ó   € Øó    c                   ó   — y r   r   r   s     r   r   r   ,   r   r    c                   ó   — y r   r   r   s     r   r   r   /   r   r    c                   ó   — y)NFr   r   r    r   r   r   2   s   € Ør    ÚCxxBuildÚlinuxÚdarwinÚwin32)úutf-8r   é   Úsearchc                 óÂ  — ddl m}m} | D ]“  }	 |€tt        j                  dk7  rŒt        j                  d«      sŒ0ddlm}  |«       } |t
        j                  j                  |d«      |¬«      }|5  t        «       }d d d «       t        j                  |dg«       |c S  t"        j$                  ‚# 1 sw Y   Œ5xY w# t        j                  t        t         f$ r Y ŒÒw xY w)	Nr   )Úget_lock_dirÚLOCK_TIMEOUTr%   ÚTORCH_INDUCTOR_INSTALL_GXX)ÚFileLockzg++.lock)Útimeoutú	--version)Útorch._inductor.codecacher,   r-   ÚsysÚplatformÚosÚgetenvÚ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   D   sÐ   € çDàò ˆð	Øˆ{ô —<‘< 7Ò*Øä—y‘yÐ!=Ô>ØÝ-á'›>�ÙÜ—G‘G—L‘L ¨:Ó6Àô�ð ñ 2Ü/Ó1�C÷2ä×#Ñ# S¨+Ð$6Ô7ØŠJð'ô, ×
 Ñ
 Ð ÷2ð 2ûô ×*Ñ*Ô,=¼{ÐKò 	Ùð	ús3   �B=¥B=»7B=Á2B1Á= B=Â1B:	Â6B=Â=CÃCc            
      óÒ  — t         j                  j                  t        «       d«      } t         j                  j                  | dd«      }t         j                  j	                  |«      s~t
        j                  d«       t         j                  j                  dd«      }|€t        j                  d«      }|�0t        j                  |dd| › �d	d
dddgt        j                  ¬«       |S )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:   a   sº   € ä�W‰W�\‰\œ)›+ uÓ-€FÜ�w‰w�|‰|˜F E¨5Ó1€HÜ�7‰7�>‰>˜(Ô#Ü�‰Ð,Ô-Ü—
‘
—‘˜{¨GÓ4ˆØˆ=Ü—L‘L Ó)ˆEØÐÜ×!Ñ!àØØ ˜xÐ(Ø+ØØØ Øð	ô "—‘õð €Or    Úcompilerc                 óü   — 	  t        j                  | dgt         j                  ¬«      j                  «       j                  t
        Ž }y# t        $ r}t        d| › d�«      |‚d}~wt         j                  $ r Y yw xY w)zU
    Check if compiler is ready, in case end user not activate MSVC environment.
    ú/help©Ústderrz
Compiler: z is not found.N)	r;   r<   ÚSTDOUTÚstripÚdecodeÚSUBPROCESS_DECODE_ARGSr>   ÚRuntimeErrorr=   )rX   Ú
output_msgr   s      r   Úcheck_compiler_exist_windowsrc   {   sy   € ð

ðŒJ×#Ñ# X¨wÐ$7Ä
×@QÑ@QÔRß‰U‹Wß‰VÔ+ð-ñ 	øô
 ò KÜ˜Z¨ z°Ð@ÓAÀsÐJûÜ×%Ñ%ò áðús   ‚AA	 Á		A;ÁA"Á"A;Á:A;c                  ó  — t         r-t        j                  j                  dd«      } t	        | «       | S t        j                  «       rBt        j                  j                  €t        j                  «       S t        j                  «       S t        t
        j                  j                  t         t"        f«      r$t#        t
        j                  j                  «      }nt
        j                  j                  f}t%        |«      } | S )NÚCXXÚcl)Ú_IS_WINDOWSr5   rP   rQ   rc   r   Ú	is_fbcodeÚtorchÚversionÚhipr   ÚccÚclangÚ
isinstanceÚcpprA   ÚlistÚtuplerD   )rX   r*   s     r   Úget_cpp_compilerrr   �   s®   € ÝÜ—:‘:—>‘> %¨Ó.ˆÜ$ XÔ.ð €Oô ×ÑÔä$)§M¡M×$5Ñ$5Ð$=”—‘Ó ðÜCN×CTÑCTÓCVðô ”f—j‘j—n‘n¤t¬U mÔ4Üœ6Ÿ:™:Ÿ>™>Ó*‰Fä—j‘j—n‘nÐ&ˆFÜ& vÓ.ˆØ€Or    Úcpp_compilerc                 óx   — t        j                  | dg«      j                  d«      }d|j                  «       d   v S )Nr1   Úutf8ÚAppler   )r;   r<   r_   Ú
splitlines)rs   Úversion_strings     r   Ú_is_apple_clangry   ž   s<   € ä×,Ñ,¨l¸KÐ-HÓI×PÑPÐQWÓX€NØ�n×/Ñ/Ó1°!Ñ4Ð4Ð4r    c                 ó  — t         j                  dk(  rt        | «      S t        r@t	        j
                  d| «      rt        d«      ‚t        t	        j
                  d| «      «      S t        t	        j
                  d| «      «      S )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   ry   rg   Úrer*   ra   Úbool©rs   s    r   Ú	_is_clangr~   ¤   sj   € ä
‡|�|�xÒÜ˜|Ó,Ð,Ý	ä�9‰9Ð/°Ô>ÜØoóð ô ”B—I‘I˜m¨\Ó:Ó;Ð;Ü”—	‘	Ð.°Ó=Ó>Ð>r    c                 ó~   — t         j                  dk(  rt        | «      ryt        t	        j
                  d| «      «      S )Nr&   Fz(gcc|g\+\+))r3   r4   ry   r|   r{   r*   r}   s    r   Ú_is_gccr€   ²   s.   € Ü
‡|�|�xÒ¤O°LÔ$AØÜ”—	‘	˜.¨,Ó7Ó8Ð8r    c                 óô   — t         sy	  t        j                  | dgt        j                  ¬«      j	                  «       j
                  t        Ž }d|j                  «       d   v S # t        $ r
}Y d }~yd }~ww xY w)NFrZ   r[   Ú	Microsoftr   )	rg   r;   r<   r]   r^   r_   r`   rw   r>   )rs   rb   r   s      r   Ú_is_msvc_clrƒ   ¸   ss   € åØððŒJ×#Ñ# \°7Ð$;ÄJ×DUÑDUÔVß‰U‹Wß‰VÔ+ð-ð 	ð
 ˜j×3Ñ3Ó5°aÑ8Ð8Ð8øÜò Üûðús   ‰AA$ Á$	A7Á2A7c                 óð  — dt         dd fd„}	  t        j                  | dgt        j                  ¬«      j	                  «       j
                  t        Ž }d|j                  «       d   v }|rat        r!t        j                  d| «      rt        d	«      ‚t        j                  d
|«      }|�"|j                  d«      } |t        |«      «       |S # t        $ r
}Y d }~yd }~wt        j                  $ r Y yw xY w)NÚcompiler_versionr   c                 óR   — t         rdnd}| t        |«      k  rt        d|› d�«      ‚y)zw
        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 ú.N)rg   r   ra   )r…   Úmin_versions     r   Ú_check_minimal_versionz2_is_intel_compiler.<locals>._check_minimal_versionÌ   s8   € õ %0‘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`   rw   rg   r{   r*   ra   Úgroupr>   r=   )rs   r‰   rb   Úis_intel_compilerÚicx_ver_searchÚicx_verr   s          r   Ú_is_intel_compilerr�   Ê   s÷   € ð´ð À$ó ððŒJ×#Ñ#Ø˜{Ð+´J×4FÑ4Fô÷ ‰U‹Wß‰VÔ+ð	-ð 	ð $ z×'<Ñ'<Ó'>¸qÑ'AÐAÐÙÝÜ—9‘9Ð2°LÔAÜ&Øuóð ô
  ŸY™YÐ'AÀ:ÓNˆNØÐ)Ø(×.Ñ.¨qÓ1�Ù&¤|°GÓ'<Ô=à Ð øÜò ÜûÜ×%Ñ%ò áðús   ŽB?C Ã	C5ÃC5Ã4C5c                  ó(   — t        t        «       «      S r   )r€   rr   r   r    r   Úis_gccr’   ö   s   € äÔ#Ó%Ó&Ð&r    c                  ó(   — t        t        «       «      S r   )r~   rr   r   r    r   Úis_clangr”   û   s   € äÔ%Ó'Ó(Ð(r    c                  ó(   — t        t        «       «      S r   )r�   rr   r   r    r   r�   r�      s   € äÔ.Ó0Ó1Ð1r    c                  ó(   — t        t        «       «      S r   )ry   rr   r   r    r   Úis_apple_clangr—     s   € äÔ+Ó-Ó.Ð.r    c                  ó(   — t        t        «       «      S r   )rƒ   rr   r   r    r   Ú
is_msvc_clr™   
  s   € äÔ'Ó)Ó*Ð*r    c                 óÞ  — t         j                  j                  «       }d|d<   	  t        j                  | dgt        j
                  |¬«      j                  t        Ž }|j                  dd«      }|j                  d	d«      }|S # t        $ r_}	  t        j                  | dgt        j
                  |¬«      j                  t        Ž }n# t        $ r}Y d }~Y d }~yd }~ww xY wY d }~Œ‰d }~ww xY w)
NÚCÚLC_ALLz-v)r\   Úenvr1   Ú úÚ_ú
)
r5   rP   Úcopyr;   r<   r]   r_   r`   Ú	ExceptionÚreplace)rX   r�   rx   Úes       r   Úget_compiler_version_infor¦     så   € Ü
�*‰*�/‰/Ó
€CØ€Cˆ�Mð
ðœ×0Ñ0Ø�tÐ¤Z×%6Ñ%6¸Cô
ç
‰&Ô(ð*ˆð $×+Ñ+¨D°#Ó6€NØ#×+Ñ+¨D°#Ó6€NØÐøô ò ð	ðœZ×4Ñ4Ø˜;Ð'´
×0AÑ0AÀsôç‰fÔ,ð.‰Nøô ò 	ß�2ûð	úô ûðús5   ¥9B Â	C,Â9CÃC'Ã	CÃC'ÃCÃC'Ã'C,Ú	dest_listÚsrc_listc                 óZ   — |D ]&  }| j                  t        j                  |«      «       Œ( y r   )Úappendr¢   Údeepcopy)r§   r¨   Úitems      r   Ú_append_listr­   $  s(   € Øò .ˆØ×ÑœŸ™ tÓ,Õ-ñ.r    Ú	orig_listc                 óD   — g }| D ]  }||vsŒ|j                  |«       Œ |S r   ©rª   )r®   Únew_listr¬   s      r   Ú_remove_duplication_in_listr²   )  s1   € Ø€HØò "ˆØ�xÒØ�O‰O˜DÕ!ð"ð €Or    Úpath_dirc                 ó   — t         j                  j                  | «      s	 t        | «      j	                  dd¬«       y y # t
        $ r5}|j                  t        j                  k7  rt        d| › �«      ‚Y d }~y d }~ww xY w)NT)ÚparentsÚexist_okzFail to create path )	r5   r8   rM   r   ÚmkdirÚOSErrorÚerrnoÚEEXISTra   )r³   r   s     r   Ú_create_if_dir_not_existr»   1  sq   € Ü�7‰7�>‰>˜(Ô#ð	Ü�‹N× Ñ ¨¸Ð Õ=ð $øô ò 	Ø�y‰yœEŸL™LÒ(Ü"Ø*¨8¨*Ð5óð ô )ûð	ús   ¡? ¿	A=Á+A8Á8A=c                 óž  — t         j                  j                  | «      r®t        j                  | d¬«      D ]~  \  }}}|D ]7  }t         j                  j	                  ||«      }t        j
                  |«       Œ9 |D ]7  }t         j                  j	                  ||«      }t        j                  |«       Œ9 Œ€ t        j                  | «       y y )NF)Útopdown)r5   r8   rM   Úwalkr9   ÚremoveÚrmdir)r³   ÚrootÚdirsÚfilesÚnameÚ	file_pathÚdir_paths          r   Ú_remove_dirrÇ   <  s¦   € Ü	‡w�w‡~�~�hÔÜ!#§¡¨¸5Ô!Aò 	#ÑˆD�$˜Øò %�ÜŸG™GŸL™L¨¨tÓ4�	Ü—	‘	˜)Õ$ð%ð ò #�ÜŸ7™7Ÿ<™<¨¨dÓ3�Ü—‘˜Õ"ñ#ð		#ô 	�‰�Õð  r    Úcmd_lineÚcwdc                 ód  — t        j                  | «      }	 t        j                  ||t        j                  ¬«      }|S # t        j
                  $ r]}|j                  j                  d«      }d|v xs d|v }|rt        j                  dk(  rd}||z  }t        j                  ||«      |‚d }~ww xY w)N)r   rÉ   r\   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.)ÚshlexÚsplitr;   r<   r]   ÚCalledProcessErrorÚoutputr_   r3   r4   r   ÚCppCompileError)rÈ   rÉ   ÚcmdÚstatusr¥   rÏ   Úopenmp_problemÚinstructions           r   Ú_run_compile_cmdrÕ   H  s­   € Ü
�+‰+�hÓ
€Cð6Ü×(Ñ(¨c°sÄ:×CTÑCTÔUˆð  €Møô ×(Ñ(ò 6Ø—‘—‘ Ó)ˆØ1°VÐ;ÒQ¸xÈ6Ð?QˆÙœcŸl™l¨hÒ6ð2ð ð �kÑ!ˆFÜ×!Ñ! # vÓ.°AÐ5ûð6ús   —&? ¿B/ÁAB*Â*B/c                 ó\   — t        d«      5  t        | |«      cd d d «       S # 1 sw Y   y xY w)NÚcompile_file)r   rÕ   )rÈ   rÉ   s     r   Úrun_compile_cmdrØ   ^  s)   € Ü	�nÓ	%ñ /Ü ¨#Ó.÷/÷ /ò /ús   Œ"¢+Ú	orig_pathc                 óR   — t         r | j                  t        j                  d«      S | S )Nú/)rg   r¤   r5   Úsep)rÙ   s    r   Únormalize_path_separatorrÝ   c  s"   € ÝØ× Ñ ¤§¡¨Ó-Ð-ØÐr    c                   óŠ  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 d dedeee      deee      deee      deee      deee      d	eee      d
eee      dedededdfd„Zd!d„Z	d!d„Z
d!d„Zdefd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdee   fd„Zdefd„Zdefd„Zdefd„Zdeddfd„Zy)"ÚBuildOptionsBasezÁ
    This is the Base class for store cxx build options, as a template.
    Acturally, 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_modeÚuse_absolute_pathÚcompile_onlyr   c                 óÖ   — || _         |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |	| _        |
| _	        || _
        y r   )Ú	_compilerÚ_definationsÚ_include_dirsÚ_cflagsÚ_ldflagsÚ_libraries_dirsÚ
_librariesÚ_passthough_argsÚ	_aot_modeÚ_use_absolute_pathÚ_compile_only)ÚselfrX   rà   rá   râ   rã   rä   rå   ræ   rç   rè   ré   s               r   Ú__init__zBuildOptionsBase.__init__p  sw   € ð "ˆŒØ'2Ò'8°bˆÔØ(4Ò(:¸ˆÔØ"(¢,¨BˆŒØ#*¢=¨bˆŒØ*8Ò*>¸BˆÔØ%.¢_°"ˆŒà+;Ò+A¸rˆÔà'ˆŒØ(9ˆÔØ#/ˆÕr    c                 ó:   — | j                   rg | _        g | _        y y r   )rõ   rð   rñ   ©rö   s    r   Ú_process_compile_only_optionsz.BuildOptionsBase._process_compile_only_optionsŒ  s   € Ø×ÒØ#%ˆDÔ Ø ˆD�Oð r    c                 óp  — t        | j                  «      | _        t        | j                  «      | _        t        | j                  «      | _        t        | j                  «      | _        t        | j
                  «      | _        t        | j                  «      | _        t        | j                  «      | _        y r   )r²   rì   rí   rî   rï   rð   rñ   rò   rù   s    r   Ú_remove_duplicate_optionsz*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ˆŒÜ ;¸D×<QÑ<QÓ RˆÕr    c                 ó4   — | j                    | j                   y r   )rú   rü   rù   s    r   Ú_finalize_optionsz"BuildOptionsBase._finalize_optionsš  s   € Ø×*Ò*Ø×&Ó&r    c                 ó   — | j                   S r   )rë   rù   s    r   Úget_compilerzBuildOptionsBase.get_compilerž  ó   € Ø�~‰~Ðr    c                 ó   — | j                   S r   )rì   rù   s    r   Úget_definationsz BuildOptionsBase.get_definations¡  s   € Ø× Ñ Ð r    c                 ó   — | j                   S r   )rí   rù   s    r   Úget_include_dirsz!BuildOptionsBase.get_include_dirs¤  ó   € Ø×!Ñ!Ð!r    c                 ó   — | j                   S r   )rî   rù   s    r   Ú
get_cflagszBuildOptionsBase.get_cflags§  s   € Ø�|‰|Ðr    c                 ó   — | j                   S r   )rï   rù   s    r   Úget_ldflagszBuildOptionsBase.get_ldflagsª  s   € Ø�}‰}Ðr    c                 ó   — | j                   S r   )rð   rù   s    r   Úget_libraries_dirsz#BuildOptionsBase.get_libraries_dirs­  s   € Ø×#Ñ#Ð#r    c                 ó   — | j                   S r   )rñ   rù   s    r   Úget_librarieszBuildOptionsBase.get_libraries°  s   € Ø�‰Ðr    c                 ó   — | j                   S r   )rò   rù   s    r   Úget_passthough_argsz$BuildOptionsBase.get_passthough_args³  s   € Ø×$Ñ$Ð$r    c                 ó   — | j                   S r   )ró   rù   s    r   Úget_aot_modezBuildOptionsBase.get_aot_mode¶  r  r    c                 ó   — | j                   S r   )rô   rù   s    r   Úget_use_absolute_pathz&BuildOptionsBase.get_use_absolute_path¹  s   € Ø×&Ñ&Ð&r    c                 ó   — | j                   S r   )rõ   rù   s    r   Úget_compile_onlyz!BuildOptionsBase.get_compile_only¼  r  r    Úfilec                 óÂ  — | j                  «       | j                  «       | j                  «       | j                  «       | j	                  «       | j                  «       | j                  «       | j                  «       | j                  «       | j                  «       | j                  «       dœ}t        |d«      5 }t        j                  ||«       d d d «       y # 1 sw Y   y xY w)N)rX   rà   rá   râ   rã   rä   rå   ræ   rç   rè   ré   Úw)r   r  r  r  r
  r  r  r  r  r  r  ÚopenÚjsonÚdump)rö   r  ÚattrsÚfs       r   Úsave_flags_to_filez#BuildOptionsBase.save_flags_to_file¿  s»   € à×)Ñ)Ó+Ø×/Ñ/Ó1Ø ×1Ñ1Ó3Ø—o‘oÓ'Ø×'Ñ'Ó)Ø"×5Ñ5Ó7Ø×+Ñ+Ó-Ø $× 8Ñ 8Ó :Ø×)Ñ)Ó+Ø!%×!;Ñ!;Ó!=Ø ×1Ñ1Ó3ñ
ˆô �$˜‹_ð 	  Ü�I‰I�e˜QÔ÷	 ÷ 	 ñ 	 ús   Â5CÃC)rž   NNNNNNNFFF©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r   r|   r÷   rú   rü   rþ   r   r  r  r  r
  r  r  r  r  r  r  r  r   r    r   rß   rß   i  s§  „ ñð Ø+/Ø,0Ø&*Ø'+Ø.2Ø)-Ø04ØØ"'Ø"ñ0àð0ð ˜d 3™iÑ(ð0ð ˜t C™yÑ)ð	0ð
 ˜˜c™Ñ#ð0ð ˜$˜s™)Ñ$ð0ð !  c¡Ñ+ð0ð ˜D ™IÑ&ð0ð # 4¨¡9Ñ-ð0ð ð0ð  ð0ð ð0ð 
ó0ó8!ó
Só'ð˜có ð!  c¡ó !ð" $ s¡)ó "ð˜D ™Ió ð˜T #™Yó ð$ D¨¡Ió $ð˜t C™yó ð% T¨#¡Yó %ð˜dó ð' tó 'ð" $ó "ð  sð  ¨tô  r    rß   Úwarning_allc                 ó    — t         s| rdgS g S g S )NÚWall©rg   )r&  s    r   Ú_get_warning_all_cflagr*  Ò  s   € ÝÙ&�ˆxÐ.¨BÐ.àˆ	r    Ústd_numc                 ó,   — t         r		 d} d| › �gS d| › �gS )Nzc++20zstd:zstd=r)  )r+  s    r   Ú_get_cpp_std_cflagr-  Ù  s1   € Ýð	ð ˆØ�w�iÐ Ð!Ð!à�w�iÐ Ð!Ð!r    c                 ó^   — t         rg d¢}|S ddg}t        | «      r|j                  d«       |S )N)Úwd4819Úwd4251Úwd4244Úwd4267Úwd4275Úwd4018Úwd4190Úwd4624Úwd4067Úwd4068ÚEHsczWno-unused-variablezWno-unknown-pragmasz$Werror=ignored-optimization-argument)rg   r~   rª   )rs   râ   s     r   Ú_get_os_related_cpp_cflagsr:  è  s:   € Ýò
ˆð" €Mð (Ð)>Ð?ˆÜ�\Ô"Ø�M‰MÐ@ÔAØ€Mr    c                  ó  — t         rdgS t        j                  j                  rddgnddg} | j	                  d«       | j	                  d«       t        j
                  j                  s| j	                  d«       t        j
                  j                  s| j	                  d	«       t        j                  d
k7  rOt        j                  «       s;t        j                  «       dk(  r| j	                  d«       | S | j	                  d«       | S )NÚO2ÚO0ÚgÚO3ÚDNDEBUGz
ffast-mathzfno-finite-math-onlyzfno-unsafe-math-optimizationszffp-contract=offr&   Úppc64lezmcpu=nativezmarch=native)rg   r   Úaot_inductorÚdebug_compilerª   ro   Úenable_unsafe_math_opt_flagÚ#enable_floating_point_contract_flagr3   r4   rh   Úmachine)râ   s    r   Ú_get_optimization_cflagsrG  þ  sÈ   € ÝØˆvˆä &× 3Ñ 3× AÒ A�$˜‘ÈÈiÐGXˆØ�‰�lÔ#Ø�‰Ð,Ô-ä�z‰z×5Ò5Ø�M‰MÐ9Ô:Ü�z‰z×=Ò=Ø�M‰MÐ,Ô-ä�<‰<˜8Ò#ô ×#Ñ#Ô%Ü×#Ñ#Ó%¨Ò2Ø—M‘M -Ô0ð ˆð —M‘M .Ô1àˆr    ré   c                 ó|   — t         r	 ddg}|S | rdgS t        j                  «       dk(  rdt        «       v rg d¢S ddgS )NÚDLLÚMDÚfPICÚDarwinrm   )ÚsharedrK  zundefined dynamic_lookuprM  )rg   r4   Úsystemrr   )ré   ÚSHARED_FLAGs     r   Ú_get_shared_cflagrP    sT   € Ýð	ð ˜d�mˆð Ðñ Ø�8ˆOÜ�?‰?Ó Ò(¨WÔ8HÓ8JÑ-JâAÐAà˜fÐ%Ð%r    Úextra_flagsc                 óâ   — g }g }g }g }g }g }	g }
t        |«      t        «       z   t        |«      z   t        «       z   t	        | «      z   }|
j                  dj                  |«      «       ||||||	|
fS )Nú )rP  rG  r*  r-  r:  rª   r9   )rs   ré   r&  rQ  Údefinationsrá   râ   rã   rä   rå   Úpassthough_argss              r   Úget_cpp_optionsrV  *  s¤   € ð  €KØ €LØ€FØ€GØ "€NØ€IØ!#€Oô 	˜,Ó'Ü
"Ó
$ñ	%ä
  Ó
-ñ	.ô Ó
ñ	ô % \Ó
2ñ		3ð ð ×Ñ˜3Ÿ8™8 KÓ0Ô1ð 	ØØØØØØðð r    c                   óH   ‡ — e Zd ZdZ	 	 	 	 d	dededee   deddf
ˆ fd„Zˆ xZS )
Ú
CppOptionsaH  
    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.
    ré   r&  rQ  rè   r   Nc                 óò  •— t         ‰| �  «        t        «       | _        || _        || _        t        | j                  |||¬«      \  }}}}}	}
}t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |	«       t        | j                  |
«       t        | j                  |«       | j                  «        y )N)rs   ré   rQ  r&  )Úsuperr÷   rr   rë   rô   rõ   rV  r­   rì   rí   rî   rï   rð   rñ   rò   rþ   )rö   ré   r&  rQ  rè   rT  rá   râ   rã   rä   rå   rU  Ú	__class__s               €r   r÷   zCppOptions.__init__X  sÖ   ø€ ô 	‰ÑÔÜ)Ó+ˆŒØ"3ˆÔØ)ˆÔô ØŸ™Ø%Ø#Ø#ô	
ñ	
ØØØØØØØô 	�T×&Ñ&¨Ô4Ü�T×'Ñ'¨Ô6Ü�T—\‘\ 6Ô*Ü�T—]‘] GÔ,Ü�T×)Ñ)¨>Ô:Ü�T—_‘_ iÔ0Ü�T×*Ñ*¨OÔ<Ø×ÑÕ r    )FTr   F)	r!  r"  r#  r$  r|   r   r%  r÷   Ú__classcell__©r[  s   @r   rX  rX  M  sT   ø„ ñð #Ø Ø%'Ø"'ñ"!àð"!ð ð"!ð ˜c‘]ð	"!ð
  ð"!ð 
÷"!ñ "!r    rX  c                  ór   — t         s0dt        t        t        j                  j
                  «      «      z   gS g S )Nz-D_GLIBCXX_USE_CXX11_ABI=)rg   r%  Úintri   Ú_CÚ_GLIBCXX_USE_CXX11_ABIr   r    r   Ú_get_glibcxx_abi_build_flagsrb  }  s,   € ÝØ+¬c´#´e·h±h×6UÑ6UÓ2VÓ.WÑWÐXÐXàˆ	r    c                  ó   — dgS )NÚTORCH_INDUCTOR_CPP_WRAPPERr   r   r    r   Ú!_get_torch_cpp_wrapper_definationre  „  s   € Ø(Ð)Ð)r    c                  ó   — dgS )Nz" C10_USING_CUSTOM_GENERATED_MACROSr   r   r    r   Ú_use_custom_generated_macrosrg  ˆ  s   € Ø0Ð1Ð1r    c                  óp   — t         s/t        j                  «       rg d¢} d}| j                  |«       | S g S g S )N)ÚC10_USE_GLOGÚC10_USE_MINIMAL_GLOGÚ$C10_DISABLE_TENSORIMPL_EXTENSIBILITYÚ#AOTI_USE_CREATE_TENSOR_FROM_BLOB_V1)rg   r   rh   rª   )Úfb_internal_macrosÚcreate_tensor_from_blob_v1s     r   Ú_use_fb_internal_macrosro  Œ  sA   € ÝÜ×ÑÔò"Ðð *OÐ&à×%Ñ%Ð&@ÔAØ%Ð%àˆIàˆ	r    rç   rè   c                 óÀ  — ddl m} g }g }g }t        r|||fS t        j                  «       �r®|j                  d«       t        j                  j                  €#|j                  t        j                  «       «       |j                  t        j                  «       «       |j                  t        j                  «       «       t        j                  j                  �j|j                  t        j                  «       «       |j                  t        j                  «       «       |j                  t        j                  «       «       ni|j                  t        j                   «       «       |j                  t        j"                  «       «       |j                  t        j$                  «       «       |j                  t        j&                  «       «       |j                  t        j(                  «       «       |j                  t        j*                  «       «       |j                  d«       |r|s|}nt,        j.                  j1                  |«      }t3        | «      r‚|j                  d«       |j                  d«       |j                  d|› �«       |j                  dt        j4                  «       z   «       |j                  d	t        j4                  «       z   «       |||fS )
Nr   )Ú_LINKER_SCRIPTÚnostdincÚincludez --rtlib=compiler-rtz -fuse-ld=lldz -Wl,--script=z -Bz -L)r2   rq  rg   r   rh   rª   ri   rj   rk   r   ÚsleefÚopenmpÚpythonÚclang_includeÚgcc_includeÚgcc_install_tools_includeÚ
cc_includeÚlibgccÚlibgcc_archÚlibgcc_backwardÚglibcÚlinux_kernelr5   r8   Úbasenamer~   Ú	glibc_lib)rs   rç   rè   rq  râ   rá   rU  Úlinker_scripts           r   Ú_setup_standard_sys_libsrƒ  ¡  s   € õ
 9à€FØ €LØ!#€OÝØ�| _Ð4Ð4ä×ÑÕØ�‰�jÔ!ô �=‰=×ÑÐ$Ø×Ñ¤× 1Ñ 1Ó 3Ô4Ø×ÑœK×.Ñ.Ó0Ô1Ø×ÑœK×.Ñ.Ó0Ô1Ü�=‰=×ÑÐ(Ø×Ñ¤× 9Ñ 9Ó ;Ô<Ø×Ñ¤× 7Ñ 7Ó 9Ô:Ø×Ñ¤× EÑ EÓ GÕHà×Ñ¤× 6Ñ 6Ó 8Ô9Ø×Ñ¤× 2Ñ 2Ó 4Ô5Ø×Ñ¤× 7Ñ 7Ó 9Ô:Ø×ÑœK×7Ñ7Ó9Ô:Ø×ÑœK×-Ñ-Ó/Ô0Ø×ÑœK×4Ñ4Ó6Ô7Ø×Ñ˜IÔ&áÑ-Ø*‰MäŸG™G×,Ñ,¨^Ó<ˆMä�\Ô"Ø×"Ñ"Ð#9Ô:Ø×"Ñ" ?Ô3Ø×"Ñ" ^°M°?Ð#CÔDØ×"Ñ" 5¬;×+@Ñ+@Ó+BÑ#BÔCØ×"Ñ" 5¬;×+@Ñ+@Ó+BÑ#BÔCà�< Ð0Ð0r    Úvec_isac                 ó0  — g }g }| t         k7  r†| j                  «       D ]&  }|j                  t        j                  |«      «       Œ( | j                  «       g}t        j                  «       r(t        | «      j                  «       }d|› �d|› �d|› d�g}||fS )NzCPU_CAPABILITY=ÚCPU_CAPABILITY_ÚHAVE_Ú_CPU_DEFINITION)
r   Úbuild_macrorª   r¢   r«   Úbuild_arch_flagsr   rh   r%  Úupper)r„  ÚmacrosÚbuild_flagsÚxÚcaps        r   Ú_get_build_args_of_chosen_isar�  Ò  s¦   € Ø€FØ€KØ”/Ò!à×$Ñ$Ó&ò 	,ˆAØ�M‰Mœ$Ÿ-™-¨Ó*Õ+ð	,ð ×/Ñ/Ó1Ð2ˆä×ÑÔÜ�g“,×$Ñ$Ó&ˆCà! # Ð'Ø! # Ð'Ø˜�u˜OÐ,ðˆFð �;ÐÐr    Úinclude_pytorchc           	      ó<  — ddl m}m} t        j                  j                  |d«      t        j                  j                  |ddddd«      t        j                  j                  |dd«      t        j                  j                  |dd«      g}|g}g }t        j                  d	k7  r+t        j                  «       sdd
g}|s|j                  d«       t        r|j                  d«       t        j                  s"|j                  d«       |j                  |«       |||fS )Nr   )Ú_TORCH_PATHÚTORCH_LIB_PATHrs  ri   ÚcsrcÚapiÚTHÚTHCr&   Ú	torch_cpuÚtorch_pythonrt  Úc10)Útorch.utils.cpp_extensionr“  r”  r5   r8   r9   r3   r4   r   rh   rª   rg   Úabi_compatible)r‘  rç   r“  r”  rá   rä   rå   s          r   Ú_get_torch_related_argsrž  ç  sí   € ÷ Fô 	�‰�‰�[ )Ó,Ü
�‰�‰�[ )¨W°f¸eÀYÓOô 	�‰�‰�[ )¨TÓ2Ü
�‰�‰�[ )¨UÓ3ð€Lð %Ð%€NØ€IÜ
‡|�|�xÒ¬×(8Ñ(8Ô(:Ø˜kÐ*ˆ	ÙØ×Ñ˜^Ô,åØ×Ñ˜Ô!ô × Ò Ø×Ñ˜ÔØ×Ñ˜nÔ-à˜¨Ð2Ð2r    c                  ó–  — t        t        j                  d«      «      } | j                  «       s\t	        j
                  «       dk(  rEt        t        j                  d«      «      }|j                  j                  dz  j                  «       } | dz  j                  «       s!t        j                  dt        | «      › �«       t        | «      gS )Nrs  rL  ÚstdlibÚHeaderszPython.hzCan't find Python.h in )r   Ú	sysconfigÚget_pathrM   r4   rN  Ú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                  óÆ  — t        «       } t        j                  dt        rdnd¬«      }|�| j	                  |«       t        rOt
        j                  j                  t        j                  «      }t
        j                  j                  |d«      g}nt        j                  d«      g}t        j                  «       r#| j	                  t        j                  «       «       | |fS )Nrs  ÚntÚposix_prefix)ÚschemeÚlibsÚLIBDIR)rª  r¢  r£  rg   rª   r5   r8   Údirnamer3   Ú
executabler9   Úget_config_varr   rh   r   rv  )Úpython_include_dirsÚpython_include_pathÚpython_pathÚpython_lib_paths       r   Ú_get_python_related_argsr¸    s­   € Ü2Ó4ÐÜ#×,Ñ,Ø¥+™$°>ôÐð Ð&Ø×"Ñ"Ð#6Ô7åÜ—g‘g—o‘o¤c§n¡nÓ5ˆÜŸ7™7Ÿ<™<¨°VÓ<Ð=‰ä$×3Ñ3°HÓ=Ð>ˆä×ÑÔØ×"Ñ"¤;×#5Ñ#5Ó#7Ô8à Ð/Ð/r    c                  óà   — 	 d} t        j                  | j                  «       «      j                  d«      }t	        t        j                  |«      «      dkD  S # t         j                  $ r Y yw xY w)Nzconda list llvm-openmp --jsonru   r   F)r;   r<   rÍ   r_   Úlenr  Úloadsr=   )ÚcommandrÏ   s     r   Úis_conda_llvm_openmp_installedr½  '  s^   € ðØ1ˆÜ×(Ñ(¨¯©«Ó9×@Ñ@ÀÓHˆÜ”4—:‘:˜fÓ%Ó&¨Ñ*Ð*øÜ×%Ñ%ò Ùðús   ‚AA ÁA-Á,A-c                  ó  — 	 t        j                  ddg«       t        j                  g d¢«      j                  d«      j                  «       } t        j
                  j                  | «      }|| fS # t         j                  $ r Y yw xY w)NrS   Úbrew)r¿  z--prefixrË   ru   )Frž   )r;   r<   r_   r^   r5   r8   rM   r=   )Úlibomp_pathÚomp_availables     r   Úhomebrew_libomprÂ  1  sw   € ðä×Ñ ¨&Ð 1Ô2ô
 ×#Ñ#Ò$BÓCß‰V�F‹^ß‰U‹Wð 	ô Ÿ™Ÿ™ {Ó3ˆØ˜kÐ)Ð)øÜ×%Ñ%ò Ùðús   ‚A-A0 Á0BÂBÚomp_namec                 óp  — 	 t        j                  | dg«      j                  d«      }t        j                  j                  |j                  «       |«      }t        j                  j                  |«      r)dt        j                  d<   t        j                  |«      }y y # t         j                  $ r Y y w xY w)Nz-print-file-name=binru   ÚTRUEÚKMP_DUPLICATE_LIB_OK)r;   r<   r_   r5   r8   r9   ÚrstripÚisfilerP   r   ÚLoadLibraryr=   )rs   rÃ  rÏ   Úomp_pathÚ
omp_modules        r   Úperload_clang_libomp_winrÌ  E  s•   € ð	Ü×(Ñ(¨,Ð8NÐ)OÓP×WÑWØó
ˆô —7‘7—<‘< §¡£°Ó:ˆÜ�7‰7�>‰>˜(Ô#Ø17ŒB�J‰JÐ-Ñ.Ü×)Ñ)¨(Ó3‰Jð $øô ×%Ñ%ò Ùðús   ‚BB ÂB5Â4B5c                 óZ   — dt         dt         dt        fd„}	 g d¢}|D ]  } || |«       Œ y )Nrs   Úlib_namer   c                 ó`  — 	  t        j                  | d|› �gt         j                  ¬«      j                  t        Ž }|j                  «       }t        j                  j                  |«      r)dt        j                  d<   t        j                  |«      }y	 y# t         j                  $ r Y yw xY w)Nz-print-file-name=r[   rÅ  rÆ  TF)r;   r<   r‹   r_   r`   rÇ  r5   r8   rÈ  rP   r   rÉ  r=   )rs   rÎ  rÏ   rÊ  rË  s        r   Ú_load_icx_built_in_lib_by_namez>perload_icx_libomp_win.<locals>._load_icx_built_in_lib_by_nameU  s©   € ð	ð”Z×,Ñ,ØÐ!2°8°*Ð=Ð>Ü!×)Ñ)ô÷ ‰fÔ,ð.ˆFð —}‘}“ˆHÜ�w‰w�~‰~˜hÔ'Ø5;”—
‘
Ð1Ñ2Ü!×-Ñ-¨hÓ7�
Øð (ð øô ×)Ñ)ò 	ØØð	ús   ‚BB ÂB-Â,B-)zlibiomp5md.dllzsvml_dispmd.dllz
libmmd.dll)r%  r|   )rs   rÐ  Úpreload_listrÎ  s       r   Úperload_icx_libomp_winrÒ  S  sC   € ð´Sð ÄCð ÌDó ðò€Lð !ò ?ˆÙ& |°XÕ>ñ?r    c                 ó,  — g }g }g }g }g }g }t         �r{|j                  d«       |j                  d«       t        | «       }t        j                  d«      }|�¼t        j
                  j                  |dd«      }	t        j
                  j                  |	«      }
|
r_|j                  t        j
                  j                  |d«      «       |j                  t        j
                  j                  |d«      «       nt        j                  d«       |xs |
}|s|j                  d«       t        j                  d	«      }|sÝ|�Ût        «       }|rÏt        j
                  j                  |d«      }|j                  t        j
                  j                  |d«      «       |j                  |«       t        j                  «       j                  d
k(  rNt        j
                  j                  t        j
                  j                  |d«      «      r|j                  d«       |�sït        «       \  }}|�rß|j                  t        j
                  j                  |d«      «       |j                  t        j
                  j                  |d«      «       �nt        r™	 t        | «      r0|j                  d«       |j                  d«       t!        | d«       �n=t#        | «      r/|j                  d«       |j                  d«       t%        | «       �n|j                  d«       |j                  d«       nàt'        j(                  «       r_|j                  t+        j,                  «       «       t+        j.                  «       }d|› �}|j                  |«       |j                  d«       nmt        | «      r#|j                  d«       |j                  d«       n?t#        | «      r|j                  d«       n"|j                  d«       |j                  d«       ||||||fS )NÚXclangÚfopenmpÚ
OMP_PREFIXrs  zomp.hÚlibz-environment variable `OMP_PREFIX` is invalid.ÚompÚCONDA_PREFIXÚx86_64zlibiomp5.dylibÚiomp5ru  rË   z
libomp.dllÚQiopenmpÚ
libiomp5mdzopenmp:experimentalz-Wp,-fopenmp ÚgompÚfiopenmp)Ú	_IS_MACOSrª   ry   r5   r6   r8   r9   rM   r¦  r§  r½  ÚunamerF  rÂ  rg   r~   rÌ  r�   rÒ  r   rh   r   ru  Ú
openmp_lib)rs   râ   rã   Úinclude_dir_pathsÚlib_dir_pathsr¯  rU  rÁ  Ú
omp_prefixÚheader_pathÚ	valid_envÚconda_prefixÚconda_lib_pathrÀ  râ  Úfb_openmp_extra_flagss                   r   Ú_get_openmp_argsrë  r  s  € ð €FØ€GØ#%ÐØ!€MØ€DØ!#€OÞà�‰�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ð —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ä×ÑÔØ×$Ñ$¤[×%7Ñ%7Ó%9Ô:ä$×/Ñ/Ó1ˆJØ&3°J°<Ð$@Ð!Ø×"Ñ"Ð#8Ô9à�K‰K˜Õä˜Ô&à—‘˜iÔ(Ø—‘˜FÕ#Ü# LÔ1Ø—‘˜jÕ)à—‘˜iÔ(Ø—‘˜FÔ#à�7Ð-¨}¸dÀOÐSÐSr    Úuse_mmap_weightsc                 ó0   — g }| r|j                  d«       |S )Nz USE_MMAP_SELFr°   )rì  rŒ  s     r   Úget_mmap_self_macrorî  Ý  s   € Ø€FÙØ�‰Ð&Ô'Ø€Mr    c                 ó¤  — g }g }g }	g }
g }g }g }t        «       }t        «       }t        | ||«      \  }}}t        |«      \  }}t	        ||¬«      \  }}}t        «       \  }}t        | «      \  }}}}}}t        «       } t        «       }!t        |«      }"||z   |z   |!z   |"z   }||z   |z   |z   }||z   }	|}
||z   |z   }||z   }||z   | z   |z   }|||	|
|||fS )N)r‘  rç   )
re  rg  rƒ  r�  rž  r¸  rë  rb  ro  rî  )#rs   r„  r‘  rç   ré   rè   rì  rT  rá   râ   rã   rä   rå   rU  Útorch_cpp_wrapper_definationsÚ'use_custom_generated_macros_definationsÚsys_libs_cflagsÚsys_libs_include_dirsÚsys_libs_passthough_argsÚ
isa_macrosÚisa_ps_args_build_flagsÚtorch_include_dirsÚtorch_libraries_dirsÚtorch_librariesr´  Úpython_libraries_dirsÚ
omp_cflagsÚomp_ldflagsÚomp_include_dir_pathsÚomp_lib_dir_pathsÚomp_libÚomp_passthough_argsÚcxx_abi_passthough_argsÚfb_macro_passthough_argsÚmmap_self_macross#                                      r   Úget_cpp_torch_optionsr  ä  s—  € ð  €KØ €LØ€FØ€GØ "€NØ€IØ!#€Oä$EÓ$GÐ!Ü.JÓ.LÐ+ô 	! ¨xÐ9JÓKñ	ØØØ ô +HÈÓ*PÑ'€JÐ'ô 	 °È(ÔSñ	ØØØô 2JÓ1KÑ.ÐÐ.ô 	˜Ó&ñØØØØØØô ;Ó<ÐÜ6Ó8Ðä*Ð+;Ó<Ðð 	&Ø
1ñ	2à
ñ	ð #ñ	#ð ñ		ð ð 	Ø
ñ	à
ñ	ð  ñ	 ð ð ˜zÑ)€FØ€GØ*Ð-AÑAÐDUÑU€NØ 'Ñ)€Ià Ø
!ñ	"à
!ñ	"ð ñ	ð ð 	ØØØØØØðð r    c                   óf   ‡ — e Zd ZdZeddddddddf	dedededed	ed
edededee   ddfˆ fd„Z	ˆ xZ
S )ÚCppTorchOptionsaf  
    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„  r‘  r&  rç   ré   rè   rì  rM  rQ  r   Nc
           	      óÖ  •— t         ‰| �  |||	|¬«       || _        t        | j                  ||||||¬«      \  }
}}}}}}t        | j                  |
«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       | j                  «        y )N)ré   r&  rQ  rè   )rs   r„  r‘  rç   ré   rè   rì  )rZ  r÷   ró   r  rë   r­   rì   rí   rî   rï   rð   rñ   rò   rþ   )rö   r„  r‘  r&  rç   ré   rè   rì  rM  rQ  Útorch_definationsr÷  Útorch_cflagsÚtorch_ldflagsrø  rù  Útorch_passthough_argsr[  s                    €r   r÷   zCppTorchOptions.__init__E  så   ø€ ô 	‰ÑØ%Ø#Ø#Ø/ð	 	ô 	
ð "ˆŒô "ØŸ™ØØ+ØØ%Ø/Ø-ô
ñ	
ØØØØØ ØØ!ô 	�T×&Ñ&Ð(9Ô:Ü�T×'Ñ'Ð);Ô<Ü�T—\‘\ <Ô0Ü�T—]‘] MÔ2Ü�T×)Ñ)Ð+?Ô@Ü�T—_‘_ oÔ6Ü�T×*Ñ*Ð,AÔBØ×ÑÕ r    ©r!  r"  r#  r$  r   r   r|   r   r%  r÷   r\  r]  s   @r   r  r  9  s•   ø„ ñ	ð *Ø %Ø ØØ"Ø"'Ø!&ØØ%'ñ.!àð.!ð ð.!ð ð	.!ð
 ð.!ð ð.!ð  ð.!ð ð.!ð ð.!ð ˜c‘]ð.!ð 
÷.!ñ .!r    r  c                  óú   — t        j                  «       rgt        j                  j                  €Ldt
        j                  vr9dt
        j                  vr&t        j                  «       t
        j                  d<   y y y y y )NÚ	CUDA_HOMEÚ	CUDA_PATH)	r   rh   ri   rj   rk   r5   rP   r   Úcudar   r    r   Ú_set_gpu_runtime_envr  v  sa   € ä×ÑÔÜ�M‰M×ÑÐ%ØœrŸz™zÑ)ØœrŸz™zÑ)ä"-×"2Ñ"2Ó"4Œ�
‰
�;Òð *ð *ð &ð 	r    Úlpathsc                 óÎ  — t        | «      D ]×  \  }}dt        j                  v sŒ|j                  t        j                  d   «      sŒ<t        j                  j                  |› d�«      rŒ_t        j                  |«      D ]a  \  }}}d|v sŒt        j                  j                  ||«      | |<   | j                  t        j                  j                  | |   d«      «        Œ× ŒÙ y )Nr  z/libcudart_static.azlibcudart_static.aÚstubs)	Ú	enumerater5   rP   Ú
startswithr8   rM   r¾   r9   rª   )r  Úir8   rÁ   rÂ   rÃ   s         r   Ú_transform_cuda_pathsr  €  sµ   € ô ˜VÓ$ò 
‰ˆˆ4àœ2Ÿ:™:Ò%Ø—‘¤§
¡
¨;Ñ 7Õ8Ü—G‘G—N‘N d VÐ+>Ð#?Õ@ä%'§W¡W¨T£]ò Ñ!��d˜EØ'¨5Ò0Ü "§¡§¡¨T°4Ó 8�F˜1‘IØ—M‘M¤"§'¡'§,¡,¨v°a©y¸'Ó"BÔCÙñ	ñ
r    r  c                 ól  — g }g }g }g }g }g }g }	t        j                  «       rwdt        j                  vredt        j                  vrSt        j
                  j                  rt        j                  «       nt        j                  «       t        j                  d<   t        «        ddlm}
 |
j                  | «      }|
j                  | «      }| r�|j                  t        j
                  j                  rdnd«       t        j
                  j                  �4t        j                  «       r|dgz  }n|dd	gz  }|j                  d
«       n"t        j                  «       r|dgz  }n|g d¢z  }|rlt        j                  «       r1ddlm} t        j$                  j'                   |«       «      › g}||z  }| r%t        j
                  j                  €t)        |«       t        j                  «       rÀt        j
                  j                  �B|j                  t        j$                  j+                  t        j                  «       d«      «       nA|j                  t        j$                  j+                  t        j                  «       d«      «       |r!| rt        j
                  j                  €|sdg}	|||||||	fS )Nr  r  r   )Úcpp_extensionz	 USE_ROCMz	 USE_CUDAÚamdhip64Úc10_hipÚ	torch_hipz __HIP_PLATFORM_AMD__r  )Úc10_cudar  Ú
torch_cuda)Úcpp_prefix_pathrs  z*-Wl,-Bstatic -lcudart_static -Wl,-Bdynamic)r   rh   r5   rP   ri   rj   rk   r   Úrocmr  r  Útorch.utilsr  Úinclude_pathsÚlibrary_pathsrª   r2   r   r8   r±  r  r9   )r  rç   ré   rT  rá   râ   rã   rä   rå   rU  r  r   Úcpp_prefix_include_dirs                r   Úget_cpp_torch_cuda_optionsr&  ‘  s-  € ð
  €KØ €LØ€FØ€GØ "€NØ€IØ!#€Oä×ÑÔØœrŸz™zÑ)ØœrŸz™zÑ)ô #(§-¡-×"3Ò"3ŒK×ÑÔ¼×9IÑ9IÓ9Kô 	�
‰
�;Ñô ÔÝ)à ×.Ñ.¨tÓ4€LØ"×0Ñ0°Ó6€NáØ×Ñ¬%¯-©-×*;Ò*;™;ÀÔMä�=‰=×ÑÐ(Ü×ÑÔ!Ø˜j˜\Ñ)‘	à˜i¨Ð5Ñ5�	Ø×ÑÐ6Õ7ä×ÑÔ!Ø˜f˜XÑ%‘	àÒ?Ñ?�	áÜ×ÑÔÝAä)+¯©¯©¹Ó9JÓ)KÐ(LÐ%NÐ"ØÐ2Ñ2ˆLá”E—M‘M×%Ñ%Ð-Ü! .Ô1ä×ÑÔÜ�=‰=×ÑÐ(Ø×Ñ¤§¡§¡¬[×-=Ñ-=Ó-?ÀÓ KÕLà×Ñ¤§¡§¡¬[×-=Ñ-=Ó-?ÀÓ KÔLá™Ü�}‰}× Ñ Ð(Ù#à'SÐ&T�Oð 	ØØØØØØðð r    c                   óf   ‡ — e Zd ZdZeddddddddf	dedededed	ed
edededee   ddfˆ fd„Z	ˆ xZ
S )ÚCppTorchCudaOptionszÊ
    This class is inherited from CppTorchOptions, which automatic contains
    base cxx build options and torch common build options. And then it will
    maintains cuda device related build args.
    FTr   r„  r‘  r  rç   ré   rè   rì  rM  rQ  r   Nc
           	      óÎ  •— t         ‰| �  |||||||	¬«       g }
g }g }g }g }g }g }t        |||¬«      \  }
}}}}}}t        | j                  |
«       t        | j
                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       t        | j                  |«       | j                  «        y )N)r„  r‘  rç   ré   rè   rì  rQ  )r  rç   ré   )rZ  r÷   r&  r­   rì   rí   rî   rï   rð   rñ   rò   rþ   )rö   r„  r‘  r  rç   ré   rè   rì  rM  rQ  Úcuda_definationsÚcuda_include_dirsÚcuda_cflagsÚcuda_ldflagsÚcuda_libraries_dirsÚcuda_librariesÚcuda_passthough_argsr[  s                    €r   r÷   zCppTorchCudaOptions.__init__ã  sü   ø€ ô 	‰ÑØØ+ØØ%Ø/Ø-Ø#ð 	ô 	
ð ')ÐØ')ÐØ!#ˆØ"$ˆØ)+ÐØ$&ˆØ*,Ðô 'Ø °|ô
ñ	
ØØØØØØØ ô 	�T×&Ñ&Ð(8Ô9Ü�T×'Ñ'Ð):Ô;Ü�T—\‘\ ;Ô/Ü�T—]‘] LÔ1Ü�T×)Ñ)Ð+>Ô?Ü�T—_‘_ nÔ5Ü�T×*Ñ*Ð,@ÔAØ×ÑÕ r    r  r]  s   @r   r(  r(  Ü  s•   ø„ ñð *Ø %ØØØ"Ø"'Ø!&ØØ%'ñ0!àð0!ð ð0!ð ð	0!ð
 ð0!ð ð0!ð  ð0!ð ð0!ð ð0!ð ˜c‘]ð0!ð 
÷0!ñ 0!r    r(  rÅ   c                 óÊ   — t         j                  j                  | «      }t         j                  j                  |«      \  }}t         j                  j	                  | «      }||fS )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 accoding OS:
    Linux: /tmp/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.so
    Windows: [Windows temp path]/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.dll
    )r5   r8   r€  Úsplitextr±  )rÅ   Úname_and_extrÄ   ÚextÚdirs        r   Ú&get_name_and_dir_from_output_file_pathr6    sL   € ô" —7‘7×#Ñ# IÓ.€LÜ—‘× Ñ  Ó.�I€Dˆ#Ü
�'‰'�/‰/˜)Ó
$€Cà�ˆ9Ðr    c                   ó†   — e Zd ZdZdefd„Zdefd„Z	 ddedeeee   f   de	dedd	f
d
„Z
defd„Zdefd„Zdeeef   fd„Zy	)Ú
CppBuilderaž  
    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 mutliple 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 taget 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                 ó   — t         rd}|S d}|S )Nz.pydz.sor)  )rö   ÚSHARED_LIB_EXTs     r   Ú__get_python_module_extz"CppBuilder.__get_python_module_ext?  s   € Ý#.˜ˆØÐð 5:ˆØÐr    c                 ó   — t         rd}|S d}|S )Nz.objz.or)  )rö   ÚEXTs     r   Ú__get_object_extzCppBuilder.__get_object_extC  s   € Ý#ˆfˆØˆ
ð *.ˆØˆ
r    rÄ   ÚsourcesÚBuildOptionÚ
output_dirNc                 óà  — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        || _        |j                  «       | _         |j                  «       | _
        |j                  «       | _        || _        |j!                  «       | _        | j"                  r| j%                  «       n| j'                  «       }t(        j*                  j-                  | j                  | j                  › |› �«      | _	        t/        |t0        «      r|g}t3        j4                  «       rŒ| j                  r| j                  s|}nZ|D �cg c]!  }t(        j*                  j7                  |«      ‘Œ# }}t(        j*                  j7                  | j                  «      | _	        dj-                  |«      | _        ndj-                  |«      | _        |j;                  «       D ];  }t<        r| xj                  d|› d�z  c_        Œ#| xj                  d|› d�z  c_        Œ= |j?                  «       D ];  }	t<        r| xj                  d|	› d�z  c_        Œ#| xj                  d|	› d�z  c_        Œ= |jA                  «       D ];  }
t<        r| xj                  d|
› d�z  c_        Œ#| xj                  d	|
› d�z  c_        Œ= |jC                  «       D ];  }t<        r| xj                  d|› d�z  c_        Œ#| xj                  d|› d�z  c_        Œ= |jE                  «       D ];  }t<        r| xj
                  d
|› d�z  c_        Œ#| xj
                  d|› d�z  c_        Œ= |jG                  «       D ];  }t<        r| xj                  d|› d�z  c_        Œ#| xj                  d|› d�z  c_        Œ= |jI                  «       D ]  }| xj                  |› d�z  c_        Œ y c c}w )Nrž   FrS  rÛ   ú-z/D z-D z/I z-Iz
/LIBPATH:"z" z-Lú"z.lib" z-l)%rë   Ú_cflags_argsÚ_definations_argsÚ_include_dirs_argsÚ_ldflags_argsÚ_libraries_dirs_argsÚ_libraries_argsÚ_passthough_parameters_argsÚ_output_dirÚ_target_filerô   ró   Ú_namer   r  r  r  rõ   Ú_CppBuilder__get_object_extÚ"_CppBuilder__get_python_module_extr5   r8   r9   rn   r%  r   rh   r€  Ú_sources_argsr  rg   r  r  r
  r  r  r  )rö   rÄ   r?  r@  rA  Úfile_extÚinp_namer  ÚcflagÚ
definationÚinc_dirÚldflagÚlib_dirr×  Úpassthough_args                  r   r÷   zCppBuilder.__init__G  s¸  € ð ˆŒØˆÔØ!#ˆÔØ"$ˆÔØˆÔØ$&ˆÔ!Ø!ˆÔØ+-ˆÔ(àˆÔØˆÔà(-ˆÔØ$ˆŒàˆŒ
ð %×1Ñ1Ó3ˆŒØ"-×"CÑ"CÓ"EˆÔØ$×1Ñ1Ó3ˆŒà%ˆÔà(×9Ñ9Ó;ˆÔð ×!Ò!ð ×!Ñ!Ô#à×-Ñ-Ó/ð 	ô
 ŸG™GŸL™L¨×)9Ñ)9¸d¿j¹j¸\È(ÈÐ;TÓUˆÔä�gœsÔ#Ø�iˆGä×ÑÔØ�~Š~ d×&=Ò&=Ø"‘ð :AÖA°AœBŸG™G×,Ñ,¨QÕ/ÐA�ÐAÜ$&§G¡G×$4Ñ$4°T×5FÑ5FÓ$G�Ô!à!$§¡¨(Ó!3ˆDÕà!$§¡¨'Ó!2ˆDÔà ×+Ñ+Ó-ò 	2ˆEÝØ×!Ò! q¨¨¨q \Ñ1Ö!à×!Ò! q¨¨¨q \Ñ1Ö!ð		2ð &×5Ñ5Ó7ò 	>ˆJÝØ×&Ò&¨C°
¨|¸1Ð*=Ñ=Ö&à×&Ò&¨C°
¨|¸1Ð*=Ñ=Ö&ð		>ð #×3Ñ3Ó5ò 	;ˆGÝØ×'Ò'¨S°°	¸Ð+;Ñ;Ö'à×'Ò'¨R°¨y¸¨?Ñ:Ö'ð		;ð "×-Ñ-Ó/ò 	4ˆFÝØ×"Ò"¨¨&¨° mÑ3Ö"à×"Ò"¨¨&¨° mÑ3Ö"ð		4ð #×5Ñ5Ó7ò 	=ˆGÝØ×)Ò)¨z¸'¸À"Ð-EÑEÖ)à×)Ò)¨r°'°¸!¨_Ñ<Ö)ð		=ð ×,Ñ,Ó.ò 	4ˆCÝØ×$Ò$¨!¨C¨5°¨Ñ7Ö$à×$Ò$¨"¨S¨E°¨Ñ3Ö$ð		4ð *×=Ñ=Ó?ò 	EˆNØ×,Ò,°>Ð2BÀ!Ð0DÑDÖ,ñ	EùòW Bs   Å&&O+c                 ó„  ‡ — dt         dt         dt         dt         dt         dt         dt         dt         d	t         d
t         dt         fˆ fd„} |‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ‰ j                  ¬«
      }|S )NrX   r?  Úinclude_dirs_argsÚdefinations_argsÚcflags_argsÚldflags_argsÚlibraries_argsÚlibraries_dirs_argsÚpassthougn_argsÚtarget_filer   c
                 ó  •— t         r-| › d|› d|› d|› d|› d|› d|	› d|› d|› d|› d�}
t        |
«      }
|
S ‰j                  rdnd}t        j                  ddd| › d|› d|› d|› d|› d|› d|› d|› d|› d|› d|	› d�«      j                  «       }
|
S )	NrS  z /LD /Fez /link z-crž   z[ \n]+z
                    z -o )rg   rÝ   rõ   r{   Úsubr^   )rX   r?  r[  r\  r]  r^  r_  r`  ra  rb  rÑ   Úcompile_only_argrö   s               €r   Úformat_build_commandz9CppBuilder.get_command_line.<locals>.format_build_command¦  s  ø€ õ ð  �j Ð"3Ð!4°AÐ6FÐ5GÀqÈÈÐUVÐW^ÐV_Ð_`Ø&Ð' x°¨}¸GÐDWÐCXÐXYÐZhÐYiÐijÐkwÐjxÐxyð{ð ô /¨sÓ3�ð ˆJð ,0×+=Ò+=¡4À2Ð Ü—f‘fØØðØ�J˜a ˜y¨Ð*:Ð);¸1¸[¸MÈÐK\ÐJ]ð ^Ø$Ð% Q | n°A°nÐ5EÀQÐGZÐF[Ð[\Ð]mÐ\nÐnrÐs~Ðrð @ðó÷ ‘%“'ð ð ˆJr    )
rX   r?  r[  r\  r]  r^  r_  r`  ra  rb  )r%  rë   rQ  rG  rF  rE  rH  rJ  rI  rK  rM  )rö   rf  Úcommand_lines   `  r   Úget_command_linezCppBuilder.get_command_line¥  sß   ø€ ð	Üð	äð	ô  #ð	ô "ð		ô
 ð	ô ð	ô  ð	ô "%ð	ô !ð	ô ð	ô õ	ñ@ ,Ø—^‘^Ø×&Ñ&Ø"×5Ñ5Ø!×3Ñ3Ø×)Ñ)Ø×+Ñ+Ø×/Ñ/Ø $× 9Ñ 9Ø ×<Ñ<Ø×)Ñ)ô
ˆð Ðr    c                 ó,   — t        | j                  «      S r   )rÝ   rM  rù   s    r   Úget_target_file_pathzCppBuilder.get_target_file_pathÔ  s   € Ü'¨×(9Ñ(9Ó:Ð:r    c                 ó(  — t        | j                  «       t        j                  j	                  | j                  | j
                  › dt        › �«      }t        |«       | j                  «       }t        ||¬«      }t        |«       || j                  fS )z«
        It is must need a temperary directory to store object files in Windows.
        After build completed, delete the temperary directory to save disk space.
        r    )rÉ   )r»   rL  r5   r8   r9   rN  Ú_BUILD_TEMP_DIRrh  rØ   rÇ   rM  )rö   Ú_build_tmp_dirÚ	build_cmdrÒ   s       r   ÚbuildzCppBuilder.build×  s|   € ô
 	! ×!1Ñ!1Ô2ÜŸ™Ÿ™Ø×Ñ §¡ ¨A¬oÐ->Ð?ó
ˆô 	! Ô0à×)Ñ)Ó+ˆ	ä  °Ô?ˆä�NÔ#Ø�t×(Ñ(Ð(Ð(r    )rž   )r!  r"  r#  r$  r%  rP  rO  r
   r   rß   r÷   rh  rj  r	   Úbytesro  r   r    r   r8  r8  .  s¡   „ ñð ¨ó ð #ó ð ñ\Eàð\Eð �s˜D ™I�~Ñ&ð\Eð &ð	\Eð
 ð\Eð 
ó\Eð|- #ó -ð^; có ;ð)�u˜U C˜ZÑ(ô )r    r8  )T)zc++17)Tr   r   )FF)pr¢   r¹   Ú	functoolsr  Úloggingr5   r4   r{   rÌ   rR   r;   r3   r¢  r¦  Úctypesr   Úpathlibr   Útypingr   r   r   r   r	   r
   ri   Útorch._dynamo.utilsr   Útorch._inductorr   r   Útorch._inductor.cpu_vec_isar   r   Ú%torch._inductor.runtime.runtime_utilsr   Útorch.torch_versionr   rh   Ú	triton.fbr   Útorch._inductor.fb.utilsr   r   r   r   r|   rl  r  Ú	_IS_LINUXrà  rg   r`   Ú	getLoggerr!  rN   Ú	lru_cacher%  rD   r:   rc   rr   ry   r~   r€   rƒ   r�   r’   r”   r�   r—   r™   r¦   r­   r²   r»   rÇ   rp  rÕ   rØ   rÝ   rß   r*  r-  r:  rG  rP  rV  rX  rb  re  rg  ro  rƒ  r�  rž  rª  r¸  r½  rÂ  rÌ  rÒ  rë  rî  r  r  r  r  r&  r(  r6  r8  r   r    r   ú<module>r€     s@  ðó Û Û Û Û Û 	Û Û 	Û Û Û Û 
Û Û Ý Ý ß >× >ã Ý ,ß 'ß ?Ý ;Ý ,ð €6×ÑÔÝ%÷ô ð sð °cð ¸dó ð cð °Sð ¸Tó ð Sð °Cð ¸Dó ð˜dó ð
 €ð �L‰L×#Ñ# GÓ,€	Ø�L‰L×#Ñ# HÓ-€	Ø�l‰l˜gÑ%€á'2™¸Ð à€g×Ñ˜Ó!€ð €×Ñ�QÓð! ð !¨ò !ó ð!ð8˜só ð4 €×Ñ�TÓð¨3ð °4ò ó ðð"˜#ó ð" €×Ñ�TÓð5 #ð 5¨$ò 5ó ð5ð
?˜Cð ? Dó ?ð9˜#ð 9 $ó 9ð €×Ñ�TÓð˜cð  dò ó ðð" €×Ñ�TÓð( Sð (¨Tò (ó ð(ðV €×Ñ�TÓð'�ò 'ó ð'ð €×Ñ�TÓð)�$ò )ó ð)ð €×Ñ�TÓð2˜4ò 2ó ð2ð €×Ñ�TÓð/˜ò /ó ð/ð €×Ñ�TÓð+�Dò +ó ð+ð¨ð °ó ð*.˜D ™Ið .°°c±ð .¸tó .ð
¨4°©9ð ¸¸c¹ó ð sð ¨tó ð	˜#ð 	 $ó 	ð˜sð ¨ð °ó ð,/˜cð /¨ð /°ó /ð
¨ð °ó ÷f ñ f ñR¨ð ¸¸S¹	ó ñ" ð "°$°s±)ó "ð¨Sð °T¸#±Yó ð, $ s¡)ó ð2 Dð ¨T°#©Yó ð, Ø!#ñ	 Øð àð ð ð ð ˜#‘ð	 ð
 ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWó ôF-!Ð!ô -!ð` d¨3¡ió ð*¨4°©9ó *ð2 d¨3¡ió 2ð  c¡ó ð*.1Øð.1àð.1ð ð.1ð ˆ4�‰9�d˜3‘i  c¡Ð*Ñ+ó	.1ðb¨6ð °e¸DÀ¹IÀtÈCÁyÐ<PÑ6Qó ð*3Øð3Ø%)ð3à
ˆ4�‰9�d˜3‘i  c¡Ð*Ñ+ó3ð>
 $ s¡)ó 
ð0 %¨¨S©	°4¸±9Ð(<Ñ"=ó 0ð( €×Ñ�TÓð¨ò ó ðð €×Ñ�TÓð˜˜t S˜yÑ)ò ó ðð& €×Ñ�TÓð
¨3ð 
¸#ð 
À$ò 
ó ð
ð €×Ñ�TÓð?¨ð ?°ò ?ó ð?ð<hTØðhTà
ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÐKÑLóhTðV¨$ð °4¸±9ó ðRØðRàðRð ðRð ð	Rð
 ðRð ðRð ðRð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWóRôj:!�jô :!óz5ð $ s¡)ð °ó ð& ØñHØ
ðHàðHð ðHð ˆ4�‰9�d˜3‘i  c¡¨D°©I°t¸C±yÀ$ÀsÁ)ÈTÐRUÉYÐVÑWó	HôV7!˜/ô 7!ðtØðà
ˆ3�ˆ8�_ó÷0y)ò y)r    