ó
    Eñi‚£ ã                  ó8  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJrJ r J!r!  S SK"J#r#  S SKJ$r$J%r%  S SK&J'r'  S S	KJ(r(  S S
K)J)r)J*r*  S SK+J,r,  S SK-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7J8r8  S SK9r9S SK:J;s  J<r<  S SK=J>r?  S SK9J@r@JArA  S SKBJCrC  S SKDJErE  S SKFJGrGJHrHJIrIJJrJ  S SKKJLrLJMrMJNrN  S SKOJPrPJQrQJRrR  S SKSJTrU  S SKVJWrWJXrX  S SKYJZrZ  S SK[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrg  S SKhJiri  S SKjJkrkJlrlJmrmJnrnJoro  S SKpJqrqJrrr  S SKsJtrt  S SKuJvrvJwrw  S SKxJyryJzrzJ{r{J|r|J}r}J~r~  S SKJ€r€  S SK�J‚r‚  S S KƒJ„r„J…r…J†r†  S S!K‡Jˆrˆ  S S"K‰JLrŠ  S S#K‹JŒrŒJ�r�JŽrŽ  S S$K�J�r�J‘r‘  S S%K’J“r“  S S&K”J•r•J–r–J—r—  S S'K˜J™r™  S(S)KšJ›r›  S(S*KœJ�r�  S(S+KžJŸrŸ  S(S,K J¡r¡  S(S-K¢J£r£  S(S.K¤J¥r¥  \4" S/5      r¦\3(       aN  S S0K§J¨r¨J©r©JªrªJ«r«  S S1K¬J­r­  S(S2K®J¯r¯  S(S3K°J±r±  S(S4K²J³r³  S(S5K´Jµrµ  S(S6KšJ¶r¶J·r·  S(S7KœJ¸r¸J¹r¹  S(S8KºJ»r»J¼r¼  S(S9K½J¾r¾  S(S:K¿JÀrÀ  \R                   S;:H  rÁ\LGR„                  rÃ\9GRˆ                  GR‹                  \ÆS<5      rÇ\9GRˆ                  GR‹                  \ÆS=5      rÈ\GR’                  " \Æ5      rÊS”S> jrËS•S? jrÌS–S@ jrÍ " SA SB5      rÎ " SC SD\Î5      rÏ " SE SF\Î5      rÐS”SG jrÑS—SH jrÒS˜S™SI jjrÓ S˜       SšSJ jjrÔS›SœSK jjrÕ " SL SM5      rÖ    S�             SžSN jjr×SŸSO jrØ  S          S¡SP jjrÙ\GR´                   " SQ SR5      5       rÛS¢SS jrÜS£ST jrÝ " SU SV\GR¼                  5      rß        S¤SW jràS¥SX jrá\áS¦SY j5       râS”SZ jrã\GR´                   " S[ S\5      5       rä " S] S^\å5      ræ " S_ S`5      rç          S§Sa jrèS¨Sb jré " Sc Sd\0\¦   5      rê\�GRÖ                   " Se Sf\Œ5      5       rì " Sg Sh\ê\›   5      rí\GRÜ                  S©Si j5       rï\z " Sj Sk5      5       rð " Sl Sm5      rñSqòSn\óSo'   SªSp jrô\GRê                  GRí                  \w" 5       Sq5      r÷\GRê                  GRí                  \÷Sr5      rø\GRÜ                          S«Ss j5       rùS¬St jrúS­S®Su jjrû\z " Sv Sw5      5       rü      S¯Sx jrý\z " Sy Sz\ü5      5       rþ\z " S{ S|\þ5      5       rÿ\z " S} S~\þ5      5       Gr S°S jGrS±S€ jGr\z " S� S‚5      5       Gr      S²Sƒ jGr\áS¦S„ j5       Gr " S… S†5      Gr\$S³S‡ j5       Gr " Sˆ S‰5      Gr\z " SŠ S‹G\5      5       Gr	\z " SŒ S�5      5       Gr
 " SŽ S�5      Gr " S� S‘G\5      Gr " S’ S“G\5      Grg)´é    )ÚannotationsN)Úbisect_right)Úcopy)Úc_void_pÚCDLLÚcdll)Ú	timedelta)Ú	lru_cacheÚpartial)ÚPath)Ú_TemporaryFileWrapper)ÚtimeÚtime_ns)Ú
ModuleType)ÚAnyÚcastÚGenericÚNoReturnÚOptionalÚTYPE_CHECKINGÚTypeVarÚUnion)ÚoverrideÚSelf)ÚSymIntÚTensor)Úget_interface_for_device)Ú	SkipFrame)ÚCompileEventLoggerÚcountersÚdynamo_timedÚget_metrics_context)ÚconfigÚexcÚmetrics)Úcustom_backend_codegen_configsÚcustom_backend_passesÚinit_backend_registration)Úcompile_utils)Úrocm_compile_commandÚrocm_compiler)Úin_toplevel_process)Ú_LINKER_SCRIPTÚ_set_gpu_runtime_envÚ_TORCH_PATHÚconvert_cubin_to_objÚ
CppBuilderÚ
CppOptionsÚCppTorchDeviceOptionsÚget_compiler_version_infoÚget_ld_and_objcopyÚ&get_name_and_dir_from_output_file_pathÚnormalize_path_separatorÚrun_asm_build_object)Úpick_vec_isa)ÚCustomGraphModulePassÚCustomGraphPassÚCustomGraphPassTypeÚCustomPartitionerFnÚCustomPartitionerFnType)Úhas_frozen_paramsÚis_frozen_param)Ú_reload_python_module)Ú	cache_dirÚdefault_cache_dir)ÚALIGN_BYTESÚclear_on_fresh_cacheÚdetermine_aoti_mmap_flagsÚis_linuxÚ
is_windowsÚXPU_KERNEL_FORMAT)ÚFakeScriptObject)Útrace_structured)Úextract_tensor_metadataÚ
FakeTensorÚTensorMetadata)Úlog_cache_bypass)r#   )ÚCacheArtifactÚCacheArtifactFactoryÚCacheArtifactManager)ÚTensorPropertiesÚWeights)ÚCUSTOM_OBJ_FILENAME_PREFIX)Úhas_hintÚShapeEnvÚ	size_hint)Ú
OrderedSeté   ©ÚCompiledFxGraph)Úcreate_cache)Úautotune_cache)ÚAutotuneCacheBundler)ÚTritonBundler)ÚVÚT)ÚCallableÚ	GeneratorÚKeysViewÚSequence)ÚFuture)Ú_CompileFxKwargs)ÚBuildOptionsBase©ÚGraphLowering)ÚChoiceCaller)ÚCompiledFxGraphConstantsÚ
OutputCode)Ú
JsonDataTyÚRemoteCache)ÚHalideInputSpecÚ
HalideMeta)ÚCachingAutotuner)Ú	InputTypeÚwin32Úoutput_codeÚ
autotuningc                 ó@   • [         R                  R                  c  S$ S$ )NÚ
cubin_pathÚ
hsaco_path)ÚtorchÚversionÚhip© ó    ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/codecache.pyÚget_cpp_wrapper_cubin_path_namer�   •   s   € Ü Ÿ=™=×,Ñ,Ñ4ˆ<ÐF¸,ÐFr   c                óf   • U S:X  a  [         R                  R                  c  S$ S$ U S:X  a  [        $ g)NÚcudaÚcubinÚhsacoÚxpuÚ )r{   r|   r}   rI   ©Údevices    r€   Úget_kernel_bin_formatrŠ   ™   s4   € Ø�ÓÜŸ-™-×+Ñ+Ñ3ˆwÐ@¸Ð@Ø	�5‹Ü Ð àr   c                ó  • [         R                  [        R                  " 5       [        [        R
                  R                  R                  5       5      R                  5       [        [        U 5      R                  5       5      S.nU$ )zB
Gets all the current device information used to compile the .so.
)ÚAOTI_PLATFORMÚAOTI_MACHINEÚAOTI_CPU_ISAÚAOTI_COMPUTE_CAPABILITY)ÚsysÚplatformÚmachineÚstrr{   Ú	_inductorÚcpu_vec_isar9   Úupperr   Úget_compute_capability)Údevice_typeÚmetadatas     r€   Úget_device_informationrš   ¢   sb   € ô
 Ÿ™Ü ×(Ò(Ó*ÜœEŸO™O×7Ñ7×DÑDÓFÓG×MÑMÓOÜ#&Ü$ [Ó1×HÑHÓJó$
ñ	 €Hð €Or   c                  ó    • \ rS rSr\\R                  S	S j5       5       r\\\R                  S
S j5       5       5       r	SS jr
S	S jrSS jrSrg)Ú	CacheBaseé±   c                 ó†  • SSK Jn Jn  U (       a  U" 5       nOS n SS 0SU0S.n[        R                  R                  [        R                  R                  5       5      n[        R                  R                  b3  UR                  US   S'   [        R                  R                  US   S'   O3UR                  US   S'   [        R                  R                  US   S	'    [        R                  " [        R                   " US
S9R#                  S5      5      R%                  5       US'   U$ ! [        [        4 a    0 n N_f = f)Nr   )Ú
HAS_TRITONÚ
triton_keyÚnameÚtriton)r‰   r|   r‰   r|   rƒ   r}   T)Ú	sort_keysúutf-8Úhash)Ú%torch._inductor.runtime.triton_compatrŸ   r    r{   rƒ   Úget_device_propertiesÚcurrent_devicer|   r¡   ÚgcnArchNamer}   ÚAssertionErrorÚRuntimeErrorÚhashlibÚsha256ÚjsonÚdumpsÚencodeÚ	hexdigest)rŸ   r    Útriton_versionÚsystemÚdevice_propertiess        r€   Ú
get_systemÚCacheBase.get_system²   s$  € ÷ 	Qæñ (›\‰Nà!ˆNð	à! 4˜.à˜nðñ&ˆFô !&§
¡
× @Ñ @Ü—
‘
×)Ñ)Ó+ó!Ðô �}‰}×!Ñ!Ñ-Ø+<×+AÑ+A��xÑ  Ñ(Ü,1¯M©M×,>Ñ,>��yÑ! &Ò)à+<×+HÑ+H��xÑ  Ñ(Ü+0¯=©=×+<Ñ+<��yÑ! %Ò(ô
 !ŸšÜ�JŠJ�v¨Ñ.×5Ñ5°gÓ>ó
ç
‰)‹+ð 	ˆv‰ð ˆøô ¤Ð-ó 	àŠFð	ús   ›BD+ Â-2D+ Ä+E Ä?E c                 ó�   • [        [        R                  R                  [	        5       S[
        R                  5       S   5      5      $ )NÚcacher¥   )r   ÚosÚpathÚjoinrB   rœ   rµ   r~   r   r€   Úget_local_cache_pathÚCacheBase.get_local_cache_pathØ   s0   € ô ”B—G‘G—L‘L¤£¨g´y×7KÑ7KÓ7MÈfÑ7UÓVÓWÐWr   c                ó6   • [         R                  5       U l        g ©N)rœ   rµ   r³   ©Úselfs    r€   Ú__init__ÚCacheBase.__init__Þ   s   € Ü×*Ñ*Ó,ˆ�r   c                óØ   • U R                  5       nUR                  5       (       d  0 $ [        U5       n[        R                  " U5      nS S S 5        US   $ ! , (       d  f       WS   $ = f)Nr¸   )r¼   Úis_fileÚopenr®   Úload)rÁ   Úlocal_cache_pathÚlocal_cache_fpÚlocal_caches       r€   Úget_local_cacheÚCacheBase.get_local_cacheá   sb   € Ø×4Ñ4Ó6ÐØ×'Ñ'×)Ñ)ØˆIÜÐ"Ô# ~ÜŸ)š) NÓ3ˆK÷ $à˜7Ñ#Ð#÷ $Ô#à˜7Ñ#Ð#ús   ³AÁ
A)c                óŒ   • U R                  5       n[        [        U5      [        R                  " U R
                  US.SS9SS9  g )N)r³   r¸   é   ©ÚindentT©Ú	make_dirs)r¼   Úwrite_atomicr“   r®   r¯   r³   )rÁ   rÊ   rÈ   s      r€   Úupdate_local_cacheÚCacheBase.update_local_cacheé   s<   € Ø×4Ñ4Ó6ÐÜÜÐ Ó!Ü�JŠJ $§+¡+¸ÑDÈQÑOØó	
r   )r³   N)Úreturnúdict[str, Any])rÖ   r   ©rÖ   ÚNone)rÊ   r×   rÖ   rÙ   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstaticmethodÚ	functoolsr¸   rµ   rE   r¼   rÂ   rË   rÔ   Ú__static_attributes__r~   r   r€   rœ   rœ   ±   sZ   † ØØ‡_�_ó"ó ó ð"ðH ØØ‡_�_óXó ó ó ðXô-ô$÷
r   rœ   c                  ó(   • \ rS rSrSS jrSS jrSrg)Ú
LocalCacheéò   c                óR   • U R                  5       nUnU H  nXB;   a  X$   nM    g    U$ r¿   )rË   )rÁ   Úkeysr¸   Ú	sub_cacheÚkeys        r€   ÚlookupÚLocalCache.lookupó   s6   € Ø×$Ñ$Ó&ˆàˆ	ÛˆCØ‹|Ø!™J’	áñ	 ð Ðr   c               óœ   • U R                  5       nUnUSS  H  nUR                  U0 5        XE   nM     XUS   '   U R                  U5        g )Nr   éÿÿÿÿ)rË   Ú
setdefaultrÔ   )rÁ   Úvaluerå   r¸   ræ   rç   s         r€   Ú	set_valueÚLocalCache.set_valueÿ   sX   € Ø×$Ñ$Ó&ˆàˆ	Ø˜˜"“:ˆCØ× Ñ   bÔ)Ø!™ŠIñ ð $�$�r‘(Ñà×Ñ Õ&r   r~   N)rå   r“   rÖ   údict[str, Any] | None)rå   r“   rí   r   rÖ   rÙ   )rÚ   rÛ   rÜ   rÝ   rè   rî   rà   r~   r   r€   râ   râ   ò   s   † ô
÷	'r   râ   c                  ó:   • \ rS rSr S           SS jjrSrg)ÚPersistentCachei  Nc                ó  ^^^
^^• [         R                  " 5       mUb  U SU 3OUm
0 mSU
UUUU4S jjn[        R                  (       a  U R	                  5       O0 nU" U5      (       d£  Ub   U" T5      m[        U4S jT 5       5      (       d   eUR                  T0 5        UT   R                  T
0 5      R                  T0 5        TR                  5        H   u  p‰X—T   T
   T   UR                  5       '   M"     U R                  U5        T$ )a©  
Check to see if we have benchmarked the given choice callers. For each
choice caller:

    1. Check local_cache[op][inputs][choice][precision], return benchmark if cached.
    2. If benchmark is not None:
        a. `max_autotune_gemm=True`: benchmark the choice, update
            local_cache[op][inputs][choice], and return the benchmark.
        b. `max_autotune_gemm=False`: don't benchmark the choice, return nothing.
Ú_c                óÔ   >• SnT H^  nUR                  5       nX0R                  T0 5      R                  T0 5      R                  T0 5      ;   a  U T   T   T   U   TU'   M[  Sn  U$    U$ )z2Check if `cache` contains data for all the choicesTF)Úhash_keyÚget)	r¸   ÚhitÚchoiceÚchoice_hashÚ	cache_keyÚchoicesÚopÚ	precisionÚtimingss	       €€€€€r€   Úcheck_cacheÚ+PersistentCache.lookup.<locals>.check_cache#  s‚   ø€ àˆCÛ!�Ø$Ÿo™oÓ/�Ø§)¡)¨B°Ó"3×"7Ñ"7¸	À2Ó"F×"JÑ"JØ˜ró#ó ð ',¨B¡i°	Ñ&:¸9Ñ&EÀkÑ&R�G˜F“Oð  �CØØˆJñ "ð ˆJr   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr¿   r~   )Ú.0rù   rÿ   s     €r€   Ú	<genexpr>Ú)PersistentCache.lookup.<locals>.<genexpr>7  s   øé € Ð?²w¨V Ö(²wùs   ƒ)r¸   r×   rÖ   Úbool)
r{   Úget_float32_matmul_precisionr#   Úautotune_local_cacherË   Úallrì   Úitemsrö   rÔ   )rÁ   rü   rý   ÚinputsÚ	benchmarkÚhint_overrider   rÊ   rù   Útimingrû   rþ   rÿ   s    ``       @@@r€   rè   ÚPersistentCache.lookup  sû   ü€ ô$ ×6Ò6Ó8ˆ	Ø3@Ñ3L�v�h˜a ˜Ñ/ÐRXˆ	àˆ÷	ó 	ô  17×0K×0K�d×*Ñ*Ô,ÐQSˆÙ˜K×(Ñ(¨yÑ/Dá Ó(ˆGÜÔ?±wÓ?×?Ñ?Ð?Ð?Ø×"Ñ" 2 rÔ*Ø˜‰O×&Ñ& y°"Ó5×@Ñ@ÀÈBÔOØ")§-¡-¦/‘�ØKQ˜B‘ 	Ñ*¨9Ñ5°f·o±oÓ6GÓHñ #2ð ×#Ñ# KÔ0àˆr   r~   r¿   )rü   zlist[ChoiceCaller]rý   r“   r  r“   r  z1Callable[[Any], dict[ChoiceCaller, float]] | Noner  z
int | NonerÖ   zdict[ChoiceCaller, float])rÚ   rÛ   rÜ   rÝ   rè   rà   r~   r   r€   rò   rò     sL   † ð %)ð3à#ð3ð ð3ð ð	3ð
 Eð3ð "ð3ð 
#÷3ð 3r   rò   c                 óÈ   • [         R                  R                  [        5       S5      n [         R                  R	                  U 5      (       d  [         R
                  " U SS9  U $ )NÚlocksT©Úexist_ok)r¹   rº   r»   rB   ÚexistsÚmakedirs)Úlock_dirs    r€   Úget_lock_dirr  B  s>   € Ü�w‰w�|‰|œI›K¨Ó1€HÜ�7‰7�>‰>˜(×#Ñ#Ü
�Š�H tÒ,Ø€Or   c                ó²   • [         R                  " [        R                  " U 5      R	                  5       5      S S R                  S5      R                  5       $ )Né3   r¤   )Úbase64Ú	b32encoder¬   r­   ÚdigestÚdecodeÚlower)Údatas    r€   Úsha256_hashr   I  s@   € ä×ÒœGŸNšN¨4Ó0×7Ñ7Ó9Ó:¸3¸BÐ?×FÑFÀwÓO×UÑUÓWÐWr   c                óÜ   • [        U [        5      (       a  U OU R                  S5      nU(       a0  [        U[        5      (       a  UOUR                  S5      nUS-   U-   nS[        U5      -   $ )Nr¤   s   ||Úc)Ú
isinstanceÚbytesr°   r   )ÚcodeÚextraÚhashing_strÚextra_bs       r€   Ú	code_hashr)  N  s\   € Ü$ T¬5×1Ñ1‘$°t·{±{À7Ó7K€KÞÜ% e¬U×3Ñ3‘%¸¿¹ÀgÓ9NˆØ! EÑ)¨GÑ3ˆØ”˜[Ó)Ñ)Ð)r   c                óV  • U(       aP  [         R                  R                  U5      (       a  UnOT[         R                  R                  [	        5       U5      nO+[         R                  R                  [	        5       U SS 5      n[         R                  R                  X0 SU 35      nXU4$ )NrZ   é   Ú.)r¹   rº   Úisabsr»   rB   )ÚbasenameÚ	extensionÚspecified_dirÚsubdirrº   s        r€   Úget_pathr2  V  sy   € ö Ü�7‰7�=‰=˜×'Ñ'Ø"‰Fä—W‘W—\‘\¤)£+¨}Ó=‰Fä—‘—‘œi›k¨8°A°a¨=Ó9ˆÜ�7‰7�<‰<˜ *¨A¨i¨[Ð 9Ó:€DØ˜TÐ!Ð!r   c                ó‚   • US;   a  [        X5      $ USS[        1;   a  [        [        U 5      5      $ [        SU 35      e)N>   ÚptxÚspvr%  Úamdgcnr„   r…   zUnknown hash type )r)  rI   Úreprrª   )Úcontentr&  Ú	hash_types      r€   Úget_hashr:  d  sH   € ØÐ4Ó4Ü˜Ó(Ð(Ø�W˜gÔ'8Ð9Ó9Üœ˜g›Ó'Ð'Ü
Ð-¨i¨[Ð9Ó
:Ð:r   c                  óT   • \ rS rSrSr S	SSS.       S
S jjjrSS jrSS jrSrg)ÚWritableTempFileil  aO  
Avoid "Permission denied error" on Windows:
  with tempfile.NamedTemporaryFile("w", suffix=".gv") as temp_file:
    # Not writable on Windows:
    # https://docs.python.org/3/library/tempfile.html#tempfile.NamedTemporaryFile

Example:
    with WritableTempFile("w", suffix=".gv") as temp_file:
        tree.to_dotfile(temp_file.name)
N)ÚencodingÚsuffixc               ó(   • Xl         X l        X0l        g r¿   )Úmoder=  r>  )rÁ   r@  r=  r>  s       r€   rÂ   ÚWritableTempFile.__init__x  s   € ð Œ	Ø ŒØ�r   c                óŽ   • [         R                  " U R                  U R                  U R                  SS9U l        U R
                  $ )NF)r=  r>  Údelete)ÚtempfileÚNamedTemporaryFiler@  r=  r>  Ú	temp_filerÀ   s    r€   Ú	__enter__ÚWritableTempFile.__enter__  s5   € Ü!×4Ò4Ø�I‰I §¡°d·k±kÈ%ñ
ˆŒð �~‰~Ðr   c                óÖ   • U R                   R                  5          [        R                  " U R                   R                  5        g ! [
         a  n[        (       a   S nAg UeS nAff = fr¿   )rF  Úcloser¹   Úunlinkr¡   ÚOSErrorÚ_IS_WINDOWS)rÁ   Úexc_typeÚexc_valÚexc_tbÚes        r€   Ú__exit__ÚWritableTempFile.__exit__…  sJ   € Ø�‰×ÑÔð	Ü�IŠI�d—n‘n×)Ñ)Õ*øÜó 	ßŠ{äà�ûð	ús   œ*A Á
A(ÁA#Á!A#Á#A()r=  r@  r>  rF  )Úw)r@  r“   r=  r   r>  r   rÖ   rÙ   )rÖ   z_TemporaryFileWrapper[Any])rN  r   rO  r   rP  r   rÖ   rÙ   )	rÚ   rÛ   rÜ   rÝ   Ú__doc__rÂ   rG  rR  rà   r~   r   r€   r<  r<  l  sE   † ñ	ð ðØ26ÀdñØðØ,/ðØ@Cðà	öô÷	r   r<  c                ó¼   • Uc  [        U R                  5       X#5      n[        XQU5      u  pgn[        R                  R                  U5      (       d
  [        X€SS9  Xh4$ )NTrÑ   )r:  Ústripr2  r¹   rº   r  rÓ   )	r8  r/  r&  r9  r0  rç   r.  Ú_subdirrº   s	            r€   ÚwriterY  ‘  sS   € ð �{ô �w—}‘}“¨Ó9ˆÜ& s°}ÓEÑ€H�tÜ�7‰7�>‰>˜$×ÑÜ�T¨dÒ3Øˆ>Ðr   c                ó    • [        U S5      S   $ )zL
Write the `text` to a file and return the path computed based on the hash.
ÚtxtrZ   ©rY  )Útexts    r€   Ú
write_textr^  ¤  s   € ô ��uÓ˜aÑ Ð r   c                ó|  • [        U[        [        45      (       d   S5       e[        U 5      nU(       a  UR                  R                  SSS9  UR                  S[        R                  " 5        S[        R                  " 5        S3-  n[        U[        5      (       a  SOSnUR                  Xc(       a  SOS S	9 nUR                  U5        S S S 5         UR                  US
9  g ! , (       d  f       N= f! [         a9    [        (       d  e [        R                   " XTS9  [        R"                  " U5         g f = f)Nz6Only strings and byte arrays can be saved in the cacheT)Úparentsr  r,  z.tmprT  Úwbr¤   ©r=  )Útarget)ÚsrcÚdst)r#  r“   r$  r   ÚparentÚmkdirr¹   ÚgetpidÚ	threadingÚ	get_identrÆ   rY  ÚrenameÚFileExistsErrorrM  ÚshutilÚcopy2Úremove)Úpath_r8  rÒ   Úencode_utf_8rº   Útmp_pathÚ
write_modeÚfs           r€   rÓ   rÓ   «  s  € ô �g¤¤U˜|×,Ñ,ð Ø@óÐ,ô �‹;€DÞØ�‰×Ñ $°ÐÑ6Ø�{‰{˜q¤§¢£ ¨Q¬y×/BÒ/BÓ/DÐ.EÀTÐJÑJ€HÜ" 7¬C×0Ñ0‘°d€JØ	�‰�zµ|©GÈˆÑ	NÐRSØ	�‰�Ô÷ 
Oð
Ø�‰˜tˆÒ$÷ 
OÕ	Nûô ó ßŠ{Øô 	�Š˜Ò,ä
�	Š	�(Öðús   Â<C'ÃC8 Ã'
C5Ã8A D;Ä:D;c                  ó.   • \ rS rSr% SrS\S'   S\S'   Srg)	ÚTensorMetadataAndValuesiÊ  z_
TensorMetadata plus the elements as a list of raw values.
Used for hashing inlined constants.
rN   Útensor_metadataú	list[Any]Úvaluesr~   N©rÚ   rÛ   rÜ   rÝ   rU  Ú__annotations__rà   r~   r   r€   rv  rv  Ê  s   ‡ ñð
 $Ó#ØÖr   rv  c                ó   • U $ r¿   r~   ©Úxs    r€   Ú_identr  Õ  s   € Ø€Hr   c                ój   • [        U 5      n[        U S5      (       d  [        R                  " USSS9nU$ )zg
Extracts the tensor metadata and removes fields of the TensorMetadata
that are not needed for caching
Ú_is_inductor_staticr   N)Ústorage_offsetÚstorage_bytes)rL   ÚhasattrÚdataclassesÚreplace)ÚtÚmetas     r€   Ú%extract_tensor_metadata_for_cache_keyr‰  Ù  s5   € ô
 # 1Ó%€DÜ�1Ð+×,Ñ,Ü×"Ò" 4¸ÈÑNˆà€Kr   c                  óº   ^ • \ rS rSrSr S     SU 4S jjjr    SS jr    SS jrSS jrSS jr	    SS jr
    SS	 jrSS
 jrSS jrSS jrSrU =r$ )ÚFxGraphCachePickleriå  a&  
Custom pickler to customize the pickling of some objects (Tensors), only for the
purpose of computing a hash for keying into the FxGraphCache. Tensors contain
objects that don't pickle and/or vary between runs, and we want to capture the
data that allow us to compute a stable, but safe hash.
c                óÖ  >• [         R                  " 5       U l        [        TU ]  U R                  5        [
        R                  R                  5       U l        U R                  R                  [        [        R                  " U R                  5      [        R                  [        R                  " U R                  5      [        R                   R"                  R$                  [        R                  " U R                  5      [        R&                  [        R                  " U R(                  5      [        R*                  R,                  R.                  R0                  [        R                  " U R2                  5      [4        [        R                  " U R6                  5      05        U(       a7  [        R                  " U R8                  5      U R                  UR:                  '   SU l        g)a
  
Create an FX graph pickler. If include_non_inlined=True, then pickling will
include the _values_ for all Tensors. (Note that any tensors are constants
attached as attributes to the GraphModule). Otherwise, pickling will include
only the metadata for these tensors.
TN)ÚioÚBytesIOÚ_streamÚsuperrÂ   ÚcopyregÚdispatch_tabler   ÚupdaterM   rß   r   Ú_reduce_fake_tensorr{   r   Ú_reduce_tensorÚnnÚ	parameterÚ	Parameterr   Ú_reduce_symintÚfxÚexperimentalÚ_backward_stateÚBackwardStateÚ_reduce_unsupportedrJ   Ú_reduce_fake_script_objectÚ_reduce_graph_moduleÚ	__class__Úfast)rÁ   ÚgmÚhas_user_defined_triton_kernelsr¡  s      €r€   rÂ   ÚFxGraphCachePickler.__init__í  sA  ø€ ô —z’z“|ˆŒÜ‰Ñ˜Ÿ™Ô&ä%×4Ñ4×9Ñ9Ó;ˆÔØ×Ñ×"Ñ"äœI×-Ò-¨d×.FÑ.FÓGÜ—‘œi×/Ò/°×0CÑ0CÓDÜ—‘×"Ñ"×,Ñ,¬i×.?Ò.?À×@SÑ@SÓ.TÜ—‘œi×/Ò/°×0CÑ0CÓDÜ—‘×%Ñ%×5Ñ5×CÑCÄY×EVÒEVØ×,Ñ,óFô !¤)×"3Ò"3°D×4SÑ4SÓ"Tð	ô	
ö +ä09×0AÒ0AØ×)Ñ)ó1ˆD×Ñ §¡Ñ-ð ˆ�	r   c                ó*   • [        U5      n[        U44$ )z'
Custom reducer to pickle FakeTensors.
)r‰  r  )rÁ   r‡  r™   s      r€   r”  Ú'FxGraphCachePickler._reduce_fake_tensor  s   € ô 9¸Ó;ˆÜ˜˜Ð$Ð$r   c                óp  • SSK Jn  UR                  (       a  [        S5      e[	        U5      n[        U5      (       a   UR                  " U5      (       d	  [        U44$ [        5       nUR                  5       n[        5       U-
  nUS:”  a  [        R                  " SUS S35        [        [        X55      44$ )zz
Custom reducer to pickle Tensors.  If we see tensors, we know they're constants
stored as attributes on the GraphModule.
rZ   rj   zmkldnn tensors unpickleableg      ð?z0FX graph cache copying of a large constant took z.1zs. Please file an issue.)Úgraphrk   Ú	is_mkldnnÚBypassFxGraphCacher‰  r@   Úcan_inline_constantr  r   ÚtolistÚwarningsÚwarnrv  )rÁ   r‡  rk   r™   Ústartry  Úelapseds          r€   r•  Ú"FxGraphCachePickler._reduce_tensor  s¬   € õ 	)à�;�;ô %Ð%BÓCÐCä8¸Ó;ˆô ˜1×Ñ m×&GÒ&GÈ×&JÑ&JÜ˜X˜KÐ(Ð(ô “ˆØ—‘“ˆÜ“&˜5‘.ˆØ�S‹=Ü�MŠMØBÀ7È2À,ð O(ð (ôô
 Ô0°ÓBÐDÐEÐEr   c                ó&   • [         [        U5      44$ )z#
Custom reducer to pickle SymInts.
)r  r“   ©rÁ   Úss     r€   r™  Ú"FxGraphCachePickler._reduce_symint=  s   € ô œ˜Q›˜	Ð"Ð"r   c                ó   • [        S5      e)zc
Custom reducer to handle any objects that we don't support and therefore
raise to bypass caching.
zReduce unsupported)r«  r´  s     r€   rž  Ú'FxGraphCachePickler._reduce_unsupportedF  s   € ô
 !Ð!5Ó6Ð6r   c                ó¨   • UR                  5       u  nu  p4US   n[        R                  " SSU5      n[        R                  " SSU5      nXSS'   X#U44$ )a½  
Custom reducer for graph module to handle irrelevant data for user
defined triton kernels
Essentially what we are doing here is a huge hack where user defined
triton kernel contain a dynamo time side table and the arguments to the
call_function are indices into this side table. These arguments are not
for hashing purposes since we included the source code into the cache
key and the numbers are prone to give false negatives due to ordering.
Ú_codezkernel_idx = \d+r‡   zconstant_args_idx = \d+)Ú
__reduce__ÚreÚsub)rÁ   r£  Úfnr  Úimportsr%  s         r€   r   Ú(FxGraphCachePickler._reduce_graph_moduleM  sY   € ð !Ÿm™m›oÑˆ‰OˆTØ�G‰}ˆÜ�vŠvÐ)¨2¨tÓ4ˆÜ�vŠvÐ0°"°dÓ;ˆØˆW‰Ø˜'�?Ð"Ð"r   c                ó`  • UR                   by  [        UR                   5      n[        R                  " U5      (       aI  [        R                  " U5      (       a.  [        R
                  " U5      (       d  [        UR                  44$ [        UR                  UR                  UR                   44$ r¿   )	Úreal_objÚtypeÚopaque_objectÚis_opaque_typeÚshould_hoistÚhas_membersr  Úscript_class_nameÚwrapped_obj)rÁ   r‡  Úclss      r€   rŸ  Ú.FxGraphCachePickler._reduce_fake_script_object`  s…   € ð �:‰:Ñ!Ü�q—z‘zÓ"ˆCô
 ×,Ò,¨S×1Ñ1Ü!×.Ò.¨s×3Ñ3Ü%×1Ò1°#×6Ñ6ä ×!4Ñ!4Ð 6Ð7Ð7Ü˜Ÿ™¨×(;Ñ(;¸Q¿Z¹ZÐHÐIÐIr   c                ól  •  U R                  U5        U R                  R                  5       U R                  R                  S5        U R                  R	                  S5        $ ! [
        [        [        R                  [        4 a%  n[        R                  SSS9  [        S5      UeSnAf[         aD  nS[        U5      ;   a/  S[        U5      ;   a   [        R                  SSS9  [        S5      Uee SnAff = f! U R                  R                  S5        U R                  R	                  S5        f = f)z,
Pickle an object and return a byte string.
r   zFailed to pickle cache keyT©Úexc_infoNÚpybind11zis not pickleable)Údumpr�  ÚgetvalueÚseekÚtruncateÚ	TypeErrorÚAttributeErrorÚpickleÚPicklingErrorÚ
ValueErrorÚlogÚwarningr«  r«   r“   )rÁ   ÚobjrQ  s      r€   r¯   ÚFxGraphCachePickler.dumpsp  sõ   € ð	%Ø�I‰I�cŒNØ—<‘<×(Ñ(Ó*ð �L‰L×Ñ˜aÔ Ø�L‰L×!Ñ! !Õ$øô œ>¬6×+?Ñ+?ÄÐLó 	Jä�K‰KÐ4¸tˆKÑDÜ$Ð%AÓBÈÐIûÜó 	ð œS ›VÓ#Ð(;¼sÀ1»vÓ(EÜ—‘Ð8À4�ÑHÜ(Ð)EÓFÈAÐMØûð	ûð �L‰L×Ñ˜aÔ Ø�L‰L×!Ñ! !Õ$ús/   ‚*A# Á#$C8Â B'Â'C8Â4?C3Ã3C8Ã8C; Ã;8D3c                ó:   • U R                  U5      n[        U5      $ )z5
Serialize an object and return a hash of the bytes.
)r¯   r   )rÁ   rÛ  Úserialized_datas      r€   r:  ÚFxGraphCachePickler.get_hash‡  s   € ð Ÿ*™* S›/ˆÜ˜?Ó+Ð+r   c                ób  ^ • SU 4S jjn/ n[        U5      R                  5        GH  u  pE[        U[        5      (       aU  [	        [        U5      5       H;  nT R                  XV   5      nUR                  SU SU SU SU" XV   5       35        M=     Mp  [        U[        5      (       aO  UR                  5        H9  u  p‰T R                  U	5      nUR                  SU SU SU SU" U	5       35        M;     MÔ  T R                  U5      nUR                  SU SU SU" U5       35        GM     U$ )z©
Get a printable string describing in more detail all the attributes
comprising an object. Useful for debugging when one graph hashes
to a different value than another.
c                ó‚  >• [        U [        R                  5      (       a  [        [	        U 5      5      $ [        U [
        5      (       a)  U R                  SSS9n[        U5      S::  a  U$ US S S-   $ [        U 5      TR                  ;   a*  [        TR                  [        U 5         " U 5      S   5      $ [        U 5      $ )Nr¤   r†  )Úerrorsé   z...rZ   )
r#  r{   r   r“   r‰  r$  r  ÚlenrÃ  r’  )rÛ  ÚvalrÁ   s     €r€   Úget_strÚ0FxGraphCachePickler.debug_lines.<locals>.get_str•  s¤   ø€ Ü˜#œuŸ|™|×,Ñ,ÜÔ@ÀÓEÓFÐFÜ˜C¤×'Ñ'Ø—j‘j °�jÐ;�Ü! #›h¨$Ó.�sÐF°C¸¸°JÀÑ4FÐFÜ�c“˜d×1Ñ1Ó1ä˜4×.Ñ.¬t°C«yÒ9¸#Ó>¸qÑAÓBÐBä˜3“x�r   Ú[z] z]: z: ©rÛ  r   rÖ   r“   )	Úvarsr
  r#  ÚlistÚrangerä  r:  ÚappendÚdict)
rÁ   Úinpræ  ÚlinesÚattrrÛ  ÚiiÚhÚkÚvs
   `         r€   Údebug_linesÚFxGraphCachePickler.debug_linesŽ  s  ø€ ÷
	 ð ˆÜ˜c›Ÿ™×*‰IˆDÜ˜#œt×$Ñ$Ü¤ C£ž/�BØŸ™ c¡gÓ.�AØ—L‘L 1 Q C r¨$¨¨q°°°C¹ÀÁÓ8HÐ7IÐ!JÖKó *ô ˜C¤×&Ñ&ØŸI™IžK‘D�AØŸ™ aÓ(�AØ—L‘L 1 Q C r¨$¨¨q°°°3±w¸q³z°lÐ!CÖDó (ð —M‘M #Ó&�Ø—‘˜q   2 d V¨2©g°c«l¨^Ð<×=ñ +ð ˆr   )r�  r’  r¢  ©F)r£  útorch.fx.GraphModuler¤  r  rÖ   rÙ   )r‡  r   rÖ   z.tuple[Callable[[T], T], tuple[TensorMetadata]])r‡  r   rÖ   zHtuple[Callable[[T], T], tuple[TensorMetadata | TensorMetadataAndValues]])rµ  r   rÖ   z#tuple[Callable[[T], T], tuple[str]])rµ  r   rÖ   r   )r£  rù  rÖ   z&tuple[Any, tuple[dict[str, Any], str]])r‡  rJ   rÖ   z*tuple[Callable[..., Any], tuple[Any, ...]])rÛ  r   rÖ   r$  ré  )rï  ÚFxGraphHashDetailsrÖ   ú	list[str])rÚ   rÛ   rÜ   rÝ   rU  rÂ   r”  r•  r™  rž  r   rŸ  r¯   r:  rö  rà   Ú__classcell__)r¡  s   @r€   r‹  r‹  å  s­   ø† ñð 16ð#à ð#ð *.ð#ð 
÷	#ð #ðJ%Øð%à	7ô%ð FØð Fà	Qô FôD#ô7ð#Ø&ð#à	/ô#ð&JØ!ðJà	3ôJô %ô.,÷ ò  r   r‹  c                ó  • [        [        R                  " X5      S S9 HÔ  nUR                  R	                  UR
                  S 5      nUc   eUR                  nUc   e[        US5       nUR                  UR
                  R                  S5      5        UR                  UR                  5       5        S S S 5        UR                  (       d  M°  [        UR                  UR
                   S3U5        MÖ     g ! , (       d  f       NJ= f)Nc                ó   • U R                   $ r¿   )r¡   r}  s    r€   Ú<lambda>Ú!build_code_hash.<locals>.<lambda>´  s   € ÈÏÊr   ©rç   Úrbr¤   r,  )ÚsortedÚpkgutilÚiter_modulesÚmodule_finderÚ	find_specr¡   ÚoriginrÆ   r“  r°   ÚreadÚispkgÚbuild_code_hashÚsubmodule_search_locations)ÚrootsÚprefixÚhasherÚlibÚspecÚmodulert  s          r€   r  r  ±  sÍ   € ô ”g×*Ò*¨5Ó9Ñ?OÔPˆØ× Ñ ×*Ñ*¨3¯8©8°TÓ:ˆØÑÐÐØ—‘ˆØÑ!Ð!Ð!Ü�&˜$Ô 1Ø�M‰M˜$Ÿ)™)×*Ñ*¨7Ó3Ô4Ø�M‰M˜!Ÿ&™&›(Ô#÷  ð �9�9‰9ä˜D×;Ñ;ÀÇ	Á	¸{È!¸_ÈfÖUò Q÷
  Õús   Á+A
C9Ã9
D	c                óX   ^ ^• / mSUU 4S jjnSU4S jjnSU4S jjnX!l         X1l        U$ )zu
This function is a reimplementation of functools.lru_cache with a
set function that allows prepopulating the cache.
c                 óX   >• [        T 5      S:X  a  T R                  T" 5       5        T S   $ ©Nr   ©rä  rí  )Ú_cacheÚfuncs   €€r€   ÚwrapperÚ torch_key_cache.<locals>.wrapperÉ  s'   ø€ Üˆv‹;˜!ÓØ�M‰M™$›&Ô!Ø�a‰yÐr   c                óJ   >• [        T5      S:X  d   eTR                  U 5        g r  r  )rå  r  s    €r€   Úset_valÚ torch_key_cache.<locals>.set_valÎ  s!   ø€ Ü�6‹{˜aÓÐÐØ�‰�cÕr   c                 ó&   >• T R                  5         g r¿   )Úclear)r  s   €r€   r  Útorch_key_cache.<locals>.clearÒ  s   ø€ Ø�‰�r   ©rÖ   r$  )rå  r$  rÖ   rÙ   rØ   )Úsetr  )r  r  r  r  r  s   `   @r€   Útorch_key_cacher#  Á  s/   ù€ ð €F÷ð ÷
÷ð „KØ„MØ€Nr   c                 ó  • [        SSS9   [        R                  " 5       (       d  S
S jn U " [        5      sSSS5        $ SSKJn  UR                  S5      R                  5       R                  S	5      sSSS5        $ ! , (       d  f       g= f)zK
Compute a key that contains relevant information about torch source files
Úinductor_codecache_torch_keyF)Úlog_pt2_compile_eventc                ó`  • Sn[         R                  R                  [        5      nU Vs/ s H"  n[         R                  R	                  X#5      PM$     nn[
        R                  " 5       nUR                  [        R                  R                  S5      5        [        U /SU5        U H]  n[         R                  R                  U5      (       d  M)  [        US5       nUR                  UR                  5       5        S S S 5        M_     UR                  5       $ s  snf ! , (       d  f       M…  = f)N)z"codegen/aoti_runtime/interface.cppz	script.ldr¤   r‡   r  )r¹   rº   ÚdirnameÚ__file__r»   r¬   r­   r“  r{   Ú__version__r°   r  r  rÆ   r	  r  )ÚrootÚextra_filesÚinductor_rootr~  r  rº   rt  s          r€   Úget_code_hashÚ torch_key.<locals>.get_code_hashâ  sÕ   € ð�ô !#§¡§¡´Ó 9�ÙGRÓSÂ{À!œrŸw™wŸ|™|¨MÖ=Á{�ÐSÜ ŸšÓ)�Ø—‘œe×/Ñ/×6Ñ6°wÓ?Ô@Ü  ¨¨FÔ3Û'�DÜ—w‘w—~‘~ d×+Ó+Ü! $¨Ô-°Ø"ŸM™M¨!¯&©&«(Ô3÷ .Ñ-ñ (ð —}‘}“Ð&ùò T÷ .Ö-ús   ª)DÃ DÄ
D-	Nr   )Úparutilztorch/src_hash.txtÚascii)r+  r“   rÖ   r$  )	r!   r#   Ú	is_fbcoder/   Úlibfb.pyr0  Úget_file_contentsÚrstripr°   )r.  r0  s     r€   Ú	torch_keyr6  Ú  sk   € ô
 
Ð4ÈEÓ	RÜ×Ò×!Ñ!ô'ñ& !¤Ó-÷- 
SÑ	Rõ0 	%à×(Ñ(Ð)=Ó>×EÑEÓG×NÑNÈwÓW÷5 
S×	R×	Rús   ‹+A=Á 3A=Á=
Bc                 óH   • [         R                  R                  [        5      $ r¿   )r¹   rº   r(  r)  r~   r   r€   Úget_inductor_rootr8  ü  s   € Ü�7‰7�?‰?œ8Ó$Ð$r   c                  ó$   • \ rS rSr% SrS\S'   Srg)ÚOrderedSetHolderi   zV
See FxGraphHashDetails. Holds a sorted list to support stable hashing
of set kwargs.
rx  r
  r~   Nrz  r~   r   r€   r:  r:     s   ‡ ñð
 Ör   r:  c                  ó   • \ rS rSrSrSrg)r«  i
  zA
Exception to indicate that the FxGraphCache should be bypassed.
r~   N)rÚ   rÛ   rÜ   rÝ   rU  rà   r~   r   r€   r«  r«  
  s   † ôr   r«  c                  ój   • \ rS rSrSrS/r          S
S jrSS jr    SS jr    SS jr	Sr
g	)rú  i  zn
Object to capture all the details for a compiled FX graph relevant to computing
a safe and stable cache key.
Úgraph_idc           	     ó’  • Xl         X l        [        R                  U l        0 U l        [        UR                  5       5       H`  u  pVXPR                  ;  d  M  [        U5      [        [        4;   a#  [        [        U5      5      U R                  U'   MR  X`R                  U'   Mb     SSKJnJnJn	  SSKJn
  / U l        UGbN  UR'                  5        GH9  n[)        U[*        R,                  R.                  5      (       d  M/  [0        R2                  " UR4                  R7                  SUS9UR4                  R7                  SU	S95       H¿  nSSKJn  UR=                  UR>                  S   5      nS n[)        Xí5      (       aB  UR@                  (       a%  [C        [        S UR@                   5       5      5      nURD                  nU
" U5      nURG                  UR>                  S	   5      nU R$                  RI                  UUU45        MÁ     GM<     X@l%        [M        S
 U 5       5      (       + nU(       aF  [*        RN                  RQ                  5       (       a#  [*        RN                  RS                  5       U l*        [*        RV                  " 5       [*        RX                  " 5       [*        RZ                  R\                  R^                  4U l0        [*        Rb                  Rd                  Rf                  Rh                  [*        Rb                  Rd                  Rf                  Rj                  [*        Rb                  Rd                  Rf                  Rl                  4U l7        [q        5       U l9        [t        Rw                  5       U l<        [z        R|                  " SS9U l?        U R�                  [z        R‚                  5      U lA        [*        R„                  Rz                  R†                  U lD        U R�                  [z        RŠ                  5      U lE        U R�                  [z        RŒ                  5      U lF        U R�                  [z        RŽ                  5      U lG        U R‘                  [z        R’                  5      U lI        U R‘                  [z        R”                  5      U lJ        [—        5         [™        [›        U R€                  [œ        Rž                  " 5       5      5      U lN        [         R                  " 5        VVs0 s H  u  nnUc  M  UUR}                  SS9_M     snnU lP        U R£                  [z        R¤                  5      U lS        0 U lT        [ª        R­                  5       nUb[  UR¨                  (       aI  [        UR¨                  R                  5       S S9 VVs0 s H  u  nn[C        U5      U_M     snnU lT        g g g s  snnf s  snnf )Nr   )Úkernel_side_tableÚ triton_kernel_wrapper_functionalÚtriton_kernel_wrapper_mutation)Ú9user_defined_triton_kernel_transitive_closure_source_codeÚcall_function)rý   rc  )Ú	AutotunerÚ
kernel_idxc              3  ó~   #   • U  H3  n[        S  UR                  5       R                  5        5       5      v •  M5     g7f)c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr¿   ©r“   )r  Úkvs     r€   r  Ú8FxGraphHashDetails.__init__.<locals>.<genexpr>.<genexpr>Q  s   é € Ð*TÒ=S°r¬3¨r¯7¨7Ò=Sùs   ‚N)r  Ú
all_kwargsr
  )r  r"  s     r€   r  Ú.FxGraphHashDetails.__init__.<locals>.<genexpr>P  s4   é € ð '"â-;¨ô %+Ñ*T¸Q¿\¹\»^×=QÑ=QÔ=SÓ*T×$TÐ$TÚ-;ùs   ‚;=Úconstant_args_idxc              3  óV   #   • U  H  n[        U[        R                  5      v •  M!     g 7fr¿   )r#  r{   r   )r  r~  s     r€   r  rL  f  s   é € Ð"WÊÀ1¤:¨a´·±×#>Ð#>Êùs   ‚')F)Úignore_private_configsc                ó   • [        U S   5      $ r  rH  r}  s    r€   rÿ  Ú-FxGraphHashDetails.__init__.<locals>.<lambda>¯  s   € Ì#ÈaÐPQÉdÌ)r   r  )Wr£  Úexample_inputsÚcconfigÚcache_key_tagÚ	fx_kwargsr  r
  ÚEXCLUDED_KWARGSrÃ  r"  rY   r:  Ú*torch._higher_order_ops.triton_kernel_wrapr?  r@  rA  Útorch._inductor.codegen.wrapperrB  Úuser_defined_triton_sourceÚmodulesr#  r{   rš  ÚGraphModuleÚ	itertoolsÚchainr©  Ú
find_nodesÚtriton.runtime.autotunerrD  Ú
get_kernelÚkwargsÚconfigsr“   r¾  Úget_constant_argsrí  Úinputs_to_checkÚanyÚacceleratorÚis_availableÚcurrent_device_indexÚdefault_cuda_device_indexÚ$are_deterministic_algorithms_enabledÚ-is_deterministic_algorithms_warn_only_enabledÚutilsÚdeterministicÚfill_uninitialized_memoryÚ!deterministic_algorithms_settingsÚbackendsrƒ   ÚmatmulÚfp32_precisionÚ&allow_fp16_reduced_precision_reductionÚ&allow_bf16_reduced_precision_reductionÚcuda_matmul_settingsr6  Útorch_versionrœ   rµ   Úsystem_infor#   Úsave_config_portableÚinductor_configÚ_get_custom_pass_detailÚpost_grad_custom_pre_passÚ
_functorchÚbundled_autograd_cacheÚprecompile_enabledÚpost_grad_custom_post_passÚjoint_custom_pre_passÚjoint_custom_post_passÚ_get_custom_pass_detail_unsafeÚ_pre_fusion_custom_passÚ_fuse_ddp_communication_passesr(   ÚtupleÚmapr'   ry  r&   Ú!_get_custom_partitioner_fn_detailÚcustom_partitioner_fnÚ_custom_partitioner_fnÚvar_to_hint_overrideÚFxGraphCacheÚ_get_shape_env)rÁ   r£  rR  rU  rd  rô  rõ  r?  r@  rA  rB  r  ÚnoderD  Úkernelrb  Úkernel_sourceÚconstant_argsÚno_tensor_inputsr‰   Úcustom_configÚ	shape_envÚsymrå  s                           r€   rÂ   ÚFxGraphHashDetails.__init__  sÁ  € ð ŒØ,ÔÜ$×2Ñ2ˆÔð
 -/ˆŒÜ˜9Ÿ?™?Ó,Ö-‰DˆAØ×,Ñ,Õ,Ü˜“7œs¤JÐ/Ó/ô )9¼À»Ó(C�D—N‘N 1Ó%à()—N‘N 1Ó%ñ .÷	
ñ 	
õ
	
ð 68ˆÔ'ØŠ>ØŸ*™*Ÿ,�Ü! &¬%¯(©(×*>Ñ*>×?Ñ?ÙÜ%ŸOšOØ—L‘L×+Ñ+Ø*Ð3Sð ,ð ð —L‘L×+Ñ+Ø*Ð3Qð ,ð ö	�Dõ Cà.×9Ñ9¸$¿+¹+ÀlÑ:SÓT�FØ"�GÜ! &×4Ñ4Ø!Ÿ>Ÿ>Ü&)Ü &ñ '"à-3¯^ª^ó'"ó !"ó'˜Gð "(§¡˜ñ RØ"óð "ð
 %6×$GÑ$GØŸ™Ð$7Ñ8ó%�Mð ×3Ñ3×:Ñ:Ø&¨°wÐ?öô=ñ 'ðL  /Ôä"Ñ"WÉÓ"WÓWÔWÐö ¤× 1Ñ 1× >Ñ >× @Ñ @Ü-2×->Ñ->×-SÑ-SÓ-UˆDÔ*ô ×6Ò6Ó8Ü×?Ò?ÓAÜ�K‰K×%Ñ%×?Ñ?ð2
ˆÔ.ô �N‰N×Ñ×&Ñ&×5Ñ5Ü�N‰N×Ñ×&Ñ&×MÑMÜ�N‰N×Ñ×&Ñ&×MÑMð%
ˆÔ!ô '›[ˆÔÜ$×/Ñ/Ó1ˆÔÜ%×:Ò:ÐRWÑXˆÔà)-×)EÑ)EÜ×,Ñ,ó*
ˆÔ&ô #(×"2Ñ"2×"9Ñ"9×"PÑ"PˆÔØ*.×*FÑ*FÜ×-Ñ-ó+
ˆÔ'ð &*×%AÑ%AÜ×(Ñ(ó&
ˆÔ"ð '+×&BÑ&BÜ×)Ñ)ó'
ˆÔ#ð (,×'JÑ'JÜ×*Ñ*ó(
ˆÔ$ð /3×.QÑ.QÜ×1Ñ1ó/
ˆÔ+ô
 	"Ô#Ü%*Ü�×,Ñ,Ô.C×.JÒ.JÓ.LÓMó&
ˆÔ"ô *H×)MÒ)MÔ)Oô/
â)OÑ%�˜Øó UˆF�M×6Ñ6ÈeÐ6ÐTÒTÙ)Oò/
ˆÔ+ð '+×&LÑ&LÜ×(Ñ(ó'
ˆÔ#ð 57ˆÔ!Ü ×/Ñ/Ó1ˆ	ØÑ  Y×%C×%Cô !'Ø×2Ñ2×8Ñ8Ó:Ñ@Sò!ô)ò!‘H�C˜ô �C“˜#’ñ!ò)ˆDÕ%ð &DÐ ùó/
ùó )s   Ó4
V=ÔV=ÖWc                ób  • U(       d  g [        U[        5      (       a!  U Vs/ s H  o R                  U5      PM     sn$ [        U[        5      (       a  U$ [        U[        5      (       a  UR                  5       $ [        U5      (       a  g [        S[        [        U5      5       35      es  snf )Nzunknown config type: )	r#  rë  r‚  r“   r;   ÚuuidÚcallablerª   rÃ  )rÁ   Úcustom_passr~  s      r€   r‚  Ú1FxGraphHashDetails._get_custom_pass_detail_unsafe¼  s–   € ÞØÜ�k¤4×(Ñ(ÙDOÓPÂK¸q×7Ñ7¸Ö:ÁKÑPÐPÜ�k¤3×'Ñ'ØÐÜ�k¤?×3Ñ3Ø×#Ñ#Ó%Ð%Ü�K× Ñ ð ÜÐ4´S¼¸kÓ9JÓ5KÐ4LÐMÓNÐNùò Qs   ¢B,c                ól   • U(       d  g [        U[        [        45      (       d   eUR                  5       $ r¿   )r#  r;   r:   r—  )rÁ   r™  s     r€   rz  Ú*FxGraphHashDetails._get_custom_pass_detailË  s2   € ö ØÜ˜+¬Ô9NÐ'O×PÑPÐPÐPØ×ÑÓ!Ð!r   c                ó`   • U(       d  g [        U[        5      (       d   eUR                  5       $ r¿   )r#  r=   r—  )rÁ   rˆ  s     r€   r‡  Ú4FxGraphHashDetails._get_custom_partitioner_fn_detailÓ  s.   € ö %ØÜÐ/Ô1D×EÑEÐEÐEØ$×)Ñ)Ó+Ð+r   )r‰  r„  rƒ  rT  ru  r&   r'   ri  ro  rR  rU  r£  ry  rd  r�  r€  r  r{  r~  rw  rv  rY  rŠ  N)
r£  rù  rR  úSequence[InputType]rU  rh   rd  úSequence[int]rÖ   rÙ   )r™  r   rÖ   ú
Any | None)r™  z+CustomGraphPassType | CustomGraphModulePassrÖ   r¡  )rˆ  r>   rÖ   r¡  )rÚ   rÛ   rÜ   rÝ   rU  rV  rÂ   r‚  rz  r‡  rà   r~   r   r€   rú  rú    s|   † ñð "�l€OðXà ðXð ,ðXð $ð	Xð
 'ðXð 
ôXôFOð"ØFð"à	ô"ð,Ø%<ð,à	÷,r   rú  c                ó  • [        XX#5      n[        UR                  5      S:g  n[        X5      nSUR	                  U5      -   nUR                  U5      nSR                  U5      n	[        R                  SU SU	 35        Xx4$ )z5
Generate a unique hash of the FX graph for caching.
r   rt  Ú
z$FX graph cache hash details for key z:
)	rú  rä  rY  r‹  r:  rö  r»   rÙ  Údebug)
r£  rR  rU  rd  Údetailsr¤  Úpicklerrç   rö  Ú	debug_strs
             r€   Úcompiled_fx_graph_hashr¨  Ü  s‰   € ô ! °YÓP€GÜ&)¨'×*LÑ*LÓ&MÐQRÑ&RÐ#Ü! "ÓF€Gð �× Ñ  Ó)Ñ
)€CØ×%Ñ% gÓ.€KØ—	‘	˜+Ó&€IÜ‡I�IÐ4°S°E¸¸Y¸KÐHÔIØÐÐr   c                óî  • [         R                  R                  5       (       a#  [         R                  R                  5       (       d  g[	        U S-  5      n[
        R                  " 5       (       aI  [         R                  R                  S5      n[        R                  SUU5        U[	        X-  S-  5      -  n[        R                  SU5        [        R                  R                  [        US95        U$ )zq
Ephemerally increases the NCCL timeout when compiling for a distributed job
Returns amount of seconds increased
r   g    eÍÍAz>pytorch/remote_cache:ephemeral_timeout_fudge_factor_percentagezNEphemeral NCCL timeout increase fudge factor %d and original increase value %déd   zIncreasing NCCL timeout by %d)Úseconds)r{   Údistributedrg  Úis_initializedÚintr#   r2  Ú_utils_internalÚjustknobs_getval_intrÙ  ÚinfoÚdistÚdistributed_c10dÚ"_add_ephemeral_timeout_for_all_pgsr	   )Útime_saved_nsÚincreased_timeout_secÚfudge_factors      r€   Ú.add_ephemeral_timeout_increase_for_distributedr¸  ò  sÏ   € ô
 ×Ñ×)Ñ)×+Ñ+´5×3DÑ3D×3SÑ3S×3UÑ3UØä °Ñ 4Ó5Ðä×Ò×ÑÜ×,Ñ,×AÑAØLó
ˆô 	�‰Ø\ØØ!ô	
ð
 	¤Ð%:Ñ%IÈCÑ%OÓ!PÑPÐä‡H�HÐ,Ð.CÔDÜ×Ñ×<Ñ<ÜÐ/Ñ0ôð !Ð r   c                  óè   • \ rS rSrSr\SS j5       r\              SS j5       r\          SS j5       r\              SS j5       r	\      SS j5       r
\SS j5       rS	rg
)ÚGuardedCachei  zB
Mixin for caches that have guards associated with their entries.
c                ó   • [        S5      e)Nz.Implement _get_tmp_dir_for_key on parent class©ÚNotImplementedError)rÊ  Ú_keys     r€   Ú_get_tmp_dir_for_keyÚ!GuardedCache._get_tmp_dir_for_key  s   € ä!Ð"RÓSÐSr   c                ó   • [        S5      e)Nz(Implement _record_result on parent classr¼  ©rÊ  rç   Ú	local_hitÚ
local_missÚ
remote_hitÚremote_misss         r€   Ú_record_resultÚGuardedCache._record_result  s   € ô "Ð"LÓMÐMr   c              #  óœ  #   • U(       aÑ  U R                  U5      n[        R                  R                  U5      (       aœ  [	        [        R
                  " U5      5       Hy  nUR                  S5      (       a  M   [        [        R                  R                  XE5      S5       nUR                  5       n[        R                  " U5      US4v •  S S S 5        M{     U(       a�   UR                  U5      =nbk  [!        U["        5      (       d   eUS   n	[!        U	[$        [&        45      (       d   e[(        R*                  " U	5      n[        R                  " U5      US4v •  g g g ! , (       d  f       GM  = f! [         a    [        R                  SSS9   GM;  f = f! [         a"    [        R                  SU R,                  SS9   g f = f7f)	Nr,  r  Tz,fx graph cache unable to load compiled graphrÍ  r  Fz %s unable to load compiled graph)r¿  r¹   rº   r  r  ÚlistdirÚ
startswithrÆ   r»   r	  rÖ  ÚloadsÚ	ExceptionrÙ  rÚ  r÷   r#  rî  r“   r$  r  Ú	b64decoderÚ   )
rÊ  ÚlocalÚremote_cacherç   r1  rº   rt  r8  Ú
cache_datar  s
             r€   Úiterate_over_candidatesÚ$GuardedCache.iterate_over_candidates"  s€  é € ö Ø×-Ñ-¨cÓ2ˆFÜ�w‰w�~‰~˜f×%Ñ%Ü"¤2§:¢:¨fÓ#5Ö6�DØ—‘ s×+Ñ+Ù ðÜ!¤"§'¡'§,¡,¨vÓ"<¸dÔCÀqØ&'§f¡f£h˜GÜ"(§,¢,¨wÓ"7¸À$Ð"FÒF÷ DÑCñ	 7ö ð
Ø".×"2Ñ"2°3Ó"7Ð7�JÑDÜ% j´$×7Ñ7Ð7Ð7Ø% fÑ-�DÜ% d¬S´%¨L×9Ñ9Ð9Ð9Ü$×.Ò.¨tÓ4�GÜ Ÿ,š, wÓ/°¸%Ð?Ó?ð Eð ÷ D×Cûô %ó ÜŸ™ØJØ%)ð $õ ðûô ó Ü—‘Ø6¸¿¹Ètð ó ðüss   ‚A7GÁ:)E7Â#,E$ÃE7ÃGÃ#A>F Å!GÅ$
E4	Å.E7Å1GÅ4E7Å7FÆGÆFÆGÆ)G	ÇGÇG	Ç	Gc                óü  • SnSnSnSn	Sn
U R                  X#U5       Hw  u  p¼n
[        US5      (       d   eUR                  (       d  UnUnSn  OI[        U" UR                  U5      5      nU(       a  UnUnSnUR                  n	  OSnUR                  n	My     SU0nU	b  XžS'   USL=(       a    U
nUSL=(       a    U
(       + nUSL =(       d    U=(       a    UnUSL =(       a    USLnU R	                  UUUUUS	9  XgU4$ )
a  
Find the first cache entry in iterate_over_candidates that passes `evaluate_guards`.

Args:
    key: The cache key to look up
    local: Whether to check the local cache
    remote_cache: The remote cache to check, if any
    evaluate_guards: Function that evaluates whether a guard passes the check,
        given a list of hint values and the guard expression.
    hints: List of symint hints paired with evaluate_guards

Returns:
    A tuple of (graph, pickled_content) if found, or (None, None) if not found
NÚ	full_missFÚguards_exprrø   Ú
guard_missÚcache_status_detailedÚcache_status_guard_expr)rÃ  rÄ  rÅ  rÆ  )rÒ  r„  rÖ  r  rÇ  )rÊ  rç   rÏ  rÐ  Úevaluate_guardsÚhintsr©  Úpickled_contentÚresult_statusÚsample_guards_exprÚin_localÚ	candidater8  rø   r±  rÃ  rÅ  rÄ  rÆ  s                      r€   Úfind_guarded_entryÚGuardedCache.find_guarded_entryF  sN  € ð. ˆØˆØ#ˆØ!ÐØˆð
 -0×,GÑ,GØ ö-
Ñ(ˆI ô ˜9 m×4Ñ4Ð4Ð4Ø×(×(à!�Ø")�Ø %�Ùô ‘ y×'<Ñ'<¸eÓDÓEˆCÞØ!�Ø")�Ø %�Ø%.×%:Ñ%:Ð"Ùð !-�Ø%.×%:Ñ%:Ò"ñ3-
ð6 (¨Ð7ˆØÑ)Ø.@Ð*Ñ+ð  Ð%×2¨(ˆ	Ø $Ð&×7¨x¬<ˆ
Ø˜t�m×1 z×<°uˆ
Ø˜t�m×@¨¸DÐ(@ˆØ×ÑØØØ!Ø!Ø#ð 	ñ 	
ð  tÐ+Ð+r   c                ó˜   • U Vs/ s H8  n[        U[        R                  5      (       d  M$  [        U5      (       d  M6  UPM:     sn$ s  snf )zw
Get the backed SymInt objects from the input list. Note that we can never
have guards that depend on unbacked symint.
)r#  r{   r   rV   )rÊ  r  rµ  s      r€   Ú_filter_backed_symintsÚ#GuardedCache._filter_backed_symints•  s1   € ñ "ÓQš6�a¤Z°´5·<±<×%@“ÄXÈaÇ[—™6ÑQÐQùÒQs   …#A¬A¾Ac                ó°   • [         R                  R                  R                  5       nU(       a  UR                  (       d  gUR                  R
                  $ )z7
Helper to get the shape env from the tracing context.
N)r{   Ú_guardsÚTracingContextÚtry_getÚ	fake_moder“  )rÊ  Úctxs     r€   rŒ  ÚGuardedCache._get_shape_envŸ  s8   € ô
 �m‰m×*Ñ*×2Ñ2Ó4ˆÞ˜#Ÿ-Ÿ-ØØ�}‰}×&Ñ&Ð&r   r~   N)rÊ  útype[GuardedCache[T]]r¾  r“   rÖ   r“   )rÊ  rí  rç   r“   rÃ  r  rÄ  r  rÅ  r  rÆ  r  rÖ   rÙ   )
rÊ  rí  rÏ  r  rÐ  úRemoteCache[JsonDataTy] | Nonerç   r“   rÖ   z,Generator[tuple[T, bytes, bool], None, None])rÊ  rí  rç   r“   rÏ  r  rÐ  rî  rÚ  z5Callable[[str, list[int] | list[torch.SymInt]], bool]rÛ  z	list[int]rÖ   z-tuple[T | None, bytes | None, dict[str, str]])rÊ  rí  r  rŸ  rÖ   zlist[torch.SymInt])rÊ  rí  rÖ   zShapeEnv | None)rÚ   rÛ   rÜ   rÝ   rU  Úclassmethodr¿  rÇ  rÒ  rá  rä  rŒ  rà   r~   r   r€   rº  rº    se  † ñð óTó ðTð ðNØ"ðNàðNð ðNð ð	Nð
 ðNð ðNð 
óNó ðNð ð!Ø"ð!àð!ð 5ð!ð ð	!ð
 
6ó!ó ð!ðF ðL,Ø"ðL,àðL,ð ðL,ð 5ð	L,ð
 OðL,ð ðL,ð 
7óL,ó ðL,ð\ ðRØ"ðRØ,?ðRà	óRó ðRð ó'ó ó'r   rº  c                  óF   • \ rS rSr\SS j5       r\\SS j5       5       rSrg)ÚInductorCacheArtifactiª  c                óX   • [         R                  U R                  U R                  5        g r¿   )r‹  Ú_write_to_local_cacherç   r8  rÀ   s    r€   Úpopulate_cacheÚ$InductorCacheArtifact.populate_cache¬  s   € ä×*Ñ*¨4¯8©8°T·\±\ÕBr   c                 ó   • g)NÚinductorr~   r~   r   r€   rÃ  ÚInductorCacheArtifact.type°  s   € ð r   r~   NrØ   ©rÖ   r“   )	rÚ   rÛ   rÜ   rÝ   r   rô  rÞ   rÃ  rà   r~   r   r€   rñ  rñ  ª  s2   † àóCó ðCð Øóó ó ór   rñ  c                  óÀ  • \ rS rSrSr\SS j5       r\SS j5       r\              SS j5       r	\        SS j5       r
\ S             SS jj5       r\SS	 j5       r\            SS
 j5       r\SS j5       r\SS j5       r\            SS j5       r\SS j5       r\ S                 SS jj5       r\SS j5       rSrg)r‹  i¶  aÖ  
Supports caching and reusing compiled Fx graphs.

The overall strategy is as follows:
- This cache stores entries on disk. When saving an entry, we can't
  serialize callables (that could be C++, Triton, etc.), so we serialize
  their own disk cache location. We then recreate the compiled artifact
  after fetching from disk.
- For indexing the cache, we gather the fields relevant to identifying an
  FxGraph (the graph module, graph inputs, system settings etc.) into an
  FxGraphCacheDetails object, pickle it, and compute a hash for the key.
  See FxGraphCachePickler.
- Among the metadata we store, we also include a guards expression that's
  appropriate for validating any symbols for Tensor arguments that have
  symbolic bounds. On cache lookup then, we evaluate those guards in the
  current context to validate that a cached entry can be served.
- A given graph could have multiple compiled versions, corresponding to
  different sets of guards. Therefore, we store cache entries in the form:
      <temp dir>/<fx graph hash>/<serialized metadata>
- On lookup, we compute the key from the graph details, iterate over all
  leaf files in the corresponding subdirectory, deserialize the entry, and
  evaluate its guards expression. If the evaluation succeeds, we have a
  cache hit. If it fails, we compile the graph and store a new entry.
- Finally, on a cache hit, we need to make sure any guards that would
  have been created during compilation are added to the current context.
c                 óR   • [         R                  R                  [        5       S5      $ )zC
Get the toplevel temporary directory for storing compiled graphs.
Úfxgraph)r¹   rº   r»   rB   r~   r   r€   Ú_get_tmp_dirÚFxGraphCache._get_tmp_dirÔ  s   € ô
 �w‰w�|‰|œI›K¨Ó3Ð3r   c                ón   • [         R                  R                  [        R	                  5       USS U5      $ )z1
Return the disk location for a given cache key.
rZ   r+  )r¹   rº   r»   r‹  rý  ©rÊ  rç   s     r€   r¿  Ú!FxGraphCache._get_tmp_dir_for_keyÛ  s*   € ô
 �w‰w�|‰|œL×5Ñ5Ó7¸¸Q¸q¸À3ÓGÐGr   c                óþ  • U(       a%  [         R                  " [         R                  S5        U(       aK  [         R                  " [         R                  S5        [         R                  " [         R                  SU5        U(       a%  [         R                  " [         R                  S5        U(       aL  [         R                  " [         R                  S5        [         R                  " [         R                  SU5        gg)z7
Called by GuardedCache to record hit/miss statistics.
Ú!inductor_fx_local_cache_hit_countÚ"inductor_fx_remote_cache_hit_countÚ!inductor_fx_remote_cache_hit_keysÚ"inductor_fx_local_cache_miss_countÚ#inductor_fx_remote_cache_miss_countÚ"inductor_fx_remote_cache_miss_keysN)r   Útry_Úincrement_toplevelÚadd_to_set_toplevelrÂ  s         r€   rÇ  ÚFxGraphCache._record_resultâ  sÁ   € ö Ü×#Ò#Ü"×5Ñ5Ø3ôö Ü×#Ò#Ü"×5Ñ5Ø4ôô ×#Ò#Ü"×6Ñ6Ø3Øôö
 Ü×#Ò#Ü"×5Ñ5Ø4ôö Ü×#Ò#Ü"×5Ñ5Ø5ôô ×#Ò#Ü"×6Ñ6Ø4Øõð r   c                ó¼  ^ ^^	• T R                   =n(       a¥  [        R                  " U5      nU=nbŠ  [        U5      US'   [        R
                  " SUR                  S9  [        R
                  " SUR                  S9  [        UR                  5      S:”  a%  [        R                  " [        R                  S5         T R                  U5      mSS	KJn  UR                  b  UR                  " T R                  5        [         R"                  " 5       nT R                  m	[$        R&                  " UT	S
9  [(        R*                  R-                  T R.                  5        [0        S==   T R2                  -  ss'   [4        R7                  ST	5        [4        R7                  ST5        [9        SS U 4S jS9  [9        SU 4S jS9  [9        SU4S jU	4S jS9  [9        SS U 4S jS9  [9        SS U 4S jS9  [;        5       R=                  5       (       a5  T R>                  (       a$  [;        5       RA                  ST R>                  5        T U4$ ! [         a    SU4s $ f = f)a8  
Cache specific post compile steps that need to run if we find a graph in the cache
This includes putting bundled triton artifacts in the right place,
reloading the PyCodeCache artifact, etc.

These don't always happen (i.e. on a cache miss, so they are in a separate function from
CompiledFxGraph.post_compile)
NÚtriton_bundler_metaÚinductor_compile)Úcached_kernel_nameszAOTAutogradCache.inductor_loadr   Únum_triton_bundlesrZ   rj   ©r%  r÷  zOutput code: 
%szOutput code written to: %sÚartifactc                 ó   • SSS.$ )NÚfx_graph_runnableÚstring©r¡   r=  r~   r~   r   r€   rÿ  Ú5FxGraphCache.cache_hit_post_compile.<locals>.<lambda>H  s   € Ø+Ø$ò!r   c                 ó   >• T R                   $ r¿   )Úrunnable_graph_str©r©  s   €r€   rÿ  r  L  s   ø€ ˜u×7Ò7r   )Úmetadata_fnÚ
payload_fnÚinductor_post_grad_graphc                 ó   >• T R                   $ r¿   )Úinductor_post_grad_graph_strr  s   €r€   rÿ  r  P  s   ø€ ˜u×AÒAr   ©r  Úinductor_output_codec                 óH   >• T [         R                  R                  T 5      S.$ )N)ÚfilenameÚ	file_path)r¹   rº   Úabspath)Úartifact_paths   €r€   rÿ  r  T  s   ø€ Ø)ÜŸW™WŸ_™_¨]Ó;òr   c                 ó   >• T $ r¿   r~   r  s   €r€   rÿ  r  X  s   ø€ ™tr   c                 ó   • SSS.$ )NÚ*inductor_provenance_tracking_node_mappingsr®   r  r~   r~   r   r€   rÿ  r  \  s   € ØDØ"ò!r   c                 ó   >• T R                   $ r¿   )Úinductor_provenance_mapping_strr  s   €r€   rÿ  r  `  s   ø€ ˜u×DÒDr   c                 ó   • SSS.$ )NÚ0inductor_provenance_tracking_kernel_stack_tracesr®   r  r~   r~   r   r€   rÿ  r  d  s   € ØJØ"ò!r   c                 ó   >• T R                   $ r¿   )Ú$inductor_provenance_stack_traces_strr  s   €r€   rÿ  r  h  s   ø€ ˜u×IÒIr   Úinductor_provenance)!Ú_triton_bundler`   Úread_and_emitr“   r   Útry_add_pt2_compiler  rä  r	  r
  Úafter_deserializationr©  rk   Úsave_output_codeÚsource_coderL  r^   Úinductor_meta_from_configr_   Úbegin_compiler%   ÚCachedMetricsHelperÚapply_deltasÚmetrics_deltasr    Úcounter_deltasÚoutput_code_logr¤  rK   r"   Úin_progressr0  Ú
add_to_set)
r©  Ú
cache_infoÚ	constantsÚbundler  rˆ  rk   Úinductor_metar'  r%  s
   `       @@r€   Úcache_hit_post_compileÚ#FxGraphCache.cache_hit_post_compile  s/  ú€ ð ×)Ñ)Ð)ˆ6Õ)Ü"/×"=Ò"=¸fÓ"EÐØ+Ð+�Ñ8Ü47¸³I�
Ð0Ñ1Ü"×6Ò6Ø&¸D×<TÑ<Tòô #×6Ò6Ø4Ø(,×(@Ñ(@òô �t×/Ñ/Ó0°1Ó4Ü&×+Ò+Ü*×=Ñ=Ð?Sôð	$Ø!×7Ñ7¸	ÓBˆMå,ð ×-Ñ-Ñ9Ø×.Ò.¨u×/@Ñ/@ÔAô '×@Ò@ÓBˆØ× Ñ ˆÜ×*Ò*¨=¸tÒDô
 	×#Ñ#×0Ñ0°×1EÑ1EÔFÜ�Ó × 4Ñ 4Ñ4Óä×ÑÐ1°4Ô8Ü×ÑÐ:¸MÔJäØñô 8ò	
ô 	Ø&ÜAò	
ô 	Ø"ôô $ò	
ô 	Øñô Eò	
ô 	Øñô Jò	
ô  Ó!×-Ñ-×/Ñ/Ø×:×:äÓ!×,Ñ,Ø% u×'QÑ'Qôð �jÐ Ð øô{ ó 	$ð ˜Ð#Ò#ð	$ús   Â=A I
 É
IÉINc                ó�  • [         R                  5       nUc   e[         R                  U5      nU Vs/ s H  n[        U5      PM     n	n[        R
                  (       a  S nUc  UR                  n[        5       n
[         R                  XX5U	5      u  p¼nU
R                  U5        Uc  SU
4$ Ub)  [        R                  " [        R                  5       X5        UR                  (       aC  [        U" UR                  U5      5      nUSL d   e[         R#                  SXR$                  5        [         R'                  XºU5      $ s  snf )a¶  
Lookup a compiled graph in the cache by key. On a hit, return the
deserialized CompiledFxGraph object. On a miss, return None.
`constants` tracks a list of constants, or a way to obtain the list of constants
associated with a given cache entry
`evaluate_guards` allows AOTAutogradCache and other callers to customize
what constitutes a guard success. Normally, a guard hit happens if
`shape_env.evaluate_guards_expression` returns True.
Nc                ó   • g)NTr~   )r~  Úys     r€   rÿ  Ú,FxGraphCache._lookup_graph.<locals>.<lambda>�  s   € ¨4r   Tz*fx graph cache key %s post-load guards: %s)r‹  rŒ  rä  rX   r#   Ú&unsafe_skip_cache_dynamic_shape_guardsÚevaluate_guards_expressionrî  rá  r“  rR   Úrecord_artifactrñ  rÃ  rÖ  r  rÙ  r¤  ÚguardsrE  )rç   rR  rÏ  rÐ  rB  rÚ  r“  Úsymintsrµ  rÛ  rA  r©  rÜ  Ú
guard_infoÚchecks                  r€   Ú_lookup_graphÚFxGraphCache._lookup_graphs  s0  € ô& !×/Ñ/Ó1ˆ	ØÑ$Ð$Ð$ä×5Ñ5°nÓEˆÙ'.Ó/¢w !”˜1–¡wˆÐ/ô ×8×8ñ 0ˆOàÑ"Ø'×BÑBˆOä%)£Vˆ
ô .:×-LÑ-LØ˜°uó.
Ñ*ˆ 
ð 	×Ñ˜*Ô%Ø‰=Ø˜Ð#Ð#àÑ&Ü ×0Ò0Ü%×*Ñ*Ó,¨côð
 ××Ü™¨×):Ñ):¸GÓDÓEˆEØ˜D’=Ð �=Ü�I‰IØ<¸c×CSÑCSôô ×2Ñ2°5ÀiÓPÐPùòE 0s   ³Ec                ó  • [         R                  U 5      n[        R                  R	                  U5      (       d  [        R
                  " USS9  [        R                  R                  U[        U5      5      n[        X1SS9  g )NTr  rÑ   )	r‹  r¿  r¹   rº   r  r  r»   r   rÓ   )rç   r8  r1  rº   s       r€   ró  Ú"FxGraphCache._write_to_local_cache®  sX   € ä×2Ñ2°3Ó7ˆÜ�w‰w�~‰~˜f×%Ñ%Ü�KŠK˜¨Ò.ô
 �w‰w�|‰|˜F¤K°Ó$8Ó9ˆÜ�T¨dÓ3r   c                ó’  • SSK Jn  [        X5      (       d   S[        U5       S35       e[        R                  5       nUc   e[        R                  U5      nUR                  U5      nUR                  XxS9Ul	        [        U5      n	U	R                  5          [        R                  " U	5      n
 [$        R&                  " [(        R                  5       X
5        U(       a  [        R+                  X
5        U(       a[  [-        U	R.                  =(       d    SS-  5      n[0        R2                  " U
5      R5                  S5      US.nUR7                  X5        gg! [         a+    [        R!                  SSS	9  ["        S
   S==   S-  ss'    gf = f! [         a+    [        R!                  SSS	9  ["        S
   S==   S-  ss'    gf = f)z-
Store a serialized CompiledFxGraph on disk.
rZ   r[   zserialization for z NYIN)ÚplaceholdersrN  z1fx graph cache unable to serialize compiled graphTrÍ  r÷  Úfxgraph_cache_pickle_errorr   g    €„.Ar1  )r  Útime_taken_msz!fx graph unable to write to cacheÚfxgraph_cache_write_error)Ú
compile_fxr\   r#  rÃ  r‹  rŒ  rä  Úget_pruned_guardsÚproduce_guards_expressionrÖ  r   Úprepare_for_serializationrÖ  r¯   rÍ  rÙ  rÚ  r    rR   rM  rñ  ró  r®  Ú_time_taken_nsr  Ú	b64encoder  Úput)rç   Úcompiled_graphrR  rÏ  rÐ  r\   r“  rO  rN  Údisk_compiled_graphr8  rY  rÑ  s                r€   Ú_save_graphÚFxGraphCache._save_graphº  s½  € õ 	0ä˜.×:Ñ:ð 	
Ø ¤ nÓ!5Ð 6°dÐ;ó	
Ð:ô !×/Ñ/Ó1ˆ	ØÑ$Ð$Ð$Ü×5Ñ5°nÓEˆØ×,Ñ,¨WÓ5ˆØ%.×%HÑ%HØ ð &Ið &
ˆÔ"ô # >Ó2ÐØ×5Ñ5Ô7ð	Ü—l’lÐ#6Ó7ˆGð	CÜ ×0Ò0Ü%×*Ñ*Ó,¨côö Ü×2Ñ2°3Ô@æÜ #Ð%8×%GÑ%G×%LÈ1ÐQTÑ$TÓ U�ä"×,Ò,¨WÓ5×<Ñ<¸WÓEØ%2ñ*�
ð × Ñ  Õ1ð øô ó 	Ü�K‰KØCÈdð ñ ô �ZÑ Ð!=Ó>À!ÑCÓ>Ùð	ûô* ó 	CÜ�K‰KÐ;ÀdˆKÑKÜ�ZÑ Ð!<Ó=ÀÑBÕ=ð	Cús%   ÂE Â1B&F Å2FÆFÆ2GÇGc                óh  • U R                  5        GH  n[        U[        R                  R                  5      (       d  M/  UR
                  R                   HÔ  n[        UR                  [        R                  R                  5      (       aE  UR                  R                  5       (       d&  [        SUR                  R                  5        35      eUR                  S:X  d  M�  [        [        XR                  5      [        R                  R                   5      (       d  MË  [        S5      e   GM      g )Nz!Can't cache HigherOrderOperator: ÚgetattrzCan't cache torchbind objects)rZ  r#  r{   rš  r[  r©  Únodesrc  Ú_opsÚHigherOrderOperatorÚ	cacheabler«  r¡   rý   rg  Ú_CÚScriptObject)r£  r  r�  s      r€   Ú_check_for_hopÚFxGraphCache._check_for_hopõ  sÓ   € à—j‘j—lˆFÜ˜f¤e§h¡h×&:Ñ&:×;Ñ;ÙØŸ™×*Ô*�ä˜tŸ{™{¬E¯J©J×,JÑ,J×KÑKØ ŸK™K×1Ñ1×3Ñ3ä,Ø;¸D¿K¹K×<LÑ<LÓ<NÐ;OÐPóð ð —7‘7˜iÕ'¬JÜ˜B§¡Ó,¬e¯h©h×.CÑ.C÷-ó -ô -Ð-LÓMÐMô +ò #r   c                ór  • [         R                  [         R                  4 HA  nU(       d  M  [        U[        5      (       a  UR                  5       (       a  M8  [        S5      e   [         R                  [         R                  4 HA  nU(       d  M  [        U[        5      (       a  UR                  5       (       a  M8  [        S5      e   [         R                  b.  [        [         R                  [        5      (       d  [        S5      e[         R                   H5  n[        U5      (       d  M  [        U[        5      (       a  M,  [        S5      e   [        U 5      (       a/  [        R                  R                  S5      (       d  [        S5      e[         R                   R"                  (       a  [        S5      eS	S
KJn  UR(                  (       a  [*        R-                  S5        [        e[.        R1                  5       c   [*        R-                  S5        [        S5      e[.        R3                  U 5        g)z{
Check some conditions that would preclude caching and raise BypassFxGraphCache
to bypass in case caching is not possible.
z!Unsupported post grad custom passzUnsupported joint custom passNz#Unsupported _pre_fusion_custom_passz(Unsupported _fuse_ddp_communication_passz,pytorch/inductor:allow_freezing_with_cachingz$Skipping graph with frozen constantszORuntime constant folding can introduce constants that aren't static across runsr   )ÚCompilerBisectorz$dont cache graph when bisect enabledzfx graph cache no shape envzNo shape env)r#   r{  r  r#  r;   r—  r«  r€  r�  rƒ  r„  r˜  r?   r{   r¯  Újustknobs_checkÚaot_inductorÚuse_runtime_constant_foldingÚ!torch._inductor.compiler_bisectorrq  Úbisection_enabledrÙ  r¤  r‹  rŒ  rn  )r£  Úprq  s      r€   Ú_check_can_cacheÚFxGraphCache._check_can_cache  sœ  € ô ×2Ñ2´F×4UÑ4UÓVˆAßˆqœ* Q¬×8Ñ8ÀÇÁÇÃÜ(Ð)LÓMÐMñ Wô ×.Ñ.´×0MÑ0MÓNˆAßˆqœ* Q¬×8Ñ8ÀÇÁÇÃÜ(Ð)HÓIÐIñ Oô
 ×)Ñ)Ñ5Üœf×<Ñ<¼o×NÑNÜ(Ð)NÓOÐOÜ×6Ô6ˆAÜ˜�{‹{¤:¨a´×#AÓ#AÜ(Ð)SÓTÐTñ 7ô
 ˜R× Ñ ¬×)>Ñ)>×)NÑ)NØ:÷*
ñ *
ô %Ð%KÓLÐLä×Ñ×;×;Ü$ð%óð õ
 	Gà×-×-Ü�I‰IÐ<Ô=Ü$Ð$ô ×&Ñ&Ó(Ñ0Ü�I‰IÐ3Ô4Ü$ ^Ó4Ð4ô 	×#Ñ# BÕ'r   c                óD  •  [         R                  U 5        [        XX#5      u  pVXV40 4$ ! [         ak  n[        S   S==   S-  ss'   [
        R                  SU5        U(       a  [        S[        U5      5        S[        U5      [        5       S.nSU4s SnA$ SnAff = f)	a�  
Checks that the inductor input is cacheable, then computes
and returns the cache key for the input.
Returns (key_info, cache_info) where:
- key_info is (hash_key, debug_lines), and
- cache_info will contain debug info in the event of BypassFxGraphCache.

NB: It is possible to have this function return a union instead. But
I personally believe it is more annoying/difficult to read in that format.
r÷  Úfxgraph_cache_bypassrZ   z%Bypassing FX Graph Cache because '%s'Úbypass_fx_graphÚbypass)Úcache_stateÚcache_bypass_reasonÚcache_event_timeN)
r‹  rx  r¨  r«  r    rÙ  r±  rO   r“   r   )	r£  rR  rU  rd  Úremoterç   rö  rQ  rA  s	            r€   Úprepare_keyÚFxGraphCache.prepare_key:  s£   € ð$	$Ü×)Ñ)¨"Ô-Ü5Ø Ió ÑˆCð Ð! 2Ð%Ð%øô "ó 
	$Ü�ZÑ Ð!7Ó8¸AÑ=Ó8Ü�H‰HÐ<¸aÔ@ÞÜ Ð!2´C¸³FÔ;à'Ü'*¨1£vÜ$+£IñˆJð
 ˜Ð#Õ#ûð
	$ús   ‚#* ª
B´A BÂBÂBc                 óH   • Sn [        U [        R                  " 5       SS5      $ )z;
Attempts to load the remote cache, returns None on error.
zfx-graph-v1ÚFbRemoteFxGraphCacheÚRemoteFxGraphCache)r]   r#   r2  )Úcache_ids    r€   Úget_remote_cacheÚFxGraphCache.get_remote_cache_  s+   € ð
 !ˆÜØÜ×ÒÓØ"Ø ó	
ð 	
r   c                óÈ  • [         R                  XX4Xg5      u  p‰0 U	EU U[        5       S.En	Ubƒ  [        R	                  SU 5        [
        S   S==   S-  ss'   SU	S'   UR                  =n
bB  X©S'   [        R                  " [        R                  S	U
S
-  5        [        U
5      =nS:w  a  X¹S'   X‰4$ [        R	                  SU 5        [
        S   S==   S-  ss'   SU	S'   X‰4$ )z²
Lookup the graph with the given key, and return results and metadata.
Doesn't do any logging on its own, because AOTAutograd handles a cache miss
differently from FXGraphCache.
)rç   Ú
componentsr€  zfx graph cache hit for key %sr÷  Úfxgraph_cache_hitrZ   rø   r~  rµ  Ú distributed_ephemeral_timeout_usiè  r   Úephemeral_timeout_increasezfx graph cache miss for key %sÚfxgraph_cache_missÚmiss)r‹  rR  r   rÙ  r±  r    r_  r   r	  r
  r¸  )rç   rö  rR  rÏ  rÐ  Úis_backwardrB  rÚ  rb  rA  rµ  Úephemeral_increases               r€   Úload_with_keyÚFxGraphCache.load_with_keyl  s  € ô" &2×%?Ñ%?Ø °ió&
Ñ"ˆð
Øð
àØ%Ü '£	ò	
ˆ
ð Ñ%Ü�H‰HÐ4°cÔ:Ü�ZÑ Ð!4Ó5¸Ñ:Ó5Ø(-ˆJ�}Ñ%à!/×!>Ñ!>Ð>�ÑKØ.;˜?Ñ+Ü"×'Ò'Ü&×9Ñ9Ø6Ø! TÑ)ôô FÀmÓTðUÐ&àóð @RÐ;Ñ<ð Ð)Ð)ô	 �H‰HÐ5°sÔ;Ü�ZÑ Ð!5Ó6¸!Ñ;Ó6Ø(.ˆJ�}Ñ%àÐ)Ð)r   c                 óv   •  [         R                  " [        R                  5       5        g! [         a     gf = f)z
Clear out the on-disk cache.
N)rm  Úrmtreer‹  rý  ÚFileNotFoundErrorr~   r   r€   r  ÚFxGraphCache.clearž  s.   € ð
	Ü�MŠMœ,×3Ñ3Ó5Õ6øÜ ó 	Ùð	ús   ‚(+ «
8·8r~   rù  )rÊ  útype[FxGraphCache]rç   r“   rÖ   r“   )rÊ  r™  rç   r“   rÃ  r  rÄ  r  rÅ  r  rÆ  r  rÖ   rÙ   )r©  r\   rA  r×   rB  rm   rÖ   ú-tuple[CompiledFxGraph | None, dict[str, Any]]r¿   )rç   r“   rR  rŸ  rÏ  r  rÐ  rî  rB  rm   rÚ  ú<Callable[[str, list[int] | list[torch.SymInt]], bool] | NonerÖ   rš  )rç   r“   r8  r$  rÖ   rÙ   )rç   r“   rb  rn   rR  rŸ  rÏ  r  rÐ  rî  rÖ   rÙ   )r£  rù  rÖ   rÙ   )r£  rù  rR  rŸ  rU  rh   rd  r   r�  r  rÖ   z3tuple[tuple[str, list[str]] | None, dict[str, Any]])rÖ   rî  )rç   r“   rö  rû  rR  rŸ  rÏ  r  rÐ  rî  r‘  r  rB  rm   rÚ  r›  rÖ   rš  rØ   )rÚ   rÛ   rÜ   rÝ   rU  rÞ   rý  rï  r¿  rÇ  rE  rR  ró  rd  rn  rx  r‚  rˆ  r“  r  rà   r~   r   r€   r‹  r‹  ¶  s¥  † ñð: ó4ó ð4ð óHó ðHð ð(Øð(àð(ð ð(ð ð	(ð
 ð(ð ð(ð 
ó(ó ð(ðT ðc!Øðc!à"ðc!ð ,ðc!ð 
7ó	c!ó ðc!ðJ ð ð8QØð8Qà+ð8Qð ð8Qð 5ð	8Qð
 ,ð8Qðð8Qð 
7ô8Qó ð8Qðt ó	4ó ð	4ð ð8CØð8Cà"ð8Cð ,ð8Cð ð	8Cð
 5ð8Cð 
ó8Có ð8Cðt óNó ðNð" ó0(ó ð0(ðd ð"&Ø ð"&à+ð"&ð $ð"&ð 'ð	"&ð
 ð"&ð 
=ó"&ó ð"&ðH ó

ó ð

ð ð ð/*Øð/*àð/*ð ,ð/*ð ð	/*ð
 5ð/*ð ð/*ð ,ð/*ðð/*ð 
7ô/*ó ð/*ðb óó ór   r‹  c                óô   • SS jn U R                  U" 5       5      (       a  [        R                  R                  U 5      $ U R                  S5      (       a  [        R                  R                  U 5      $ U S4$ )Nc                 ó   • [         (       a  gg)Nz.pydú.so©rM  r~   r   r€   Úget_module_ext_typeÚ;split_aot_inductor_output_path.<locals>.get_module_ext_type«  s   € ßŠ;Øàr   z.pt2r‡   rù  )Úendswithr¹   rº   Úsplit)rº   r   s     r€   Úsplit_aot_inductor_output_pathr¤  ©  s^   € ôð OØ‡}�}Ñ(Ó*×+Ñ+Ü�w‰w�}‰}˜TÓ"Ð"Ø	�‰�v×	Ñ	Ü�w‰w�}‰}˜TÓ"Ð"à�Rˆxˆr   c                  ó¦   • \ rS rSr% 0 rS\S'   \" \R                  5      r\	  S	             S
S jj5       r
\	SS j5       r\	SS j5       rSrg)ÚCudaKernelParamCacheiº  zdict[str, dict[str, Any]]r¸   Nc                ó¼  • S n[         R                  R                  (       a<  [         R                  R                  (       d   S5       eUS   (       d   S5       eUS   n[        UUU[        [         R                  R                  5      S   US9u  p‰[        U	5      u  px[         R                  R                  (       a@  SS[        SS	S
0n
XJ;   d   S5       e[        R                  R                  U	5      u  p¸XºU   -   n	Sn[         R                  R                  (       d  [         R                  R                  (       a‚  [        R                  R                   b  U(       a`  U(       aY  U(       d   S5       eU(       d   S5       eUS;   a  UOSn[        UUU[        [         R                  R                  5      S   US9u  pŒX’[#        5       '   XÂS'   X R$                  U'   g )Nz:package_cpp_only requires triton kernel names to be uniqueÚmangled_namezMissing kernel namer   )r9  r0  rç   r„   z.fatbinz.spvr…   z.hsacoz8multi_arch_kernel_binary only supported in CUDA/XPU/ROCmr‡   zMissing kernel assembly codezMissing kernel assembly type>   r4  r5  r6  r%  Úasm)r#   rs  Úpackage_cpp_onlyr¢   Úunique_kernel_namesrY  r¤  Úoutput_pathr6   Úemit_multi_arch_kernelrI   r¹   rº   Úsplitextr{   r|   r}   r�   r¸   )rÊ  rç   Úparamsr„   Úbin_typer©  Úasm_typer.  rô   Úbin_pathÚbin_type_to_extÚ	base_pathÚasm_pathÚ	hash_kinds                 r€   r"  ÚCudaKernelParamCache.set¿  sÀ  € ð ˆÜ×Ñ×/×/Ü—=‘=×4×4ð ØLóÐ4ð ˜.×)Ð@Ð+@Ó@Ð)Ø˜nÑ-ˆHäØØØÜ8Ü×#Ñ#×/Ñ/óàñð ñ
‰ˆô =¸XÓF‰ˆä×Ñ×5×5à˜Ü! 6Ø˜ðˆOð
 Ó.ð ØJóÐ.ô Ÿ7™7×+Ñ+¨HÓ5‰LˆIØ °8Ñ#<Ñ<ˆHàˆô ×Ñ×6×6Ü×"Ñ"×3×3ô �}‰}× Ñ Ñ(®S¶XÞÐ:Ð:Ó:�sÞÐ?Ð!?Ó?�xð )1Ð4LÓ(L™HÐRX�	ä#ØØØ'Ü"@Ü×+Ñ+×7Ñ7ó#àñ#ð !ñ‘�ð 5=Ô.Ó0Ñ1Ø ˆu‰Ø�	‰	�#Šr   c                ó:   • U R                   R                  US 5      $ r¿   )r¸   r÷   r   s     r€   r÷   ÚCudaKernelParamCache.get  s   € à�y‰y�}‰}˜S $Ó'Ð'r   c                ó6   • U R                   R                  5       $ r¿   )r¸   rå   ©rÊ  s    r€   Úget_keysÚCudaKernelParamCache.get_keys  s   € à�y‰y�~‰~ÓÐr   r~   ©NN)rç   r“   r¯  zdict[str, str | None]r„   r“   r°  r“   r©  ú
str | Noner±  r¿  rÖ   rÙ   )rç   r“   rÖ   rð   )rÖ   zKeysView[str])rÚ   rÛ   rÜ   rÝ   r¸   r{  rÞ   r  Úcache_clearrï  r"  r÷   r¼  rà   r~   r   r€   r¦  r¦  º  s«   ‡ à')€EÐ$Ó)Ù˜uŸ{™{Ó+€Kàð Ø#ðI àðI ð &ðI ð ð	I ð
 ðI ð ðI ð ðI ð 
ôI ó ðI ðV ó(ó ð(ð ó ó ó r   r¦  c                  óH   • \ rS rSrSr\              SS j5       rSrg)ÚAotCodeCompileri  z&
Compile AOT Inductor generated code.
c               óæ,  ^^^^^a^b^c^d^e^f^g^h• Un[        5         [        5       n[        SS[        UTTR                  S9S9n	[        U	R                  5       5      n
[        R                  " 5       =(       a    TS:H  =(       a    TR                  mg[        [        R                  R                  5      u  nn[        R                  R                  (       a  SR                  TT45      mSm[        TSU
U[        R                  R                  S	9u  nmhS
Th S3T-   m[        TSU
U[        R                  R                  S	9u  nmeSmcSmd[        R                  R                   (       dí  [#        [$        R&                  R                  [$        R&                  R)                  [$        R&                  R)                  [*        5      5      SSSS5      5       n[        R                  R                  nSU 3nUR-                  5       mcTcR/                  SSU S35      R/                  SU S35      R/                  SU S35      mc[        TcSUUS9u  nmdSSS5        [1        S5       n UR3                  TSTS45        UR5                  5         [6        R8                  R;                  UR<                  SS9  SSS5        [        R                  R>                  (       aq  URA                  Th5        [        R                  R                  (       d  URA                  Te5        [        R                  R                   (       d  URA                  Td5        [B        RE                  STh5        [B        RE                  STe5        [G        S Uh4S! jU4S" jS#9  [G        S Ue4S$ jU4S% jS#9  [        R                  R                   (       d)  [B        RE                  S&Td5        [G        S Ud4S' jUc4S( jS#9  [I        Th5      n[I        Te5      nURJ                  U-  mfTfRM                  5       (       d  TfRO                  S)S*9  [Q        [I        Tf5      S+-  5      nSvUUUfUg4S, jjnS-S.K)J*n  [W        5       nU" [$        R&                  R                  UUS/-   5      [X        S09nU   U(       ap  [Q        UR[                  S15      5      n[#        US25       nUR                  U5        SSS5        [        R                  R>                  (       a  URA                  U5        [        R                  R\                  nTUS3'   UR_                  [a        T5      5        [Q        URc                  URd                   S435      5      n[        R                  R\                  Rg                  5        H7  u  nn[i        U[P        5      (       a  [i        U[P        5      (       a  M2   S55       e   [#        US25       nUR                  [j        Rl                  " [        R                  R\                  5      5        SSS5        [Q        URc                  URd                   S435      5      n[n        Rp                  " UU5        [        R                  R>                  (       aA  URA                  U5        [        R                  R                  (       d  URA                  U5        U(       a  [        R                  R                  O[Q        UR[                  S65      5      n [s        U4S7 jTRt                   5       5      mbSwS8 jma[        R                  Rv                  (       d  [        R                  Rx                  S9:X  a(  S:R                  UaUbU4S; jTRt                   5       5      n!OS:n![        R                  Rx                  S<:X  a~  [{        TRt                   V"s0 s HL  n"U"TR|                  ;  d  M  TR~                  U"   TR�                  U"5      [ƒ        TRt                  U"   5      4_MN     sn"5      n#URA                  U#5        […        U!5      n$[‡        U$5      u  n%n&U%(       a  U&(       a  [‰        S=5      eSn'U%(       a)  URd                   S>3n([Q        URc                  U(5      5      n'TR                  TU&U%TgUS?.n)[        SxS)[        R                  R                  (       + S@.U)D6n*[        SxSAS)0U)D6n+[        R                  RŠ                  (       at  [Œ        (       di  [�        TTR                  SB9n,[‘        U,U
4SC[        R                  R                  (       + 0U)D6U*lI        [•        T5      =n-(       a  [‘        U-U
40 U)D6U+lI        [        [Q        URd                  5      Th[Q        URJ                  5      U*SD9n.U.R                  5       n/U.R—                  5       n0[        [Q        URd                  5      Te[Q        URJ                  5      U+SD9n1U1R                  5       n2U1R—                  5       n3[˜        R9                  SEU/5        [˜        R9                  SFU25        [        R                  R                  (       a  [Q        URc                  URd                   SG35      5      n4U*R›                  U45        URA                  U45        U.R�                  UT5        U.RŸ                  UTh5        URA                  U5        O! U.R¡                  5         U1R¡                  5         U&(       d_  U!n6S-n7U%(       aS  [¨        Rª                  " SJU$5      n6U'c   e[#        U'SK5       n8U8R                  U!5        SSS5        URA                  U'5        O{[­        [®        [°        R²                  " S-[°        R´                  " [°        R¶                  5      R¸                  SL5      R»                  5       5      n7[¨        Rª                  " SMU$SN-   U75      n6U" U6[¼        R¾                  5      n9S-n:0 n;[Á        TRÂ                  Rg                  5       5       GH  u  n:u  n"n<[i        U<[°        RÄ                  RÆ                  RÈ                  5      (       a  U<RÊ                  n<[i        U<[°        RÌ                  RÎ                  5      (       d   e[Ð         U: 3n=[˜        R9                  SOU"U=5        U=U;U"'   [°        RÌ                  RÓ                  U<5      n>[$        R&                  R                  URJ                  U=5      n?[Õ        U?U>S)5        URA                  U?5        GM     U;(       au  [$        R&                  R                  URJ                  SP5      n@[#        U@S25       nUR                  [j        Rl                  " U;5      5        SSS5        URA                  W@5        [°        RÖ                  RØ                  (       a
  [Û        5       O	[Ý        5       nAUARÞ                  Rq                  5       nBUARÞ                  Rá                  5         UB(       a&  [        R                  Râ                  (       a   SQ5       e/ nC/ nD[Œ        (       Gdã  [å        Tg5      u  nEnF[ç        [6        Rè                  Rê                  SR0 5      nG[ì        Rî                  Rg                  5        GH�  u  nHnIUHWG;  a  M  WISS   =nJ(       a  WDRA                  WJ5        WI[ñ        5          nK[        R                  Râ                  (       aô  TST:X  aî  [°        RÖ                  RØ                  cf  [ò        Rô                  " 5       nL[ò        Rö                  " 5        SUWJ SVWK SWUL SXUL SWUL SYUL SZ3nM [ø        Rú                  " UMRý                  5       S)S)S)S[9  OmS-S_KƒJ„nN  [$        R&                  RM                  WJ5      (       d  [‰        S`WJ Sa35      eWN" WJWKSSb9nOUO(       d  [‰        ScWH Sd35      e[˜        RE                  SeWK5        [        R                  GR
                  (       d  GMo  WCRA                  G[        WKWHWEWF5      5        GM�     G[        U 5      u  nPnQ[        UTTR                  TgSf9nRU0U3U9/WBQWCQnS[        UPUSUQURSD9nTUTR                  5       nUUTR—                  5       n [˜        R9                  SgUU5        [#        ThSh5       nUR                  S5        UR                  SiU/ S35        UR                  SjUU S35        SSS5        [#        TeSh5       nUR                  S5        UR                  SiU2 S35        UR                  SjWU S35        SSS5        [        R                  R                  (       Gaµ  [Q        URc                  URd                   Sk35      5      nVWRR›                  UV5        URA                  UV5        URA                  G[        5        U&(       a…  [Q        URc                  URd                   Sl35      5      nW[#        UWSK5       n8U8R                  U!5        U8R                  [¨        Rª                  " SJU75      5        SSS5        URA                  WW5        O#URA                  U95        WTRŸ                  UU95        [        R                  Râ                  (       aA  [°        RÖ                  RØ                  c&  WTGR                  UWD5        UGR                  UD5        O3/ WBQWCQnSUGR                  US5        US H  nXWTRŸ                  UUX5        M     WTGR                  U5        GO(WTR¡                  5         WS H"  nYUYWB;   a  M  [$        GR                  " WY5        M$     U&(       a¹  [        R                  GR                  Sm:X  a  [‰        Sn5      eSySo jnZUZ" 5       n[[¹        SpU[5      n\[#        U Sq5       n]U]GR                  5       n^U]R                  SrU\U^U\-  -
  -  5        U]R                  U!5        U]R                  [¨        Rª                  " SJU75      5        SSS5        [        R                  R>                  (       a  URA                  U 5        SSS5        [        GR                  GR                   S-:w  až  [°        GR"                  R8                  GR%                  5       n_[$        R&                  R                  URJ                  Ss5      n`[#        U`S25       nUR                  [j        Rl                  " U_StSu95        SSS5        URA                  W`5        [        R                  R>                  (       a  U$ W $ ! , (       d  f       GNÀ= f! , (       d  f       GNp= f! , (       d  f       GNg= f! , (       d  f       GN4= fs  sn"f ! [¢        R¤                  [¦        4 a"  n5SH[Q        U55      ;   a  [‰        SI5      U5eU5eSn5A5ff = f! , (       d  f       G
Ne= f! , (       d  f       GN;= f! [ø        Rþ                   a>  n5G[        WM S\U5GR                   S]U5GR                   3[¼        GR                  S^9  e Sn5A5ff = f! , (       d  f       GNJ= f! , (       d  f       GN= f! , (       d  f       GN%= f! , (       d  f       GNc= f! , (       d  f       GN== f! , (       d  f       GN¢= f)zzk
Returns the .so path, or returns a list of files that were generated if
config.aot_inductor.package=True.
ÚoÚi)Úvec_isar˜   Úaot_mode©r¡   ÚsourcesÚBuildOptionÚcpur£  r‡   zwrapper.cpp)r&  r0  rç   z.// Triton kernels are embedded as comments in z
kernel.cppÚcsrcr÷  Úaoti_runtimezmodel.hÚAOTInductorModelz<AOTInductorModel>Ú<Ú>zAOTInductorModel(Ú(zAOTInductorModel :z :ró  ©r0  rç   Nzw+Úcpp)r/  zWrapper code written to: %szKernel code written to: %sÚ
graph_dumpc                 ó   >• SST S.$ )NÚinductor_aot_wrapper_coderÓ  ©r¡   rÃ  r$  r~   )Úwrapper_paths   €r€   rÿ  Ú)AotCodeCompiler.compile.<locals>.<lambda>œ  s   ø€ Ø3ØØ(òr   c                 ó   >• T $ r¿   r~   )Úwrapper_codes   €r€   rÿ  rÙ  ¡  s   ø€ ™|r   r!  c                 ó   >• SST S.$ )NÚinductor_aot_kernel_coderÓ  r×  r~   )Úkernel_paths   €r€   rÿ  rÙ  ¥  s   ø€ Ø2ØØ'òr   c                 ó   >• T $ r¿   r~   )Úkernel_codes   €r€   rÿ  rÙ  ª  s   ø€ ™{r   zHeader code written to: %sc                 ó   >• SST S.$ )NÚinductor_aot_header_coderÓ  r×  r~   )Úheader_paths   €r€   rÿ  rÙ  °  s   ø€ Ø6Ø!Ø +òr   c                 ó   >• T $ r¿   r~   )Úheader_codes   €r€   rÿ  rÙ  µ  s   ø€ ¡;r   Tr  zCMakeLists.txtc                ó  >^• [         R                  R                  nUS:X  aW  TR                  [	        TR
                  R                  5       5      -  (       a  [        U 5      S:”  a  [        S5      eSmOSmSnO$US:X  a  SmS	nOUS
:X  a  SnSnO[        SU 35      eTS:X  a  Sn[        U 5      S:„  n[        U 5      S:H  n          SU4S jjn        SS jn      SU4S jjnU(       a  U" U [        X45      u  pšO'U(       a  U" [        U5      u  pšOU" U [        U5      u  pš[        U	U
[        T5      [         R                  R                  S9u  p¼[        U5      n[        TTR                   STS9n[#        [        UR$                  5      [        U5      [        UR&                  5      US9nUR)                  5       nUSL a1  U(       a*  [+        [        U5      U[        UR&                  5      5        OUR-                  5         U(       aÈ  U(       aÁ  [/        US5       nUR1                  S5        UR3                  S5      n[4        R6                  S:X  a  UR9                  S5      OUR9                  S5      nUS:w  d   eUR1                  U5        SnU[        U 5      :  a*  UR                  U US  5      nUU-  nU[        U 5      :  a  M*  S S S 5        [:        R<                  " U5        U$ ! , (       d  f       N&= f)NÚlinuxi ”5wzPModels with buffer mutation included doesn't support constants greater than 2GB!z.ldata, "aw"z.lrodata, "a"r‡   Údarwinz__DATA,__datarô   ru   FzUnsupported platform: r†   rã  r   c                óê   >• ST S3nUSU S3-  nUSU S3-  nXB S3-  nU(       d  U  H  nUSU S3-  nM     U (       d  US-  nOUS	-  nUS
[        U 5      S-
   S3-  nUSU S3-  nXB S3-  nUS4$ )Nú
	.section	r£  ú		.balign ú	.globl	ú_binary_constants_bin_start
ú_binary_constants_bin_start:
z	.byte z
	.space 1
z	.quad 0x1234567899abcdef
z	.space é   ú.globl	ú_binary_constants_bin_end
ú_binary_constants_bin_end:
z	weights.S©rä  )ÚconstsÚalign_bytesÚsymbol_prefixÚis_large_constsÚ
consts_asmr"  Úsection_attrs         €r€   Úformat_consts_to_gnu_asmÚRAotCodeCompiler.compile.<locals>._compile_consts.<locals>.format_consts_to_gnu_asmå  sÐ   ø€ ð  ,¨L¨>¸Ð<�
Ø 
¨;¨-°rÐ:Ñ:�
Ø 
¨=¨/Ð9VÐWÑW�
Ø Ð/MÐNÑN�
Þ&Û#˜Ø"¨°°°2Ð&6Ñ6š
ñ $ö "Ø" nÑ4˜
øàÐ"@Ñ@�JØ I¬c°&«k¸A©oÐ->¸bÐ"AÑA�JØ ¨¨Ð7RÐSÑS�
Ø Ð/KÐLÑL�
Ø! ;Ð.Ð.r   c                óÂ   • [        U 5      nSnUnUSU S3-  nUSU SU S3-  nSnU  H  nXW S3-  nUS	-   nUS
-  S:X  d  M  US-  nM!     US-  nUSU SU S3-  nUS4$ )NzÔ#if defined(__clang__) || defined (__GNUC__)	
#define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize("address")))	
#else	
#define ATTRIBUTE_NO_SANITIZE_ADDRESS	
#endif	
	
ATTRIBUTE_NO_SANITIZE_ADDRESS	
zalignas(z	) extern zunsigned char z_binary_constants_bin_start[z] = {	
r   ú, rZ   é   z	
z};	
z) extern unsigned char * z_binary_constants_bin_end;	
zweights.cppró  )rô  rõ  rö  Úconsts_sizeÚ	asan_attrÚ	const_cppÚcount_bytesr"  s           r€   Úformat_consts_to_cppÚNAotCodeCompiler.compile.<locals>._compile_consts.<locals>.format_consts_to_cppþ  sº   € ô " &›k�ð%�	ð &�	Ø˜x¨ }°IÐ>Ñ>�	Ø˜~¨m¨_Ð<XÐYdÐXeÐeoÐpÑp�	Ø�Û�AØ 3 b Ñ)�IØ"-°¡/�KØ" RÑ'¨1Õ,Ø! VÑ+š	ñ	  ð
 ˜XÑ%�	Ø˜x¨ }Ð4MÈmÈ_Ð\zÐ{Ñ{�	Ø  -Ð/Ð/r   c                ó�   >• [         (       a  SnSnX#4$ ST S3nUSU  S3-  nUSU S3-  nX! S3-  nUS	U S
3-  nX! S3-  nSnX#4$ )aÖ  
This function handles zero-sized constants because the C++ standard prohibits zero-length arrays:
https://stackoverflow.com/questions/9722632/what-happens-if-i-define-a-0-size-array-in-c-c

On Windows (MSVC):
    The compiler reports error C2466 for zero-sized arrays:
    https://learn.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2466
    Solution: Use assembly compilation to handle this case.

Why not use Win32 assembly for all paths?
    ml64 only supports alignment up to 16 bytes, which isn't optimal for performance.

Cross-platform implementation:
    Linux: Added '-pedantic' to disable zero-sized arrays in C++ compiler
    Windows: MSVC naturally rejects zero-sized arrays by default
zÍ
option casemap:none
.data
?_binary_constants_bin_start@@3PAEA:
align 16
?_binary_constants_bin_end@@3PAEA:
align 16
public ?_binary_constants_bin_start@@3PAEA
public ?_binary_constants_bin_end@@3PAEA
end
r©  rê  r£  rë  rì  rí  rî  rð  rñ  rò  ÚSrŸ  )rõ  rö  Úasm_codeÚasm_extrù  s       €r€   Úget_zero_consts_asm_codeÚRAotCodeCompiler.compile.<locals>._compile_consts.<locals>.get_zero_consts_asm_code  s¡   ø€ ÷( ’;ð
 �Hð $�Gð  Ð(Ð(ð ".¨l¨^¸2Ð>�HØ *¨[¨M¸Ð <Ñ<�HØØ$ ] OÐ3PÐQñ�Hð  /Ð1OÐ PÑP�HØ (¨=¨/Ð9TÐ UÑU�HØ /Ð1MÐ NÑN�HØ!�GØÐ(Ð(r   rÒ  T)r˜   rÇ  Úcompile_onlyÚuse_relative_path©r¡   rÉ  Ú
output_dirrÊ  zr+bÚlittles   ïÍ«™xV4s   4Vx™«Íïrë   )
rô  r$  rõ  r®  rö  r“   r÷  r  rÖ   útuple[str, str])rô  r$  rõ  r®  rö  r“   rÖ   r  )rõ  r®  rö  r“   rÖ   r  )r#   rs  Úuse_consts_asm_buildÚmutated_buffersrY   rB  rå   rä  rØ  r«   rD   rY  r“   Úmodel_name_for_generated_filesr   r3   rÇ  r1   Ústemrf  Úget_target_file_pathr8   ÚbuildrÆ   rÒ  r	  r�   Ú	byteorderÚfindr¹   ro  )rô  r‘   Úuse_asm_buildrö  r÷  Úis_zero_size_constsrú  r  r	  Úconsts_codeÚcode_extrô   Úconsts_sÚobject_build_optionsÚobject_builderÚconsts_ort  ÚhdrÚ	start_idxÚposÚrcrù  r˜   r©  Úspecified_sub_dirr  s                        @€€€€r€   Ú_compile_constsÚ0AotCodeCompiler.compile.<locals>._compile_constsÂ  s   ù€ ä"(×"5Ñ"5×"JÑ"JˆMà˜7Ó"Ø×(Ñ(¬:°e·o±o×6JÑ6JÓ6LÓ+M×Mô ˜6“{ ]Ó2Ü(Ønóð ð $2‘Là#2�LØ "‘Ø˜XÓ%Ø.�Ø #‘Ø˜WÓ$Ø "�à %‘ä"Ð%;¸H¸:Ð#FÓGÐGð ˜eÓ#Ø %�ä! &›k¨DÑ0ˆOÜ"% f£+°Ñ"2Ðð/Øð/à ð/ð  #ð/ð "&ð	/ð
 !÷/ð20Øð0Ø,/ð0Ø@Cð0à ô0ð0,)Ø ð,)à"ð,)ð !÷,)ö\ Ù(@ØœK¨ó)Ñ%�˜Xö 'Ù,DÜ# ]ó-Ñ)�K ñ -AØ¤¨]ó-Ñ)�Kô  ØØÜ!Ð"3Ó4Ü×'Ñ'×FÑFñ	‰KˆAô ˜H“~ˆHÜ#8Ø'ØŸ™Ø!Ø"3ñ	$Ð ô (Ü˜Ÿ™Ó'Ü˜H›Ü˜xŸ™Ó/Ø0ñ	ˆNð &×:Ñ:Ó<ˆHØ Ò%Ö*=Ü$¤S¨£]°H¼cÀ(Ç/Á/Ó>RÕSà×$Ñ$Ô&æ¦=Ü˜( EÔ*¨aØ—F‘F˜1”IØŸ&™& ›,�Cô Ÿ=™=¨HÓ4ð Ÿ™Ð!DÔEà ŸX™XÐ&IÓJð ð
 %¨›?Ð*˜?Ø—F‘F˜9Ô%Ø�CØ¤ F£Ó+ØŸW™W V¨C¨D \Ó2˜Ø˜r™	˜ð ¤ F£Õ+÷ +ô" �IŠI�hÔàˆO÷' +Õ*ús   È)B+K6Ë6
Lr   ©ÚFileLockú.lock©Útimeoutz.jsonrT  ÚAOTI_DEVICE_KEYz_metadata.jsonz"Metadata must only contain stringsrž  c              3  ó~   >#   • U  H2  nUTR                   ;  d  M  TR                  U5      R                  v •  M4     g 7fr¿   )Úfolded_constantsÚget_original_value_of_constantÚis_cuda)r  r¡   r©  s     €r€   r  Ú*AotCodeCompiler.compile.<locals>.<genexpr>·  s:   øé € ð â+�DØ˜u×5Ñ5Ñ5ó C�×4Ñ4°TÓ:×BÖBÚ+ùs   ƒ=›"=c                ó*  • SS jnSS K nU R                  5       S:X  a  gU R                  (       aS  [        R                  R
                  R                  U 5      n[        R                  R
                  R                  U 5      nO>U R                  5       R                  5       nUR                  5       nUR                  5       nUR                  UUR                  UR                  U-  5      5      n[        UR                  5      nU(       a  U$ U" U5      $ )Nc                ól   • U R                  [        U 5      [        -   S-
  [        -  [        -  S5      nU$ )NrZ   ó    )Úljusträ  rD   )Ú	raw_bytesÚpadded_bytess     r€   Ú_pad_to_alignmentÚEAotCodeCompiler.compile.<locals>._to_bytes.<locals>._pad_to_alignment¾  s6   € Ø#,§?¡?Ü˜Y›¬+Ñ5¸Ñ9¼kÑIÌKÑWØó$�Lð (Ð'r   r   r   )r7  r$  rÖ   r$  )ÚctypesÚnumelrª  r{   ÚopsÚmkldnnÚdata_ptrÚ_nbytesÚuntyped_storagerË  Únbytesr   ÚPOINTERÚc_ubyter$  Úcontents)	r‡  Úall_cudar9  r;  r?  rB  Út_cpuÚ	raw_arrayr7  s	            r€   Ú	_to_bytesÚ*AotCodeCompiler.compile.<locals>._to_bytes½  sÐ   € ô(ó à—7‘7“9 “>Øà—;—;Ü$Ÿy™y×/Ñ/×8Ñ8¸Ó;�HÜ"ŸY™Y×-Ñ-×5Ñ5°aÓ8‘Fà×-Ñ-Ó/×3Ñ3Ó5�EØ$Ÿ~™~Ó/�HØ"Ÿ\™\›^�Fà"ŸK™KØØ—N‘N 6§>¡>°FÑ#:Ó;ó�	ô
 " )×"4Ñ"4Ó5�	Þ$,�yÐNÑ2CÀIÓ2NÐNr   Úbinary_blobr   c              3  óx   >#   • U  H/  nUTR                   ;  d  M  T" TR                  U5      T5      v •  M1     g 7fr¿   )r/  r0  )r  r¡   rI  rF  r©  s     €€€r€   r  r2  à  s>   øé € ð .â /˜Ø 5×#9Ñ#9Ñ9ó T‘I˜e×BÑBÀ4ÓHÈ(×SÐSÚ /ùs   ƒ:›:Úpickle_weightsz?use_external_weights and  use_mmap_weights cannot both be True.z_weights.blob)rÇ  r˜   Úuse_mmap_weightsÚuse_mmap_weights_externalr  rÆ  ©r  Úmin_optimizer  )rÇ  rQ  r  z#aot wrapper compilation command: %sz"aot kernel compilation command: %sz_compile_flags.jsonz is too big to optimizezUPlease use torch._inductor.config.aot_inductor.compile_wrapper_opt_level = 'O0' flag.Úqra  )rZ   Úqqrï  zsaving script object %s as %szcustom_objs_config.jsonz<TODO: add emit_multi_arch_kernel support for cutlass kernelsÚ_kernel_name_to_bodyr©  rƒ   z	 -fatbin z -o z -gencode arch=compute_z,code=compute_z	,code=sm_Ú )Úcapture_outputr]  rQ  z failed with:
stdout:
z	
stderr:
)Úfile)Ú%compile_multiarch_bundle_from_llvm_irz7Multi-arch ROCm compilation requires LLVM IR file, but zD not found. Ensure asm_type='ll' is captured in triton_heuristics.py)Úllvm_ir_pathÚoutput_bundle_pathÚtarget_archsz/Failed to compile multi-arch bundle for kernel z>. Check that ROCm toolchain is available and LLVM IR is valid.zCreated multi-arch bundle: %s)rÆ  r˜   rÇ  r  zaot linkage command: %sÚaz// Compile cmd
// z// Link cmd
// z_linker_flags.jsonz_serialized_weights.binÚwindowszKwhen cross_target_platform is windows, use_mmap_weights should not be true.c                 óþ   ^^^	• [         (       aZ  SSKJn JnJn  SSKJmJmJm	   " UUU	4S jSU5      nU" 5       nUR                  R                  U " U5      5        UR                  nU$ SS KnUR                  5       nU$ )Nr   )ÚbyrefÚ	StructureÚwindll©ÚDWORDÚLPVOIDÚWORDc                  ór   >• \ rS rSrS Y4S Y4S Y 4S Y4S Y4S Y 4S Y 4S	 Y 4S
 Y 4S Y4S Y4/rSrg)ÚCAotCodeCompiler.compile.<locals>.get_page_size.<locals>.SYSTEM_INFOiR
  ÚwProcessorArchitectureÚ	wReservedÚ
dwPageSizeÚlpMinimumApplicationAddressÚlpMaximumApplicationAddressÚdwActiveProcessorMaskÚdwNumberOfProcessorsÚdwProcessorTypeÚdwAllocationGranularityÚwProcessorLevelÚwProcessorRevisionr~   N)rÚ   rÛ   rÜ   rÝ   Ú_fields_rà   rb  s   €€€r€   ÚSYSTEM_INFOrg  R
  sb   ø† à%=¹tÐ$DØ%0±$Ð$7Ø%1±5Ð$9Ø%BÁFÐ$KØ%BÁFÐ$KØ%<¹eÐ$DØ%;¹UÐ$CØ%6¹Ð$>Ø%>ÁÐ$FØ%6¹Ð$=Ø%9¹4Ð$@ð,"£r   rt  )rM  r;  r_  r`  ra  Úctypes.wintypesrc  rd  re  Úkernel32ÚGetSystemInforj  ÚresourceÚgetpagesize)
r_  r`  ra  rt  ÚsiÚsys_page_sizerx  rc  rd  re  s
          @@@r€   Úget_page_sizeÚ.AotCodeCompiler.compile.<locals>.get_page_sizeG
  sw   ú€ ÷ 'š;÷ñ ÷
 LÑK÷"ñ "¨iô "ñ "-£˜BØ"ŸO™O×9Ñ9¹%À»)ÔDØ,.¯M©M˜Mð  -Ð,ó	 ,à,4×,@Ñ,@Ó,B˜Mà,Ð,r   i @  za+bó    zkernel_information.jsonrÎ   rÏ   )rô  r$  r‘   r“   rÖ   r“   )r‡  ztorch.TensorrF  r  rÖ   r$  r~   )rÖ   r®  )“r.   r9   r1   r3   rÇ  r7  Úget_command_liner#   r2  r¤  rs  r¬  rª  r»   rY  r  Údynamic_linkagerÆ   r¹   rº   r(  r)  r	  r†  r<  Ú
writelinesÚflushra   r¤  rv   r¡   Úpackagerí  r>  r±  rK   r   rf  r  rg  r“   Útorch.utils._filelockr)  r  ÚLOCK_TIMEOUTÚwith_suffixr™   r“  rš   Ú	with_namer  r
  r#  r®   r¯   rm  r   r	  rB  Úpackage_constants_in_soÚ package_constants_on_disk_formatrT   r/  Úallocated_constant_namer0  rS   rä  rF   r«   Úprecompile_headersrM  Ú_get_cpp_wrapper_headerÚ_precompile_headerÚprecompiled_headerÚ_get_cpp_prefix_headerr  rÙ  Úsave_flags_to_jsonÚsave_compile_cmd_to_cmakeÚsave_src_to_cmaker  r$   ÚCppCompileErrorr   ÚstructÚpackr   r®  r{   ÚrandintÚiinfoÚint64ÚmaxÚitemr�   r‘   Ú	enumerateÚtorchbind_constantsÚ_libraryÚfake_class_registryrJ   rÂ  rl  rm  rU   Ú_pickle_saverÓ   r|   r}   ÚROCmCodeCacheÚCUDACodeCacheÚaot_kernels_or  r­  r5   rg  r©  rÛ  r¦  r¸   r�   Úcuda_compile_utilsÚ_nvcc_arch_as_compile_optionÚ_cuda_compilerÚ
subprocessÚrunr£  ÚCalledProcessErrorÚprintÚstdoutÚstderrÚ$torch._inductor.rocm_multiarch_utilsrX  Úembed_kernel_binaryr0   r6   r-   Úsave_kernel_asm_to_cmakeÚextendÚsave_link_cmd_to_cmakero  Úcross_target_platformÚtellÚtraceÚprovenance_tracking_levelr”   Úcreate_kernel_information_json)irÊ  r©  rÛ  rà  Úserialized_extern_kernel_nodesr˜   Úadditional_filesÚgenerated_filesÚpicked_vec_isaÚvec_isa_cmd_genÚcpp_commandÚspecified_output_pathÚspecified_artifact_nameÚwrapper_keyrô   rt  Úmodel_class_nameÚ
class_namer‡  Úwrapper_path_operatorÚkernel_path_operatorÚ
cmake_pathr&  r)  r  ÚlockÚextern_kernel_nodes_jsonr™   Ú	meta_jsonrô  rõ  Úkernel_meta_jsonÚ	output_soÚserialized_weightsr¡   Úweights_dictrÿ  Úuse_external_weightsrN  Úexternal_weights_pathÚexternal_weights_filenameÚcompile_commandÚwrapper_build_optionsÚkernel_build_optionsÚheader_fileÚ
cpp_prefixÚwrapper_builderÚwrapper_compile_cmdÚ	wrapper_oÚkernel_builderÚkernel_compile_cmdÚkernel_oÚcompile_flagsrQ  Úaot_constantsÚmagic_numberÚ	f_weightsr   Úcustom_obj_idxÚqual_name_to_idÚconstantÚcustom_obj_nameÚcustom_obj_bytesÚcustom_obj_pathÚconstants_config_jsonÚgpu_codecacheÚgpu_kernels_oÚcubins_oÚ	asm_filesÚldÚobjcopyÚkernelsÚkernel_namerí   Úasm_fileÚ
cubin_fileÚcurrent_archÚcmdrX  ÚsuccessÚoutput_namer  Úso_build_optionsÚobj_srcsÚ
so_builderÚlink_cmdÚlinker_flagsÚweight_filerÛ  Úo_filer|  Ú
page_size_Ú	page_sizeÚf_soÚso_sizeÚkernel_infoÚkernel_info_jsonrI  rF  rå  rã  rÞ  r%  r  rØ  si    ``` `                                                                                           @@@@@@@@r€   ÚcompileÚAotCodeCompiler.compile  sp  ÿû€ ð 0@ˆäÔä%›ˆÜ$ØØÜ-Ø&Ø'ØŸ™ññ
ˆô ˜?×;Ñ;Ó=Ó>ˆô ×ÒÓ×J ;°%Ñ#7×J¸E¿N¹Nð 	ô +¬6×+>Ñ+>×+JÑ+JÓKñ	
Ø!Ø#ô ×Ñ×/×/ØŸ9™9 l°KÐ%@ÓAˆLØˆKä$)ØØØØ/Ü×#Ñ#×BÑBñ%
Ñ!ˆ�\ð =¸\¸NÈ"ÐMØñð 	ô ØØØØ/Ü×#Ñ#×BÑBñ
‰ˆˆ;ð ˆØˆÜ×"Ñ"×2×2äÜ—‘—‘Ü—G‘G—O‘O¤B§G¡G§O¡O´HÓ$=Ó>ØØØ"Øóôð ä#)×#6Ñ#6×#UÑ#UÐ Ø/Ð0@Ð/AÐB�
ØŸf™f›h�ð
  ×'Ñ'Ð(<ÀÀ*ÀÈQÐ>OÓPß‘WÐ0°Z°LÀÐ2BÓCß‘WÐ1°j°\ÀÐ3DÓEð ô
 "'ØØØ"7Ø(ñ	"‘��;÷+ô: ˜dÔ# qð	ð �L‰L˜,¨¨k¸4Ð@ÔAØ�G‰GŒIÜ�G‰G×Ñ §¡°%ÐÑ8÷ $ô ×Ñ×&×&Ø×"Ñ" <Ô0Ü×&Ñ&×7×7Ø×&Ñ& {Ô3Ü×&Ñ&×6×6Ø×&Ñ& {Ô3ä×ÑÐ:¸LÔIÜ×ÑÐ9¸;ÔGÜØôô
 ,ò	
ô 	Øôô
 +ò	
ô ×"Ñ"×2×2Ü× Ñ Ð!=¸{ÔKÜØôô
 /òô !% \Ó 2ÐÜ# KÓ0ÐØ1×8Ñ8¸;ÑFÐØ ×'Ñ'×)Ñ)Ø×#Ñ#¨TÐ#Ñ2ÜœÐ/Ó0Ð3CÑCÓDˆ
÷}	ò }	õ~ 	3ä“>ˆÙÜ�G‰G�L‰L˜ ;°Ñ#8Ó9Ä<ñ
ˆò Þ-Ü+.Ø)×5Ñ5°gÓ>ó,Ð(ô Ð2°CÔ8¸AØ—G‘GÐ:Ô;÷ 9ô ×&Ñ&×.×.Ø#×*Ñ*Ð+CÔDä×*Ñ*×3Ñ3ˆHØ*5ˆHÐ&Ñ'ð �O‰OÔ2°;Ó?Ô@ô Ø%×/Ñ/Ø,×1Ñ1Ð2°.ÐAóóˆIô
 ×+Ñ+×4Ñ4×:Ñ:Ö<‘��1Ü! !¤S×)Ñ)¬j¸¼S×.BÓ.Bð Ø8óÐBñ =ô
 �i Ô%¨Ø—‘œŸ
š
¤6×#6Ñ#6×#?Ñ#?Ó@ÔA÷ &ô  #Ø$×.Ñ.Ø+×0Ñ0Ð1°Ð@óó Ðô
 �KŠK˜	Ð#3Ô4ä×"Ñ"×*×*Ø×&Ñ& yÔ1Ü×*Ñ*×;×;Ø#×*Ñ*Ð+;Ô<ö +ô ×#Ñ#×/Ò/äÐ.×:Ñ:¸5ÓAÓBð ô
 ô à!ŸOšOóó ˆHôOô@ ×#Ñ#×;×;Ü×&Ñ&×GÑGÈ=ÓXà%(§X¡Xö .à %§¢ó.ó &Ñ"ð &)Ð"ä×"Ñ"×CÑCÐGWÓWä&ð %*§O¢Oóò
 %4˜DØ u×'=Ñ'=Ñ=ó˜×5Ñ5°dÑ;Ø!×@Ñ@ÀÓFÜ,¨U¯_©_¸TÑ-BÓCð>ò ñ %4ñó	 �ð  ×&Ñ& |Ô4äÐ0Ó1ˆKä5NØó6Ñ2Ð Ð"2ö $Ö(8ä"ØUóð ð %)Ð!Þ#Ø/D×/IÑ/IÐ.JÈ-Ð,XÐ)Ü(+Ø)×3Ñ3Ð4MÓNó)Ð%ð
 "ŸN™NØ*Ø$4Ø-AØ%6Ø)ñ/ˆOô %:ð %Ø!Ü!'×!4Ñ!4×!EÑ!EÔEñ%ð "ñ%Ð!ô
 $9ñ $Ø!ð$à!ñ$Ð ô ×"Ñ"×5×5¿kºkÜ5Ø¨%¯.©.ñ�ô <NØØñ<ô &,×%8Ñ%8×%IÑ%IÔ!Ið<ð &ñ	<Ð%Ô8ô "8¸Ó!DÐD�:ÕDÜ>PØ"Ø#ñ?ð *ñ?Ð(Ô;ô )ÜÐ.×3Ñ3Ó4Ø$ÜÐ4×;Ñ;Ó<Ø1ñ	ˆOð #2×"BÑ"BÓ"DÐØ'×<Ñ<Ó>ˆIä'ÜÐ-×2Ñ2Ó3Ø#ÜÐ4×;Ñ;Ó<Ø0ñ	ˆNð "0×!@Ñ!@Ó!BÐØ%×:Ñ:Ó<ˆHä�I‰IÐ;Ð=PÔQÜ�I‰IÐ:Ð<NÔOÜ×"Ñ"×3×3ä #Ø)×3Ñ3Ø0×5Ñ5Ð6Ð6IÐJóó!�ð
 &×8Ñ8¸ÔGØ×&Ñ& }Ô5Ø×9Ñ9¸*ÀkÔRØ×1Ñ1°*¸lÔKØ×&Ñ& zÕ2ðØ#×)Ñ)Ô+ð ×$Ñ$Ô&æ#Ø 2�Ø �Þ'Ü$*§K¢K°°[Ó$A�MØ0Ñ<Ð<Ð<äÐ3°TÔ:¸iØ!Ÿ™Ð(:Ô;÷ ;à#×*Ñ*Ð+@ÔAøô  $ÜœŸš q¬%¯+ª+´e·k±kÓ*B×*FÑ*FÈÓM×RÑRÓTó �ô !'§¢¨D°+À±/À<Ó P�á& }´c·l±lÓCˆHØˆNð !ˆOÜ4=Ø×)Ñ)×/Ñ/Ó1÷5Ñ0�Ñ 0  xô ØœeŸn™n×@Ñ@×QÑQ÷ñ ð  (×0Ñ0�HÜ! (¬E¯H©H×,AÑ,A×BÑBÐBÐBÜ%?Ð$@ÀÐ@PÐ"Q�ä—	‘	Ð9¸4ÀÔQà(7� Ñ%Ü#(§8¡8×#8Ñ#8¸Ó#BÐ Ü"$§'¡'§,¡,Ø)×0Ñ0°/ó#�ô ˜_Ð.>ÀÔEØ×&Ñ& ×7ñ'5ö* Ü(*¯©¯©Ø)×0Ñ0Ð2Kó)Ð%ô Ð/°Ô5¸Ø—G‘GœDŸJšJ Ó7Ô8÷ 6à×&Ñ&Ð'<Ô=ô $)§=¡=×#4×#4””¼-»/ð ð *×7Ñ7×<Ñ<Ó>ˆMà×'Ñ'×-Ñ-Ô/æÜ!×.Ñ.×E×Eð ØRóÐEð ˆHØˆIß“;Ü0Ð1BÓC‘��GÜ!¤!§'¡'×"6Ñ"6Ð8NÐPRÓS�Ü*>×*DÑ*D×*JÑ*J×*LÑ&�K Ø"¨'Ó1ñ !à#(¨¡<Ð/�xÕ/Ø!×(Ñ(¨Ô2à!&Ô'FÓ'HÑ!I�Jä×+Ñ+×B×BØ'¨6Ó1ä Ÿ=™=×,Ñ,Ñ4ä 2× OÒ OÓ Qð )ô
 $6×#DÒ#DÓ#FÐ"GÀyÐQYÐPZÐZ^Ð_iÐ^jð k9à9E¸ÀnÐUaÐTbð c9à9E¸ÀiÐP\È~Ð]^ð	!`ð  ð&Ü *§¢Ø$'§I¡I£KØ37Ø)-Ø*.ó	!"õô
 $&§7¡7§>¡>°(×#;Ñ#;Ü&2ð'+à+3¨*ð 5_ð%`ó'"ð !"ñ 'Là-5Ø3=Ø-1ñ	'˜Gö $+Ü&2Ø&UÐVaÐUbð ccð %dó'"ð !"ô
  ŸH™HÐ%DÀjÔQä×*Ñ*×>×>Ó>à Ÿ™Ý0°¸[È"ÈgÓV÷ñS +MõZ 'MÈYÓ&WÑ#ˆK˜Ü4Ø&Ø'ØŸ™Ø"3ñ	 Ðð " 8¨XÐQ¸ÐQÈÐQˆHÜ#Ø Ø Ø%Ø,ñ	ˆJð "×2Ñ2Ó4ˆHØ"×7Ñ7Ó9ˆIä�I‰IÐ/°Ô:ô �l CÔ(¨AØ—‘˜”Ø—‘Ð-Ð.AÐ-BÀ"ÐEÔFØ—‘Ð*¨8¨*°BÐ7Ô8÷ )ô
 �k 3Ô'¨1Ø—‘˜”Ø—‘Ð-Ð.@Ð-AÀÐDÔEØ—‘Ð*¨8¨*°BÐ7Ô8÷ (ô
 ×"Ñ"×3×3Ð3Ü"Ø)×3Ñ3Ø0×5Ñ5Ð6Ð6HÐIóó �ð
 !×3Ñ3°LÔAØ×&Ñ& |Ô4Ø×&Ñ&¥~Ô6ö $Ü"%Ø-×7Ñ7Ø4×9Ñ9Ð:Ð:QÐRóó#�Kô
 ˜k¨4Ô0°IØ!Ÿ™Ð(:Ô;Ø!Ÿ™¬¯ª°C¸Ó(FÔG÷ 1ð $×*Ñ*¨;Õ7ð $×*Ñ*¨8Ô4Ø×0Ñ0°¸XÔFô ×'Ñ'×>×>ÜŸ™×)Ñ)Ñ1à×7Ò7¸
ÀIÔNØ#×*Ò*¨9Õ5ð  ; Ð:°Ð:�HØ#×*Ò*¨8Ô4Û'˜Ø"×4Ñ4°ZÀÖEñ  (ð ×1Ò1°*Ö=à× Ñ Ô"Û&�FØ Ó.Ù ä—I“I˜fÖ%ñ	 'ö $Ü×*Ñ*×@Ò@ÀIÓMÜ*Øióð ô"-ñH "/£�JÜ # E¨:Ó 6�Iä˜i¨Ô/°4Ø"&§)¢)£+˜àŸ
™
 4¨9°wÀÑ7JÑ+JÑ#KÔLØŸ
™
Ð#5Ô6ØŸ
™
¤6§;¢;¨s°LÓ#AÔB÷ 0ô ×&Ñ&×.×.Ø#×*Ñ*¨9Ô5÷_ ôb �<Š<×1Ò1°QÓ6ÜŸ/š/×/Ñ/×NÒNÓPˆKÜ!Ÿw™wŸ|™|Ø%×,Ñ,Ð.Gó Ðô Ð&¨Ô,°Ø—‘œŸ
š
 ;°qÑ9Ô:÷ -à×"Ñ"Ð#3Ô4ä×Ñ×&×&ð #Ð"àÐ÷Eö ú÷: $Ö#ú÷T 9Ö8ú÷. &Ö%üòPøôJ ×+Ñ+¬YÐ7ó Ø0´C¸³FÓ:Ü*Øsóà ð!ð �Gûðú÷ ;Ö:ú÷V 6Ö5ûôl $.×#@Ñ#@ó &Ý %Ø'* eÐ+CÀAÇHÂHÀ:È[ÐYZ×YaÒYaÐXbÐ$cÜ),¯ªò!"ð !&ûð&ú÷B )Ö(ú÷
 (Ö'ú÷. 1Ö0ú÷b 0Ö/ú÷O ŽTú÷l -Ö,úsÁ  ÇA;ATÉAATÒ.AYÒ4AT&ÓC.AYÖ8AY×>AT8ØFAYÞ(AU

ß ;AU

ß;KAYëAUëA
AYìAVì0HAYõ&AV õ,GAYü3%AV2ýBAYÿ)BAYÁB<AXÁCAYÁC<AXÁDCAYÁG8AX+ÁHE1AYÁM>A#AX=ÁO!8AYÁR!%AY!ÁT
ATÁT
AT#ÁT&
AT5	ÁT0AYÁT8
AU	ÁUAYÁUAVÁU)AVÁVAVÁVAYÁV
AV	ÁVAYÁV 
AV/	ÁV*AYÁV2AXÁW9AW?ÁW?AXÁXAYÁX
AX	ÁXAYÁX
AX(	ÁX#AYÁX+
AX:	ÁX5AYÁX=
AY	ÁYAYÁY
AYÁY!
AY0r~   N)r©  rk   rÛ  r“   rà  r“   r¶  r¿  r˜   r“   r·  rû  rÖ   zlist[Union[str, Weights]] | str)rÚ   rÛ   rÜ   rÝ   rU  rï  rÿ  rà   r~   r   r€   rÂ  rÂ    sh   † ñð ðmàðmð ðmð ð	mð
 )3ðmð ðmð $ðmð 
)ómó ómr   rÂ  zCDLL | NoneÚ_libgompc                ó4  ^• S	U4S jjmU Vs/ s H  nT" U5      PM     nnU R                  S5      (       d
   U S-   5       eS n[        U R                  S5      5       H,  u  pVUS:X  a  [        R                  " U5      n[        XF5      nM.     [        U5      (       d
   U S-   5       e[        5       n[        UR                  R                  U5       H&  u  p‰UR                  (       d  M  X—UR                  '   M(     U(       a  U[        U5      * S 2	 U" U0 UD6n
U
c  g [        U
[        [         45      (       a…  U
 Vs/ s H  o»c  ["        R$                  " / 5      OUPM     n
nU
 H,  n[        U["        R&                  5      (       a  M$   U S-   5       e   ["        R(                  R*                  R-                  U
5      $ [        U
["        R&                  5      (       d
   U S-   5       e["        R(                  R*                  R/                  U
5      $ s  snf s  snf )
Nc                óö   >• [        [        U 5      5      S:X  a)  [        R                  R                  R                  U 5      $ [        U [        [        45      (       a  [        U 5      " U4S jU  5       5      $ U $ )Nz<class 'PyCapsule'>c              3  ó4   >#   • U  H  nT" U5      v •  M     g 7fr¿   r~   )r  r\  Úconvert_args     €r€   r  Ú9custom_op_wrapper.<locals>.convert_arg.<locals>.<genexpr>•
  s   øé € Ð9²S°™[¨Ÿ^˜^²Sùs   ƒ)	r“   rÃ  r{   rl  Ú_aotiÚ&alloc_tensor_by_stealing_from_void_ptrr#  rë  r…  )Úargr  s    €r€   r  Ú&custom_op_wrapper.<locals>.convert_arg�
  sX   ø€ ÜŒt�C‹y‹>Ð2Ó2ä—8‘8—>‘>×HÑHÈÓMÐMÜ˜œd¤E˜]×+Ñ+Ü˜”9Ô9±SÓ9Ó9Ð9àˆJr   z
torch.ops.z, can not be called through custom_op_wrapperr,  r   z, can not be loaded through custom_op_wrapperz returns a list of non-tensorsz returns a non-tensor)r	  r   rÖ   r   )rË  r›  r£  Ú	importlibÚimport_modulerg  r˜  rî  ÚzipÚ_schemaÚ	argumentsÚ
kwarg_onlyr¡   rä  r#  rë  r…  r{   Útensorr   rl  r  Ú#unsafe_alloc_void_ptrs_from_tensorsÚ!unsafe_alloc_void_ptr_from_tensor)rý   Úargsr	  Úconverted_argsr  rÅ  rµ  ra  Úfunc_argÚconv_argÚresultÚrr  s               @r€   Úcustom_op_wrapperr  �
  sÑ  ø€ ÷ñ 37Ó7²$¨3‘k #Ö&±$€NÐ7à�=‰=˜×&Ñ&ð Ø
Ð;Ñ;óÐ&ð €DÜ˜"Ÿ(™( 3›-Ö(‰ˆØ�‹6Ü×*Ò*¨1Ó-ˆDÜ�tÓŠñ )ô
 �D�>‰>ÐN˜2Ð NÑNÓNˆ>ô ‹V€Fä! $§,¡,×"8Ñ"8¸.ÖIÑˆØ××ÑØ$,�8—=‘=Ó!ñ Jö ØœC ›K˜<™>Ð*á�>Ð, VÑ,€FØ�~Øä�&œ4¤˜-×(Ñ(á@FÓGÂ¸1¡i”%—,’,˜rÔ"°QÒ6ÁˆÐGÛˆAÜ˜a¤§¡×.Ó.ÐU°Ð5UÑ0UÓUÐ.ñ ä�x‰x�~‰~×AÑAÀ&ÓIÐIä�fœeŸl™l×+Ñ+ÐI¨RÐ2IÑ-IÓIÐ+Ü�8‰8�>‰>×;Ñ;¸FÓCÐCùòE 8ùò8 Hs   ŽHÄ=$HÚprecompiled_headersr  c                ó®  • [         (       a   S5       e[        R                  " 5        n[        U5      S-  nUR	                  SU  S35        [        [        U5      S S [        U5      [        S0 UDSS0D6S9nUR                  5         SS	 jnU" UR                  5       5      nS S S 5        [        S0 UDS
S0D6n[        SU  S3SUW-   [        UR                  5       5      -   [        S9u  pš[        U
U
US9n[        R                  " [         SS9  [#        [        R$                  R'                  [         U	 S35      U45        U
$ ! , (       d  f       N¨= f)Nz>CppBuilder does not currently support precompiling on Windows!z
header.hppz
#include <z>
éüÿÿÿÚpreprocessingTrÈ  c                ón   • [         R                  " SSU 4SSS9nUR                  R                  5       S   $ )z„Reading the whole preprocessed header in for hashing is very expensive,
but calling a fast hashing utility in a subprocess is cheap.ÚopensslÚsha512T)rV  r]  rë   )r¦  r§  rª  r£  )r$  Ú
cmd_outputs     r€   Ú_get_file_checksumÚ._precompile_header.<locals>._get_file_checksumß
  s<   € ô $ŸšØ˜H hÐ/ÀÈ4ñˆJð ×$Ñ$×*Ñ*Ó,¨RÑ0Ð0r   Úprecompilingró  )r8  r/  r&  r0  r  r*  r~   )r$  r“   rÖ   r“   )rM  rD  ÚTemporaryDirectoryr   r^  r1   r“   r3   r  r  rY  r4   Úget_compilerÚ_HEADER_DIRr¹   r  Ú_HEADER_LOCK_DIRÚ_worker_compile_cpprº   r»   )ÚheaderÚhashable_cmd_linerÎ  Úpreprocessing_dirÚpreprocessing_headerÚpreprocessorr#  Úpreprocessor_hashÚheader_build_optionÚheader_hashÚheader_full_pathÚcpp_builders               r€   r�  r�  Å
  sk  € ÷ Š{ð ØHóˆ?ô 
×	$Ò	$Ô	&Ð*;Ü#Ð$5Ó6¸ÑEÐØ×'Ñ'¨*°V°H¸CÐ(@ÔAÜ!ÜÐ)Ó*¨3¨BÐ/ÜÐ,Ó-Ü-ÑT°ÑTÈtÒTñ
ˆð
 	×ÑÔô	1ñ /¨|×/PÑ/PÓ/RÓSÐ÷' 
'ô* 0ÑU°/ÑUÐPTÒUÐÜ$)Ø˜V˜H CÐ(ØàØñ ä'Ð(;×(HÑ(HÓ(JÓKñLô "ñ	%Ñ!€Kô ØØ Ø'ñ€Kô ‡K‚KÔ ¨4Ò0ÜÜ
�‰�‰Ô%¨+¨°eÐ'<Ó=Ø	ˆôð
 Ð÷[ 
'Õ	&ús   ¨A<EÅ
Ec                ó2   • U R                  S5      (       a  gg )NrË  z torch/csrc/inductor/cpp_prefix.h)rË  rˆ   s    r€   r�  r�    s   € Ø×Ñ˜×ÑØ1Ør   c                óª   • U R                  SSS9S   n[        R                  R                  =(       a    US:H  nSU(       a  SOS S	U(       a  S
OU S3$ )z‹Given a device type (and optionally whether we're in AOT Inductor mode), returns
the path to the cpp_wrapper header file to be precompiled.Ú:rZ   )Úmaxsplitr   rË  ztorch/csrc/inductor/Úaoti_includeÚcpp_wrapperÚ/Ú	array_refz.h)r£  r#   rs  Úallow_stack_allocation)r‰   rÇ  Úbase_deviceÚis_array_refs       r€   rŒ  rŒ    s\   € ð —,‘,˜s¨Q�,Ð/°Ñ2€KÜ×&Ñ&×=Ñ=×VÀ+ÐQVÑBV€LàÞ%‰>¨=Ð
9¸Þ&‰;¨KÐ
8¸ð	<ðr   c                  óà   • \ rS rSr% Sr0 rS\S'   \" \R                  5      r	0 r
S\S'   \SS j5       r\SS j5       r\SS	 j5       r\    S           SS jj5       r\SS j5       rSrg
)ÚCppCodeCachei  z�Compiles and caches C++ libraries.  Users of this class supply the source code to
be compiled, while compilation flags are set by CppBuilder.ú*dict[str, Callable[[], CDLL | ModuleType]]r¸   r×   Úcpp_compile_command_flagsc                ó.   • [         R                  " U 5      $ r¿   )r   ÚLoadLibrary)rº   rç   s     r€   Ú_load_library_innerÚ CppCodeCache._load_library_inner   s   € ä×Ò Ó%Ð%r   c           	     óÊ  •  U R                  X5      nX#l        U$ ! [        [        4 a·  nS[	        U5      ;   aX  [
        R                  R                  S5      (       a4  [        R                  " S5      q
U R                  X5      nX#l        Us S nA$ S[	        U5      ;   a;  [        U S[        R                  " 5        S[        R                  " 5        S35      Uee S nAff = f)NÚgompz/usr/lib64/libgomp.so.1z(failed to map segment from shared objectz3.  The most common reason this may occur is if the zl folder is mounted with noexec (e.g., by default Docker mounts tmp file systems as noexec).  Please remount zi with exec enabled, or set another temporary directory with TORCHINDUCTOR_CACHE_DIR environment variable.)rF  rç   ÚImportErrorrL  r“   r¹   rº   r  r   rE  r  rD  Ú
gettempdir)rÊ  rº   rç   r  rQ  s        r€   Ú_load_libraryÚCppCodeCache._load_library$  sÝ   € ð	Ø×,Ñ,¨TÓ7ˆFØŒJØˆMøÜœWÐ%ó 	Øœ˜Q›Ó¤B§G¡G§N¡NÐ3L×$MÑ$Mô  ×+Ò+Ð,EÓF�Ø×0Ñ0°Ó;�Ø ”
Ø•Ø9¼SÀ»VÓCÜØ�cÐLÌX×M`ÒM`ÓMbÐLcð d3ä3;×3FÒ3FÓ3HÐ2Ið J]ð]óð
 ðð ûð	ús"   ‚ ›C"«A!CÂC"ÂACÃC"c                ó   • g)zO
Given a device type, returns the path to a CPP header file to be precompiled.
Nr~   ©rÊ  r‰   s     r€   Ú_get_uncompiled_headerÚ#CppCodeCache._get_uncompiled_header;  s   € ð
 r   Nr~   c           	     óž  ^ ^^^^^• 0 T R                   EUU[        R                  " 5       [        5       S.En[	        5         [        S[        U5      USLS.UD6n[        SSS0UD6nSS jn	U	" U5      n
U	" U5      n[        USU SU
 3S	9u  mnU(       a  [        US
US	9u  pÞO[        R                  nTT R                  ;  Gaê  SSKJn  [        R                  R                  [        5       TS-   5      nSmSm[        R                   (       ad  ["        (       dY  T R%                  U5      =n(       a  ['        UU
4SUSL0UD6Ul        U(       a$  [+        U5      =n(       a  ['        UU40 UD6Ul        [-        U5      u  nn[/        UUUUS9nU(       a†  [-        U5      u  nn[/        UUUUS9n[/        UUR1                  5       UR1                  5       /[        S0 UD6US9n[2        R4                  " [6        UUUU45      m[9        UR1                  5       5      mO6[2        R4                  " [6        UU45      m[9        UR1                  5       5      mSUU UUUU4S jjnUb@  U" U[:        S9   [        R                  R=                  T5      (       d  U" T5      mSSS5        UT R                  T'   T R                  T   $ ! , (       d  f       N,= f)zTCompile and load a C++ library.  Returns a callable that returns the loaded
library.)r˜   Úextra_flagsr  rÆ  NrP  r  Tc                ó4   • [        SSU S9R                  5       $ )z¡Writing the code to file will calculate a hash, which we need to vary if
the command line flags change.  This implements a mostly-generic way of
validating that.rÄ  rÅ  rÈ  )r1   r  )Úbuild_options    r€   Úget_hashable_command_lineÚ:CppCodeCache.load_async.<locals>.get_hashable_command_lineh  s!   € ô Ø #°<ñçÑÓ ð!r   zmain.cpprU  ©r&  zoptimized.cppr   r(  r*  rQ  )r¡   rÉ  rÊ  r  c                 óz   >• Tc6  Tb  TR                  5         T" 5       n U b   eTR                  TT5      mTc   eT$ r¿   )r  rL  )r  Úbinary_pathrÊ  Úfuturerç   r  Ú	worker_fns    €€€€€€r€   Úload_fnÚ(CppCodeCache.load_async.<locals>.load_fnÈ  sI   ø€ à‘;ØÑ)ØŸ™œÙ&›[�FØ!™>Ð)˜>Ø×+Ñ+¨K¸Ó=�CØ™?Ð*˜?Ø�
r   r+  r~   )rU  ri   rÖ   r“   ©rÖ   r   )rC  r#   r2  r9   r.   r3   r  rY  r¹   Údevnullr¸   r„  r)  rº   r»   r  Úcpp_cache_precompile_headersrM  rP  r�  rŽ  r�  r6   r1   r  rß   r   r*  r7   r…  r  )rÊ  Ú	main_coder˜   Ú	submit_fnrS  Úoptimized_coderÎ  Úmain_build_optionÚoptimized_build_optionrV  Úmain_cmd_lineÚoptimized_cmd_lineÚ	main_pathrô   Úoptimized_pathr)  Ú	lock_pathr+  Ú	main_namer  Úmain_builderÚoptimized_nameÚoptimized_builderÚlinkerr]  rZ  r[  rç   r  r\  s   `                        @@@@@r€   Ú
load_asyncÚCppCodeCache.load_asyncB  s  ý€ ð
Ø×+Ñ+ð
à&Ø&Ü!'×!1Ò!1Ó!3Ü#“~ò
ˆô 	Ôô 2ð 
Ü˜nÓ-Ø'¨tÐ3ñ
ð ñ	
Ðô "7ñ "
àð"
ð ñ	"
Ðô	!ñ 2Ð2CÓDˆÙ6Ð7MÓNÐäØ�z¨NÐ+;¸1¸]¸OÐ)Lñ
‰ˆˆYö
 Ü %Ø Ð7Iñ!ÑˆAˆ~ô
  ŸZ™ZˆNà�c—i‘iÔÝ6äŸ™Ÿ™¤\£^°S¸7±]ÓCˆIØ)-ˆFØˆCô ×2×2¿;º;Ø ×7Ñ7¸ÓDÐD�6ÕDÜ;MØØ%ñ<ð &4¸4Ð%?ð<ð *ñ	<Ð%Ô8ö "Ô1GÈÓ1TÐ'T vÕ'TÜ@RàØ*ñAð *ñ	AÐ*Ô=ô %KÈ9Ó$UÑ!ˆI�zÜ%ØØ!Ø-Ø%ñ	ˆLö Ü$JØ"ó%Ñ!� ô %/Ø'Ø*Ø 6Ø)ñ	%Ð!ô $Ø"à$×9Ñ9Ó;Ø)×>Ñ>Ó@ðô
 !6Ñ H¸Ñ HØ)ñ	�ô &×-Ò-Ü'ØØ!Ð#4°fÐ=ó�	ô
 7°v×7RÑ7RÓ7TÓU‘ä%×-Ò-Ü'¨°\°Oó�	ô 7Ø ×5Ñ5Ó7ó�÷	ô 	ð Ñ$Ù˜i´Ó>ÜŸ7™7Ÿ>™>¨+×6Ñ6Ù!*¨9Ó!5˜÷ ?ð %ˆC�I‰I�c‰Nà�y‰y˜‰~Ð÷ ?Õ>ús   É+-J>Ê>
Kc                ó0   • U R                   " U0 UD6" 5       $ r¿   )rq  ©rÊ  r  ra  s      r€   rÇ   ÚCppCodeCache.loadÜ  s   € à�~Š~˜tÐ. vÒ.Ó0Ð0r   )rº   r“   rç   r“   rÖ   zCDLL | ModuleType©r‰   r“   rÖ   r¿  )rË  Nr~   N)rb  r“   r˜   r“   rc  r   rS  úSequence[str]rd  r¿  rÖ   r   ©r  r   ra  r   rÖ   r   )rÚ   rÛ   rÜ   rÝ   rU  r¸   r{  rÞ   r  rÀ  rC  rF  rï  rL  rP  rq  rÇ   rà   r~   r   r€   rA  rA    sá   ‡ ñCð 9;€EÐ5Ó:Ù˜uŸ{™{Ó+€KØ02Ð˜~Ó2àó&ó ð&ð óó ðð, óó ðð ð !ØØ%'Ø%)ðWàðWð ðWð ð	Wð
 #ðWð #ðWð 
ôWó ðWðr ó1ó ó1r   rA  c                óô   • SSK Jn  U" U [        S9   U HG  n[        R                  R                  UR                  5       5      (       a  M7  UR                  5         MI     S S S 5        g ! , (       d  f       g = f)Nr   r(  r+  )r„  r)  r…  r¹   rº   r  r  r  )rk  Úcpp_buildersr)  Úbuilders       r€   r*  r*  á  sL   € õ /á	�)¤\Ó	2Û#ˆGÜ—7‘7—>‘> '×">Ñ">Ó"@×AÓAØ—‘–ñ $÷ 
3×	2Ö	2ús   ’6A)ÁA)Á)
A7c                  óþ   • \ rS rSr% 0 rS\S'   \" \R                  5      rSSS.r	Sr
SrS	r\R                  " S
5      r\SS j5       r\SS j5       r\     S               SS jj5       r\SS j5       rSrg)ÚCppPythonBindingsCodeCacheiî  rB  r¸   FT©Úinclude_pytorchÚsharedrŽ  zkernel({}); Py_RETURN_NONE;r‡   a´  
        // Python bindings to call {entry_func}():
        #define PY_SSIZE_T_CLEAN
        #include <Python.h>
        #include <sstream>
        #include <cstdlib>
        #include <cerrno>

        #ifndef _MSC_VER
        #if __cplusplus < 202002L
        // C++20 (earlier) code
        // https://en.cppreference.com/w/cpp/language/attributes/likely
        #define likely(x)       __builtin_expect(!!(x), 1)
        #define unlikely(x)     __builtin_expect(!!(x), 0)
        #endif
        #else
        #define likely(x) (x)
        #define unlikely(x) (x)
        #endif

        // This is defined in guards.cpp so we don't need to import PyTorch headers that are slooow.
        // We manually link it below to workaround issues with fbcode build.
        static void* (*_torchinductor_pyobject_tensor_data_ptr)(PyObject* obj);

        template <typename T> static inline T parse_arg(PyObject* args, size_t n) {{
            static_assert(std::is_pointer_v<T>, "arg type must be pointer or long");
            return static_cast<T>(_torchinductor_pyobject_tensor_data_ptr(PyTuple_GET_ITEM(args, n)));
        }}
        template <> inline int64_t parse_arg<int64_t>(PyObject* args, size_t n) {{
            auto result = PyLong_AsSsize_t(PyTuple_GET_ITEM(args, n));
            if(unlikely(result == -1 && PyErr_Occurred()))
                throw std::runtime_error("expected int arg");
            return result;
        }}
        template <> inline uintptr_t parse_arg<uintptr_t>(PyObject* args, size_t n) {{
            auto result = PyLong_AsVoidPtr(PyTuple_GET_ITEM(args, n));
            if(unlikely(result == reinterpret_cast<void*>(-1) && PyErr_Occurred()))
                throw std::runtime_error("expected int arg");
            return reinterpret_cast<uintptr_t>(result);
        }}
        template <> inline float parse_arg<float>(PyObject* args, size_t n) {{
            auto result = PyFloat_AsDouble(PyTuple_GET_ITEM(args, n));
            if(unlikely(result == -1.0 && PyErr_Occurred()))
                throw std::runtime_error("expected float arg");
            return static_cast<float>(result);
        }}

        {extra_parse_arg}

        static PyObject* {entry_func}_py(PyObject* self, PyObject* args) {{
            try {{
                if(unlikely(!PyTuple_CheckExact(args)))
                    throw std::runtime_error("tuple args required");
                if(unlikely(PyTuple_GET_SIZE(args) != {arg_len}))
                    throw std::runtime_error("requires {arg_len} args");
                {call_entry_func}
            }} catch(std::exception const& e) {{
                PyErr_SetString(PyExc_RuntimeError, e.what());
                return nullptr;
            }} catch(...) {{
                PyErr_SetString(PyExc_RuntimeError, "unhandled error");
                return nullptr;
            }}
        }}

        static PyMethodDef py_methods[] = {{
            {{"{entry_func}", {entry_func}_py, METH_VARARGS, ""}},
            {{NULL, NULL, 0, NULL}}}};

        static struct PyModuleDef py_module =
            {{PyModuleDef_HEAD_INIT, "{entry_func}", NULL, -1, py_methods}};

        PyMODINIT_FUNC PyInit_{entry_func}(void) {{
            const char* str_addr = std::getenv("_TORCHINDUCTOR_PYOBJECT_TENSOR_DATA_PTR");
            if(!str_addr) {{
                PyErr_SetString(PyExc_RuntimeError, "_TORCHINDUCTOR_PYOBJECT_TENSOR_DATA_PTR must be set");
                return nullptr;
            }}

            char* endptr = nullptr;
            errno = 0;
            uintptr_t addr = std::strtoull(str_addr, &endptr, 10);
            if(errno != 0 || endptr == str_addr || addr == 0) {{
                PyErr_SetString(PyExc_RuntimeError, "Failed to parse _TORCHINDUCTOR_PYOBJECT_TENSOR_DATA_PTR");
                return nullptr;
            }}
            _torchinductor_pyobject_tensor_data_ptr =
                reinterpret_cast<decltype(_torchinductor_pyobject_tensor_data_ptr)>(addr);
            PyObject* module = PyModule_Create(&py_module);
            if (module == NULL) {{
                return NULL;
            }}
            #ifdef Py_GIL_DISABLED
                PyUnstable_Module_SetGIL(module, Py_MOD_GIL_NOT_USED);
            #endif
            return module;
        }}
        c                ó   • [        [        R                  R                  R                  R
                  5      [        R                  S'   U SU R                   3n [        R                  U   $ ! [         a     Of = f[        R                  R                  X15      nUc   e[        R                  R                  U5      nU[        R                  U'   UR                   c   eUR                   R#                  U5        U$ )NÚ'_TORCHINDUCTOR_PYOBJECT_TENSOR_DATA_PTRr,  )r“   r{   rl  Ú_dynamorN  Ú'_torchinductor_pyobject_tensor_data_ptrr¹   ÚenvironÚentry_functionr�   rZ  ÚKeyErrorr  ÚutilÚspec_from_file_locationÚmodule_from_specÚloaderÚexec_module)rÊ  rº   rç   Úmodule_namer  r  s         r€   rF  Ú.CppPythonBindingsCodeCache._load_library_inner_  sÜ   € ô ADÜ�H‰H×Ñ×#Ñ#×KÑKóA
Œ�
‰
Ð<Ñ=ð ˜˜Q˜s×1Ñ1Ð2Ð3ˆð	Ü—;‘;˜{Ñ+Ð+øÜó 	Ùð	úä�~‰~×5Ñ5°kÓHˆØÑÐÐÜ—‘×0Ñ0°Ó6ˆØ#)Œ�‰�KÑ Ø�{‰{Ñ&Ð&Ð&Ø�‰×Ñ Ô'Øˆs   ÁA. Á.
A;Á:A;c                ó   • [        U5      $ r¿   )r�  rO  s     r€   rP  Ú1CppPythonBindingsCodeCache._get_uncompiled_headerr  s   € ä% fÓ-Ð-r   Nr~   c           	     óN  ^ ^^• SR                  S [        U5       5       5      nT R                  R                  [	        U5      T R
                  R                  U5      T R                  T R                  R                  US9S9n	T R                  X)-   UUUUS9mSmSU UU4S jjn
U
$ )	aþ  
Wrap a C++ function in fast Python bindings.

Args:
    argtypes: The types of args to ENTRY_FUNCTION(), e.g. ["float*", "long"]
    main_code: C++ source code containing ENTRY_FUNCTION().  Will be built at
        -O3 if kernel_code is None (to maximize performance in any kernels that
        are present), or -O1 otherwise (to minimize compile time).
    kernel_code: If present, C++ source code that will be built at -O3 and
        linked to main_code.

Returns:
    A python version of ENTRY_FUNCTION()
rý  c              3  óX   #   • U  H   u  pS UR                  SS5       SU S3v •  M"     g7f)z
parse_arg<zconst r‡   z>(args, Ú)N)r†  )r  ÚnÚargtypes      r€   r  ÚBCppPythonBindingsCodeCache.load_pybinding_async.<locals>.<genexpr>�  s4   é € ð 
â1‘
�ð ˜Ÿ™¨°2Ó6Ð7°xÀ¸sÀ!ÕDÚ1ùs   ‚(*)Ú	array_len)Úarg_lenÚcall_entry_funcÚ
entry_funcÚextra_parse_arg)rc  rS  rd  Nc                 ór   >• Tc  T" 5       m[        T[        5      (       d   e[        TT R                  5      $ r¿   )r#  r   rg  r†  )rÊ  Ú
get_resultr  s   €€€r€   r[  Ú?CppPythonBindingsCodeCache.load_pybinding_async.<locals>.future¢  s5   ø€ à‰~Ù#›�Ü! &¬*×5Ñ5Ð5Ð5Ü˜6 3×#5Ñ#5Ó6Ð6r   r_  )	r»   r›  Úsuffix_templateÚformaträ  Úcall_entry_functionr†  r›  rq  )rÊ  Úargtypesrb  r˜   Únum_outputsrc  rS  rà  Ú	parseargsr>  r[  r�  r  s   `          @@r€   Úload_pybinding_asyncÚ/CppPythonBindingsCodeCache.load_pybinding_asyncv  s¼   ú€ ð2 —I‘Iñ 
ä'¨Ô1ó
ó 
ˆ	ð ×$Ñ$×+Ñ+Ü˜“MØ×3Ñ3×:Ñ:¸9ÓEØ×)Ñ)Ø×/Ñ/×6Ñ6ÀÐ6ÐMð	 ,ð 
ˆð —^‘^ØÑØØØ#Ø&ð $ð 
ˆ
ð ˆ÷	7ñ 	7ð ˆr   c                ó0   • U R                   " U0 UD6" 5       $ r¿   )r¥  rt  s      r€   Úload_pybindingÚ)CppPythonBindingsCodeCache.load_pybinding«  s   € à×'Ò'¨Ð8°Ò8Ó:Ð:r   )rº   r“   rç   r“   rÖ   r   rv  )rË  rë   Nr~   N)r¢  rw  rb  r“   r˜   r“   r£  r®  rc  r   rS  rw  rà  r¿  rÖ   r   rx  )rÚ   rÛ   rÜ   rÝ   r¸   r{  rÞ   r  rÀ  rC  r†  r¡  r›  ÚtextwrapÚdedentrŸ  rï  rF  rP  r¥  r¨  rà   r~   r   r€   r}  r}  î  s  ‡ à8:€EÐ5Ó:Ù˜uŸ{™{Ó+€Kð !Øñ!Ðð
 €NØ7ÐØ€OØ—o’oða	óc€OðJ óó ðð" ó.ó ð.ð ð
 !ØØØ%'Ø"&ð2àð2ð ð2ð ð	2ð
 ð2ð ð2ð #ð2ð  ð2ð 
ô2ó ð2ðh ó;ó ó;r   r}  c                  ó’   • \ rS rSr% 0 rS\S'   \" \R                  5      rSSS.r	Sr
Sr\R                  " S5      r\SS	 j5       rS
rg)ÚCppWrapperCodeCachei°  rB  r¸   Tr~  Úinductor_entry_cppzreturn inductor_entry_cpp({});a	  
        #include <torch/csrc/inductor/aoti_torch/c/shim.h>

        static inline std::vector<AtenTensorHandle> unpack_tensor_handle_list(PyObject* pyvec) {{
            std::vector<AtenTensorHandle> result;
            size_t result_len = PyList_GET_SIZE(pyvec);
            result.reserve(result_len);
            for (size_t i = 0; i < result_len; i++) {{
                // AtenTensorHandle is essentially a pointer
                void* elem = PyCapsule_GetPointer(PyList_GET_ITEM(pyvec, i), NULL);
                result.push_back(reinterpret_cast<AtenTensorHandle>(elem));
            }}
            return result;
        }}

        static inline PyObject* pack_tensor_handle_list(const std::array<AtenTensorHandle, {array_len}>& arr) {{
            PyObject* result = PyList_New({array_len});
            for (size_t i = 0; i < {array_len}; i++) {{
                PyObject *elem =
                    arr[i] == nullptr
                        ? Py_None
                        // Store AtenTensorHandle as PyCapsulate
                        : PyCapsule_New(reinterpret_cast<void*>(arr[i]), NULL, NULL);
                PyList_SET_ITEM(result, i, elem);
            }}
            return result;
        }}

        template <> inline std::vector<AtenTensorHandle> parse_arg<std::vector<AtenTensorHandle>>(PyObject* args, size_t n) {{
            return unpack_tensor_handle_list(PyTuple_GET_ITEM(args, n));
        }}

        PyObject* inductor_entry_cpp(std::vector<AtenTensorHandle>&& input_handles) {{
            // For outputs, we only allocate an array to hold returned tensor handles,
            // not the actual output tensor storage.
            std::array<AtenTensorHandle, {array_len}> output_handles{{}};
            try {{
                inductor_entry_impl(input_handles.data(), output_handles.data());
                if (PyErr_Occurred()) {{
                    return nullptr;
                }}
                return pack_tensor_handle_list(output_handles);
            }} catch(std::exception const& e) {{
                PyErr_SetString(PyExc_RuntimeError, e.what());
                return nullptr;
            }} catch(...) {{
                PyErr_SetString(PyExc_RuntimeError, "unhandled error");
                return nullptr;
            }}
        }}
        c                ó   • [        U5      $ r¿   )rŒ  rO  s     r€   rP  Ú*CppWrapperCodeCache._get_uncompiled_headerð  s   € ä& vÓ.Ð.r   r~   Nrv  )rÚ   rÛ   rÜ   rÝ   r¸   r{  rÞ   r  rÀ  rC  r†  r¡  rª  r«  r›  rï  rP  rà   r~   r   r€   r­  r­  °  s^   ‡ à8:€EÐ5Ó:Ù˜uŸ{™{Ó+€KàØñ!Ðð *€NØ:ÐØ—o’oð2	ó4€Oðl ó/ó ó/r   r­  c                  ó(  • \ rS rSr% 0 rS\S'   \" \R                  5      rSr	S\S'   \
R                  " S5      r\\
R                  " S5      -   r\\
R                  " S	5      -   r\
R                  " S
5      r\SS j5       r\SS j5       r\\R                  SS j5       5       r\SS j5       r\\R                  SS j5       5       r\\R                  SS j5       5       r\ S       SS jj5       r\SS j5       r\SS j5       r\SS j5       rSrg)ÚHalideCodeCacheiõ  z*dict[str, Callable[[], ModuleType | CDLL]]r¸   Nr¿  Ú_standalone_runtime_pathaØ  
        #include "{halideruntime_h}"
        #include "{headerfile}"
        #include <stdexcept>
        #include <cmath>

        namespace c10 {{
            inline long div_floor_integer(long a, long b) {{
                if ((a<0) != (b<0)) {{
                    const auto quot = a / b;
                    const auto rem = a % b;
                    return rem ? quot - 1 : quot;
                }}
                return a / b;
            }}
        }}
        zÌ
        void kernel({argdefs}) {{
            {buffers}
            int err = halide_kernel({buffer_names});
            if(err != 0) throw std::runtime_error("halide_kernel failed");
        }}
        a{  
        #include <cuda.h>
        static const halide_device_interface_t* cuda_interface = halide_cuda_device_interface();

        void kernel({argdefs}, uintptr_t stream) {{
            {buffers}
            int err = halide_kernel(reinterpret_cast<void*>(stream), {buffer_names});
            if(err != 0) throw std::runtime_error("halide_kernel failed");
        }}
        aÎ  
        #include "{}"
        #include <cuda.h>

        static int acquire_context(void* user_context,
                                   void** cuda_context_out,
                                   bool create) {{
            return cuCtxGetCurrent(reinterpret_cast<CUcontext*>(cuda_context_out));
        }}

        static int release_context(void* user_context) {{
            return 0;
        }}

        static int get_stream(void* user_context,
                              void* cuda_context,
                              void** stream_out) {{
            *stream_out = user_context;
            return 0;
        }}

        static int register_halide_hooks() {{
            halide_set_cuda_acquire_context(&acquire_context);
            halide_set_cuda_release_context(&release_context);
            halide_set_cuda_get_stream(&get_stream);
            return 0;
        }}

        int inductor_register_halide_hooks_result = register_halide_hooks();
        c                óÔ  • UR                   c   eUR                  b,  [        UR                   5      [        UR                  5      :X  d   eUR                  c   eUR                  =(       d    UR
                   SUR                   3nU(       a  SU S3nSnSnSnOSnSnSU S3nS	n/ n	[        UR                   UR                  5       H  u  p«U	R                  S
U
 SU S35        M     SU S3[        U	5      S:”  a  SU SSR                  U	5       S3OSU S3U SU S3U SU S3U SU S3U SU S3U SUR                  5        S3U S[        U	5       S3U SU S3U S3/
$ )Nz + zreinterpret_cast<uint64_t>(r“  Úcuda_interfaceÚnullptrÚhalide_buffer_flag_device_dirtyÚ0zreinterpret_cast<uint8_t*>(Úhalide_buffer_flag_host_dirtyzhalide_dimension_t(0, rý  zhalide_buffer_t Ú;r   zhalide_dimension_t z_dims[] = {z};zhalide_dimension_t * z_dims = nullptr;z
.device = z.device_interface = z.host = z	.flags = z.type = z.dimensions = z.dim = z_dims;z.padding = nullptr;)
ÚshapeÚstriderä  ÚoffsetÚalias_ofr¡   r  rí  r»   Úhalide_type)rÊ  r¡   r	  rƒ   r?  r‰   Údevice_interfaceÚhostÚflagsÚdimsÚsizer¼  s               r€   Ú_codegen_bufferÚHalideCodeCache._codegen_bufferC  s½  € à�y‰yÑ$Ð$Ð$Ø�z‰zÑ%¬#¨c¯i©i«.¼CÀÇ
Á
»OÓ*KÐKÐKØ�z‰zÑ%Ð%Ð%Ø—l‘l×. c§h¡hÐ/¨s°3·:±:°,Ð?ˆÞØ2°8°*¸AÐ>ˆFØ/ÐØˆDØ5‰EàˆFØ(ÐØ0°°
¸!Ð<ˆDØ3ˆEàˆÜ §	¡	¨3¯:©:Ö6‰LˆDØ�K‰KÐ0°°°b¸¸ÀÐBÖCñ 7ð ˜t˜f AÐ&ä�4‹y˜1‹}ð " $  |°D·I±I¸d³OÐ3DÀCÑHà(¨¨Ð.>Ð?Øˆf�J˜v˜h aÐ(ØˆfÐ(Ð)9Ð(:¸!Ð<Øˆf�H˜T˜F !Ð$Øˆf�I˜e˜W AÐ&Øˆf�H˜SŸ_™_Ó.Ð/¨qÐ1Øˆf�N¤3 t£9 +¨QÐ/Øˆf�G˜D˜6 Ð(ØˆfÐ'Ð(ð
ð 	
r   c           	     ó  • UR                  5       nUSUR                  ;   L d   eSUR                  ;   d   e/ n/ n[        UR                  5       H�  u  pgUR	                  5       (       a:  UR                  SU 35        UR                  U R                  SU 3Xs5      5        MT  SUR                  ;  d   eUR                  UR                  5        Mƒ     SR                  U Vs/ s H  nSU 3PM
     sn5      R                  5       nU(       a  U R                  OU R                  n	U	R                  U R                  U(       a  SOS	5      US
R                  S UR                   5       5      US
R                  U5      S9n
U
$ s  snf )NÚuser_contextÚ
no_runtimez&hl_buf_Úhl_buf_Ú*r£  ú    úHalideRuntimeCuda.hzHalideRuntime.hrý  c              3  ó~   #   • U  H3  nUR                   b  M  UR                  5        SUR                   3v •  M5     g 7f)NrU  )r¾  Úbindings_typer¡   )r  r\  s     r€   r  Ú0HalideCodeCache._codegen_glue.<locals>.<genexpr>  s7   é € ð â&�AØ—:‘:ó 0�1—?‘?Ó$Ð% Q q§v¡v hÕ/Ú&ùs   ‚=—&=)Úhalideruntime_hÚ
headerfileÚargdefsÚbuffersÚbuffer_names)r1  rc  r›  r¢  Ú	is_bufferrí  r¯  rÅ  Úctyper¡   r»   ÚlstripÚglue_template_cudaÚglue_template_cppr   Úfind_header)rÊ  rˆ  rÒ  r1  rÔ  rÕ  rÅ  r	  ÚlineÚglue_templateÚ	glue_codes              r€   Ú_codegen_glueÚHalideCodeCache._codegen_glueg  se  € à—,‘,“.ˆØ˜>¨T¯[©[Ñ8Ò9Ð9Ð9Ø˜tŸ{™{Ó*Ð*Ð*ØˆØˆÜ §¡Ö.‰FˆAØ�}‰}�‰à×#Ñ# h¨q¨c NÔ3Ø—‘˜s×2Ñ2°W¸Q¸C°=À#ÓOÖPà #§)¡)Ó+Ð+Ð+à×#Ñ# C§H¡HÖ-ñ /ð —)‘)±wÓ?²w¨t˜t D 6›]±wÑ?Ó@×GÑGÓIˆæ29˜×.Ò.¸s×?TÑ?TˆØ!×(Ñ(ØŸO™OÞ)0Ñ%Ð6Góð "Ø—I‘Iñ àŸšóó ð
 ØŸ™ <Ó0ð )ð 
ˆ	ð Ðùò! @s   Ã$Fc                óÞ   • [        SS[        5       S9nUR                  5       n[        SR	                  U R
                  U R                  U R                  U/5      R                  S5      5      $ )NÚOÚIrÈ  r£  r¤   )	r1   r2   r  r   r»   rÚ  rÙ  Ústandalone_runtime_cuda_initr°   )rÊ  Úcommand_genÚcommand_lines      r€   Úconfig_hashÚHalideCodeCache.config_hash‰  sp   € ô !ØØÜ"›ñ
ˆð
 #×3Ñ3Ó5ˆÜØ�I‰Ià×)Ñ)Ø×*Ñ*Ø×4Ñ4Ø ð	ó÷ ‰f�W‹oó	
ð 		
r   c                ó”  • [         R                  R                  R                  S5      nUb  UR                  (       d  [        S5      e UR                  S   n[        R                  " U5       GH  nUR                  S5      (       d  M   [        R                  " S[        R                  R                  X45      /5      n[        R                  " SUR!                  S5      5      nU(       d  M�  [        R                  R                  [        R                  R#                  UR%                  S5      5      U 5      n[        R                  R'                  U5      (       d  Mó  [        R                  R#                  U5      s  $    [        U5      e! [        R                   a     GM9  f = f! [(         a  n[        U5      UeS nAff = f)	NÚhalidez$halide python bindings not installedr   rž  Úlddz(/.*)/libHalide.sor¤   rZ   )r  Ú	machineryÚ
PathFinderr  r  r«   r¹   rÊ  r¢  r¦  Úcheck_outputrº   r»   ÚSubprocessErrorr¼  Úsearchr  r&  Úgroupr  rÍ  )	r>  Úerrmsgr  rð  rW  ÚoutÚmrº   rQ  s	            r€   Ú_search_for_fileÚ HalideCodeCache._search_for_file�  sM  € ä×"Ñ"×-Ñ-×7Ñ7¸ÓAˆØ‰<˜t×>×>ÜÐEÓFÐFð	.Ø×4Ñ4°QÑ7ˆFÜŸ
š
 6×*�Ø—=‘= ×'Ó'ð!Ü(×5Ò5Ø"¤B§G¡G§L¡L°Ó$>Ð?ó˜ô
 Ÿ	š	Ð"7¸¿¹ÀGÓ9LÓM�Aß�qÜ!Ÿw™wŸ|™|¬B¯G©G¯O©O¸A¿G¹GÀA»JÓ,GÈÓP˜ÜŸ7™7Ÿ>™>¨$×/Ó/Ü#%§7¡7§?¡?°4Ó#8Ò8ñ +ô ˜6Ó"Ð"øô &×5Ñ5ó !Û ð!ûô ó 	.Ü˜vÓ&¨AÐ-ûð	.úsO   Á
=F, Â5FÃ+F, Ã0A.F, Å" F, ÆF, ÆF)Æ$F, Æ(F)Æ)F, Æ,
GÆ6GÇGc                ó6  • SU R                  5        S3nS[        R                  ;   aW  [        R                  R	                  [        R                  S   U5      n[        R                  R                  U5      (       a  U$ SU S3n[        R                  X5      $ )NÚlibautoschedule_rž  Ú
HALIDE_LIBúCan't find z3, set env HALIDE_LIB to the directory containing it)r  r¹   r…  rº   r»   r  r²  rõ  )r¡   Úsofilerº   rò  s       r€   Úfind_libautoscheduleÚ$HalideCodeCache.find_libautoscheduleµ  s~   € ð $ D§J¡J£L >°Ð5ˆØœ2Ÿ:™:Ó%Ü—7‘7—<‘<¤§
¡
¨<Ñ 8¸&ÓAˆDÜ�w‰w�~‰~˜d×#Ñ#Ø�à˜&˜Ð!TÐUð 	ô ×/Ñ/°Ó?Ð?r   c                ó,  • S[         R                  ;   aW  [         R                  R                  [         R                  S   U 5      n[         R                  R	                  U5      (       a  U$ S[         R                  ;   aw  [         R                  R                  [         R                  R                  [         R                  S   SU  35      5      n[         R                  R	                  U5      (       a  U$ SU  S3n[        R                  SU  3U5      $ )NÚHALIDE_INCLUDErù  z../include/rú  z7, set env HALIDE_INCLUDE to the directory containing it)r¹   r…  rº   r»   r  r&  r²  rõ  )r¡   rº   rò  s      r€   rÛ  ÚHalideCodeCache.find_headerÂ  sÎ   € ð œrŸz™zÓ)Ü—7‘7—<‘<¤§
¡
Ð+;Ñ <¸dÓCˆDÜ�w‰w�~‰~˜d×#Ñ#Ø�Øœ2Ÿ:™:Ó%Ü—7‘7—?‘?Ü—‘—‘œRŸZ™Z¨Ñ5¸ÀTÀFÐ7KÓLóˆDô �w‰w�~‰~˜d×#Ñ#Ø�à˜$˜ÐVÐWð 	ô ×/Ñ/°+¸d¸VÐ0DÀfÓMÐMr   c                ód  ^^• [        [        [        U[        U R	                  5       U45      S9S5      S   5      n[
        R                  " USS9  S m[        US-  5      n[        US-  5      n[        US-  5      n[        US	-  5      n[        US
-  5      n	[
        R                  R                  U5      (       + n
/ nU
(       a¶  [        XR5        [        R                  USSSU SSSS/
nUR                  (       a,  UR                  SU R                  UR                  5      /5        UR                  UR!                  5       5        UR#                  [$        R&                  " [(        R*                  U5      5        UR,                   Vs/ s H!  oÝR.                  b  M  UR1                  5       PM#     nnUR3                  5       (       a  UR#                  S5        U R5                  UU R7                  X5      X`R9                  5       4U
(       a  UR"                  OS UR3                  5       (       a  SOSS9mU
(       af  UR#                  [$        R&                  " [:        U5      5        [$        R&                  " [<        X›5      nU(       a  U" U5      R>                  mOU" 5         SUU4S jjnU$ s  snf )NrX  rê  é   Tr  zgenerate_kernel.pyzhalide_kernel.azhalide_kernel.hÚdonerÄ  z-grŽ  ú-oz-fÚhalide_kernelz-ezstatic_library,h,schedulez-pÚ	uintptr_trƒ   rË  )rS  rc  r˜   c                 ó.   >• T(       a  T" 5         T " 5       $ r¿   r~   )Úbindings_futureÚwait_for_compiles   €€r€   rÇ   Ú3HalideCodeCache.generate_halide_async.<locals>.load  s   ø€ ÞÙ Ô"Ù"Ó$Ð$r   )rÖ   úCallable[[], Any]) r   r2  r)  r7  rç  r¹   r  r“   rº   r  rÓ   r�   Ú
executableÚ	schedulerr¯  rü  r  rí  rß   r   r¦  Ú
check_callr¢  r¾  rÏ  r1  r¥  rß  Úbuild_standalone_runtimeÚtouchÚ_worker_task_halider  )rÊ  rˆ  r7  rc  ÚdirpathÚgenfileÚlibfilerÒ  ÚdonefileÚlockfileÚneed_compileÚjobsrï  r	  Úbinding_typesÚtaskrÇ   r  r	  s                    @@r€   Úgenerate_halide_asyncÚ%HalideCodeCache.generate_halide_asyncÔ  sN  ù€ ô ÜÜØÜ §¡Ó 1°4Ð8Ó9ñð óð ñó
ˆô 	�Š�G dÒ+ØÐÜ�gÐ 4Ñ4Ó5ˆÜ�gÐ 1Ñ1Ó2ˆÜ˜Ð#4Ñ4Ó5ˆ
Ü�w Ñ'Ó(ˆÜ�w Ñ'Ó(ˆÜŸ7™7Ÿ>™>¨(Ó3Ô3ˆØˆÞÜ˜Ô.ä—‘ØØØØØ�)ØØØØ+ðˆCð �~�~Ø—
‘
˜D #×":Ñ":¸4¿>¹>Ó"JÐKÔLØ�J‰J�t—y‘y“{Ô#Ø�K‰Kœ	×)Ò)¬*×*?Ñ*?ÀÓEÔFð ,0¯=ª=ó
Ú+8 C¿L¹LÓˆC×ÑÖ©=ð 	ð 
ð �<‰<�>‰>Ø× Ñ  Ô-Ø×2Ñ2ØØ×Ñ˜dÓ/Ø ×">Ñ">Ó"@ÐAÞ%1�d—k’k°tØ"&§,¡,§.¡.™°eð 3ð 
ˆö Ø�K‰Kœ	×)Ò)¬%°Ó:Ô;Ü×$Ò$Ô%8¸(ÓIˆDÞÙ#,¨T£?×#9Ñ#9Ñ á”÷	%ð 	%ð
 ˆùò5
s   Æ
J-ÆJ-c                ó0   • U R                   " U0 UD6" 5       $ r¿   )r  rt  s      r€   Úgenerate_halideÚHalideCodeCache.generate_halide  s   € à×(Ò(¨$Ð9°&Ò9Ó;Ð;r   c           
     óÄ  • U R                   (       a:  [        R                  R                  U R                   5      (       a  U R                   $ [        R
                  R                  5       (       a  SOSnSnUS:X  a  SOSnU R                   (       a;  [        R                  R                  U R                   5      (       a   e[        5       nO
[        5       n[        U5      SU SU R                  5        3-  n[        R                  " USS	9  [        US
-  5      n[        US-  5      n[        US-  5      n[        US-  5      n	[        XR-  5      n
[        R                  R                  U5      (       Gd  SS KnSSKJn  U" U[         5         [        R                  R                  U5      (       dØ  [#        US5       nUS:X  a9  UR%                  U R&                  R)                  U R+                  S5      5      5        S S S 5        UR-                  X›R/                  U5      5        [1        U
5      u  pï[3        UX‰/U[5        US9S9n[6        R8                  " [:        R<                  " UR?                  5       5      5        [A        U5        S S S 5        [        R                  R                  U
5      (       d   eX l         U
$ ! , (       d  f       NÈ= f! , (       d  f       NM= f)Nrƒ   rË  zlibStandaloneHalideRuntime.soz	host-cudarÁ  zhalide-runtime-Ú-Tr  r  rÄ  z	hooks.cppzstandalone_halide_runtime.ar   r(  rT  rÍ  )r˜   r  )!r³  r¹   rº   r  r{   rƒ   rg  rC   rB   r   rç  r  r“   rê  r„  r)  r…  rÆ   rY  rä  r   rÛ  Úcompile_standalone_runtimeÚTargetr6   r1   r3   r¦  r  Úshlexr£  r  r  )rÊ  r˜   Úlibnamerc  Úbaser  Ú	done_fileÚ	lock_fileÚ	hook_fileÚa_fileÚso_fileÚhlr)  rt  r¡   r  Úhalide_cmd_gens                    r€   r  Ú(HalideCodeCache.build_standalone_runtime  sE  € à×'×'¬B¯G©G¯N©NØ×(Ñ(÷-
ñ -
ð ×/Ñ/Ð/Ü %§
¡
× 7Ñ 7× 9Ñ 9‘f¸uˆØ1ˆØ +¨vÓ 5‘¸6ˆØ×'×'Ü—w‘w—~‘~ c×&BÑ&B×CÑCÐCÐCô
 %Ó&‰Dä“;ˆDÜ�t“* °°¸¸#¿/¹/Ó:KÐ9LÐMÑMˆÜ
�Š�G dÒ+Ü˜ &Ñ(Ó)ˆ	Ü˜ &Ñ(Ó)ˆ	Ü˜ +Ñ-Ó.ˆ	Ü�WÐ<Ñ<Ó=ˆÜ�gÑ'Ó(ˆÜ�w‰w�~‰~˜i×(Ò(Ûå6á˜)¤\Õ2Ü—w‘w—~‘~ i×0Ñ0Ü˜i¨Ô-°Ø&¨&Ó0ØŸG™GØ #× @Ñ @× GÑ GØ$'§O¡OÐ4IÓ$Jó!"ô÷ .ð ×1Ñ1°&¿)¹)ÀFÓ:KÔLä'MÈgÓ'VÑ$�DÜ%/Ø!Ø!*Ð 3Ø#-Ü$9Ø(3ñ%ñ	&�Nô ×)Ò)ÜŸš N×$CÑ$CÓ$EÓFôô ˜)Ô$÷1 3ô2 �w‰w�~‰~˜g×&Ñ&Ð&Ð&Ø'.Ô$Øˆ÷3 .Õ-ú÷ 3Õ2ús&   Æ1KÆ>A K Ç>BKË 
K	Ë
KË
Kc                ó   • g)z5Header precompiling is currently disabled for halide.Nr~   rO  s     r€   rP  Ú&HalideCodeCache._get_uncompiled_headerX  s   € ð r   r~   )r¡   r“   r	  rq   rƒ   r  rÖ   rû  )rˆ  rr   rÒ  ÚobjectrÖ   r“   rù  )r>  r“   rò  r“   rÖ   r“   )r¡   r“   rÖ   r“   r¿   )rˆ  rr   r7  r“   rc  r   rÖ   r  )r  r   ra  r   rÖ   r  rv  )rÚ   rÛ   rÜ   rÝ   r¸   r{  rÞ   r  rÀ  r³  rª  r«  r  rÚ  rÙ  rä  rï  rÅ  rß  rß   rç  rõ  rü  rÛ  r  r  r  rP  rà   r~   r   r€   r²  r²  õ  s§  ‡ à8:€EÐ5Ó:Ù˜uŸ{™{Ó+€KØ+/Ð˜jÓ/Ø�_Š_ð	ó€Fð&  §¢ð	ó"ñ Ðð   (§/¢/ð		ó#ñ Ðð $,§?¢?ð	ó$Ð ðB ó!
ó ð!
ðF óó ððB Ø‡_�_ó
ó ó ð
ð$ ó#ó ð#ð. Ø‡_�_ó	@ó ó ð	@ð Ø‡_�_óNó ó ðNð  àBFðBØðBØ,/ðBØ<?ðBà	ôBó ðBðH ó<ó ð<ð ó8ó ð8ðt óó ór   r²  c                óœ  • SSK Jn   U" U [        5         U H
  nU" 5         M     S S S 5        g ! , (       d  f       g = f! [        R                   Gav  n[
        R                  R                  S5      S:X  GaL  [        USS5      tpVn[
        R                  R                  U5      R                  S5      (       Ga	  [        U5      R                  5       nSn	UR                  U	5      S	:X  d   e " S
 S5      n
UR                  S5      n[!        U["        5      (       d   eU
" 5       X{S	-   '   [$        R&                  " [$        R(                  " SS/UQ< S35      S5      nUR+                  Xœ5      n[-        SS5       nUR/                  UR1                  5       5        S S S 5        O! , (       d  f       O= f[3        SU 35      Uee S nAff = f)Nr   r(  ÚHALIDE_REPROÚ1rï  )r‡   r‡   r‡   Úpythonz    hl.main()rZ   c                  ó   • \ rS rSrSS jrSrg)Ú _worker_task_halide.<locals>.Outin  c                ó   • g)Nró  r~   rÀ   s    r€   Ú__repr__Ú)_worker_task_halide.<locals>.Out.__repr__o  s   € Ø$r   r~   Nrù  )rÚ   rÛ   rÜ   rÝ   r9  rà   r~   r   r€   ÚOutr7  n  s   † ÷%r   r;  r  z—                        import sys, tempfile
                        with tempfile.TemporaryDirectory() as out:
                            sys.argv = zrepro.pyz?
                            hl.main()
                        rÌ  rT  zwrote repro.py: )r„  r)  r…  r¦  rï  r¹   r…  r÷   rg  rº   r.  rË  r   Ú	read_textÚcountÚindexr#  r®  rª  rÐ   r«  r†  rÆ   rY  rØ  r«   )r  r  r)  ÚjobrQ  r5  Úscriptrï  r%  Úmainr;  ÚciÚreplÚfds                 r€   r  r  ^  s†  € Ý.ð$Ù�h¤Õ-Û�Ù–ñ ÷ .×-Ö-ûô ×%Ñ%ô  Ü�:‰:�>‰>˜.Ó)¨SÔ0ä#*¨1¨e°\Ó#BÐ ˆF˜SÜ�w‰w×Ñ Ó'×2Ñ2°8×<Ò<Ü˜F“|×-Ñ-Ó/�Ø&�Ø—z‘z $Ó'¨1Ó,Ð,Ð,÷%ñ %ð —Y‘Y˜t“_�Ü! "¤c×*Ñ*Ð*Ð*á!›e�˜‘F‘Ü—’Ü—O’Oð(ð *4Ð(:°cÐ(:Ñ'=ð >ðóð ó
�ð —|‘| DÓ/�Ü˜* cÔ*¨bØ—H‘H˜TŸ[™[›]Ô+÷ +×*Ö*úä"Ð%5°a°SÐ#9Ó:ÀÐAØûðA úsG   ˆA  •/¦A  ¯
=¹A  ½A  Á GÁD'GÅ< F%Æ	GÆ%
F3	Æ/GÇGc                óR   • [        U S5          S S S 5        g ! , (       d  f       g = f)Nr\  )rÆ   )r$  s    r€   r  r  ˆ  s   € Ü	ˆh˜Õ	Ø÷ 
×	Ö	ús   �˜
&c                  óô   • \ rS rSr% / rS\S'   0 rS\S'   0 rS\S'   \SSS jj5       r	\SSS	 jj5       r
\  S         SS jj5       r\SSS jj5       r\\R                        SS j5       5       rSrg
)ÚPyCodeCachei�  zlist[ModuleType]rZ  zdict[str, ModuleType]Úmodules_no_attrz dict[str, list[tuple[Any, ...]]]Úlinemapsc                ó   • [        USUS9$ ©NÚpyrX  r\  )rÊ  r7  r&  s      r€   rY  ÚPyCodeCache.write›  s   € ä�[ $¨eÑ4Ð4r   c                ó>   • [        USUS9u  p4U R                  X45      $ rK  )rY  Úload_by_key_path)rÊ  r7  r&  rç   rº   s        r€   rÇ   ÚPyCodeCache.loadŸ  s#   € ä˜+ t°5Ñ9‰	ˆØ×#Ñ# CÓ.Ð.r   Nc                óz  • Uc  / nUc  X R                   ;   a  U R                   U   $ [        5       n[        XUS9nU(       a  [        [	        U6 5      U R
                  U'   Ub%  UR                  5        H  u  px[        XgU5        M     U(       a,  Uc  X`R                   U'   U R                  R                  U5        U$ )N)Úset_sys_modules)
rH  r,   rA   rë  r  rI  r
  ÚsetattrrZ  rí  )	rÊ  rç   rº   ÚlinemapÚattrsÚin_toplevelÚmodrô  rõ  s	            r€   rO  ÚPyCodeCache.load_by_key_path¤  s²   € ð ‰?ØˆGð ‰=˜T×%8Ñ%8Ó8Ø×&Ñ& tÑ,Ð,ä)Ó+ˆÜ# C¸{ÑKˆö Ü!%¤c¨7 mÓ!4ˆC�L‰L˜ÑàÑØŸ™ž‘�Ü˜ Ö"ñ &ö à‰}Ø,/×#Ñ# DÑ)à�K‰K×Ñ˜sÔ#Øˆ
r   c                ó*  • U(       aG  U R                    H7  n UR                  (       d   e[        R                  " UR                  5        M9     U R                   R                  5         U R                  R                  5         g! [         a     M}  f = f)zj
Clear the in-memory module cache. If purge=True, also delete all the
corresponding on-disk source files.
N)rZ  r)  r¹   ro  r—  r  rH  )rÊ  ÚpurgerW  s      r€   rÀ  ÚPyCodeCache.cache_clearÆ  sn   € ö Ø—{”{�ðØŸ<Ÿ<Ð'˜<Ü—I’I˜cŸl™lÖ+ñ #ð 	�‰×ÑÔØ×Ñ×!Ñ!Õ#øô )ó Úðús   ˜3BÂ
BÂBc                óÚ   • XR                   ;  a  g [        U R                   U   5      S:X  a  g U R                   U   u  p4[        X25      nUS:X  a  g XES-
     nU(       d  g SS jnU" U5      $ )Nr   rZ   c           	     ó    • Sn[         R                  " X5      n[        U5       VVVs/ s H  u  p4nU[        U5      US.PM     snnn$ s  snnnf )Nz"File "(.+)", line (\d+), in (.+)\n)r$  rÜ  r¡   )r¼  ÚfindallÚreversedr®  )Ústack_traceÚregexÚmatchesrt  Úlr”  s         r€   Úparse_stack_traceÚ<PyCodeCache.stack_frames_for_code.<locals>.parse_stack_traceè  sR   € ð :ˆEÜ—j’j Ó4ˆGô  (¨Ô0õâ0‘G�A˜!ð ¬¨A«¸Ô:Ù0óð ùô s   ¨A	)r`  r“   rÖ   zlist[dict[str, Any]])rI  rä  r   )rÊ  rº   Úlinenorð  rh  rw  Úentryrd  s           r€   Ústack_frames_for_codeÚ!PyCodeCache.stack_frames_for_codeÖ  sq   € ð
 —|‘|Ó#ØÜˆs�|‰|˜DÑ!Ó" aÓ'Øà—|‘| DÑ)‰ˆÜ˜Ó'ˆØ�‹6ØØ˜!‘e‘ˆÞØô	ñ ! Ó'Ð'r   r~   ©r‡   )r7  r“   r&  r“   rÖ   r  )r7  r“   r&  r“   rÖ   r   r¾  )
rç   r“   rº   r“   rT  zlist[tuple[int, str]] | NonerU  rð   rÖ   r   rø  )rZ  r  rÖ   rÙ   )rº   r“   rf  r®  rÖ   zlist[dict[str, Any]] | None)rÚ   rÛ   rÜ   rÝ   rZ  r{  rH  rI  rï  rY  rÇ   rO  rÀ  rß   r¸   rh  rà   r~   r   r€   rG  rG  �  sæ   ‡ ð !#€GÐÓ"ð .0€OÐ*Ó/à13€HÐ.Ó3àõ5ó ð5ð õ/ó ð/ð ð
 15Ø'+ðàðð ðð .ð	ð
 %ðð 
ôó ððB õ$ó ð$ð Ø‡_�_ð(Øð(Ø #ð(à	$ó(ó ó ó(r   rG  c                ó@   • [        [        R                  U5      U 5      $ r¿   )rg  rG  rÇ   )rë  r7  s     r€   Ú_load_triton_kernel_from_sourcerl  õ  s   € ô ”;×#Ñ# KÓ0°+Ó>Ð>r   c                 óà  • [         R                  " 5       (       a]  [        R                  R	                  SS5       n [        U 5       nUR                  5       R                  5       sSSS5        sSSS5        $ [        R                  " 5       n[        [         R                  R                  /SU5        UR                  5       $ ! , (       d  f       O= f SSS5        Mg  ! , (       d  f       Nu= f)zn
Compute a key representing the state of the CUTLASS library.

Note: OSS and fbcode will have different keys.
Úcutlass_libraryzsrc_hash.txtNr‡   )r#   r2  r  Ú	resourcesrº   rÆ   r	  r°   r¬   r­   r  ÚcutlassÚcutlass_dirr  )Úresource_pathÚresource_fileÚcombined_hashs      r€   Úcutlass_keyru  û  s²   € ô ×Ò×Ñä×Ñ×$Ñ$Ø! >ôàÜ�Ô =à ×%Ñ%Ó'×.Ñ.Ó0÷  Ð÷ñ ô —N’NÓ$€MÜ”V—^‘^×/Ñ/Ð0°"°mÔDØ×ÑÓ!Ð!÷  ÕúÐ÷÷ ÷ ús#   »CÁCÁ%	CÃ
C	ÃCÃ
C-c                  óf   • \ rS rSrSr    SS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)Ú
DLLWrapperi  z A wrapper for a dynamic library.c                ób   • Xl         SU l        [        R                  " U5      U l        SU l        g )NFT)Úlib_pathÚis_openr   rE  ÚDLL)rÁ   ry  s     r€   rÂ   ÚDLLWrapper.__init__  s)   € ð !ŒØˆŒÜ×#Ò# HÓ-ˆŒØˆ�r   c                óV   • U R                   (       a  U R                  5         SU l         g g )NF)rz  Ú_dlcloserÀ   s    r€   rJ  ÚDLLWrapper.close  s   € Ø�<�<Ø�M‰MŒOØ ˆD�Lð r   c                óX  • S n[        5       (       aE  [        S 5      n[        US5      (       d  [        S5      n[        US5      (       a  UR                  nO;[	        5       (       a!  SS KnUR                  SSS9nUR                  nO[        S5      eUb�  [        5       (       a)  [        /Ul	        U" U R                  R                  5        g [	        5       (       a9  SS KnSSKJn  UR                  /Ul	        U" U R                  R                  5        g g [        R                  S	5        g )
NÚdlclosezlibc.sor   rv  T)Úuse_last_errorz&Unsupported env, failed to do dlclose!)ÚwintypeszKdll unloading function was not found, library may not be unloaded properly!)rG   r   r„  r�  rH   r;  ÚFreeLibraryr½  r   r¢  r{  Ú_handlerƒ  ÚHMODULErÙ  rÚ  )rÁ   Ú	f_dlcloseÚsymsr;  rv  rƒ  s         r€   r~  ÚDLLWrapper._dlclose!  sæ   € Øˆ	ä�:‰:Ü˜“:ˆDÜ˜4 ×+Ñ+ä˜I“�ä�t˜Y×'Ñ'Ø ŸL™L�	øÜ�\‰\Ûà—{‘{ :¸d�{ÐCˆHà ×,Ñ,‰Iä%Ð&NÓOÐOàÑ Ü�z‰zÜ&. Z�	Ô"Ù˜$Ÿ(™(×*Ñ*Õ+Ü—‘ÛÝ+à&.×&6Ñ&6Ð%7�	Ô"Ù˜$Ÿ(™(×*Ñ*Õ+ð ô �K‰KØ]õr   c                ó–   ^• U R                   (       d  [        SU R                   35      e[        U R                  U5      mSU4S jjnU$ )NzCannot use closed DLL library: c                 óN   >• T" U 6 nU(       a  [        STR                   35      eg )NzError in function: )r«   rÚ   )r  ÚerrÚmethods     €r€   Ú_wrapped_funcÚ-DLLWrapper.__getattr__.<locals>._wrapped_funcJ  s,   ø€ Ù˜$�-ˆCÞÜ"Ð%8¸¿¹Ð8IÐ#JÓKÐKð r   ©r  r   rÖ   rÙ   )rz  r«   ry  rg  r{  )rÁ   r¡   rŽ  r�  s      @r€   Ú__getattr__ÚDLLWrapper.__getattr__D  s?   ø€ Ø�|�|ÜÐ!@ÀÇÁÀÐPÓQÐQä˜Ÿ™ 4Ó(ˆ÷	Lð
 Ðr   c                ó   • U $ r¿   r~   rÀ   s    r€   rG  ÚDLLWrapper.__enter__Q  s   € Øˆr   c                ó$   • U R                  5         g r¿   ©rJ  )rÁ   r  s     r€   rR  ÚDLLWrapper.__exit__T  ó   € Ø�
‰
�r   c                ó$   • U R                  5         g r¿   r–  rÀ   s    r€   Ú__del__ÚDLLWrapper.__del__W  r˜  r   )r{  rz  ry  N)ry  r“   rÖ   rÙ   rØ   )r¡   r“   rÖ   zCallable[..., None])rÖ   r   r�  )rÚ   rÛ   rÜ   rÝ   rU  rÂ   rJ  r~  r‘  rG  rR  rš  rà   r~   r   r€   rw  rw    s;   † Ù*ðàðð 
ôô!ô
!ôFôô÷r   rw  c                ó   • U S-   $ )z$
standard format for the error path
z.errorr~   )r¬  s    r€   Úbinary_error_pathr�  [  s   € ð
 ˜Ñ!Ð!r   c                  ó¸  • \ rS rSr% Sr\R                   " S S5      5       r0 rS\	S'   / r
S\	S'   S	rS
\	S'   S	rS
\	S'   \SS j5       r\\" SS9      SS j5       5       r\SS j5       r\ S         SS jj5       r\SS j5       r\\" S5      S S j5       5       r\ S       S!S jj5       r\S"S j5       r\ S             S#S jj5       rSrg)$ÚCUTLASSCodeCacheic  a.  
A cache for managing the compilation and loading source code specifically for CUTLASS.
This class handles writing source code to files, compiling them into shared objects, and caching
the results to avoid redundant compilations. It also manages error handling and logging for the
compilation process.
c                  ó8   • \ rS rSr% S\S'   S\S'   SrS\S'   Srg)	ÚCUTLASSCodeCache.CacheEntryik  r“   Ú
input_pathr¬  Nr¿  Ú
error_jsonr~   )rÚ   rÛ   rÜ   rÝ   r{  r£  rà   r~   r   r€   Ú
CacheEntryr¡  k  s   ‡ à‹ØÓØ!%ˆ
�JÖ%r   r¤  údict[str, CacheEntry]r¸   rû  r¢  r‡   r“   Ú_SOURCE_CODE_SUFFIXÚ_BACKENDc                ól   • U R                   R                  5         U R                  R                  5         g r¿   )r¸   r  r¢  r»  s    r€   rÀ  ÚCUTLASSCodeCache.cache_clearw  s"   € à�	‰	�‰ÔØ×Ñ×ÑÕ!r   rÎ   )Úmaxsizec                ó²   • U (       d  [         R                  S5        gU(       d  g SSKJn  U" 5       $ ! [         a    [         R                  S5         gf = f)a,  
Get or create the class instance of the CUTLASSKernelBinaryRemoteCache.

Args:
    caching_enabled: Whether binary remote caching is enabled
    caching_available: Whether we're in fbcode environment

Returns:
    CUTLASSKernelBinaryRemoteCache: The class instance of the kernel binary remote cache
z6CUTLASSKernelBinaryRemoteCache not requested, skippingNr   )ÚCUTLASSKernelBinaryRemoteCachezECUTLASSKernelBinaryRemoteCache not available, remote caching disabled)rÙ  r¤  Ú-torch._inductor.fb.kernel_binary_remote_cacher¬  rJ  )Úcaching_enabledÚcaching_availabler¬  s      r€   Úget_kernel_binary_remote_cacheÚ/CUTLASSCodeCache.get_kernel_binary_remote_cache|  sU   € ö Ü�I‰IÐNÔOØÞ Øð
	õñ 2Ó3Ð3øÜó 	Ü�I‰IØWôñ ð		ús   §4 ´AÁAc                ó   • [         er¿   r¼  r»  s    r€   Ú_use_re_buildÚCUTLASSCodeCache._use_re_build�  ó   € ä!Ð!r   Nc                ó   • [         er¿   r¼  ©rÊ  Ú	src_filesÚdst_fileÚdst_file_extÚ
extra_argss        r€   Ú_compile_commandÚ!CUTLASSCodeCache._compile_command¡  s
   € ô "Ð!r   c                ó   • [         er¿   r¼  r»  s    r€   Ú_source_code_extraÚ#CUTLASSCodeCache._source_code_extra«  rµ  r   c                óÒ   • [         R                  R                  (       a   [        U R	                  S/SU5      5      nUnOU R                  5       n[        XR                  US9u  pVXV4$ ©zˆ
Writes source code into a file with dst_file_ext as the file extension.
Returns the hash key of source code, and the path to the file.
Údummy_inputÚdummy_outputrX  )r#   rp  Úcutlass_hash_with_compile_cmdr7  r¼  r¿  rY  r¦  )rÊ  r7  rº  rÎ  r&  rç   r¢  s          r€   rY  ÚCUTLASSCodeCache.write¯  s`   € ô �>‰>×7×7Ü"Ø×$Ñ$ m _°nÀlÓSóˆOð $‰Eà×*Ñ*Ó,ˆEä ×-DÑ-DÈEÑR‰ˆØˆÐr   c                ól  • US:X  a/  U R                  USU5      u  n  nU R                  X5      u  pgU/Sp˜OU R                  X5      u  pgU/Sp˜Xb-   n
X R                  ;  GaÔ  SSKJn  [        5       nU" [        R                  R                  XÆS-   5      [        S9nU   US	[        U R                  5      *  U-   n[        U5      nU R                  [        R                  R                   =(       a    [        R"                  (       + [        R$                  " 5       S
9nUb  UR'                  Xï5        [        R                  R)                  U5      (       a¾  [+        USS9 nUR-                  5       nS	S	S	5        [.        R0                  " W5      u  nnUbI  [        R                  R2                  (       a*  UR5                  U[        R                  R6                  5        U R9                  X~U5      U R                  U
'   [:        R<                  " UU5      e[        R                  R)                  U5      (       Gdh  U R?                  XŽX#5      n[+        US5       nUR                  S5        UR                  SU R@                   SU	 SU S35        S	S	S	5        [C        5       n[D        RG                  SU R@                  U	U5        URI                  S5      n U RK                  5       (       aK  SSK&J'n  U" U[        R                  RQ                  U5      [        R                  RS                  U5      5        O3[T        RV                  " U[T        RX                  [        RZ                  S9   [C        5       nU R@                   SU	 SUU-
   SU 3n[D        Ri                  U5        O"[D        RG                  SU R@                  U	U5        UbI  [        R                  R2                  (       a*  UR5                  U[        R                  R6                  5        U R9                  X~S	5      U R                  U
'   S	S	S	5        U R                  U
   nURj                  bI  [.        R0                  " URj                  5      u  nn[:        R<                  " UURm                  S5      5      eU R                  U
   Rn                  Xg4$ ! , (       d  f       GNL= f! , (       d  f       GNA= f! [T        R\                   aV  nU R_                  UR`                  Rc                  S5      U
UUUU5        [:        R<                  " UUR`                  5      UeS	nAf[d         aV  nS[g        U5      ;   a@  U R_                  [g        U5      U
UUUU5        [:        R<                  " U[g        U5      5      UeUeS	nAff = f! , (       d  f       GN~= f)zÊ
Compiles CUDA source_code into a file with dst_file_ext extension.
If dst_file_ext is "so", first compiles to ".o" and then links to ".so".
Returns a tuple of dst_file_path, hash_key, source_code_path
ÚsorÄ  ÚLinkingÚCompilationr   r(  r*  r+  N)r®  r¯  r¤   rb  r\  r£  z// rU  z cmd
// z	%s %s: %s)Úrun_build_command)r«  ÚenvzCOMPILE FAILED WITHz took z seconds. Command: z-%s %s skipped: %s since output already exists)8rÿ  rY  r¸   r„  r)  r  r¹   rº   r»   r…  rä  r¦  r�  r°  r#   rp  Úuse_binary_remote_cacheÚforce_disable_cachesr2  r÷   r  rÆ   r	  r®   rÌ  Úupload_to_binary_remote_cachera  Úbinary_remote_cache_force_writer¤  r$   ÚCUDACompileErrorr¼  r§  r   rÙ  r¤  r£  r³  Útriton.fb.re_build_helperrË  r(  r.  r¦  rî  ÚSTDOUTr…  r¨  Ú_record_compile_errorÚoutputr  rÍ  r“   r±  r£  r°   r¬  )rÊ  r7  rº  r»  Úobj_pathrô   rç   r¢  r¸  Úoperation_nameÚkey_with_extr)  r  rÄ  r¬  Ú
error_pathÚbinary_remote_cacheÚfhr£  Ú	cmd_partsÚerror_outputrï  rt  Ú
start_timerË  ÚerrorÚend_timeÚlog_duration_msgÚcache_entrys                                r€   rÿ  ÚCUTLASSCodeCache.compileÂ  s¹  € ð ˜4Óà Ÿ[™[¨°c¸:ÓF‰NˆH�a˜Ø!Ÿi™i¨ÓB‰OˆCØ)1¨
°I‘~ð "Ÿi™i¨ÓB‰OˆCØ)3¨°m�~àÑ)ˆØŸy™yÔ(Ý6ä#“~ˆHÙœBŸG™GŸL™L¨¸±=ÓAÌ<ÑXˆDÚØ(Ð)H¬C°×0GÑ0GÓ,HÐ+HÐIÈLÑX�Ü.¨{Ó;�
Ø&)×&HÑ&HÜ$*§N¡N×$JÑ$J÷ %8Ü"×7Ñ7Ô7Ü&,×&6Ò&6Ó&8ð 'Ið 'Ð#ð
 'Ñ2ð (×+Ñ+¨KÔDä—7‘7—>‘> *×-Ñ-Ü˜j°7Ò;¸rØ%'§W¡W£Y˜
÷ <ä.2¯jªj¸Ó.DÑ+�I˜|à+Ñ7Ü"ŸN™N×H×Hð
 ,×/Ñ/Ø&¬¯©×(VÑ(Vôð /2¯n©nØ"°ó/�C—I‘I˜lÑ+ô ×.Ò.¨y¸,ÓGÐGÜ—w‘w—~‘~ k×2Ò2Ø×.Ñ.Ø!°ó�Cô ˜j¨#Ô.°!ØŸ™ œØŸ™ # c§l¡l ^°1°^Ð4DÀIÈcÈUÐRTÐ UÔV÷ /ô "&£�JÜ—I‘I˜k¨3¯<©<¸ÈÔMØ #§	¡	¨#£�Ið"$Ø×,Ñ,×.Ñ.ÝSá-Ø )Ü "§¡§¡°
Ó ;Ü "§¡× 0Ñ 0°Ó =õô '×3Ò3Ø )´*×2CÑ2CÌÏÉóô2  $›v�HØ*-¯,©,¨°q¸Ð8HÈÈxÐZdÑOdÐNeÐexÐy|Ðx}Ð'~Ð$Ü—H‘HÐ-Õ.ô —I‘IØGØŸ™Ø&Ø#ô	ð (Ñ3ÜŸ™×D×Dð (×+Ñ+Ø#¤V§^¡^×%SÑ%Sôð +.¯.©.¸ÐRVÓ*W�—	‘	˜,Ñ'÷A ðD 47·9±9¸\Ñ3JˆØ×!Ñ!Ñ-ä&*§j¢j°×1GÑ1GÓ&HÑ#ˆI�|Ü×&Ò& y°,×2EÑ2EÀgÓ2NÓOÐOØ—	‘	˜,Ñ'×3Ñ3°SÐEÐE÷s <Ö;ú÷* /Ö.ûô& &×8Ñ8ó 	WØ×1Ñ1Ø!ŸL™L×/Ñ/°Ó8Ø(Ø%Ø&Ø'Ø/ôô "×2Ò2°9¸e¿l¹lÓKÐQVÐVûÜ$ó $Ø0´C¸³JÓ>Ø×5Ñ5Ü # E£
Ø ,Ø )Ø *Ø +Ø 3ôô #&×"6Ò"6°yÄ#ÀeÃ*Ó"MÐSXÐXØ#˜ûð$ú÷A –ús   ÂCV$ÅR5Å0C&V$É7SÊAV$ËASÌ2V$Ì32SÍ%CV$Ò5
S	Ò?V$Ó
S	ÓV$ÓV!Ó-AT>Ô>V!ÕAVÖV!Ö!V$Ö$
V3c                ór   • US:w  a  [        SU SU 35      eU R                  X5      u  p4n[        U5      XE4$ ©zr
Compiles source code and loads the generated .so file.
Returns a tuple of DLLWrapper, hash_key, source_code_path
rÈ  zCOnly support loading a .so file for now. Requested file extension: z. Source code: ©r«   rÿ  rw  ©rÊ  r7  rº  Údst_file_pathrö   Úsource_code_paths         r€   rÇ   ÚCUTLASSCodeCache.loadD  óZ   € ð ˜4ÓÜð-Ø-9¨N¸/È+ÈðXóð ð 58·K±KØó5
Ñ1ˆÐ!1ô ˜=Ó)¨8ÐFÐFr   c                óŽ  • [         R                  " X1/5      nU R                  XEU5      U R                  U'   [	        U5      n[        USSS9 n	U	R                  U5        S S S 5        UbK  [        R                  R                  (       a+  UR                  U[        R                  R                  5        g g g ! , (       d  f       N]= f)NrT  r¤   rb  )r®   r¯   r¤  r¸   r�  rÆ   rY  r#   rp  rÏ  ra  rÐ  )
rÊ  Ú	error_strrØ  rÜ  r¢  r¬  rÚ  r£  rÙ  rÛ  s
             r€   rÔ  Ú&CUTLASSCodeCache._record_compile_errorU  sœ   € ô —Z’Z Ð 6Ó7ˆ
Ø"%§.¡.°È*Ó"Uˆ�	‰	�,ÑÜ& {Ó3ˆ
Ü�*˜c¨GÒ4¸Ø�H‰H�ZÔ ÷ 5ð
  Ñ+Ü—‘×<×<à×#Ñ#ØœFŸN™N×JÑJõð =ð ,÷ 5Õ4ús   ÁB6Â6
Cr~   rØ   )r®  r  r¯  r  rÖ   r¡  ©rÖ   r  r¿   ©
r¸  rû  r¹  r“   rº  r“   r»  zOptional[list[str]]rÖ   r“   rù  ©r7  r“   rº  r“   rÖ   r  ©r7  r“   rº  r“   r»  úlist[str] | NonerÖ   útuple[str, str, str]©r7  r“   rº  r“   rÖ   ztuple[DLLWrapper, str, str])rí  r“   rØ  r“   rÜ  rû  r¢  r“   r¬  r“   rÚ  r   rÖ   rÙ   )rÚ   rÛ   rÜ   rÝ   rU  r…  Ú	dataclassr¤  r¸   r{  r¢  r¦  r§  rï  rÀ  rÞ   r
   r°  r³  r¼  r¿  rY  rÿ  rÇ   rÔ  rà   r~   r   r€   rŸ  rŸ  c  så  ‡ ñð ×Ñ÷&ð &ó ð&ð
 $&€EÐ Ó%Ø!€M�9Ó!à!Ð˜Ó!Ø€HˆcÓàó"ó ð"ð Ù�qÑðØðØ26ðà	óó ó ðð> ó"ó ð"ð ð +/ð"àð"ð ð"ð ð	"ð
 (ð"ð 
ô"ó ð"ð ó"ó ð"ð Ùˆtƒ_óó ó ðð" àQUðFØðFØ-0ðFØ>NðFà	ôFó ðFðB óGó ðGð  ð $(ðàðð ðð ð	ð
 ðð ðð !ðð 
ôó ór   rŸ  c                  óp   • \ rS rSrSrSr\S	S j5       r\ S
         SS jj5       r\SS j5       r	Sr
g)r¡  iq  ÚcuÚCUDAc                ó,   • [         R                  " 5       $ r¿   )r£  Úuse_re_buildr»  s    r€   r³  ÚCUDACodeCache._use_re_buildv  s   € ä!×.Ò.Ó0Ð0r   Nc                ó,   • [         R                  " XX4S9$ )N)r»  )r£  Úcuda_compile_commandr·  s        r€   r¼  ÚCUDACodeCache._compile_commandz  s   € ô "×6Ò6Ø ñ
ð 	
r   c                ó¦   • [        [        R                  " 5       [        R                  " 5       [        R                  " 5       [        5       /5      nU$ r¿   )r7  r£  r¥  Ú_nvcc_compiler_optionsÚ_nvcc_host_compiler_optionsru  )rÊ  r&  s     r€   r¿  Ú CUDACodeCache._source_code_extra†  sC   € äô #×1Ò1Ó3ä"×9Ò9Ó;ä"×>Ò>Ó@ä“ð
ó
ˆð ˆr   r~   rï  r¿   rð  rù  )rÚ   rÛ   rÜ   rÝ   r¦  r§  rï  r³  r¼  r¿  rà   r~   r   r€   r¡  r¡  q  s|   † àÐØ€Hàó1ó ð1ð ð +/ð	
àð	
ð ð	
ð ð		
ð
 (ð	
ð 
ô	
ó ð	
ð óó ór   r¡  c                  óÐ   • \ rS rSr% \R
                   " S S5      5       r0 rS\S'   / r	S\S'   Sr
S	r\SS
 j5       r\SS j5       r\ S       SS jj5       r\SS j5       rSrg)r   i˜  c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚROCmCodeCache.CacheEntryiš  r“   r¢  r¬  r~   N)rÚ   rÛ   rÜ   rÝ   r{  rà   r~   r   r€   r¤  r  š  s   ‡ à‹ØÖr   r¤  r¥  r¸   rû  r¢  rÓ  Fc                 ó|   • [         R                  R                  5         [         R                  R                  5         g r¿   )r   r¸   r  r¢  r~   r   r€   rÀ  ÚROCmCodeCache.cache_clear¤  s&   € ä×Ñ×!Ñ!Ô#Ü×#Ñ#×)Ñ)Õ+r   c                ób   • [        [        S/SU5      5      n[        XR                  US9u  pEXE4$ rÂ  )r7  r*   rY  r¦  )rÊ  r7  rº  Úcuda_commandrç   r¢  s         r€   rY  ÚROCmCodeCache.write©  s?   € ô Ü  - °.À,ÓOó
ˆô  Ø×0Ñ0¸ñ
‰ˆð ˆÐr   Nc                ó`  • U R                   (       d6  SU l         [        R                  [        [	        [        5       5      5      5        U R                  X5      u  pEX@R                  ;  Ga\  SSKJ	n  [        5       nU" [        R                  R                  XtS-   5      [        S9nU   US[        U R                   5      *  U-   n	[        R                  R#                  U	5      (       d�  [%        U/X’U5      n
['        5       nU
R)                  S5      n [*        R,                  " U[*        R.                  S[        R0                  S9n[        R                  S	U5        ['        5       nS
Xû-
   SU
 3n[        R;                  U5        O[        R                  SUU	5        [<        R?                  XY5      U R                  U'   SSS5        U R                  U   R@                  XE4$ ! [*        R2                   a&  n[4        R6                  " XÎR8                  5      UeSnAff = f! , (       d  f       Nf= f)z¶
Compiles source_code into a file with dst_file_ext extension,
using the compile command specific for the ROCm platform.
Returns a tuple of dst_file_path, hash_key, source_code_path
Tr   r(  r*  r+  NrU  )r«  r]  rÌ  zCompilation output: %szCompilation took z seconds. Compile command: z+Skip compiling %s: output %s already exists)!Ú_logged_compiler_versionrÙ  r¤  r4   r“   r+   rY  r¸   r„  r)  r  r¹   rº   r»   r…  rä  r¦  r  r*   r   r£  r¦  rî  rÓ  r…  r¨  r$   rÑ  rÕ  r±  r   r¤  r¬  )rÊ  r7  rº  r»  rç   r¢  r)  r  rÄ  r¬  rï  rÞ  rÜ  rÕ  rß  rà  rá  s                    r€   rÿ  ÚROCmCodeCache.compile¸  sÄ  € ð ×+×+Ø+/ˆCÔ(Ü�I‰IÔ/´´M³OÓ0DÓEÔFàŸ)™) KÓ>‰ˆØ—i‘iÔÝ6ä#“~ˆHÙœBŸG™GŸL™L¨¸±=ÓAÌ<ÑXˆDÚØ(Ð)H¬C°×0GÑ0GÓ,HÐ+HÐIÈLÑX�Ü—w‘w—~‘~ k×2Ñ2Ü.Ø#˜ kÀó�Cô "&£�JØ #§	¡	¨#£�Ið	WÜ!+×!8Ò!8Ø%Ü#-×#4Ñ#4Ø!%Ü "§
¡
ñ	"˜ô Ÿ	™	Ð":¸FÔCô  $›v�HØ):¸8Ñ;PÐ:QÐQlÐmpÐlqÐ'rÐ$Ü—H‘HÐ-Õ.ä—I‘IØEØ"Ø#ôô
 "/×!9Ñ!9¸*Ó!R�—	‘	˜#‘÷7 ð: —	‘	˜#‘×*Ñ*¨CÐ<Ð<øô &×8Ñ8ó WÜ!×2Ò2°9¿l¹lÓKÐQVÐVûðWú÷! •ús3   Â(A*HÄA	G"ÅA#HÇ"HÇ6!HÈHÈHÈ
H-c                ór   • US:w  a  [        SU SU 35      eU R                  X5      u  p4n[        U5      XE4$ rå  ræ  rç  s         r€   rÇ   ÚROCmCodeCache.loadê  rë  r   r~   rØ   rñ  r¿   rò  rõ  )rÚ   rÛ   rÜ   rÝ   r…  rö  r¤  r¸   r{  r¢  r¦  r  rÞ   rÀ  rï  rY  rÿ  rÇ   rà   r~   r   r€   r   r   ˜  s¶   ‡ à×Ñ÷ð ó ðð $&€EÐ Ó%Ø!€M�9Ó!ØÐØ$Ðàó,ó ð,ð óó ðð àQUð/=Øð/=Ø-0ð/=Ø>Nð/=à	ô/=ó ð/=ðb óGó óGr   r   c                  ó   • \ rS rSrSS jrSrg)ÚCodeCacheFutureiü  c                ó   • [         er¿   r¼  rÀ   s    r€   r  ÚCodeCacheFuture.resultý  s   € Ü!Ð!r   r~   N©rÖ   úCallable[..., Any])rÚ   rÛ   rÜ   rÝ   r  rà   r~   r   r€   r  r  ü  s   † ÷"r   r  c                  ó8   • \ rS rSr S     SS jjrSS jrSrg)	ÚLambdaFuturei  Nc                ó   • Xl         X l        g r¿   )Ú	result_fnr[  )rÁ   r  r[  s      r€   rÂ   ÚLambdaFuture.__init__  s   € ð #ŒØ�r   c                ó"   • U R                  5       $ r¿   )r  rÀ   s    r€   r  ÚLambdaFuture.result  s   € Ø�~‰~ÓÐr   )r[  r  r¿   )r  r  r[  zFuture[Any] | NonerÖ   rÙ   r  )rÚ   rÛ   rÜ   rÝ   rÂ   r  rà   r~   r   r€   r  r    s'   † àJNðØ+ðØ5Gðà	õ÷ r   r  c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚStaticAutotunerFuturei  zE
A statically launchable CachingAutotuner, loaded from TritonBundler
c                ó   • Xl         S U l        g r¿   )Ústatic_autotunerÚreload_kernel_from_src)rÁ   r!  s     r€   rÂ   ÚStaticAutotunerFuture.__init__  s   € à 0Ôð
 AEˆÕ#r   c                ó  • U R                   c   e[        S5         U R                  R                  U R                   S9  U R                  R	                  SU R                   S S9  U R                  sS S S 5        $ ! , (       d  f       g = f)Nz%StaticAutotunerFuture.warm_precompile)r"  F)Úwarm_cache_onlyÚreload_kernelÚstatic_triton_bundle_key)r"  r!   r!  Úrecheck_autotune_cacheÚ
precompilerÀ   s    r€   r  ÚStaticAutotunerFuture.result  s�   € Ø×*Ñ*Ñ6Ð6Ð6ÜÐAÕBØ×!Ñ!×8Ñ8Ø'+×'BÑ'Bð 9ñ ð ×!Ñ!×,Ñ,Ø %Ø"×9Ñ9Ø)-ð -ñ ð
 ×(Ñ(÷ C×B×Bús   ›AA9Á9
B)r"  r!  N)r!  rs   rÖ   rÙ   )rÖ   rs   )rÚ   rÛ   rÜ   rÝ   rU  rÂ   r  rà   r~   r   r€   r  r    s   † ñôE÷)r   r  rù  )r‰   r“   rÖ   r“   )r˜   r“   rÖ   zdict[str, str])r  r$  rÖ   r“   rj  )r%  ústr | bytesr&  r+  rÖ   r“   )r.  r“   r/  r“   r0  r“   rÖ   rô  )r‡   r%  )r8  r+  r&  r“   r9  r“   rÖ   r“   )r‡   r%  r‡   N)r8  r+  r/  r“   r&  r“   r9  r“   r0  r“   rç   r¿  rÖ   r  )r]  r“   rÖ   r“   )FF)
rp  r“   r8  r+  rÒ   r  rq  r  rÖ   rÙ   )r~  rb   rÖ   rb   )r‡  r   rÖ   rN   )r  ró  r  r“   r  zhashlib._HashrÖ   rÙ   )r  úCallable[[], bytes]rÖ   r,  r!  )
r£  rù  rR  rŸ  rU  rh   rd  r   rÖ   ztuple[str, list[str]])rµ  r®  rÖ   r®  )rº   r“   rÖ   r  )rý   r“   r  r   rÖ   z list[c_void_p] | c_void_p | None)r+  r“   r,  r“   rÎ  r   rÖ   r“   rv  rø  )r‰   r“   rÇ  r  rÖ   r“   )rk  r“   rz  zSequence[CppBuilder]rÖ   rÙ   )r  r“   r  zlist[partial[Any]]rÖ   rÙ   )r$  r“   rÖ   rÙ   )rë  r“   r7  r“   rÖ   rs   )r¬  r“   rÖ   r“   (  Ú
__future__r   r  r‘  r…  rß   r¬   r  Úimportlib.resourcesr�  r\  r®   Úloggingr¹   rÖ  r  r‘   r¼  r$  rm  r”  r¦  r�   rD  rª  ri  r®  Úbisectr   r   r;  r   r   r   Údatetimer	   r
   r   Úpathlibr   r   r   r   Útypesr   Útypingr   r   r   r   r   r   r   r   Útyping_extensionsr   r   r{   Útorch._library.opaque_objectr�  rÄ  Útorch.distributedr¬  r²  r   r   Útorch._dynamo.device_interfacer   Útorch._dynamo.excr   Útorch._dynamo.utilsr   r    r!   r"   Útorch._inductorr#   r$   r%   Útorch._inductor.codegen.commonr&   r'   r(   Útorch._inductor.codegen.cudar)   r£  Ú,torch._inductor.codegen.rocm.compile_commandr*   r+   Ú$torch._inductor.compile_worker.utilsr,   Útorch._inductor.cpp_builderr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   Útorch._inductor.cpu_vec_isar9   Ú!torch._inductor.custom_graph_passr:   r;   r<   r=   r>   Útorch._inductor.freezing_utilsr?   r@   Ú%torch._inductor.runtime.compile_tasksrA   Ú%torch._inductor.runtime.runtime_utilsrB   rC   Útorch._inductor.utilsrD   rE   rF   rG   rH   rI   Ú"torch._library.fake_class_registryrJ   Útorch._loggingrK   Útorch._subclasses.fake_tensorrL   rM   rN   Útorch._utils_internalrO   Útorch.compilerrS  Útorch.compiler._cacherP   rQ   rR   Ú)torch.export.pt2_archive._package_weightsrS   rT   Ú"torch.export.pt2_archive.constantsrU   Ú%torch.fx.experimental.symbolic_shapesrV   rW   rX   Útorch.utils._ordered_setrY   rv   r\   rÐ  r]   Úruntimer^   Úruntime.autotune_cacher_   Útriton_bundlerr`   Úvirtualizedra   rb   Úcollections.abcrc   rd   re   rf   Úconcurrent.futuresrg   r[  rh   r4  ri   r©  rk   Úirrl   rm   rn   ro   rp   Úruntime.hintsrq   rr   Úruntime.triton_heuristicsrs   rl  rt   rM  Úfile_lock_timeoutr…  Ú_loggingÚgetArtifactLoggerrÚ   r>  Úautotuning_logÚ	getLoggerrÙ  r�   rŠ   rš   rœ   râ   rò   r  r   r)  r2  r:  r<  rY  r^  rÓ   rö  rv  r  r‰  ÚPicklerr‹  r  r#  r6  r8  r:  rÍ  r«  rú  r¨  r¸  rº  Úregisterrñ  r‹  r¸   r¤  r¦  rÂ  r  r{  r  rº   r»   r(  r)  r�  r�  rŒ  rA  r*  r}  r­  r²  r  r  rG  rl  ru  rw  r�  rŸ  r¡  r   r  r  r  r~   r   r€   Ú<module>ra     si  ðÞ "ã Û Û Û Û Û Û Û 	Û Û Û Û 	Û Û Û Û 	Û Û Û Û Û 
Û Û Û Û Ý Ý ß 'Ñ 'Ý ß (Ý Ý *ß Ý ß X× XÓ Xß ,ã ß 4Ð 4Ý  ß  Ý CÝ '÷ó ÷ 1Ñ 0÷ñ õ
 M÷õ E÷÷ ÷ ó õ 5÷õ ÷ NÝ Gß N÷÷ õ @Ý +÷ñ õ
 3Ý ,÷ñ ÷
 PÝ Iß OÑ OÝ /å (Ý &Ý #Ý 8Ý )Ý ñ ˆCƒL€æßGÓGÝ)å,Ý-Ý$Ý ßAß5ß:Ý;Ý ð �l‰l˜gÑ%€Ø×'Ò'€à—.’.×2Ò2°8¸]ÓK€Ø—’×1Ò1°(¸LÓI€Ø×Ó˜Ó!€ôGôô÷>
ñ >
ôB'�ô 'ô24�iô 4ônôXö
*ð 9;ð"Øð"Ø!ð"Ø25ð"àõ"ö;÷"ñ "ðP ØØØðØðàðð ðð ð	ð
 ðð 
ðð õô&!ð Øð	Øðàðð ðð ð	ð
 
õð> ×Ò÷ð ó ðôô	ôI˜&Ÿ.š.ô IðXVØðVØ%(ðVØ2?ðVà	ôVô ð2 óXó ðXôB%ð ×Ò÷ð ó ðô˜ô ÷I,ñ I,ðXØðà'ðð  ðð #ð	ð
 ôô,!ô8Y'�7˜1‘:ô Y'ðx ×Òô˜Mó ó ðôp�< Ñ0ô pðf ‡‚óó ðð  ÷V ð V ó ðV ÷rsñ sðl €ˆ+Ó ô.Dðh �gŠg�lŠlÑ,Ó.Ð0EÓF€Ø—7’7—<’< ¨WÓ5Ð ð ‡‚ð<Øð<àð<ð ð<ð 	ó	<ó ð<ô~ö	ð ÷F1ð F1ó ðF1ðR	 Øð	 à&ð	 ð 
ô	 ð ô~; ó ~;ó ð~;ðB ôA/Ð4ó A/ó ðA/ðH ôeÐ0ó eó ñeõP'õTð
 ÷d(ð d(ó ñd(ðN?Øð?Ø#&ð?àõ?ð ó"ó ñ"÷(Hò HðV ó"ó ñ"÷Kò Kð\ ô#Ñ$ó #ó ñ#ðL ÷`Gð `Gó ñ`G÷F"ò "ô
 ‘?õ  ô)™Oö )r   