
    qiN                    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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mZ d dlmZ d dlmZ d dl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"jV                         rd dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 n$dededdfdZ0dededdfdZ1dededdfdZ2de4fdZ3dZ5ejl                  jo                  e8      Z9ejl                  ju                  ejl                  ju                  e9            Z;ejl                  jy                  e;d      Z=ej                  j}                  d      Z?ej                  j}                  d      Z@ej                  dk(  ZAdZBeAr ej                         fndZD ej                  eF      ZG ej                  d      deIdeIfd       ZJdeIfdZKej                  d eIddfd!       ZM G d" d#      ZNej                  d eIddfd$       ZOej                  d eIdeIfd%       ZPdeIfd&ZQd'e4deReIeIf   fd(ZSd)eId*eId+eId,eIdeIf
d-ZTej                  d.eIde4fd/       ZUej                  d.eIde4fd0       ZVej                  d.eIde4fd1       ZWej                  d.eIde4fd2       ZXej                  d.eIde4fd3       ZYej                  de4fd4       ZZej                  de4fd5       Z[ej                  de4fd6       Z\ej                  de4fd7       Z]ej                  de4fd8       Z^ej                  d eIdeIfd9       Z_d:e`eI   d;e`eI   ddfd<Zad=e`eI   de`eI   fd>Zbd?eIddfd@Zcd?eIddfdAZddBeIdCeIddfdDZedBeIdCeIddfdEZfdFeIdeIfdGZg G dH dI      ZhddJe4de`eI   fdKZiddLeIde`eI   fdMZjd.eIde`eI   fdNZkd.eIde`eI   fdOZlde`eI   fdPZmdeRe`eI   e`eI   f   fdQZn	 dd.eIdRe4deRe`eI   e`eI   f   fdSZodTe4de`eI   fdUZp	 	 	 dd.eIdTe4dJe4dVeeI   dRe4deRe`eI   e`eI   e`eI   e`eI   e`eI   e`eI   e`eI   f   fdWZq G dX dYeh      Zrde`eI   fdZZsde`eI   fd[Ztde`eI   fd\Zud.eId]e4d'e4deRe`eI   e`eI   e`eI   f   fd^Zvd_e&deRe`eI   e`eI   f   fd`Zwdae4d]e4deRe`eI   e`eI   e`eI   f   fdbZxde`eI   fdcZydeRe`eI   e`eI   f   fddZzej                  de4fde       Z{ej                  deRe4eIf   fdf       Z|ej                  d.eIdgeIddfdh       Z}ej                  d.eIddfdi       Z~d.eIdeRe`eI   e`eI   e`eI   e`eI   e`eI   e`eI   f   fdjZdeRe`eI   e`eI   f   fdkZdle4dme4de`eI   fdnZde`eI   fdoZd.eId_e&dae4d]e4d'e4dle4dme4deRe`eI   e`eI   e`eI   e`eI   e`eI   e`eI   e`eI   f   fdpZ G dq drer      ZddsZ ej                  dt      dueIdee   fdv       Zdwe`eI   ddfdxZ	 	 ddyeId]e4dze4deRe`eI   e`eI   e`eI   e`eI   e`eI   e`eI   e`eI   f   fd{Z G d| d}e      Zd~eIdeReIeIf   fdZ G d d      ZdeIdeIdCeIddfdZy)    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                       y N r   r   s     a/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/_inductor/cpp_builder.pyr   r   /           c                       y r   r   r   s     r   r   r   2   r    r!   c                       y r   r   r   s     r   r   r   5   r    r!   c                       y)NFr   r   r!   r   r   r   8   s    r!   CxxBuildz_inductor/script.ldlinuxdarwinwin32zx86_64-w64-mingw32-g++r      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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*yy!=>:'>GGLL:6  2/1C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:   l   s    WW\\)+u-Fww||FE51H77>>(#,-

{G4=LL)E!!x(+ 	 " Or!   compilerc                     	 t        j                  | dgt         j                         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stderr
Compiler:  is not found.N)r;   r<   STDOUTr>   RuntimeErrorr=   )rX   r   s     r   check_compiler_exist_windowsra      sZ    
7 3J<M<MN KZz@AsJ%% s   '* 	AAAAc                   8    e Zd ZdeddfdZddZddZdefdZy)	WinPeFileVersionInfo	file_pathr   Nc                     || _         t        j                  d      | _        | j	                          | j                          y )Nzversion.dll)rd   ctypesWinDLLversion_dll_setup_functions_get_version_info)selfrd   s     r   __init__zWinPeFileVersionInfo.__init__   s2    "!==7 r!   c                    t         j                  t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t         j                  t         j                  t         j                  t         j                  g| j                  j                  _        t         j                  | j                  j                  _        t         j                  t         j                  t        j                  t        j                        t        j                  t         j                        g| j                  j                   _        t         j                  | j                  j                   _        y r   )r   LPCWSTRLPDWORDrh   GetFileVersionInfoSizeWargtypesDWORDrestypeLPVOIDGetFileVersionInfoWBOOLLPCVOIDrf   POINTERc_void_pUINTVerQueryValueWrk   s    r   ri   z%WinPeFileVersionInfo._setup_functions   s    =
009 <D>>008 NNNNOO	9
,,5 8@}},,4 NN6??+NN8==)	4
''0 3;--''/r!   c                    t        j                         }| j                  j                  | j                  t        j                  |            }|dk(  rt        d| j                   d      t        j                  |      | _	        | j                  j                  | j                  d|| j                        }|st        d| j                   d      y )Nr   zCan't get version info size of .zCan't get version info of )r   rr   rh   rp   rd   rf   byrefr`   create_string_bufferversion_inforu   )rk   dummysizesuccesss       r   rj   z&WinPeFileVersionInfo._get_version_info   s     77NNFLL/
 19!@@PPQRSS"77=""66NNAtT%6%6
 !;DNN;K1MNN r!   c                 d   t        j                         }t        j                         }| j                  j                  | j                  dt        j                  |      t        j                  |            }|r|j                  dk(  ryg }d}|j                  t        |j                  dz        D ]o  }|dz  }t        j                  |j                  |z   d      }t        j                  |d d d      }t        j                  |dd d      }	|j                  ||	f       q |S t        d       |S )Nz\VarFileInfo\Translationr         littlezBuffer is None)rf   ry   r   rz   rh   r{   r   r   valuerange	string_atint
from_bytesappendprint)
rk   	lp_bufferu_lenr   translationslang_idioffsetdata	code_pages
             r   get_language_idz$WinPeFileVersionInfo.get_language_id   s   OO%	""11'LL#LL	
 %++*??&5;;!+, :Q''	&(@!D..bq8<NN4!9h?	##Wi$89:  "#r!   r   N)	__name__
__module____qualname__strrl   ri   rj   r   r   r   r!   r   rc   rc      s-    !# !$ !@.O" r!   rc   c                    dt         t        t        f   fd}t        |       syt        j
                  j                  |       r| }n |       \  }}|du ryt        |      }|j                         }|dk7  rt        d      y)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            	         t         j                  j                  t         j                  j	                  dd      ddd      } t         j                  j                  |       s`t         j                  j                  t         j                  j	                  dd      ddd      } t         j                  j                  |       sy	 | d	d
ddddddg	}t        j                  |dd      j                         }|syt         j                  j                  |ddd      }t         j                  j                  |      syt        j                  |      D cg c]A  }t         j                  j                  t         j                  j                  ||            r|C }}|syt        |d      d   }t         j                  j                  ||dddd      }t         j                  j                  |      rd|fS t         j                  j                  ||dddd      }t         j                  j                  |      rd|fS 	 yc c}w # t        j                  t        f$ r Y yw xY w)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_pathz3check_msvc_cl_language_id.<locals>.get_msvc_cl_path   s!    ww||JJNN.0IJ%	
 ww~~l+77<<

~/BC)	L 77>>,/ <	 C"
C )55$eg  #  !ggll?D'6RO77>>/2 
 O4 77==oq!AB    
 $ %+,<d%KA%N" ggll&G ww~~g&W}$ '',,#* 77>>'*=( + I B --/@A 		s@   3H> 5AH> 7H> AH9H> AH> 0AH> 9H> >II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eD#I. Rh x 	ww~~h-/{E>'4L**,G$=
 	
 r!   c                    	 t        j                  | dgt         j                  d      }d}|j                         D ]8  }d	|v s|j                  d
d      d   j                         j                         }: |t	        d|  d|  d      |dvrt	        d|  d|       |S # t        $ r}t	        d|  d      |d}~wt
        $ r}t	        d|  d      |d}~ww xY w)zS
    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%6T
 F  <T!ZZQ'+11399;F< ~-hZ7cdlcmmpq
 	
 ''-hZ7TU[T\]
 	
 M)  IZz@AqH B^H:S9:ABs#   (B" "	C+B;;CCCc                     t         j                  j                  dk(  r@t        j                  dk7  r-t
        } t         j                  j                  st        |        | S t        rCt        j                  j                  dd      } t        |       } t        |        t        |        | S t        j                         rt         j"                  S t%        t         j&                  j(                  t*        t,        f      r$t-        t         j&                  j(                        }nt         j&                  j(                  f}t/        |      } | S )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1Y>LLG# ""33$X.::>>%.+H5$X.!(+ O >>!fjjnntUm46::>>*Fjjnn&F&v.Or!   use_relative_pathc                     t         rt        d      t        j                         r6t        j
                  }| rt        j                  nt        j                  }||fS d}d}||fS )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     sf    :;;B % ,, ((  w; BGw;r!   
cubin_filekernel_namer   r   c                    | dz   }| d| d|  }t        j                  |j                         ddd       | d| }t        j                  |j                         ddd       t        j                  dd|       }|d	| d
| dz   d| d| dz   d| d| dz   |z   }t        j                  |j                         ddd       |S )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<
HCNN399;t$dKIWX`Wa
bCNN399;t$dK wZ0I$YKyW
M	N#I;h{m6
J	K $I;gk]%
H	I 		  NN399;t$dKOr!   cpp_compilerc                 x    t        j                  | dg      j                  d      }d|j                         d   v S )Nr1   utf8Appler   )r;   r<   decoder   )r   version_strings     r   _is_apple_clangr     s<    ,,lK-HIPPQWXN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   r   r   r   r*   r`   r   r   s    r   	_is_clangr     sl     ||x|,,	99/>o  BIIm\:;;		.=>>r!   c                 X    t        |       ryt        t        j                  d|             S )NFz(gcc|g\+\+|gnu-c\+\+))r   r   r   r*   r   s    r   _is_gccr    s&     		2LABBr!   c                     t         sy	  t        j                  | dgt        j                        j	                         j
                  t         }d|j                         d   v S # t        $ r Y yw xY w)NFrZ   r[   	Microsoftr   )	r   r;   r<   r_   r   r   SUBPROCESS_DECODE_ARGSr   r>   )r   
output_msgs     r   r   r     sr    J##\7$;JDUDUVUWV+- 	
 j335a888 s   AA$ $	A0/A0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 y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 r~   N)r   r   r`   )r  min_versions     r   _check_minimal_versionz2_is_intel_compiler.<locals>._check_minimal_version  s8     %0jW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##{+J4F4F UWV+	- 	 $z'<'<'>q'AA992LA&u 
  YY'A:NN)(..q1&|G'<=   %% s   B?C 	C.C.-C.c                  (    t        t                     S r   )r  r   r   r!   r   is_gccr    s    #%&&r!   c                  (    t        t                     S r   )r   r   r   r!   r   is_clangr    s    %'((r!   c                  (    t        t                     S r   )r  r   r   r!   r   r  r    s    .011r!   c                  (    t        t                     S r   )r   r   r   r!   r   is_apple_clangr  "  s    +-..r!   c                  (    t        t                     S r   )r   r   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        $ rN 	  t        j                  | dgt        j
                  |      j                  t         }n# t        $ r Y Y yw xY wY |w xY w)
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%6C

&(* $++D#6N#++D#6N  	Z44;'
0A0Asf,.N  		 s5   9B 	C9CC	CCCCC	dest_listsrc_listc                 4    | j                  d |D               y )Nc              3   F   K   | ]  }t        j                  |        y wr   r"  deepcopy).0items     r   	<genexpr>z_append_list.<locals>.<genexpr>C  s     >TT]]4(>   !)extend)r%  r&  s     r   _append_listr0  B  s    >X>>r!   	orig_listc                 D    g }| D ]  }||vs|j                  |        |S r   )r   )r1  new_listr,  s      r   _remove_duplication_in_listr4  F  s1    H "xOOD!" Or!   path_dirc                    t         j                  j                  |       s	 t        |       j	                  dd       y y # t
        $ r6}|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EEXISTr`   )r5  r   s     r   _create_if_dir_not_existr=  N  sr    77>>(#	ON   = $  	OyyELL("%9(#DE3N )	Os   ? 	A>,A99A>c                    t         j                  j                  |       rt        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)r5  rootdirsfilesnamerd   dir_paths          r   _remove_dirrH  W  s    	ww~~h!#5!A 	#D$ %GGLLt4			)$%  #77<<d3"#		# 	  r!   cmd_linecwdc                    t        j                  |       }	 t        j                  ||dt        j                  t        j
                         y # t        j                  $ r_} |j                  j                  t         }d|v xs d|v }|rt        j                  dk(  rd}||z  }t        j                  ||      |d }~ww xY w)NT)rJ  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)rI  rJ  r   r   outputopenmp_probleminstructions          r   _run_compile_cmdrR  c  s    
++h
C6SZ__ZEVEV	
 (( 6 "891V;Qx6?Qcllh62  k!F!!#v.A56s   6A C !AB;;C c                 \    t        d      5  t        | |       d d d        y # 1 sw Y   y xY w)Ncompile_file)r   rR  )rI  rJ  s     r   run_compile_cmdrU  z  s)    	n	% (3'( ( (s   "+	orig_pathc                 R    t         r | j                  t        j                  d      S | S )N/)r   r#  r5   sep)rV  s    r   r   r     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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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.
    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s g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        |xs g | _        d | _        |	| _	        |
| _
        || _        || _        || _        y r   )	_compiler_definitions_include_dirs_cflags_ldflags_libraries_dirs
_libraries_passthrough_argsprecompiled_header	_aot_mode_use_relative_path_compile_only_precompiling_preprocessing)rk   rX   r\  r]  r^  r_  r`  ra  rb  rc  r   rd  re  rf  s                 r   rl   zBuildOptionsBase.__init__  s      "'2'8b(4(:"(,B#*=b*8*>B%._",<,B 26'(9#/#/$1r!   c                 :    | j                   rg | _        g | _        y y r   )rs  rm  rn  r|   s    r   _process_compile_only_optionsz.BuildOptionsBase._process_compile_only_options  s    #%D  DO r!   c                 p   t        | j                        | _        t        | j                        | _        t        | j                        | _        t        | j                        | _        t        | j
                        | _        t        | j                        | _        t        | j                        | _        y r   )r4  ri  rj  rk  rl  rm  rn  ro  r|   s    r   _remove_duplicate_optionsz*BuildOptionsBase._remove_duplicate_options  s~    78I8IJ89K9KL24<<@3DMMB:4;O;OP5dooF!<T=S=S!Tr!   c                 D    | j                          | j                          y r   )rw  ry  r|   s    r   _finalize_optionsz"BuildOptionsBase._finalize_options  s    **,&&(r!   c                     | j                   S r   )rh  r|   s    r   get_compilerzBuildOptionsBase.get_compiler      ~~r!   c                     | j                   S r   )ri  r|   s    r   get_definitionsz BuildOptionsBase.get_definitions  s       r!   c                     | j                   S r   )rj  r|   s    r   get_include_dirsz!BuildOptionsBase.get_include_dirs      !!!r!   c                     | j                   S r   )rk  r|   s    r   
get_cflagszBuildOptionsBase.get_cflags  s    ||r!   c                     | j                   S r   )rl  r|   s    r   get_ldflagszBuildOptionsBase.get_ldflags  s    }}r!   c                     | j                   S r   )rm  r|   s    r   get_libraries_dirsz#BuildOptionsBase.get_libraries_dirs  s    ###r!   c                     | j                   S r   )rn  r|   s    r   get_librarieszBuildOptionsBase.get_libraries  s    r!   c                     | j                   S r   )ro  r|   s    r   get_passthrough_argsz%BuildOptionsBase.get_passthrough_args  s    %%%r!   c                     | j                   S r   )rq  r|   s    r   get_aot_modezBuildOptionsBase.get_aot_mode  r~  r!   c                     | j                   S r   )rr  r|   s    r   get_use_relative_pathz&BuildOptionsBase.get_use_relative_path  s    &&&r!   c                     | j                   S r   )rs  r|   s    r   get_compile_onlyz!BuildOptionsBase.get_compile_only  r  r!   c                     | j                   S r   )rt  r|   s    r   get_precompilingz!BuildOptionsBase.get_precompiling  r  r!   c                     | j                   S r   )ru  r|   s    r   get_preprocessingz"BuildOptionsBase.get_preprocessing  s    """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`  ra  rb  rc  r   rd  w)r}  r  r  r  r  r  r  r  r  r  r  openjsondump)rk   r  attrsfs       r   save_flags_to_jsonz#BuildOptionsBase.save_flags_to_json  s    ))+//1 113oo''')"557++- $ 9 9 ;))+!%!;!;!= 113
 $_ 	 IIeQ	  	  	 s   5CC)r   NNNNNNNFFFFFr   )r   r   r   __doc__r   r	   r   r   rl   rw  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!   r   r[  r[    s    +/,0&*'+.2)-04"'""#"2"2 d3i("2 tCy)	"2
 c#"2 $s)$"2 !c+"2 DI&"2 #49-"2 "2  "2 "2 "2 "2 
"2H!
U)c !c !"$s) "DI T#Y $DI $tCy &d3i &d 't '"$ ""$ "#4 # s  t  r!   r[  warning_allc                      t         s| rdgS g S g S )NWallr   )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    	 wi !!wi !!r!   c                     t         rg d}|S ddg}t        |       r/t        j                  j                  rdnd}|j                  |       t        |       r|j                  d       |S )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   r^  ignored_optimization_arguments      r   _get_os_related_cpp_cflagsr    sp    
> M ()>?\" &&JJ 78 *
 MM78<  MM*%Mr!   c                 8    g }t         r|j                  d       |S )NNOMINMAXr   r   )r   os_definitionss     r   _get_os_related_cpp_definitionsr  6  s      "N 	j)r!   c                  (   t         rg } | S g d} | j                  d       t        j                  j                  s| j                  d       | j                  dt        j                  j
                          t               r| j                  d       | S )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  ?  sv    0 L!
 	+,zz55LL89}VZZ%S%S$TUV8LL12Lr!   c                  X    g } g }t         rddg} g d}| |fS | j                  d       | |fS )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  )r^  r_  s     r   !_get_inductor_debug_symbol_cflagsr  \  sD     FG!C 7? 	c7?r!   min_optimizec                    g }g }t         j                  j                  xs# t        j                  j                  dd      dk(   }t         j                  j                  xsd t         j                  j                  xsH t        j                  j                  dd      dk(  xs# t        j                  j                  dd      dk(  }|r5t        r||rdndgz  }n8||rt         j                  j                  nddgz  }nt        r|g d	z  }n|d
gz  }|rt               \  }}||z  }||z  }|t               z  }t        r	 ||fS t        j                  dk7  rt        |       r|j                  d       t        j                         st        j                          dk(  r|j                  d       nct        j                          dk(  r|j                  d       n:t        j                          dk(  r|j                  d       n|j                  d       t         j                  j"                  rt%        |       r|j                  d       ||fS )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  r^  r_  should_use_optimized_flagsshould_add_debug_symbol_flagsdebug_cflagsdebug_ldflagss           r   _get_optimization_cflagsr  n  s    FG 	)) 	E::>>7=D"
 	)) 	D,,	D::>>7=D	D ::>>6<C	 " "|t66FAM##==SW F
 **FtfF$&G&I#m,= 
#%%F* 7?' <<8#|$78 ##%##%2MM-0%%'94MM.1%%'94MM.1MM.1))i.EMM+&7?r!   do_linkc                     t         r	 ddgS t        j                         dk(  rdt               v rg dS g }| r|j	                  d       |j	                  d       |S )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$4D4F)F==EX	LLLr!   extra_flagsc                 R   g }g }g }g }g }	g }
g }t        | |      \  }}|t        |      z   t        |      z   t               z   t	        |       z   }|t        |       z  }t        sGt        j                  j                  r-t        |       r"|j                  d       |j                  d       |j                  dj                  |             t        j                  j                  dk(  r6|j                  ddg       t        t               dk(  r|j                  d       |||||z   |	|
|fS )	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   r/  r   r   )r   r  r  r  r  r\  r]  r^  r_  r`  ra  rb  
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9i>U}%{#CHH[1200I=!46F GH#I.'9##$MN 	+ r!   c                   `     e Zd ZdZ	 	 	 	 	 	 	 	 ddededee   dededed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.
    rd  r  r  r   rX   r  re  rf  r   Nc	                    t         |   ||||       |r|n	t               | _        t	        | j                  |xs |xs | |||      \  }	}
}}}}}t        | j                  |	       t        | j                  |
       t        | j                  |       t        | j                  |       t        | j                  |       t        | j                  |       t        | j                  |       | j                          y )N)rd  r   re  rf  )r   r  r  r  r  )superrl   r   rh  r  r0  ri  rj  rk  rl  rm  rn  ro  r{  )rk   rd  r  r  r   rX   r  re  rf  r\  r]  r^  r_  r`  ra  rb  	__class__s                   r   rl   zCppOptions.__init__  s     	%/%'	 	 	
 &.3C3E %FFG##%
	
 	T&&4T''6T\\6*T]]G,T))>:T__i0T++-=> r!   )FTr   Fr   FFF)	r   r   r   r  r   r   r   rl   __classcell__r  s   @r   r  r    s     # %'"'""#*!*! *! c]	*!
  *! *! *! *! *! 
*! *!r!   r  c                  
    ddgS )NTORCH_INDUCTOR_CPP_WRAPPERSTANDALONE_TORCH_HEADERr   r   r!   r   !_get_torch_cpp_wrapper_definitionr  '  s    (*CDDr!   c                      dgS )Nz" C10_USING_CUSTOM_GENERATED_MACROSr   r   r!   r   _use_custom_generated_macrosr   +  s    011r!   c                  J    t         st        j                         rg d} | S g S g S )N)C10_USE_GLOGC10_USE_MINIMAL_GLOG$C10_DISABLE_TENSORIMPL_EXTENSIBILITY)r   r   r   )fb_internal_macross    r   _use_fb_internal_macrosr  /  s+    "
 &%I	r!   rc  c                 0   g }g }g }t         r|||fS t        j                         r|j                  d       |j                  t        j
                         |j                  t        j                         |j                  t        j                         |j                  t        j                         |j                  t        j                         |j                  t        j                         |j                  t        j                         |j                  t        j                         |j                  t        j                         |j                  d       |r	|st        }n#t        j                   j#                  t              }t%        |       rz|j                  d       |j                  d       |j                  d|        |j                  dt        j&                  z          |j                  dt        j&                  z          |||fS )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   rc  r   r^  r]  rb  linker_scripts          r   _setup_standard_sys_libsr  >  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GG,,^<M\"##$:;##O4##n]O$DE##EK,A,A$AB##EK,A,A$AB<!111r!   vec_isac                 
   g }g }| t         k7  rs|j                  d | j                         D               | j                         g}t	        j
                         r(t        |       j                         }d| d| d| dg}||fS )Nc              3   F   K   | ]  }t        j                  |        y wr   r)  )r+  xs     r   r-  z0_get_build_args_of_chosen_isa.<locals>.<genexpr>m  s     F1dmmA&Fr.  zCPU_CAPABILITY=CPU_CAPABILITY_HAVE__CPU_DEFINITION)r   r/  build_macrobuild_arch_flagsr   r   r   upper)r  macrosbuild_flagscaps       r   _get_build_args_of_chosen_isar%  h  s    FK/!F0C0C0EFF//12g,$$&C!#'!#'uO,F ;r!   include_pytorchc                    ddl m}m} g } |       }t        j                  j
                  rQ|g}t        j                  dk7  rt        j                         s|j                  ddg       |s|j                  d       ng }t        j                  j                  dk(  rht        j                  j                  }|sJ d       t        |t              r|j                  |       n#t        |t              sJ |j                  |       t        j                  j                  dk(  rJt        j                  j                   sJ d	       |j                  t        j                  j                          t"        r|j                  d
       |||fS )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_extensionr(  r)  r   r   link_libtorchr3   r4   r   r/  r   r   aoti_shim_libraryr   r   r   aoti_shim_library_pathr   )r&  rc  r(  r)  ra  r]  r`  r0  s           r   _get_torch_related_argsr2  |  sO    HI ?L((()<<8#F,<,<,>g{34  044	A & 3 3 E E$ p$ +S1  !23!"3T:::  !2300I=""99 	
 <
 	
9 	f11HHI!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 )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5K HOO$5$Ay))(34~~,,y8BBD*$,,./K0@/ABCr!   c                     t               } t        j                  dt        rdnd      }|| j	                  |       t        rFt        t        t        j                  dd            j                  dz  j                               g}nt        j                  d      g}t        j                         r| j	                  t        j                         | |fS )Nr	  ntposix_prefix)schemelibsLIBDIR)r>  r6  r7  r   r   r   r   r8  r9  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++IdCDKKfT(*
 %33H=>"";#=#=>//r!   c                      	 d} t        j                  | j                               j                  d      }t	        t        j                  |            dkD  S # t         j                  t        f$ r Y yw xY w)Nzconda list llvm-openmp --jsonr   r   F)	r;   r<   r   r   lenr  loadsr=   r>   )commandrO  s     r   is_conda_llvm_openmp_installedrN    sd    1((9@@H4::f%&**&&(9: s   AA A32A3c                     	 t        j                  d      yt        j                  g d      j	                  d      j                         } t        j                  j                  |       }|| fS # t        j                  $ r Y yw xY w)Nbrewr   )rP  z--prefixrL  r   )
rR   rS   r;   r<   r   r   r5   r8   rM   r=   )libomp_pathomp_availables     r   homebrew_libomprS    sv    <<'
 ##$BCVF^UW 	 {3k))%% s   A/ AA/ /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=binr   TRUEKMP_DUPLICATE_LIB_OK)r;   r<   r   r5   r8   r9   rstripisfilerP   r   LoadLibraryr=   )r   rT  rO  omp_paths       r   perload_clang_libomp_winr\    s    	((,8N)OPWW
 77<<:77>>(#17BJJ-.X& $ %% s   BB B54B5c                 Z    dt         dt         dt        fd}	 g d}|D ]  } || |        y )Nr   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[   rV  rW  TF)r;   r<   r  r   r  rX  r5   r8   rY  rP   r   rZ  r=   )r   r^  rO  r[  s       r   _load_icx_built_in_lib_by_namez>perload_icx_libomp_win.<locals>._load_icx_built_in_lib_by_name  s    	Z,,!28*=>!)) f,.F }}Hww~~h'5;

12  * (  )) 		s   BB B-,B-)zlibiomp5md.dllzsvml_dispmd.dllz
libmmd.dll)r   r   )r   r`  preload_listr^  s       r   perload_icx_libomp_winrb    sC    S C D L ! ?&|X>?r!   c                 d   g }g }g }g }g }g }t         j                  j                  dk(  r||||||fS 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               }|rt        j                  j                  |d      }|j	                  t        j                  j                  |d             |j	                  |       t        j                         j                  dk(  rNt        j                  j                  t        j                  j                  |d            r|j	                  d       |st!               \  }}|r|j	                  t        j                  j                  |d             |j	                  t        j                  j                  |d             nvt"        r	 t%        |       r0|j	                  d       |j	                  d       t'        | d       n4t)        |       r.|j	                  d       |j	                  d       t+        |        n|j	                  d       |j	                  d       nt        j,                         rW|j	                  t.        j0                         t.        j2                  }d| }|j	                  |       |j	                  d	       nmt%        |       r#|j	                  d       |j	                  d       n?t)        |       r|j	                  d       n"|j	                  d       |j	                  d       ||||||fS )Nr   Xclangfopenmp
OMP_PREFIXr	  zomp.hlibz-environment variable `OMP_PREFIX` is invalid.ompCONDA_PREFIXx86_64zlibiomp5.dylibiomp5openmprL  z
libomp.dllQiopenmp
libiomp5mdzopenmp:experimentalz-Wp,-fopenmp gompfiopenmp)r   r   r   	_IS_MACOSr   r   r5   r6   r8   r9   rM   r:  r;  rN  unamer  rS  r   r   r\  r  rb  r   r   r  openmp_lib_so)r   r^  r_  include_dir_pathslib_dir_pathsrC  rb  rR  
omp_prefixheader_path	valid_envconda_prefixconda_lib_pathrQ  
openmp_libfb_openmp_extra_flagss                   r   _get_openmp_argsr}    s:    FG#%!MD"$00I=w 1=$HXXXhi  ,L99 YY|,
!'',,z9gFK{3I!((j))LM$$RWW\\*e%DEMN)6YMKK yy0!9:<M!#lE!B!((lI)NO$$^488:%%1bggnnGGLL1AB7 KK( )8):&M;!((k9)MN$$RWW\\+u%EF 
	 \"MM(#KK!$\<@-MM*%KK%"<0
 MM(#MM/0$$[%?%?@$22J&3J<$@!##$9:KK&i(F##L1j)i(F#7-}dDTTTr!   c                      g } g }t        j                         r't        j                  d      g} |j	                  d       | |fS )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   r6  rE  r   )ru  rC  s     r   _get_libstdcxx_argsr    sD      "MD"11(;<H$r!   use_mmap_weightsuse_mmap_weights_externalc                 x    g }| r|rt        d      | r|j                  d       |S |r|j                  d       |S )NzIOnly one of use_mmap_weights and use_mmap_weights_external should be truez USE_MMAP_SELFz USE_MMAP_EXTERNAL)r`   r   )r  r  r"  s      r   get_mmap_self_macror    sO     F5W
 	
 &' M 
#*+Mr!   c                  d    ddl m}  g }| j                  j                  r|j	                  d       |S )Nr   )r   z# AOT_INDUCTOR_USE_CACHING_ALLOCATOR)torch._inductorr   r   weight_use_caching_allocatorr   )r   r"  s     r   get_caching_allocator_macror    s+    &F77;<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 )a3  
    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
    )r&  rc  )
r  r   r  r%  r2  rI  r}  r  r  r  )#r   r  r&  rc  r   r  r  r\  r]  r^  r_  r`  ra  rb  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+ 	!x9JK	! +H*P'J' 	 (S	 2J1K.. 	& !8 9*+;=VW:< 	&
1	2
	 $	$ 		
 #	#  	
	
	  	   z)FG*-AADUUN')I!$;;>RR 
 	 r!   c                        e Zd ZdZeddddd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dee   dededed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  rc  rd  r   r  r  r  r  rX   r  re  rf  r   Nc           
         t         |   |||
|||||       || _        t        | j                  ||||||      \  }}}}}}}t        | j                  |       t        | j                  |       t        | j                  |       t        | j                  |       t        | j                  |       t        | j                  |       t        | j                  |       | j                          y )N)rd  r  r  r   rX   r  re  rf  )r   r  r&  rc  r   r  r  )r  rl   rq  r  rh  r0  ri  rj  rk  rl  rm  rn  ro  r{  )rk   r  r&  r  rc  rd  r   r  r  r  r  rX   r  re  rf  torch_definitionsr  torch_cflagstorch_ldflagsr  r  torch_passthrough_argsr  s                         r   rl   z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   rl   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                      t        j                         rct        j                  j                  Hdt
        j                  vr5dt
        j                  vr"t        j                  t
        j                  d<   y y y y y )N	CUDA_HOME	CUDA_PATH)	r   r   r*  versionhipr5   rP   r   sdk_homer   r!   r   _set_gpu_runtime_envr  M  s^    MM%rzz)rzz)"-"6"6

; * * & 	r!      r8   c                     t        t        |       j                  d            }|r|d   j                         j                  S d|  }t
        j                  |       y )Nzlibcudart_static.ar   z%"libcudart_static.a" not found under )r   r   rglobresolver8  rN   rO   )r8   lib_dirslog_msgs      r   _find_libcudart_staticr  W  sS    DJ$$%9:;H{""$+++5dV<GHHWr!   lpathsc                 .   t        |       D ]  \  }}dt        j                  v s|j                  t        j                  d         s<t	        |      }|Jt        |      | |<   |dz  }|j                         sn| j                  t        |              y )Nr  stubs)	enumerater5   rP   
startswithr  r   rM   r   )r  r   r8   lib_dirstub_dirs        r   _transform_cuda_pathsr  a  s     V$ -4"**$K9P)Q&<T&BGGF1I(H c(m,-r!   device_typerd  c                 x   g }g }g }g }g }g }g }	t        j                         rEdt        j                  vr3dt        j                  vr!t        j
                  t        j                  d<   t                ddlm}
 |
j                  | t         j                  j                  du       }t         j                  j                  }|
j                  | |t         j                  j                        }| dk(  r|j                  t        j                   j"                  rdnd	       t        j                   j"                  5t        j                         s|s|d
gz  }n|dgz  }|j                  d       nRt        j                         s|s|dgz  }n|ddgz  }t         j                  j                  dk(  r|dgz  }t%        |       | dk(  r|j                  d       d}t&        rkt        j(                  d      }|t+        |      |t        j,                  j/                  |d      gz  }|t        j,                  j/                  |d      gz  }n|dgz  }t1        d      st+        |      |ddgz  }|r|dgz  }| dk(  r|j                  d       t        j                         ra|j                  t        j2                         |r$| dk(  rt        j                   j"                  |sdg}	| dk(  rt5               \  }}||z  }||z  }t         j                  j6                  r|t         j                  j6                  z  }|||||||	fS )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_XPUzIntel 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	  rg  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  r(  r   r/  library_pathsr   r   r*  r  r  r  r   r6   r:  r8   r9   r   sdk_includer  custom_op_libs)r  rc  rd  r\  r]  r^  r_  r`  ra  rb  r  r/  xpu_error_stringze_rootstdcxx_lib_dir_pathsstdcxx_libss                   r   get_cpp_torch_device_optionsr  p  s     K LFG "NI"$rzz)rzz)"-"6"6

;) ..V((66$>L ''55M"00($11GG 1 N
 f%--*;*;;M==(!j\)	k]*	67!fX%	fl33	""88IEhZ'	!.1e:&Z 	 ii 89G.//RWW\\'9=>>Lrww||GU;<<N }o%F,.//k6**	+&Ie:&K334v-}}  (#(T'U$% $%$22N$I))V((777	 	 r!   c                        e Zd ZdZedddd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dee   dedededdf fdZ	d fdZ
 xZS )CppTorchDeviceOptionsz
    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   r  r&  r  rc  rd  r   r  r  r  r  r  re  rf  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&  rc  rd  r   r  r  r  r  re  rf  )r  rc  rd  )r  rl   r  r0  ri  rj  rk  rl  rm  rn  ro  r{  )rk   r  r&  r  rc  rd  r   r  r  r  r  r  re  rf  device_definitionsdevice_include_dirsdevice_cflagsdevice_ldflagsdevice_libraries_dirsdevice_librariesdevice_passthrough_argsr  s                        r   rl   zCppTorchDeviceOptions.__init__  s     	+%/-&?#%%' 	 	
 )+)+#%$&+-&(-/ )#%
	
!# 	T&&(:;T'')<=T\\=1T]]N3T))+@AT__&67T++-DE r!   c                 2   t         |           t        j                         rtt	               \  }}t        |      dk(  s
J d|        |d   | j                  v r=| j                  j                  |d          | j                  j                  |d          y y y )Nr)   zPython lib dirs: r   )	r  r{  r   r   rI  rK  rm  rA  r   )rk   r   python_lib_dirsr  s      r   r{  z'CppTorchDeviceOptions._finalize_options#  s    !# ":!;A'1,S0A/AR.SS,q!T%9%99$$++OA,>?$$++OA,>? : r!   r   )r   r   r   r  r   r   r   r   r   rl   r{  r  r  s   @r   r  r    s     * %!""'!&*/%'""#:!:! :! 	:!
 :! :!  :! :! $(:! :! c]:! :! :! :! 
:!x	@ 	@r!   r  rd   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 according OS:
    Linux: /tmp/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.so
    Windows: [Windows temp path]/tmppu87g3mm/zh/czhwiz4z7ca7ep3qkxenxerfjxy42kehw6h5cjk6ven4qu4hql4i.dll
    )r5   r8   r  splitextdirname)rd   name_and_extrF  _extdirs        r   &get_name_and_dir_from_output_file_pathr  /  sL    " 77##I.L!!,/JD$
''//)
$C9r!   c                   >   e Zd ZdZedeeef   fd       Zedeeef   fd       Zedeeef   fd       Z	edeeef   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dZddZdededdfdZdededdfdZdedee   ddfdZdedd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 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                  2    t         rdnd} t         rdnd}| |fS )Nz.pyd.soz/Fe-or  	extensionoutput_flagss     r   __get_python_module_flagsz$CppBuilder.__get_python_module_flagsX  s    )Fu	 +u,&&r!   c                  2    t         rdnd} t         rdnd}| |fS )Nz.objr   z/c /Foz-c -or  r  s     r   __get_object_flagszCppBuilder.__get_object_flags^  s    )Ft	#.xG,&&r!   c                  F    t         s
t               sdnd} t         rdnd}| |fS )Nz.pchz.gchz/Fpr  )r   r  r  s     r   __get_precompiled_header_flagsz)CppBuilder.__get_precompiled_header_flagsd  s#    )Fv	 +u,&&r!   c                  "    d} t         rdnd}| |fS )Nz.iz/EP /Pz-E -P -or  r  s     r   __get_preprocessor_output_flagsz*CppBuilder.__get_preprocessor_output_flagsj  s    	#.xJ,&&r!   rF  sourcesBuildOption
output_dirNc                 X   d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        d| _	        d| _
        d| _        d| _        || _        t        j                  j                   xs d| _        || _        |j'                         | _         |j)                         | _        |j+                         | _        || _	        |j-                         | _        |j1                         | _        |j5                         | _        t9        | j.                  | j2                  | j6                  f      dk  sJ | j.                  xs | j2                  xs | j6                   | _        t<        r| j2                  rJ d       | j.                  r| j?                         \  }}nS| j2                  r| jA                         \  }}n3| j6                  r| jC                         \  }}n| jE                         \  }}tF        jH                  jK                  | j                  | j                   |       | _
        | j                  r)tF        jH                  jM                  | j                        n| j                  }t<        r | j6                  r|| _'        n| | | _'        n| d| | _'        tQ        |tR              r|g}t        jT                         rH| j                  r<tW        |      | _        |D cg c]!  }tF        jH                  jM                  |      # }}| j2                  rtY        |      dk(  sJ d|d    | _-        ndjK                  |      | _-        |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_        = |j`                  x}r(t<        rtb        je                  d|       nd| d| _        |jg                         D ]N  }t<        r| xj                  d| dz  c_        #| xj                  dti        jj                  |       dz  c_        P |jm                         D ];  }t<        r| xj                  d	| dz  c_        #| xj                  d
| dz  c_        = |jo                         D ];  }t<        r| xj
                  d| dz  c_        #| xj
                  d| dz  c_        = |jq                         D ];  }t<        r| xj                  d| dz  c_        #| xj                  d| dz  c_        = |js                         D ]  }| xj                  | dz  c_         y c c}w )Nr   F
aoti_modelr)   z/Cannot currently precompile headers on Windows!r   z-x c++-header r   rX  -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):rh  _cflags_args_definitions_args_include_dirs_args_ldflags_args_libraries_dirs_args_libraries_args_passthrough_parameters_args_orig_source_paths_output_dir_target_filerr  rq  _namer   r   model_name_for_generated_files_target_name_build_optionr}  r  r  r  rs  r  rt  r  ru  sum_do_linkr   _CppBuilder__get_object_flags)_CppBuilder__get_precompiled_header_flags*_CppBuilder__get_preprocessor_output_flags$_CppBuilder__get_python_module_flagsr5   r8   r9   r  _outputr   r   r   r   rK  _sources_argsr  r  rp  rN   warningr  rM  quoter  r  r  r  )rk   rF  r  r  r  file_extr  relative_target_filer   cflag
definitionrp  inc_dirldflagr  rg  passthrough_args                    r   rl   zCppBuilder.__init__p  sn    !#"$$&!!,.) #%(-$
>>N, 	
 )$113"-"C"C"E$113%(99;(99;);;=D&&(:(:D<O<OPQUVVVVK$"4"4K8K8K
 d&8&8 	
=	
8 %)%<%<%>"Hl%)%H%H%J"Hl  %)%I%I%K"Hl%)%C%C%E"HlGGLL)9)9djj\(;TU && GGT../"" 	
 ""+".0D/EF*^1-A,BCDLgs#iG $"9"9 '+7mD#4;<qrww''*<G<w<1$$$#1'!*!>D!$'!2D ++- 	2E!!qq\1!!!qq\1!		2 &557 	>J&&C
|1*==&&&C
|1*==&		> "-!?!???_&
 -66H5I*K'"335 	HG''T'"+=='''RG0D/EQ+GG'		H "--/ 	4F""&m3"""&m3"		4 #557 	=G))z'"-EE)))r'!_<)		= ,,. 	4C$$!C57$$$"SE3$		4  +??A 	GO--O3DA1FF-	Gm =s   4&V'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definitions_argscflags_argsldflags_argslibraries_argslibraries_dirs_argsrb  rO  r   c
                     t         r=|  d| d| d| d| d| d|	 }
j                  r|
d| d| d| z  }
t        |
      }
|
S |  d| d| d| d| d| d|	 }
j                  r|
d| d| d| z  }
|
S )Nr   z /LD /link )r   r  r   )rX   r  r  r  r  r  r   r!  rb  rO  r   rk   s              r   format_build_commandz9CppBuilder.get_command_line.<locals>.format_build_command  s       j"3!4A6F5GqUViq!1 2!F8=  ==[)<(=Q~>NaP\~^^C.s3 J  j'!,<+=Q{m1()+;*<AfXG  ==Q|nAn-=Q?R>STTCJr!   )
rX   r  r  r  r  r  r   r!  rb  rO  )r   rh  r  r  r  r  r  r  r   r  r  )rk   r#  command_lines   `  r   get_command_linezCppBuilder.get_command_line  s    			  #	 "		
 	 	  	 "%	 "	 	 	> ,^^&&"55!33))++// $ 9 9!>><<
 r!   c                 ,    t        | j                        S r   )r   r  r|   s    r   get_target_file_pathzCppBuilder.get_target_file_path,  s    '(9(9::r!   c                    t        d      5  | j                         j                         }	 | j                  }t        j
                  j                  t        d      }t        j                         5 }t        j                  t        t        j
                  j                  |d             | j                  D ]S  }t        j                  |t        j
                  j                  |t        j
                  j                  |                   U t        j
                  j                  |d      }t        j                  ||       t!        ||t        j
                  j                  |            }t        j
                  j#                  |      rt	        j$                  |       t        j                  ||       |j'                  d      rt	        j(                  |d       n'|j'                  d      rt	        j(                  |d       d d d        d d d        y # 1 sw Y   xY w# t*        j,                  $ r7}|j.                  j1                  d      }	t3        j4                  ||	      |d }~ww xY w# 1 sw Y   y xY w)	NrT  r	  z	script.ldr   i  r  i  r   )r   r%  r   r  r5   r8   r9   _TORCH_PATHtempfileTemporaryDirectoryrR   r"  r  r  r  copytreer   rM   rA  endswithchmodr;   r   rO  r   r   rN  )
rk   rM  output_pathtorch_includes_pathtmp_dirsrcdest_include_pathtmp_output_pathr   rO  s
             r   build_fbcode_rezCppBuilder.build_fbcode_re/  s    .) 	B++-335GB"// ')ggll;	&J#002 5gKKWk0RS#66 WCgrww?O?OPS?T)UVW(*Wi(H%OO$79JK&8"''*:*:;*G'O ww~~k2		+.KK="++D1e4$--e4e4%5	B 	B5 5& 00 B1))'6:AB7	B 	BsB   I.AH!0FHH!H	H!!I+42I&&I++I..I7c                 F   | j                   r| j                         S t        | j                         t        j
                  j                  | j                  | j                   dt               }t        |       | j                         }t        ||       t        |       y)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   rJ  N)rr  r5  r=  r  r5   r8   r9   r  _BUILD_TEMP_DIRr%  rU  rH  )rk   _build_tmp_dir	build_cmds      r   buildzCppBuilder.buildQ  s    
 ""'')) !1!12Ao->?
 	!0))+		~6N#r!   
cmake_pathr  c                    dj                  | j                  j                               }t        j                  j
                  sdnd}t        j                  d| j                   d| j                   d| d      }t        j                  j                  st        j                  j                  rv|t        j                  d      z  }|t        j                  d| j                   d	| d
| j                   d	| j                   d| j                   d	| j                   d      z  }n3|t        j                  d| j                   d| j                   d      z  }|dk(  rst        j                  j                   Yddlm}  |       }|t        j                  d| j                   d| j                   d| j                   d| d| d| d| d      z  }t'        |d      5 }|j)                  |       ddd       y# 1 sw Y   yxY w)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  )r9   r	  r  r   r   dynamic_linkagetextwrapdedentr  r/  test_configsuse_libtorchr  r  r*  r  r  r2   rA  r  write)	rk   r<  r  r\  target_library_typecontentsrA  current_archr  s	            r   save_compile_cmd_to_cmakez$CppBuilder.save_compile_cmd_to_cmakec  sK    hht11AACD"//??HX 	 ??&&' ( **+1-@,A B

 ,,0C0C0P0P  H ,,0,=,=+>i} U( )-(9(9':)DDUDUCV W( )-(9(9':)DDeDeCf g
 H , -1,=,=+> ?,,0,=,=+> ?	 H & U]]%6%6%>N79L, -1,=,=+> ?,,0,=,=+> ?''+'8'8&9 :7: 8DnNS_R` a77CnIl^ \I<> >H@ *c" 	aGGH	 	 	s   G77H src_pathc                     dt        |      j                  z   }t        |d      5 }|j                  d| j                   d| d       d d d        y # 1 sw Y   y xY w)N${CMAKE_CURRENT_SOURCE_DIR}/aztarget_sources(r@  z)
)r   rF  r  rG  r  )rk   r<  rL  r  s       r   save_src_to_cmakezCppBuilder.save_src_to_cmake  s]    1DN4G4GG*c" 	QaGGod&7&7%8	(3OP	Q 	Q 	Qs   #AA	asm_filesc           	         t        |d      5 }|D ]n  }t        |      j                  j                  d      d   }dt        |      j                   }t	        j
                  d| d| d      }|j                  |       p |r>|j                  d| j                   d	       |j                  d
| j                   d       d d d        y # 1 sw Y   y xY w)NrO  r~   r   rN  z&
                    embed_gpu_kernel(r   z)
                    zadd_dependencies(z ${KERNEL_TARGETS})
ztarget_link_libraries(z! PRIVATE ${KERNEL_OBJECT_FILES})
)r  r   rF  r   rC  rD  rG  r  )rk   r<  rQ  r  asm_filer   rI  s          r   save_kernel_asm_to_cmakez#CppBuilder.save_kernel_asm_to_cmake  s    *c" 	a% ""8n1177<Q?;DN<O<O;PQ#??&&1]!H: >
 !" +D,=,=+>>UVW,T->->,??cd	 	 	s   B4C

Cc                    dj                  | j                  j                               }dj                  | j                  j                               }t	        j
                  d| j                   d| d| j                   d| d	      }t        j                  j                  |      sJ d| d       t        |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)	Nr   z@
            # Add linker flags
            target_link_options(r@  zA)

            # Add libraries
            target_link_libraries(z)
         z#save_link_cmd_to_cmakefile expects z to already existrO  )r9   r	  r  r  rC  rD  r  r5   r8   rM   r  rG  )rk   r<  lflagsrC  rI  r  s         r   save_link_cmd_to_cmakez!CppBuilder.save_link_cmd_to_cmake	  s    $,,88:;xx**88:;??!!%!2!2 39VH E# $(#4#4"5Ytf E

 ww~~j) 	
1*=NO	
) *c" 	aGGH	 	 	s   ?CC#)r   r   )r   r   r   r  staticmethodr   r   r  r  r  r  r
   r   r[  rl   r%  r'  r5  r;  rK  rP  rT  rW  r   r!   r   r  r  G  s     'uS#X ' '
 'c3h ' '
 'E#s(O ' '
 'U38_ ' ' LGLG sDI~&LG &	LG
 LG 
LG\,# ,\;c ; B	 BD$$GG G 
	GRQC Q3 Q4 Q3 49 QU $  r!   r  r2  targetc                     dt         fd}dt         dt         dt         dt         fd} |       } ||t        |       t        |            }t        |t        |             y )	Nr   c                  H    t         rd} | S t               } t        |       rd} | S )Nml64rF   )r   r   r  )ASM_CCs    r   get_asm_compilerz.run_asm_build_object.<locals>.get_asm_compiler	  s-    F 	 &'F!&)r!   asm_ccr2  rY  c                 >    t         r|  d| d| }|S |  d| d| }|S )Nr   z /c /Fo z -c z -o r  )r_  r2  rY  r   s       r   r%  z.run_asm_build_object.<locals>.get_command_line#	  sA     HAcU(6(3C 
 HDT&2C
r!   )r_  r2  rY  r7  )r   r   rU  )r2  rY  rJ  r^  r%  r_  r   s          r   run_asm_build_objectra  	  sh    c  3    F
$S)'/C
 C5c:;r!   )T)zc++17)F)Tr   Fr   )FF)r"  rf   r;  	functoolsr  localeloggingr5   r4   r   rM  rR   r;   r3   r6  r*  rC  r:  collections.abcr   r   r   ctypes.utilr   pathlibr   typingr   r	   r
   r*  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   r8  r8   abspath__file___HEREr  r)  r9   r  r  	_IS_LINUXrq  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   r0  r4  r=  rH  rR  rU  r   r[  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r%  r2  r>  rI  rN  rS  r\  rb  r}  r  r  r  r  r  r  r  r  r  r  r  r  ra  r   r!   r   <module>rw     s!
          	  	    
     $ ! $  ' '  , ' ? ; , 6? s c d c S T S C D d 
 
!ggoobggooe45k+@A LL##G,	LL##H-	llg%$	=H5&5579b g! 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 ( (V ' ' ' )$ ) ) 24 2 2 / / / +D + +    *?DI ?c ?t ?49 c Os Ot O	# 	$ 	6s 6 6 6.(c ( ( (
  t  t n S	 " "$s) "!S !T#Y !H# $s) tCy :5cDI1E+F & -2;;%);
49d3i ;| c * !#... . #	.
 . 49d3icDItCy$s)TRUYVW.b5!! 5!pE49 E2d3i 2c '2'2'2 '2 49d3ic*+	'2T6 eDItCy<P6Q (&3&3%)&3
49d3ic*+&3R
$s) 
0%S	49(<"= 02    tSy)  ( 
3 
# 
$ 
 
 ? ? ? ?<kUkU
49d3icDItCy$s)KLkU\
U49d3i#78 
7;	#Y T#Y YYY Y 	Y
 Y Y  $Y 49d3icDItCy$s)TRUYVWYxC!j C!L7 Q $  -$s) - -" mmm m 49d3icDItCy$s)TRUYVW	m`L@O L@^
38_0N Nb<c <3 <S <T <r!   